ВСТУП
В епоху інтенсивного розвитку високих технологій і технологій 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: перший дисковід Біти 4 - 7: другий дисковод У будь-якому випадку, значення бітів можуть бути наступними: 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: перший вінчестер Біти 4 - 7: другий вінчестер У будь-якому випадку, значення бітів можуть бути наступними: 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ЕН, 2 FH | Контрольна сума значень адрес від 10Н по 20Н · 2ЕН - старший байт · 2FH - молодший байт |
30Н-31Н | РЕЗЕРВ |
32н | Століття у форматі BCD |
33H | Інша інформація (спеціфіч. для машин AT/PS-2 класу) |
34Н-3FH | РЕЗЕРВ. Як показує практика, ця область найчастіше вільна від системних даних (але не завжди!), Тому можете записувати сюди свої особисті дані (але не багато ) для збереження між перезавантаженнями) |
Отже, ми розглянули CMOS, його логічне будова і структуру. Звичайно, в таблиці наведено лише загальні для всіх машин значення параметрів CMOS, але тим не менш навіть з цим «набором» можна зробити багато «чого», наприклад підключити відключений адміністратором дисковод (див. адреси 14Н, 10Н, 2ЕН, 2АР) і т . д. У будь-якому разі: будьте вкрай обережні, не робіть нічого такого, чого потім ви не зможете повернути назад. Все ж таки буду сподіватися, що дана стаття принесе вам користь.
Абревіатура CMOS (КМОП) розшифровується як Complement Metal Oxide Semiconductor (комплементарна структура метал оксид напівпровідника) - це одна з технологій виготовлення мікросхем. Електронне запам'ятовуючий пристрій, для якого характерна висока щільність розміщення елементів і мале споживання енергії.
Матриці такого типу використовуються в дешевих фотоапаратах, недорогих моделях електронних камер і сканерів, або в дуже дорогих цифрових дзеркальних фотоапаратах питання з шумами там виправлений за рахунок дуже великого розміру матриці і більш досконалої технології виробництва.
Але стосовно до персональних комп'ютерів під абревіатурою CMOS стали розуміти саме CMOS RAM, тобто ОЗУ, виконане за технологією КМОП. КМОП - датчики виконують функцію реєстрації попадання променя світла на кожен із сотень тисяч елементів вибірки. У кристалах КМОП можна реалізувати безліч інших
CMOS-ПАМ'ЯТЬ
Програмних засобів BIOS досить, щоб зробити первинні перевірки і підключити стандартні пристрої, такі як клавіатура і монітор. Слово стандартні ми виділили спеціально. Справа в тому, що монітор і клавіатура у вас можуть бути дуже навіть нестандартними. Але на даному етапі це не має значення - просто комп'ютер поки розглядає їх як стандартні. Йому ще не відомі всі їх властивості, і він вважає, що клавіатура і монітор в нас такі, які були в ходу двадцять років тому, за часів перших комп'ютерів. Цим забезпечується гарантія того, що ви хоч щось побачите на екрані, незалежно від тієї моделі монітора, яка є у вашому розпорядженні. BIOS припускає, що монітор у нас чорно-білий - саме тому перші повідомлення на екрані проходять в чорно-білому режимі.
Проте довго працювати лише тільки із стандартними пристроями комп'ютер не може. Йому пора б дізнатися про те, що у нього є насправді. Справжня інформація про пристрої комп'ютера записана на жорсткому диску, але і його ще треба навчитися читати. У кожної людини може бути свій унікальний жорсткий диск, не схожий на інші. Питається, звідки програми BIOS дізнаються, як працювати саме з вашим жорстким диском?
Для цього на материнській платі є ще одна мікросхема - CMOS-пам'ять. У ній зберігаються налаштування, необхідні для роботи програм BIOS. Зокрема, тут зберігаються поточна дата і час, параметри жорстких дисків і деяких інших пристроїв. Ця пам'ять не може бути ні оперативної (інакше вона стиралася б), ні постійної (інакше в неї не можна було б вводити дані з клавіатури). Вона зроблена енергонезалежній і постійно підживлюється від невеликої акумуляторної батареї, теж розміщеної на материнській платі. Заряду цієї батарейки вистачає, щоб комп'ютер не втратив налаштування, навіть якщо його не включати кілька років.
Установки CMOS, зокрема, необхідні для завдання системної дати і системного часу, при встановленні або заміні жорстких дисків, а також при виході з більшості аварійних ситуацій. Настройкою BIOS можна, наприклад, задати пароль, завдяки якому стороння людина не зможе запустити комп'ютер. Втім, цей захист ефективна тільки від дуже маленьких дітей.
Щоб змінити установки, що зберігаються в CMOS-пам'яті, в ПЗУ міститься спеціальна програма - SETUP. Щоб її запустити, треба в самий перший момент після запуску комп'ютера натиснути і утримувати клавішу DELETE. Навігацію в системі меню програми SETUP виконують за допомогою клавіш управління курсором. Потрібні пункти меню вибирають клавішею ENTER, а повернення в меню верхнього рівня - клавішею ESC. Для зміни встановлених значень служать клавіші Page Up і Page Down
Для живлення енергонезалежній пам'яті конфігурації комп'ютера (CMOS) на системній платі встановлюється літієва батарейка. Терміну її роботи вистачає на кілька років. Про необхідність її заміни говорить повідомлення "CMOS Battery State Low" або "CMOS Checksum Error" під час виконання процедури POST (Power On Self Test) - самотестування при включенні. Першими ознаками заміни батареї можуть бути зупинка внутрішнього годинника-календаря або втрата установок SETUP при вимиканні машини.
На старих материнських платах батарейка представляла собою звичайно синій барило, припаяний до плати. В останні роки вони виходять з ладу на системних платах 286 і 386 машин. При цьому втрачається інформація CMOS, але що набагато небезпечніше, може витекти електроліт, викликаючи замикання ланцюгів і раз'еданіе елементів системної плати. Протекшіх батарейку треба обов'язково випаяти, а плату на тому місці очистити щіточкою і промити. Знайти нову батарейку такого ж розміру буває складно, але її можна замінити на будь-яку іншу з аналогічним напругою (зазвичай 3-4,5 В). Нову батарейку можна підключити до контактів раз'ема зовнішньої батареї (Ext. Bat.), Що є на більшості системних плат (см рис.1б), знявши перемичку живлення від внутрішньої батареї і обов'язково дотримуючись полярності підключення. Існують зовнішні батарейки для PC, укладені в пластмасові корпуси з проводами підключення. Цей корпус за допомогою "липучки" закріплюють у зручному місці. Можливе застосування простого і надійного саморобного варіанту багаторазового користування: у дерев'яну білизняну прищіпку вколюється дві металеві канцелярські кнопки з припаяними проводами, і ними затискається батарейка-таблетка (наприклад, типу 2732), суворо дотримуючись полярність. Закріпити таку конструкцію в корпусі досить просто.
Примітка: Літієві батарейки не в якому разі не можна заряджати, вони під час зарядки, як правило, вибухають і можуть пошкодити нутрощі комп'ютера.
На сучасних системних платах частіше застосовується батарейка-таблетка в спеціальному тримачі, яку легко замінити.
Роз'єм підключення зовнішньої батареї використовується і для обнуління CMOS. Така необхідність може виникнути, наприклад, при втраті вхідного пароля в BIOS Setup (або при необхідності його скидання). Зазвичай для цього достатньо при вимкненому комп'ютері на кілька хвилин переставити перемичку в положення, показане на рис. 1в.
Рис. 1. Підключення зовнішньої батарейки і обнуління CMOS: а - робота від внутрішньої батарейки, б - від зовнішньої, в - обнуління CMOS
Іноді для скидання пароля призначений окремий джампер або перемикач (застосовується, якщо пароль зберігатися не в CMOS, а в NVRAM). У цьому випадку, переключивши джампер, комп'ютер необхідно включити - тільки тоді пароль буде скинутий, після чого джампер необхідно повернути в початковий стан.
Обнуленням CMOS слід користуватися з обережністю. Інформація про конфігурації, яка там зберігатися, відновлюється відносно легко - проблеми можуть виникнути тільки з нестандартними параметрами жорстких дисків, заданими вручну. Крім інформації Setup, в CMOS може бути записаний ключ прив'язки будь-якого прикладного ПЗ до конкретної системної платі, і при обнулення CMOS ключ буде загублений. Так, наприклад, легко "вбити" легальну копію пакету "1C-Бухгалтерія". Для страховки від подібних неприємностей після встановлення подібних захищених продуктів слід зберегти у файлі вміст CMOS. Це дозволяє зробити, наприклад, тестовий пакет QAPlus.
Однак, бувають випадки, коли цими штатними способами пароль не скинути. Тоді є ще один спосіб: закоротити висновки мікросхеми CMOS-пам'яті при відключеному (!) Харчуванні і вимкненою батарейці. Для цього шматочок фольги прикладається зверху до мікросхеми і акуратно пригладжується ногтемк висновків по периметру корпусу. У старих материнських платах 286, 386 і деяких 486 мікросхема CMOS-пам'яті має 14 - 16 контактів. У цих випадках досить закоротити контакти харчування (зазвичай 7 з 14 для 14-контактних мікросхем і 8 з 16 для 16-контактних мікросхем).
Періодичне руйнування інформації CMOS при включенні харчування може бути викликане не батареєю, а недостатньою затримкою сигналу Power Good щодо моменту встановлення живлячої напруги або, навпаки, зайвої затримкою цього сигналу після вмикання джерела. Визначити причину досить просто. Якщо перед включенням харчування утримати цю кнопку Reset і відпустити її тільки через кілька секунд, цим у більшості випадків імітується збільшення затримки сигналу Power Good. Якщо дані CMOS все одно губляться, потрібно перевірити версію затримки при відключенні. Для цього кнопку Reset слід натискати перед вимиканням живлення і утримувати ще кілька секунд - цим імітує прискорення зняття сигналу Power Good. Якщо при такому способі виключення дані CMOS зберігаються, справа в великій затримці при виключенні. В обох випадках потрібна заміна або ремонт блоку харчування.
Програмування CMOS
Д. Крупорніцкій
Так би мовити DISCLAIMER
Вся інформація, представлена в даній статті несе тільки інформативні мети. Автор не несе відповідальності за некоректне використання наведених нижче фактів.
Посилання (links):