живши один раз ці значення в якості бази інші порти можна адресувати по зсувах щодо цих, тобто зробити так, що один і той же код зможе працювати з двома каналами. У навантаження до цього контролером використовується ще пара портів 3F6h-3F7h для першого каналу і 376h-377h для його колеги. p align="justify"> Тепер розглянемо команди АТА. Існує близько 20 команд ATA, але на практиці, зазвичай використовуються лише 10. p align="justify"> У даній роботі розглядаються команди читання/запису одного сектора, ідентифікації накопичувача, а також команду зупинки вінчестера (команда в стандарт не входить, але підтримується абсолютною більшістю вінчестерів), яка використовуються всіма ОС при перекладі комп'ютера в режим зниженого енергоспоживання. Всі приклади відносяться до Master пристрою першого каналу, але їх можна легко адаптувати до будь-якої конфігурації. p align="justify"> Читання секторів з вінчестера відбувається наступним чином:
. Заборонити переривання з записом 3F6h.
2. Дочекатися готовності каналу читаючи біт BSY в порту lF7h .
. Вибрати пристрій на каналі записом у lF6h.
. Дочекатися DRDY = 1 і BSY = 0.
. Завантажити LBA адресу.
. Надіслати команду читання (20h).
. Дочекатися BSY = 0.
. Дочекатися готовності обміну даними (DRQ = 1).
. Прийняти дані від пристрою через lFOh строковой операцією введення з порту.
10. Дозволити переривання від пристрою.
Хоча команда 20h є командою читання саме одного сектора, в абсолютному (можливо переважній) більшості вінчестерів вміст регістра lF2h (лічильник для групових операцій з секторами) ні на що не впливає (в лістингу він не фігурує), однак можуть зустрітися примірники, в яких обов'язково потрібно його встановлювати в 1.
4. PCI
.1 Знаходження PCI пристроїв
Спочатку введемо фундаментальне поняття - конфігураційний простір PCI (PCI configuration space).
Так називається масив регістрів, який є у кожного PCI-пристрої, через них задаються різні параметри (номери переривань для пристрої тощо). Спілкування з PCI-пристроями відбувається в основному через 2 32-бітних порту 0CF8h і OCFCh. Через них можна читати і писати в цей самий конфігураційний простір певного пристрою. p align="justify"> Відбувається цей процес наступним чином:
У регістрі 0CF8h задається адрес...