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 <reg> <value>, how about the more 8080-like
             MVI <reg8> <##>
         and
             LXI <reg16> <####>
         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?  :-)

