Updated to DSKY and BootAuto in romldr

Still more work to be done. Enabling DSKY make the bin file to large for the allocated ROM space.
This commit is contained in:
b1ackmai1er
2018-11-06 21:16:03 +08:00
committed by GitHub
parent 42cf223f4e
commit e2400a535c

View File

@@ -56,7 +56,7 @@ INT_IM1 .EQU $FF00
LD SP,BL_STACK ; SETUP STACK LD SP,BL_STACK ; SETUP STACK
; ;
; BANNER ; BANNER
LD DE,STR_BANNER LD DE,STR_BANNER
CALL WRITESTR CALL WRITESTR
; ;
@@ -119,19 +119,19 @@ INT_IM1 .EQU $FF00
;________________________________________________________________________________________________________________________________ ;________________________________________________________________________________________________________________________________
; ;
DOBOOTMENU: DOBOOTMENU:
CALL NEWLINE
; ;
#IF (DSKYENABLE) #IF (DSKYENABLE)
LD HL,BOOT ; POINT TO BOOT MESSAGE LD HL,BOOT ; POINT TO BOOT MESSAGE
CALL SEGDISPLAY ; DISPLAY MESSAGE CALL SEGDISPLAY ; DISPLAY MESSAGE
#ENDIF #ENDIF
;
#IF (BOOTTYPE == BT_AUTO) #IF (BOOTTYPE == BT_AUTO)
LD BC,100 * BOOT_TIMEOUT LD BC,100 * BOOT_TIMEOUT
LD (BL_TIMEOUT),BC LD (BL_TIMEOUT),BC
#ENDIF #ENDIF
;
DB_BOOTLOOP: ; OUTPUT A '$' TERMINATED MENU TEXT WITH HIGHLIGHT LD B,MENU_N ; DISPLAY ALL ROM MENU ENTRIES
LD B,MENU_N
LD DE,MENU_S LD DE,MENU_S
LD HL,MENU_V LD HL,MENU_V
MENU_L: PUSH DE MENU_L: PUSH DE
@@ -166,13 +166,42 @@ WRITEM2:POP HL
CALL NEWLINE ; DISPLAY AVAILABLE DRIVES CALL NEWLINE ; DISPLAY AVAILABLE DRIVES
CALL PRTALL CALL PRTALL
CALL PC_COLON CALL PC_COLON
DB_BOOTLOOP:
MENU_W: CALL CST ; INPUT A MENU SELECTION CALL CST ; CHECK CONSOLE INPUT
OR A OR A
JP Z,MENU_W JR NZ,GOTK1
CALL CINUC
#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 DE,MENU_S+10-MENU_V
LD HL,MENU_V LD HL,MENU_V
MENU_C: EX DE,HL MENU_C: EX DE,HL
@@ -191,84 +220,15 @@ MENU_C: EX DE,HL
SUB '0' SUB '0'
JP GOBOOTDISK 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 INC HL
LD E,(HL) LD E,(HL)
INC HL INC HL
LD D,(HL) LD D,(HL)
EX DE,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) \ #DEFINE MENU_L(M1,M2,M3,M4,M5,M6,M7,M8,M9,M10) \
#DEFCONT \ .DB M1 #DEFCONT \ .DB M1
#DEFCONT \ .DB M2 #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 ; 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 ; 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_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_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, "Z-System$ ") 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, "$ ") 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 $ $", "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("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$ ") 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 D,BID_USR ; D = DEST BANK = USER BANK
LD E,BID_OSIMG ; E = SRC BANK = BIOS BANK LD E,BID_OSIMG ; E = SRC BANK = BIOS BANK
RST 08 RST 08
POP DE ; DEST POP DE ; DEST
POP HL ; SOURCE POP HL ; SOURCE
LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY 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) #IF (PLATFORM == PLT_UNA)
LD BC,$00FB ; GET LOWER PAGE ID LD BC,$00FB ; GET LOWER PAGE ID
RST 08 ; DE := LOWER PAGE ID == BOOT ROM PAGE RST 08 ; DE := LOWER PAGE ID == BOOT ROM PAGE
@@ -386,7 +345,7 @@ GOBOOTDISK:
LD (BL_BOOTID),A LD (BL_BOOTID),A
LD DE,STR_BOOTDISK LD DE,STR_BOOTDISK
CALL WRITESTR CALL WRITESTR
JP BOOTDISK ; JP BOOTDISK
; ;
; BOOT FROM DISK DRIVE ; BOOT FROM DISK DRIVE
; ;
@@ -826,7 +785,7 @@ STR_CPMLOC .DB "LOC=$"
STR_CPMEND .DB "END=$" STR_CPMEND .DB "END=$"
STR_CPMENT .DB "ENT=$" STR_CPMENT .DB "ENT=$"
STR_LABEL .DB "LABEL=$" STR_LABEL .DB "LABEL=$"
STR_DRVLIST .DB "\r\nDisk Devices:\r\n$" ;STR_DRVLIST .DB "\r\nDisk Devices:\r\n$"
STR_PREFIX .DB "($" STR_PREFIX .DB "($"
STR_LOADING .DB "\r\nLoading...$" STR_LOADING .DB "\r\nLoading...$"
STR_NODISK .DB "\r\nNo disk!$" STR_NODISK .DB "\r\nNo disk!$"