Browse Source

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.
pull/69/head
b1ackmai1er 6 years ago
parent
commit
60df79fa4d
  1. 82
      Source/HBIOS/hbios.asm
  2. 11
      Source/HBIOS/std.asm

82
Source/HBIOS/hbios.asm

@ -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 ***$"

11
Source/HBIOS/std.asm

@ -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

Loading…
Cancel
Save