Суббота, 23.11.2024, 02:47
Приветствую Вас Гость | RSS
Главная | | Регистрация | Вход
Меню сайта
Форма входа
Поиск
Календарь
«  Март 2012  »
ПнВтСрЧтПтСбВс
   1234
567891011
12131415161718
19202122232425
262728293031
Архив записей
Наш опрос
Оцените мой сайт
Всего ответов: 20
Мини-чат
Друзья сайта
  • Заказ Художник
  • Рыбалка
  • Новости
  • Наш университет io-96
  • Железо и другие
  • Наш Counter-Strike
  • Google ot Turbokherson
  • Google ot Turbokherson87
  • Android
  • Программы и Софт
  • Программирование
  • Лечение здоровья
  • О Ремонт компьютер
  • Наш сайт Turbokherson
  • Программирование ICQ 378204653 от Turbokherson
    Главная » 2012 » Март » 30 » Подробнее об адресах CMOS ASSEMBLER
    11:19
    Подробнее об адресах 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: первый дисководБиты 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АР) и т.д. В любом случае: будьте крайне осторожны, не делайте ничего такого, чего потом вы не сможете вернуть обратно. Всё же буду надеяться, что данная статья принесёт вам пользу.


    http://www.tdoc.ru/c/programming/assembler/cmos-programming-page4.html


    Просмотров: 1079 | Добавил: Turbokherson | Рейтинг: 0.0/0
    Всего комментариев: 0
    Имя *:
    Email *:
    Код *:
    Создать бесплатный сайт с uCozCopyright MyCorp © 2024