/[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 12 by dpavlin, Mon Oct 8 16:18:38 2007 UTC revision 22 by dpavlin, Mon Oct 8 16:19:37 2007 UTC
# Line 1  Line 1 
1  $Id: TODO,v 1.166 2005/08/16 05:44:33 debug Exp $  $Id: TODO,v 1.209 2006/02/18 21:03:09 debug Exp $
2    
3  ===============================================================================  Hm. This file is in random order, and not all parts of it are up-to-date.
4    
5  High priority stuff:  Algor:  PCI and ISA and LOCAL interrupts! --> wdc could start working
6            Add interrupt controller in dev_algor.c.
7    
8    Dyntrans:
9  MIPS bintrans:          TOP Priority:
10          x)  call/return address cache?                  x)  64-bit stuff: good generic virtual memory translation, and
11                        other structures. not all 64 bits need to be used
12  dyntrans:                      (e.g. Alpha)
13          x)  memory write protection for ARM, but NOT for Alpha (because                  x)  Delay slots!
14                  it has the IMB instruction... hm)                  x)  Old MIPS -> dyntrans!
15            Other stuff:
16          x)  call/return address cache          x)  INVALIDATION should cause translations in _all_ cpus to be
17                invalidated, e.g. on a write to a write-protected page
18          x)  instr_call sequence analysis support? (Useful for              (containing code)
19                  handtuning combinations.)          x)  Think about sharing code between CPUs of the same
20                arch/bitlength/endianness (the translation caches).
21          x)  opcode statistics support?              (Eg. a little-endian R4000 and a little-endian R5000 could
22                  TODO: is instr_call statistics enough?              share code, but not an R3000 and an R4000.)
23            x)  better (meaningful) instr call statistics
24          x)  support for archs that allow transparent unaligned load/stores          x)  Call/return hints?
25            x)  16-bit encodings? (MIPS16, ARM Thumb, SH3, ...)
26          x)  SMP: detect when an instruction such as ll/sc or cas is used,          x)  PPC optimizations; instr combs
27              and "synchronize" approximately the number of executed instructions          x)  Alpha
28              (or cycles) across all CPUs.          x)  SPARC
29            x)  PPC (64-bit stuff)
30          x)  support for variable-length instructions (x86, m68k, ...)          x)  Lots of other stuff: see src/cpus/README_DYNTRANS
31                  Perhaps:  don't increase the next_ic between every          x)  true recompilation backend? think carefully about this,
32                  instruction, but let each instruction's handler do              experiment in a separate project (not in GXemul)
33                  that for itself.  
34                  Problem: what about instructions crossing a (virtual)  More generic out_of_memory error reporting, and check everywhere!
35                          page boundary? They cannot be translated once          Causes: OpenBSD has low default limits for normal users.
36                          and for all :( and must be interpreted slowly!                  Host is 32-bit? (32-bit hosts are limited to 4 GB or less
37                    of userspace memory.)
38          x)  support for THUMB or MIPS16  (arm, mips)                  You are actually low on RAM. (As trivial as this might sound,
39                    Unix systems usually allow processes to allocate virtual
40          x)  support for Delay slots!  (mips, sparc, hppa)                  memory beyond the amount of RAM in the machine.)
41    
42          x)  Alpha: hahaha, zapnot and inserts/extracts don't  Breakpoints: 32-bit vs 64-bit sign extension for MIPS, warnings, etc.
43              compile into very nice code :-|  fix this          Use the debugger's symbolic name stuff. (which will have to be
44            extended soon to support stuff like  "2*x + symbol + y" etc. cool
45          x)  64-bit virtual memory translation tables (PPC, etc)          stuff)
46    
47          x)  x86: convert to dyntrans. LOTS of stuff to consider.  Sprite (guest OS for DECstation emulation)
48            x)  Timing problems during bootup?
49    
50  ===============================================================================  The Device subsystem:
51            x)  allow devices to be moved and/or changed in size (down to a
52  Lower priority, but still important:              minimum size, etc, or up to a max size)
53            x)  keep track of interrupts and busses? actually, allowing any device
54          Redesign the entire "mainbus" concept:              to be a bus might be a nice idea
55                  o)  Easily configurable interrupt routing in SMP systems.          x)  refactor various clocks/nvram/cmos into one device?
56                  o)  Specific clock/bus speeds, cpu speeds etc.  
57                  o)  Synchronization over network?  ARM:
58            o)  add ID for "i80321 600MHz rev 2 (XScale core)"
59          Caches / memory hierarchies: (this is mostly MIPS-specific)          o)  make the ata controller usable for FreeBSD!
60                  o)  MIPS coproc.c: bits in config registers should reflect          x)  zaurus for openbsd...
61                      correct cache sizes for _all_ CPU types. (currently only  
62                      implemented for R4000, R1x000, and a few others)  PCI:
63                  o)  src/memory*.c: Implement correct cache emulation for          x)  add support for address fixups
64                      all CPU types. (currently only R2000/R3000 is implemented)          x)  generalize the interrupt routing stuff (lines etc). this should
65                      (per CPU, multiple levels should be possible,              be per machine? or per bus, that's better
66                      associativity etc!)  
67                  o)  R2000/R3000 isn't _100%_ correct, just almost correct :)  MacPPC:
68                  o)  Move the -S (fill mem with random) functionality into the          x)  dev_zs / interrupts?
69                      memory.c subsystem, not machine.c or wherever it is now          x)  adb controller; keyboard
70                  o)  ECC stuff, simulation of memory errors?  (Machine dependant)          x)  make OpenBSD/macppc work (PCI controller stuff)
71                  o)  More than 4GB of emulated RAM, when run on a 32-bit host?  
72                      (using manual swap-out of blocks to disk, ugly)  Network layer:
73                  o)  A global command line option should be used to turn          o)  DHCP (for Debian and BSD installers :-)
74                      cache emulation on or off. When off, caches should be          o)  increase performance
75                      faked like they are right now. When on, caches and          o)  don't rely on NetBSD-ish usage
76                      memory latencies should be emulated as correctly as          o)  Multiple networks per emulation, and let different
77                      possible.              NICs in machines connect to different networks.
78            o)  many other issues: see src/net.c
79          Network layer:  
80                  o)  Multiple networks per emulation, and let different  Busses:
81                      NICs in machines connect to different networks.          o)  Redesign the entire "mainbus" concept!
82                  o)  many other issues: see src/net.c          o)  Busses should be placed in a hierarchical tree!
83            o)  Easily configurable interrupt routing in SMP systems.
84          MIPS CPU emulation:          o)  Specific clock/bus speeds, cpu speeds etc.
85                  o)  i386 bintrans backend: movn etc, slt[u] for          o)  Synchronization over network? or at least in dyntrans within
86                          64-bit mode, 64-bit shifts etc              one emulated machine
87                  o)  Instructions:          o)  dev->bus: TurboChannel, PCMCIA, ADB?
88                          o)  All ISAs:  
89                                  o)  Floating point exception handling, and  Config file parser:
90                                          add more instructions.          o)  Refresh/rewrite it :)
91                                  o)  Finish the MIPS16 translator, and test it!          o)  Usage of any expression available through the debugger
92                                  o)  MIPS ISA I, II, III, IV          o)  Expressions such as "add device" would be nice to be able
93                                  o)  MIPS V (SIMD vector stuff?)              to do on the command line manually.
94                                  o)  MDMX  (MIPS Digital Media Extension)          o)  Allow machine() entries even if there is no emul() entry (but
95                                  o)  MIPS 3D              then don't allow any emul() entries at all).
96                                  o)  MIPS MT (Multi-thread stuff) (What's this?)          o)  Support for running debugger commands (like the -c
97                          o)  Warn about mis-used bit fields (ie bits that              command line option)
98                              should be all zeroes, warn about if they are not)!  
99                              Both for coprocessor registers and for instruction  Floating point layer:
100                              opcodes.          o)  make it common enough to be used by _all_ emulation modes
101                          o)  the special2 stuff is a mess right now          o)  non-IEEE modes (i.e. x86)?
102                          o)  warn and/or cause exceptions for unimplemented  
103                              instructions (depending on CPU type)  Userland emulation:
104                  o)  R2000/R3000:          x)  Lots of stuff; freebsd and netbsd (and linux?) syscalls.
105                          x)  R3000 "tri-byte stores". (What's this?)          x)  Dynamic linking? Hm.
106                  o)  R4000 and others:  
107                          x)  watchhi/watchlo exceptions, and other exception  Sound:
108                              handling details          x)  generic sound framework
109                  o)  R10000 and others:  (R12000, R14000 ?)          x)  add one or more sound cards as devices
110                          x)  memory space, exceptions, ...  
111                          x)  use cop0 framemask for tlb lookups  Caches / memory hierarchies: (this is mostly MIPS-specific)
112                              (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)  MIPS coproc.c: bits in config registers should reflect
113                  o)  Implement load delays?  Warnings on interlocks.              correct cache sizes for _all_ CPU types. (currently only
114                  o)  Implement all coprocessor 0 bits / functions.              implemented for R4000, R1x000, and a few others)
115                          x)  coproc 0 selectors! (R4000 ?)          o)  src/memory*.c: Implement correct cache emulation for
116                  o)  R4300 (nintendo64, no mmu?), R5900 (playstation2, weird              all CPU types. (currently only R2000/R3000 is implemented)
117                          TLB/cache? 128-bit GPRs, new instructions),              (per CPU, multiple levels should be possible,
118                          4K (note: NOT R4000), 5K (note: NOT R5000),              associativity etc!)
119                          R6000 (ISA II), R8000          o)  R2000/R3000 isn't _100%_ correct, just almost correct :)
120                  o)  Multi-cpu stuff:          o)  Move the -S (fill mem with random) functionality into the
121                          +)  Interrupt routing (ie devices vs mainbus, or              memory.c subsystem, not machine.c or wherever it is now
122                              connect each device to a fixed cpu)          o)  ECC stuff, simulation of memory errors?  (Machine dependent)
123                          +)  SGI's NUMA architecture. Study          o)  More than 4GB of emulated RAM, when run on a 32-bit host?
124                                  x)  Linux sources              (using manual swap-out of blocks to disk, ugly)
125                                  x)  SGI's specs on NUMA address space          o)  A global command line option should be used to turn
126                          +)  Ultrix?  NetBSD doesn't do SMP on MIPS yet :-(              cache emulation on or off. When off, caches should be
127                          +)  Own experiments with ycx2.              faked like they are right now. When on, caches and
128                memory latencies should be emulated as correctly as
129          File/disk handling:              possible.
130                  o)  Better handling of tape files  
131    MIPS CPU emulation:  (note: this is for the OLD mips stuff)
132          Debugger:          o)  i386 bintrans backend: movn etc, slt[u] for
133                  o)  Read function argument count and types from binaries? (ELF?)                  64-bit mode, 64-bit shifts etc
134                  o)  Demangle C++ names.          o)  Instructions:
135                    o)  All ISAs:
136          Userland ABI emulation:                          o)  Floating point exception handling, and
137                  o)  see src/useremul.c                                  add more instructions.
138                            o)  Finish the MIPS16 translator, and test it!
139          Terminal based interactive debugger:                          o)  MIPS ISA I, II, III, IV
140                  o)  see src/debugger.c                          o)  MIPS V (SIMD vector stuff?)
141                            o)  MDMX  (MIPS Digital Media Extension)
142          Terminal/console stuff:                          o)  MIPS 3D
143                  o)  allow emulated serial ports to be connected to the outside                          o)  MIPS MT (Multi-thread stuff) (What's this?)
144                      world in a more generic way, or even to other emulated                  o)  Warn about mis-used bit fields (ie bits that
145                      machines(!)                      should be all zeroes, warn about if they are not)!
146                        Both for coprocessor registers and for instruction
147          Regression tests.  (Needs to be totally rewritten, the old framework                      opcodes.
148                  was removed because it was useless.)                  o)  the special2 stuff is a mess right now
149                    o)  warn and/or cause exceptions for unimplemented
150          Save state of the whole emulated machine, to be able to load it back                      instructions (depending on CPU type)
151                  in later?  (Memory, all device's states, all registers and          o)  R2000/R3000:
152                  so on.  Like taking a snapshot. (SimOS seems to do this,                  x)  R3000 "tri-byte stores". (What's this?)
153                  according to its website.))          o)  R4000 and others:
154                    x)  watchhi/watchlo exceptions, and other exception
155          Better X-windows functionality:                      handling details
156                  o)  CLEAN UP the ugly event code          o)  R10000 and others:  (R12000, R14000 ?)
157                  o)  Mouse clicks can be "missed" in the current system; this is                  x)  memory space, exceptions, ...
158                      not good. They should be put on a stack of some kind.                  x)  use cop0 framemask for tlb lookups
159                  o)  More 2D and 3D framebuffer acceleration.                      (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)  Non-resizable windows?  Or choose scaledown depending          o)  Implement load delays?  Warnings on interlocks.
161                          on size (and center the image, with a black border).          o)  Implement all coprocessor 0 bits / functions.
162                  o)  Different scaledown on different windows?                  x)  coproc 0 selectors! (R4000 ?)
163                  o)  Switch scaledown during runtime? (Ala CTRL-ALT-plus/minus)          o)  R4300 (nintendo64, no mmu?), R5900 (playstation2, weird
164                  o)  Keyboard and mouse events:                  TLB/cache? 128-bit GPRs, new instructions),
165                          x)  Do this for more machines than just DECstation                  4K (note: NOT R4000), 5K (note: NOT R5000),
166                          x)  more X11 cursor keycodes                  R6000 (ISA II), R8000
167                          x)  Keys like CTRL, ALT, SHIFT do not get through          o)  Multi-cpu stuff:
168                              by themselves (these are necessary for example                  +)  Interrupt routing (ie devices vs mainbus, or
169                              to change the font of an xterm in X in the                      connect each device to a fixed cpu)
170                              emulator)                  +)  SGI's NUMA architecture. Study
171                  o)  Generalize the framebuffer stuff by moving _ALL_ X11                          x)  Linux sources
172                          specific code to src/x11.c!                          x)  SGI's specs on NUMA address space
173                    +)  Ultrix?  NetBSD doesn't do SMP on MIPS yet :-(
174          Statistics:  (this could be interesting)                  +)  Own experiments with ycx2.
175                  o)  Save to file and show graphics. It should be possible to  
176                      run gxemul after a simulation to just show the graphics,  File/disk/symbol handling:
177                      or convert to a .ppm or .tga or similar.          o)  Better handling of tape files
178                  o)  memory accesses (to measure cache efficiency and          o)  Read function argument count and types from binaries? (ELF?)
179                          page coloring efficiency)          o)  Demangle C++ names.
180                  o)  nr of simultaneous ASIDs in use in the TLB, for MIPS  
181                  o)  percentage of time spent in different "states", such as  Debugger:
182                      running userland code, kernel code, or idling (for CPUs          o)  see src/debugger.c for more
183                      that have such an instruction, or whenever the PC is  
184                      inside a specific idle-function (address range)).  Userland ABI emulation:
185                      Possible additional state (for example on R3000): caches          o)  see src/useremul.c
186                      disabled.  
187                  o)  position of read/write on (SCSI) disks  Terminal/console:
188            o)  allow emulated serial ports to be connected to the outside
189                world in a more generic way, or even to other emulated
190                machines(?)
191    
192    Save state of the whole emulated machine, to be able to load it back
193            in later?  (Memory, all device's states, all registers and
194            so on.  Like taking a snapshot. (SimOS seems to do this,
195            according to its website.))
196    
197    Better framebuffer and X-windows functionality:
198            o)  -Yx sometimes causes crashes.
199            o)  Simple device access to framebuffer_blockcopyfill() etc,
200                and text output (using the built-in fonts), for dev_fb.
201            o)  CLEAN UP the ugly event code
202            o)  Mouse clicks can be "missed" in the current system; this is
203                not good. They should be put on a stack of some kind.
204            o)  More 2D and 3D framebuffer acceleration.
205            o)  Non-resizable windows?  Or choose scaledown depending
206                    on size (and center the image, with a black border).
207            o)  Different scaledown on different windows?
208            o)  Switch scaledown during runtime? (Ala CTRL-ALT-plus/minus)
209            o)  Keyboard and mouse events:
210                    x)  Do this for more machines than just DECstation
211                    x)  more X11 cursor keycodes
212                    x)  Keys like CTRL, ALT, SHIFT do not get through
213                        by themselves (these are necessary for example
214                        to change the font of an xterm in X in the
215                        emulator)
216            o)  Generalize the framebuffer stuff by moving _ALL_ X11
217                    specific code to src/x11.c!
218    
219    Statistics:  (this could be interesting)
220            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.12  
changed lines
  Added in v.22

  ViewVC Help
Powered by ViewVC 1.1.26