Browse Source

HBIOS Warm Start Cleanup, See Issue #579

- @kiwisincebirth noticed some duplicative code in HBIOS related to warm starts.  This has been refactored.
- A start mode code is now passed from HBIOS to RomLdr to indicate a warm or cold start.  Device inventory now uses this code to display only on cold start.
pull/586/head v3.6.0-dev.10
Wayne Warthen 7 months ago
parent
commit
cebeee1157
No known key found for this signature in database GPG Key ID: 8B34ED29C07EEB0A
  1. 26
      Source/HBIOS/hbios.asm
  2. 12
      Source/HBIOS/romldr.asm
  3. 5
      Source/HBIOS/std.asm
  4. 2
      Source/ver.inc
  5. 2
      Source/ver.lib

26
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
;

12
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

5
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

2
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

2
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

Loading…
Cancel
Save