--- trunk/TODO 2007/10/08 16:18:00 4 +++ trunk/TODO 2007/10/08 16:19:11 18 @@ -1,8 +1,44 @@ -$Id: TODO,v 1.127 2005/04/15 21:39:54 debug Exp $ +$Id: TODO,v 1.175 2005/10/23 14:24:09 debug Exp $ -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. +=============================================================================== +High priority stuff: + + +Old MIPS bintrans: + + x) call/return address cache? + + x) Turn the MIPS cpu family stuff into dyntrans. + + +Dyntrans: + + x) Separate data and instruction translations? + + x) Generalize the inline quick_pc_to_pointers? + + x) Call/return hints... + + x) More 64-bit stuff. + + x) Lots of other stuff: see src/cpus/README_DYNTRANS + + +Userland emulation: + + x) Lots of stuff. + + x) Dynamic linking? Hm. + +=============================================================================== + +Lower priority, but still important: + + Redesign the entire "mainbus" concept: + o) Easily configurable interrupt routing in SMP systems. + o) Specific clock/bus speeds, cpu speeds etc. + o) Synchronization over network? Caches / memory hierarchies: (this is mostly MIPS-specific) o) MIPS coproc.c: bits in config registers should reflect @@ -27,34 +63,13 @@ Network layer: o) Multiple networks per emulation, and let different 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. o) many other issues: see src/net.c - 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. - MIPS CPU emulation: + o) i386 bintrans backend: movn etc, slt[u] for + 64-bit mode, 64-bit shifts etc o) Instructions: - o) Regression tests (see tests/README for more info): + o) All ISAs: o) Floating point exception handling, and add more instructions. o) Finish the MIPS16 translator, and test it! @@ -87,98 +102,32 @@ 4K (note: NOT R4000), 5K (note: NOT R5000), R6000 (ISA II), R8000 o) Multi-cpu stuff: + +) Interrupt routing (ie devices vs mainbus, or + connect each device to a fixed cpu) +) SGI's NUMA architecture. Study x) Linux sources x) SGI's specs on NUMA address space +) Ultrix? NetBSD doesn't do SMP on MIPS yet :-( +) Own experiments with ycx2. - 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 - 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)? o) Better handling of tape files + Debugger: + o) Read function argument count and types from binaries? (ELF?) + o) Demangle C++ names. + o) see src/debugger.c for more stuff + Userland ABI emulation: o) see src/useremul.c - Terminal based interactive debugger: - o) see src/debugger.c - - GDB interface? (Maybe not necessary; the built-in debugger feels - more useful.) - - GUI, interactive debugger? GTK+? (The GUI _must be optional_!) - 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. + Terminal/console stuff: + o) allow emulated serial ports to be connected to the outside + world in a more generic way, or even to other emulated + machines(!) - Regression tests: - o) see tests/ + Regression tests. (Needs to be totally rewritten, the old framework + was removed because it was useless.) Save state of the whole emulated machine, to be able to load it back in later? (Memory, all device's states, all registers and