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 ; 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: INITSYS4:
; ;
; IF Z280, WE NEED TO SWITCH TO USER MODE NOW. ; IF Z280, WE NEED TO SWITCH TO USER MODE NOW.
@ -3865,6 +3872,8 @@ INITSYS4:
LD C,Z280_MSR ; MASTER STATUS REGISTER LD C,Z280_MSR ; MASTER STATUS REGISTER
LD HL,$4000 | $0B ; USER MODE W/ NORMAL INT MASK LD HL,$4000 | $0B ; USER MODE W/ NORMAL INT MASK
LDCTL (C),HL ; DO IT LDCTL (C),HL ; DO IT
#ELSE
LD SP,HBX_LOC ; STACK JUST BELOW HBIOS PROXY
#ENDIF #ENDIF
; ;
DIAG(0) ; CLEAR BOOT DIAG LED(S) DIAG(0) ; CLEAR BOOT DIAG LED(S)
@ -5386,21 +5395,8 @@ SYS_RESINT:
SYS_RESWARM: SYS_RESWARM:
; ;
CALL SYS_RESINT ; HBIOS INTERNAL RESET 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 ; 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. ; 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 ; Relocate to start of common ram at $8000
ld hl,0 ld hl,0
ld de,$8000 ld de,$8000
@ -131,6 +132,7 @@ bid_cur .equ -1 ; used below to indicate current bank
; ;
start: start:
ld sp,bl_stack ; setup private stack ld sp,bl_stack ; setup private stack
ld (startmode),a ; save startup mode
call delay_init ; init delay functions call delay_init ; init delay functions
; ;
; Disable interrupts if IM1 is active because we are switching to page ; Disable interrupts if IM1 is active because we are switching to page
@ -227,8 +229,11 @@ start2:
; ;
#if (BIOS == BIOS_WBW) #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 #endif
; ;
@ -2334,6 +2339,8 @@ prtall:
; ;
; Print list of all drives (UNA) ; Print list of all drives (UNA)
; ;
; UNA has no place to put this in ROM, so it is done here.
;
prtall: prtall:
ld hl,str_devlst ; device list header string ld hl,str_devlst ; device list header string
call pstr ; display it call pstr ; display it
@ -2781,6 +2788,7 @@ sps .dw 0 ; sectors per slice
mediaid .db 0 ; media id mediaid .db 0 ; media id
; ;
bootmode .db 0 ; ROM, APP, or IMG boot 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 ra_tbl_loc .dw 0 ; points to active ra_tbl
bootunit .db 0 ; boot disk unit bootunit .db 0 ; boot disk unit
bootslice .db 0 ; boot disk slice 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_APPBOOT .EQU 2 ; APPLICATION BOOT
BM_IMGBOOT .EQU 3 ; IMAGE BOOT (DEPRECATED) BM_IMGBOOT .EQU 3 ; IMAGE BOOT (DEPRECATED)
; ;
; HBIOS STARTUP MODES
;
START_WARM .EQU 1 ; COLD START
START_COLD .EQU 2 ; WARM START
;
; MEMORY MANAGERS ; MEMORY MANAGERS
; ;
MM_NONE .EQU 0 MM_NONE .EQU 0

2
Source/ver.inc

@ -2,7 +2,7 @@
#DEFINE RMN 6 #DEFINE RMN 6
#DEFINE RUP 0 #DEFINE RUP 0
#DEFINE RTP 0 #DEFINE RTP 0
#DEFINE BIOSVER "3.6.0-dev.9"
#DEFINE BIOSVER "3.6.0-dev.10"
#define rmj RMJ #define rmj RMJ
#define rmn RMN #define rmn RMN
#define rup RUP #define rup RUP

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 6
rup equ 0 rup equ 0
rtp equ 0 rtp equ 0
biosver macro biosver macro
db "3.6.0-dev.9"
db "3.6.0-dev.10"
endm endm

Loading…
Cancel
Save