/[gxemul]/trunk/TODO
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/TODO

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 10 by dpavlin, Mon Oct 8 16:18:27 2007 UTC revision 26 by dpavlin, Mon Oct 8 16:20:10 2007 UTC
# Line 1  Line 1 
1  $Id: TODO,v 1.139 2005/06/23 06:55:43 debug Exp $  $Id: TODO,v 1.298 2006/06/25 11:08:04 debug Exp $
2    
3  Here's a short list of what I have left to do on GXemul. This file is a mess.  Hm. This file is in random order, and not all parts of it are up-to-date.
 Order is random. Don't trust it to be up-to-date.  
4    
5          Caches / memory hierarchies: (this is mostly MIPS-specific)  --------------
6                  o)  MIPS coproc.c: bits in config registers should reflect  
7                      correct cache sizes for _all_ CPU types. (currently only          x)  FIX THE NON-R3000 TRANSLATION CACHE INVALIDATION BOTTLENECKS!
8                      implemented for R4000, R1x000, and a few others)          x)  Find a way to get rid of the cpu_create_or_reset_tc in the
9                  o)  src/memory*.c: Implement correct cache emulation for              R2000/R3000 cache isolation code. (NetBSD works without it,
10                      all CPU types. (currently only R2000/R3000 is implemented)              but not Ultrix and Linux yet.)
11                      (per CPU, multiple levels should be possible,          x)  Formalize the statistics gathering stuff for dyntrans...
12                      associativity etc!)          x)  ... and use it to optimize MIPS dyntrans stuff.
13                  o)  R2000/R3000 isn't _100%_ correct, just almost correct :)          x)  Clock framework? Go through all clock devices, make sure they
14                  o)  Move the -S (fill mem with random) functionality into the              return correct data, and run at correct speeds!
15                      memory.c subsystem, not machine.c or wherever it is now          x)  Optimizations, continuing on 64-bit issues etc with dyntrans
16                  o)  ECC stuff, simulation of memory errors?  (Machine dependant)          x)  Dyntrans with SMP... lots of work to be done here.
17                  o)  More than 4GB of emulated RAM, when run on a 32-bit host?          x)  Dyntrans with cache emulation... lots of work here as well.
18                      (using manual swap-out of blocks to disk, ugly)          x)  Actually use the settings object, better debugger stuff, etc.
19                  o)  A global command line option should be used to turn          x)  Wait for new releases of NetBSD, and test with those.
20                      cache emulation on or off. When off, caches should be  
21                      faked like they are right now. When on, caches and  --------------
22                      memory latencies should be emulated as correctly as  
23                      possible.  SMP:
24            o)  dev_mp doesn't work well with dyntrans yet
25          Network layer:          o)  In general, IPIs, CAS, LL/SC etc must be made to work with dyntrans
26                  o)  Multiple networks per emulation, and let different  
27                      NICs in machines connect to different networks.  MIPS:
28                  o)  many other issues: see src/net.c          o)  Fix invalidate_asid so it works well for non-R3000 too!
29            x)  [Re]add an interrupt-asserted bit for MIPS, to speed up
30          CPU emulation:              interrupt handling slightly?
31                  o)  Binary translation:          +)  Print a warning on the first reserved instruction.
32                          +)  use an Intermediate Representation!          +)  Some more work on opcodes.
33                          +)  recursive translation?                  x) MIPS64 revision 2.
34                          +)  basic blocks instead of one-instruction? :)                  x) _MAYBE_ TX79 and R5900 actually differ in their
35                          +)  on Alpha: don't assume pca56-like byte load/store?                     opcodes? Check this carefully!
36                          +)  write backends for UltraSparc and MIPS          o)  Dyntrans: Count register updates are probably not 100% correct yet.
37                          +)  see src/bintrans.c for more info          o)  Dyntrans: SMP correctness
38                  o)  Dynamic-but-not-binary translation?          o)  Refactor code for performance and readability/maintainability.
39                  o)  All the non-MIPS modes need a bit of work.          o)  Instruction combinations? Possible candidates (but profile first!):
40                    o)  multiple loads/stores in a row
41          MIPS CPU emulation:                  o)  strlen, memset loops etc
42                  o)  Instructions:                  o)  compare + branch
43                          o)  Regression tests (see tests/README for more info):          o)  DROTR32 and similar MIPS64 rev 2 instructions, which have
44                                  o)  Floating point exception handling, and              a rotation bit which differs from previous ISAs.
45                                          add more instructions.          o)  EI and DI instructions for MIPS64/32 rev 2. NOTE: These are
46                                  o)  Finish the MIPS16 translator, and test it!              _NOT_ the same as for R5900!
47                                  o)  MIPS ISA I, II, III, IV          o)  R4000 and others:
48                                  o)  MIPS V (SIMD vector stuff?)                  x)  watchhi/watchlo exceptions, and other exception
49                                  o)  MDMX  (MIPS Digital Media Extension)                      handling details
50                                  o)  MIPS 3D          o)  R10000 and others:  (R12000, R14000 ?)
51                                  o)  MIPS MT (Multi-thread stuff) (What's this?)                  x)  memory space, exceptions, ...
52                          o)  Warn about mis-used bit fields (ie bits that                  x)  use cop0 framemask for tlb lookups
53                              should be all zeroes, warn about if they are not)!                      (http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi/hdwr/bks/SGI_Developer/books/R10K_UM/sgi_html/t5.Ver.2.0.book_284.html)
54                              Both for coprocessor registers and for instruction  
55                              opcodes.  Dyntrans:
56                          o)  the special2 stuff is a mess right now          x)  Move the mips_init_64bit_dummy_tables() etc calls into
57                          o)  warn and/or cause exceptions for unimplemented              src/cpu.c, for all 64-bit cpus?
58                              instructions (depending on CPU type)          x)  64-bit "phystranslation" lookup as in 32-bit mode? Would probably
59                  o)  R2000/R3000:                  help performance a bit.
60                          x)  R3000 "tri-byte stores". (What's this?)          x)  Common fatal_abort() function, which drops into the debugger
61                  o)  R4000 and others:                  without continuing.
62                          x)  watchhi/watchlo exceptions, and other exception          x)  INVALIDATION should cause translations in _all_ cpus to be
63                              handling details              invalidated, e.g. on a write to a write-protected page
64                  o)  R10000 and others:  (R12000, R14000 ?)              (containing code)
65                          x)  memory space, exceptions, ...          x)  better (formally defined) instr call statistics (-s command
66                          x)  use cop0 framemask for tlb lookups              line option?), multiple different types? (virtual pc, physical pc)
67                              (http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi/hdwr/bks/SGI_Developer/books/R10K_UM/sgi_html/t5.Ver.2.0.book_284.html)          x)  Call/return hints?
68                  o)  Implement load delays?  Warnings on interlocks.          x)  16-bit encodings? (MIPS16, ARM Thumb, SH3, ...)
69                  o)  Implement all coprocessor 0 bits / functions.          x)  H8?
70                          x)  coproc 0 selectors! (R4000 ?)          x)  Lots of other stuff: see src/cpus/README_DYNTRANS
71                  o)  R4300 (nintendo64, no mmu?), R5900 (playstation2, weird          x)  true recompilation backend? think carefully about this,
72                          TLB/cache? 128-bit GPRs, new instructions),              experiment in a separate project (not in GXemul)
73                          4K (note: NOT R4000), 5K (note: NOT R5000),          x)  Remove the dyntrans_alignment_check functionality; although
74                          R6000 (ISA II), R8000              it gives slightly higher peformance sometimes, it increases
75                  o)  Multi-cpu stuff:              the complexity of the code too much!
76                          +)  SGI's NUMA architecture. Study  
77                                  x)  Linux sources  Alpha:
78                                  x)  SGI's specs on NUMA address space          o)  Virtual memory (tlbs etc)
79                          +)  Ultrix?  NetBSD doesn't do SMP on MIPS yet :-(          o)  Get {NetBSD,OpenBSD,Linux}/alpha booting. :)
80                          +)  Own experiments with ycx2.  
81    SPARC:
82          Emulation of specific machines and devices:          o)  Add all registers (floating point, control regs etc)
83                  o)  Use same clock for all emulations and machines.          o)  Save/restore register windows etc!
84                  o)  Clean up the device stuff (registering of devices etc)          o)  Disassemly of some more instructions.
85                  o)  Various SCSI and IDE controllers          o)  Are sll etc 32-bit sign-extending or zero-extending?
86                  o)  PS/2-style keyboard controller (for several machines)          o)  Finish the cmp (subcc) flag computation code.
87                  o)  Generic busses;          o)  Finish the GDB register stuff.
88                          x)  PCI:  i/o and interrupts  
89                          x)  QBus-22 (DECsystem 5500, 5400?)  Debugger:
90                  o)  DECstations (pmax):          o)  How does SMP debugging work? Does it simply use "threads"?
91                          x)  ioasic                  What if the guest OS (running on an emulated SMP machine)
92                          x)  framebuffers:                  has a usertask running, with userland threads?
93                                  +)  better cursor support, overlays?,          o)  Try to make the debugger more modular and, if possible, reentrant!
94                                  +)  2D/3D acceleration, PX[G]          o)  Remove the emul command? (But show network info if showing
95                          x)  status words / control words, make this more                  machines?)
96                                  portable/cleaner          o)  Generalize the expression evaluator. (debugger_expr.c?)
97                          x)  scsi controller(s): sii, DMA for asc                  settable variables      ("show nr of instructions on average")
98                          x)  serial controllers: ssc, scc (and more work on dc?)                  emul[x]                 defaults to current emul
99                          x)  nvram on decstation 5000/125:  when using X11,                  machine[x]              defaults to current machine
100                                  set console=g or similar                  cpu[x]                  defaults to currently focused cpu
101                          x)  DECstation 5840? "xbi-based SMP"                  registers               cpu arch dependent (#-prefix)
102                  o)  SGI and ARC machines (sgimips, arc):                  symbols                 @-prefix
103                          x)  IP32 ("O2"): (Lots of stuff)                  numeric constants       decimal, hex, and octal ($-prefix)
104                                  +)  mec (ethernet)                  boolean                 yes,no, true,false
105                                  +)  pci                  operators (+ - * / % & | ^ !)
106                                  +)  ahc (scsi)                  parentheses for grouping subexpressions
107                                  +)  ps2 kbd                  NOTE: the change from % to # for register prefix!
108                                  +)  memory controller                  examples:
109                                  +)  framebuffer/graphics                                  emul[0].machine[2].cpu[0].pc
110                                  +)  caches                                  machine[test2].cpu[1].ra = main
111                          x)  more ARCBIOS stuff                                  settings.show_trace_tree = yes
112                          x)  Memory/interrupt controllers  
113                          x)  IP30 (Linux with graphics support?)                  Settings:
114                          x)  SMP / NUMA?  (SGI and various ARC machines)                          o)  Remove a setting.
115                  o)  Playstation 2:                          o)  Read/write a setting given a name. (Read as
116                          Hardware:  OHCI usb controller, keyboard, ...                              string and/or int64_t simultaneously?)
117                  o)  Less interesting platforms:  
118                          o)  newsmips:                  Help command should have subsections! One for "expressions",
119                                  o)  NetBSD/newsmips, get it to detect a "real"                  mirrored in the documentation, but the internal help should
120                                      model, right now everything is 100% bogus                  be the one that should be considered correct.
121                          o)  mipsco? (NetBSD)          o)  see src/debugger.c for more
122                          o)  wgrisc? (big endian R3000, in OpenBSD's attic)  
123                          o)  other embedded / evaluation MIPS boards  POWER/PowerPC:
124                          o)  Playstation 1? R3000A. Weird hardware?          x)  PPC optimizations; instr combs
125                                  No FPU, but something as coproc 2.          x)  64-bit stuff
126                          o)  Nintendo 64, http://www.nintendo.com/systems/n64/n64_specs.jsp          x)  find and fix the bug which causes NetBSD/macppc to fail after
127                                  (R4300, 4MB RAM, really weird memory map)              an install!
128            x)  macppc: adb controller; keyboard (for framebuffer mode)
129          File/disk handling:          x)  make OpenBSD/macppc work (PCI controller stuff)
130                  o)  Read function argument count and types from binaries? (ELF?)  
131                  o)  Better handling of tape files  Algor:
132            PCI and ISA and LOCAL interrupts! --> wdc could start working
133          Userland ABI emulation:          Add interrupt controller in dev_algor.c.
134                  o)  see src/useremul.c  
135    ARM:
136          Terminal based interactive debugger:          o)  try to get netbsd/evbarm 3.x running (iq80321)
137                  o)  see src/debugger.c          o)  make the xscale counter registers (ccnt) work
138            o)  make the ata controller usable for FreeBSD!
139          Terminal/console stuff:          o)  zaurus for openbsd...
140                  o)  allow emulated serial ports to be connected to the outside          o)  debian/cats crashes because of unimplemented coproc stuff.
141                      world in a more generic way, or even to other emulated              fix this?
142                      machines(!)  
143    Cache simulation:
144          Regression tests:  (Should be totally rewritten.)          o)  Separate from the CPU concept, so that multi-core CPUs sharing
145                  o)  see tests/              e.g. a L2 cache can be simulated (?)
146            o)  Instruction cache emulation is easiest (if separate from the
147          Save state of the whole emulated machine, to be able to load it back              data cache); similar hack as the S;I; hack in cpu_dyntrans.c.
148                  in later?  (Memory, all device's states, all registers and              NOTE: if the architecture has a delay slot, then an instruction
149                  so on.  Like taking a snapshot. (SimOS seems to do this,              slot can actually be executed as 2 instructions.
150                  according to its website.))          o)  Data cache emulation = harder; each arch's load/store routines
151                must include support? running one instruction at a time and
152          Better X-windows functionality:              having a cpu-dependant lookup function for each instruction
153                  o)  CLEAN UP the ugly event code              is another option (easier to implement, but very very slow).
154                  o)  Mouse clicks can be "missed" in the current system; this is  
155                      not good. They should be put on a stack of some kind.  Documentation:
156                  o)  More 2D and 3D framebuffer acceleration.          o)  machines, cpus, devices.
157                  o)  Non-resizable windows?  Or choose scaledown depending          o)  Automagic documentation generation:
158                          on size (and center the image, with a black border).                  x)  REMEMBER that several machines/devices can be in
159                  o)  Different scaledown on different windows?                          the same source file!
160                  o)  Switch scaledown during runtime? (Ala CTRL-ALT-plus/minus)          o)  Try to rewrite the install instructions for those machines
161                  o)  Keyboard and mouse events:              that use 3MAX into using CATS? (To remove the need to a raw
162                          x)  Do this for more machines than just DECstation              ffs partition using up all of the disk image.)
163                          x)  more X11 cursor keycodes  
164                          x)  Keys like CTRL, ALT, SHIFT do not get through  More generic out_of_memory error reporting, and check everywhere!
165                              by themselves (these are necessary for example          Causes: OpenBSD has low default limits for normal users.
166                              to change the font of an xterm in X in the                  Host is 32-bit? (32-bit hosts are limited to 4 GB or less
167                              emulator)                  of userspace memory.)
168                  o)  Generalize the framebuffer stuff by moving _ALL_ X11                  You are actually low on RAM. (As trivial as this might sound,
169                          specific code to src/x11.c!                  Unix systems usually allow processes to allocate virtual
170                    memory beyond the amount of RAM in the machine.)
171          Statistics:  (this could be interesting)  
172                  o)  Save to file and show graphics. It should be possible to  Breakpoints: 32-bit vs 64-bit sign extension for MIPS, warnings, etc.
173                      run gxemul after a simulation to just show the graphics,          Use the debugger's symbolic name stuff. (which will have to be
174                      or convert to a .ppm or .tga or similar.          extended soon to support stuff like  "2*x + symbol + y" etc. cool
175                  o)  memory accesses (to measure cache efficiency and          stuff)
176                          page coloring efficiency)  
177                  o)  nr of simultaneous ASIDs in use in the TLB, for MIPS  Sprite (guest OS for DECstation emulation)
178                  o)  percentage of time spent in different "states", such as          x)  Timing problems during bootup?
179                      running userland code, kernel code, or idling (for CPUs  
180                      that have such an instruction, or whenever the PC is  The Device subsystem:
181                      inside a specific idle-function (address range)).          x)  allow devices to be moved and/or changed in size (down to a
182                      Possible additional state (for example on R3000): caches              minimum size, etc, or up to a max size)
183                      disabled.          x)  keep track of interrupts and busses? actually, allowing any device
184                  o)  position of read/write on (SCSI) disks              to be a bus might be a nice idea.
185            x)  turn interrupt controllers into devices? :-)
186            x)  refactor various clocks/nvram/cmos into one device?
187    
188    Clocks:
189            x)  General framework for automagic clock adjustment for _all_
190                kinds of clocks and timers. (Which should be possible to turn
191                off, of course, like the way DECstation emulation works now.)
192    
193    PCI:
194            x)  last write was ffffffff ==> fix this, it should be used
195                together with a mask to get the correct bits. also, not ALL
196                bits are size bits! (lowest 4 vs lowest 2?)
197            x)  add support for address fixups
198            x)  generalize the interrupt routing stuff (lines etc). this should
199                be per machine? or per bus, that's better
200            x)  add a "pcn" NIC (AMD PCnet32 Lance 79c970 (PCI 1022:2000)),
201                could be useful for several machine modes (Malta, Algor, evbarm,
202                hp700?, macppc, etc.)
203    
204    Network layer:
205            o)  DHCP (for Debian and BSD installers :-)
206            o)  increase performance
207            o)  don't rely on NetBSD-ish usage
208            o)  Multiple networks per emulation, and let different
209                NICs in machines connect to different networks.
210            o)  many other issues: see src/net.c
211    
212    Busses:
213            o)  Redesign the entire "mainbus" concept!
214            o)  Busses should be placed in a hierarchical tree!
215            o)  Easily configurable interrupt routing in SMP systems.
216            o)  Specific clock/bus speeds, cpu speeds etc.
217            o)  Synchronization over network? or at least in dyntrans within
218                one emulated machine
219            o)  dev->bus: TurboChannel, PCMCIA, ADB?
220    
221    Config file parser:
222            o)  Rewrite it from scratch!
223            o)  Usage of any expression available through the debugger
224            o)  Support for running debugger commands (like the -c
225                command line option)
226    
227    Floating point layer:
228            o)  make it common enough to be used by _all_ emulation modes
229            o)  implement more stuff
230            o)  non-IEEE modes (i.e. x86)?
231    
232    Userland emulation:
233            x)  Lots of stuff; freebsd and netbsd (and linux?) syscalls.
234            x)  Dynamic linking? Hm.
235    
236    Sound:
237            x)  generic sound framework
238            x)  add one or more sound cards as devices
239    
240    ASC SCSI controller:
241            x)  NetBSD/arc 2.0 uses the ASC controller in a way which GXemul
242                cannot yet handle. (NetBSD 1.6.2 works ok.) (Possibly a problem
243                in NetBSD itself, http://mail-index.netbsd.org/source-changes/
244                2005/11/06/0024.html suggests that.)
245    
246    Caches / memory hierarchies: (this is mostly MIPS-specific)
247            o)  MIPS coproc.c: bits in config registers should reflect
248                correct cache sizes for _all_ CPU types. (currently only
249                implemented for R4000, R1x000, and a few others)
250            o)  src/memory*.c: Implement correct cache emulation for
251                all CPU types. (currently only R2000/R3000 is implemented)
252                (per CPU, multiple levels should be possible,
253                associativity etc!)
254            o)  R2000/R3000 isn't _100%_ correct, just almost correct :)
255            o)  Move the -S (fill mem with random) functionality into the
256                memory.c subsystem, not machine.c or wherever it is now
257            o)  ECC stuff, simulation of memory errors?  (Machine dependent)
258            o)  More than 4GB of emulated RAM, when run on a 32-bit host?
259                (using manual swap-out of blocks to disk, ugly)
260            o)  A global command line option should be used to turn
261                cache emulation on or off. When off, caches should be
262                faked like they are right now. When on, caches and
263                memory latencies should be emulated as correctly as
264                possible.
265    
266    File/disk/symbol handling:
267            o)  Better handling of tape files
268            o)  Read function argument count and types from binaries? (ELF?)
269            o)  Better demangling of C++ names. Note: GNU's C++ differs from e.g.
270                Microsoft's C++, so multiple schemes must be possible. See
271                URL at top of src/symbol_demangle.c for more info.
272    
273    Userland ABI emulation:
274            o)  see src/useremul.c
275    
276    Terminal/console:
277            o)  allow emulated serial ports to be connected to the outside
278                world in a more generic way, or even to other emulated
279                machines(?)
280    
281    Save state of the whole emulated machine, to be able to load it back
282            in later?  (Memory, all device's states, all registers and
283            so on.  Like taking a snapshot. (SimOS seems to do this,
284            according to its website.))
285    
286    Better framebuffer and X-windows functionality:
287            o)  -Yx sometimes causes crashes.
288            o)  Simple device access to framebuffer_blockcopyfill() etc,
289                and text output (using the built-in fonts), for dev_fb.
290            o)  CLEAN UP the ugly event code
291            o)  Mouse clicks can be "missed" in the current system; this is
292                not good. They should be put on a stack of some kind.
293            o)  More 2D and 3D framebuffer acceleration.
294            o)  Non-resizable windows?  Or choose scaledown depending
295                    on size (and center the image, with a black border).
296            o)  Different scaledown on different windows?
297            o)  Switch scaledown during runtime? (Ala CTRL-ALT-plus/minus)
298            o)  Bug reported by Elijah Rutschman on MacOS with weird
299                keys (F5 = cursor down?).
300            o)  Keyboard and mouse events:
301                    x)  Do this for more machines than just DECstation
302                    x)  more X11 cursor keycodes
303                    x)  Keys like CTRL, ALT, SHIFT do not get through
304                        by themselves (these are necessary for example
305                        to change the font of an xterm in X in the
306                        emulator)
307            o)  Generalize the framebuffer stuff by moving _ALL_ X11
308                    specific code to src/x11.c!
309    
310    Statistics:  (this could be interesting)
311            o)  Save to file and show graphics. It should be possible to
312                run gxemul after a simulation to just show the graphics,
313                or convert to a .ppm or .tga or similar.
314            o)  memory accesses (to measure cache efficiency and
315                    page coloring efficiency)
316            o)  nr of simultaneous ASIDs in use in the TLB, for MIPS
317            o)  percentage of time spent in different "states", such as
318                running userland code, kernel code, or idling (for CPUs
319                that have such an instruction, or whenever the PC is
320                inside a specific idle-function (address range)).
321                Possible additional state (for example on R3000): caches
322                disabled.
323            o)  position of read/write on (SCSI) disks
324    

Legend:
Removed from v.10  
changed lines
  Added in v.26

  ViewVC Help
Powered by ViewVC 1.1.26