Програмування CMOS, Assembler, Програмування, статті

Д.Крупорніцкій

Вся інформація, представлена ​​в даній статті несе тільки інформативні цілі. Автор не несе відповідальності за некоректне використання наведених нижче фактів.

ВСТУП

В епоху інтенсивного розвитку високих технологій і технологій Internet програмування для «заліза» відійшло на другий план. А тим часом практично неможливо реалізувати нічого вартого без правильної конфігурації обладнання, в Зокрема CMOS – енергонезалежній пам’яті комп’ютера. У даній статті ми розглянемо пристрій CMOS, його структуру та можливості програмування. Відразу обмовлюся, що програмувати CMOS бажано з реального режиму ОС; під ОС Windows це робиться за допомогою спеціальних драйверів VxD або SYS. В Мережі існує достатньо джерел документації з побудови таких, тому я на них зупинятися не буду. Природно, що проводити всі нижче перераховані дії по записи значень в CMOS слід з особливою обережністю, іноді (!) Можна втратити практично всі значення конфігурації ПК. В такому випадку необхідно очистити CMOS; як це зробити – дивіться в документації до вашої материнської плати. Також я буду використовувати мова асемблера для ілюстрації конкретних прикладів, а так само широко поширений відладчик DEBUG.EXE, який додається практично з кожною версією ОС Windows / DOS.

ДАНІ CMOS

CMOS є щось зразок бази даних, яка призначена для зберігання інформації про конфігурацію ПК. Однак, в відміну від реальної БД, яка має реальний образ на магнітному носії, CMOS зберігає свої дані на мікросхемі багаторазового запису (write many-read many). Програма установки BIOS SETUP при записі зберігає в ній свою системну інформацію, яку згодом сама ж і зчитує (при завантаженні ПК). Кожна комірка має розмір в 1 байт.

Таблиця даних має наступний вигляд:

Адреса Призначення
00H-0DH RTC (Real Time Clock) – годинник реального часу (таймер)
0EH Байт статусу процедури POST (Результат завантаження ПК)
0FH Байт завершення роботи ПК
10Н Тип дисководу
11Н Зарезервовано
12Н Тип (и) вінчестера (якщо значення <15)
13Н Зарезервовано
14Н Байт конфігурації обладнання
15Н-16Н Размр базової пам’яті
17Н-18Н Розмір пам’яті за межею 1 Мб
19Н Тип вінчестера С: (якщо значення> 15)
1АН Тип вінчестера D: (якщо значення> 15)
1BH-20H Зарезервовано
21H-2DH Зарезервовано
2EH-2FH Контрольна сума CMOS (від 10Н – 20Н)
30Н-31Н Розмір розширеної пам’яті за межею 1 Мб
32н Номер поточного століття в BCD нотації (наприклад 17Н)
33н Інша інформація
34Н-3АН Зарезервовано

Осередки таблиці, показані червоним кольором, являють собою адреси CMOS, захищені контрольною сумою. Тобто запис в діапазон адрес 10Н-20Н має супроводжуватися коригуванням значень в осередках 2ЕН-2FH. Інакше можна отримати повідомлення про неправильну установці параметрів або про «висхлому» батареї CMOS. Контрольна сума являє собою 16-бітову суму всіх значень, записаних в осередку CMOS з 10Н по 20Н. У осередок 2ЕН пишеться старший байт суми, а в 2FH – молодший. У кожному разі, моя вам порада – спочатку збережіть старе значення CMOS (та й взагалі всі значення CMOS) а потім просто віднімайте або складайте потрібні значення з отриманою контрольної сумою. Так простіше.

ЧИТАННЯ І ЗАПИС CMOS

Читання: Для читання значення з клітинки, запишіть значення в порт 70Н адресу цікавить вас осередку, а потім вважайте значення з порту 71Н – це і буде цікавлять вас значення. Наприклад отримаємо номер поточного століття (MS Debug):

Нумерація століть йде з 00Н (якщо так можна висловитися), тому значення 20Н цілком адекватно.

Запис: для запису значення в CMOS запишіть значення адреси в порт 70Н, а потім нове значення в порт 71Н. Встановимо для прикладу нове значення століття (так сказати «машина часу» J):

Тепер щоб повернути все як було, введемо в порт 70Н значення 32н, а в 71Н – 20Н:

Нехай вас не бентежить відсутність символу “Н” після цифр – всі значення в MS Debug йдуть тільки в шістнадцятковому вигляді.

ДЕТАЛЬНІШЕ ПРО АДРЕСИ CMOS

Отже, зупинимося на докладному розгляді значень, що зберігаються в CMOS.

Адреса (HEX) Опис
00Н Поточна секунда
01Н Сигнальна секунда
02Н Поточна хвилина
03Н Сигнальна хвилина
04Н Поточний годину
05Н Сигнальний годину
06Н Поточний день тижня (1 – Неділя)
07Н Поточний день місяця
08Н Поточний місяць
09Н Поточний рік (тільки 2 останні цифри, напр. 98)

Всі значення RTC храняться в BCD форматі як 2 полубайта але в десятковому форматі. Наприклад 31 (dec) зберігається як 31 (hex).

