а пристрою на шині, після чого з OCFCh зчитуються (записуються) дані.
Координати пристрою на шині (формат 0CF8h) виглядають так:
В
Рисунок 2 - Координати пристрою на PCI шині
-й біт показує достовірність інформації в регістрі, там повинен бути 1.Number - номер шини PCI. (Їх цілком може бути декілька, наприклад порт AGP використовує не ту шину, до якої підключені слоти PCI). Number - номер пристрою на шині
Function Number - номер функції пристрою (тут треба трохи визначиться з термінологією, справа в тому що під функцією і розуміємо пристрій, тоді так під пристроєм (device) мається на увазі абонент шини, тобто, якщо, наприклад, є карта в якій поєднані 2-яких пристрою, то вона буде сприйматися як один пристрій з двома функціями, причому навіть таке В«однофункційнийВ» як відеокарта може мати безліч функцій). Це розподіл на пристрої і функції в більшості випадків просто логічне, В«основнеВ» пристрій відповідає функції 0.Number - номер регістра конфігураційного простору який слід прочитати (записати). (Взагалі використовується все поле до 0 - го біта, але оскільки обмін здійснюється подвійними словами (4 байти) то виходить що молодші 2 біта завжди нульові). p align="justify"> Для того щоб визначити виробника потрібно подивитися на карту конфігураційного простору:
В
Малюнок 3 - Карта конфігураційного простору
Поля позначені жовтим кольором повинні бути присутніми у всіх
пристроїв, саме там і зберігається інформація про те, що це за пристрій і хто його виробник. Нас будуть цікавити 2 поля: - код виробника. - Код пристрою. p align="justify"> Якщо ж щось прочитати з простору реально не існуючого устрою, то прочитається спеціально зарезервоване для цієї мети значення OFFFFFFFFh.
З цього всього можна зробити такий висновок: щоб знайти всі пристрої потрібно в циклі (змінюючи Bus від нуля до 255, dev від 0 до 31, func від нуля до 7) читати їх конфігураційні простору, якщо прочитати OFFFFFFFFh, значить пристрою немає, якщо ж Прочитавши щось інше - пристрій присутня.
Ось приклад процедури використовується в даній роботі і читаючої з конфігураційного простору PCI.
Номер функції задається в BL, номер пристрою в ВИ, функція в CL, і зсув (номер регістру) в СН.
PROC NEAR mov dx, 0CF8h xor eax, eax mov al, blah, 80h; Біт достовірності в 1eax, 16ah, bhah, 3ah, clal, chal, 0FCh; Скинути 2 молодших бітаdx, eaxdx, 0CFCheax , dxPCIENDP
До курсової роботи додається файл в якому описані коди VendorlD і DevicelD
Висновок
Дану роботу можна вважати повноцінною програмою. Для її написання необхідне розуміння структури ЕОМ і ОС, в якій вона повинна працювати, розуміння принципу роботи апаратних прис...