Browse Source

Bug Fixes

pull/3/head
Wayne Warthen 10 years ago
parent
commit
f9c7f30d2d
  1. 4
      Source/HBIOS/ansi.asm
  2. 42
      Source/HBIOS/cvdu.asm
  3. 222
      Source/HBIOS/hbios.asm
  4. 35
      Source/HBIOS/hbios.inc
  5. 41
      Source/HBIOS/scg.asm
  6. 2
      Source/HBIOS/tty.asm
  7. 43
      Source/HBIOS/vdu.asm

4
Source/HBIOS/ansi.asm

@ -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

42
Source/HBIOS/cvdu.asm

@ -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
;

222
Source/HBIOS/hbios.asm

@ -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

35
Source/HBIOS/hbios.inc

@ -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
;

41
Source/HBIOS/scg.asm

@ -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_VDASCS ; $44
DEC A
JP Z,SCG_VDASCP ; $44
JP Z,SCG_VDASCP ; $45
DEC A
JP Z,SCG_VDASAT ; $45
JP Z,SCG_VDASAT ; $46
DEC A
JP Z,SCG_VDASCO ; $46
JP Z,SCG_VDASCO ; $47
DEC A
JP Z,SCG_VDAWRC ; $47
JP Z,SCG_VDAWRC ; $48
DEC A
JP Z,SCG_VDAFIL ; $48
JP Z,SCG_VDAFIL ; $49
DEC A
JP Z,SCG_VDACPY ; $49
JP Z,SCG_VDACPY ; $4A
DEC A
JP Z,SCG_VDASCR ; $4A
JP Z,SCG_VDASCR ; $4B
DEC A
JP Z,PPK_STAT ; $4B
JP Z,PPK_STAT ; $4C
DEC A
JP Z,PPK_FLUSH ; $4C
JP Z,PPK_FLUSH ; $4D
DEC A
JP Z,PPK_READ ; $4D
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

2
Source/HBIOS/tty.asm

@ -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

43
Source/HBIOS/vdu.asm

@ -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

Loading…
Cancel
Save