ATA IDE ИДЕНТИФИКАЦИЯ
Я пытаюсь разработать идеальный драйвер для моего обучения в ОС.. У меня возникла проблема, заключающаяся в том, что после отправки IDENTIFY CMD система зависает без паники..! я использую код ниже
/* ATA specs say these values must be zero before sending IDENTIFY */
outportb(io + ATA_REG_SECCOUNT0, 0);
outportb(io + ATA_REG_LBA0, 0);
outportb(io + ATA_REG_LBA1, 0);
outportb(io + ATA_REG_LBA2, 0);
/* Now, send IDENTIFY */
Printf("Sending IDENTIFY to port 0x%X\n",io);
outportb(io + ATA_REG_COMMAND, ATA_CMD_IDENTIFY);
Printf("Sent IDENTIFY\n");
/* Now, read status port */
uint8_t status = inportb(io + ATA_REG_STATUS);
Printf("\nThe status right now is %d", status);
if (status)
{
Printf("\nNow Polling... _IRQP = %d , _IRQS= %d",_IRQP,_IRQS);
/* Now, poll untill BSY is clear. */
//while (inportb(io + ATA_REG_STATUS) & ATA_SR_BSY != 0);
while (!_IRQP || !_IRQS){}
Printf("\nFinished Polling... _IRQP = %d , _IRQS= %d", _IRQP, _IRQS);
оно никогда не достигает "Отправлено", и некоторые из них пишут Сену и вешают.
Я проверил на Virtualbox и VMWare, а также тот же результат. Есть идеи, почему он зависает?