Browse Source

Merge pull request #459 from b1ackmai1er/master

Reimplementation of boot recovery for Duodyne which appears to have been lost
pull/461/head
Wayne Warthen 1 year ago
committed by GitHub
parent
commit
dbde08cc74
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 2
      Source/Apps/Test/DMAmon/dmamon.asm
  2. 19
      Source/Doc/SystemGuide.md
  3. 1
      Source/HBIOS/cfg_DUO.asm
  4. 2
      Source/HBIOS/cfg_MASTER.asm
  5. 1
      Source/HBIOS/cfg_MBC.asm
  6. 30
      Source/HBIOS/hbios.asm
  7. 192
      Source/HBIOS/plt_pretty.inc
  8. 9
      Source/HBIOS/std.asm

2
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

19
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 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.
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 SBC.
# Configuration
## RomWBW NVRAM Configuration

1
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

2
Source/HBIOS/cfg_MASTER.asm

@ -54,8 +54,10 @@ 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
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

1
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

30
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)
@ -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
@ -2923,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
@ -3378,7 +3392,7 @@ IS_REC_M1:
CALL CALLLIST
;
;--------------------------------------------------------------------------------------------------
; NV-SWITCH INITITIALISATION
; NV-SWITCH INITIALISATION
; Requires functional RTC NVR
;--------------------------------------------------------------------------------------------------
;
@ -3804,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
@ -3813,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
@ -9455,6 +9469,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)

192
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 "$"

9
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
@ -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_SBC1B .EQU 3 ; ECB-SBCV2 - 1-BIT IO PORT
BT_REC_SBCB0 .EQU 2 ; ECB-SBCV2 - BIT 0 RTC HIGH
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_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)
;

Loading…
Cancel
Save