/[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 22 by dpavlin, Mon Oct 8 16:19:37 2007 UTC
# Line 1  Line 1 
1  $Id: TODO,v 1.125 2005/03/06 08:21:10 debug Exp $  $Id: TODO,v 1.209 2006/02/18 21:03:09 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    Algor:  PCI and ISA and LOCAL interrupts! --> wdc could start working
6            Add interrupt controller in dev_algor.c.
7    
8          Caches / memory hierarchies: (this is mostly MIPS-specific)  Dyntrans:
9                  o)  MIPS coproc.c: bits in config registers should reflect          TOP Priority:
10                      correct cache sizes for _all_ CPU types. (currently only                  x)  64-bit stuff: good generic virtual memory translation, and
11                      implemented for R4000, R1x000, and a few others)                      other structures. not all 64 bits need to be used
12                  o)  src/memory*.c: Implement correct cache emulation for                      (e.g. Alpha)
13                      all CPU types. (currently only R2000/R3000 is implemented)                  x)  Delay slots!
14                      (per CPU, multiple levels should be possible,                  x)  Old MIPS -> dyntrans!
15                      associativity etc!)          Other stuff:
16                  o)  R2000/R3000 isn't _100%_ correct, just almost correct :)          x)  INVALIDATION should cause translations in _all_ cpus to be
17                  o)  Move the -S (fill mem with random) functionality into the              invalidated, e.g. on a write to a write-protected page
18                      memory.c subsystem, not machine.c or wherever it is now              (containing code)
19                  o)  ECC stuff, simulation of memory errors?  (Machine dependant)          x)  Think about sharing code between CPUs of the same
20                  o)  More than 4GB of emulated RAM, when run on a 32-bit host?              arch/bitlength/endianness (the translation caches).
21                      (using manual swap-out of blocks to disk, ugly)              (Eg. a little-endian R4000 and a little-endian R5000 could
22                  o)  A global command line option should be used to turn              share code, but not an R3000 and an R4000.)
23                      cache emulation on or off. When off, caches should be          x)  better (meaningful) instr call statistics
24                      faked like they are right now. When on, caches and          x)  Call/return hints?
25                      memory latencies should be emulated as correctly as          x)  16-bit encodings? (MIPS16, ARM Thumb, SH3, ...)
26                      possible.          x)  PPC optimizations; instr combs
27            x)  Alpha
28          Network layer:          x)  SPARC
29                  o)  Multiple networks per emulation, and let different          x)  PPC (64-bit stuff)
30                      NICs in machines connect to different networks.          x)  Lots of other stuff: see src/cpus/README_DYNTRANS
31                  o)  Network across multiple hosts.          x)  true recompilation backend? think carefully about this,
32                  o)  Fixed MAC addresses for NICs, fixed IPv4 addresses if              experiment in a separate project (not in GXemul)
33                      DHCP or RARP is used.  
34                  o)  many other issues: see src/net.c  More generic out_of_memory error reporting, and check everywhere!
35            Causes: OpenBSD has low default limits for normal users.
36          Configure script:                  Host is 32-bit? (32-bit hosts are limited to 4 GB or less
37                  o)  Only enable Alpha prefetch on pca56 etc, not on ev4, ev5.                  of userspace memory.)
38                  o)  Use getopts?                  You are actually low on RAM. (As trivial as this might sound,
39                  o)  X11 libs and headers via command line option?                  Unix systems usually allow processes to allocate virtual
40                  o)  Verify that the configure script, building and running                  memory beyond the amount of RAM in the machine.)
41                      the emulator works on some platforms:  
42                          +)  Irix, AIX, QNX  Breakpoints: 32-bit vs 64-bit sign extension for MIPS, warnings, etc.
43                          +)  MacOS X  (I've not tried this personally yet)          Use the debugger's symbolic name stuff. (which will have to be
44                          +)  Ultrix using gcc? (Inside the emulator)          extended soon to support stuff like  "2*x + symbol + y" etc. cool
45            stuff)
46          CPU emulation:  
47                  o)  Binary translation:  Sprite (guest OS for DECstation emulation)
48                          +)  use an Intermediate Representation!          x)  Timing problems during bootup?
49                          +)  recursive translation?  
50                          +)  basic blocks instead of one-instruction? :)  The Device subsystem:
51                          +)  on Alpha: don't assume pca56-like byte load/store?          x)  allow devices to be moved and/or changed in size (down to a
52                          +)  write backends for UltraSparc and MIPS              minimum size, etc, or up to a max size)
53                          +)  see src/bintrans.c for more info          x)  keep track of interrupts and busses? actually, allowing any device
54                to be a bus might be a nice idea
55          MIPS CPU emulation:          x)  refactor various clocks/nvram/cmos into one device?
56                  o)  Instructions:  
57                          o)  Regression tests (see tests/README for more info):  ARM:
58                                  o)  Floating point exception handling, and          o)  add ID for "i80321 600MHz rev 2 (XScale core)"
59                                          add more instructions.          o)  make the ata controller usable for FreeBSD!
60                                  o)  Finish the MIPS16 translator, and test it!          x)  zaurus for openbsd...
61                                  o)  MIPS ISA I, II, III, IV  
62                                  o)  MIPS V (SIMD vector stuff?)  PCI:
63                                  o)  MDMX  (MIPS Digital Media Extension)          x)  add support for address fixups
64                                  o)  MIPS 3D          x)  generalize the interrupt routing stuff (lines etc). this should
65                                  o)  MIPS MT (Multi-thread stuff) (What's this?)              be per machine? or per bus, that's better
66                          o)  Warn about mis-used bit fields (ie bits that  
67                              should be all zeroes, warn about if they are not)!  MacPPC:
68                              Both for coprocessor registers and for instruction          x)  dev_zs / interrupts?
69                              opcodes.          x)  adb controller; keyboard
70                          o)  the special2 stuff is a mess right now          x)  make OpenBSD/macppc work (PCI controller stuff)
71                          o)  warn and/or cause exceptions for unimplemented  
72                              instructions (depending on CPU type)  Network layer:
73                  o)  R2000/R3000:          o)  DHCP (for Debian and BSD installers :-)
74                          x)  R3000 "tri-byte stores". (What's this?)          o)  increase performance
75                  o)  R4000 and others:          o)  don't rely on NetBSD-ish usage
76                          x)  watchhi/watchlo exceptions, and other exception          o)  Multiple networks per emulation, and let different
77                              handling details              NICs in machines connect to different networks.
78                  o)  R10000 and others:  (R12000, R14000 ?)          o)  many other issues: see src/net.c
79                          x)  memory space, exceptions, ...  
80                          x)  use cop0 framemask for tlb lookups  Busses:
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)          o)  Redesign the entire "mainbus" concept!
82                  o)  Implement load delays?  Warnings on interlocks.          o)  Busses should be placed in a hierarchical tree!
83                  o)  Implement all coprocessor 0 bits / functions.          o)  Easily configurable interrupt routing in SMP systems.
84                          x)  coproc 0 selectors! (R4000 ?)          o)  Specific clock/bus speeds, cpu speeds etc.
85                  o)  R4300 (nintendo64, no mmu?), R5900 (playstation2, weird          o)  Synchronization over network? or at least in dyntrans within
86                          TLB/cache? 128-bit GPRs, new instructions),              one emulated machine
87                          4K (note: NOT R4000), 5K (note: NOT R5000),          o)  dev->bus: TurboChannel, PCMCIA, ADB?
88                          R6000 (ISA II), R8000  
89                  o)  Multi-cpu stuff:  Config file parser:
90                          +)  SGI's NUMA architecture. Study          o)  Refresh/rewrite it :)
91                                  x)  Linux sources          o)  Usage of any expression available through the debugger
92                                  x)  SGI's specs on NUMA address space          o)  Expressions such as "add device" would be nice to be able
93                          +)  Ultrix?  NetBSD doesn't do SMP on MIPS yet :-(              to do on the command line manually.
94                          +)  Own experiments with ycx2.          o)  Allow machine() entries even if there is no emul() entry (but
95                then don't allow any emul() entries at all).
96          Emulation of specific machines and devices:          o)  Support for running debugger commands (like the -c
97                  o)  Clean up stuff to make it possible to emulate multiple              command line option)
98                      (different) machines simultaneously.  
99                  o)  Use same clock for all emulations and machines.  Floating point layer:
100                  o)  Clean up the device stuff (registering of devices etc)          o)  make it common enough to be used by _all_ emulation modes
101                  o)  Various SCSI and IDE controllers          o)  non-IEEE modes (i.e. x86)?
102                  o)  PS/2-style keyboard controller (for several machines)  
103                  o)  Generic busses;  Userland emulation:
104                          x)  PCI:  i/o and interrupts          x)  Lots of stuff; freebsd and netbsd (and linux?) syscalls.
105                          x)  QBus-22 (DECsystem 5500, 5400?)          x)  Dynamic linking? Hm.
106                  o)  DECstations (pmax):  
107                          x)  ioasic  Sound:
108                          x)  framebuffers:          x)  generic sound framework
109                                  +)  better cursor support, overlays?,          x)  add one or more sound cards as devices
110                                  +)  2D/3D acceleration, PX[G]  
111                          x)  status words / control words, make this more  Caches / memory hierarchies: (this is mostly MIPS-specific)
112                                  portable/cleaner          o)  MIPS coproc.c: bits in config registers should reflect
113                          x)  scsi controller(s): sii, DMA for asc              correct cache sizes for _all_ CPU types. (currently only
114                          x)  serial controllers: ssc, scc (and more work on dc?)              implemented for R4000, R1x000, and a few others)
115                          x)  nvram on decstation 5000/125:  when using X11,          o)  src/memory*.c: Implement correct cache emulation for
116                                  set console=g or similar              all CPU types. (currently only R2000/R3000 is implemented)
117                          x)  DECstation 5840? "xbi-based SMP"              (per CPU, multiple levels should be possible,
118                  o)  SGI and ARC machines (sgimips, arc):              associativity etc!)
119                          x)  IP32 ("O2"): (Lots of stuff)          o)  R2000/R3000 isn't _100%_ correct, just almost correct :)
120                                  +)  mec (ethernet)          o)  Move the -S (fill mem with random) functionality into the
121                                  +)  pci              memory.c subsystem, not machine.c or wherever it is now
122                                  +)  ahc (scsi)          o)  ECC stuff, simulation of memory errors?  (Machine dependent)
123                                  +)  ps2 kbd          o)  More than 4GB of emulated RAM, when run on a 32-bit host?
124                                  +)  memory controller              (using manual swap-out of blocks to disk, ugly)
125                                  +)  framebuffer/graphics          o)  A global command line option should be used to turn
126                                  +)  caches              cache emulation on or off. When off, caches should be
127                          x)  more ARCBIOS stuff              faked like they are right now. When on, caches and
128                          x)  Memory/interrupt controllers              memory latencies should be emulated as correctly as
129                          x)  IP30 (Linux with graphics support?)              possible.
130                          x)  SMP / NUMA?  (SGI and various ARC machines)  
131                  o)  Cobalt:  PCI and interrupt system, ethernet,  MIPS CPU emulation:  (note: this is for the OLD mips stuff)
132                          harddisk controller(s)          o)  i386 bintrans backend: movn etc, slt[u] for
133                  o)  Playstation 2:                  64-bit mode, 64-bit shifts etc
134                          Hardware:  OHCI usb controller, keyboard, IDE, ...          o)  Instructions:
135                          Has an R3000A as a subsystem (!)                  o)  All ISAs:
136                  o)  hpcmips:  framebuffer(s) and harddisk controller,                          o)  Floating point exception handling, and
137                          among other things                                  add more instructions.
138                  o)  newsmips:                          o)  Finish the MIPS16 translator, and test it!
139                          o)  NetBSD/newsmips, get it to detect a "real"                          o)  MIPS ISA I, II, III, IV
140                              model, right now everything is 100% bogus                          o)  MIPS V (SIMD vector stuff?)
141                  o)  Less interesting platforms:                          o)  MDMX  (MIPS Digital Media Extension)
142                          o)  mipsco? (NetBSD)                          o)  MIPS 3D
143                          o)  wgrisc? (big endian R3000, in OpenBSD's attic)                          o)  MIPS MT (Multi-thread stuff) (What's this?)
144                          o)  other embedded / evaluation MIPS boards                  o)  Warn about mis-used bit fields (ie bits that
145                          o)  Playstation 1? R3000A. Weird hardware?                      should be all zeroes, warn about if they are not)!
146                                  No FPU, but something as coproc 2.                      Both for coprocessor registers and for instruction
147                          o)  Nintendo 64, http://www.nintendo.com/systems/n64/n64_specs.jsp                      opcodes.
148                                  (R4300, 4MB RAM, really weird memory map)                  o)  the special2 stuff is a mess right now
149                    o)  warn and/or cause exceptions for unimplemented
150          File/disk handling:                      instructions (depending on CPU type)
151                  o)  Read function argument count and types from binaries? (ELF?)          o)  R2000/R3000:
152                  o)  ELF: separate LE/BE (MIPS instruction format) from LSB/MSB                  x)  R3000 "tri-byte stores". (What's this?)
153                          (ELF structure format)?          o)  R4000 and others:
154                  o)  Better handling of tape files                  x)  watchhi/watchlo exceptions, and other exception
155                        handling details
156          Userland ABI emulation:          o)  R10000 and others:  (R12000, R14000 ?)
157                  o)  see src/useremul.c                  x)  memory space, exceptions, ...
158                    x)  use cop0 framemask for tlb lookups
159          Terminal based interactive debugger:                      (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)
160                  o)  see src/debugger.c          o)  Implement load delays?  Warnings on interlocks.
161            o)  Implement all coprocessor 0 bits / functions.
162          GDB interface? (Maybe not necessary; the built-in debugger feels                  x)  coproc 0 selectors! (R4000 ?)
163          more useful.)          o)  R4300 (nintendo64, no mmu?), R5900 (playstation2, weird
164                    TLB/cache? 128-bit GPRs, new instructions),
165          GUI, interactive debugger?  GTK+?  (The GUI _must be optional_!)                  4K (note: NOT R4000), 5K (note: NOT R5000),
166                  o)  Breakpoints (complex expressions? combinations of register                  R6000 (ISA II), R8000
167                          states, memory accesses and so on)          o)  Multi-cpu stuff:
168                  o)  Instruction trace                  +)  Interrupt routing (ie devices vs mainbus, or
169                  o)  Disassembly of RAM (_NOT_ the same as instruction trace)                      connect each device to a fixed cpu)
170                  o)  Function call trace                  +)  SGI's NUMA architecture. Study
171                  o)  Inspection of CPU registers/state, coprocessor                          x)  Linux sources
172                          registers/state, any device registers/state/contents                          x)  SGI's specs on NUMA address space
173                          o)  Framebuffers in windows / tabs.                  +)  Ultrix?  NetBSD doesn't do SMP on MIPS yet :-(
174                          o)  Contents of RAM                  +)  Own experiments with ycx2.
175                  o)  "Start new emulation" should allow amount of  
176                          RAM and nr of cpus to easily be specified.  File/disk/symbol handling:
177                          Multiple simultaneous machines should be possible.          o)  Better handling of tape files
178                  o)  Disk images.          o)  Read function argument count and types from binaries? (ELF?)
179            o)  Demangle C++ names.
180          Regression tests:  
181                  o)  see tests/  Debugger:
182            o)  see src/debugger.c for more
183          Save state of the whole emulated machine, to be able to load it back  
184                  in later?  (Memory, all device's states, all registers and  Userland ABI emulation:
185                  so on.  Like taking a snapshot. (SimOS seems to do this,          o)  see src/useremul.c
186                  according to its website.))  
187    Terminal/console:
188          Better X-windows functionality:          o)  allow emulated serial ports to be connected to the outside
189                  o)  CLEAN UP the ugly event code              world in a more generic way, or even to other emulated
190                  o)  Mouse clicks can be "missed" in the current system; this is              machines(?)
191                      not good. They should be put on a stack of some kind.  
192                  o)  More 2D and 3D framebuffer acceleration.  Save state of the whole emulated machine, to be able to load it back
193                  o)  Non-resizable windows?  Or choose scaledown depending          in later?  (Memory, all device's states, all registers and
194                          on size (and center the image, with a black border).          so on.  Like taking a snapshot. (SimOS seems to do this,
195                  o)  Different scaledown on different windows?          according to its website.))
196                  o)  Switch scaledown during runtime? (Ala CTRL-ALT-plus/minus)  
197                  o)  Keyboard and mouse events:  Better framebuffer and X-windows functionality:
198                          x)  Do this for more machines than just DECstation          o)  -Yx sometimes causes crashes.
199                          x)  more X11 cursor keycodes          o)  Simple device access to framebuffer_blockcopyfill() etc,
200                          x)  Keys like CTRL, ALT, SHIFT do not get through              and text output (using the built-in fonts), for dev_fb.
201                              by themselves (these are necessary for example          o)  CLEAN UP the ugly event code
202                              to change the font of an xterm in X in the          o)  Mouse clicks can be "missed" in the current system; this is
203                              emulator)              not good. They should be put on a stack of some kind.
204                  o)  Generalize the framebuffer stuff by moving _ALL_ X11          o)  More 2D and 3D framebuffer acceleration.
205                          specific code to src/x11.c!          o)  Non-resizable windows?  Or choose scaledown depending
206                    on size (and center the image, with a black border).
207          Statistics:  (this could be interesting)          o)  Different scaledown on different windows?
208                  o)  Save to file and show graphics. It should be possible to          o)  Switch scaledown during runtime? (Ala CTRL-ALT-plus/minus)
209                      run gxemul after a simulation to just show the graphics,          o)  Keyboard and mouse events:
210                      or convert to a .ppm or .tga or similar.                  x)  Do this for more machines than just DECstation
211                  o)  memory accesses (to measure cache efficiency and                  x)  more X11 cursor keycodes
212                          page coloring efficiency)                  x)  Keys like CTRL, ALT, SHIFT do not get through
213                  o)  nr of simultaneous ASIDs in use in the TLB, for MIPS                      by themselves (these are necessary for example
214                  o)  percentage of time spent in different "states", such as                      to change the font of an xterm in X in the
215                      running userland code, kernel code, or idling (for CPUs                      emulator)
216                      that have such an instruction, or whenever the PC is          o)  Generalize the framebuffer stuff by moving _ALL_ X11
217                      inside a specific idle-function (address range)).                  specific code to src/x11.c!
218                      Possible additional state (for example on R3000): caches  
219                      disabled.  Statistics:  (this could be interesting)
220                  o)  position of read/write on (SCSI) disks          o)  Save to file and show graphics. It should be possible to
221                run gxemul after a simulation to just show the graphics,
222                or convert to a .ppm or .tga or similar.
223            o)  memory accesses (to measure cache efficiency and
224                    page coloring efficiency)
225            o)  nr of simultaneous ASIDs in use in the TLB, for MIPS
226            o)  percentage of time spent in different "states", such as
227                running userland code, kernel code, or idling (for CPUs
228                that have such an instruction, or whenever the PC is
229                inside a specific idle-function (address range)).
230                Possible additional state (for example on R3000): caches
231                disabled.
232            o)  position of read/write on (SCSI) disks
233    

Legend:
Removed from v.2  
changed lines
  Added in v.22

  ViewVC Help
Powered by ViewVC 1.1.26