Changeset 584 in xtideuniversalbios


Ignore:
Timestamp:
Apr 25, 2015, 7:17:41 PM (10 years ago)
Author:
Tomi Tilli
google:author:
aitotat
Message:

Changes to XTIDE Universal BIOS:

  • Added support for Lo-tech 8-bit IDE Adapter (untested)
Location:
trunk/XTIDE_Universal_BIOS
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/XTIDE_Universal_BIOS/Inc/Controllers/XTCF.inc

    r567 r584  
    5656; the mode via a call to Int 13h function 1Eh accordingly (see AH1E_XTCF.asm).
    5757;
    58 XTCF_8BIT_PIO_MODE                  EQU     00h
    59 XTCF_8BIT_PIO_MODE_WITH_BIU_OFFLOAD EQU     01h
    60 XTCF_DMA_MODE                       EQU     02h
     58XTCF_8BIT_PIO_MODE                  EQU     ((DEVICE_8BIT_XTCF_PIO8 >> 1) - XTCF_DEVICE_OFFSET)
     59XTCF_8BIT_PIO_MODE_WITH_BIU_OFFLOAD EQU     (XTCF_8BIT_PIO_MODE + 1)
     60XTCF_16BIT_PIO_WITH_BIU_OFFLOAD     EQU     (XTCF_8BIT_PIO_MODE + 2)    ; Lo-tech 8-bit IDE Adapter
     61XTCF_DMA_MODE                       EQU     (XTCF_8BIT_PIO_MODE + 3)
     62
    6163
    6264; Subcommands for AH=1Eh, Lo-tech XT-CF features.
  • trunk/XTIDE_Universal_BIOS/Inc/CustomDPT.inc

    r567 r584  
    100100struc DPT_ATA
    101101    .dpt                    resb    DPT_size
    102     .bDevice                resb    1   ; Device Type from IDEVARS (overrided when 32-bit controller detected)
     102    .bDevice                resb    1   ; Device Type from IDEVARS (overrided when 32-bit controller detected or XT-CF mode is changed)
    103103    .bBlockSize             resb    1   ; Current block size in sectors (do not set to zero!)
    104104endstruc
  • trunk/XTIDE_Universal_BIOS/Inc/RomVars.inc

    r567 r584  
    146146; Device types for IDEVARS.bDevice
    147147; IDE Devices are grouped so device numbers cannot be changed without modifying code elsewhere!
    148 ;
     148; (IdeTransfer.asm)
    149149COUNT_OF_STANDARD_IDE_DEVICES           EQU 2   ; 16- and 32-bit controllers
    150 COUNT_OF_8BIT_IDE_DEVICES               EQU 8
     150COUNT_OF_8BIT_IDE_DEVICES               EQU 9
    151151COUNT_OF_ALL_IDE_DEVICES                EQU (COUNT_OF_8BIT_IDE_DEVICES + COUNT_OF_STANDARD_IDE_DEVICES)
    152152; Standard port mapped I/O
     
    158158DEVICE_8BIT_XTIDE_REV2                  EQU ((COUNT_OF_STANDARD_IDE_DEVICES+2)<<1)  ; Or rev 1 with swapped A0 and A3
    159159; IDE Register offsets are SHL 1
    160 DEVICE_8BIT_XTCF_PIO8                   EQU ((COUNT_OF_STANDARD_IDE_DEVICES+3)<<1)  ; XT-CF using 8-bit PIO mode
     160XTCF_DEVICE_OFFSET                      EQU 3
     161DEVICE_8BIT_XTCF_PIO8                   EQU ((COUNT_OF_STANDARD_IDE_DEVICES+XTCF_DEVICE_OFFSET)<<1) ; XT-CF using 8-bit PIO mode
    161162DEVICE_8BIT_XTCF_PIO8_WITH_BIU_OFFLOAD  EQU ((COUNT_OF_STANDARD_IDE_DEVICES+4)<<1)  ; XT-CF using 8-bit PIO mode, but with 16-bit instructions
    162 DEVICE_8BIT_XTCF_DMA                    EQU ((COUNT_OF_STANDARD_IDE_DEVICES+5)<<1)  ; XT-CFv3 using DMA
     163DEVICE_8BIT_XTCF_PIO16_WITH_BIU_OFFLOAD EQU ((COUNT_OF_STANDARD_IDE_DEVICES+5)<<1)  ; Lo-tech 8-bit IDE Adapter
     164DEVICE_8BIT_XTCF_DMA                    EQU ((COUNT_OF_STANDARD_IDE_DEVICES+6)<<1)  ; XT-CFv3 using DMA
    163165; Memory Mapped I/O
    164 DEVICE_8BIT_JRIDE_ISA                   EQU ((COUNT_OF_STANDARD_IDE_DEVICES+6)<<1)  ; JR-IDE/ISA (Memory Mapped I/O)
    165 DEVICE_8BIT_ADP50L                      EQU ((COUNT_OF_STANDARD_IDE_DEVICES+7)<<1)  ; SVC ADP50L (Memory Mapped I/O)
     166DEVICE_8BIT_JRIDE_ISA                   EQU ((COUNT_OF_STANDARD_IDE_DEVICES+7)<<1)  ; JR-IDE/ISA (Memory Mapped I/O)
     167DEVICE_8BIT_ADP50L                      EQU ((COUNT_OF_STANDARD_IDE_DEVICES+8)<<1)  ; SVC ADP50L (Memory Mapped I/O)
    166168; Virtual devices
    167169DEVICE_SERIAL_PORT                      EQU (COUNT_OF_ALL_IDE_DEVICES<<1)
  • trunk/XTIDE_Universal_BIOS/Inc/Version.inc

    r563 r584  
    1717; GNU General Public License for more details.
    1818; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
     19;
     20
     21; Flash signature revisions:
     22; XTIDE205  Added DEVICE_8BIT_XTCF_PIO16_WITH_BIU_OFFLOAD after other XT-CF
     23;           PIO modes (prevents empty indexes in PIO jump tables)
    1924;
    2025
     
    4348%define TITLE_STRING            TITLE_STRING_START, TITLE_STRING_END
    4449%define ROM_VERSION_STRING      "v2.0.0",BETA,"3+ (",__DATE__,")",NULL
    45 %define FLASH_SIGNATURE         "XTIDE204"  ; Do not terminate with NULL
     50%define FLASH_SIGNATURE         "XTIDE205"  ; Do not terminate with NULL
    4651
    4752
  • trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeCommand.asm

    r545 r584  
    8989
    9090%ifdef MODULE_8BIT_IDE
    91     ; Enable 8-bit PIO mode for 8-bit ATA and XT-CF
    9291    push    si
     92
     93    ; Enable 8-bit PIO for DEVICE_8BIT_ATA (no need to verify device type here)
    9394    call    AH9h_Enable8bitModeForDevice8bitAta
     95
     96    ; Set XT-CF mode. No need to check here if device is XT-CF or not.
    9497%ifdef MODULE_8BIT_IDE_ADVANCED
    95     mov     al, XTCF_8BIT_PIO_MODE      ; initialise with most basic transfer mode
    96     call    AH9h_SetModeFromALtoXTCF
     98    call    AH1Eh_GetCurrentXTCFmodeToAX    ; Reads from DPT_ATA.bDevice that we just stored
     99    call    AH9h_SetModeFromALtoXTCF        ; Enables/disables 8-bit mode when necessary
    97100%endif ; MODULE_8BIT_IDE_ADVANCED
    98101    pop     si
     
    106109
    107110    ; Clean stack and return
    108 .FailedToSet8bitMode:
    109111    lea     sp, [bp+SIZE_OF_IDEPACK_WITHOUT_INTPACK]    ; This assumes BP hasn't changed between Idepack_FakeToSSBP and here
    110112    pop     bp
  • trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeTransfer.asm

    r568 r584  
    350350        dw      IdePioBlock_ReadFromXtideRev1       ; 3, DEVICE_8BIT_XTIDE_REV1
    351351        dw      IdePioBlock_ReadFrom16bitDataPort   ; 4, DEVICE_8BIT_XTIDE_REV2
     352%ifdef MODULE_8BIT_IDE_ADVANCED
    352353        dw      IdePioBlock_ReadFrom8bitDataPort    ; 5, DEVICE_8BIT_XTCF_PIO8
    353354        dw      IdePioBlock_ReadFrom16bitDataPort   ; 6, DEVICE_8BIT_XTCF_PIO8_WITH_BIU_OFFLOAD
    354 %ifdef MODULE_8BIT_IDE_ADVANCED
    355         dw      IdeDmaBlock_ReadFromXTCF            ; 7, DEVICE_8BIT_XTCF_DMA
     355        dw      IdePioBlock_ReadFrom16bitDataPort   ; 7, DEVICE_8BIT_XTCF_PIO16_WITH_BIU_OFFLOAD
     356        dw      IdeDmaBlock_ReadFromXTCF            ; 8, DEVICE_8BIT_XTCF_DMA
    356357%endif ; MODULE_8BIT_IDE_ADVANCED
    357358%endif ; MODULE_8BIT_IDE
     
    365366        dw      IdePioBlock_WriteToXtideRev1        ; 3, DEVICE_8BIT_XTIDE_REV1
    366367        dw      IdePioBlock_WriteToXtideRev2        ; 4, DEVICE_8BIT_XTIDE_REV2
     368%ifdef MODULE_8BIT_IDE_ADVANCED
    367369        dw      IdePioBlock_WriteTo8bitDataPort     ; 5, DEVICE_8BIT_XTCF_PIO8
    368370        dw      IdePioBlock_WriteTo16bitDataPort    ; 6, DEVICE_8BIT_XTCF_PIO8_WITH_BIU_OFFLOAD
    369 %ifdef MODULE_8BIT_IDE_ADVANCED
    370         dw      IdeDmaBlock_WriteToXTCF             ; 7, DEVICE_8BIT_XTCF_DMA
     371        dw      IdePioBlock_WriteTo16bitDataPort    ; 7, DEVICE_8BIT_XTCF_PIO16_WITH_BIU_OFFLOAD
     372        dw      IdeDmaBlock_WriteToXTCF             ; 8, DEVICE_8BIT_XTCF_DMA
    371373%endif ; MODULE_8BIT_IDE_ADVANCED
    372374%endif ; MODULE_8BIT_IDE
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH1Eh_XTCF.asm

    r567 r584  
    111111    ;       Selected transfer mode is stored in BIOS variable (DPT_ATA.bDevice).
    112112
    113     ; Note that when selecting 'DEVICE_8BIT_PIO_MODE_WITH_BIU_OFFLOAD' mode,
     113    ; Note that when selecting 'DEVICE_8BIT_XTCF_PIO8_WITH_BIU_OFFLOAD' mode,
    114114    ; the ATA device (i.e. CompactFlash card) will operate in 8-bit mode, but
    115115    ; data will be transferred from its data register using 16-bit CPU instructions
     
    134134    dec     ax                      ; XTCF_8BIT_PIO_MODE_WITH_BIU_OFFLOAD = 1
    135135    jz      SHORT .Set8bitPioModeWithBIUOffload
     136    dec     ax
     137    jz      SHORT .Set16bitPioModeWithBIUOffload
    136138
    137139    ; XTCF_DMA_MODE = 2 (allow 3 as well for more optimized code)
     
    144146    mov     al, XTCF_DMA_MODE_MAX_BLOCK_SIZE
    145147    jmp     SHORT AH24h_SetBlockSize
     148
     149.Set16bitPioModeWithBIUOffload:
     150    pop     bx                              ; Do not enable 8-bit PIO...
     151    ePUSH_T bx, AH23h_Disable8bitPioMode    ; ...disable it instead
     152    mov     al, DEVICE_8BIT_XTCF_PIO16_WITH_BIU_OFFLOAD
     153    SKIP2B  bx
    146154
    147155.Set8bitPioMode:
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH23h_HFeatures.asm

    r526 r584  
    7878;--------------------------------------------------------------------
    7979; AH23h_Enable8bitPioMode
     80; AH23h_Disable8bitPioMode
    8081;   Parameters:
    8182;       DS:DI:  Ptr to DPT (in RAMVARS segment)
     
    9192    mov     si, FEATURE_ENABLE_8BIT_PIO_TRANSFER_MODE
    9293    jmp     SHORT AH23h_SetControllerFeatures
     94AH23h_Disable8bitPioMode:
     95    mov     si, FEATURE_DISABLE_8BIT_PIO_TRANSFER_MODE
     96    call    AH23h_SetControllerFeatures
     97    xor     ah, ah          ; Clear error since modern drives might not understand the command and are
     98    ret                     ; always in 16-bit mode anyway
    9399%endif
  • trunk/XTIDE_Universal_BIOS/Src/Main.asm

    r567 r584  
    136136%ifdef MODULE_8BIT_IDE_ADVANCED
    137137    at  ROMVARS.ideVars0+IDEVARS.wBasePort,             dw  DEVICE_XTIDE_DEFAULT_PORT       ; Controller Command Block base port
    138     at  ROMVARS.ideVars0+IDEVARS.bDevice,               db  DEVICE_8BIT_XTCF_PIO8
     138    at  ROMVARS.ideVars0+IDEVARS.bDevice,               db  XTCF_8BIT_PIO_MODE_WITH_BIU_OFFLOAD
    139139%else
    140140    at  ROMVARS.ideVars0+IDEVARS.wBasePort,             dw  DEVICE_XTIDE_DEFAULT_PORT       ; Controller Command Block base port
Note: See TracChangeset for help on using the changeset viewer.