/[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 12 by dpavlin, Mon Oct 8 16:18:38 2007 UTC
# Line 1  Line 1 
1  $Id: TODO,v 1.127 2005/04/15 21:39:54 debug Exp $  $Id: TODO,v 1.166 2005/08/16 05:44:33 debug Exp $
2    
3  Here's a short list of what I have left to do on GXemul. This file is a mess.  ===============================================================================
 Order is random. Don't trust it to be up-to-date.  
4    
5    High priority stuff:
6    
7    
8    MIPS bintrans:
9            x)  call/return address cache?
10    
11    dyntrans:
12            x)  memory write protection for ARM, but NOT for Alpha (because
13                    it has the IMB instruction... hm)
14    
15            x)  call/return address cache
16    
17            x)  instr_call sequence analysis support? (Useful for
18                    handtuning combinations.)
19    
20            x)  opcode statistics support?
21                    TODO: is instr_call statistics enough?
22    
23            x)  support for archs that allow transparent unaligned load/stores
24    
25            x)  SMP: detect when an instruction such as ll/sc or cas is used,
26                and "synchronize" approximately the number of executed instructions
27                (or cycles) across all CPUs.
28    
29            x)  support for variable-length instructions (x86, m68k, ...)
30                    Perhaps:  don't increase the next_ic between every
31                    instruction, but let each instruction's handler do
32                    that for itself.
33                    Problem: what about instructions crossing a (virtual)
34                            page boundary? They cannot be translated once
35                            and for all :( and must be interpreted slowly!
36    
37            x)  support for THUMB or MIPS16  (arm, mips)
38    
39            x)  support for Delay slots!  (mips, sparc, hppa)
40    
41            x)  Alpha: hahaha, zapnot and inserts/extracts don't
42                compile into very nice code :-|  fix this
43    
44            x)  64-bit virtual memory translation tables (PPC, etc)
45    
46            x)  x86: convert to dyntrans. LOTS of stuff to consider.
47    
48    
49    ===============================================================================
50    
51    Lower priority, but still important:
52    
53            Redesign the entire "mainbus" concept:
54                    o)  Easily configurable interrupt routing in SMP systems.
55                    o)  Specific clock/bus speeds, cpu speeds etc.
56                    o)  Synchronization over network?
57    
58          Caches / memory hierarchies: (this is mostly MIPS-specific)          Caches / memory hierarchies: (this is mostly MIPS-specific)
59                  o)  MIPS coproc.c: bits in config registers should reflect                  o)  MIPS coproc.c: bits in config registers should reflect
# Line 27  Order is random. Don't trust it to be up Line 78  Order is random. Don't trust it to be up
78          Network layer:          Network layer:
79                  o)  Multiple networks per emulation, and let different                  o)  Multiple networks per emulation, and let different
80                      NICs in machines connect to different networks.                      NICs in machines connect to different networks.
                 o)  Network across multiple hosts.  
                 o)  Fixed MAC addresses for NICs, fixed IPv4 addresses if  
                     DHCP or RARP is used.  
81                  o)  many other issues: see src/net.c                  o)  many other issues: see src/net.c
82    
         Configure script:  
                 o)  Only enable Alpha prefetch on pca56 etc, not on ev4, ev5.  
                 o)  Use getopts?  
                 o)  X11 libs and headers via command line option?  
                 o)  Verify that the configure script, building and running  
                     the emulator works on some platforms:  
                         +)  Irix, AIX, QNX  
                         +)  MacOS X  (I've not tried this personally yet)  
                         +)  Ultrix using gcc? (Inside the emulator)  
   
         CPU emulation:  
                 o)  Binary translation:  
                         +)  use an Intermediate Representation!  
                         +)  recursive translation?  
                         +)  basic blocks instead of one-instruction? :)  
                         +)  on Alpha: don't assume pca56-like byte load/store?  
                         +)  write backends for UltraSparc and MIPS  
                         +)  see src/bintrans.c for more info  
                 o)  All the non-MIPS modes need a bit of work.  
   
