mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:43:15 -06:00
Add VDA Read Character function
For your consideration. Seems to work.
This commit is contained in:
@@ -1368,6 +1368,25 @@ codes as described at the start of this section.
|
||||
|
||||
`\clearpage`{=latex}
|
||||
|
||||
### Function 0x4F -- Read a character at current video position (VDARDC)
|
||||
|
||||
| _Entry Parameters_
|
||||
| B: 0x4F
|
||||
| C: Video Device Unit ID
|
||||
|
||||
| _Exit Results_
|
||||
| A: Status (0=OK, else error)
|
||||
| E: Character
|
||||
| B: Character Color Code
|
||||
| C: Character Attribute Code
|
||||
|
||||
Read a character from the current cursor position including it's colour
|
||||
and attributes. If the display does not support colours or attributes
|
||||
then return colour white on black and no attributes. If the device does
|
||||
not support the ability to read a character, return error status
|
||||
|
||||
`\clearpage`{=latex}
|
||||
|
||||
Sound (SND)
|
||||
------------
|
||||
|
||||
|
||||
@@ -94,6 +94,7 @@ CVDU_FNTBL:
|
||||
.DW KBD_STAT
|
||||
.DW KBD_FLUSH
|
||||
.DW KBD_READ
|
||||
.DW CVDU_VDARDC
|
||||
#IF (($ - CVDU_FNTBL) != (VDA_FNCNT * 2))
|
||||
.ECHO "*** INVALID CVDU FUNCTION TABLE ***\n"
|
||||
!!!!!
|
||||
@@ -219,6 +220,15 @@ CVDU_VDASCR1:
|
||||
POP DE ; RECOVER E
|
||||
INC E ; INCREMENT IT
|
||||
JR CVDU_VDASCR ; LOOP
|
||||
|
||||
;----------------------------------------------------------------------
|
||||
; READ VALUE AT CURRENT VDU BUFFER POSITION
|
||||
; RETURN E = CHARACTER, B = COLOUR, C = ATTRIBUTES
|
||||
;----------------------------------------------------------------------
|
||||
|
||||
CVDU_VDARDC:
|
||||
OR $FF ; UNSUPPORTED FUNCTION
|
||||
RET
|
||||
;
|
||||
;======================================================================
|
||||
; CVDU DRIVER - PRIVATE DRIVER FUNCTIONS
|
||||
|
||||
@@ -191,13 +191,13 @@ RTCDEF .SET RTCDEF | %00000001 ; SC128 I2C SCL BIT
|
||||
#IF (CPUSPDDEF==SPD_HIGH)
|
||||
RTCDEF .SET RTCDEF | %00001000 ; DEFAULT SPEED HIGH
|
||||
#ELSE
|
||||
RTCDEF .SET RTCDEF | %00000000 ; DEFAULT SPEED LOW
|
||||
RTCDEF .SET RTCDEF & %11110111 ; DEFAULT SPEED LOW
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;
|
||||
#IF (!(CPUSPDCAP==SPD_FIXED) & (PLATFORM==PLT_SBC))
|
||||
#IF (CPUSPDDEF==SPD_HIGH)
|
||||
RTCDEF .SET RTCDEF | %00000000 ; DEFAULT SPEED HIGH
|
||||
RTCDEF .SET RTCDEF & %11110111 ; DEFAULT SPEED HIGH
|
||||
#ELSE
|
||||
RTCDEF .SET RTCDEF | %00001000 ; DEFAULT SPEED LOW
|
||||
#ENDIF
|
||||
@@ -3202,7 +3202,7 @@ VDA_ADDENT:
|
||||
; WORD DRIVER FUNCTION TABLE ADDRESS
|
||||
; WORD UNIT SPECIFIC DATA (TYPICALLY A DEVICE INSTANCE DATA ADDRESS)
|
||||
;
|
||||
VDA_FNCNT .EQU 15 ; NUMBER OF VDA FUNCS (FOR RANGE CHECK)
|
||||
VDA_FNCNT .EQU 16 ; NUMBER OF VDA FUNCS (FOR RANGE CHECK)
|
||||
VDA_MAX .EQU 16 ; UP TO 16 UNITS
|
||||
VDA_SIZ .EQU VDA_MAX * 4 ; EACH ENTRY IS 4 BYTES
|
||||
;
|
||||
@@ -6231,7 +6231,6 @@ HB_SECS .FILL 4,0 ; 32 BIT SECONDS COUNTER
|
||||
;
|
||||
HB_CPUTYPE .DB 0 ; 0=Z80, 1=80180, 2=SL1960, 3=ASCI BRG
|
||||
;
|
||||
;RTCVAL .DB RTCDEF ; SHADOW VALUE FOR RTC LATCH PORT
|
||||
IOPRVAL .DW 0 ; TEMP STORAGE FOR IOPR
|
||||
;
|
||||
HB_BATCOND .DB 0 ; BATTERY CONDITION (0=LOW, 1=OK)
|
||||
|
||||
@@ -209,6 +209,7 @@ TMS_FNTBL:
|
||||
.DW TMS_READ
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
.DW TMS_VDARDC
|
||||
#IF (($ - TMS_FNTBL) != (VDA_FNCNT * 2))
|
||||
.ECHO "*** INVALID TMS FUNCTION TABLE ***\n"
|
||||
!!!!!
|
||||
@@ -345,6 +346,15 @@ TMS_VDASCR2:
|
||||
XOR A
|
||||
RET
|
||||
|
||||
;----------------------------------------------------------------------
|
||||
; READ VALUE AT CURRENT VDU BUFFER POSITION
|
||||
; RETURN E = CHARACTER, B = COLOUR, C = ATTRIBUTES
|
||||
;----------------------------------------------------------------------
|
||||
|
||||
TMS_VDARDC:
|
||||
OR $FF ; UNSUPPORTED FUNCTION
|
||||
RET
|
||||
|
||||
; DUMMY FUNCTIONS BELOW BECAUSE SCG BOARD HAS NO
|
||||
; KEYBOARD INTERFACE
|
||||
|
||||
|
||||
@@ -148,11 +148,12 @@ VDU_FNTBL:
|
||||
.DW PPK_STAT
|
||||
.DW PPK_FLUSH
|
||||
.DW PPK_READ
|
||||
.DW VDU_VDARDC
|
||||
#IF (($ - VDU_FNTBL) != (VDA_FNCNT * 2))
|
||||
.ECHO "*** INVALID VDU FUNCTION TABLE ***\n"
|
||||
!!!!!
|
||||
#ENDIF
|
||||
|
||||
;
|
||||
VDU_VDAINI:
|
||||
; RESET VDA
|
||||
; CURRENTLY IGNORES VIDEO MODE AND BITMAP DATA
|
||||
@@ -258,6 +259,28 @@ VDU_VDASCR1:
|
||||
INC E ; INCREMENT IT
|
||||
JR VDU_VDASCR ; LOOP
|
||||
;
|
||||
;----------------------------------------------------------------------
|
||||
; READ VALUE AT CURRENT VDU BUFFER POSITION
|
||||
; RETURN E = CHARACTER, B = COLOUR, C = ATTRIBUTES
|
||||
;----------------------------------------------------------------------
|
||||
;
|
||||
VDU_VDARDC:
|
||||
LD C,18 ; SET SOURCE ADDRESS IN VDU (HL)
|
||||
CALL VDU_WRREGX ; DO IT
|
||||
|
||||
LD A,31 ; PREP VDU FOR DATA R/W
|
||||
OUT (VDU_REG),A ; DO IT
|
||||
|
||||
CALL VDU_WAITRDY ; WAIT FOR VDU TO BE READY
|
||||
|
||||
LD C,VDU_RAMRD ; LOAD C WITH VDU READ REGISTER
|
||||
IN E,(C)
|
||||
|
||||
LD B,$F0 ; WHITE FG. BLACK BG
|
||||
LD C,$00 ; NO ATTRIBUTES
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
;======================================================================
|
||||
; VDU DRIVER - PRIVATE DRIVER FUNCTIONS
|
||||
;======================================================================
|
||||
|
||||
@@ -161,6 +161,7 @@ VGA_FNTBL:
|
||||
.DW KBD_STAT
|
||||
.DW KBD_FLUSH
|
||||
.DW KBD_READ
|
||||
.DW VGA_VDARDC
|
||||
#IF (($ - VGA_FNTBL) != (VDA_FNCNT * 2))
|
||||
.ECHO "*** INVALID VGA FUNCTION TABLE ***\n"
|
||||
!!!!!
|
||||
@@ -313,6 +314,15 @@ VGA_VDASCR1:
|
||||
POP DE ; RECOVER E
|
||||
INC E ; INCREMENT IT
|
||||
JR VGA_VDASCR ; LOOP
|
||||
|
||||
;----------------------------------------------------------------------
|
||||
; READ VALUE AT CURRENT VDU BUFFER POSITION
|
||||
; RETURN E = CHARACTER, B = COLOUR, C = ATTRIBUTES
|
||||
;----------------------------------------------------------------------
|
||||
|
||||
VGA_VDARDC:
|
||||
OR $FF ; UNSUPPORTED FUNCTION
|
||||
RET
|
||||
;
|
||||
;======================================================================
|
||||
; VGA DRIVER - PRIVATE DRIVER FUNCTIONS
|
||||
|
||||
Reference in New Issue
Block a user