
- •Введение
- •Лабораторная работа № 1. Создание программы определения характеристик центрального процессора.
- •Определение параметров процессора на аппаратном уровне.
- •Лабораторная работа № 2.
- •Конфигурация персонального компьютера
- •Cmos-память и конфигурация компьютера
- •32H Текущее столетие
- •Использование bios для определения конфигурации
- •Лабораторная работа 3. Тестирование оптических накопителей.
- •Использование I/o Control Codes.
- •Использование Windows Management Instrumentation (wmi).
- •Порты контроллера накопителей на гибких дисках
- •Порт 3f2h.
- •Порт 3f4h.
- •Команды управления накопителями
- •Перечень команд контpоллеpа нгмд
- •Структура байтов состояния
- •Формат дорожки
- •Отличия контроллера для ат-подобных пэвм
- •Порт 3f7h.
- •Лабораторная работа № 5. Диагностика контроллера накопителей на жестких дисках.
- •Контроллер жестких дисков для хт-подобных пэвм
- •Порты ввода-вывода
- •Порт 320h.
- •Порт 321h.
- •Порт 322h.
- •Порт 323h.
- •Общий формат команды и терминология
- •Описание команд Проверка готовности накопителя (класс 0, опкод 0).
- •Рекалибровать (класс 0, опкод 1).
- •Запрос состояния (класс 0, опкод 3).
- •Форматирование накопителя (класс 0, опкод 4).
- •Проверка секторов (класс 0, опкод 5).
- •Форматирование дорожки (класс 0, опкод 6).
- •Форматирование дефектной дорожки (класс 0, опкод 7).
- •Чтение секторов (класс 0, опкод 8).
- •Запись секторов (класс 0, опкод 0Ah).(*)
- •Поиск цилиндра по номеру (класс 0, опкод 0Ch).(*)
- •Чтение внутреннего озу контроллера (класс 0, опкод 0Eh).(*)
- •Запись внутреннего озу контроллера (класс 0, опкод 0Fh).(*)
- •Диагностика внутреннего озу контроллера (класс 7,опкод 0).(*)
- •Тест устройства (класс 7, опкод 3).
- •Расширенный тест контроллера (класс 0, опкод 4).
- •Считывание без контроля (класс 7, опкод 5).
- •Запись без контроля (класс 7, опкод 6).
- •Разметка диска
- •Контроллер жестких дисков для ат-подобных пэвм
- •Описание портов ввода-вывода Порт 1f0h
- •Порт 1f1h.
- •Система команд
- •Лабораторная работа №6. Программное тестирование портов для работы с клавиатурой
- •Аппаратное прерывание клавиатуры
- •Средства bios для работы с клавиатурой
- •Чтение символа с ожиданием
- •Проверка буфера на наличие в нем символов
- •Получение состояния переключающих клавиш
- •Установка временных характеристик клавиатуры
- •Запись символов в буфер клавиатуры
- •Чтение символа с ожиданием для 101-клавишной клавиатуры
- •Проверка буфера на наличие в нем символов для 101-клавишной клавиатуры
- •Получение состояния переключающих клавиш для 101-клавишной клавиатуры
- •Лабораторная работа № 7. Тестирование и контроль оперативной памяти.
- •Алгоритм определения объёма оперативной памяти.
- •Сущность тестирования памяти.
- •Алгоритм диагностирования памяти в тесте Memtest86.
- •Лабораторная работа № 8. Программирование принтера. Цель работы: изучение методов программирования принтера.
- •Средства ms-dos для работы с принтером
- •Программирование режимов принтера
- •Установка атрибутов/цветов символов.
- •Сдвиг экрана и страницы.
- •Вертикальный сдвиг текстового экрана.
- •Сдвиг текстового экрана горизонтально.
- •Переключение между текстовыми страницами.
- •Сдвиг между страницами текста.
- •Использование wmi.
- •Аналогичным образом могут использоваться свойства и других классов.
Система команд
Код команды заносится в порт 1F7h после того, как подготовлены все параметры в портах 1F2h - 1F6h. Выполнение команды начинается сразу после занесения в порт 1F7h кода команды. Команда состоит из одного байта. Старшие 4 бита содержат код требуемой операции, младшие содержат параметры.
Перечень команд с возможными значениями параметров приведен в таблице.
┌────────┬───────────────────────┬─────────────────────────────┐
│ Код │ Назначение │ Параметры │
├────────┼───────────────────────┼─────────────────────────────┤
│ 1 │ Рекалибровать (сброс │ Период импульсов сигнала │
│ │ головок на цилиндр 0) │ "шаг" │
├────────┼───────────────────────┼─────────────────────────────┤
│ 2 │ Чтение секторов │ Биты, определяющие необходи-│
├────────┼───────────────────────┤ мость повторных обращений │
│ 3 │ Запись секторов │ к диску и повторных попыток │
├────────┼───────────────────────┤ считывания при ошибках │
│ 4 │ Проверка секторов │ контрольной суммы │
├────────┼───────────────────────┼─────────────────────────────┤
│ 5 │ Форматирование дорожки│ Параметр = 0 │
├────────┼───────────────────────┼─────────────────────────────┤
│ 7 │ Поиск цилиндра │Период импульсов сигнала"шаг"│
├────────┼───────────────────────┼─────────────────────────────┤
│ 9 │ Диагностика │ Параметр = 0 │
│ ├───────────────────────┼─────────────────────────────┤
│ │ Установка параметров │ Параметр = 1 │
│ │ накопителя (максималь-│ │
│ │ ное число головок и │ │
│ │ секторов) │ │
└────────┴───────────────────────┴─────────────────────────────┘
Варианты лабораторных работ:
№ Варианта |
Задание |
1 |
Порты ввода-вывода : порт 320h(чтение) |
2 |
Порты ввода-вывода : порт 321h(чтение) |
3 |
Порты ввода-вывода : порт 322h(чтение) |
4 |
Определение метки тома жесткого диска |
5 |
Определение объема жесткого диска |
6 |
Определение серийного номера жесткого диска |
7 |
Определение производителя жесткого диска |
8 |
Определение количества секторов жесткого диска |
9 |
Определение количества головок жесткого диска |
0 |
Определение количества цилиндров жесткого диска |
Лабораторная работа №6. Программное тестирование портов для работы с клавиатурой
Цель работы: изучение методов программирования портов клавиатуры.
Для работы с клавиатурой используются порты с адресами 60h и 61h.
Порт 61h управляет не только клавиатурой, но и другими устройствами компьютера, например, работой встроенного динамика. Этот порт доступен как для чтения, так и для записи. Если в старший бит порта 61h записать значение 1, клавиатура будет заблокирована, если 0 - разблокирована.
Так как порт 61h управляет не только клавиатурой, при изменении содержимого старшего бита необходимо сохранить состояние остальных битов этого порта. Для этого можно сначала выполнить чтение содержимого порта в регистр, изменить состояние старшего бита, затем выполнить запись нового значения в порт:
.........
in al, 61h
or al, 80h
out 61h, al
.........
Для расширенного управления клавиатурой используется порт 60h в режиме записи. Этот порт используются для управления подчиненным процессором Intel 8042, ответственным за обмен данными с клавиатурным компьютером.
При использовании порта 60h на запись программа дополнительно получает следующие возможности:
установка времени ожидания перед переходом клавиатуры в режим автоповтора;
установка периода генерации скан-кода в режиме автоповтора;
управление светодиодами, расположенными на лицевой панели клавиатуры - Scroll Lock, Num Lock, Caps Lock.
Приведем фрагмент программы, составленной на языке ассемблера, проверяющий состояние очереди команд процессора 8042:
..........
mov cx,0 ; счетчик для ограничения времени
; ожидания готовности 8042
wait_loop:
; читаем порт состояния процессора 8042
in al,64h
and al,00000010b ; флаг готовности
; ожидаем готовность процессора 8042
loopnz wait_loop ; к приему команды
..........
После того, как программа дождется готовности процессора 8042, она может послать ему команду, записав ее в порт с адресом 60h:
..........
mov al,cmd ; команда для 8042
out 60h ,al ; вывод команды в 8042
..........
Некоторые команды состоят более чем из одного байта. Остальные байты команды необходимо записать в порт 60h, предварительно убедившись в готовности процессора 8042 с помощью последовательности команд, приведенной выше. В большинстве случаев можно также использовать простую временную задержку:
..........
mov al, cmd_byte1
out 60h, al
mov cx, 2000h
wait_loop: loop wait_loop
mov al, cmd_byte2
out 60h, al
..........
Мы приведем формат двух команд процессора 8042, имеющих отношение к работе с клавиатурой - команду установки задержки и периода автоповтора и команду управления светодиодами, расположенными на клавиатуре.
Для установки характеристик режима автоповтора в порт 60h необходимо записать код команды 0F3h, затем байт, определяющий характеристики режима:
Биты Значение
0-4 Период автоповтора:
0 - 30.0; 0Ah - 10.0;
1 - 26.7; 0Dh - 9.2;
2 - 24.0; 10h - 7.5;
4 - 20.0; 14h - 5.0;
8 - 15.0; 1Fh - 2.0.
Период автоповтора определяет количество
посылок скан-кода, генерируемых процессором
клавиатуры в одну секунду. Можно использовать не
только те значения, которые приведены выше,
но и промежуточные, например, 9 или 15h.
5-6 Задержка включения режима автоповтора:
00 - 250 мс;
01 - 500 мс;
10 - 750 мс;
11 - 1000 мс.
7 Зарезервировано, должно быть равно 0.
Первоначально при инициализации системы период задержки для включения режима автоповтора устанавливается модулями BIOS равным 500 мс при периоде автоповтора, равном 10 повторам в секунду. Если это слишком медленно для вас, вы можете установить другие значения.
Для управления светодиодами, расположенными на лицевой панели клавиатуры, используйте команду 0EDh. Вслед за этой командой в порт 60h необходимо записать байт, имеющий следующий формат:
Биты Значение
0 1 - включить светодиод Scroll Lock;
1 1 - включить светодиод Num Lock;
2 1 - включить светодиод Caps Lock;
3-7 не используются.
Приведем пример простейшей программы, управляющей светодиодами на лицевой панели компьютера. Такое управление может выполняться только при использовании порта 60h управления клавиатурой, так как BIOS не содержит соответствующей поддержки. Наша программа после запуска включит все светодиоды и будет ожидать нажатия на любую клавишу. После нажатия программа выключит светодиоды.
#include <stdio.h>
void main(void);
void main(void) {
int i;
// Посылаем процессору клавиатуры
// команду управления светодиодами
outp(0x60,0xed);
// Перед посылкой второго байта команды
// выполняем небольшую задержку
for(i=0; i<4000; i++);
// Выводим второй байт команды,
// младшие три бита которого определяют
// состояние светодиодов на лицевой панели
// клавиатуры.
outp(0x60,7);
// Ожидаем нажатия на любую клавишу.
getch();
// Выключаем все светодиоды.
outp(0x60,0xed);
for(i=0; i<4000; i++);
outp(0x60,0);
exit(0);
}