From 7f07af1b6254c3831920b69f8a2c7035c327d89e Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sat, 30 Nov 2024 23:27:02 +0800 Subject: [PATCH 1/7] Reimplement Duodyne boot recovery Add feature description in documentation. --- Source/Doc/SystemGuide.md | 19 +++++++++++++++++++ Source/HBIOS/cfg_DUO.asm | 1 + Source/HBIOS/cfg_MASTER.asm | 1 + Source/HBIOS/std.asm | 5 ++--- 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/Source/Doc/SystemGuide.md b/Source/Doc/SystemGuide.md index 4f995772..f74d6e04 100644 --- a/Source/Doc/SystemGuide.md +++ b/Source/Doc/SystemGuide.md @@ -499,6 +499,25 @@ The startup then proceeds very much like the Application Boot process described above. HBIOS is installed in its operating bank and control is passed to the Boot Loader. +## Boot Recovery + +To assist users when driver faults or misconfiguration causes a boot +failure, RomWBW supports a limited recovery cabability. This is +acheived by allowing the user to reboot their machine, loading +a minimal driver set. Implementation of this feature requires a +hardware input "BOOT RECOVERY" button to be available and +appropriate software configuration to be completed in the HBIOS. + +When implemented, holding the "BOOT RECOVERY" button in after a +reset or power cycle will cause the normal driver load process to +be skipped in preference to a minimal set of drivers being loaded. + +Typically this would be: Serial communication, RAM disk and parallel +port IDE interface drivers. + +Platforms supporting this option currently are the MBC, Duodyne and +latter version of the ECB-SBC-V3. + # Driver Model The framework code for bank switching also allows hardware drivers to be diff --git a/Source/HBIOS/cfg_DUO.asm b/Source/HBIOS/cfg_DUO.asm index 0e85f07a..80258306 100644 --- a/Source/HBIOS/cfg_DUO.asm +++ b/Source/HBIOS/cfg_DUO.asm @@ -54,6 +54,7 @@ HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) USELZSA2 .SET TRUE ; ENABLE FONT COMPRESSION TICKFREQ .SET 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) ; +BT_REC_TYPE .SET BT_REC_DUORI ; BOOT RECOVERY METHOD TO USE BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE BOOT_DELAY .SET 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT AUTOCON .SET FALSE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT diff --git a/Source/HBIOS/cfg_MASTER.asm b/Source/HBIOS/cfg_MASTER.asm index a4986b94..77146810 100644 --- a/Source/HBIOS/cfg_MASTER.asm +++ b/Source/HBIOS/cfg_MASTER.asm @@ -54,6 +54,7 @@ HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) USELZSA2 .EQU FALSE ; ENABLE FONT COMPRESSION TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) ; +BT_REC_TYPE .EQU BT_REC_NONE ; BOOT RECOVERY METHOD TO USE BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT AUTOCON .EQU FALSE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index a582f19c..e152b397 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -102,11 +102,10 @@ BT_AUTO .EQU 2 ; AUTO SELECT BOOT_DEFAULT AFTER BOOT_TIMEOUT ; BT_REC_NONE .EQU 0 ; NO RECOVERY MODE BT_REC_FORCE .EQU 1 ; FORCE BOOT RECOVERY MODE -BT_REC_SBC01 .EQU 2 ; ECB-SBCV2 - BIT 1 RTC HIGH +BT_REC_SBCB0 .EQU 2 ; ECB-SBCV2 - BIT 0 RTC HIGH BT_REC_SBC1B .EQU 3 ; ECB-SBCV2 - 1-BIT IO PORT BT_REC_SBCRI .EQU 4 ; ECB-SBCV2 - 16550 UART RING INDICATOR LINE -; -BT_REC_TYPE .EQU BT_REC_NONE ; BOOT RECOVERY METHOD TO USE +BT_REC_DUORI .EQU 5 ; DUO MULTI I/O - TL16C2552FN UART RING INDICATOR LINE ; ; FLOPPY DISK MEDIA SELECTIONS (ID'S MUST BE INDEX OF ENTRY IN FCD_TBL) ; From 2fccb9dac75e6167b75c0bae30d63fae54c312f9 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 1 Dec 2024 09:12:54 +0800 Subject: [PATCH 2/7] MBC recovery mode default, document corrections --- Source/Doc/SystemGuide.md | 6 +++--- Source/HBIOS/cfg_MBC.asm | 1 + Source/HBIOS/std.asm | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Source/Doc/SystemGuide.md b/Source/Doc/SystemGuide.md index f74d6e04..7481fd2e 100644 --- a/Source/Doc/SystemGuide.md +++ b/Source/Doc/SystemGuide.md @@ -502,8 +502,8 @@ and control is passed to the Boot Loader. ## Boot Recovery To assist users when driver faults or misconfiguration causes a boot -failure, RomWBW supports a limited recovery cabability. This is -acheived by allowing the user to reboot their machine, loading +failure, RomWBW supports a limited recovery capability. This is +achieved by allowing the user to reboot their machine, loading a minimal driver set. Implementation of this feature requires a hardware input "BOOT RECOVERY" button to be available and appropriate software configuration to be completed in the HBIOS. @@ -516,7 +516,7 @@ Typically this would be: Serial communication, RAM disk and parallel port IDE interface drivers. Platforms supporting this option currently are the MBC, Duodyne and -latter version of the ECB-SBC-V3. +latter version of the SBC. # Driver Model diff --git a/Source/HBIOS/cfg_MBC.asm b/Source/HBIOS/cfg_MBC.asm index b523be30..9d1ff851 100644 --- a/Source/HBIOS/cfg_MBC.asm +++ b/Source/HBIOS/cfg_MBC.asm @@ -54,6 +54,7 @@ HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) USELZSA2 .SET TRUE ; ENABLE FONT COMPRESSION TICKFREQ .SET 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) ; +BT_REC_TYPE .SET BT_REC_SBC1B ; ENABLE RECOVERY MODE BUTTON BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE BOOT_DELAY .SET 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index e152b397..b309d7af 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -103,7 +103,7 @@ BT_AUTO .EQU 2 ; AUTO SELECT BOOT_DEFAULT AFTER BOOT_TIMEOUT BT_REC_NONE .EQU 0 ; NO RECOVERY MODE BT_REC_FORCE .EQU 1 ; FORCE BOOT RECOVERY MODE BT_REC_SBCB0 .EQU 2 ; ECB-SBCV2 - BIT 0 RTC HIGH -BT_REC_SBC1B .EQU 3 ; ECB-SBCV2 - 1-BIT IO PORT +BT_REC_SBC1B .EQU 3 ; ECB-SBCV2/MBC - 1-BIT IO PORT BT_REC_SBCRI .EQU 4 ; ECB-SBCV2 - 16550 UART RING INDICATOR LINE BT_REC_DUORI .EQU 5 ; DUO MULTI I/O - TL16C2552FN UART RING INDICATOR LINE ; From b0bafb70e41d3d54126893b3e0e34f06e3fde41c Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 1 Dec 2024 10:07:04 +0800 Subject: [PATCH 3/7] Typo --- Source/Apps/Test/DMAmon/dmamon.asm | 2 +- Source/HBIOS/hbios.asm | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Source/Apps/Test/DMAmon/dmamon.asm b/Source/Apps/Test/DMAmon/dmamon.asm index 2842663d..98d7d173 100644 --- a/Source/Apps/Test/DMAmon/dmamon.asm +++ b/Source/Apps/Test/DMAmon/dmamon.asm @@ -362,7 +362,7 @@ SPDDISP:LD DE,DMA_SPD_STR CALL PRTIDXDEA ; call PRTSTRD - .db "\n\rTransfer Mode: $" ; DIPLAY TRANSFER + .db "\n\rTransfer Mode: $" ; DISPLAY TRANSFER LD a,(dmaxfer) ; MODE LD DE,DMA_XFRMODE CALL PRTIDXDEA diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index eaa43d09..4136d20d 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -2753,7 +2753,7 @@ Z280_TC .EQU CPUOSC / 4 / 50 / 2 ; TIME CONSTANT LD (HB_BOOT_REC),A ; SAVE FOR LATER #ENDIF #IF ((PLATFORM == PLT_SBC) | (PLATFORM == PLT_MBC)) - #IF (BT_REC_TYPE == BT_REC_SBC01) + #IF (BT_REC_TYPE == BT_REC_SBCB0) LD A,%00100000 ; DISABLE RTC AND OUT (RTCIO),A ; DRQ DRIVER READ IN A,(RTCIO) ; BIT 0 (DRQ). @@ -2776,6 +2776,17 @@ SAVE_REC_M: LD A,0 ; BIT 6 JR Z,SAVE_REC_M ; IS RECOVERY MODE LD A,1 +SAVE_REC_M: + LD (HB_BOOT_REC),A ; SAVE FOR LATER + #ENDIF + #ENDIF + #IF ((PLATFORM == PLT_DUO) + #IF (BT_REC_TYPE == BT_REC_DUORI) + IN A,($78 + 6) ; UART_MSR MODEM + BIT 6,A ; STATUS REGISTER + LD A,0 ; BIT 6 + JR Z,SAVE_REC_M ; IS RECOVERY MODE + LD A,1 SAVE_REC_M: LD (HB_BOOT_REC),A ; SAVE FOR LATER #ENDIF From e6b2cf7f55d8ce980c51fbad0fa87de0446af970 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 1 Dec 2024 10:27:03 +0800 Subject: [PATCH 4/7] Typos --- Source/HBIOS/hbios.asm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 4136d20d..be3e45fa 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -319,7 +319,7 @@ SUPCTS .EQU FALSE ; SUPPRESS CTS DURING HBIOS BOOT ; RTCDEF .EQU 0 ; INIT DEF RTC LATCH VALUE ; -; THE SC126 HAS AN I2C CIRCUIT AND THERE IS NO ASSOCAITED +; THE SC126 HAS AN I2C CIRCUIT AND THERE IS NO ASSOCIATED ; DRIVER, SO WE SET THAT BIT HERE. IT IS SET FOR ALL OF THE SCXXX ; SYSTEMS, BUT IS UNUSED ON ALL BUT THE SC126. IT DOES NO HARM. ; @@ -2348,7 +2348,7 @@ HB_CPU1: ; EARLY DRIVER INITIALIZATION ;-------------------------------------------------------------------------------------------------- ; -; SOME DRIVERS NEED TO BE CALLED AS EARLY AS WE CAN ONE AN OPERATING +; SOME DRIVERS NEED TO BE CALLED AS EARLY AS WE CAN ONCE AN OPERATING ; ENVIRONMENT IS ESTABLISHED. ; #IF (CPUFAM == CPU_EZ80) From a0ae357d9b6d5aea43a3d4214183edf62d49e104 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 1 Dec 2024 13:26:01 +0800 Subject: [PATCH 5/7] Pretty Platfrom Boot Banner Defaults to off due to HBIOS space considerations. Add BOOT_PRETTY .SET TRUE to custom configuration to enable. --- Source/HBIOS/cfg_MASTER.asm | 1 + Source/HBIOS/hbios.asm | 7 ++ Source/HBIOS/plt_pretty.inc | 192 ++++++++++++++++++++++++++++++++++++ Source/HBIOS/std.asm | 2 +- 4 files changed, 201 insertions(+), 1 deletion(-) create mode 100644 Source/HBIOS/plt_pretty.inc diff --git a/Source/HBIOS/cfg_MASTER.asm b/Source/HBIOS/cfg_MASTER.asm index 77146810..61ac19ae 100644 --- a/Source/HBIOS/cfg_MASTER.asm +++ b/Source/HBIOS/cfg_MASTER.asm @@ -57,6 +57,7 @@ TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) BT_REC_TYPE .EQU BT_REC_NONE ; BOOT RECOVERY METHOD TO USE BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +BOOT_PRETTY .EQU FALSE ; BOOT WITH PRETTY PLATFORM NAME AUTOCON .EQU FALSE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT ; CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index be3e45fa..2f0f9e7a 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -2934,6 +2934,9 @@ NXTMIO: LD A,(HL) ; DISPLAYED BEFORE INTRODUCING INTERRUPTS. IF THE SYSTEM CRASHES ; AFTER DISPLAYING THE BANNER, INTERRUPT INTEGRITY SHOULD BE SUSPECTED. ; +#IF (BOOT_PRETTY) + PRTX(STR_PLT_PRETTY) +#ENDIF PRTX(STR_BANNER) ; ; DISPLAY HBIOS MUTEX ENABLED MESSAGE @@ -9467,6 +9470,10 @@ STR_PANIC .TEXT "\r\n>>> PANIC: $" STR_SYSCHK .TEXT "\r\n>>> SYSCHK: $" STR_CONTINUE .TEXT "\r\nContinue (Y/N)? $" ; +#IF (BOOT_PRETTY) +#INCLUDE "plt_pretty.inc" +#ENDIF +; HB_CURSEC .DB 0 ; CURRENT SECOND (TEMP) ; HB_BCDTMP .FILL 5,0 ; BCD NUMBER STORAGE (TEMP) diff --git a/Source/HBIOS/plt_pretty.inc b/Source/HBIOS/plt_pretty.inc new file mode 100644 index 00000000..350e8d2b --- /dev/null +++ b/Source/HBIOS/plt_pretty.inc @@ -0,0 +1,192 @@ +; Pretty platform boot banner. +; +; Defaults to off due to HBIOS space considerations. +; Add BOOT_PRETTY .SET TRUE to your custom configuration to enable. +; +; Inspired by Dan Gardeners boot messages +; +; From the website: +; http://patorjk.com/software/taag/#p=display&f=Graffiti&t=Type%20Something%20 +; Font is "Small", width and height full. +; +; Manual adjustments made to cater for assembler text escape directives, +; 80 column line length and kerning. +; E.g. +; \ becomes \\ +; ' becomes * +; lines ending with \ need a trailing space. +; +; ECB SBC Z80 +; ZETA Z80 +; ZETA2 Z80 +; N8 ZS180 +; ECB MK4 Z180 +; UNABIOS +; RCBUS Z80 +; RCBUS Z180 +; RCBUS EASY Z80 +; RCBUS SC Z180 +; DYNO uATX +; RCBUS Z280 +; MBC Z80 +; RHYOPHYRE +; Z80RETRO +; S100 Z180 +; DUODYNE +; HEATH Z80 +; mITX +; MONSPUTER +; GENESIS Z180 +; NABU +; S100 FPGA Z80 +; RCBUS eZ80 +; +STR_PLT_PRETTY: +; + .DB 10,13 +; +#IF (PLATFORM == PLT_SBC) + .DB " ___ ___ ___ ___ ___ ___ ____ ___ __",10,13 + .DB "| __| / __| | _ ) / __| | _ ) / __| |_ / ( _ ) / \\ ",10,13 + .DB "| _| | (__ | _ \\ \\__ \\ | _ \\ | (__ / / / _ \\ | () |",10,13 + .DB "|___| \\___| |___/ |___/ |___/ \\___| /___| \\___/ \\__/",10,13 +#ENDIF +#IF (PLATFORM == PLT_ZETA) + .DB " ____ ___ _____ _ ____ ___ __",10,13 + .DB "|_ / | __| |_ _| /_\\ |_ / ( _ ) / \\ ",10,13 + .DB " / / | _| | | / _ \\ / / / _ \\ | () |",10,13 + .DB "/___| |___| |_| /_/ \\_\\ /___| \\___\/ \\__/",10,13 +#ENDIF +#IF (PLATFORM == PLT_ZETA2) + .DB " ____ ___ _____ _ ___ ____ ___ __",10,13 + .DB "|_ / | __| |_ _| /_\\ |_ ) |_ / ( _ ) / \\ ",10,13 + .DB " / / | _| | | / _ \\ / / / / / _ \\ | () |\\ ",10,13 + .DB "/___| |___| |_| /_/ \\_\\ /___| /___| \\___/ \\__/",10,13 +#ENDIF +#IF (PLATFORM == PLT_N8) + .DB " _ _ ___ ____ ___ _ ___ __",10,13 + .DB "| \\| | ( _ ) |_ / / __| / | ( _ ) / \\ ",10,13 + .DB "| .` | / _ \\ / / \\__ \\ | | / _ \\ | () |",10,13 + .DB "|_|\\_| \\___/ /___| |___/ |_| \\___/ \\__/",10,13 +#ENDIF +#IF (PLATFORM == PLT_MK4) + .DB " ___ ___ ___ __ __ _ __ _ _ ____ _ ___ __",10,13 + .DB "| __| / __| | _ ) | \\/ | | |/ / | | | |_ / / | ( _ ) / \\ ",10,13 + .DB "| _| | (__ | _ \\ | |\\/| | | * < |_ _| / / | | / _ \\ | () |",10,13 + .DB "|___| \\___| |___/ |_| |_| |_|\\_\\ |_| /___| |_| \\___/ \\__/",10,13 +#ENDIF +#IF (PLATFORM == PLT_UNA) + .DB " _ _ _ _ _ ___ ___ ___ ___",10,13 + .DB "| | | | | \\| | /_\\ | _ ) |_ _| / _ \\ / __|",10,13 + .DB "| |_| | | .` | / _ \\ | _ \\ | | | (_) | \\__ \\ ",10,13 + .DB " \\___/ |_|\\_| /_/ \\_\\ |___/ |___| \\___/ |___/",10,13 +#ENDIF +#IF (PLATFORM == PLT_RCZ80) + .DB " ___ ___ ___ _ _ ___ ____ ___ __",10,13 + .DB "| _ \\ / __| | _ ) | | | | / __| |_ / ( _ ) / \\ ",10,13 + .DB "| / | (__ | _ \\ | |_| | \\__ \\ / / / _ \\ | () |",10,13 + .DB "|_|_\\ \\___| |___/ \\___/ |___/ /___| \\___/ \\__/",10,13 +#ENDIF +#IF (PLATFORM == PLT_RCZ180) + .DB " ___ ___ ___ _ _ ___ ____ _ ___ __",10,13 + .DB "| _ \\ / __| | _ ) | | | | / __| |_ / / | ( _ ) / \\ ",10,13 + .DB "| / | (__ | _ \\ | |_| | \\__ \\ / / | | / _ \\ | () |",10,13 + .DB "|_|_\\ \\___| |___/ \\___/ |___/ /___| |_| \\___/ \\__/",10,13 +#ENDIF +#IF (PLATFORM == PLT_EZZ80) + .DB " ___ ___ ___ _ _ ___ ___ _ ___ __ __ ____ ___ __",10,13 + .DB "| _ \\ / __| | _ ) | | | | / __| | __| /_\\ / __| \\\\ / / |_ / ( _ ) / \\ ",10,13 + .DB "| / | (__ | _ \\ | |_| | \\__ \\ | _| / _ \\ \\__ \\ \\ V / / / / _ \\ | () |",10,13 + .DB "|_|_\\ \\___| |___/ \\___/ |___/ |___|/_/ \\_\\|___/ |_| /___| \\___/ \\__/",10,13 +#ENDIF +#IF (PLATFORM == PLT_SCZ180) + .DB " ___ ___ ___ _ _ ___ ___ ___ ____ _ ___ __",10,13 + .DB "| _ \\ / __| | _ ) | | | | / __| / __| / __| |_ / / | ( _ ) / \\ ",10,13 + .DB "| / | (__ | _ \\ | |_| | \\__ \\ \\__ \\ | (__ / / | | / _ \\ | () |",10,13 + .DB "|_|_\\ \\___| |___/ \\___/ |___/ |___/ \\___| /___| |_| \\___/ \\__/",10,13 +#ENDIF +#IF (PLATFORM == PLT_DYNO) + .DB " ___ __ __ _ _ ___ _ _____ __ __",10,13 + .DB "| \\ \\ \\ / / | \\| | / _ \\ _ _ /_\\ |_ _| \\ \\/ /",10,13 + .DB "| |) | \\ V / | .* | | (_) | | || | / _ \\ | | > <",10,13 + .DB "|___/ |_| |_|\\_| \\___/ \\_,_| /_/ \\_\\ |_| /_/\\_\\ ",10,13 +#ENDIF +#IF (PLATFORM == PLT_RCZ280) + .DB " ___ ___ ___ _ _ ___ ____ ___ ___ __",10,13 + .DB "| _ \\ / __| | _ ) | | | | / __| |_ / |_ ) ( _ ) / \\ ",10,13 + .DB "| / | (__ | _ \\ | |_| | \\__ \\ / / / / / _ \\ | () |",10,13 + .DB "|_|_\\ \\___| |___/ \\___/ |___/ /___| /___| \\___/ \\__/",10,13 +#ENDIF +#IF (PLATFORM == PLT_MBC) + .DB " __ __ ___ ___ ____ ___ __",10,13 + .DB "| \\/ | | _ ) / __| |_ / ( _ ) / \\ ",10,13 + .DB "| |\\/| | | _ \\ | (__ / / / _ \\ | () |",10,13 + .DB "|_| |_| |___/ \\___| /___| \\___/ \\__/",10,13 +#ENDIF +#IF (PLATFORM == PLT_RPH) + .DB " ___ _ _ __ __ ___ ___ _ _ __ __ ___ ___",10,13 + .DB "| _ \\ | || | \\ \\ / / / _ \\ | _ \\ | || | \\ \\ / / | _ \\ | __|",10,13 + .DB "| / | __ | \\ V / | (_) | | _/ | __ | \\ V / | / | _|",10,13 + .DB "|_|_\\ |_||_| |_| \\___/ |_| |_||_| |_| |_|_\\ |___|",10,13 +#ENDIF +#IF (PLATFORM == PLT_Z80RETRO) + .DB " ____ ___ __ ___ ___ _____ ___ ___",10,13 + .DB "|_ / ( _ ) / \\ | _ \\ | __| |_ _| | _ \\ / _ \\ ",10,13 + .DB " / / / _ \\ | () | | / | _| | | | / | (_) |",10,13 + .DB "/___| \\___/ \\__/ |_|_\\ |___| |_| |_|_\\ \\___/",10,13 +#ENDIF +#IF (PLATFORM == PLT_S100) + .DB " ___ _ __ __ ____ _ ___ __",10,13 + .DB "/ __| / | / \\ / \\ |_ / / | ( _ ) / \\ ",10,13 + .DB "\\__ \\ | | | () | | () | / / | | / _ \\ | () |",10,13 + .DB "|___/ |_| \\__/ \\__/ /___| |_| \\___/ \\__/",10,13 +#ENDIF +#IF (PLATFORM == PLT_DUO) + .DB " ___ _ _ ___ ___ __ __ _ _ ___",10,13 + .DB "| \\ | | | | / _ \\ | \\ \\ \\ / / | \\| | | __|",10,13 + .DB "| |) | | |_| | | (_) | | |) | \\ V / | .` | | _|",10,13 + .DB "|___/ \\___/ \\___/ |___/ |_| |_|\\_| |___|",10,13 +#ENDIF +#IF (PLATFORM == PLT_HEATH) + .DB " _ _ ___ _ _____ _ _ ____ ___ __",10,13 + .DB "| || | | __| /_\\ |_ _| | || | |_ / ( _ ) / \\ ",10,13 + .DB "| __ | | _| / _ \\ | | | __ | / / / _ \\ | () |",10,13 + .DB "|_||_| |___| /_/ \\_\\ |_| |_||_| /___| \\___/ \\__/",10,13 +#ENDIF +#IF (PLATFORM == PLT_EPITX) + .DB " ___ _____ __ __",10,13 + .DB " _ __ |_ _| |_ _| \\ \\/ /",10,13 + .DB "| ' \\ | | | | > <\n\r" + .DB "|_|_|_| |___| |_| /_/\\_\\ ",10,13 +#ENDIF +#IF (PLATFORM == PLT_MON) + .DB " __ __ ___ _ _ ___ ___ _ _ _____ ___ ___",10,13 + .DB "| \\/ | / _ \\ | \\| | / __| | _ \\ | | | | |_ _| | __| | _ \\ ",10,13 + .DB "| |\\/| | | (_) | | .` | \\__ \\ | _/ | |_| | | | | _| | /",10,13 + .DB "|_| |_| \\___/ |_|\\_| |___/ |_| \\___/ |_| |___| |_|_\\ ",10,13 +#ENDIF +#IF (PLATFORM == PLT_GMZ180) + .DB " ___ ___ _ _ ___ ___ ___ ___ ____ _ ___ __",10,13 + .DB " / __| | __| | \\| | | __| / __| |_ _| / __| |_ / / | ( _ ) / \\ ",10,13 + .DB "| (_ | | _| | .` | | _| \\__ \\ | | \\__ \\ / / | | / _ \\ | () |",10,13 + .DB " \\___| |___| |_|\\_| |___| |___/ |___| |___/ /___| |_| \\___/ \\__/",10,13 +#ENDIF +#IF (PLATFORM == PLT_NABU) + .DB " _ _ _ ___ _ _",10,13 + .DB "| \\| | /_\\ | _ ) | | | |",10,13 + .DB "| .` | / _ \\ | _ \\ | |_| |",10,13 + .DB "|_|\\_| /_/ \\_\\ |___/ \\___/",10,13 +#ENDIF +#IF (PLATFORM == PLT_FZ80) + .DB " ___ _ __ __ ___ ___ ___ _ ____ ___ __",10,13 + .DB "/ __| / | / \\ / \\ | __| | _ \\ / __| /_\\ |_ / ( _ ) / \\ ",10,13 + .DB "\\__ \\ | | | () | | () | | _| | _/ | (_ | / _ \\ / / / _ \\ | () |",10,13 + .DB "|___/ |_| \\__/ \\__/ |_| |_| \\___|/_/ \\_\\ /___| \\___/ \\__/",10,13 +#ENDIF +#IF (PLATFORM == PLT_RCEZ80) + .DB " ___ ___ ___ _ _ ___ ____ ___ __",10,13 + .DB "| _ \\ / __| | _ ) | | | | / __| ___ |_ / ( _ ) / \\ ",10,13 + .DB "| / | (__ | _ \\ | |_| | \\__ \\ / -_) / / / _ \\ | () |",10,13 + .DB "|_|_\\ \\___| |___/ \\___/ |___/ \\___| /___| \\___/ \\__/",10,13 +#ENDIF + .DB "$" diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index b309d7af..0e5903c7 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -25,7 +25,7 @@ ; 21. GMZ180 Doug Jacksons' Genesis Z180 System ; 22. NABU NABU w/ Les Bird's RomWBW Option Board ; 23. FZ80 S100 Computers FPGA Z80 -; 24. RCZ80 RCBus eZ80 +; 24. RCEZ80 RCBus eZ80 ; ; ; INCLUDE BUILD VERSION From 65413e50d13896c9d600a886c8fe96a05d224bab Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 1 Dec 2024 21:19:33 +0800 Subject: [PATCH 6/7] Fix initialization table setup for duo recovery --- Source/HBIOS/cfg_MASTER.asm | 1 + Source/HBIOS/hbios.asm | 6 +- Source/HBIOS/kbd.asm | 49 ++------- Source/HBIOS/ps2iface.inc | 207 ++++++++++++++++++++++++++++++++++++ Source/HBIOS/tms.asm | 2 +- 5 files changed, 223 insertions(+), 42 deletions(-) create mode 100644 Source/HBIOS/ps2iface.inc diff --git a/Source/HBIOS/cfg_MASTER.asm b/Source/HBIOS/cfg_MASTER.asm index 61ac19ae..367a234d 100644 --- a/Source/HBIOS/cfg_MASTER.asm +++ b/Source/HBIOS/cfg_MASTER.asm @@ -64,6 +64,7 @@ CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW CPUOSC .EQU 1000000 ; CPU OSC FREQ IN MHZ INTMODE .EQU 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +INTPS2KBD .EQU FALSE ; USE INTERRUPTS FOR PS2 KEYBOARD DEFSERCFG .EQU SER_9600_8N1 ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 2f0f9e7a..8e4ecb25 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -3392,7 +3392,7 @@ IS_REC_M1: CALL CALLLIST ; ;-------------------------------------------------------------------------------------------------- -; NV-SWITCH INITITIALISATION +; NV-SWITCH INITIALISATION ; Requires functional RTC NVR ;-------------------------------------------------------------------------------------------------- ; @@ -3818,7 +3818,7 @@ INITSYS4: ; HB_PCINIT_REC: ; - #IF ((PLATFORM == PLT_SBC) | (PLATFORM == PLT_MBC)) + #IF ((PLATFORM == PLT_SBC) | (PLATFORM == PLT_MBC) | (PLATFORM == PLT_DUO)) .DW UART_PREINIT ; .DW CALLDUMMY #ENDIF @@ -3827,7 +3827,7 @@ HB_PCINITRLEN .EQU (($ - HB_PCINIT_REC) / 2) ; HB_INIT_REC: ; - #IF ((PLATFORM == PLT_SBC) | (PLATFORM == PLT_MBC)) + #IF ((PLATFORM == PLT_SBC) | (PLATFORM == PLT_MBC) | (PLATFORM == PLT_DUO)) .DW UART_INIT .DW MD_INIT .DW PPIDE_INIT diff --git a/Source/HBIOS/kbd.asm b/Source/HBIOS/kbd.asm index 75171cb0..dd30be91 100644 --- a/Source/HBIOS/kbd.asm +++ b/Source/HBIOS/kbd.asm @@ -59,10 +59,18 @@ KBD_IDLE .DB 0 ; IDLE COUNT DEVECHO "KBD: ENABLED\n" ; ;__________________________________________________________________________________________________ +; HARDWARE LEVEL INTERFACE +;__________________________________________________________________________________________________ +; +#INCLUDE "ps2iface.inc" +;__________________________________________________________________________________________________ ; KEYBOARD INITIALIZATION ;__________________________________________________________________________________________________ ; KBD_INIT: +#IF (INTPS2KBD) + CALL KBDQINIT ; INITIALIZE QUEUE +#ENDIF CALL NEWLINE ; FORMATTING PRTS("KBD: IO=0x$") LD A,(IY+KBD_DAT) @@ -159,35 +167,6 @@ KBD_FLUSH: RET ; ;__________________________________________________________________________________________________ -; HARDWARE INTERFACE -;__________________________________________________________________________________________________ -; -;__________________________________________________________________________________________________ -KBD_IST: -; -; KEYBOARD INPUT STATUS -; A=0, Z SET FOR NOTHING PENDING, OTHERWISE DATA PENDING -; - LD C,(IY+KBD_ST) ; STATUS PORT - EZ80_IO - IN A,(C) ; GET STATUS - AND $01 ; ISOLATE INPUT PENDING BIT - RET -; -;__________________________________________________________________________________________________ -KBD_OST: -; -; KEYBOARD OUTPUT STATUS -; A=0, Z SET FOR NOT READY, OTHERWISE READY TO WRITE -; - LD C,(IY+KBD_ST) ; STATUS PORT - EZ80_IO - IN A,(C) ; GET STATUS - AND $02 ; ISOLATE OUTPUT EMPTY BIT - XOR $02 ; FLIP IT FOR APPROPRIATE RETURN VALUES - RET -; -;__________________________________________________________________________________________________ KBD_PUTCMD: ; ; PUT A CMD BYTE FROM A TO THE KEYBOARD INTERFACE WITH TIMEOUT @@ -211,9 +190,7 @@ KBD_PUTCMD1: CALL PC_GT CALL PRTHEXBYTE #ENDIF - LD C,(IY+KBD_CMD) ; COMMAND PORT - EZ80_IO - OUT (C),A ; WRITE IT + CALL KBD_CMDOUT ; OUTPUT CMD TO PORT KBD_PUTCMD2: XOR A ; SIGNAL SUCCESS RET @@ -241,9 +218,7 @@ KBD_PUTDATA1: CALL PC_GT CALL PRTHEXBYTE #ENDIF - LD C,(IY+KBD_DAT) ; DATA PORT - EZ80_IO - OUT (C),A ; WRITE IT + CALL KBD_DTAOUT ; WRITE IT KBD_PUTDATA2: XOR A ; SIGNAL SUCCESS RET @@ -262,9 +237,7 @@ KBD_GETDATA0: XOR A ; NO DATA, RETURN ZERO RET KBD_GETDATA1: - LD C,(IY+KBD_DAT) ; DATA PORT - EZ80_IO - IN A,(C) ; GET THE DATA VALUE + CALL KBD_IN ; GET A KEY #IF (KBDTRACE >= 2) PUSH AF CALL PC_SPACE diff --git a/Source/HBIOS/ps2iface.inc b/Source/HBIOS/ps2iface.inc new file mode 100644 index 00000000..d5d93776 --- /dev/null +++ b/Source/HBIOS/ps2iface.inc @@ -0,0 +1,207 @@ +;__________________________________________________________________________________________________ +; HARDWARE INTERFACE FOR POLLED AND INTERRUPT DRIVEN PS2 KEYBOARD. +; +; IN POLLED MODE THE KEYBOARD DEVICE IS IDENTIFED BY THE TABLE POINTED TO BY IY +; IN INTERRUPT MODE THE KEYBOARD DEVICE IS UNKNOWN SO PREDEFINED PORT VALUES ARE USED. +;__________________________________________________________________________________________________ +; +#IF (INTPS2KBD) +KBDPORT .DB PS2PORT+1 ; READ - KEYBOARD STATUS : WRITE - COMMAND REGISTER + .DB PS2PORT ; READ / WRITE DATA PORT + +;__________________________________________________________________________________________________ +; KEYBOARD QUEUE FOR INTERRUPTS +;__________________________________________________________________________________________________ +; +; +KBDQSIZ .EQU 8 ; MUST BE POWER OF TWO, <=128 +KBDQGETX .DB 0 ; QUEUE INDEX +KBDQPUTX .DB 0 ; QUEUE INDEX + .DB $55 ; GUARD BYTE FOR DEBUGGING +KBDQ .FILL KBDQSIZ,0 ; CIRCULAR KEYBOARD BUFFER + .DB $AA ; GUARD BYTE FOR DEBUGGING + +KBDQINIT: ; RESET THE QUEUE TO EMPTY + XOR A + LD (KBDQGETX),A + LD (KBDQPUTX),A + RET +; +;__________________________________________________________________________________________________ +; KEYBOARD INTERRUPT VECTOR +;__________________________________________________________________________________________________ +; +KBD_INT: + LD A,(KBDPORT+KBD_ST) ; READ CONTROLLER STATUS + LD C,A + IN A,(C) + AND 1 + RET Z + LD A,(KBDPORT+KBD_DAT) ; GET THE RESPONSE + LD C,A + IN A,(C) +; CALL KBDQPUSH ; SAVE KEYBOARD SCAN CODE +; RET +; +;__________________________________________________________________________________________________ +; ADD A BYTE TO THE KEYBOARD QUEUE +;__________________________________________________________________________________________________ +; +KBDQPUSH: ; ADD A SCAN CODE TO THE QUEUE + PUSH AF + CALL KBDQFULL + JR Z,KBDQISF ; EXIT IF THE QUEUE IS FULL +; + LD HL,KBDQPUTX + LD A,(HL) ; CREATE QUEUE INDEX + AND KBDQSIZ-1 + INC (HL) ; UPDATE INDEX +; + LD HL,KBDQ ; INDEX INTO THE QUEUE + LD B,0 + LD C,A + ADD HL,BC + POP AF + LD (HL),A ; SAVE THE CHARACTER IN THE QUEUE +; + RET +; +KBDQISF:POP AF + RET + +KBDQFULL: ; RETURN Z IF QUEUE IS FULL + CALL KBDQLEN ; RETURN NZ IF STILL SPACE IN QUEUE + SUB KBDQSIZ + RET +#ENDIF +;__________________________________________________________________________________________________ +; KEYBOARD READ +;__________________________________________________________________________________________________ +; +#IF (INTPS2KBD) +; +; RETURN A BYTE TO FROM KEYBOARD QUEUE +; +KBD_IN: +KBDQPOP: + CALL KBDQLEN + RET Z ; EXIT IF THE QUEUE IS EMPTY +; + LD HL,KBDQGETX + LD A,(HL) ; CREATE QUEUE INDEX + AND KBDQSIZ-1 + INC (HL) ; UPDATE INDEX +; + LD HL,KBDQ ; INDEX INTO THE QUEUE + LD B,0 + LD C,A + ADD HL,BC + LD A,(HL) ; GET THE CHARACTER FROM THE QUEUE +; LD (HL),B ; DEBUG - CLEAN QUEUE +; + RET +; +#ELSE +; +; RETURN A BYTE FROM THE KEYBOARD PORT +; +KBD_IN: + IN A,(C) ; GET THE DATA VALUE + LD C,(IY+KBD_DAT) ; DATA PORT + EZ80_IO + IN A,(C) ; GET THE DATA VALUE + RET +#ENDIF +; +;__________________________________________________________________________________________________ +; KEYBOARD INPUT STATUS +;__________________________________________________________________________________________________ +; +#IF (INTPS2KBD) +KBD_IST: +KBDQLEN: ; EXIT WITH NUMBER OF CHARACTERS IN QUEUE + LD A,(KBDQPUTX) ; Z STATUS AND ZERO IF NONE + LD HL,KBDQGETX + SUB (HL) + RET +#ELSE +KBD_IST: ; A=0, Z SET FOR NOTHING PENDING, OTHERWISE DATA PENDING + LD C,(IY+KBD_ST) ; STATUS PORT + EZ80_IO + IN A,(C) ; GET STATUS + AND $01 ; ISOLATE INPUT PENDING BIT + RET +#ENDIF +; +;__________________________________________________________________________________________________ +; OUTPUT TO KEYBOARD COMMAND PORT +;__________________________________________________________________________________________________ +; +KBD_CMDOUT: + LD C,(IY+KBD_CMD) ; COMMAND PORT + EZ80_IO + OUT (C),A + RET +;__________________________________________________________________________________________________ +; OUTPUT TO KEYBOARD COMMAND DATA +;__________________________________________________________________________________________________ +; +KBD_DTAOUT: + LD C,(IY+KBD_DAT) ; DATA PORT + EZ80_IO + OUT (C),A + RET +;__________________________________________________________________________________________________ +; KEYBOARD OUTPUT STATUS - A=0, Z SET FOR NOT READY, OTHERWISE READY TO WRITE +;__________________________________________________________________________________________________ +; +KBD_OST: + LD C,(IY+KBD_ST) ; STATUS PORT + EZ80_IO + IN A,(C) ; GET STATUS + AND $02 ; ISOLATE OUTPUT EMPTY BIT + XOR $02 ; FLIP IT FOR APPROPRIATE RETURN VALUES + RET +; +;__________________________________________________________________________________________________ +; DEBUG QUEUE +;__________________________________________________________________________________________________ +; +#IF ((INTPS2KBD & (1)) +KBDQDBG: + PUSH HL + PUSH DE + PUSH BC + PUSH AF + + CALL NEWLINE ; PRINT QUEUE CONTENTS WITH PRE AND POST GUARD BYTES + LD B,KBDQSIZ+2 + LD HL,KBDQ-1 +KBDQPRT: + LD A,(HL) + CALL PRTHEXBYTE + INC HL + DJNZ KBDQPRT + + LD A,' ' ; PRINT QUEUE INDEX + CALL COUT + LD A,(KBDQGETX) + CALL PRTHEXBYTE + + LD A,' ' ; PRINT QUEUE INDEX + CALL COUT + LD A,(KBDQPUTX) + CALL PRTHEXBYTE + + LD A,' ' ; PRINT # SCAN CODES IN QUEUE + CALL COUT + CALL KBDQLEN + CALL PRTHEXBYTE + CALL NEWLINE + + POP AF + POP BC + POP DE + POP HL + RET +#ENDIF diff --git a/Source/HBIOS/tms.asm b/Source/HBIOS/tms.asm index e8f57b37..858bd4c5 100644 --- a/Source/HBIOS/tms.asm +++ b/Source/HBIOS/tms.asm @@ -267,7 +267,7 @@ TMS_INIT: LD A,TMS_DATREG CALL PRTHEXBYTE CALL TMS_PROBE ; CHECK FOR HW EXISTENCE - JR Z,TMS_INIT1 ; CONTINUE IF PRESENT + JR TMS_INIT1 ; CONTINUE IF PRESENT ; ; *** HARDWARE NOT PRESENT *** PRTS(" NOT PRESENT$") From 925b2870eba03d19c21350a608c59c7a5ad0bb67 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 1 Dec 2024 22:00:45 +0800 Subject: [PATCH 7/7] revert bad push --- Source/HBIOS/cfg_MASTER.asm | 1 - Source/HBIOS/kbd.asm | 49 +++++++-- Source/HBIOS/ps2iface.inc | 207 ------------------------------------ Source/HBIOS/tms.asm | 2 +- 4 files changed, 39 insertions(+), 220 deletions(-) delete mode 100644 Source/HBIOS/ps2iface.inc diff --git a/Source/HBIOS/cfg_MASTER.asm b/Source/HBIOS/cfg_MASTER.asm index 367a234d..61ac19ae 100644 --- a/Source/HBIOS/cfg_MASTER.asm +++ b/Source/HBIOS/cfg_MASTER.asm @@ -64,7 +64,6 @@ CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW CPUOSC .EQU 1000000 ; CPU OSC FREQ IN MHZ INTMODE .EQU 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) -INTPS2KBD .EQU FALSE ; USE INTERRUPTS FOR PS2 KEYBOARD DEFSERCFG .EQU SER_9600_8N1 ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) ; RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) diff --git a/Source/HBIOS/kbd.asm b/Source/HBIOS/kbd.asm index dd30be91..75171cb0 100644 --- a/Source/HBIOS/kbd.asm +++ b/Source/HBIOS/kbd.asm @@ -59,18 +59,10 @@ KBD_IDLE .DB 0 ; IDLE COUNT DEVECHO "KBD: ENABLED\n" ; ;__________________________________________________________________________________________________ -; HARDWARE LEVEL INTERFACE -;__________________________________________________________________________________________________ -; -#INCLUDE "ps2iface.inc" -;__________________________________________________________________________________________________ ; KEYBOARD INITIALIZATION ;__________________________________________________________________________________________________ ; KBD_INIT: -#IF (INTPS2KBD) - CALL KBDQINIT ; INITIALIZE QUEUE -#ENDIF CALL NEWLINE ; FORMATTING PRTS("KBD: IO=0x$") LD A,(IY+KBD_DAT) @@ -167,6 +159,35 @@ KBD_FLUSH: RET ; ;__________________________________________________________________________________________________ +; HARDWARE INTERFACE +;__________________________________________________________________________________________________ +; +;__________________________________________________________________________________________________ +KBD_IST: +; +; KEYBOARD INPUT STATUS +; A=0, Z SET FOR NOTHING PENDING, OTHERWISE DATA PENDING +; + LD C,(IY+KBD_ST) ; STATUS PORT + EZ80_IO + IN A,(C) ; GET STATUS + AND $01 ; ISOLATE INPUT PENDING BIT + RET +; +;__________________________________________________________________________________________________ +KBD_OST: +; +; KEYBOARD OUTPUT STATUS +; A=0, Z SET FOR NOT READY, OTHERWISE READY TO WRITE +; + LD C,(IY+KBD_ST) ; STATUS PORT + EZ80_IO + IN A,(C) ; GET STATUS + AND $02 ; ISOLATE OUTPUT EMPTY BIT + XOR $02 ; FLIP IT FOR APPROPRIATE RETURN VALUES + RET +; +;__________________________________________________________________________________________________ KBD_PUTCMD: ; ; PUT A CMD BYTE FROM A TO THE KEYBOARD INTERFACE WITH TIMEOUT @@ -190,7 +211,9 @@ KBD_PUTCMD1: CALL PC_GT CALL PRTHEXBYTE #ENDIF - CALL KBD_CMDOUT ; OUTPUT CMD TO PORT + LD C,(IY+KBD_CMD) ; COMMAND PORT + EZ80_IO + OUT (C),A ; WRITE IT KBD_PUTCMD2: XOR A ; SIGNAL SUCCESS RET @@ -218,7 +241,9 @@ KBD_PUTDATA1: CALL PC_GT CALL PRTHEXBYTE #ENDIF - CALL KBD_DTAOUT ; WRITE IT + LD C,(IY+KBD_DAT) ; DATA PORT + EZ80_IO + OUT (C),A ; WRITE IT KBD_PUTDATA2: XOR A ; SIGNAL SUCCESS RET @@ -237,7 +262,9 @@ KBD_GETDATA0: XOR A ; NO DATA, RETURN ZERO RET KBD_GETDATA1: - CALL KBD_IN ; GET A KEY + LD C,(IY+KBD_DAT) ; DATA PORT + EZ80_IO + IN A,(C) ; GET THE DATA VALUE #IF (KBDTRACE >= 2) PUSH AF CALL PC_SPACE diff --git a/Source/HBIOS/ps2iface.inc b/Source/HBIOS/ps2iface.inc deleted file mode 100644 index d5d93776..00000000 --- a/Source/HBIOS/ps2iface.inc +++ /dev/null @@ -1,207 +0,0 @@ -;__________________________________________________________________________________________________ -; HARDWARE INTERFACE FOR POLLED AND INTERRUPT DRIVEN PS2 KEYBOARD. -; -; IN POLLED MODE THE KEYBOARD DEVICE IS IDENTIFED BY THE TABLE POINTED TO BY IY -; IN INTERRUPT MODE THE KEYBOARD DEVICE IS UNKNOWN SO PREDEFINED PORT VALUES ARE USED. -;__________________________________________________________________________________________________ -; -#IF (INTPS2KBD) -KBDPORT .DB PS2PORT+1 ; READ - KEYBOARD STATUS : WRITE - COMMAND REGISTER - .DB PS2PORT ; READ / WRITE DATA PORT - -;__________________________________________________________________________________________________ -; KEYBOARD QUEUE FOR INTERRUPTS -;__________________________________________________________________________________________________ -; -; -KBDQSIZ .EQU 8 ; MUST BE POWER OF TWO, <=128 -KBDQGETX .DB 0 ; QUEUE INDEX -KBDQPUTX .DB 0 ; QUEUE INDEX - .DB $55 ; GUARD BYTE FOR DEBUGGING -KBDQ .FILL KBDQSIZ,0 ; CIRCULAR KEYBOARD BUFFER - .DB $AA ; GUARD BYTE FOR DEBUGGING - -KBDQINIT: ; RESET THE QUEUE TO EMPTY - XOR A - LD (KBDQGETX),A - LD (KBDQPUTX),A - RET -; -;__________________________________________________________________________________________________ -; KEYBOARD INTERRUPT VECTOR -;__________________________________________________________________________________________________ -; -KBD_INT: - LD A,(KBDPORT+KBD_ST) ; READ CONTROLLER STATUS - LD C,A - IN A,(C) - AND 1 - RET Z - LD A,(KBDPORT+KBD_DAT) ; GET THE RESPONSE - LD C,A - IN A,(C) -; CALL KBDQPUSH ; SAVE KEYBOARD SCAN CODE -; RET -; -;__________________________________________________________________________________________________ -; ADD A BYTE TO THE KEYBOARD QUEUE -;__________________________________________________________________________________________________ -; -KBDQPUSH: ; ADD A SCAN CODE TO THE QUEUE - PUSH AF - CALL KBDQFULL - JR Z,KBDQISF ; EXIT IF THE QUEUE IS FULL -; - LD HL,KBDQPUTX - LD A,(HL) ; CREATE QUEUE INDEX - AND KBDQSIZ-1 - INC (HL) ; UPDATE INDEX -; - LD HL,KBDQ ; INDEX INTO THE QUEUE - LD B,0 - LD C,A - ADD HL,BC - POP AF - LD (HL),A ; SAVE THE CHARACTER IN THE QUEUE -; - RET -; -KBDQISF:POP AF - RET - -KBDQFULL: ; RETURN Z IF QUEUE IS FULL - CALL KBDQLEN ; RETURN NZ IF STILL SPACE IN QUEUE - SUB KBDQSIZ - RET -#ENDIF -;__________________________________________________________________________________________________ -; KEYBOARD READ -;__________________________________________________________________________________________________ -; -#IF (INTPS2KBD) -; -; RETURN A BYTE TO FROM KEYBOARD QUEUE -; -KBD_IN: -KBDQPOP: - CALL KBDQLEN - RET Z ; EXIT IF THE QUEUE IS EMPTY -; - LD HL,KBDQGETX - LD A,(HL) ; CREATE QUEUE INDEX - AND KBDQSIZ-1 - INC (HL) ; UPDATE INDEX -; - LD HL,KBDQ ; INDEX INTO THE QUEUE - LD B,0 - LD C,A - ADD HL,BC - LD A,(HL) ; GET THE CHARACTER FROM THE QUEUE -; LD (HL),B ; DEBUG - CLEAN QUEUE -; - RET -; -#ELSE -; -; RETURN A BYTE FROM THE KEYBOARD PORT -; -KBD_IN: - IN A,(C) ; GET THE DATA VALUE - LD C,(IY+KBD_DAT) ; DATA PORT - EZ80_IO - IN A,(C) ; GET THE DATA VALUE - RET -#ENDIF -; -;__________________________________________________________________________________________________ -; KEYBOARD INPUT STATUS -;__________________________________________________________________________________________________ -; -#IF (INTPS2KBD) -KBD_IST: -KBDQLEN: ; EXIT WITH NUMBER OF CHARACTERS IN QUEUE - LD A,(KBDQPUTX) ; Z STATUS AND ZERO IF NONE - LD HL,KBDQGETX - SUB (HL) - RET -#ELSE -KBD_IST: ; A=0, Z SET FOR NOTHING PENDING, OTHERWISE DATA PENDING - LD C,(IY+KBD_ST) ; STATUS PORT - EZ80_IO - IN A,(C) ; GET STATUS - AND $01 ; ISOLATE INPUT PENDING BIT - RET -#ENDIF -; -;__________________________________________________________________________________________________ -; OUTPUT TO KEYBOARD COMMAND PORT -;__________________________________________________________________________________________________ -; -KBD_CMDOUT: - LD C,(IY+KBD_CMD) ; COMMAND PORT - EZ80_IO - OUT (C),A - RET -;__________________________________________________________________________________________________ -; OUTPUT TO KEYBOARD COMMAND DATA -;__________________________________________________________________________________________________ -; -KBD_DTAOUT: - LD C,(IY+KBD_DAT) ; DATA PORT - EZ80_IO - OUT (C),A - RET -;__________________________________________________________________________________________________ -; KEYBOARD OUTPUT STATUS - A=0, Z SET FOR NOT READY, OTHERWISE READY TO WRITE -;__________________________________________________________________________________________________ -; -KBD_OST: - LD C,(IY+KBD_ST) ; STATUS PORT - EZ80_IO - IN A,(C) ; GET STATUS - AND $02 ; ISOLATE OUTPUT EMPTY BIT - XOR $02 ; FLIP IT FOR APPROPRIATE RETURN VALUES - RET -; -;__________________________________________________________________________________________________ -; DEBUG QUEUE -;__________________________________________________________________________________________________ -; -#IF ((INTPS2KBD & (1)) -KBDQDBG: - PUSH HL - PUSH DE - PUSH BC - PUSH AF - - CALL NEWLINE ; PRINT QUEUE CONTENTS WITH PRE AND POST GUARD BYTES - LD B,KBDQSIZ+2 - LD HL,KBDQ-1 -KBDQPRT: - LD A,(HL) - CALL PRTHEXBYTE - INC HL - DJNZ KBDQPRT - - LD A,' ' ; PRINT QUEUE INDEX - CALL COUT - LD A,(KBDQGETX) - CALL PRTHEXBYTE - - LD A,' ' ; PRINT QUEUE INDEX - CALL COUT - LD A,(KBDQPUTX) - CALL PRTHEXBYTE - - LD A,' ' ; PRINT # SCAN CODES IN QUEUE - CALL COUT - CALL KBDQLEN - CALL PRTHEXBYTE - CALL NEWLINE - - POP AF - POP BC - POP DE - POP HL - RET -#ENDIF diff --git a/Source/HBIOS/tms.asm b/Source/HBIOS/tms.asm index 858bd4c5..e8f57b37 100644 --- a/Source/HBIOS/tms.asm +++ b/Source/HBIOS/tms.asm @@ -267,7 +267,7 @@ TMS_INIT: LD A,TMS_DATREG CALL PRTHEXBYTE CALL TMS_PROBE ; CHECK FOR HW EXISTENCE - JR TMS_INIT1 ; CONTINUE IF PRESENT + JR Z,TMS_INIT1 ; CONTINUE IF PRESENT ; ; *** HARDWARE NOT PRESENT *** PRTS(" NOT PRESENT$")