3,218 bytes added,
22:02, 24 January 2010 == Cassette Init ==
BC65 CAS_INITIALIZE
BC68 CAS_SET_SPEED ;in: HL=upper16bit, A=lower8bit
BC6B CAS_NOISY ;in: A=output "Press PLAY" messages (0=yes, >0=no)
== Cassette (or Diskette) Input ==
BC77 CAS_IN_OPEN ;in: HL=fname, B=fnamelen, DE=workbuf,
;out: HL=header, DE=dest, BC=siz, A=type, cy=err, zf
BC7A CAS_IN_CLOSE ;out: DE=workbuf, cy=0=failed (no open file)
BC7D CAS_IN_ABANDON ;out: DE=workbuf, cy=1, z=0, A=all_closed (FFh=yes)
BC80 CAS_IN_CHAR ;out: A=char, cy=0=error, zf=errtype
BC83 CAS_IN_DIRECT ;in: HL=dest, out: HL=entrypoint, cy=0=err, zf=errtype
BC86 CAS_RETURN ;in: A=char (undo CAS_IN_CHAR, char back to buffer)
BC89 CAS_TEST_EOF ;out: CY=0=eof (end of file)
== Cassette (or Diskette) Output ==
BC8C CAS_OUT_OPEN ;in: HL=fname, B=fnamelen, DE=workbuf, out: HL,cy,zf
BC8F CAS_OUT_CLOSE ;out: DE=workbuf, cy=0=failed (zf=errtype)
BC92 CAS_OUT_ABANDON ;out: DE=workbuf, cy=1, z=0, A=all_closed (FFh=yes)
BC95 CAS_OUT_CHAR ;in: A=char, out: cy=0=error, zf=errtype
BC98 CAS_OUT_DIRECT ;in: HL=src, DE=len, BC=entrypoint, A=type, out: cy/zf
== Cassette (or Diskette) Catalog ==
BC9B CAS_CATALOG ;in: DE=workbuf, out: DE=workbuf, cy=0=error
== Cassette Single Block Access & Motor Control ==
BC9E CAS_WRITE ;in: HL=src, DE=len, A=ID(2Ch=header, 16h=data), out?
BCA1 CAS_READ ;in: HL=dest, DE=len, A=ID(2Ch=header, 16h=data), out?
BCA4 CAS_CHECK ;in: HL=src, DE=len, A=ID(2Ch=header, 16h=data), out?
BC6E CAS_START_MOTOR ;out: A.bit4 old motor status (0=off, 1=on), cy=0, z=1
BC71 CAS_STOP_MOTOR ;out: A.bit4 old motor status (0=off, 1=on), cy=0, z=1
BC74 CAS_RESTORE_MOTOR ;in: A.bit4 new motor status (0=off, 1=on), cy=0, z=1
== Machine Pack Boot Program ==
BD13 MC_BOOT_PROGRAM ;in: HL=loader_callback, out: starts program
Loads and starts a BINARY program, typically used when typing RUN"filename.bin" under BASIC. The callback should load the program from whatever source (CAS, DISK, or elsewhere), and should then return CY=1=okay & HL=entrypoint (or HL=0000h to reboot the BASIC ROM), or CY=0=failed.
If the callback returns CY=1 then the program (or BASIC ROM) is started via MC_START_PROGRAM, otherwise, when CY=0, "*** PROGRAM LOAD FAILED ***" is displayed, and the OS (ie. typically BASIC) is restarted.
== Machine Pack Start Program ==
BD16 MC_START_PROGRAM ;in: HL=entrypoint (0000h=BASIC), C=ROMcfg
Starts a BINARY program, typically used when typing RUN"filename.bin" under BASIC (expecting that the file is already loaded into memory). The function resets all BIOS memory, sets SP=C000h, DE=LORAM=0040h, HL=BAS_HIRAM=ABFFh, BC=BIN_HIRAM=B0FFh, and does then call the entrypoint (incoming C:HL) via RST 18h, if incoming HL was zero then it calls 0:C006h (ie. reboots the BASIC ROM).
Observe that the program is started with only the raw BIOS initialized; but without extensions like AMSDOS. To install them (if needed), the entrypoint function should set HL=BC (to deallocate BASIC RAM), then call KL_ROM_WALK (to install all extension ROMs) or, set C=07h and call KL_INIT_BACK (to install only AMSDOS).