Changeset 400 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeWait.asm
- Timestamp:
- Apr 20, 2012, 2:30:16 PM (13 years ago)
- google:author:
- aitotat@gmail.com
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeWait.asm
r398 r400 32 32 ; AL, BX, CX, DX 33 33 ;-------------------------------------------------------------------- 34 I DEDEVICE%+Wait_IRQorDRQ:34 IdeWait_IRQorDRQ: 35 35 mov bx, TIMEOUT_AND_STATUS_TO_WAIT(TIMEOUT_DRQ, FLG_STATUS_DRQ) 36 %ifdef ASSEMBLE_SHARED_IDE_DEVICE_FUNCTIONS ; JR-IDE/ISA does not support IRQ 36 37 %ifdef MODULE_IRQ 37 38 test BYTE [bp+IDEPACK.bDeviceControl], FLG_DEVCONTROL_nIEN 38 jnz SHORT I DEDEVICE%+Wait_PollStatusFlagInBLwithTimeoutInBH ; Interrupt disabled39 jnz SHORT IdeWait_PollStatusFlagInBLwithTimeoutInBH ; Interrupt disabled 39 40 %endif 40 41 ; Fall to IdeWait_IRQorStatusFlagInBLwithTimeoutInBH … … 53 54 ; AL, BX, CX, DX 54 55 ;-------------------------------------------------------------------- 55 IDEDEVICE%+Wait_IRQorStatusFlagInBLwithTimeoutInBH: 56 %ifdef ASSEMBLE_SHARED_IDE_DEVICE_FUNCTIONS ; JR-IDE/ISA does not support IRQ 57 %ifdef MODULE_IRQ 58 call IdeIrq_WaitForIRQ 59 %endif 56 IdeWait_IRQorStatusFlagInBLwithTimeoutInBH: 57 %ifdef MODULE_IRQ 58 call IdeIrq_WaitForIRQ 60 59 %endif 61 60 ; Always fall to IdeWait_PollStatusFlagInBLwithTimeoutInBH for error processing … … 74 73 ; AL, BX, CX, DX 75 74 ;-------------------------------------------------------------------- 76 I DEDEVICE%+Wait_PollStatusFlagInBLwithTimeoutInBH:75 IdeWait_PollStatusFlagInBLwithTimeoutInBH: 77 76 mov ah, bl 78 77 mov cl, bh 79 78 call Timer_InitializeTimeoutWithTicksInCL 80 79 and ah, ~FLG_STATUS_BSY 81 jz SHORT IDEDEVICE%+PollBsyOnly80 jz SHORT PollBsyOnly 82 81 ; Fall to PollBsyAndFlgInAH 83 82 … … 94 93 ; AL, BX, CX, DX 95 94 ;-------------------------------------------------------------------- 96 I DEDEVICE%+PollBsyAndFlgInAH:97 INPUT_TO_AL_FROM_IDE_REGISTER STATUS_REGISTER_in ; Discard contents forfirst read98 ALIGN JUMP_ALIGN 95 IdePollBsyAndFlgInAH: 96 call IdeIO_InputStatusRegisterToAL ; Discard contents of first read 97 99 98 .PollLoop: 100 INPUT_TO_AL_FROM_IDE_REGISTER STATUS_REGISTER_in99 call IdeIO_InputStatusRegisterToAL 101 100 test al, FLG_STATUS_BSY ; Controller busy? 102 101 jnz SHORT .UpdateTimeout ; If so, jump to timeout update 103 102 test al, ah ; Test secondary flag 104 jnz SHORT I DEDEVICE%+Error_GetBiosErrorCodeToAHfromPolledStatusRegisterInAL103 jnz SHORT IdeError_GetBiosErrorCodeToAHfromPolledStatusRegisterInAL 105 104 .UpdateTimeout: 106 105 call Timer_SetCFifTimeout 107 106 jnc SHORT .PollLoop ; Loop if time left 108 call I DEDEVICE%+Error_GetBiosErrorCodeToAHfromPolledStatusRegisterInAL107 call IdeError_GetBiosErrorCodeToAHfromPolledStatusRegisterInAL 109 108 jc SHORT .ReturnErrorCodeInAH 110 109 mov ah, RET_HD_TIMEOUT ; Expected bit never got set … … 125 124 ; AL, BX, CX, DX 126 125 ;-------------------------------------------------------------------- 127 IDEDEVICE%+PollBsyOnly:128 INPUT_TO_AL_FROM_IDE_REGISTER STATUS_REGISTER_in ; Discard contents forfirst read129 ALIGN JUMP_ALIGN 126 PollBsyOnly: 127 call IdeIO_InputStatusRegisterToAL ; Discard contents of first read 128 130 129 .PollLoop: 131 INPUT_TO_AL_FROM_IDE_REGISTER STATUS_REGISTER_in130 call IdeIO_InputStatusRegisterToAL 132 131 test al, FLG_STATUS_BSY ; Controller busy? 133 jz SHORT I DEDEVICE%+Error_GetBiosErrorCodeToAHfromPolledStatusRegisterInAL132 jz SHORT IdeError_GetBiosErrorCodeToAHfromPolledStatusRegisterInAL 134 133 call Timer_SetCFifTimeout ; Update timeout counter 135 134 jnc SHORT .PollLoop ; Loop if time left (sets CF on timeout) 136 jmp SHORT I DEDEVICE%+Error_GetBiosErrorCodeToAHfromPolledStatusRegisterInAL135 jmp SHORT IdeError_GetBiosErrorCodeToAHfromPolledStatusRegisterInAL
Note:
See TracChangeset
for help on using the changeset viewer.