Адреса (HEX) Опис
0AH Регістр статусу RTC
(# A): Біти 0-3 – Селектор рівня (встановлені в 0110) Біти 4-6 – 22-рівневий дільник (встановлений в 010) Біт 7 – В даний момент проводиться оновлення (якщо == 0 то дозволено читання)
0BH Регістр статусу RTC
(# B): Біт 0 – Включено режим економії часу (літнє); (0 = стандартне час; Стандартна. = 0) Біт 1 – 12 або 24 годинний режим часу (якщо 0 то 12 годинний; по умовч. = 1) Біт 2 – Режим BCD дати (1 = двійковий, 0 = BCD, по умовч. = 0) Біт 3 – Включити Square Wave (1 = включити; Стандартна. = 0) Біт 4 – Включити переривання поновлення (0 = відключити, по умовч. = 0) Біт 5 – Включити сигнальне переривання (0 = відключити, по умовч = 0) Біт 6 – Включити періодичне переривання (0 = відключити, по умовч. =
0) Біт 7 – UIP прапор (Update In Progress), 0 – можна читати CMOS
0CH Регістр статусу RTC (# С): в основному не використовується
0DH Регістр статусу RTC (# D): якщо біт 7 = 1, то харчування CMOS включено, якщо біт 7 = 0 – то батарея розряджена.
0EH Байт діагностики завантаження (POST Byte): Біти 0 і 1 завжди рівні 0. Біт 2 – Час правильне (1 = вірно, що сьогодні не 30 лютого) Біт
3 –
Невірний завантажувальний жорсткий диск (1 = не можна завантажитися з вінчестера) Біт 4 – Помилка розміру RAM (1 = POST знайшла невірний розмір RAM) Біт 5 – Невірна запис про обладнання (1 = невірне обладнання) Біт
6 –
Невірна контрольна сума (1 = невірна сума CMOS) Біт 7 – Втрата живлення батареї CMOS (1 = втрата живлення)
0FH Байт статусу завершення роботи ПК. Застосовується найчастіше після перезавантаження ПК процедурою SETUP. Значення можуть бути наступні: 0 , Якщо була перезагру. по натисканні Ctrl-Alt-Del або несподіваний перезапуск. В будь-якому випадку – процедура POST НЕ виконується 1 перезапуск після визначення розміру пам’яті 2 перезапуск після тесту пам’яті 3 перезапуск після виявлення помилки пам’яті 4 перезапуск за запитом завантажувача ОС 5 перезапуск внаслідок далекого переходу (FAR JMP) на адресу 0:0467 Н 6,7,8
перезапуск після перевірки защищ. режиму 80286 9 перезапуск після перепризначення блоку пам’яті (ф-я 0х87 перерву. 0х15)
10Н Байт типу дисковода: Біти 0-3: перший дисковод Біти 47: другий дисковід У будь-якому випадку, значення бітів можуть бути наступними: 0000 = 0 = дисковод не встановлено 0001 = 1 = 360К 0010 = 2 = 1,2 Мб 0011 = 3 = 720К 0100 = 4 = 1,44 Мб Наприклад: 24Н – це диск А: розміром 1,2 М і диск В: розміром 1,44 М
11Н РЕЗЕРВ
12Н Тип вінчестера (для дисків З: і D:, коли байт наход. У проміжку від 1 до 14). Біти 0-3: перший вінчестер Біти 47: друга вінчестер У будь-якому випадку, значення бітів можуть бути наступними: 0000 = 0 = диск не встановлений другое_значеніе = Тип диска 1111 = см. адреси 19Н і 1АН
13Н РЕЗЕРВ
14Н Байт обладнання: Біт 0 = 1, Якщо присутній дисковод (и) Біт
1 = 1
, Якщо присутній матем. співпроцесор Біти 2, 3 НЕ використовуються і рівні 0 Біти 5, 4 – Основний відеоадаптер: · 00 – немає або EGA · 01 – 40 * 25 EGA, CGA, VGA · 10 – 80 * 25 EGA, CGA, VGA · 11 – монохромний (Ч / б) Біти 6, 7 – Кількість дисководів – 1 (00 = 1, 01 = 2, 10 = 3,
11=4)
15Н, 16Н Базова пам’ять 15Н – молодший байт 16Н – старший байт Можуть бути рівні: · 0100Н = 256К · 0200Н = 512К · 0280Н = 640К
17Н, 18Н Додаткова пам’ять понад 1 Мб 17Н – молодший байт 18Н – старший байт Розмір записаний в Кб.
19Н Тип диска № 0 (С :), якщо значення адреси (12Н & 0FH) = 0FH
20Н Тип диска № 1 (D :), якщо значення адреси (12Н & F0H) = F0H
1BH-2DH РЕЗЕРВ
2ЕН, 2FH Контрольна сума значень адрес від 10Н по 20Н · 2ЕН – старший байт · 2FH – молодший байт
30Н-31Н РЕЗЕРВ
32н Століття у форматі BCD
33H Інша інформація (Специфич. для машин AT/PS-2 класу)
34Н-3FH РЕЗЕРВ. Як показує практика, ця область найчастіше вільна від системних даних (Але не завжди!), тому можете записувати сюди свої особисті дані (але не багато J) для збереження між перезавантаженнями)

 

 

Отже, ми розглянули CMOS, його логічне будову і структуру. Звичайно, в таблиці наведені лише загальні для всіх машин значення параметрів CMOS, але проте навіть з цим «набором» можна зробити багато «чого», наприклад підключити відключений адміністратором дисковод (див. адреси 14Н, 10Н, 2ЕН, 2АР) і т.д. У будь-якому разі: будьте вкрай обережні, не робіть нічого такого, чого потім ви не зможете повернути назад. Все ж буду сподіватися, що ця стаття принесе вам користь.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*