Browse Source

Improve Application Start Mode

- If the new AUX bank happens to be the same as the old HBIOS bank, an application start would fail.  Relocated the copy to avoid this.
pull/409/head v3.5.0-dev.60
Wayne Warthen 2 years ago
parent
commit
888706149d
  1. 4
      Source/HBIOS/Bank Layout.txt
  2. 51
      Source/HBIOS/hbios.asm
  3. 15
      Source/HBIOS/uart.asm

4
Source/HBIOS/Bank Layout.txt

@ -43,8 +43,8 @@ Standard RAM Bank Layout (512K)
Bank ID Usage
------- ------
0x80 RomWBW HBIOS
0x81-0x88 RAM Disk Data (3)
0x89-0x8B App Banks (8)
0x81-0x88 RAM Disk Data (8)
0x89-0x8B App Banks (3)
0x8C CP/M 3 Buffers
0x8D CP/M 3 OS
0x8E User TPA

51
Source/HBIOS/hbios.asm

@ -1735,7 +1735,7 @@ ROMRESUME:
;
; WE USE THE TWO BYTES IMMEDIATELY BELOW THE PROXY TO STORE A COUPLE
; VALUES TEMPORARILY BECAUSE WE MAY BE OPERATING IN ROM AT THIS POINT.
; (HBX_LOC - 1) = BATCOND, (HBX_LOC - 2) = APPBANK
; (HBX_LOC - 1) = BATCOND, (HBX_LOC - 2) = LOADBANK
; THERE IS NOTHING ON THE STACK AT THIS POINT SO, HERE, WE JUST RESET
; THE STACK TO HBX_LOC - 2.
;
@ -1757,7 +1757,7 @@ ROMRESUME:
XOR A ; ZERO MEANS LOW BAT
LD (HL),A ; FIRST RAM ACCESS
INC A ; 1 MEANS BAT OK
LD (HL),A ; SECOND RAM ACCESS (BLOLCKED IF BATTERY ISSUE)
LD (HL),A ; SECOND RAM ACCESS (BLOCKED IF BATTERY ISSUE)
;
; INSTALL PROXY IN UPPER MEMORY
;
@ -1907,6 +1907,7 @@ MBC_SINGLE:
; COPY OURSELVES TO HBIOS BANK IN RAM
;
LD A,(HB_CURBNK) ; GET CURRENT BANK ID
LD (HBX_LOC - 2),A ; SAVE THE LOAD BANK
;
; CHECK TO SEE IF WE ARE ALREADY RUNNING IN THE HBIOS RAM
; BANK AND SKIP THE COPY IF SO (DON'T COPY OVER OURSELVES).
@ -1914,7 +1915,7 @@ MBC_SINGLE:
; FULL RESTART OF A SYSTEM USING THE EXISTING HBIOS COPY.
; NOTE THAT THIS TEST WORKS BECAUSE BID_BIOS == BID_BOOT
; IN THESE SCENARIOS.
CP BID_BIOS ; SAVE AS BIOS BANK?
CP BID_BIOS ; SAME AS BIOS BANK?
JR Z,HB_START1 ; IF SO, SKIP
;
LD (HB_SRCBNK),A ; CURRENT BANK IS SOURCE
@ -1999,8 +2000,35 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK
INC HL
LD (HL),$4D
#ENDIF
;
; CHECK TO SEE IF THIS IS AN IN-PLACE RESTART. IF SO,
; WE NEED TO SKIP THE COPY OF THE CONCATENATED OS IMAGES BELOW.
LD A,(HB_RAMFLAG) ; GET THE FLAG
OR A ; TEST IT
JR NZ,HB_START2 ; IF SET, SKIP
DEC A ; SET FLAG
LD (HB_RAMFLAG),A ; SAVE IT
;
; FOR AN APPLICATION BOOT, WE ALSO COPY THE CONCATENATED OS
; IMAGES TO THE AUX BANK WHERE WE WILL JUMP TO ROMLDR LATER.
LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY
LD D,BID_AUX ; D = DEST BANK = AUX BANK
LD A,(HBX_LOC - 2) ; E = SRC BANK = LOAD BANK
LD E,A ; USE AS SOURCE
LD HL,$8000 ; HL = COPY LEN = ENTIRE BANK
RST 08 ; DO IT
LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY
LD HL,HB_END ; COPY FROM END OF HBIOS
LD DE,0 ; TO START OF TARGET BANK
RST 08 ; DO IT
JR HB_START2 ; CONTINUE
;
HB_RAMFLAG .DB $00
;
#ENDIF
;
HB_START2:
;
#IF FALSE
;
; POPULATE THE CRITICAL RAM BANK NUMBERS.
@ -8564,20 +8592,6 @@ STR_APPBOOT .DB "\r\n\r\n*** Launching RomWBW HBIOS v", BIOSVER, ", ", TIMESTAMP
.DB "\r\n\r\n ", PLATFORM_NAME, "$"
;
HB_APPBOOT2:
; FOR AN APPLICATION BOOT, WE ALSO COPY THE CONCATENATED OS
; IMAGES TO THE AUX BANK WHERE WE WILL JUMP TO ROMLDR LATER.
; THE AUX BANK WILL BE DESTROYED IF CP/M 3 IS LOADED. WE DON'T
; LIVE IN A PERFECT WORLD.
LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY
LD D,BID_AUX ; D = DEST BANK = AUX BANK
LD A,(HB_CURBNK) ; E = SRC BANK = CUR BANK
LD E,A ; USE AS SOURCE
LD HL,$8000 ; HL = COPY LEN = ENTIRE BANK
RST 08 ; DO IT
LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY
LD HL,HB_END ; COPY FROM END OF HBIOS
LD DE,0 ; TO START OF TARGET BANK
RST 08 ; DO IT
;
#IF (MEMMGR == MM_Z280)
; WE NEED TO SWITCH FROM USER MODE TO SYSTEM MODE, BUT CONTINUE
@ -8585,7 +8599,6 @@ HB_APPBOOT2:
;
; FIRST, OVERLAY PROXY CODE WITH FRESH CODE SO WE CAN USE THE
; PROXY ROUTINES SAFELY.
LD A,(HB_CURBNK) ; GET CURBNK
LD DE,HBX_LOC ; RUNNING LOCATION
LD HL,HBX_IMG ; LOCATION IN IMAGE
@ -8601,7 +8614,7 @@ HB_APPBOOT2:
LDIR
;
; THEN SYSCALL IT. NOTE THAT THE ROUTINE CALLED DOES NOT
; (RET)URN, IT JUMPS TO CONTINUE SO THAT THE SYSCALL DOES
; (RET)URN, IT JUMPS TO HB_RESTART SO THAT THE SYSCALL DOES
; NOT RETURN TO USER MODE.
SC HBX_BUF ; SYSCALL ROUTINE
;

15
Source/HBIOS/uart.asm

@ -17,6 +17,21 @@
; F E D C B A 9 8 7 6 5 4 3 2 1 0
; -- MCR -- -- LCR --
;
; STANDARD UART BASE I/O ADDRESSES:
; - ECB SBC Z80 $68
; - ECB CASSETTE $80
; - ECB 4UART $C0,$C8,$D0,$D8
; - ECB MFPIC $18
; - ZETA $68
; - DUODYNE Z80 $58
; - DUODYNE SELFHOST $A8
; - DUODYNE MULTI IO $70,$78
; - NHYODYNE Z80 $68
; - NHYODYNE DUART $80,$88
; - RCBUS EPSER $A0,$A8
; - RCBUS DUAL RS232 $80,$88
; - EPITX $A0,$A8
; - NABU $48
;
UART_DEBUG .EQU FALSE
;

Loading…
Cancel
Save