mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:13:13 -06:00
Implement "safe mode" boot process
Lots of ways this could be done. I have chosen to set it up so it just boots with a minimum driver set. On SBC test by setting BT_REC_TYPE to BT_REC_SBC02 and use the 1-bit jumper (crtact) jumper to enable. Options for other platforms needs to be considered.
This commit is contained in:
@@ -911,6 +911,38 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK
|
||||
LD (HL),$4D
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;
|
||||
;==================================================================================================
|
||||
; RECOVERY MODE
|
||||
;==================================================================================================
|
||||
;
|
||||
; PLATFORM SPECIFIC CODE FOR DETECTING RECOVERY MODE SWITCH
|
||||
;
|
||||
#IF (BT_REC_TYPE!=BT_REC_NONE)
|
||||
#IF (BT_REC_TYPE==BT_REC_FORCE)
|
||||
LD A,1 ; SET FOR RECOVERY MODE
|
||||
LD (HB_BOOT_REC),A ; SAVE FOR LATER
|
||||
#ENDIF
|
||||
#IF (PLATFORM == PLT_SBC)
|
||||
#IF (BT_REC_TYPE==BT_REC_SBC01)
|
||||
LD A,%00100000 ; DISABLE RTC AND
|
||||
OUT (RTCIO),A ; DRQ DRIVER READ
|
||||
IN A,(RTCIO) ; BIT 0 (DRQ).
|
||||
CPL ; PULLED HIGH
|
||||
AND 1 ; IS RECOVERY MODE
|
||||
LD (HB_BOOT_REC),A ; SAVE FOR LATER
|
||||
#ENDIF
|
||||
#IF (BT_REC_TYPE==BT_REC_SBC02)
|
||||
IN A,(RTCIO) ; RTC PORT, BIT 6 HAS THE
|
||||
BIT 6,A ; STATE OF CONFIG JUMPER
|
||||
LD A,1 ; JUMPER INSTALLED
|
||||
JR Z,SAVE_REC_M ; IS RECOVERY MODE
|
||||
LD A,0
|
||||
SAVE_REC_M:
|
||||
LD (HB_BOOT_REC),A ; SAVE FOR LATER
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;
|
||||
DIAG(%00001111)
|
||||
;
|
||||
@@ -1156,7 +1188,17 @@ HB_CPU2:
|
||||
LD (HL),D
|
||||
LD B,PC_INITTBLLEN
|
||||
POP DE ; POP (1) DE IS ADDRESS OF TOP OF TABLE
|
||||
CALL CALLLIST ; PROCESS THE PRE-INIT CALL TABLE
|
||||
|
||||
#IF (BT_REC_TYPE!=BT_REC_NONE)
|
||||
LD A,(HB_BOOT_REC) ; IF WE ARE IN RECOVERY MODE
|
||||
OR A ; POINT TO THE RECOVER MODE
|
||||
JR Z,NOT_REC_M0 ; INITIALIZATION TABLE
|
||||
LD B,PC_INITRLEN
|
||||
LD DE,PC_INIT_REC
|
||||
NOT_REC_M0:
|
||||
|
||||
#ENDIF
|
||||
CALL CALLLIST ; PROCESS THE PRE-INIT CALL TABLE
|
||||
;
|
||||
#IF 0
|
||||
;
|
||||
@@ -1329,8 +1371,19 @@ HB_SPDTST:
|
||||
; PERFORM DEVICE INITIALIZATION
|
||||
;
|
||||
CALL NEWLINE
|
||||
|
||||
#IF (BT_REC_TYPE!=BT_REC_NONE)
|
||||
LD A,(HB_BOOT_REC) ; IF WE ARE IN RECOVERY MODE
|
||||
OR A ; POINT TO THE RECOVER MODE
|
||||
JR Z,NOT_REC_M1 ; INITIALIZATION TABLE
|
||||
LD B,HB_INITRLEN
|
||||
LD DE,HB_INIT_REC
|
||||
JR IS_REC_M1
|
||||
NOT_REC_M1:
|
||||
#ENDIF
|
||||
LD B,HB_INITTBLLEN
|
||||
LD DE,HB_INITTBL
|
||||
IS_REC_M1:
|
||||
CALL CALLLIST
|
||||
;
|
||||
; RECORD HEAP CURB AT THE CURRENT VALUE OF HEAP TOP. HEAP CURB
|
||||
@@ -1431,8 +1484,31 @@ CALLLIST:
|
||||
DJNZ CALLLIST
|
||||
CALLDUMMY:
|
||||
RET
|
||||
|
||||
#IF (BT_REC_TYPE!=BT_REC_NONE)
|
||||
;
|
||||
;==================================================================================================
|
||||
; TABLE OF RECOVERY MODE INITIALIZATION ENTRY POINTS
|
||||
;==================================================================================================
|
||||
;
|
||||
; USE "CALLDUMMY" IF NO ENTRY REQUIRED
|
||||
;
|
||||
PC_INIT_REC:
|
||||
#IF (PLATFORM == PLT_SBC)
|
||||
.DW UART_PREINIT
|
||||
; .DW CALLDUMMY
|
||||
#ENDIF
|
||||
PC_INITRLEN .EQU (($ - PC_INIT_REC) / 2)
|
||||
;
|
||||
HB_INIT_REC:
|
||||
#IF (PLATFORM == PLT_SBC)
|
||||
.DW UART_INIT
|
||||
.DW MD_INIT
|
||||
#ENDIF
|
||||
HB_INITRLEN .EQU (($ - HB_INIT_REC) / 2)
|
||||
;
|
||||
#ENDIF
|
||||
;==================================================================================================
|
||||
; TABLE OF PRE-CONSOLE INITIALIZATION ENTRY POINTS
|
||||
;==================================================================================================
|
||||
|
||||
@@ -3926,6 +4002,10 @@ RTCVAL .DB 0 ; SHADOW VALUE FOR RTC LATCH PORT
|
||||
;
|
||||
HB_BATCOND .DB 0 ; BATTERY CONDITION (0=LOW, 1=OK)
|
||||
;
|
||||
#IF (BT_REC_TYPE!=BT_REC_NONE)
|
||||
HB_BOOT_REC .DB 0 ; BOOT MODE (0=NORMAL, 1=RECOVERY MODE)
|
||||
#ENDIF
|
||||
;
|
||||
STR_BANNER .DB "RetroBrew HBIOS v", BIOSVER, ", ", TIMESTAMP, "$"
|
||||
STR_PLATFORM .DB PLATFORM_NAME, "$"
|
||||
STR_SWITCH .DB "*** Activating CRT Console ***$"
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
FALSE .EQU 0
|
||||
TRUE .EQU ~FALSE
|
||||
;
|
||||
; DEBUGGNG OPTIONS
|
||||
; DEBUGGING OPTIONS
|
||||
;
|
||||
USENONE .EQU 0 ; NO DEBUG
|
||||
USEXIO .EQU 1 ; BASIC SERIAL DRIVER
|
||||
@@ -74,6 +74,15 @@ MM_Z180 .EQU 4 ; Z180 NATIVE MEMORY MANAGER
|
||||
BT_MENU .EQU 1 ; WAIT FOR MENU SELECTION AT LOADER PROMPT
|
||||
BT_AUTO .EQU 2 ; AUTO SELECT BOOT_DEFAULT AFTER BOOT_TIMEOUT
|
||||
;
|
||||
; BOOT RECOVERY METHODS
|
||||
;
|
||||
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_SBC02 .EQU 3 ; ECB-SBCV2 - 1-BIT IO PORT
|
||||
;
|
||||
BT_REC_TYPE .EQU BT_REC_NONE ; BOOT RECOVERY METHOD TO USE
|
||||
;
|
||||
; FLOPPY DISK MEDIA SELECTIONS (ID'S MUST BE INDEX OF ENTRY IN FCD_TBL)
|
||||
;
|
||||
FDM720 .EQU 0 ; 3.5" FLOPPY, 720KB, 2 SIDES, 80 TRKS, 9 SECTORS
|
||||
|
||||
Reference in New Issue
Block a user