-
Notifications
You must be signed in to change notification settings - Fork 0
/
TODO
187 lines (170 loc) · 7.03 KB
/
TODO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
mips64emul TODO
---------------
This file is a mess. Order is random. Don't trust it to be up-to-date.
Caches / memory hierarchies:
o) Implement correct cache emulation (per CPU, multiple
levels should be possible)
o) Move the -H (fill mem with random) functionality into the
memory.c subsystem, not machine.c or wherever it is now
o) ECC stuff, simulation of memory errors? (Machine dependant)
o) More than 4GB of emulated RAM, when run on a 32-bit host?
(using manual swap-out of blocks to disk, ugly)
o) Cache latencies in number of cycles or instructions.
Should device reads/writes also return the number of
cycles they used?
o) A global command line option should be used to turn
cache emulation on or off. When off, caches should be
faked like they are right now. When on, caches and
memory latencies should be emulated as correctly as
possible.
Binary translation: src/bintrans.c
Network layer
o) ethernet interfaces
o) (userland, non-root) network stack
Command line option parsing:
o) Use only one letter for selecting machine type (followed
by a substring of the machine type), not one letter
for each machine type as it is now.
CPU Emulation:
o) Factor out the MIPS dependant parts of the cpu, so that
(in theory) the emulator could support other architectures
as well. (sparc64?)
o) Instructions:
o) Regression tests (see tests/README for more info)
o) Floating point exception handling, and
add more instructions.
o) Finish the MIPS16 translator, and test it!
o) MIPS V (SIMD vector stuff?)
o) MDMX? (MIPS Digital Media Extension)
o) Warn about mis-used bit fields (ie bits that
should be all zeroes, warn about if they are not)!
Both for coprocessor registers and for instruction
opcodes.
o) warn and/or cause exceptions for unimplemented
instructions (depending on CPU type)
o) Nr of instructions per second is NOT the number of cycles
per second, this is CPU dependant. Several subsystems
(CPUs, other systems) may need to have speeds fixed
relative to each other.
o) R2000/R3000:
x) Make sure that registers (INCLUDING coprocessor
registers) are always sign-extended. (32-bit stuff)
x) R3000 "tri-byte stores"???
o) R4000 and others:
x) watchhi/watchlo exceptions, and other exception
handling details
o) R10000 and others: (R12000, R14000 ?)
x) memory space, exceptions, ...
x) use cop0 framemask for tlb lookups
(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) Implement load delays? Warnings on interlocks.
o) Implement all coprocessor 0 bits / functions.
x) coproc 0 selectors! (R4000 ?)
x) BEV and all exception vectors....
o) R4300 (nintendo64, no mmu?), R5900 (playstation2, weird
TLB/cache? 128-bit GPRs, new instructions),
4K (note: NOT R4000), 5K (note: NOT R5000),
R6000 (ISA II), R8000
Emulation of specific machines and devices:
o) SCSI controllers!
o) "wdc" IDE controller!
o) Busses, interrupt systems, and ROM emulation:
x) Make interrupt sharing more generic!
x) PCI: i/o and interrupts
x) TURBOchannel (many DEC systems)
x) ARCBIOS (SGI, arc?)
x) QBus-22 (DECsystem 5500, 5400?)
o) DECstations (pmax):
framebuffers:
better cursor support, overlays?,
2D/3D acceleration, PX[G]
status words / control words, make this more
portable/cleaner
scsi controller(s): sii, asc (+ DMA)
ethernet controller(s): le, fddi?
serial controllers: dc, ssc, scc
nvram on decstation 5000/125: when using X11,
set console=g or similar
DECstation 5840? "xbi-based SMP"
o) SGI and ARC machines (sgimips, arc):
x) Finish the SGI O2 framebuffer and keyboard support
x) SMP / NUMA?
x) Jazz (ARC)
x) Interrupts (PCI and others) (both ARC and SGI)
o) Cobalt: PCI and interrupt system, ethernet,
harddisk controller(s)
o) Playstation 2:
R5900 "weird" instructions (most needed by Linux
and NetBSD are already implemented, but
perhaps others are needed as well)
Hardware: OHCI usb controller, keyboard,
IDE controller, ...
Has an R3000A as a subsystem (!)
o) hpcmips: framebuffer(s) and harddisk controller,
among other things
o) newsmips?
o) mipsco?
o) Less interesting platforms:
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)
Multi-cpu stuff:
o) SGI's NUMA architecture. Study
x) Linux sources
x) SGI's specs on NUMA address space
o) Ultrix? (NetBSD is not SMP yet on any MIPS platform,
it seems.)
o) Own experiments with ycx2.
File/disk handling:
o) Read function argument count and types from binaries? (ELF?)
o) zlib support (should be optional) for:
x) loading gzipped kernels directly
x) (read-only) disk images (?)
o) ELF: separate LE/BE (MIPS instruction format) from LSB/MSB
(ELF structure format)?
o) Better handling of tape files
Userland ABI emulation: src/useremul.c
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.
Save state of the whole emulated machine, to be able to load it back
in later? (Memory, all device's states, all registers and
so on. Like taking a snapshot)
Better X-windows functionality:
o) Cursor transparency masking
o) More 2D and 3D framebuffer acceleration
o) Switch scaledown during runtime? (Ala CTRL-ALT-plus/minus)
o) Keyboard and mouse events:
x) Do this for more machines than just DECstation
x) How about multiple framebuffer windows?
x) Try to make the emulated mouse cursor coordinates
track the host's X11 mouse! (This might be
bad to enable if the cursor is for example
a text console cursor.)
x) X11 cursor keycodes and such?
o) Non-resizable windows?
o) Generalize the framebuffer stuff by moving _ALL_ X11
specific code to src/x11.c!
Statistics: (this could be interesting)
o) memory accesses (to measure cache efficiency and
page coloring efficiency)
o) nr-of-instructions-in-a-row-that-don't-affect-eachother,
and make histograms of this data
o) nr of simultaneous ASIDs in use in the TLB (x = time)
o) position of read/write on (SCSI) disks (x = time)
Write Documentation:
o) A very tiny manpage
o) User Documentation (HTML)
o) Technical Documentation (HTML)