--- trunk/TODO 2007/10/08 16:22:32 42 +++ trunk/TODO 2007/10/08 16:22:56 44 @@ -1,10 +1,45 @@ -$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 $ Some things, in no specific order, that I'd like to fix: (Some items in this list are perhaps already fixed.) +------------------------------------------------------------------------------- + +A first pass of installation regression testing of NetBSD 4.0 RC1 in GXemul: + + X pmax (including X Windows out-of-the-box) + X arc (1.6.2 -> 4.0! Yay!) + hpcmips + cobalt + evbmips + algor + sgimips + cats + evbarm + netwinder + prep nej, 2.0 är senaste som funkar :( + X macppc + pmppc + X dreamcast + X landisk + +X = done and worked fine + +------------------------------------------------------------------------------- + +Perform a second regression test pass, when the actual NetBSD 4.0 release +has happened. + + o) Test all guest OSes. + o) Update: + URLs + Versions + + o) Make a new GXemul release: 0.4.6.1 + +------------------------------------------------------------------------------- + M88K: - o) Neither NIP nor FIP valid in rte? o) FIP != NIP + 4, in rte! (Simulate delayed branch stuff.) o) cpu_dyntrans.c: MEMORY_USER_ACCESS implementation for M88K! o) xmem: Set transaction registers! @@ -42,7 +77,6 @@ x) _MAYBE_ TX79 and R5900 actually differ in their opcodes? Check this carefully! o) Dyntrans: Count register updates are probably not 100% correct yet. - o) Refactor code for performance and readability/maintainability. o) (Re)implement 128-bit loads/stores for R5900. o) Coprocessor 1x (i.e. 3) should cause cp1 exceptions, not 3? (See http://lists.gnu.org/archive/html/qemu-devel/2007-05/msg00005.html) @@ -81,16 +115,15 @@ x) NetBSD/evbsh3, hpcsh! Linux? x) Floating point speed! 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. x) Exceptions for unaligned load/stores. OpenBSD/landisk uses this mechanism for its reboot code (machine_reset). - x) Think carefully about how to implement SH5/SH64 (for evbsh5). Landisk SH4: x) When NetBSD/landisk 4.0 has been released, make sure it works in the emulator. (Update documentation, etc.) + 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. Dreamcast: x) G2 DMA @@ -172,6 +205,17 @@ "after a short while", although a few interrupts get through? o) Perhaps find a copy of BeOS and try it? +Malta: + o) The Linux/Malta kernel at people.debian.org/~ths/qemu/malta/ + almost works: + ./gxemul -x -o 'rd_start=0x80800000 rd_size=10000000 init=/bin/sh' -C 4KEc + -e malta 0x80800000:people.debian.org/~ths/qemu/malta/initrd.gz + people.debian.org/~ths/qemu/malta/vmlinux + (Remove "init=/bin/sh" to boot into the Debian installer.) + There are at least two things that need to be fixed: + 1. PCI IDE; make Linux oops. + 2. Implement the NIC. + HPCmips: x) Mouse/pad support! :) x) A NIC? (As a PCMCIA device?) @@ -202,8 +246,6 @@ What if the guest OS (running on an emulated SMP machine) has a usertask running, with userland threads? o) Try to make the debugger more modular and, if possible, reentrant! - o) Remove the emul command? (But show network info if showing - machines?) o) Memory dumps should be able to dump both physical and virtual emulated memory. o) Evaluate expressions within []? That would allow stuff like @@ -221,6 +263,9 @@ o) Ctrl-C doesn't enter the debugger on some OSes (HP-UX?)... Dyntrans: + x) NOTE: ARM etc. that load pc-relative constants, on writes to + pages that contain translations, the ENTIRE page must be + invalidated, not just the 1/32th that was code. x) For 32-bit emulation modes, that have emulated TLBs: tlbindex arrays of mapped pages? Things to think about: x) Only 32-bit mode! (64-bit => too much code) @@ -236,6 +281,7 @@ x) "Merge" the cur_physpage and cur_ic_page variables/pointers to one? I.e. change cur_ic_page to cur_physpage.ic_page or something. x) Instruction combination collisions? How to avoid easily... + x) superh -- no hostpage for e.g. 0x8c000000. devices as ram! x) Think about how to do both SHmedia and SHcompact in a reasonable way! (Or AMD64 long/protected/real, for that matter.) x) 68K emulation; think about how to do variable instruction @@ -266,49 +312,9 @@ x) INVALIDATION should cause translations in _all_ cpus to be invalidated, e.g. on a write to a write-protected page (containing code) - x) 16-bit encodings? (MIPS16, ARM Thumb, 32-bit SH on SH64) + x) 16-bit encodings? (MIPS16, ARM Thumb, etc) x) Lots of other stuff: see src/cpus/README_DYNTRANS - x) Native code generation backends: - 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. - -------------------------------------------------------------------------------- - + x) Native code generation backends... think carefully about this. Simple Valgrind-like checks? o) Mark every address with bits which tell whether or not the address @@ -390,12 +396,6 @@ securely". x) Try NetBSD/arc 4.x! (It seems to work with disk images!) 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? x) Rewrite the section about experimental devices, after the framebuffer acceleration has been implemented, and demos written. (Symbolic names instead of numbers; example @@ -404,15 +404,6 @@ x) "a very simple linear framebuffer device (for graphics output)" under "which machines does gxemul emulate" ==> better 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.) The Device subsystem: x) allow devices to be moved and/or changed in size (down to a @@ -422,10 +413,6 @@ registering new devices, and for moving existing ones. cpu->invalidate translation caches, for all CPUs that 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? PCI: x) Pretty much everything related to runtime configuration, device @@ -478,6 +465,7 @@ x) Return value (from main). x) mmap emulation layer x) errno emulation layer + x) ioctl emulation layer for all devices :-[ x) struct conversions for many syscalls Sound: @@ -514,6 +502,8 @@ (Perhaps this needs a reasonably large re-write.) o) Remove some of the complexity in file format guessing, for Ultrix kernels that are actually disk images? + o) Remove temporary files (/tmp/gxemul.blahblah) if loading fails + for some reason (unrecognized file, etc). o) Better handling of tape files o) Read function argument count and types from binaries? (ELF?) o) Better demangling of C++ names. Note: GNU's C++ differs from e.g. @@ -524,6 +514,13 @@ o) see src/useremul.c Better framebuffer and X-windows functionality: + o) Do a complete rewrite of the framebuffer/console stuff, so that: + 1) It does not rely on X11 specifically. + 2) It is possible to interact with emulated framebuffers + and consoles "remotely", e.g. via a web page which + controls multiple virtualized machines. + 3) It is possible to run on (hypothetical) non-X11 + graphics systems. o) Generalize the update_x1y1x2y2 stuff to an extend-region() function... o) -Yx sometimes causes crashes. @@ -548,7 +545,7 @@ to change the font of an xterm in X in the emulator) o) Generalize the framebuffer stuff by moving _ALL_ X11 - specific code to src/x11.c! + specific code to a separate module. -------------------------------------------------------------------------------