Changeset 617 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h
- Timestamp:
- Aug 10, 2021, 7:27:30 AM (3 years ago)
- Location:
- trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH4h_HVerify.asm
r568 r617 29 29 ; DL: Translated Drive number 30 30 ; DS:DI: Ptr to DPT (in RAMVARS segment) 31 ; SS:BP: Ptr to I NTPACK31 ; SS:BP: Ptr to IDEPACK 32 32 ; Parameters on INTPACK in SS:BP: 33 33 ; AL: Number of sectors to verify (1...128) … … 46 46 call Prepare_ByValidatingSectorsInALforOldInt13h ; Preserves AX 47 47 mov bx, TIMEOUT_AND_STATUS_TO_WAIT(TIMEOUT_DRQ, FLG_STATUS_DRDY) 48 %ifdef USE_186 49 push Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAHandTransferredSectorsFromCL 50 jmp Idepack_TranslateOldInt13hAddressAndIssueCommandFromAH 51 %else 48 push ax ; Store number of sectors to verify 52 49 call Idepack_TranslateOldInt13hAddressAndIssueCommandFromAH 50 pop cx ; Number of sectors verified if successful 51 jnc SHORT .NoErrors 52 53 ; TODO: For now we assume serial device do not produce verify errors 54 call AH4h_CalculateNumberOfSuccessfullyVerifiedSectors 55 .NoErrors: 53 56 jmp Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAHandTransferredSectorsFromCL 54 %endif 57 58 59 ;-------------------------------------------------------------------- 60 ; Calculates number of succesfully verified sectors. This function works only 61 ; if verify command stopped to an device error (such as bad sector) since IDE 62 ; register contents are not valid unless error. 63 ; 64 ; AH4h_CalculateNumberOfSuccessfullyVerifiedSectors 65 ; Parameters: 66 ; AH: INT 13h error code 67 ; CX: Number of sectors that was meant to we verified 68 ; DS:DI: Ptr to DPT (in RAMVARS segment) 69 ; SS:BP: Ptr to IDEPACK 70 ; Returns with INTPACK in SS:BP: 71 ; CX: Number of sectors succesfully verified 72 ; CF: 1 73 ;-------------------------------------------------------------------- 74 ALIGN JUMP_ALIGN 75 AH4h_CalculateNumberOfSuccessfullyVerifiedSectors: 76 xchg cx, ax ; Store error code to CL 77 call Device_ReadLBAlowRegisterToAL 78 mov ah, [bp+IDEPACK.bLbaLow] 79 sub al, ah ; AL = sector address with verify failure - starting sector address 80 xor ah, ah 81 xchg cx, ax ; Number of successfully verified sectors in CX, error code in AH 82 stc 83 ret -
trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/EBIOS/AH44h_ExtendedVerifySectors.asm
r568 r617 41 41 AH44h_HandlerForExtendedVerifySectors: 42 42 call Prepare_ByLoadingDapToESSIandVerifyingForTransfer 43 push WORD [es:si+DAP.wSectorCount] ; Store for successfull number of sectors transferred 43 44 mov ah, [cs:bx+g_rgbVerifyCommandLookup] 44 45 mov bx, TIMEOUT_AND_STATUS_TO_WAIT(TIMEOUT_DRQ, FLG_STATUS_DRDY) 45 46 call Idepack_ConvertDapToIdepackAndIssueCommandFromAH 47 48 ; Now we need number of succesfully verifed sectors to CX. Since we did not transfer anything, 49 ; we did not have any sector counter like in read and write functions. 50 ; In case of error, drive LBA registers are set to address where the error occurred. We must 51 ; calculate number of succesfully transferred sectors from it. 52 pop cx 53 jnc SHORT .AllSectorsVerifiedSuccessfully 54 55 ; TODO: For now we assume serial device do not produce verify errors 56 call AH4h_CalculateNumberOfSuccessfullyVerifiedSectors 57 58 ALIGN JUMP_ALIGN 59 .AllSectorsVerifiedSuccessfully: 46 60 jmp SHORT AH42h_ReturnFromInt13hAfterStoringErrorCodeFromAHandTransferredSectorsFromCX
Note:
See TracChangeset
for help on using the changeset viewer.