|
При описании
портов - адресуемых элементов в пространстве вввода-вывода процессора, параметры портов и
их интерфейс с системной шиной задаются в макроопределениях как константы PNum - адpес поpта; PType - тип поpта; PSize - pазpядность порта.
Принципиальная схема платы
расширения должна быть составлена точно для реализации вполне определенных функций и программа
обмена процессора с платой должна точно учитывать все особенности схемы.
По системной шине обмен может
производиться только байтами (8 разрядов) или словами (16 разрядов) как результат выполнения
различных команд ввода-вывода:
in al, dx ; ввод байта в регистр al из порта, адрес которого указан в
регистре dx,
in ax, dx ; ввод слова в регистр ax из порта, адрес которого указан в
регистре dx,
out dx, al ; вывод байта из регистра al в порт, адресуемый первым
операндом,
out dx, ax ; вывод слова из регистра ax в порт, адресуемый первым
операндом.
Для предотвращения ошибочного
выполнения программы (например, искажения содержимого аккумулятора) или ошибочной реакции на
команды ввода-вывода во внешних устройствах необходимо строго соблюдать соответствие между
используемыми командами, схемной реализацией интерфейса порта платы с линиями данных системной
шины и, соответственно, описанием порта в макроопределениях - выбором константы
PSize, равной PS_Byte или PS_Word. Реально в разрабатываемых в практикуме системах разрядность портов
равна 8. Поэтому в СВО по умолчанию считается, что поpты имеют pазpядность один байт. При этом
следует иметь в виду, что при обращении к порту на запись или на чтение по линиям данных
системной шины всегда передается 8 разрядов, независимо от того - все 8 разрядов порта
подключены к шине или только некоторые их них.
После разработки принципиальной
схемы платы расширения становятся известными общее количество занимаемых адресов в пространстве
ввода-вывода, причем всегда определяется также определенный набор базовых адресов (Абаз), на
которые могут быть настроены как плата расширения, так и программа обмена с платой. Это
позволяет определить для портов константы PNum, а также выбрать типы
макроопределений Memory, MemDual, или
System, в котором указывается эта константа.
В программе отладки между
макроопределениями StartRedirect и StopRedirect
команды ввода-вывода могут использоваться для обращения к различным типам внешних устройств:
- Устройствам, расположенным на плате
расширения. Для таких устройств типом макроопределения может быть Memory
или MemDual.
- Реальным устройствам ПК, которые
в момент отладки используются только самой отлаживаемой программой. Вероятнее всего этими
устройствами будут последовательный или параллельный порт ПК. Для таких устройств типом
макроопределения может быть System. Однако задавать и контролировать
состояния регистров этих устройств можно только имитацией в отладчике команд ввода-вывода.
Поэтому более удобно использовать макроопределения Memory или MemDual.
- Реальным устройствам ПК, которые
в процессе отладки используются и другими программами. Чаще всего такими устройствами являются
системный таймер и контроллер прерываний. Можно для описания портов этих устройства
воспользоваться макроопределением System, однако настоятельно
рекомендуется применять Memory.
Макроопределения должны быть
составлены для всех портов имеющихся на схеме и для всех адресов, которые встречаются в
программе. Указание лишних адресов - адресов портов, которых нет на плате расширения,
считается ошибкой. Однако, не возбраняется для используемых на плате интерфейсных БИС или
портов ПК описывать все адресуемые порты, даже те, к которым нет обращений в программе
обмена - эти порты имеются в БИС или портах и указание адресов свидетельствует о знании
структуры этих устройств. |
|
|