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

Legend:
Removed from v.4  
changed lines
  Added in v.24

  ViewVC Help
Powered by ViewVC 1.1.26