mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
Improve Video Hardware Reset
- This change avoids clearing the screen every time an OS reset occurs. A non-destructive VDC reset is now performed that leaves the screen contents and cursor position unchanged. - If an application overwrites the video RAM, then the screen may contain garbage upon return to OS. However, the console will still be functional and the user can just press enter a few times to clear the screen.
This commit is contained in:
@@ -1327,7 +1327,7 @@ specified (set to 0 for default/not specified). Video Mode (E) values
|
||||
are specific to each VDA. The returned Status (A) is a standard HBIOS
|
||||
result code.
|
||||
|
||||
If the hardware and driver support it, you can specify a Font Bitmap
|
||||
If the hardware and driver supports it, you can specify a Font Bitmap
|
||||
(HL) buffer address containing the character bitmap data to be loaded
|
||||
into the video processor. The buffer **must** be located entirely in the
|
||||
top 32K of the CPU memory space. HL must be set to zero if no character
|
||||
@@ -1372,10 +1372,10 @@ data, then Font Bitmap (HL) will be set to zero on return.
|
||||
| B: 0x42 | A: Status |
|
||||
| C: Video Unit | |
|
||||
|
||||
Performs a soft reset of the specified Video Unit (C). Will clear the
|
||||
screen, home the cursor, and restore active attribute/color to defaults.
|
||||
Keyboard will be flushed. The current video mode will not be changed.
|
||||
The returned Status (A) is a standard HBIOS result code.
|
||||
Performs a non-destructive reset of the specified Video Unit (C).
|
||||
Should re-initialize the video hardware without destroying the screen
|
||||
contents or cursor position. The current video mode will not be
|
||||
changed. The returned Status (A) is a standard HBIOS result code.
|
||||
|
||||
### Function 0x43 -- Video Device (VDADEV)
|
||||
|
||||
|
||||
@@ -148,6 +148,15 @@ CVDU_VDAINI:
|
||||
; RESET VDA
|
||||
; CURRENTLY IGNORES VIDEO MODE AND BITMAP DATA
|
||||
CALL CVDU_VDARES ; RESET VDA
|
||||
LD A,$0E ; ATTRIBUTE IS STANDARD WHITE ON BLACK
|
||||
LD (CVDU_ATTR),A ; SAVE IT
|
||||
LD DE,0 ; ROW = 0, COL = 0
|
||||
CALL CVDU_XY ; SEND CURSOR TO TOP LEFT
|
||||
LD A,' ' ; BLANK THE SCREEN
|
||||
LD DE,$800 ; FILL ENTIRE BUFFER
|
||||
CALL CVDU_FILL ; DO IT
|
||||
LD DE,0 ; ROW = 0, COL = 0
|
||||
CALL CVDU_XY ; SEND CURSOR TO TOP LEFT
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
@@ -160,17 +169,6 @@ CVDU_VDAQRY:
|
||||
RET
|
||||
|
||||
CVDU_VDARES:
|
||||
LD A,$0E ; ATTRIBUTE IS STANDARD WHITE ON BLACK
|
||||
LD (CVDU_ATTR),A ; SAVE IT
|
||||
|
||||
LD DE,0 ; ROW = 0, COL = 0
|
||||
CALL CVDU_XY ; SEND CURSOR TO TOP LEFT
|
||||
LD A,' ' ; BLANK THE SCREEN
|
||||
LD DE,$800 ; FILL ENTIRE BUFFER
|
||||
CALL CVDU_FILL ; DO IT
|
||||
LD DE,0 ; ROW = 0, COL = 0
|
||||
CALL CVDU_XY ; SEND CURSOR TO TOP LEFT
|
||||
|
||||
XOR A
|
||||
RET
|
||||
|
||||
|
||||
@@ -570,6 +570,13 @@ EF_VDAINI:
|
||||
LD A,L
|
||||
OR H
|
||||
CALL NZ,EF_LOADFONTS
|
||||
|
||||
CALL EF_CLEARALL
|
||||
CALL EF_LOADCSTYLE
|
||||
LD DE,0
|
||||
LD (EF_VDA_OFFSET),DE
|
||||
CALL EF_VDASCP
|
||||
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
@@ -586,13 +593,8 @@ EF_VDAQRY:
|
||||
;
|
||||
EF_VDARES:
|
||||
; VIDEO RESET
|
||||
; SOFT RESET, CLEAR SCREEN, HOME CURSOR, RESTORE ATTRIBUTE/COLOR DEFAULTS
|
||||
; SOFT RESET
|
||||
;
|
||||
CALL EF_CLEARALL
|
||||
CALL EF_LOADCSTYLE
|
||||
LD DE,0
|
||||
LD (EF_VDA_OFFSET),DE
|
||||
CALL EF_VDASCP
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
|
||||
@@ -161,8 +161,7 @@ GDC_VDAQRY: ; VIDEO INFORMATION QUERY
|
||||
RET
|
||||
;
|
||||
GDC_VDARES: ; VIDEO SYSTEM RESET
|
||||
; *** TODO: RESET VIDEO SYSTEM HERE, CLEAR SCREEN,
|
||||
; CURSOR TO TOP LEFT, CLEAR ATTRIBUTES
|
||||
; *** TODO: RESET VIDEO SYSTEM HERE
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
|
||||
@@ -54,6 +54,9 @@ TERM_ATTACH:
|
||||
LD A,(TERM_DEVCNT) ; GET NEXT DEVICE NUMBER TO USE
|
||||
LD B,A ; PUT IT IN B
|
||||
PUSH HL ; SAVE VDA INSTANCE DATA PTR
|
||||
;
|
||||
LD A,C ; VIDEO UNIT TO A
|
||||
LD (TERM_VDADEV),A ; SAVE IT
|
||||
;
|
||||
; SETUP EMULATOR MODULE FUNC TBL ADDRESS BASED ON DESIRED EMULATION
|
||||
; EMULATOR PASSES BACK IT'S FUNC TBL ADDRESS IN DE
|
||||
@@ -99,22 +102,18 @@ TERM_RESET:
|
||||
RET
|
||||
;
|
||||
TERM_RESET1:
|
||||
; CALL EMULATOR INITDEV FUNCTION
|
||||
#IF (VDAEMU == EMUTYP_TTY)
|
||||
CALL TTY_INITDEV
|
||||
#ENDIF
|
||||
#IF (VDAEMU == EMUTYP_ANSI)
|
||||
CALL ANSI_INITDEV
|
||||
#ENDIF
|
||||
;
|
||||
XOR A
|
||||
RET
|
||||
; RESET THE ATTACHED VDA DEVICE
|
||||
LD B,BF_VDARES ; FUNC: RESET
|
||||
LD A,(TERM_VDADEV) ; GET VDA UNIT NUM
|
||||
LD C,A ; PUT IN C
|
||||
JP ANSI_VDADISP ; CALL THE VDA DRIVER
|
||||
;
|
||||
;======================================================================
|
||||
; TERMINAL DRIVER PRIVATE DATA
|
||||
;======================================================================
|
||||
;
|
||||
TERM_DEVCNT .DB 0 ; TERMINAL DEVICE COUNT
|
||||
TERM_VDADEV .DB 0 ; ATTACHED VDA UNIT
|
||||
;
|
||||
;======================================================================
|
||||
; EMULATION MODULES
|
||||
|
||||
@@ -249,7 +249,7 @@ TMS_INIT:
|
||||
TMS_INIT1:
|
||||
CALL TMS_CRTINIT ; SETUP THE TMS CHIP REGISTERS
|
||||
CALL TMS_LOADFONT ; LOAD FONT DATA FROM ROM TO TMS STRORAGE
|
||||
CALL TMS_VDARES1
|
||||
CALL TMS_CLEAR ; CLEAR SCREEN, HOME CURSOR
|
||||
#IF (TMSMODE == TMSMODE_N8)
|
||||
CALL PPK_INIT ; INITIALIZE PPI KEYBOARD DRIVER
|
||||
#ENDIF
|
||||
@@ -335,6 +335,7 @@ TMS_VDAINI:
|
||||
; RESET VDA
|
||||
; CURRENTLY IGNORES VIDEO MODE AND BITMAP DATA
|
||||
CALL TMS_VDARES ; RESET VDA
|
||||
CALL TMS_CLEAR ; CLEAR SCREEN
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
@@ -350,30 +351,16 @@ TMS_VDARES:
|
||||
#IF (CPUFAM == CPU_Z180)
|
||||
CALL TMS_Z180IO
|
||||
#ENDIF
|
||||
CALL TMS_CRTINIT
|
||||
CALL TMS_CRTINIT1A
|
||||
#IF (!USELZSA2)
|
||||
; WE WANT TO RELOAD THE FONT ON RESET, BUT THIS IS NOT CURRENTLY
|
||||
; POSSIBLE WHEN FONT COMPRESSION IS IN USE.
|
||||
CALL TMS_LOADFONT
|
||||
CALL TMS_LOADFONT ; RELOAD FONT
|
||||
LD A,$FF ; REMOVE
|
||||
LD (TMS_CURSAV),A ; ... SAVED CURSOR CHAR
|
||||
CALL TMS_SETCUR ; SET NEW CURSOR
|
||||
#ENDIF
|
||||
;
|
||||
; ENTRY POINT USED BY TMS_INIT TO AVOID DUPLICATE CALL TO TMS_CRTINIT
|
||||
; AND TMS_Z180IO.
|
||||
;
|
||||
TMS_VDARES1:
|
||||
LD DE,0 ; ROW = 0, COL = 0
|
||||
CALL TMS_XY ; SEND CURSOR TO TOP LEFT
|
||||
LD A,' ' ; BLANK THE SCREEN
|
||||
LD DE,TMS_ROWS * TMS_COLS ; FILL ENTIRE BUFFER
|
||||
CALL TMS_FILL ; DO IT
|
||||
LD DE,0 ; ROW = 0, COL = 0
|
||||
CALL TMS_XY ; SEND CURSOR TO TOP LEFT
|
||||
XOR A
|
||||
DEC A
|
||||
LD (TMS_CURSAV),A
|
||||
CALL TMS_SETCUR ; SET CURSOR
|
||||
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
TMS_VDADEV:
|
||||
@@ -634,6 +621,8 @@ TMS_CRTINIT1:
|
||||
LD A,D
|
||||
OR E
|
||||
JR NZ,TMS_CRTINIT1
|
||||
;
|
||||
TMS_CRTINIT1A:
|
||||
;
|
||||
; INITIALIZE VDU REGISTERS
|
||||
LD C,0 ; START WITH REGISTER 0
|
||||
@@ -655,6 +644,26 @@ TMS_CRTINIT2:
|
||||
RET
|
||||
;
|
||||
;----------------------------------------------------------------------
|
||||
; CLEAR SCREEN AND HOME CURSOR
|
||||
;----------------------------------------------------------------------
|
||||
;
|
||||
TMS_CLEAR:
|
||||
LD DE,0 ; ROW = 0, COL = 0
|
||||
CALL TMS_XY ; SEND CURSOR TO TOP LEFT
|
||||
LD A,' ' ; BLANK THE SCREEN
|
||||
LD DE,TMS_ROWS * TMS_COLS ; FILL ENTIRE BUFFER
|
||||
CALL TMS_FILL ; DO IT
|
||||
LD DE,0 ; ROW = 0, COL = 0
|
||||
CALL TMS_XY ; SEND CURSOR TO TOP LEFT
|
||||
XOR A
|
||||
DEC A
|
||||
LD (TMS_CURSAV),A
|
||||
CALL TMS_SETCUR ; SET CURSOR
|
||||
;
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
;----------------------------------------------------------------------
|
||||
; LOAD FONT DATA
|
||||
;----------------------------------------------------------------------
|
||||
;
|
||||
@@ -707,7 +716,7 @@ TMS_STACK .DW 0
|
||||
;
|
||||
; VIRTUAL CURSOR IS GENERATED BY DYNAMICALLY CHANGING FONT GLYPH
|
||||
; FOR CHAR 255 TO BE THE INVERSE OF THE GLYPH OF THE CHARACTER UNDER
|
||||
; THE CURRENT CURSOR POSITION. THE CHARACTER CODE IS THEN SWITCH TO
|
||||
; THE CURRENT CURSOR POSITION. THE CHARACTER CODE IS THEN SWITCHED TO
|
||||
; THE VALUE 255 AND THE ORIGINAL VALUE IS SAVED. WHEN THE DISPLAY
|
||||
; NEEDS TO BE CHANGED THE PROCESS IS UNDONE. IT IS ESSENTIAL THAT
|
||||
; ALL DISPLAY CHANGES BE BRACKETED WITH CALLS TO TMS_CLRCUR PRIOR TO
|
||||
|
||||
@@ -165,6 +165,12 @@ VDU_VDAINI:
|
||||
; RESET VDA
|
||||
; CURRENTLY IGNORES VIDEO MODE AND BITMAP DATA
|
||||
CALL VDU_VDARES ; RESET VDA
|
||||
LD DE,0
|
||||
LD (VDU_OFFSET),DE
|
||||
CALL VDU_XY
|
||||
LD A,' '
|
||||
LD DE,1024*16
|
||||
CALL VDU_FILL
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
@@ -176,13 +182,6 @@ VDU_VDAQRY:
|
||||
RET
|
||||
|
||||
VDU_VDARES:
|
||||
LD DE,0
|
||||
LD (VDU_OFFSET),DE
|
||||
CALL VDU_XY
|
||||
LD A,' '
|
||||
LD DE,1024*16
|
||||
CALL VDU_FILL
|
||||
|
||||
XOR A
|
||||
RET
|
||||
|
||||
|
||||
@@ -180,18 +180,7 @@ VGA_VDAINI:
|
||||
; RESET VDA
|
||||
; CURRENTLY IGNORES VIDEO MODE AND BITMAP DATA
|
||||
CALL VGA_VDARES ; RESET VDA
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
VGA_VDAQRY:
|
||||
LD C,$00 ; MODE ZERO IS ALL WE KNOW
|
||||
LD D,VGA_ROWS ; ROWS
|
||||
LD E,VGA_COLS ; COLS
|
||||
LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED YET
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
VGA_VDARES:
|
||||
LD A,$07 ; ATTRIBUTE IS STANDARD WHITE ON BLACK
|
||||
LD (VGA_ATTR),A ; SAVE IT
|
||||
XOR A ; ZERO (REVERSE, UNDERLINE, BLINK)
|
||||
@@ -205,6 +194,18 @@ VGA_VDARES:
|
||||
LD DE,0 ; ROW = 0, COL = 0
|
||||
CALL VGA_XY ; SEND CURSOR TO TOP LEFT
|
||||
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
VGA_VDAQRY:
|
||||
LD C,$00 ; MODE ZERO IS ALL WE KNOW
|
||||
LD D,VGA_ROWS ; ROWS
|
||||
LD E,VGA_COLS ; COLS
|
||||
LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED YET
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
VGA_VDARES:
|
||||
LD HL,$0404 | VGA_89BIT; SET VIDEO ENABLE BIT
|
||||
CALL VGA_SETCFG ; DO IT
|
||||
|
||||
|
||||
@@ -117,18 +117,6 @@ VRC_VDAINI:
|
||||
; RESET VDA
|
||||
; CURRENTLY IGNORES VIDEO MODE AND BITMAP DATA
|
||||
CALL VRC_VDARES ; RESET VDA
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
VRC_VDAQRY:
|
||||
LD C,$00 ; MODE ZERO IS ALL WE KNOW
|
||||
LD D,VRC_ROWS ; ROWS
|
||||
LD E,VRC_COLS ; COLS
|
||||
LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED YET
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
VRC_VDARES:
|
||||
XOR A ; CLEAR ATTRIBUTES (REV VIDEO OFF)
|
||||
LD (VRC_ATTR),A ; SAVE IT
|
||||
DEC A ; INIT CUR NESTING, INIT TO HIDDEN
|
||||
@@ -143,7 +131,18 @@ VRC_VDARES:
|
||||
LD DE,0 ; ROW = 0, COL = 0
|
||||
CALL VRC_XY ; SEND CURSOR TO TOP LEFT
|
||||
CALL VRC_SHOWCUR ; NOW SHOW THE CURSOR
|
||||
;
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
VRC_VDAQRY:
|
||||
LD C,$00 ; MODE ZERO IS ALL WE KNOW
|
||||
LD D,VRC_ROWS ; ROWS
|
||||
LD E,VRC_COLS ; COLS
|
||||
LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED YET
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
VRC_VDARES:
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#DEFINE RMN 5
|
||||
#DEFINE RUP 0
|
||||
#DEFINE RTP 0
|
||||
#DEFINE BIOSVER "3.5.0-dev.23"
|
||||
#DEFINE BIOSVER "3.5.0-dev.24"
|
||||
#define rmj RMJ
|
||||
#define rmn RMN
|
||||
#define rup RUP
|
||||
|
||||
@@ -3,5 +3,5 @@ rmn equ 5
|
||||
rup equ 0
|
||||
rtp equ 0
|
||||
biosver macro
|
||||
db "3.5.0-dev.23"
|
||||
db "3.5.0-dev.24"
|
||||
endm
|
||||
|
||||
Reference in New Issue
Block a user