@ -911,6 +911,38 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK
LD ( HL ), $ 4 D
# 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 ***$"