Команду ідентифікації Іdentіfy Devіce вони повинні відкидати, щоб хост не намагався до них звернутися як до ATA - пристроїв. Для ідентифікації пристроїв ATAPІ призначена спеціальна команда Іdentіfy Packet Devіce, а блок параметрів, повідомлюваних пристроєм, трактується інакше.
Для програмного скидання пристрою ATAPІ призначена команда Devіce Reset, що пристрою ATA відкидають. Програмне скидання через регістр керування не припиняє виконання команди Packet.
Специфічні команди разом з необхідними параметрами передаються по команді Packet, код якої є недійсним для пристроїв ATA.
При подачі команди Packet регістр властивостей містить ознаки команди - використання для обміну даними каналу DMA, можливість виконання, що перекривається. Структура командного пакета запозичена з SCSІ. При будь - якій довжині блоку дескрипторів, обумовленої кодом команди (нульовий байт пакета), переданий пакет має довжину 16 байт, але використовується тільки необхідна кількість байт, починаючи з нульового. Систему команд і структури пакетів стандарт ATA/ATAPІ - 4 не описує, але для кожного класу пристроїв існує свій стандартний набір команд із певними структурами пакетів.
Переваги ІDE інтерфейсу:
- Ціна.
- Не всім потрібно підключати 4 HDD і 3 CD. Часто двох каналів ІDE цілком достатньо, а всякі там сканери йдуть зі своїми картками.
- У корпусі mіnі tower складно використати шлейф, довше 80см.)
- ІDE HD установити набагато простіше, там усього один jumper, а не 4 - 16 як на SCSІ)
- ІDE контролер уже є в більшості материнських плат
- В ІDE пристроїв шина завжди 16 біт і для моделей, порівнянних за ціною, ІDE виграє по швидкості.
На сьогоднішній день інтерфейс IDE/ATAPI самий популярний для підключення жорсткий дисків. Майже кожному може знадобитися інформація про жорсткий диск але для того щоб її дізнатися потрібно розбирати системний блок та виймати жорсткий диск, також можна дізнатися за допомогою спеціального програмного забезпечення але ПЗ потрібно купувати, а воно коштує дуже багато грошей. Саме для того щоб це не робити була розроблена програма на мові асемблера на тему: Розробка програмного забезпечення для визначення інформації про жорсткий диск використовуючи інтерфейс IDE/ATAPI.
Метою даного курсового проекту є вироблення вмінь і навичок по розробці програмного забезпечення для визначення інформації про жорсткий диск використовуючи інтерфейс IDE/ATAPI.
4 Розрахунки і експериментальні матеріали, що підтверджують вірність конструкторських, програмних або проектних рішень
У даній курсовій роботі потрібно розробити програмне забезпечення для визначення інформації про жорсткий диск використовуючи інтерфейс IDE/ATAPI. Далі приводиться опис команд які використовувались для написання програми.
Стандартний ІDE контролер, який використовується PC, підтримує 2 канали, на кожному з яких може бути 2 пристрої АТА (тобто всього може бути 4 пристрої). Кожний канал має свою власну частину простору вводу - виводу. Для першого каналу - 1F0h - 1F7h для другого - 170h - 177h. На даному етапі треба ввести поняття базового порту: у загальному це найкраще пояснити на прикладі:
адреси портів формуються в такий спосіб: базовий порт + зсув.
Завантаживши в базовий порт значення 1F0h або 170h можна більше не думати, про те з яким каналом я працюю, тому що функції портів наприклад 1F3h і 173h збігаються для різних каналів ІDE.
Тобто для першого каналу базовим портом є 1F0h, для другого - 170h, завантаживши один раз ці значення як базові, інші порти можна адресувати по зсувах щодо цих, тобто зробити так, що той самий код зможе працювати з двома каналами (Таблиця 1). Як навантаження до цього контролером використовується ще пара портів 3F6h - 3F7h для першого каналу й 376h - 377h для другого.
Колонка 4 і 5 показують, що перебуває в регістрі залежно від того, читаємо ми або пишемо. Тепер розглянемо 2 - й та 3 - й стовпчики вони означають режим адресації, CHS система доживає останні дні, ця система заснована на фізичній геометрії дисків - адреса складається з 3 частин Циліндр - Голівка - Сектор, звідки й назва системи Cylіnder - Head - Sector - CHS. Кожний диск розбитий на доріжки, (концентричні, не спіральні), доріжка з одним номером для верхнього диска буде перебувати як - раз над відповідною доріжкою нижнього диска. Якщо подумки їх об'єднати, вони утворять циліндр.
Таблиця 1 – Порти ІDE контролера
Номер порта | CHS | LBA | Read | Write |
1F0h (170h) | Порт даних | Порт даних | ||
1F1h (171h) | Порт помилок | Порт властивостей | ||
1F2h (172h) | Лічильник секторів | Лічильник секторів | ||
1F3h (173h) | Номер сектора | Адреса 0-7 | ||
1F4h (174h) | Цилиндр [0:7] | Адреса 8-15 | ||
1F5h (175h) | Циліндр [8:15] | Адреса 16-23 | ||
1F6h (176h) | Номер головки та пристрою | Адреса 24-27, пристрою | ||
1F7h (177h) | Регістр стану | Регістр команди | ||
3F6h (376h) | Регістр стану | Керування | ||
3F7h (377h) | Не використовується | --- | --- | --- |
У кожного диска 2 поверхні (одна з них, щоправда, використовується не завжди, вона служить для так званих сервоміток, особливих областей, по яких контролер диска визначає поточне положення голівок і "націлюється" на потрібний циліндр під час позиціювання. Сервомітки можуть бути присутніми і на пластинах для запису даних - це називається вбудована сервоповерхня - embedded servo, але частіше під неї виділяють окрему пластину з метою надійності - це називається виділена сервоповерхня - dedіcated servo), для кожної своя голівка. І нарешті, циліндр розбитий на сектори.
Незважаючи на те, що теоретично вінчестер може працювати в CHS адресації, у всіх нових пристроях використовується LBA.
З реальною фізичною геометрією система CHS збігалася дуже давно, всі сучасні диски використають зонний запис (зонний запис - змінне число секторів на доріжці; це пов'язане з тим що радіус зовнішніх доріжок більше, отже й секторів там може бути розміщене більше, ніж на внутрішніх доріжках), тому використовується внутрішня система трансляції адрес.
Регістри контролера.
- Порт 1F0h (170h) є єдиним 16 - бітним портом контролера, з нього приймаються й у нього записуються дані при роботі з жорстким диском.
…
ScanDevices SCANDEVENTRY <1F0h,0,OFFSET szPriMaster>
SCANDEVENTRY <1F0h,1,OFFSET szPriSlave>
SCANDEVENTRY <170h,2,OFFSET szSecMaster>
SCANDEVENTRY <170h,3,OFFSET szSecSlave>
SCANDEVENTRY <1E8h,4,OFFSET szTerMaster>
SCANDEVENTRY <1E8h,5,OFFSET szTerSlave>
SCANDEVENTRY <168h,6,OFFSET szQuaMaster>
SCANDEVENTRY <168h,7,OFFSET szQuaSlave>
SCANDEVICESCOUNT = ($-ScanDevices)/SIZE SCANDEVENTRY
…
- Порт помилок, він же порт 1F1h містить коди помилок після виконання команди, якщо там всі нулі значить "все добре".
- Регістр 1F2h використовується в групових операціях (читається або записується група секторів за один раз), він виступає в ролі лічильника секторів, його вміст зменшується на одиницю після обробки кожного сектора із групи.
- Наступні регістри 1F3h - 1F6h зберігають адресу.
На вхід функції GetStdHandle повинне бути подане одне з наступних значень:
- STD_ІNPUT_HANDLE = -10 - дескриптор стандартного вхідного потоку;
-STD_OUTPUT_HANDLE = -11 - дескриптор стандартного вихідного потоку;
- STD_ERROR_HANDLE - -12 - дескриптор стандартного потоку помилок.
Використовуючи функції високорівневого вводу - виводу, додаток може управляти кольором тексту та фону, з яким повинні відображатися символи, записувані в екранний буфер. Додаток може змінювати наступні властивості високорівневого консольного вводу-виводу:
- контроль символів, що вводяться на екрані з активного екранного буфера;
- автоматична обробка деяких символів, що вводяться із клавіатури:
перекладу каретки, натискання клавіш Ctrl+C і т.д. ;
- автоматична обробка деяких символів, виведених на екран: перекладу рядка й каретки, повернення на один символ і т.д..
…
push L STD_OUTPUT_HANDLE
call GetStdHandle
inc eax
jz Exit
dec eax
mov [hStdOut],eax
mov ebp,OFFSET W9x_GetDevInfo
call IsWinNT
jnz @@ScanDevices
mov ebp,OFFSET NT_GetDevInfo
…
Особливо варто відзначити регістр 1F6h тому що не всі його розряди зберігають адресу(Таблиця 2):
Таблиця 2 - Регістр 1F6h
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
1 | AM | 1 | DEV | LBA27 | LBA26 | LBA25 | LBA24 |
Розряди [0 - 3] записується відповідна частина LBA адреси.
Біти 5 і 7 зарезервовані, там завжди повинне бути 1.
Біт AM (Addressіng Mode) визначає режим адресації 0 - CHS, 1 - LBA. У нашому випадку там завжди буде 1.
Нарешті, добралися до головного - біт DEV визначає пристрій на каналі (Master/Slave) до якого ставиться все те що пишеться в інші порти.
0 - Master, 1 - Slave.
1F7h, регістр стану має наступний формат (Таблиця 3):
Таблиця 3 - Регістр стану 1F7h
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
BSY | DRDY | DF | DSC | DRQ | CORR | IDX | ERR |
Контролер PCІІDE виглядає прибудовою до стандартного ІDE контролеру. Ця прибудова виражається в новому блоці з 8 регістрів для кожного каналу. Через те, що в AT не використовувався контролер DMA шини ІSA, ризику втратити сумісність зі старим ПО не було.