LRP1
.pdf2-3 |
PC: число банков памяти на системной плате |
4-5 |
PC: тип дисплея (11=монохромный, |
|
10=цветной 80*25, 01=цветной 40*25) |
6-7 |
PC: число накопителей на дискетах |
Порт B (61H) |
|
------------ |
|
бит 0 |
PC,XT,PCjr: управляет каналом 2 таймера 8253 |
1PC,XT,PCjr: вывод на динамик
2PC: выбор содержимого порта C
PCjr: 1=символьный режим, 0=графический
3PC,PCjr: 1=кассетный мотор выключен XT: выбор содержимого порта C
4PC,XT: 0=разрешение ОЗУ
PCjr: 1=запрет динамика и мотора кассеты
5PC,XT: 0=разрешение ошибок щелей расширения
6PC,XT: 1=разрешение часов клавиатуры
5-6 PCjr: выбор динамика (00=8253, 01=кассета, 10=ввод/вывод, 11=микросхема 76496)
7PC: выбор содержимого порта A PC,XT: подтверждение клавиатуры
Порт C (62H)
------------
когда в порте B бит 2=1 для PC или бит 3=1 для XT
биты 0-3 PC: нижняя половина переключателя 2 конфигурации (ОЗУ на плате расширения)
0PCjr: 1=введенный символ потерян
1XT: 1=есть мат. сопроцессор PCjr: есть карта модема
2PCjr: есть карта НГМД
2-3 XT: число банков памяти на системной плате
3PCjr: 0=128K памяти
4PC,PCjr: ввод с кассеты XT: не используется
5PC,XT,PCjr: выход канала 2 8253
6PC,XT: 1=проверка ошибок щелей расширения PCjr: 1=данные с клавиатуры
7PC,XT: 1=контроль ошибок четности
11
когда в порте |
B бит 2=0 для PC или бит 3=0 для XT |
биты 0-3 |
PC: верхняя половина переключателя 2 конфигура- |
|
ции (не используется) |
0-1 |
XT: тип дисплея ( 11=монохромный, 10=цветной |
|
80*25, 01=цветной 40*25 ) |
2-3 |
XT: число накопителей НГМД (00=1 и т.д.) |
4-7 |
PC,XT: то же, что и с установленными битами |
Отметим, что 0 в одном из битов регистра соответствует установке переключателя "off".
3.5.Определение конфигурации IBM PC AT.
3.5.1.Данные, хранящиеся в КМОП-памяти.
КМОП-память организована на базе микросхемы MC146818 фирмы Motorola и имеет 64 8-разрядных ячейки (регистра). В таблице 1 приведено содержимое тех ячеек памяти, в которых хранятся данные о конфигурации и состоянии машины.
Обращение к КМОП-памяти (запись и считывание) осуществляется следующим образом: сначала в порт 70H заносится адрес ячейки (номер регистра). Затем в зависимости от выполняемой операциии в порт 70H или записываются данные, или из порта 70H данные считываются.
Таблица 1
Содержимое ячеек
──────────────────────────────────────────────────────────────
Адрес ячейки Содержимое
──────────────────────────────────────────────────────────────
0EH |
Байт состояния диагностики при включении питания |
10H |
Тип используемого НГМД |
14H |
Конфигурация оборудования |
15H-16H |
Объем основной памяти |
30H-31H |
Объем расширенной (extended) памяти |
3.5.1.1.Байт состояния диагностики.
Байт состояния диагностики содержит результаты выполнения диагностики при включении питания машины. Формат байта состояния приведен в таблице 2.
12
Таблица 2
Содержимое байта диагно=стики
──────────────────────────────────────────────────────────────
Бит Значение
──────────────────────────────────────────────────────────────
0-1 |
Не используется, равно 0 |
|
2 |
0 |
- неправильная установка часов реального |
|
|
времени; |
|
1 |
- часы установлены правильно |
3 |
1 |
- неисправность НМД, невозможно загрузить |
|
|
операционнцю систему с жесткого диска; |
|
0 |
- НМД исправен |
4 |
1 |
- фактический размер оперативной памяти не |
|
|
соответствует указанному в КМОП-памяти; |
|
0 |
- размер оперативной памяти указан правильно |
5 |
1 |
- ошибка в конфигурации системы; |
|
0 |
- конфигурация указана правильно |
6 |
1 |
- ошибка в контрольной сумме КМОП-памяти; |
|
0 |
- контрольная сумма КМОП-памяти правильна |
7 |
1 |
- разрядка аккумулятора, питающего КМОП- |
|
|
память и часы реального времени; |
|
0 |
- аккумулятор исправен и заряжен |
───────────────────────────────────────────────────────────────
3.5.1.2.Тип используемых флоппи-дисков.
Младшая и старшая тетрады этого байта описывают соответственно второй и первый НГМД:
0000 - дисковод не установлен;
0001 - дисковод на 360К;
0010 - дисковод на 1.2М;
0011 - дисковод на 720К;
0100 - дисковод на 1.44М.
3.5.1.3.Конфигурация оборудования.
В таблице 3 приведен байт конфигурации:
13
Таблица 3
Байт конфигурации
──────────────────────────────────────────────────────────────
Бит Значение
──────────────────────────────────────────────────────────────
0 |
1 |
- в системе установлены НГМД; |
|
|
0 |
- НГМД не используются |
|
1 |
1 |
- установлен арифметический сопроцессор |
|
|
|
|
80287 или 80387; |
|
0 |
- сопроцессор не установлен |
|
2-3 |
Не используются, равны 0 |
||
4-5 |
Тип видеоконтроллера и его режим: |
||
|
Биты: 5 |
4 |
|
|
0 |
0 |
- не используются или EGA; |
|
0 |
1 |
- CGA, EGA, VGA в режиме 40x25 |
|
1 |
0 |
- CGA, EGA, VGA в режиме 80x25 |
|
1 |
1 |
- монохромный контроллер |
6-7 |
Количество используемых НГМД |
||
─────────────────────────────────────────────────────────────
3.5.1.4.Объем основной памяти.
Ячейка 15H содержит младший байт, а ячейка 16H - старший байт размера основной памяти в килобайтах.
3.5.1.5.Объем дополнительной памяти.
Ячейки 16H и 17H содержат соответственно младший и старший байты размера дополнительной памяти (расположенной выше 1М) в килобайтах.
3.5.2.Данные, хранящиеся в области BIOS оперативной памяти.
BIOS в процессе инициализации опрашивает состояние перемычек и анализирует содержимое КМОП-памяти. После анализа BIOS записывает в свою область памяти по адресу 0040:0010H слово конфигурации. Назначение отдельных битов этого слова приведено в таблице 4.
14
Таблица 4
Содержимое слова конфигурации
──────────────────────────────────────────────────────────────
Биты Значение
──────────────────────────────────────────────────────────────
0 |
1 |
- |
система содержит НГМД; |
|
|
2 |
- |
система не содержит НГМД |
|
1 |
1 |
- |
установлен арифметический сопроцессор; |
|
|
0 |
|
арифметический сопроцессор не установлен |
|
2-3 |
Объем основной памяти, установленной на сис- |
|||
|
темной плате: |
|||
|
Биты: |
3 |
2 |
|
|
|
0 |
1 |
- 16К |
|
|
1 |
0 |
- 32К |
|
|
1 |
1 |
- 64К и больше |
4-5 |
Биты: |
5 |
4 |
|
|
|
0 |
0 |
- не используется или EGA |
|
|
0 |
1 |
- CGA, EGA, VGA в режиме 40x25; |
|
|
1 |
0 |
- CGA, EGA, VGA в режиме 80x25; |
|
|
1 |
1 |
- монохромный контроллер |
6-7 |
|
Количество установленных НГМД |
||
8 |
|
1 |
- используется контроллер прямого доступа |
|
|
|
|
|
к памяти; |
|
|
0 |
- контроллер прямого доступа к памяти не |
|
|
|
|
|
используется |
9-11 |
|
Количество установленных портов последова- |
||
|
|
тельной передачи данных RS232S |
||
12 |
|
1 |
- применяется игровой адаптер (джойстик); |
|
|
|
0 |
- игровой адаптер не применяется |
|
13 |
|
1 |
- установлен последовательный принтер |
|
|
|
|
|
(только для PCjr) |
14-15 |
|
Количество установленных принтеров |
||
─────────────────────────────────────────────────────────────
4.Порядок выполнения работы
4.1.В соответствии с индивидуальным заданием, используя справочную информацию о технических характеристиках ПЭВМ, приведенную в разделе 3, определить адрес или область ПЗУ, ОЗУ или КМОП-памяти, содержащие требуемые сведения.
4.2.Написать программу определения требуемых характеристик
ПЭВМ.
15
5.Особенности программирования
5.1.На языке Турбо-Паскаль.
5.1.1.Для обращения к ячейкам ОЗУ и ПЗУ применяются предопределенные массивы Mem и MemW. Например, для чтения слова из ячейки ОЗУ 0040:0010H используется выражение wo:=MemW[$0040:$0010], где wo
-переменная типа word; для чтения байта из ПЗУ по адресу
F000:FFF5H используется выражение b:=Mem[$f000:$fff5] (b переменная типа byte).
5.1.2.Для обращения к портам ПЭВМ применяются предопределенные массивы Port и PortW. Например, для записи значения 10H в порт 70H используется выражение Port[$70]:=$10; для чтения из порта 70H используется выражение data:=Port[$71], где data - переменная типа byte.
5.1.3.Для выделения определенного разряда в байте использует-
ся битовая маска, содержащая |
единицу в проверяеммом разряде |
и нули |
- в остальных. Битовая маска |
складывается с байтом по схеме |
пораз- |
рядной коньюнкции AND в результате чего получаем значение 0, если заданный бит содержит 0 и значение 1 в противоположном случае. Например,для определения значения 0-го разряда переменной b( типа byte) необходимо записать :
if(b and $01)=0 then writeln( '0-й разряд байта b содержит 0') else writeln(' 0-й разряд байта b содержит 1');
5.2. На языке Турбо-Си.
5.2.1. Для обращения к ячейкам ОЗУ и ПЗУ используются дальние указатели,которые обьявляются в программе следующим образом:
char far * uk;-для работы с байтами
int far * uk; -для работы с двухбайтными словами ( переменные типа int ).
При этом первым следует младший байт,потом-старший байт.Например,для чтения слова из ОЗУ по адресу 0040:0010H используется выражение:
uk=( int far * ) 0x00400010; 16
wo=* uk;
где: woпеременная типа int.
Для чтения байта из ПЗУ по адресу F000:FFF5H используется выражение :
uk=( char far * ) 0xF000FFF5; b=* uk;
где: b-переменная типа char.
5.2.2. Для обращения к портам ПЭВМ применяются функции чтения и записи порта,которые хранятся в библиотеке < dos.h>. Библиотека подключается директивой
#include < dos.h>
после чего, например, для записи значения 10H в порт 70H используется выражение:
outportb(0x70,0x10).
Для чтения из порта 70H используется выражение:
data=intportb(0x70);
где dataпеременная типа char.
5.2.3. Для выделения определенных разрядов в байте используется битовая маска, которая складывается с байтом по схеме поразрядной коньюнкции & (не путать с логической коньюнкцией &&), в результате чего получается истинное значение(1) ,если заданный бит содержит 1 и ложное значение (0) в противоположном случае. Например,для определения значения 0 разряда переменной b( типа char) необходимо записать :
if(b&0x01) printf( "0 разряд b содержит 1\n "); else printf( " 0 разряд b содержит 0\n " ).
6. Индивидуальные задания
1.Определить тип IBM; число НГМД; проверить, исправен ли аккумулятор.
2.Определить день создания BIOS; объем основной памяти и число подключенных принтеров.
17
3.Определить месяц создания BIOS и число подключенных последовательных портов; проверить, установлен ли сопроцессор.
4.Определить тип 1-го НГМД и год создания BIOS; проверить, имеет ли ПЭВМ контроллер прямого доступа к памяти.
5.Определить тип видеоконтроллера, его режим и дату создания BIOS; проверить исправность НМД.
6.Определить тип IBM; определить, имеет ли данная ПЭВМ видеоконтроллер EGA; проверить, правильно ли установлены часы реального времени.
7.Определить объем дополнительной памяти; определить день создания BIOS; проверить, установлен ли сопроцессор.
8.Определить тип 2-го НГМД (если он есть); объем основной памяти на системной плате и год создания BIOS.
9.Определить число подключенных принтеров и дату создания BIOS; проверить, правильно ли установлены часы реального времени.
10.Определить, имеет ли данная ПЭВМ (и сколько) НГМД емкостью 1.2М; определить месяц создания BIOS; проверить, имеет ли ПЭВМ контроллер прямого доступа к памяти.
11.Определить тип микропроцессора и тип ПЭВМ;проверить, исправен ли аккумулятор.
12.Определить, имеет ли ПЭВМ НГМД емкостью 1.44 М; определить год создания BIOS и число подключенных принтеров.
13.Определить тип IBM; объем дополнительной памяти и число подключенных последовательных портов.
14.Определить тип видеоконтроллера, его режим; проверить, установлен ли сопроцессор; определить месяц создания BIOS.
15.Определить, имеет ли данная ПЭВМ (и сколько) НГМД емкостью 1.2М; определить число подключенных принтеров и дату создания
BIOS.
16.Определить тип IBM; объем дополнительной памяти; проверить, имеет ли ПЭВМ контроллер прямого доступа к памяти.
17.Определить тип 1-го НГМД, год создания BIOS и число подключенных принтеров.
18.Определить тип микропроцессора и дату создания BIOS; проверить, правильно ли установлены часы реального времени.
19.Определить тип IBM; определить тип видеоконтроллера, его режим; проверить, установлен ли сопроцессор.
20.Определить тип 2-го НГМД (если он есть); объем основной памяти на системной плате и тип микропроцессора.
18
7. Содержание отчета 7.1.Тема лабораторной работы. 7.2.Цель работы.
7.3.Индивидуальное задание. 7.4.Текст программы. 7.5.Результаты работы программы. 7.6.Выводы.
Лабораторная работа 3.
ОРГАНИЗАЦИЯ ПРЕРЫВАНИЙ В ПЭВМ.
1. Цель работы Изучение механизма прерываний, их типов, алгоритма и средств
их обработки, а также приобретение практических навыков создания собственных программ обработки прерываний.
2.Темы для предварительной проработки
2.1.Работа контроллера прерываний.Установка вектора прерыва-
ний.
2.2.Маскирование прерываний.
2.3.Резидентные программы.
3.Описание работы
3.1. Механизм и типы прерываний.
Для обработки событий, происходящих асинхронно по отношению к выполнению программы, лучше всего подходит механизм прерываний. Прерывание можно рассматривать как некоторое особое событие в системе, требующее моментальной реакции. Например, хорошо спроектированные системы повышенной надежности используют прерывание по аварии в питающей сети для выполнения процедур записи содержимого регистров и оперативной памяти на магнитный носитель, с тем чтобы после восстановления питания можно было бы продолжить работу с того же места.
Поскольку прерывания возможны самые разнообразные по самым различным причинам, каждому прерыванию присваивается номер прерывания. С каждым номером прерывания связывается то или иное событие. Система умеет разпознать какое прерывание, с каким номером произошло, и запускает соответствующую этому номеру процедуру.
По источнику и характеру возникновения прерывания можно разделить на группы (рис. 1):
19
Прерывания
┌──────────┴──────────────┐
Аппаратные Программные
┌─────────┴──────────┐
Внешние Внутренние
┌──────┴───────┐
Маскируемые Немаскируемые
Рис. 1.
Программные прерывания вызывают сами программы, поэтому они не являются асинхронными. Для этого они используют команду INT.
Программные прерывания удобно использовать для организации доступа к отдельным общим для всех программ модулям. Например, программные модули операционной системы доступны прикладным программам именно через прерывания, и нет необходимости при вызове этих модулей знать их текущий адрес в памяти. Прикладные программы сами могут устанавливать свои обработчики прерываний для их последующего использования другими программами. Для этого встраиваемые обработчики прерываний должны быть резидентными в памяти.
Аппаратные прерывания вызываются физическиими устройствами и приходят асинхронно. Эти прерывания информируют систему о событиях, связанных с работой устройств, например о том, что завершилась печать символа на принтере и неплохо было бы выдать следующий символ, или о том, что требуемый сектор диска уже прочитан, его содержание доступно программе.
Использование прерываний при работе с медленными внешними устройствами позволяет совместить ввод/вывод с обработкой данных в центральном процессоре и в результате повышает общую производительность системы.
Внешние аппаратные прерывания вызваны сигналами, внешними по отношению к цетрральному процессору, и подаются на его входы INT и
NMI.
Прерывания по входу INT относятся в аппаратным маскируемым прерываниям, поскольку могут быть разрешены или запрещены флагом IF регистра флагов. Номер вектора прерываний маскируемых прерываний передается в процессор по его восьми младшим разрядам шины данных.
Вход немаскируемого прерывания NMI обычно используется для сообщений о "катастрофических" событий (отключении питания, обнаружении ошибок памяти и т.д.). Номер этого прерывания равен 2.
Внутренние (логические) прерывания формируются самим процес20
