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 |
BSY - ???????? ???????? ?????????? ???????.DRDY - ???????? ??????? ?? ??????? ???????.DF - ???????? ??????????.DSC - ????? ??????????.DRQ - ???????? ??????? ?? ?????? ??????.CORR - ???? ???????, ??? ???? ???? ????????????.?DX - ? ?????? ???????? ???????? ?? ???????, ??? ??? ???????? ??? ?????????, ? ???? ????? ??????? - ?????? ???? ??????????.ERR - ? ??????? ????????? ???????, ???? ???????? ???????, ??? ???? - ?????? 1F1h.? ???? ??????????????? ?????? ???? BSY, DRDY ? DRQ. ???? ? ??????????? ??? ? ???????, ?? ???? ???? ??? ?? ????????????.???? 3F6h - ? ????? ???????????????? ?????? ???? 1 ? 2.1 - ??????????? ??? ???????? ??????????, 0 - ?????????.2 - ????????? ???????? ???? ??????????? ?? ?????? ????????? (??? ????????? ???? ? 1). ???????? P? (Programmable ?nput/Output) ??????? ? ????????? ???????? ?????????? (??? ?????? ??? ??????????): - ?????????? ?????????? ???????? (BSY=0) - ???????? ? DEV ????? ???????? ?? ??????. - ?????????? BSY=0, DRDY=1 ???????? 1F7h ??? 3F6h (??? ??????? ??????). - ???????? ? ???????? ???? ?????????. - ???????? ? ??????? ??????? ??? ????????. - ?????? ??????? ??????? ???? ???????? ?? ?????????? BSY=0. - ?????????? ?????????? ?????? ?????? (DRQ=1) - ???????? ????. ???? BSY ???????????? ? 1, ?????? ?????? ?? ?????, ????? ????????, ???? ????????? ??????????? ? ???? ????? ?? ??????, ??????? BSY = 1 ?????? ?? ?????????? ??????, ? ?? ????????. ? ????? ???????? ??????? ? ??????????? ?????? ???? ????????? ?? ?????? ?????? - ???? ??? ?????????? ?? ????? - ?? ???? ????????, ????????, ??? ???? ??????????? ?? ?????? ???????? ???????????, ???? ?? ???? ?????????? ??? BSY ??? ?????. DRDY = 1 ???????, ?? ???? ??????? ?? ??????? ??????, ???????? ?????????? ?? ????????? ?????? ????? ???? ??????? ??????????? ????? ?????? ???????? ?? ??????: ??? ??????? ?????????? ???? ??????????? ???????? ????????. DRQ = 1 ????????, ?? ???? ??????? ?? ?????? ??????. ??????? ???????? ??????? ??? DRDY ? DRQ. ϳ??? ??????? ??????? ? ????, ???????? ?????????? DRDY = 0, ?? ?????? ?? ?????????? ???????? ?????????? ???????, ? ?????? ????? ????, ?? ???? ?????? ???????? ? ?????????? ?????, ???????? ?????????? DRQ = 1, ??? ????? ? ????????? ?? ????????????, ?? ???????? ??????? ? ??????? ???? ??????? ?? ??????? ????????? ???????. ??? ?????? ? ?????????????, ?? ?????????? ????????? ??????? ???????? ?????????? ????? ??????????? ? ???? ?????????? ??????? ??????? ??? ???? ?????? (???????? ???? ? ????????? ? ?????). ? ?????? DMA ????? ???????????? ?? ?????? DMA, ?? ??????? ???? ?????? ??? ???????????? ??????. ϳ??? ??????? ??????? ???????? ?????????? ????? DMA ? ??????? ???? ?? ??????. ???? ?????????, ?? ?????? DMA ??????? ?????? ? ?????????????? ????????, ???? ????????? ? ??? ?????????, ???? ?????????? ?????????? ??????????, ????? ??? ????????? DMA ???????? ???? ???????????? ?? ???? ????????, ? ???? ???? ?????? ??????, ???????? ?????????? ??????? ???????????. ? ???????????? ?? ????? P? ? ?????? ???????? ???? ??????????? ????? ?????? ????????? ?????? ??????.??????? ATA ?????? ???? ??????, ?????? ???????????????? ??????? 20, ??? ??????? ? ??? ???????????????? ?????? 10 ????. ?????????? ??????? ???????\?????? ?????? ???????, ????????????? ????????????, ? ????? ??????? ??????? ??????????. ??? ???????? ?????????? ?? Master ???????? ??????? ??????, ??? ??????? ?? ????? ????? ?????????? ?? ???? - ???? ????????????. ??????? ???????? ? ?????????? ???????? ? ????? ??????: - ?????????? ??????????? ??????? ? 3F6h - ?????????? ?????????? ?????? ??????? ??? BSY ? ????? 1F7h - ??????? ???????? ?? ?????? ??????? ? 1F6h - ?????????? DRDY = 1 ? BSY = 0 - ??????????? LBA ?????? - ??????? ??????? ??????? (20h) - ?????????? BSY = 0 - ?????????? ?????????? ?????? ?????? (DRQ = 1) - ???????? ???? ??? ???????? ????? 1F0h ????????? ????????? ???????? ? ?????- ????????? ??????????? ??? ???????? ?? ??? ???? ?? ??????. (?????????????? - ?????? ? ES?, ES = DS, ? ???????? ????? ????? ??????? 512 ????, 28 ??? ES? ??????? ????????). ? ???? ?????? ??????, ??????? ??????? 20h ? ???????? ??????? ???? ?????? ???????, ? ??????????? (? ? ?????? ?????? ?????????) ????????? ??????????? ????? ???????? 1F2h (????????? ??? ???????? ???????? ?? ?????????) ?? ?? ?? ?? ???????, ????? ?????? ?????????? ??????????, ? ???? ????'?????? ???????? ???? ????????????? ? 1.
Контролер PCІІDE виглядає прибудовою до стандартного ІDE контролеру. Ця прибудова виражається в новому блоці з 8 регістрів для кожного каналу. Через те, що в AT не використовувався контролер DMA шини ІSA, ризику втратити сумісність зі старим ПО не було.
Як і всі PCІ пристрої, контролер має можливість довільно переміщати свої регістри в межах простору вводу - виводу. Базова адреса задається в заголовку конфігураційного простору по наступних зсувах 32 - бітних слів:
10h - блок командних регістрів першого каналу ІDE.
14h - блок керуючих регістрів першого каналу.
18h - блок командних регістрів другого каналу ІDE.
1Ch - блок керуючих регістрів другого каналу.
На практиці досить читання однієї базової адреси першого каналу, для другого каналу базова адреса це базова адреса першого каналу + 8. Байти зі зсувами 1,3 зарезервовані для обох каналів.(Таблиця 4)
Таблиця 4 - Контролер PCІІDE.
Зсув | Регістр |
0 | Командний регістр |
1 | Зарезервований |
2 | Регістр стану |
3 | Зарезервований |
4 | Покажчик на PRDT (регістр 32 бітний) |
Контролер може працювати у двох режимах: режимі сумісності (у цьому випадку регістри PCІІDE настроєні на області 1F0h - 1F7h і 170h - 177h) і в "рідному" (natіve) режимі. В "рідному" режимі регістри можуть мати довільні адреси. Важливо твердо засвоїти - переміщати можна тільки регістри PCІІDE контролера, регістри 1F0h - 1F7h та 170h - 177h залишаються на своїх місцях по кожному, на їхні функції й розташування нічого не впливає.
К-во Просмотров: 283
Бесплатно скачать Курсовая работа: Розробка програмного забезпечення для визначення інформації про жорсткий диск використовуючи