Changeset 473 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeCommand.asm
- Timestamp:
- Oct 10, 2012, 6:22:23 PM (13 years ago)
- google:author:
- aitotat@gmail.com
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeCommand.asm
r445 r473 56 56 ; Parameters: 57 57 ; BH: Drive Select byte for Drive and Head Select Register 58 ; DX: Autodetected port for XT-CF 58 59 ; DS: Segment to RAMVARS 59 60 ; ES:SI: Ptr to buffer to receive 512-byte IDE Information … … 70 71 eMOVZX ax, bh 71 72 mov [di+DPT.wFlags], ax 72 mov [di+DPT.bIdevarsOffset], bp 73 call CreateDPT_StoreIdevarsOffsetAndBasePortFromCSBPtoDPTinDSDI 74 call IdeDPT_StoreDeviceTypeToDPTinDSDIfromIdevarsInCSBP 73 75 mov BYTE [di+DPT_ATA.bBlockSize], 1 ; Block = 1 sector 74 call IdeDPT_StoreDeviceTypeFromIdevarsInCSBPtoDPTinDSDI75 76 76 77 ; Wait until drive motors have reached full speed 77 cmp bp, BYTE ROMVARS.ideVars0 78 cmp bp, BYTE ROMVARS.ideVars0 ; First controller? 78 79 jne SHORT .SkipLongWaitSinceDriveIsNotPrimaryMaster 79 test bh, FLG_DRVNHEAD_DRV 80 test bh, FLG_DRVNHEAD_DRV ; Wait already done for Master 80 81 jnz SHORT .SkipLongWaitSinceDriveIsNotPrimaryMaster 81 82 call AHDh_WaitUntilDriveMotorHasReachedFullSpeed … … 87 88 88 89 %ifdef MODULE_8BIT_IDE 89 ; Enable 8-bit PIO mode for Lo-tech XT-CF 90 ; We set XT-CF to 8-bit PIO mode for Identify Device command. 91 ; Correct XT-CF mode is later set on AH=09h (after all drives are detected). 92 call AccessDPT_IsThisDeviceXTCF 93 jne SHORT .SkipXTCFmodeChange 94 95 xor al, al ; XTCF_8BIT_PIO_MODE 90 96 push si 91 call AH 9h_Enable8bitPioModeForXTCF97 call AH1Eh_ChangeXTCFmodeBasedOnControlRegisterInAL 92 98 pop si 93 99 jc SHORT .FailedToSet8bitMode 94 %endif 100 .SkipXTCFmodeChange: 101 %endif ; MODULE_8BIT_IDE 95 102 96 103 ; Prepare to output Identify Device command … … 170 177 cmp bl, FLG_STATUS_DRQ ; Data transfer started? 171 178 jne SHORT .WaitUntilNonTransferCommandCompletes 172 %ifdef MODULE_JRIDE 173 cmp BYTE [di+DPT_ATA.bDevice], DEVICE_8BIT_JRIDE_ISA 174 je SHORT JrIdeTransfer_StartWithCommandInAL 179 %ifdef MODULE_8BIT_IDE 180 cmp BYTE [di+DPT_ATA.bDevice], DEVICE_8BIT_XTCF_DMA 181 je SHORT 0 ; IdeDma_StartTransferWithCommandInAL 182 ja SHORT JrIdeTransfer_StartWithCommandInAL ; DEVICE_8BIT_XTCF_MEMMAP or DEVICE_8BIT_JRIDE_ISA 175 183 %endif 176 184 jmp IdeTransfer_StartWithCommandInAL … … 205 213 ; We use different timeout value when detecting drives. 206 214 ; This prevents unnecessary long delays when drive is not present. 207 mov bx, TIMEOUT_AND_STATUS_TO_WAIT(TIMEOUT_DRDY, FLG_STATUS_DRDY)215 mov cx, TIMEOUT_AND_STATUS_TO_WAIT(TIMEOUT_DRDY, FLG_STATUS_DRDY) 208 216 cmp WORD [RAMVARS.wDrvDetectSignature], RAMVARS_DRV_DETECT_SIGNATURE 209 eCMOVE bh, TIMEOUT_SELECT_DRIVE_DURING_DRIVE_DETECTION217 eCMOVE ch, TIMEOUT_SELECT_DRIVE_DURING_DRIVE_DETECTION 210 218 211 219 ; Select Master or Slave Drive 212 220 mov al, [bp+IDEPACK.bDrvAndHead] 213 221 OUTPUT_AL_TO_IDE_REGISTER DRIVE_AND_HEAD_SELECT_REGISTER 222 mov bx, cx 214 223 call IdeWait_PollStatusFlagInBLwithTimeoutInBH 215 224 … … 248 257 249 258 mov al, ch 250 JUMP_TO_OUTPUT_AL_TO_IDE_REGISTER LBA_HIGH_REGISTER 259 OUTPUT_AL_TO_IDE_REGISTER LBA_HIGH_REGISTER 260 ret
Note:
See TracChangeset
for help on using the changeset viewer.