mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:13:13 -06:00
Finalize ROM-Less Booting
This commit is contained in:
@@ -302,6 +302,13 @@ BOOT:
|
||||
; STANDARD BOOT INVOCATION
|
||||
;LD SP,STACK ; STACK FOR INITIALIZATION
|
||||
LD SP,CCP_LOC ; PUT STACK JUST BELOW CCP
|
||||
;
|
||||
#IF DEBUG
|
||||
CALL PRTSTRD
|
||||
.DB "\r\nCBIOS Starting...$"
|
||||
CALL PRTSTRD
|
||||
.DB "\r\nCopying INIT code to 0x8000...$"
|
||||
#ENDIF
|
||||
;
|
||||
; COPY INITIALIZATION CODE TO RUNNING LOCATION $8000
|
||||
LD HL,BUFPOOL
|
||||
@@ -311,6 +318,11 @@ BOOT:
|
||||
PUSH HL ; SAVE START ADR AGAIN FOR BELOW
|
||||
PUSH BC ; SAVE LENGTH FOR BELOW
|
||||
LDIR ; COPY THE CODE
|
||||
;
|
||||
#IF DEBUG
|
||||
CALL PRTSTRD
|
||||
.DB "\r\nClearing disk buffer...$"
|
||||
#ENDIF
|
||||
;
|
||||
; CLEAR BUFFER
|
||||
POP BC ; RECOVER LENGTH
|
||||
@@ -320,10 +332,30 @@ BOOT:
|
||||
INC DE ; OFFSET DEST
|
||||
DEC BC ; REDUCE LEN BY ONE
|
||||
LDIR ; USE LDIR TO FILL
|
||||
;
|
||||
#IF DEBUG
|
||||
CALL PRTSTRD
|
||||
.DB "\r\nStarting INIT routine at 0x8000$"
|
||||
#ENDIF
|
||||
;
|
||||
CALL INIT ; PERFORM COLD BOOD ROUTINE
|
||||
;
|
||||
#IF DEBUG
|
||||
CALL PRTSTRD
|
||||
.DB "\r\nResetting CP/M...$"
|
||||
#ENDIF
|
||||
CALL RESCPM ; RESET CPM
|
||||
;
|
||||
#IF DEBUG
|
||||
CALL PRTSTRD
|
||||
.DB "\r\nPerforming Auto Submit...$"
|
||||
#ENDIF
|
||||
CALL AUTOSUB ; PREP AUTO SUBMIT, IF APPROPRIATE
|
||||
;
|
||||
#IF DEBUG
|
||||
CALL PRTSTRD
|
||||
.DB "\r\nLaunching CP/M...$"
|
||||
#ENDIF
|
||||
;
|
||||
JR GOCPM ; THEN OFF TO CP/M WE GO...
|
||||
;
|
||||
@@ -444,6 +476,12 @@ GOCPM:
|
||||
CURDSK:
|
||||
LD A,(CDISK) ; GET CURRENT USER/DISK
|
||||
GOCCP:
|
||||
;
|
||||
#IF DEBUG
|
||||
CALL PRTSTRD
|
||||
.DB "\r\nTransfer to CCP...$"
|
||||
#ENDIF
|
||||
;
|
||||
LD C,A ; SETUP C WITH CURRENT USER/DISK, ASSUME IT IS OK
|
||||
JP CCP_LOC ; JUMP TO COMMAND PROCESSOR
|
||||
;
|
||||
@@ -2011,6 +2049,12 @@ BUFPOOL .EQU $ ; START OF BUFFER POOL
|
||||
HEAPEND .EQU CBIOS_END - 64 ; TOP OF HEAP MEM, END OF CBIOS LESS 32 ENTRY STACK
|
||||
;
|
||||
INIT:
|
||||
;
|
||||
#IF DEBUG
|
||||
CALL PRTSTRD
|
||||
.DB "\r\nStarting INIT....$"
|
||||
#ENDIF
|
||||
;
|
||||
DI ; NO INTERRUPTS FOR NOW
|
||||
|
||||
; ADJUST BOOT VECTOR TO REBOOT ROUTINE
|
||||
@@ -2068,12 +2112,21 @@ INIT:
|
||||
LD (BNKBIOS),A ; ... AND SAVE IT
|
||||
LD A,E ; GET USER BANK RETURNED IN E
|
||||
LD (BNKUSER),A ; ... AND SAVE IT
|
||||
|
||||
;
|
||||
#IF DEBUG
|
||||
CALL PRTSTRD
|
||||
.DB "\r\nReseting HBIOS....$"
|
||||
#ENDIF
|
||||
;
|
||||
; SOFT RESET HBIOS
|
||||
LD B,BF_SYSRESET ; HB FUNC: RESET
|
||||
LD C,BF_SYSRES_INT ; WARM START
|
||||
RST 08 ; DO IT
|
||||
|
||||
;
|
||||
#IF DEBUG
|
||||
CALL PRTSTRD
|
||||
.DB "\r\nCopying HCB....$"
|
||||
#ENDIF
|
||||
; CREATE A TEMP COPY OF THE HBIOS CONFIG BLOCK (HCB)
|
||||
; FOR REFERENCE USE DURING INIT
|
||||
LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
CLRRAMDISK .EQU CLR_AUTO ; CLR_ALWAYS, CLR_NEVER, CLR_AUTO (CLEAR IF INVALID DIR AREA)
|
||||
WRTCACHE .EQU TRUE ; ENABLE WRITE CACHING IN CBIOS (DE)BLOCKING ALGORITHM
|
||||
DSKTRACE .EQU FALSE ; ENABLE TRACING OF CBIOS DISK FUNCTION CALLS
|
||||
DEBUG .EQU FALSE ; MISCELLANEOUS DEBUG TRACING
|
||||
;
|
||||
CPM_LOC .EQU $D000 ; LOCATION OF START OF CCP
|
||||
;
|
||||
|
||||
@@ -105,14 +105,61 @@ WRITESTR2:
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
#IF DEBUG
|
||||
;
|
||||
; PRINT A STRING AT ADDRESS SPECIFIED IN HL
|
||||
; STRING MUST BE TERMINATED BY '$'
|
||||
; USAGE:
|
||||
; LD HL,MYSTR
|
||||
; CALL PRTSTR
|
||||
; ...
|
||||
; MYSTR: .DB "HELLO$"
|
||||
;
|
||||
TSTPT:
|
||||
PUSH DE
|
||||
LD DE,STR_TSTPT
|
||||
CALL WRITESTR
|
||||
POP DE
|
||||
JR REGDMP ; DUMP REGISTERS AND RETURN
|
||||
PRTSTR:
|
||||
LD A,(HL)
|
||||
INC HL
|
||||
CP '$'
|
||||
RET Z
|
||||
CALL COUT
|
||||
JR PRTSTR
|
||||
;
|
||||
; PRINT A STRING DIRECT: REFERENCED BY POINTER AT TOP OF STACK
|
||||
; STRING MUST BE TERMINATED BY '$'
|
||||
; USAGE:
|
||||
; CALL PRTSTRD
|
||||
; .DB "HELLO$"
|
||||
; ...
|
||||
;
|
||||
PRTSTRD:
|
||||
EX (SP),HL
|
||||
PUSH AF
|
||||
CALL PRTSTR
|
||||
POP AF
|
||||
EX (SP),HL
|
||||
RET
|
||||
;
|
||||
; PRINT A STRING INDIRECT: REFERENCED BY INDIRECT POINTER AT TOP OF STACK
|
||||
; STRING MUST BE TERMINATED BY '$'
|
||||
; USAGE:
|
||||
; CALL PRTSTRI(MYSTRING)
|
||||
; MYSTRING .DB "HELLO$"
|
||||
;
|
||||
PRTSTRI:
|
||||
EX (SP),HL
|
||||
PUSH AF
|
||||
LD A,(HL)
|
||||
INC HL
|
||||
PUSH HL
|
||||
LD H,(HL)
|
||||
LD L,A
|
||||
CALL PRTSTR
|
||||
POP HL
|
||||
INC HL
|
||||
POP AF
|
||||
EX (SP),HL
|
||||
RET
|
||||
;
|
||||
#ENDIF
|
||||
;
|
||||
; PANIC: TRY TO DUMP MACHINE STATE
|
||||
;
|
||||
|
||||
@@ -223,6 +223,18 @@ initialization routine. At this point, the prior HBIOS code has been
|
||||
discarded and overwritten. Finally, the Boot Loader is invoked just like
|
||||
a ROM Boot.
|
||||
|
||||
ROM-less Boot
|
||||
-------------
|
||||
|
||||
Some hardware supported by RomWBW has a special mechanism for loading
|
||||
the initial code. These systems have no ROM chips. However, they
|
||||
have a small hardware bootstrap that loads a chunk of code from a
|
||||
disk device directlly into RAM at system startup.
|
||||
|
||||
The startup then proceeds very much like the Application Boot
|
||||
process described above. HBIOS is installed in it's operating bank
|
||||
and control is passed to the loader.
|
||||
|
||||
Notes
|
||||
-----
|
||||
|
||||
|
||||
@@ -1530,21 +1530,51 @@ MBC_SINGLE:
|
||||
;
|
||||
#ENDIF
|
||||
;
|
||||
; IF THIS IS A ROM-LESS SYSTEM, THEN WE NEED TO COPY THE "APP" BANK TO
|
||||
; TPA. IT IS DONE PRIOR TO COPYING HBIOS TO IT'S FINAL BANK BECAUSE
|
||||
; THE SOURCE OF THE APP BANK CODE MAY BE THE BANK THAT HBIOS WANTS TO
|
||||
; USE AS IT'S FINAL LOCATION (PRIMARILY IN CASE OF RAMBOOT WHERE THE
|
||||
; SYSTEM HAS THE MINIMUM 128KB OF RAM).
|
||||
; IF THIS IS A ROM-LESS SYSTEM, THEN WE NEED TO COPY THE PAYLOAD
|
||||
; (LOADER, MONITOR, ZSDOS) THAT HAS BEEN LOADED TO PHYSICAL RAM
|
||||
; BANKS 0 AND 1 TO THE USER TPA BANK TO RUN AFTER BOOT.
|
||||
; IT IS DONE PRIOR TO COPYING HBIOS TO IT'S FINAL BANK BECAUSE
|
||||
; THE PAYLOAD MAY EXTEND INTO THE HBIOS OPERATING BANK. THIS
|
||||
; HAPPENS PRIMARILY IN THE CASE WHERE THE
|
||||
; SYSTEM HAS THE MINIMUM 128KB OF RAM.
|
||||
;
|
||||
#IFDEF ROMBOOT
|
||||
#IF (ROMSIZE == 0)
|
||||
LD A,(HB_CURBNK)
|
||||
;
|
||||
; THE PAYLOAD IS LIKELY TO CROSS OVER THE RAM BANK 0/1
|
||||
; BOUNDARY. BNKCPY DOES NOT HANDLE THIS BECAUSE IT ASSUMES
|
||||
; THE COMMON BANK IS USED AFTER PASSING OVER THE BANK
|
||||
; BOUNDARY. WE WORK AROUND THAT HERE BY DOING TWO COPIES.
|
||||
; THE FIRST ONE HANDLES THE PORTION OF THE PAYLOAD FROM THE
|
||||
; END OF HBIOS TO THE BANK BOUNDARY ($8000). THE SECOND
|
||||
; ONE HANDLES THE PORTION THAT EXTENDS INTO THE SECOND
|
||||
; PHYSICAL RAM BANK.
|
||||
;
|
||||
; COPY PORTION OF PAYLOAD FOLLOWING HBIOS TO THE BANK
|
||||
; BOUNDARY AT $8000 INTO START OF TPA.
|
||||
LD A,BID_RAM0
|
||||
LD (HB_SRCBNK),A
|
||||
LD A,BID_USR
|
||||
LD (HB_DSTBNK),A
|
||||
LD HL,HB_END
|
||||
LD DE,0
|
||||
LD BC,$8000
|
||||
LD BC,$8000-HB_END
|
||||
;
|
||||
#IF (MEMMGR == MM_Z280)
|
||||
CALL Z280_BNKCPY
|
||||
#ELSE
|
||||
CALL HBX_BNKCPY
|
||||
#ENDIF
|
||||
;
|
||||
; COPY REMAINDER OF PAYLOAD EXTENDING INTO THE SECOND PHYSICAL
|
||||
; RAM BANK. NOTE THAT THE DESTINATION ADDRESS (DE) IS
|
||||
; ALREADY CORRECT FROM THE PRIOR COPY.
|
||||
LD A,BID_RAM0+1
|
||||
LD (HB_SRCBNK),A
|
||||
LD HL,$0000
|
||||
; DE IS ALREADY CORRECT
|
||||
LD BC,$8000-($8000-HB_END)
|
||||
;
|
||||
#IF (MEMMGR == MM_Z280)
|
||||
CALL Z280_BNKCPY
|
||||
#ELSE
|
||||
@@ -3697,6 +3727,11 @@ SYS_RESINT:
|
||||
; GO BACK TO ROM BOOT LOADER
|
||||
;
|
||||
SYS_RESWARM:
|
||||
;
|
||||
#IF (ROMSIZE == 0)
|
||||
JR SYS_RESCOLD
|
||||
#ENDIF
|
||||
;
|
||||
CALL SYS_RESINT
|
||||
;
|
||||
#IF (MEMMGR == MM_Z280)
|
||||
@@ -3713,6 +3748,14 @@ SYS_RESWARM:
|
||||
; RESTART SYSTEM AS THOUGH POWER HAD JUST BEEN TURNED ON
|
||||
;
|
||||
SYS_RESCOLD:
|
||||
;
|
||||
#IF (ROMSIZE == 0)
|
||||
LD DE,STR_RESTART
|
||||
CALL Z,WRITESTR
|
||||
DI
|
||||
HALT
|
||||
#ENDIF
|
||||
;
|
||||
#IF (MEMMGR == MM_Z280)
|
||||
JP Z280_RESTART
|
||||
#ELSE
|
||||
@@ -7015,6 +7058,7 @@ STR_LOWBAT .DB "\r\n\r\n+++ LOW BATTERY +++$"
|
||||
STR_PANIC .TEXT "\r\n>>> PANIC: $"
|
||||
STR_SYSCHK .TEXT "\r\n>>> SYSCHK: $"
|
||||
STR_CONTINUE .TEXT "\r\nContinue (Y/N)? $"
|
||||
STR_RESTART .TEXT "\r\n\r\n>>> Press hardware reset button to restart system\r\n\r\n$"
|
||||
;
|
||||
#IF (DSKYENABLE) ; 'H','B','I','O',' ',' ',' ',' '
|
||||
#IF (DSKYMODE == DSKYMODE_V1)
|
||||
|
||||
@@ -2,4 +2,4 @@
|
||||
#DEFINE RMN 1
|
||||
#DEFINE RUP 1
|
||||
#DEFINE RTP 0
|
||||
#DEFINE BIOSVER "3.1.1-pre.161"
|
||||
#DEFINE BIOSVER "3.1.1-pre.162"
|
||||
|
||||
@@ -3,5 +3,5 @@ rmn equ 1
|
||||
rup equ 1
|
||||
rtp equ 0
|
||||
biosver macro
|
||||
db "3.1.1-pre.161"
|
||||
db "3.1.1-pre.162"
|
||||
endm
|
||||
|
||||
Reference in New Issue
Block a user