|
|
|
@ -4946,14 +4946,14 @@ EXT_SLICE: |
|
|
|
LD A,E ; RESULTANT MEDIA ID TO ACCUM |
|
|
|
LD (SLICE_MID),A ; INIT VALUE, MAY BE USED LATER |
|
|
|
OR A ; SET FLAGS |
|
|
|
JR Z, EXT_SLICE1A ; BAIL IF NO MEDIA |
|
|
|
JR Z,EXT_SLICE1A ; BAIL IF NO MEDIA |
|
|
|
CP MID_HD ; IS IT A HARD DISK |
|
|
|
JR Z, EXT_SLICE1B ; IS HD, CONTINUE TO PROCESS HD |
|
|
|
JR Z,EXT_SLICE1B ; IS HD, CONTINUE TO PROCESS HD |
|
|
|
; |
|
|
|
; NOT A HARD DISK, CHECK SLICE = 0 |
|
|
|
LD A,(SLICE_SLICE) ; GET THE SLICE |
|
|
|
OR A ; SET FLAGS |
|
|
|
JP NZ, EXT_SLICE5C ; SLICE NOT ZERO - SIGNAL ERROR AND RETURN |
|
|
|
JP NZ,EXT_SLICE5C ; SLICE NOT ZERO - SIGNAL ERROR AND RETURN |
|
|
|
; |
|
|
|
EXT_SLICE1A: |
|
|
|
; RETURN MEDIA ID (NOT HD) WITH SUCCESS |
|
|
|
@ -5035,8 +5035,8 @@ EXT_SLICE3A |
|
|
|
; STARTING SECTOR - THIS IS A COMPRIMISE - OUT OF SEQUENCE PARTITIONS ARE UNLIKELY. |
|
|
|
; |
|
|
|
PUSH BC ; SAVE IT, BEING USED IN PARTITION LOOP |
|
|
|
LD BC, 4 ; IF NOT ALREADY SET - COPY 4 BYTES |
|
|
|
LD DE, SLICE_LBASIZ ; FROM PARTION LBA OFFSET (HL) - TO WORKING LBA SIZE (DE) |
|
|
|
LD BC,4 ; IF NOT ALREADY SET - COPY 4 BYTES |
|
|
|
LD DE,SLICE_LBASIZ ; FROM PARTION LBA OFFSET (HL) - TO WORKING LBA SIZE (DE) |
|
|
|
LDIR ; COPY 4 BYTES |
|
|
|
POP BC ; RESTORE |
|
|
|
; |
|
|
|
@ -5047,10 +5047,10 @@ EXT_SLICE3A |
|
|
|
; |
|
|
|
EXT_SLICE3B: |
|
|
|
; FOUND CP/M (HD1K) PARTITION - RECORD THIS |
|
|
|
LD A, MID_HDNEW ; DISCOVERED HD1K MEDIA |
|
|
|
LD (SLICE_MID), A ; STORE IT |
|
|
|
LD BC, SPS_HD1K ; DISCOVERED HD1K MEDIA |
|
|
|
LD (SLICE_SPS), BC ; STORE IT |
|
|
|
LD A,MID_HDNEW ; DISCOVERED HD1K MEDIA |
|
|
|
LD (SLICE_MID),A ; STORE IT |
|
|
|
LD BC,SPS_HD1K ; DISCOVERED HD1K MEDIA |
|
|
|
LD (SLICE_SPS),BC ; STORE IT |
|
|
|
; |
|
|
|
; CAPTURE THE LBA OFFSET AND SECTOR COUNT FROM PARTITION |
|
|
|
; HL POINTS TO PART LBA OFFSET FIELD OF PART ENTRY |
|
|
|
@ -5061,9 +5061,14 @@ EXT_SLICE3B: |
|
|
|
JR EXT_SLICE4A ; CONTINUE AND COMPUTE THE SLICE |
|
|
|
; |
|
|
|
EXT_SLICE3C: |
|
|
|
; NO PARTITION TABLE FOUND / NO CPM PARTITION FOUND -> HD512 |
|
|
|
LD BC, SPS_HD512 ; WITH HD512 SECTORS PER SLICE |
|
|
|
LD (SLICE_SPS), BC ; STORE IT |
|
|
|
; NO PARTITION TABLE FOUND / NO CPM PARTITION |
|
|
|
LD A,(SLICE_SLICE) ; IF SLICE = 0, WE BOOT THE DISK ITSELF. IGNORE SLICE(S) |
|
|
|
OR A ; SET FLAGS FOR SLICE ARGUMENT, IF SLICE==0 |
|
|
|
JR Z,EXT_SLICE5Z ; BYPASS ALL CALCS / CHECKS - JUST BOOT THE DISK |
|
|
|
|
|
|
|
; BOOT SLICE WITH LEGACY SPS |
|
|
|
LD BC,SPS_HD512 ; WITH HD512 SECTORS PER SLICE |
|
|
|
LD (SLICE_SPS),BC ; STORE IT |
|
|
|
|
|
|
|
; DID WE FIND AN OTHER (NOT CPM) PARTITION |
|
|
|
LD A,(SLICE_FND) ; HAVE WE ALREADY FOUND PROCESSED NON CPM |
|
|
|
@ -5071,16 +5076,16 @@ EXT_SLICE3C: |
|
|
|
JR NZ,EXT_SLICE4A ; MEDIA SIZE IS KNOWN BASED ON START OF PARTITION |
|
|
|
|
|
|
|
; FIND THE PHYSICAL CAPCITY OF THE MEDIA CALL (DIOCAP) |
|
|
|
LD B, BF_DIOCAP ; HBIOS FUNC: TO GET DISK LBA CAPACITY |
|
|
|
LD A, (SLICE_UNIT) |
|
|
|
LD C, A ; PUT DISK UNIT IN C FOR FUNC CALL |
|
|
|
LD B,BF_DIOCAP ; HBIOS FUNC: TO GET DISK LBA CAPACITY |
|
|
|
LD A,(SLICE_UNIT) |
|
|
|
LD C,A ; PUT DISK UNIT IN C FOR FUNC CALL |
|
|
|
CALL DIO_DISPATCH ; DO IT - RETURNS SIZE in DE:HL |
|
|
|
RET NZ ; ABORT ON ERROR |
|
|
|
|
|
|
|
; UPDATE LBA SIZE FROM MEDIA SIZE |
|
|
|
LD (SLICE_LBASIZ), HL ; LOWER ORDER BYTES - HL |
|
|
|
LD (SLICE_LBASIZ),HL ; LOWER ORDER BYTES - HL |
|
|
|
EX DE,HL |
|
|
|
LD (SLICE_LBASIZ+2), HL ; HIGHER ORDER BYTES - DE |
|
|
|
LD (SLICE_LBASIZ+2),HL ; HIGHER ORDER BYTES - DE |
|
|
|
; |
|
|
|
EXT_SLICE4A: |
|
|
|
; COMPUTE THE START SECTOR (RELATIVE) FOR SLICE -> DE:HL |
|
|
|
@ -5089,8 +5094,7 @@ EXT_SLICE4A: |
|
|
|
LD BC,(SLICE_SPS) |
|
|
|
LD A,(SLICE_SLICE) |
|
|
|
OR A ; SLICE NUMBER - SET FLAGS TO CHECK LOOP CTR |
|
|
|
;JR Z,EXT_SLICE5A ; NOTHING TO COUNT |
|
|
|
JR Z,EXT_SLICE6 ; BYPASS CAPACITY CHECK IF SLICE == 0 |
|
|
|
JR Z,EXT_SLICE5A ; NOTHING TO COUNT |
|
|
|
EXT_SLICE4B: |
|
|
|
ADD HL,BC ; ADD ONE SLICE (SPS) TO LOW WORD |
|
|
|
JR NC,EXT_SLICE4C ; CHECK FOR CARRY |
|
|
|
@ -5104,8 +5108,8 @@ EXT_SLICE5A: |
|
|
|
PUSH HL ; SAVE THE SECTOR OFFSET (SPS * SLICE NUMBER) |
|
|
|
PUSH DE |
|
|
|
; |
|
|
|
ADD HL, BC ; ADD SPS, GET REQUIRED CAPCITY (UPPER SECTOR) |
|
|
|
JR NC, EXT_SLICE5B |
|
|
|
ADD HL,BC ; ADD SPS, GET REQUIRED CAPCITY (UPPER SECTOR) |
|
|
|
JR NC,EXT_SLICE5B |
|
|
|
INC DE |
|
|
|
EXT_SLICE5B: |
|
|
|
; DEHL HAS THE REQUIRED NUMBER OF SECTORS (ON MEDIA) FOR THE SLICE |
|
|
|
@ -5141,6 +5145,10 @@ EXT_SLICE5C: |
|
|
|
OR A |
|
|
|
RET |
|
|
|
; |
|
|
|
EXT_SLICE5Z: |
|
|
|
LD HL,0 ; BOOT THE DISK TO LBA = 0 |
|
|
|
LD DE,0 ; |
|
|
|
; |
|
|
|
EXT_SLICE6: |
|
|
|
; FINAL CALC AND RETURN SUCCESS |
|
|
|
; ADD PARTITION OFFSET (START) TO DEHL TO GET ABSOLUTE SLICE OFFSET |
|
|
|
@ -5149,7 +5157,7 @@ EXT_SLICE6: |
|
|
|
EX DE,HL ; FLIP DE INTO HL |
|
|
|
LD BC,(SLICE_LBAOFF+2) ; MSB OF LBA OFFSET |
|
|
|
ADC HL,BC ; ADD MSB |
|
|
|
EX DE, HL ; FLIP BACK DE:HL AS SLICE OFFSET |
|
|
|
EX DE,HL ; FLIP BACK DE:HL AS SLICE OFFSET |
|
|
|
; |
|
|
|
EXT_SLICE6A: |
|
|
|
; SLICE FITS - RETURN CORRECTLY |
|
|
|
|