mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:43:15 -06:00
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:
@@ -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!$"
|
||||||
|
|||||||
Reference in New Issue
Block a user