From 7c302ba456cc0a510c2d3c2f550fba3fdce0752c Mon Sep 17 00:00:00 2001 From: b1ackmai1er <39449559+b1ackmai1er@users.noreply.github.com> Date: Wed, 7 Nov 2018 09:44:23 +0800 Subject: [PATCH] Add Reboot menu option. Some optimizations of error message display --- Source/HBIOS/romldr.asm | 65 +++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 39 deletions(-) diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index 04e7c208..b80226f3 100644 --- a/Source/HBIOS/romldr.asm +++ b/Source/HBIOS/romldr.asm @@ -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$") #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$" ;