|
|
|
@ -52,7 +52,61 @@ INT_IM1 .EQU $FF00 |
|
|
|
; LOADER |
|
|
|
;================================================================================================== |
|
|
|
; |
|
|
|
DI ; NO INTERRUPTS |
|
|
|
JP START |
|
|
|
; |
|
|
|
; BOOT OPTION PROCESSING - IN LOW MEMORY SO ~200H-7FFFH UPWARDS CAN BE OVERWRITTEN WHEN LOADING ROMS |
|
|
|
; STACK IS AT 8000H+ SO WE CANT OVERWRITE THAT - MAYBE WE CAN MOVE THAT LATER. |
|
|
|
; |
|
|
|
GOROM: EX DE,HL |
|
|
|
LD B,5 ; PUT NEXT FIVE ADDRESSES ON STACK |
|
|
|
GOROMB1:INC HL |
|
|
|
LD E,(HL) ; EXEC |
|
|
|
INC HL ; SOURCE |
|
|
|
LD D,(HL) ; DEST |
|
|
|
PUSH DE ; SIZE |
|
|
|
DJNZ GOROMB1 ; BANKS |
|
|
|
|
|
|
|
POP DE ; BANKS |
|
|
|
POP HL ; SIZE |
|
|
|
LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY |
|
|
|
RST 08 ; DO IT |
|
|
|
|
|
|
|
POP DE ; DEST |
|
|
|
POP HL ; SOURCE |
|
|
|
LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY |
|
|
|
RST 08 ; DO IT |
|
|
|
; |
|
|
|
; EXEC ADDRESS ON TOP OF STACK |
|
|
|
; |
|
|
|
#IF (PLATFORM == PLT_UNA) |
|
|
|
LD BC,$00FB ; GET LOWER PAGE ID |
|
|
|
RST 08 ; DE := LOWER PAGE ID == BOOT ROM PAGE |
|
|
|
LD L,1 ; BOOT DISK UNIT IS ROM (UNIT ID = 1) |
|
|
|
LD BC,$01FC ; UNA FUNC: SET BOOTSTRAP HISTORY |
|
|
|
RST 08 ; CALL UNA |
|
|
|
|
|
|
|
; HL IS ALREADY ON STACK AS REQUIRED BY UNA EXEC CHAIN CALL |
|
|
|
|
|
|
|
LD DE,BID_USR ; TARGET BANK ID |
|
|
|
PUSH DE ; ... ON STACK |
|
|
|
DI ; ENTER WITH INTS DISABLED |
|
|
|
JP $FFF7 ; UNA INTER-PAGE EXEC CHAIN |
|
|
|
#ELSE |
|
|
|
LD A,(HB_CURBNK) ; GET CURRENT BANK ID FROM PROXY DATA |
|
|
|
LD B,BF_SYSSET ; HB FUNC: SET HBIOS PARAMETER |
|
|
|
LD C,BF_SYSSET_BOOTINFO ; HB SUBFUNC: SET BOOT INFO |
|
|
|
LD L,A ; ... AND SAVE AS BOOT BANK |
|
|
|
LD DE,$0100 ; BOOT VOLUME (UNIT, SLICE) |
|
|
|
RST 08 |
|
|
|
; |
|
|
|
LD A,BID_USR ; ACTIVATE USER BANK |
|
|
|
POP HL ; RECOVER ENTRY ADDRESS |
|
|
|
DI ; ENTER WITH INTS DISABLED |
|
|
|
CALL HB_BNKCALL ; AND GO |
|
|
|
HALT ; WE SHOULD NEVER RETURN!!! |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
START: DI ; NO INTERRUPTS |
|
|
|
LD SP,BL_STACK ; SETUP STACK |
|
|
|
|
|
|
|
; |
|
|
|
@ -247,8 +301,12 @@ DB_INVALID: |
|
|
|
#DEFCONT \ .DB M9 |
|
|
|
#DEFCONT \ .DB M10 |
|
|
|
; |
|
|
|
; NOTE : THE FORMATTING OF THE FOLLOWING IS CRITICAL. TASM DOES NOT PASS MACRO ARGUMENTS WELL. |
|
|
|
; ENSURE STD.ASM HOLDS THE DEFINITIONS FOR *_LOC, *_SIZ *_END AND ANY CODE GENERATED WHICH DOES NOT |
|
|
|
; INCLUDE STD.ASM IS SYNCED. |
|
|
|
|
|
|
|
; name menu exec dest-exec source dest-addr img-size source-bank dest desc |
|
|
|
; DB DB DW DB DW DW DW DW DB DB |
|
|
|
; DB DB DW DW DW DW DW DB DB DB |
|
|
|
MENU_S: MENU_L("MONITOR$ $", "M", GOROM, MON_SERIAL, 1000h, MON_LOC, MON_SIZ, BID_BIOSIMG, BID_USR, "Monitor$12345") |
|
|
|
MENU_1: MENU_L("CP/M$ $", "C", GOROM, CPM_ENT, 2000h, CPM_LOC, CPM_SIZ, BID_BIOSIMG, BID_USR, "CP/M 80 2.2$ ") |
|
|
|
MENU_L("Z-SYSTEM$$", "Z", GOROM, CPM_ENT, 5000h, CPM_LOC, CPM_SIZ, BID_BIOSIMG, BID_USR, "ZSDOS V1.1$ ") |
|
|
|
@ -268,57 +326,7 @@ MENU_E: |
|
|
|
MENU_V .EQU MENU_1-MENU_S ; LENGTH OF EACH MENU RECORD |
|
|
|
MENU_N .EQU ((MENU_E-MENU_S)/MENU_V)+1 ; NUMBER OF MENU ITEMS |
|
|
|
MENU_O .EQU 10 ; OFFSET TO MENU KEY FROM NAME |
|
|
|
; |
|
|
|
; BOOT OPTION PROCESSING |
|
|
|
; |
|
|
|
GOROM: EX DE,HL |
|
|
|
LD B,5 ; PUT NEXT FIVE ADDRESSES ON STACK |
|
|
|
GOROMB1:INC HL |
|
|
|
LD E,(HL) ; EXEC |
|
|
|
INC HL ; SOURCE |
|
|
|
LD D,(HL) ; DEST |
|
|
|
PUSH DE ; SIZE |
|
|
|
DJNZ GOROMB1 ; BANKS |
|
|
|
|
|
|
|
POP DE ; BANKS |
|
|
|
POP HL ; SIZE |
|
|
|
LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY |
|
|
|
RST 08 ; DO IT |
|
|
|
|
|
|
|
POP DE ; DEST |
|
|
|
POP HL ; SOURCE |
|
|
|
LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY |
|
|
|
RST 08 ; DO IT |
|
|
|
; |
|
|
|
; EXEC ADDRESS ON TOP OF STACK |
|
|
|
; |
|
|
|
#IF (PLATFORM == PLT_UNA) |
|
|
|
LD BC,$00FB ; GET LOWER PAGE ID |
|
|
|
RST 08 ; DE := LOWER PAGE ID == BOOT ROM PAGE |
|
|
|
LD L,1 ; BOOT DISK UNIT IS ROM (UNIT ID = 1) |
|
|
|
LD BC,$01FC ; UNA FUNC: SET BOOTSTRAP HISTORY |
|
|
|
RST 08 ; CALL UNA |
|
|
|
|
|
|
|
; HL IS ALREADY ON STACK AS REQUIRED BY UNA EXEC CHAIN CALL |
|
|
|
|
|
|
|
LD DE,BID_USR ; TARGET BANK ID |
|
|
|
PUSH DE ; ... ON STACK |
|
|
|
DI ; ENTER WITH INTS DISABLED |
|
|
|
JP $FFF7 ; UNA INTER-PAGE EXEC CHAIN |
|
|
|
#ELSE |
|
|
|
LD A,(HB_CURBNK) ; GET CURRENT BANK ID FROM PROXY DATA |
|
|
|
LD B,BF_SYSSET ; HB FUNC: SET HBIOS PARAMETER |
|
|
|
LD C,BF_SYSSET_BOOTINFO ; HB SUBFUNC: SET BOOT INFO |
|
|
|
LD L,A ; ... AND SAVE AS BOOT BANK |
|
|
|
LD DE,$0100 ; BOOT VOLUME (UNIT, SLICE) |
|
|
|
RST 08 |
|
|
|
; |
|
|
|
LD A,BID_USR ; ACTIVATE USER BANK |
|
|
|
POP HL ; RECOVER ENTRY ADDRESS |
|
|
|
DI ; ENTER WITH INTS DISABLED |
|
|
|
CALL HB_BNKCALL ; AND GO |
|
|
|
HALT ; WE SHOULD NEVER RETURN!!! |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
; REBOOT ROMLDR |
|
|
|
; |
|
|
|
|