From e2400a535ce99368fab0946eadfe5bea4f43dafb Mon Sep 17 00:00:00 2001 From: b1ackmai1er <39449559+b1ackmai1er@users.noreply.github.com> Date: Tue, 6 Nov 2018 21:16:03 +0800 Subject: [PATCH] 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. --- Source/HBIOS/romldr.asm | 141 ++++++++++++++-------------------------- 1 file changed, 50 insertions(+), 91 deletions(-) diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index fda7d702..04e7c208 100644 --- a/Source/HBIOS/romldr.asm +++ b/Source/HBIOS/romldr.asm @@ -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!$"