Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессорные средства и системы.doc
Скачиваний:
56
Добавлен:
13.11.2019
Размер:
15.2 Mб
Скачать

5.3. Программирование системы ввода-вывода

В состав модуля мМС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.