/[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 2 by dpavlin, Mon Oct 8 16:17:48 2007 UTC revision 24 by dpavlin, Mon Oct 8 16:19:56 2007 UTC
# Line 1  Line 1 
1  $Id: TODO,v 1.125 2005/03/06 08:21:10 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                a rotation bit which differs from previous ISAs.
54          MIPS CPU emulation:          o)  EI and DI instructions for MIPS64/32 rev 2. NOTE: These are
55                  o)  Instructions:              _NOT_ the same as for R5900!
56                          o)  Regression tests (see tests/README for more info):          o)  R4000 and others:
57                                  o)  Floating point exception handling, and                  x)  watchhi/watchlo exceptions, and other exception
58                                          add more instructions.                      handling details
59                                  o)  Finish the MIPS16 translator, and test it!          o)  R10000 and others:  (R12000, R14000 ?)
60                                  o)  MIPS ISA I, II, III, IV                  x)  memory space, exceptions, ...
61                                  o)  MIPS V (SIMD vector stuff?)                  x)  use cop0 framemask for tlb lookups
62                                  o)  MDMX  (MIPS Digital Media Extension)                      (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)  MIPS 3D  
64                                  o)  MIPS MT (Multi-thread stuff) (What's this?)  Dyntrans:
65                          o)  Warn about mis-used bit fields (ie bits that          x)  Move the mips_init_64bit_dummy_tables() etc calls into
66                              should be all zeroes, warn about if they are not)!              src/cpu.c, for all 64-bit cpus?
67                              Both for coprocessor registers and for instruction          x)  64-bit "phystranslation" lookup as in 32-bit mode? Would probably
68                              opcodes.                  help performance a bit.
69                          o)  the special2 stuff is a mess right now          x)  Common fatal_abort() function, which drops into the debugger
70                          o)  warn and/or cause exceptions for unimplemented                  without continuing.
71                              instructions (depending on CPU type)          x)  INVALIDATION should cause translations in _all_ cpus to be
72                  o)  R2000/R3000:              invalidated, e.g. on a write to a write-protected page
73                          x)  R3000 "tri-byte stores". (What's this?)              (containing code)
74                  o)  R4000 and others:          x)  better (formally defined) instr call statistics (-s command
75                          x)  watchhi/watchlo exceptions, and other exception              line option?), multiple different types? (virtual pc, physical pc)
76                              handling details          x)  Call/return hints?
77                  o)  R10000 and others:  (R12000, R14000 ?)          x)  16-bit encodings? (MIPS16, ARM Thumb, SH3, ...)
78                          x)  memory space, exceptions, ...          x)  H8?
79                          x)  use cop0 framemask for tlb lookups          x)  Lots of other stuff: see src/cpus/README_DYNTRANS
80                              (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)  true recompilation backend? think carefully about this,
81                  o)  Implement load delays?  Warnings on interlocks.              experiment in a separate project (not in GXemul)
82                  o)  Implement all coprocessor 0 bits / functions.          x)  Remove the dyntrans_alignment_check functionality; although
83                          x)  coproc 0 selectors! (R4000 ?)              it gives slightly higher peformance sometimes, it increases
84                  o)  R4300 (nintendo64, no mmu?), R5900 (playstation2, weird              the complexity of the code too much!
85                          TLB/cache? 128-bit GPRs, new instructions),  
86                          4K (note: NOT R4000), 5K (note: NOT R5000),  Alpha:
87                          R6000 (ISA II), R8000          o)  Virtual memory (tlbs etc)
88                  o)  Multi-cpu stuff:          o)  Get {NetBSD,OpenBSD,Linux}/alpha booting. :)
89                          +)  SGI's NUMA architecture. Study  
90                                  x)  Linux sources  SPARC:
91                                  x)  SGI's specs on NUMA address space          o)  Add all registers (floating point, control regs etc)
92                          +)  Ultrix?  NetBSD doesn't do SMP on MIPS yet :-(          o)  Save/restore register windows etc!
93                          +)  Own experiments with ycx2.          o)  Disassemly of some more instructions.
94            o)  Are sll etc 32-bit sign-extending or zero-extending?
95          Emulation of specific machines and devices:          o)  Finish the cmp (subcc) flag computation code.
96                  o)  Clean up stuff to make it possible to emulate multiple          o)  Finish the GDB register stuff.
97                      (different) machines simultaneously.  
98                  o)  Use same clock for all emulations and machines.  Debugger:
99                  o)  Clean up the device stuff (registering of devices etc)          o)  How does SMP debugging work? Does it simply use "threads"?
100                  o)  Various SCSI and IDE controllers                  What if the guest OS (running on an emulated SMP machine)
101                  o)  PS/2-style keyboard controller (for several machines)                  has a usertask running, with userland threads?
102                  o)  Generic busses;          o)  Try to make the debugger more modular and, if possible, reentrant!
103                          x)  PCI:  i/o and interrupts          o)  Remove the emul command? (But show network info if showing
104                          x)  QBus-22 (DECsystem 5500, 5400?)                  machines?)
105                  o)  DECstations (pmax):          o)  Generalize the expression evaluator. (debugger_expr.c?)
106                          x)  ioasic                  settable variables      ("show nr of instructions on average")
107                          x)  framebuffers:                  emul[x]                 defaults to current emul
108                                  +)  better cursor support, overlays?,                  machine[x]              defaults to current machine
109                                  +)  2D/3D acceleration, PX[G]                  cpu[x]                  defaults to currently focused cpu
110                          x)  status words / control words, make this more                  registers               cpu arch dependent (#-prefix)
111                                  portable/cleaner                  symbols                 @-prefix
112                          x)  scsi controller(s): sii, DMA for asc                  numeric constants       decimal, hex, and octal ($-prefix)
113                          x)  serial controllers: ssc, scc (and more work on dc?)                  boolean                 yes,no, true,false
114                          x)  nvram on decstation 5000/125:  when using X11,                  operators (+ - * / % & | ^ !)
115                                  set console=g or similar                  parentheses for grouping subexpressions
116                          x)  DECstation 5840? "xbi-based SMP"                  NOTE: the change from % to # for register prefix!
117                  o)  SGI and ARC machines (sgimips, arc):                  examples:
118                          x)  IP32 ("O2"): (Lots of stuff)                                  emul[0].machine[2].cpu[0].pc
119                                  +)  mec (ethernet)                                  machine[test2].cpu[1].ra = main
120                                  +)  pci                                  settings.show_trace_tree = yes
121                                  +)  ahc (scsi)  
122                                  +)  ps2 kbd                  Settings:
123                                  +)  memory controller                          o)  Remove a setting.
124                                  +)  framebuffer/graphics                          o)  Read/write a setting given a name. (Read as
125                                  +)  caches                              string and/or int64_t simultaneously?)
126                          x)  more ARCBIOS stuff  
127                          x)  Memory/interrupt controllers                  Help command should have subsections! One for "expressions",
128                          x)  IP30 (Linux with graphics support?)                  mirrored in the documentation, but the internal help should
129                          x)  SMP / NUMA?  (SGI and various ARC machines)                  be the one that should be considered correct.
130                  o)  Cobalt:  PCI and interrupt system, ethernet,          o)  see src/debugger.c for more
131                          harddisk controller(s)  
132                  o)  Playstation 2:  POWER/PowerPC:
133                          Hardware:  OHCI usb controller, keyboard, IDE, ...          x)  PPC optimizations; instr combs
134                          Has an R3000A as a subsystem (!)          x)  64-bit stuff
135                  o)  hpcmips:  framebuffer(s) and harddisk controller,          x)  find and fix the bug which causes NetBSD/macppc to fail after
136                          among other things              an install!
137                  o)  newsmips:          x)  macppc: adb controller; keyboard (for framebuffer mode)
138                          o)  NetBSD/newsmips, get it to detect a "real"          x)  make OpenBSD/macppc work (PCI controller stuff)
139                              model, right now everything is 100% bogus  
140                  o)  Less interesting platforms:  Algor:
141                          o)  mipsco? (NetBSD)          PCI and ISA and LOCAL interrupts! --> wdc could start working
142                          o)  wgrisc? (big endian R3000, in OpenBSD's attic)          Add interrupt controller in dev_algor.c.
143                          o)  other embedded / evaluation MIPS boards  
144                          o)  Playstation 1? R3000A. Weird hardware?  ARM:
145                                  No FPU, but something as coproc 2.          o)  try to get netbsd/evbarm 3.x running (iq80321)
146                          o)  Nintendo 64, http://www.nintendo.com/systems/n64/n64_specs.jsp          o)  make the xscale counter registers (ccnt) work
147                                  (R4300, 4MB RAM, really weird memory map)          o)  make the ata controller usable for FreeBSD!
148            o)  zaurus for openbsd...
149          File/disk handling:          o)  debian/cats crashes because of unimplemented coproc stuff.
150                  o)  Read function argument count and types from binaries? (ELF?)              fix this?
151                  o)  ELF: separate LE/BE (MIPS instruction format) from LSB/MSB  
152                          (ELF structure format)?  Cache simulation:
153                  o)  Better handling of tape files          o)  Separate from the CPU concept, so that multi-core CPUs sharing
154                e.g. a L2 cache can be simulated (?)
155          Userland ABI emulation:          o)  Instruction cache emulation is easiest (if separate from the
156                  o)  see src/useremul.c              data cache); similar hack as the S;I; hack in cpu_dyntrans.c.
157                NOTE: if the architecture has a delay slot, then an instruction
158          Terminal based interactive debugger:              slot can actually be executed as 2 instructions.
159                  o)  see src/debugger.c          o)  Data cache emulation = harder; each arch's load/store routines
160                must include support? running one instruction at a time and
161          GDB interface? (Maybe not necessary; the built-in debugger feels              having a cpu-dependant lookup function for each instruction
162          more useful.)              is another option (easier to implement, but very very slow).
163    
164          GUI, interactive debugger?  GTK+?  (The GUI _must be optional_!)  Documentation:
165                  o)  Breakpoints (complex expressions? combinations of register          o)  machines, cpus, devices.
166                          states, memory accesses and so on)          o)  Automagic documentation generation:
167                  o)  Instruction trace                  x)  REMEMBER that several machines/devices can be in
168                  o)  Disassembly of RAM (_NOT_ the same as instruction trace)                          the same source file!
169                  o)  Function call trace          o)  Try to rewrite the install instructions for those machines
170                  o)  Inspection of CPU registers/state, coprocessor              that use 3MAX into using CATS? (To remove the need to a raw
171                          registers/state, any device registers/state/contents              ffs partition using up all of the disk image.)
172                          o)  Framebuffers in windows / tabs.  
173                          o)  Contents of RAM  More generic out_of_memory error reporting, and check everywhere!
174                  o)  "Start new emulation" should allow amount of          Causes: OpenBSD has low default limits for normal users.
175                          RAM and nr of cpus to easily be specified.                  Host is 32-bit? (32-bit hosts are limited to 4 GB or less
176                          Multiple simultaneous machines should be possible.                  of userspace memory.)
177                  o)  Disk images.                  You are actually low on RAM. (As trivial as this might sound,
178                    Unix systems usually allow processes to allocate virtual
179          Regression tests:                  memory beyond the amount of RAM in the machine.)
180                  o)  see tests/  
181    Breakpoints: 32-bit vs 64-bit sign extension for MIPS, warnings, etc.
182          Save state of the whole emulated machine, to be able to load it back          Use the debugger's symbolic name stuff. (which will have to be
183                  in later?  (Memory, all device's states, all registers and          extended soon to support stuff like  "2*x + symbol + y" etc. cool
184                  so on.  Like taking a snapshot. (SimOS seems to do this,          stuff)
185                  according to its website.))  
186    Sprite (guest OS for DECstation emulation)
187          Better X-windows functionality:          x)  Timing problems during bootup?
188                  o)  CLEAN UP the ugly event code  
189                  o)  Mouse clicks can be "missed" in the current system; this is  The Device subsystem:
190                      not good. They should be put on a stack of some kind.          x)  allow devices to be moved and/or changed in size (down to a
191                  o)  More 2D and 3D framebuffer acceleration.              minimum size, etc, or up to a max size)
192                  o)  Non-resizable windows?  Or choose scaledown depending          x)  keep track of interrupts and busses? actually, allowing any device
193                          on size (and center the image, with a black border).              to be a bus might be a nice idea.
194                  o)  Different scaledown on different windows?          x)  turn interrupt controllers into devices? :-)
195                  o)  Switch scaledown during runtime? (Ala CTRL-ALT-plus/minus)          x)  refactor various clocks/nvram/cmos into one device?
196                  o)  Keyboard and mouse events:  
197                          x)  Do this for more machines than just DECstation  Clocks:
198                          x)  more X11 cursor keycodes          x)  General framework for automagic clock adjustment for _all_
199                          x)  Keys like CTRL, ALT, SHIFT do not get through              kinds of clocks and timers. (Which should be possible to turn
200                              by themselves (these are necessary for example              off, of course, like the way DECstation emulation works now.)
201                              to change the font of an xterm in X in the  
202                              emulator)  PCI:
203                  o)  Generalize the framebuffer stuff by moving _ALL_ X11          x)  last write was ffffffff ==> fix this, it should be used
204                          specific code to src/x11.c!              together with a mask to get the correct bits. also, not ALL
205                bits are size bits! (lowest 4 vs lowest 2?)
206          Statistics:  (this could be interesting)          x)  add support for address fixups
207                  o)  Save to file and show graphics. It should be possible to          x)  generalize the interrupt routing stuff (lines etc). this should
208                      run gxemul after a simulation to just show the graphics,              be per machine? or per bus, that's better
209                      or convert to a .ppm or .tga or similar.          x)  add a "pcn" NIC (AMD PCnet32 Lance 79c970 (PCI 1022:2000)),
210                  o)  memory accesses (to measure cache efficiency and              could be useful for several machine modes (Malta, Algor, evbarm,
211                          page coloring efficiency)              hp700?, macppc, etc.)
212                  o)  nr of simultaneous ASIDs in use in the TLB, for MIPS  
213                  o)  percentage of time spent in different "states", such as  Network layer:
214                      running userland code, kernel code, or idling (for CPUs          o)  DHCP (for Debian and BSD installers :-)
215                      that have such an instruction, or whenever the PC is          o)  increase performance
216                      inside a specific idle-function (address range)).          o)  don't rely on NetBSD-ish usage
217                      Possible additional state (for example on R3000): caches          o)  Multiple networks per emulation, and let different
218                      disabled.              NICs in machines connect to different networks.
219                  o)  position of read/write on (SCSI) disks          o)  many other issues: see src/net.c
220    
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.2  
changed lines
  Added in v.24

  ViewVC Help
Powered by ViewVC 1.1.26