|
|
|
@ -1247,6 +1247,10 @@ DSK_SELECT: |
|
|
|
LD HL,0 ; ZERO |
|
|
|
LD (SEKLBA),HL ; CLEAR FIRST WORD |
|
|
|
LD (SEKLBA+2),HL ; CLEAR SECOND WORD |
|
|
|
; |
|
|
|
; SET LEGACY SECTORS PER SLICE |
|
|
|
LD HL,16640 ; LEGACY SECTORS PER SLICE |
|
|
|
LD (SPS),HL ; SAVE IT |
|
|
|
; |
|
|
|
; CHECK MBR OF PHYSICAL DISK BEING SELECTED |
|
|
|
; WILL UPDATE MEDID AND LBAOFF IF VALID CP/M PARTITION EXISTS |
|
|
|
@ -1273,7 +1277,7 @@ DSK_SELECT: |
|
|
|
INC HL ; BUMP TO MSB |
|
|
|
LD (HL),D ; SET MSB OF DPB IN DPH |
|
|
|
; |
|
|
|
; ; PLUG LBA OFFSET INTO ACTIVE 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 |
|
|
|
@ -1364,6 +1368,9 @@ DSK_MBR3: |
|
|
|
LD DE,SEKLBA ; LOC TO STORE LBA OFFSET |
|
|
|
LD BC,4 ; 4 BYTES (32 BITS) |
|
|
|
LDIR ; COPY IT |
|
|
|
; IF BOOT FROM PARTITION, USE NEW SECTORS PER SLICE VALUE |
|
|
|
LD HL,16384 ; NEW SECTORS PER SLICE |
|
|
|
LD (SPS),HL ; SAVE IT |
|
|
|
; |
|
|
|
DSK_MBR4: |
|
|
|
; RESTORE BANK |
|
|
|
@ -1371,46 +1378,73 @@ DSK_MBR4: |
|
|
|
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 |
|
|
|
; ADJUST LBA OFFSET BASED ON TARGET SLICE |
|
|
|
LD A,(SLICE) ; GET SLICE, A IS LOOP CNT |
|
|
|
LD HL,(SEKLBA) ; SET DE:HL |
|
|
|
LD DE,(SEKLBA+2) ; ... TO STARTING LBA |
|
|
|
LD BC,(SPS) ; SECTORS PER SLICE |
|
|
|
BOOT6: |
|
|
|
OR A ; SET FLAGS TO CHECK LOOP CNTR |
|
|
|
JR Z,BOOT8 ; DONE IF COUNTER EXHAUSTED |
|
|
|
ADD HL,BC ; ADD ONE SLICE TO LOW WORD |
|
|
|
JR NC,BOOT7 ; CHECK FOR CARRY |
|
|
|
INC DE ; IF SO, BUMP HIGH WORD |
|
|
|
BOOT7: |
|
|
|
DEC A ; DEC LOOP DOWNCOUNTER |
|
|
|
JR BOOT6 ; AND LOOP |
|
|
|
BOOT8: |
|
|
|
LD (LBA),HL ; SAVE NEW LBA, LOW WORD |
|
|
|
LD (LBA+2),DE ; SAVE NEW LBA, HIGH WORD |
|
|
|
; RESAVE IT |
|
|
|
LD (SEKLBA),HL ; LOWORD |
|
|
|
LD (SEKLBA+2),DE ; HIWORD |
|
|
|
; SUCCESSFUL FINISH |
|
|
|
XOR A ; SUCCESS |
|
|
|
RET ; DONE |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; ; 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 |
|
|
|
; |
|
|
|
@ -1654,6 +1688,7 @@ DEFDRIVE .DB 0 ; DEFAULT DRIVE |
|
|
|
CCPBUF .DW 0 ; ADDRESS OF CCP BUF IN BIOS BANK |
|
|
|
MEDID .DB 0 ; TEMP STORAGE FOR MEDIA ID |
|
|
|
SLICE .DB 0 ; CURRENT SLICE |
|
|
|
SPS .DW 0 ; SECTORS PER SLICE |
|
|
|
; |
|
|
|
#IFDEF PLTWBW |
|
|
|
BNKBIOS .DB 0 ; BIOS BANK ID |
|
|
|
|