|
|
|
@ -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 BC,10 |
|
|
|
ADD HL,BC ; HL POINTS TO MENU KEY |
|
|
|
WRITEM1:LD A,(DE) |
|
|
|
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,MENU_O |
|
|
|
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) |
|
|
|
JR Z,WRITEM2 |
|
|
|
|
|
|
|
CP (HL) ; DO WE HAVE A MATCH WITH MENU |
|
|
|
JR NZ,WRITEM3 |
|
|
|
|
|
|
|
LD A,'(' |
|
|
|
CALL COUT |
|
|
|
LD A,(DE) |
|
|
|
@ -147,13 +152,13 @@ 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 |
|
|
|
|
|
|
|
LD A,' ' |
|
|
|
CALL COUT |
|
|
|
|
|
|
|
POP DE |
|
|
|
EX DE,HL |
|
|
|
ADD HL,DE |
|
|
|
EX DE,HL |
|
|
|
DJNZ MENU_L ; NEXT MENU ITEM |
|
|
|
|
|
|
|
CALL NEWLINE ; DISPLAY AVAILABLE DRIVES |
|
|
|
@ -214,12 +219,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 +239,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" |
|
|
|
@ -258,66 +267,48 @@ MENU_1: MENU_L("CP/M $ $", "C", GOROM, BID_BIOSIMG, CPM_ENT, 2000h, |
|
|
|
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 |
|
|
|
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 |
|
|
|
|
|
|
|
GOROMB: EX DE,HL |
|
|
|
INC HL ; HL POINTS TO source-bank |
|
|
|
|
|
|
|
LD B,4 ; PUT NEXT FOUR ADDRESSES ON STACK |
|
|
|
GOROM: EX DE,HL |
|
|
|
LD B,5 ; PUT NEXT FIVE ADDRESSES ON STACK |
|
|
|
GOROMB1:INC HL |
|
|
|
LD E,(HL) |
|
|
|
INC HL |
|
|
|
LD D,(HL) |
|
|
|
PUSH DE |
|
|
|
DJNZ GOROMB1 |
|
|
|
LD E,(HL) ; EXEC |
|
|
|
INC HL ; SOURCE |
|
|
|
LD D,(HL) ; DEST |
|
|
|
PUSH DE ; SIZE |
|
|
|
DJNZ GOROMB1 ; BANKS |
|
|
|
|
|
|
|
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 |
|
|
|
RST 08 |
|
|
|
|
|
|
|
POP DE ; DEST |
|
|
|
POP HL ; SOURCE |
|
|
|
LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY |
|
|
|
RST 08 ; DO IT |
|
|
|
|
|
|
|
CHAIN: ; EXPECT EXEC ADDRESS ON TOP OF STACK |
|
|
|
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 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 |
|
|
|
@ -570,14 +561,13 @@ PRTALL1: ; LOOP THRU ALL UNITS AVAILABLE |
|
|
|
PRTDRV: |
|
|
|
PUSH BC ; SAVE UNIT |
|
|
|
PUSH DE ; SAVE DISK TYPE |
|
|
|
LD DE,STR_PREFIX ; NEWLINE AND SPACING |
|
|
|
CALL WRITESTR ; PRINT IT |
|
|
|
LD A,'(' ; NEWLINE AND SPACING |
|
|
|
CALL COUT ; PRINT IT |
|
|
|
LD A,B ; DRIVE LETTER TO A |
|
|
|
ADD A,'0' ; MAKE IT DISPLAY NUMERIC |
|
|
|
CALL COUT ; PRINT IT |
|
|
|
LD A,')' ; DRIVE LETTER COLON |
|
|
|
CALL COUT ; PRINT IT |
|
|
|
; CALL PC_SPACE |
|
|
|
POP DE ; RECOVER DISK TYPE |
|
|
|
LD A,D ; DISK TYPE TO A |
|
|
|
CP $40 ; RAM/ROM? |
|
|
|
@ -641,14 +631,13 @@ PRTALL: |
|
|
|
LD C,0 ; INIT DEVICE INDEX |
|
|
|
; |
|
|
|
PRTALL1: |
|
|
|
LD DE,STR_PREFIX ; FORMATTING |
|
|
|
CALL WRITESTR ; PRINT IT |
|
|
|
LD A,'(' ; FORMATTING |
|
|
|
CALL COUT ; PRINT IT |
|
|
|
LD A,C ; INDEX TO A |
|
|
|
ADD A,'0' ; MAKE NUMERIC CHAR |
|
|
|
CALL COUT ; PRINT IT |
|
|
|
LD A,')' ; FORMATTING |
|
|
|
CALL COUT ; PRINT IT |
|
|
|
; CALL PC_SPACE ; SPACING |
|
|
|
PUSH BC ; SAVE LOOP CONTROL |
|
|
|
LD B,BF_DIODEVICE ; HBIOS FUNC: REPORT DEVICE INFO |
|
|
|
RST 08 ; CALL HBIOS |
|
|
|
@ -729,13 +718,11 @@ STR_CPMLOC .DB "LOC=$" |
|
|
|
STR_CPMEND .DB "END=$" |
|
|
|
STR_CPMENT .DB "ENT=$" |
|
|
|
STR_LABEL .DB "LABEL=$" |
|
|
|
STR_PREFIX .DB "($" |
|
|
|
STR_LOADING .DB "\r\nLoading...$" |
|
|
|
STR_NODISK .DB "\r\nNo disk!$" |
|
|
|
STR_NOBOOT .DB "\r\nDisk not bootable!$" |
|
|
|
STR_BOOTERR .DB "\r\nBoot failure!$" |
|
|
|
STR_BANNER .DB "\r\n", PLATFORM_NAME, " Boot Loader" |
|
|
|
STR_NL .DB "\r\n$" |
|
|
|
STR_BANNER .DB "\r\n", PLATFORM_NAME, " Boot Loader\r\n$" |
|
|
|
; |
|
|
|
#IF (DSKYENABLE) |
|
|
|
; b o o t . . |
|
|
|
|