Ich bin gerade dabei, einen Treiber zu schreiben und orientiere mich dabei an dem hier:
http://www.lowlevel.eu/wiki/IDENachdem ich also die Schreiben & Lesen - Tests gemacht habe (bei denen bei QEMU immer der 2. Kanal "gewinnt"), versuche ich dann das Kommando 0xec auszuführen, aber es klappt nicht wirklich, wenn ich danach das Data-Register auslese, ist das Ergebnis immer 0xff bzw. 255.
So mache ich das:
outb(ataPositions[i][ataRStatus], ataCIdentify);
int j = 0;
for(; j < 128; j++){
uint32_t x = inb(ataPositions[i][ataRData]);
echo("[%d] %d: %d", i, j, x);
}
mit:
#define ataRData 0
#define ataRStatus 7
#define ataCIdentify 0xec
int ataPositions[ataSize][ataDeviceSize] = {
{0x1f0, 0x1f1, 0x1f2, 0x1f3, 0x1f4, 0x1f5, 0x1f6, 0x1f7, 0x3f6},
{0x170, 0x171, 0x172, 0x173, 0x174, 0x175, 0x176, 0x177, 0x376},
{0x1e8, 0x1e9, 0x1ea, 0x1eb, 0x1ec, 0x1ed, 0x1ee, 0x1ef, 0x3ee},
{0x168, 0x169, 0x16a, 0x16b, 0x16c, 0x16d, 0x16e, 0x16f, 0x36e}
};
Also - was mache ich falsch?
mfg