Browse Source

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.
work v3.5.0-dev.24
Wayne Warthen 2 years ago
parent
commit
2d8c37307d
  1. BIN
      Doc/RomWBW Applications.pdf
  2. BIN
      Doc/RomWBW Disk Catalog.pdf
  3. BIN
      Doc/RomWBW Errata.pdf
  4. BIN
      Doc/RomWBW ROM Applications.pdf
  5. BIN
      Doc/RomWBW System Guide.pdf
  6. BIN
      Doc/RomWBW User Guide.pdf
  7. 2
      ReadMe.md
  8. 2
      ReadMe.txt
  9. 10
      Source/Doc/SystemGuide.md
  10. 20
      Source/HBIOS/cvdu.asm
  11. 14
      Source/HBIOS/ef.asm
  12. 3
      Source/HBIOS/gdc.asm
  13. 19
      Source/HBIOS/term.asm
  14. 51
      Source/HBIOS/tms.asm
  15. 13
      Source/HBIOS/vdu.asm
  16. 23
      Source/HBIOS/vga.asm
  17. 25
      Source/HBIOS/vrc.asm
  18. 2
      Source/ver.inc
  19. 2
      Source/ver.lib

BIN
Doc/RomWBW Applications.pdf

Binary file not shown.

BIN
Doc/RomWBW Disk Catalog.pdf

Binary file not shown.

BIN
Doc/RomWBW Errata.pdf

Binary file not shown.

BIN
Doc/RomWBW ROM Applications.pdf

Binary file not shown.

BIN
Doc/RomWBW System Guide.pdf

Binary file not shown.

BIN
Doc/RomWBW User Guide.pdf

Binary file not shown.

2
ReadMe.md

@ -3,7 +3,7 @@
**RomWBW ReadMe** \ **RomWBW ReadMe** \
Version 3.5 \ Version 3.5 \
Wayne Warthen ([wwarthen@gmail.com](mailto:wwarthen@gmail.com)) \ Wayne Warthen ([wwarthen@gmail.com](mailto:wwarthen@gmail.com)) \
28 Feb 2024
03 Apr 2024
# Overview # Overview

2
ReadMe.txt

@ -1,6 +1,6 @@
RomWBW ReadMe RomWBW ReadMe
Wayne Warthen (wwarthen@gmail.com) Wayne Warthen (wwarthen@gmail.com)
28 Feb 2024
03 Apr 2024

10
Source/Doc/SystemGuide.md

@ -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 are specific to each VDA. The returned Status (A) is a standard HBIOS
result code. 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 (HL) buffer address containing the character bitmap data to be loaded
into the video processor. The buffer **must** be located entirely in the 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 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 | | B: 0x42 | A: Status |
| C: Video Unit | | | 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) ### Function 0x43 -- Video Device (VDADEV)

20
Source/HBIOS/cvdu.asm

@ -148,6 +148,15 @@ CVDU_VDAINI:
; RESET VDA ; RESET VDA
; CURRENTLY IGNORES VIDEO MODE AND BITMAP DATA ; CURRENTLY IGNORES VIDEO MODE AND BITMAP DATA
CALL CVDU_VDARES ; RESET VDA 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 XOR A ; SIGNAL SUCCESS
RET RET
@ -160,17 +169,6 @@ CVDU_VDAQRY:
RET RET
CVDU_VDARES: 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 XOR A
RET RET

14
Source/HBIOS/ef.asm

@ -570,6 +570,13 @@ EF_VDAINI:
LD A,L LD A,L
OR H OR H
CALL NZ,EF_LOADFONTS CALL NZ,EF_LOADFONTS
CALL EF_CLEARALL
CALL EF_LOADCSTYLE
LD DE,0
LD (EF_VDA_OFFSET),DE
CALL EF_VDASCP
XOR A XOR A
RET RET
; ;
@ -586,13 +593,8 @@ EF_VDAQRY:
; ;
EF_VDARES: EF_VDARES:
; VIDEO RESET ; 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 XOR A
RET RET
; ;

3
Source/HBIOS/gdc.asm

@ -161,8 +161,7 @@ GDC_VDAQRY: ; VIDEO INFORMATION QUERY
RET RET
; ;
GDC_VDARES: ; VIDEO SYSTEM RESET 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 XOR A
RET RET
; ;

19
Source/HBIOS/term.asm

