diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index ffd92679..46b07526 100644 --- a/Source/HBIOS/romldr.asm +++ b/Source/HBIOS/romldr.asm @@ -125,20 +125,25 @@ DOBOOTMENU: #ENDIF ; LD B,MENU_N ; DISPLAY ALL ROM MENU ENTRIES - LD DE,MENU_S - LD HL,MENU_V -MENU_L: PUSH DE -WRITE_M:PUSH BC - PUSH HL - PUSH DE - POP HL + LD HL,MENU_S ; DE POINTS TO START RECORD + +MENU_L: PUSH HL ; SAVE CURRENT RECORD POSITION + + PUSH HL ; PUT CURRENT ROM RECORD IN HL + POP DE + + PUSH BC ; POINT HL TO THE MENU KEY LD BC,10 - ADD HL,BC ; HL POINTS TO MENU KEY -WRITEM1:LD A,(DE) + ADD HL,BC + POP BC + +WRITEM1:LD A,(DE) ; DE STEPS THROUGH THE MENU NAMES CP '$' ; TEST FOR STRING TERMINATOR JP Z,WRITEM2 - CP (HL) + + CP (HL) ; DO WE HAVE A MATCH WITH MENU JR NZ,WRITEM3 + LD A,'(' CALL COUT LD A,(DE) @@ -147,13 +152,12 @@ WRITEM1:LD A,(DE) WRITEM3:CALL COUT INC DE JR WRITEM1 -WRITEM2:POP HL - POP BC +WRITEM2: + + POP HL ; RECALL THE PREVIOUS RECORD + LD DE,MENU_V ; SAVED AT MENU_L + ADD HL,DE ; MOVE TO NEXT RECORD - POP DE - EX DE,HL - ADD HL,DE - EX DE,HL DJNZ MENU_L ; NEXT MENU ITEM CALL NEWLINE ; DISPLAY AVAILABLE DRIVES @@ -214,12 +218,16 @@ MENU_C: EX DE,HL JP GOBOOTDISK MENU_X: CALL NEWLINE - EX DE,HL ; WE HAVE A VALID ROM MENU OPTION - INC HL + + ; DE CONTAIN POINTER TO MENU RECORD + + EX DE,HL + INC HL ; WE HAVE A VALID ROM MENU OPTION LD E,(HL) INC HL LD D,(HL) EX DE,HL + JP (HL) ; JUMP TO THE ROUTINE TO EXECUTE IT DB_INVALID: @@ -230,26 +238,26 @@ DB_INVALID: #DEFCONT \ .DB M1 #DEFCONT \ .DB M2 #DEFCONT \ .DW M3 -#DEFCONT \ .DB M4 +#DEFCONT \ .DW M4 #DEFCONT \ .DW M5 #DEFCONT \ .DW M6 #DEFCONT \ .DW M7 -#DEFCONT \ .DW M8 +#DEFCONT \ .DB M8 #DEFCONT \ .DB M9 #DEFCONT \ .DB M10 ; -; 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, 1000h, MON_LOC, MON_SIZ, BID_USR, "Monitor$12345") -MENU_1: MENU_L("CP/M $ $", "C", GOROM, BID_BIOSIMG, CPM_ENT, 2000h, CPM_LOC, CPM_SIZ, BID_USR, "CP/M 80 2.2$ ") - MENU_L("Z-SYSTEM $", "Z", GOROM, BID_BIOSIMG, CPM_ENT, 5000h, CPM_LOC, CPM_SIZ, BID_USR, "ZSDOS V1.1 $ ") - MENU_L("$ $", "E", GOROM, BID_BIOSIMG, EGG_LOC, 0E00h, EGG_LOC, EGG_SIZ, BID_USR, "Easter Egg $ ") - 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$ ") +; 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$ ") #IF (DSKYENABLE) - MENU_L("DSKY-MON $", "D", GOROM, BID_BIOSIMG, MON_DSKY, 1000h, MON_LOC, MON_SIZ, 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" @@ -261,47 +269,48 @@ MENU_N .EQU ((MENU_E-MENU_S)/MENU_V)+1 ; NUMBER OF MENU ITEMS ; ; BOOT OPTION PROCESSING ; -GOROM: EX DE,HL - INC HL ; HL POINTS TO source-bank - - LD B,4 ; PUT NEXT FOUR ADDRESSES ON STACK -GOROM_1:INC HL - LD E,(HL) - INC HL - LD D,(HL) - PUSH DE - DJNZ GOROM_1 - - POP BC ; SIZE - POP DE ; DEST - POP HL ; SOURCE - LDIR - JR CHAIN +GOROM: EX DE,HL ; -GOROMB: EX DE,HL - INC HL ; HL POINTS TO source-bank + LD B,5 ; PUT NEXT FOUR ADDRESSES ON STACK +GOROMB1:INC HL ; + LD E,(HL) ; EXEC + INC HL ; SOURCE + LD D,(HL) ; DEST + PUSH DE ; SIZE + DJNZ GOROMB1 ; BANKS - LD B,4 ; PUT NEXT FOUR ADDRESSES ON STACK -GOROMB1:INC HL - LD E,(HL) - INC HL - LD D,(HL) - PUSH DE - DJNZ GOROMB1 + POP DE ; BANKS + POP HL ; SIZE - POP HL ; SIZE - 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 +; 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 - POP DE ; DEST - POP HL ; SOURCE - LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY - 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 + #IF (PLATFORM == PLT_UNA) LD BC,$00FB ; GET LOWER PAGE ID RST 08 ; DE := LOWER PAGE ID == BOOT ROM PAGE @@ -315,9 +324,12 @@ CHAIN: ; EXPECT EXEC ADDRESS ON TOP OF 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 A,(HB_CURBNK) ; GET CURRENT BANK ID FROM PROXY DATA LD L,A ; ... AND SAVE AS BOOT BANK LD DE,$0100 ; BOOT VOLUME (UNIT, SLICE) RST 08