Changeset 238 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeWait.asm
- Timestamp:
- Feb 5, 2012, 12:59:20 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
r160 r238 16 16 ; AL, BX, CX, DX 17 17 ;-------------------------------------------------------------------- 18 I deWait_IRQorDRQ:18 IDEDEVICE%+Wait_IRQorDRQ: 19 19 mov bx, TIMEOUT_AND_STATUS_TO_WAIT(TIMEOUT_DRQ, FLG_STATUS_DRQ) 20 %ifdef ASSEMBLE_SHARED_IDE_DEVICE_FUNCTIONS ; JR-IDE/ISA does not support IRQ 20 21 test BYTE [bp+IDEPACK.bDeviceControl], FLG_DEVCONTROL_nIEN 21 jnz SHORT IdeWait_PollStatusFlagInBLwithTimeoutInBH ; Interrupt disabled 22 jnz SHORT IDEDEVICE%+Wait_PollStatusFlagInBLwithTimeoutInBH ; Interrupt disabled 23 %endif 22 24 ; Fall to IdeWait_IRQorStatusFlagInBLwithTimeoutInBH 23 25 … … 35 37 ; AL, BX, CX, DX 36 38 ;-------------------------------------------------------------------- 37 IdeWait_IRQorStatusFlagInBLwithTimeoutInBH: 39 IDEDEVICE%+Wait_IRQorStatusFlagInBLwithTimeoutInBH: 40 %ifdef ASSEMBLE_SHARED_IDE_DEVICE_FUNCTIONS ; JR-IDE/ISA does not support IRQ 38 41 call IdeIrq_WaitForIRQ 42 %endif 39 43 ; Always fall to IdeWait_PollStatusFlagInBLwithTimeoutInBH for error processing 40 44 … … 52 56 ; AL, BX, CX, DX 53 57 ;-------------------------------------------------------------------- 54 I deWait_PollStatusFlagInBLwithTimeoutInBH:58 IDEDEVICE%+Wait_PollStatusFlagInBLwithTimeoutInBH: 55 59 mov ah, bl 56 60 mov cl, bh 57 61 call Timer_InitializeTimeoutWithTicksInCL 58 62 and ah, ~FLG_STATUS_BSY 59 jz SHORT PollBsyOnly63 jz SHORT IDEDEVICE%+PollBsyOnly 60 64 ; Fall to PollBsyAndFlgInAH 61 65 … … 72 76 ; AL, BX, CX, DX 73 77 ;-------------------------------------------------------------------- 78 %ifdef ASSEMBLE_SHARED_IDE_DEVICE_FUNCTIONS 74 79 PollBsyAndFlgInAH: 75 call ReadIdeStatusRegisterToAL; Discard contents for first read80 call IDEDEVICE%+ReadIdeStatusRegisterToAL; Discard contents for first read 76 81 ALIGN JUMP_ALIGN 77 82 .PollLoop: 78 call ReadIdeStatusRegisterToAL83 call IDEDEVICE%+ReadIdeStatusRegisterToAL 79 84 test al, FLG_STATUS_BSY ; Controller busy? 80 85 jnz SHORT .UpdateTimeout ; If so, jump to timeout update 81 86 test al, ah ; Test secondary flag 82 jnz SHORT I deError_GetBiosErrorCodeToAHfromPolledStatusRegisterInAL87 jnz SHORT IDEDEVICE%+Error_GetBiosErrorCodeToAHfromPolledStatusRegisterInAL 83 88 .UpdateTimeout: 84 89 call Timer_SetCFifTimeout 85 90 jnc SHORT .PollLoop ; Loop if time left 86 call I deError_GetBiosErrorCodeToAHfromPolledStatusRegisterInAL91 call IDEDEVICE%+Error_GetBiosErrorCodeToAHfromPolledStatusRegisterInAL 87 92 jc SHORT .ReturnErrorCodeInAH 88 93 mov ah, RET_HD_TIMEOUT ; Expected bit never got set … … 90 95 .ReturnErrorCodeInAH: 91 96 ret 97 %endif 92 98 93 99 … … 103 109 ; AL, BX, CX, DX 104 110 ;-------------------------------------------------------------------- 105 PollBsyOnly:106 call ReadIdeStatusRegisterToAL; Discard contents for first read111 IDEDEVICE%+PollBsyOnly: 112 call IDEDEVICE%+ReadIdeStatusRegisterToAL; Discard contents for first read 107 113 ALIGN JUMP_ALIGN 108 114 .PollLoop: 109 call ReadIdeStatusRegisterToAL115 call IDEDEVICE%+ReadIdeStatusRegisterToAL 110 116 test al, FLG_STATUS_BSY ; Controller busy? 111 jz SHORT I deError_GetBiosErrorCodeToAHfromPolledStatusRegisterInAL117 jz SHORT IDEDEVICE%+Error_GetBiosErrorCodeToAHfromPolledStatusRegisterInAL 112 118 call Timer_SetCFifTimeout ; Update timeout counter 113 119 jnc SHORT .PollLoop ; Loop if time left (sets CF on timeout) 114 jmp SHORT I deError_GetBiosErrorCodeToAHfromPolledStatusRegisterInAL120 jmp SHORT IDEDEVICE%+Error_GetBiosErrorCodeToAHfromPolledStatusRegisterInAL 115 121 116 122 … … 125 131 ;-------------------------------------------------------------------- 126 132 ALIGN JUMP_ALIGN 127 ReadIdeStatusRegisterToAL: 128 mov dl, STATUS_REGISTER_in 129 jmp IdeIO_InputToALfromIdeRegisterInDL 133 IDEDEVICE%+ReadIdeStatusRegisterToAL: 134 JUMP_TO_INPUT_TO_AL_FROM_IDE_REGISTER STATUS_REGISTER_in
Note:
See TracChangeset
for help on using the changeset viewer.