#define IDE_SUPPORT_CHS 0
#define IDE_BASE_ADDRESS 0xE000
#define IDECS0 0x0000
#define IDECS1 0x0500
#define DATA_WRITE_REG_LOW
#define DATA_WRITE_REG_HIGH
#define DATA_READ_REG_LOW
#define DATA_READ_REG_HIGH
#define ERROR_REG
#define FEATURE_REG
#define SECTOR_COUNT_REG
#define SECTOR_REG
#define CYLINDER_LOW_REG
#define CYLINDER_HIGH_REG
#define DISK_HEAD_REG
#define COMMAND_REG
#define STATUS_REG
#define LBA_0_7
#define LBA_8_15
#define LBA_16_23
#define CF_ERROR_REG
#define CONTROL_REG
#define ALTERNATE_STATUS
#define STATUS_BUSY 0x80
#define STATUS_DRIVE_READY 0x40
#define STATUS_DEVIDE_FAULT 0x20
#define STATUS_SEEK_COMPLETE 0x10
#define STATUS_DATA_REQUEST 0x08
#define STATUS_CORRECTED_DATA 0x04
#define STATUS_INDEX 0x02
#define STATUS_ERROR 0x01
#define ERROR_CRC 0x80
#define ERROR_UNC 0x40
#define ERROR_IDN 0x10
#define ERROR_ABT 0x04
#define ERROR_T0N 0x02
#define ERROR_AMN 0x01
#define COMMAND_DEVICE_INFO 0xEC
#define COMMAND_DEVICE_INFO_P 0xA1
#define COMMAND_READ_SECTORS 0x20
#define COMMAND_WRITE_SECTORS 0x30
#define COMMAND_RECALIBRATE 0x10
#define COMMAND_DIAG 0x90
#define SERIAL_SIZE 20
#define REV_SIZE 8
#define MODEL_SIZE 40
#define ATAPI_CMD_READ_CAPACITY 0x25
#define ATAPI_CMD_MODE_SELECT 0x55
#define ATAPI_CMD_MODE_SENSE 0x5A
#define ATAPI_CMD_READ12 0xA8
#define ATAPI_CMD_SET_CD_SPEED 0xBB
| struct | |
| { | |
| unsigned UnUsed0:1; | |
| unsigned HardSector_O:1; | |
| unsigned SoftSector_O:1; | |
| unsigned MFM_O:1; | |
| unsigned SlowHead_O:1; | |
| unsigned SynchDriveMotor_O:1; | |
| unsigned FixedDevice:1; | |
| unsigned RemoveableDevice:1; | |
| unsigned DiskTransferRate_O:3; | |
| unsigned InaccurateSpeed_O:1; | |
| unsigned DataStrobeOffset_O:1; | |
| unsigned TrackOffsetOption_O:1; | |
| unsigned FormatGapRequired_O:1; | |
| unsigned ATAPI:1; | |
| WORD Cylinders; | |
| WORD UnUsed1; | |
| WORD Heads; | |
| WORD BytesPerTrack_O; | |
| WORD BytesPerSector_O; | |
| WORD SectorsPerTrack; | |
| WORD VendorSpecific[3]; | |
| char SerialNumber[20]; | |
| WORD BufferType_O; | |
| WORD BufferSizeSectors_O; | |
| WORD ECCBytes; | |
| char FirmwareRevision[8]; | |
| char Model[40]; | |
| BYTE MaxMultipleSectors; | |
| BYTE UnUsed2; | |
| WORD Can32Bit_O; | |
| unsigned CanDMA_O:1; | |
| unsigned UnUsed3:9; | |
| unsigned CanDisableIORDY:1; | |
| unsigned IORDYSupported:1; | |
| unsigned AdvancedTransferMode:1; | |
| unsigned ATA3StandbyTimer:1; | |
| unsigned UnUsed4:2; | |
| WORD UnUsed5; | |
| BYTE UnUsed6; | |
| BYTE PIOTransferSpeed; | |
| BYTE UnUsed7; | |
| BYTE DMATransferSpeed; | |
| unsigned Fields_6C_75_Valid:1; | |
| unsigned Fields_80_8C_Valid:1; | |
| unsigned UnUsed8:14; | |
| WORD Cylinders2; | |
| WORD Heads2; | |
| WORD SectorsPerTrack2; | |
| DWORD Sectors; | |
| BYTE MaxSectorsPerInt; | |
| unsigned MaxSectorsPerIntIsValid:1; | |
| unsigned UnUsed9:7; | |
| DWORD LBASectors; | |
| WORD UnUsed10; | |
| BYTE SupportedDMAModes; | |
| BYTE ActiveDMAModes; | |
| BYTE PIOModesSupported; | |
| BYTE UnUsed11; | |
| WORD DMACycleTime; | |
| WORD RecommendedDMACycleTime; | |
| WORD PIOCycleTime; | |
| WORD IORDYPIOCycleTime; | |
| WORD Reserved1[2]; | |
| WORD Reserved2[4]; | |
| WORD QueueDepth; | |
| WORD Reserved3[4]; | |
| WORD ATAVersionMajor; | |
| WORD ATAVersionMinor; | |
| WORD CommandSetSupported[2]; | |
| WORD CommandSetSupportedExtension; | |
| WORD CommandSetEnabled[2]; | |
| WORD CommandSetDefault; | |
| WORD UltraDMAMode; | |
| WORD SecurityStatus[2]; | |
| WORD AdvancedPowerManagement; | |
| WORD MasterPasswordRevisionCode; | |
| WORD HardwareResetResult; | |
| WORD AcousticManagementValue; | |
| WORD Reserved4[5]; | |
| WORD MaximumUserLBA48[4]; | |
| WORD Reserved5[23]; | |
| } |