Browse Source

Video Driver Fixes

Thanks and credit to Phillip Summers for finding these and suggesting solutions.
- VGA driver initialization fixed.
- CVDU probe fixed to not rely on ready bit of CVDU
pull/491/head
Wayne Warthen 1 year ago
parent
commit
f50ae14f9e
  1. 88
      Source/HBIOS/cvdu.asm
  2. 2
      Source/HBIOS/vga.asm

88
Source/HBIOS/cvdu.asm

@ -106,7 +106,7 @@ CVDU_INIT1:
CALL PRTDEC CALL PRTDEC
PRTS("KB$") PRTS("KB$")
CALL CVDU_LOADFONT ; LOAD FONT DATA FROM ROM TO CVDU STRORAGE CALL CVDU_LOADFONT ; LOAD FONT DATA FROM ROM TO CVDU STRORAGE
CALL CVDU_VDARES
CALL CVDU_VDAINI
CALL KBD_INIT ; INITIALIZE KEYBOARD DRIVER CALL KBD_INIT ; INITIALIZE KEYBOARD DRIVER
; ADD OURSELVES TO VDA DISPATCH TABLE ; ADD OURSELVES TO VDA DISPATCH TABLE
@ -342,28 +342,70 @@ CVDU_RDX:
; ON RETURN, ZF SET INDICATES HARDWARE FOUND ; ON RETURN, ZF SET INDICATES HARDWARE FOUND
; ;
CVDU_PROBE: 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, $5A
; 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 ; MOS 8563 DISPLAY CONTROLLER CHIP INITIALIZATION

2
Source/HBIOS/vga.asm

@ -138,7 +138,7 @@ VGA_INIT1:
; HARDWARE INITIALIZATION ; HARDWARE INITIALIZATION
CALL VGA_CRTINIT ; SETUP THE VGA CHIP REGISTERS CALL VGA_CRTINIT ; SETUP THE VGA CHIP REGISTERS
CALL VGA_LOADFONT ; LOAD FONT DATA FROM ROM TO VGA STORAGE CALL VGA_LOADFONT ; LOAD FONT DATA FROM ROM TO VGA STORAGE
CALL VGA_VDARES
CALL VGA_VDAINI
CALL KBD_INIT ; INITIALIZE KEYBOARD DRIVER CALL KBD_INIT ; INITIALIZE KEYBOARD DRIVER
; ADD OURSELVES TO VDA DISPATCH TABLE ; ADD OURSELVES TO VDA DISPATCH TABLE

Loading…
Cancel
Save