1 |
$Id: TODO,v 1.536 2007/06/15 22:30:17 debug Exp $ |
$Id: TODO,v 1.556 2007/09/11 21:46:35 debug Exp $ |
2 |
|
|
3 |
Some things, in no specific order, that I'd like to fix: |
Some things, in no specific order, that I'd like to fix: |
4 |
(Some items in this list are perhaps already fixed.) |
(Some items in this list are perhaps already fixed.) |
5 |
|
|
6 |
|
------------------------------------------------------------------------------- |
7 |
|
|
8 |
|
A first pass of installation regression testing of NetBSD 4.0 RC1 in GXemul: |
9 |
|
|
10 |
|
X pmax (including X Windows out-of-the-box) |
11 |
|
X arc (1.6.2 -> 4.0! Yay!) |
12 |
|
hpcmips |
13 |
|
cobalt |
14 |
|
evbmips |
15 |
|
algor |
16 |
|
sgimips |
17 |
|
cats |
18 |
|
evbarm |
19 |
|
netwinder |
20 |
|
prep nej, 2.0 är senaste som funkar :( |
21 |
|
X macppc |
22 |
|
pmppc |
23 |
|
X dreamcast |
24 |
|
X landisk |
25 |
|
|
26 |
|
X = done and worked fine |
27 |
|
|
28 |
|
------------------------------------------------------------------------------- |
29 |
|
|
30 |
|
Perform a second regression test pass, when the actual NetBSD 4.0 release |
31 |
|
has happened. |
32 |
|
|
33 |
|
o) Test all guest OSes. |
34 |
|
o) Update: |
35 |
|
URLs |
36 |
|
Versions |
37 |
|
|
38 |
|
o) Make a new GXemul release: 0.4.6.1 |
39 |
|
|
40 |
|
------------------------------------------------------------------------------- |
41 |
|
|
42 |
M88K: |
M88K: |
|
o) Neither NIP nor FIP valid in rte? |
|
43 |
o) FIP != NIP + 4, in rte! (Simulate delayed branch stuff.) |
o) FIP != NIP + 4, in rte! (Simulate delayed branch stuff.) |
44 |
o) cpu_dyntrans.c: MEMORY_USER_ACCESS implementation for M88K! |
o) cpu_dyntrans.c: MEMORY_USER_ACCESS implementation for M88K! |
45 |
o) xmem: Set transaction registers! |
o) xmem: Set transaction registers! |
77 |
x) _MAYBE_ TX79 and R5900 actually differ in their |
x) _MAYBE_ TX79 and R5900 actually differ in their |
78 |
opcodes? Check this carefully! |
opcodes? Check this carefully! |
79 |
o) Dyntrans: Count register updates are probably not 100% correct yet. |
o) Dyntrans: Count register updates are probably not 100% correct yet. |
|
o) Refactor code for performance and readability/maintainability. |
|
80 |
o) (Re)implement 128-bit loads/stores for R5900. |
o) (Re)implement 128-bit loads/stores for R5900. |
81 |
o) Coprocessor 1x (i.e. 3) should cause cp1 exceptions, not 3? |
o) Coprocessor 1x (i.e. 3) should cause cp1 exceptions, not 3? |
82 |
(See http://lists.gnu.org/archive/html/qemu-devel/2007-05/msg00005.html) |
(See http://lists.gnu.org/archive/html/qemu-devel/2007-05/msg00005.html) |
115 |
x) NetBSD/evbsh3, hpcsh! Linux? |
x) NetBSD/evbsh3, hpcsh! Linux? |
116 |
x) Floating point speed! |
x) Floating point speed! |
117 |
x) Floating point exception correctness. |
x) Floating point exception correctness. |
|
x) NetBSD HEAD (as of April 2007) hangs during bootup, because it |
|
|
turns on/off interrupts in an unfortunately synchronized way |
|
|
with dyntrans. This needs to be fixed. |
|
118 |
x) Exceptions for unaligned load/stores. OpenBSD/landisk uses |
x) Exceptions for unaligned load/stores. OpenBSD/landisk uses |
119 |
this mechanism for its reboot code (machine_reset). |
this mechanism for its reboot code (machine_reset). |
|
x) Think carefully about how to implement SH5/SH64 (for evbsh5). |
|
120 |
|
|
121 |
Landisk SH4: |
Landisk SH4: |
122 |
x) When NetBSD/landisk 4.0 has been released, make sure it works |
x) When NetBSD/landisk 4.0 has been released, make sure it works |
123 |
in the emulator. (Update documentation, etc.) |
in the emulator. (Update documentation, etc.) |
124 |
|
NetBSD HEAD (as of April 2007) hangs during bootup, because it |
125 |
|
turns on/off interrupts in an unfortunately synchronized way |
126 |
|
with dyntrans. This needs to be fixed. |
127 |
|
|
128 |
Dreamcast: |
Dreamcast: |
129 |
x) G2 DMA |
x) G2 DMA |
205 |
"after a short while", although a few interrupts get through? |
"after a short while", although a few interrupts get through? |
206 |
o) Perhaps find a copy of BeOS and try it? |
o) Perhaps find a copy of BeOS and try it? |
207 |
|
|
208 |
|
Malta: |
209 |
|
o) The Linux/Malta kernel at people.debian.org/~ths/qemu/malta/ |
210 |
|
almost works: |
211 |
|
./gxemul -x -o 'rd_start=0x80800000 rd_size=10000000 init=/bin/sh' -C 4KEc |
212 |
|
-e malta 0x80800000:people.debian.org/~ths/qemu/malta/initrd.gz |
213 |
|
people.debian.org/~ths/qemu/malta/vmlinux |
214 |
|
(Remove "init=/bin/sh" to boot into the Debian installer.) |
215 |
|
There are at least two things that need to be fixed: |
216 |
|
1. PCI IDE; make Linux oops. |
217 |
|
2. Implement the NIC. |
218 |
|
|
219 |
HPCmips: |
HPCmips: |
220 |
x) Mouse/pad support! :) |
x) Mouse/pad support! :) |
221 |
x) A NIC? (As a PCMCIA device?) |
x) A NIC? (As a PCMCIA device?) |
246 |
What if the guest OS (running on an emulated SMP machine) |
What if the guest OS (running on an emulated SMP machine) |
247 |
has a usertask running, with userland threads? |
has a usertask running, with userland threads? |
248 |
o) Try to make the debugger more modular and, if possible, reentrant! |
o) Try to make the debugger more modular and, if possible, reentrant! |
|
o) Remove the emul command? (But show network info if showing |
|
|
machines?) |
|
249 |
o) Memory dumps should be able to dump both physical and |
o) Memory dumps should be able to dump both physical and |
250 |
virtual emulated memory. |
virtual emulated memory. |
251 |
o) Evaluate expressions within []? That would allow stuff like |
o) Evaluate expressions within []? That would allow stuff like |
263 |
o) Ctrl-C doesn't enter the debugger on some OSes (HP-UX?)... |
o) Ctrl-C doesn't enter the debugger on some OSes (HP-UX?)... |
264 |
|
|
265 |
Dyntrans: |
Dyntrans: |
266 |
|
x) NOTE: ARM etc. that load pc-relative constants, on writes to |
267 |
|
pages that contain translations, the ENTIRE page must be |
268 |
|
invalidated, not just the 1/32th that was code. |
269 |
x) For 32-bit emulation modes, that have emulated TLBs: tlbindex |
x) For 32-bit emulation modes, that have emulated TLBs: tlbindex |
270 |
arrays of mapped pages? Things to think about: |
arrays of mapped pages? Things to think about: |
271 |
x) Only 32-bit mode! (64-bit => too much code) |
x) Only 32-bit mode! (64-bit => too much code) |
281 |
x) "Merge" the cur_physpage and cur_ic_page variables/pointers to |
x) "Merge" the cur_physpage and cur_ic_page variables/pointers to |
282 |
one? I.e. change cur_ic_page to cur_physpage.ic_page or something. |
one? I.e. change cur_ic_page to cur_physpage.ic_page or something. |
283 |
x) Instruction combination collisions? How to avoid easily... |
x) Instruction combination collisions? How to avoid easily... |
284 |
|
x) superh -- no hostpage for e.g. 0x8c000000. devices as ram! |
285 |
x) Think about how to do both SHmedia and SHcompact in a reasonable |
x) Think about how to do both SHmedia and SHcompact in a reasonable |
286 |
way! (Or AMD64 long/protected/real, for that matter.) |
way! (Or AMD64 long/protected/real, for that matter.) |
287 |
x) 68K emulation; think about how to do variable instruction |
x) 68K emulation; think about how to do variable instruction |
312 |
x) INVALIDATION should cause translations in _all_ cpus to be |
x) INVALIDATION should cause translations in _all_ cpus to be |
313 |
invalidated, e.g. on a write to a write-protected page |
invalidated, e.g. on a write to a write-protected page |
314 |
(containing code) |
(containing code) |
315 |
x) 16-bit encodings? (MIPS16, ARM Thumb, 32-bit SH on SH64) |
x) 16-bit encodings? (MIPS16, ARM Thumb, etc) |
316 |
x) Lots of other stuff: see src/cpus/README_DYNTRANS |
x) Lots of other stuff: see src/cpus/README_DYNTRANS |
317 |
x) Native code generation backends: |
x) Native code generation backends... think carefully about this. |
|
o) calculate at runtime whether or not chunks of emulated |
|
|
(physical) memory are worth translating to native code |
|
|
(it is assumed that it has high overhead) |
|
|
o) experiment with calling the host's cc and ld externally; |
|
|
extremely high overhead, but could be interesting none- |
|
|
theless. |
|
|
o) experiment with using LLVM, or GNU Lightning? |
|
|
o) Important cases to think about: |
|
|
x) loads/stores |
|
|
x) delay branches |
|
|
x) other kinds of calls, branches |
|
|
o) branches to already translated code blocks can |
|
|
link the blocks together (block-chaining), although |
|
|
I'll probably want to wait with this until other |
|
|
things work. |
|
|
o) The first tests should be done with "testm88k", because |
|
|
that does not affect other modes. |
|
|
|
|
|
------------------------------------------------------------------------------- |
|
|
|
|
|
Performance comparison when emulating the QEMU_MIPS machine (QEMU's default |
|
|
MIPS machine mode): |
|
|
|
|
|
mips-test-0.2: |
|
|
-------------- |
|
|
|
|
|
1. while true; do ls -l > /dev/null; echo -n .; done, 80x36 dots |
|
|
2. while true; do /usr/bin/md5sum /usr/bin/* > /dev/null; echo -n .; done, 80 dots |
|
|
3. while true; do grep hej lib/libc.so.6 > /dev/null; echo -n .; done, 80 dots |
|
|
|
|
|
Test 1 Test 2 Test 3 |
|
|
------ ------ ------ |
|
|
QEMU 0.9.0: 2 min 20 sec 45 sec 4 min 41 seconds |
|
|
GXemul-20070608: 1 min 59 sec 3 min 18 sec 18 min 10 seconds [A] |
|
|
|
|
|
|
|
|
[A] = Normal portable dyntrans, no native code generation. |
|
|
|
|
|
------------------------------------------------------------------------------- |
|
|
|
|
318 |
|
|
319 |
Simple Valgrind-like checks? |
Simple Valgrind-like checks? |
320 |
o) Mark every address with bits which tell whether or not the address |
o) Mark every address with bits which tell whether or not the address |
396 |
securely". |
securely". |
397 |
x) Try NetBSD/arc 4.x! (It seems to work with disk images!) |
x) Try NetBSD/arc 4.x! (It seems to work with disk images!) |
398 |
x) NetBSD/pmax 4 install instructions: xterm instead of vt100! |
x) NetBSD/pmax 4 install instructions: xterm instead of vt100! |
|
x) BETTER DEVICE EXAMPLES! |
|
|
o) Move away from technical.html to somewhere new. |
|
|
o) DEVICE_TICK |
|
|
o) Implement example devices using interrupts, dyntrans |
|
|
memory access, etc.? |
|
|
x) Document the dyntrans core? |
|
399 |
x) Rewrite the section about experimental devices, after the |
x) Rewrite the section about experimental devices, after the |
400 |
framebuffer acceleration has been implemented, and demos |
framebuffer acceleration has been implemented, and demos |
401 |
written. (Symbolic names instead of numbers; example |
written. (Symbolic names instead of numbers; example |
404 |
x) "a very simple linear framebuffer device (for graphics output)" |
x) "a very simple linear framebuffer device (for graphics output)" |
405 |
under "which machines does gxemul emulate" ==> better |
under "which machines does gxemul emulate" ==> better |
406 |
description? |
description? |
|
x) Better description on how to set up a cross compiler? |
|
|
Example for MIPS64. |
|
|
o) Automagic documentation generation? |
|
|
x) machines, cpus, devices. |
|
|
x) REMEMBER that several machines/devices can be in |
|
|
the same source file! |
|
|
o) Try to rewrite the install instructions for those machines |
|
|
that use 3MAX into using CATS or hpcmips? (To remove the need |
|
|
to use a raw ffs partition, using up all of the disk image.) |
|
407 |
|
|
408 |
The Device subsystem: |
The Device subsystem: |
409 |
x) allow devices to be moved and/or changed in size (down to a |
x) allow devices to be moved and/or changed in size (down to a |
413 |
registering new devices, and for moving existing ones. |
registering new devices, and for moving existing ones. |
414 |
cpu->invalidate translation caches, for all CPUs that |
cpu->invalidate translation caches, for all CPUs that |
415 |
are connected to a specific memory. |
are connected to a specific memory. |
|
x) keep track of interrupts and busses? actually, allowing any device |
|
|
to be a bus might be a nice idea. |
|
|
x) turn interrupt controllers into devices? :-) |
|
|
x) refactor various clocks/nvram/cmos into one device? |
|
416 |
|
|
417 |
PCI: |
PCI: |
418 |
x) Pretty much everything related to runtime configuration, device |
x) Pretty much everything related to runtime configuration, device |
465 |
x) Return value (from main). |
x) Return value (from main). |
466 |
x) mmap emulation layer |
x) mmap emulation layer |
467 |
x) errno emulation layer |
x) errno emulation layer |
468 |
|
x) ioctl emulation layer for all devices :-[ |
469 |
x) struct conversions for many syscalls |
x) struct conversions for many syscalls |
470 |
|
|
471 |
Sound: |
Sound: |
502 |
(Perhaps this needs a reasonably large re-write.) |
(Perhaps this needs a reasonably large re-write.) |
503 |
o) Remove some of the complexity in file format guessing, for |
o) Remove some of the complexity in file format guessing, for |
504 |
Ultrix kernels that are actually disk images? |
Ultrix kernels that are actually disk images? |
505 |
|
o) Remove temporary files (/tmp/gxemul.blahblah) if loading fails |
506 |
|
for some reason (unrecognized file, etc). |
507 |
o) Better handling of tape files |
o) Better handling of tape files |
508 |
o) Read function argument count and types from binaries? (ELF?) |
o) Read function argument count and types from binaries? (ELF?) |
509 |
o) Better demangling of C++ names. Note: GNU's C++ differs from e.g. |
o) Better demangling of C++ names. Note: GNU's C++ differs from e.g. |
514 |
o) see src/useremul.c |
o) see src/useremul.c |
515 |
|
|
516 |
Better framebuffer and X-windows functionality: |
Better framebuffer and X-windows functionality: |
517 |
|
o) Do a complete rewrite of the framebuffer/console stuff, so that: |
518 |
|
1) It does not rely on X11 specifically. |
519 |
|
2) It is possible to interact with emulated framebuffers |
520 |
|
and consoles "remotely", e.g. via a web page which |
521 |
|
controls multiple virtualized machines. |
522 |
|
3) It is possible to run on (hypothetical) non-X11 |
523 |
|
graphics systems. |
524 |
o) Generalize the update_x1y1x2y2 stuff to an extend-region() |
o) Generalize the update_x1y1x2y2 stuff to an extend-region() |
525 |
function... |
function... |
526 |
o) -Yx sometimes causes crashes. |
o) -Yx sometimes causes crashes. |
545 |
to change the font of an xterm in X in the |
to change the font of an xterm in X in the |
546 |
emulator) |
emulator) |
547 |
o) Generalize the framebuffer stuff by moving _ALL_ X11 |
o) Generalize the framebuffer stuff by moving _ALL_ X11 |
548 |
specific code to src/x11.c! |
specific code to a separate module. |
549 |
|
|
550 |
------------------------------------------------------------------------------- |
------------------------------------------------------------------------------- |
551 |
|
|