Ignore:
Timestamp:
Apr 20, 2012, 2:30:16 PM (12 years ago)
Author:
aitotat@…
google:author:
aitotat@gmail.com
Message:

Changes to XTIDE Universal BIOS:

  • Moved 8-bit device support to MODULE_8BIT_IDE.
  • JR-IDE/ISA support requires a lot less bytes.
  • AT builds now always use full operating mode.
File:
1 edited

Legend:

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

    r376 r400  
    3131;       AL, BX, CX, DX
    3232;--------------------------------------------------------------------
    33 IDEDEVICE%+Command_ResetMasterAndSlaveController:
     33IdeCommand_ResetMasterAndSlaveController:
    3434    ; HSR0: Set_SRST
    3535    call    AccessDPT_GetDeviceControlByteToAL
     
    4949    ; HSR2: Check_status
    5050    mov     bx, TIMEOUT_AND_STATUS_TO_WAIT(TIMEOUT_MOTOR_STARTUP, FLG_STATUS_BSY)
    51     jmp     IDEDEVICE%+Wait_PollStatusFlagInBLwithTimeoutInBH
     51    jmp     IdeWait_PollStatusFlagInBLwithTimeoutInBH
    5252
    5353
     
    6565;       AL, BL, CX, DX, SI, DI, ES
    6666;--------------------------------------------------------------------
    67 IDEDEVICE%+Command_IdentifyDeviceToBufferInESSIwithDriveSelectByteInBH:
     67IdeCommand_IdentifyDeviceToBufferInESSIwithDriveSelectByteInBH:
    6868    ; Create fake DPT to be able to use Device.asm functions
    6969    call    FindDPT_ForNewDriveToDSDI
     
    7272    mov     [di+DPT.bIdevarsOffset], bp
    7373    mov     BYTE [di+DPT_ATA.bBlockSize], 1 ; Block = 1 sector
    74 %ifdef MODULE_ADVANCED_ATA
    7574    call    IdeDPT_StoreDeviceTypeFromIdevarsInCSBPtoDPTinDSDI
    76 %endif
    77 %ifdef ASSEMBLE_SHARED_IDE_DEVICE_FUNCTIONS
    78     call    IdeDPT_StoreReversedAddressLinesFlagIfNecessary
    79 %endif
    8075
    8176    ; Wait until drive motors have reached max speed
    8277    cmp     bp, BYTE ROMVARS.ideVars0
    8378    jne     SHORT .SkipLongWaitSinceDriveIsNotPrimaryMaster
    84     test    al, FLG_DRVNHEAD_DRV
     79    test    bh, FLG_DRVNHEAD_DRV
    8580    jnz     SHORT .SkipLongWaitSinceDriveIsNotPrimaryMaster
    8681    mov     bx, TIMEOUT_AND_STATUS_TO_WAIT(TIMEOUT_MOTOR_STARTUP, FLG_STATUS_BSY)
    87     call    IDEDEVICE%+Wait_PollStatusFlagInBLwithTimeoutInBH
     82    call    IdeWait_PollStatusFlagInBLwithTimeoutInBH
    8883.SkipLongWaitSinceDriveIsNotPrimaryMaster:
    8984
     
    120115;--------------------------------------------------------------------
    121116ALIGN JUMP_ALIGN
    122 IDEDEVICE%+Command_OutputWithParameters:
     117IdeCommand_OutputWithParameters:
    123118    push    bx                      ; Store status register bits to poll
    124119
    125120    ; Select Master or Slave drive and output head number or LBA28 top bits
    126     call    IDEDEVICE%+Command_SelectDrive
     121    call    IdeCommand_SelectDrive
    127122    jc      SHORT .DriveNotReady
    128123
    129124    ; Output Device Control Byte to enable or disable interrupts
    130125    mov     al, [bp+IDEPACK.bDeviceControl]
    131 %ifdef ASSEMBLE_SHARED_IDE_DEVICE_FUNCTIONS ; JR-IDE/ISA
     126%ifdef MODULE_IRQ
    132127    test    al, FLG_DEVCONTROL_nIEN ; Interrupts disabled?
    133128    jnz     SHORT .DoNotSetInterruptInServiceFlag
     
    151146    eMOVZX  ax, [bp+IDEPACK.bLbaLowExt]     ; Zero sector count
    152147    mov     cx, [bp+IDEPACK.wLbaMiddleAndHighExt]
    153     call    IDEDEVICE%+OutputSectorCountAndAddress
     148    call    OutputSectorCountAndAddress
    154149%endif
    155150
     
    157152    mov     ax, [bp+IDEPACK.wSectorCountAndLbaLow]
    158153    mov     cx, [bp+IDEPACK.wLbaMiddleAndHigh]
    159     call    IDEDEVICE%+OutputSectorCountAndAddress
     154    call    OutputSectorCountAndAddress
    160155
    161156    ; Output command
     
    164159
    165160    ; Wait until command completed
    166     pop     bx                      ; Pop status and timeout for polling
    167     cmp     bl, FLG_STATUS_DRQ      ; Data transfer started?
    168     je      SHORT IDEDEVICE%+Transfer_StartWithCommandInAL
     161    pop     bx                              ; Pop status and timeout for polling
     162    cmp     bl, FLG_STATUS_DRQ              ; Data transfer started?
     163    jne     SHORT .WaitUntilNonTransferCommandCompletes
     164%ifdef MODULE_JRIDE
     165    cmp     BYTE [di+DPT_ATA.bDevice], DEVICE_8BIT_JRIDE_ISA
     166    je      SHORT JrIdeTransfer_StartWithCommandInAL
     167%endif
     168    jmp     IdeTransfer_StartWithCommandInAL
     169
     170.WaitUntilNonTransferCommandCompletes:
     171%ifdef MODULE_IRQ
    169172    test    BYTE [bp+IDEPACK.bDeviceControl], FLG_DEVCONTROL_nIEN
    170     jz      SHORT .WaitForIrqOrRdy
    171     jmp     IDEDEVICE%+Wait_PollStatusFlagInBLwithTimeoutInBH
    172 
    173 ALIGN JUMP_ALIGN
    174 .WaitForIrqOrRdy:
    175     jmp     IDEDEVICE%+Wait_IRQorStatusFlagInBLwithTimeoutInBH
     173    jz      SHORT .PollStatusFlagInsteadOfWaitIrq
     174    jmp     IdeWait_IRQorStatusFlagInBLwithTimeoutInBH
     175.PollStatusFlagInsteadOfWaitIrq:
     176%endif
     177    jmp     IdeWait_PollStatusFlagInBLwithTimeoutInBH
    176178
    177179.DriveNotReady:
     
    192194;--------------------------------------------------------------------
    193195ALIGN JUMP_ALIGN
    194 IDEDEVICE%+Command_SelectDrive:
    195     ; Wait until neither Master or Slave Drive is busy.
    196     ; I don't think this wait is necessary.
    197     ;mov        bx, TIMEOUT_AND_STATUS_TO_WAIT(TIMEOUT_BSY, FLG_STATUS_BSY)
    198     ;cmp        BYTE [bp+IDEPACK.bCommand], COMMAND_IDENTIFY_DEVICE
    199     ;eCMOVE bh, TIMEOUT_IDENTIFY_DEVICE
    200     ;call   IDEDEVICE%+Wait_PollStatusFlagInBLwithTimeoutInBH
    201 
     196IdeCommand_SelectDrive:
    202197    ; Select Master or Slave Drive
    203198    mov     al, [bp+IDEPACK.bDrvAndHead]
     
    206201    cmp     BYTE [bp+IDEPACK.bCommand], COMMAND_IDENTIFY_DEVICE
    207202    eCMOVE  bh, TIMEOUT_IDENTIFY_DEVICE
    208     call    IDEDEVICE%+Wait_PollStatusFlagInBLwithTimeoutInBH
     203    call    IdeWait_PollStatusFlagInBLwithTimeoutInBH
    209204
    210205    ; Ignore errors from IDE Error Register (set by previous command)
     
    232227;--------------------------------------------------------------------
    233228ALIGN JUMP_ALIGN
    234 IDEDEVICE%+OutputSectorCountAndAddress:
     229OutputSectorCountAndAddress:
    235230    OUTPUT_AL_TO_IDE_REGISTER   SECTOR_COUNT_REGISTER
    236231
Note: See TracChangeset for help on using the changeset viewer.