mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
Bug Fixes
This commit is contained in:
@@ -27,8 +27,8 @@ ANSI_DEFCOLOR .EQU 7 ; WHITE ON BLACK
|
||||
;
|
||||
ANSI_INIT:
|
||||
; SAVE INCOMING VDA DISPATCH ADDRESS
|
||||
LD C,A ; VDA DRIVER'S DEVICE TYPE
|
||||
LD (ANSI_DEVTYPE),A ; ... SAVED LOCALLY
|
||||
LD A,C ; VDA DRIVER'S DEVICE TYPE
|
||||
LD (ANSI_DEVTYPE),A ; ... SAVED LOCALLY
|
||||
LD (ANSI_VDADISPADR),DE ; RECORD NEW VDA DISPATCH ADDRESS
|
||||
CALL ANSI_RESET ; FULL RESET OF EMULATOR INTERNAL STATE
|
||||
LD DE,ANSI_DISPATCH ; RETURN OUR DISPATCH ADDRESS
|
||||
|
||||
@@ -37,12 +37,17 @@ CVDU_INIT:
|
||||
PRTS("KB$")
|
||||
CALL CVDU_LOADFONT ; LOAD FONT DATA FROM ROM TO CVDU STRORAGE
|
||||
|
||||
; ADD OURSELVES TO VDA DISPATCH TABLE
|
||||
LD B,0 ; PHYSICAL UNIT IS ZERO
|
||||
LD C,VDADEV_CVDU ; DEVICE TYPE
|
||||
LD DE,0 ; UNIT DATA BLOB ADDRESS
|
||||
CALL VDA_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
|
||||
|
||||
; ADD OURSELVES TO CIO DISPATCH TABLE
|
||||
LD B,0 ; PHYSICAL UNIT IS ZERO
|
||||
LD C,CIODEV_CVDU ; DEVICE TYPE
|
||||
LD DE,0 ; UNIT DATA BLOB ADDRESS
|
||||
CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
|
||||
;LD (CVDU_CIOUNIT),A ; SAVE IT LOCALLY
|
||||
LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE
|
||||
|
||||
LD D,VDAEMU ; DEFAULT EMULATION
|
||||
@@ -71,27 +76,29 @@ CVDU_DISPATCH:
|
||||
DEC A
|
||||
JP Z,CVDU_VDARES ; $42
|
||||
DEC A
|
||||
JP Z,CVDU_VDASCS ; $43
|
||||
JP Z,CVDU_VDADEV ; $43
|
||||
DEC A
|
||||
JP Z,CVDU_VDASCP ; $44
|
||||
JP Z,CVDU_VDASCS ; $44
|
||||
DEC A
|
||||
JP Z,CVDU_VDASAT ; $45
|
||||
JP Z,CVDU_VDASCP ; $45
|
||||
DEC A
|
||||
JP Z,CVDU_VDASCO ; $46
|
||||
JP Z,CVDU_VDASAT ; $46
|
||||
DEC A
|
||||
JP Z,CVDU_VDAWRC ; $47
|
||||
JP Z,CVDU_VDASCO ; $47
|
||||
DEC A
|
||||
JP Z,CVDU_VDAFIL ; $48
|
||||
JP Z,CVDU_VDAWRC ; $48
|
||||
DEC A
|
||||
JP Z,CVDU_VDACPY ; $49
|
||||
JP Z,CVDU_VDAFIL ; $49
|
||||
DEC A
|
||||
JP Z,CVDU_VDASCR ; $4A
|
||||
JP Z,CVDU_VDACPY ; $4A
|
||||
DEC A
|
||||
JP Z,KBD_STAT ; $4B
|
||||
JP Z,CVDU_VDASCR ; $4B
|
||||
DEC A
|
||||
JP Z,KBD_FLUSH ; $4C
|
||||
JP Z,KBD_STAT ; $4C
|
||||
DEC A
|
||||
JP Z,KBD_READ ; $4D
|
||||
JP Z,KBD_FLUSH ; $4D
|
||||
DEC A
|
||||
JP Z,KBD_READ ; $4E
|
||||
CALL PANIC
|
||||
|
||||
CVDU_VDAINI:
|
||||
@@ -102,8 +109,6 @@ CVDU_VDAINI:
|
||||
|
||||
; INITIALIZE EMULATION
|
||||
LD B,D ; EMULATION TYPE TO B
|
||||
;LD A,(CVDU_CIOUNIT) ; CIO UNIT NUMBER
|
||||
;LD C,A ; ... IS PASSED IN C
|
||||
LD C,CIODEV_CVDU ; PASS OUR DEVICE TYPE IN C
|
||||
LD DE,CVDU_DISPATCH ; DISPATCH ADDRESS TO DE
|
||||
CALL EMU_INIT ; INITIALIZE EMULATION, DE := CIO DISPATCHER
|
||||
@@ -134,7 +139,12 @@ CVDU_VDARES:
|
||||
|
||||
XOR A
|
||||
RET
|
||||
|
||||
|
||||
CVDU_VDADEV:
|
||||
LD D,VDADEV_CVDU ; D := DEVICE TYPE
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
CVDU_VDASCS:
|
||||
CALL PANIC ; NOT IMPLEMENTED (YET)
|
||||
@@ -650,8 +660,6 @@ CVDU_BLKCPY1:
|
||||
; CVDU DRIVER - DATA
|
||||
;==================================================================================================
|
||||
;
|
||||
;CVDU_CIOUNIT .DB $FF ; LOCAL COPY OF OUR CIO UNIT NUMBER
|
||||
;
|
||||
CVDU_ATTR .DB 0 ; CURRENT COLOR
|
||||
CVDU_POS .DW 0 ; CURRENT DISPLAY POSITION
|
||||
;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -39,17 +39,18 @@ BF_VDA .EQU $40
|
||||
BF_VDAINI .EQU BF_VDA + 0 ; INITIALIZE VDU
|
||||
BF_VDAQRY .EQU BF_VDA + 1 ; QUERY VDU STATUS
|
||||
BF_VDARES .EQU BF_VDA + 2 ; SOFT RESET VDU
|
||||
BF_VDASCS .EQU BF_VDA + 3 ; SET CURSOR STYLE
|
||||
BF_VDASCP .EQU BF_VDA + 4 ; SET CURSOR POSITION
|
||||
BF_VDASAT .EQU BF_VDA + 5 ; SET CHARACTER ATTRIBUTE
|
||||
BF_VDASCO .EQU BF_VDA + 6 ; SET CHARACTER COLOR
|
||||
BF_VDAWRC .EQU BF_VDA + 7 ; WRITE CHARACTER
|
||||
BF_VDAFIL .EQU BF_VDA + 8 ; FILL
|
||||
BF_VDACPY .EQU BF_VDA + 9 ; COPY
|
||||
BF_VDASCR .EQU BF_VDA + 10 ; SCROLL
|
||||
BF_VDAKST .EQU BF_VDA + 11 ; GET KEYBOARD STATUS
|
||||
BF_VDAKFL .EQU BF_VDA + 12 ; FLUSH KEYBOARD BUFFER
|
||||
BF_VDAKRD .EQU BF_VDA + 13 ; READ KEYBOARD
|
||||
BF_VDADEV .EQU BF_VDA + 3 ; DEVICE INFO
|
||||
BF_VDASCS .EQU BF_VDA + 4 ; SET CURSOR STYLE
|
||||
BF_VDASCP .EQU BF_VDA + 5 ; SET CURSOR POSITION
|
||||
BF_VDASAT .EQU BF_VDA + 6 ; SET CHARACTER ATTRIBUTE
|
||||
BF_VDASCO .EQU BF_VDA + 7 ; SET CHARACTER COLOR
|
||||
BF_VDAWRC .EQU BF_VDA + 8 ; WRITE CHARACTER
|
||||
BF_VDAFIL .EQU BF_VDA + 9 ; FILL
|
||||
BF_VDACPY .EQU BF_VDA + 10 ; COPY
|
||||
BF_VDASCR .EQU BF_VDA + 11 ; SCROLL
|
||||
BF_VDAKST .EQU BF_VDA + 12 ; GET KEYBOARD STATUS
|
||||
BF_VDAKFL .EQU BF_VDA + 13 ; FLUSH KEYBOARD BUFFER
|
||||
BF_VDAKRD .EQU BF_VDA + 14 ; READ KEYBOARD
|
||||
;
|
||||
BF_SYS .EQU $F0
|
||||
BF_SYSSETBNK .EQU BF_SYS + 0 ; SET CURRENT BANK
|
||||
@@ -66,7 +67,7 @@ BF_POKE .EQU BF_SYS + 10 ; PUT A BYTE TO ALT BANK
|
||||
;
|
||||
BF_SYSGET_CIOCNT .EQU $00 ; GET CHAR UNIT COUNT
|
||||
BF_SYSGET_DIOCNT .EQU $10 ; GET DISK UNIT COUNT
|
||||
BF_SYSGET_VDACNT .EQU $10 ; GET VDA UNIT COUNT
|
||||
BF_SYSGET_VDACNT .EQU $40 ; GET VDA UNIT COUNT
|
||||
BF_SYSGET_BOOTINFO .EQU $E0 ; GET BOOT INFORMATION
|
||||
BF_SYSGET_CPUINFO .EQU $F0 ; GET CPU INFORMATION
|
||||
BF_SYSGET_MEMINFO .EQU $F1 ; GET MEMORY CAPACTITY INFO
|
||||
@@ -103,11 +104,11 @@ DIODEV_HDSK .EQU $90
|
||||
;
|
||||
; VDA DEVICE IDS
|
||||
;
|
||||
VDADEV_NONE .EQU $00 ; NO VDA DEVICE
|
||||
VDADEV_VDU .EQU $10 ; ECB VDU - 6545 CHIP
|
||||
VDADEV_CVDU .EQU $20 ; ECB COLOR VDU - 8563 CHIP (NOT IMP)
|
||||
VDADEV_UPD7220 .EQU $30 ; ECB uP7220 (NOT IMPLEMENTED)
|
||||
VDADEV_SCG .EQU $40 ; N8 ONBOARD VDA SUBSYSTEM
|
||||
;VDADEV_NONE .EQU $00 ; NO VDA DEVICE
|
||||
VDADEV_VDU .EQU $00 ; ECB VDU - 6545 CHIP
|
||||
VDADEV_CVDU .EQU $10 ; ECB COLOR VDU - 8563 CHIP (NOT IMP)
|
||||
VDADEV_UPD7220 .EQU $20 ; ECB uP7220 (NOT IMPLEMENTED)
|
||||
VDADEV_SCG .EQU $30 ; N8 ONBOARD VDA SUBSYSTEM
|
||||
;
|
||||
; EMULATION TYPES
|
||||
;
|
||||
|
||||
@@ -37,13 +37,18 @@ SCG_INIT:
|
||||
;
|
||||
CALL SCG_CRTINIT ; SETUP THE SCG CHIP REGISTERS
|
||||
CALL SCG_LOADFONT ; LOAD FONT DATA FROM ROM TO SCG STRORAGE
|
||||
;
|
||||
; ADD OURSELVES TO VDA DISPATCH TABLE
|
||||
LD B,0 ; PHYSICAL UNIT IS ZERO
|
||||
LD C,VDADEV_SCG ; DEVICE TYPE
|
||||
LD DE,0 ; UNIT DATA BLOB ADDRESS
|
||||
CALL VDA_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
|
||||
;
|
||||
; ADD OURSELVES TO CIO DISPATCH TABLE
|
||||
LD B,0 ; PHYSICAL UNIT IS ZERO
|
||||
LD C,CIODEV_SCG ; DEVICE TYPE
|
||||
LD DE,0 ; UNIT DATA BLOB ADDRESS
|
||||
CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
|
||||
;LD (SCG_CIOUNIT),A ; SAVE IT LOCALLY
|
||||
LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE
|
||||
|
||||
LD D,VDAEMU ; DEFAULT EMULATION
|
||||
@@ -72,27 +77,29 @@ SCG_DISPATCH:
|
||||
DEC A
|
||||
JP Z,SCG_VDARES ; $42
|
||||
DEC A
|
||||
JP Z,SCG_VDASCS ; $43
|
||||
JP Z,SCG_VDADEV ; $43
|
||||
DEC A
|
||||
JP Z,SCG_VDASCP ; $44
|
||||
JP Z,SCG_VDASCS ; $44
|
||||
DEC A
|
||||
JP Z,SCG_VDASAT ; $45
|
||||
JP Z,SCG_VDASCP ; $45
|
||||
DEC A
|
||||
JP Z,SCG_VDASCO ; $46
|
||||
JP Z,SCG_VDASAT ; $46
|
||||
DEC A
|
||||
JP Z,SCG_VDAWRC ; $47
|
||||
JP Z,SCG_VDASCO ; $47
|
||||
DEC A
|
||||
JP Z,SCG_VDAFIL ; $48
|
||||
JP Z,SCG_VDAWRC ; $48
|
||||
DEC A
|
||||
JP Z,SCG_VDACPY ; $49
|
||||
JP Z,SCG_VDAFIL ; $49
|
||||
DEC A
|
||||
JP Z,SCG_VDASCR ; $4A
|
||||
JP Z,SCG_VDACPY ; $4A
|
||||
DEC A
|
||||
JP Z,PPK_STAT ; $4B
|
||||
JP Z,SCG_VDASCR ; $4B
|
||||
DEC A
|
||||
JP Z,PPK_FLUSH ; $4C
|
||||
JP Z,PPK_STAT ; $4C
|
||||
DEC A
|
||||
JP Z,PPK_READ ; $4D
|
||||
JP Z,PPK_FLUSH ; $4D
|
||||
DEC A
|
||||
JP Z,PPK_READ ; $4E
|
||||
CALL PANIC
|
||||
|
||||
SCG_VDAINI:
|
||||
@@ -103,8 +110,6 @@ SCG_VDAINI:
|
||||
|
||||
; INITIALIZE EMULATION
|
||||
LD B,D ; EMULATION TYPE TO B
|
||||
;LD A,(SCG_CIOUNIT) ; CIO UNIT NUMBER
|
||||
;LD C,A ; ... IS PASSED IN C
|
||||
LD C,CIODEV_SCG ; PASS OUR DEVICE TYPE IN C
|
||||
LD DE,SCG_DISPATCH ; DISPATCH ADDRESS TO DE
|
||||
CALL EMU_INIT ; INITIALIZE EMULATION, DE := CIO DISPATCHER
|
||||
@@ -121,6 +126,12 @@ SCG_VDAQRY:
|
||||
LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED YET
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
SCG_VDADEV:
|
||||
LD D,VDADEV_SCG ; D := DEVICE TYPE
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
SCG_VDARES:
|
||||
LD DE,0 ; ROW = 0, COL = 0
|
||||
@@ -598,8 +609,6 @@ SCG_BLKCPY3:
|
||||
; SCG DRIVER - DATA
|
||||
;==================================================================================================
|
||||
;
|
||||
;SCG_CIOUNIT .DB $FF ; LOCAL COPY OF OUR CIO UNIT NUMBER
|
||||
;
|
||||
SCG_POS .DW 0 ; CURRENT DISPLAY POSITION
|
||||
SCG_CURSAV .DB 0 ; SAVES ORIGINAL CHARACTER UNDER CURSOR
|
||||
SCG_BUF .FILL 256,0 ; COPY BUFFER
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
;
|
||||
TTY_INIT:
|
||||
; SAVE CALLING VDA DRIVER'S CIO UNIT NUMBER AND VDA DISPATCH ADDRESS
|
||||
LD C,A ; VDA DRIVER'S DEVICE TYPE
|
||||
LD A,C ; VDA DRIVER'S DEVICE TYPE
|
||||
LD (TTY_DEVTYPE),A ; ... SAVED LOCALLY
|
||||
LD (TTY_VDADISPADR),DE ; ALSO SAVE VDA DRIVER'S DISPATCH ADDRESS
|
||||
LD DE,TTY_DISPATCH ; RETURN OUR DISPATCH ADDRESS
|
||||
|
||||
@@ -33,13 +33,18 @@ VDU_INIT:
|
||||
CALL PRTHEXBYTE
|
||||
;
|
||||
CALL VDU_CRTINIT ; INIT SY6845 VDU CHIP
|
||||
;
|
||||
; ADD OURSELVES TO VDA DISPATCH TABLE
|
||||
LD B,0 ; PHYSICAL UNIT IS ZERO
|
||||
LD C,VDADEV_VDU ; DEVICE TYPE
|
||||
LD DE,0 ; UNIT DATA BLOB ADDRESS
|
||||
CALL VDA_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
|
||||
;
|
||||
; ADD OURSELVES TO CIO DISPATCH TABLE
|
||||
LD B,0 ; PHYSICAL UNIT IS ZERO
|
||||
LD C,CIODEV_VDU ; DEVICE TYPE
|
||||
LD DE,0 ; UNIT DATA BLOB ADDRESS
|
||||
CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
|
||||
;LD (VDU_CIOUNIT),A ; SAVE IT LOCALLY
|
||||
LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE
|
||||
|
||||
LD D,VDAEMU ; DEFAULT EMULATION
|
||||
@@ -68,27 +73,29 @@ VDU_DISPATCH:
|
||||
DEC A
|
||||
JR Z,VDU_VDARES ; $42
|
||||
DEC A
|
||||
JR Z,VDU_VDASCS ; $43
|
||||
JR Z,VDU_VDADEV ; $43
|
||||
DEC A
|
||||
JR Z,VDU_VDASCP ; $44
|
||||
JR Z,VDU_VDASCS ; $44
|
||||
DEC A
|
||||
JR Z,VDU_VDASAT ; $45
|
||||
JR Z,VDU_VDASCP ; $45
|
||||
DEC A
|
||||
JR Z,VDU_VDASCO ; $46
|
||||
JR Z,VDU_VDASAT ; $46
|
||||
DEC A
|
||||
JR Z,VDU_VDAWRC ; $47
|
||||
JR Z,VDU_VDASCO ; $47
|
||||
DEC A
|
||||
JR Z,VDU_VDAFIL ; $48
|
||||
JR Z,VDU_VDAWRC ; $48
|
||||
DEC A
|
||||
JR Z,VDU_VDACPY ; $49
|
||||
JR Z,VDU_VDAFIL ; $49
|
||||
DEC A
|
||||
JR Z,VDU_VDASCR ; $4A
|
||||
JR Z,VDU_VDACPY ; $4A
|
||||
DEC A
|
||||
JP Z,PPK_STAT ; $4B
|
||||
JR Z,VDU_VDASCR ; $4B
|
||||
DEC A
|
||||
JP Z,PPK_FLUSH ; $4C
|
||||
JP Z,PPK_STAT ; $4C
|
||||
DEC A
|
||||
JP Z,PPK_READ ; $4D
|
||||
JP Z,PPK_FLUSH ; $4D
|
||||
DEC A
|
||||
JP Z,PPK_READ ; $4E
|
||||
CALL PANIC
|
||||
|
||||
VDU_VDAINI:
|
||||
@@ -99,8 +106,6 @@ VDU_VDAINI:
|
||||
|
||||
; INITIALIZE EMULATION
|
||||
LD B,D ; EMULATION TYPE TO B
|
||||
;LD A,(VDU_CIOUNIT) ; CIO UNIT NUMBER
|
||||
;LD C,A ; ... IS PASSED IN C
|
||||
LD C,CIODEV_VDU ; PASS OUR DEVICE TYPE IN C
|
||||
LD DE,VDU_DISPATCH ; DISPATCH ADDRESS TO DE
|
||||
CALL EMU_INIT ; INITIALIZE EMULATION, DE := CIO DISPATCHER
|
||||
@@ -127,7 +132,13 @@ VDU_VDARES:
|
||||
|
||||
XOR A
|
||||
RET
|
||||
|
||||
|
||||
VDU_VDADEV:
|
||||
LD D,VDADEV_VDU ; D := DEVICE TYPE
|
||||
LD E,C ; E := PHYSICAL UNIT
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
VDU_VDASCS:
|
||||
CALL PANIC ; NOT IMPLEMENTED (YET)
|
||||
|
||||
@@ -469,8 +480,6 @@ VDU_RSCROLL:
|
||||
; VDU DRIVER - DATA
|
||||
;==================================================================================================
|
||||
;
|
||||
;VDU_CIOUNIT .DB $FF ; LOCAL COPY OF OUR CIO UNIT NUMBER
|
||||
;
|
||||
VDU_POS .DW 0 ; CURRENT DISPLAY POSITION
|
||||
VDU_OFFSET .DW 0 ; CURRENT DISPLAY POSITION
|
||||
VDU_BUF .FILL 256,0 ; COPY BUFFER
|
||||
|
||||
Reference in New Issue
Block a user