September 26, 2005 Things TODO for Solace (Sol Anachronistic Computer Emulation) (roughly in descending order of priority, although it is all pretty fluid): 1) run in release mode, max CPU speed. it comes in around 127 MHz. then boot CPM, also around 127 MHz. Type "DIR". again. again. sometimes the speed ends up at 117 MHz or so and sometimes 77 MHz. what gives? I'm guessing something is causing the scheduler to do a lot of work dropping performance to 77 MHz. one of the timers isn't being cleared always? It is related to audio -- if audio is disabled, then inserting a disk takes a performance hit (76 MHz -> 65 MHz) but is unaffected by later DIRs. Stopping in the scheduler shows that the number of things on the scheduler queue is unchanged, and consists of the same tasks. It is more likely to be in the performance throttling relating to the audio buffer. 2) the music system uses the SW-2 state to determine tempo. if they are all 0, then the music runs at the rate determined by the score, otherwise it runs at the selected rate. however, the default switch state is all off, which is inverted to look like you're asking the music to run as slowly as possible. change default for SW-2 to be all on, and put a note somewhere on the effect of these switches on the music tempo. 3) modify vdisk_svhlib.[ch] to follow the function and structure of vdisk_svnlib.c, and modify downstream code accordingly. copy changed vdisk_*lib.[ch] files from solace back to nsisvn. 4) work on adding helios emulation to solace - get vdisk_svh.[ch] in a compilable state at least - split vdisk_svh.[ch] into vdisk_svh for disk functions, vdisk_svh_ctrl.[ch] for controller emulation? likewise, vdisk_svn.[ch] + vdisk_svn_ctrl.[ch]? - disk factory - helios emulation 5) incorporate improvements (if there were any) to scheduler that came from WangEmu? 6) incorporate revised 8080/Z80 CPU code? 7) as a precursor to adding the user interface, stub out the serial and parallel port logic in solace.c to call UI_* functional, and let the user interface handle it or dummy it out. UI_SerPort_GetStatus() UI_SerPort_GetByte() UI_SerPort_SendByte() UI_ParPort_GetStatus() UI_ParPort_SetStatus() UI_ParPort_GetByte() UI_ParPort_SendByte() hmm, but what about the timing portion of this? shouldn't the core emulator make sure that UI_SerPort_GetByte() runs only as fast as the selected baud rate? 8) add (pseudo?) serial port * dump to window, file, or COM1/2/3/4? 9) add (pseudo?) parallel port * dump to window, file, or LPT? * emulate a specific printer type? 10) more extensive CBIOS/DBOOT improvements - the boot code in sector 0 jumps to EB00 if the sector it fetches has a bad checksum. Instead, make it jump to E800. - fix known problem with the WRMAPN section of code (problem if system is using more than one disk format at one time) - much faster vidmem routine (take it from solos) * or perhaps compute and cache current row addr and just add X offset for faster string operation. must invalidate or recompute cache if scrollbase changes. - general code tweaks, cleanup, and other unnecessary improvements 98) minor improvements that may be addressed at some point: *) attempt to use DirectX API's if available for audio generation, and if not available, fall back to the winmm APIs. *) automatically center pop-up dialogs on main window *) should IN and OUTs to non-existent ports trigger an alert box that warns (once) that such a thing has happened? *) Instead of SET , how about the more 8080-like MVI <##> and LXI <####> As it stands, "SET AF xxxx" makes no sense as the name in intel mnemonics is PSW, not AF. Likewise, the other 16b symbols BC, DE, HL, SP are known as B, D, H, SP. *) if selecting a menu item from the tape File menubar and it happens to overlap the RECORD button and the file loaded is READONLY, we get a spurious warning about the tape being write protected. this is because as the mouse button is released after selecting the menu item, the LMOUSEUP event is triggered for the tape control window (!) and it is interpreted as an attempt to press the record button. 99) write Sol virtal tape utility program * not integrated into Solace * "svt explorer": catalog, add, remove, change order, baud rate of files * convert .SVT file to .WAV or to soundblaster * convert .WAV or to soundblaster to .SVT (hard for marginal tapes) 100) change name to obsol? :-)