1 |
$Id: TODO,v 1.125 2005/03/06 08:21:10 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 |
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 |
|
|
|
|
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! |
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) Cobalt: PCI and interrupt system, ethernet, |
|
|
harddisk controller(s) |
|
|
o) Playstation 2: |
|
|
Hardware: OHCI usb controller, keyboard, IDE, ... |
|
|
Has an R3000A as a subsystem (!) |
|
|
o) hpcmips: framebuffer(s) and harddisk controller, |
|
|
among other things |
|
|
o) newsmips: |
|
|
o) NetBSD/newsmips, get it to detect a "real" |
|
|
model, right now everything is 100% bogus |
|
|
o) Less interesting platforms: |
|
|
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) |
|
|
|
|
128 |
File/disk handling: |
File/disk handling: |
|
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 |