mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
Moved Device Inventory from HBIOS into a stanalone Rom App
This commit is contained in:
719
Source/HBIOS/invntdev.asm
Normal file
719
Source/HBIOS/invntdev.asm
Normal file
@@ -0,0 +1,719 @@
|
||||
;==============================================================================
|
||||
; DEVIVE INVENTORY - Inventory Device
|
||||
; Version June-2025
|
||||
;==============================================================================
|
||||
;
|
||||
; This was extracted from HBIOS and converted into a ROM Application
|
||||
;
|
||||
; This is a program CALLED from RomLoader, and is specific to RomWBW
|
||||
;------------------------------------------------------------------------------
|
||||
;
|
||||
; Change Log:
|
||||
; 2025-06-30 [MAP] Initial Release copied from HBIOS.ASM
|
||||
;______________________________________________________________________________
|
||||
;
|
||||
; Include Files
|
||||
;
|
||||
#include "std.asm" ; standard RomWBW constants
|
||||
;
|
||||
;*****************************************************************************
|
||||
;
|
||||
; APPLICATION WILL WILL BE LOADED AT DEV_LOC. THEREFORE, THE CODE
|
||||
; MUST "ORG" AT THIS ADDRESS. TO CHANGE THE LOAD LOCATION OF THIS
|
||||
; CODE, YOU CAN UPDATE DEV_LOC IN LAYOUT.INC
|
||||
;
|
||||
.ORG DEV_LOC
|
||||
;
|
||||
;*****************************************************************************
|
||||
; INIT CODE
|
||||
;*****************************************************************************
|
||||
;
|
||||
#if (BIOS == BIOS_WBW)
|
||||
; Get the current console unit
|
||||
ld b,BF_SYSPEEK ; HBIOS func: PEEK
|
||||
ld d,BID_BIOS ; BIOS bank
|
||||
ld hl,HCB_LOC + HCB_CONDEV ; console unit num in HCB
|
||||
rst 08 ; do it
|
||||
ld a,e ; put in A
|
||||
ld (curcon),a ; save it
|
||||
#endif
|
||||
;
|
||||
;*****************************************************************************
|
||||
; Main Code starts here
|
||||
;*****************************************************************************
|
||||
;
|
||||
PRTSUM:
|
||||
CALL NEWLINE2 ; SKIP A LINE
|
||||
LD DE,PS_STRHDR ; POINT TO HEADER
|
||||
CALL WRITESTR ; PRINT IT
|
||||
;
|
||||
LD C,BF_SYSGET_CIOCNT ; CHARACTER DEVICES
|
||||
LD HL,PS_SERIAL
|
||||
CALL PRT_ALLD
|
||||
;
|
||||
LD C,BF_SYSGET_DIOCNT ; DISK DRIVES
|
||||
LD HL,PS_DISK
|
||||
CALL PRT_ALLD
|
||||
;
|
||||
LD C,BF_SYSGET_VDACNT ; VIDEO DEVICES
|
||||
LD HL,PS_VIDEO
|
||||
CALL PRT_ALLD
|
||||
;
|
||||
LD C,BF_SYSGET_SNDCNT ; SOUND DEVICES
|
||||
LD HL,PS_SOUND
|
||||
CALL PRT_ALLD
|
||||
RET
|
||||
;
|
||||
;*****************************************************************************
|
||||
; Supporting Code Stars Here
|
||||
;*****************************************************************************
|
||||
;
|
||||
PRT_ALLD:
|
||||
LD B,BF_SYSGET ; FUNC: SYSTEM INFO GET
|
||||
RST 08 ; E := UNIT COUNT
|
||||
LD B,E ; MOVE TO B FOR LOOP COUNT
|
||||
LD A,E ; MOVE TO ACCUM
|
||||
OR A ; SET FLAGS
|
||||
RET Z ; IF NONE, JUST RETURN
|
||||
LD C,0 ; C WILL BE UNIT INDEX
|
||||
PRT_ALLD1:
|
||||
PUSH BC ; SAVE LOOP CONTROL
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
CALL JPHL ; CALL THE ROUTINE PASSED IN HL
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC ; RESTORE LOOP CONTROL
|
||||
INC C ; BUMP UNIT INDEX
|
||||
DJNZ PRT_ALLD1 ; LOOP THRU ALL DEVICES
|
||||
RET
|
||||
;
|
||||
; PRINT ONE LINE DISK UNIT/DEVICE INFO, DISK UNIT INDEX IN C
|
||||
;
|
||||
PS_DISK:
|
||||
PUSH BC ; SAVE UNIT INDEX FOR LATER
|
||||
;
|
||||
; UNIT COLUMN
|
||||
PRTS("Disk $")
|
||||
LD A,C ; MOVE UNIT NUM TO A
|
||||
CALL PRTDECB ; PRINT IT
|
||||
CP 10 ; CHECK FOR MULTIPLE DIGITS
|
||||
CALL C,PC_SPACE ; EXTRA SPACE IF NEEDED
|
||||
PRTS(" $") ; PAD TO NEXT COLUMN
|
||||
;
|
||||
; DEVICE COLUMN
|
||||
LD B,BF_DIODEVICE ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C
|
||||
RST 08 ; DE:=DEVTYP/NUM, C:=DISK ATTRIBUTES
|
||||
PUSH BC ; SAVE ATTRIBUTES
|
||||
LD HL,PS_DDMD ; POINT TO DISK DEVICE TYPE NAME TABLE
|
||||
CALL PS_PRTDEV ; PRINT DISK DEVICE NMEMONIC PADDED TO FIELD WIDTH
|
||||
POP DE ; RECOVER ATTRIBUTES TO DE
|
||||
PUSH DE ; SAVE ATTRIBUTES AGAIN
|
||||
CALL PS_PRTDT ; PRINT DISK TYPE
|
||||
POP DE ; RESTORE ATTRIBUTES
|
||||
POP BC ; RESTORE UNIT NUM
|
||||
CALL PS_PRTDC ; PRINT DISK CAPACITY
|
||||
;
|
||||
CALL NEWLINE
|
||||
RET
|
||||
;
|
||||
; PRINT DISK TYPE (DISK ATTRIBUTE IN E)
|
||||
;
|
||||
PS_PRTDT:
|
||||
LD A,E ; ATTRIBUTES TO A
|
||||
BIT 7,A ; FLOPPY BIT SET?
|
||||
LD HL,PS_DTFLOP ; ASSUME FLOPPY
|
||||
JP NZ,PS_PRT18 ; IF FLOPPY, JUMP AHEAD
|
||||
LD C,E
|
||||
LD DE,PS_DTHARD
|
||||
LD A,00001111B
|
||||
CALL PRTIDXMSK
|
||||
CALL PS_PAD18 ; PAD TO 18 SPACES
|
||||
RET
|
||||
;
|
||||
; PRINT DISK CAPACITY (UNIT IN C, ATTRIBUTE IN E)
|
||||
;
|
||||
PS_PRTDC:
|
||||
;
|
||||
LD A,E ; ATTRIBUTE TO ACCUM
|
||||
BIT 7,A ; TEST FOR FLOPPY
|
||||
JR NZ,PS_PRTDC2 ; HANDLE FLOPPY
|
||||
AND $0F ; ISOLATE TYPE BITS
|
||||
CP 4 ; ROM DISK?
|
||||
JR Z,PS_PRTDC1 ; PRINT CAPACITY IN KB
|
||||
CP 5 ; RAM DISK?
|
||||
JR Z,PS_PRTDC1 ; PRINT CAPACITY IN KB
|
||||
CP 7 ; FLASH DISK?
|
||||
JR Z,PS_PRTDC1 ; PRINT CAPACITY IN KB
|
||||
;
|
||||
; PRINT HARD DISK STORAGE SIZE IN MB
|
||||
LD B,BF_DIOCAP ; HBIOS FUNC: GET CAPACTIY
|
||||
RST 08 ; DE:HL := BLOCKS
|
||||
JP NZ,PS_PRTNUL ; MEDIA PROBLEM
|
||||
RES 7,D ; CLEAR LBA BIT
|
||||
LD B,11 ; 11 BIT SHIFT TO CONVERT BLOCKS --> MB
|
||||
CALL SRL32 ; RIGHT SHIFT
|
||||
CALL PRTDEC32 ; PRINT DWORD IN DECIMAL
|
||||
PRTS("MB$") ; PRINT SUFFIX
|
||||
CALL PC_COMMA
|
||||
PRTS("LBA$") ; FOR NOW, WE ASSUME HARD DISK DOES LBA
|
||||
RET ; DONE
|
||||
;
|
||||
PS_PRTDC1:
|
||||
; PRINT ROM/RAM DISK CAPACITY IN KB
|
||||
LD B,BF_DIOCAP ; HBIOS FUNC: GET CAPACTIY
|
||||
RST 08 ; DE:HL := BLOCKS
|
||||
JP NZ,PS_PRTNUL ; MEDIA PROBLEM
|
||||
RES 7,D ; CLEAR LBA BIT
|
||||
LD B,1 ; 11 BIT SHIFT TO CONVERT BLOCKS --> MB
|
||||
CALL SRL32 ; RIGHT SHIFT
|
||||
CALL PRTDEC32 ; PRINT DWORD IN DECIMAL
|
||||
PRTS("KB$") ; PRINT SUFFIX
|
||||
CALL PC_COMMA
|
||||
PRTS("LBA$") ; FOR NOW, WE ASSUME HARD DISK DOES LBA
|
||||
RET ; DONE
|
||||
;
|
||||
PS_PRTDC2:
|
||||
LD C,E ; ATTRIBUTE TO C FOR SAFE KEEPING
|
||||
;
|
||||
LD A,%00011000 ; DISPLAY FORM FACTOR
|
||||
LD DE,PS_FLP_FSTR ; WHICH IS DEFINED IN
|
||||
CALL PRTIDXMSK ; BITS 5 AND 6.
|
||||
;
|
||||
LD A,%00000100 ; DISPLAY SIDES
|
||||
LD DE,PS_FLP_SSTR ; WHICH IS DEFINED
|
||||
CALL PRTIDXMSK ; IN BIT 4
|
||||
;
|
||||
LD A,%00000011 ; DISPLAY DENSITY
|
||||
LD DE,PS_FLP_DSTR ; WHICH IS DEFINED IN
|
||||
CALL PRTIDXMSK ; BITS 2 AND 3.
|
||||
;
|
||||
CALL PC_COMMA
|
||||
PRTS("CHS$") ; FOR NOW, WE ASSUME HARD DISK DOES LBA
|
||||
;
|
||||
RET ; DONE
|
||||
;
|
||||
; PRINT ONE LINE SERIAL UNIT/DEVICE INFO, SERIAL UNIT INDEX IN C
|
||||
;
|
||||
PS_SERIAL:
|
||||
PUSH BC ; SAVE UNIT INDEX FOR LATER
|
||||
;
|
||||
; UNIT COLUMN
|
||||
PRTS("Char $")
|
||||
LD A,C ; MOVE UNIT NUM TO A
|
||||
CALL PRTDECB ; PRINT IT, ASSUME SINGLE DIGIT
|
||||
PRTS(" $") ; PAD TO NEXT COLUMN
|
||||
;
|
||||
; DEVICE COLUMN
|
||||
LD B,BF_CIODEVICE ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C
|
||||
RST 08 ; DE:=DEVTYP/NUM, C:=DEVICE ATTRIBUTES
|
||||
PUSH BC ; SAVE ATTRIBUTES
|
||||
LD HL,PS_SDUART ; POINT TO SERIAL DEVICE TYPE NAME TABLE
|
||||
CALL PS_PRTDEV ; PRINT SERIAL DEVICE NMEMONIC PADDED TO FIELD WIDTH
|
||||
POP BC ; RECOVER ATTRIBUTES
|
||||
PUSH BC ; SAVE ATTRIBUTES AGAIN
|
||||
CALL PS_PRTST ; PRINT SERIAL TYPE
|
||||
POP BC ; RESTORE ATTRIBUTES
|
||||
POP DE ; RESTORE UNIT NUM TO E
|
||||
CALL PS_PRTSC ; PRINT SERIAL CONFIG
|
||||
;
|
||||
CALL NEWLINE
|
||||
RET
|
||||
;
|
||||
; PRINT CHARACTER TYPE (SERIAL ATTRIBUTE IN C)
|
||||
;
|
||||
PS_PRTST:
|
||||
LD HL,PS_STPPT
|
||||
BIT 6,C
|
||||
JP NZ,PS_PRT18 ; PARALLEL TYPE?
|
||||
LD HL,PS_STRS232 ; ASSUME RS-232
|
||||
BIT 7,C ; 0=RS-232, 1=TERMINAL
|
||||
JP Z,PS_PRT18 ; HANDLE TERMINAL TYPE
|
||||
LD HL,PS_STTERM ; TYPE IS TERMINAL
|
||||
JP PS_PRT18
|
||||
;
|
||||
; PRINT SERIAL CONFIG (UNIT IN E, ATTRIBUTE IN C)
|
||||
;
|
||||
PS_PRTSC:
|
||||
BIT 6,C ; PARALLEL TYPE?
|
||||
JR NZ,PSPRTPC0
|
||||
|
||||
BIT 7,C ; 0=RS-232, 1=TERMINAL
|
||||
JP NZ,PS_PRTSC1 ; PRINT TERMINAL CONFIG
|
||||
;
|
||||
; PRINT RS-232 CONFIG
|
||||
LD B,BF_CIOQUERY ; HBIOS FUNC: GET CIO CONFIG
|
||||
LD C,E ; SET SERIAL UNIT NUM
|
||||
RST 08 ; DE:HL := BAUD RATE
|
||||
LD A,D ; TEST FOR $FF
|
||||
AND E
|
||||
INC A ; SET Z IF DE == $FF
|
||||
JP Z,PS_PRTNUL ; $FF == NO CONFIG DEFINED
|
||||
;
|
||||
PS_PRTSC0:
|
||||
; PRINT BAUD RATE
|
||||
PUSH DE ; PRESERVE DE
|
||||
LD A,D
|
||||
AND $1F ; ISOLATE ENCODED BAUD RATE
|
||||
LD L,A ; PUT IN L
|
||||
LD H,0 ; H IS ALWAYS ZERO
|
||||
LD DE,75 ; BAUD RATE DECODE CONSTANT
|
||||
CALL DECODE ; DE:HL := BAUD RATE
|
||||
LD BC,HB_BCDTMP ; POINT TO TEMP BCD BUF
|
||||
CALL BIN2BCD ; CONVERT TO BCD
|
||||
CALL PRTBCD ; AND PRINT IN DECIMAL
|
||||
POP DE ; RESTORE DE
|
||||
;
|
||||
; PRINT DATA BITS
|
||||
PUSH DE ; PRESERVE DE
|
||||
CALL PC_COMMA ; FORMATTING
|
||||
LD A,E ; GET CONFIG BYTE
|
||||
AND $03 ; ISOLATE DATA BITS VALUE
|
||||
ADD A,'5' ; CONVERT TO CHARACTER
|
||||
CALL COUT ; AND PRINT
|
||||
POP DE ; RESTORE DE
|
||||
;
|
||||
; PRINT PARITY
|
||||
PUSH DE ; PRESERVE DE
|
||||
CALL PC_COMMA ; FORMATTING
|
||||
LD A,E ; GET CONFIG BYTE
|
||||
RRCA ; SHIFT RELEVANT BITS
|
||||
RRCA ; ...
|
||||
RRCA ; ...
|
||||
AND $07 ; AND ISOLATE DATA BITS VALUE
|
||||
LD HL,PS_STPARMAP ; CHARACTER LOOKUP TABLE
|
||||
CALL ADDHLA ; APPLY OFFSET
|
||||
LD A,(HL) ; GET CHARACTER
|
||||
CALL COUT ; AND PRINT
|
||||
POP DE ; RESTORE DE
|
||||
;
|
||||
; PRINT STOP BITS
|
||||
CALL PC_COMMA ; FORMATTING
|
||||
LD A,E ; GET CONFIG BYTE
|
||||
RRCA ; SHIFT RELEVANT BITS
|
||||
RRCA ; ...
|
||||
AND $01 ; AND ISOLATE DATA BITS VALUE
|
||||
ADD A,'1' ; MAKE IT A CHARACTER
|
||||
CALL COUT ; AND PRINT
|
||||
;
|
||||
RET
|
||||
;
|
||||
PSPRTPC0:
|
||||
LD B,BF_CIOQUERY ; HBIOS FUNC: GET CIO CONFIG
|
||||
LD C,E ; SET PARALLEL UNIT NUM
|
||||
RST 08 ; DE:HL := I/O SETTING
|
||||
LD A,D ; TEST FOR $FF
|
||||
AND E
|
||||
INC A ; SET Z IF DE == $FF
|
||||
JP Z,PS_PRTNUL ; $FF == NO CONFIG DEFINED
|
||||
;
|
||||
PS_PRTPC0:
|
||||
LD C,E ; DISPLAY PIO TYPE
|
||||
LD A,11000000B ; WHICH IS DEFINE BY
|
||||
LD DE,PIO_MODE_STR ; BITS 6 AND 7
|
||||
JP PRTIDXMSK
|
||||
; RET ; TRICK RETURN
|
||||
;
|
||||
PS_PRTSC1:
|
||||
; PRINT TERMINAL CONFIG
|
||||
LD A,C ; GET ATTRIBUTE VALUE
|
||||
CP $BF ; NO ATTACHED VDA
|
||||
JR Z,PS_PRTSC2
|
||||
PRTS("Video $") ; FORMATTING
|
||||
AND $0F ; ISOLATE VIDEO UNIT NUM
|
||||
CALL PRTDECB ; PRINT IT
|
||||
CALL PC_COMMA
|
||||
#IF (VDAEMU == EMUTYP_TTY)
|
||||
PRTS("TTY$")
|
||||
#ENDIF
|
||||
#IF (VDAEMU == EMUTYP_ANSI)
|
||||
PRTS("ANSI$")
|
||||
#ENDIF
|
||||
RET
|
||||
;
|
||||
PS_PRTSC2:
|
||||
PRTS("Term Module$")
|
||||
CALL PC_COMMA
|
||||
PRTS("ANSI$")
|
||||
RET
|
||||
;
|
||||
; PRINT ONE LINE VIDEO UNIT/DEVICE INFO, VIDEO UNIT INDEX IN C
|
||||
;
|
||||
PS_VIDEO:
|
||||
PUSH BC ; SAVE UNIT INDEX FOR LATER
|
||||
;
|
||||
; UNIT COLUMN
|
||||
PRTS("Video $")
|
||||
LD A,C ; MOVE UNIT NUM TO A
|
||||
CALL PRTDECB ; PRINT IT, ASSUME SINGLE DIGIT
|
||||
PRTS(" $") ; PAD TO NEXT COLUMN
|
||||
;
|
||||
; DEVICE COLUMN
|
||||
LD B,BF_VDADEV ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C
|
||||
RST 08 ; DE:=DEVTYP/NUM, H:=DISK ATTRIBUTES
|
||||
PUSH BC ; SAVE ATTRIBUTES
|
||||
LD HL,PS_VDVDU ; POINT TO VIDEO DEVICE TYPE NAME TABLE
|
||||
CALL PS_PRTDEV ; PRINT VIDEO DEVICE NMEMONIC PADDED TO FIELD WIDTH
|
||||
POP DE ; RECOVER ATTRIBUTES
|
||||
PUSH DE ; SAVE ATTRIBUTES AGAIN
|
||||
CALL PS_PRTVT ; PRINT VIDEO TYPE
|
||||
POP DE ; RESTORE ATTRIBUTES
|
||||
POP BC ; RESTORE UNIT NUM
|
||||
CALL PS_PRTVC ; PRINT VIDEO CONFIG
|
||||
;
|
||||
CALL NEWLINE
|
||||
RET
|
||||
;
|
||||
; PRINT VIDEO TYPE (VIDEO ATTRIBUTE IN E)
|
||||
;
|
||||
PS_PRTVT:
|
||||
LD HL,PS_VTCRT ; ASSUME CRT
|
||||
JP PS_PRT18 ; PRINT
|
||||
;
|
||||
; PRINT VIDEO CONFIG (UNIT IN C, ATTRIBUTE IN E)
|
||||
;
|
||||
PS_PRTVC:
|
||||
PRTS("Text$")
|
||||
CALL PC_COMMA
|
||||
LD B,BF_VDAQRY ; FUNC: QUERY FOR VDA CONFIG
|
||||
RST 08 ; D:=ROWS, E:=COLS
|
||||
LD A,E
|
||||
CALL PRTDECB
|
||||
LD A,'x'
|
||||
CALL COUT
|
||||
LD A,D
|
||||
CALL PRTDECB
|
||||
RET
|
||||
;
|
||||
; PRINT SOUND CONFIG
|
||||
;
|
||||
PS_SOUND:
|
||||
PUSH BC
|
||||
|
||||
; UNIT COLUMN
|
||||
PRTS("Sound $")
|
||||
LD A,C ; MOVE UNIT NUM TO A
|
||||
CALL PRTDECB ; PRINT IT
|
||||
CP 10 ; CHECK FOR MULTIPLE DIGITS
|
||||
CALL C,PC_SPACE ; EXTRA SPACE IF NEEDED
|
||||
PRTS(" $") ; PAD TO NEXT COLUMN
|
||||
|
||||
; DEVICE COLUMN
|
||||
|
||||
PUSH BC
|
||||
LD E,C
|
||||
XOR A
|
||||
LD DE,PS_SDSND ; POINT TO DEVICE TYPE NAME TABLE
|
||||
CALL PRTIDXDEA ; PRINT DEVICE NMEMONIC PADDED TO FIELD WIDTH
|
||||
LD A,C ; MOVE UNIT NUM TO A
|
||||
CALL PRTDECB ; PRINT IT
|
||||
CALL PC_COLON
|
||||
LD A,(PRTIDXCNT)
|
||||
SUB 12-1 ; SUBTRACT FIELD WIDTH (LESS THE COLON)
|
||||
NEG ; MAKE IT A POSITIVE NUMBER
|
||||
CALL PS_PAD ; PAD AS NEEDED
|
||||
POP BC
|
||||
|
||||
; DEVICE TYPE
|
||||
;
|
||||
LD B,BF_SNDQUERY ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C
|
||||
LD E,BF_SNDQ_DEV
|
||||
RST 08
|
||||
PUSH BC
|
||||
LD A,B
|
||||
LD DE,PS_SDSN76489
|
||||
CALL PRTIDXDEA
|
||||
CALL PS_PAD18
|
||||
POP BC
|
||||
;
|
||||
; DEVICE CHARACTERISTICS
|
||||
;
|
||||
LD B,BF_SNDQUERY ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C
|
||||
LD E,BF_SNDQ_CHCNT
|
||||
RST 08
|
||||
LD A,B
|
||||
CALL PRTDECB
|
||||
LD A,'+'
|
||||
CALL COUT
|
||||
LD A,C
|
||||
CALL PRTDECB
|
||||
PRTS(" CHANNELS$")
|
||||
CALL NEWLINE
|
||||
;
|
||||
POP BC
|
||||
RET
|
||||
;
|
||||
; PRINT DEVICE NMEMONIC, DEVTYP/NUM SPECIFIED IN DE
|
||||
;
|
||||
PS_PRTDEV:
|
||||
EX DE,HL
|
||||
LD A,H ; TYPE ID
|
||||
CALL PRTIDXDEA ; PRINT TYPE LABEL
|
||||
LD A,L ; UNIT NUMBER
|
||||
CALL PRTDECB ; PRINT NUM, ASSUME 1 CHAR
|
||||
CALL PC_COLON ; PRINT COLON
|
||||
LD A,(PRTIDXCNT)
|
||||
SUB 12-2+1 ; 12 CHAR FIELD - 1 POS FOR UNIT NUM AND 1 POS FOR COLON
|
||||
NEG
|
||||
CALL PS_PAD ; PAD N SPACES (SPECIFIED IN A)
|
||||
RET
|
||||
;
|
||||
; PRINT DEVICE MNEMONIC, DEVTYP/NUM SPECIFIED IN DE
|
||||
;
|
||||
PS_PRTNUL:
|
||||
LD HL,PS_STRNUL
|
||||
; FALL THRU TO PS_PRT
|
||||
;
|
||||
; PRINT STRING AT (HL), $ TERM, RETURN CHARS PRINTED IN C
|
||||
;
|
||||
PS_PRT: LD C,0 ; INIT CHAR COUNT
|
||||
PS_PRT1:
|
||||
LD A,(HL) ; GET CHAR
|
||||
INC HL ; BUMP INDEX
|
||||
CP '$' ; TERM?
|
||||
RET Z ; IF SO, DONE
|
||||
CALL COUT ; PRINT IT
|
||||
INC C ; BUMP COUNTER
|
||||
JR PS_PRT1 ; AND LOOP
|
||||
;
|
||||
; PAD 18 CHARACTER FIELD
|
||||
;
|
||||
PS_PAD18:
|
||||
LD A,(PRTIDXCNT)
|
||||
LD C,A
|
||||
JR PS_PRT18A
|
||||
;
|
||||
; PRINT STRING AT HL IN 18 CHARACTER FIELD
|
||||
;
|
||||
PS_PRT18:
|
||||
CALL PS_PRT ; PRINT $ TERM STRING AT (HL), C:=CHARS PRINTED
|
||||
PS_PRT18A:
|
||||
LD A,18 ; 18 CHAR FIELD
|
||||
SUB C
|
||||
; CALL PS_PAD ; PAD N SPACES (SPECIFIED IN A)
|
||||
;
|
||||
; PAD N SPACES SPECIFIED IN A
|
||||
;
|
||||
PS_PAD: LD B,A
|
||||
LD A,' '
|
||||
PS_PAD1:
|
||||
CALL COUT
|
||||
DJNZ PS_PAD1
|
||||
RET
|
||||
;
|
||||
;*****************************************************************************
|
||||
; Support Routines
|
||||
;*****************************************************************************
|
||||
;
|
||||
#include "util.asm"
|
||||
#INCLUDE "decode.asm"
|
||||
#include "bcd.asm"
|
||||
;
|
||||
;=======================================================================
|
||||
; Console character I/O helper routines (registers preserved)
|
||||
;=======================================================================
|
||||
;
|
||||
#if (BIOS == BIOS_WBW)
|
||||
;
|
||||
; Output character from A
|
||||
;
|
||||
COUT:
|
||||
; Save all incoming registers
|
||||
push af
|
||||
push bc
|
||||
push de
|
||||
push hl
|
||||
;
|
||||
; Output character to console via HBIOS
|
||||
ld e,a ; output char to E
|
||||
ld a,(curcon) ; get current console
|
||||
ld c,a ; console unit to C
|
||||
ld b,BF_CIOOUT ; HBIOS func: output char
|
||||
rst 08 ; HBIOS outputs character
|
||||
;
|
||||
; Restore all registers
|
||||
pop hl
|
||||
pop de
|
||||
pop bc
|
||||
pop af
|
||||
ret
|
||||
;
|
||||
#endif
|
||||
;
|
||||
#if (BIOS == BIOS_UNA)
|
||||
;
|
||||
; Output character from A
|
||||
;
|
||||
COUT:
|
||||
; Save all incoming registers
|
||||
push af
|
||||
push bc
|
||||
push de
|
||||
push hl
|
||||
;
|
||||
; Output character to console via UBIOS
|
||||
ld e,a
|
||||
ld bc,$12
|
||||
rst 08
|
||||
;
|
||||
; Restore all registers
|
||||
pop hl
|
||||
pop de
|
||||
pop bc
|
||||
pop af
|
||||
ret
|
||||
;
|
||||
#endif
|
||||
;
|
||||
;===============================================================================
|
||||
; Static Strings and Data
|
||||
;===============================================================================
|
||||
;
|
||||
PS_STRNUL .TEXT "--$" ; DISPLAY STRING FOR NUL VALUE
|
||||
;
|
||||
; DISK DEVICE STRINGS
|
||||
;
|
||||
PS_DDMD .TEXT "MD$"
|
||||
PS_DDFD .TEXT "FD$"
|
||||
PS_DDRF .TEXT "RF$"
|
||||
PS_DDIDE .TEXT "IDE$"
|
||||
PS_DDATAPI .TEXT "ATAPI$"
|
||||
PS_DDPPIDE .TEXT "PPIDE$"
|
||||
PS_DDSD .TEXT "SD$"
|
||||
PS_DDPRPSD .TEXT "PRPSD$"
|
||||
PS_DDPPPSD .TEXT "PPPSD$"
|
||||
PS_DDHDSK .TEXT "HDSK$"
|
||||
PS_DDPPA .TEXT "PPA$"
|
||||
PS_DDIMM .TEXT "IMM$"
|
||||
PS_DDSYQ .TEXT "SYQ$"
|
||||
PS_DDCHUSB .TEXT "CHUSB$"
|
||||
PS_DDCHSD .TEXT "CHSD$"
|
||||
;
|
||||
; DISK TYPE STRINGS
|
||||
;
|
||||
PS_DTFLOP .TEXT "Floppy Disk$"
|
||||
PS_DTHARD .TEXT "Hard Disk$"
|
||||
PS_DTCF .TEXT "CompactFlash$"
|
||||
PS_DTSD .TEXT "SD Card$"
|
||||
PS_DTUSB .TEXT "USB Drive$"
|
||||
PS_DTROM .TEXT "ROM Disk$"
|
||||
PS_DTRAM .TEXT "RAM Disk$"
|
||||
PS_DTFSH .TEXT "Flash ROM$"
|
||||
PS_DTRF .TEXT "RAM Floppy$"
|
||||
PS_DTCD .TEXT "CD-ROM$"
|
||||
PS_DTCRT .TEXT "Cartridge$"
|
||||
PS_DTOTHER .TEXT "???$"
|
||||
;
|
||||
; FLOPPY ATTRIBUTE STRINGS
|
||||
;
|
||||
PS_FLP_FSTR: .TEXT "8\",$" ; PS_FLP8
|
||||
.TEXT "5.25\",$" ; PS_FLP5
|
||||
.TEXT "3.5\",$" ; PS_FLP3
|
||||
.TEXT "???\",$" ; PS_FLPN
|
||||
;
|
||||
PS_FLP_SSTR: .TEXT "SS/$" ; PS_FLPSS
|
||||
.TEXT "DS/$" ; PS_FLPDS
|
||||
;
|
||||
PS_FLP_DSTR: .TEXT "SD$" ; PS_FLPSD
|
||||
.TEXT "DD$" ; PS_FLPDD
|
||||
.TEXT "HD$" ; PS_FLPHD
|
||||
.TEXT "ED$" ; PS_FLPED
|
||||
;
|
||||
; CHARACTER DEVICE STRINGS
|
||||
;
|
||||
PS_SDUART .TEXT "UART$"
|
||||
PS_SDASCI .TEXT "ASCI$"
|
||||
PS_SDTERM .TEXT "TERM$"
|
||||
PS_SDPRPCON .TEXT "PRPCON$"
|
||||
PS_SDPPPCON .TEXT "PPPCON$"
|
||||
PS_SDSIO .TEXT "SIO$"
|
||||
PS_SDACIA .TEXT "ACIA$"
|
||||
PS_SDPIO .TEXT "PIO$"
|
||||
PS_SDUF .TEXT "UF$"
|
||||
PS_SDDUART .TEXT "DUART$"
|
||||
PS_SDZ2U .TEXT "Z2U$"
|
||||
PS_SDLPT .TEXT "LPT$"
|
||||
PS_SDESPCON .TEXT "ESPCON$"
|
||||
PS_SDESPSER .TEXT "ESPSER$"
|
||||
PS_SDSCON .TEXT "SCON$"
|
||||
PS_SDSSER .TEXT "SSER$"
|
||||
PS_SDEZ80 .TEXT "EZ80$"
|
||||
;
|
||||
; CHARACTER SUB TYPE STRINGS
|
||||
;
|
||||
PS_STRS232 .TEXT "RS-232$"
|
||||
PS_STTERM .TEXT "Terminal$"
|
||||
PS_STPPT .TEXT "Parallel$"
|
||||
;
|
||||
PS_STPARMAP .DB "NONENMNS"
|
||||
;
|
||||
; PARALLEL TYPE STRINGS
|
||||
;
|
||||
PIO_MODE_STR: .TEXT "Output$"
|
||||
.TEXT "Input$"
|
||||
.TEXT "Bidirectional$"
|
||||
.TEXT "BitCtrl$"
|
||||
;
|
||||
; VIDEO DEVICE STRINGS
|
||||
;
|
||||
PS_VDVDU .TEXT "VDU$"
|
||||
PS_VDCVDU .TEXT "CVDU$"
|
||||
PS_VDGDC .TEXT "GDC$"
|
||||
PS_VDTMS .TEXT "TMS$"
|
||||
PS_VDVGA .TEXT "VGA$"
|
||||
PS_VDVRC .TEXT "VRC$"
|
||||
PS_VDEF .TEXT "EF$"
|
||||
PS_VDFV .TEXT "FV$"
|
||||
PS_VDXOSERA .TEXT "XOSERA$"
|
||||
;
|
||||
; VIDEO TYPE STRINGS
|
||||
;
|
||||
PS_VTCRT .TEXT "CRT$"
|
||||
;
|
||||
; SOUND DEVICE STRINGS
|
||||
;
|
||||
PS_SDSND .TEXT "SND$"
|
||||
;
|
||||
; SOUND TYPE STRINGS
|
||||
;
|
||||
PS_SDSN76489 .TEXT "SN76489$"
|
||||
PS_SDAY38910 .TEXT "AY-3-8910$"
|
||||
PS_SDBITMODE .TEXT "I/O PORT$"
|
||||
PS_SDYM2612 .TEXT "YM2612$"
|
||||
;
|
||||
; 0 1 2 3 4 5 6 7
|
||||
; 01234567890123456789012345678901234567890123456789012345678901234567890123456789
|
||||
PS_STRHDR .TEXT "Unit Device Type Capacity/Mode\r\n"
|
||||
.TEXT "---------- ---------- ---------------- --------------------\r\n$"
|
||||
;
|
||||
;===============================================================================
|
||||
; Working data
|
||||
;===============================================================================
|
||||
;
|
||||
HB_BCDTMP .FILL 5,0 ; BCD NUMBER STORAGE (TEMP)
|
||||
;
|
||||
#if (BIOS == BIOS_WBW)
|
||||
curcon .db CIO_CONSOLE ; current console unit
|
||||
#endif
|
||||
;
|
||||
;===============================================================================
|
||||
;
|
||||
; IT IS CRITICAL THAT THE FINAL BINARY BE EXACTLY DEV_SIZ BYTES.
|
||||
; THIS GENERATES FILLER AS NEEDED. IT WILL ALSO FORCE AN ASSEMBLY
|
||||
; ERROR IF THE SIZE EXCEEDS THE SPACE ALLOCATED.
|
||||
;
|
||||
SLACK .EQU (DEV_END - $)
|
||||
;
|
||||
#IF (SLACK < 0)
|
||||
.ECHO "*** INVENTORY SLICE IS TOO BIG!!!\n"
|
||||
!!! ; FORCE AN ASSEMBLY ERROR
|
||||
#ENDIF
|
||||
;
|
||||
.FILL SLACK,$00
|
||||
.ECHO "Slice Inventory space remaining: "
|
||||
.ECHO SLACK
|
||||
.ECHO " bytes.\n"
|
||||
;
|
||||
;===============================================================================
|
||||
;
|
||||
.END
|
||||
Reference in New Issue
Block a user