|
|
Ответов: 0
|
25-02-12 07:01
|
|
|
|
Ответов: 0
|
16-01-12 20:13
|
|
|
|
Ответов: 1
|
09-01-12 11:23
|
|
   Web - программирование
|
|
|
   Программирование под ОС
|
|
|
   Web - технологии
|
|
|
   Базы Данных
|
|
|
|
Возможно вас заинтересует
|
|
Программирование CMOS
Вся информация, представленная в
данной статье несет только информативные цели.
Автор не несет ответственности за некорректное
использование приведённых ниже фактов.
В эпоху интенсивного развития высоких
технологий и технологий Internet программирование для «железа» отошло
на второй план. А между тем практически
невозможно реализовать ничего стоящего без
правильной конфигурации оборудования, в
частности CMOS - энергонезависимой
памяти компьютера. В данной статье мы рассмотрим
устройство CMOS, его
структуру и возможности программирования. Сразу
оговорюсь, что программировать CMOS желательно из реального режима ОС; под ОС Windows
это делается с помощью
специальных драйверов VxD или SYS. В
Сети существует достаточно источников
документации по построению таковых, поэтому я на
них останавливаться не буду. Естественно, что
проводить все ниже перечисленные действия по
записи значений в CMOS следует с особой осторожностью; иногда
(!) можно потерять практически все значения
конфигурации ПК. В таковом случае необходимо
очистить CMOS; как
это сделать - смотрите в документации к вашей
материнской плате. Также я буду использовать
язык ассемблера для иллюстрации конкретных
примеров, а так же широко распространенный
отладчик DEBUG.EXE, который
прилагается практически с каждой версией ОС Windows/DOS.
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) а потом просто вычитайте
или складывайте нужные значения с полученной
контрольной суммой. Так проще.
Чтение: для чтения значения из
ячейки, запишите значение в порт 70Н адрес
интересующей вас ячейки, а затем считайте
значение из порта 71Н - это и будет интересующие
вас значение. Например получим номер текущего
века (MS Debug):
Нумерация веков идёт с 00Н (если так можно
выразиться), поэтому значение 20Н вполне
адекватно.
Запись: для записи значения в CMOS запишите значение
адреса в порт 70Н, а затем новое значение в порт 71Н.
Установим для примера новое значение века (так
сказать «машина времени» J):
Теперь чтобы вернуть все как было,
введем в порт 70Н значение 32Н, а в 71Н - 20Н:
Пусть вас не смущает отсутствие
символа “Н” после цифр - все значения в MS Debug идут
только в шестнадцатеричном виде.
Итак, остановимся на подробном
рассмотрении значений, хранящихся в 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ЕН, 2FH |
Контрольная сумма
значений адресов от 10Н по 20Н ·
2ЕН -
старший байт · 2FH - младший байт |
30Н-31Н |
РЕЗЕРВ |
32Н |
Век в формате BCD |
33H |
Другая информация
(специфич. для машин AT/PS-2 класса) |
34Н-3FH |
РЕЗЕРВ. Как показывает практика, эта область
чаще всего свободна от системных данных (но не всегда!), поэтому
можете записывать сюда свои личные данные (но не
много J) для сохранения между перезагрузками) |
Итак, мы рассмотрели CMOS, его логическое
строение и структуру. Конечно, в таблице
приведены лишь общие для всех машин значения
параметров CMOS, но
тем не менее даже с этим «набором» можно сделать
много «чего», например подключить отключенный
администратором дисковод (см. адреса 14Н, 10Н, 2ЕН,
2АР) и т.д. В любом случае: будьте крайне осторожны, не делайте ничего такого,
чего потом вы не сможете вернуть обратно. Всё же буду надеяться,
что данная статья принесёт вам пользу.
Последние статьи: Программирование под ОС / Assembler /
| |
| | |
Ассемблер, который я буду использовать - NASM (Netwide Assembler, nasm.2y.net). Этот выбор объясняется тем, что:
Во первых, он мультиплатформенный, т.е. для портирования программы на разные ОС достаточно только изменить код взаимодействия с системой, а всю программу переписывать не нужно... подробнее
|
Кол. просмотров: общее - 4752 сегодня - 0
|
|
Разработка WDM - драйвера с использованием только DDK является сложной и трудоемкой задачей. При этом приходится выполнять много однотипных операций: создание скелета драйвера, написание inf - файла для его установки, создание приложения для тестирования и т.п... подробнее
|
Кол. просмотров: общее - 4621 сегодня - 1
|
|
Возможно, идея писать драйвера объектно-ориентированными и кажется на первый взгляд нелогичной. Но при более близком знакомстве с DriverStudio и с драйверами в общем, оказывается, что это не так уж страшно и довольно удобно... подробнее
|
Кол. просмотров: общее - 4407 сегодня - 2
|
|
Объекты устройств являются экземплярами класса KDevice или KPnpDevice. Эти классы являются краеугольными камнями архитектуры DriverWorks: они представляют собой как бы программный образ тех устройств, которые присутствуют в системе... подробнее
|
Кол. просмотров: общее - 4591 сегодня - 1
|
|
Как было упомянуто выше, объект устройства управляет работой устройства при помощи специальных объектов, управляющих работой оборудования - портами В/В, прерываниями, памятью, контроллерами ПДП. Драйвер создает эти объекты для представления физических параметров устройства... подробнее
|
Кол. просмотров: общее - 4638 сегодня - 0
|
|
|
|