@ -54,6 +54,9 @@ TERM_ATTACH:
LD A,(TERM_DEVCNT) ; GET NEXT DEVICE NUMBER TO USE LD A,(TERM_DEVCNT) ; GET NEXT DEVICE NUMBER TO USE
LD B,A ; PUT IT IN B LD B,A ; PUT IT IN B
PUSH HL ; SAVE VDA INSTANCE DATA PTR 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 ; SETUP EMULATOR MODULE FUNC TBL ADDRESS BASED ON DESIRED EMULATION
; EMULATOR PASSES BACK IT'S FUNC TBL ADDRESS IN DE ; EMULATOR PASSES BACK IT'S FUNC TBL ADDRESS IN DE
@ -99,22 +102,18 @@ TERM_RESET:
RET RET
; ;
TERM_RESET1: 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 ; TERMINAL DRIVER PRIVATE DATA
;====================================================================== ;======================================================================
; ;
TERM_DEVCNT .DB 0 ; TERMINAL DEVICE COUNT TERM_DEVCNT .DB 0 ; TERMINAL DEVICE COUNT
TERM_VDADEV .DB 0 ; ATTACHED VDA UNIT
; ;
;====================================================================== ;======================================================================
; EMULATION MODULES ; EMULATION MODULES

51
Source/HBIOS/tms.asm

@ -249,7 +249,7 @@ TMS_INIT:
TMS_INIT1: TMS_INIT1:
CALL TMS_CRTINIT ; SETUP THE TMS CHIP REGISTERS CALL TMS_CRTINIT ; SETUP THE TMS CHIP REGISTERS
CALL TMS_LOADFONT ; LOAD FONT DATA FROM ROM TO TMS STRORAGE 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) #IF (TMSMODE == TMSMODE_N8)
CALL PPK_INIT ; INITIALIZE PPI KEYBOARD DRIVER CALL PPK_INIT ; INITIALIZE PPI KEYBOARD DRIVER
#ENDIF #ENDIF
@ -335,6 +335,7 @@ TMS_VDAINI:
; RESET VDA ; RESET VDA
; CURRENTLY IGNORES VIDEO MODE AND BITMAP DATA ; CURRENTLY IGNORES VIDEO MODE AND BITMAP DATA
CALL TMS_VDARES ; RESET VDA CALL TMS_VDARES ; RESET VDA
CALL TMS_CLEAR ; CLEAR SCREEN
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET RET
@ -350,30 +351,16 @@ TMS_VDARES:
#IF (CPUFAM == CPU_Z180) #IF (CPUFAM == CPU_Z180)
CALL TMS_Z180IO CALL TMS_Z180IO
#ENDIF #ENDIF
CALL TMS_CRTINIT
CALL TMS_CRTINIT1A
#IF (!USELZSA2) #IF (!USELZSA2)
; WE WANT TO RELOAD THE FONT ON RESET, BUT THIS IS NOT CURRENTLY ; WE WANT TO RELOAD THE FONT ON RESET, BUT THIS IS NOT CURRENTLY
; POSSIBLE WHEN FONT COMPRESSION IS IN USE. ; 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 #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 XOR A
DEC A
LD (TMS_CURSAV),A
CALL TMS_SETCUR ; SET CURSOR
XOR A ; SIGNAL SUCCESS
RET RET
TMS_VDADEV: TMS_VDADEV:
@ -634,6 +621,8 @@ TMS_CRTINIT1:
LD A,D LD A,D
OR E OR E
JR NZ,TMS_CRTINIT1 JR NZ,TMS_CRTINIT1
;
TMS_CRTINIT1A:
; ;
; INITIALIZE VDU REGISTERS ; INITIALIZE VDU REGISTERS
LD C,0 ; START WITH REGISTER 0 LD C,0 ; START WITH REGISTER 0
@ -655,6 +644,26 @@ TMS_CRTINIT2:
RET 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 ; LOAD FONT DATA
;---------------------------------------------------------------------- ;----------------------------------------------------------------------
; ;
@ -707,7 +716,7 @@ TMS_STACK .DW 0
; ;
; VIRTUAL CURSOR IS GENERATED BY DYNAMICALLY CHANGING FONT GLYPH ; VIRTUAL CURSOR IS GENERATED BY DYNAMICALLY CHANGING FONT GLYPH
; FOR CHAR 255 TO BE THE INVERSE OF THE GLYPH OF THE CHARACTER UNDER ; 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 ; THE VALUE 255 AND THE ORIGINAL VALUE IS SAVED. WHEN THE DISPLAY
; NEEDS TO BE CHANGED THE PROCESS IS UNDONE. IT IS ESSENTIAL THAT ; NEEDS TO BE CHANGED THE PROCESS IS UNDONE. IT IS ESSENTIAL THAT
; ALL DISPLAY CHANGES BE BRACKETED WITH CALLS TO TMS_CLRCUR PRIOR TO ; ALL DISPLAY CHANGES BE BRACKETED WITH CALLS TO TMS_CLRCUR PRIOR TO

