|
|
|
@ -1105,8 +1105,39 @@ EMU_INIT1: |
|
|
|
; C: UNIT NUMBER |
|
|
|
; |
|
|
|
VDA_DISPATCH: |
|
|
|
LD A,C ; REQUESTED DEVICE/UNIT IS IN C |
|
|
|
AND $F0 ; ISOLATE THE DEVICE PORTION |
|
|
|
; LD A,C ; REQUESTED DEVICE/UNIT IS IN C |
|
|
|
; AND $F0 ; ISOLATE THE DEVICE PORTION |
|
|
|
|
|
|
|
; |
|
|
|
; ON ENTRY C IS HBIOS UNIT # (INDEX INTO VDA_TBL OF VIDEO DEVICES) |
|
|
|
; USE UNIT # IN C TO LOOKUP VDA_TBL ENTRY, THEN |
|
|
|
; CONVERT C TO THE DEVICE/DRIVER SPECIFIC UNIT ID |
|
|
|
; AND GET THE DEVICE TYPE TO A FOR DRIVER DISPATCHING |
|
|
|
; |
|
|
|
LD A,C ; INCOMING UNIT INDEX TO A |
|
|
|
PUSH HL ; SAVE INCOMING HL |
|
|
|
LD HL,VDA_CNT ; HL := ADDRESS OF TABLE ENTRY COUNT |
|
|
|
CP (HL) ; COMPARE TO INCOMING ENTRY INDEX |
|
|
|
JR C,VDA_DISPATCH1 ; UNIT OK, PROCEED |
|
|
|
; |
|
|
|
; NOT GOOD, INCOMING UNIT IS OUT OF RANGE |
|
|
|
POP HL ; RESTORE HL/STACK |
|
|
|
CALL PANIC ; PANIC |
|
|
|
OR $FF ; SIGNAL ERROR |
|
|
|
RET ; AND RETURN |
|
|
|
; |
|
|
|
VDA_DISPATCH1: |
|
|
|
INC HL ; BUMP PAST COUNT PREFIX TO START OF TABLE |
|
|
|
RLCA ; MULTIPLY BY 4 TO |
|
|
|
RLCA ; ... TO CALC ENTRY OFFSET |
|
|
|
CALL ADDHLA ; HL := ENTRY OFFSET |
|
|
|
LD A,(HL) ; GET DEVICE TYPE BYTE |
|
|
|
INC HL ; BUMP TO DEVICE UNIT INDEX BYTE |
|
|
|
LD C,(HL) ; DEVICE UNIT INDEX TO C |
|
|
|
POP HL ; RECOVER INCOMING HL VALUE |
|
|
|
; |
|
|
|
; DISPATCH TO DRIVER BASED ON DEVICE TYPE IN A |
|
|
|
; |
|
|
|
#IF (VDUENABLE) |
|
|
|
CP VDADEV_VDU |
|
|
|
JP Z,VDU_DISPATCH |
|
|
|
@ -1125,6 +1156,30 @@ VDA_DISPATCH: |
|
|
|
#ENDIF |
|
|
|
CALL PANIC |
|
|
|
; |
|
|
|
; HBIOS VIDEO DEVICE UNIT TABLE |
|
|
|
; |
|
|
|
; TABLE IS BUILT DYNAMICALLY BY EACH DRIVER DURING INITIALIZATION. |
|
|
|
; THE TABLE IS PREFIXED BY TWO BYTES. TABLE - 1 CONTAINS THE CURRENT |
|
|
|
; NUMBER OF ENTRIES. TABLE - 2 CONTAINS THE MAXIMUM NUMBER OF ENTRIES. |
|
|
|
; EACH ENTRY IS DEFINED AS: |
|
|
|
; |
|
|
|
; BYTE DEVICE TYPE ID |
|
|
|
; BYTE DEVICE/DRIVER UNIT NUMBER |
|
|
|
; WORD UNIT DATA ADDRESS |
|
|
|
; |
|
|
|
VDA_MAX .EQU 16 ; UP TO 16 UNITS |
|
|
|
VDA_SIZ .EQU VDA_MAX * 4 ; EACH ENTRY IS 4 BYTES |
|
|
|
; |
|
|
|
.DB VDA_MAX ; MAX ENTRY COUNT TABLE PREFIX |
|
|
|
VDA_CNT .DB 0 ; ENTRY COUNT PREFIX |
|
|
|
VDA_TBL .FILL VDA_SIZ,0 ; SPACE FOR ENTRIES |
|
|
|
; |
|
|
|
; ADD AN ENTRY TO THE VDA UNIT TABLE (SEE HB_ADDENT FOR DETAILS) |
|
|
|
; |
|
|
|
VDA_ADDENT: |
|
|
|
LD HL,VDA_TBL ; POINT TO VDA TABLE |
|
|
|
JP HB_ADDENT ; ... AND GO TO COMMON CODE |
|
|
|
; |
|
|
|
;================================================================================================== |
|
|
|
; SYSTEM FUNCTION DISPATCHER |
|
|
|
;================================================================================================== |
|
|
|
@ -1276,6 +1331,8 @@ SYS_GET: |
|
|
|
JR Z,SYS_GETCIOCNT |
|
|
|
CP BF_SYSGET_DIOCNT |
|
|
|
JR Z,SYS_GETDIOCNT |
|
|
|
CP BF_SYSGET_VDACNT |
|
|
|
JR Z,SYS_GETVDACNT |
|
|
|
CP BF_SYSGET_BOOTINFO |
|
|
|
JR Z,SYS_GETBOOTINFO |
|
|
|
CP BF_SYSGET_CPUINFO |
|
|
|
@ -1353,6 +1410,14 @@ SYS_GETDIOCNT: |
|
|
|
XOR A ; SIGNALS SUCCESS |
|
|
|
RET |
|
|
|
; |
|
|
|
; GET VIDEO UNIT COUNT |
|
|
|
; |
|
|
|
SYS_GETVDACNT: |
|
|
|
LD A,(VDA_CNT) ; GET DEVICE COUNT (FIRST BYTE OF LIST) |
|
|
|
LD E,A ; PUT IT IN E |
|
|
|
XOR A ; SIGNALS SUCCESS |
|
|
|
RET |
|
|
|
; |
|
|
|
; SET SYSTEM PARAMETERS |
|
|
|
; PARAMETER(S) TO SET INDICATED IN C |
|
|
|
; |
|
|
|
@ -1997,7 +2062,10 @@ PRTSUM: |
|
|
|
LD C,BF_SYSGET_DIOCNT ; SUBFUNC: DISK UNIT COUNT |
|
|
|
RST 08 ; E := DISK UNIT COUNT |
|
|
|
LD B,E ; MOVE TO B FOR LOOP COUNT |
|
|
|
LD C,0 ; D WILL BE UNIT INDEX |
|
|
|
LD A,E ; MOVE TO ACCUM |
|
|
|
OR A ; SET FLAGS |
|
|
|
JR Z,PRTSUM1A ; IF NONE, BYPASS |
|
|
|
LD C,0 ; C WILL BE UNIT INDEX |
|
|
|
PRTSUM1: |
|
|
|
PUSH BC ; SAVE LOOP CONTROL |
|
|
|
CALL PS_DISK ; PRINT DISK INFO |
|
|
|
@ -2005,19 +2073,41 @@ PRTSUM1: |
|
|
|
INC C ; BUMP DISK UNIT INDEX |
|
|
|
DJNZ PRTSUM1 ; LOOP THRU ALL DISK DEVICES |
|
|
|
; |
|
|
|
PRTSUM1A: |
|
|
|
; PRINT SERIAL DEVICES |
|
|
|
LD B,BF_SYSGET ; FUNC: SYSTEM INFO GET |
|
|
|
LD C,BF_SYSGET_CIOCNT ; SUBFUNC: DISK UNIT COUNT |
|
|
|
RST 08 ; E := DISK UNIT COUNT |
|
|
|
LD C,BF_SYSGET_CIOCNT ; SUBFUNC: SERIAL UNIT COUNT |
|
|
|
RST 08 ; E := SERIAL UNIT COUNT |
|
|
|
LD B,E ; MOVE TO B FOR LOOP COUNT |
|
|
|
LD C,0 ; D WILL BE UNIT INDEX |
|
|
|
LD A,E ; MOVE TO ACCUM |
|
|
|
OR A ; SET FLAGS |
|
|
|
JR Z,PRTSUM2A ; IF NONE, BYPASS |
|
|
|
LD C,0 ; C WILL BE UNIT INDEX |
|
|
|
PRTSUM2: |
|
|
|
PUSH BC ; SAVE LOOP CONTROL |
|
|
|
CALL PS_SERIAL ; PRINT SERIAL INFO |
|
|
|
POP BC ; RESTORE LOOP CONTROL |
|
|
|
INC C ; BUMP DISK UNIT INDEX |
|
|
|
DJNZ PRTSUM2 ; LOOP THRU ALL DISK DEVICES |
|
|
|
INC C ; BUMP SERIAL UNIT INDEX |
|
|
|
DJNZ PRTSUM2 ; LOOP THRU ALL SERIAL DEVICES |
|
|
|
; |
|
|
|
PRTSUM2A: |
|
|
|
; PRINT VIDEO DEVICES |
|
|
|
LD B,BF_SYSGET ; FUNC: SYSTEM INFO GET |
|
|
|
LD C,BF_SYSGET_VDACNT ; SUBFUNC: VIDEO UNIT COUNT |
|
|
|
RST 08 ; E := SERIAL UNIT COUNT |
|
|
|
LD B,E ; MOVE TO B FOR LOOP COUNT |
|
|
|
LD A,E ; MOVE TO ACCUM |
|
|
|
OR A ; SET FLAGS |
|
|
|
JR Z,PRTSUM3A ; IF NONE, BYPASS |
|
|
|
LD C,0 ; C WILL BE UNIT INDEX |
|
|
|
PRTSUM3: |
|
|
|
PUSH BC ; SAVE LOOP CONTROL |
|
|
|
CALL PS_VIDEO ; PRINT VIDEO INFO |
|
|
|
POP BC ; RESTORE LOOP CONTROL |
|
|
|
INC C ; BUMP VIDEO UNIT INDEX |
|
|
|
DJNZ PRTSUM3 ; LOOP THRU ALL VIDEO DEVICES |
|
|
|
; |
|
|
|
PRTSUM3A: |
|
|
|
RET ; DONE |
|
|
|
; |
|
|
|
; PRINT ONE LINE DISK UNIT/DEVICE INFO, DISK UNIT INDEX IN C |
|
|
|
@ -2072,28 +2162,6 @@ PS_PRTDT1: |
|
|
|
SUB C |
|
|
|
CALL PS_PAD ; PAD N SPACES (SPECIFIED IN A) |
|
|
|
RET |
|
|
|
|
|
|
|
|
|
|
|
;LD A,D |
|
|
|
;RRCA ; TYPE IS IN UPPER NIBBLE, MOVE TO LOWER NIBBLE |
|
|
|
;RRCA |
|
|
|
;RRCA |
|
|
|
;RRCA |
|
|
|
;RLCA ; X2 FOR WORD OFFSET IN STRING TABLE |
|
|
|
;CALL ADDHLA |
|
|
|
;LD A,(HL) |
|
|
|
;INC HL |
|
|
|
;LD H,(HL) |
|
|
|
;LD L,A |
|
|
|
|
|
|
|
;CALL PS_PRT ; PRINT $ TERM STRING AT (HL), C:=CHARS PRINTED |
|
|
|
;LD A,E ; NUM |
|
|
|
;CALL PRTDECB ; PRINT NUM, ASSUME 1 CHAR |
|
|
|
;CALL PC_COLON ; PRINT COLON |
|
|
|
;LD A,12 - 2 ; 12 CHAR FIELD - 1 POS FOR UNIT NUM AND 1 POS FOR COLON |
|
|
|
;SUB C |
|
|
|
;CALL PS_PAD ; PAD N SPACES (SPECIFIED IN A) |
|
|
|
;RET |
|
|
|
; |
|
|
|
; PRINT DISK CAPACITY (UNIT IN C, ATTRIBUTE IN E) |
|
|
|
; |
|
|
|
@ -2188,22 +2256,7 @@ PS_PRTDC2C: |
|
|
|
; |
|
|
|
RET ; DONE |
|
|
|
; |
|
|
|
; FLOPPY ATTRIBUTE STRINGS |
|
|
|
; |
|
|
|
PS_FLP8 .TEXT "8\", $" |
|
|
|
PS_FLP5 .TEXT "5.25\", $" |
|
|
|
PS_FLP3 .TEXT "3.5\", $" |
|
|
|
PS_FLPN .TEXT "???\", $" |
|
|
|
; |
|
|
|
PS_FLPSS .TEXT "SS/$" |
|
|
|
PS_FLPDS .TEXT "SS/$" |
|
|
|
; |
|
|
|
PS_FLPSD .TEXT "SD$" |
|
|
|
PS_FLPDD .TEXT "DD$" |
|
|
|
PS_FLPHD .TEXT "HD$" |
|
|
|
PS_FLPED .TEXT "ED$" |
|
|
|
; |
|
|
|
; PRINT ONE LINE SERIAL UNIT/DEVICE INFO, DISK UNIT INDEX IN C |
|
|
|
; PRINT ONE LINE SERIAL UNIT/DEVICE INFO, SERIAL UNIT INDEX IN C |
|
|
|
; |
|
|
|
PS_SERIAL: |
|
|
|
PUSH BC ; SAVE UNIT INDEX FOR LATER |
|
|
|
@ -2258,6 +2311,50 @@ PS_PRTSC: |
|
|
|
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_VDSTRREF ; 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_VTDUMMY |
|
|
|
CALL PS_PRT ; PRINT $ TERM STRING AT (HL), C:=CHARS PRINTED |
|
|
|
LD A,18 ; 18 CHAR FIELD |
|
|
|
SUB C |
|
|
|
CALL PS_PAD ; PAD N SPACES (SPECIFIED IN A) |
|
|
|
RET |
|
|
|
; |
|
|
|
; PRINT VIDEO CONFIG (UNIT IN C, ATTRIBUTE IN E) |
|
|
|
; |
|
|
|
PS_PRTVC: |
|
|
|
LD HL,PS_VCDUMMY |
|
|
|
CALL PS_PRT |
|
|
|
RET |
|
|
|
; |
|
|
|
; PRINT DEVICE NMEMONIC, DEVTYP/NUM SPECIFIED IN DE |
|
|
|
; |
|
|
|
PS_PRTDEV: |
|
|
|
@ -2343,6 +2440,21 @@ PS_DTRAM .TEXT "RAM Disk$" |
|
|
|
PS_DTRF .TEXT "RAM Floppy$" |
|
|
|
PS_DTOTHER .TEXT "???$" |
|
|
|
; |
|
|
|
; FLOPPY ATTRIBUTE STRINGS |
|
|
|
; |
|
|
|
PS_FLP8 .TEXT "8\", $" |
|
|
|
PS_FLP5 .TEXT "5.25\", $" |
|
|
|
PS_FLP3 .TEXT "3.5\", $" |
|
|
|
PS_FLPN .TEXT "???\", $" |
|
|
|
; |
|
|
|
PS_FLPSS .TEXT "SS/$" |
|
|
|
PS_FLPDS .TEXT "SS/$" |
|
|
|
; |
|
|
|
PS_FLPSD .TEXT "SD$" |
|
|
|
PS_FLPDD .TEXT "DD$" |
|
|
|
PS_FLPHD .TEXT "HD$" |
|
|
|
PS_FLPED .TEXT "ED$" |
|
|
|
; |
|
|
|
; SERIAL DEVICE STRINGS |
|
|
|
; |
|
|
|
PS_SDSTRREF: |
|
|
|
@ -2362,6 +2474,24 @@ PS_SDPPPCON .TEXT "PPPCON$" |
|
|
|
; |
|
|
|
PS_STDUMMY .TEXT "--$" |
|
|
|
; |
|
|
|
; VIDEO DEVICE STRINGS |
|
|
|
; |
|
|
|
PS_VDSTRREF: |
|
|
|
.DW PS_VDVDU, PS_VDCVDU, PS_VDUPD7220, PS_VDSCG |
|
|
|
; |
|
|
|
PS_VDVDU .TEXT "VDU$" |
|
|
|
PS_VDCVDU .TEXT "CVDU$" |
|
|
|
PS_VDUPD7220 .TEXT "UPD7220$" |
|
|
|
PS_VDSCG .TEXT "SCG$" |
|
|
|
; |
|
|
|
; SERIAL TYPE STRINGS |
|
|
|
; |
|
|
|
PS_VTDUMMY .TEXT "--$" |
|
|
|
; |
|
|
|
; VIDEO CONFIG STRINGS |
|
|
|
; |
|
|
|
PS_VCDUMMY .TEXT "--$" |
|
|
|
; |
|
|
|
; |
|
|
|
; 0 1 2 3 4 5 6 7 |
|
|
|
; 01234567890123456789012345678901234567890123456789012345678901234567890123456789 |
|
|
|
|