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

  ViewVC Help
Powered by ViewVC 1.1.26