Курсовая работа: Розробка програмного забезпечення для визначення інформації про жорсткий диск використовуючи
Таблиця 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 і т.д. ;
- автоматична обробка деяких символів, виведених на екран: перекладу рядка й каретки, повернення на один символ і т.д..