Here are some things, in no specific order, that I'd like to fix or
implement in GXemul. Some items in this list are perhaps already fixed.
Current "short-list" (unsorted)
bool-ify stuff: o) int -> bool for things like cpu->running debugmsg-related and non-exit(1) stuff (mostly): o) src/cpu/: o) debugmsg:ify at least 'cpu' and 'exception' subsystem messages. o) Fix some more exit(1) calls to cpu->running = false and make sure that they break out of the dyntrans loop. o) src/net/: o) debugmsg:ify all src/net/. o) Add an example of the "verbosity" command to the Debugger section of the documentation? Or wait until breakpoints are implemented? e.g. verbosity disk debug <-- print all messages, but breakpoint subsystem disk warn <-- break only for warn and error. Build problems: o) Building a default build on my Linux machine currently fails with duplicate definitions from Linux' bits/socket.h being "extern inlined" twice? (configure --debug works fine though) Misc.: o) Try X11 grabbing with multiple host displays? ssh with X11 forwarding from laptop? with multiple mouse pointers, _which_ mouse pointer is grabbed? o) Try all guest OSes in the documentation, cleaning up debugmsg related stuff as I go along. o) Instead of doing cpu->running = 0 in some places, and foreach cpu in the machine in some other places, then the main emul loop should check if ANY cpu goes from running to non-running, and treat that as a reason to halt the machine. there's really no reason to continue running the other CPUs if there was an error in one of them. ALSO: if about to enter single step, or single step, is true, then abort too. AND: if support for debugmsg breakpoints is to be added later, then the break-out-of-dyntrans check needs to be done not only on memory references, but potentially after ALL debugmsg printouts! o) Apply Chris Berry's patch for tap device use on Linux. o) Try tap networking on FreeBSD host (e.g. using netbsd/pmax guest). Performance better than when using simulated NAT? o) Breakpoints etc: Helper for setting/adding the break-out-of-dyntrans value to ninstr. cpu_dyntrans_abort_loop(cpu)? Debugmsg breakpoint should then: call cpu_dyntrans_abort_loop(cpu) if cpu != NULL, set about-to-enter-single-step print "subsystem breakpoint" for non-errors, print "aborting" for errors. ABORT_DT = ninstr & XXX if (ABORT_DT) { SYNCH_PC; next ic = nothing; } step/continue after hitting a breakpoint must work. counts for breakpoints, only break "after x hits". CTRL-T should print breakpoint counts. -T can be implemented as a "warning level breakpoint" for the memory subsystem. -K should implicitly be set if any breakpoints (subsystem or regular) are used. Always break on debugmsg errors! Document the break-out-of-dyntrans mechanism. o) When using e.g. "-E alpha" and there was more than one subtype, then _list_ them instead of just complaining "Maybe you forgot the -e command line option". o) Try using profil() for very basic runtime profiling? o) GXsatellite -- Gavare's eXperimental Stand-Alone Test Environment for Low-Level Interactive Testing of Emulators. base on YCX5; start with testmips.
Dyntrans / general: o) Idling: o) How about showing "has_been_idling" in the status printout? Consider removing has_been_idling alltogether? (now that the number of cycles is kept low...) o) Turn some "chars" into "bools". x) SMP: INVALIDATION should cause translations in _all_ cpus to be invalidated in the machine, e.g. on a write to a write-protected page (containing code) Horrible hack: cpu_create_or_reset_tc(cpus[i]); cpus[i]->invalidate_translation_caches( cpus[i], 0, INVALIDATE_ALL); in machine_run() seems to make Luna88K run stable (?) with 4 CPUs. Real solution may be to just implement a loop over all CPUs in memory_rw when storing data to pages? o) Per-arch overrides for whether to print symbols when executing in userspace? e.g. MIPS is OK since symbols are at kseg0. e.g. M88K is not OK, since userland and supervisor are the same numeric values. o) Why indirection via cpu->cpu_family->dumpinfo(cpu, verbose); why not just cpu->dumpinfo? x) Try to make the vaddr fix O(1) again instead of O(n), if it is possible to see if a non-canonical address has been inserted into the caches. In other words, keep track of whether a full O(n) seach is really needed or not. 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) x) One array for global pages, and one array _PER ASID_, for those archs that support that. On M88K, there should be one array for userspace, and one for supervisor, etc. x) Larger-than-4K-pages must fill several bits in the array. x) No TLB search will be necessary. x) Total host space used, for 4 KB pages: 1 MB per table, i.e. 65 MB for 32-bit MIPS, 2 MB for M88K, if one byte is used as the tlb index. x) (The index is actually +1, so that 0 means no hit.) 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 lengths across page boundaries. x) Dyntrans with valgrind-inspired memory checker. (In memory_rw, it would be reasonably simple to add; in each individual fast load/store routine = a lot more work, and it would become kludgy very fast.) o) Mark every address with bits which tell whether or not the address has been written to. o) What should happen when programs are loaded? Text/data, bss (zero filled). But stack space and heap is uninitialized. o) Uninitialized local variables: A load from a place on the stack which has not previously been stored to => warning. Increasing the stack pointer using any available means should reset the memory to uninitialized. o) If calls to malloc() and free() can be intercepted: o) Access to a memory area after free() => warning. o) Memory returned by malloc() is marked as not-initialized. o) Non-passive, but good to have: Change the argument given to malloc, to return a slightly larger memory area, i.e. margin_before + size + margin_after, and return the pointer + margin_before. Any access to the margin_before or _after space results in warnings. (free() must be modified to free the actually allocated address.) x) Dyntrans with SMP... lots of work to be done here. x) Dyntrans with cache emulation... lots of work here as well. x) Remove the concept of base RAM completely; it would be more generic to allow RAM devices to be used "anywhere". o) dev_mp doesn't work well with dyntrans yet o) In general, IPIs, CAS, LL/SC etc must be made to work with dyntrans x) Redesign/rethink the delay slot mechanism used for e.g. MIPS, so that it caches a translation (that is, an instruction word and the instr_call it was translated to the last time), so that it doesn't need to do slow to_be_translated for each end of page? x) Program Counter statistics: Per machine? What about SMP? All data to the same file? A debugger command should be possible to use to enable/ disable statistics gathering. Configuration file option! x) Breakpoints: o) Physical vs virtual addresses! o) 32-bit vs 64-bit sign extension for MIPS, and others? x) 16-bit encodings? (MIPS16, ARM Thumb, etc) x) Lots of other stuff: see src/cpus/README_DYNTRANS x) Native code generation backends... think _carefully_ about this. (Not a priority right now.) ARM: o) Big endian does not really work: loads and stores are little endian! o) More THUMB disassembly? o) More THUMB execution. o) 0xf "condition" execution: see http://engold.ui.ac.ir/~nikmehr/Appendix_B2.pdf o) Android devices. o) See netwinder_reset() in NetBSD; the current "an internal error occured" message after reboot/halt is too ugly. o) Generic ARM "wait"-like instruction? o) try to get netbsd/evbarm 3.x or 4.x running (iq80321) o) netbsd/iyonix? the i80321 device currently tells netbsd that RAM starts at 0xa0000000, but that is perhaps not correct for the iyonix. o) make the xscale counter registers (ccnt) work o) make the ata controller usable for FreeBSD! o) Debian/cats crashes because of unimplemented coproc stuff. fix this? i960: Reimplement after the C++ to C switch: x. i960 CPU: Disassembly of at least i960CA instructions. x. HP700/RX machine skeleton. x. bout file loader? x. uCLinux: CycloneVH machine for running uCLinux/i960? x. uCLinux: http://www.ibiblio.org/lou/old/ViewStation/ ? M88K: o) Instruction combinations for: memset, memcpy, memmove, strlen, bzero? o) OpenBSD/luna88k idle loop => detect and idle the host. MIPS: o) Double-check R10000 vs R4400 TLB specifics: https://techpubs.jurassic.nl/manuals/hdwr/developer/R10K_UM/sgi_html/t5.Ver.2.0.book_347.html o) MIPS: ehb detection, cop0 write -> tlb instructions. o) ALU operations (typically addiu, or, etc) can be hardcoded/inlined for common register pairs or even triples. Classic generate_blahblah and an array. Reduces memory accesses for common ALU instructions. o) Profile and make newer instruction combinations for up-to-date versions of NetBSD (full install, building GXemul inside NetBSD, etc). Make sure to go through all common function cores such as memset, memcpy, memmove, strlen, strcmp, memcmp, and idle functions, for both R3000 and R4400 etc. o) Floating point exception correctness. Compare to real hardware! o) Nicer MIPS status bits in register dumps. o) Some more work on opcodes. x) MIPS64 revision 2. o) Find out which actual CPUs implement the rev2 ISA! o) DINS, DINSM, DINSU etc o) DROTR32 and similar MIPS64 rev 2 instructions, which have a rotation bit which differs from previous ISAs. o) NetBSD has a patch for NOFPU flag for certain CPUs. Investigate and apply if correct. o) Dyntrans: Count register updates are probably not 100% correct yet. 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) o) R4000 and others: x) watchhi/watchlo exceptions, and other exception handling details o) MIPS 5K* have 42 physical address bits, not 40/44? o) R10000 and others: (R12000, R14000 ?) x) The code before the line /* reg[COP0_PAGEMASK] = cpu->cd.mips.coproc[0]->tlbs[0].mask & PAGEMASK_MASK; */ in cpu_mips.c is not correct for R10000 according to Lemote's Godson patches for GXemul. TODO: Go through all register definitions according to http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi/hdwr/bks/SGI_Developer/books/R10K_UM/sgi_html/t5.Ver.2.0.book_263.html#HEADING334 and make sure everything works with R10000. Then test with OpenBSD/sgi? x) Entry LO mask (as above). x) memory space, exceptions, ... x) use cop0 framemask for tlb lookups [maybe already working correctly?] (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) POWER/PowerPC: x) Fix DECR timer speed, so it matches the host. x) NetBSD/prep 3.x triggers a possible bug in the emulator:<0x26c550(&ata_xfer_pool,2,0,8,..)> <0x35c71c(0x3f27000,0,52,8,..)> <__wdccommand_start(0xd005e4c8,0x3f27000,0,13,..)> [ wdc: write to SDH: 0xb0 (sectorsize 2, lba=1, drive 1, head 0) ] <0x198120(0xd005e4c8,72,64,0xbb8,..)> Note: x) PPC optimizations; instr combs x) 64-bit stuff: either Linux on G5, or perhaps some hobbyist version of AIX? (if there exists such a thing) x) macppc: adb controller; keyboard (for framebuffer mode) x) make OpenBSD/macppc work (PCI controller stuff) x) Floating point exception correctness. x) Alignment exceptions. x) Boot args for gxemul -xeg4 -d opendarwin-6.6.2.ppc.cdr ? http://web.mit.edu/darwin/www/ RISC-V: Add a RISC-V skeleton again; possibly using 16-bit base encoding, treating 32-bit instructions as "two slots". Special case, not as efficient as using full 32-bit instructions as the base case, but could work. 4 KB page => 2 K slots plus several at the end, since a long instruction would have its 'next' instruction point way outside the page. Use the latest RISC-V specs, and make sure to check for implementation C (Compact), I (Integer), F etc. SuperH: x) Auto-generation of loads/stores! This should get rid of at least the endianness check in each load/store. x) Experiment with whether or not correct ITLB emulation is actually needed. (20070522: I'm turning it off today.) x) SH4 interrupt controller: x) MASKING should be possible! x) SH4 UBC (0xff200000) x) SH4 DMA (0xffa00000): non-dreamcast-PVR modes x) Store queues can copy 32 bytes at a time, there's no need to copy individual 32-bit words. (Performance improvement.) (Except that e.g. the Dreamcast TA currently receives using 32-bit words... hm) x) SH4 BSC (Bus State Controller) x) Instruction tracing should include symbols for branch targets, and so on, to make the output more human readable. x) SH3-specific devices: Pretty much everything! x) NetBSD/evbsh3, hpcsh! Linux? x) Floating point speed! x) Floating point exception correctness. E.g. fipr and the other "geometric" instructions should throw an exception if the "precision" bit is wrong (since the geometric instructions loose precision). See the manual about this! x) Exceptions for unaligned load/stores. OpenBSD/landisk uses this mechanism for its reboot code (machine_reset).
General: o) Go through the ,NULL arguments to dev_ram_init, and see if more suitable names can be used! Algor: o) Other models than the P5064? o) PCI interrupts... needed for stuff like the tlp NIC? ARC: x) NetBSD/arc 2.0 uses the ASC SCSI controller in a way which GXemul cannot yet handle. (NetBSD 1.6.2 works ok.) (Possibly a problem in NetBSD itself, http://mail-index.netbsd.org/source-changes/ 2005/11/06/0024.html suggests that.) NetBSD 4.x seems to work? :) DECstation: o) Running two Sprite machines in one emul config file fails; perhaps static vars are used in the PROM emulation code. Fix this. Right now, using separate config files for each machine is necessary. o) Figure out how to run multiple Sprite machines and make them talk to each other. Starting point for experimentation: Set up machine a: Machine name, eg 'ernie' (): a On A: (login as root) printf "2\tds5000\tb.my.domain\tb\n" >> /etc/spritehosts printf "\tether\t10:20:30:00:00:20\t10.0.0.2\n" >> /etc/spritehosts netroute -f /etc/spritehosts echo "10.0.0.2 b.my.domain b" >> /etc/hosts rm /etc/gateway echo "gw ether 60:50:40:30:20:10 10.0.0.254" > /etc/gateway sync shutdown Set up machine b: Machine name, eg 'ernie' (): b On B: (login as root) rm /etc/spritehosts printf "1\tds5000\ta.my.domain\ta\t1\n" > /etc/spritehosts printf "\tether\t10:20:30:00:00:10\t10.0.0.1\n" >> /etc/spritehosts printf "2\tds5000\tb.my.domain\tb\t2\n" >> /etc/spritehosts printf "\tether\t10:20:30:00:00:20\t10.0.0.2\n" >> /etc/spritehosts echo "10.0.0.1 a.my.domain a" >> /etc/hosts cd / mv ROOT ROOTrenamed sync shutdown Start up machine 'a' again, wait until the login prompt is shown. Then start up machine 'b'. But it doesn't quite work yet; b does not see A's "/". Dreamcast: x) Try to make the ROM from my real Dreamcast boot correctly. x) PVR: Lots of stuff. See dev_pvr.c. x) DMA to non-0x10000000 x) Textures... x) Make it fast! if possible x) G2 DMA x) SPU: Sound emulation (ARM cpu). x) LAN adapter (dev_mb8696x.c). NetBSD root-on-nfs. x) Better GDROM support x) Modem x) PCI bridge/bus? x) Maple bus: x) Correct controller input x) Mouse input x) Software emulation of BIOS calls: x) GD-ROM emulation: Use the GDROM device. x) Use the VGA font as a fake ROM font. (Better than nothing.) x) Make as many as possible of the KOS examples run! x) More homebrew demos/games. x) VME processor emulation? "(Sanyo LC8670 "Potato")" according to Wikipedia, LC86K87 according to Comstedt's page. See http://www.maushammer.com/vmu.html for a good description of the differences between LC86104C and the one used in the VME. HPCmips: x) MIPS hibernate instruction => make the exit from the emulator nicer! x) Clock? Is it running at correct speed? x) Mouse/pad support! :) x) A NIC? (As a PCMCIA device?) LUNA-88K: autoboot of OpenBSD: boot_unit and boot_partition in NVRAM should be set to the actual boot device; currently hardcoded to 0,0. luna88k bootblock loader: o load binary from UFS filesystem (i.e. a partition given by an offset into a disk image). o) if no bootstring (boot file) is specified, then perhaps try a few from a list? "vmunix", "boot". Color framebuffer SCSI: OpenBSD/luna88k warns about probe(spc0:0:0): Check Condition (error 0) on opcode 0x0 for non-connected devices. (Just a warning though.) Cursor keys in the graphical framebuffer window? (Works with pckbd for SGI?) separate out some devices into their own files? (reuse TOD clock for example) Front-side LCD panel: One idea is to make the framebuffer window taller, and show the LCD text in the lower left-hand corner, in a way mimicing a real machine. SMP stability: possibly instabilities are related to clearing translation cache on page writes (for ALL cpus, not just the one doing the page write). LUNA-88K2 machine: check OpenBSD source code to see where there are differences in devices and registers etc. Malta: o) Try FreeBSD/malta: https://wiki.freebsd.org/FreeBSD/MipsEmulation o) Malta can perhaps have up to 2 GB RAM? Try same hack as for the SGI O2. o) Reconfigurable PCI memory space would be nice (just like SGI O2). MVME88K / mvme187: OpenBSD 4.5 works ok with -x, but interrupts are lost (?) when not using -x. PReP: x) Clock time! ("Bad battery blah blah") SGI O2: ARCBIOS output should go to some terminal; right now (for e.g. SGI O2), it goes to the main window. If/when booting from SGI disk images is really meaningful (i.e. not just that it correctly loads the OSLoader, but can boot an entire OS): update the man page and other documentation regarding booting directly from SGI disk images. differences between real hardware and NetBSD's header files? RED/GREEN LED: 1 on real hardware turns off, not on! nr of bits for the tile ptr 20008 vs 30008 in crmfb? CRMFB_CMAP_OVL = 0x00051400. should be 0x54400? for "color map 17" for overlays? crime time bit mask? NetBSD's crmfb.c crmfb_set_palette says rgb in reverse maybe?: val = (r << 8) | (g << 16) | (b << 24) clocks: Both NetBSD and OpenBSD drift over time. bus_pci / O2's pci: reconfigurable memory space redirect? ahc scsi controller! this will be very time consuming. http://mail-index.netbsd.org/port-sgimips/2015/09/24/msg000711.html has some "pcictl pci0 dump -d 1" output which may be worth comparing against. ds2502_get_eaddr: ds2502_read_rom failed! PROM complains during bootup. Needed to get further with bootp() diskless booting. Onewire protocol that depends on microsecond timing? netbsd starts in "enter pathname of shell" mode; should start netbooting in a more automated fashion? netbsd randomly quits 'startx' without showing anything? sometimes also randomly places windows differently. ps2 8242: openbsd's X11 doesn't detect keyboard/mouse? PROM in GXemul says "SGI-CRM, Rev B", but my real O2 says Rev C? graphics: allow other resolutions than 1280x1024? netbsd seems to support it (?). netbsd maybe still triggers some acceleration bugs when moving X11 windows? horrible_getputpixel: GBE_CMODE_RGB10 etc from openbsd's header file? performance? actually emulate "pipeline" and detect pipeline overruns, i.e. require guest OSes to wait? but then, when to execute commands in the pipeline? (low-prio) get -w 0xb5004000: LEVEL RD_PTR WR_PTR BUF_START 0x1e029a68 00 29 29 28 0x1e02baea 00 2b 2b 2a 0x1e03befa 00 3b 3b 3a 0x1e029a68 00 29 29 28 0x1e00a289 00 0a 0a 09 0x1e03df7c 00 3d 3d 3c 0x1e00003f 00 00 00 3f 0x1e02fbee 00 2f 2f 2e 0x1e02cb2b 00 2c 2c 2b 0x1e00b2ca 00 0b 0b 0a 0x1e008207 00 08 08 07 0x1e = all idle i2c vga data, for NetBSD etc. 3D graphics? i.e. depth buffers, triangles, etc. audio? would be the first audio related thing in gxemul... VICE? video? probably too complicated. IRIX? Networking? SCSI? Currently panics due to root vfs not available. Test machines: o) Fix dev_cons.c DEV_CONS_HALT so that it halts the cpus gracefully, i.e. usage in demo code should be: for (;;) { halt(); } o) testmips: Add support for more than 256 MB ram, e.g. by adding "actual RAM" at the 1 GB offset. A 32 bit machine can thus use 3 GB, no limit on 64 bit machines. Low 256 MB can be considered a mirror of first 256 MB of RAM. o) dev_fb 2D acceleration functions, to make dev_fb useful for simple graphical OSes: x) block fill and copy x) draw characters (from the built-in font)? o) dev_fb input device? mouse pointer coordinates and buttons (allow changes in these to cause interrupts as well?) o) More demos/examples.
Breakpoints with config files doesn't seem to work correctly? (luna88k?) Breakpoints on subsystem messages? breakpoint subsystem <- show any subsystem breakpoints breakpoint subsystem disk warn <- break on warnings and errors, but not on info and debug. breakpoint subsystem disk off <- turn off breakpoint Effect: enter single stepping when such a message is printed. NOTE: Only check breakpoint AFTER check for "is enough"? Because there may be if("is enough") spread out through the code anyway. In other words: when doing breakpoing subsystem disk info if the current verbosity level of disk is 'warn', then implicitly raise it to 'info' and tell the user about it. NEED TO CHECK about-to-enter-single-step and/or single-step after memory_rw calls, to break out of the dyntrans loop. Implement helper for these cases? cpu->running == 0 is just one reason to break then. Currently, breakpoints are just an array of string and addresses, inside a machine. (Because addresses are conceptually bound to the _memory_ in that machine.) breakpoints that just print hit count, rather than break? Or better: all breakpoints can keep track of hit count and then there could be a setting on how long to run until actually breakin. e.g. 1 = always break inf = never break, just count 100 = run 100 then break. implementationwise: int64_t hits_until_break int64_t hitcount int64_t next_hitcount_to_break_on CTRL-T could show breakpoint hit counts. CD Image file support: x) Support CD formats that contain more than 1 track, e.g. CDI files (?). These can then contain a mixture of e.g. sound and data tracks, and booting from an ISO filesystem path would boot from [by default] the first data track. (This would make sense for e.g. Dreamcast CD images, or possibly other live-CD formats.) Clocks and timers: x) Fix the PowerPC DECR interrupt speed! (MacPPC and PReP speed, etc.) x) DON'T HARDCODE 100 HZ IN cpu_mips_coproc.c! x) NetWinder timeofday is incorrect! Huh? grep -R for ta_rtc_read in NetBSD sources; it doesn't seem to be initialized _AT ALL_?! x) Cobalt TOD is incorrect! x) Go through all other machines, one by one, and fix them. Components: _MAYBE_ it would be possibly to unify the CPU and device concepts, so that they are just arbitrary components in a machine... like the C++ framework was. machine_run currently run a) instructions from cpus, and b) ticks from devices. There is no big reason why these could not be made the same concept. Components (busses, CPUs, devices, machines) would be a tree, like in the C++ framework. Component tree dump should then be the same during startup and for the emul / machine debugger commands. Compare e.g. the C++ framework's mainbus0 |-- cpu0 (i960CA, 25 MHz) | \-- cache etc... |-- ram0 (2 MB repeated for 256 MB at offset 0x30000000) |-- ram1 (8 MB repeated for 16 MB at offset 0x40000000) \-- rom0 (512 KB at offset 0xfff80000) to machine: device at 0x0030000000: ram (dyntrans R/W) device at 0x0040000000: ram (dyntrans R/W) device at 0x0041000000: ram (dyntrans R/W) device at 0x00fff80000: ram (dyntrans R/W) model: HP 700/RX cpu: i960CA memory: 1 MB If there are multiple memories in a machine, a CPU searches for its memory like in the C++ framework: first to a parent (e.g. a mainbus) and then to a memory on that bus. Debugger: Helpers for splitting up into arguments/words. Helpers for using abbreviations/tab completion for arguments? Allow e.g. "b sh" to mean "breakpoint show". Right now, "show" needs to be written out in full. "u pc+0x40" works but not "u pc + 0x40" with spaces! More complex expressions, and Unit tests for them. Extend the put [b|h|w|d|q] addr, data modify emulated memory contents command with a "s" (string) mode, where data is a string. Also "z" which puts a nul-terminated string in memory. It should put the string there one byte at a time. put s 0x80008000, "apa" or put z 0x80008000, "apa" Extend the debugger with a "find" command as well, similar to put but with a range? find [b|h|w|d|q|s|z] startaddr, endaddr, data Command for launching a separate terminal for output from a specified subsystem? (Or a flag to the verbosity command?) "step call" ? running like single-step, but instead of one instruction, it runs until the next function call (or function return)? (with implicit function trace printout turned on...) Tab completion for symbols? That would help... CTRL-T is already supported when single-stepping. o) Also support CTRL-T while executing in main emul loop? Should CTRL-T be checked in console.c, or in emul.c? Disk image options: Command line option for forcing fsync on each disk image write; see do_fsync in src/disk/diskimage.c Documentation: Dyntrans: Mention how to break out of the dyntrans loop: cpu->running = 0 and the nothing instruction, and how nr of instructions is counted then. Update the man page about disk boot block loading to not explicitly list the supported machine types. Update test device section on "fb": set and read resolution Add the Android ARM machine modes to the documentation, machine_androidarm, color red, once the Linux device tree has been at least implemented enough to see some boot messages or so. Add the Alpha mode too even though probably almost nothing works at all. Also red. Try to include instructions for NetBSD, OpenBSD and FreeBSD although the later has been discontinued. Add FreeBSD/mips to testmips section? https://wiki.freebsd.org/FreeBSD/MipsEmulation If it works. Add an Example in the documentation for a config file with multiple machines (and a plain net()). Floating point: More tests. Networking: x) PERFORMANCE: o) Fix performance problems caused by only allowing a single TCP packet to be unacked. (?) o) Go through Lance Ethernet interrupt code and memory mapping, to look at performance. (Performance when downloading things from the internet is extremely poor, from inside NetBSD/pmax and OpenBSD/luna88k.) (Maybe it is not a problem with the Lance, but with the general src/net/ implementation...) x) Also adding support for connecting ttys (either to xterms, or to pipes/sockets etc, or even to PPP->NAT or SLIP->NAT :-). x) Test with lower than 100 max tcp/udp connections, to make sure that reuse works! x) Multiple networks per emulation, and let different NICs in machines connect to different networks. x) Allow SLIP connections, possibly PPP, in addition to ethernet? PCI: o) Big-endian Malta access? x) Pretty much everything related to runtime configuration, device slots, interrupts, etc must be redesigned/cleaned up. The current code is very hardcoded and ugly. o) Allow cards to be added/removed during runtime more easily. o) Allow cards to be enabled/disabled (i/o ports, etc, like NetBSD needs for disk controller detection). o) Allow devices to be moved in memory during runtime. o) Interrupts per PCI slot, etc. (A-D). o) PCI interrupt controller logic... very hard to get right, because these differ a lot from one machine to the next. x) last write was ffffffff ==> fix this, it should be used together with a mask to get the correct bits. also, not ALL bits are size bits! (lowest 4 vs lowest 2?) x) add support for address fixups x) generalize the interrupt routing stuff (lines etc) X-windows and Framebuffer functionality in general: o) Icon for X11 framebuffer windows? o) Change window title in X11 windows for machines that have all cpus halted? 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. o) Simple device access to framebuffer_blockcopyfill() etc, and text output (using the built-in fonts), for dev_fb. o) CLEAN UP the ugly event code o) Mouse clicks can be "missed" in the current system; this is not good. They should be put on a stack of some kind. o) More 2D and 3D framebuffer acceleration. o) Non-resizable windows? Or choose scaledown depending on size (and center the image, with a black border). o) Different scaledown on different windows? o) Non-integral scale-up? (E.g. 640x480 -> 1024x768) o) Switch scaledown during runtime? (Ala CTRL-ALT-plus/minus) o) Bug reported by Elijah Rutschman on MacOS with weird keys (F5 = cursor down?). o) Keyboard and mouse events: x) Do this for more machines than just DECstation x) more X11 cursor keycodes x) Keys like CTRL, ALT, SHIFT do not get through by themselves (these are necessary for example to change the font of an xterm in X in the emulator) o) Generalize the framebuffer stuff by moving _ALL_ X11 specific code to a separate module. o) Wayland? -W ?