Changeset 150 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS/Inc/IdeRegisters.inc


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/Inc/IdeRegisters.inc

    r3 r150  
    1 ; File name     :   IdeRegisters.inc
    2 ; Project name  :   IDE BIOS
    3 ; Created date  :   23.3.2010
    4 ; Last update   :   23.3.2010
    5 ; Author        :   Tomi Tilli
     1; Project name  :   XTIDE Universal BIOS
    62; Description   :   Equates for IDE registers, flags and commands.
    73%ifndef IDEREGISTERS_INC
     
    95
    106; IDE Register offsets from Command Block base port
    11 REG_IDE_DATA            EQU     0       ; Data Register
    12 REGR_IDE_ERROR          EQU     1       ; Error Register
    13 REGW_IDE_FEAT           EQU     1       ; Features Register (ATA1+)
    14 ;REGW_IDE_WRPC          EQU     1       ; Write Precompensation Register (obsolete on ATA1+)
    15 REG_IDE_CNT             EQU     2       ; Sector Count Register
    16 REG_IDE_SECT            EQU     3       ; Sector Number Register (LBA 7...0)
    17 REG_IDE_LBA_LOW         EQU     3       ; LBA Low Register
    18 REG_IDE_LOCYL           EQU     4       ; Low Cylinder Register (LBA 15...8)
    19 REG_IDE_LBA_MID         EQU     4       ; LBA Mid Register
    20 REG_IDE_HICYL           EQU     5       ; High Cylinder Register (LBA 23...16)
    21 REG_IDE_LBA_HIGH        EQU     5       ; LBA High Register
    22 REG_IDE_DRVHD           EQU     6       ; Drive and Head Register (LBA 27...24)
    23 REGR_IDE_ST             EQU     7       ; Status Register
    24 REGW_IDE_CMD            EQU     7       ; Command Register
    25 REG_IDE_HIDATA          EQU     8       ; XTIDE Data High Register (actually first Control Block reg)
     7DATA_REGISTER                   EQU     0
     8ERROR_REGISTER_in               EQU     1       ; Read only
     9FEATURES_REGISTER_out           EQU     1       ; Write only, ATA1+
     10;WRITE_PRECOMPENSATION_out      EQU     1       ; Write only, Obsolete on ATA1+
     11SECTOR_COUNT_REGISTER           EQU     2
     12SECTOR_NUMBER_REGISTER          EQU     3       ; LBA Low Register
     13LOW_CYLINDER_REGISTER           EQU     4       ; LBA Middle Register
     14HIGH_CYLINDER_REGISTER          EQU     5       ; LBA High Register
     15LBA_LOW_REGISTER                EQU     3       ; LBA 7...0, LBA48 31...24
     16LBA_MIDDLE_REGISTER             EQU     4       ; LBA 15...8, LBA48 39...32
     17LBA_HIGH_REGISTER               EQU     5       ; LBA 23...16, LBA48 47...40
     18DRIVE_AND_HEAD_SELECT_REGISTER  EQU     6       ; LBA28 27...24
     19STATUS_REGISTER_in              EQU     7       ; Read only
     20COMMAND_REGISTER_out            EQU     7       ; Write only
     21XTIDE_DATA_HIGH_REGISTER        EQU     8       ; Non-standard (actually first Control Block reg)
    2622
    2723; IDE Register offsets from Control Block base port
    2824; (usually Command Block base port + 200h)
    29 REGR_IDEC_AST           EQU     6       ; Alternate Status Register
    30 REGW_IDEC_CTRL          EQU     6       ; Device Control Register
    31 ;REGR_IDEC_ADDR         EQU     7       ; Drive Address Register (obsolete on ATA2+)
     25ALTERNATE_STATUS_REGISTER_in    EQU     6       ; Read only
     26DEVICE_CONTROL_REGISTER_out     EQU     6       ; Write only
     27;DRIVE_ADDRESS_REGISTER         EQU     7       ; Obsolete on ATA2+
    3228
     29; Bit mask for XTIDE mod with reversed A0 and A3 address lines
     30MASK_A3_AND_A0_ADDRESS_LINES    EQU     ((1<<3) | (1<<0))
    3331
    3432; Bit definitions for IDE Error Register
    35 FLG_IDE_ERR_BBK         EQU     (1<<7)  ; Bad Block Detected (reserved on ATA2+, command dependent on ATA4+)
    36 FLG_IDE_ERR_UNC         EQU     (1<<6)  ; Uncorrectable Data Error (command dependent on ATA4+)
    37 FLG_IDE_ERR_MC          EQU     (1<<5)  ; Media Changed (command dependent on ATA4+)
    38 FLG_IDE_ERR_IDNF        EQU     (1<<4)  ; ID Not Found (command dependent on ATA4+)
    39 FLG_IDE_ERR_MCR         EQU     (1<<3)  ; Media Change Request (command dependent on ATA4+)
    40 FLG_IDE_ERR_ABRT        EQU     (1<<2)  ; Command Aborted
    41 FLG_IDE_ERR_TK0NF       EQU     (1<<1)  ; Track 0 Not Found (command dependent on ATA4+)
    42 FLG_IDE_ERR_AMNF        EQU     (1<<0)  ; Address Mark Not Found (command dependent on ATA4+)
     33FLG_ERROR_BBK           EQU     (1<<7)  ; Bad Block Detected (reserved on ATA2+, command dependent on ATA4+)
     34FLG_ERROR_UNC           EQU     (1<<6)  ; Uncorrectable Data Error (command dependent on ATA4+)
     35FLG_ERROR_MC            EQU     (1<<5)  ; Media Changed (command dependent on ATA4+)
     36FLG_ERROR_IDNF          EQU     (1<<4)  ; ID Not Found (command dependent on ATA4+)
     37FLG_ERROR_MCR           EQU     (1<<3)  ; Media Change Request (command dependent on ATA4+)
     38FLG_ERROR_ABRT          EQU     (1<<2)  ; Command Aborted
     39FLG_ERROR_TK0NF         EQU     (1<<1)  ; Track 0 Not Found (command dependent on ATA4+)
     40FLG_ERROR_AMNF          EQU     (1<<0)  ; Address Mark Not Found (command dependent on ATA4+)
    4341
    4442; Bit definitions for IDE Drive and Head Select Register
    45 FLG_IDE_DRVHD_LBA       EQU     (1<<6)  ; LBA Addressing enabled (instead of CHS)
    46 FLG_IDE_DRVHD_DRV       EQU     (1<<4)  ; Drive Select (0=Master, 1=Slave)
    47 MASK_IDE_DRVHD_HEAD     EQU     0Fh     ; Head select bits (bits 0...3)
    48 MASK_IDE_DRVHD_SET      EQU     0A0h    ; Bits that must be set to 1 on ATA1 (reserved on ATA2+)
     43FLG_DRVNHEAD_LBA        EQU     (1<<6)  ; LBA Addressing enabled (instead of CHS)
     44FLG_DRVNHEAD_DRV        EQU     (1<<4)  ; Drive Select (0=Master, 1=Slave)
     45MASK_DRVNHEAD_HEAD      EQU     0Fh     ; Head select bits (bits 0...3)
     46MASK_DRVNHEAD_SET       EQU     0A0h    ; Bits that must be set to 1 on ATA1 (reserved on ATA2+)
    4947
    5048; Bit definitions for IDE Status Register
    51 FLG_IDE_ST_BSY          EQU     (1<<7)  ; Busy (other flags undefined when set)
    52 FLG_IDE_ST_DRDY         EQU     (1<<6)  ; Device Ready
    53 FLG_IDE_ST_DF           EQU     (1<<5)  ; Device Fault (command dependent on ATA4+)
    54 FLG_IDE_ST_DSC          EQU     (1<<4)  ; Device Seek Complete (command dependent on ATA4+)
    55 FLG_IDE_ST_DRQ          EQU     (1<<3)  ; Data Request
    56 FLG_IDE_ST_CORR         EQU     (1<<2)  ; Corrected Data (obsolete on ATA4+)
    57 FLG_IDE_ST_IDX          EQU     (1<<1)  ; Index (vendor specific on ATA2+, obsolete on ATA4+)
    58 FLG_IDE_ST_ERR          EQU     (1<<0)  ; Error
     49FLG_STATUS_BSY          EQU     (1<<7)  ; Busy (other flags undefined when set)
     50FLG_STATUS_DRDY         EQU     (1<<6)  ; Device Ready
     51FLG_STATUS_DF           EQU     (1<<5)  ; Device Fault (command dependent on ATA4+)
     52FLG_STATUS_DSC          EQU     (1<<4)  ; Device Seek Complete (command dependent on ATA4+)
     53FLG_STATUS_DRQ          EQU     (1<<3)  ; Data Request
     54FLG_STATUS_CORR         EQU     (1<<2)  ; Corrected Data (obsolete on ATA4+)
     55FLG_STATUS_IDX          EQU     (1<<1)  ; Index (vendor specific on ATA2+, obsolete on ATA4+)
     56FLG_STATUS_ERR          EQU     (1<<0)  ; Error
    5957
    6058; Bit definitions for IDE Device Control Register
    6159; Bit 0 must be zero, unlisted bits are reserved.
    62 FLG_IDE_CTRL_O8H        EQU     (1<<3)  ; Drive has more than 8 heads (pre-ATA only, 1 on ATA1, reserved on ATA2+)
    63 FLG_IDE_CTRL_SRST       EQU     (1<<2)  ; Software Reset
    64 FLG_IDE_CTRL_nIEN       EQU     (1<<1)  ; Negated Interrupt Enable (IRQ disabled when set)
    65 
     60FLG_DEVCONTROL_HOB      EQU     (1<<7)  ; High Order Byte (ATA6+)
     61;FLG_DEVCONTROL_O8H     EQU     (1<<3)  ; Drive has more than 8 heads (pre-ATA only, 1 on ATA1, reserved on ATA2+)
     62FLG_DEVCONTROL_SRST     EQU     (1<<2)  ; Software Reset
     63FLG_DEVCONTROL_nIEN     EQU     (1<<1)  ; Negated Interrupt Enable (IRQ disabled when set)
    6664
    6765; Commands for IDE Controller
    68 ;HCMD_RECALIBRATE       EQU     10h     ; Recalibrate
    69 HCMD_READ_SECT          EQU     20h     ; Read Sectors (with retries)
    70 HCMD_WRITE_SECT         EQU     30h     ; Write Sectors (with retries)
    71 HCMD_VERIFY_SECT        EQU     40h     ; Read Verify Sectors (with retries)
    72 ;HCMD_FORMAT            EQU     50h     ; Format track
    73 HCMD_SEEK               EQU     70h     ; Seek
    74 ;HCMD_DIAGNOSTIC        EQU     90h     ; Execute Device Diagnostic
    75 HCMD_INIT_DEV           EQU     91h     ; Initialize Device Parameters
    76 HCMD_READ_MUL           EQU     0C4h    ; Read Multiple (=block)
    77 HCMD_WRITE_MUL          EQU     0C5h    ; Write Multiple (=block)
    78 HCMD_SET_MUL            EQU     0C6h    ; Set Multiple Mode (=block size)
    79 HCMD_ID_DEV             EQU     0ECh    ; Identify Device
    80 HCMD_SET_FEAT           EQU     0EFh    ; Set Features
    81 
    82 ; Set Features subcommands
    83 HFEAT_SET_XFER_MODE     EQU     03h     ; Set transfer mode based on value in Sector Count register
     66COMMAND_READ_SECTORS                    EQU     20h
     67COMMAND_READ_SECTORS_EXT                EQU     24h     ; LBA48
     68COMMAND_WRITE_SECTORS                   EQU     30h
     69COMMAND_WRITE_SECTORS_EXT               EQU     34h     ; LBA48
     70COMMAND_VERIFY_SECTORS                  EQU     40h
     71COMMAND_VERIFY_SECTORS_EXT              EQU     42h     ; LBA48
     72COMMAND_SEEK                            EQU     70h
     73COMMAND_INITIALIZE_DEVICE_PARAMETERS    EQU     91h
     74COMMAND_SET_MULTIPLE_MODE               EQU     0C6h    ; Block mode
     75COMMAND_READ_MULTIPLE                   EQU     0C4h    ; Block mode
     76COMMAND_READ_MULTIPLE_EXT               EQU     29h     ; LBA48, Block mode
     77COMMAND_WRITE_MULTIPLE                  EQU     0C5h    ; Block mode
     78COMMAND_WRITE_MULTIPLE_EXT              EQU     39h     ; LBA48, Block mode
     79COMMAND_IDENTIFY_DEVICE                 EQU     0ECh
     80COMMAND_SET_FEATURES                    EQU     0EFh
    8481
    8582
Note: See TracChangeset for help on using the changeset viewer.