|
|
|
@ -56,7 +56,7 @@ INT_IM1 .EQU $FF00 |
|
|
|
LD SP,BL_STACK ; SETUP STACK |
|
|
|
; |
|
|
|
; BANNER |
|
|
|
LD DE,STR_BANNER |
|
|
|
LD DE,STR_BANNER |
|
|
|
CALL WRITESTR |
|
|
|
|
|
|
|
; |
|
|
|
@ -119,19 +119,19 @@ INT_IM1 .EQU $FF00 |
|
|
|
;________________________________________________________________________________________________________________________________ |
|
|
|
; |
|
|
|
DOBOOTMENU: |
|
|
|
CALL NEWLINE |
|
|
|
; |
|
|
|
#IF (DSKYENABLE) |
|
|
|
LD HL,BOOT ; POINT TO BOOT MESSAGE |
|
|
|
CALL SEGDISPLAY ; DISPLAY MESSAGE |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
; |
|
|
|
#IF (BOOTTYPE == BT_AUTO) |
|
|
|
LD BC,100 * BOOT_TIMEOUT |
|
|
|
LD (BL_TIMEOUT),BC |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
DB_BOOTLOOP: ; OUTPUT A '$' TERMINATED MENU TEXT WITH HIGHLIGHT |
|
|
|
LD B,MENU_N |
|
|
|
; |
|
|
|
LD B,MENU_N ; DISPLAY ALL ROM MENU ENTRIES |
|
|
|
LD DE,MENU_S |
|
|
|
LD HL,MENU_V |
|
|
|
MENU_L: PUSH DE |
|
|
|
@ -166,13 +166,42 @@ WRITEM2:POP HL |
|
|
|
CALL NEWLINE ; DISPLAY AVAILABLE DRIVES |
|
|
|
CALL PRTALL |
|
|
|
CALL PC_COLON |
|
|
|
|
|
|
|
DB_BOOTLOOP: |
|
|
|
|
|
|
|
MENU_W: CALL CST ; INPUT A MENU SELECTION |
|
|
|
CALL CST ; CHECK CONSOLE INPUT |
|
|
|
OR A |
|
|
|
JP Z,MENU_W |
|
|
|
CALL CINUC |
|
|
|
JR NZ,GOTK1 |
|
|
|
|
|
|
|
#IF (DSKYENABLE) |
|
|
|
CALL KY_STAT ; CHECK DSKY INPUR |
|
|
|
OR A |
|
|
|
JR Z,GOTNK |
|
|
|
|
|
|
|
CALL KY_GET |
|
|
|
JR MENU_A |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
GOTNK: ; CHECK AUTOBOOT TIMEOUT |
|
|
|
|
|
|
|
#IF (BOOTTYPE == BT_AUTO) |
|
|
|
LD DE,625 ; DELAY FOR 10MS TO MAKE TIMEOUT CALC EASY |
|
|
|
CALL VDELAY ; 16US * 625 = 10MS |
|
|
|
LD BC,(BL_TIMEOUT) ; CHECK/INCREMENT TIMEOUT |
|
|
|
DEC BC |
|
|
|
LD (BL_TIMEOUT),BC |
|
|
|
LD A,B |
|
|
|
OR C |
|
|
|
JP NZ,DB_BOOTLOOP |
|
|
|
|
|
|
|
LD A,BOOT_DEFAULT ; TIMEOUT EXPIRED, |
|
|
|
JR MENU_A ; PERFORM DEFAULT BOOT ACTION |
|
|
|
#ENDIF |
|
|
|
JR DB_BOOTLOOP |
|
|
|
|
|
|
|
LD B,MENU_N |
|
|
|
GOTK1: CALL CINUC |
|
|
|
|
|
|
|
MENU_A: LD B,MENU_N |
|
|
|
LD DE,MENU_S+10-MENU_V |
|
|
|
LD HL,MENU_V |
|
|
|
MENU_C: EX DE,HL |
|
|
|
@ -191,84 +220,15 @@ MENU_C: EX DE,HL |
|
|
|
SUB '0' |
|
|
|
JP GOBOOTDISK |
|
|
|
|
|
|
|
MENU_X: EX DE,HL ; WE HAVE A VALID ROM MENU OPTION |
|
|
|
MENU_X: CALL NEWLINE |
|
|
|
EX DE,HL ; WE HAVE A VALID ROM MENU OPTION |
|
|
|
INC HL |
|
|
|
LD E,(HL) |
|
|
|
INC HL |
|
|
|
LD D,(HL) |
|
|
|
EX DE,HL |
|
|
|
JP (HL) ;; JUMP TO THE ROUTINE TO EXECUTE IT |
|
|
|
JP (HL) ; JUMP TO THE ROUTINE TO EXECUTE IT |
|
|
|
|
|
|
|
DB_CONEND: |
|
|
|
; |
|
|
|
; CHECK FOR DSKY BOOT KEYPRESS |
|
|
|
; |
|
|
|
#IF (DSKYENABLE) |
|
|
|
CALL KY_STAT ; GET KEY FROM KB INTO A |
|
|
|
OR A |
|
|
|
JP Z,DB_DSKYEND |
|
|
|
CALL KY_GET |
|
|
|
CP KY_GO ; GO = MONITOR |
|
|
|
JP Z,GOMONDSKY |
|
|
|
CP KY_BO ; BO = BOOT ROM |
|
|
|
JP Z,GOCPM |
|
|
|
; CP 0AH ; A-F, DISK BOOT |
|
|
|
; JP C,DB_INVALID |
|
|
|
CP 0FH + 1 ; 0-F, DISK BOOT |
|
|
|
; JP NC,DB_INVALID |
|
|
|
; SUB 0AH |
|
|
|
JP GOBOOTDISK |
|
|
|
; LD HL,BOOT ; POINT TO BOOT MESSAGE |
|
|
|
; LD A,00H ; BLANK OUT SELECTION,IT WAS INVALID |
|
|
|
; LD (HL),A ; STORE IT IN DISPLAY BUFFER |
|
|
|
; CALL SEGDISPLAY ; DISPLAY THE BUFFER |
|
|
|
DB_DSKYEND: |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
; IF CONFIGURED, CHECK FOR AUTOBOOT TIMEOUT |
|
|
|
; |
|
|
|
#IF (BOOTTYPE == BT_AUTO) |
|
|
|
|
|
|
|
; DELAY FOR 10MS TO MAKE TIMEOUT CALC EASY |
|
|
|
LD DE,625 ; 16US * 625 = 10MS |
|
|
|
CALL VDELAY |
|
|
|
|
|
|
|
; CHECK/INCREMENT TIMEOUT |
|
|
|
LD BC,(BL_TIMEOUT) |
|
|
|
DEC BC |
|
|
|
LD (BL_TIMEOUT),BC |
|
|
|
LD A,B |
|
|
|
OR C |
|
|
|
JP NZ,DB_BOOTLOOP |
|
|
|
|
|
|
|
; TIMEOUT EXPIRED, PERFORM DEFAULT BOOT ACTION |
|
|
|
LD A,BOOT_DEFAULT |
|
|
|
CP 'B' ; NASCOM BASIC |
|
|
|
JP Z,GOBASIC |
|
|
|
CP 'C' ; CP/M BOOT FROM ROM |
|
|
|
JP Z,GOCPM |
|
|
|
CP 'E' ; CP/M BOOT FROM ROM |
|
|
|
JP Z,GOEASTA |
|
|
|
CP 'F' ; FORTH |
|
|
|
JP Z,GOFORTH |
|
|
|
CP 'M' ; MONITOR |
|
|
|
JP Z,GOMONSER |
|
|
|
; CP 'L' ; LIST DRIVES |
|
|
|
; JP Z,GOLIST |
|
|
|
CP 'T' ; TASTY BASIC |
|
|
|
JP Z,GOTBAS |
|
|
|
CP 'Z' ; ZSYSTEM BOOT FROM ROM |
|
|
|
JP Z,GOZSYS |
|
|
|
CP '0' ; 0-9, DISK DEVICE |
|
|
|
JP C,DB_INVALID |
|
|
|
CP '9' + 1 |
|
|
|
JP NC,DB_INVALID |
|
|
|
SUB '0' |
|
|
|
JP GOBOOTDISK |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
JP DB_BOOTLOOP |
|
|
|
|
|
|
|
#DEFINE MENU_L(M1,M2,M3,M4,M5,M6,M7,M8,M9,M10) \ |
|
|
|
#DEFCONT \ .DB M1 |
|
|
|
#DEFCONT \ .DB M2 |
|
|
|
@ -284,9 +244,9 @@ DB_DSKYEND: |
|
|
|
; 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, 0A00h, MON_LOC, MON_SIZ, BID_USR, "Monitor$12345") |
|
|
|
MENU_1: MENU_L("CPM $ $", "C", GOROM, BID_BIOSIMG, CPM_ENT, 1A00h, CPM_LOC, CPM_SIZ, BID_USR, "CP/M$ ") |
|
|
|
MENU_L("Z-SYSTEM $", "Z", GOROM, BID_BIOSIMG, CPM_ENT, 4A00h, CPM_LOC, CPM_SIZ, BID_USR, "Z-System$ ") |
|
|
|
MENU_L("$ $", "E", GOROM, BID_BIOSIMG, EGG_LOC, 7A00h, EGG_LOC, EGG_SIZ, BID_USR, "$ ") |
|
|
|
MENU_1: MENU_L("CP/M $ $", "C", GOROM, BID_BIOSIMG, CPM_ENT, 1A00h, CPM_LOC, CPM_SIZ, BID_USR, "CP/M 80 2.2$ ") |
|
|
|
MENU_L("Z-SYSTEM $", "Z", GOROM, BID_BIOSIMG, CPM_ENT, 4A00h, CPM_LOC, CPM_SIZ, BID_USR, "ZSDOS V1.1 $ ") |
|
|
|
MENU_L("$ $", "E", GOROM, BID_BIOSIMG, EGG_LOC, 7A00h, EGG_LOC, EGG_SIZ, BID_USR, "Easter Egg $ ") |
|
|
|
MENU_L("FORTH $ $", "R", 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$ ") |
|
|
|
@ -346,15 +306,14 @@ GOROMB1:INC HL |
|
|
|
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 |
|
|
|
RST 08 ; DO IT |
|
|
|
|
|
|
|
CHAIN: ; EXPECT EXEC ADDRESS ON TOP OF STACK |
|
|
|
|
|
|
|
CHAIN: |
|
|
|
; PUSH HL ; SAVE ENTRY ADDRESS |
|
|
|
; |
|
|
|
#IF (PLATFORM == PLT_UNA) |
|
|
|
LD BC,$00FB ; GET LOWER PAGE ID |
|
|
|
RST 08 ; DE := LOWER PAGE ID == BOOT ROM PAGE |
|
|
|
@ -386,7 +345,7 @@ GOBOOTDISK: |
|
|
|
LD (BL_BOOTID),A |
|
|
|
LD DE,STR_BOOTDISK |
|
|
|
CALL WRITESTR |
|
|
|
JP BOOTDISK |
|
|
|
; JP BOOTDISK |
|
|
|
; |
|
|
|
; BOOT FROM DISK DRIVE |
|
|
|
; |
|
|
|
@ -826,7 +785,7 @@ STR_CPMLOC .DB "LOC=$" |
|
|
|
STR_CPMEND .DB "END=$" |
|
|
|
STR_CPMENT .DB "ENT=$" |
|
|
|
STR_LABEL .DB "LABEL=$" |
|
|
|
STR_DRVLIST .DB "\r\nDisk Devices:\r\n$" |
|
|
|
;STR_DRVLIST .DB "\r\nDisk Devices:\r\n$" |
|
|
|
STR_PREFIX .DB "($" |
|
|
|
STR_LOADING .DB "\r\nLoading...$" |
|
|
|
STR_NODISK .DB "\r\nNo disk!$" |
|
|
|
|