========================== HBIOS Management Functions ========================== RESET: ($F0): B=Function A=Result VER ($F1): B=Function A=Result C=Reserved (set to 0) DE=Version (Maj/Min/Upd/Pat) L=Platform Id SETBNK ($F2): B=Function A=Result C=Bank Id C=Previous Bank Id GETBNK ($F3): B=Function A=Result C=Bank Id SETCPY ($F4): B=Function A=Result D=Destination Bank Id E=Source Bank Id HL=Count of Bytes to Copy BNKCPY ($F5): B=Function A=Result DE=Destination Address HL=Source Address ALLOC ($F6): B=Function A=Result HL=Size HL=Address of Allocated Memory Block FREE ($F7): B=Function A=Result HL=Address of Memory Block to Free GET ($F8): BC=Function/Subfunction A=Result Subfunctions: CIOCNT ($00): BC=Function/Subfunction A=Result E=Serial Unit Count DIOCNT ($10): BC=Function/Subfunction A=Result E=Disk Unit Count VDACNT ($40): BC=Function/Subfunction A=Result E=Video Unit Count BOOTINFO ($E0): BC=Function/Subfunction A=Result DE=Boot Volume (Disk Unit/Slice) L=Boot Bank Id CPUINFO ($F0): BC=Function/Subfunction A=Result H=Z80 CPU Variant L=CPU Speed in MHz DE=CPU Speed in KHz MEMINFO ($F1): BC=Function/Subfunction A=Result D=# ROM Banks E=# RAM Banks BNKINFO ($F2): BC=Function/Subfunction A=Result D=BIOS Bank Id E=User Bank Id SET ($F9): BC=Function/Subfunction A=Result BOOTINFO ($E0): BC=Function/Subfunction A=Result DE=Boot Volume (Disk Unit/Slice) L=Boot Bank Id PEEK: ($FA): B=Function A=Result D=Bank E=Byte Value HL=Address POKE: ($FB): B=Function A=Result D=Bank E=Byte Value HL=Address ================ Serial Functions ================ IN ($00): BC=Function/Unit A=Result E=Byte Input Wait for a single character to be available at the specified device and return the character in E. Function will wait indefinitely for a character to be available. OUT ($01): BC=Function/Unit A=Result E=Character to Output Wait for device to be ready to send a character, then send the character specified in E. IST ($02): BC=Function/Unit A=Result *E=# Bytes Pending OST ($03): BC=Function/Unit A=Result *E=# Buffer Bytes Available INIT ($04): BC=Function/Unit A=Result DE=Line Characteristics L=Terminal Type? Setup Parameter Word: _______________________________ _______________________________ | | | encoded || | | | | | | |rts| Baud Rate ||dtr|xon| parity |stp| 8/7/6 | |_______|___|___|_______________||___|___|___________|___|_______| 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 D register E register _______________________________ _______________________________ | | | || | | | | | | 0 0 |AFE|LP OT2 OT1 RTS DTR||DLB|BRK|STK EPS PEN|STB| WLS | |_______|___|___________________||___|___|___________|___|_______| 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 -- MCR -- -- LCR -- _______________________________ _______________________________ | | re| te|~rs| er|8/7 pe stp|| | | | | | | | 0 | 1 | 1 | 0 | 0 | m2 m1 m0|| 0 | 0 | ps|peo| dr| SSS | |___|___|___|___|___|___________||___|___|___|___|___|___________| 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 CNTLA0 CNTLB0 QUERY ($05) BC=Function/Unit A=Result DE=Line Characteristics (Baud, Flow Control, etc.) L=Terminal Type? (TTY, VT-100, etc.) DEVICE ($06): BC=Function/Unit A=Result D=Device Type E=Device Number C=Device Attributes Serial Device Attributes Byte: 7: 0=RS-232, 1=Terminal If Terminal, 3-0 is attached Video Unit # ============== Disk Functions ============== STATUS ($10): BC=Function/Unit A=Result Return current status result code of specified unit. Does not clear the status. RESET ($11): BC=Function/Unit A=Result Reset the physical interface associated with the specified unit. Flag all units associated with the interface for unit initialization at next I/O call. Clear media identified unless locked. Reset result code of all associated units. SEEK ($12): BC=Function/Unit A=Result D:7=Address Type (0=CHS, 1=LBA) CHS: D:0-6=Head,E=Sector,HL=Track LBA: DE:HL Seek function establishes current sector for next I/O function for the specified unit and invalidates the current sector for all other units. A seek must precede read/write/verify function calls. Physical seek is typically deferred until subsequent I/O operation. READ ($13) / WRITE ($14) / VERIFY ($15): BC=Function/Unit A=Result HL=Buffer Address E=Blocks Read E=Block Count Read, write, or verify block count sectors to buffer address starting at current target sector. Current sector must be established by prior seek function; however, multiple read/write/verify function calls can be made after a seek function. Current sector is incremented after each sector successfully read. On error, current sector is sector is sector where error occurred. Blocks read indicates number of sectors successfully read. Caller must ensure buffer address is large enough to contain data for all sectors requested. FORMAT ($16): BC=Function/Unit A=Result CHS: D=Head, HL=Cylinder E=Fill Byte Format the designated track using the current media_id. Many devices do not support a true format operation. If so, format should write sectors with designated fill byte. *** Need to specify interleave/sector id's somehow. DEVICE ($17) BC=Function/Unit A=Result D=Device Type (MD, FD, IDE, etc.) E=Device Number (0..n) C=Device Attributes Report the Device Type (Floppy, IDE, SD, etc.) and Device Number. Call does not perform any I/O and succeeds even if the device is in an error state. It does not reset the unit status. Disk Device Attributes Byte: 7: 1=Floppy, 0=Hard Disk (or similar, e.g. CF, SD, RAM) If Floppy: 6-5: Form Factor (0=8", 1=5.25", 2=3.5", 3=Other) 4: Sides (0=SS, 1=DS) 3-2: Density (0=SD, 1=DD, 2=HD, 3=ED) 1-0: Reserved If Hard Disk: 6: Removable 5-3: Type (0=Hard, 1=CF, 2=SD, 3=USB, 4=ROM, 5=RAM, 6=RAMF, 7=?) 2-0: Reserved Note: IDE value 848Ah in IDENTIFY DEVICE data word 0 indicates CF Card MEDIA ($18): BC=Function/Unit A=Result E:0=Enable Media Discovery E=Media ID (legacy) Report the media definition for media in specified unit. If bit 0 of E is set, then perform media discovery or verification. If no media in device, return no media error. DEFMED ($19): BC=Function/Unit A=Result E=Media ID (legacy) Define media in unit. CAPACITY ($1A): BC=Function/Unit A=Result DE:HL=Blocks on Device BC=Block Size Report current media capacity information. If media is unknown, return error (no media) GEOMETRY ($1B): BC=Function/Unit A=Result HL=Cylinders D:0-6=Heads D:7=LBA Capable E=Sectors BC=Block Size Report current media geometry information. If media is unknown, return error (no media) =============== Video Functions =============== ----------------------------------------------------------------------------------- Unit Device Type Capacity/Mode ---------- ---------- ---------------- -------------------- Disk 0 MD0: ROM Disk 384K, LBA Disk 1 MD1: RAM Disk 384K, LBA Disk 2 FD0: Floppy Disk 3.5", DS/HD, CHS Disk 3 FD1: Floppy Disk 5.25", DS/HD, CHS Disk 4 PPIDE0: Hard Disk 2345M, LBA Disk 5 IDE0: Compact Flash 2048M, LBA Disk 6 SD0: SD Card 4096M, LBA Disk 7 PRPSD0: SD Card 2048M, LBA Disk 8 RF0: RAM Floppy 4M, LBA Serial 0 UART0: RS-232 38400,8N1,HFC Serial 1 PRPCON0: Terminal Video 0 Serial 2 CVDU0: Terminal Video 1 Serial 3 VDU0: Terminal Video 2 Serial 4 TMS0: Terminal Video 3 Video 0 PRPCON0: CRT Text 80x25, ANSI Video 1 CVDU0: CRT Text 80x25, ANSI Video 2 VDU0: CRT Text 80x25, ANSI Video 3 TMS0: CRT Text 40x25, TTY Video 4 NEC0 CRT Graphics 600x400 Unit: Function Group & Unit Index Device: _DEVICE Device Type & Device Num Type: _DEVICE Type & Attributes Capacity/Mode: Disk: _DEVICE Attributes & _CAPACITY Serial: _QUERY Video: _QUERY ----------------------------------------------------------------------------------- _INIT: - INIT CRT HARDWARE - INIT KEYBOARD HARDWARE - CALL _VDARES () - ADD OURSELVES TO VDA_TBL - CALL TERM_ATTACH (C=VIDEO UNIT, DE=_DISPATCH) _VDARES: () - HOME CURSOR - CLEAR SCREEN - RETURN (A=STATUS) TERM_ATTACH: (C=VIDEO UNIT, DE=_DISPATCH) - CALL _INIT (B=TERM DEV NUM, C=VIDEO UNIT, DE=_DISPATCH) - ADD OURSELVES TO CIO_TBL USING _DISPATCH - RETURN (A=STATUS) _INIT: (B=TERM DEV NUM, C=VIDEO UNIT, DE=_DISPATCH) - SAVE TERM DEV NUM TO _DEVNUM - SAVE VIDEO UNIT TO _VDAUNIT - SAVE _DISPATCH TO _VDADISPADR - CALL _RESET () - RETURN (DE=_DISPATCH, A=STATUS) _RESET: () - QUERY ATTACHED VDA FOR SCREEN SIZE (VIA _VDADISP) - INITIALIZE ALL WORKING VARIABLES AND EMULATOR STATE - RETURN (A=STATUS)