--- trunk/TODO 2007/10/08 16:18:27 10 +++ trunk/TODO 2007/10/08 16:18:38 12 @@ -1,7 +1,59 @@ -$Id: TODO,v 1.139 2005/06/23 06:55:43 debug Exp $ +$Id: TODO,v 1.166 2005/08/16 05:44:33 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: + + +MIPS bintrans: + x) call/return address cache? + +dyntrans: + x) memory write protection for ARM, but NOT for Alpha (because + it has the IMB instruction... hm) + + x) call/return address cache + + x) instr_call sequence analysis support? (Useful for + handtuning combinations.) + + x) opcode statistics support? + TODO: is instr_call statistics enough? + + x) support for archs that allow transparent unaligned load/stores + + x) SMP: detect when an instruction such as ll/sc or cas is used, + and "synchronize" approximately the number of executed instructions + (or cycles) across all CPUs. + + x) support for variable-length instructions (x86, m68k, ...) + Perhaps: don't increase the next_ic between every + instruction, but let each instruction's handler do + that for itself. + Problem: what about instructions crossing a (virtual) + page boundary? They cannot be translated once + and for all :( and must be interpreted slowly! + + x) support for THUMB or MIPS16 (arm, mips) + + x) support for Delay slots! (mips, sparc, hppa) + + x) Alpha: hahaha, zapnot and inserts/extracts don't + compile into very nice code :-| fix this + + x) 64-bit virtual memory translation tables (PPC, etc) + + x) x86: convert to dyntrans. LOTS of stuff to consider. + + +=============================================================================== + +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 @@ -28,20 +80,11 @@ NICs in machines connect to different networks. o) many other issues: see src/net.c - 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) Dynamic-but-not-binary translation? - 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! @@ -74,63 +117,21 @@ 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) 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) 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) - File/disk handling: - o) Read function argument count and types from binaries? (ELF?) o) Better handling of tape files + Debugger: + o) Read function argument count and types from binaries? (ELF?) + o) Demangle C++ names. + Userland ABI emulation: o) see src/useremul.c @@ -142,8 +143,8 @@ world in a more generic way, or even to other emulated machines(!) - Regression tests: (Should be totally rewritten.) - 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