Changeset 160 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeIO.asm
- Timestamp:
- May 4, 2011, 5:49:22 PM (14 years ago)
- google:author:
- aitotat
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeIO.asm
r150 r160 6 6 7 7 ;-------------------------------------------------------------------- 8 ; IdeIO_OutputALtoIdeRegisterInD X8 ; IdeIO_OutputALtoIdeRegisterInDL 9 9 ; Parameters: 10 10 ; AL: Byte to output 11 ; D X: IDE Register12 ; CS:BX: Ptr to IDEVARS11 ; DL: IDE Register 12 ; DS:DI: Ptr to DPT (in RAMVARS segment) 13 13 ; Returns: 14 14 ; Nothing 15 15 ; Corrupts registers: 16 ; DX16 ; BX, DX 17 17 ;-------------------------------------------------------------------- 18 18 ALIGN JUMP_ALIGN 19 IdeIO_OutputALtoIdeRegisterInDX: 20 add dx, [cs:bx+IDEVARS.wPort] 19 IdeIO_OutputALtoIdeRegisterInDL: 20 mov bx, IDEVARS.wPort 21 call GetPortToDXandTranslateA0andA3ifNecessary 21 22 out dx, al 22 23 ret … … 24 25 25 26 ;-------------------------------------------------------------------- 26 ; IdeIO_OutputALtoIdeControlBlockRegisterInD X27 ; IdeIO_OutputALtoIdeControlBlockRegisterInDL 27 28 ; Parameters: 28 29 ; AL: Byte to output 29 ; D X: IDE Control Block Register30 ; CS:BX: Ptr to IDEVARS30 ; DL: IDE Control Block Register 31 ; DS:DI: Ptr to DPT (in RAMVARS segment) 31 32 ; Returns: 32 33 ; Nothing 33 34 ; Corrupts registers: 34 ; DX35 ; BX, DX 35 36 ;-------------------------------------------------------------------- 36 37 ALIGN JUMP_ALIGN 37 IdeIO_OutputALtoIdeControlBlockRegisterInDX: 38 add dx, [cs:bx+IDEVARS.wPortCtrl] 38 IdeIO_OutputALtoIdeControlBlockRegisterInDL: 39 mov bx, IDEVARS.wPortCtrl 40 call GetPortToDXandTranslateA0andA3ifNecessary 39 41 out dx, al 40 42 ret … … 42 44 43 45 ;-------------------------------------------------------------------- 44 ; IdeIO_InputToALfromIdeRegisterInD X46 ; IdeIO_InputToALfromIdeRegisterInDL 45 47 ; Parameters: 46 ; D X: IDE Register47 ; CS:BX: Ptr to IDEVARS48 ; DL: IDE Register 49 ; DS:DI: Ptr to DPT (in RAMVARS segment) 48 50 ; Returns: 49 51 ; AL: Inputted byte 50 52 ; Corrupts registers: 51 ; DX53 ; BX, DX 52 54 ;-------------------------------------------------------------------- 53 55 ALIGN JUMP_ALIGN 54 IdeIO_InputToALfromIdeRegisterInDX: 55 add dx, [cs:bx+IDEVARS.wPort] 56 IdeIO_InputToALfromIdeRegisterInDL: 57 mov bx, IDEVARS.wPort 58 call GetPortToDXandTranslateA0andA3ifNecessary 56 59 in al, dx 57 60 ret 61 62 63 ;-------------------------------------------------------------------- 64 ; GetPortToDXandTranslateA0andA3ifNecessary 65 ; Parameters: 66 ; BX: Offset to port in IDEVARS (IDEVARS.wPort or IDEVARS.wPortCtrl) 67 ; DL: IDE Register 68 ; DS:DI: Ptr to DPT (in RAMVARS segment) 69 ; Returns: 70 ; DX: Source/Destination Port 71 ; Corrupts registers: 72 ; BX 73 ;-------------------------------------------------------------------- 74 ALIGN JUMP_ALIGN 75 GetPortToDXandTranslateA0andA3ifNecessary: 76 xor dh, dh ; DX now has IDE register offset 77 add bl, [di+DPT.bIdevarsOffset] ; CS:BX now points port address 78 add dx, [cs:bx] 79 test BYTE [di+DPT.bFlagsHigh], FLGH_DPT_REVERSED_A0_AND_A3 80 jz SHORT .ReturnPortInDX 81 82 ; Exchange address lines A0 and A3 from DL 83 mov bl, dl 84 mov bh, MASK_A3_AND_A0_ADDRESS_LINES 85 and bh, bl ; BH = 0, 1, 8 or 9, we can ignore 0 and 9 86 jz SHORT .ReturnPortInDX ; Jump out since DH is 0 87 xor bh, MASK_A3_AND_A0_ADDRESS_LINES 88 jz SHORT .ReturnPortInDX ; Jump out since DH was 9 89 and dl, ~MASK_A3_AND_A0_ADDRESS_LINES 90 or dl, bh ; Address lines now reversed 91 .ReturnPortInDX: 92 ret
Note:
See TracChangeset
for help on using the changeset viewer.