Things to do for the next release ================================= Fix the bugs in the DECstation-compatible serial emulation, and make a MIPS Linux demo ROM. Note: because we don't implement isolated or swapped caches, the NetBSD/pmax kernel goes into an infinite loop in r3k_size_caches(). Clean out the sample_code directory. The setup code should probably be moved into the test_code directory. Separate old xmodem stuff out from xmboot and rename it to be decboot. Modify the CPU<->coprocessor interface. We shouldn't have to do any unnecessary instruction parsing in the coprocessor code. * This means exposing interfaces that correspond to the standard coprocessor interface instructions: lwcZ/swcZ/mfcZ/mtcZ/cfcZ/ctcZ/bcZf/bcZt, and any of the ones I've left out. + bcZf/bcZt can be further simplified by only exposing the CpCond bit, as is done in real MIPS designs. * Any instructions that really are specific to the coprocessor can have their parsing handled in the coprocessor, but we should handle these special cases in the CPU core. * Also, we can make these methods part of a new Coprocessor interface class, and have a sane way of attaching cpzero as well as an fpu. Then the special case handling of the no-fpu case in cpone_emulate() can go away, by means of a minimal "nofpu" fpu implementation. Build a better debugger interface, especially for exception handling reasons. * We want to be able to make vmips stop without throwing an exception or having had a breakpoint set beforehand, so that the debugger can inspect vmips's state at random points. + Prototyped a solution where vmips catching SIGINT causes a return to the debugger by making believe that we caught a SIGTRAP. This seems to work OK but seems way clumsy. * We want to be able to see exceptions happen in the debugger: both before and after the jump to the exception handler. + Currently when the program takes an exception, the debugger shows you the exception handler, with no clue as to why you got there; GDB doesn't let you see EPC, and since taking an exception craps on the real PC, backtraces don't give you enough information to see what caused the exception. + This has the real possibility of being a place where we might want to do something differently than the way the real hardware does it. For instance, it's useful to be able to step through an exception handler, as if it were a magical jump instruction, even though it might not physically be possible on real hardware. * Also, GDB just basically doesn't understand exceptions, which makes it hard to tell what is really going on, because the exception-to-signal mapping is not one-to-one. Using "-o excmsg" can help, but it's hardly a clean solution. + We might want to look at the possibility of implementing a VMIPS-specific remote target, if it wouldn't incur too much of a maintainability burden. * GDB can't tell the difference between an interrupt (e.g. the timer going off) and an exception (e.g., a bus error); consequently, running any more than a small amount of code with interrupts on and the debugger attached is tiresome because you have to tell GDB to "continue" all the time.