Ignore:
Timestamp:
Apr 29, 2011, 7:04:13 PM (13 years ago)
Author:
aitotat
google:author:
aitotat
Message:

Changes to XTIDE Universal BIOS:

  • Redesigned Disk Parameter Tables.
  • Code generalizations for supporting non-IDE devices in the future.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AHDh_HReset.asm

    r148 r150  
    1212;       DL:     Translated Drive number
    1313;       DS:DI:  Ptr to DPT (in RAMVARS segment)
    14 ;       SS:BP:  Ptr to INTPACK
    15 ;   Returns with INTPACK in SS:BP:
     14;       SS:BP:  Ptr to IDEPACK
     15;   Returns with INTPACK:
    1616;       AH:     Int 13h return status
    1717;       CF:     0 if succesfull, 1 if error
     
    3535;       DL:     Drive number
    3636;       DS:     RAMVARS segment
     37;       SS:BP:  Ptr to IDEPACK
    3738;   Returns:
    3839;       AH:     Int 13h return status
    3940;       CF:     0 if succesfull, 1 if error
    4041;   Corrupts registers:
    41 ;       AL, CX, DI
     42;       AL, CX, SI, DI
    4243;--------------------------------------------------------------------
    4344ALIGN JUMP_ALIGN
     
    4849    call    FindDPT_ForDriveNumber      ; DS:DI now points to DPT
    4950    call    Interrupts_UnmaskInterruptControllerForDriveInDSDI
    50     call    AHDh_ResetMasterAndSlave
     51    call    Device_ResetMasterAndSlaveController
    5152    ;jc     SHORT .ReturnError          ; CF would be set if slave drive present without master
    5253                                        ; (error register has special values after reset)
    5354
    5455    ; Initialize Master and Slave drives
    55     mov     dx, [RAMVARS.wIdeBase]      ; Load base port address
    56     call    AHDh_InitializeMasterAndSlave
     56    eMOVZX  bx, BYTE [di+DPT.bIdevarsOffset]
     57    mov     dx, [cs:bx+IDEVARS.wPort]
     58    call    InitializeMasterAndSlaveDriveFromPortInDX
    5759
    5860    pop     bx
     
    6264
    6365;--------------------------------------------------------------------
    64 ; Resets Master and Slave drives at wanted port.
    65 ; Both IDE drives will be reset. It is not possible to reset
    66 ; Master or Slave only.
    67 ;
    68 ; AHDh_ResetMasterAndSlave
    69 ;   Parameters:
    70 ;       DS:DI:  Ptr to DPT for Master or Slave drive
    71 ;   Returns:
    72 ;       CF:     0 if reset succesfull
    73 ;               1 if any error
    74 ;   Corrupts registers:
    75 ;       AX, BX, CX, DX
    76 ;--------------------------------------------------------------------
    77 ALIGN JUMP_ALIGN
    78 AHDh_ResetMasterAndSlave:
    79     ; Reset controller
    80     ; HSR0: Set_SRST
    81     mov     al, [di+DPT.bDrvCtrl]       ; Load value for ACR
    82     or      al, FLG_IDE_CTRL_SRST       ; Set Reset bit
    83     call    HDrvSel_OutputDeviceControlByte
    84     mov     ax, 5                       ; Delay at least 5us
    85     call    HTimer_DelayMicrosecondsFromAX
    86 
    87     ; HSR1: Clear_wait
    88     mov     al, [di+DPT.bDrvCtrl]       ; Load value for ACR
    89     out     dx, al                      ; End Reset
    90     mov     ax, 2000                    ; Delay at least 2ms
    91     call    HTimer_DelayMicrosecondsFromAX
    92 
    93     ; HSR2: Check_status
    94     mov     cl, B_TIMEOUT_RESET         ; Reset timeout delay
    95     jmp     HStatus_WaitBsy
    96 
    97 
    98 ;--------------------------------------------------------------------
    99 ; Initializes Master and Slave drive.
    100 ;
    101 ; AHDh_InitializeMasterAndSlave
     66; InitializeMasterAndSlaveDriveFromPortInDX
    10267;   Parameters:
    10368;       DX:     IDE Base Port address
     69;       SS:BP:  Ptr to IDEPACK
    10470;   Returns:
    10571;       AH:     Error code
     
    10773;               1 if any error
    10874;   Corrupts registers:
    109 ;       AL, BX, CX, DX, DI
     75;       AL, BX, CX, DX, SI, DI
    11076;--------------------------------------------------------------------
    11177ALIGN JUMP_ALIGN
    112 AHDh_InitializeMasterAndSlave:
     78InitializeMasterAndSlaveDriveFromPortInDX:
    11379    push    dx                          ; Store base port address
    11480    xor     cx, cx                      ; Assume no errors
    115     call    FindDPT_ForIdeMasterAtPort
     81    call    FindDPT_ToDSDIForIdeMasterAtPortDX
    11682    jnc     SHORT .InitializeSlave      ; Master drive not present
    11783    call    AH9h_InitializeDriveForUse
     
    11985.InitializeSlave:
    12086    pop     dx                          ; Restore base port address
    121     call    FindDPT_ForIdeSlaveAtPort
     87    call    FindDPT_ToDSDIForIdeSlaveAtPortDX
    12288    jnc     SHORT .CombineErrors        ; Slave drive not present
    12389    call    AH9h_InitializeDriveForUse
Note: See TracChangeset for help on using the changeset viewer.