#ifndef ATA_PIO #define ATA_PIO #include #include // register stuff #define ATA_IO_BASE 0x1F0 #define ATA_CONTROL_BASE 0x3F0 #define ATA_SECONDARY_OFFSET 128 #define ATA_DATA_REGISTER 0 #define ATA_ERROR_REGISTER 1 #define ATA_FEATURES_REGISTER 1 #define ATA_SECTOR_COUNT_REGISTER 2 #define ATA_SECTOR_REGISTER 3 #define ATA_CYL_LOW_REGISTER 4 #define ATA_CYL_HIGH_REGISTER 5 #define ATA_DRIVE_REGISTER 6 #define ATA_STATUS_REGISTER 7 #define ATA_COMMAND_REGISTER 7 #define ATA_ALTERNATE_STATUS_REGISTER 0 #define ATA_DEVICE_CONTROL_REGISTER 0 #define ATA_DRIVE_ADDRESS_REGISTER 1 // bitfield stuff // declarations int ata_init(uint8_t bus, uint8_t drive); int ata_read(uint8_t bus, uint8_t drive, uint16_t* buf, uint16_t sectors, uint16_t lba_high, uint32_t lba_low); int ata_write(uint8_t bus, uint8_t drive, uint16_t* buf, uint16_t sectors, uint16_t lba_high, uint32_t lba_low); extern uint16_t ata_identify[256]; #endif