|
|
|
@ -125,20 +125,25 @@ DOBOOTMENU: |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
LD B,MENU_N ; DISPLAY ALL ROM MENU ENTRIES |
|
|
|
LD DE,MENU_S |
|
|
|
LD HL,MENU_V |
|
|
|
MENU_L: PUSH DE |
|
|
|
WRITE_M:PUSH BC |
|
|
|
PUSH HL |
|
|
|
PUSH DE |
|
|
|
POP HL |
|
|
|
LD HL,MENU_S ; DE POINTS TO START RECORD |
|
|
|
|
|
|
|
MENU_L: PUSH HL ; SAVE CURRENT RECORD POSITION |
|
|
|
|
|
|
|
PUSH HL ; PUT CURRENT ROM RECORD IN HL |
|
|
|
POP DE |
|
|
|
|
|
|
|
PUSH BC ; POINT HL TO THE MENU KEY |
|
|
|
LD BC,10 |
|
|
|
ADD HL,BC ; HL POINTS TO MENU KEY |
|
|
|
WRITEM1:LD A,(DE) |
|
|
|
ADD HL,BC |
|
|
|
POP BC |
|
|
|
|
|
|
|
WRITEM1:LD A,(DE) ; DE STEPS THROUGH THE MENU NAMES |
|
|
|
CP '$' ; TEST FOR STRING TERMINATOR |
|
|
|
JP Z,WRITEM2 |
|
|
|
CP (HL) |
|
|
|
|
|
|
|
CP (HL) ; DO WE HAVE A MATCH WITH MENU |
|
|
|
JR NZ,WRITEM3 |
|
|
|
|
|
|
|
LD A,'(' |
|
|
|
CALL COUT |
|
|
|
LD A,(DE) |
|
|
|
@ -147,13 +152,12 @@ WRITEM1:LD A,(DE) |
|
|
|
WRITEM3:CALL COUT |
|
|
|
INC DE |
|
|
|
JR WRITEM1 |
|
|
|
WRITEM2:POP HL |
|
|
|
POP BC |
|
|
|
WRITEM2: |
|
|
|
|
|
|
|
POP HL ; RECALL THE PREVIOUS RECORD |
|
|
|
LD DE,MENU_V ; SAVED AT MENU_L |
|
|
|
ADD HL,DE ; MOVE TO NEXT RECORD |
|
|
|
|
|
|
|
POP DE |
|
|
|
EX DE,HL |
|
|
|
ADD HL,DE |
|
|
|
EX DE,HL |
|
|
|
DJNZ MENU_L ; NEXT MENU ITEM |
|
|
|
|
|
|
|
CALL NEWLINE ; DISPLAY AVAILABLE DRIVES |
|
|
|
@ -214,12 +218,16 @@ MENU_C: EX DE,HL |
|
|
|
JP GOBOOTDISK |
|
|
|
|
|
|
|
MENU_X: CALL NEWLINE |
|
|
|
EX DE,HL ; WE HAVE A VALID ROM MENU OPTION |
|
|
|
INC HL |
|
|
|
|
|
|
|
; DE CONTAIN POINTER TO MENU RECORD |
|
|
|
|
|
|
|
EX DE,HL |
|
|
|
INC HL ; WE HAVE A VALID ROM MENU OPTION |
|
|
|
LD E,(HL) |
|
|
|
INC HL |
|
|
|
LD D,(HL) |
|
|
|
EX DE,HL |
|
|
|
|
|
|
|
JP (HL) ; JUMP TO THE ROUTINE TO EXECUTE IT |
|
|
|
|
|
|
|
DB_INVALID: |
|
|
|
@ -230,26 +238,26 @@ DB_INVALID: |
|
|
|
#DEFCONT \ .DB M1 |
|
|
|
#DEFCONT \ .DB M2 |
|
|
|
#DEFCONT \ .DW M3 |
|
|
|
#DEFCONT \ .DB M4 |
|
|
|
#DEFCONT \ .DW M4 |
|
|
|
#DEFCONT \ .DW M5 |
|
|
|
#DEFCONT \ .DW M6 |
|
|
|
#DEFCONT \ .DW M7 |
|
|
|
#DEFCONT \ .DW M8 |
|
|
|
#DEFCONT \ .DB M8 |
|
|
|
#DEFCONT \ .DB M9 |
|
|
|
#DEFCONT \ .DB M10 |
|
|
|
; |
|
|
|
; name menu exec source-bank dest-exec source-addr dest-addr img-size dest-bank desc |
|
|
|
; DB DB DW DB DW DW DW DW DB DB |
|
|
|
MENU_S: MENU_L("MONITOR $$", "M", GOROM, BID_BIOSIMG, MON_SERIAL, 1000h, MON_LOC, MON_SIZ, BID_USR, "Monitor$12345") |
|
|
|
MENU_1: MENU_L("CP/M $ $", "C", GOROM, BID_BIOSIMG, CPM_ENT, 2000h, CPM_LOC, CPM_SIZ, BID_USR, "CP/M 80 2.2$ ") |
|
|
|
MENU_L("Z-SYSTEM $", "Z", GOROM, BID_BIOSIMG, CPM_ENT, 5000h, CPM_LOC, CPM_SIZ, BID_USR, "ZSDOS V1.1 $ ") |
|
|
|
MENU_L("$ $", "E", GOROM, BID_BIOSIMG, EGG_LOC, 0E00h, EGG_LOC, EGG_SIZ, BID_USR, "Easter Egg $ ") |
|
|
|
MENU_L("FORTH $ $", "F", GOROMB, BID_OSIMG, FTH_LOC, 0000h, FTH_LOC, FTH_SIZ, BID_USR, "Camel Forth$ ") |
|
|
|
MENU_L("BASIC $ $", "B", GOROMB, BID_OSIMG, BAS_LOC, 1700h, BAS_LOC, BAS_SIZ, BID_USR, "Nascom BASIC$") |
|
|
|
MENU_L("T-BASIC $$", "T", GOROMB, BID_OSIMG, TBC_LOC, 3700h, TBC_LOC, TBC_SIZ, BID_USR, "Tasty BASIC$ ") |
|
|
|
; name menu exec dest-exec source dest-addr img-size source-bank dest desc |
|
|
|
; DB DB DW DB DW DW DW DW 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 $ ") |
|
|
|
MENU_L("$ $", "E", GOROM, EGG_LOC, 0E00h, EGG_LOC, EGG_SIZ, BID_BIOSIMG, BID_USR, "Easter Egg $ ") |
|
|
|
MENU_L("FORTH $ $", "F", GOROM, FTH_LOC, 0000h, FTH_LOC, FTH_SIZ, BID_OSIMG, BID_USR, "Camel Forth$ ") |
|
|
|
MENU_L("BASIC $ $", "B", GOROM, BAS_LOC, 1700h, BAS_LOC, BAS_SIZ, BID_OSIMG, BID_USR, "Nascom BASIC$") |
|
|
|
MENU_L("T-BASIC $$", "T", GOROM, TBC_LOC, 3700h, TBC_LOC, TBC_SIZ, BID_OSIMG, BID_USR, "Tasty BASIC$ ") |
|
|
|
|
|
|
|
#IF (DSKYENABLE) |
|
|
|
MENU_L("DSKY-MON $", "D", GOROM, BID_BIOSIMG, MON_DSKY, 1000h, MON_LOC, MON_SIZ, BID_USR, "DSKY Monitor$") |
|
|
|
MENU_L("DSKY-MON $", "D", GOROM, MON_DSKY, 1000h, MON_LOC, MON_SIZ, BID_BIOSIMG, BID_USR,"DSKY Monitor$") |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
.DB "REBOOT$ ", "R" |
|
|
|
@ -261,47 +269,48 @@ MENU_N .EQU ((MENU_E-MENU_S)/MENU_V)+1 ; NUMBER OF MENU ITEMS |
|
|
|
; |
|
|
|
; BOOT OPTION PROCESSING |
|
|
|
; |
|
|
|
GOROM: EX DE,HL |
|
|
|
INC HL ; HL POINTS TO source-bank |
|
|
|
|
|
|
|
LD B,4 ; PUT NEXT FOUR ADDRESSES ON STACK |
|
|
|
GOROM_1:INC HL |
|
|
|
LD E,(HL) |
|
|
|
INC HL |
|
|
|
LD D,(HL) |
|
|
|
PUSH DE |
|
|
|
DJNZ GOROM_1 |
|
|
|
|
|
|
|
POP BC ; SIZE |
|
|
|
POP DE ; DEST |
|
|
|
POP HL ; SOURCE |
|
|
|
LDIR |
|
|
|
JR CHAIN |
|
|
|
GOROM: EX DE,HL ; |
|
|
|
|
|
|
|
GOROMB: EX DE,HL |
|
|
|
INC HL ; HL POINTS TO source-bank |
|
|
|
LD B,5 ; PUT NEXT FOUR ADDRESSES ON STACK |
|
|
|
GOROMB1:INC HL ; |
|
|
|
LD E,(HL) ; EXEC |
|
|
|
INC HL ; SOURCE |
|
|
|
LD D,(HL) ; DEST |
|
|
|
PUSH DE ; SIZE |
|
|
|
DJNZ GOROMB1 ; BANKS |
|
|
|
|
|
|
|
LD B,4 ; PUT NEXT FOUR ADDRESSES ON STACK |
|
|
|
GOROMB1:INC HL |
|
|
|
LD E,(HL) |
|
|
|
INC HL |
|
|
|
LD D,(HL) |
|
|
|
PUSH DE |
|
|
|
DJNZ GOROMB1 |
|
|
|
POP DE ; BANKS |
|
|
|
POP HL ; SIZE |
|
|
|
|
|
|
|
POP HL ; SIZE |
|
|
|
LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY |
|
|
|
LD D,BID_USR ; D = DEST BANK = USER BANK |
|
|
|
LD E,BID_OSIMG ; E = SRC BANK = BIOS BANK |
|
|
|
; LD A,D |
|
|
|
; CALL PRTHEXBYTE |
|
|
|
; CALL NEWLINE |
|
|
|
; LD A,E |
|
|
|
; CALL PRTHEXBYTE |
|
|
|
; CALL NEWLINE |
|
|
|
|
|
|
|
LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY |
|
|
|
; LD D,BID_USR ; D = DEST BANK = USER BANK |
|
|
|
; LD E,BID_OSIMG ; E = SRC BANK = BIOS BANK |
|
|
|
RST 08 |
|
|
|
|
|
|
|
POP DE ; DEST |
|
|
|
POP HL ; SOURCE |
|
|
|
LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY |
|
|
|
RST 08 ; DO IT |
|
|
|
POP DE ; DEST |
|
|
|
POP HL ; SOURCE |
|
|
|
|
|
|
|
; LD B,D |
|
|
|
; LD C,E |
|
|
|
; CALL PRTHEXWORD |
|
|
|
; LD B,H |
|
|
|
; LD C,L |
|
|
|
; CALL PRTHEXWORD |
|
|
|
; CALL NEWLINE |
|
|
|
|
|
|
|
LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY |
|
|
|
RST 08 ; DO IT |
|
|
|
|
|
|
|
CHAIN: ; EXPECT 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 |
|
|
|
@ -315,9 +324,12 @@ CHAIN: ; EXPECT EXEC ADDRESS ON TOP OF 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 |
|
|
|
; CALL PRTHEXBYTE |
|
|
|
|
|
|
|
|
|
|
|
LD B,BF_SYSSET ; HB FUNC: SET HBIOS PARAMETER |
|
|
|
LD C,BF_SYSSET_BOOTINFO ; HB SUBFUNC: SET BOOT INFO |
|
|
|
LD A,(HB_CURBNK) ; GET CURRENT BANK ID FROM PROXY DATA |
|
|
|
LD L,A ; ... AND SAVE AS BOOT BANK |
|
|
|
LD DE,$0100 ; BOOT VOLUME (UNIT, SLICE) |
|
|
|
RST 08 |
|
|
|
|