83          MIPS CPU emulation:          MIPS CPU emulation:
84                    o)  i386 bintrans backend: movn etc, slt[u] for
85                            64-bit mode, 64-bit shifts etc
86                  o)  Instructions:                  o)  Instructions:
87                          o)  Regression tests (see tests/README for more info):                          o)  All ISAs:
88                                  o)  Floating point exception handling, and                                  o)  Floating point exception handling, and
89                                          add more instructions.                                          add more instructions.
90                                  o)  Finish the MIPS16 translator, and test it!                                  o)  Finish the MIPS16 translator, and test it!
# Line 87  Order is random. Don't trust it to be up Line 117  Order is random. Don't trust it to be up
117                          4K (note: NOT R4000), 5K (note: NOT R5000),                          4K (note: NOT R4000), 5K (note: NOT R5000),
118                          R6000 (ISA II), R8000                          R6000 (ISA II), R8000
119                  o)  Multi-cpu stuff:                  o)  Multi-cpu stuff:
120                            +)  Interrupt routing (ie devices vs mainbus, or
121                                connect each device to a fixed cpu)
122                          +)  SGI's NUMA architecture. Study                          +)  SGI's NUMA architecture. Study
123                                  x)  Linux sources                                  x)  Linux sources
124                                  x)  SGI's specs on NUMA address space                                  x)  SGI's specs on NUMA address space
125                          +)  Ultrix?  NetBSD doesn't do SMP on MIPS yet :-(                          +)  Ultrix?  NetBSD doesn't do SMP on MIPS yet :-(
126                          +)  Own experiments with ycx2.                          +)  Own experiments with ycx2.
127    
         Emulation of specific machines and devices:  
                 o)  Clean up stuff to make it possible to emulate multiple  
                     (different) machines simultaneously.  
                 o)  Use same clock for all emulations and machines.  
                 o)  Clean up the device stuff (registering of devices etc)  
                 o)  Various SCSI and IDE controllers  
                 o)  PS/2-style keyboard controller (for several machines)  
                 o)  Generic busses;  
                         x)  PCI:  i/o and interrupts  
                         x)  QBus-22 (DECsystem 5500, 5400?)  
                 o)  DECstations (pmax):  
                         x)  ioasic  
                         x)  framebuffers:  
                                 +)  better cursor support, overlays?,  
                                 +)  2D/3D acceleration, PX[G]  
                         x)  status words / control words, make this more  
                                 portable/cleaner  
                         x)  scsi controller(s): sii, DMA for asc  
                         x)  serial controllers: ssc, scc (and more work on dc?)  
                         x)  nvram on decstation 5000/125:  when using X11,  
                                 set console=g or similar  
                         x)  DECstation 5840? "xbi-based SMP"  
                 o)  SGI and ARC machines (sgimips, arc):  
                         x)  IP32 ("O2"): (Lots of stuff)  
                                 +)  mec (ethernet)  
                                 +)  pci  
                                 +)  ahc (scsi)  
                                 +)  ps2 kbd  
                                 +)  memory controller  
                                 +)  framebuffer/graphics  
                                 +)  caches  
                         x)  more ARCBIOS stuff  
                         x)  Memory/interrupt controllers  
                         x)  IP30 (Linux with graphics support?)  
                         x)  SMP / NUMA?  (SGI and various ARC machines)  
                 o)  Playstation 2:  
                         Hardware:  OHCI usb controller, keyboard, ...  
                 o)  Cobalt:  PCI and interrupt system, ethernet,  
                         harddisk controller(s)  
                 o)  Less interesting platforms:  
                         o)  newsmips:  
                                 o)  NetBSD/newsmips, get it to detect a "real"  
                                     model, right now everything is 100% bogus  
                         o)  mipsco? (NetBSD)  
                         o)  wgrisc? (big endian R3000, in OpenBSD's attic)  
                         o)  other embedded / evaluation MIPS boards  
                         o)  Playstation 1? R3000A. Weird hardware?  
                                 No FPU, but something as coproc 2.  
                         o)  Nintendo 64, http://www.nintendo.com/systems/n64/n64_specs.jsp  
                                 (R4300, 4MB RAM, really weird memory map)  
                 o)  non-MIPS  
   
128          File/disk handling:          File/disk handling:
                 o)  More than one type of disk in a machine (say, IDE + FLOPPY,  
                     or SCSI + IDE); how to handle this nicely?  
                 o)  Read function argument count and types from binaries? (ELF?)  
                 o)  ELF: separate LE/BE (MIPS instruction format) from LSB/MSB  
                         (ELF structure format)?  
129                  o)  Better handling of tape files                  o)  Better handling of tape files
130    
131            Debugger:
132                    o)  Read function argument count and types from binaries? (ELF?)
133                    o)  Demangle C++ names.
134    
135          Userland ABI emulation:          Userland ABI emulation:
136                  o)  see src/useremul.c                  o)  see src/useremul.c
137    
138          Terminal based interactive debugger:          Terminal based interactive debugger:
139                  o)  see src/debugger.c                  o)  see src/debugger.c
140    
141          GDB interface? (Maybe not necessary; the built-in debugger feels          Terminal/console stuff:
142          more useful.)                  o)  allow emulated serial ports to be connected to the outside
143                        world in a more generic way, or even to other emulated
144          GUI, interactive debugger?  GTK+?  (The GUI _must be optional_!)                      machines(!)
                 o)  Breakpoints (complex expressions? combinations of register  
                         states, memory accesses and so on)  
                 o)  Instruction trace  
                 o)  Disassembly of RAM (_NOT_ the same as instruction trace)  
                 o)  Function call trace  
                 o)  Inspection of CPU registers/state, coprocessor  
                         registers/state, any device registers/state/contents  
                         o)  Framebuffers in windows / tabs.  
                         o)  Contents of RAM  
                 o)  "Start new emulation" should allow amount of  
                         RAM and nr of cpus to easily be specified.  
                         Multiple simultaneous machines should be possible.  
                 o)  Disk images.  
145    
146          Regression tests:          Regression tests.  (Needs to be totally rewritten, the old framework
147                  o)  see tests/                  was removed because it was useless.)
148    
149          Save state of the whole emulated machine, to be able to load it back          Save state of the whole emulated machine, to be able to load it back
150                  in later?  (Memory, all device's states, all registers and                  in later?  (Memory, all device's states, all registers and

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

  ViewVC Help
Powered by ViewVC 1.1.26