From 23d0061fb1194343c414ff409c065d608c1c0382 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 12 Jan 2020 01:41:20 +0800 Subject: [PATCH] Fix Incorrect assembly vga buffer clear Preliminary 80x60 format. Needs 8x8 font. --- Source/HBIOS/hbios.inc | 2 +- Source/HBIOS/ppide.asm | 6 ++--- Source/HBIOS/std.asm | 1 + Source/HBIOS/vga.asm | 61 +++++++++++++++++++++++++++++++++--------- 4 files changed, 53 insertions(+), 17 deletions(-) diff --git a/Source/HBIOS/hbios.inc b/Source/HBIOS/hbios.inc index 87016ecd..026fdd4e 100644 --- a/Source/HBIOS/hbios.inc +++ b/Source/HBIOS/hbios.inc @@ -124,7 +124,7 @@ VDADEV_VDU .EQU $00 ; ECB VDU - MOTOROLA 6545 VDADEV_CVDU .EQU $10 ; ECB COLOR VDU - MOS 8563 VDADEV_NEC .EQU $20 ; ECB UPD7220 - NEC UPD7220 VDADEV_TMS .EQU $30 ; N8 ONBOARD VDA SUBSYSTEM - TMS 9918 -VDADEV_VGA .EQU $40 ; VGA +VDADEV_VGA .EQU $40 ; ECB VGA3 - HITACHI HD6445 ; ; EMULATION TYPES ; diff --git a/Source/HBIOS/ppide.asm b/Source/HBIOS/ppide.asm index 478739de..1cf840e3 100644 --- a/Source/HBIOS/ppide.asm +++ b/Source/HBIOS/ppide.asm @@ -1146,7 +1146,7 @@ PPIDE_WAITRDY: LD A,(PPIDE_TIMEOUT) ; GET TIMEOUT IN 0.05 SECS LD B,A ; PUT IN OUTER LOOP VAR PPIDE_WAITRDY1: - LD DE,(PPIDE_TOSCALER) ; CPU SPPED SCALER TO INNER LOOP VAR + LD DE,(PPIDE_TOSCALER) ; CPU SPEED SCALER TO INNER LOOP VAR PPIDE_WAITRDY2: ;IN A,(PPIDE_REG_STAT) ; READ STATUS CALL PPIDE_IN @@ -1168,7 +1168,7 @@ PPIDE_WAITDRQ: LD A,(PPIDE_TIMEOUT) ; GET TIMEOUT IN 0.05 SECS LD B,A ; PUT IN OUTER LOOP VAR PPIDE_WAITDRQ1: - LD DE,(PPIDE_TOSCALER) ; CPU SPPED SCALER TO INNER LOOP VAR + LD DE,(PPIDE_TOSCALER) ; CPU SPEED SCALER TO INNER LOOP VAR PPIDE_WAITDRQ2: ;IN A,(PPIDE_REG_STAT) ; READ STATUS CALL PPIDE_IN @@ -1190,7 +1190,7 @@ PPIDE_WAITBSY: LD A,(PPIDE_TIMEOUT) ; GET TIMEOUT IN 0.05 SECS LD B,A ; PUT IN OUTER LOOP VAR PPIDE_WAITBSY1: - LD DE,(PPIDE_TOSCALER) ; CPU SPPED SCALER TO INNER LOOP VAR + LD DE,(PPIDE_TOSCALER) ; CPU SPEED SCALER TO INNER LOOP VAR PPIDE_WAITBSY2: ;IN A,(PPIDE_REG_STAT) ; READ STATUS CALL PPIDE_IN ; 17TS + 170TS diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index 4d0e2359..8e239868 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -285,6 +285,7 @@ V80X30 .EQU 2 ; ECB-VDU, ECB-VGA3 V80X25B .EQU 3 ; ECB-VDU V80X24B .EQU 4 ; ECB-VDU V80X43 .EQU 5 ; ECB-VGA3 +V80X60 .EQU 6 ; ECB-VGA3 ; ; KEYBOARD LAYOUTS ; diff --git a/Source/HBIOS/vga.asm b/Source/HBIOS/vga.asm index e6875dbb..a0c06ad3 100644 --- a/Source/HBIOS/vga.asm +++ b/Source/HBIOS/vga.asm @@ -31,21 +31,32 @@ VGA_ULIN .EQU 1 ; UNDERLINE CURSOR ; VGA_CSTY .EQU VGA_BLOK ; DEFAULT CURSOR STYLE VGA_BLNK .EQU VGA_NOBL ; DEFAULT BLINK RATE +VGA_9BIT .EQU $0101 ; 9 BIT MSK-CFG +VGA_8BIT .EQU $0000 ; 8 BIT MSK-CFG ; #IF (VGASIZ=V80X25) VGA_ROWS .EQU 25 VGA_COLS .EQU 80 VGA_SCANL .EQU 16 +VGA_89BIT .EQU VGA_8BIT #ENDIF #IF (VGASIZ=V80X30) VGA_ROWS .EQU 30 VGA_COLS .EQU 80 VGA_SCANL .EQU 16 +VGA_89BIT .EQU VGA_8BIT #ENDIF #IF (VGASIZ=V80X43) VGA_ROWS .EQU 43 VGA_COLS .EQU 80 VGA_SCANL .EQU 11 +VGA_89BIT .EQU VGA_8BIT +#ENDIF +#IF (VGASIZ=V80X60) +VGA_ROWS .EQU 60 +VGA_COLS .EQU 80 +VGA_SCANL .EQU 8 +VGA_89BIT .EQU VGA_8BIT #ENDIF ; #IF VGA_CSTY=VGA_BLOK @@ -167,13 +178,13 @@ VGA_VDARES: LD DE,0 ; ROW = 0, COL = 0 CALL VGA_XY ; SEND CURSOR TO TOP LEFT - LD A,' ' ; BLANK THE SCREEN - LD DE,(VGA_ROWS*VGA_COLS) ; FILL ENTIRE BUFFER + LD A,'X' ; BLANK THE SCREEN + LD DE,VGA_ROWS*VGA_COLS ; FILL ENTIRE BUFFER CALL VGA_FILL ; DO IT LD DE,0 ; ROW = 0, COL = 0 CALL VGA_XY ; SEND CURSOR TO TOP LEFT - LD HL,$0404 ; SET VIDEO ENABLE BIT + LD HL,$0404 | VGA_89BIT; SET VIDEO ENABLE BIT CALL VGA_SETCFG ; DO IT XOR A @@ -450,7 +461,7 @@ VGA_PROBE: ;---------------------------------------------------------------------- ; VGA_CRTINIT: - LD HL,$FF00 ; ZERO ALL CFG BITS + LD HL,$FF00 | VGA_89BIT ; INITIAL CFG BITS CALL VGA_SETCFG ; DO IT CALL VGA_RES ; RESET CRTC (ALL REGS TO ZERO) @@ -493,7 +504,7 @@ VGA_CRTCDUMP1: ;---------------------------------------------------------------------- ; VGA_LOADFONT: - LD HL,$7000 ; CLEAR FONT PAGE NUM + LD HL,$7000 | VGA_89BIT ; CLEAR FONT PAGE NUM CALL VGA_SETCFG LD DE,$7000 ; PAGE 7 OF VIDEO RAM @@ -506,7 +517,7 @@ VGA_LOADFONT1: LD A,D CP $80 ; CHECK FOR END JR NZ,VGA_LOADFONT1 ; LOOP - LD HL,$7070 ; SET FONT PAGE NUM TO 7 + LD HL,$7070 | VGA_89BIT ; SET FONT PAGE NUM TO 7 CALL VGA_SETCFG RET ; DONE ; @@ -865,18 +876,18 @@ VGA_RUB .DB 0 ; REVERSE/UNDERLINE/BLINK (-----RUB) ; #IF (VGASIZ=V80X25) ;=============================================================================== -; 80x25 70hz REGISTER VALUES +; 80x25x8 70hz REGISTER VALUES ;=============================================================================== ; REGS_VGA: .DB 0,100 - 1 ; HORZ TOT - 1 - .DB 1,80 ; HORZ DISP - .DB 2,80 + 2 ; HORZ DISP + HORZ FP + .DB 1,VGA_COLS ; HORZ DISP + .DB 2,VGA_COLS + 2 ; HORZ DISP + HORZ FP .DB 3,(2 << 4) | (12 & $0F) ; VERT SW, HORZ SW .DB 4,28 - 1 ; VERT TOT - 1 .DB 5,1 ; VERT TOT ADJ - .DB 6,25 ; VERT DISP - .DB 7,25 + 0 ; VERT DISP + VERT FP ROWS + .DB 6,VGA_ROWS ; VERT DISP + .DB 7,VGA_ROWS + 0 ; VERT DISP + VERT FP ROWS .DB 9,16 - 1 ; CHAR HEIGHT - 1 .DB 10,VGA_R10 ; CURSOR START & CURSOR BLINK .DB 11,VGA_R11 ; CURSOR END @@ -890,7 +901,7 @@ REGS_VGA: #ENDIF #IF (VGASIZ=V80X30) ;=============================================================================== -; 80x30 60hz REGISTER VALUES +; 80x30x8 60hz REGISTER VALUES ;=============================================================================== ; REGS_VGA: @@ -914,7 +925,7 @@ REGS_VGA: #ENDIF #IF (VGASIZ=V80X43) ;=============================================================================== -; 80x43 60hz REGISTER VALUES +; 80x43x8 60hz REGISTER VALUES ;=============================================================================== ; REGS_VGA: @@ -936,6 +947,30 @@ REGS_VGA: .DB 30,$01 | $08 ; CTL 1, 2 WINDOWS & ENABLE R27 VSYNC FINE ADJ .DB $FF ; END MARKER #ENDIF +#IF (VGASIZ=V80X60) +;=============================================================================== +; 90x60X8 60hz REGISTER VALUES +;=============================================================================== +; +REGS_VGA: + .DB 0,100 - 1 ; HORZ TOT - 1 + .DB 1,VGA_COLS ; HORZ DISP + .DB 2,VGA_COLS + 2 ; HORZ DISP + HORZ FP + .DB 3,44 ; VERT SW, HORZ SW + .DB 4,66 - 1 ; VERT TOT - 1 + .DB 5,0 ; VERT TOT ADJ + .DB 6,VGA_ROWS ; VERT DISP + .DB 7,VGA_ROWS + 0 ; VERT DISP + VERT FP ROWS + .DB 9,8 - 1 ; CHAR HEIGHT - 1 + .DB 10,VGA_R10 ; CURSOR START & CURSOR BLINK + .DB 11,VGA_R11 ; CURSOR END + .DB 12,0 ; SCRN 1 START (HI) + .DB 13,0 ; SCRN 1 START (LO) + .DB 18,-1 ; S2 ROW - 1 + .DB 27,0 ; VERT SYNC POS ADJ + .DB 30,$01 | $08 ; CTL 1, 2 WINDOWS & ENABLE R27 VSYNC FINE ADJ + .DB $FF ; END MARKER +#ENDIF ;================================================================================================== ; VGA DRIVER - INSTANCE DATA ;==================================================================================================