From 4d9c93734f6a344bc7a0a3fe9f955df7e0304bb9 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Wed, 18 Jan 2023 14:29:19 -0800 Subject: [PATCH] Support Serial Keyboard with Video Displays Added configuration setting VDAEMU_SERKBD which can be used to specify any serial unit # to be used as the keyboard for the video terminal. Default value is $FF which means to use the default hardware keyboard. All other values mean that terminal input is to come from corresponding serial unit #. Also a couple more tweaks to the p-System boot volume. --- Source/HBIOS/Config/RCZ80_std.asm | 3 +- Source/HBIOS/ansi.asm | 11 ++++++ Source/HBIOS/cfg_dyno.asm | 3 +- Source/HBIOS/cfg_ezz80.asm | 3 +- Source/HBIOS/cfg_master.asm | 3 +- Source/HBIOS/cfg_mbc.asm | 3 +- Source/HBIOS/cfg_mk4.asm | 3 +- Source/HBIOS/cfg_n8.asm | 3 +- Source/HBIOS/cfg_rcz180.asm | 3 +- Source/HBIOS/cfg_rcz280.asm | 3 +- Source/HBIOS/cfg_rcz80.asm | 3 +- Source/HBIOS/cfg_rph.asm | 3 +- Source/HBIOS/cfg_sbc.asm | 3 +- Source/HBIOS/cfg_scz180.asm | 3 +- Source/HBIOS/cfg_zeta.asm | 3 +- Source/HBIOS/cfg_zeta2.asm | 3 +- Source/HBIOS/tms.asm | 2 +- Source/HBIOS/tty.asm | 10 +++++ Source/pSys/ReadMe.txt | 61 ++++++++++++++++++++++++++---- Source/pSys/psys.vol | Bin 8380416 -> 8380416 bytes Source/ver.inc | 2 +- Source/ver.lib | 2 +- 22 files changed, 108 insertions(+), 25 deletions(-) diff --git a/Source/HBIOS/Config/RCZ80_std.asm b/Source/HBIOS/Config/RCZ80_std.asm index c533cd36..de027501 100644 --- a/Source/HBIOS/Config/RCZ80_std.asm +++ b/Source/HBIOS/Config/RCZ80_std.asm @@ -36,8 +36,9 @@ SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) ; TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -TMSMODE .SET TMSMODE_MSX9958 ; TMS: DRIVER MODE: TMSMODE_[RC/MSX9958] +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD] MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) +VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; AY38910ENABLE .SET TRUE ; AY: AY-3-8910 / YM2149 SOUND DRIVER ; diff --git a/Source/HBIOS/ansi.asm b/Source/HBIOS/ansi.asm index 4b4612c1..a761542d 100644 --- a/Source/HBIOS/ansi.asm +++ b/Source/HBIOS/ansi.asm @@ -114,6 +114,10 @@ ANSI_FNTBL: ; ANSI_IN: ; HANDLE INPUT REQUEST ; +#IF (VDAEMU_SERKBD != $FF) + LD C,VDAEMU_SERKBD + JP CIO_DISPATCH +#ELSE ; RETURN QUEUED DATA IF WE HAVE ANY LD A,(ANSI_QLEN) ; GET THE CURRENT QUEUE LENGTH OR A ; SET FLAGS @@ -140,6 +144,7 @@ ANSI_IN1: ; PERFORM ACTUAL KEYBOARD INPUT ANSI_IN2: ; HANDLE SPECIAL KEY CALL ANSI_KDISP ; IF $80 OR HIGHER, DISPATCH JR ANSI_IN ; AND LOOP +#ENDIF ; ; WRITE A CHARACTER W/ EMULATION ; @@ -166,6 +171,11 @@ ANSI_OUT2: ; SET RESULT AND RETURN ; CHECK INPUT STATUS ; ANSI_IST: ; CHECK QUEUE FIRST +; +#IF (VDAEMU_SERKBD != $FF) + LD C,VDAEMU_SERKBD + JP CIO_DISPATCH +#ELSE LD A,(ANSI_QLEN) ; GET CURRENT QUEUE LENGTH OR A ; SET FLAGS RET NZ ; RETURN IF CHAR(S) WAITING @@ -196,6 +206,7 @@ ANSI_IST: ; CHECK QUEUE FIRST ANSI_IST1: ; HANDLE SPECIAL KEY CALL ANSI_KDISP ; DO SPECIAL KEY HANDLING JR ANSI_IST ; REPEAT +#ENDIF ; ; CHECK OUTPUT STATUS ; diff --git a/Source/HBIOS/cfg_dyno.asm b/Source/HBIOS/cfg_dyno.asm index fb5cb3c0..06209dbc 100644 --- a/Source/HBIOS/cfg_dyno.asm +++ b/Source/HBIOS/cfg_dyno.asm @@ -78,6 +78,7 @@ DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE) BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) ; @@ -124,7 +125,7 @@ VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD] +TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) ; diff --git a/Source/HBIOS/cfg_ezz80.asm b/Source/HBIOS/cfg_ezz80.asm index 28fea35d..e725d028 100644 --- a/Source/HBIOS/cfg_ezz80.asm +++ b/Source/HBIOS/cfg_ezz80.asm @@ -79,6 +79,7 @@ DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE) BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) @@ -161,7 +162,7 @@ VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD] +TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) ; diff --git a/Source/HBIOS/cfg_master.asm b/Source/HBIOS/cfg_master.asm index 968a488f..16e25df5 100644 --- a/Source/HBIOS/cfg_master.asm +++ b/Source/HBIOS/cfg_master.asm @@ -113,6 +113,7 @@ DSKYOSC .EQU 3000000 ; OSCILLATOR FREQ FOR DSKYNG (IN HZ) BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) @@ -221,7 +222,7 @@ GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) GDCMODE .EQU GDCMODE_RPH ; GDC: GDC MODE: GDCMODE_[NONE|ECB|RPH] GDCMON .EQU GDCMON_EGA ; GDC: GDC MONITOR SETUP: GDCMON_[NONE|CGA|EGA] TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD] +TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] diff --git a/Source/HBIOS/cfg_mbc.asm b/Source/HBIOS/cfg_mbc.asm index 2820b8fb..ac19b215 100644 --- a/Source/HBIOS/cfg_mbc.asm +++ b/Source/HBIOS/cfg_mbc.asm @@ -78,6 +78,7 @@ DSKYOSC .EQU 3000000 ; OSCILLATOR FREQ FOR DSKYNG (IN HZ) BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) @@ -149,7 +150,7 @@ CVDUMODE .EQU CVDUMODE_MBC ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] CVDUMON .EQU CVDUMON_CGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) TMSENABLE .EQU TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_MBC ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD] +TMSMODE .EQU TMSMODE_MBC ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] diff --git a/Source/HBIOS/cfg_mk4.asm b/Source/HBIOS/cfg_mk4.asm index 555b40b7..29d5493b 100644 --- a/Source/HBIOS/cfg_mk4.asm +++ b/Source/HBIOS/cfg_mk4.asm @@ -84,6 +84,7 @@ DSKYOSC .EQU 3000000 ; OSCILLATOR FREQ FOR DSKYNG (IN HZ) BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) @@ -149,7 +150,7 @@ CVDUMODE .EQU CVDUMODE_ECB ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] CVDUMON .EQU CVDUMON_EGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD] +TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] diff --git a/Source/HBIOS/cfg_n8.asm b/Source/HBIOS/cfg_n8.asm index 2653c052..bdd5f0d0 100644 --- a/Source/HBIOS/cfg_n8.asm +++ b/Source/HBIOS/cfg_n8.asm @@ -86,6 +86,7 @@ DSKYOSC .EQU 3000000 ; OSCILLATOR FREQ FOR DSKYNG (IN HZ) BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) @@ -151,7 +152,7 @@ CVDUMODE .EQU CVDUMODE_ECB ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] CVDUMON .EQU CVDUMON_EGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) TMSENABLE .EQU TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_N8 ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD] +TMSMODE .EQU TMSMODE_N8 ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] diff --git a/Source/HBIOS/cfg_rcz180.asm b/Source/HBIOS/cfg_rcz180.asm index 8e87167c..520e47c2 100644 --- a/Source/HBIOS/cfg_rcz180.asm +++ b/Source/HBIOS/cfg_rcz180.asm @@ -81,6 +81,7 @@ DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE) BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) @@ -168,7 +169,7 @@ VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD] +TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) ; diff --git a/Source/HBIOS/cfg_rcz280.asm b/Source/HBIOS/cfg_rcz280.asm index 9501676b..05a8ce34 100644 --- a/Source/HBIOS/cfg_rcz280.asm +++ b/Source/HBIOS/cfg_rcz280.asm @@ -86,6 +86,7 @@ DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE) BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) @@ -183,7 +184,7 @@ VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD] +TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) ; diff --git a/Source/HBIOS/cfg_rcz80.asm b/Source/HBIOS/cfg_rcz80.asm index b85d6df7..bc61bedb 100644 --- a/Source/HBIOS/cfg_rcz80.asm +++ b/Source/HBIOS/cfg_rcz80.asm @@ -80,6 +80,7 @@ DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE) BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) @@ -172,7 +173,7 @@ VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD] +TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) ; diff --git a/Source/HBIOS/cfg_rph.asm b/Source/HBIOS/cfg_rph.asm index 5010d8a5..65dbd5b8 100644 --- a/Source/HBIOS/cfg_rph.asm +++ b/Source/HBIOS/cfg_rph.asm @@ -84,6 +84,7 @@ DSKYOSC .EQU 3000000 ; OSCILLATOR FREQ FOR DSKYNG (IN HZ) BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) @@ -151,7 +152,7 @@ GDCENABLE .EQU TRUE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) GDCMODE .EQU GDCMODE_RPH ; GDC: GDC MODE: GDCMODE_[NONE|ECB|RPH] GDCMON .EQU GDCMON_EGA ; GDC: GDC MONITOR SETUP: GDCMON_[NONE|CGA|EGA] TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_N8 ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD] +TMSMODE .EQU TMSMODE_N8 ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] diff --git a/Source/HBIOS/cfg_sbc.asm b/Source/HBIOS/cfg_sbc.asm index 48c1de7a..37d80781 100644 --- a/Source/HBIOS/cfg_sbc.asm +++ b/Source/HBIOS/cfg_sbc.asm @@ -78,6 +78,7 @@ DSKYOSC .EQU 3000000 ; OSCILLATOR FREQ FOR DSKYNG (IN HZ) BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) @@ -149,7 +150,7 @@ CVDUMODE .EQU CVDUMODE_ECB ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] CVDUMON .EQU CVDUMON_EGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD] +TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] diff --git a/Source/HBIOS/cfg_scz180.asm b/Source/HBIOS/cfg_scz180.asm index 154cb8e4..cacb5e7a 100644 --- a/Source/HBIOS/cfg_scz180.asm +++ b/Source/HBIOS/cfg_scz180.asm @@ -76,6 +76,7 @@ DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE) BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) @@ -163,7 +164,7 @@ VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD] +TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) ; diff --git a/Source/HBIOS/cfg_zeta.asm b/Source/HBIOS/cfg_zeta.asm index 09d3f31a..ba9642a7 100644 --- a/Source/HBIOS/cfg_zeta.asm +++ b/Source/HBIOS/cfg_zeta.asm @@ -70,6 +70,7 @@ DSKYOSC .EQU 3000000 ; OSCILLATOR FREQ FOR DSKYNG (IN HZ) BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) ; @@ -122,7 +123,7 @@ VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD] +TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) ; diff --git a/Source/HBIOS/cfg_zeta2.asm b/Source/HBIOS/cfg_zeta2.asm index 48c5532d..d5357338 100644 --- a/Source/HBIOS/cfg_zeta2.asm +++ b/Source/HBIOS/cfg_zeta2.asm @@ -81,6 +81,7 @@ DSKYOSC .EQU 3000000 ; OSCILLATOR FREQ FOR DSKYNG (IN HZ) BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) ; @@ -133,7 +134,7 @@ VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|RC|RCV9958|RCKBD] +TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|RCV9958|RCKBD] TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) ; diff --git a/Source/HBIOS/tms.asm b/Source/HBIOS/tms.asm index e9c0255c..2dcc6253 100644 --- a/Source/HBIOS/tms.asm +++ b/Source/HBIOS/tms.asm @@ -153,7 +153,7 @@ TMS_INIT: PRTS("N8$") #ENDIF #IF (TMSMODE == TMSMODE_MSX) - PRTS("RC$") + PRTS("MSX$") #ENDIF #IF (TMSMODE == TMSMODE_MSXKBD) PRTS("RCKBD$") diff --git a/Source/HBIOS/tty.asm b/Source/HBIOS/tty.asm index 5c78e0e6..65d09a49 100644 --- a/Source/HBIOS/tty.asm +++ b/Source/HBIOS/tty.asm @@ -73,8 +73,13 @@ TTY_FNTBL: ; ; TTY_IN: +#IF (VDAEMU_SERKBD != $FF) + LD C,VDAEMU_SERKBD + JP CIO_DISPATCH +#ELSE LD B,BF_VDAKRD ; SET FUNCTION TO KEYBOARD READ JP TTY_VDADISP ; CHAIN TO VDA DISPATCHER +#ENDIF ; ; ; @@ -86,8 +91,13 @@ TTY_OUT: ; ; TTY_IST: +#IF (VDAEMU_SERKBD != $FF) + LD C,VDAEMU_SERKBD + JP CIO_DISPATCH +#ELSE LD B,BF_VDAKST ; SET FUNCTION TO KEYBOARD STATUS JP TTY_VDADISP ; CHAIN TO VDA DISPATCHER +#ENDIF ; ; ; diff --git a/Source/pSys/ReadMe.txt b/Source/pSys/ReadMe.txt index 6c12b3af..c40a7d72 100644 --- a/Source/pSys/ReadMe.txt +++ b/Source/pSys/ReadMe.txt @@ -16,12 +16,12 @@ fill.asm used to complete the track 0 build (see below) Notes: -This adatation runs on a single RomWBWW HBIOS hard disk type device (CF -Cart, SD Card, IDE drive, etc.). The image built (psys.img) should be -copied to your disk media start at the first sector. You can then boot -by selecting the corresponding disk device unit number from the RomWBW -boot loader prompt. The p-System disk image (psys.img) is entirely -different from the RomWBW CP/M-style disk images. +This adaptation runs on a single RomWBW HBIOS hard disk type device (CF +Card, SD Card, IDE drive, etc.). The image built (psys.img) should be +copied to your disk media starting at the first sector. You can then +boot by selecting the corresponding disk device unit number from the +RomWBW boot loader prompt. The p-System disk image (psys.img) is +entirely different from the RomWBW CP/M-style disk images. The boot device hard disk is broken up into 6 logical p-System volumes. These are referred to as p-System slices. A single RomWBW @@ -91,4 +91,51 @@ There is currently no support for floppy drives. Wayne Warthen wwarthen@gmail.com -5:42 PM Sunday, January 15, 2023 \ No newline at end of file +5:42 PM Sunday, January 15, 2023 + +So, it turns out that the serial line support in p-System is seriously +deficient. It insists on polling all of the serial input devices +(console, remote, and printer) when the sytem is idle with the idea +that it will queue up any characters received. I guess the idea is +that this will help in scenarios where characters are coming in too +fast to be processed. However, the basic/default interpreter does not +support the queues! Strangely, it still polls the the devices and +literally discards anything received. This completely undermines the +ability of the underlying hardware which is doing it's own robust +interrupt or hardware based buffering and flow control. + +I have relinked the interpreter (SYSTEM.INTERP) so that it now uses +the BIOS version that supports the queues (BIOS.CRP). This mostly +resolves the situation, but needlessly increases the size of the +interpreter. Additionally, I believe that if the p-System queue gets +full, it will still poll and discard any new characters received. I +have not seen any documentation indicating the size of the queues. + +Seriously, what were they thinking. + +One last thing in case anyone actually reads this. As indicated +above, this is an adaptation of p-System IV.0. It is well documented +that SofTech produced a IV.1 with some nice enhancements (like +subsidiary volumes and decent support for ANSI/VT-100 terminals). I +have been unable to track down the IV.1 distribution media despite +trying very hard. If anyone knows of a source for the media of the +Adapable p-System for Z80, I would love to get hold of it. + +3:58 PM Tuesday, January 17, 2023 + +I forgot to discuss the terminal handling. + +The p-System has a setup program (SETUP.CODE) that is used to define +terminal handling escape sequences. However, it is limited to a +single character to introduce the escape sequences. Since ANSI +and VT-100 escape sequences start with 2 characters, this is +problematic. The BIOS for RomWBW borrows a hack used by Udo Monk. +Specifically, whenever an outbound is seen, a '[' is added +in flight. + +Likewise, it is problematic to define a way to interpret the +arrow keys transmitted by an ANSI/VT-100 terminal. In this case, +the setup program was used to define up/down/left/right like +WordStar does: ^E,^X,^S,^D. + +5:48 PM Tuesday, January 17, 2023 \ No newline at end of file diff --git a/Source/pSys/psys.vol b/Source/pSys/psys.vol index 63b726d88e9cbe7d8161813a6d65771860596f82..358175d32ecd3c6ff2fa1b8cdd9519ed617ab0f0 100644 GIT binary patch delta 43536 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 delta 50366 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 GmHjV5J0PzB diff --git a/Source/ver.inc b/Source/ver.inc index 94b122d9..7da481e4 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,4 +2,4 @@ #DEFINE RMN 1 #DEFINE RUP 1 #DEFINE RTP 0 -#DEFINE BIOSVER "3.1.1-pre.193" +#DEFINE BIOSVER "3.1.1-pre.194" diff --git a/Source/ver.lib b/Source/ver.lib index d1aaa179..58903a71 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 1 rup equ 1 rtp equ 0 biosver macro - db "3.1.1-pre.193" + db "3.1.1-pre.194" endm