|
|
|
@ -54,10 +54,6 @@ INT_IM1 .EQU $FF00 |
|
|
|
; |
|
|
|
DI ; NO INTERRUPTS |
|
|
|
LD SP,BL_STACK ; SETUP STACK |
|
|
|
; |
|
|
|
; BANNER |
|
|
|
LD DE,STR_BANNER |
|
|
|
CALL WRITESTR |
|
|
|
|
|
|
|
; |
|
|
|
#IF (PLATFORM != PLT_UNA) |
|
|
|
@ -110,15 +106,13 @@ INT_IM1 .EQU $FF00 |
|
|
|
#ENDIF |
|
|
|
EI |
|
|
|
; |
|
|
|
; RUN THE BOOT LOADER MENU |
|
|
|
JP DOBOOTMENU |
|
|
|
; |
|
|
|
;__DOBOOT________________________________________________________________________________________________________________________ |
|
|
|
; |
|
|
|
; PERFORM BOOT FRONT PANEL ACTION |
|
|
|
;________________________________________________________________________________________________________________________________ |
|
|
|
; RUN THE BOOT LOADER MENU |
|
|
|
; |
|
|
|
|
|
|
|
LD DE,STR_BANNER ; DISPLAY BOOT BANNER |
|
|
|
|
|
|
|
DOBOOTMENU: |
|
|
|
CALL WRITESTR ; DISPLAY MESSAGE OR ERROR |
|
|
|
CALL NEWLINE |
|
|
|
; |
|
|
|
#IF (DSKYENABLE) |
|
|
|
@ -214,9 +208,9 @@ MENU_C: EX DE,HL |
|
|
|
; CHECK FOR DRIVE EXECUTION |
|
|
|
|
|
|
|
CP '0' ; 0-9, DISK DEVICE |
|
|
|
JP C,DB_INVALID |
|
|
|
JR C,DB_INVALID |
|
|
|
CP '9' + 1 |
|
|
|
JP NC,DB_INVALID |
|
|
|
JR NC,DB_INVALID |
|
|
|
SUB '0' |
|
|
|
JP GOBOOTDISK |
|
|
|
|
|
|
|
@ -229,6 +223,10 @@ MENU_X: CALL NEWLINE |
|
|
|
EX DE,HL |
|
|
|
JP (HL) ; JUMP TO THE ROUTINE TO EXECUTE IT |
|
|
|
|
|
|
|
DB_INVALID: |
|
|
|
LD DE,STR_INVALID |
|
|
|
JP DOBOOTMENU |
|
|
|
|
|
|
|
#DEFINE MENU_L(M1,M2,M3,M4,M5,M6,M7,M8,M9,M10) \ |
|
|
|
#DEFCONT \ .DB M1 |
|
|
|
#DEFCONT \ .DB M2 |
|
|
|
@ -247,33 +245,27 @@ MENU_S: MENU_L("MONITOR $$", "M", GOROM, BID_BIOSIMG, MON_SERIAL, 0A00h, |
|
|
|
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("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$ ") |
|
|
|
|
|
|
|
#IF (DSKYENABLE) |
|
|
|
MENU_L("DSKY-MON $", "D", GOROM, BID_BIOSIMG, MON_DSKY, 0A00h, MON_LOC, MON_SIZ, BID_USR, DSKY Monitor$") |
|
|
|
MENU_L("DSKY-MON $", "D", GOROM, BID_BIOSIMG, MON_DSKY, 0A00h, MON_LOC, MON_SIZ, BID_USR, "DSKY Monitor$") |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
|
|
|
|
.DB "REBOOT$ ", "R" |
|
|
|
.DW REBOOT |
|
|
|
|
|
|
|
MENU_E: |
|
|
|
|
|
|
|
MENU_V .EQU MENU_1-MENU_S ; LENGTH OF EACH MENU RECORD |
|
|
|
MENU_N .EQU (MENU_E-MENU_S)/MENU_V ; NUMBER OF MENU ITEMS |
|
|
|
; |
|
|
|
; BOOT OPTION PROCESSING |
|
|
|
MENU_N .EQU ((MENU_E-MENU_S)/MENU_V)+1; NUMBER OF MENU ITEMS |
|
|
|
; |
|
|
|
DB_INVALID: |
|
|
|
LD DE,STR_INVALID |
|
|
|
CALL WRITESTR |
|
|
|
JP DOBOOTMENU |
|
|
|
; BOOT OPTION PROCESSING |
|
|
|
; |
|
|
|
GOROM: EX DE,HL |
|
|
|
INC HL ; HL POINTS TO source-bank |
|
|
|
; LD A,(HL) |
|
|
|
; CP BID_BIOSIMG |
|
|
|
; JP Z,DOBOOTMENU; ONLY CURRENT BANK SUPPORTED |
|
|
|
|
|
|
|
LD B,4 ; |
|
|
|
LD B,4 ; PUT NEXT FOUR ADDRESSES ON STACK |
|
|
|
GOROM_1:INC HL |
|
|
|
LD E,(HL) |
|
|
|
INC HL |
|
|
|
@ -289,11 +281,8 @@ GOROM_1:INC HL |
|
|
|
|
|
|
|
GOROMB: EX DE,HL |
|
|
|
INC HL ; HL POINTS TO source-bank |
|
|
|
; LD A,(HL) |
|
|
|
; CP BID_BIOSIMG |
|
|
|
; JP Z,DOBOOTMENU; ONLY CURRENT BANK SUPPORTED |
|
|
|
|
|
|
|
LD B,4 |
|
|
|
LD B,4 ; PUT NEXT FOUR ADDRESSES ON STACK |
|
|
|
GOROMB1:INC HL |
|
|
|
LD E,(HL) |
|
|
|
INC HL |
|
|
|
@ -341,11 +330,16 @@ CHAIN: ; EXPECT EXEC ADDRESS ON TOP OF STACK |
|
|
|
HALT ; WE SHOULD NEVER RETURN!!! |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
; REBOOT ROMLDR |
|
|
|
; |
|
|
|
REBOOT: LD A,BID_BOOT ; BOOT BANK |
|
|
|
LD HL,0 ; ADDRESS ZERO |
|
|
|
CALL HB_BNKCALL ; DOES NOT RETURN |
|
|
|
|
|
|
|
GOBOOTDISK: |
|
|
|
LD (BL_BOOTID),A |
|
|
|
LD DE,STR_BOOTDISK |
|
|
|
CALL WRITESTR |
|
|
|
; JP BOOTDISK |
|
|
|
; |
|
|
|
; BOOT FROM DISK DRIVE |
|
|
|
; |
|
|
|
@ -538,23 +532,19 @@ BOOTDISK: |
|
|
|
DB_NODISK: |
|
|
|
; SELDSK DID NOT LIKE DRIVE SELECTION |
|
|
|
LD DE,STR_NODISK |
|
|
|
CALL WRITESTR |
|
|
|
JP DOBOOTMENU |
|
|
|
|
|
|
|
DB_NOBOOT: |
|
|
|
; DISK IS NOT BOOTABLE |
|
|
|
LD DE,STR_NOBOOT |
|
|
|
CALL WRITESTR |
|
|
|
JP DOBOOTMENU |
|
|
|
|
|
|
|
DB_ERR: |
|
|
|
; I/O ERROR DURING BOOT ATTEMPT |
|
|
|
LD DE,STR_BOOTERR |
|
|
|
CALL WRITESTR |
|
|
|
JP DOBOOTMENU |
|
|
|
; |
|
|
|
#IF (DSKYENABLE) |
|
|
|
; |
|
|
|
; |
|
|
|
;__SEGDISPLAY________________________________________________________________________________________ |
|
|
|
; |
|
|
|
@ -777,7 +767,6 @@ DEV15 .EQU DEVUNK |
|
|
|
; |
|
|
|
STR_BOOTDISK .DB "BOOT FROM DISK\r\n$" |
|
|
|
STR_BOOTDISK1 .DB "\r\nReading disk information...$" |
|
|
|
;STR_LIST .DB "LIST DEVICES\r\n$" |
|
|
|
STR_INVALID .DB "INVALID SELECTION\r\n$" |
|
|
|
STR_SETUP .DB "SYSTEM SETUP\r\n$" |
|
|
|
STR_SIG .DB "SIGNATURE=$" |
|
|
|
@ -785,13 +774,11 @@ 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_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_LAUNCH .DB "\r\nLaunching ...$" |
|
|
|
STR_BANNER .DB "\r\n", PLATFORM_NAME, " Boot Loader" |
|
|
|
STR_NL .DB "\r\n$" |
|
|
|
; |
|
|
|
|