Читайте также:
|
|
(Типи процесорів та їх розпізнавання. Кількість та характеристики портів В/В)
Якщо ваша програма працює з пристроями комп’ютера на низькому рівні або використовує які-небудь апаратні особливості периферії, вона повинна «вміти» визначати конфігурацію апаратних засобів. В комп’ютері можуть бути встановлені різноманітні процесори та різні системи BIOS. Що стосується номенклатури периферійних пристроїв, таких як мережеві контролери, відеоадаптери,мережеві та звукові адаптери, то вона практично безмежна.
Можна виділити три основних підходи до визначення складу та основних характеристик зовнішніх пристроїв ПК:
1. Без ОС – ваша програма завантажується при старті комп’ютера та дізнається інформацію про систему отримавши її з області даних BIOS.
2. Використовуючи ОС – отримати інформацію про систему з області даних BIOS або з енергонезалежної пам’яті CMOS.
3. Дізнатися інформацію у самої операційної системи. Наприклад, у операційних систем сімейства Windows така інформація знаходиться в реєстрі, звідки без жодних проблем її можна прочитати.
Для найбільш розповсюджених моделей персональних комп’ютерів конфігурація апаратних засобів задається встановленням перемичок на системній платі (motherboard) та платах контролерів периферійних пристроїв, а також записується в область даних BIOS та в енергонезалежну пам'ять CMOS спеціальною програмою BIOS Setup.
Далі розглянемо засоби BIOS, що дозволяють визначити конфігурацію комп’ютера.
Визначення конфігурації за допомогою BIOS
Під час ініціалізації системи BIOS опитує порти, до яких підключені перемички, та визначає вміст комірок пам’яті CMOS, що містять інформацію про конфігурацію комп’ютера. Результат записується в область даних BIOS, звідки програма може прочитати за допомогою переривань BIOS.
Відомості про наявність основних пристроїв комп’ютера записується в область даних BIOS з адресою 0000:0410 розміром в двобайтове слово – слово конфігурації. За допомогою переривання INT 11h програма може отримати в регістрі AX слово конфігурації з вказаної вище області даних BIOS.
Біти регістра AX | Вміст |
В системі встановлений накопичувач на магнітному диску (НМД) | |
В системі встановлений арифметичний співпроцесор | |
2 – 3 (всі моделі, крім IBM PS/2) | Кількість банків оперативної пам’яті на системній платі. Для комп’ютера IBM PC розмір одного банка рівний 16 Кбайт, для IBM PC/XT – 64 Кбайт. Для визначення об’єму оперативної пам’яті сучасних комп’ютерів слід використовувати інші засоби |
2 (IBM PS/2) | Комп’ютер IBM PS/2 обладнаний мишею |
3 (IBM PS/2) | Не використовується в IBM PS/2 |
4 – 5 | Початковий режим відеоадаптера: 00 – EGA або VGA 01 – кольоровий, 40x25 10 – кольоровий, 80x25 11 – монохромний, 80x25 |
6 – 7 | Кількість встановлених накопичувачів на гнучких магнітних дисках (НГМД) |
Встановлено контролер прямого доступу до DMA | |
9 – 11 | Кількість встановлених асинхронних послідовних портів |
Встановлений ігровий порт | |
Встановлений послідовний порт | |
14 – 15 | Кількість встановлених паралельних адаптерів |
Наявність НМД
Зараз вже важко знайти комп’ютер, в якому не було би жорсткого диску. Тим не менш, аналізуючи біт слова конфігурації, отриманого в регістрі AX від переривання INT 11h, ви можете визначити, чи обладнаний даний комп’ютер жорстким диском. Якщо цей біт встановленій в одиницю, то обладнаний, якщо ні – жорсткий диск відсутній.
Наявність арифметичного співпроцесора
До появи процесора i486 арифметичний співпроцесор, що значно прискорює розрахунки з плаваючою крапкою, був необов’язковим пристроєм. На системній платі комп’ютера для нього передбачалося окреме гніздо.
Аналізуючи біт з номером 1 в значенні, отриманому в регістрі AX від переривання INT 11h, ви можете визначити факт наявності в системі арифметичного співпроцесора.
Початковий режим роботи відеоадаптера
Біти з номерами 4 і 5 слова конфігурації містять номер початкового режиму відеоадаптера. В сучасних комп’ютерах застосовується, як правило, режим з номером 10b - кольоровий, 80 текстових рядків по 25 символів у кожному рядку.
Кількість встановлених НГМД
Поле розміром два біта з номерами 6 та 7 містить кількість накопичувачів НГМД, встановлених в системі, мінус одиниця. Тобто, якщо в комп’ютері встановлений один НГМД, в цьому полі записано нульове значення, якщо два – значення 1 і так далі.
Сучасні моделі комп’ютерів зазвичай обладнані одним НГМД, призначеним для читання дискет розміром 3,5.
Наявність контролера прямого доступу DMA
Контролер прямого доступу DMA застосовується для безпосередньої передачі даних з периферійних пристроїв в оперативну пам'ять комп’ютера, минаючи центральний процесор. Цей контролер є у всіх сучасних комп’ютерів, тому біт з номером 8 зазвичай встановлений в одиницю.
Кількість асинхронних послідовних адаптерів
В полі, утвореним бітами 9, 10 та 11, зберігається кількість асинхронних послідовних адаптерів, встановлених в системі та виявлених BIOS в процесі ініціалізації.
Ігровий адаптер
Якщо встановлений біт з номером 12, то до комп’ютера під’єднаний ігровий адаптер, призначений для джойстика.
Кількість паралельних адаптерів
В полі, утвореним бітами 14 та 15, записується кількість паралельних адаптерів, виявлених на етапі ініціалізації.
Конфігурація в пам’яті CMOS
Для збереження поточної конфігурації апаратних засобів використовується енергонезалежна пам'ять CMOS. Ця пам'ять складається із набору комірок, доступ до яких для читання чи запису виконується через порти вводу і виводу з адресами 70h та 71h.
Процедура читання комірки пам'яті CMOS складається з двох кроків. На першому кроці програма записує в вихідний порт за адресою 70h номер комірки, з якої необхідно прочитати інформацію. На другому кроці програма читає вмістиме даної комірки з вихідного порту за адресою 71h:
int nCellContent;
outp(0x70, nCell);
nCellContent = inp(0x71);
Запис даних в комірку пам'яті CMOS виконується аналогічно, тільки після запису номеру комірки в порт 70h програма повинна записати нове значення для цієї комірки в порт за адресою 71h:
outp(0x70, nCell);
outp(0x71, nNewValue);
В пам'яті CMOS зберігається поточна дата та час, відомості про конфігурацію системи, результат тестування при включенні живлення та інша інформація, приведена нижче:
Адреса комірки | Вмістиме |
00h - 0Dh | Використовується годинником реального часу |
0Eh | Байт стану діагностики при включенні живлення |
0Fh | Байт стану відключення |
10h | Тип НГМД |
11h | Зарезервовано |
12h | Тип НМД (якщо менше 15) |
13h | Зарезервовано |
14h | Конфігурація обладнання |
15h - 16h | Об'єм основної пам'яті |
17h - 18h | Об'єм розширеної пам'яті |
19h | Тип першого НМД (якщо він більше 15) |
1Ah | Тип другого НМД (якщо він більше 15) |
1Bh - 20h | Зарезервовано |
21h - 2Dh | Зарезервовано |
2Eh - 2Fh | Контрольна сума комірок 10h - 20h |
30h - 31h | Об'єм розширеної пам'яті |
32h | Поточне століття в двійково-десятковому коді (19h для 19-го століття) |
33h | Різна інформація |
34h - 3Fh | Зарезервовано |
Розглянемо детальніше призначення окремих комірок пам'яті CMOS.
00h - 0Dh – область годинника реального часу
Комірки з адресами 00h - 0Dh використовуються годинником реального часу.
0Eh – байт діагностики
Байт діагностики (розміщений в пам'яті CMOS за адресою 0Eh) містить результати виконання діагностики при включенні живлення комп’ютера. Проаналізувавши вмістиме байта 0Eh, програма може виявити несправність НМД, годинника реального часу, розрядку акумулятора та помилки в конфігурації. Приведемо формат цього байта:
Біт | Опис |
0-1 | Не використовується, рівно 0 |
0 – неправильне встановлення годинника реального часу 1 – годинник реального часу встановлено | |
0 - НМД справний; 1 - несправність НМД, неможливо завантажити операційну систему з жорсткого диску | |
0 - розмір оперативної пам'яті вказаний правильно; 1 - фактичний розмір оперативної пам'яті не відповідає вказаному в пам'яті CMOS | |
0 - конфігурація вказано правильно; 1 – помилка в конфігурації системи, фактична конфігурація не відповідає вказаній в байті конфігурації обладнання (комірка 14h) | |
0 - контрольна сума пам'яті CMOS правильна; 1 – помилка в контрольній сумі пам'яті CMOS | |
0 – акумулятор, що живить пам'ять CMOS, справний и заряджений; 1 - розрядка акумулятора вище за норму |
10h – тип накопичувачів НГМД
Молодша і старша тетради першого байту описують, відповідно, другий та перший НГМД:
Значення | Ємність НГМД |
НГМД не встановлено | |
360 Кбайт | |
1,2 Мбайт | |
720 Кбайт | |
1.44 Мбайт |
12h – тип першого та другого НМД
Цей байт розділений на дві тетради аналогічно байту, що описує НГМД. Однак в тетраді можна закодувати тільки 16 різних значень, а типів НМД значно більше. Тому тип 15 використовується спеціальним чином – якщо тип НМД в молодшій тетраді (перший фізичним НМД) рівний 15, то правильне значення типу знаходиться в паняті CMOS за адресою 19h. Аналогічно для другого фізичного НМД цей тип можна прочитати з байту за адресою 1Ah (якщо старша тетрада байту за адресою 12h більша 15).
В сучасних комп’ютерах встановлені НМД з інтерфейсами IDE чи SCSI.
В першому випадку тип диску встановлюється рівним 47. Це означає, що фактичні параметри диску зберігаються в старших комірках пам'яті CMOS, номера котрих залежать від виробника и версії BIOS.
Тип НМД з інтерфейсом SCSI задається як 1 або 0. Фактичні параметри НМД визначаються BIOS, розміщеній в контролері SCSI.
13h – зарезервовано
Ця комірка пам’яті CMOS зарезервована.
14h – конфігурація обладнання
В цьому байті знаходиться інформація про кількість встановлених НГМД, про наявність арифметичного співпроцесора, а також про тип відеоадаптера, підключеного до системи. Приведемо фотмат байта конфігурації:
Біт | Опис |
1 - в системі встановлені НГМД; 0 - НГМД не використовуються | |
1 – встановлений арифметичний співпроцесор; 0 – арифметичний співпроцесор не встановлено | |
2-3 | не використовуються, рівні 0 |
4-5 | Тип відеоадаптера и відеорежим: 00 - не використовується або EGA; 01 - CGA, EGA, VGA в режимі 40x25; 10 - CGA, EGA, VGA в режимі 80x25; 11 – монохромний відеоадаптер |
6-7 | Кількість встановлених НГМД, зменшене на одиницю; 00 – один НГМД; 01 – два НГМД; 10 – три НГМД; 11 – чотири НГМД |
15h-16h – об’єм стандартної оперативної пам'яті
Комірка 15h містить молодший байт, а комірка 16h - старший байт об’єму основної пам'яті, наприклад:
· 0100h – 256 Кбайт;
· 0200h – 512 Кбайт;
· 0280h – 640 Кбайт
17h-18h – об’єм розширеної пам'яті
Комірки 17h и 18h містять, відповідно, молодший и старший байти розміру розширеної пам'яті (розміщеної вище границі 1 Мбайт) в кілобайтах.
19h-1Ah – тип першого та другого НМД
Ці комірки містять типи, відповідно, першого та другого НМД, якщо відповідний тип має значення більше 15 (див. опис комірки 12h).
1Bh-2Dh – зарезервовано
Ці комірки пам'яті CMOS зарезервовані.
2Eh-2Fh – контрольна сума комірок 10h - 20h
Для комірок пам'яті CMOS з адресами від 10h до 20h при ініціалізації система BIOS виконує повірку контрольної суми. Ця контрольна сума зберігається також в пам'яті CMOS в комірках 2Eh та 2Fh (відповідно старший та молодший байти).
30h-31h – об’єм розширеної пам'яті
Комірки 30h та 31h містять, відповідно, молодший та старший байти розміру розширеної пам'яті (розміщеної вище границі 1 Мбайт) в кілобайтах.
Це значення дублює значення, записане в комірках з адресами 17h-18h.
Визначення типу і характеристик процесора
Для кваліфікованого й ефективного використання персонального комп'ютера важливо знати:
· тип процесора;
· частоту процесора для однакової часової затримки на різних комп’ютерах, а також для налаштування роботи програми, виходячи з частоти та типу процесора;
· працює процесор в «штатному» чи «розігнаному» режимі;
· чи може даний мікропроцесор виконати ту чи іншу інструкцію: наприклад, якщо частина програми оптимізована під MMX або SEE, то перед виконанням цієї оптимізованої частини важливо впевнитися в тому, що процесор підтримує цю технологію.
Така інформація також необхідна для виявлення системних проблем, зв’язаних з роботою програм на різноманітних процесорах.
Розглянемо спосіб визначення типу процесора за допомогою інструкції CPUID, котра визначає:
· виробника процесора;
· підтримку процесором відповідних технологій;
· інформацію про тип і розмір кеш-пам’яті 1-го, 2-го та 3-го рівнів процесора, а також інформацію про TLB-буфери процесора;
· назву процесора і його частоту (в деяких випадках);
Для використання цієї функції перевіряється чи підтримується вона процесором, що тестується. Це визначається можливістю програмної зміни 21-го біту регістра EFLAGS, котра свідчить про підтримку процесором інструкції CPUID.
Наступним кроком є запуск CPUID (при eax=0). Це дозволяє дізнатися про виробника і кількість підтримуваних стандартних рівнів інструкції CPUID. Далі необхідно виконати CPUID для цих рівнів та зберегти всю отриману інформацію.
Назва процесора в загальному випадку визначається в порядку пріоритетності наступним чином:
1. Визначається виробник процесора, в основному за допомогою інструкції CPUID при eax=0 (стрічка назви виробника записується в регістри ebx, edx, ecx).
2. Назву процесора намагаємося отримати з Brand String (стрічка назви процесора міститься в регістрах eax, ebx, ecx після виконання інструкції CPUID при eax=0x80000002h, eax=0x80000003h, eax=0x80000004h), вона підтримується якщо інструкція CPUID при eax=0x80000000h повертає в eax число не менше за 0x80000004h.
3. Якщо Brand String не підтримується, то перевіряється Brand ID. Ненульове значення Brand ID свідчить про підтримку Brand ID. Тоді по таблицям значень Brand ID для відповідного виробника ідентифікується тип процесора.
4. Інакше визначається тип процесора по його сигнатурі (бітовому масиву, що містить інформацію про сімейство, модель, степпінг). При цьому необхідно також враховувати і виробника, так як деякі процесори, наприклад, Celeron, Pentium II можуть мати однакову сигнатуру.
Для визначення тактової частоти процесора в загальному випадку потрібно:
1) Вияснити чи підтримує процесор TSC 64-бітний лічильник реального часу, для чого перевіряється 4й біт регістра edx після виконання інструкції CPUID з параметром 1.
2) Якщо процесор працює з цим лічильником, то необхідно отримати поточне значення лічильника за допомогою функції rdtsc (ReaD from Time Stamp Counter); при цьому 64-бітне значення лічильника поміщується в регістри edx та eax;
3) Після цього зробити затримку на протязі деякого проміжку часу
4) Зчитати нове значення лічильника за допомогою функції rdtsc
5) Визначити різницю отриманих значень
6) Отримати частоту в мегагерцах розділивши різницю на час затримки і мікросекундах
Ось деякі ідентифікатори виробників процесорів:
ASCii-стрічка | HEX-значення EBX:EDX:ECX | Назва виробника |
"GenuineIntel" | 756E6547:49656E69:6C65746E | Intel |
"AuthenticAMD" | 68747541:69746E65:444D4163 | AMD |
"CyrixInstead" | 69727943:736E4978:64616574 | Cyrix |
"CentaurHauls" | 746E6543:48727561:736C7561 | Centaur |
"SiS SiS SiS " | 20536953:20536953:20536953 | SiS |
"NexGenDriven" | 4778654E:72446E65:6E657669 | NexGen |
"GenuineTMx86" | 756E6547:54656E69:3638784D | Transmeta |
"RiseRiseRise" | 65736952:65736952:65736952 | Rise |
"UMC UMC UMC " | 20434D55:20434D55:20434D55 | UMC |
"Geode by NSC" | 646F6547:79622065:43534E20 | National Semiconductor |
Паралельний адаптер
Розглянемо тепер такий розповсюджений периферійний пристрій як паралельний адаптер. Таки адаптер є практично в будь-якому комп’ютері і зазвичай використовується для підключення принтеру. Тільки в портативних комп’ютерах, де принтер підключається через USB (англ. Universal Serial Bus — «універсальна послідовна шина»), паралельний адаптер відсутній.
Базова системи вводу/виводу BIOS може працювати з трьома паралельними адаптерами. В процесі тестування та ініціалізації системи BIOS знаходить працездатні адаптери та записує їх базові адреси в таблицю. Таблиця базових адрес знаходиться в області даних BIOS за адресою 0000:0408h та може містити наступні значення:
· 378h – паралельний адаптер LPT1;
· 278h – паралельний адаптер LPT2;
· 3BCh – паралельний адаптер на платі адаптера монохромного дисплею (зараз це практично музейні експонати).
Паралельні адаптери можуть виробляти запити на переривання:
· LPT1- IRQ7, INT 0Fh;
· LPT2- IRQ5, INT 0Dh
Дата добавления: 2015-07-08; просмотров: 475 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Комп'ютерна миша | | | Функції BIOS для роботи з принтером |