Вроде бы ошибка в UKNCBTL:
Код:
void CHardDrive::HandleCommand(uint8_t command)
{
m_command = command;
switch (command)
{
case IDE_COMMAND_READ_MULTIPLE:
case IDE_COMMAND_READ_MULTIPLE1:
// DebugPrintFormat(_T("HDD COMMAND %02x (READ MULT): C=%d, H=%d, SN=%d, SC=%d\r\n"),
// command, m_curcylinder, m_curhead, m_cursector, m_sectorcount);
m_status |= IDE_STATUS_BUSY;
m_timeoutcount = TIME_PER_SECTOR * 3; // Timeout while seek for track
m_timeoutevent = TIMEEVT_READ_SECTOR_DONE;
break;
Необходимо ещё сбросить бит готовности буфера:
m_status &= ~IDE_STATUS_BUFFER_READY;
Данная прошивка после подачи команды чтения не смотрит бит занятости BUSY, а сразу опрашивает бит готовности буфера.