Ищем устройства на IDE

Тема в разделе "WASM.OS.DEVEL", создана пользователем JucEDik, 5 фев 2010.

  1. JucEDik

    JucEDik New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2010
    Сообщения:
    3
    Как можно организовать поиск утройств на шине IDE? И желательно SATA устройств тоже. Заранее спасибо.
     
  2. T800

    T800 Member

    Публикаций:
    0
    Регистрация:
    7 дек 2006
    Сообщения:
    293
    Адрес:
    Moscow
    Почитайте 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.
     
  3. JucEDik

    JucEDik New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2010
    Сообщения:
    3
    Спасибо, буду копать) А еще не подскажешь определить какой жд является загрузочным? Читал статью что эо можно определить функцией 48h прерывания 13h но у меня почему-то не работает этот способ.
     
  4. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Заглянул я в ДОС-прерывания Ральфа Брауна. В 48-й функции такого нет...
    По косвенным данным, я думаю, что нормальный БИОС "маппит" загрузочный диск на номер 0х80.