From 074f2cfdb2de88f225adfb56e6c31d41a9183b28 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Thu, 8 Feb 2024 17:43:55 -0800 Subject: [PATCH] Fix for ROMless Restart Registration of terminal emulation was failing under ROMless operation after a (R)estart was performed at the Boot Loader. See . --- Source/HBIOS/ansi.asm | 8 ++++++++ Source/HBIOS/cvdu.asm | 1 + Source/HBIOS/gdc.asm | 1 + Source/HBIOS/hbios.asm | 38 ++++++++++++++++++-------------------- Source/HBIOS/scon.asm | 6 ------ Source/HBIOS/std.asm | 6 ++++++ Source/HBIOS/term.asm | 32 ++++++++++++++++++++++++++------ Source/HBIOS/tms.asm | 8 ++++++++ Source/HBIOS/tty.asm | 8 ++++++++ Source/HBIOS/vdu.asm | 1 + Source/HBIOS/vga.asm | 1 + Source/HBIOS/vrc.asm | 1 + Source/ver.inc | 2 +- Source/ver.lib | 2 +- 14 files changed, 81 insertions(+), 34 deletions(-) diff --git a/Source/HBIOS/ansi.asm b/Source/HBIOS/ansi.asm index 50fbc9e6..f6a9dc88 100644 --- a/Source/HBIOS/ansi.asm +++ b/Source/HBIOS/ansi.asm @@ -22,6 +22,14 @@ ANSI_DEFCOLOR .EQU 7 ; WHITE ON BLACK ; ANSI EMULATION MODULE ;================================================================================================== ; +; PRE-CONSOLE INITIALIZATION +; +ANSI_PREINIT: + OR $FF ; RESET THE VDA UNIT + LD (ANSI_VDAUNIT),A ; ... TO INITIAL VALUE + XOR A + RET +; ; INITIALIZATION OF EMULATION MODULE CALLED BY PARENT VDA DRIVER ; ON ENTRY: ; DE: DISPATCH ADDRESS OF CALLING VDA DRIVER diff --git a/Source/HBIOS/cvdu.asm b/Source/HBIOS/cvdu.asm index 5cc6eb5a..8abe5eb6 100644 --- a/Source/HBIOS/cvdu.asm +++ b/Source/HBIOS/cvdu.asm @@ -59,6 +59,7 @@ CVDU_COLS .EQU 80 #ENDIF ; TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER +KBDENABLE .SET TRUE ; INCLUDE KBD KEYBOARD SUPPORT ; ;====================================================================== ; CVDU DRIVER - INITIALIZATION diff --git a/Source/HBIOS/gdc.asm b/Source/HBIOS/gdc.asm index 79b72c10..8d5d936e 100644 --- a/Source/HBIOS/gdc.asm +++ b/Source/HBIOS/gdc.asm @@ -65,6 +65,7 @@ GDC_COLS .EQU 80 .ECHO "\n" ; TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER +KBDENABLE .SET TRUE ; INCLUDE KBD KEYBOARD SUPPORT ; ;====================================================================== ; GDC DRIVER - INITIALIZATION diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 352b3965..23326cf2 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -3257,9 +3257,8 @@ HB_PCINITTBL: #IF (TMSENABLE) .DW TMS_PREINIT #ENDIF -#IF (SCONENABLE) - .DW SCON_PREINIT -#ENDIF + .DW TERM_PREINIT ; ALWAYS DO THIS ONE +; HB_PCINITTBLLEN .EQU (($ - HB_PCINITTBL) / 2) ;================================================================================================== @@ -3365,9 +3364,6 @@ HB_INITTBL: #IF (TMSENABLE) .DW TMS_INIT #ENDIF -#IF (SCONENABLE) - .DW SCON_INIT -#ENDIF #IF (EFENABLE) .DW EF_INIT #ENDIF @@ -3413,6 +3409,9 @@ HB_INITTBL: #IF (PPPENABLE) .DW PPP_INIT #ENDIF +#IF (SCONENABLE) + .DW SCON_INIT +#ENDIF #IF (CHENABLE) .DW CH_INIT #ENDIF @@ -6461,15 +6460,6 @@ SIZ_TMS .EQU $ - ORG_TMS .ECHO " bytes.\n" #ENDIF ; -#IF (SCONENABLE) -ORG_SCON .EQU $ - #INCLUDE "scon.asm" -SIZ_SCON .EQU $ - ORG_SCON - .ECHO "SCON occupies " - .ECHO SIZ_SCON - .ECHO " bytes.\n" -#ENDIF -; #IF (EFENABLE) ORG_EF .EQU $ #INCLUDE "ef.asm" @@ -6567,7 +6557,7 @@ SIZ_FONTS .EQU $ - ORG_FONTS .ECHO SIZ_FONTS .ECHO " bytes.\n" ; -#IF (CVDUENABLE | VGAENABLE | GDCENABLE | VRCENABLE | (TMSENABLE & ((TMSMODE == TMSMODE_MSXKBD) | (TMSMODE == TMSMODE_MBC)))) +#IF (KBDENABLE) ORG_KBD .EQU $ #INCLUDE "kbd.asm" SIZ_KBD .EQU $ - ORG_KBD @@ -6576,7 +6566,7 @@ SIZ_KBD .EQU $ - ORG_KBD .ECHO " bytes.\n" #ENDIF ; -#IF (VDUENABLE | (TMSENABLE & (TMSMODE == TMSMODE_N8))) +#IF (PPKENABLE) ORG_PPK .EQU $ #INCLUDE "ppk.asm" SIZ_PPK .EQU $ - ORG_PPK @@ -6612,6 +6602,15 @@ SIZ_PPP .EQU $ - ORG_PPP .ECHO " bytes.\n" #ENDIF ; +#IF (SCONENABLE) +ORG_SCON .EQU $ + #INCLUDE "scon.asm" +SIZ_SCON .EQU $ - ORG_SCON + .ECHO "SCON occupies " + .ECHO SIZ_SCON + .ECHO " bytes.\n" +#ENDIF +; #IF (CHENABLE) ORG_CH .EQU $ #INCLUDE "ch.asm" @@ -6720,14 +6719,13 @@ SIZ_SYQ .EQU $ - ORG_SYQ .ECHO " bytes.\n" #ENDIF ; -#IF (TERMENABLE) +; TERM IS ALWAYS INCLUDED ORG_TERM .EQU $ #INCLUDE "term.asm" SIZ_TERM .EQU $ - ORG_TERM .ECHO "TERM occupies " .ECHO SIZ_TERM .ECHO " bytes.\n" -#ENDIF ; ;#IF (SPKENABLE & DSRTCENABLE) #IF (SPKENABLE) @@ -6799,7 +6797,7 @@ SIZ_YM2612 .EQU $ - ORG_YM2612 ; ; INCLUDE LZSA2 decompression engine if required. ; -#IF ((VGAENABLE | CVDUENABLE | TMSENABLE | GDCENABLE | VRCENABLE) & USELZSA2) +#IF ((CVDUENABLE | GDCENABLE | TMSENABLE | VGAENABLE | VRCENABLE) & USELZSA2) #INCLUDE "unlzsa2s.asm" #ENDIF ; diff --git a/Source/HBIOS/scon.asm b/Source/HBIOS/scon.asm index 9a32457f..749175bb 100644 --- a/Source/HBIOS/scon.asm +++ b/Source/HBIOS/scon.asm @@ -22,12 +22,6 @@ SCON_ROWS .EQU 40 ; ; ; -SCON_PREINIT: - XOR A - RET -; -; -; SCON_INIT: CALL NEWLINE PRTS("SCON:$") diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index 3a7e8473..9612a00a 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -460,6 +460,12 @@ SER_7372800_8N2 .EQU SER_BAUD7372800 | SER_DATA8 | SER_PARNONE | SER_STOP2 ; TERMENABLE .EQU FALSE ; TERM PSEUDO DEVICE, WILL AUTO-ENABLE IF A VDA IS ENABLED ; +; THE FOLLOWING CONTROL INCLUSION OF THE KEYBOARD DRIVERS. THEY ARE +; SET TO TRUE IN THE VDA DRIVERS AS NEEDED. +; +KBDENABLE .EQU FALSE ; PS/2 KEYBOARD DRIVER +PPKENABLE .EQU FALSE ; PPK KEYBOARD DRIVER +; ; VIDEO MODES ; V80X24 .EQU 0 ; ECB-VDU diff --git a/Source/HBIOS/term.asm b/Source/HBIOS/term.asm index 40931e47..5e569516 100644 --- a/Source/HBIOS/term.asm +++ b/Source/HBIOS/term.asm @@ -16,6 +16,22 @@ ; ; ;====================================================================== +; TERMINAL DRIVER - PRE-CONSOLE INITIALIZATION +;====================================================================== +; +; GIVE EMULATION MODULES A CHANCE TO RESET THEMSELVES AT STARTUP +; +TERM_PREINIT: +#IF (TERMENABLE) + XOR A ; ZERO TO ACCUM + LD (TERM_DEVCNT),A ; INITIALIZE DEVCNT + CALL TTY_PREINIT ; DO TTY PREINIT + CALL ANSI_PREINIT ; DO ANSI PREINIT +#ENDIF + XOR A ; SIGNAL SUCCESS + RET ; DONE +; +;====================================================================== ; TERMINAL DRIVER - ATTACH ;====================================================================== ; @@ -31,6 +47,8 @@ ; DE: VDA DRIVER'S DISPATCH ADDRESS ; HL: VDA DRIVER'S INSTANCE DATA ; +#IF (TERMENABLE) +; TERM_ATTACH: ; LD A,(TERM_DEVCNT) ; GET NEXT DEVICE NUMBER TO USE @@ -40,12 +58,12 @@ TERM_ATTACH: ; SETUP EMULATOR MODULE FUNC TBL ADDRESS BASED ON DESIRED EMULATION ; EMULATOR PASSES BACK IT'S FUNC TBL ADDRESS IN DE OR $FF ; PRESET FAILURE -#IF (VDAEMU == EMUTYP_TTY) + #IF (VDAEMU == EMUTYP_TTY) CALL TTY_INIT ; INIT TTY, DE := TTY_FNTBL -#ENDIF -#IF (VDAEMU == EMUTYP_ANSI) + #ENDIF + #IF (VDAEMU == EMUTYP_ANSI) CALL ANSI_INIT ; INIT ANSI, DE := ANSI_FNTBL -#ENDIF + #ENDIF POP HL ; RECOVER VDA INSTANCE DATA PTR RET NZ ; BAIL OUT ON ERROR ; @@ -74,5 +92,7 @@ TERM_DEVCNT .DB 0 ; TERMINAL DEVICE COUNT ; EMULATION MODULES ;====================================================================== ; -#INCLUDE "tty.asm" -#INCLUDE "ansi.asm" + #INCLUDE "tty.asm" + #INCLUDE "ansi.asm" +; +#ENDIF \ No newline at end of file diff --git a/Source/HBIOS/tms.asm b/Source/HBIOS/tms.asm index bf0e25da..18de2d14 100644 --- a/Source/HBIOS/tms.asm +++ b/Source/HBIOS/tms.asm @@ -140,6 +140,14 @@ TMS_COLS .EQU 40 ; TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER ; +#IF (TMSMODE == TMSMODE_N8) +PPKENABLE .SET TRUE ; INCLUDE PPK KEYBOARD SUPPORT +#ENDIF +; +#IF ((TMSMODE == TMSMODE_MSXKBD) | (TMSMODE == TMSMODE_MBC)) +PPKENABLE .SET TRUE ; INCLUDE KBD KEYBOARD SUPPORT +#ENDIF +; ; TMS_IODELAY IS USED TO ADD RECOVERY TIME TO TMS9918/V9958 ACCESSES ; IF YOU SEE SCREEN CORRUPTION, ADJUST THIS!!! ; diff --git a/Source/HBIOS/tty.asm b/Source/HBIOS/tty.asm index 65d09a49..73cc6567 100644 --- a/Source/HBIOS/tty.asm +++ b/Source/HBIOS/tty.asm @@ -6,6 +6,14 @@ ; TODO: ; - SOME FUNCTIONS ARE NOT IMPLEMENTED!!! ; +; PRE-CONSOLE INITIALIZATION +; +TTY_PREINIT: + OR $FF ; RESET THE VDA UNIT + LD (TTY_VDAUNIT),A ; ... TO INITIAL VALUE + XOR A + RET +; ; INITIALIZATION OF EMULATION MODULE CALLED BY PARENT VDA DRIVER ; ON ENTRY: ; C: CIO UNIT NUMBER OF CALLING VDA DRIVER diff --git a/Source/HBIOS/vdu.asm b/Source/HBIOS/vdu.asm index 890e2a06..b4c1a4c9 100644 --- a/Source/HBIOS/vdu.asm +++ b/Source/HBIOS/vdu.asm @@ -45,6 +45,7 @@ VDU_CSTY .EQU VDU_BLOK ; DEFAULT CURSOR STYLE VDU_BLNK .EQU VDU_NOBL ; DEFAULT BLINK RATE ; TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER +PPKENABLE .SET TRUE ; INCLUDE PPK KEYBOARD SUPPORT ; #IF (VDUSIZ=V80X24) DLINES .EQU 24 diff --git a/Source/HBIOS/vga.asm b/Source/HBIOS/vga.asm index 8d0413aa..8b78c38a 100644 --- a/Source/HBIOS/vga.asm +++ b/Source/HBIOS/vga.asm @@ -90,6 +90,7 @@ VGA_R11 .EQU VGA_SCANL-1 #DEFINE DEFREGS REGS_VGA ; TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER +KBDENABLE .SET TRUE ; INCLUDE KBD KEYBOARD SUPPORT ; ; DRIVER UTILIZES THE MULTIPLE DISPLAY WINDOW FEATURE OF THE CRTC TO ACCOMPLISH ; FULL SCREEN SCROLLING WITHOUT THE NEED TO MOVE DISPLAY RAM BYTES. diff --git a/Source/HBIOS/vrc.asm b/Source/HBIOS/vrc.asm index 3f25392e..c224c9de 100644 --- a/Source/HBIOS/vrc.asm +++ b/Source/HBIOS/vrc.asm @@ -25,6 +25,7 @@ VRC_COLS .EQU 64 #DEFINE VRC_FONT FONTVGARC ; TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER +KBDENABLE .SET TRUE ; INCLUDE KBD KEYBOARD SUPPORT ; .ECHO "VRC: IO=" .ECHO VRC_BASE diff --git a/Source/ver.inc b/Source/ver.inc index 8a05539f..d48dba55 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,7 +2,7 @@ #DEFINE RMN 5 #DEFINE RUP 0 #DEFINE RTP 0 -#DEFINE BIOSVER "3.5.0-dev.9" +#DEFINE BIOSVER "3.5.0-dev.10" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index aa909cdc..7cbcf9ca 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 5 rup equ 0 rtp equ 0 biosver macro - db "3.5.0-dev.9" + db "3.5.0-dev.10" endm