diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 67ac7f38..54a2a0c2 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -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