diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 18056e92..0cfa082a 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -3845,6 +3845,13 @@ DBG_NOTE: ; TRANSITION TO USER LAND ;-------------------------------------------------------------------------------------------------- ; +; WE CAN GET HERE 2 WAYS. ON A COLD START, WE JUST FALL THROUGH FROM +; ABOVE. ON A WARM START, INITSYS4 IS INVOKED FROM SYS_RESWARM. +; REGISTER E IS SET TO INDICATE WHICH OF THESE IF OCCURRING SO THAT +; ROMLDR CAN BEHAVE AS APPROPRIATE. +; + LD E,START_COLD ; SIGNAL A COLD START +; INITSYS4: ; ; IF Z280, WE NEED TO SWITCH TO USER MODE NOW. @@ -3865,6 +3872,8 @@ INITSYS4: LD C,Z280_MSR ; MASTER STATUS REGISTER LD HL,$4000 | $0B ; USER MODE W/ NORMAL INT MASK LDCTL (C),HL ; DO IT +#ELSE + LD SP,HBX_LOC ; STACK JUST BELOW HBIOS PROXY #ENDIF ; DIAG(0) ; CLEAR BOOT DIAG LED(S) @@ -5386,21 +5395,8 @@ SYS_RESINT: SYS_RESWARM: ; CALL SYS_RESINT ; HBIOS INTERNAL RESET -; -#IF (MEMMGR == MM_Z280) - JP INITSYS4 -#ELSE - ; PERFORM BANK CALL TO OS IMAGES BANK IN ROM - LD SP,HBX_LOC ; STACK JUST BELOW HBIOS PROXY - #IFDEF APPBOOT - LD A,BID_AUX ; IF APPBOOT, CHAIN TO AUX BANK - #ELSE - LD A,BID_IMG0 ; ELSE CHAIN TO OS IMAGES BANK - #ENDIF - LD IX,0 ; ENTER AT ADDRESS 0 - CALL HBX_BNKCALL ; GO THERE - HALT ; WE SHOULD NEVER COME BACK! -#ENDIF + LD E,START_WARM ; SIGNAL A WARM START + JP INITSYS4 ; DO OUR NORMAL USER LAND STARTUP ; ; RESTART SYSTEM AS THOUGH POWER HAD JUST BEEN TURNED ON ; diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index ffabb24f..c438d74b 100644 --- a/Source/HBIOS/romldr.asm +++ b/Source/HBIOS/romldr.asm @@ -119,6 +119,7 @@ bid_cur .equ -1 ; used below to indicate current bank ; ; Note: at startup, we should not assume which bank we are operating in. ; + ld a,e ; save startup mode ; Relocate to start of common ram at $8000 ld hl,0 ld de,$8000 @@ -131,6 +132,7 @@ bid_cur .equ -1 ; used below to indicate current bank ; start: ld sp,bl_stack ; setup private stack + ld (startmode),a ; save startup mode call delay_init ; init delay functions ; ; Disable interrupts if IM1 is active because we are switching to page @@ -227,8 +229,11 @@ start2: ; #if (BIOS == BIOS_WBW) ; - ; note we dont call this for UNA, assume UNA already does this - call prtall ; Display Device List. + ; We don't have a start mode for UNA. So, the device display + ; will only occur when selected from the menu. + ld a,(startmode) ; get start mode + cp START_COLD ; cold start? + call z,prtall ; if so, display Device List. ; #endif ; @@ -2334,6 +2339,8 @@ prtall: ; ; Print list of all drives (UNA) ; +; UNA has no place to put this in ROM, so it is done here. +; prtall: ld hl,str_devlst ; device list header string call pstr ; display it @@ -2781,6 +2788,7 @@ sps .dw 0 ; sectors per slice mediaid .db 0 ; media id ; bootmode .db 0 ; ROM, APP, or IMG boot +startmode .db 0 ; START_WARM or START_COLD ra_tbl_loc .dw 0 ; points to active ra_tbl bootunit .db 0 ; boot disk unit bootslice .db 0 ; boot disk slice diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index 80041767..145ae7e1 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -80,6 +80,11 @@ BM_ROMBOOT .EQU 1 ; ROM BOOT BM_APPBOOT .EQU 2 ; APPLICATION BOOT BM_IMGBOOT .EQU 3 ; IMAGE BOOT (DEPRECATED) ; +; HBIOS STARTUP MODES +; +START_WARM .EQU 1 ; COLD START +START_COLD .EQU 2 ; WARM START +; ; MEMORY MANAGERS ; MM_NONE .EQU 0 diff --git a/Source/ver.inc b/Source/ver.inc index 2be79253..aa5ebd4d 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,7 +2,7 @@ #DEFINE RMN 6 #DEFINE RUP 0 #DEFINE RTP 0 -#DEFINE BIOSVER "3.6.0-dev.9" +#DEFINE BIOSVER "3.6.0-dev.10" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index 0aa4be7f..41fe64ec 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 6 rup equ 0 rtp equ 0 biosver macro - db "3.6.0-dev.9" + db "3.6.0-dev.10" endm