Программирование системы ввода-вывода
В состав модуля мМС1204 входит несколько программируемых устройств: два связных адаптера КР580ВВ51, периферийный адаптер, построенный на базе КР580ВВ55, интервальный таймер КР580ВИ53 и контроллер прерываний КР580ВН59. Приведем значения и мнемонику базовых адресов этих периферийных кристаллов:
PSA1 PSA2 PPA PIT PIC | EQU EQU EQU EQU EQU | 18H 1AH 14H 1CH 12H | ;ПСА1 ;ПСА2 ;ППА ;Системный таймер ;Контроллер прерываний |
Аппаратное окружение устройства в значительной степени предопределяет их функциональное назначение и режим работы. Доопределение функций выполняется на программном уровне. Удобно ввести стандартный низкоуровневый слой ПО реализующий непосредственное управление аппаратурой МК. Использование такого типового программного слоя, содержащего ряд драйверов физических устройств, освобождает программиста от учета их аппаратных особенностей. Организуется новый, не зависящий от аппаратуры программный интерфейс управления общесистемными функциями МК [52].
Для программиста ПУ представляется в виде набора основных и вспомогательных подпрограмм, поддерживающих процесс обмена с ним. Этот набор называют драйвером ПУ. Драйвер ВВ скрывает от программиста техническую организацию устройства, освобождает его от необходимости учитывать множество мелких деталей, связанных с конкретным протоколом обмена. Вместо этого он предоставляет в распоряжение программиста интерфейс программного уровня.
Основное назначение драйвера состоит в организации нового чисто программного интерфейса, благодаря которому разрывается прямая связь прикладного ПО с конкретным интерфейсом ПУ командного уровня. Удобнее всего программный интерфейс представить в виде набора подпрограмм
DRIVER: | JMP JMP JMP | INIT INPUT OUTPUT | ;Процедура инициализации ;Ввод байта ;Вывод байта |
Каждая подпрограмма выполняет свою процедуру обмена или обслуживания ПУ, число и сложность которых может изменяться. В общем случае взаимодействие с каждым ПУ осуществляется с помощью программируемого адаптера или контроллера. Поэтому в состав драйвера следует ввести специальную процедуру инициализации INIT контроллера, которая настраивает его для работы в конкретном режиме. Примером простого драйвера ИРПР-адаптера на базе ВВ55 служит набор из трех рассматриваемых в § 3.3 подпрограмм
РА: | JMP JMP JMP | PAINI PAI РАО | ;Инициализация ;Условный ввод байта ;Условный вывод байта |
По аналогии с драйвером РА был построен и драйвер для управления ИРПС-адаптером на базе ВВ51 (см. § 3.4):
SA: | JMP | SAINI | ;Инициализация |
JMP | SAI | ;Условный ввод | |
JMP | SAO | ;Условный вывод |
В составе мМС1204 два драйвера типа SA: S1 и S2, которые отличаются лишь базовыми адресами БИС связного адаптера.
Стандартизация интерфейса ВВ делает независимым ПО следующего уровня от типа используемого адаптера, в качестве которого может выступать как ППА, так и любой ПСА. Появляется возможность определить ряд дополнительных виртуальных устройств ВВ, отвечающих данному стандарту.
Во многих случаях может оказаться полезным осуществление операции ввода не с какого-либо внешнего устройства, а непосредственно из памяти МК. Для этого может использоваться драйвер буфера памяти BF:
BFINI: | SHLD | BFPTR | ;Инициализация указателя |
RET | ;буфера | ||
BFI: | PUSH | H | |
LHLD | BFPTR | ||
MVI | A, 0FFH | ;Установка признака | |
ORA | A | ;готовности ZF = 1 | |
MOV | A, M | ;Чтение данных | |
INX | H | ;Модификация указателя | |
SHLD | BFPTR | ;буфера | |
POP | H | ||
RET |
В драйвере определены процедура инициализации, устанавливающая указатель BFPTR начала буфера, и процедура ввода. Указатель BFPTR размещается в ОЗУ и служит для указания следующего подлежащего выборке байта памяти. При выборке байта содержание указателя увеличивается на единицу. Аналогично может быть определена более редкая операция вывода в память.
Иногда удобно использовать виртуальное устройство фиктивного вывода, позволяющее осуществлять кажущийся вывод, который в действительности отсутствует. Драйвер ВВ такого устройства рассмотрен ниже. Он поддерживает единственную операцию вывода по готовности:
ВВО: | PUSH | В | |
MOV | В, А | ||
MVI | A, 0FFH | ;Установка признака | |
ORA | А | ;готовности | |
MOV | А, В | ||
POP | В | ||
RET |
Унификация программного интерфейса создает у программиста иллюзию работы с некоторым стандартным ПУ. Такое устройство будем называть логическим или виртуальным, подчеркивая факт его существования на программном уровне. Замена драйвера со стандартным программным интерфейсом никак не сказывается на ПО, что повышает его мобильность и независимость от аппаратной организации МС.
Драйверы PA, S1, S2, BF и ВВ совместно с адаптерами организуют физическую систему ВВ мМС1204, в составе которой могут быть выделены восемь устройств физического ввода или вывода. Среди них :О1: и :I1: (передатчик и приемник ПСА1), :O2: и :I2 (ПСА2), :О3: и :I3: (ППА), :BF: (буфер памяти) и :ВВ: (устройство фиктивного вывода).
Над системой физического вывода надстраивается аппаратно независимая система логического ВВ (рис. 5.6). Набор виртуальных устройств составляет основу логической системы ВВ. Типичным примером простой логической системы ВВ для бездисковых МС служит система из пяти виртуальных устройств, таких как :СI: (ввод с консоли), :СО: (вывод на консоль), :LP: (вывод на принтер), :RD: (ввод с устройства чтения), :WR: (вывод на устройство записи).
Рис. 5.6. Организация подсистемы ВВ мМС1204
Консоль—это устройство для ведения диалога оператора с МС. В качестве консоли могут выступать различные физические устройства, например дисплей, пишущая машинка, телетайп или перфоленточный фотосчитыватель с заранее заготовленной перфолентой и т.д. Однако с точки зрения программиста обмен информацией с любым из этих устройств на логическом уровне адекватен. Поддержка этой адекватности возлагается на драйверы физических устройств. Аналогичный подход может быть применен и к логическому принтеру, и к дополнительному логическому устройству чтения-записи, выполняющему роль внешнего ОЗУ. В наиболее простых случаях :RD:—физическое устройство чтения с перфоленты или приемник из канала связи с другой МС, а :WR:—устройство записи на перфоленту или передатчик в канал связи. Внутренний интерфейс драйверов логической системы ВВ согласуется со стандартными правилами передачи параметров при вызовах физической системы ВВ, благодаря чему логические устройства могут назначаться и переназначаться на соответствующие физические устройства для реализации той или иной конфигурации ВВ.
Пользователь может самостоятельно расширить систему физического ВВ. Находясь в рамках стандартного интерфейса связи между физической и логической системой ВВ, можно переобозначить логические устройства на соответствующие физические и воспользоваться готовыми ресурсами логической среды ВВ для организации ввода или вывода на конкретное физическое устройство.
Функции логических устройств на рис. 5.6 выполняются с помощью 15-байтовой таблицы связи, располагаемой в области ОЗУ МК:
CIRDY: | JMP | S11 | ;:СI: = :I1: |
CORDY: | JMP | S10 | ;:СО: = :O1: |
LPRDY: | JMP | РАО | ;:LP: = :O3: |
RDRDY: | JMP | S21 | ;:RD: = :I2: |
WRRDY: | JMP | S20 | ;:WR: = :O2: |
По аналогии с драйверами физических устройств (физических драйверов) могут быть построены и драйверы логических устройств (логические драйверы), которые образуют второй слой логической системы ВВ. Если в функции первого слоя входит прямое управление физическим ПУ и поддержка интерфейса ПУ, то основным назначением второго слоя следует считать расширение набора типовых операций ВВ, облегчающих процесс прикладного программирования. Программист должен лишь подобрать нужную ему стандартную операцию ВВ из числа тех, которые поддерживают драйвер логического уровня.
Драйверы логических устройств могут иметь развитый набор функций ВВ. Так, входящий в состав мМС1204 драйвер консоли и принтера включает 20 процедур ВВ:
СО | Вывод символа из аккумулятора А на консоль |
СОТХТ | Вывод текста на консоль. Регистр ВС—указатель текста. Код 00—терминатор текста |
COLF | Перевод строки |
COTLE | Вывод текста в соответствии с СОТХТ и перевод строки |
СОН | Вывод значения младшей тетрады на консоль в шестнадцатевичном (HEX) формате |
СОН2 | Вывод содержимого А на консоль в НЕХ-формате |
СОН4 | Вывод содержимого ВС на консоль в НЕХ-формате |
MSGЕR | Вывод текста «ERROR» с HEX-кодом ошибки, лежащим в А |
CI | Ввод символа из консоли в А. Символ вводится без дублирования. Бит четности устанавливается равным нулю |
CIO | Ввод символа из консоли в А с дублированием |
HEXA | Преобразование лежащего в А НЕХ-символа в его двоичный эквивалент. Если исходный символ—не шестнадцатеричная цифра, то он не преобразуется и флажок CY = 1 |
CIH | Ввод в А шестнадцатеричной цифры в коде КОИ-7 и ее преобразование в двоичный эквивалент. При обнаружении ошибки флажок CY = 1 |
CIH2 | Ввод с консоли двух НЕХ-цифр в коде КОИ-7 и их преобразование в двоичный эквивалент, возвращаемый через А. При обнаружении ошибки флажок CY = 1 |
CIH21 | Ввод с консоли второй НЕХ-цифры в то время, когда в младшей тетраде А уже есть двоичный эквивалент первой. Используется после CI и НЕХА при CY = 0 |
CIH4 | Ввод четырех НЕХ-цифр в коде КОИ-7 и их преобразование в двоичный эквивалент, возвращаемый через регистровую пару ВС. При обнаружении ошибки флажок CY = 1 |
CIH41 | Ввод оставшихся трех НЕХ-цифр в то время, когда в младшей тетраде А уже есть двоичный код первой, и их совместное преобразование в двоичную форму, возвращаемую через ВС. При обнаружении ошибки флажок CY = 1. Применяется после CI и НЕХА при CY = 0 |
COLP | Вывод передаваемого через А символа на консоль с его копированием на принтер |
LP | Вывод передаваемого через А символа на принтер |
COPY | Включение копирования |
NCOPY | Выключение копирования |
Вывод на консоль может сопровождаться копированием диалога на принтер. Управление копированием (его включение и выключение) осуществляется специальными процедурами COPY и NCOPY.
Дата добавления: 2019-02-07; просмотров: 520;