|
|
@ -10,8 +10,8 @@ |
|
|
; 1) STACK LOCATION DURING BOOT OR WBOOT??? |
|
|
; 1) STACK LOCATION DURING BOOT OR WBOOT??? |
|
|
; 2) REVIEW USE OF DI/EI IN INIT |
|
|
; 2) REVIEW USE OF DI/EI IN INIT |
|
|
; |
|
|
; |
|
|
FALSE .EQU 0 |
|
|
|
|
|
TRUE .EQU ~FALSE |
|
|
|
|
|
|
|
|
FALSE .EQU 0 |
|
|
|
|
|
TRUE .EQU ~FALSE |
|
|
; |
|
|
; |
|
|
BDOS .EQU 5 ; BDOS FUNC INVOCATION VECTOR |
|
|
BDOS .EQU 5 ; BDOS FUNC INVOCATION VECTOR |
|
|
; |
|
|
; |
|
|
@ -56,8 +56,8 @@ DEV_NUL .EQU $FF ; NUL: |
|
|
; |
|
|
; |
|
|
; MEMORY LAYOUT |
|
|
; MEMORY LAYOUT |
|
|
; |
|
|
; |
|
|
IOBYTE .EQU 3 ; LOC IN PAGE 0 OF I/O DEFINITION BYTE |
|
|
|
|
|
CDISK .EQU 4 ; LOC IN PAGE 0 OF CURRENT DISK NUMBER 0=A,...,15=P |
|
|
|
|
|
|
|
|
IOBYTE .EQU 3 ; LOC IN PAGE 0 OF I/O DEFINITION BYTE |
|
|
|
|
|
CDISK .EQU 4 ; LOC IN PAGE 0 OF CURRENT DISK NUMBER 0=A,...,15=P |
|
|
; |
|
|
; |
|
|
CCP_LOC .EQU CPM_LOC |
|
|
CCP_LOC .EQU CPM_LOC |
|
|
CCP_SIZ .EQU $800 |
|
|
CCP_SIZ .EQU $800 |
|
|
@ -78,7 +78,7 @@ MEMTOP .EQU $10000 |
|
|
#INCLUDE "../UBIOS/ubios.inc" |
|
|
#INCLUDE "../UBIOS/ubios.inc" |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
; |
|
|
; |
|
|
.ORG CBIOS_LOC ; DEFINED IN STD.ASM |
|
|
|
|
|
|
|
|
.ORG CBIOS_LOC ; DEFINED IN STD.ASM |
|
|
; |
|
|
; |
|
|
STACK .EQU CBIOS_END ; USE SLACK SPACE FOR STACK AS NEEDED |
|
|
STACK .EQU CBIOS_END ; USE SLACK SPACE FOR STACK AS NEEDED |
|
|
; |
|
|
; |
|
|
@ -112,7 +112,7 @@ WBOOTE JP WBOOT ; #1 - WARM START |
|
|
; |
|
|
; |
|
|
; RomWBW CBIOS places the following stamp data into page zero |
|
|
; RomWBW CBIOS places the following stamp data into page zero |
|
|
; at address $40. The address range $40-$4F is reserved by CP/M |
|
|
; at address $40. The address range $40-$4F is reserved by CP/M |
|
|
; as a scratch area for CBIOS. This data below is copied there at |
|
|
|
|
|
|
|
|
; as a scratch area for CBIOS. This data below is copied there at |
|
|
; every warm start. It allows applications to identify RomWBW CBIOS. |
|
|
; every warm start. It allows applications to identify RomWBW CBIOS. |
|
|
; Additionally, it contains a pointer to additional CBIOS extension |
|
|
; Additionally, it contains a pointer to additional CBIOS extension |
|
|
; data (CBX) specific to RomWBW CBIOS. |
|
|
; data (CBX) specific to RomWBW CBIOS. |
|
|
@ -130,7 +130,7 @@ STPIMG: .DB 'W',~'W' ; MARKER |
|
|
STPSIZ .EQU $ - STPIMG |
|
|
STPSIZ .EQU $ - STPIMG |
|
|
; |
|
|
; |
|
|
; The following section contains key information and addresses for the |
|
|
; The following section contains key information and addresses for the |
|
|
; RomWBW CBIOS. A pointer to the start of this section is stored with |
|
|
|
|
|
|
|
|
; RomWBW CBIOS. A pointer to the start of this section is stored with |
|
|
; with the CBX data in page zero at $44 (see above). |
|
|
; with the CBX data in page zero at $44 (see above). |
|
|
; |
|
|
; |
|
|
CBX: |
|
|
CBX: |
|
|
@ -152,15 +152,15 @@ CBXSIZ .EQU $ - CBX |
|
|
; IOBYTE (0003H) |
|
|
; IOBYTE (0003H) |
|
|
; ============== |
|
|
; ============== |
|
|
; |
|
|
; |
|
|
; Device LST: PUN: RDR: CON: |
|
|
|
|
|
; Bit positions 7 6 5 4 3 2 1 0 |
|
|
|
|
|
|
|
|
; Device LST: PUN: RDR: CON: |
|
|
|
|
|
; Bit positions 7 6 5 4 3 2 1 0 |
|
|
; |
|
|
; |
|
|
; Dec Binary |
|
|
|
|
|
|
|
|
; Dec Binary |
|
|
; |
|
|
; |
|
|
; 0 00 TTY: TTY: TTY: TTY: |
|
|
|
|
|
; 1 01 CRT: PTP: PTR: CRT: |
|
|
|
|
|
; 2 10 LPT: UP1: UR1: BAT: |
|
|
|
|
|
; 3 11 UL1: UP2: UR2: UC1: |
|
|
|
|
|
|
|
|
; 0 00 TTY: TTY: TTY: TTY: |
|
|
|
|
|
; 1 01 CRT: PTP: PTR: CRT: |
|
|
|
|
|
; 2 10 LPT: UP1: UR1: BAT: |
|
|
|
|
|
; 3 11 UL1: UP2: UR2: UC1: |
|
|
; |
|
|
; |
|
|
; TTY: Teletype device (slow speed console) |
|
|
; TTY: Teletype device (slow speed console) |
|
|
; CRT: Cathode ray tube device (high speed console) |
|
|
; CRT: Cathode ray tube device (high speed console) |
|
|
@ -235,7 +235,7 @@ DEVMAP: |
|
|
;================================================================================================== |
|
|
;================================================================================================== |
|
|
; |
|
|
; |
|
|
; Disk mapping is done using a drive map table (DRVMAP) which is built |
|
|
; Disk mapping is done using a drive map table (DRVMAP) which is built |
|
|
; dynamically at cold boot. See the DRV_INIT routine. This table is |
|
|
|
|
|
|
|
|
; dynamically at cold boot. See the DRV_INIT routine. This table is |
|
|
; made up of entries as documented below. The table is prefixed with one |
|
|
; made up of entries as documented below. The table is prefixed with one |
|
|
; byte indicating the number of entries. The position of the entry indicates |
|
|
; byte indicating the number of entries. The position of the entry indicates |
|
|
; the drive letter, so the first entry is A:, the second entry is B:, etc. |
|
|
; the drive letter, so the first entry is A:, the second entry is B:, etc. |
|
|
@ -245,24 +245,24 @@ DEVMAP: |
|
|
; DPH: DPH ADDRESS OF DRIVE (WORD) |
|
|
; DPH: DPH ADDRESS OF DRIVE (WORD) |
|
|
; |
|
|
; |
|
|
; DRVMAP --+ |
|
|
; DRVMAP --+ |
|
|
; | DRIVE A | DRIVE B | | DRIVE N | |
|
|
|
|
|
; +-----V------+-------+-----+--------------------+ +--------------------+ |
|
|
|
|
|
; | N | UNIT | SLICE | DPH | UNIT | SLICE | DPH | ... | UNIT | SLICE | DPH | |
|
|
|
|
|
; +----8+-----8+------8+-+-16+-----8+------8+-+-16+ +-----8+------8+-+-16+ |
|
|
|
|
|
; | | | |
|
|
|
|
|
; +--------------------+ +-> [DPH] +-> [DPH] |
|
|
|
|
|
|
|
|
; | DRIVE A | DRIVE B | | DRIVE N | |
|
|
|
|
|
; +-----V------+-------+-----+--------------------+ +--------------------+ |
|
|
|
|
|
; | N | UNIT | SLICE | DPH | UNIT | SLICE | DPH | ... | UNIT | SLICE | DPH | |
|
|
|
|
|
; +----8+-----8+------8+-+-16+-----8+------8+-+-16+ +-----8+------8+-+-16+ |
|
|
|
|
|
; | | | |
|
|
|
|
|
; +--------------------+ +-> [DPH] +-> [DPH] |
|
|
; | |
|
|
; | |
|
|
; V-----+-------+-------+-------+--------+-----+-----+-----+ |
|
|
|
|
|
; DPH: | XLT | 0000H | 0000H | 0000H | DIRBUF | DPB | CSV | ALV | |
|
|
|
|
|
; +---16+-----16+-----16+-----16+------16+-+-16+-+-16+-+-16+ |
|
|
|
|
|
; (ONE DPH PER DRIVE) | | | |
|
|
|
|
|
; | | +----------+ |
|
|
|
|
|
; | | | |
|
|
|
|
|
; +----------------------+ V-------------+ V-------------+ |
|
|
|
|
|
; | | CSV BUF | | ALV BUF | |
|
|
|
|
|
; | +-------------+ +-------------+ |
|
|
|
|
|
; | (CSZ BYTES) (ASZ BYTES) |
|
|
|
|
|
; | |
|
|
|
|
|
|
|
|
; V-----+-------+-------+-------+--------+-----+-----+-----+--------+ |
|
|
|
|
|
; DPH: | XLT | 0000H | 0000H | 0000H | DIRBUF | DPB | CSV | ALV | LBAOFF | |
|
|
|
|
|
; +---16+-----16+-----16+-----16+------16+-+-16+-+-16+-+-16+------32+ |
|
|
|
|
|
; (ONE DPH PER DRIVE) | | | |
|
|
|
|
|
; | | +----------+ |
|
|
|
|
|
; | | | |
|
|
|
|
|
; +----------------------+ V-------------+ V-------------+ |
|
|
|
|
|
; | | CSV BUF | | ALV BUF | |
|
|
|
|
|
; | +-------------+ +-------------+ |
|
|
|
|
|
; | (CSZ BYTES) (ASZ BYTES) |
|
|
|
|
|
; | |
|
|
; +-----+-----+-----V-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ |
|
|
; +-----+-----+-----V-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ |
|
|
; DPB: | CSZ | ASZ | BLS | SPT | BSH | BLM | EXM | DSM | DRM | AL0 | AL1 | CKS | OFF | |
|
|
; DPB: | CSZ | ASZ | BLS | SPT | BSH | BLM | EXM | DSM | DRM | AL0 | AL1 | CKS | OFF | |
|
|
; +---16+---16+----8+---16+----8+----8+----8+---16+---16+----8+----8+---16+---16+ |
|
|
; +---16+---16+----8+---16+----8+----8+----8+---16+---16+----8+----8+---16+---16+ |
|
|
@ -289,6 +289,7 @@ DPBMAP: |
|
|
.DW DPB_FD360 ; MID_FD360 |
|
|
.DW DPB_FD360 ; MID_FD360 |
|
|
.DW DPB_FD120 ; MID_FD120 |
|
|
.DW DPB_FD120 ; MID_FD120 |
|
|
.DW DPB_FD111 ; MID_FD111 |
|
|
.DW DPB_FD111 ; MID_FD111 |
|
|
|
|
|
.DW DPB_HDNEW ; MID_HDNEW (1024 DIR ENTRIES) |
|
|
; |
|
|
; |
|
|
DPBCNT .EQU ($ - DPBMAP) / 2 |
|
|
DPBCNT .EQU ($ - DPBMAP) / 2 |
|
|
; |
|
|
; |
|
|
@ -1199,6 +1200,7 @@ DSK_GETINF1: ; ERROR RETURN |
|
|
DSK_SELECT: |
|
|
DSK_SELECT: |
|
|
LD B,E ; SAVE E IN B FOR NOW |
|
|
LD B,E ; SAVE E IN B FOR NOW |
|
|
CALL DSK_GETINF ; GET D=UNIT, E=SLICE, HL=DPH ADDRESS |
|
|
CALL DSK_GETINF ; GET D=UNIT, E=SLICE, HL=DPH ADDRESS |
|
|
|
|
|
CALL NZ,PANIC ; *DEBUG* |
|
|
RET NZ ; RETURN IF INVALID DRIVE (A=1, NZ SET, HL=0) |
|
|
RET NZ ; RETURN IF INVALID DRIVE (A=1, NZ SET, HL=0) |
|
|
PUSH BC ; WE NEED B LATER, SAVE ON STACK |
|
|
PUSH BC ; WE NEED B LATER, SAVE ON STACK |
|
|
; |
|
|
; |
|
|
@ -1209,13 +1211,15 @@ DSK_SELECT: |
|
|
LD (SEKUNIT),A ; SAVE UNIT |
|
|
LD (SEKUNIT),A ; SAVE UNIT |
|
|
LD (SEKDPH),HL ; SAVE DPH ADDRESS |
|
|
LD (SEKDPH),HL ; SAVE DPH ADDRESS |
|
|
; |
|
|
; |
|
|
; UPDATE OFFSET FOR ACTIVE SLICE |
|
|
|
|
|
; A TRACK IS ASSUMED TO BE 16 SECTORS |
|
|
|
|
|
; THE OFFSET REPRESENTS THE NUMBER OF BLOCKS * 256 |
|
|
|
|
|
; TO USE AS THE OFFSET |
|
|
|
|
|
LD H,65 ; H = TRACKS PER SLICE, E = SLICE NO |
|
|
|
|
|
CALL MULT8 ; HL := H * E (TOTAL TRACK OFFSET) |
|
|
|
|
|
LD (SEKOFF),HL ; SAVE NEW TRACK OFFSET |
|
|
|
|
|
|
|
|
LD A,E ; A := SLICE |
|
|
|
|
|
LD (SLICE),A ; SAVE IT |
|
|
|
|
|
; UPDATE LBAOFF FROM DPH |
|
|
|
|
|
LD HL,(SEKDPH) |
|
|
|
|
|
LD A,16 |
|
|
|
|
|
CALL ADDHLA |
|
|
|
|
|
LD DE,SEKLBA |
|
|
|
|
|
LD BC,4 |
|
|
|
|
|
LDIR |
|
|
; |
|
|
; |
|
|
; RESTORE DE TO BC (FOR ACCESS TO DRIVE LOGIN BIT) |
|
|
; RESTORE DE TO BC (FOR ACCESS TO DRIVE LOGIN BIT) |
|
|
POP BC ; GET ORIGINAL E INTO B |
|
|
POP BC ; GET ORIGINAL E INTO B |
|
|
@ -1234,11 +1238,24 @@ DSK_SELECT: |
|
|
LD E,1 ; ENABLE MEDIA CHECK/DISCOVERY |
|
|
LD E,1 ; ENABLE MEDIA CHECK/DISCOVERY |
|
|
RST 08 ; DO IT |
|
|
RST 08 ; DO IT |
|
|
LD A,E ; RESULTANT MEDIA ID TO ACCUM |
|
|
LD A,E ; RESULTANT MEDIA ID TO ACCUM |
|
|
|
|
|
LD (MEDID),A ; SAVE IT |
|
|
OR A ; SET FLAGS |
|
|
OR A ; SET FLAGS |
|
|
LD HL,0 ; ASSUME FAILURE |
|
|
LD HL,0 ; ASSUME FAILURE |
|
|
RET Z ; BAIL OUT IF NO MEDIA |
|
|
RET Z ; BAIL OUT IF NO MEDIA |
|
|
; |
|
|
; |
|
|
; A HAS MEDIA ID, SET HL TO CORRESPONDING DPBMAP ENTRY |
|
|
|
|
|
|
|
|
; CLEAR LBA OFFSET (DWORD) |
|
|
|
|
|
LD HL,0 ; ZERO |
|
|
|
|
|
LD (SEKLBA),HL ; CLEAR FIRST WORD |
|
|
|
|
|
LD (SEKLBA+2),HL ; CLEAR SECOND WORD |
|
|
|
|
|
; |
|
|
|
|
|
; CHECK MBR OF PHYSICAL DISK BEING SELECTED |
|
|
|
|
|
; WILL UPDATE MEDID AND LBAOFF IF VALID CP/M PARTITION EXISTS |
|
|
|
|
|
CALL DSK_MBR ; UPDATE MEDIA FROM MBR |
|
|
|
|
|
LD HL,0 ; ASSUME FAILURE |
|
|
|
|
|
RET NZ ; ABORT ON I/O ERROR |
|
|
|
|
|
; |
|
|
|
|
|
; SET HL TO DPBMAP ENTRY CORRESPONDING TO MEDIA ID |
|
|
|
|
|
LD A,(MEDID) ; GET MEDIA ID |
|
|
LD HL,DPBMAP ; HL = DPBMAP |
|
|
LD HL,DPBMAP ; HL = DPBMAP |
|
|
RLCA ; DPBMAP ENTRIES ARE 2 BYTES EACH |
|
|
RLCA ; DPBMAP ENTRIES ARE 2 BYTES EACH |
|
|
CALL ADDHLA ; ADD OFFSET TO HL |
|
|
CALL ADDHLA ; ADD OFFSET TO HL |
|
|
@ -1249,12 +1266,22 @@ DSK_SELECT: |
|
|
LD D,(HL) ; DE = ADDRESS OF DESIRED DPB |
|
|
LD D,(HL) ; DE = ADDRESS OF DESIRED DPB |
|
|
; |
|
|
; |
|
|
; PLUG DPB INTO THE ACTIVE DPH |
|
|
; PLUG DPB INTO THE ACTIVE DPH |
|
|
LD HL,(SEKDPH) |
|
|
|
|
|
|
|
|
LD HL,(SEKDPH) ; POINT TO START OF DPH |
|
|
LD BC,10 ; OFFSET OF DPB IN DPH |
|
|
LD BC,10 ; OFFSET OF DPB IN DPH |
|
|
ADD HL,BC ; HL := DPH.DPB |
|
|
ADD HL,BC ; HL := DPH.DPB |
|
|
LD (HL),E ; SET LSB OF DPB IN DPH |
|
|
LD (HL),E ; SET LSB OF DPB IN DPH |
|
|
INC HL ; BUMP TO MSB |
|
|
INC HL ; BUMP TO MSB |
|
|
LD (HL),D ; SET MSB OF DPB IN DPH |
|
|
LD (HL),D ; SET MSB OF DPB IN DPH |
|
|
|
|
|
; |
|
|
|
|
|
; ; PLUG LBA OFFSET INTO ACTIVE DPH |
|
|
|
|
|
LD HL,(SEKDPH) ; POINT TO START OF DPH |
|
|
|
|
|
LD BC,16 ; OFFSET OF LBA OFFSET IN DPH |
|
|
|
|
|
ADD HL,BC ; HL := DPH.LBAOFF PTR |
|
|
|
|
|
EX DE,HL ; DEST IS DPH.LBAOFF PTR |
|
|
|
|
|
LD HL,SEKLBA ; SOURCE IS LBAOFF |
|
|
|
|
|
LD BC,4 ; 4 BYTES |
|
|
|
|
|
LDIR ; DO IT |
|
|
|
|
|
; |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
; |
|
|
; |
|
|
DSK_SELECT2: |
|
|
DSK_SELECT2: |
|
|
@ -1262,6 +1289,131 @@ DSK_SELECT2: |
|
|
XOR A ; FLAG SUCCESS |
|
|
XOR A ; FLAG SUCCESS |
|
|
RET ; NORMAL RETURN |
|
|
RET ; NORMAL RETURN |
|
|
; |
|
|
; |
|
|
|
|
|
; CHECK MBR OF DISK TO SEE IF IT HAS A PARTITION TABLE. |
|
|
|
|
|
; IF SO, LOOK FOR A CP/M PARTITION. IF FOUND, GET |
|
|
|
|
|
; UPDATE THE PARTITION OFFSET (LBAOFF) AND UPDATE |
|
|
|
|
|
; THE MEDIA ID (MEDID). |
|
|
|
|
|
; |
|
|
|
|
|
#IFDEF PLTWBW |
|
|
|
|
|
; |
|
|
|
|
|
DSK_MBR: |
|
|
|
|
|
; CHECK MEDIA TYPE, ONLY HARD DISK IS APPLICABLE |
|
|
|
|
|
LD A,(MEDID) ; GET MEDIA ID |
|
|
|
|
|
CP MID_HD ; HARD DISK? |
|
|
|
|
|
JR Z,DSK_MBR1 ; IF SO, CONTINUE |
|
|
|
|
|
XOR A ; ELSE, N/A, SIGNAL SUCCESS |
|
|
|
|
|
RET ; AND RETURN |
|
|
|
|
|
; |
|
|
|
|
|
DSK_MBR1: |
|
|
|
|
|
; FLUSH DSKBUF TO MAKE SURE IT IS SAFE TO USE IT. |
|
|
|
|
|
CALL BLKFLSH ; MAKE SURE DISK BUFFER IS NOT DIRTY |
|
|
|
|
|
XOR A ; CLEAR ACCUM |
|
|
|
|
|
LD (HSTACT),A ; CLEAR HOST BUFFER ACTIVE FLAG |
|
|
|
|
|
; |
|
|
|
|
|
; READ SECTOR ZERO (MBR) |
|
|
|
|
|
LD B,BF_DIOREAD ; READ FUNCTION |
|
|
|
|
|
LD A,(SEKUNIT) ; GET UNIT |
|
|
|
|
|
LD C,A ; PUT IN C |
|
|
|
|
|
LD DE,0 ; LBA SECTOR ZERO |
|
|
|
|
|
LD HL,0 ; ... |
|
|
|
|
|
CALL DSK_IO2 ; DO IT |
|
|
|
|
|
RET NZ ; ABORT ON ERROR |
|
|
|
|
|
; |
|
|
|
|
|
; SWITCH TO BIOS BANK TO ACCESS DISK BUFFER |
|
|
|
|
|
LD A,(HB_CURBNK) ; GET CUR BANK |
|
|
|
|
|
PUSH AF ; SAVE CUR BANK |
|
|
|
|
|
LD A,(BNKBIOS) ; BIOS BANK |
|
|
|
|
|
CALL HB_BNKSEL ; DO IT |
|
|
|
|
|
; |
|
|
|
|
|
; CHECK SIGNATURE |
|
|
|
|
|
LD HL,(DSKBUF) ; DSKBUF ADR |
|
|
|
|
|
LD DE,$1FE ; OFFSET TO SIGNATURE |
|
|
|
|
|
ADD HL,DE ; POINT TO SIGNATURE |
|
|
|
|
|
LD A,(HL) ; GET FIRST BYTE |
|
|
|
|
|
CP $55 ; CHECK FIRST BYTE |
|
|
|
|
|
JR NZ,DSK_MBR4 ; NO MATCH, NO PART TABLE |
|
|
|
|
|
INC HL ; NEXT BYTE |
|
|
|
|
|
LD A,(HL) ; GET SECOND BYTE |
|
|
|
|
|
CP $AA ; CHECK SECOND BYTE |
|
|
|
|
|
JR NZ,DSK_MBR4 ; NO MATCH, NO PART TABLE, ABORT |
|
|
|
|
|
; |
|
|
|
|
|
; TRY TO FIND OUR ENTRY IN PART TABLE AND CAPTURE LBA OFFSET |
|
|
|
|
|
LD B,4 ; FOUR ENTRIES IN PART TABLE |
|
|
|
|
|
LD HL,(DSKBUF) ; DSKBUF ADR |
|
|
|
|
|
LD DE,$1BE+4 ; OFFSET OF FIRST ENTRY PART TYPE |
|
|
|
|
|
ADD HL,DE ; POINT TO IT |
|
|
|
|
|
DSK_MBR2: |
|
|
|
|
|
LD A,(HL) ; GET PART TYPE |
|
|
|
|
|
CP $52 ; CP/M PARTITION? |
|
|
|
|
|
JR Z,DSK_MBR3 ; COOL, GRAB THE LBA OFFSET |
|
|
|
|
|
LD DE,16 ; PART TABLE ENTRY SIZE |
|
|
|
|
|
ADD HL,DE ; BUMP TO NEXT ENTRY PART TYPE |
|
|
|
|
|
DJNZ DSK_MBR2 ; LOOP THRU TABLE |
|
|
|
|
|
JR DSK_MBR4 ; TOO BAD, NO CP/M PARTITION |
|
|
|
|
|
; |
|
|
|
|
|
DSK_MBR3: |
|
|
|
|
|
; WE HAVE LOCATED A VALID CP/M PARTITION |
|
|
|
|
|
; HL POINTS TO PART TYPE FIELD OF PART ENTRY |
|
|
|
|
|
; UPDATE MEDIA ID |
|
|
|
|
|
LD A,MID_HDNEW ; NEW MEDIA ID |
|
|
|
|
|
LD (MEDID),A ; SAVE IT |
|
|
|
|
|
; |
|
|
|
|
|
; CAPTURE THE LBA OFFSET |
|
|
|
|
|
LD DE,4 ; LBA IS 4 BYTES AFTER PART TYPE |
|
|
|
|
|
ADD HL,DE ; POINT TO IT |
|
|
|
|
|
LD DE,SEKLBA ; LOC TO STORE LBA OFFSET |
|
|
|
|
|
LD BC,4 ; 4 BYTES (32 BITS) |
|
|
|
|
|
LDIR ; COPY IT |
|
|
|
|
|
; |
|
|
|
|
|
DSK_MBR4: |
|
|
|
|
|
; RESTORE BANK |
|
|
|
|
|
POP AF ; GET PREV BANK |
|
|
|
|
|
CALL HB_BNKSEL ; SELECT IT |
|
|
|
|
|
; |
|
|
|
|
|
DSK_MBR5: |
|
|
|
|
|
; |
|
|
|
|
|
; DIFFERENT ALGORITHM FOR NEW HD FORMAT |
|
|
|
|
|
LD A,(MEDID) ; GET MEDIA ID |
|
|
|
|
|
CP MID_HDNEW ; NEW FORMAT? |
|
|
|
|
|
JR Z,DSK_MBR6 ; IF SO, GO THERE |
|
|
|
|
|
; |
|
|
|
|
|
; OLD HD FORMAT, 65 TRACKS PER SLICE |
|
|
|
|
|
LD A,(SLICE) ; GET SLICE |
|
|
|
|
|
LD E,A ; E = SLICE NO |
|
|
|
|
|
LD H,65 ; H = TRACKS PER SLICE |
|
|
|
|
|
CALL MULT8 ; HL := H * E (TOTAL TRACK OFFSET) |
|
|
|
|
|
LD DE,0 ; CLEAR HI WORD |
|
|
|
|
|
LD B,8 ; 16 SPT, SHIFT 4 BITS |
|
|
|
|
|
CALL RL32 ; DO IT |
|
|
|
|
|
JR DSK_MBR7 ; DONE |
|
|
|
|
|
; |
|
|
|
|
|
DSK_MBR6: |
|
|
|
|
|
; NEW HD FORMAT, MULTIPLY SLICE BY 8MB |
|
|
|
|
|
LD DE,0 ; CLEAR HIWORD |
|
|
|
|
|
LD H,0 ; CLEAR HI BYTE OR LOWORD |
|
|
|
|
|
LD A,(SLICE) ; GET SLICE |
|
|
|
|
|
LD L,A ; PUT SLICE IN LOW BYTE |
|
|
|
|
|
LD B,14 |
|
|
|
|
|
CALL RL32 ; MULTIPLY BY 16384 SECTORS (8MB) |
|
|
|
|
|
; |
|
|
|
|
|
DSK_MBR7: |
|
|
|
|
|
; ADD IN LBA OFFSET |
|
|
|
|
|
LD BC,(SEKLBA) ; LBA OFFSET LOWORD |
|
|
|
|
|
ADD HL,BC |
|
|
|
|
|
EX DE,HL |
|
|
|
|
|
LD BC,(SEKLBA+2) ; LBA OFFSET HIWORD |
|
|
|
|
|
ADC HL,BC |
|
|
|
|
|
EX DE,HL |
|
|
|
|
|
SET 7,D ; SET LBA ACCESS BIT |
|
|
|
|
|
; RESAVE IT |
|
|
|
|
|
LD (SEKLBA),HL ; LOWORD |
|
|
|
|
|
LD (SEKLBA+2),DE ; HIWORD |
|
|
|
|
|
; SUCCESSFUL FINISH |
|
|
|
|
|
XOR A ; SUCCESS |
|
|
|
|
|
RET ; DONE |
|
|
|
|
|
; |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
; |
|
|
; |
|
|
; |
|
|
; |
|
|
; |
|
|
DSK_STATUS: |
|
|
DSK_STATUS: |
|
|
@ -1297,7 +1449,7 @@ DSK_WRITE: |
|
|
; |
|
|
; |
|
|
; |
|
|
; |
|
|
#IFDEF PLTUNA |
|
|
#IFDEF PLTUNA |
|
|
|
|
|
|
|
|
|
|
|
; |
|
|
DSK_IO: |
|
|
DSK_IO: |
|
|
PUSH BC |
|
|
PUSH BC |
|
|
LD DE,(HSTTRK) ; GET TRACK INTO HL |
|
|
LD DE,(HSTTRK) ; GET TRACK INTO HL |
|
|
@ -1338,15 +1490,10 @@ DSK_IO1: |
|
|
RST 08 |
|
|
RST 08 |
|
|
OR A ; SET FLAGS BASED ON RESULT |
|
|
OR A ; SET FLAGS BASED ON RESULT |
|
|
RET |
|
|
RET |
|
|
|
|
|
|
|
|
#ELSE |
|
|
|
|
|
|
|
|
|
|
|
DSK_IO: |
|
|
|
|
|
; |
|
|
; |
|
|
; TRANSLATE CP/M TRACK/SECTOR -> HBIOS TRACK/HEAD/SECTOR |
|
|
|
|
|
; NEEDS TO HANDLE FLOPPY SEPARATE FROM HARD DISK |
|
|
|
|
|
|
|
|
#ELSE |
|
|
; |
|
|
; |
|
|
CHS: |
|
|
|
|
|
|
|
|
DSK_IO: |
|
|
LD A,(HSTUNIT) ; GET UNIT |
|
|
LD A,(HSTUNIT) ; GET UNIT |
|
|
LD C,A ; UNIT -> C |
|
|
LD C,A ; UNIT -> C |
|
|
PUSH BC ; SAVE FUNC/UNIT |
|
|
PUSH BC ; SAVE FUNC/UNIT |
|
|
@ -1356,7 +1503,7 @@ CHS: |
|
|
LD A,D ; DEVICE TYPE -> A |
|
|
LD A,D ; DEVICE TYPE -> A |
|
|
AND $F0 ; ISOLATE HIGH BITS |
|
|
AND $F0 ; ISOLATE HIGH BITS |
|
|
CP DIODEV_FD ; FLOPPY? |
|
|
CP DIODEV_FD ; FLOPPY? |
|
|
JR NZ,CHSHD ; IF NOT, DO HD CHS XLAT |
|
|
|
|
|
|
|
|
JR NZ,LBA_IO ; IF NOT, DO LBA IO |
|
|
; |
|
|
; |
|
|
; FLOPPY SPECIFIC TRANSLATION ASSUMES FLOPPY IS DOUBLE-SIDED AND |
|
|
; FLOPPY SPECIFIC TRANSLATION ASSUMES FLOPPY IS DOUBLE-SIDED AND |
|
|
; USES LOW ORDER BIT OF TRACK AS HEAD VALUE |
|
|
; USES LOW ORDER BIT OF TRACK AS HEAD VALUE |
|
|
@ -1368,53 +1515,51 @@ CHS: |
|
|
SRL H ; SHIFT HEAD BIT OUT OF HL |
|
|
SRL H ; SHIFT HEAD BIT OUT OF HL |
|
|
RR L ; ... AND INTO CARRY |
|
|
RR L ; ... AND INTO CARRY |
|
|
RL D ; CARRY BIT (HEAD) INTO D |
|
|
RL D ; CARRY BIT (HEAD) INTO D |
|
|
JR CHS2 |
|
|
|
|
|
; |
|
|
|
|
|
; HARD DISK SPECIFIC TRANSLATION |
|
|
|
|
|
; ASSUMES 16 HEADS PER CYLINDER AND 16 SECTORS PER TRACK |
|
|
|
|
|
|
|
|
JR DSK_IO2 ; DO THE DISK I/O |
|
|
; |
|
|
; |
|
|
CHSHD: |
|
|
|
|
|
LD HL,(HSTTRK) ; GET TRACK VALUE |
|
|
|
|
|
LD A,L ; LSB OF TRACK TO A |
|
|
|
|
|
AND $0F ; ISOLATE HEAD IN LOW 4 BITS |
|
|
|
|
|
LD D,A ; STUFF IT IN D |
|
|
|
|
|
|
|
|
LBA_IO: |
|
|
|
|
|
LD A,(HSTUNIT) ; GET THE UNIT VALUE |
|
|
|
|
|
LD C,A ; PUT IT IN C |
|
|
|
|
|
PUSH BC ; SAVE FUNC/UNIT |
|
|
|
|
|
; GET TRACK AND SHIFT TO MAKE ROOM FOR 4 BIT SECTOR VALUE |
|
|
|
|
|
LD HL,(HSTTRK) ; GET TRACK |
|
|
|
|
|
LD DE,0 ; CLEAR HIWORD |
|
|
|
|
|
LD B,4 ; X16 (16 SPT ASSUMED) |
|
|
|
|
|
CALL RL32 ; DO IT |
|
|
|
|
|
; COMBINE WITH SECTOR |
|
|
LD A,(HSTSEC) ; GET SECTOR |
|
|
LD A,(HSTSEC) ; GET SECTOR |
|
|
LD E,A ; STUFF IT IN E |
|
|
|
|
|
LD A,B ; SAVE B (HBIOS FUNC) |
|
|
|
|
|
LD B,4 ; PREPARE TO SHIFT OUT 4 BIT HEAD VALUE |
|
|
|
|
|
CHSHD1: |
|
|
|
|
|
SRL H ; SHIFT ONE BIT OUT |
|
|
|
|
|
RR L ; ... OF HL |
|
|
|
|
|
DJNZ CHSHD1 ; DO ALL 4 BITS |
|
|
|
|
|
LD B,A ; RESTORE B (HBIOS FUNC) |
|
|
|
|
|
; FALL THRU TO CHS2 |
|
|
|
|
|
; |
|
|
|
|
|
; ALL TYPES OF TRANSLATION WIND UP HERE TO |
|
|
|
|
|
; MAKE THE ACTUAL HBIOS CALL |
|
|
|
|
|
; |
|
|
|
|
|
CHS2: |
|
|
|
|
|
PUSH DE ; SAVE HEAD/SECTOR + COULD MOVE |
|
|
|
|
|
LD DE,(HSTOFF) ; NOW GET SLICE OFFSET | TO CHSHD, |
|
|
|
|
|
ADD HL,DE ; ADD IT TO TRACK VALUE | NO SLICES |
|
|
|
|
|
POP DE ; RECOVER HEAD/SECTOR + FOR FLOPPY |
|
|
|
|
|
|
|
|
OR L |
|
|
|
|
|
LD L,A |
|
|
|
|
|
; ADD IN LBA OFFSET FOR PARTITION AND/OR SLICE |
|
|
|
|
|
LD BC,(HSTLBA) ; LBA OFFSET LOWORD |
|
|
|
|
|
ADD HL,BC |
|
|
|
|
|
EX DE,HL |
|
|
|
|
|
LD BC,(HSTLBA+2) ; LBA OFFSET HIWORD |
|
|
|
|
|
ADC HL,BC |
|
|
|
|
|
EX DE,HL |
|
|
|
|
|
SET 7,D ; MAKE SURE LBA ACCESS BIT SET |
|
|
|
|
|
POP BC ; RESTORE FUNC/UNIT |
|
|
|
|
|
;JR DSK_IO2 ; DO THE DISK I/O (FALL THRU) |
|
|
; |
|
|
; |
|
|
; MAKE HBIOS CALL |
|
|
; MAKE HBIOS CALL |
|
|
; HBIOS FUNC SHOULD STILL BE IN B |
|
|
; HBIOS FUNC SHOULD STILL BE IN B |
|
|
; UNIT SHOULD STILL BE IN C |
|
|
; UNIT SHOULD STILL BE IN C |
|
|
; |
|
|
; |
|
|
|
|
|
DSK_IO2: |
|
|
PUSH BC ; SAVE INCOMING FUNCTION, DEVICE/UNIT |
|
|
PUSH BC ; SAVE INCOMING FUNCTION, DEVICE/UNIT |
|
|
LD B,BF_DIOSEEK ; SETUP FOR NEW SEEK CALL |
|
|
|
|
|
|
|
|
LD B,BF_DIOSEEK ; SETUP FOR NEW SEEK CALL |
|
|
RST 08 ; DO IT |
|
|
RST 08 ; DO IT |
|
|
POP BC ; RESTORE INCOMING FUNCTION, DEVICE/UNIT |
|
|
|
|
|
RET NZ ; ABORT IF SEEK RETURNED AN ERROR W/ ERROR IN A |
|
|
|
|
|
LD HL,(DSKBUF) ; GET BUFFER ADDRESS |
|
|
|
|
|
|
|
|
POP BC ; RESTORE INCOMING FUNCTION, DEVICE/UNIT |
|
|
|
|
|
RET NZ ; ABORT IF SEEK RETURNED AN ERROR W/ ERROR IN A |
|
|
|
|
|
LD HL,(DSKBUF) ; GET BUFFER ADDRESS |
|
|
LD A,(BNKBIOS) ; GET BIOS BANK |
|
|
LD A,(BNKBIOS) ; GET BIOS BANK |
|
|
LD D,A ; TRANSFER TO/FROM BIOS BANK |
|
|
LD D,A ; TRANSFER TO/FROM BIOS BANK |
|
|
LD E,1 ; TRANSFER ONE SECTOR |
|
|
|
|
|
|
|
|
LD E,1 ; TRANSFER ONE SECTOR |
|
|
|
|
|
;CALL PC_ASTERISK ; *DEBUG* |
|
|
RST 08 ; DO IT |
|
|
RST 08 ; DO IT |
|
|
OR A ; SET FLAGS |
|
|
OR A ; SET FLAGS |
|
|
RET ; DONE |
|
|
RET ; DONE |
|
|
|
|
|
|
|
|
|
|
|
; |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
; |
|
|
; |
|
|
;================================================================================================== |
|
|
;================================================================================================== |
|
|
@ -1501,12 +1646,14 @@ STR_SEC .DB " SEC=$" |
|
|
; DATA |
|
|
; DATA |
|
|
;================================================================================================== |
|
|
;================================================================================================== |
|
|
; |
|
|
; |
|
|
;STR_READONLY .DB "\r\nCBIOS Err: Read Only Drive$" |
|
|
|
|
|
;STR_STALE .DB "\r\nCBIOS Err: Stale Drive$" |
|
|
|
|
|
|
|
|
;STR_READONLY .DB "\r\nCBIOS Err: Read Only Drive$" |
|
|
|
|
|
;STR_STALE .DB "\r\nCBIOS Err: Stale Drive$" |
|
|
; |
|
|
; |
|
|
SECADR .DW 0 ; ADDRESS OF SECTOR IN ROM/RAM PAGE |
|
|
|
|
|
|
|
|
;SECADR .DW 0 ; ADDRESS OF SECTOR IN ROM/RAM PAGE |
|
|
DEFDRIVE .DB 0 ; DEFAULT DRIVE |
|
|
DEFDRIVE .DB 0 ; DEFAULT DRIVE |
|
|
CCPBUF .DW 0 ; ADDRESS OF CCP BUF IN BIOS BANK |
|
|
CCPBUF .DW 0 ; ADDRESS OF CCP BUF IN BIOS BANK |
|
|
|
|
|
MEDID .DB 0 ; TEMP STORAGE FOR MEDIA ID |
|
|
|
|
|
SLICE .DB 0 ; CURRENT SLICE |
|
|
; |
|
|
; |
|
|
#IFDEF PLTWBW |
|
|
#IFDEF PLTWBW |
|
|
BNKBIOS .DB 0 ; BIOS BANK ID |
|
|
BNKBIOS .DB 0 ; BIOS BANK ID |
|
|
@ -1521,21 +1668,22 @@ BNKUSER .DW 0 ; USER BANK ID |
|
|
; DOS DISK VARIABLES |
|
|
; DOS DISK VARIABLES |
|
|
; |
|
|
; |
|
|
DSKOP .DB 0 ; DISK OPERATION (DOP_READ/DOP_WRITE) |
|
|
DSKOP .DB 0 ; DISK OPERATION (DOP_READ/DOP_WRITE) |
|
|
WRTYPE .DB 0 ; WRITE TYPE (0=NORMAL, 1=DIR (FORCE), 2=FIRST RECORD OF BLOCK) |
|
|
|
|
|
DMAADR .DW 0 ; DIRECT MEMORY ADDRESS |
|
|
|
|
|
|
|
|
WRTYPE .DB 0 ; WRITE TYPE (0=NORMAL, 1=DIR (FORCE), 2=FIRST RECORD OF BLOCK) |
|
|
|
|
|
DMAADR .DW 0 ; DIRECT MEMORY ADDRESS |
|
|
HSTWRT .DB 0 ; TRUE = BUFFER IS DIRTY |
|
|
HSTWRT .DB 0 ; TRUE = BUFFER IS DIRTY |
|
|
DSKBUF .DW 0 ; ADDRESS OF PHYSICAL SECTOR BUFFER |
|
|
DSKBUF .DW 0 ; ADDRESS OF PHYSICAL SECTOR BUFFER |
|
|
; |
|
|
; |
|
|
; LOGICAL DISK I/O REQUEST PENDING |
|
|
; LOGICAL DISK I/O REQUEST PENDING |
|
|
; |
|
|
; |
|
|
SEK: |
|
|
SEK: |
|
|
SEKDSK .DB 0 ; DISK NUMBER 0-15 |
|
|
|
|
|
SEKTRK .DW 0 ; TWO BYTES FOR TRACK # (LOGICAL) |
|
|
|
|
|
SEKSEC .DW 0 ; TWO BYTES FOR SECTOR # (LOGICAL) |
|
|
|
|
|
SEKUNIT .DB 0 ; DISK UNIT |
|
|
|
|
|
|
|
|
SEKDSK .DB 0 ; DISK NUMBER 0-15 |
|
|
|
|
|
SEKTRK .DW 0 ; TWO BYTES FOR TRACK # (LOGICAL) |
|
|
|
|
|
SEKSEC .DW 0 ; TWO BYTES FOR SECTOR # (LOGICAL) |
|
|
|
|
|
SEKUNIT .DB 0 ; DISK UNIT |
|
|
SEKDPH .DW 0 ; ADDRESS OF ACTIVE (SELECTED) DPH |
|
|
SEKDPH .DW 0 ; ADDRESS OF ACTIVE (SELECTED) DPH |
|
|
SEKOFF .DW 0 ; TRACK OFFSET IN EFFECT FOR SLICE |
|
|
SEKOFF .DW 0 ; TRACK OFFSET IN EFFECT FOR SLICE |
|
|
SEKACT .DB TRUE ; ALWAYS TRUE! |
|
|
SEKACT .DB TRUE ; ALWAYS TRUE! |
|
|
|
|
|
SEKLBA .FILL 4,0 ; LBA OFFSET |
|
|
; |
|
|
; |
|
|
; RESULT OF CPM TO PHYSICAL TRANSLATION |
|
|
; RESULT OF CPM TO PHYSICAL TRANSLATION |
|
|
; |
|
|
; |
|
|
@ -1547,6 +1695,7 @@ XLTUNIT .DB 0 |
|
|
XLTDPH .DW 0 |
|
|
XLTDPH .DW 0 |
|
|
XLTOFF .DW 0 |
|
|
XLTOFF .DW 0 |
|
|
XLTACT .DB TRUE ; ALWAYS TRUE! |
|
|
XLTACT .DB TRUE ; ALWAYS TRUE! |
|
|
|
|
|
XLTLBA .FILL 4,0 ; LBA OFFSET |
|
|
; |
|
|
; |
|
|
XLTSIZ .EQU $ - XLT |
|
|
XLTSIZ .EQU $ - XLT |
|
|
; |
|
|
; |
|
|
@ -1560,13 +1709,14 @@ HSTUNIT .DB 0 ; DISK UNIT IN BUFFER |
|
|
HSTDPH .DW 0 ; CURRENT DPH ADDRESS |
|
|
HSTDPH .DW 0 ; CURRENT DPH ADDRESS |
|
|
HSTOFF .DW 0 ; TRACK OFFSET IN EFFECT FOR SLICE |
|
|
HSTOFF .DW 0 ; TRACK OFFSET IN EFFECT FOR SLICE |
|
|
HSTACT .DB 0 ; TRUE = BUFFER HAS VALID DATA |
|
|
HSTACT .DB 0 ; TRUE = BUFFER HAS VALID DATA |
|
|
|
|
|
HSTLBA .FILL 4,0 ; LBA OFFSET |
|
|
; |
|
|
; |
|
|
; SEQUENTIAL WRITE TRACKING FOR (UNA)LLOCATED BLOCK |
|
|
; SEQUENTIAL WRITE TRACKING FOR (UNA)LLOCATED BLOCK |
|
|
; |
|
|
; |
|
|
UNA: |
|
|
UNA: |
|
|
UNADSK .DB 0 ; DISK NUMBER 0-15 |
|
|
|
|
|
UNATRK .DW 0 ; TWO BYTES FOR TRACK # (LOGICAL) |
|
|
|
|
|
UNASEC .DW 0 ; TWO BYTES FOR SECTOR # (LOGICAL) |
|
|
|
|
|
|
|
|
UNADSK .DB 0 ; DISK NUMBER 0-15 |
|
|
|
|
|
UNATRK .DW 0 ; TWO BYTES FOR TRACK # (LOGICAL) |
|
|
|
|
|
UNASEC .DW 0 ; TWO BYTES FOR SECTOR # (LOGICAL) |
|
|
; |
|
|
; |
|
|
UNASIZ .EQU $ - UNA |
|
|
UNASIZ .EQU $ - UNA |
|
|
; |
|
|
; |
|
|
@ -1595,13 +1745,13 @@ ALS_HD .EQU 256 ; ALS: BLKS / 8 = 2048 / 8 = 256 (ROUNDED UP) |
|
|
; BLS BSH BLM EXM (DSM<256) EXM (DSM>255) |
|
|
; BLS BSH BLM EXM (DSM<256) EXM (DSM>255) |
|
|
; ---------- --- --- ------------- ------------- |
|
|
; ---------- --- --- ------------- ------------- |
|
|
; 1,024 3 7 0 N/A |
|
|
; 1,024 3 7 0 N/A |
|
|
; 2,048 4 15 1 0 |
|
|
|
|
|
; 4,096 5 31 3 1 |
|
|
|
|
|
; 8,192 6 63 7 3 |
|
|
|
|
|
; 16,384 7 127 15 7 |
|
|
|
|
|
|
|
|
; 2,048 4 15 1 0 |
|
|
|
|
|
; 4,096 5 31 3 1 |
|
|
|
|
|
; 8,192 6 63 7 3 |
|
|
|
|
|
; 16,384 7 127 15 7 |
|
|
; |
|
|
; |
|
|
; AL0/1: EACH BIT SET ALLOCATES A BLOCK OF DIR ENTRIES. EACH DIR ENTRY |
|
|
|
|
|
; IS 32 BYTES. BIT COUNT = (((DRM + 1) * 32) / BLS) |
|
|
|
|
|
|
|
|
; AL0/1: EACH BIT SET ALLOCATES A BLOCK OF DIR ENTRIES. EACH DIR ENTRY |
|
|
|
|
|
; IS 32 BYTES. BIT COUNT = (((DRM + 1) * 32) / BLS) |
|
|
; |
|
|
; |
|
|
; CKS = (DIR ENT / 4), ZERO FOR NON-REMOVABLE MEDIA |
|
|
; CKS = (DIR ENT / 4), ZERO FOR NON-REMOVABLE MEDIA |
|
|
; |
|
|
; |
|
|
@ -1623,16 +1773,16 @@ ALS_HD .EQU 256 ; ALS: BLKS / 8 = 2048 / 8 = 256 (ROUNDED UP) |
|
|
.DW ALS_ROM ; ALS: BLKS / 8 |
|
|
.DW ALS_ROM ; ALS: BLKS / 8 |
|
|
.DB (2048 / 128) ; RECORDS PER BLOCK (BLS / 128) |
|
|
.DB (2048 / 128) ; RECORDS PER BLOCK (BLS / 128) |
|
|
DPB_ROM: |
|
|
DPB_ROM: |
|
|
.DW 64 ; SPT: SECTORS PER TRACK |
|
|
|
|
|
.DB 4 ; BSH: BLOCK SHIFT FACTOR |
|
|
|
|
|
.DB 15 ; BLM: BLOCK MASK |
|
|
|
|
|
|
|
|
.DW 64 ; SPT: SECTORS PER TRACK |
|
|
|
|
|
.DB 4 ; BSH: BLOCK SHIFT FACTOR |
|
|
|
|
|
.DB 15 ; BLM: BLOCK MASK |
|
|
.DB 1 ; EXM: (BLKS <= 256) ? 1 : 0 |
|
|
.DB 1 ; EXM: (BLKS <= 256) ? 1 : 0 |
|
|
.DW 192 - 1 ; DSM: TOTAL STORAGE IN BLOCKS - 1 |
|
|
.DW 192 - 1 ; DSM: TOTAL STORAGE IN BLOCKS - 1 |
|
|
.DW 255 ; DRM: DIR ENTRIES - 1 = 255 |
|
|
|
|
|
.DB 11110000B ; AL0: DIR BLK BIT MAP, FIRST BYTE |
|
|
|
|
|
.DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE |
|
|
|
|
|
.DW 0 ; CKS: ZERO FOR NON-REMOVABLE MEDIA |
|
|
|
|
|
.DW 0 ; OFF: ROM DISK HAS NO SYSTEM AREA |
|
|
|
|
|
|
|
|
.DW 255 ; DRM: DIR ENTRIES - 1 = 255 |
|
|
|
|
|
.DB 11110000B ; AL0: DIR BLK BIT MAP, FIRST BYTE |
|
|
|
|
|
.DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE |
|
|
|
|
|
.DW 0 ; CKS: ZERO FOR NON-REMOVABLE MEDIA |
|
|
|
|
|
.DW 0 ; OFF: ROM DISK HAS NO SYSTEM AREA |
|
|
;__________________________________________________________________________________________________ |
|
|
;__________________________________________________________________________________________________ |
|
|
; |
|
|
; |
|
|
; RAM DISK: 64 SECS/TRK, 128 BYTES/SEC |
|
|
; RAM DISK: 64 SECS/TRK, 128 BYTES/SEC |
|
|
@ -1650,16 +1800,16 @@ DPB_ROM: |
|
|
.DW ALS_RAM ; ALS: BLKS / 8 |
|
|
.DW ALS_RAM ; ALS: BLKS / 8 |
|
|
.DB (2048 / 128) ; RECORDS PER BLOCK (BLS / 128) |
|
|
.DB (2048 / 128) ; RECORDS PER BLOCK (BLS / 128) |
|
|
DPB_RAM: |
|
|
DPB_RAM: |
|
|
.DW 64 ; SPT: SECTORS PER TRACK |
|
|
|
|
|
.DB 4 ; BSH: BLOCK SHIFT FACTOR |
|
|
|
|
|
.DB 15 ; BLM: BLOCK MASK |
|
|
|
|
|
|
|
|
.DW 64 ; SPT: SECTORS PER TRACK |
|
|
|
|
|
.DB 4 ; BSH: BLOCK SHIFT FACTOR |
|
|
|
|
|
.DB 15 ; BLM: BLOCK MASK |
|
|
.DB 1 ; EXM: (BLKS <= 256) ? 1 : 0 |
|
|
.DB 1 ; EXM: (BLKS <= 256) ? 1 : 0 |
|
|
.DW 192 - 1 ; DSM: TOTAL STORAGE IN BLOCKS - 1 |
|
|
.DW 192 - 1 ; DSM: TOTAL STORAGE IN BLOCKS - 1 |
|
|
.DW 255 ; DRM: DIR ENTRIES - 1 = 255 |
|
|
|
|
|
.DB 11110000B ; AL0: DIR BLK BIT MAP, FIRST BYTE |
|
|
|
|
|
.DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE |
|
|
|
|
|
.DW 0 ; CKS: ZERO FOR NON-REMOVABLE MEDIA |
|
|
|
|
|
.DW 0 ; OFF: RESERVED TRACKS = 0 TRK |
|
|
|
|
|
|
|
|
.DW 255 ; DRM: DIR ENTRIES - 1 = 255 |
|
|
|
|
|
.DB 11110000B ; AL0: DIR BLK BIT MAP, FIRST BYTE |
|
|
|
|
|
.DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE |
|
|
|
|
|
.DW 0 ; CKS: ZERO FOR NON-REMOVABLE MEDIA |
|
|
|
|
|
.DW 0 ; OFF: RESERVED TRACKS = 0 TRK |
|
|
;__________________________________________________________________________________________________ |
|
|
;__________________________________________________________________________________________________ |
|
|
; |
|
|
; |
|
|
; 4MB RAM FLOPPY DRIVE, 32 TRKS, 1024 SECS/TRK, 128 BYTES/SEC |
|
|
; 4MB RAM FLOPPY DRIVE, 32 TRKS, 1024 SECS/TRK, 128 BYTES/SEC |
|
|
@ -1669,16 +1819,16 @@ DPB_RAM: |
|
|
.DW ALS_HD |
|
|
.DW ALS_HD |
|
|
.DB (2048 / 128) ; RECORDS PER BLOCK (BLS / 128) |
|
|
.DB (2048 / 128) ; RECORDS PER BLOCK (BLS / 128) |
|
|
DPB_RF: |
|
|
DPB_RF: |
|
|
.DW 64 ; SPT: SECTORS PER TRACK |
|
|
|
|
|
.DB 4 ; BSH: BLOCK SHIFT FACTOR |
|
|
|
|
|
.DB 15 ; BLM: BLOCK MASK |
|
|
|
|
|
.DB 0 ; EXM: EXTENT MASK |
|
|
|
|
|
.DW 2047 ; DSM: TOTAL STORAGE IN BLOCKS - 1 BLK = (4MB / 2K BLS) - 1 = 2047 |
|
|
|
|
|
.DW 511 ; DRM: DIR ENTRIES - 1 = 256 - 1 = 255 |
|
|
|
|
|
.DB 11111111B ; AL0: DIR BLK BIT MAP, FIRST BYTE |
|
|
|
|
|
.DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE |
|
|
|
|
|
.DW 0 ; CKS: ZERO FOR NON-REMOVABLE MEDIA |
|
|
|
|
|
.DW 0 ; OFF: RESERVED TRACKS = 0 TRK |
|
|
|
|
|
|
|
|
.DW 64 ; SPT: SECTORS PER TRACK |
|
|
|
|
|
.DB 4 ; BSH: BLOCK SHIFT FACTOR |
|
|
|
|
|
.DB 15 ; BLM: BLOCK MASK |
|
|
|
|
|
.DB 0 ; EXM: EXTENT MASK |
|
|
|
|
|
.DW 2047 ; DSM: TOTAL STORAGE IN BLOCKS - 1 BLK = (4MB / 2K BLS) - 1 = 2047 |
|
|
|
|
|
.DW 511 ; DRM: DIR ENTRIES - 1 = 256 - 1 = 255 |
|
|
|
|
|
.DB 11111111B ; AL0: DIR BLK BIT MAP, FIRST BYTE |
|
|
|
|
|
.DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE |
|
|
|
|
|
.DW 0 ; CKS: ZERO FOR NON-REMOVABLE MEDIA |
|
|
|
|
|
.DW 0 ; OFF: RESERVED TRACKS = 0 TRK |
|
|
;__________________________________________________________________________________________________ |
|
|
;__________________________________________________________________________________________________ |
|
|
; |
|
|
; |
|
|
; GENERIC HARD DISK DRIVE (8MB DATA SPACE + 128K RESERVED SPACE) |
|
|
; GENERIC HARD DISK DRIVE (8MB DATA SPACE + 128K RESERVED SPACE) |
|
|
@ -1690,16 +1840,33 @@ DPB_RF: |
|
|
.DW ALS_HD |
|
|
.DW ALS_HD |
|
|
.DB (4096 / 128) ; RECORDS PER BLOCK (BLS / 128) |
|
|
.DB (4096 / 128) ; RECORDS PER BLOCK (BLS / 128) |
|
|
DPB_HD: |
|
|
DPB_HD: |
|
|
.DW 64 ; SPT: SECTORS PER TRACK |
|
|
|
|
|
.DB 5 ; BSH: BLOCK SHIFT FACTOR |
|
|
|
|
|
.DB 31 ; BLM: BLOCK MASK |
|
|
|
|
|
.DB 1 ; EXM: EXTENT MASK |
|
|
|
|
|
.DW 2047 ; DSM: TOTAL STORAGE IN BLOCKS - 1 = (8MB / 4K BLS) - 1 = 2047 |
|
|
|
|
|
.DW 511 ; DRM: DIR ENTRIES - 1 = 512 - 1 = 511 |
|
|
|
|
|
.DB 11110000B ; AL0: DIR BLK BIT MAP, FIRST BYTE |
|
|
|
|
|
.DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE |
|
|
|
|
|
.DW 0 ; CKS: DIRECTORY CHECK VECTOR SIZE = 256 / 4 |
|
|
|
|
|
.DW 16 ; OFF: RESERVED TRACKS = 16 TRKS * (16 TRKS * 16 HEADS * 16 SECS * 512 BYTES) = 128K |
|
|
|
|
|
|
|
|
.DW 64 ; SPT: SECTORS PER TRACK |
|
|
|
|
|
.DB 5 ; BSH: BLOCK SHIFT FACTOR |
|
|
|
|
|
.DB 31 ; BLM: BLOCK MASK |
|
|
|
|
|
.DB 1 ; EXM: EXTENT MASK |
|
|
|
|
|
.DW 2047 ; DSM: TOTAL STORAGE IN BLOCKS - 1 = (8MB / 4K BLS) - 1 = 2047 |
|
|
|
|
|
.DW 512 - 1 ; DRM: DIR ENTRIES - 1 |
|
|
|
|
|
.DB 11110000B ; AL0: DIR BLK BIT MAP, FIRST BYTE |
|
|
|
|
|
.DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE |
|
|
|
|
|
.DW 0 ; CKS: DIRECTORY CHECK VECTOR SIZE = 256 / 4 |
|
|
|
|
|
.DW 16 ; OFF: RESERVED TRACKS |
|
|
|
|
|
; |
|
|
|
|
|
; BLOCKSIZE (BLS) = 4K, DIRECTORY ENTRIES = 1024 |
|
|
|
|
|
; |
|
|
|
|
|
.DW CKS_HD |
|
|
|
|
|
.DW ALS_HD |
|
|
|
|
|
.DB (4096 / 128) ; RECORDS PER BLOCK (BLS / 128) |
|
|
|
|
|
DPB_HDNEW: |
|
|
|
|
|
.DW 64 ; SPT: SECTORS PER TRACK |
|
|
|
|
|
.DB 5 ; BSH: BLOCK SHIFT FACTOR |
|
|
|
|
|
.DB 31 ; BLM: BLOCK MASK |
|
|
|
|
|
.DB 1 ; EXM: EXTENT MASK |
|
|
|
|
|
.DW 2048 - 1 - 4 ; DSM: STORAGE BLOCKS - 1 - RES TRKS |
|
|
|
|
|
.DW 1024 - 1 ; DRM: DIR ENTRIES - 1 |
|
|
|
|
|
.DB 11111111B ; AL0: DIR BLK BIT MAP, FIRST BYTE |
|
|
|
|
|
.DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE |
|
|
|
|
|
.DW 0 ; CKS: DIRECTORY CHECK VECTOR SIZE = 256 / 4 |
|
|
|
|
|
.DW 2 ; OFF: RESERVED TRACKS |
|
|
;__________________________________________________________________________________________________ |
|
|
;__________________________________________________________________________________________________ |
|
|
; |
|
|
; |
|
|
; IBM 720KB 3.5" FLOPPY DRIVE, 80 TRKS, 36 SECS/TRK, 512 BYTES/SEC |
|
|
; IBM 720KB 3.5" FLOPPY DRIVE, 80 TRKS, 36 SECS/TRK, 512 BYTES/SEC |
|
|
@ -1709,16 +1876,16 @@ DPB_HD: |
|
|
.DW ALS_FD |
|
|
.DW ALS_FD |
|
|
.DB (2048 / 128) ; RECORDS PER BLOCK (BLS / 128) |
|
|
.DB (2048 / 128) ; RECORDS PER BLOCK (BLS / 128) |
|
|
DPB_FD720: |
|
|
DPB_FD720: |
|
|
.DW 36 ; SPT: SECTORS PER TRACK |
|
|
|
|
|
.DB 4 ; BSH: BLOCK SHIFT FACTOR |
|
|
|
|
|
.DB 15 ; BLM: BLOCK MASK |
|
|
|
|
|
.DB 0 ; EXM: EXTENT MASK |
|
|
|
|
|
.DW 350 ; DSM: TOTAL STORAGE IN BLOCKS - 1 BLK = ((720K - 18K OFF) / 2K BLS) - 1 = 350 |
|
|
|
|
|
.DW 127 ; DRM: DIR ENTRIES - 1 = 128 - 1 = 127 |
|
|
|
|
|
.DB 11000000B ; AL0: DIR BLK BIT MAP, FIRST BYTE |
|
|
|
|
|
.DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE |
|
|
|
|
|
.DW 32 ; CKS: DIRECTORY CHECK VECTOR SIZE = 128 / 4 |
|
|
|
|
|
.DW 4 ; OFF: RESERVED TRACKS = 4 TRKS * (512 B/SEC * 36 SEC/TRK) = 18K |
|
|
|
|
|
|
|
|
.DW 36 ; SPT: SECTORS PER TRACK |
|
|
|
|
|
.DB 4 ; BSH: BLOCK SHIFT FACTOR |
|
|
|
|
|
.DB 15 ; BLM: BLOCK MASK |
|
|
|
|
|
.DB 0 ; EXM: EXTENT MASK |
|
|
|
|
|
.DW 350 ; DSM: TOTAL STORAGE IN BLOCKS - 1 BLK = ((720K - 18K OFF) / 2K BLS) - 1 = 350 |
|
|
|
|
|
.DW 127 ; DRM: DIR ENTRIES - 1 = 128 - 1 = 127 |
|
|
|
|
|
.DB 11000000B ; AL0: DIR BLK BIT MAP, FIRST BYTE |
|
|
|
|
|
.DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE |
|
|
|
|
|
.DW 32 ; CKS: DIRECTORY CHECK VECTOR SIZE = 128 / 4 |
|
|
|
|
|
.DW 4 ; OFF: RESERVED TRACKS = 4 TRKS * (512 B/SEC * 36 SEC/TRK) = 18K |
|
|
;__________________________________________________________________________________________________ |
|
|
;__________________________________________________________________________________________________ |
|
|
; |
|
|
; |
|
|
; IBM 1.44MB 3.5" FLOPPY DRIVE, 80 TRKS, 72 SECS/TRK, 512 BYTES/SEC |
|
|
; IBM 1.44MB 3.5" FLOPPY DRIVE, 80 TRKS, 72 SECS/TRK, 512 BYTES/SEC |
|
|
@ -1728,16 +1895,16 @@ DPB_FD720: |
|
|
.DW ALS_FD |
|
|
.DW ALS_FD |
|
|
.DB (2048 / 128) ; RECORDS PER BLOCK (BLS / 128) |
|
|
.DB (2048 / 128) ; RECORDS PER BLOCK (BLS / 128) |
|
|
DPB_FD144: |
|
|
DPB_FD144: |
|
|
.DW 72 ; SPT: SECTORS PER TRACK |
|
|
|
|
|
.DB 4 ; BSH: BLOCK SHIFT FACTOR |
|
|
|
|
|
.DB 15 ; BLM: BLOCK MASK |
|
|
|
|
|
.DB 0 ; EXM: EXTENT MASK |
|
|
|
|
|
.DW 710 ; DSM: TOTAL STORAGE IN BLOCKS - 1 BLK = ((1,440K - 18K OFF) / 2K BLS) - 1 = 710 |
|
|
|
|
|
.DW 255 ; DRM: DIR ENTRIES - 1 = 256 - 1 = 255 |
|
|
|
|
|
.DB 11110000B ; AL0: DIR BLK BIT MAP, FIRST BYTE |
|
|
|
|
|
.DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE |
|
|
|
|
|
.DW 64 ; CKS: DIRECTORY CHECK VECTOR SIZE = 256 / 4 |
|
|
|
|
|
.DW 2 ; OFF: RESERVED TRACKS = 2 TRKS * (512 B/SEC * 72 SEC/TRK) = 18K |
|
|
|
|
|
|
|
|
.DW 72 ; SPT: SECTORS PER TRACK |
|
|
|
|
|
.DB 4 ; BSH: BLOCK SHIFT FACTOR |
|
|
|
|
|
.DB 15 ; BLM: BLOCK MASK |
|
|
|
|
|
.DB 0 ; EXM: EXTENT MASK |
|
|
|
|
|
.DW 710 ; DSM: TOTAL STORAGE IN BLOCKS - 1 BLK = ((1,440K - 18K OFF) / 2K BLS) - 1 = 710 |
|
|
|
|
|
.DW 255 ; DRM: DIR ENTRIES - 1 = 256 - 1 = 255 |
|
|
|
|
|
.DB 11110000B ; AL0: DIR BLK BIT MAP, FIRST BYTE |
|
|
|
|
|
.DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE |
|
|
|
|
|
.DW 64 ; CKS: DIRECTORY CHECK VECTOR SIZE = 256 / 4 |
|
|
|
|
|
.DW 2 ; OFF: RESERVED TRACKS = 2 TRKS * (512 B/SEC * 72 SEC/TRK) = 18K |
|
|
;__________________________________________________________________________________________________ |
|
|
;__________________________________________________________________________________________________ |
|
|
; |
|
|
; |
|
|
; IBM 360KB 5.25" FLOPPY DRIVE, 40 TRKS, 9 SECS/TRK, 512 BYTES/SEC |
|
|
; IBM 360KB 5.25" FLOPPY DRIVE, 40 TRKS, 9 SECS/TRK, 512 BYTES/SEC |
|
|
@ -1747,16 +1914,16 @@ DPB_FD144: |
|
|
.DW ALS_FD |
|
|
.DW ALS_FD |
|
|
.DB (2048 / 128) ; RECORDS PER BLOCK (BLS / 128) |
|
|
.DB (2048 / 128) ; RECORDS PER BLOCK (BLS / 128) |
|
|
DPB_FD360: |
|
|
DPB_FD360: |
|
|
.DW 36 ; SPT: SECTORS PER TRACK |
|
|
|
|
|
.DB 4 ; BSH: BLOCK SHIFT FACTOR |
|
|
|
|
|
.DB 15 ; BLM: BLOCK MASK |
|
|
|
|
|
.DB 1 ; EXM: EXTENT MASK |
|
|
|
|
|
.DW 170 ; DSM: TOTAL STORAGE IN BLOCKS - 1 BLK = ((360K - 18K OFF) / 2K BLS) - 1 = 170 |
|
|
|
|
|
.DW 127 ; DRM: DIR ENTRIES - 1 = 128 - 1 = 127 |
|
|
|
|
|
.DB 11110000B ; AL0: DIR BLK BIT MAP, FIRST BYTE |
|
|
|
|
|
.DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE |
|
|
|
|
|
.DW 32 ; CKS: DIRECTORY CHECK VECTOR SIZE = 128 / 4 |
|
|
|
|
|
.DW 4 ; OFF: RESERVED TRACKS = 4 TRKS * (512 B/SEC * 36 SEC/TRK) = 18K |
|
|
|
|
|
|
|
|
.DW 36 ; SPT: SECTORS PER TRACK |
|
|
|
|
|
.DB 4 ; BSH: BLOCK SHIFT FACTOR |
|
|
|
|
|
.DB 15 ; BLM: BLOCK MASK |
|
|
|
|
|
.DB 1 ; EXM: EXTENT MASK |
|
|
|
|
|
.DW 170 ; DSM: TOTAL STORAGE IN BLOCKS - 1 BLK = ((360K - 18K OFF) / 2K BLS) - 1 = 170 |
|
|
|
|
|
.DW 127 ; DRM: DIR ENTRIES - 1 = 128 - 1 = 127 |
|
|
|
|
|
.DB 11110000B ; AL0: DIR BLK BIT MAP, FIRST BYTE |
|
|
|
|
|
.DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE |
|
|
|
|
|
.DW 32 ; CKS: DIRECTORY CHECK VECTOR SIZE = 128 / 4 |
|
|
|
|
|
.DW 4 ; OFF: RESERVED TRACKS = 4 TRKS * (512 B/SEC * 36 SEC/TRK) = 18K |
|
|
;__________________________________________________________________________________________________ |
|
|
;__________________________________________________________________________________________________ |
|
|
; |
|
|
; |
|
|
; IBM 1.20MB 5.25" FLOPPY DRIVE, 80 TRKS, 15 SECS/TRK, 512 BYTES/SEC |
|
|
; IBM 1.20MB 5.25" FLOPPY DRIVE, 80 TRKS, 15 SECS/TRK, 512 BYTES/SEC |
|
|
@ -1766,16 +1933,16 @@ DPB_FD360: |
|
|
.DW ALS_FD |
|
|
.DW ALS_FD |
|
|
.DB (2048 / 128) ; RECORDS PER BLOCK (BLS / 128) |
|
|
.DB (2048 / 128) ; RECORDS PER BLOCK (BLS / 128) |
|
|
DPB_FD120: |
|
|
DPB_FD120: |
|
|
.DW 60 ; SPT: SECTORS PER TRACK |
|
|
|
|
|
.DB 4 ; BSH: BLOCK SHIFT FACTOR |
|
|
|
|
|
.DB 15 ; BLM: BLOCK MASK |
|
|
|
|
|
.DB 0 ; EXM: EXTENT MASK |
|
|
|
|
|
.DW 591 ; DSM: TOTAL STORAGE IN BLOCKS - 1 BLK = ((1,200K - 15K OFF) / 2K BLS) - 1 = 591 |
|
|
|
|
|
.DW 255 ; DRM: DIR ENTRIES - 1 = 256 - 1 = 255 |
|
|
|
|
|
.DB 11110000B ; AL0: DIR BLK BIT MAP, FIRST BYTE |
|
|
|
|
|
.DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE |
|
|
|
|
|
.DW 64 ; CKS: DIRECTORY CHECK VECTOR SIZE = 256 / 4 |
|
|
|
|
|
.DW 2 ; OFF: RESERVED TRACKS = 2 TRKS * (512 B/SEC * 60 SEC/TRK) = 15K |
|
|
|
|
|
|
|
|
.DW 60 ; SPT: SECTORS PER TRACK |
|
|
|
|
|
.DB 4 ; BSH: BLOCK SHIFT FACTOR |
|
|
|
|
|
.DB 15 ; BLM: BLOCK MASK |
|
|
|
|
|
.DB 0 ; EXM: EXTENT MASK |
|
|
|
|
|
.DW 591 ; DSM: TOTAL STORAGE IN BLOCKS - 1 BLK = ((1,200K - 15K OFF) / 2K BLS) - 1 = 591 |
|
|
|
|
|
.DW 255 ; DRM: DIR ENTRIES - 1 = 256 - 1 = 255 |
|
|
|
|
|
.DB 11110000B ; AL0: DIR BLK BIT MAP, FIRST BYTE |
|
|
|
|
|
.DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE |
|
|
|
|
|
.DW 64 ; CKS: DIRECTORY CHECK VECTOR SIZE = 256 / 4 |
|
|
|
|
|
.DW 2 ; OFF: RESERVED TRACKS = 2 TRKS * (512 B/SEC * 60 SEC/TRK) = 15K |
|
|
;__________________________________________________________________________________________________ |
|
|
;__________________________________________________________________________________________________ |
|
|
; |
|
|
; |
|
|
; IBM 1.11MB 8" FLOPPY DRIVE, 77 TRKS, 15 SECS/TRK, 512 BYTES/SEC |
|
|
; IBM 1.11MB 8" FLOPPY DRIVE, 77 TRKS, 15 SECS/TRK, 512 BYTES/SEC |
|
|
@ -1785,16 +1952,16 @@ DPB_FD120: |
|
|
.DW ALS_FD |
|
|
.DW ALS_FD |
|
|
.DB (2048 / 128) ; RECORDS PER BLOCK (BLS / 128) |
|
|
.DB (2048 / 128) ; RECORDS PER BLOCK (BLS / 128) |
|
|
DPB_FD111: |
|
|
DPB_FD111: |
|
|
.DW 60 ; SPT: SECTORS PER TRACK |
|
|
|
|
|
.DB 4 ; BSH: BLOCK SHIFT FACTOR |
|
|
|
|
|
.DB 15 ; BLM: BLOCK MASK |
|
|
|
|
|
.DB 0 ; EXM: EXTENT MASK |
|
|
|
|
|
.DW 569 ; DSM: TOTAL STORAGE IN BLOCKS - 1 BLK = ((1,155K - 15K OFF) / 2K BLS) - 1 = 569 |
|
|
|
|
|
.DW 255 ; DRM: DIR ENTRIES - 1 = 256 - 1 = 255 |
|
|
|
|
|
.DB 11110000B ; AL0: DIR BLK BIT MAP, FIRST BYTE |
|
|
|
|
|
.DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE |
|
|
|
|
|
.DW 64 ; CKS: DIRECTORY CHECK VECTOR SIZE = 256 / 4 |
|
|
|
|
|
.DW 2 ; OFF: RESERVED TRACKS = 2 TRKS * (512 B/SEC * 60 SEC/TRK) = 15K |
|
|
|
|
|
|
|
|
.DW 60 ; SPT: SECTORS PER TRACK |
|
|
|
|
|
.DB 4 ; BSH: BLOCK SHIFT FACTOR |
|
|
|
|
|
.DB 15 ; BLM: BLOCK MASK |
|
|
|
|
|
.DB 0 ; EXM: EXTENT MASK |
|
|
|
|
|
.DW 569 ; DSM: TOTAL STORAGE IN BLOCKS - 1 BLK = ((1,155K - 15K OFF) / 2K BLS) - 1 = 569 |
|
|
|
|
|
.DW 255 ; DRM: DIR ENTRIES - 1 = 256 - 1 = 255 |
|
|
|
|
|
.DB 11110000B ; AL0: DIR BLK BIT MAP, FIRST BYTE |
|
|
|
|
|
.DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE |
|
|
|
|
|
.DW 64 ; CKS: DIRECTORY CHECK VECTOR SIZE = 256 / 4 |
|
|
|
|
|
.DW 2 ; OFF: RESERVED TRACKS = 2 TRKS * (512 B/SEC * 60 SEC/TRK) = 15K |
|
|
; |
|
|
; |
|
|
#IFDEF PLTUNA |
|
|
#IFDEF PLTUNA |
|
|
SECBUF .FILL 512,0 ; PHYSICAL DISK SECTOR BUFFER |
|
|
SECBUF .FILL 512,0 ; PHYSICAL DISK SECTOR BUFFER |
|
|
@ -2086,7 +2253,7 @@ DEV_INIT0: |
|
|
;POP BC ; RESTORE LOOP CONTROL |
|
|
;POP BC ; RESTORE LOOP CONTROL |
|
|
;LD A,C ; UNIT INDEX TO ACCUM |
|
|
;LD A,C ; UNIT INDEX TO ACCUM |
|
|
;;CALL C,JPHL ; DO IT IF DEVICE TYPE < VDU |
|
|
;;CALL C,JPHL ; DO IT IF DEVICE TYPE < VDU |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LD A,(HCB + HCB_CONDEV) ; CURRENT CONSOLE UNIT |
|
|
LD A,(HCB + HCB_CONDEV) ; CURRENT CONSOLE UNIT |
|
|
CP C ; IS CURRENT CONSOLE? |
|
|
CP C ; IS CURRENT CONSOLE? |
|
|
LD A,C ; UNIT INDEX TO ACCUM |
|
|
LD A,C ; UNIT INDEX TO ACCUM |
|
|
@ -2650,7 +2817,8 @@ DPH_INIT: |
|
|
LD H,0 ; ... INTO HL |
|
|
LD H,0 ; ... INTO HL |
|
|
ADD HL,HL ; MULTIPLY |
|
|
ADD HL,HL ; MULTIPLY |
|
|
ADD HL,HL ; ... BY SIZE |
|
|
ADD HL,HL ; ... BY SIZE |
|
|
ADD HL,HL ; ... OF DPH (16) |
|
|
|
|
|
|
|
|
CALL ADDHLA ; ... |
|
|
|
|
|
ADD HL,HL ; ... OF DPH (20) |
|
|
ADD HL,HL ; ... FOR TOTAL SIZE |
|
|
ADD HL,HL ; ... FOR TOTAL SIZE |
|
|
CALL ALLOC ; ALLOCATE THE SPACE |
|
|
CALL ALLOC ; ALLOCATE THE SPACE |
|
|
CALL C,PANIC ; SHOULD NEVER ERROR |
|
|
CALL C,PANIC ; SHOULD NEVER ERROR |
|
|
@ -2707,7 +2875,8 @@ DPH_INIT2: |
|
|
LD (HL),D ; ... DRIVE MAP |
|
|
LD (HL),D ; ... DRIVE MAP |
|
|
INC HL ; AND BUMP TO START OF NEXT ENTRY |
|
|
INC HL ; AND BUMP TO START OF NEXT ENTRY |
|
|
; UPDATE DPH ALLOCATION TOP |
|
|
; UPDATE DPH ALLOCATION TOP |
|
|
LD A,16 ; SIZE OF A DPH ENTRY |
|
|
|
|
|
|
|
|
;LD A,16 ; SIZE OF A DPH ENTRY |
|
|
|
|
|
LD A,20 ; SIZE OF A DPH ENTRY |
|
|
EX DE,HL ; HL := DPH POINTER |
|
|
EX DE,HL ; HL := DPH POINTER |
|
|
CALL ADDHLA ; CALC NEW DPHTOP |
|
|
CALL ADDHLA ; CALC NEW DPHTOP |
|
|
LD (DPHTOP),HL ; SAVE IT |
|
|
LD (DPHTOP),HL ; SAVE IT |
|
|
@ -3011,7 +3180,7 @@ CMD .DB CMDLEN - 2 |
|
|
CMDLEN .EQU $ - CMD |
|
|
CMDLEN .EQU $ - CMD |
|
|
; |
|
|
; |
|
|
FCB_SUB .DB '?' ; DRIVE CODE, 0 = CURRENT DRIVE |
|
|
FCB_SUB .DB '?' ; DRIVE CODE, 0 = CURRENT DRIVE |
|
|
.DB "SUBMIT " ; FILE NAME, 8 CHARS |
|
|
|
|
|
|
|
|
.DB "SUBMIT " ; FILE NAME, 8 CHARS |
|
|
.DB "COM" ; FILE TYPE, 3 CHARS |
|
|
.DB "COM" ; FILE TYPE, 3 CHARS |
|
|
.FILL 36-($-FCB_SUB),0 ; ZERO FILL REMAINDER OF FCB |
|
|
.FILL 36-($-FCB_SUB),0 ; ZERO FILL REMAINDER OF FCB |
|
|
; |
|
|
; |
|
|
@ -3023,7 +3192,7 @@ FCB_PRO .DB '?' ; DRIVE CODE, 0 = CURRENT DRIVE |
|
|
STR_BANNER .DB "CBIOS v", BIOSVER, " [", PLTSTR, "]$" |
|
|
STR_BANNER .DB "CBIOS v", BIOSVER, " [", PLTSTR, "]$" |
|
|
STR_INITRAMDISK .DB "Formatting RAMDISK...$" |
|
|
STR_INITRAMDISK .DB "Formatting RAMDISK...$" |
|
|
STR_LDR2 .DB "\r\n" |
|
|
STR_LDR2 .DB "\r\n" |
|
|
STR_LDR .DB "\r\n $" |
|
|
|
|
|
|
|
|
STR_LDR .DB "\r\n $" |
|
|
STR_DPHINIT .DB "Configuring Drives...$" |
|
|
STR_DPHINIT .DB "Configuring Drives...$" |
|
|
STR_HEAPOVF .DB " *** Insufficient Memory ***$" |
|
|
STR_HEAPOVF .DB " *** Insufficient Memory ***$" |
|
|
STR_INVMED .DB " *** Invalid Device ID ***$" |
|
|
STR_INVMED .DB " *** Invalid Device ID ***$" |
|
|
|