Как можно организовать поиск утройств на шине IDE? И желательно SATA устройств тоже. Заранее спасибо.
Почитайте http://ru.osdev.wikia.com/wiki/Работа_с_жесткими_дисками_и_их_контроллерами Вкратце: 1) Сканим PCI шину (не полным перебором адресов, а по "умному"). 2) Читаем BCC,SCC,PI. Находим контроллеры IDE (0101xxh) и ACHI (010601h). Далее для Primary Channel: 3) Читаем BAR0 (+10h). И если там 0, то это означает что мы имеем дело с IDE или с SATA в Legacy Mode. Поэтому PortCMD=01F0h (01F0h-01F7h), PortCNT=03F4h+2. 4) Если в BAR0 не 0, то читаем PortCMD из BAR0, а PortCNT из BAR1. Далее для Secondary Channel: 3) Читаем BAR0 (+10h). И если там 0, то это означает что мы имеем дело с IDE или с SATA в Legacy Mode. Поэтому PortCMD=0170h (0170h-0177h), PortCNT=0374h+2. 4) Если в BAR0 не 0, то читаем PortCMD из BAR2, а PortCNT из BAR3. Порт Bus Master Base Address всегда читается из BAR4.
Спасибо, буду копать) А еще не подскажешь определить какой жд является загрузочным? Читал статью что эо можно определить функцией 48h прерывания 13h но у меня почему-то не работает этот способ.
Заглянул я в ДОС-прерывания Ральфа Брауна. В 48-й функции такого нет... По косвенным данным, я думаю, что нормальный БИОС "маппит" загрузочный диск на номер 0х80.