mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:43:15 -06:00
Romldr now uses one routine to execute code.
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user