mirror of https://github.com/wwarthen/RomWBW.git
committed by
GitHub
1 changed files with 0 additions and 937 deletions
@ -1,937 +0,0 @@ |
|||||
; |
|
||||
;================================================================================================== |
|
||||
; LOADER |
|
||||
;================================================================================================== |
|
||||
; |
|
||||
; INCLUDE GENERIC STUFF |
|
||||
; |
|
||||
#INCLUDE "std.asm" |
|
||||
; |
|
||||
INT_IM1 .EQU $FF00 |
|
||||
; |
|
||||
.ORG 0 |
|
||||
; |
|
||||
;================================================================================================== |
|
||||
; NORMAL PAGE ZERO SETUP, RET/RETI/RETN AS APPROPRIATE |
|
||||
;================================================================================================== |
|
||||
; |
|
||||
JP $100 ; RST 0: JUMP TO BOOT CODE |
|
||||
.FILL (008H - $),0FFH |
|
||||
#IF (PLATFORM == PLT_UNA) |
|
||||
JP $FFFD ; RST 8: INVOKE UBIOS FUNCTION |
|
||||
#ELSE |
|
||||
JP HB_INVOKE ; RST 8: INVOKE HBIOS FUNCTION |
|
||||
#ENDIF |
|
||||
.FILL (010H - $),0FFH |
|
||||
RET ; RST 10 |
|
||||
.FILL (018H - $),0FFH |
|
||||
RET ; RST 18 |
|
||||
.FILL (020H - $),0FFH |
|
||||
RET ; RST 20 |
|
||||
.FILL (028H - $),0FFH |
|
||||
RET ; RST 28 |
|
||||
.FILL (030H - $),0FFH |
|
||||
RET ; RST 30 |
|
||||
.FILL (038H - $),0FFH |
|
||||
#IF (PLATFORM == PLT_UNA) |
|
||||
RETI ; RETURN W/ INTS DISABLED |
|
||||
#ELSE |
|
||||
#IF (INTMODE == 1) |
|
||||
JP INT_IM1 ; JP TO INTERRUPT HANDLER IN HI MEM |
|
||||
#ELSE |
|
||||
RETI ; RETURN W/ INTS DISABLED |
|
||||
#ENDIF |
|
||||
#ENDIF |
|
||||
.FILL (066H - $),0FFH |
|
||||
RETN ; NMI |
|
||||
; |
|
||||
.FILL (100H - $),0FFH ; PAD REMAINDER OF PAGE ZERO |
|
||||
; |
|
||||
; |
|
||||
;================================================================================================== |
|
||||
; LOADER |
|
||||
;================================================================================================== |
|
||||
; |
|
||||
DI ; NO INTERRUPTS |
|
||||
LD SP,BL_STACK ; SETUP STACK |
|
||||
|
|
||||
; |
|
||||
#IF (PLATFORM != PLT_UNA) |
|
||||
CALL DELAY_INIT ; INIT DELAY FUNCTIONS |
|
||||
#ENDIF |
|
||||
; |
|
||||
#IF (PLATFORM == PLT_UNA) |
|
||||
; ; COPY UNA BIOS PAGE ZERO TO USER BANK, LEAVE USER BANK ACTIVE |
|
||||
; LD BC,$01FB ; UNA FUNC = SET BANK |
|
||||
; LD DE,BID_BIOS ; UBIOS_PAGE (SEE PAGES.INC) |
|
||||
; CALL $FFFD ; DO IT (RST 08 NOT YET INSTALLED) |
|
||||
; PUSH DE ; SAVE PREVIOUS BANK |
|
||||
;; |
|
||||
; LD HL,0 ; FROM ADDRESS 0 (PAGE ZERO) |
|
||||
; LD DE,$9000 ; USE $9000 AS BOUNCE BUFFER |
|
||||
; LD BC,256 ; ONE PAGE IS 256 BYTES |
|
||||
; LDIR ; DO IT |
|
||||
;; |
|
||||
; LD BC,$01FB ; UNA FUNC = SET BANK |
|
||||
; ;POP DE ; RECOVER OPERATING BANK |
|
||||
; LD DE,BID_USR ; TO USER BANK |
|
||||
; CALL $FFFD ; DO IT (RST 08 NOT YET INSTALLED) |
|
||||
;; |
|
||||
; LD HL,$9000 ; USE $9000 AS BOUNCE BUFFER |
|
||||
; LD DE,0 ; TO PAGE ZERO OF OPERATING BANK |
|
||||
; LD BC,256 ; ONE PAGE IS 256 BYTES |
|
||||
; LDIR ; DO IT |
|
||||
;; |
|
||||
;; ; INSTALL UNA INVOCATION VECTOR FOR RST 08 |
|
||||
;; ; *** IS THIS REDUNDANT? *** |
|
||||
;; LD A,$C3 ; JP INSTRUCTION |
|
||||
;; LD (8),A ; STORE AT 0x0008 |
|
||||
;; LD HL,($FFFE) ; UNA ENTRY VECTOR |
|
||||
;; LD (9),HL ; STORE AT 0x0009 |
|
||||
;; |
|
||||
; LD BC,$01FB ; UNA FUNC = SET BANK |
|
||||
; POP DE ; RECOVER OPERATING BANK |
|
||||
; CALL $FFFD ; DO IT (RST 08 NOT YET INSTALLED) |
|
||||
#ELSE |
|
||||
; PREP THE USER BANK (SETUP PAGE ZERO) |
|
||||
LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY |
|
||||
LD D,BID_USR ; D = DEST BANK = USER BANK |
|
||||
LD E,BID_BIOS ; E = SRC BANK = BIOS BANK |
|
||||
LD HL,256 ; HL = COPY LEN = 1 PAGE = 256 BYTES |
|
||||
RST 08 ; DO IT |
|
||||
LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY |
|
||||
LD HL,0 ; COPY FROM BIOS ADDRESS 0 |
|
||||
LD DE,0 ; TO USER ADDRESS 0 |
|
||||
RST 08 ; DO IT |
|
||||
#ENDIF |
|
||||
EI |
|
||||
; |
|
||||
; RUN THE BOOT LOADER MENU |
|
||||
; |
|
||||
LD DE,STR_BANNER ; DISPLAY BOOT BANNER |
|
||||
|
|
||||
DOBOOTMENU: |
|
||||
CALL WRITESTR ; DISPLAY MESSAGE OR ERROR |
|
||||
CALL NEWLINE |
|
||||
; |
|
||||
#IF (DSKYENABLE) |
|
||||
LD HL,BOOT ; POINT TO BOOT MESSAGE |
|
||||
CALL DSKY_SHOWRAW ; DISPLAY MESSAGE |
|
||||
#ENDIF |
|
||||
; |
|
||||
#IF (BOOTTYPE == BT_AUTO) |
|
||||
LD BC,100 * BOOT_TIMEOUT |
|
||||
LD (BL_TIMEOUT),BC |
|
||||
#ENDIF |
|
||||
; |
|
||||
LD B,MENU_N ; DISPLAY ALL ROM MENU ENTRIES |
|
||||
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,MENU_O |
|
||||
ADD HL,BC |
|
||||
POP BC |
|
||||
|
|
||||
WRITEM1:LD A,(DE) ; DE STEPS THROUGH THE MENU NAMES |
|
||||
CP '$' ; TEST FOR STRING TERMINATOR |
|
||||
JR Z,WRITEM2 |
|
||||
|
|
||||
CP (HL) ; DO WE HAVE A MATCH WITH MENU |
|
||||
JR NZ,WRITEM3 |
|
||||
|
|
||||
LD A,'(' |
|
||||
CALL COUT |
|
||||
LD A,(DE) |
|
||||
CALL COUT |
|
||||
LD A,')' |
|
||||
WRITEM3:CALL COUT |
|
||||
INC DE |
|
||||
JR WRITEM1 |
|
||||
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 |
|
||||
CALL PRTALL |
|
||||
CALL PC_COLON |
|
||||
|
|
||||
DB_BOOTLOOP: |
|
||||
|
|
||||
CALL CST ; CHECK CONSOLE INPUT |
|
||||
OR A |
|
||||
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 |
|
||||
|
|
||||
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 |
|
||||
ADD HL,DE |
|
||||
CP (HL) |
|
||||
EX DE,HL |
|
||||
JR Z,MENU_X |
|
||||
DJNZ MENU_C ; FALL THRU IF IT DOES NOT MATCH ROM MENU |
|
||||
|
|
||||
; CHECK FOR DRIVE EXECUTION |
|
||||
|
|
||||
CP '0' ; 0-9, DISK DEVICE |
|
||||
JR C,DB_INVALID |
|
||||
CP '9' + 1 |
|
||||
JR NC,DB_INVALID |
|
||||
SUB '0' |
|
||||
JP GOBOOTDISK |
|
||||
|
|
||||
MENU_X: CALL NEWLINE |
|
||||
|
|
||||
; 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: |
|
||||
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 |
|
||||
#DEFCONT \ .DW M3 |
|
||||
#DEFCONT \ .DW M4 |
|
||||
#DEFCONT \ .DW M5 |
|
||||
#DEFCONT \ .DW M6 |
|
||||
#DEFCONT \ .DW M7 |
|
||||
#DEFCONT \ .DB M8 |
|
||||
#DEFCONT \ .DB M9 |
|
||||
#DEFCONT \ .DB M10 |
|
||||
; |
|
||||
; 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, MON_DSKY, 1000h, MON_LOC, MON_SIZ, BID_BIOSIMG, 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)+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 FIVE ADDRESSES ON STACK |
|
||||
GOROMB1:INC HL |
|
||||
LD E,(HL) ; EXEC |
|
||||
INC HL ; SOURCE |
|
||||
LD D,(HL) ; DEST |
|
||||
PUSH DE ; SIZE |
|
||||
DJNZ GOROMB1 ; BANKS |
|
||||
|
|
||||
POP DE ; BANKS |
|
||||
POP HL ; SIZE |
|
||||
LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY |
|
||||
RST 08 ; DO IT |
|
||||
|
|
||||
POP DE ; DEST |
|
||||
POP HL ; SOURCE |
|
||||
LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY |
|
||||
RST 08 ; DO IT |
|
||||
; |
|
||||
; 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 |
|
||||
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 |
|
||||
LD DE,$0100 ; BOOT VOLUME (UNIT, SLICE) |
|
||||
RST 08 |
|
||||
; |
|
||||
LD A,BID_USR ; ACTIVATE USER BANK |
|
||||
POP HL ; RECOVER ENTRY ADDRESS |
|
||||
DI ; ENTER WITH INTS DISABLED |
|
||||
CALL HB_BNKCALL ; AND GO |
|
||||
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 |
|
||||
; |
|
||||
; BOOT FROM DISK DRIVE |
|
||||
; |
|
||||
BOOTDISK: |
|
||||
LD DE,STR_BOOTDISK1 ; DISK BOOT MESSAGE |
|
||||
CALL WRITESTR ; PRINT IT |
|
||||
|
|
||||
#IF (PLATFORM == PLT_UNA) |
|
||||
; |
|
||||
; BOOT FROM UNA DISK DRIVE |
|
||||
; |
|
||||
LD A,(BL_BOOTID) ; GET BOOT DEVICE ID |
|
||||
LD B,A ; MOVE TO B |
|
||||
|
|
||||
; LOAD SECTOR 2 (BOOT INFO) |
|
||||
LD C,$41 ; UNA FUNC: SET LBA |
|
||||
LD DE,0 ; HI WORD OF LBA IS ALWAYS ZERO |
|
||||
LD HL,2 ; LOAD STARTING INFO SECTOR 2 |
|
||||
RST 08 ; SET LBA |
|
||||
JP NZ,DB_ERR ; HANDLE ERROR |
|
||||
; |
|
||||
LD C,$42 ; UNA FUNC: READ SECTORS |
|
||||
LD DE,BL_INFOSEC ; DEST OF CPM IMAGE |
|
||||
LD L,1 ; SECTORS TO READ |
|
||||
RST 08 ; DO READ |
|
||||
JP NZ,DB_ERR ; HANDLE ERROR |
|
||||
; |
|
||||
#ELSE |
|
||||
; CHECK FOR VALID DRIVE LETTER |
|
||||
LD A,(BL_BOOTID) ; BOOT DEVICE TO A |
|
||||
PUSH AF ; SAVE BOOT DEVICE |
|
||||
LD B,BF_SYSGET |
|
||||
LD C,BF_SYSGET_DIOCNT |
|
||||
RST 08 ; E := DISK UNIT COUNT |
|
||||
POP AF ; RESTORE BOOT DEVICE |
|
||||
CP E ; CHECK MAX (INDEX - COUNT) |
|
||||
JP NC,DB_NODISK ; HANDLE INVALID SELECTION |
|
||||
|
|
||||
; SET THE BOOT UNIT AND SLICE |
|
||||
LD A,(BL_BOOTID) ; GET BOOTID |
|
||||
LD (BL_DEVICE),A ; STORE IT |
|
||||
XOR A ; LU ALWAYS ZERO |
|
||||
LD (BL_LU),A ; STORE IT |
|
||||
|
|
||||
; SENSE MEDIA |
|
||||
LD A,(BL_DEVICE) ; GET DEVICE/UNIT |
|
||||
LD C,A ; STORE IN C |
|
||||
LD B,BF_DIOMEDIA ; DRIVER FUNCTION = DISK MEDIA |
|
||||
LD E,1 ; ENABLE MEDIA CHECK/DISCOVERY |
|
||||
RST 08 ; CALL HBIOS |
|
||||
JP NZ,DB_ERR ; HANDLE ERROR |
|
||||
|
|
||||
; SEEK TO SECTOR 2 OF LU |
|
||||
LD A,(BL_LU) ; GET LU SPECIFIED |
|
||||
LD E,A ; LU INDEX |
|
||||
LD H,65 ; 65 TRACKS PER LU |
|
||||
CALL MULT8 ; HL := H * E |
|
||||
LD DE,$02 ; HEAD 0, SECTOR 2 |
|
||||
LD B,BF_DIOSEEK ; SETUP FOR NEW SEEK CALL |
|
||||
LD A,(BL_DEVICE) ; GET BOOT DISK UNIT |
|
||||
LD C,A ; PUT IN C |
|
||||
RST 08 ; DO IT |
|
||||
JP NZ,DB_ERR ; HANDLE ERROR |
|
||||
|
|
||||
; READ |
|
||||
LD B,BF_DIOREAD ; FUNCTION IN B |
|
||||
LD A,(BL_DEVICE) ; GET BOOT DISK UNIT |
|
||||
LD C,A ; PUT IN C |
|
||||
LD HL,BL_INFOSEC ; READ INTO INFO SEC BUFFER |
|
||||
LD DE,1 ; TRANSFER ONE SECTOR |
|
||||
RST 08 ; DO IT |
|
||||
JP NZ,DB_ERR ; HANDLE ERROR |
|
||||
; |
|
||||
#ENDIF |
|
||||
; |
|
||||
; CHECK SIGNATURE |
|
||||
CALL NEWLINE ; FORMATTING |
|
||||
LD DE,(BB_SIG) ; GET THE SIGNATURE |
|
||||
LD A,$A5 ; FIRST BYTE SHOULD BE $A5 |
|
||||
CP D ; COMPARE |
|
||||
JP NZ,DB_NOBOOT ; ERROR IF NOT EQUAL |
|
||||
LD A,$5A ; SECOND BYTE SHOULD BE $5A |
|
||||
CP E ; COMPARE |
|
||||
JP NZ,DB_NOBOOT ; ERROR IS NOT EQUAL |
|
||||
|
|
||||
; PRINT CPMLOC VALUE |
|
||||
CALL NEWLINE |
|
||||
LD DE,STR_CPMLOC |
|
||||
CALL WRITESTR |
|
||||
LD BC,(BB_CPMLOC) |
|
||||
CALL PRTHEXWORD |
|
||||
|
|
||||
; PRINT CPMEND VALUE |
|
||||
CALL PC_SPACE |
|
||||
LD DE,STR_CPMEND |
|
||||
CALL WRITESTR |
|
||||
LD BC,(BB_CPMEND) |
|
||||
CALL PRTHEXWORD |
|
||||
|
|
||||
; PRINT CPMENT VALUE |
|
||||
CALL PC_SPACE |
|
||||
LD DE,STR_CPMENT |
|
||||
CALL WRITESTR |
|
||||
LD BC,(BB_CPMENT) |
|
||||
CALL PRTHEXWORD |
|
||||
CALL PC_SPACE |
|
||||
|
|
||||
; PRINT DISK LABEL |
|
||||
LD DE,STR_LABEL |
|
||||
CALL WRITESTR |
|
||||
LD DE,BB_LABEL ; if it is there, then a printable |
|
||||
LD A,(BB_TERM) ; Display Disk Label if Present |
|
||||
CP '$' ; (dwg 2/7/2012) |
|
||||
CALL Z,WRITESTR ; label is there as well even if spaces. |
|
||||
; |
|
||||
LD DE,STR_LOADING ; LOADING MESSAGE |
|
||||
CALL WRITESTR ; PRINT IT |
|
||||
; |
|
||||
; COMPUTE NUMBER OF SECTORS TO LOAD |
|
||||
LD HL,(BB_CPMEND) ; HL := END |
|
||||
LD DE,(BB_CPMLOC) ; DE := START |
|
||||
OR A ; CLEAR CARRY |
|
||||
SBC HL,DE ; HL := LENGTH TO LOAD |
|
||||
LD A,H ; DETERMINE 512 BYTE SECTOR COUNT |
|
||||
RRCA ; ... BY DIVIDING MSB BY TWO |
|
||||
LD (BL_COUNT),A ; ... AND SAVE IT |
|
||||
; |
|
||||
#IF (PLATFORM == PLT_UNA) |
|
||||
; |
|
||||
; READ OS IMAGE INTO MEMORY |
|
||||
LD C,$42 ; UNA FUNC: READ SECTORS |
|
||||
LD A,(BL_BOOTID) ; GET BOOT DEVICE ID |
|
||||
LD B,A ; MOVE TO B |
|
||||
LD DE,(BB_CPMLOC) ; DEST OF CPM IMAGE |
|
||||
LD A,(BL_COUNT) ; GET SECTORS TO READ |
|
||||
LD L,A ; SECTORS TO READ |
|
||||
RST 08 ; DO READ |
|
||||
JP NZ,DB_ERR ; HANDLE ERROR |
|
||||
; |
|
||||
; PASS BOOT DEVICE/UNIT/LU TO CBIOS COLD BOOT |
|
||||
LD DE,-1 ; BOOT ROM PAGE, -1 FOR N/A |
|
||||
LD A,(BL_BOOTID) ; GET BOOT DISK UNIT ID |
|
||||
LD L,A ; PUT IN L |
|
||||
LD BC,$01FC ; UNA FUNC: SET BOOTSTRAP HISTORY |
|
||||
RST 08 ; CALL UNA |
|
||||
JP NZ,DB_ERR ; HANDLE ERROR |
|
||||
; |
|
||||
; JUMP TO COLD BOOT ENTRY |
|
||||
LD HL,(BB_CPMENT) ; GET THE ENTRY POINT |
|
||||
PUSH HL ; PUT ON STACK FOR UNA CHAIN FUNC |
|
||||
LD DE,BID_USR ; TARGET BANK ID IS USER BANK |
|
||||
PUSH DE ; PUT ON STACK FOR UNA CHAIN FUNC |
|
||||
DI ; ENTER WITH INTS DISABLED |
|
||||
JP $FFF7 ; UNA INTER-PAGE EXEC CHAIN |
|
||||
; |
|
||||
#ELSE |
|
||||
; |
|
||||
; READ OS IMAGE INTO MEMORY |
|
||||
LD B,BF_DIOREAD ; FUNCTION IN B |
|
||||
LD A,(BL_DEVICE) ; GET BOOT DISK UNIT |
|
||||
LD C,A ; PUT IN C |
|
||||
LD HL,(BB_CPMLOC) ; LOAD ADDRESS |
|
||||
LD D,0 |
|
||||
LD A,(BL_COUNT) ; GET SECTORS TO READ |
|
||||
LD E,A ; NUMBER OF SECTORS TO LOAD |
|
||||
RST 08 |
|
||||
JP NZ,DB_ERR ; HANDLE ERRORS |
|
||||
|
|
||||
; PASS BOOT DEVICE/UNIT/LU TO CBIOS COLD BOOT |
|
||||
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 A,(BL_DEVICE) ; LOAD BOOT DEVICE/UNIT |
|
||||
LD D,A ; SAVE IN D |
|
||||
LD A,(BL_LU) ; LOAD BOOT LU |
|
||||
LD E,A ; SAVE IN E |
|
||||
RST 08 |
|
||||
JP NZ,DB_ERR ; HANDLE ERRORS |
|
||||
|
|
||||
; JUMP TO COLD BOOT ENTRY |
|
||||
LD A,BID_USR ; ACTIVATE USER BANK |
|
||||
LD HL,(BB_CPMENT) ; OS ENTRY ADDRESS |
|
||||
DI ; ENTER WITH INTS DISABLED |
|
||||
CALL HB_BNKCALL ; AND GO |
|
||||
HALT ; WE SHOULD NEVER RETURN!!! |
|
||||
; |
|
||||
#ENDIF |
|
||||
; |
|
||||
DB_NODISK: |
|
||||
; SELDSK DID NOT LIKE DRIVE SELECTION |
|
||||
LD DE,STR_NODISK |
|
||||
JP DOBOOTMENU |
|
||||
|
|
||||
DB_NOBOOT: |
|
||||
; DISK IS NOT BOOTABLE |
|
||||
LD DE,STR_NOBOOT |
|
||||
JP DOBOOTMENU |
|
||||
|
|
||||
DB_ERR: |
|
||||
; I/O ERROR DURING BOOT ATTEMPT |
|
||||
LD DE,STR_BOOTERR |
|
||||
JP DOBOOTMENU |
|
||||
; |
|
||||
#IF (PLATFORM == PLT_UNA) |
|
||||
; |
|
||||
; |
|
||||
; PRINT LIST OF ALL DRIVES UNDER UNA |
|
||||
; |
|
||||
PRTALL: |
|
||||
LD B,0 ; START WITH UNIT 0 |
|
||||
; |
|
||||
PRTALL1: ; LOOP THRU ALL UNITS AVAILABLE |
|
||||
LD C,$48 ; UNA FUNC: GET DISK TYPE |
|
||||
LD L,0 ; PRESET UNIT COUNT TO ZERO |
|
||||
RST 08 ; CALL UNA, B IS ASSUMED TO BE UNTOUCHED!!! |
|
||||
LD A,L ; UNIT COUNT TO A |
|
||||
OR A ; PAST END? |
|
||||
RET Z ; WE ARE DONE |
|
||||
PUSH BC ; SAVE UNIT |
|
||||
CALL PRTDRV ; PROCESS THE UNIT |
|
||||
POP BC ; RESTORE UNIT |
|
||||
INC B ; NEXT UNIT |
|
||||
JR PRTALL1 ; LOOP |
|
||||
; |
|
||||
; PRINT THE UNA UNIT INFO |
|
||||
; ON INPUT B HAS UNIT |
|
||||
; |
|
||||
PRTDRV: |
|
||||
PUSH BC ; SAVE UNIT |
|
||||
PUSH DE ; SAVE DISK TYPE |
|
||||
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 |
|
||||
POP DE ; RECOVER DISK TYPE |
|
||||
LD A,D ; DISK TYPE TO A |
|
||||
CP $40 ; RAM/ROM? |
|
||||
JR Z,PRTDRV1 ; HANDLE RAM/ROM |
|
||||
LD DE,DEVIDE ; ASSUME IDE |
|
||||
CP $41 ; IDE? |
|
||||
JR Z,PRTDRV2 ; PRINT IT |
|
||||
LD DE,DEVPPIDE ; ASSUME PPIDE |
|
||||
CP $42 ; PPIDE? |
|
||||
JR Z,PRTDRV2 ; PRINT IT |
|
||||
LD DE,DEVSD ; ASSUME SD |
|
||||
CP $43 ; SD? |
|
||||
JR Z,PRTDRV2 ; PRINT IT |
|
||||
LD DE,DEVDSD ; ASSUME DSD |
|
||||
CP $44 ; DSD? |
|
||||
JR Z,PRTDRV2 ; PRINT IT |
|
||||
LD DE,DEVUNK ; OTHERWISE UNKNOWN |
|
||||
JR PRTDRV2 |
|
||||
; |
|
||||
PRTDRV1: ; HANDLE RAM/ROM |
|
||||
LD C,$45 ; UNA FUNC: GET DISK INFO |
|
||||
LD DE,BL_INFOSEC ; 512 BYTE BUFFER |
|
||||
RST 08 ; CALL UNA |
|
||||
BIT 7,B ; TEST RAM DRIVE BIT |
|
||||
LD DE,DEVROM ; ASSUME ROM |
|
||||
JR Z,PRTDRV2 ; IF SO, PRINT IT |
|
||||
LD DE,DEVRAM ; OTHERWISE RAM |
|
||||
JR PRTDRV2 ; PRINT IT |
|
||||
; |
|
||||
PRTDRV2: ; PRINT DEVICE |
|
||||
POP BC ; RECOVER UNIT |
|
||||
CALL WRITESTR ; PRINT DEVICE NAME |
|
||||
LD A,B ; UNIT TO A |
|
||||
ADD A,'0' ; MAKE IT PRINTABLE NUMERIC |
|
||||
CALL COUT ; PRINT IT |
|
||||
LD A,',' ; DEVICE NAME SEPARATOR |
|
||||
CALL COUT ; PRINT IT |
|
||||
RET ; DONE |
|
||||
; |
|
||||
DEVRAM .DB "RAM$" |
|
||||
DEVROM .DB "ROM$" |
|
||||
DEVIDE .DB "IDE$" |
|
||||
DEVPPIDE .DB "PPIDE$" |
|
||||
DEVSD .DB "SD$" |
|
||||
DEVDSD .DB "DSD$" |
|
||||
DEVUNK .DB "UNK$" |
|
||||
; |
|
||||
#ELSE |
|
||||
; |
|
||||
; PRINT LIST OF ALL DRIVES |
|
||||
; |
|
||||
PRTALL: |
|
||||
; |
|
||||
LD B,BF_SYSGET |
|
||||
LD C,BF_SYSGET_DIOCNT |
|
||||
RST 08 ; E := DISK UNIT COUNT |
|
||||
LD B,E ; COUNT TO B |
|
||||
LD A,B ; COUNT TO A |
|
||||
OR A ; SET FLAGS |
|
||||
RET Z ; BAIL OUT IF ZERO |
|
||||
LD C,0 ; INIT DEVICE INDEX |
|
||||
; |
|
||||
PRTALL1: |
|
||||
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 |
|
||||
PUSH BC ; SAVE LOOP CONTROL |
|
||||
LD B,BF_DIODEVICE ; HBIOS FUNC: REPORT DEVICE INFO |
|
||||
RST 08 ; CALL HBIOS |
|
||||
CALL PRTDRV ; PRINT IT |
|
||||
POP BC ; RESTORE LOOP CONTROL |
|
||||
INC C ; BUMP INDEX |
|
||||
DJNZ PRTALL1 ; LOOP AS NEEDED |
|
||||
RET ; DONE |
|
||||
; |
|
||||
; PRINT THE DRIVER DEVICE/UNIT INFO |
|
||||
; ON INPUT D HAS DRIVER ID, E HAS DRIVER MODE/UNIT |
|
||||
; DESTROY NO REGISTERS OTHER THAN A |
|
||||
; |
|
||||
PRTDRV: |
|
||||
PUSH DE ; PRESERVE DE |
|
||||
PUSH HL ; PRESERVE HL |
|
||||
LD A,D ; LOAD DEVICE/UNIT |
|
||||
RRCA ; ROTATE DEVICE |
|
||||
RRCA ; ... BITS |
|
||||
RRCA ; ... INTO |
|
||||
RRCA ; ... LOWEST 4 BITS |
|
||||
AND $0F ; ISOLATE DEVICE BITS |
|
||||
ADD A,A ; MULTIPLE BY TWO FOR WORD TABLE |
|
||||
LD HL,DEVTBL ; POINT TO START OF DEVICE NAME TABLE |
|
||||
CALL ADDHLA ; ADD A TO HL TO POINT TO TABLE ENTRY |
|
||||
LD A,(HL) ; DEREFERENCE HL TO LOC OF DEVICE NAME STRING |
|
||||
INC HL ; ... |
|
||||
LD D,(HL) ; ... |
|
||||
LD E,A ; ... |
|
||||
CALL WRITESTR ; PRINT THE DEVICE NMEMONIC |
|
||||
POP HL ; RECOVER HL |
|
||||
POP DE ; RECOVER DE |
|
||||
LD A,E ; LOAD DRIVER MODE/UNIT |
|
||||
AND $0F ; ISOLATE UNIT |
|
||||
CALL PRTDECB ; PRINT IT |
|
||||
CALL PC_SPACE ; FORMATTING |
|
||||
;LD A,E ; LOAD LU |
|
||||
;CALL PRTDECB ; PRINT IT |
|
||||
RET |
|
||||
; |
|
||||
DEVTBL: ; DEVICE TABLE |
|
||||
.DW DEV00, DEV01, DEV02, DEV03 |
|
||||
.DW DEV04, DEV05, DEV06, DEV07 |
|
||||
.DW DEV08, DEV09, DEV10, DEV11 |
|
||||
.DW DEV12, DEV13, DEV14, DEV15 |
|
||||
; |
|
||||
DEVUNK .DB "???$" |
|
||||
DEV00 .DB "MD$" |
|
||||
DEV01 .DB "FD$" |
|
||||
DEV02 .DB "RAMF$" |
|
||||
DEV03 .DB "IDE$" |
|
||||
DEV04 .DB "ATAPI$" |
|
||||
DEV05 .DB "PPIDE$" |
|
||||
DEV06 .DB "SD$" |
|
||||
DEV07 .DB "PRPSD$" |
|
||||
DEV08 .DB "PPPSD$" |
|
||||
DEV09 .DB "HDSK$" |
|
||||
DEV10 .EQU DEVUNK |
|
||||
DEV11 .EQU DEVUNK |
|
||||
DEV12 .EQU DEVUNK |
|
||||
DEV13 .EQU DEVUNK |
|
||||
DEV14 .EQU DEVUNK |
|
||||
DEV15 .EQU DEVUNK |
|
||||
; |
|
||||
#ENDIF |
|
||||
; |
|
||||
;__TEXT_STRINGS_________________________________________________________________________________________________________________ |
|
||||
; |
|
||||
; STRINGS |
|
||||
;_____________________________________________________________________________________________________________________________ |
|
||||
; |
|
||||
STR_BOOTDISK .DB "BOOT FROM DISK\r\n$" |
|
||||
STR_BOOTDISK1 .DB "\r\nReading disk information...$" |
|
||||
STR_INVALID .DB "INVALID SELECTION\r\n$" |
|
||||
STR_SETUP .DB "SYSTEM SETUP\r\n$" |
|
||||
STR_SIG .DB "SIGNATURE=$" |
|
||||
STR_CPMLOC .DB "LOC=$" |
|
||||
STR_CPMEND .DB "END=$" |
|
||||
STR_CPMENT .DB "ENT=$" |
|
||||
STR_LABEL .DB "LABEL=$" |
|
||||
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\r\n$" |
|
||||
; |
|
||||
#IF (DSKYENABLE) |
|
||||
; b o o t . . |
|
||||
BOOT .DB $9F,$9D,$9D,$94,$80,$80,$00,$00 |
|
||||
#ENDIF |
|
||||
; |
|
||||
#DEFINE USEDELAY |
|
||||
#INCLUDE "util.asm" |
|
||||
; |
|
||||
#IF (DSKYENABLE) |
|
||||
#DEFINE DSKY_KBD |
|
||||
#INCLUDE "dsky.asm" |
|
||||
#ENDIF |
|
||||
; |
|
||||
;================================================================================================== |
|
||||
; CONSOLE CHARACTER I/O HELPER ROUTINES (REGISTERS PRESERVED) |
|
||||
;================================================================================================== |
|
||||
; |
|
||||
#IF (PLATFORM != PLT_UNA) |
|
||||
; |
|
||||
; OUTPUT CHARACTER FROM A |
|
||||
; |
|
||||
COUT: |
|
||||
; SAVE ALL INCOMING REGISTERS |
|
||||
PUSH AF |
|
||||
PUSH BC |
|
||||
PUSH DE |
|
||||
PUSH HL |
|
||||
; |
|
||||
; OUTPUT CHARACTER TO CONSOLE VIA HBIOS |
|
||||
LD E,A ; OUTPUT CHAR TO E |
|
||||
LD C,CIODEV_CONSOLE ; CONSOLE UNIT TO C |
|
||||
LD B,BF_CIOOUT ; HBIOS FUNC: OUTPUT CHAR |
|
||||
RST 08 ; HBIOS OUTPUTS CHARACTDR |
|
||||
; |
|
||||
; RESTORE ALL REGISTERS |
|
||||
POP HL |
|
||||
POP DE |
|
||||
POP BC |
|
||||
POP AF |
|
||||
RET |
|
||||
; |
|
||||
; INPUT CHARACTER TO A |
|
||||
; |
|
||||
CIN: |
|
||||
; SAVE INCOMING REGISTERS (AF IS OUTPUT) |
|
||||
PUSH BC |
|
||||
PUSH DE |
|
||||
PUSH HL |
|
||||
; |
|
||||
; INPUT CHARACTER FROM CONSOLE VIA HBIOS |
|
||||
LD C,CIODEV_CONSOLE ; CONSOLE UNIT TO C |
|
||||
LD B,BF_CIOIN ; HBIOS FUNC: INPUT CHAR |
|
||||
RST 08 ; HBIOS READS CHARACTDR |
|
||||
LD A,E ; MOVE CHARACTER TO A FOR RETURN |
|
||||
; |
|
||||
; RESTORE REGISTERS (AF IS OUTPUT) |
|
||||
POP HL |
|
||||
POP DE |
|
||||
POP BC |
|
||||
RET |
|
||||
; |
|
||||
; RETURN INPUT STATUS IN A (0 = NO CHAR, !=0 CHAR WAITING) |
|
||||
; |
|
||||
CST: |
|
||||
; SAVE INCOMING REGISTERS (AF IS OUTPUT) |
|
||||
PUSH BC |
|
||||
PUSH DE |
|
||||
PUSH HL |
|
||||
; |
|
||||
; GET CONSOLE INPUT STATUS VIA HBIOS |
|
||||
LD C,CIODEV_CONSOLE ; CONSOLE UNIT TO C |
|
||||
LD B,BF_CIOIST ; HBIOS FUNC: INPUT STATUS |
|
||||
RST 08 ; HBIOS RETURNS STATUS IN A |
|
||||
; |
|
||||
; RESTORE REGISTERS (AF IS OUTPUT) |
|
||||
POP HL |
|
||||
POP DE |
|
||||
POP BC |
|
||||
RET |
|
||||
; |
|
||||
#ENDIF |
|
||||
; |
|
||||
#IF (PLATFORM == PLT_UNA) |
|
||||
; |
|
||||
; OUTPUT CHARACTER FROM A |
|
||||
; |
|
||||
COUT: |
|
||||
; SAVE ALL INCOMING REGISTERS |
|
||||
PUSH AF |
|
||||
PUSH BC |
|
||||
PUSH DE |
|
||||
PUSH HL |
|
||||
; |
|
||||
; OUTPUT CHARACTER TO CONSOLE VIA UBIOS |
|
||||
LD E,A |
|
||||
LD BC,$12 |
|
||||
RST 08 |
|
||||
; |
|
||||
; RESTORE ALL REGISTERS |
|
||||
POP HL |
|
||||
POP DE |
|
||||
POP BC |
|
||||
POP AF |
|
||||
RET |
|
||||
; |
|
||||
; INPUT CHARACTER TO A |
|
||||
; |
|
||||
CIN: |
|
||||
; SAVE INCOMING REGISTERS (AF IS OUTPUT) |
|
||||
PUSH BC |
|
||||
PUSH DE |
|
||||
PUSH HL |
|
||||
; |
|
||||
; INPUT CHARACTER FROM CONSOLE VIA UBIOS |
|
||||
LD BC,$11 |
|
||||
RST 08 |
|
||||
LD A,E |
|
||||
; |
|
||||
; RESTORE REGISTERS (AF IS OUTPUT) |
|
||||
POP HL |
|
||||
POP DE |
|
||||
POP BC |
|
||||
RET |
|
||||
; |
|
||||
; RETURN INPUT STATUS IN A (0 = NO CHAR, !=0 CHAR WAITING) |
|
||||
; |
|
||||
CST: |
|
||||
; SAVE INCOMING REGISTERS (AF IS OUTPUT) |
|
||||
PUSH BC |
|
||||
PUSH DE |
|
||||
PUSH HL |
|
||||
; |
|
||||
; GET CONSOLE INPUT STATUS VIA UBIOS |
|
||||
LD BC,$13 |
|
||||
RST 08 |
|
||||
LD A,E |
|
||||
; |
|
||||
; RESTORE REGISTERS (AF IS OUTPUT) |
|
||||
POP HL |
|
||||
POP DE |
|
||||
POP BC |
|
||||
RET |
|
||||
; |
|
||||
#ENDIF |
|
||||
; |
|
||||
; READ A CONSOLE CHARACTER AND CONVERT TO UPPER CASE |
|
||||
; |
|
||||
CINUC: |
|
||||
CALL CIN |
|
||||
AND 7FH ; STRIP HI BIT |
|
||||
CP 'A' ; KEEP NUMBERS, CONTROLS |
|
||||
RET C ; AND UPPER CASE |
|
||||
CP 7BH ; SEE IF NOT LOWER CASE |
|
||||
RET NC |
|
||||
AND 5FH ; MAKE UPPER CASE |
|
||||
RET |
|
||||
; |
|
||||
;================================================================================================== |
|
||||
; FILL REMAINDER OF BANK |
|
||||
;================================================================================================== |
|
||||
; |
|
||||
SLACK: .EQU ($LDR_SIZ - $) |
|
||||
.FILL SLACK |
|
||||
; |
|
||||
.ECHO "LOADER space remaining: " |
|
||||
.ECHO SLACK |
|
||||
.ECHO " bytes.\n" |
|
||||
; |
|
||||
;================================================================================================== |
|
||||
; WORKING DATA STORAGE |
|
||||
;================================================================================================== |
|
||||
; |
|
||||
.ORG $8000 |
|
||||
; |
|
||||
.DS 64 ; 32 LEVEL STACK |
|
||||
BL_STACK .EQU $ ; ... TOP IS HERE |
|
||||
; |
|
||||
BL_COUNT .DS 1 ; LOAD COUNTER |
|
||||
BL_TIMEOUT .DS 2 ; AUTOBOOT TIMEOUT COUNTDOWN COUNTER |
|
||||
BL_BOOTID .DS 1 ; BOOT DEVICE ID CHOSEN BY USER |
|
||||
BL_DEVICE .DS 1 ; DEVICE TO LOAD FROM |
|
||||
BL_LU .DS 1 ; LU TO LOAD FROM |
|
||||
; |
|
||||
; BOOT INFO SECTOR IS READ INTO AREA BELOW |
|
||||
; THE THIRD SECTOR OF A DISK DEVICE IS RESERVED FOR BOOT INFO |
|
||||
; |
|
||||
BL_INFOSEC .EQU $ |
|
||||
.DS (512 - 128) |
|
||||
BB_METABUF .EQU $ |
|
||||
BB_SIG .DS 2 ; SIGNATURE (WILL BE 0A55AH IF SET) |
|
||||
BB_PLATFORM .DS 1 ; FORMATTING PLATFORM |
|
||||
BB_DEVICE .DS 1 ; FORMATTING DEVICE |
|
||||
BB_FORMATTER .DS 8 ; FORMATTING PROGRAM |
|
||||
BB_DRIVE .DS 1 ; PHYSICAL DISK DRIVE # |
|
||||
BB_LU .DS 1 ; LOGICAL UNIT (LU) |
|
||||
.DS 1 ; MSB OF LU, NOW DEPRECATED |
|
||||
.DS (BB_METABUF + 128) - $ - 32 |
|
||||
BB_PROTECT .DS 1 ; WRITE PROTECT BOOLEAN |
|
||||
BB_UPDATES .DS 2 ; UPDATE COUNTER |
|
||||
BB_RMJ .DS 1 ; RMJ MAJOR VERSION NUMBER |
|
||||
BB_RMN .DS 1 ; RMN MINOR VERSION NUMBER |
|
||||
BB_RUP .DS 1 ; RUP UPDATE NUMBER |
|
||||
BB_RTP .DS 1 ; RTP PATCH LEVEL |
|
||||
BB_LABEL .DS 16 ; 16 CHARACTER DRIVE LABEL |
|
||||
BB_TERM .DS 1 ; LABEL TERMINATOR ('$') |
|
||||
BB_BILOC .DS 2 ; LOC TO PATCH BOOT DRIVE INFO TO (IF NOT ZERO) |
|
||||
BB_CPMLOC .DS 2 ; FINAL RAM DESTINATION FOR CPM/CBIOS |
|
||||
BB_CPMEND .DS 2 ; END ADDRESS FOR LOAD |
|
||||
BB_CPMENT .DS 2 ; CP/M ENTRY POINT (CBIOS COLD BOOT) |
|
||||
; |
|
||||
.END |
|
||||
Loading…
Reference in new issue