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


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

Changes to XTIDE Universal BIOS:

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

Legend:

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

    r158 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
     
    103104    xor     ax, ax
    104105    ret
    105 
    106 
    107 ;--------------------------------------------------------------------
    108 ; Device_OutputALtoIdeRegisterInDL
    109 ;   Parameters:
    110 ;       AL:     Byte to output
    111 ;       DL:     IDE Register
    112 ;       DS:DI:  Ptr to DPT (in RAMVARS segment)
    113 ;   Returns:
    114 ;       Nothing
    115 ;   Corrupts registers:
    116 ;       BX, DX
    117 ;--------------------------------------------------------------------
    118 ALIGN JUMP_ALIGN
    119 Device_OutputALtoIdeRegisterInDL:
    120     mov     bx, IdeIO_OutputALtoIdeRegisterInDX
    121     jmp     SHORT TranslateRegisterAddressInDLifNecessaryThenJumpToBX
    122 
    123 
    124 ;--------------------------------------------------------------------
    125 ; Device_OutputALtoIdeControlBlockRegisterInDL
    126 ;   Parameters:
    127 ;       AL:     Byte to output
    128 ;       DL:     IDE Control Block Register
    129 ;       DS:DI:  Ptr to DPT (in RAMVARS segment)
    130 ;   Returns:
    131 ;       Nothing
    132 ;   Corrupts registers:
    133 ;       BX, DX
    134 ;--------------------------------------------------------------------
    135 ALIGN JUMP_ALIGN
    136 Device_OutputALtoIdeControlBlockRegisterInDL:
    137     mov     bx, IdeIO_OutputALtoIdeControlBlockRegisterInDX
    138     jmp     SHORT TranslateRegisterAddressInDLifNecessaryThenJumpToBX
    139 
    140 
    141 ;--------------------------------------------------------------------
    142 ; Device_InputToALfromIdeRegisterInDL
    143 ;   Parameters:
    144 ;       DL:     IDE Register
    145 ;       DS:DI:  Ptr to DPT (in RAMVARS segment)
    146 ;   Returns:
    147 ;       AL:     Inputted byte
    148 ;   Corrupts registers:
    149 ;       BX, DX
    150 ;--------------------------------------------------------------------
    151 ALIGN JUMP_ALIGN
    152 Device_InputToALfromIdeRegisterInDL:
    153     mov     bx, IdeIO_InputToALfromIdeRegisterInDX
    154     ; Fall to TranslateRegisterAddressInDLifNecessaryThenJumpToBX
    155 
    156 
    157 ;--------------------------------------------------------------------
    158 ; TranslateRegisterAddressInDLifNecessaryThenJumpToBX
    159 ;   Parameters:
    160 ;       AL:     Byte to output (if output function in BX)
    161 ;       DL:     IDE Register
    162 ;       BX:     I/O function to jump to
    163 ;       DS:DI:  Ptr to DPT (in RAMVARS segment)
    164 ;   Returns:
    165 ;       AL:     Inputted byte (if input function in BX)
    166 ;   Corrupts registers:
    167 ;       BX, DX
    168 ;--------------------------------------------------------------------
    169 TranslateRegisterAddressInDLifNecessaryThenJumpToBX:
    170     test    BYTE [di+DPT.bFlagsHigh], FLGH_DPT_REVERSED_A0_AND_A3
    171     jz      SHORT .JumpToIoFunctionInSI
    172 
    173     ; Exchange address lines A0 and A3 from DL
    174     mov     dh, MASK_A3_AND_A0_ADDRESS_LINES
    175     and     dh, dl                          ; DH = 0, 1, 8 or 9, we can ignore 0 and 9
    176     jz      SHORT .JumpToIoFunctionInSI     ; Jump out since DH is 0
    177     xor     dh, MASK_A3_AND_A0_ADDRESS_LINES
    178     jz      SHORT .JumpToIoFunctionInSI     ; Jump out since DH was 9
    179     and     dl, ~MASK_A3_AND_A0_ADDRESS_LINES
    180     or      dl, dh                          ; Address lines now reversed
    181 
    182 ALIGN JUMP_ALIGN
    183 .JumpToIoFunctionInSI:
    184     push    bx
    185     xor     dh, dh
    186     eMOVZX  bx, BYTE [di+DPT.bIdevarsOffset]; CS:BX now points to IDEVARS
    187     ret
  • 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.