13
Source/HBIOS/vdu.asm

@ -165,6 +165,12 @@ VDU_VDAINI:
; RESET VDA ; RESET VDA
; CURRENTLY IGNORES VIDEO MODE AND BITMAP DATA ; CURRENTLY IGNORES VIDEO MODE AND BITMAP DATA
CALL VDU_VDARES ; RESET VDA 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 XOR A ; SIGNAL SUCCESS
RET RET
@ -176,13 +182,6 @@ VDU_VDAQRY:
RET RET
VDU_VDARES: VDU_VDARES:
LD DE,0
LD (VDU_OFFSET),DE
CALL VDU_XY
LD A,' '
LD DE,1024*16
CALL VDU_FILL
XOR A XOR A
RET RET

23
Source/HBIOS/vga.asm

@ -180,18 +180,7 @@ VGA_VDAINI:
; RESET VDA ; RESET VDA
; CURRENTLY IGNORES VIDEO MODE AND BITMAP DATA ; CURRENTLY IGNORES VIDEO MODE AND BITMAP DATA
CALL VGA_VDARES ; RESET VDA 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 A,$07 ; ATTRIBUTE IS STANDARD WHITE ON BLACK
LD (VGA_ATTR),A ; SAVE IT LD (VGA_ATTR),A ; SAVE IT
XOR A ; ZERO (REVERSE, UNDERLINE, BLINK) XOR A ; ZERO (REVERSE, UNDERLINE, BLINK)
@ -205,6 +194,18 @@ VGA_VDARES:
LD DE,0 ; ROW = 0, COL = 0 LD DE,0 ; ROW = 0, COL = 0
CALL VGA_XY ; SEND CURSOR TO TOP LEFT 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 LD HL,$0404 | VGA_89BIT; SET VIDEO ENABLE BIT
CALL VGA_SETCFG ; DO IT CALL VGA_SETCFG ; DO IT

25
Source/HBIOS/vrc.asm

@ -117,18 +117,6 @@ VRC_VDAINI:
; RESET VDA ; RESET VDA
; CURRENTLY IGNORES VIDEO MODE AND BITMAP DATA ; CURRENTLY IGNORES VIDEO MODE AND BITMAP DATA
CALL VRC_VDARES ; RESET VDA 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) XOR A ; CLEAR ATTRIBUTES (REV VIDEO OFF)
LD (VRC_ATTR),A ; SAVE IT LD (VRC_ATTR),A ; SAVE IT
DEC A ; INIT CUR NESTING, INIT TO HIDDEN DEC A ; INIT CUR NESTING, INIT TO HIDDEN
@ -143,7 +131,18 @@ VRC_VDARES:
LD DE,0 ; ROW = 0, COL = 0 LD DE,0 ; ROW = 0, COL = 0
CALL VRC_XY ; SEND CURSOR TO TOP LEFT CALL VRC_XY ; SEND CURSOR TO TOP LEFT
CALL VRC_SHOWCUR ; NOW SHOW THE CURSOR 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 XOR A ; SIGNAL SUCCESS
RET RET

2
Source/ver.inc

@ -2,7 +2,7 @@
#DEFINE RMN 5 #DEFINE RMN 5
#DEFINE RUP 0 #DEFINE RUP 0
#DEFINE RTP 0 #DEFINE RTP 0
#DEFINE BIOSVER "3.5.0-dev.23"
#DEFINE BIOSVER "3.5.0-dev.24"
#define rmj RMJ #define rmj RMJ
#define rmn RMN #define rmn RMN
#define rup RUP #define rup RUP

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 5
rup equ 0 rup equ 0
rtp equ 0 rtp equ 0
biosver macro biosver macro
db "3.5.0-dev.23"
db "3.5.0-dev.24"
endm endm

Loading…
Cancel
Save