diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index ec14fafb..dbc5f317 100644 --- a/Source/HBIOS/hbios.asm +++ b/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 ***$" diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index 22020757..c0ae4357 100644 --- a/Source/HBIOS/std.asm +++ b/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