Browse Source

Reset Video Hardware on OS Reset

- When an OS performs a reset operation, the HBIOS hook has been extended to automatically reset the video hardware of the CRT device (if it exists).
- This should go a long way toward fixing corrupt video after an application is run that reprograms the video hardware.
- An OS reset may or may not be performed when an application exits depending on the behavior of the application.  So, if an application exits without initiating a reset, then the video will not be reset.  Most applications that muck with the video chip directly will perform the reset at exit, so this is not normally an issue.
- If the OS encounters an error (such as drive not ready when doing a DIR), the error message may be erased by this new behavior depending on the specific scenario.
pull/393/head v3.5.0-dev.23
Wayne Warthen 2 years ago
parent
commit
d294fb6d09
  1. 5
      Source/HBIOS/hbios.asm
  2. 38
      Source/HBIOS/term.asm
  3. 2
      Source/ver.inc
  4. 2
      Source/ver.lib

5
Source/HBIOS/hbios.asm

@ -4269,6 +4269,8 @@ SYS_RESCOLD:
SYS_RESUSER: SYS_RESUSER:
; ;
#IF (CPUFAM == CPU_Z180) #IF (CPUFAM == CPU_Z180)
;
; IF Z180 CPU, CHECK FOR INVALID OPCODE FLAG AND HANDLE IF SO
; ;
IN0 A,(Z180_ITC) ; GET ITC REGISTER IN0 A,(Z180_ITC) ; GET ITC REGISTER
XOR $80 ; PRECLEAR TRAP BIT XOR $80 ; PRECLEAR TRAP BIT
@ -4305,6 +4307,9 @@ SYS_RESUSER2:
JP NEWLINE ; FORMATTING & EXIT JP NEWLINE ; FORMATTING & EXIT
; ;
#ENDIF #ENDIF
;
; RESET ACTIVE VIDEO DISPLAY ATTACHED TO EMULATOR
CALL TERM_RESET
; ;
RET ; ELSE RETURN WITH USER RESET VECTOR IN HL RET ; ELSE RETURN WITH USER RESET VECTOR IN HL
; ;

38
Source/HBIOS/term.asm

@ -31,6 +31,8 @@ TERM_PREINIT:
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET ; DONE RET ; DONE
; ;
#IF (TERMENABLE)
;
;====================================================================== ;======================================================================
; TERMINAL DRIVER - ATTACH ; TERMINAL DRIVER - ATTACH
;====================================================================== ;======================================================================
@ -47,8 +49,6 @@ TERM_PREINIT:
; DE: VDA DRIVER'S DISPATCH ADDRESS ; DE: VDA DRIVER'S DISPATCH ADDRESS
; HL: VDA DRIVER'S INSTANCE DATA ; HL: VDA DRIVER'S INSTANCE DATA
; ;
#IF (TERMENABLE)
;
TERM_ATTACH: TERM_ATTACH:
; ;
LD A,(TERM_DEVCNT) ; GET NEXT DEVICE NUMBER TO USE LD A,(TERM_DEVCNT) ; GET NEXT DEVICE NUMBER TO USE
@ -83,6 +83,34 @@ TERM_ATTACH:
RET ; RETURN RET ; RETURN
; ;
;====================================================================== ;======================================================================
; TERMINAL DRIVER - RESET
;======================================================================
;
; RESET THE FULL EMULATION STACK INCLUDING THE UNDERLYING VDA.
; THIS IS USED TO RECOVER FROM APPLICATIONS THAT REPROGRAM THE
; VIDEO CHIP.
;
TERM_RESET:
; ABORT IF NOTHING ATTACHED
LD A,(TERM_DEVCNT)
OR A
JR NZ,TERM_RESET1
OR $FF
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
;
;======================================================================
; TERMINAL DRIVER PRIVATE DATA ; TERMINAL DRIVER PRIVATE DATA
;====================================================================== ;======================================================================
; ;
@ -95,4 +123,10 @@ TERM_DEVCNT .DB 0 ; TERMINAL DEVICE COUNT
#INCLUDE "tty.asm" #INCLUDE "tty.asm"
#INCLUDE "ansi.asm" #INCLUDE "ansi.asm"
; ;
#ELSE
;
TERM_RESET:
XOR A
RET
;
#ENDIF #ENDIF

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.22"
#DEFINE BIOSVER "3.5.0-dev.23"
#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.22"
db "3.5.0-dev.23"
endm endm

Loading…
Cancel
Save