Changeset 160 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS/Src/Device/IDE


Ignore:
Timestamp:
May 4, 2011, 5:49:22 PM (13 years ago)
Author:
aitotat
google:author:
aitotat
Message:

Changes to XTIDE Universal BIOS:

  • Support for XTIDE mod now works.
Location:
trunk/XTIDE_Universal_BIOS/Src/Device/IDE
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeCommand.asm

    r158 r160  
    2020    or      al, FLG_DEVCONTROL_SRST | FLG_DEVCONTROL_nIEN   ; Set Reset bit
    2121    mov     dl, DEVICE_CONTROL_REGISTER_out
    22     call    Device_OutputALtoIdeControlBlockRegisterInDL
     22    call    IdeIO_OutputALtoIdeControlBlockRegisterInDL
    2323    mov     ax, HSR0_RESET_WAIT_US
    2424    call    Timer_DelayMicrosecondsFromAX
     
    2929    and     al, ~FLG_DEVCONTROL_SRST                        ; Clear reset bit
    3030    mov     dl, DEVICE_CONTROL_REGISTER_out
    31     call    Device_OutputALtoIdeControlBlockRegisterInDL
     31    call    IdeIO_OutputALtoIdeControlBlockRegisterInDL
    3232    mov     ax, HSR1_RESET_WAIT_US
    3333    call    Timer_DelayMicrosecondsFromAX
     
    5555    call    FindDPT_ForNewDriveToDSDI
    5656    eMOVZX  ax, bh
    57     cmp     BYTE [cs:bp+IDEVARS.bDevice], DEVICE_XTIDE_WITH_REVERSED_A3_AND_A0
    58     eCMOVE  ah, FLGH_DPT_REVERSED_A0_AND_A3
    5957    mov     [di+DPT.wFlags], ax
    6058    mov     [di+DPT.bIdevarsOffset], bp
    6159    mov     BYTE [di+DPT_ATA.bSetBlock], 1  ; Block = 1 sector
     60    call    IdeDPT_StoreReversedAddressLinesFlagIfNecessary
    6261
    6362    ; Wait until drive motors have reached max speed
     
    121120.DoNotSetInterruptInServiceFlag:
    122121    mov     dl, DEVICE_CONTROL_REGISTER_out
    123     call    Device_OutputALtoIdeControlBlockRegisterInDL
     122    call    IdeIO_OutputALtoIdeControlBlockRegisterInDL
    124123
    125124    ; Output Feature Number
    126125    mov     dl, FEATURES_REGISTER_out
    127126    mov     al, [bp+IDEPACK.bFeatures]
    128     call    Device_OutputALtoIdeRegisterInDL
     127    call    IdeIO_OutputALtoIdeRegisterInDL
    129128
    130129    ; Output Sector Address High (only used by LBA48)
     
    141140    mov     dl, COMMAND_REGISTER_out
    142141    mov     al, [bp+IDEPACK.bCommand]
    143     call    Device_OutputALtoIdeRegisterInDL
     142    call    IdeIO_OutputALtoIdeRegisterInDL
    144143
    145144    ; Wait until command completed
     
    184183    mov     dl, DRIVE_AND_HEAD_SELECT_REGISTER
    185184    mov     al, [bp+IDEPACK.bDrvAndHead]
    186     call    Device_OutputALtoIdeRegisterInDL
     185    call    IdeIO_OutputALtoIdeRegisterInDL
    187186    mov     bx, TIMEOUT_AND_STATUS_TO_WAIT(TIMEOUT_DRDY, FLG_STATUS_DRDY)
    188187    cmp     BYTE [bp+IDEPACK.bCommand], COMMAND_IDENTIFY_DEVICE
     
    207206OutputSectorCountAndAddress:
    208207    mov     dl, SECTOR_COUNT_REGISTER
    209     call    Device_OutputALtoIdeRegisterInDL
     208    call    IdeIO_OutputALtoIdeRegisterInDL
    210209
    211210    mov     al, ah
    212211    mov     dl, LBA_LOW_REGISTER
    213     call    Device_OutputALtoIdeRegisterInDL
     212    call    IdeIO_OutputALtoIdeRegisterInDL
    214213
    215214    mov     al, cl
    216215    mov     dl, LBA_MIDDLE_REGISTER
    217     call    Device_OutputALtoIdeRegisterInDL
     216    call    IdeIO_OutputALtoIdeRegisterInDL
    218217
    219218    mov     al, ch
    220219    mov     dl, LBA_HIGH_REGISTER
    221     jmp     Device_OutputALtoIdeRegisterInDL
     220    jmp     IdeIO_OutputALtoIdeRegisterInDL
  • trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeDPT.asm

    r150 r160  
    1010;       DS:DI:  Ptr to Disk Parameter Table
    1111;       ES:SI:  Ptr to 512-byte ATA information read from the drive
     12;       CS:BP:  Ptr to IDEVARS for the controller
    1213;   Returns:
    1314;       Nothing
     
    2324;       DS:DI:  Ptr to Disk Parameter Table
    2425;       ES:SI:  Ptr to 512-byte ATA information read from the drive
     26;       CS:BP:  Ptr to IDEVARS for the controller
    2527;   Returns:
    2628;       Nothing
     
    3234    mov     ah, [es:si+ATA1.bBlckSize]      ; Max block size in sectors
    3335    mov     [di+DPT_ATA.wSetAndMaxBlock], ax
    34     ; Fall to .EndDPT
     36    ; Fall to IdeDPT_StoreReversedAddressLinesFlagIfNecessary
    3537
     38;--------------------------------------------------------------------
     39; IdeDPT_StoreReversedAddressLinesFlagIfNecessary
     40;   Parameters:
     41;       DS:DI:  Ptr to Disk Parameter Table
     42;       CS:BP:  Ptr to IDEVARS for the controller
     43;   Returns:
     44;       Nothing
     45;   Corrupts registers:
     46;       Nothing
     47;--------------------------------------------------------------------
     48IdeDPT_StoreReversedAddressLinesFlagIfNecessary:
     49    cmp     BYTE [cs:bp+IDEVARS.bDevice], DEVICE_XTIDE_WITH_REVERSED_A3_AND_A0
     50    jne     SHORT .EndDPT
     51    or      BYTE [di+DPT.bFlagsHigh], FLGH_DPT_REVERSED_A0_AND_A3
    3652
    3753.EndDPT:
  • trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeError.asm

    r150 r160  
    2121    mov     ah, al          ; IDE Status Register to AH
    2222    mov     dl, ERROR_REGISTER_in
    23     call    Device_InputToALfromIdeRegisterInDL
     23    call    IdeIO_InputToALfromIdeRegisterInDL
    2424    xchg    al, ah          ; Status Register now in AL, Error Register now in AH
    2525
  • trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeIO.asm

    r150 r160  
    66
    77;--------------------------------------------------------------------
    8 ; IdeIO_OutputALtoIdeRegisterInDX
     8; IdeIO_OutputALtoIdeRegisterInDL
    99;   Parameters:
    1010;       AL:     Byte to output
    11 ;       DX:     IDE Register
    12 ;       CS:BX:  Ptr to IDEVARS
     11;       DL:     IDE Register
     12;       DS:DI:  Ptr to DPT (in RAMVARS segment)
    1313;   Returns:
    1414;       Nothing
    1515;   Corrupts registers:
    16 ;       DX
     16;       BX, DX
    1717;--------------------------------------------------------------------
    1818ALIGN JUMP_ALIGN
    19 IdeIO_OutputALtoIdeRegisterInDX:
    20     add     dx, [cs:bx+IDEVARS.wPort]
     19IdeIO_OutputALtoIdeRegisterInDL:
     20    mov     bx, IDEVARS.wPort
     21    call    GetPortToDXandTranslateA0andA3ifNecessary
    2122    out     dx, al
    2223    ret
     
    2425
    2526;--------------------------------------------------------------------
    26 ; IdeIO_OutputALtoIdeControlBlockRegisterInDX
     27; IdeIO_OutputALtoIdeControlBlockRegisterInDL
    2728;   Parameters:
    2829;       AL:     Byte to output
    29 ;       DX:     IDE Control Block Register
    30 ;       CS:BX:  Ptr to IDEVARS
     30;       DL:     IDE Control Block Register
     31;       DS:DI:  Ptr to DPT (in RAMVARS segment)
    3132;   Returns:
    3233;       Nothing
    3334;   Corrupts registers:
    34 ;       DX
     35;       BX, DX
    3536;--------------------------------------------------------------------
    3637ALIGN JUMP_ALIGN
    37 IdeIO_OutputALtoIdeControlBlockRegisterInDX:
    38     add     dx, [cs:bx+IDEVARS.wPortCtrl]
     38IdeIO_OutputALtoIdeControlBlockRegisterInDL:
     39    mov     bx, IDEVARS.wPortCtrl
     40    call    GetPortToDXandTranslateA0andA3ifNecessary
    3941    out     dx, al
    4042    ret
     
    4244
    4345;--------------------------------------------------------------------
    44 ; IdeIO_InputToALfromIdeRegisterInDX
     46; IdeIO_InputToALfromIdeRegisterInDL
    4547;   Parameters:
    46 ;       DX:     IDE Register
    47 ;       CS:BX:  Ptr to IDEVARS
     48;       DL:     IDE Register
     49;       DS:DI:  Ptr to DPT (in RAMVARS segment)
    4850;   Returns:
    4951;       AL:     Inputted byte
    5052;   Corrupts registers:
    51 ;       DX
     53;       BX, DX
    5254;--------------------------------------------------------------------
    5355ALIGN JUMP_ALIGN
    54 IdeIO_InputToALfromIdeRegisterInDX:
    55     add     dx, [cs:bx+IDEVARS.wPort]
     56IdeIO_InputToALfromIdeRegisterInDL:
     57    mov     bx, IDEVARS.wPort
     58    call    GetPortToDXandTranslateA0andA3ifNecessary
    5659    in      al, dx
    5760    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;--------------------------------------------------------------------
     74ALIGN JUMP_ALIGN
     75GetPortToDXandTranslateA0andA3ifNecessary:
     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
  • trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeIrq.asm

    r158 r160  
    111111    call    FindDPT_ToDSDIforInterruptInService
    112112    mov     dl, STATUS_REGISTER_in
    113     call    Device_InputToALfromIdeRegisterInDL
     113    call    IdeIO_InputToALfromIdeRegisterInDL
    114114
    115115    ; Clear Interrupt In-Service Flag from DPT
  • trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeWait.asm

    r155 r160  
    127127ReadIdeStatusRegisterToAL:
    128128    mov     dl, STATUS_REGISTER_in
    129     jmp     Device_InputToALfromIdeRegisterInDL
     129    jmp     IdeIO_InputToALfromIdeRegisterInDL
Note: See TracChangeset for help on using the changeset viewer.