@ -106,7 +106,7 @@ CVDU_INIT1:
CALL PRTDEC
PRTS ( "KB$" )
CALL CVDU_LOADFONT ; LOAD FONT DATA FROM ROM TO CVDU STRORAGE
CALL CVDU_VDARES
CALL CVDU_VDAINI
CALL KBD_INIT ; INITIALIZE KEYBOARD DRIVER
; ADD OURSELVES TO VDA DISPATCH TABLE
@ -342,28 +342,70 @@ CVDU_RDX:
; ON RETURN, ZF SET INDICATES HARDWARE FOUND
;
CVDU_PROBE:
; WRITE TEST PATTERN $A5 $5A TO START OF VRAM
LD HL , 0 ; POINT TO FIRST BYTE OF VRAM
LD C , 18 ; ADDRESS REGISTER PAIR
CALL CVDU_WRX ; UPDATE VRAM ADDRESS POINTER
LD A , $ A5 ; INITIAL TEST VALUE
LD B , A ; SAVE IN B
LD C , 31 ; DATA REGISTER
CALL CVDU_WR ; WRITE VALUE TO LOC 0, ADR PTR INCREMENTS
CPL ; INVERT TEST VALUE
CALL CVDU_WR ; WRITE INVERTED VALUE TO LOC 1
; READ TEST PATTERN BACK TO CONFIRM HARDWARE EXISTS
LD HL , 0 ; POINT TO FIRST BYTE OF VRAM
LD C , 18 ; ADDRESS REGISTER PAIR
CALL CVDU_WRX ; UPDATE VRAM ADDRESS POINTER
LD C , 31 ; DATA REGISTER
CALL CVDU_RD ; GET BYTE AT LOC 0, ADR PTR INCREMENTS
CP B ; CHECK IT
RET NZ ; ABORT IF BAD COMPARE
CALL CVDU_RD ; GET BYTE AT LOC 1
CPL ; INVERT IT
CP B ; CHECK FOR INVERTED TEST VALUE
RET ; RETURN WITH ZF SET BASED ON CP
LD B , CVDU_PROBE_DATA_SIZE / 2 ; LOOP COUNTER
LD HL , CVDU_PROBE_DATA ; START OF DATA
CVDU_PROBE1:
LD C ,( HL ) ; REGISTER
INC HL
LD A ,( HL ) ; BYTE
INC HL
OUT ( C ), A ; WRITE IT
LD DE , 25
CALL VDELAY
DJNZ CVDU_PROBE1
;
IN A ,( CVDU_DATA )
LD C , A
LD DE , 25
CALL VDELAY
IN A ,( CVDU_DATA )
CPL
;
CP C ; COMPARE OK?
RET
CVDU_PROBE_DATA:
; SET VRAM ADDRESS TO $0000
.DB CVDU_REG , 18 ; ADR LOW
.DB CVDU_DATA , 0
.DB CVDU_REG , 19 ; ADR HI
.DB CVDU_DATA , 0
; WRITE PATTERN
.DB CVDU_REG , 31 ; VRAM DATA
.DB CVDU_DATA , $ A5
.DB CVDU_DATA , $ 5 A
; RESET VRAM ADDRESS TO $0000
.DB CVDU_REG , 18 ; ADR LOW
.DB CVDU_DATA , 0
.DB CVDU_REG , 19 ; ADR HI
.DB CVDU_DATA , 0
; SETUP TO READ PATTERN
.DB CVDU_REG , 31 ; VRAM DATA
;
CVDU_PROBE_DATA_SIZE .EQU $ - CVDU_PROBE_DATA
;
;;; ; WRITE TEST PATTERN $A5 $5A TO START OF VRAM
;;; LD HL,0 ; POINT TO FIRST BYTE OF VRAM
;;; LD C,18 ; ADDRESS REGISTER PAIR
;;; CALL CVDU_WRX ; UPDATE VRAM ADDRESS POINTER
;;; LD A,$A5 ; INITIAL TEST VALUE
;;; LD B,A ; SAVE IN B
;;; LD C,31 ; DATA REGISTER
;;; CALL CVDU_WR ; WRITE VALUE TO LOC 0, ADR PTR INCREMENTS
;;; CPL ; INVERT TEST VALUE
;;; CALL CVDU_WR ; WRITE INVERTED VALUE TO LOC 1
;;; ; READ TEST PATTERN BACK TO CONFIRM HARDWARE EXISTS
;;; LD HL,0 ; POINT TO FIRST BYTE OF VRAM
;;; LD C,18 ; ADDRESS REGISTER PAIR
;;; CALL CVDU_WRX ; UPDATE VRAM ADDRESS POINTER
;;; LD C,31 ; DATA REGISTER
;;; CALL CVDU_RD ; GET BYTE AT LOC 0, ADR PTR INCREMENTS
;;; CP B ; CHECK IT
;;; RET NZ ; ABORT IF BAD COMPARE
;;; CALL CVDU_RD ; GET BYTE AT LOC 1
;;; CPL ; INVERT IT
;;; CP B ; CHECK FOR INVERTED TEST VALUE
;;; RET ; RETURN WITH ZF SET BASED ON CP
;
;----------------------------------------------------------------------
; MOS 8563 DISPLAY CONTROLLER CHIP INITIALIZATION