diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index 46b07526..ae71101b 100644 --- a/Source/HBIOS/romldr.asm +++ b/Source/HBIOS/romldr.asm @@ -133,13 +133,13 @@ MENU_L: PUSH HL ; SAVE CURRENT RECORD POSITION POP DE PUSH BC ; POINT HL TO THE MENU KEY - LD BC,10 + LD BC,MENU_O ADD HL,BC POP BC WRITEM1:LD A,(DE) ; DE STEPS THROUGH THE MENU NAMES CP '$' ; TEST FOR STRING TERMINATOR - JP Z,WRITEM2 + JR Z,WRITEM2 CP (HL) ; DO WE HAVE A MATCH WITH MENU JR NZ,WRITEM3 @@ -152,12 +152,13 @@ WRITEM1:LD A,(DE) ; DE STEPS THROUGH THE MENU NAMES WRITEM3:CALL COUT INC DE JR WRITEM1 -WRITEM2: - - POP HL ; RECALL THE PREVIOUS RECORD +WRITEM2:POP HL ; RECALL THE PREVIOUS RECORD LD DE,MENU_V ; SAVED AT MENU_L ADD HL,DE ; MOVE TO NEXT RECORD + LD A,' ' + CALL COUT + DJNZ MENU_L ; NEXT MENU ITEM CALL NEWLINE ; DISPLAY AVAILABLE DRIVES @@ -248,16 +249,16 @@ DB_INVALID: ; ; name menu exec dest-exec source dest-addr img-size source-bank dest desc ; DB DB DW DB DW DW DW DW DB DB -MENU_S: MENU_L("MONITOR $$", "M", GOROM, MON_SERIAL, 1000h, MON_LOC, MON_SIZ, BID_BIOSIMG, BID_USR, "Monitor$12345") -MENU_1: MENU_L("CP/M $ $", "C", GOROM, CPM_ENT, 2000h, CPM_LOC, CPM_SIZ, BID_BIOSIMG, BID_USR, "CP/M 80 2.2$ ") - MENU_L("Z-SYSTEM $", "Z", GOROM, CPM_ENT, 5000h, CPM_LOC, CPM_SIZ, BID_BIOSIMG, BID_USR, "ZSDOS V1.1 $ ") - MENU_L("$ $", "E", GOROM, EGG_LOC, 0E00h, EGG_LOC, EGG_SIZ, BID_BIOSIMG, BID_USR, "Easter Egg $ ") - MENU_L("FORTH $ $", "F", GOROM, FTH_LOC, 0000h, FTH_LOC, FTH_SIZ, BID_OSIMG, BID_USR, "Camel Forth$ ") - MENU_L("BASIC $ $", "B", GOROM, BAS_LOC, 1700h, BAS_LOC, BAS_SIZ, BID_OSIMG, BID_USR, "Nascom BASIC$") - MENU_L("T-BASIC $$", "T", GOROM, TBC_LOC, 3700h, TBC_LOC, TBC_SIZ, BID_OSIMG, BID_USR, "Tasty BASIC$ ") +MENU_S: MENU_L("MONITOR$ $", "M", GOROM, MON_SERIAL, 1000h, MON_LOC, MON_SIZ, BID_BIOSIMG, BID_USR, "Monitor$12345") +MENU_1: MENU_L("CP/M$ $", "C", GOROM, CPM_ENT, 2000h, CPM_LOC, CPM_SIZ, BID_BIOSIMG, BID_USR, "CP/M 80 2.2$ ") + MENU_L("Z-SYSTEM$$", "Z", GOROM, CPM_ENT, 5000h, CPM_LOC, CPM_SIZ, BID_BIOSIMG, BID_USR, "ZSDOS V1.1$ ") + MENU_L("$ $", "E", GOROM, EGG_LOC, 0E00h, EGG_LOC, EGG_SIZ, BID_BIOSIMG, BID_USR, "Easter Egg$ ") + MENU_L("FORTH$ $", "F", GOROM, FTH_LOC, 0000h, FTH_LOC, FTH_SIZ, BID_OSIMG, BID_USR, "Camel Forth$ ") + MENU_L("BASIC$ $", "B", GOROM, BAS_LOC, 1700h, BAS_LOC, BAS_SIZ, BID_OSIMG, BID_USR, "Nascom BASIC$") + MENU_L("T-BASIC$ $", "T", GOROM, TBC_LOC, 3700h, TBC_LOC, TBC_SIZ, BID_OSIMG, BID_USR, "Tasty BASIC$ ") #IF (DSKYENABLE) - MENU_L("DSKY-MON $", "D", GOROM, MON_DSKY, 1000h, MON_LOC, MON_SIZ, BID_BIOSIMG, BID_USR,"DSKY Monitor$") + MENU_L("DSKY-MON $", "D", GOROM, MON_DSKY, 1000h, MON_LOC, MON_SIZ, BID_BIOSIMG, BID_USR, "DSKY Monitor$") #ENDIF .DB "REBOOT$ ", "R" @@ -266,13 +267,13 @@ MENU_1: MENU_L("CP/M $ $", "C", GOROM, CPM_ENT, 2000h, CPM_LOC, CPM_SI MENU_E: MENU_V .EQU MENU_1-MENU_S ; LENGTH OF EACH MENU RECORD MENU_N .EQU ((MENU_E-MENU_S)/MENU_V)+1 ; NUMBER OF MENU ITEMS +MENU_O .EQU 10 ; OFFSET TO MENU KEY FROM NAME ; ; BOOT OPTION PROCESSING ; -GOROM: EX DE,HL ; - - LD B,5 ; PUT NEXT FOUR ADDRESSES ON STACK -GOROMB1:INC HL ; +GOROM: EX DE,HL + LD B,5 ; PUT NEXT FIVE ADDRESSES ON STACK +GOROMB1:INC HL LD E,(HL) ; EXEC INC HL ; SOURCE LD D,(HL) ; DEST @@ -281,53 +282,31 @@ GOROMB1:INC HL ; POP DE ; BANKS POP HL ; SIZE - -; LD A,D -; CALL PRTHEXBYTE -; CALL NEWLINE -; LD A,E -; CALL PRTHEXBYTE -; CALL NEWLINE - LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY -; LD D,BID_USR ; D = DEST BANK = USER BANK -; LD E,BID_OSIMG ; E = SRC BANK = BIOS BANK - RST 08 + RST 08 ; DO IT POP DE ; DEST POP HL ; SOURCE - -; LD B,D -; LD C,E -; CALL PRTHEXWORD -; LD B,H -; LD C,L -; CALL PRTHEXWORD -; CALL NEWLINE - LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY RST 08 ; DO IT - -CHAIN: ; EXPECT EXEC ADDRESS ON TOP OF STACK - - +; + ; EXEC ADDRESS ON TOP OF STACK +; #IF (PLATFORM == PLT_UNA) LD BC,$00FB ; GET LOWER PAGE ID RST 08 ; DE := LOWER PAGE ID == BOOT ROM PAGE LD L,1 ; BOOT DISK UNIT IS ROM (UNIT ID = 1) LD BC,$01FC ; UNA FUNC: SET BOOTSTRAP HISTORY RST 08 ; CALL UNA -; + ; HL IS ALREADY ON STACK AS REQUIRED BY UNA EXEC CHAIN CALL + LD DE,BID_USR ; TARGET BANK ID PUSH DE ; ... ON STACK DI ; ENTER WITH INTS DISABLED JP $FFF7 ; UNA INTER-PAGE EXEC CHAIN #ELSE LD A,(HB_CURBNK) ; GET CURRENT BANK ID FROM PROXY DATA -; CALL PRTHEXBYTE - - LD B,BF_SYSSET ; HB FUNC: SET HBIOS PARAMETER LD C,BF_SYSSET_BOOTINFO ; HB SUBFUNC: SET BOOT INFO LD L,A ; ... AND SAVE AS BOOT BANK @@ -582,14 +561,13 @@ PRTALL1: ; LOOP THRU ALL UNITS AVAILABLE PRTDRV: PUSH BC ; SAVE UNIT PUSH DE ; SAVE DISK TYPE - LD DE,STR_PREFIX ; NEWLINE AND SPACING - CALL WRITESTR ; PRINT IT + LD A,'(' ; NEWLINE AND SPACING + CALL COUT ; PRINT IT LD A,B ; DRIVE LETTER TO A ADD A,'0' ; MAKE IT DISPLAY NUMERIC CALL COUT ; PRINT IT LD A,')' ; DRIVE LETTER COLON CALL COUT ; PRINT IT -; CALL PC_SPACE POP DE ; RECOVER DISK TYPE LD A,D ; DISK TYPE TO A CP $40 ; RAM/ROM? @@ -653,14 +631,13 @@ PRTALL: LD C,0 ; INIT DEVICE INDEX ; PRTALL1: - LD DE,STR_PREFIX ; FORMATTING - CALL WRITESTR ; PRINT IT + LD A,'(' ; FORMATTING + CALL COUT ; PRINT IT LD A,C ; INDEX TO A ADD A,'0' ; MAKE NUMERIC CHAR CALL COUT ; PRINT IT LD A,')' ; FORMATTING CALL COUT ; PRINT IT -; CALL PC_SPACE ; SPACING PUSH BC ; SAVE LOOP CONTROL LD B,BF_DIODEVICE ; HBIOS FUNC: REPORT DEVICE INFO RST 08 ; CALL HBIOS @@ -741,13 +718,11 @@ STR_CPMLOC .DB "LOC=$" STR_CPMEND .DB "END=$" STR_CPMENT .DB "ENT=$" STR_LABEL .DB "LABEL=$" -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_BANNER .DB "\r\n", PLATFORM_NAME, " Boot Loader" -STR_NL .DB "\r\n$" +STR_BANNER .DB "\r\n", PLATFORM_NAME, " Boot Loader\r\n$" ; #IF (DSKYENABLE) ; b o o t . .