From Felixl.com
ОПЕРАЦИОННАЯ СИСТЕМА ФОДОС-2
ПРОГРАММИРОВАНИЕ ПЕРИФЕРИЙНЫХ УСТРОЙСТВ
РУКОВОДСТВО СИСТЕМНОГО ПРОГРАММИСТА
589.7545471.00042-01 32 03
ЛИСТОВ 229
СОДЕРЖАНИЕ
1. ОБЩИЕ СВЕДЕНИЯ О ПРОГРАММЕ
2. СТРУКТУРА ПРОГРАММЫ
2.1. СЕКЦИЯ ОПРЕДЕЛЕНИЙ
2.1.1. ЗАПРОС .DRDEF
2.1.2. БАЙТ ИДЕНТИФИКАЦИИ УСТРОЙСТВА
2.1.3. СЛОВО СОСТОЯНИЯ УСТРОЙСТВА
2.1.4. СЛОВО РАЗМЕРА УСТРОЙСТВА
2.2. СЕКЦИЯ ЗАГОЛОВКА
2.2.1. ИНФОРМАЦИЯ В БЛОКЕ 0
2.2.2. ПЕРВЫЕ ПЯТЬ СЛОВ ДРАЙВЕРА
2.2.3. ЗАПРОС .DRBEG
2.2.4. МНОГОВЕКТОРНЫЕ ДРАЙВЕРЫ: ЗАПРОС .DRVTB
2.2.5. КОДЫ УСЛОВИЙ PS
2.3. СЕКЦИЯ ИНИЦИИРОВАНИЯ ВВОДА-ВЫВОДА
2.4. СЕКЦИЯ ОБРАБОТКИ ПРЕРЫВАНИЙ
2.4.1. ТОЧКА ВХОДА ПРЕЖДЕВРЕМЕННОГО ПРЕРЫВАНИЯ
2.4.2. ПОНИЖЕНИЕ ПРИОРИТЕТА ДО ПРИОРИТЕТА УСТРОЙСТВА
2.4.3. ЗАПРОС .DRAST
2.4.4. ОСНОВНЫЕ ПРАВИЛА ДЛЯ ПРОГРАММИРОВАНИЯ СЕКЦИИ ОБРАБОТКИ ПРЕРЫВАНИЙ
2.5. СЕКЦИЯ ЗАВЕРШЕНИЯ ВВОДА-ВЫВОДА
2.5.1. ЗАПРОС .DRFIN
2.6. СЕКЦИЯ ОКОНЧАНИЯ ДРАЙВЕРА
2.6.1. ЗАПРОС .DREND
2.6.2. ФИКТИВНЫЕ УСТРОЙСТВА
3. НАСТРОЙКА И ПРОВЕРКА ПРОГРАММЫ
3.1. ОБЩЕЕ ОПИСАНИЕ ДРАЙВЕРА УСТРОЙСТВА
3.2. ДРАЙВЕРЫ, КОТОРЫЕ ФОРМИРУЮТ ВНУТРЕННЮЮ ОЧЕРЕДЬ
3.2.1. ФОРМИРОВАНИЕ ВНУТРЕННЕЙ ОЧЕРЕДИ
3.2.2. ОБРАБОТКА ПРЕРЫВАНИЙ ДЛЯ ДРАЙВЕРОВ, ФОРМИРУЮЩИХ ВНУТРЕННЮЮ ОЧЕРЕДЬ
3.2.3. ПРОЦЕДУРЫ ПРЕЖДЕВРЕМЕННОГО ПРЕРЫВАНИЯ ДЛЯ ДРАЙВЕРОВ, ФОРМИРУЮЩИХ
ВНУТРЕННЮЮ ОЧЕРЕДЬ
3.3. ПАРАМЕТРЫ SET
3.3.1. КАК ВЫПОЛНЯЕТСЯ КОМАНДА SET
3.3.2. ФОРМАТ ТАБЛИЦЫ SET
3.3.3. ЗАПРОС .DRSET
3.3.4. ПОДПРОГРАММА ИЗМЕНЕНИЯ ДРАЙВЕРА
3.3.5. ПРИМЕРЫ ПАРАМЕТРОВ SET
3.4. КАК ПРОВЕРИТЬ И ОТЛАДИТЬ ДРАЙВЕР УСТРОЙСТВА
3.4.1. ИСПОЛЬЗОВАНИЕ ODT ДЛЯ ПРОВЕРКИ ДРАЙВЕРА
3.4.2. ИСПОЛЬЗОВАНИЕ ODT В ХМ
4. ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ
4.1. ПРОГРАММИРУЕМЫЙ ВВОД-ВЫВОД
4.2. ВВОД-ВЫВОД, ОБРАБАТЫВАЕМЫЙ ПО ПРЕРЫВАНИЯМ
4.2.1. КАК РАБОТАЮТ ПРЕРЫВАНИЯ
4.2.2. ПРИОРИТЕТЫ УСТРОЙСТВ И ПРОЦЕССОРА
4.2.3. СЛОВО СОСТОЯНИЯ ПРОЦЕССОРА
4.3. ВНУТРЕННИЕ ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЙ В
СРАВНЕНИИ С ДРАЙВЕРАМИ УСТРОЙСТВ
4.4. КАК ПЛАНИРОВАТЬ ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЙ
4.4.1. ИЗУЧИТЬ УСТРОЙСТВО
4.4.2. ПОДГОТОВКА БЛОК-СХЕМЫ ПРОГРАММЫ
4.4.3. НАПИСАНИЕ КОДОВ
4.4.4. ПРОВЕРКА И ОТЛАДКА
4.5. СТРУКТУРА ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЙ
4.5.1. ЗАЩИТА ВЕКТОРОВ: ЗАПРОС .PROTECT
4.5.2. УСТАНОВКА ВЕКТОРА ПРЕРЫВАНИЯ
4.5.3. ЧИСТАЯ ОСТАНОВКА: ЗАПРОС .DEVICE
4.5.4. ПОНИЖЕНИЕ ПРИОРИТЕТА ПРОЦЕССОРА: ЗАПРОС .INTEN
4.5.5. ИСПОЛЬЗОВАНИЕ ПРОГРАММНОГО ЗАПРОСА .SYNCH
4.5.6. ВЫПОЛНЕНИЕ НА FORK-УРОВНЕ: ЗАПРОС .FORK
4.5.7. ИТОГ ПО .INTEN, .FORK И .SYNCH
4.5.8. ВЫХОД ИЗ ОБРАБОТКИ ПРЕРЫВАНИЯ: RTS PC
4.6. СХЕМАТИЧЕСКАЯ КОНСТРУКЦИЯ ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЙ
5. ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ
5.1. ТАЙМ-АУТ УСТРОЙСТВА ВВОДА-ВЫВОДА
5.1.1. ЗАПРОС .TIMIO
5.1.2. ЗАПРОС .CTIMIO
5.1.3. ПРИМЕНЕНИЕ ТАЙМ-АУТА УСТРОЙСТВА
5.2. РЕГИСТРАЦИЯ ОШИБОК
5.2.1. КОГДА И КАК ВЫЗЫВАТЬ РЕГИСТРАТОР ОШИБОК
5.3. СПЕЦИАЛЬНЫЕ ФУНКЦИИ
5.3.1. ПРОГРАММНЫЙ ЗАПРОС .SPFUN
5.3.2. ПОДДЕРЖКА СПЕЦИАЛЬНЫХ ФУНКЦИЙ В ДРАЙВЕРЕ УСТРОЙСТВА
5.3.3. ТОМА ПЕРЕМЕННОГО РАЗМЕРА
5.3.4. УСТРОЙСТВА СО СПЕЦИАЛЬНЫМИ СПРАВОЧНИКАМИ
5.4. ДРАЙВЕРЫ УСТРОЙСТВ В XM-СИСТЕМЕ
5.4.1. УСЛОВНЫЕ ОБОЗНАЧЕНИЯ НАИМЕНОВАНИЙ И УСЛОВНЫЕ ОБОЗНАЧЕНИЯ СИСТЕМЫ
5.4.2. XM-СРЕДА
5.4.3. ЭЛЕМЕНТ ОЧЕРЕДИ В XM
5.4.4. УСТРОЙСТВА ПРОИЗВОЛЬНОГО ДОСТУПА К ДАННЫМ:ПОДПРОГРАММА $MPPHY
5.4.5. СИМВОЛЬНО-ОРИЕНТИРОВАННЫЕ УСТРОЙСТВА:
ПОДПРОГРАММЫ $GETBYT И $PUTBYT
5.4.6. ДРУГИЕ УСТРОЙСТВА: ПОДПРОГРАММА $PUTWRD
5.4.7. ДРАЙВЕРЫ, КОТОРЫЕ ИМЕЮТ НЕПОСРЕДСТВЕННЫЙ ДОСТУП
К БУФЕРУ ПОЛЬЗОВАТЕЛЯ
5.5. ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ В СИСТЕМЕ XM
6. УСТАНОВКА ДРАЙВЕРА УСТРОЙСТВА
6.1. ДРАЙВЕРЫ СИСТЕМНОГО УСТРОЙСТВА И НАЧАЛЬНЫЙ ЗАГРУЗЧИК
6.1.1. ФАЙЛЫ МОНИТОРА
6.1.2. СОЗДАНИЕ ДРАЙВЕРА СИСТЕМНОГО УСТРОЙСТВА
6.1.3. DUP И ПРОЦЕСС НАЧАЛЬНОЙ ЗАГРУЗКИ
6.2. КАК ТРАНСЛИРОВАТЬ, СВЯЗЫВАТЬ И УСТАНАВЛИВАТЬ ДРАЙВЕР УСТРОЙСТВА
6.2.1. ТРАНСЛИРОВАНИЕ ДРАЙВЕРА УСТРОЙСТВА
6.2.2. СВЯЗЫВАНИЕ ДРАЙВЕРА УСТРОЙСТВА
6.2.3. УСТАНОВКА ДРАЙВЕРА УСТРОЙСТВА
6.3. СОДЕРЖИМОЕ СИСТЕМНОГО ДРАЙВЕРА
1. ОБЩИЕ СВЕДЕНИЯ О ПРОГРАММЕ
В ДАННОМ ДОКУМЕНТЕ БУДЕТ РАССМОТРЕНА СТРУКТУРА
СТАНДАРТНОГО ДРАЙВЕРА И ОБЩЕЕ ОПИСАНИЕ СХЕМЫ ОБЫЧНОГО
ДРАЙВЕРА, ПОДРОБНО ОПИСАНЫ ДОПОЛНИТЕЛЬНЫЕ СРЕДСТВА
(ВНУТРЕННЯЯ ОЧЕРЕДНОСТЬ, ПАРАМЕТРЫ КОМАНДЫ SET, ПОДДЕРЖКА
ТАЙМ-АУТА ВВОДА-ВЫВОДА УСТРОЙСТВА, СПЕЦИАЛЬНЫЕ ФУНКЦИИ,
РЕГИСТРАЦИЯ ОШИБОК И СПЕЦИАЛЬНЫЕ УСЛУГИ, ИМЕЮЩИЕСЯ В СИСТЕМЕ
XM) ДЛЯ ДРАЙВЕРОВ И ИХ ВЫПОЛНЕНИЕ. БУДЕТ ПОКАЗАНО ОТЛИЧИЕ
СИСТЕМНОГО ДРАЙВЕРА ОТ СТАНДАРТНОГО (ЭТО НЕОБХОДИМО ДЛЯ
ЗАПИСИ НАЧАЛЬНОГО ЗАГРУЗЧИКА НА СИСТЕМНОЕ УСТРОЙСТВО).
ПЕРЕД НАПИСАНИЕМ ДРАЙВЕРА УСТРОЙСТВА НЕОБХОДИМО:
- ПОДРОБНО ИЗУЧИТЬ УСТРОЙСТВО;
- ИЗУЧИТЬ СТРУКТУРУ СТАНДАРТНОГО ДРАЙВЕРА УСТРОЙСТВА;
- ИЗУЧИТЬ СХЕМУ ДРАЙВЕРА УСТРОЙСТВА;
- ПОДУМАТЬ ОБ ИСПОЛЬЗОВАНИИ СПЕЦИАЛЬНЫХ СРЕДСТВ;
- ИЗУЧИТЬ ПРИМЕРЫ ДРАЙВЕРОВ;
- ПОДГОТОВИТЬ БЛОК-СХЕМУ ДРАЙВЕРА УСТРОЙСТВА;
- НАПИСАТЬ ПРОГРАММУ ДРАЙВЕРА;
- УСТАНОВИТЬ, ПРОВЕРИТЬ И ОТЛАДИТЬ ДРАЙВЕР.
2. СТРУКТУРА ПРОГРАММЫ
ДРАЙВЕР УСТРОЙСТВА СИСТЕМЫ ФОДОС-2 СОСТОИТ ИЗ ШЕСТИ
СЛЕДУЮЩИХ СЕКЦИЙ:
- ОПРЕДЕЛЕНИЯ;
- ЗАГОЛОВОК;
- ИНИЦИИРОВАНИЕ ВВОДА-ВЫВОДА;
- ОБРАБОТКА ПРЕРЫВАНИЙ;
- ЗАВЕРШЕНИЕ ВВОДА-ВЫВОДА;
- ОКОНЧАНИЕ ДРАЙВЕРА.
КАЖДАЯ СЕКЦИЯ - ЭТО ОТДЕЛЬНЫЙ ЛОГИЧЕСКИЙ БЛОК,
СОДЕРЖАЩИЙ КОД ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ. ТАК КАК
МАКРОБИБЛИОТЕКА СИСТЕМЫ ФОДОС-2 ПРЕДУСМАТРИВАЕТ СПЕЦИАЛЬНЫЕ
ЗАПРОСЫ ДЛЯ ГЕНЕРАЦИИ ТРЕБУЕМОГО КОДА ДЛЯ КАЖДОЙ ЧАСТИ, ТО
НАПИСАНИЕ ИХ НЕСЛОЖНО, НЕОБХОДИМО ЛИШЬ ВНИМАТЕЛЬНЕЕ ИЗУЧИТЬ
ПРИМЕРЫ ДРАЙВЕРОВ УСТРОЙСТВ.
2.1. СЕКЦИЯ ОПРЕДЕЛЕНИЙ
ИСХОДНЫЙ ФАЙЛ ДРАЙВЕРА УСТРОЙСТВА НАЧИНАЕТСЯ С СЕКЦИИ
ОПРЕДЕЛЕНИЙ, КОТОРАЯ ВКЛЮЧАЕТ ДИРЕКТИВУ .MCALL ДЛЯ ЗАПРОСА
.DRDEF И ДРУГИХ ЗАПРОСОВ. БОЛЬШУЮ ЧАСТЬ РАБОТ В СЕКЦИИ
ОПРЕДЕЛЕНИЙ ОСУЩЕСТВЛЯЕТ ЗАПРОС .DRDEF.
2.1.1. ЗАПРОС .DRDEF
ЗАПРОС .DRDEF ИСПОЛЬЗУЕТСЯ В НАЧАЛЕ ДРАЙВЕРА УСТРОЙСТВА
И ВЫПОЛНЯЕТ СЛЕДУЮЩИЕ ФУНКЦИИ:
- ВЫДАЕТ ДИРЕКТИВУ .MCALL ДЛЯ ВСЕХ ОТНОСЯЩИХСЯ К
ДРАЙВЕРУ ЗАПРОСОВ;
- ОБЕСПЕЧИВАЕТ ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ ДЛЯ УСЛОВНЫХ
ОБОЗНАЧЕНИЙ СИСТЕМЫ;
- ВЫЗЫВАЕТ ЗАПРОС .QELDF ДЛЯ ОПРЕДЕЛЕНИЯ СМЕЩЕНИЯ
ЭЛЕМЕНТОВ ОЧЕРЕДИ;
- ОПРЕДЕЛЯЕТ КОМБИНАЦИИ РАЗРЯДОВ СОСТОЯНИЯ УСТРОЙСТВА;
- ОПРЕДЕЛЯЕТ РАЗМЕР УСТРОЙСТВА В БЛОКАХ (DDDSIZ);
- ОПРЕДЕЛЯЕТ ИДЕНТИФИКАЦИЮ УСТРОЙСТВА (DD$COD);
- УСТАНАВЛИВАЕТ СЛОВО СОСТОЯНИЯ УСТРОЙСТВА, ИСПОЛЬЗУЯ
DDDSIZ И DD$COD;
- ОБЕСПЕЧИВАЕТ ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ ДЛЯ РЕГИСТРА
СОСТОЯНИЯ УСТРОЙСТВА (DD$CSR) И ВЕКТОРА ПРЕРЫВАНИЯ (DD$VEC);
- ДЕЛАЕТ СИМВОЛЫ DD$CSR И DD$VEC ГЛОБАЛЬНЫМИ.
ЗДЕСЬ И ДАЛЕЕ DD - ДВУХСИМВОЛЬНОЕ ИМЯ УСТРОЙСТВА.
ФОРМАТ ЗАПРОСА .DRDEF СЛЕДУЮЩИЙ:
.DRDEF NAME,CODE,STAT,SIZE,CSR,VEC
ГДЕ NAME - ДВУХСИМВОЛЬНОЕ ИМЯ УСТРОЙСТВА (НАПРИМЕР, MT ДЛЯ
МАГНИТНОЙ ЛЕНТЫ);
CODE - ВОСЬМЕРИЧНОЕ ЧИСЛО, ОПРЕДЕЛЯЮЩЕЕ УСТРОЙСТВО (СМ.
ТАБЛ.1);
STAT - КОМБИНАЦИЯ РАЗРЯДОВ СОСТОЯНИЯ УСТРОЙСТВА (СМ.
ТАБЛ.2);
SIZE - РАЗМЕР УСТРОЙСТВА В БЛОКАХ (ПО 256 СЛОВ); ЕСЛИ
УСТРОЙСТВО НЕФАЙЛОВОЙ СТРУКТУРЫ, ТО SIZE=0;
CSR - АДРЕС РЕГИСТРА СОСТОЯНИЯ УСТРОЙСТВА ПО УМОЛЧАНИЮ;
VEC - АДРЕС ВЕКТОРА ПРЕРЫВАНИЯ УСТРОЙСТВА ПО УМОЛЧАНИЮ.
ЗАПРОС .DRDEF ВЫДАЕТ ДИРЕКТИВУ .MCALL ДЛЯ СЛЕДУЮЩИХ
ЗАПРОСОВ:
.DRAST .DRBEG .DRFIN
.DRBOT .DREND .DRSET
.DRVTB .FORK .QELDF
КРОМЕ ТОГО, ЕСЛИ В ДРАЙВЕРЕ ПРИ ГЕНЕРАЦИИ СИСТЕМЫ
ВЫБРАНА ПОДДЕРЖКА ТАЙМЕРА (TIM$IT=1), ТО .DRDEF ВЫДАЕТ
ДИРЕКТИВУ .MCALL ДЛЯ ЗАПРОСОВ .TIMIO И .CTIMIO.
2.1.1.1. УСЛОВИЯ ГЕНЕРАЦИИ СИСТЕМЫ
В СИСТЕМЕ ФОДОС-2 ШИРОКО ИСПОЛЬЗУЮТСЯ УСЛОВНЫЕ
ДИРЕКТИВЫ ПРИ ТРАНСЛИРОВАНИИ. СЕКЦИИ ПРОГРАММЫ НА ИСХОДНОМ
ЯЗЫКЕ УЧАСТВУЮТ В ТРАНСЛИРОВАНИИ ИЛИ НЕТ, В ЗАВИСИМОСТИ ОТ
ЗНАЧЕНИЯ УСЛОВНЫХ СИМВОЛОВ. НАПРИМЕР, ФОДОС-2 ИСПОЛЬЗУЕТ
УСЛОВНЫЙ СИМВОЛ ERL$G ДЛЯ ПОКАЗА - ДОЛЖНА ЛИ ТРАНСЛИРОВАТЬСЯ
ПОДПРОГРАММА РЕГИСТРАЦИИ ОШИБОК ИЛИ НЕТ. ЕСЛИ В ДРАЙВЕРЕ
УСТРОЙСТВА ИСПОЛЬЗУЮТСЯ УСЛОВНЫЕ СИМВОЛЫ, ТО ОНИ ДОЛЖНЫ
СОГЛАСОВЫВАТЬСЯ СО СТАНДАРТНЫМИ, ИСПОЛЬЗУЮЩИМИСЯ В ФОДОС-2.
ПРИ РАВЕНСТВЕ НУЛЮ УСЛОВНОГО СИМВОЛА ДАННАЯ ОСОБЕННОСТЬ НЕ
ВКЛЮЧАЕТСЯ ПРИ ТРАНСЛИРОВАНИИИ ПРОГРАММЫ, В СЛУЧАЕ, КОГДА
УСЛОВНЫЙ СИМВОЛ РАВЕН 1, ЭТА ОСОБЕННОСТЬ ПРИСУТСТВУЕТ;
ФОДОС-2 ИСПОЛЬЗУЕТ ТОЛЬКО ЗНАЧЕНИЯ 0 И 1; ЕСЛИ УСЛОВНЫЕ
СИМВОЛЫ ИМЕЮТ ЗНАЧЕНИЯ ИНЫЕ, ЧЕМ 0, TO .DRDEF ПРИРАВНИВАЕТ
ИХ 1.
ЗАПРОС .DRDEF ПРИРАВНИВАЕТ НУЛЮ ПРИ ГЕНЕРАЦИИ СИСТЕМЫ
TIM$IT (ДЛЯ ТАЙМ-АУТА УСТРОЙСТВА), MMG$T (ДЛЯ ПОДДЕРЖКИ
РАСШИРЕННОЙ ПАМЯТИ) И ERL$G (ДЛЯ РЕГИСТРАЦИИ ОШИБОК), ЕСЛИ
НЕ ОПРЕДЕЛИТЬ ИХ В НАЧАЛЕ ФАЙЛА ПРИ ТРАНСЛИРОВАНИИ.
2.1.1.2. СМЕЩЕНИЕ ЭЛЕМЕНТОВ ОЧЕРЕДИ
ЗАПРОС .DRDEF ВЫЗЫВАЕТ ЗАПРОС .QELDF ДЛЯ ОПРЕДЕЛЕНИЯ
СМЕЩЕНИЙ ЭЛЕМЕНТОВ ОЧЕРЕДИ СИМВОЛИЧЕСКИ. НИЖЕ ПРИВЕДЕНЫ
СГЕНЕРИРОВАННЫЕ СМЕЩЕНИЯ ЭЛЕМЕНТОВ ОЧЕРЕДИ:
Q.LINK=0 (СВЯЗЬ СО СЛЕДУЮЩИМ ЭЛЕМЕНТОМ ОЧЕРЕДИ)
Q.CSW=2. (УКАЗАТЕЛЬ ДЛЯ СЛОВА СОСТОЯНИЯ КАНАЛА)
Q.BLKN=4. (НОМЕР ФИЗИЧЕСКОГО БЛОКА)
Q.FUNC=6. (КОД СПЕЦИАЛЬНОЙ ФУНКЦИИ)
Q.JNUM=7. (НОМЕР ЗАДАНИЯ)
Q.UNIT=7. (НОМЕР ПРИВОДА УСТРОЙСТВА)
Q.BUFF=^o10 (АДРЕС БУФЕРА ПОЛЬЗОВАТЕЛЯ)
Q.WCNT=^o12 (СЧЕТЧИК СЛОВ)
Q.COMP=^o14 (КОД ПОДПРОГРАММЫ ЗАВЕРШЕНИЯ)
Q.ELGH=^o16 (РАЗМЕР ЭЛЕМЕНТА ОЧЕРЕДИ)
ТАК КАК ДРАЙВЕР ОБЫЧНО РАССМАТРИВАЕТ ТОЛЬКО СМЕЩЕНИЯ
ЭЛЕМЕНТОВ ОЧЕРЕДИ ОТНОСИТЕЛЬНО Q.BLKN, ЗАПРОС .QELDF
ОПРЕДЕЛЯЕТ ТАКЖЕ СЛЕДУЮЩИЕ СИМВОЛИЧЕСКИЕ СМЕЩЕНИЯ:
Q$LINK=-4
Q$CSW=-2
Q$BLKN=0
Q$FUNC=2
Q$JNUM=3
Q$UNIT=3
Q$BUFF=4
Q$WCNT=6
Q$COMP=10
2.1.1.3. ОПРЕДЕЛЕНИЕ СИМВОЛОВ
ДЛЯ ОПРЕДЕЛЕНИЯ СИМВОЛОВ ИСПОЛЬЗУЮТСЯ ОПЕРАТОРЫ ПРЯМОГО
ПРИСВАИВАНИЯ. ОБЫЧНО ТАКИМ ОБРАЗОМ ОПРЕДЕЛЯЮТСЯ РЕГИСТРЫ
УСТРОЙСТВ И ДРУГИЕ НЕОБХОДИМЫЕ ВНУТРЕННИЕ СИМВОЛЫ. НИЖЕ
ПРИВЕДЕНЫ ПРИМЕРЫ ИЗ ДРАЙВЕРОВ УСТРОЙСТВ СИСТЕМЫ ФОДОС-2.
НАПРИМЕР, ДЛЯ ОПРЕДЕЛЕНИЯ ВНУТРЕННЕГО СИМВОЛА ДЛЯ
ПЕРЕВОДА СТРОКИ (КОД 12 В КОИ-7):
LF =12 ;ПЕРЕВОД СТРОКИ
РЕГИСТРЫ УСТРОЙСТВА ОПРЕДЕЛЯЮТСЯ СЛЕДУЮЩИМ ОБРАЗОМ:
RKDS =RK$CSR ;РЕГИСТР СОСТОЯНИЯ ПРИВОДА
RKER =RKDS+2 ;РЕГИСТР ОШИБКИ
RKCS =RKDS+4 ;РЕГИСТР СОСТОЯНИЯ
RKWC =RKDS+6 ;РЕГИСТР СЧЕТЧИКА СЛОВ
ЗАПРОС .DRDEF ОПРЕДЕЛЯЕТ ДЛЯ ПОЛЬЗОВАТЕЛЯ СЛЕДУЮЩИЕ
СИМВОЛЫ:
HDERR$=1 ;РАЗРЯД НЕВОССТАНОВИМОЙ ОШИБКИ В CSW
EOF=20000 ;РАЗРЯД КОНЦА ФАЙЛА В CSW
2.1.2. БАЙТ ИДЕНТИФИКАЦИИ УСТРОЙСТВА
МЛАДШИЙ БАЙТ СЛОВА СОСТОЯНИЯ УСТРОЙСТВА, БАЙТ
ИДЕНТИФИКАЦИИ УСТРОЙСТВА, ОПРЕДЕЛЯЕТ КАЖДОЕ УСТРОЙСТВО В
СИСТЕМЕ. ЧТОБЫ УКАЗАТЬ КОНКРЕТНОЕ УСТРОЙСТВО, НЕОБХОДИМО
УКАЗАТЬ ОПРЕДЕЛЕННЫЙ КОД В АРГУМЕНТЕ CODE ЗАПРОСА .DRDEF.
ВОСЬМЕРИЧНЫЕ ЗНАЧЕНИЯ КОДА ПРИВЕДЕНЫ В ТАБЛ.1.
ИМЯ КОД УСТРОЙСТВО
RK 0 КАССЕТНЫЙ МАГНИТНЫЙ ДИСК ТИПА СМ 5400
1 ЗАРЕЗЕРВИРОВАН
EL 2 ЛОГИЧЕСКОЕ УСТРОЙСТВО РЕГИСТРАЦИИ ОШИБОК
LP 3 ПОСТРОЧНО-ПЕЧАТАЮЩЕЕ УСТРОЙСТВО
TT,BA 4 СИСТЕМНЫЙ ТЕРМИНАЛ 15ИЭ-00-013 ИЛИ ДРАЙВЕР ПАКЕТНОЙ ОБРАБОТКИ
5 ЗАРЕЗЕРВИРОВАН
DY 6 ГИБКИЙ ДИСК С ДВОЙНОЙ ПЛОТНОСТЬЮ ЗАПИСИ
PC 7 ПЕРФОЛЕНТОЧНОЕ УСТРОЙСТВО ВВОДА (FS 1501) И ВЫВОДА (ПЛ-150)
10 ЗАРЕЗЕРВИРОВАН
MT 11 МАГНИТНАЯ ЛЕНТА ТИПА СМ 5300.01
12-20 ЗАРЕЗЕРВИРОВАНЫ
DP 21 ПАКЕТ МАГНИТНЫХ ДИСКОВ (29 МГБАЙТ)
DX 22 ГИБКИЙ ДИСК ТИПА "ЭЛЕКТРОНИКА ГМД-7012"
23-24 ЗАРЕЗЕРВИРОВАНЫ
NL 25 ФИКТИВНОЕ УСТРОЙСТВО
26-33 ЗАРЕЗЕРВИРОВАНЫ
DD 34 МАГНИТНАЯ ЛЕНТА КАССЕТНОГО ТИПА
35-40 ЗАРЕЗЕРВИРОВАНЫ
LS 41 ПОСТРОЧНО-ПЕЧАТАЮЩЕЕ УСТРОЙСТВО ПОСЛЕДОВАТЕЛЬНОГО ТИПА
MQ 42 ДРАЙВЕР ОБМЕНА МЕЖДУ ЗАДАНИЯМИ
43-45 ЗАРЕЗЕРВИРОВАНЫ
LD 46 ДРАЙВЕР ЛОГИЧЕСКОГО ДИСКА
VM 47 ДРАЙВЕР РАСШИРЕННОЙ ПАМЯТИ
DU 50 ДИСКИ ВИНЧЕСТЕРСКОГО ТИПА ИЛИ МИНИ-ГИБКИЕ ДИСКИ
SL 51 РЕДАКТОР КОМАНДНОЙ СТРОКИ
ДЛЯ СОЗДАНИЯ КОДА ИДЕНТИФИКАЦИИ УСТРОЙСТВ, КОТОРЫЕ НЕ
ПОДДЕРЖИВАЮТСЯ СИСТЕМОЙ ФОДОС-2, МОЖНО ПОЛЬЗОВАТЬСЯ
ЗНАЧЕНИЕМ КОДА 377 ДЛЯ ПЕРВОГО НЕПРЕДУСМОТРЕННОГО
УСТРОЙСТВА, 376 - ДЛЯ ВТОРОГО И Т.Д. ГЛАВНОЕ, ЧТОБЫ ЭТИ
КОДЫ НЕ ПРОТИВОРЕЧИЛИ КОДАМ, КОТОРЫЕ БУДУТ ИСПОЛЬЗОВАТЬСЯ В
БУДУЩЕМ.
2.1.3. СЛОВО СОСТОЯНИЯ УСТРОЙСТВА
СЛОВО СОСТОЯНИЯ УСТРОЙСТВА ОПРЕДЕЛЯЕТ КАЖДОЕ ФИЗИЧЕСКОЕ
УСТРОЙСТВО В СИСТЕМЕ ФОДОС-2 И СОДЕРЖИТ ИНФОРМАЦИЮ О ТОМ,
КАКОЕ ЭТО УСТРОЙСТВО: ПРОИЗВОЛЬНОГО ИЛИ ПОСЛЕДОВАТЕЛЬНОГО
ДОСТУПА К ДАННЫМ. СЛОВО СОСТОЯНИЯ УСТРОЙСТВА ЗАПИСЫВАЕТСЯ В
НУЛЕВОЙ БЛОК ФАЙЛА ДРАЙВЕРА УСТРОЙСТВА И В ТАБЛИЦУ $STAT,
КОГДА УСТРОЙСТВО УСТАНОВЛЕНО; ПРОГРАММНЫЙ ЗАПРОС .DSTATUS
ВОЗВРАЩАЕТ ЭТО ЗНАЧЕНИЕ В ВЫПОЛНЯЮЩУЮСЯ ПРОГРАММУ. ЗАПРОС
.DRDEF УСТАНАВЛИВАЕТ СЛОВО СОСТОЯНИЯ УСТРОЙСТВА НА ОСНОВАНИИ
АРГУМЕНТОВ CODE И STAT.
В ТАБЛ.2 ПОКАЗАНЫ ЗНАЧЕНИЯ РАЗРЯДОВ В СЛОВЕ СОСТОЯНИЯ
УСТРОЙСТВА. ЗАПРОС .DRDEF ИСПОЛЬЗУЕТ СИМВОЛ DDSTS ДЛЯ
ОПРЕДЕЛЕНИЯ СЛОВА СОСТОЯНИЯ УСТРОЙСТВА.
ТАБЛИЦА 2
РАЗРЯД СИМВОЛ ЗНАЧЕНИЕ
0-7 - БАЙТ ИДЕНТИФИКАЦИИ УСТРОЙСТВА
8 VARSZ$ 0 = ЗАПРОС .SPFUN 373 НЕДОПУСТИМ ДЛЯ
ЭТОГО ДРАЙВЕРА
1 = ДРАЙВЕР ДОПУСКАЕТ ИСПОЛЬЗОВАНИЕ
ЗАПРОСА .SPFUN 373 (ВОЗВРАЩАЕТ РАЗМЕР ТОМА)
9 ABTIO$ 0 = ВХОД В ДРАЙВЕР ОСУЩЕСТВЛЯЕТСЯ НЕ В ТОЧКЕ ПРЕЖДЕВРЕМЕННОГО
ПРЕРЫВАНИЯ ПО НОРМАЛЬНОМУ ВЫХОДУ ИЗ ПРОГРАММЫ
1 = ВХОД В ДРАЙВЕР ОСУЩЕСТВЛЯЕТСЯ В ТОЧКЕ ПРЕЖДЕВРЕМЕННОГО
ПРЕРЫВАНИЯ ВСЯКИЙ РАЗ ПО ОКОНЧАНИИ ПРОГРАММЫ
10 SPFUN$ 0 = ЗАПРОС .SPFUN НЕДОПУСТИМ
1 = ДРАЙВЕР ДОПУСКАЕТ ИСПОЛЬЗОВАНИЕ .SPFUN
11 HNDLR$ 0 = ВВОДИТ ДРАЙВЕР В ТОЧКУ ВХОДА ПРЕЖДЕВРЕМЕННОГО ПРЕРЫВАНИЯ,
ЕСЛИ В ПРЕРВАННОМ ЗАДАНИИ ЕСТЬ АКТИВНЫЙ ЭЛЕМЕНТ ОЧЕРЕДИ
1 = ВВОДИТ ДРАЙВЕР В ТОЧКУ ВХОДА ПРЕЖДЕВРЕМЕННОГО ПРЕРЫВАНИЯ
ВО ВСЕХ СЛУЧАЯХ ПРЕЖДЕВРЕМЕННЫХ ПРЕРЫВАНИЙ.
ЭТОТ РАЗРЯД ИГНОРИРУЕТСЯ В СИСТЕМЕ SJ
12 SPECL$ 1 = УСТРОЙСТВО СПЕЦИАЛЬНОЙ СПРАВОЧНОЙ
СТРУКТУРЫ (НАПРИМЕР, MT)
13 WONLY$ 1 = УСТРОЙСТВО ТОЛЬКО ДЛЯ ЗАПИСИ
14 RONLY$ 1 = УСТРОЙСТВО ТОЛЬКО ДЛЯ ЧТЕНИЯ
15 FILST$ 0 = УСТРОЙСТВО ПОСЛЕДОВАТЕЛЬНОГО ДОСТУПА (НАПРИМЕР, LP)
1 = УСТРОЙСТВО ПРОИЗВОЛЬНОГО ДОСТУПА (НАПРИМЕР, RK, DX)
РАЗРЯД 11 В СЛОВЕ СОСТОЯНИЯ УСТРОЙСТВА УСТАНАВЛИВАЕТСЯ ДЛЯ
ДРАЙВЕРОВ УСТРОЙСТВ, КОТОРЫЕ ПЕРЕМЕЩАЮТ ЭЛЕМЕНТ ОЧЕРЕДИ ПРИ
ВВОДЕ И ОРГАНИЗУЮТ ВНУТРЕННЮЮ ОЧЕРЕДЬ, И ДЛЯ УСТРОЙСТВ,
ТАКИХ, КАК МАГНИТНАЯ ЛЕНТА, КОТОРЫЕ ИМЕЮТ ВНУТРЕННИЕ ДАННЫЕ,
КОТОРЫЕ МОГУТ ИЗМЕНИТЬСЯ ПРИ ПРЕЖДЕВРЕМЕННОМ ПРЕРЫВАНИИ.
ПРЕДПОЛАГАЕТСЯ, ЧТО ВСЕ ДРАЙВЕРЫ УСТРОЙСТВ, У КОТОРЫХ
УСТАНОВЛЕН РАЗРЯД 15, ЯВЛЯЮТСЯ УСТРОЙСТВАМИ ФАЙЛОВОЙ
СТРУКТУРЫ В СИСТЕМЕ ФОДОС-2 ДЛЯ БОЛЬШИНСТВА ПРОГРАММ,
ОБСЛУЖИВАЮЩИХ СИСТЕМУ. САМЫМ ПРОСТЫМ СПОСОБОМ ОПРЕДЕЛЕНИЯ
СЛОВА СОСТОЯНИЯ УСТРОЙСТВА ЯВЛЯЕТСЯ ИСПОЛЬЗОВАНИЕ МНЕМОНИКИ
ДЛЯ КОМБИНАЦИИ ДВОИЧНЫХ РАЗРЯДОВ, КОТОРЫЕ ОПРЕДЕЛЯЮТ ЗАПРОС
.DRDEF. ТАКИМ ОБРАЗОМ, МОЖНО СОЗДАТЬ АРГУМЕНТ STAT
ПОСРЕДСТВОМ ОБ'ЕДИНЕНИЯ (С ПОМОЩЬЮ ОПЕРАЦИИ "ИЛИ")
СООТВЕТСТВУЮЩИХ СИМВОЛОВ ИЗ ВЫШЕПРИВЕДЕННОГО ПЕРЕЧНЯ:
FILST$ ==100000 ;ФАЙЛОВАЯ СТРУКТУРА ПРОИЗВОЛЬНОГО
;ДОСТУПА К ДАННЫМ
RONLY$ ==40000 ;ТОЛЬКО ЧТЕНИЕ
WONLY$ ==20000 ;ТОЛЬКО ЗАПИСЬ
SPECL$ ==10000 ;НЕСПРАВОЧНАЯ СТРУКТУРА
HNDLR$ ==4000 ;ВВОД ДРАЙВЕРА ПРИ ПРЕЖДЕВРЕМЕННОМ
;ПРЕРЫВАНИИ
SPFUN$ ==2000 ;ИСПОЛЬЗОВАНИЕ СПЕЦИАЛЬНЫХ ФУНКЦИЙ
ABTIO$ ==1000 ;ВСЕГДА ВЫПОЛНЯЕТ ПРЕЖДЕВРЕМЕННОЕ
;ПРЕКРАЩЕНИЕ ВХОДА
VARSZ$ ==400 ;ПОДДЕРЖКА ДРАЙВЕРОМ ТОМОВ
;ПЕРЕМЕННОГО РАЗМЕРА
ПРИМЕР:
ДЛЯ RK: FILST$
ДЛЯ MT: SPECL$!SPFUN$
ДЛЯ LP: WONLY$
В ЭТОМ ПРИМЕРЕ ПРИВЕДЕН АРГУМЕНТ STAT ДЛЯ ДРАЙВЕРОВ
УСТРОЙСТВ RK, MT, LP.
2.1.4. СЛОВО РАЗМЕРА УСТРОЙСТВА
АРГУМЕНТ SIZE В ЗАПРОСЕ .DRDEF ОПРЕДЕЛЯЕТ РАЗМЕР
УСТРОЙСТВА В БЛОКАХ. ЗАПРОС .DRDEF ПОМЕЩАЕТ ЗНАЧЕНИЕ
РАЗМЕРА УСТРОЙСТВА В DDDSIZ. ЕСЛИ УСТРОЙСТВО НЕ ЯВЛЯЕТСЯ
УСТРОЙСТВОМ ПРОИЗВОЛЬНОГО ДОСТУПА К ДАННЫМ, НЕОБХОДИМО
ПОМЕСТИТЬ ЗНАЧЕНИЕ 0 В SIZE. НАПРИМЕР, РАЗМЕР УСТРОЙСТВА
DX: РАВЕН 486 БЛОКАМ (746 ВОСЬМЕРИЧНЫЙ); РАЗМЕР УСТРОЙСТВА
PC: РАВЕН 0, Т.К. ОНО НЕ ЯВЛЯЕТСЯ УСТРОЙСТВОМ
ПРОИЗВОЛЬНОГО ДОСТУПА К ДАННЫМ.
ПРОГРАММНЫЙ ЗАПРОС .DSTATUS ВОЗВРАЩАЕТ ЗНАЧЕНИЕ СЛОВА
РАЗМЕРА УСТРОЙСТВА В ВЫПОЛНЯЮЩУЮСЯ ПРОГРАММУ.
2.2. СЕКЦИЯ ЗАГОЛОВКА
В ЗАГОЛОВКЕ ДРАЙВЕРА ВЫЗЫВАЕТСЯ ЗАПРОС .DRBEG ДЛЯ
УСТАНОВКИ ПЕРВЫХ ПЯТИ СЛОВ ДРАЙВЕРА. КРОМЕ ТОГО, ЭТОТ
ЗАПРОС ЗАПИСЫВАЕТ 5 СЛОВ ИНФОРМАЦИИ В БЛОК 0 ФАЙЛА ДРАЙВЕРА,
В ЯЧЕЙКИ С 52 ПО 60, И СОЗДАЕТ НЕСКОЛЬКО ГЛОБАЛЬНЫХ
СИМВОЛОВ. ДАННЫЕ, КОТОРЫЕ УСТАНАВЛИВАЮТСЯ В СЕКЦИИ
ЗАГОЛОВКА, ИСПОЛЬЗУЮТСЯ ПРИ ЗАГРУЗКЕ ДРАЙВЕРА В ПАМЯТЬ
ПОСРЕДСТВОМ ПРОГРАММНОГО ЗАПРОСА .FETCH ИЛИ КОМАНДЫ МОНИТОРА
LOAD. СОДЕРЖИМОЕ ЯЧЕЙКИ 176 ИСПОЛЬЗУЕТСЯ НАЧАЛЬНЫМ
ЗАГРУЗЧИКОМ ДЛЯ ПРОВЕРКИ НАЛИЧИЯ АППАРАТУРЫ УСТРОЙСТВА ВО
ВРЕМЯ УСТАНОВКИ ДРАЙВЕРА.
2.2.1. ИНФОРМАЦИЯ В БЛОКЕ 0
В ТАБЛ.3 ПРИВЕДЕНЫ 5 СЛОВ В БЛОКЕ 0, КОТОРЫЕ ЗАПРОС
.DRBEG УСТАНАВЛИВАЕТ ПОСРЕДСТВОМ ДИРЕКТИВЫ .ASECT, И 3
СЛОВА, КОТОРЫЕ .DRBOT УСТАНАВЛИВАЕТ ДЛЯ ЗАГРУЖАЕМЫХ
УСТРОЙСТВ. В ТАБЛИЦЕ СООТВЕТСТВУЮЩАЯ МНЕМОНИКА ПОКАЗАНА В
КВАДРАТНЫХ СКОБКАХ, ДВУХСИМВОЛЬНОЕ ИМЯ УСТРОЙСТВА
ПРЕДСТАВЛЕНО ПОСРЕДСТВОМ DD.
КОД СРАВНЕНИЯ УСТАНОВКИ, ЯВЛЯЮЩИЙСЯ ПАРАМЕТРОМ, ОПИСАН
В П.6.2.3.
ТАБЛИЦА 3
ЯЧЕЙКА СОДЕРЖИМОЕ (И МНЕМОНИКА)
52 РАЗМЕР ДРАЙВЕРА В БАЙТАХ [DDEND-DDSTRT]
54 РАЗМЕР УСТРОЙСТВА В БЛОКАХ [DDDSIZ]
56 СЛОВО СОСТОЯНИЯ УСТРОЙСТВА [DDSTS]
60 СЛОВО СОСТОЯНИЯ ДЛЯ ОТРАЖЕНИЯ ТЕКУЩИХ
ДОПОЛНИТЕЛЬНЫХ СРЕДСТВ ГЕНЕРАЦИИ СИСТЕМЫ [ERL$G+<MMG$T*2>+<TIM$IT*4>]
62 УКАЗАТЕЛЬ НАЧАЛА ПЕРВИЧНОГО ДРАЙВЕРА (ИЗ .DRBOT)
64 РАЗМЕР ПЕРВИЧНОГО ДРАЙВЕРА В БАЙТАХ (ИЗ .DRBOT)
66 СМЕЩЕНИЕ ОТ НАЧАЛА ПЕРВИЧНОГО ДРАЙВЕРА К
НАЧАЛУ ПОДПРОГРАММЫ СЧИТЫВАНИЯ НАЧАЛЬНОГО ЗАГРУЗЧИКА (ИЗ .DRBOT)
176 АДРЕС РЕГИСТРА КОМАНД И СОСТОЯНИЯ CSR [DD$CSR]
200 НАЧАЛО КОДА СРАВНЕНИЯ УСТАНОВКИ
------------------------------------------------------------
В ТАБЛ.4 ПРИВЕДЕНЫ 5 СЛОВ, КОТОРЫЕ ЗАПРОС .DRBEG ГЕНЕРИРУЕТ
В НАЧАЛЕ СЕКЦИИ ОПРЕДЕЛЕНИЙ ДРАЙВЕРА.
ТАБЛИЦА 4
СЛОВО СИМВОЛ УСТРОЙСТВО
1 DDSTRT:: ВЕКТОР УСТРОЙСТВА ДЛЯ ОДНОВЕКТОРНЫХ УСТРОЙСТВ;СМЕЩЕНИЕ
К ТАБЛИЦЕ ВЕКТОРОВ ДЛЯ МНОГОВЕКТОРНЫХ УСТРОЙСТВ)
2 -- СМЕЩЕНИЕ К ТОЧКЕ ВХОДА ОБРАБОТКИ
ПРЕРЫВАНИЯ
3 -- ПРИОРИТЕТ (340)
4 DDLQE:: УКАЗАТЕЛЬ ПОСЛЕДНЕГО ЭЛЕМЕНТА ОЧЕРЕДИ
5 DDCQE:: УКАЗАТЕЛЬ ТЕКУЩЕГО ЭЛЕМЕНТА ОЧЕРЕДИ
2.2.3. ЗАПРОС .DRBEG
ЗАПРОС .DRBEG ИСПОЛЬЗУЕТСЯ ДЛЯ УСТАНОВКИ ИНФОРМАЦИИ В БЛОКЕ
0 И ПЕРВЫХ ПЯТИ СЛОВ ДРАЙВЕРА. ЭТОТ ЗАПРОС ГЕНЕРИРУЕТ ТАКЖЕ
СООТВЕТСТВУЮЩИЕ ГЛОБАЛЬНЫЕ СИМВОЛЫ ДАННОГО ДРАЙВЕРА. ПЕРЕД
ИСПОЛЬЗОВАНИЕМ .DRBEG НЕОБХОДИМО С ПОМОЩЬЮ ЗАПРОСА .DRDEF
ОПРЕДЕЛИТЬ DD$CSR, DD$VEC, DDDSIZ И DDSTS. ФОРМАТ ДЛЯ
.DRBEG СЛЕДУЮЩИЙ: .DRBEG NAME
ГДЕ NAME - ДВУХСИМВОЛЬНОЕ ИМЯ УСТРОЙСТВА.
2.2.4. МНОГОВЕКТОРНЫЕ ДРАЙВЕРЫ: ЗАПРОС .DRVTB
ДРАЙВЕРЫ УСТРОЙСТВ СИСТЕМЫ ФОДОС-2 МОГУТ ОБСЛУЖИВАТЬ
УСТРОЙСТВА, ИМЕЮЩИЕ БОЛЕЕ ОДНОГО ВЕКТОРА. НАПРИМЕР, ДРАЙВЕР
PC ОБРАБАТЫВАЕТ ПРЕРЫВАНИЕ ПОСРЕДСТВОМ ВЕКТОРА 70 ДЛЯ
СЧИТЫВАТЕЛЯ С ПЕРФОЛЕНТЫ И ПОСРЕДСТВОМ ВЕКТОРА 74 ДЛЯ
ПЕРФОРАТОРА. ЕСЛИ ДАННОЕ УСТРОЙСТВО ИМЕЕТ ОДИН ВЕКТОР
ПРЕРЫВАНИЯ, ТО ЕГО ДРАЙВЕР ДОЛЖЕН ИМЕТЬ ТАБЛИЦУ ТРЕХСЛОВНЫХ
ЭЛЕМЕНТОВ ДЛЯ КАЖДОГО ВЕКТОРА. ЭЛЕМЕНТ ДЛЯ КАЖДОГО ВЕКТОРА
СОСТОИТ ИЗ ЯЧЕЙКИ ВЕКТОРА, ТОЧКИ ВХОДА ПО ПРЕРЫВАНИЮ,
ЗНАЧЕНИЯ СЛОВА СОСТОЯНИЯ ПРОЦЕССОРА (ИЛИ PS). ДЛЯ УСТАНОВКИ
ЗАГОЛОВКА ДРАЙВЕРА НЕОБХОДИМО ВЫЗВАТЬ ЗАПРОС .DRVTB ДВА ИЛИ
БОЛЬШЕЕ ЧИСЛО РАЗ. ЗАПРОС .DRVTB УСТАНАВЛИВАЕТ ТАБЛИЦУ
ТРЕХСЛОВНЫХ ЭЛЕМЕНТОВ ДЛЯ КАЖДОГО ВЕКТОРА МНОГОВЕКТОРНОГО
УСТРОЙСТВА. ЕЕ НЕОБХОДИМО ПОМЕСТИТЬ В ДРАЙВЕРЕ МЕЖДУ
ЗАПРОСАМИ .DRBEG И .DREND (.DRBOT) ДО ПОДПРОГРАММЫ ОБРАБОТКИ
ПРЕРЫВАНИЙ. ЗАПРОС .DRVTB НЕОБХОДИМО ВЫЗЫВАТЬ ОДИН РАЗ ДЛЯ
КАЖДОГО ВЕКТОРА, ПРОГРАММНЫЕ ЗАПРОСЫ ДОЛЖНЫ ПОЯВЛЯТЬСЯ В
ДРАЙВЕРЕ ОДИН ЗА ДРУГИМ. ФОРМАТ ЗАПРОСА СЛЕДУЮЩИЙ: .DRVTB
NAME,VEC,INT[,PS]
ГДЕ NAME - ДВУХСИМВОЛЬНОЕ ИМЯ УСТРОЙСТВА; ЕГО НЕОБХОДИМО
УКАЗАТЬ В ПЕРВОМ ВЫЗОВЕ .DRVTB; ВО ВСЕХ
ПОСЛЕДУЮЩИХ ВЫЗОВАХ ЕГО МОЖНО ОПУСТИТЬ;
VEC - ЯЧЕЙКА ВЕКТОРА; ОНА ДОЛЖНА НАХОДИТЬСЯ МЕЖДУ 0 И
474; ПЕРВЫМ ВЕКТОРОМ ОБЫЧНО ЯВЛЯЕТСЯ DD$VEC,
ЗНАЧЕНИЕ КОТОРОГО ДОЛЖНО БЫТЬ КРАТНО ЧЕТЫРЕМ;
INT - СИМВОЛИЧЕСКОЕ ИМЯ ПОДПРОГРАММЫ ОБРАБОТКИ
ПРЕРЫВАНИЙ; ОНО ДОЛЖНО БЫТЬ ОПРЕДЕЛЕНО В
ДРАЙВЕРЕ И ОБЫЧНО ПРИНИМАЕT ФОРМУ DDINT;
PS - ПРОИЗВОЛЬНОЕ ЗНАЧЕНИЕ, КОТОРОЕ МОЖНО
ИСПОЛЬЗОВАТЬ ДЛЯ ОБОЗНАЧЕНИЯ ЧЕТЫРЕХ МЛАДШИХ
РАЗРЯДОВ НОВОГО СЛОВА СОСТОЯНИЯ ПРОЦЕССОРА В
ВЕКТОРЕ ПРЕРЫВАНИЯ; ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ РАВНО
НУЛЮ.
ПРИМЕР:
;ТАБЛИЦА ВЕКТОРОВ ПЕРФОЛЕНТОЧНОГО УСТРОЙСТВА ВВОДА-ВЫВОДА
.IF PR114$ ;ЕСЛИ ПЕРФОЛЕНТОЧНОЕ
;УСТРОЙСТВО ВВОДА-ВЫВОДА
.DRVTB PC,PC$VEC,PCINT ;ТАБЛИЦА ВВОДА С ПЕРФОЛЕНТЫ
.DRVTB ,PP$VEC,PPINT ;ТАБЛИЦА ВЫВОДА НА ПЕРФОЛЕНТУ
.ENDC
В ЭТОМ ПРИМЕРЕ ПОКАЗАНЫ СТРОКИ И КОДЫ, КОТОРЫЕ
ГЕНЕРИРУЕТ ЗАПРОС .DRVTB.
ПРИМЕР:
.WORD <PC$VEC>&<^C3>,PCINT-.,340!0 ;ТАБЛИЦА ВВОДА
;С ПЕРФОЛЕНТЫ
.WORD <PP$VEC>&<^C3>,PPINT-.,340!0 ;ТАБЛИЦА ВЫВОДА
;НА ПЕРФОЛЕНТУ
.WORD 0 ;ДЛЯ ОКОНЧАНИЯ ТАБЛИЦЫ
В ЭТОМ ПРИМЕРЕ ПРИВЕДЕНА ТАБЛИЦА ВЕКТОРА,
СГЕНЕРИРОВАННАЯ ЗАПРОСОМ .DRVTB. ИЗ ПРИМЕРА ВИДНО, ЧТО
РАЗРЯДЫ ПРИОРИТЕТА PS ВСЕГДА УСТАНОВЛЕНЫ СЕМЕРКОЙ, ДАЖЕ ЕСЛИ
АРГУМЕНТ PS ОПУЩЕН.
2.2.5. КОДЫ УСЛОВИЙ PS
В ЗАПРОСЕ .DRVTB СУЩЕСТВЕННЫ ТОЛЬКО РАЗРЯДЫ КОДОВ
УСЛОВИЙ АРГУМЕНТА PS. ОНИ МОГУТ БЫТЬ ПОЛЕЗНЫ, ЕСЛИ ИМЕЕТСЯ
ОБЩАЯ ТОЧКА ВХОДА В ПОДПРОГРАММУ ОБРАБОТКИ ПРЕРЫВАНИЯ ДЛЯ
ДВУХ ИЛИ БОЛЬШЕГО ЧИСЛА ВЕКТОРОВ И НЕОБХОДИМО ОПРЕДЕЛИТЬ,
ЧЕРЕЗ КАКОЙ ВЕКТОР ВОЗНИКЛО ПРЕРЫВАНИЕ. НАПРИМЕР, ДРАЙВЕР
PC ИМЕЕТ РАЗДЕЛЬНЫЕ ТОЧКИ ВХОДА ПРЕРЫВАНИЯ ДЛЯ ДВУХ ЕГО
ВЕКТОРОВ, ПОЭТОМУ ОН МОЖЕТ ЛЕГКО ОПРЕДЕЛИТЬ ИСТОЧНИК
ПРЕРЫВАНИЯ. ПРЕРЫВАНИЯ ПОСРЕДСТВОМ ВЕКТОРА 70 ИДУТ К
ПОДПРОГРАММЕ У PCINT:; ПРЕРЫВАНИЯ ПОСРЕДСТВОМ ВЕКТОРА 74
ИДУТ К PPINT:.
ЕСЛИ БЫ ДРАЙВЕР PC ИМЕЛ ТОЛЬКО ОДНУ ТОЧКУ ВХОДА
ПРЕРЫВАНИЯ, НАЗВАННУЮ PCINT:, ТО В ЭТОМ СЛУЧАЕ, ДРАЙВЕР МОГ
ОПРЕДЕЛИТЬ, КАКОЙ ВЕКТОР ИСПОЛЬЗОВАЛ ПРЕРЫВАНИЕ ПОСРЕДСТВОМ
УСТАНОВКИ КОДОВ УСЛОВИЙ В PS ДЛЯ ВЕКТОРОВ. ДЛЯ ВЕКТОРА,
СЧИТЫВАЮЩЕГО УСТРОЙСТВА 70 ОН МОГ ОСТАВИТЬ C-РАЗРЯД ЧИСТЫМ,
А ДЛЯ ВЕКТОРА 74 ОН МОГ УСТАНОВИТЬ C-РАЗРЯД. ЗАТЕМ У PCINT:
УПРАВЛЕНИЕ МОЖЕТ ПЕРЕХОДИТЬ К РАЗЛИЧНЫМ ПОДПРОГРАММАМ,
ОСНОВАННЫМ НА ЗНАЧЕНИИ C-РАЗРЯДА В НОВОМ PS.
ПРИМЕР:
;ТАБЛИЦА ВЕКТОРОВ ПЕРФОЛЕНТОЧНОГО УСТРОЙСТВА ВВОДА-ВЫВОДА
.IF EQ PR11$X ;ЕСЛИ ПЕРФОЛЕНТОЧНОЕ
;УСТРОЙСТВО ВВОДА-ВЫВОДА
.DRVTB PC,PR$VEC,PCINT ;C-РАЗРЯД ЧИСТ
.DRVTB ,PP$VEC,PCINT,1 ;C-РАЗРЯД УСТАНОВЛЕН
.ENDC
В ЭТОМ ПРИМЕРЕ ПОКАЗАНО КАК ВЫЗЫВАЕТСЯ ЗАПРОС .DRVTB, И
ОПРЕДЕЛЯЕТСЯ ЗНАЧЕНИЕ КОДОВ УСЛОВИЙ В PS.
2.3. СЕКЦИЯ ИНИЦИИРОВАНИЯ ВВОДА-ВЫВОДА
СЕКЦИЯ ИНИЦИИРОВАНИЯ ВВОДА-ВЫВОДА СОДЕРЖИТ ПЯТЬ
ВЫПОЛНЯЕМЫХ КОМАНД ДРАЙВЕРА. ЦЕЛЬ ЭТОЙ СЕКЦИИ - НАЧАТЬ
ПЕРЕДАЧУ ДАННЫХ. НЕОБХОДИМО НАПИСАТЬ ПОЗИЦИОННО-НЕЗАВИСИМЫЙ
КОД (PIC) ДЛЯ ДРАЙВЕРА.
КОГДА ВЫДАЕТСЯ ПРОГРАММНЫЙ ЗАПРОС, ТРЕБУЮЩИЙ УСТРОЙСТВО
ВВОДА-ВЫВОДА, ТАКОЙ КАК .READ ИЛИ .WRITE, УПРАВЛЕНИЕ СНАЧАЛА
ПЕРЕДАЕТСЯ КЛАВИАТУРНОМУ МОНИТОРУ, КОТОРЫЙ ЗАТЕМ ВЫЗЫВАЕТ
ДРАЙВЕР С ШЕСТОГО СЛОВА ДРАЙВЕРА, Т.Е. ПЕРВОГО СЛОВА СРАЗУ
ПОСЛЕ ПЯТИСЛОВНОГО ЗАГОЛОВКА. ОН ДЕЛАЕТ ВЫЗОВ КАЖДЫЙ РАЗ,
КОГДА НОВЫЙ ЭЛЕМЕНТ ОЧЕРЕДИ СТАНОВИТСЯ ПЕРВЫМ ЭЛЕМЕНТОМ
ОЧЕРЕДИ ДРАЙВЕРА. ТАКАЯ СИТУАЦИЯ ВОЗНИКАЕТ, КОГДА ЭЛЕМЕНТ
ДОБАВЛЯЕТСЯ В ПУСТУЮ ОЧЕРЕДЬ ДРАЙВЕРА ИЛИ КОГДА ЭЛЕМЕНТ
СТАНОВИТСЯ ПЕРВЫМ В ОЧЕРЕДИ, ПОТОМУ ЧТО ПРЕДЫДУЩИЙ ЭЛЕМЕНТ
БЫЛ ОСВОБОЖДЕН. ЕСЛИ ЛЮБОЙ ИЗ ПАРАМЕТРОВ В ЗАПРОСЕ
ВВОДА-ВЫВОДА НЕДОПУСТИМ ДЛЯ УСТРОЙСТВА (НАПРИМЕР, СЛИШКОМ
БОЛЬШОЙ НОМЕР БЛОКА, СЛИШКОМ ВЫСОКИЙ НОМЕР ПРИВОДА И Т.Д.),
ДРАЙВЕР СРАЗУ ЖЕ ДОЛЖЕН ЗАВЕРШИТЬ СЕКЦИЮ ВВОДА-ВЫВОДА И
СИГНАЛИЗИРОВАТЬ О НЕВОССТАНОВИМОЙ (ФАТАЛЬНОЙ) ОШИБКЕ.
КОД ИНИЦИИРОВАНИЯ ВВОДА-ВЫВОДА ВЫПОЛНЯЕТСЯ ПРИ НУЛЕВОМ
ПРИОРИТЕТЕ ПРОЦЕССОРА В СИСТЕМНОМ РЕЖИМЕ. ЭТО ОЗНАЧАЕТ, ЧТО
НЕ МОЖЕТ ПРОИЗОЙТИ ПЕРЕКЛЮЧЕНИЕ КОНТЕКСТА, НЕВОЗМОЖНО
ВЫЗВАТЬ ПОДПРОГРАММУ ЗАВЕРШЕНИЯ, И ПРЕРЫВАНИЕ ПО ВЕКТОРУ 4 И
10 ВЫЗЫВАЕТ ФАТАЛЬНЫЙ ОСТАНОВ СИСТЕМЫ. В ЭТОЙ СЕКЦИИ МОЖНО
ИСПОЛЬЗОВАТЬ ВСЕ РЕГИСТРЫ. ПЯТОЕ СЛОВО ЗАГОЛОВКА ДРАЙВЕРА,
DDCQE, СОДЕРЖИТ УКАЗАТЕЛЬ ТЕКУЩЕГО ЭЛЕМЕНТА ОЧЕРЕДИ В ЕГО
ТРЕТЬЕМ СЛОВЕ, Q.BLKN.
ОРГАНИЗОВАННАЯ В ОЧЕРЕДЬ СИСТЕМА ВВОДА-ВЫВОДА
ГАРАНТИРУЕТ, ЧТО ЗАПРОСЫ ПЕРЕДАЧИ ДАННЫХ ПРЕОБРАЗУЮТСЯ В
ПОСЛЕДОВАТЕЛЬНУЮ ФОРМУ ТАКИМ ОБРАЗОМ, ЧТО ДРАЙВЕРАМ
УСТРОЙСТВ СИСТЕМЫ ФОДОС-2 НЕТ НЕОБХОДИМОСТИ ВВОДИТЬСЯ
ПОВТОРНО. ПОЭТОМУ, МОЖНО УМЕНЬШИТЬ РАЗМЕР ДРАЙВЕРА
ПОСРЕДСТВОМ ОБ'ЕДИНЕНИЯ, А НЕ РАЗДЕЛЕНИЯ ЧИСТОГО КОДА И
СЕГМЕНТОВ ДАННЫХ.
2.3.1. УКАЗАНИЯ ДЛЯ НАЧАЛА ПЕРЕДАЧИ ДАННЫХ
ТАК КАК ЦЕЛЬЮ СЕКЦИИ ИНИЦИИРОВАНИЯ ВВОДА-ВЫВОДА
ЯВЛЯЕТСЯ НАЧАЛО ПЕРЕДАЧИ ДАННЫХ, ТО ДЛЯ ЭТОГО НЕОБХОДИМО
УКАЗАТЬ СООТВЕТСТВУЮЩИЕ КОМАНДЫ. СЛЕДУЮЩИЕ ЭТАПЫ
ПРЕДСТАВЛЯЮТ РУКОВОДСТВО ДЛЯ ОБОБЩЕННОЙ СЕКЦИИ ИНИЦИИРОВАНИЯ
ВВОДА-ВЫВОДА.
1. НЕОБХОДИМО РЕШИТЬ, СКОЛЬКО РАЗ ДРАЙВЕР БУДЕТ ПОВТОРНО
ВЫПОЛНЯТЬ ПЕРЕДАЧУ ДАННЫХ В СЛУЧАЕ, ЕСЛИ ПРОИЗОЙДЕТ
ОШИБКА. НЕОБХОДИМО ИНИЦИАЛИЗИРОВАТЬ СЧЕТЧИК ПОВТОРНЫХ
ПЕРЕДАЧ ПОСРЕДСТВОМ ПЕРЕМЕЩЕНИЯ В НЕГО МАКСИМАЛЬНОГО
ЧИСЛА ПОВТОРНЫХ ПЕРЕДАЧ. СЛЕДУЮЩИЕ ДВЕ СТРОКИ
ИЛЛЮСТРИРУЮТ ЭТОТ ЭТАП:
MOV #RKCNT,(PC)+ ;RKCNT=МАКСИМУМ # ПОВТОРНЫХ
;ПЕРЕДАЧ
RETRY: .WORD 0 ;СЧЕТЧИК ПОВТОРНЫХ ПЕРЕДАЧ
2. УКАЗАТЕЛЬ ТЕКУЩЕГО ЭЛЕМЕНТА ОЧЕРЕДИ НЕОБХОДИМО ПОМЕСТИТЬ
В РЕГИСТР И ПОЛУЧИТЬ ЧИСЛО ПРИВОДОВ ДЛЯ УСТРОЙСТВА И
ЧИСЛО БЛОКОВ ДЛЯ ПЕРЕДАЧИ ИЗ ЭЛЕМЕНТА ОЧЕРЕДИ. ЭТО
ИЛЛЮСТРИРУЮТ СЛЕДУЮЩИЕ СТРОКИ КОДА:
MOV RKCQE,R5 ;ЗАСЫЛАЕТ УКАЗАТЕЛЬ ТЕКУЩЕГО
;ЭЛЕМЕНТА ОЧЕРЕДИ
MOV @R5,R2 ;R2 = НОМЕР БЛОКА
MOV Q$UNIT-1(R5),R4 ;R4 = НОМЕР ЗАПРАШИВАЕМОГО
;ПРИВОДА
ASR R4 ;СДВИГАЕТ НОМЕР ПРИВОДА НА
ASR R4 ;ТРИ РАЗРЯДА ВПРАВО
ASR R4 ;В МЛАДШИЙ БАЙТ
SWAB R4 ;РАЗМЕЩАЕТ НОМЕР ПРИВОДА В
;ТРЕХ РАЗРЯДАХ СТАРШЕГО
;БАЙТА
BIS #^C<DAUNIT>,R4 ;ИЗОЛИРУЕТ ПРИВОД В РАЗРЯДАХ
;ВЫБОРКИ ПРИВОДА
3. ЗАТЕМ ВЫЧИСЛЯЕТСЯ АДРЕС ДЛЯ НАЧАЛА ПЕРЕДАЧИ ДАННЫХ В
УСТРОЙСТВО. ИСПОЛЬЗУЕМЫЕ ПРИ ЭТОМ КОМАНДЫ ЗАВИСЯТ ОТ
СТРУКТУРЫ УСТРОЙСТВА. ПОСЛЕ ТОГО, КАК АДРЕС ВЫЧИСЛЕН,
ЕГО НЕОБХОДИМО ЗАПИСАТЬ В ЯЧЕЙКУ ПАМЯТИ. ЕСЛИ БУДЕТ
НЕОБХОДИМО ПОВТОРНО ВЫПОЛНИТЬ ПЕРЕДАЧУ, ТО АДРЕС НЕ
ПРИДЕТСЯ ВЫЧИСЛЯТЬ ПОВТОРНО.
.
.
.
MOV R3,(PC)+ ;СОХРАНЯЕТСЯ АДРЕС В DISKAD
DISKAD: .WORD 0 ;ЯЧЕЙКА ПАМЯТИ ДЛЯ СОХРАНЕНИЯ
;ВЫЧИСЛЕННОГО АДРЕСА
4. ОПИСАННЫЕ ВЫШЕ ЭТАПЫ 1-3 ВЫПОЛНЯЮТСЯ ТОЛЬКО ОДИН РАЗ ДЛЯ
КАЖДОГО ЗАПРОСА ВВОДА-ВЫВОДА ДАННЫХ ИЗ ВЫПОЛНЯЮЩЕЙСЯ
ПРОГРАММЫ. ОДНАКО В СЛУЧАЕ ВОССТАНОВИМОЙ ОШИБКИ МОЖНО
НАЧАТЬ ПОВТОРНО ПЕРЕДАЧУ КАК ЧАСТЬ ОПЕРАЦИИ ПОВТОРЕНИЯ.
ПОЭТОМУ, ЕСЛИ ПОМЕСТИТЬ МЕТКУ, ЧТОБЫ ИСПОЛЬЗОВАТЬ ЕЕ КАК
ТОЧКУ ВХОДА ПОВТОРНОЙ ПЕРЕДАЧИ, ТО МОЖНО ИЗБЕЖАТЬ
ПОВТОРЕНИЯ ЭТАПОВ 1-3. СЛЕДУЮЩИЕ ЭТАПЫ МОГУТ БЫТЬ
ВЫПОЛНЕНЫ БОЛЕЕ ОДНОГО РАЗА: ОНИ ВЫПОЛНЯЮТСЯ ОДИН РАЗ
ДЛЯ ПЕРВОГО ПУСКА ВВОДА-ВЫВОДА, И ОНИ МОГУТ БЫТЬ
ВЫПОЛНЕНЫ ВНОВЬ, ЕСЛИ ОШИБКА ВВОДА-ВЫВОДА ВЫЗЫВАЕТ
ПОВТОРНУЮ ПЕРЕДАЧУ. В ЭТОЙ ТОЧКЕ ДРАЙВЕР ДОЛЖЕН
ОПРЕДЕЛИТЬ, ЯВЛЯЕТСЯ ЛИ ЗАПРОС ВВОДА-ВЫВОДА СЧИТЫВАНИЕМ,
ЗАПИСЬЮ ИЛИ УСТАНОВКОЙ. ЗАТЕМ ОН ДОЛЖЕН ГЕНЕРИРОВАТЬ
СООТВЕТСТВУЮЩИЙ КОД ОПЕРАЦИИ И ЗАСЫЛАТЬ ЕГО В РЕГИСТР
СОСТОЯНИЯ УСТРОЙСТВА. ЭТОТ ЭТАП ФАКТИЧЕСКИ ИНИЦИИРУЕТ
ПЕРЕДАЧУ ВВОДА-ВЫВОДА.
CSIE =100 ;РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ
FNWRITE =12 ;ЗАПИСЬ
CSGO =1 ;РАЗРЯД GO
.
.
.
AGAIN: MOV RKCQE,R5 ;УКАЗАТЕЛЬ ЭЛЕМЕНТА ОЧЕРЕДИ
MOV #CSIE!FNWRITE!CSGO,R3 ;УСТАНАВЛИВАЕТ ЗАПИСЬ
MOV #RKDA,R4 ;УКАЗАТЕЛЬ РЕГИСТРА
. ;АДРЕСА ДИСКА
.
.
5. И ПОСЛЕДНЕЕ, ВОЗВРАТ К ПРЕРВАННОЙ ПРОГРАММЕ НЕОБХОДИМО
ОСУЩЕСТВЛЯТЬ ЧЕРЕЗ МОНИТОР. ЗАТЕМ, КОГДА ПЕРЕДАЧА
ВВОДА-ВЫВОДА ЗАКАНЧИВАЕТСЯ, УСТРОЙСТВО БУДЕТ ПРЕРВАНО, И
УПРАВЛЕНИЕ ПЕРЕЙДЕТ К ДРАЙВЕРУ В ТОЧКЕ ВХОДА ПРЕРЫВАНИЯ В
СЕКЦИИ ОБРАБОТКИ ПРЕРЫВАНИЯ ДРАЙВЕРА.
RTS PC ;ОЖИДАНИЕ ПРЕРЫВАНИЯ
2.4. СЕКЦИЯ ОБРАБОТКИ ПРЕРЫВАНИЙ
УПРАВЛЕНИЕ ПЕРЕДАЕТСЯ СЕКЦИИ ОБРАБОТКИ ПРЕРЫВАНИЙ
ДРАЙВЕРА, КОГДА УСТРОЙСТВО ПРЕРЫВАЕТСЯ ИЛИ КОГДА ПРОГРАММА,
ЗАПРАШИВАЮЩАЯ ПЕРЕДАЧУ ВВОДА-ВЫВОДА, ПРЕЖДЕВРЕМЕННО
ПРЕРЫВАЕТСЯ. КОД В ЭТОЙ СЕКЦИИ ДОЛЖЕН СНАЧАЛА ОПРЕДЕЛИТЬ,
ИМЕЛА ЛИ ПЕРЕДАЧА ДАННЫХ ОШИБКУ, БЫЛА ЛИ ПЕРЕДАЧА ДАННЫХ
ЗАВЕРШЕНА ИЛИ НЕТ, А ЗАТЕМ ПРЕДПРИНЯТЬ СООТВЕТСТВУЮЩЕЕ
ДЕЙСТВИЕ.
ПЕРВЫМ ШАГОМ В КОДИРОВАНИИ СЕКЦИИ ОБРАБОТКИ ПРЕРЫВАНИЙ
ЯВЛЯЕТСЯ УСТАНОВКА ТОЧКИ ВХОДА ПРЕЖДЕВРЕМЕННОГО ПРЕРЫВАНИЯ
ПОСРЕДСТВОМ ИСПОЛЬЗОВАНИЯ ЗАПРОСА .DRAST. (ЭТИ ТОЧКИ ВХОДА
ИНОГДА РАССМАТРИВАЮТСЯ КАК ТОЧКИ ВХОДА АСИНХРОННОГО
ПРЕРЫВАНИЯ.) ИМЕНЕМ ТОЧКИ ВХОДА ПО УМОЛЧАНИЮ ЯВЛЯЕТСЯ DDINT.
ОБЫЧНО ДРАЙВЕР УСТРОЙСТВА ВЫЗЫВАЕТСЯ У ТОЧКИ ВХОДА
ПРЕРЫВАНИЯ, КОГДА ПРЕРЫВАНИЕ ВОЗНИКЛО. ОДНАКО, ПРИ
НЕКОТОРЫХ ОБСТОЯТЕЛЬСТВАХ ДРАЙВЕР ВЫЗЫВАЕТСЯ У ТОЧКИ ВХОДА
ПРЕЖДЕВРЕМЕННОГО ПРЕРЫВАНИЯ.
2.4.1. ТОЧКА ВХОДА ПРЕЖДЕВРЕМЕННОГО ПРЕРЫВАНИЯ
СУЩЕСТВУЕТ РЯД СИТУАЦИЙ, КОТОРЫЕ ВЫЗЫВАЮТ
ПРЕЖДЕВРЕМЕННОЕ ПРЕРЫВАНИЕ В ОРГАНИЗОВАННОЙ В ОЧЕРЕДЬ
СИСТЕМЕ ВВОДА-ВЫВОДА:
- ДВОЙНОЕ НАЖАТИЕ СУ/С МОЖЕТ ПРЕЖДЕВРЕМЕННО ПРЕРВАТЬ
ВЫПОЛНЯЮЩУЮСЯ ПРОГРАММУ;
- ПРОГРАММНЫЙ ЗАПРОС .HRESET ВЫЗЫВАЕТ ПРЕЖДЕВРЕМЕННОЕ
ПРЕРЫВАНИЕ;
- ПРЕРЫВАНИЕ ПО 4 ИЛИ 10 ВЕКТОРУ ИЛИ ЛЮБОЕ ДРУГОЕ УСЛОВИЕ,
КОТОРОЕ ПРИВОДИТ К СЛЕДУЮЩЕМУ ТИПУ НЕВОССТАНОВИМОЙ
(ФАТАЛЬНОЙ) ОШИБКИ ?MON-F-.
ПРЕЖДЕВРЕМЕННОЕ ПРЕРЫВАНИЕ, НЕЗАВИСИМО ОТ ТОГО, ВВЕДЕН
ДРАЙВЕР ИЛИ НЕТ, ЗАВИСИТ ОТ ДВУХ ФАКТОРОВ. ДРАЙВЕР ВСЕГДА
ВВОДИТСЯ В ТОЧКЕ ВХОДА ПРЕЖДЕВРЕМЕННОГО ПРЕРЫВАНИЯ (СЛОВО
СРАЗУ ЖЕ ПЕРЕД ОБЫЧНОЙ ТОЧКОЙ ВХОДА ПРЕРЫВАНИЯ), ЕСЛИ
ВЫПОЛНЯЛСЯ АКТИВНЫЙ ЭЛЕМЕНТ ОЧЕРЕДИ, КОТОРЫЙ ПРИНАДЛЕЖИТ
ПРЕЖДЕВРЕМЕННО ПРЕРВАННОМУ ЗАДАНИЮ. В МОНИТОРАХ FB И XM
ДРАЙВЕР ВВОДИТСЯ ВСЕГДА НЕЗАВИСИМО ОТ НАЛИЧИЯ ЭЛЕМЕНТА
ОЧЕРЕДИ, ЕСЛИ HNDLR$ (РАЗРЯД 11) УСТАНОВЛЕН В СЛОВЕ
СОСТОЯНИЯ УСТРОЙСТВА. ЕСЛИ HNDLR$ УСТАНОВЛЕН, ПРЕКРАЩЕНИЕ
ВЫПОЛНЕНИЯ ПРОГРАММЫ РАССМАТРИВАЕТСЯ В ДВУХ СЛУЧАЯХ: (1)
ПРЕЖДЕВРЕМЕННОЕ ПРЕРЫВАНИЕ ВО ВРЕМЯ ОПЕРАЦИИ ВВОДА-ВЫВОДА;
(2) ПРЕЖДЕВРЕМЕННОЕ ПРЕРЫВАНИЕ ВО ВРЕМЯ ВЫПОЛНЕНИЯ ДРУГОЙ
ОПЕРАЦИИ.
МОНИТОР SJ ИГНОРИРУЕТ ЭТОТ РАЗРЯД. К ТОМУ ЖЕ, ДРАЙВЕР
НЕ МОЖЕТ ВЫЙТИ, КОГДА ПРЕКРАЩАЕТСЯ РАБОТА В СИСТЕМЕ SJ,
МОНИТОР SJ АВТОМАТИЧЕСКИ ВЫПОЛНЯЕТ ЗАПРОС .RESET.
ВО ВСЕХ УСЛОВИЯХ, ПРИ ВХОДЕ В ДРАЙВЕР, РЕГИСТР R4
ВСЕГДА СОДЕРЖИТ НОМЕР ПРЕЖДЕВРЕМЕННО ПРЕРВАННОГО ЗАДАНИЯ.
РЕГИСТРЫ R0-R3 ДОЛЖНЫ БЫТЬ СОХРАНЕНЫ И ВОССТАНОВЛЕНЫ. КОГДА
ВОЗНИКАЕТ ПРЕЖДЕВРЕМЕННОЕ ПРЕРЫВАНИЕ, В НЕКОТОРЫХ
УСТРОЙСТВАХ ВАЖНО ОСТАНОВИТЬ ВВОД-ВЫВОД.
СИМВОЛЬНО-ОРИЕНТИРОВАННЫЕ УСТРОЙСТВА, КАК, НАПРИМЕР, PC:,
ПОПАДАЮТ ПОД ЭТУ КАТЕГОРИЮ. ПРИ ПРЕЖДЕВРЕМЕННОМ ПРЕРЫВАНИИ
ДРАЙВЕР ДОЛЖЕН ОСТАНОВИТЬ УСТРОЙСТВО, ЧТОБЫ, НАПРИМЕР,
ПРЕДОТВРАТИТЬ ВЫХОД ИЗ-ПОД КОНТРОЛЯ (ОТКЛОНЕНИЕ) ЛЕНТЫ. ОН
ТАКЖЕ ДОЛЖЕН УБЕДИТЬСЯ, ЧТО УСТРОЙСТВО НЕ МОЖЕТ ПРЕРВАТЬСЯ
ВНОВЬ. ПОЭТОМУ СИМВОЛЬНО-ОРИЕНТИРОВАННЫЕ УСТРОЙСТВА ОБЫЧНО
СОДЕРЖАТ ПОДПРОГРАММУ ПРЕЖДЕВРЕМЕННЫХ ПРЕРЫВАНИЙ; ТОЧКА
ВХОДА ПРЕЖДЕВРЕМЕННОГО ПРЕРЫВАНИЯ - ЭТО ПРОСТО КОМАНДА
ПЕРЕХОДА К ЭТОЙ ПОДПРОГРАММЕ. НАПРИМЕР, ДРАЙВЕР PC ИМЕЕТ
ПОДПРОГРАММУ ПРЕЖДЕВРЕМЕННОГО ПРЕРЫВАНИЯ, КОТОРАЯ ЗАПРЕЩАЕТ
ПРЕРЫВАНИЕ В ПЕРФОЛЕНТОЧНОМ УСТРОЙСТВЕ ВВОДА-ВЫВОДА. ЗАТЕМ
ДРАЙВЕР ВВОДИТСЯ В МОНИТОР В СЕКЦИЮ ЗАВЕРШЕНИЯ ВВОДА-ВЫВОДА.
СЛЕДУЮЩИЕ СТРОКИ ВЗЯТЫ ИЗ ДРАЙВЕРА PC:
PCDONE: CLR @#PC$CSR ;ОТМЕНЯЕТ ПРЕРЫВАНИЕ
;ПЕРФОЛЕНТОЧНОГО УСТРОЙСТВА
;ВВОДА
CLR @#PP$CSR ;ОТМЕНЯЕТ ПРЕРЫВАНИЕ
;ПЕРФОЛЕНТОЧНОГО УСТРОЙСТВА
;ВЫВОДА
ДРУГИМ УСТРОЙСТВАМ, КАК, НАПРИМЕР, ДИСКИ, РАЗРЕШАЕТСЯ
ПОПЫТКА ЗАВЕРШЕНИЯ ПЕРЕДАЧИ ВВОДА-ВЫВОДА, ДАЖЕ ЕСЛИ
ВОЗНИКАЕТ ПРЕЖДЕВРЕМЕННОЕ ПРЕРЫВАНИЕ. ФАКТИЧЕСКИ, ПОПЫТКА
ПРЕЖДЕВРЕМЕННОГО ПРЕРЫВАНИЯ В СЕРЕДИНЕ ОПЕРАЦИИ МОЖЕТ
ВЫЗВАТЬ РАЗРУШЕНИЕ ДАННЫХ ИЛИ ФОРМАТИРОВАНИЕ ИНФОРМАЦИИ НА
ДИСКЕ. ПОЭТОМУ, ВМЕСТО ТОГО, ЧТОБЫ ИМЕТЬ ОТДЕЛЬНУЮ
ПОДПРОГРАММУ ПРЕЖДЕВРЕМЕННЫХ ПРЕРЫВАНИЙ, БОЛЬШИНСТВО
ДРАЙВЕРОВ ДИСКОВ ИГНОРИРУЮТ ПРЕЖДЕВРЕМЕННЫЕ ПРЕРЫВАНИЯ.
ТАКИМ ОБРАЗОМ, КОМАНДА RTS PC РАЗМЕЩАЕТСЯ У ТОЧКИ ВХОДА
ПРЕЖДЕВРЕМЕННОГО ПРЕРЫВАНИЯЛ КОТОРАЯ ПРОСТО ВОЗВРАЩАЕТ
УПРАВЛЕНИЕ МОНИТОРУ.
ЕСЛИ В ДРАЙВЕРЕ ИСПОЛЬЗУЕТСЯ ЗАПРОС .FORK, ТО
СУЩЕСТВУЕТ СПЕЦИАЛЬНАЯ ПРОЦЕДУРА, КОТОРАЯ ИМЕЕТ МЕСТО, ЕСЛИ
ВОЗНИКАЕТ ПРЕЖДЕВРЕМЕННОЕ ПРЕРЫВАНИЕ. НЕОБХОДИМО ПОМЕСТИТЬ
0 В F.BADR (АДРЕС ПОДПРОГРАММЫЮ.FORK, СМЕЩЕННЫЙ НА 2) В
FORK-БЛОКЕ. ЭТО ПРЕДОТВРАЩАЕТ МОНИТОРЮОТЮПОПЫТКИЮВЫПОЛНЕНИЯ
БЕССМЫСЛЕННОЙ ПОСЛЕ ПРЕЖДЕВРЕМЕННОГО ПРЕРЫВАНИЯ ПОДПРОГРАММЫ
.FORK.
2.4.2n ПОНИЖЕНИЕ ПРИОРИТЕТА ДО ПРИОРИТЕТА УСТРОЙСТВА
КОГДА ВОЗНИКАЕТ ПРЕРЫВАНИЕ, ДРАЙВЕР ВВОДИТСЯ С
ПРИОРИТЕТОМ 7. ТАК ЖЕ, КАК И В ПОДПРОГРАММЕ ОБРАБОТКИ
ПРЕРЫВАНИЙ, ПЕРВОЙ ЗАДАЧЕЙ ДРАЙВЕРА ЯВЛЯЕТСЯ ПОНИЖЕНИЕ
ПРИОРИТЕТА ПРОЦЕССОРА ДО ПРИОРИТЕТА УСТРОЙСТВА, ПОЗВОЛЯЯ
ТАКИМ ОБРАЗОМ УСТРОЙСТВАМ С БОЛЬШИМ ПРИОРИТЕТОМ ПРЕРВАТЬ ЭТУ
ПОДПРОГРАММУ ОБРАБОТКИ ПРЕРЫВАНИЙ. ВМЕСТО ИСПОЛЬЗОВАНИЯ
ВЫЗОВА .INTEN, КАК И В ПОДПРОГРАММЕ ОБРАБОТКИ ПРЕРЫВАНИЙ,
ДЛЯ ПОНИЖЕНИЯ ПРИОРИТЕТА ИСПОЛЬЗУЕТСЯ ЗАПРОС .DRAST.
2.4.3. ЗАПРОС .DRAST
ЗАПРОС .DRAST ИСПОЛЬЗУЕТСЯ ДЛЯ УСТАНОВКИ ТОЧКИ ВХОДА
ПРЕРЫВАНИЯ, ТОЧКИ ВХОДА ПРЕЖДЕВРЕМЕННОГО ПРЕРЫВАНИЯ И ДЛЯ
СНИЖЕНИЯ ПРИОРИТЕТА ПРОЦЕССОРА. ЭТОТ ЗАПРОС УСТАНАВЛИВАЕТ
ТАКЖЕ ГЛОБАЛЬНЫЙ СИМВОЛ $INPTR, КОТОРЫЙ СОДЕРЖИТ УКАЗАТЕЛЬ
ПОДПРОГРАММЫ $INTEN В РЕЗИДЕНТНОМ МОНИТОРЕ. ЭТОТ УКАЗАТЕЛЬ
ЗАПОЛНЯЕТСЯ НАЧАЛЬНЫМ ЗАГРУЗЧИКОМ (ДЛЯ СИСТЕМНОГО
УСТРОЙСТВА) ИЛИ ВО ВРЕМЯ ЗАПРОСА .FETCH (ДЛЯ УСТРОЙСТВА
ДАННЫХ).
ФОРМАТ ЗАПРОСА .DRAST СЛЕДУЮЩИЙ:
.DRAST NAME,PRI[,ABO]
ГДЕ NAME - ДВУХСИМВОЛЬНОЕ ИМЯ УСТРОЙСТВА;
PRI - ПРИОРИТЕТ УСТРОЙСТВА, Т.Е. ПРИОРИТЕТ, ПРИ
КОТОРОМ ДОЛЖНА ВЫПОЛНЯТЬСЯ ПОДПРОГРАММА
ОБРАБОТКИ ПРЕРЫВАНИЙ;
ABO - ПРОИЗВОЛЬНЫЙ АРГУМЕНТ, КОТОРЫЙ ПРЕДСТАВЛЯЕТ
СОБОЙ МЕТКУ ТОЧКИ ВХОДА ПРЕЖДЕВРЕМЕННОГО
ПРЕРЫВАНИЯ; ЕСЛИ ЭТОТ АРГУМЕНТ ОТСУТСТВУЕТ,
ЗАПРОС ГЕНЕРИРУЕТ КОМАНДУ RTS PC У ТОЧКИ ВХОДА
ПРЕЖДЕВРЕМЕННОГО ПРЕРЫВАНИЯ, КОТОРАЯ ЯВЛЯЕТСЯ
СЛОВОМ, ПРЕДШЕСТВУЮЩИМ ТОЧКЕ ВХОДА ПРЕРЫВАНИЯ.
ПРИМЕР:
.DRAST PP,4,PCDONE
.GLOBL $INPTR ;ДЕЛАЕТ ЭТОТ СИМВОЛ
;ГЛОБАЛЬНЫМ
BR PCDONE ;ТОЧКА ВХОДА
;ПРЕЖДЕВРЕМЕННОГО
;ПРЕРЫВАНИЯ
PPINT:: JSR R5,@$INPTR ;ПЕРЕХОД В МОНИТОР
;ПО КОДУ .INTEN
.WORD ^C<4*^O40>&^O340 ;НОВЫЙ ПРИОРИТЕТ
В ЭТОМ ПРИМЕРЕ ПОКАЗАНЫ ЗАПРОС .DRAST ИЗ ДРАЙВЕРА PC И
КОД, КОТОРЫЙ ОН ГЕНЕРИРУЕТ.
ПРИМЕР:
.DRAST RK,5
.GLOBL $INPTR ;ДЕЛАЕТ ЭТОТ СИМВОЛ
;ГЛОБАЛЬНЫМ
RTS PC ;ОСУЩЕСТВЛЯЕТ ВОЗВРАТ
;ИЗ ПРЕЖДЕВРЕМЕННОГО
;ПРЕРЫВАНИЯ
RKINT:: JSR R5,@$INPTR ;ПЕРЕХОД В МОНИТОР ПО КОДУ
;.INTEN
.WORD ^C<5*^O40>&^O340;НОВЫЙ ПРИОРИТЕТ
В ЭТОМ ПРИМЕРЕ ПРИВЕДЕНА ЧАСТЬ ДРАЙВЕРА RK, КОТОРЫЙ НЕ
ИМЕЕТ ПОДПРОГРАММЫ ПРЕЖДЕВРЕМЕННОГО ПРЕРЫВАНИЯ.
2.4.4. ОСНОВНЫЕ ПРАВИЛА ДЛЯ ПРОГРАММИРОВАНИЯ СЕКЦИИ
ОБРАБОТКИ ПРЕРЫВАНИЙ
ТАК КАК ЦЕЛЬЮ ЭТОЙ СЕКЦИИ ЯВЛЯЕТСЯ ВЫЧИСЛЕНИЕ
РЕЗУЛЬТАТОВ ПОСЛЕДНЕГО ДЕЙСТВИЯ УСТРОЙСТВА, ТО НЕТ
НЕОБХОДИМОСТИ СОСТАВЛЯТЬ КОМАНДЫ ДЛЯ ЭТОГО. В ОСНОВНОМ, КОД
ДОЛЖЕН ОПРЕДЕЛЯТЬ, БЫЛА ЛИ ПЕРЕДАЧА ОШИБОЧНОЙ, БЫЛА ЛИ ОНА
ЗАКОНЧЕНА ИЛИ НЕТ.
1. ЕСЛИ ВОЗНИКЛА ОШИБКА
ЕСЛИ ВО ВРЕМЯ ПЕРЕДАЧИ ВОЗНИКЛА ОШИБКА, ДРАЙВЕР
ДОЛЖЕН ОПРЕДЕЛИТЬ, БЫЛА ЛИ ЭТА ОШИБКА ВОССТАНОВИМОЙ ИЛИ
НЕВОССТАНОВИМОЙ, ПОСЛЕ ТОГО, КАК ОПЕРАЦИЯ ПОВТОРИТСЯ.
ЕСЛИ ОШИБКА НЕВОССТАНОВИМАЯ, ДРАЙВЕР ДОЛЖЕН
НЕМЕДЛЕННО ВЫВОДИТЬСЯ ЧЕРЕЗ СЕКЦИЮ ЗАВЕРШЕНИЯ
ВВОДА-ВЫВОДА.
ЕСЛИ ОШИБКА ВОССТАНОВИМАЯ, ДРАЙВЕР ДОЛЖЕН
ПОДГОТОВИТЬСЯ К ПОВТОРНОЙ ПЕРЕДАЧЕ. ОН ДОЛЖЕН УМЕНЬШИТЬ
СЧЕТЧИК ДОПУСТИМЫХ ПОВТОРНЫХ ОПЕРАЦИЙ. ЗАТЕМ, НА
FORK-УРОВНЕ, ОН ДОЛЖЕН СНОВА ПЕРЕЙТИ К СЕКЦИИ
ИНИЦИИРОВАНИЯ ВВОДА-ВЫВОДА ДЛЯ ВОЗОБНОВЛЕНИЯ ПЕРЕДАЧИ.
ЕСЛИ ЧИСЛО ПОВТОРНЫХ ПЕРЕДАЧ ДОСТИГЛО ДОПУСТИМОГО
(СЧЕТЧИК ПОВТОРЕНИЙ РАВЕН 0), ТО НЕОБХОДИМО РАССМАТРИВАТЬ
ЭТУ НЕИСПРАВНОСТЬ КАК НЕВОССТАНОВИМУЮ ОШИБКУ. В ЭТОМ
СЛУЧАЕ ДРАЙВЕР ДОЛЖЕН ПЕРЕХОДИТЬ В СЕКЦИЮ ЗАВЕРШЕНИЯ
ВВОДА-ВЫВОДА.
СНИЖЕНИЕ ДО FORK-УРОВНЯ НЕОБЯЗАТЕЛЬНО ДЛЯ ОБРАБОТКИ
ОШИБКИ. ИСПОЛЬЗОВАТЬ ЗАПРОС .FORK ИЛИ НЕТ, ЗАВИСИТ ОТ
ПРОМЕЖУТКА ВРЕМЕНИ, НЕОБХОДИМОГО ДЛЯ УСТАНОВКИ ПОВТОРНОЙ
ПЕРЕДАЧИ. ВЫЗОВ .FORK ПОЛЕЗЕН ТЕМ, ЧТО ПОЗВОЛЯЕТ
ИСПОЛЬЗОВАТЬ РЕГИСТРЫ R0-R3, ДАВАЯ ВОЗМОЖНОСТЬ
ИСПОЛЬЗОВАТЬ ОБЩИЕ ПОДПРОГРАММЫ ДЛЯ ПОВТОРНЫХ ПЕРЕДАЧ.
ЕСЛИ ЗАПРОС .FORK НЕ ИСПОЛЬЗУЕТСЯ, ТО ДЛЯ ИСПОЛЬЗОВАНИЯ
ДОПУСТИМЫ ТОЛЬКО РЕГИСТРЫ R4 И R5.
2. ВЫПОЛНЕНИЕ ПОВТОРНЫХ ПЕРЕДАЧ НА FORK-УРОВНЕ
ЗАПРОС .FORK ВЫЗЫВАЕТ ВОЗВРАТ К РЕЗИДЕНТНОМУ
МОНИТОРУ, КОТОРЫЙ ОТВЕРГАЕТ ТЕКУЩЕЕ ПРЕРЫВАНИЕ. КОД,
СЛЕДУЮЩИЙ ЗА .FORK, ВЫПОЛНЯЕТСЯ ПРИ НУЛЕВОМ ПРИОРИТЕТЕ, А
НЕ ПРИ ПРИОРИТЕТЕ УСТРОЙСТВА, ПОСЛЕ ТОГО, КАК ВСЕ ДРУГИЕ
ПРЕРЫВАНИЯ БЫЛИ ОБРАБОТАНЫ, НО ДО ТОГО, КАК ЛЮБОЕ ЗАДАНИЕ
ИЛИ ЕГО ПОДПРОГРАММЫ ЗАВЕРШЕНИЯ СМОГУТ ВЫПОЛНИТЬСЯ. КОД,
СЛЕДУЮЩИЙ ЗА .FORK, ВЫПОЛНЯЕТСЯ ТАК ЖЕ, КАК И ОСНОВНАЯ
ЧАСТЬ СЕКЦИИ ОБРАБОТКИ ПРЕРЫВАНИЙ ДРАЙВЕРА, В СИСТЕМНОМ
РЕЖИМЕ (ЭТО ТОТ ЖЕ РЕЖИМ, В КОТОРОМ ВЫПОЛНЯЕТСЯ СЕКЦИЯ
ИНИЦИИРОВАНИЯ ВВОДА-ВЫВОДА). ТАКИМ ОБРАЗОМ, ПЕРЕКЛЮЧЕНИЕ
КОНТЕКСТА ЗАЩИЩЕНО ВО ВРЕМЯ ВЫПОЛНЕНИЯ КОДА НА
FORK-УРОВНЕ, И ЛЮБОЕ ПРЕРЫВАНИЕ ПО 4 ИЛИ 10 ВЕКТОРУ
ЯВЛЯЕТСЯ ПРИЧИНОЙ ФАТАЛЬНОГО ОСТАНОВА СИСТЕМЫ.
ПРИМЕР:
.FORK RKFBLK ;ВЫЗОВ .FORK
JSR R5,@$FKPTR ;ПЕРЕХОД В МОНИТОР ПО
;КОДУ .FORK
.WORD RKFBLK-. ;СМЕЩЕНИЕ К ЭЛЕМЕНТУ
;FORK-ОЧЕРЕДИ
RKRETR: CLRB RETRY+1 ;ПЕРЕУСТАНОВКА ПРИЗНАКА
BR AGAIN ;ПЕРЕХОД В СЕКЦИЮ
;ИНИЦИИРОВАНИЯ ВВОДА-ВЫВОДА
В ЭТОМ ПРИМЕРЕ ПРИВЕДЕНА ЧАСТЬ ДРАЙВЕРА RK, ГДЕ
ДРАЙВЕР ПОНИЖАЕТ ПРИОРИТЕТ ДО FORK-УРОВНЯ ДЛЯ ВЫПОЛНЕНИЯ
ПОВТОРНЫХ ПЕРЕДАЧ ДАННЫХ ПОСЛЕ ВОЗНИКНОВЕНИЯ
ВОССТАНОВИМОЙ ОШИБКИ. FORK-УРОВЕНЬ ИДЕАЛЕН ДЛЯ
ВЫПОЛНЕНИЯ ПОВТОРНЫХ ПЕРЕДАЧ, ТАК КАК ЭТО МОЖЕТ БЫТЬ
ДЛИТЕЛЬНЫЙ ПРОЦЕСС. ЗДЕСЬ ЖЕ ПОКАЗАН ВЫЗОВ .FORK И ЕГО
РАСШИРЕНИЕ.
3. ЕСЛИ ПЕРЕДАЧА НЕ БЫЛА ЗАВЕРШЕНА
ПЕРЕДАЧА СЧИТАЕТСЯ НЕЗАВЕРШЕННОЙ, ЕСЛИ МНОГО
СИМВОЛОВ ИЛИ МНОГО БЛОКОВ ДАННЫХ ОСТАЛИСЬ НЕПЕРЕДАННЫМИ.
ДРАЙВЕР ДОЛЖЕН ПЕРЕЗАПУСТИТЬ УСТРОЙСТВО И ВЫЙТИ ПО
КОМАНДЕ RTS PC В ОЖИДАНИЕ СЛЕДУЮЩЕГО ПРЕРЫВАНИЯ.
4. ЕСЛИ ПЕРЕДАЧА БЫЛА ЗАВЕРШЕНА
КОГДА ПЕРЕДАЧА ЗАВЕРШЕНА, ДРАЙВЕР МОЖЕТ ПРОСТО ВЫЙТИ
ЧЕРЕЗ СЕКЦИЮ ЗАВЕРШЕНИЯ ВВОДА-ВЫВОДА.
2.5. СЕКЦИЯ ЗАВЕРШЕНИЯ ВВОДА-ВЫВОДА
СЕКЦИЯ ЗАВЕРШЕНИЯ ВВОДА-ВЫВОДА ОБЕСПЕЧИВАЕТ ОБЩИЙ ПУТЬ
ВЫХОДА, ЧТОБЫ ИНФОРМИРОВАТЬ МОНИТОР О ТОМ, ЧТО ДРАЙВЕР
ВЫПОЛНИЛ ТЕКУЩИЙ ЗАПРОС, И, ПОЭТОМУ, МОНИТОР МОЖЕТ
ОСВОБОДИТЬ ТЕКУЩИЙ ЭЛЕМЕНТ ОЧЕРЕДИ. ХОТЯ ДРУГИЕ СЕКЦИИ
ДРАЙВЕРА ЯВЛЯЮТСЯ РАЗЛИЧНЫМИ ОТДЕЛЬНЫМИ ЧАСТЯМИ, СЕКЦИЯ
ЗАВЕРШЕНИЯ ВВОДА-ВЫВОДА - ЭТО ФАКТИЧЕСКИ РАСШИРЕНИЕ СЕКЦИИ
ОБРАБОТКИ ПРЕРЫВАНИЙ, И ГРАНИЦА МЕЖДУ ЭТИМИ ДВУМЯ
СЕКЦИЯМИ - ИСКУССТВЕННАЯ. УПРАВЛЕНИЕ НЕ ПЕРЕХОДИТ К СЕКЦИИ
ЗАВЕРШЕНИЯ ВВОДА-ВЫВОДА В РЕЗУЛЬТАТЕ ВЫЗОВА МОНИТОРА, ВЫЗОВА
ПОДПРОГРАММЫ ИЛИ ПЕРЕХОДА, А ПЕРЕХОДИТ ЛИШЬ В РЕЗУЛЬТАТЕ
ОБЫЧНОГО ХОДА ВЫПОЛНЕНИЯ ЧЕРЕЗ СЕКЦИЮ ОБРАБОТКИ ПРЕРЫВАНИЯ.
ВЫПОЛНЕНИЕ ПЕРЕДАЕТСЯ В СЕКЦИЮ ЗАВЕРШЕНИЯ ВВОДА-ВЫВОДА,
КОГДА ОБНАРУЖЕНА НЕВОССТАНОВИМАЯ ОШИБКА, КОГДА ЧИСЛО
ПОВТОРНЫХ ПЕРЕДАЧ В СЛУЧАЕ ВОССТАНОВИМОЙ ОШИБКИ ДОСТИГЛО
ДОПУСТИМОГО ИЛИ КОГДА ПЕРЕДАЧА ДАННЫХ ЗАКОНЧЕНА. (ЕСЛИ
СРАЗУ ЖЕ БУДЕТ ОБНАРУЖЕНА НЕВОССТАНОВИМАЯ ОШИБКА, ТО МОЖНО
НЕПОСРЕДСТВЕННО ПЕРЕХОДИТЬ ИЗ ЭТОЙ СЕКЦИИ В СЕКЦИЮ
ИНИЦИИРОВАНИЯ ВВОДА-ВЫВОДА.)
1. ЕСЛИ ПРОИЗОШЛА ОШИБКА
СУЩЕСТВУЕТ ДВА ВИДА ОШИБОК, ВЫЗЫВАЮЩИХ ПЕРЕДАЧУ
УПРАВЛЕНИЯ В СЕКЦИЮ ЗАВЕРШЕНИЯ ВВОДА-ВЫВОДА:
НЕВОССТАНОВИМЫЕ ОШИБКИ, КОТОРЫЕ ВЫЗЫВАЮТ НЕМЕДЛЕННЫЙ
ПЕРЕХОД В ЭТУ СЕКЦИЮ, И ВОССТАНОВИМЫЕ ОШИБКИ, КОТОРЫЕ
ИСЧЕРПАЛИ ДОПУСТИМОЕ ЧИСЛО ПОВТОРНЫХ ПЕРЕДАЧ И КОТОРЫЕ
ПЕРЕХОДЯТ В ЭТУ СЕКЦИЮ ПОСЛЕ ПОСЛЕДНЕЙ НЕУДАЧНОЙ ПОПЫТКИ
ПОВТОРНОЙ ПЕРЕДАЧИ. ПРИ ПЕРЕДАЧЕ УПРАВЛЕНИЯ МОНИТОРУ
МОЖНО СЧИТАТЬ ОБА ЭТИ СЛУЧАЯ АНАЛОГИЧНЫМИ.
СНАЧАЛА НЕОБХОДИМО УСТАНОВИТЬ РАЗРЯД НЕВОССТАНОВИМОЙ
ОШИБКИ ДЛЯ КАНАЛА, РАЗРЯД 0 В СЛОВЕ СОСТОЯНИЯ КАНАЛА
(CSW). ВТОРОЕ СЛОВО ЭЛЕМЕНТА ОЧЕРЕДИ ВВОДА-ВЫВОДА,
Q.CSW, УКАЗЫВАЕТ СЛОВО СОСТОЯНИЯ КАНАЛА. ЗАТЕМ
НЕОБХОДИМО ПЕРЕХОДИТЬ К ПОДПРОГРАММЕ ЗАВЕРШЕНИЯ
ВВОДА-ВЫВОДА В РЕЗИДЕНТНОМ МОНИТОРЕ. ДЛЯ ГЕНЕРАЦИИ КОДА
ЭТОГО ПЕРЕХОДА ИСПОЛЬЗУЕТСЯ ЗАПРОС .DRFIN.
ПРИМЕР:
BIS #HDERR$,@-(R5) ;УСТАНАВЛИВАЕТСЯ РАЗРЯД
;НЕВОССТАНОВИМОЙ ОШИБКИ
;(R5 УКАЗЫВАЕТ ТРЕТЬЕ СЛОВО
;ЭЛЕМЕНТА ОЧЕРЕДИ;
;УКАЗАТЕЛЕМ CSW ЯВЛЯЕТСЯ
;ВТОРОЕ СЛОВО)
.DRFIN RK ;ПЕРЕХОД В МОНИТОР
В ЭТОМ ПРИМЕРЕ ПРИВЕДЕНЫ СТРОКИ КОДА ИЗ ДРАЙВЕРА RK. ОНИ
ПОКАЗЫВАЮТ, КАК ДРАЙВЕР УСТАНАВЛИВАЕТ РАЗРЯД
НЕВОССТАНОВИМОЙ ОШИБКИ И ОСУЩЕСТВЛЯЕТ ВОЗВРАТ В МОНИТОР.
2. ЕСЛИ ПЕРЕДАЧА БЫЛА ЗАВЕРШЕНА
ДЛЯ БЛОЧНО-ОРИЕНТИРОВАННЫХ УСТРОЙСТВ, КАК, НАПРИМЕР,
ДИСК, ДРАЙВЕР ПРОСТО ЗАПРЕЩАЕТ ПРЕРЫВАНИЕ И ВЫПОЛНЯЕТ
ПЕРЕХОД В МОНИТОР. ЗАПРОС .DRFIN ГЕНЕРИРУЕТ КОД ДЛЯ
ВЫПОЛНЕНИЯ ПЕРЕХОДА.
ДЛЯ СИМВОЛЬНО-ОРИЕНТИРОВАННЫХ (ИЛИ
СЛОВНО-ОРИЕНТИРОВАННЫХ) УСТРОЙСТВ, КАК, НАПРИМЕР,
ПЕРФОЛЕНТОЧНОЕ УСТРОЙСТВО ВВОДА-ВЫВОДА, ЭТА ПРОЦЕДУРА
СЛОЖНЕЕ, ПОТОМУ ЧТО ДРАЙВЕР ДОЛЖЕН СООБЩИТЬ ОБ ОКОНЧАНИИ
ФАЙЛА ЗАДАНИЮ, КОТОРОЕ ЗАПРОСИЛО ПЕРЕДАЧУ ВВОДА-ВЫВОДА.
ПРИМЕРАМИ УСЛОВИЙ, КОТОРЫЕ ВЫЗЫВАЮТ КОНЕЦ ФАЙЛА,
ЯВЛЯЮТСЯ: ОТСУТСТВИЕ ПЕРФОЛЕНТЫ В ПЕРФОЛЕНТОЧНОМ
УСТРОЙСТВЕ ВВОДА И ОБНАРУЖЕНИЕ СУ/Z, НАПЕЧАТАННОГО НА
СИСТЕМНОМ ТЕРМИНАЛЕ. КОГДА ДРАЙВЕР ФАКТИЧЕСКИ
ОБНАРУЖИВАЕТ УСЛОВИЕ EOF В ОПЕРАЦИИ READ, ОН ДОЛЖЕН
УСТАНОВИТЬ ВНУТРЕННИЙ ПРИЗНАК EOF, ПОМЕСТИТЬ ПОСЛЕДНИЙ
СИМВОЛ В БУФЕР ПОЛЬЗОВАТЕЛЯ, А ЗАТЕМ ЗАПОЛНИТЬ НУЛЯМИ
ОСТАЛЬНОЙ БУФЕР. ЗАТЕМ ДРАЙВЕР ДОЛЖЕН ПЕРЕХОДИТЬ ОБРАТНО
В МОНИТОР, КАК ЕСЛИ БЫ EOF НЕ БЫЛ ОБНАРУЖЕН, И БУФЕР
ПРОСТО БЫ ЗАПОЛНИЛСЯ. ДРАЙВЕР ОЖИДАЕТ, ПОКА НЕ БУДЕТ
ВЫЗВАН ВНОВЬ ПРИЗНАК EOF ПОЛЬЗОВАТЕЛЮ.
ДРАЙВЕР PC ИСПОЛЬЗУЕТ РАЗРЯД ГОТОВНОСТИ В СЛОВЕ
СОСТОЯНИЯ ПЕРФОЛЕНТОЧНОГО УСТРОЙСТВА ВВОДА-ВЫВОДА КАК
ВНУТРЕННИЙ ПРИЗНАК EOF.
ПРИМЕР:
1$: CLRB @-(R4) ;ОЧИЩАЕТ БАЙТ (R4 УКАЗЫВАЕТ
;АДРЕС БУФЕРА)
INC (R4)+ ;ИЗМЕНЯЕТ АДРЕС БУФЕРА
DEC @R4 ;УМЕНЬШАЕТ СЧЕТЧИК
;ОСТАВШИХСЯ БАЙТОВ
BNE 1$ ;ЦИКЛ ДО ГОТОВНОСТИ
PCDONE: CLR @#PC$CSR ;ЗАПРЕЩАЕТ ПРЕРЫВАНИЕ
; ;ПЕРФОЛЕНТОЧНОГО УСТРОЙСТВА
;ВВОДА
CLR @#PP$CSR ;ЗАПРЕЩАЕТ ПРЕРЫВАНИЕ
;ПЕРФОЛЕНТОЧНОГО УСТРОЙСТВА
;ВЫВОДА
CLR PCFBLK+2 ;ОЧИЩАЕТ FORK-БЛОК ДЛЯ
;НЕДОПУЩЕНИЯ ДИСПЕТЧЕРИЗАЦИИ
PCFIN: .DRFIN PC ;ПЕРЕХОД К ОКОНЧАНИЮ
;ВВОДА-ВЫВОДА
В ЭТОМ ПРИМЕРЕ ПОКАЗАНО, КАК ДРАЙВЕР PC ЗАПОЛНЯЕТ
НУЛЯМИ БУФЕР ПОЛЬЗОВАТЕЛЯ, КОГДА ОН ОБНАРУЖИВАЕТ КОНЕЦ
ФАЙЛА, УСТАНАВЛИВАЕТ ВНУТРЕННИЙ ПРИЗНАК EOF И ПЕРЕХОДИТ
ОБРАТНО В МОНИТОР.
КОГДА ДРАЙВЕР ВЫЗЫВАЕТСЯ ВНОВЬ С НОВЫМ ЭЛЕМЕНТОМ
ОЧЕРЕДИ ДЛЯ ДРУГОЙ ОПЕРАЦИИ READ, ОН СНАЧАЛА ПРОВЕРЯЕТ
ВНУТРЕННИЙ ПРИЗНАК EOF. НАЙДЯ ЕГО УСТАНОВЛЕННЫМ, ДРАЙВЕР
УСТАНАВЛИВАЕТ РАЗРЯД EOF СЛОВА СОСТОЯНИЯ КАНАЛА, РАЗРЯД
13, И ПЕРЕХОДИТ ОБРАТНО В МОНИТОР. РЕЗИДЕНТНЫЙ МОНИТОР,
В КОНЦЕ КОНЦОВ, ОЧИЩАЕТ ЭТОТ РАЗРЯД, КОГДА ОСУЩЕСТВЛЯЕТСЯ
СЛЕДУЮЩИЙ ЗАПРОС ВВОДА-ВЫВОДА ДЛЯ ЭТОГО КАНАЛА.
ПРИМЕР:
MOV #PC$CSR,R5 ;ЗАПРАШИВАЕТ ПЕРФОЛЕНТОЧНОЕ
;УСТРОЙСТВО ВВОДА-ВЫВОДА,
;ЗАСЫЛАЕТ CSR
TST (R5)+ ;УСТРОЙСТВО ГОТОВО?
BPL PCGORD ;ДА, НАЧАЛО ПЕРЕДАЧИ
BIS #EOF$,@-(R4) ;НЕ ГОТОВ ВХОД,
;УСТАНАВЛИВАЕТ EOF
BR PCFIN ;И ОПЕРАЦИЯ ЗАВЕРШЕНИЯ
В ЭТОМ ПРИМЕРЕ ПОКАЗАНО, КАК ДРАЙВЕР PC ПРОВЕРЯЕТ
РАЗРЯД ГОТОВНОСТИ УСТРОЙСТВА, КОТОРЫЙ ОН ИСПОЛЬЗУЕТ КАК
ПРИЗНАК СВОЕГО EOF, УСТАНАВЛИВАЕТ РАЗРЯД EOF ДЛЯ
ПРОГРАММЫ ПОЛЬЗОВАТЕЛЯ И ВОЗВРАЩАЕТСЯ ОБРАТНО В МОНИТОР.
БЛАГОДАРЯ ЭТОМУ СОГЛАШЕНИЮ ДЛЯ ОБОЗНАЧЕНИЯ КОНЦА ФАЙЛА
(EOF) ПРОГРАММА ВОСПРИНИМАЕТ СИМВОЛЬНО-ОРИЕНТИРОВАННЫЕ
УСТРОЙСТВА КАК УСТРОЙСТВА ПРОИЗВОЛЬНОГО ДОСТУПА К ДАННЫМ,
ЧТО НЕ ПРОТИВОРЕЧИТ ИДЕЕ СИСТЕМЫ ФОДОС-2 О НЕЗАВИСИМОСТИ
УСТРОЙСТВ.
2.5.1. ЗАПРОС .DRFIN
ЗАПРОС .DRFIN ИСПОЛЬЗУЕТСЯ ДЛЯ ГЕНЕРАЦИИ КОМАНД ДЛЯ
ПЕРЕХОДА ОБРАТНО В МОНИТОР В КОНЦЕ СЕКЦИИ ЗАВЕРШЕНИЯ
ВВОДА-ВЫВОДА. ОН ДЕЛАЕТ УКАЗАТЕЛЬ ТЕКУЩЕГО ЭЛЕМЕНТА ОЧЕРЕДИ
ГЛОБАЛЬНЫМ СИМВОЛОМ И ГЕНЕРИРУЕТ ПОЗИЦИОННО-НЕЗАВИСИМЫЙ КОД
ДЛЯ ВОЗВРАТА В МОНИТОР. КОГДА ПОСЛЕ ВОЗВРАТА УПРАВЛЕНИЕ
ПЕРЕХОДИТ К МОНИТОРУ, ОН ОСВОБОЖДАЕТ ТЕКУЩИЙ ЭЛЕМЕНТ
ОЧЕРЕДИ.
ФОРМАТ ЗАПРОСА .DRFIN СЛЕДУЮЩИЙ:
.DRFIN NAME
ГДЕ NAME - ДВУХСИМВОЛЬНОЕ ИМЯ УСТРОЙСТВА.
2.6. СЕКЦИЯ ОКОНЧАНИЯ ДРАЙВЕРА
ЦЕЛЬЮ СЕКЦИИ ОКОНЧАНИЯ ДРАЙВЕРА ЯВЛЯЕТСЯ ОБ'ЯВЛЕНИЕ
НЕКОТОРЫХ ГЛОБАЛЬНЫХ СИМВОЛОВ И УСТАНОВКА ТАБЛИЦЫ УКАЗАТЕЛЕЙ
ДЛЯ СМЕЩЕНИЙ В РЕЗИДЕНТНОМ МОНИТОРЕ. УКАЗАТЕЛИ ЗАПОЛНЯЮТСЯ
ВО ВРЕМЯ ЗАГРУЗКИ, ЕСЛИ ЭТО ДРАЙВЕР СИСТЕМНОГО УСТРОЙСТВА.
В ПРОТИВНОМ СЛУЧАЕ, ОНИ ЗАПОЛНЯЮТСЯ, КОГДА ДРАЙВЕР ДЕЛАЕТСЯ
РЕЗИДЕНТНЫМ ПОСРЕДСТВОМ ЗАПРОСА .FETCH ИЛИ КОМАНДЫ МОНИТОРА
LOAD. СЕКЦИЯ ОКОНЧАНИЯ ДРАЙВЕРА ПРЕДУСМАТРИВАЕТ ТАКЖЕ
СИМВОЛ ДЛЯ ОПРЕДЕЛЕНИЯ РАЗМЕРА ДРАЙВЕРА. ДЛЯ ГЕНЕРАЦИИ
ОКОНЧАНИЯ ДРАЙВЕРА ИСПОЛЬЗУЕТСЯ ЗАПРОС .DREND.
2.6.1. ЗАПРОС .DREND
ФОРМАТ ЗАПРОСА .DREND СЛЕДУЮЩИЙ:
.DREND NAME
ГДЕ NAME - ДВУХСИМВОЛЬНОЕ ИМЯ УСТРОЙСТВА.
2.6.2. ФИКТИВНЫЕ УСТРОЙСТВА
В СИСТЕМЕ ФОДОС-2 ПРЕДУСМОТРЕНА ВОЗМОЖНОСТЬ НАПИСАНИЯ
ДРАЙВЕРА ДЛЯ ФИКТИВНОГО УСТРОЙСТВА (УСТРОЙСТВО, КОТОРОЕ НЕ
ПРЕРЫВАЕТСЯ И НЕ ЯВЛЯЕТСЯ БОЛЬШИМ ЗАПОМИНАЮЩИМ УСТРОЙСТВОМ),
ЧТОБЫ ИСПОЛЬЗОВАТЬ ПРЕИМУЩЕСТВА ОРГАНИЗОВАННОЙ В ОЧЕРЕДЬ
СИСТЕМЫ ВВОДА-ВЫВОДА И ТОГО ФАКТА, ЧТО ДРАЙВЕРЫ МОГУТ
ОСТАВАТЬСЯ РЕЗИДЕНТНЫМИ В ПАМЯТИ. ПРИМЕРАМИ ДРАЙВЕРОВ ДЛЯ
ФИКТИВНЫХ УСТРОЙСТВ ЯВЛЯЮТСЯ ДРАЙВЕРЫ NL (ДРАЙВЕР ФИКТИВНОГО
УСТРОЙСТВА) И MQ (ДРАЙВЕР ОБМЕНА МЕЖДУ ЗАДАНИЯМИ).
ВСЕ ВЫПОЛНЯЕМЫЕ КОДЫ ТАКИХ ДРАЙВЕРОВ ДОЛЖНЫ СОДЕРЖАТЬСЯ
В СЕКЦИИ ИНИЦИИРОВАНИЯ ВВОДА-ВЫВОДА. ЗАТЕМ ДРАЙВЕР ДОЛЖЕН
ВЫЗВАТЬ ЗАПРОС .DRFIN ДЛЯ ОКОНЧАНИЯ ОПЕРАЦИИ И ВОЗВРАТА
ЭЛЕМЕНТА ОЧЕРЕДИ. ТАК КАК ФИКТИВНЫЕ УСТРОЙСТВА НЕ
ПРЕРЫВАЮТСЯ, ТО ДРАЙВЕРАМ НЕ НУЖНА СЕКЦИЯ ОБРАБОТКИ
ПРЕРЫВАНИЙ И ЗАПРОС .DRAST.
3. НАСТРОЙКА И ПРОВЕРКА ПРОГРАММЫ
3.1. ОБЩЕЕ ОПИСАНИЕ ДРАЙВЕРА УСТРОЙСТВА
НИЖЕ ПРИВЕДЕН ПРИМЕР, В КОТОРОМ ПОКАЗАНА СТРУКТУРА ДЛЯ
ПРОСТОГО ДРАЙВЕРА УСТРОЙСТВА SK.
ПРИМЕР:
.TITLE SK V05.01
;ДРАЙВЕР УСТРОЙСТВА SK
.IDENT /V05.01/
.SBTTL СЕКЦИЯ ОПРЕДЕЛЕНИЙ
.MCALL .DRDEF
.DRDEF SK,377,WONLY$,0,177514,200
SKBR =SK$CSR+2 ;РЕГИСТР БУФЕРА SK
SKIE =100 ;РАЗРЯД РАЗРЕШЕНИЯ
;ПРЕРЫВАНИЯ
.SBTTL СЕКЦИЯ ЗАГОЛОВКА
.DRBEG SK
.SBTTL СЕКЦИЯ ИНИЦИИРОВАНИЯ ВВОДА-ВЫВОДА
MOV SKCQE,R4 ;R4 УКАЗЫВАЕТ ТЕКУЩИЙ
;ЭЛЕМЕНТ ОЧЕРЕДИ
ASL Q$WCNT(R4) ;ДЕЛАЕТ ИЗ СЧЕТЧИКА СЛОВ
;СЧЕТЧИК БАЙТОВ
BEQ SKDONE ;ПЕРЕХОД К НЕПОСРЕДСТВЕННОМУ
;ОКОНЧАНИЮ
BCC SKERR ;УСТРОЙСТВО ТОЛЬКО ЗАПИСИ -
;ЗАПРОС СЧИТЫВАНИЯ ЗАПРЕЩЕН
RET: BIS #SKIE,@#SK$CSR ;РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ
RTS PC ;ОЖИДАНИЕ ПРЕРЫВАНИЯ
.SBTTL СЕКЦИЯ ОБРАБОТКИ ПРЕРЫВАНИЯ
.DRAST SK,4,SKDONE
MOV SKCQE,R4 ;R4 УКАЗЫВЕТ ТЕКУЩИЙ
;ЭЛЕМЕНТ ОЧЕРЕДИ
BIT #100200,@#SK$CSR;ОШИБКА ИЛИ ГОТОВНОСТЬ?
BMI RET ;ОШИБКА, НЕОБХОДИМО
;ИСПРАВЛЕНИЕ
BEQ RET ;НЕT ГОТОВНОСТИ-ВЫХОД И
;ОЖИДАНИЕ
BIC #SKIE,@#SK$CSR ;ЗАПРЕЩЕНИЕ ПРЕРЫВАНИЙ
.FORK SKFBLK ;КОД, ПЕРЕВОДЯЩИЙ ПРОЦЕСС НА
;FORK-УРОВЕНЬ
ADD #Q$WCNT,R4 ;ПЕРЕМЕСТИТЬ УКАЗАТЕЛЬ
;ЭЛЕМЕНТА ОЧЕРЕДИ
SKNEXT: TSTB @#SK$CSR ;ГОТОВНОСТЬ ДЛЯ СЛЕДУЮЩЕГО
;СИМВОЛА?
BPL RET ;НЕТ - ПЕРЕХОД НАЗАД
TST @R4 ;ПЕЧАТАТЬ НЕМНОГО ЛЕВЕЕ?
BEQ SKDONE ;НЕТ - ПЕРЕДАЧА ЗАКОНЧЕНА
MOVB @-(R4),R5 ;ПРИНЯТЬ СИМВОЛ
INC (R4)+ ;УВЕЛИЧИТЬ УКАЗАТЕЛЬ БУФЕРА
INC @R4 ;УВЕЛИЧИТЬ СЧЕТЧИК СИМВОЛОВ
BIC #^C<177>,R5 ;7-РАЗРЯДНЫЙ ASCII
MOVB R5,@#SKBR ;ПЕРЕСЛАТЬ СИМВОЛ В
;УСТРОЙСТВО
BR SKNEXT ;ТО ЖЕ САМОЕ ДЛЯ ДРУГИХ
;СИМВОЛОВ
.SBTTL СЕКЦИЯ ЗАВЕРШЕНИЯ ВВОДА-ВЫВОДА
SKERR: BIS #HDERR$,@-(R4) ;УСТАНОВИТЬ РАЗРЯД ОШИБКИ
;В CSW
SKDONE: BIC #IE,@#SK$CSR ;ЗАПРЕТИТЬ ПРЕРЫВАНИЯ
.DRFIN SK ;ВОЗВРАТ В МОНИТОР
SKFBLK: .WORD 0,0,0,0 ;ЭЛЕМЕНТЫ FORK-ОЧЕРЕДИ
.SBTTL СЕКЦИЯ ОКОНЧАНИЯ ДРАЙВЕРА
.DREND SK
.END
3.2. ДРАЙВЕРЫ, КОТОРЫЕ ФОРМИРУЮТ ВНУТРЕННЮЮ ОЧЕРЕДЬ
ДРАЙВЕР УСТРОЙСТВА МОЖЕТ ИСПОЛЬЗОВАТЬ ОДНУ ИЛИ БОЛЬШЕЕ
ЧИСЛО СВОИХ СОБСТВЕННЫХ ОЧЕРЕДЕЙ, НЕОБХОДИМЫХ ДЛЯ ЗАПРОСОВ
ВВОДА-ВЫВОДА, ВМЕСТО ИСПОЛЬЗОВАНИЯ ОБЫЧНОЙ ОЧЕРЕДИ
ВВОДА-ВЫВОДА МОНИТОР-ДРАЙВЕР. ВНУТРЕННЯЯ ОЧЕРЕДЬ
ПРЕДНАЗНАЧЕНА ДЛЯ ОДНОВРЕМЕННОГО ВЫПОЛНЕНИЯ НЕСКОЛЬКИХ
ОПЕРАЦИЙ, Т.Е. ДРАЙВЕР МОЖЕТ ОБСЛУЖИТЬ НЕСКОЛЬКО ЗАПРОСОВ С
ОДНИМ ОБРАЩЕНИЕМ К УСТРОЙСТВУ. ВНУТРЕННЯЯ ОЧЕРЕДНОСТЬ
ВОЗМОЖНА В ЭТОМ СЛУЧАЕ, НО МНОГОЕ ЗАВИСИТ ОТ КОНКРЕТНОЙ
СИТУАЦИИ. ДЛЯ ДРАЙВЕРОВ И УСТРОЙСТВ, ДЛЯ КОТОРЫХ ВНУТРЕННЯЯ
ОЧЕРЕДНОСТЬ НЕВОЗМОЖНА ИЛИ НЕЦЕЛЕСООБРАЗНА, НЕ РЕКОМЕНДУЕТСЯ
ИСПОЛЬЗОВАТЬ ВНУТРЕННЮЮ ОЧЕРЕДНОСТЬ.
ДРУГИМ ПРИМЕРОМ ЯВЛЯЕТСЯ ОЧЕРЕДЬ СООБЩЕНИЙ СИСТЕМЫ
ФОДОС-2, ВЫПОЛНЕННАЯ ПОСРЕДСТВОМ ДРАЙВЕРА MQ ДЛЯ СВЯЗИ
СИСТЕМНЫХ ЗАДАНИЙ. ЕСЛИ ОДНО ЗАДАНИЕ ПОСЫЛАЕТ СООБЩЕНИЕ
ВТОРОМУ ЗАДАНИЮ, И ВТОРОЕ ЗАДАНИЕ НЕ ПРИНИМАЕТ СООБЩЕНИЕ,
ДРАЙВЕР MQ ОЖИДАЕТ. ЕСЛИ ПРОЦЕСС ПРИЕМА СООБЩЕНИЯ
ОСУЩЕСТВЛЯЕТСЯ ЧЕРЕЗ ОЧЕРЕДЬ, ТО ДРАЙВЕР MQ ОБРАБАТЫВАЕТ
ЕГО. ДЛЯ ЭТОГО ОН ИСПОЛЬЗУЕТ ПЕРВОНАЧАЛЬНО ПОСЛАННЫЙ ЗАПРОС
ИЗ ОЧЕРЕДИ МОНИТОР-ДРАЙВЕР, СТАВИТ ЕГО ВО ВНУТРЕННЮЮ ОЧЕРЕДЬ
И, ЗАТЕМ, ОБСЛУЖИВАЕТ ЗАПРОС ПРИЕМА.
ВООБЩЕ, ДРАЙВЕР СЛЕДУЕТ ПРОСТОЙ ПРОЦЕДУРЕ ДЛЯ
ОСУЩЕСТВЛЕНИЯ ФОРМИРОВАНИЯ В ОЧЕРЕДЬ. КОГДА ЗАПРОС
ВВОДА-ВЫВОДА ДЕЛАЕТСЯ ДЛЯ ДРАЙВЕРА, ОН ЯВЛЯЕТСЯ ПЕРВЫМ И
ЕДИНСТВЕННЫМ ЗАПРОСОМ В ОЧЕРЕДИ МОНИТОР-ДРАЙВЕР. КАК ТОЛЬКО
ЗАПРОС БУДЕТ ПРИНЯТ, ДРАЙВЕР СТАВИТ ЕГО ВО ВНУТРЕННЮЮ
ОЧЕРЕДЬ И ОЧИЩАЕТ DDCQE И DDLQE ДЛЯ "УДАЛЕНИЯ" ЗАПРОСА ИЗ
ОЧЕРЕДИ МОНИТОР-ДРАЙВЕР. ВАЖНО, ЧТО ЭЛЕМЕНТ ОЧЕРЕДИ ВСЕ ЕЩЕ
ЗАНЯТ - ОН ЕЩЕ ИСПОЛЬЗУЕТСЯ ДРАЙВЕРОМ.
3.2.1. ФОРМИРОВАНИЕ ВНУТРЕННЕЙ ОЧЕРЕДИ
КОГДА ДРАЙВЕР СНАЧАЛА ВВОДИТСЯ ДЛЯ ЗАПРОСА, В ШЕСТОМ
СЛОВЕ ОН ДОЛЖЕН ПРОВЕРИТЬ НАЛИЧИЕ ЭЛЕМЕНТА ОЧЕРЕДИ.
НЕДОПУСТИМЫЙ ЗАПРОС НЕМЕДЛЕННО ПРИВОДИТ К ФАТАЛЬНОЙ ОШИБКЕ.
ЕСЛИ ЗАПРОС СДЕЛАН ДЛЯ БЫСТРОЗАВЕРШАЮЩЕЙСЯ ПРОЦЕДУРЫ,
КАК, НАПРИМЕР, УСТАНОВКА ПЕРФОЛЕНТЫ, ДРАЙВЕР ВЫПОЛНИТ
ОПЕРАЦИЮ. ЗАТЕМ ОН ВЫДАСТ ЗАПРОС .DRFIN ДЛЯ ОСВОБОЖДЕНИЯ
ЭЛЕМЕНТА ОЧЕРЕДИ И СООБЩЕНИЕ О ЗАВЕРШЕНИИ ОПЕРАЦИИ ДЛЯ
ЗАПРАШИВАЮЩЕЙ ПРОГРАММЫ. В ОБЩЕМ, ДРАЙВЕР ВЫПОЛНЯЕТ
ОПЕРАЦИЮ, ЕСЛИ ЭТА ОПЕРАЦИЯ МОЖЕТ ВЫПОЛНИТЬСЯ БЫСТРО И
СИНХРОННО.
ЕСЛИ ЗАПРОС СДЕЛАН ДЛЯ ПРОЦЕДУРЫ, ТРЕБУЮЩЕЙ ВЫЧИСЛЕНИЙ
И ВРЕМЕНИ, ДРАЙВЕР СТАВИТ ЗАПРОС ВО ВНУТРЕННЮЮ ОЧЕРЕДЬ
ПОСРЕДСТВОМ ИСПОЛЬЗОВАНИЯ СЛОВА СВЯЗИ ЭЛЕМЕНТОВ ОЧЕРЕДИ.
СЛОВО СВЯЗИ РАВНО 0, ТАК КАК ЭТОТ ЭЛЕМЕНТ ЯВЛЯЕТСЯ ПЕРВЫМ И
ЕДИНСТВЕННЫМ В ОЧЕРЕДИ.
В ОБЩЕМ, ДРАЙВЕР УСТАНАВЛИВАЕТ ЗАПРОС ВО ВНУТРЕННЮЮ
ОЧЕРЕДЬ, ЕСЛИ ЭТОТ ЗАПРОС ТРЕБУЕТ РАБОТЫ И ВРЕМЕНИ И ДОЛЖЕН
ВЫПОЛНЯТЬСЯ АСИНХРОННО. ЕСЛИ ВО ВНУТРЕННЕЙ ОЧЕРЕДИ ЭТОТ
ЗАПРОС ЯВЛЯЕТСЯ ПЕРВЫМ, ДРАЙВЕР НАЧИНАЕТ ОПЕРАЦИЮ, ОЖИДАЕТ
ЕЕ ЗАВЕРШЕНИЯ И ВЫВОДИТСЯ КОМАНДОЙ RTS PC. ЕСЛИ ЭТОТ ЗАПРОС
НЕ ЯВЛЯЕТСЯ ПЕРВЫМ ВО ВНУТРЕНЕЙ ОЧЕРЕДИ, ДРАЙВЕР НЕ НАЧИНАЕТ
ОПЕРАЦИЮ И ВЫВОДИТСЯ КОМАНДОЙ RTS PC.
3.2.2. ОБРАБОТКА ПРЕРЫВАНИЙ ДЛЯ ДРАЙВЕРОВ, ФОРМИРУЮЩИХ
ВНУТРЕННЮЮ ОЧЕРЕДЬ
КОГДА ОПЕРАЦИЯ ЗАВЕРШАЕТСЯ, ДРАЙВЕР ПЕРЕХОДИТ В ТОЧКЕ
ВХОДА ПРЕРЫВАНИЯ DDINT:. ЕСЛИ ВНУТРЕННИХ ОЧЕРЕДЕЙ БОЛЬШЕ,
ЧЕМ ОДНА, ДРАЙВЕР ОПРЕДЕЛЯЕТ, КАКОЙ ЗАПРОС ВКЛЮЧАЕТ ЭТО
ПРЕРЫВАНИЕ. ЕСЛИ ОПЕРАЦИЯ НЕЗАВЕРШЕНА, ДРАЙВЕР НАЧИНАЕТ ЕЕ
ВНОВЬ И ВОЗВРАЩАЕТСЯ В МОНИТОР. ЕСЛИ ПЕРЕДАЧА ЗАВЕРШЕНА,
ДРАЙВЕР ДОЛЖЕН ПОСТАВИТЬ ЗАПРОС, НАХОДЯЩИЙСЯ ВО ВНУТРЕННЕЙ
ОЧЕРЕДИ, СНОВА В ОЧЕРЕДЬ ВВОДА-ВЫВОДА МОНИТОР-ДРАЙВЕР
ПОСРЕДСТВОМ УСТАНОВКИ DDCQE И DDLQE. В ЭТОЙ СИТУАЦИИ
ДРАЙВЕРУ НУЖНО ВЕРНУТЬ ЗАПРОС В ОСНОВНУЮ ОЧЕРЕДЬ
ВВОДА-ВЫВОДА, НО ЕМУ НУЖНО ТАКЖЕ ПРОДОЛЖАТЬ ВЫПОЛНЕНИЕ (А НЕ
СРАЗУ ВОЗВРАЩАТЬСЯ В МОНИТОР), ЧТОБЫ ПРОВЕРИТЬ ВНУТРЕННЮЮ
ОЧЕРЕДЬ НА СЛУЧАЙ ДРУГОГО НЕВЫПОЛНЕННОГО ЗАПРОСА.
ЧТОБЫ ВЕРНУТЬ ЗАПРОС В МОНИТОР БЕЗ ВЫВОДА, ДРАЙВЕР
ДОЛЖЕН ВЫПОЛНИТЬ ПОДПРОГРАММУ .DRFIN.
ПРИМЕР:
MOV DDCQE,-(SP) ;В СЛУЧАЕ, КОГДА В ОЧЕРЕДИ
;МОНИТОР-ДРАЙВЕР ЕСТЬ
;ЭЛЕМЕНТ, ТОГДА ВОЗМОЖНО
;ПРЕРЫВАНИЕ
MOV R4,DDCQE ;ЭЛЕМЕНТ ВНУТРЕННЕЙ ОЧЕРЕДИ
MOV R4,DDLQE ;ПОМЕЩАЕТСЯ В ОЧЕРЕДЬ
;МОНИТОР-ДРАЙВЕР
CLR Q$LINK(R4)
MOV PC,R4 ;ВЫХОД НА ЗАПРОС
ADD #DDCQE-.,R4 ;.DRFIN
MOV @#54,R5 ;ЧЕРЕЗ
JSR PC,@270(R5) ;ПОДПРОГРАММУ JSR
MOV @SP,DDCQE ;ВОССТАНОВЛЕНИЕ ВОЗМОЖНЫХ
MOV (SP)+,DDLQE ;ДРУГИХ ЭЛЕМЕНТОВ ОЧЕРЕДИ
.
.
.
(ПРОВЕРКА НОВОЙ ВНУТРЕННЕЙ ОЧЕРЕДИ И НАЧАЛО ДРУГОЙ ОПЕРАЦИИ,
ЕСЛИ НЕОБХОДИМО)
.
.
RTS PC ;ВОЗВРАТ
В ЭТОМ ПРИМЕРЕ ПОКАЗАНО, КАК ДРАЙВЕР ИСПОЛЬЗУЕТ
ВНУРЕННЮЮ ОЧЕРЕДЬ. (R4 УКАЗЫВАЕТ ЭЛЕМЕНТ ВНУТРЕННЕЙ
ОЧЕРЕДИ, ЕГО ТРЕТЬЕ СЛОВО.)
3.2.3. ПРОЦЕДУРЫ ПРЕЖДЕВРЕМЕННОГО ПРЕРЫВАНИЯ ДЛЯ
ДРАЙВЕРОВ, ФОРМИРУЮЩИХ ВНУТРЕННЮЮ ОЧЕРЕДЬ
НЕСМОТРЯ НА ТО, УСТАНАВЛИВАЕТ ЛИ ДРАЙВЕР ЗАПРОСЫ ВО
ВНУТРЕННЮЮ ОЧЕРЕДЬ ИЛИ НЕТ, ФОДОС-2 ИСПОЛЬЗУЕТ СЧЕТЧИК
НЕВЫПОЛНЕННЫХ ЗАПРОСОВ ВВОДА-ВЫВОДА ДЛЯ КАЖДОГО КАНАЛА.
ОБЩЕЕ ЧИСЛО НЕВЫПОЛНЕННЫХ ЗАПРОСОВ ВВОДА-ВЫВОДА НАХОДИТСЯ В
РЕЗИДЕНТНОМ МОНИТОРЕ. КОГДА ЗАДАНИЕ ПРЕЖДЕВРЕМЕННО
ПРЕРЫВАЕТСЯ, НЕКОТОРЫЕ НЕВЫПОЛНЕННЫЕ ЗАПРОСЫ ВВОДА-ВЫВОДА
ДОЛЖНЫ УСТРАНЯТЬСЯ ИЗ СЧЕТЧИКОВ. ЭТО ПРОИСХОДИТ
АВТОМАТИЧЕСКИ, ЕСЛИ ДРАЙВЕР ПОЛАГАЕТСЯ НА ОЧЕРЕДЬ
ВВОДА-ВЫВОДА МОНИТОР-ДРАЙВЕР.
ЕСЛИ ЖЕ ДРАЙВЕР ОСУЩЕСТВЛЯЕТ ВНУТРЕННЮЮ ОЧЕРЕДЬ
ВВОДА-ВЫВОДА, ОН ДОЛЖЕН СЛЕДОВАТЬ ПРОЦЕДУРЕ ПОНИЖЕНИЯ
СЧЕТЧИКА НЕВЫПОЛНЕННЫХ ЗАПРОСОВ ВВОДА-ВЫВОДА. ЭТА ПРОЦЕДУРА
ДОЛЖНА ГАРАНТИРОВАТЬ, ЧТО ДРАЙВЕР БУДЕТ ВВОДИТЬСЯ, КОГДА
ЗАДАНИЕ ПРЕЖДЕВРЕМЕННО ПРЕРЫВАЕТСЯ, НЕСМОТРЯ НА ТО, ИМЕЕТ
ДРАЙВЕР АКТИВНЫЕ ЭЛЕМЕНТЫ ОЧЕРЕДИ ИЛИ НЕТ, ОН УСТАНАВЛИВАЕТ
РАЗРЯД 11, HNDLR$, В СЛОВЕ СОСТОЯНИЯ УСТРОЙСТВА DDSTS, КОГДА
ДРАЙВЕР ВЫЗЫВАЕТ ЗАПРОС .DRDEF. В СИСТЕМАХ FB И XM ЭТО
ПРИВОДИТ К ТОМУ, ЧТО ДРАЙВЕР БУДЕТ ВВОДИТЬСЯ ПРИ ВСЕХ
ПРЕЖДЕВРЕМЕННЫХ ПРЕРЫВАНИЯХ, ДАЖЕ ЕСЛИ В ОЧЕРЕДИ
МОНИТОР-ДРАЙВЕР НИЧЕГО НЕТ. (МОНИТОР SJ ИГНОРИРУЕТ ЭТОТ
РАЗРЯД, ТАК КАК В СИСТЕМЕ ОДНОГО ЗАДАНИЯ ТАКОЙ ПРОБЛЕМЫ
НЕТ.)
ЕСЛИ ДРАЙВЕР ВВОДИТСЯ В ТОЧКЕ ВХОДА ПРЕЖДЕВРЕМЕННОГО
ПРЕРЫВАНИЯ, ТО ОН ДОЛЖЕН ПРОВЕРЯТЬ ВНУТРЕННЮЮ ОЧЕРЕДЬ НА
ЭЛЕМЕНТЫ, ПРИНАДЛЕЖАЩИЕ ПРЕЖДЕВРЕМЕННО ПРЕРВАННОМУ ЗАДАНИЮ.
(R4 ВСЕГДА СОДЕРЖИТ НОМЕР ПРЕЖДЕВРЕМЕННО ПРЕРВАННОГО
ЗАДАНИЯ.) ДРАЙВЕР ДОЛЖЕН ОЧИЩАТЬ ВНУТРЕННЮЮ ОЧЕРЕДЬ ОТ ЭТИХ
ЭЛЕМЕНТОВ, И ДОЛЖНА СЛЕДОВАТЬ ОСТАНОВКА ПРОЦЕДУРЫ ДЛЯ
СНИЖЕНИЯ СЧЕТЧИКА МОНИТОРА НЕВЫПОЛНЕННЫХ ЗАПРОСОВ
ВВОДА-ВЫВОДА. РЕГИСТРЫ R0-R3 ДОЛЖНЫ БЫТЬ СОХРАНЕНЫ И ЕСЛИ
DDCQE ИМЕЕТ НЕНУЛЕВОЕ ЗНАЧЕНИЕ, ТО ДРАЙВЕР:
- ПЕРЕМЕЩАЕТ СЛЕДУЮЩИЙ ВНУТРЕННИЙ ЭЛЕМЕНТ ДЛЯ ПРЕКРАЩЕНИЯ
ЗАДАНИЯ;
- СВЯЗЫВАЕТ ЭЛЕМЕНТЫ ВМЕСТЕ ПОСРЕДСТВОМ СЛОВА СВЯЗИ
ЭЛЕМЕНТОВ (ELW), ПОСЛЕДНЕЕ СЛОВО СВЯЗИ ЭЛЕМЕНТОВ ДОЛЖНО
БЫТЬ НУЛЕВЫМ; УСТАНАВЛИВАЕТ DDLQE В ТОЧКУ ПОСЛЕДНЕГО
ЭЛЕМЕНТА В ПРЕЖДЕВРЕМЕННО ПРЕРВАННОМ ЗАДАНИИ;
- ЕСЛИ DDCQE УКАЗЫВАЕТ НА ЭЛЕМЕНТ, ПРИНАДЛЕЖАЩИЙ
ПРЕЖДЕВРЕМЕННО ПРЕРВАННОМУ ЗАДАНИЮ, ВВОД-ВЫВОД
ПРЕКРАЩАЕТСЯ, И ИСПОЛЬЗУЕТСЯ ЗАПРОС .DRFIN; ЕСЛИ
ВВОД-ВЫВОД НЕ ПРЕКРАЩАЕТСЯ, ИСПОЛЬЗУЕТСЯ ДИРЕКТИВА RTS
PC, ОЖИДАЕТСЯ ПРЕРЫВАНИЕ, ПОТОМ ИСПОЛЬЗУЕТСЯ .DRFIN;
ЕСЛИ DDCQE НЕ УКАЗЫВАЕТ НА ЭЛЕМЕНТ, ПРИНАДЛЕЖАЩИЙ
ПРЕРВАННОМУ ЗАДАНИЮ, ПРОСТО ИСПОЛЬЗУЕТСЯ ДИРЕКТИВА RTS
PC.
ЕСЛИ DDCQE ИМЕЕТ НУЛЕВОЕ ЗНАЧЕНИЕ, ТО ДРАЙВЕР:
- ПЕРЕМЕЩАЕТ ЭЛЕМЕНТЫ ВНУТРЕННЕЙ ОЧЕРЕДИ, КОТОРЫЕ
ПРИНАДЛЕЖАТ ПРЕРВАННОМУ ЗАДАНИЮ, ЕСЛИ ИХ НЕТ, ТО ПРОСТО
ИСПОЛЬЗУЕТСЯ ДИРЕКТИВА RTS PC;
- СВЯЗЫВАЕТ ЭЛЕМЕНТЫ ВМЕСТЕ, КАК ОПИСАНО ВЫШЕ,
УСТАНАВЛИВАЕТ DDCQE В ТОЧКУ ПЕРВОГО ЭЛЕМЕНТА ОЧЕРЕДИ, А
DDLQE - В ТОЧКУ ПОСЛЕДНЕГО (ПОСЛЕДНЕE СЛОВО СВЯЗИ
ЭЛЕМЕНТОВ ДОЛЖНО БЫТЬ НУЛЕВЫМ);
- ИСПОЛЬЗУЕТ ЗАПРОС .DRFIN.
3.3. ПАРАМЕТРЫ SET
КОМАНДА КЛАВИАТУРНОГО МОНИТОРА SET ПОЗВОЛЯЕТ ИЗМЕНИТЬ
ОПРЕДЕЛЕННЫЕ ХАРАКТЕРИСТИКИ ДРАЙВЕРА УСТРОЙСТВА. ДРАЙВЕР
ДОЛЖЕН НАХОДИТЬСЯ НА СИСТЕМНОМ УСТРОЙСТВЕ ФАЙЛОМ С ИМЕНЕМ
DD&.SYS (DDX.SYS ДЛЯ XM МОНИТОРА), ГДЕ DD - ДВУХСИМВОЛЬНОЕ
ИМЯ УСТРОЙСТВА.
ПРИМЕР:
SET LP WIDTH=80
В ЭТОМ ПРИМЕРЕ УСТАНАВЛИВАЕТСЯ ВОСЬМИДЕСЯТИКОЛОНОЧНАЯ
ШИРИНА ПЕЧАТИ ДЛЯ УСТРОЙСТВА LP: (ПО УМОЛЧАНИЮ - 132
КОЛОНКИ).
ДРУГОЙ ТИП КОМАНДЫ SET МОЖЕТ РАЗРЕШАТЬ ИЛИ ЗАПРЕЩАТЬ
ФУНКЦИЮ.
ПРИМЕР:
SET LP CR (УСТАНАВЛИВАЕТ ВОЗВРАТ КАРЕТКИ;
ТО ЖЕ - ПО УМОЛЧАНИЮ)
SET LP NOCR (НЕ ДЕЛАЕТ ВОЗВРАТ КАРЕТКИ)
В ЭТОМ ПРИМЕРЕ ПОКАЗАНО, КАК С ПОМОЩЬЮ ПРЕФИКСА NO
ОТРИЦАЕТСЯ ПАРАМЕТР CR (ПРЕФИКС NO ВСЕГДА СТОИТ ПЕРЕД
ПАРАМЕТРОМ).
ДРАЙВЕР УСТРОЙСТВА МОЖЕТ СОДЕРЖАТЬ КОД ДЛЯ
ОСУЩЕСТВЛЕНИЯ РАЗЛИЧНЫХ ПАРАМЕТРОВ. НИЖЕ ОПИСАНО, КАК
ДОБАВЛЯТЬ ПАРАМЕТР SET К ДРАЙВЕРУ. ЭТО ДОБАВЛЕНИЕ ВЛИЯЕТ
ТОЛЬКО НА ФАЙЛ ДРАЙВЕРА, НЕТ НЕОБХОДИМОСТИ ДЕЛАТЬ ИЗМЕНЕНИЯ
В МОНИТОРЕ. (ПАРАМЕТРЫ SET ДЕЙСТВИТЕЛЬНЫ И ДЛЯ УСТРОЙСТВ
ДАННЫХ, И ДЛЯ СИСТЕМНЫХ УСТРОЙСТВ.)
3.3.1. КАК ВЫПОЛНЯЕТСЯ КОМАНДА SET
КОМАНДА SET ЦЕЛИКОМ И ПОЛНОСТЬЮ ПРИВОДИТСЯ В ДЕЙСТВИЕ
ТАБЛИЦЕЙ В БЛОКЕ 0 ФАЙЛА ДРАЙВЕРА И ПОСРЕДСТВОМ УСТАНОВКИ
ПОДПРОГРАММ, ТАКЖЕ В БЛОКЕ 0, КОТОРЫЕ ИЗМЕНЯЮТ КОМАНДЫ И
ДАННЫЕ В БЛОКАХ 0 И 1 ДРАЙВЕРА. (БЛОК 0 ОТНОСИТСЯ К АДРЕСАМ
С 0 ДО 776, ЗАГОЛОВОК ДРАЙВЕРА НАЧИНАЕТЯ В БЛОКЕ 1, В ЯЧЕЙКЕ
1000 ФАЙЛА ДРАЙВЕРА.)
ПОСЛЕ ПЕЧАТИ КОМАНДЫ SET НА ПУЛЬТЕ ТЕРМИНАЛА, МОНИТОР
ПРОИЗВОДИТ АНАЛИЗ КОМАНДНОЙ СТРОКИ И ИЩЕТ ФАЙЛ ДРАЙВЕРА
СИСТЕМНОГО УСТРОЙСТВА DD.SYS (DDX.SYS В XM МОНИТОРЕ). НЕТ
НЕОБХОДИМОСТИ В ТОМ, ЧТОБЫ ЭТОТ ДРАЙВЕР БЫЛ УСТАНОВЛЕН В
ВЫПОЛНЯЮЩЕЙСЯ СИСТЕМЕ. ЗАТЕМ МОНИТОР СЧИТЫВАЕТ БЛОКИ 0 И 1
ДРАЙВЕРА В ОБЛАСТЬ БУФЕРА USR В ПАМЯТИ. ОН ПРОСМАТРИВАЕТ
ТАБЛИЦУ В БЛОКЕ 0, ПОКА НЕ НАЙДЕТ ЭЛЕМЕНТЫ ТАБЛИЦЫ ДЛЯ
УКАЗАННОГО ПАРАМЕТРА SET. ПО ЭЛЕМЕНТУ ТАБЛИЦЫ ОН МОЖЕТ
НАЙТИ ОПРЕДЕЛЕННУЮ ПОДПРОГРАММУ, ПРЕДНАЗНАЧЕННУЮ ДЛЯ
ВЫПОЛНЕНИЯ ЭТОГО ПАРАМЕТРА И ИЗМЕНЕНИЙ, ДОПУСКАЕМЫХ ЭТОЙ
ПОДПРОГРАММОЙ, ТАКИХ КАК NO ИЛИ ЧИСЛОВЫЕ ЗНАЧЕНИЯ. ЗАТЕМ
МОНИТОР ВЫПОЛНЯЕТ ПОДПРОГРАММУ, КОТОРАЯ СОДЕРЖИТ КОМАНДЫ,
ИЗМЕНЯЮЩИЕ КОД В БЛОКАХ 0 И 1 ДРАЙВЕРА. КОД В БЛОКЕ 1
ЯВЛЯЕТСЯ ЧАСТЬЮ ОСНОВАНИЯ ДРАЙВЕРА И СОДЕРЖИТ КОМАНДЫ ДЛЯ
УСТАНОВОК ПО УМОЛЧАНИЮ ДЛЯ ВСЕХ ПАРАМЕТРОВ SET. ПОСЛЕ
ИЗМЕНЕНИЯ КОДА, МОНИТОР ЗАПИСЫВАЕТ БЛОКИ 0 И 1 ОБРАТНО НА
СИСТЕМНОЕ УСТРОЙСТВО. ПОЭТОМУ, В РЕЗУЛЬТАТЕ КОМАНДЫ SET,
НЕКОТОРЫЕ КОМАНДЫ ИЛИ ДАННЫЕ В ДРАЙВЕРЕ ИЗМЕНЯЮТСЯ. ОДНАКО
ДРУГИЕ КОПИИ ДРАЙВЕРА, НАХОДЯЩИЕСЯ В ПАМЯТИ,
НЕДЕЙСТВИТЕЛЬНЫ.
3.3.2. ФОРМАТ ТАБЛИЦЫ SET
ТАБЛИЦА ДЛЯ ПАРАМЕТРОВ SET СОСТОИТ ИЗ СЕРИИ
ЧЕТЫРЕХСЛОВНЫХ ЭЛЕМЕНТОВ ДЛЯ ПАРАМЕТРА. ТАБЛИЦА НАЧИНАЕТСЯ
С ЯЧЕЙКИ 400 БЛОКА 0 ДРАЙВЕРА И ОКАНЧИВАЕТСЯ НУЛЕВЫМ СЛОВОМ.
ДЛЯ ГЕНЕРАЦИИ ТАБЛИЦЫ ИСПОЛЬЗУЕТСЯ ЗАПРОС .DRSET (СМ.
П.3.5.3).
ПЕРВОЕ СЛОВО ТАБЛИЦЫ ЯВЛЯЕТСЯ ЗНАЧЕНИЕМ, КОТОРОЕ БУДЕТ
ПЕРЕДАНО В R3 ДЛЯ ПОДПРОГРАММЫ SET, СВЯЗАННОЙ С ПАРАМЕТРОМ,
КОГДА МОНИТОР ОБРАБАТЫВАЕТ ЭТОТ ПАРАМЕТР. ЭТО СЛОВО МОЖЕТ
БЫТЬ ЧИСЛОВЫМ ЗНАЧЕНИЕМ - ТАКИМ, КАК ЧИСЛО КОЛОНОК ПО
УМОЛЧАНИЮ ДЛЯ ПОСТРОЧНО-ПЕЧАТАЮЩЕГО УСТРОЙСТВА - ИЛИ
КОМАНДОЙ ДЛЯ ЗАМЕНЫ НА ДРУГУЮ КОМАНДУ В БЛОКЕ 1 ДРАЙВЕРА.
ЭТО СЛОВО НЕ ДОЛЖНО БЫТЬ НУЛЕВЫМ.
ВТОРОЕ И ТРЕТЬЕ СЛОВА ТАБЛИЦЫ ЯВЛЯЮТСЯ НАИМЕНОВАНИЕМ
ПАРАМЕТРА В КОДАХ RADIX-50 (НАПРИМЕР, CR ИЛИ WIDTH). В
ТАБЛИЦЕ СИМВОЛЫ ВЫРАВНЕНЫ ВЛЕВО И ЗАПОЛНЕНЫ ПРОБЕЛАМИ.
МЛАДШИЙ БАЙТ ЧЕТВЕРТОГО СЛОВА ЯВЛЯЕТСЯ УКАЗАТЕЛЕМ
ПОДПРОГРАММЫ, КОТОРАЯ ИЗМЕНЯЕТ КОД. СТАРШИЙ БАЙТ ПОКАЗЫВАЕТ
ТИП ДОПУСТИМОГО ПАРАМЕТРА SET. УСТАНОВКА РАЗРЯДА 100
ПОКАЗЫВАЕТ, ЧТО ТРЕБУЕТСЯ ВОСЬМЕРИЧНЫЙ АРГУМЕНТ. УСТАНОВКА
РАЗРЯДА 200 ПОКАЗЫВАЕТ, ЧТО ПРЕФИКС NO ДЕЙСТВИТЕЛЬНА ДЛЯ
ЭТОГО ПАРАМЕТРА. НА РИС.1 ПОКАЗАНА ТАБЛИЦА ПАРАМЕТРОВ SET.
------------------------------------------------------------
! ЗНАЧЕНИЕ, НАХОДЯЩЕЕСЯ В R3, !
! ДЛЯ ПОДПРОГРАММЫ SET !
------------------------------------------------------------
! ИМЯ ПАРАМЕТРА В КОДАХ !
! RADIX-50 !
! (ДВА СЛОВА) !
------------------------------------------------------------
! КОДЫ ДЛЯ ДОПУСТИМОГО ! УКАЗАТЕЛЬ !
! ТИПА КОМАНД SET ! ПОДПРОГРАММЫ SET !
------------------------------------------------------------
РИС.1
3.3.3. ЗАПРОС .DRSET
ЗАПРОС .DRSET ИСПОЛЬЗУЕТСЯ ДЛЯ УСТАНОВКИ ТАБЛИЦЫ
ПАРАМЕТРОВ ПОСРЕДСТВОМ ВЫЗОВА ЗАПРОСА ОДИН РАЗ ДЛЯ КАЖДОГО
ПАРАМЕТРА ТАКИМ ОБРАЗОМ, ЧТОБЫ ВЫЗОВЫ ЗАПРОСА СЛЕДОВАЛИ ОДИН
ЗА ДРУГИМ. НЕОБХОДИМО ИСПОЛЬЗОВАТЬ ЗАПРОС .DRSET
ПОСЛЕ .DRDEF И ПЕРЕД ЗАПРОСОМ .DRBEG.
ФОРМАТ ВЫЗОВА ЗАПРОСА .DRSET СЛЕДУЮЩИЙ:
.DRSET OPTION,VAL,RTN[,MODE]
ГДЕ OPTION - ИМЯ ПАРАМЕТРА SET (НАПРИМЕР, CR ИЛИ WIDTH);
ОНО МОЖЕТ СОДЕРЖАТЬ НЕ БОЛЕЕ ШЕСТИ
БУКВЕННО-ЦИФРОВЫХ ЗНАКОВ И НЕ ДОЛЖНО СОДЕРЖАТЬ
ПРОБЕЛЫ ИЛИ ТАБУЛЯЦИЮ;
VAL - ПАРАМЕТР, КОТОРЫЙ БУДЕТ ПЕРЕДАН В R3 ДЛЯ
ПОДПРОГРАММЫ; ОН МОЖЕТ БЫТЬ ЧИСЛОВОЙ
КОНСТАНТОЙ, ТАКОЙ, КАК МИНИМАЛЬНАЯ ШИРИНА
КОЛОНКИ, ИЛИ ЦЕЛОЙ КОМАНДОЙ, ЗАКЛЮЧЕННОЙ В
УГЛОВЫЕ СКОБКИ, ДЛЯ ЗАМЕНЫ СОДЕРЖИМОГО БЛОКОВ 0
ИЛИ 1 ДРАЙВЕРА; ОН НЕ ДОЛЖЕН БЫТЬ НУЛЕВЫМ;
RTN - ИМЯ ПОДПРОГРАММЫ, КОТОРАЯ ИЗМЕНЯЕТ КОД В БЛОКАХ
0 ИЛИ 1 ДРАЙВЕРА; ПОДПРОГРАММА ДОЛЖНА
СЛЕДОВАТЬ ЗА ТАБЛИЦЕЙ ПАРАМЕТРОВ В БЛОКЕ 0, НО
НЕ ВЫШЕ АДРЕСА 776;
MODE - ПРОИЗВОЛЬНЫЙ АРГУМЕНТ ДЛЯ ПОКАЗА ТИПА ПАРАМЕТРА
SET; НЕОБХОДИМО ВВЕСТИ ПРЕФИКС NO ДЛЯ ПОКАЗА,
ЧТО ОН ДЕЙСТВИТЕЛЕН ДЛЯ ПАРАМЕТРА; НЕОБХОДИМО
ВВЕСТИ NUM, ЕСЛИ ТРЕБУЕТСЯ ДЕСЯТИЧНОЕ ЗНАЧЕНИЕ,
OCT - ЕСЛИ ВОСЬМЕРИЧНОЕ; ПРОПУСК АРГУМЕНТА
MODE ПОКАЗЫВАЕТ, ЧТО OPTION НЕ ПРИНИМАЕТ НИ
ПРЕФИКС NO, НИ ЧИСЛОВЫЕ АРГУМЕНТЫ; КОНСТРУКЦИЯ
<NO,NUM> ПОКАЗЫВАЕТ, ЧТО ТРЕБУЕТСЯ ИЛИ ПРЕФИКС
NO, ИЛИ ДЕСЯТИЧНОЕ ЗНАЧЕНИЕ, НО НЕ ОБА СРАЗУ;
КОНСТРУКЦИЯ <NO,OCT> ПОКАЗЫВАЕТ, ЧТО ТРЕБУЕТСЯ
ИЛИ ПРЕФИКС NO, ИЛИ ВОСЬМЕРИЧНОЕ ЗНАЧЕНИЕ, НО
НЕ ОБА СРАЗУ; ПРОПУСК АРГУМЕНТА MODE ВЫЗЫВАЕТ
ПОЯВЛЕНИЕ НУЛЯ В СТАРШЕМ БАЙТЕ ПОСЛЕДНЕГО СЛОВА
ЭЛЕМЕНТОВ ТАБЛИЦЫ.
СНАЧАЛА ЗАПРОС .DRSET ВЫДАЕТ ДИРЕКТИВУ .ASECT И
УСТАНАВЛИВАЕТ СЧЕТЧИК АДРЕСА У 400, В НАЧАЛЕ ТАБЛИЦЫ. ОН
ГЕНЕРИРУЕТ ТАКЖЕ НУЛЕВОЕ СЛОВО ДЛЯ ОКОНЧАНИЯ ТАБЛИЦЫ. ТАК
КАК ЗАПРОС .DRSET ОСТАВЛЯЕТ СЧЕТЧИК АДРЕСА В КОНЦЕ ТАБЛИЦЫ,
ТО НЕОБХОДИМО ПОМЕСТИТЬ ПОДПРОГРАММУ ДЛЯ ИЗМЕНЕНИЯ КОДА
СРАЗУ ЖЕ ПОСЛЕ ТОГО, КАК ЗАПРОС .DRSET ВЫЗОВЕТ ДРАЙВЕР. ЭТО
ГАРАНТИРУЕТ, ЧТО ОНИ РАСПОЛОЖАТСЯ В БЛОКЕ 0 ДРАЙВЕРА.
3.3.4. ПОДПРОГРАММА ИЗМЕНЕНИЯ ДРАЙВЕРА
ДРАЙВЕРУ НУЖНА ОДНА ПОДПРОГРАММА ДЛЯ КАЖДОГО
ДОПУСТИМОГО ПАРАМЕТРА SET. НЕОБХОДИМА ТАКЖЕ ВЕРСИЯ NO ДЛЯ
ЭТОГО ЖЕ ПАРАМЕТРА. ЦЕЛЬЮ ПОДПРОГРАММЫ ЯВЛЯЕТСЯ ИЗМЕНЕНИЕ
КОДА В ОСНОВНОЙ ЧАСТИ ДРАЙВЕРА, ОСНОВАННОЕ НА КОМАНДЕ SET,
НАПЕЧАТАННОЙ НА ПУЛЬТЕ ТЕРМИНАЛА.
СРАЗУ ЖЕ ЗА ПОДПРОГРАММАМИ ДОЛЖНА СЛЕДОВАТЬ ТАБЛИЦА
ПАРАМЕТРОВ, И ОНИ ДОЛЖНЫ НАХОДИТЬСЯ В БЛОКЕ 0 ПОСЛЕ ТАБЛИЦЫ
И НИЖЕ АДРЕСА 1000. КОД В ОСНОВНОЙ ЧАСТИ ДРАЙВЕРА, КОТОРУЮ
ИЗМЕНЯЕТ ПОДПРОГРАММА, ДОЛЖЕН НАХОДИТЬСЯ В БЛОКЕ 1 ДРАЙВЕРА,
В ПРЕДЕЛАХ ПЕРВЫХ 256-ТИ СЛОВ.
ИМЯ ПОДПРОГРАММЫ ЯВЛЯЕТСЯ ТОЧКОЙ ВХОДА ПО УМОЛЧАНИЮ.
ЭТА ТОЧКА ВХОДА ДЛЯ ПАРАМЕТРОВ, КОТОРЫЕ НЕ ПРИНИМАЮТ НИ
ЧИСЛОВЫЕ ЗНАЧЕНИЯ, НИ ПРЕФИКС NO, И ДЛЯ ПАРАМЕТРОВ, КОТОРЫЕ
ПРИНИМАЮТ ПРЕФИКС NO, НО В ДАННЫЙ МОМЕНТ ЕГО НЕ ИМЕЮТ.
ТОЧКОЙ ВХОДА ДЛЯ ПАРАМЕТРОВ, КОТОРЫЕ ПОЗВОЛЯЮТ ИСПОЛЬЗОВАТЬ
ПРЕФИКС NO И ИМЕЮТ ЕГО, ЯВЛЯЕТСЯ ТОЧКА ВХОДА ПО УМОЛЧАНИЮ
+4.
ПРИ ВХОДЕ В ПОДПРОГРАММУ ДЛЯ ВСЕХ ПАРАМЕТРОВ РАЗРЯД
ПЕРЕНОСА ЧИСТ, И РЕГИСТРЫ R0, R1 И R3 СОДЕРЖАТ ИНФОРМАЦИЮ ПО
ИСПОЛЬЗОВАНИЮ ПОДПРОГРАММЫ. ЕСЛИ ДЛЯ ЭТОГО ПАРАМЕТРА
ДОПУСТИМЫ ЧИСЛОВЫЕ ЗНАЧЕНИЯ, ТО РЕГИСТР R0 СОДЕРЖИТ ЧИСЛОВОЕ
ЗНАЧЕНИЕ, СОДЕРЖАЩЕЕСЯ В КОМАНДНОЙ СТРОКЕ С SET; R1
СОДЕРЖИТ УКАЗАННЫЙ НОМЕР КАНАЛА КАК ЧАСТЬ ИМЕНИ УСТРОЙСТВА
(ЕСЛИ НОМЕР КАНАЛА НЕ УКАЗАН, ТО РАЗРЯД ПРИЗНАКА
УСТАНОВЛЕН); R3 СОДЕРЖИТ СЛОВО VAL ТАБЛИЦЫ ПАРАМЕТРОВ SET.
ПОДПРОГРАММА МОЖЕТ ПОКАЗАТЬ, ЧТО КОМАНДА НЕДОПУСТИМА,
ПОСРЕДСТВОМ ВОЗВРАТА С УСТАНОВЛЕННЫМ РАЗРЯДОМ ПЕРЕНОСА.
НАПРИМЕР, ДЛЯ ПОСТРОЧНО-ПЕЧАТАЮЩЕГО УСТРОЙСТВА SET WIDTH НЕ
ДОПУСКАЕТ ШИРИНУ МЕНЕЕ 30. ЕСЛИ ПАРАМЕТРЫ ПОДПРОГРАММЫ
ПОКАЗЫВАЮТ НЕИСПРАВНОСТЬ, МОНИТОР ПЕЧАТАЕТ СООБЩЕНИЕ ОБ
ОШИБКЕ И НЕ ЗАПИСЫВАЕТ БЛОКИ 0 И 1. ТАКИМ ОБРАЗОМ МОЖНО
СДЕЛАТЬ ПРОВЕРКУ ПОСЛЕ ИЗМЕНЕНИЯ КОДОВ В БЛОКЕ 1.
ДОБАВИВ ПОДПРОГРАММЫ ДЛЯ КАЖДОГО ПАРАМЕТРА В ДРАЙВЕРЕ,
МОЖНО ИСПОЛЬЗОВАТЬ СЛЕДУЮЩУЮ СТРОКУ КОДА, ЧТОБЫ УБЕДИТЬСЯ,
ЧТО ГРАНИЦЫ РАЗМЕРА НЕ НАРУШЕНЫ:
.IIF GT,<.1000>, .ERROR .-1000 ;КОД SET СЛИШКОМ ВЕЛИК!
ЭТА СЕКЦИЯ ЗАВЕРШАЕТСЯ ДИРЕКТИВОЙ .ASECT, ПОСЛЕ КОТОРОЙ
НЕОБХОДИМО УСТАНОВИТЬ СЧЕТЧИК АДРЕСОВ У 1000. ЗАТЕМ МОЖНО
ПРОДОЛЖАТЬ ОБРАБОТКУ ОСТАЛЬНОГО КОДА ДРАЙВЕРА, НАЧИНАЮЩЕГОСЯ
С ЗАПРОСА .DRBEG, КОТОРЫЙ УСТАНАВЛИВАЕТ ЗАГОЛОВОК ДРАЙВЕРА.
3.3.5. ПРИМЕРЫ ПАРАМЕТРОВ SET
СЛЕДУЮЩИЕ ДАЛЕЕ ПРИМЕРЫ ВЗЯТЫ ИЗ ДРАЙВЕРА
ПОСТРОЧНО-ПЕЧАТАЮЩЕГО УСТРОЙСТВА И ДЕМОНСТРИРУЮТ ПАРАМЕТРЫ
SET, ОПИСАННЫЕ РАНЕЕ:
SET LP WIDTH=80
SET LP CR
SET LP NOCR
СНАЧАЛА ДРАЙВЕР ВЫЗЫВАЕТ ЗАПРОС .DRSET ДЛЯ УСТАНОВКИ
ТАБЛИЦЫ ПАРАМЕТРОВ ДЛЯ ДВУХ ПАРАМЕТРОВ: WIDTH И CR.
ПЕРВЫЙ ВЫЗОВ ПОКАЗЫВАЕТ, ЧТО УСТАНОВЛЕН ПАРАМЕТР WIDTH
ПОСТРОЧНО-ПЕЧАТАЮЩЕГО УСТРОЙСТВА, ЧТО ДЕСЯТИЧНОЕ 30 - ЭТО
ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ, ЧТО O.WIDTH - ЭТО ИМЯ ПОДПРОГРАММЫ,
КОТОРАЯ ИЗМЕНЯЕТ КОД ЭТОГО ПАРАМЕТРА, И ЧТО WIDTH - ЦИФРОВОЙ
АРГУМЕНТ:
.DRSET WIDTH,30.,O.WIDTH,NUM
СЛЕДУЮЩИЙ ВЫЗОВ ПОКАЗЫВАЕТ, ЧТО УСТАНОВЛЕН ПАРАМЕТР CR
ПОСТРОЧНО-ПЕЧАТАЮЩЕГО УСТРОЙСТВА, ЧТО "NOP" ДОЛЖЕН
ПЕРЕХОДИТЬ К ПОДПРОГРАММЕ, ЧТО O.CR - ЭТО ИМЯ ПОДПРОГРАММЫ,
КОТОРАЯ ИЗМЕНЯЕТ КОД ЭТОГО ПАРАМЕТРА, И ЧТО ЭТОТ ПАРАМЕТР CR
МОЖЕТ ИСПОЛЬЗОВАТЬСЯ С ПРИСТАВКОЙ NO:
.DRSET CR,NOP,O.CR,NO
ЭТИ ДВА ВЫЗОВА ГЕНЕРИРУЮТ СЛЕДУЮЩУЮ ТАБЛИЦУ:
.ASECT
.=400
.WORD 30. ;МИНИМАЛЬНОЕ ЗНАЧЕНИЕ WIDTH
.RAD50 \WIDTH \ ;ИМЯ ПАРАМЕТРА
.BYTE <O.WIDTH-400>/2
.BYTE 100
NOP ;НЕВЫПОЛНЯЕМАЯ КОМАНДА
.RAD50 \CR \ ;ИМЯ ПАРАМЕТРА
.BYTE <O.CR-400>/2
.BYTE 200
.WORD 0 ;КОНЕЦ ТАБЛИЦЫ
ПОДПРОГРАММЫ ДЛЯ ОБРАБОТКИ ЭТИХ ПАРАМЕТРОВ СЛЕДУЮТ
СРАЗУ ЖЕ ЗА ТАБЛИЦЕЙ.
ПРИМЕР:
O.WIDTH:MOV R0,COLCNT ;ПЕРЕМЕЩАЕТ ЗНАЧЕНИЕ
;ОТ ПОЛЬЗОВАТЕЛЯ
MOV R0,RSTC+2 ;В ДВЕ ПОСТОЯННЫЕ ЯЧЕЙКИ
CMP R0,R3 ;СРАВНИВАЕТ НОВОЕ ЗНАЧЕНИЕ
;С МИНИМАЛЬНЫМ ЗНАЧЕНИЕМ
;WIDTH, 30
RTS PC ;ВОЗВРАТ, С-РАЗРЯД
;УСТАНОВЛЕН НА ОШИБКУ
В ЭТОМ ПРИМЕРЕ ПОКАЗАНА ПОДПРОГРАММА ИЗМЕНЕНИЯ
ПАРАМЕТРА WIDTH. КОМАНДЫ В ПОДПРОГРАММЕ O.WIDTH ИЗМЕНЯЮТ
ДАННЫЕ В ДВУХ ЯЧЕЙКАХ БЛОКА 1 ДРАЙВЕРА.
ПРИМЕР:
O.CR: MOV (PC)+,R3 ;ТОЧКА ВХОДА ДЛЯ "CR";
;ПЕРЕМЕЩАЕТ АДРЕС СЛЕДУЮЩЕЙ
;СТРОКИ В R3
BEQ RSTC-CROPT+. ;НОВАЯ КОМАНДА
MOV R3,CROPT ;ТОЧКА ВХОДА ДЛЯ "NOCR"
;(O.CR+4);
;ПЕРЕМЕЩАЕТ ИЛИ "NOP", ИЛИ
;ПРЕДЫДУЩУЮ СТРОКУ В CROPT
RTS PC ;ВОЗВРАТ
В ЭТОМ ПРИМЕРЕ ПРИВЕДЕНА ПОДПРОГРАММА O.CR, КОТОРАЯ
ИМЕЕТ ДВЕ ТОЧКИ ВХОДА: ДЛЯ ПАРАМЕТРА "CR" ПОДПРОГРАММА
ВВОДИТСЯ У O.CR, ДЛЯ ПАРАМЕТРА "NOCR" - У O.CR+4. ВАЖНО,
ЧТО:
1. ПОДПРОГРАММЕ УДАЕТСЯ ЗАМЕНИТЬ ОДНУ ИЗ ДВУХ КОМАНД,
РАСПОЛОЖЕННЫХ В БЛОКЕ 1;
2. КОМАНДА NOP ПЕРЕМЕЩАЕТСЯ В CROPT, ЕСЛИ ВЫБРАН ПАРАМЕТР
"NOCR";
3. КОМАНДА BEQ RSTC-CROPT+. ПЕРЕМЕЩАЕТСЯ В CROPT, ЕСЛИ
ВЫБРАН "CR";
4. ВО ВРЕМЯ ВЫПОЛНЕНИЯ ПОДПРОГРАММ ПРИ ОБРАБОТКЕ ПАРАМЕТРОВ
SET РЕГИСТРЫ R4 И R5 НЕДОСТУПНЫ ДЛЯ ИСПОЛЬЗОВАНИЯ.
КОНСТРУКЦИЯ КОМАНДЫ BEQ НЕОБХОДИМА, ПОТОМУ ЧТО ПЕРЕХОД
БУДЕТ ТРАНСЛИРОВАТЬСЯ В ЯЧЕЙКУ, ОТЛИЧНУЮ ОТ ТОЙ, ИЗ КОТОРОЙ
ОН БУДЕТ ВЫПОЛНЕН. ВО ВСЕХ ПОДПРОГРАММАХ КОМАНДА ПЕРЕХОДА
ДОЛЖНА ИСПОЛЬЗОВАТЬ СЛЕДУЮЩУЮ КОНСТРУКЦИЮ ДЛЯ ГЕНЕРАЦИИ
ПРАВИЛЬНОГО АДРЕСА:
BR A-B+.
ГДЕ A - МЕСТО НАЗНАЧЕНИЯ КОМАНДЫ ПЕРЕХОДА;
В - АДРЕС КОМАНДЫ ПЕРЕХОДА;
. - ТЕКУЩЕЕ ЗНАЧЕНИЕ СЧЕТЧИКА ЯЧЕЕК.
ОБЫЧНО ТОЛЬКО ПОДПРОГРАММЫ ДЛЯ ПАРАМЕТРОВ, ДОПУСКАЮЩИХ
ПРЕФИКС NO, ИСПОЛЬЗУЮТ ЭТИ КОМАНДЫ ПЕРЕХОДА.
И, НАКОНЕЦ, ПРИВЕДЕН КОД СЕКЦИИ ОБРАБОТКИ ПРЕРЫВАНИЙ
ДРАЙВЕРА, КОТОРЫЙ ИЗМЕНЯЕТСЯ ВЫШЕПРИВЕДЕННЫМИ
ПОДПРОГРАММАМИ. КОД ДЛЯ ИЗМЕНЕНИЯ ДОЛЖЕН БЫТЬ РАСПОЛОЖЕН В
БЛОКЕ 1 ДРАЙВЕРА, В ПЕРВЫХ 256-ТИ СЛОВАХ.
ПРИМЕР:
COLCNT: .WORD COLSIZ ;ПЕЧАТЬ ОСТАВШИХСЯ
. ;СИМВОЛОВ СТРОКИ
. ;
CHRTST: CMPB R5,#HT ;ЭТО СИМВОЛ ТАБУЛЯЦИИ?
BEQ TABSET ;ДА, СБРОСИТЬ ТАБУЛЯЦИЮ
CMPB R5,#LF ;ЭТО ПЕРЕВОД СТРОКИ?
BEQ RSTC ;ДА, ВОССТАНОВИТЬ СЧЕТЧИК
;КОЛОНОК
CMPB R5,#CR ;ЭТО ВОЗВРАТ КАРЕТКИ?
CROPT: NOP ;"NOP", ЕСЛИ НЕТ;
;ИНАЧЕ "BEQ RSTC-CROPT+."
;ПОСРЕДСТВОМ ПОДПРОГРАММЫ
;SET В БЛОКЕ 0 (ЕСЛИ
;ПАРАМЕТР "CR")
CMPB R5,#FF ;ЭТО ПЕРЕВОД ФОРМАТА?
BNE IGNORE ;НЕТ, ЭТО НЕ ПЕЧАТЬ
RSTC: MOV #COLSIZ,COLCNT ;ПЕРЕУСТАНОВКА СЧЕТЧИКА
;КОЛОНОК
ИЗ ЭТОГО ПРИМЕРА ВИДНО, КАК ПОДПРОГРАММЫ ИЗ БЛОКА 0
МОГУТ ИЗМЕНЯТЬ ДАННЫЕ И КОМАНДЫ В БЛОКЕ 1 ДРАЙВЕРА.
3.4. КАК ПРОВЕРИТЬ И ОТЛАДИТЬ ДРАЙВЕР УСТРОЙСТВА
КАК ТОЛЬКО НОВЫЙ ДРАЙВЕР БУДЕТ ОТТРАНСЛИРОВАН,
ОТРЕДАКТИРОВАН И ВКЛЮЧЕН В СИСТЕМУ (УСТАНОВЛЕН), МОЖНО
НАЧИНАТЬ ЕГО ПРОВЕРКУ. ВО ВРЕМЯ ОТЛАДКИ НЕОБХОДИМО НЕ
ЗАБЫВАТЬ О ТОМ, ЧТО КАЖДЫЙ РАЗ НЕОБХОДИМО УСТРАНЯТЬ СТАРЫЙ
ДРАЙВЕР И УСТАНАВЛИВАТЬ НОВЫЙ ПОСЛЕ СОЗДАНИЯ ЕГО НОВОЙ
ВЕРСИИ DD(X).SYS.
ПРОВЕРКА ДРАЙВЕРА ЗАКЛЮЧАЕТСЯ В СЛЕДУЮЩИХ ТРЕХ СТАДИЯХ.
1. ИСПОЛЬЗОВАНИЕ ODT ДЛЯ НАБЛЮДЕНИЯ ЗА ДРАЙВЕРАМИ В ПРОЦЕССЕ
ПЕРЕДАЧИ ИМИ ДАННЫХ (СМ. П.П.3.4.1 И 3.4.2).
2. ПРОВЕРКА ДРАЙВЕРА КОМАНДАМИ КЛАВИАТУРНОГО МОНИТОРА,
ПРОГРАММАМИ РАБОТЫ С ФАЙЛАМИ И ПРОГРАММАМИ ФОРТРАН ИЛИ
БЭЙСИК. НАПРИМЕР, КОМАНДУ COPY (СМ. [2]) МОЖНО
ИСПОЛЬЗОВАТЬ ДЛЯ КОПИРОВАНИЯ ДАННЫХ НА ИЛИ С УСТРОЙСТВА
ИЛИ ИСПОЛЬЗОВАТЬ ДЛЯ КОПИРОВАНИЯ PIP (СМ. [7]). ХОРОШО
ИСПОЛЬЗОВАТЬ ДРАЙВЕР С ОПЕРАТОРАМИ BASIC INPUT ИЛИ PRINT.
ИЛИ С ОПЕРАТОРАМИ FORTRAN READ ИЛИ WRITE. ЕСЛИ ДРАЙВЕР
УСТАНАВЛИВАЕТ РАЗРЯД В СЛОВЕ СОСТОЯНИЯ УСТРОЙСТВА,
КОТОРЫЙ ПОКАЗЫВАЕТ, ЧТО ДРАЙВЕР ПРЕДНАЗНАЧЕН ДЛЯ
УСТРОЙСТВА СИСТЕМЫ ФОДОС-2 СПРАВОЧНОЙ СТРУКТУРЫ, DUP
БУДЕТ РАБОТАТЬ ПРАВИЛЬНО В УСТРОЙСТВЕ, БЕЗ ДАЛЬНЕЙШИХ
ИЗМЕНЕНИЙ. Т.Е., МОЖНО ИСПОЛЬЗОВАТЬ DUP ДЛЯ
ИНИЦИАЛИЗАЦИИ УСТРОЙСТВА (ПО ПЕРЕКЛЮЧАТЕЛЮ /Z) И
ОБ'ЕДИНЕНИЯ НЕИСПОЛЬЗУЕМОЙ ОБЛАСТИ (ПО ПЕРЕКЛЮЧАТЕЛЮ /S).
ПРОГРАММЕ RESORC НЕ ТРЕБУЕТСЯ ИЗМЕНЕНИЯ ДЛЯ ПРИЗНАНИЯ
НОВОГО УСТРОЙСТВА И ВКЛЮЧЕНИЯ ЕГО В СООБЩЕНИЕ SHOW
DEVICES.
3. ДАТЬ ДРАЙВЕРУ РАСШИРЕННУЮ РАЗРАБОТКУ С ПРИКЛАДНОЙ
ПРОГРАММОЙ, КОТОРАЯ ИСПОЛЬЗУЕТ РЕЖИМ ОЖИДАНИЯ
ВВОДА-ВЫВОДА, АСИНХРОННЫЙ ВВОД-ВЫВОД И ПОДПРОГРАММУ
ЗАВЕРШЕНИЯ.
КОГДА ДРАЙВЕР ПРОЙДЕТ ВСЮ ПРОВЕРКУ УСПЕШНО, МОЖНО
ИСПОЛЬЗОВАТЬ ЕГО КАК ЧАСТЬ СИСТЕМЫ ФОДОС-2.
3.4.1. ИСПОЛЬЗОВАНИЕ ODT ДЛЯ ПРОВЕРКИ ДРАЙВЕРА
ЛУЧШИЙ СПОСОБ ИСПОЛЬЗОВАНИЯ ODT ДЛЯ ПРОВЕРКИ ДРАЙВЕРА -
ЭТО ВЫПОЛНЕНИЕ ODT КАК ОСНОВНОГО ЗАДАНИЯ. ЕСЛИ ИСПОЛЬЗУЕТСЯ
МОНИТОР SJ, ТО ИМЕЕТ СМЫСЛ ПЕРЕКЛЮЧИТЬ ЕГО НА FB НА ВРЕМЯ
ОТЛАДКИ. ВО ВРЕМЯ ОТЛАДКИ РЕКОМЕНДУЕТСЯ БЫТЬ ОСНОВНЫМ
ПОЛЬЗОВАТЕЛЕМ.
НЕОБХОДИМО ЗАГРУЗИТЬ СИСТЕМУ С ПОМОЩЬЮ АППАРАТНОГО
ЗАГРУЗЧИКА, НЕ НАЧИНАЯ ВЫПОЛНЕНИЙ СИСТЕМНЫХ ЗАДАНИЙ И
ЗАГРУЗКИ ДРАЙВЕРОВ.
НИЖЕ ПРИВЕДЕНА КОМАНДА, ПО КОТОРОЙ ODT СВЯЗЫВАЕТСЯ С
ОСНОВНЫМ ЗАДАНИЕМ:
LINK/MAP/FOREGROUND ODT
ЗАТЕМ НЕОБХОДИМО ЗАГРУЗИТЬ ДРАЙВЕР УСТРОЙСТВА, КОТОРЫЙ
НЕОБХОДИМО ОТЛАДИТЬ:
LOAD DD[X]
ТЕПЕРЬ НЕОБХОДИМО ВЫПОЛНИТЬ КОМАНДУ SHOW D. ЗАПОМНИМ
АДРЕС, ОПРЕДЕЛЕННЫЙ ДЛЯ ДРАЙВЕРА УСТРОЙСТВА, НАПРИМЕР,
131634. ВЫЧИТАЕМ 6 (ВОСЬМЕРИЧНОЕ) И ПОЛУЧАЕМ БАЗУ АДРЕСА
ДРАЙВЕРА:
131634
- 6
------
131626
ЗАПУСКАЕТСЯ ODT КАК ОСНОВНОЕ ЗАДАНИЕ:
FRUN ODT
ODT V01.04
*
ЗАСЫЛАЕTСЯ В РЕГИСТР СМЕЩЕНИЯ 0 ЗНАЧЕНИЕ, ВЫЧИСЛЕННОЕ
ИЗ АДРЕСА ПО КОМАНДЕ SHOW D:
131626;0R
МОЖНО ПЕРЕМЕЩАТЬСЯ ПО ДРАЙВЕРУ В ПАМЯТИ ПО МЕРЕ
СЛЕДОВАНИЯ ИНСТРУКЦИЙ ЛИСТИНГА ТРАНСЛЯЦИИ. ПЯТЬ ПЕРВЫХ СЛОВ
ЯВЛЯЮТСЯ ЗАГОЛОВКОМ; ПЕРВАЯ ИСПОЛНЯЕМАЯ КОМАНДА ЯВЛЯЕТСЯ
ШЕСТЫМ СЛОВОМ. ПОЭТОМУ ЛУЧШЕ ВСЕГО УСТАНОВИТЬ ПЕРВУЮ ТОЧКУ
РАЗРЫВА У ШЕСТОГО СЛОВА:
0,12;0B
ДРУГИЕ ТОЧКИ РАЗРЫВА МОЖНО ПОСТАВИТЬ В ТЕХ ЧАСТЯХ
ДРАЙВЕРА, КОТОРЫЕ НЕОБХОДИМО ПРОВЕРИТЬ ВО ВРЕМЯ ОТЛАДКИ.
ДРУГИМ КРИТИЧЕСКИМ МЕСТОМ ЯВЛЯЕТСЯ ТОЧКА ВХОДА ПРЕРЫВАНИЯ.
СООТВЕТСТВУЮЩУЮ ЯЧЕЙКУ МОЖНО НАЙТИ ПРОВЕРКОЙ ЛИСТИНГА
ДРАЙВЕРА (ТОЧКА ВХОДА ПРЕРЫВАНИЯ НАЗЫВАЕТСЯ DDINT:).
ПОСЛЕ УСТАНОВКИ ТОЧЕК РАЗРЫВА МОЖНО ВЫХОДИТЬ ИЗ ODT:
0;G
ТЕПЕРЬ МОЖНО ПЫТАТЬСЯ ИСПОЛЬЗОВАТЬ ДРАЙВЕР. НАПРИМЕР,
ИСПОЛЬЗОВАТЬ DUP ДЛЯ ИНИЦИАЛИЗАЦИИ УСТРОЙСТВА ИЛИ PIP ДЛЯ
КОПИРОВАНИЯ НА УСТРОЙСТВО ДАННЫХ. ИЛИ ВЫПОЛНИТЬ
ТЕСТ-ПРОГРАММУ, ПРЕДНАЗНАЧЕННУЮ СПЕЦИАЛЬНО ДЛЯ ЭТОЙ ЦЕЛИ.
КОГДА ВЫПОЛНЕНИЕ ДОСТИГАЕТ ПЕРВОЙ ТОЧКИ РАЗРЫВА, ODT
ПРИНИМАЕТ УПРАВЛЕНИЕ. ODT ИСПОЛЬЗУЕТСЯ КАК ОБЫЧНО ДЛЯ
ПРОВЕРКИ ЯЧЕЕК И ИХ ЗНАЧЕНИЙ ИЛИ ИЗМЕНЕНИЯ КОМАНД.
ПРИОРИТЕТ ODT ПО УМОЛЧАНИЮ РАВЕН 7; ЭТО ПРЕДОТВРАЩАЕТ ОТ
ВМЕШАТЕЛЬСТВА ДРУГИХ ПРЕРЫВАНИЙ ВО ВРЕМЯ СЕАНСА ОТЛАДКИ.
ЕСЛИ РАБОТА ДРАЙВЕРА УСТРАИВАЕТ, ТО НЕОБХОДИМО
УСТРАНИТЬ ИЗ НЕГО ТОЧКИ РАЗРЫВА И ПРИСТУПИТЬ К ДАЛЬНЕЙШЕМУ
ВЫПОЛНЕНИЮ ПОСРЕДСТВОМ ДРАЙВЕРА:
;B
;P
НЕДОПУСТИМА РАЗГРУЗКА ОСНОВНОГО ЗАДАНИЯ (ODT), ЕСЛИ
ТОЧКИ РАЗРЫВА ЕЩЕ УСТАНОВЛЕНЫ В ДРАЙВЕРЕ.
3.4.2. ИСПОЛЬЗОВАНИЕ ODT В ХМ
НЕОБХОДИМО ТЩАТЕЛЬНО ВЫБРАТЬ МЕСТО ДЛЯ ODT В ПАМЯТИ.
МОЖНО СВЯЗАТЬ ЕГО С ПРИКЛАДНОЙ ПРОГРАММОЙ ИЛИ ТАК, ЧТОБЫ ОН
РАЗМЕЩАЛСЯ В ПАМЯТИ ТАМ, ГДЕ ОН НЕ БУДЕТ РАЗРУШЕН. ЕСЛИ
ТОЧКА РАЗРЫВА ДОЛЖНА БЫТЬ ВЫБРАНА ВО ВНУТРЕННЕМ РЕЖИМЕ, ODT
НЕ ДОЛЖЕН РАЗМЕЩАТЬСЯ В ОБЛАСТИ РАС1 (ЯЧЕЙКИ С 20000 ПО
37776). САМОЕ БЕЗОПАСНОЕ МЕСТО ДЛЯ ODT - ЭТО СЕКЦИЯ
ОСНОВНОГО ЗАДАНИЯ (СМ. П.3.4.1).
ПРИ ОТЛАДКЕ С ИСПОЛЬЗОВАНИЕМ ODT СТРАНИЦА ВВОДА-ВЫВОДА
ДОЛЖНА БЫТЬ ОТОБРАЖЕНА.
УСТАНОВКА ТОЧЕК РАЗРЫВА ТРЕБУЕТ ОСТОРОЖНОСТИ. ПОСЛЕ
ВВЕДЕНИЯ ODT НЕОБХОДИМО ПРОВЕРИТЬ ВЕКТОР ПРЕРЫВАНИЯ ПО ТОЧКЕ
РАЗРЫВА (BPT) В ЯЧЕЙКАХ 14 И 16 НИЖНЕЙ ПАМЯТИ. ПОСЛЕ
УСТАНОВКИ ТОЧЕК РАЗРЫВА НЕОБХОДИМО ВРУЧНУЮ УСТАНОВИТЬ
РАЗРЯДЫ ТЕКУЩЕГО РЕЖИМА, РАЗРЯДЫ 14 И 15, PS В ЯЧЕЙКЕ 16.
ЗАТЕМ ОЖИДАЕТСЯ ТОЧКА РАЗРЫВА. ЗНАЧЕНИЕ 11 ПРЕДНАЗНАЧЕНО
ДЛЯ РЕЖИМА ПОЛЬЗОВАТЕЛЯ, 00 - ДЛЯ СИСТЕМНОГО РЕЖИМА.
ПРОГРАММЫ РАБОТЫ С ФАЙЛАМИ СИСТЕМЫ ФОДОС-2, ТАКИЕ КАК PIP И
DUP, ВЫПОЛНЯЮТСЯ В РЕЖИМЕ ПОЛЬЗОВАТЕЛЯ И ПРЕДПОЛАГАЮТ, ЧТО
РАЗРЯДЫ РЕЖИМА БУДУТ УСТАНОВЛЕНЫ 11.
ПОСЛЕ УСТАНОВКИ ТОЧЕК РАЗРЫВА НЕОБХОДИМО НАПЕЧАТАТЬ 0;G
ДЛЯ ВЫХОДА ИЗ ODT. ЭТО ЗАСТАВЛЯЕТ ODT ВЫПОЛНИТЬ ЗАПРОС
.EXIT, КОТОРЫЙ РАЗРУШАЕТ ВЕКТОР BPT. ПОЭТОМУ ПОСЛЕ ВЫХОДА
ИЗ ODT НЕОБХОДИМО ВРУЧНУЮ РЕКОНСТРУИРОВАТЬ СОДЕРЖИМОЕ
ВЕКТОРА ПОСРЕДСТВОМ ИСПОЛЬЗОВАНИЯ КОМАНДЫ DEPOSIT СЛЕДУЮЩИМ
ОБРАЗОМ:
D 14=(ИСТИННОЕ СОДЕРЖИМОЕ ЯЧЕЙКИ 14),(ИСТИННОЕ СОДЕРЖИМОЕ
ЯЧЕЙКИ 16)
НЕОБХОДИМО, ЧТОБЫ ДРУГИЕ ЗАДАНИЯ В ЭТО ВРЕМЯ НЕ
ВЫПОЛНЯЛИСЬ, ТАК КАК ПЕРЕКЛЮЧЕНИЕ КОНТЕКСТА ВЫЗОВЕТ ВЫХОД ИЗ
СТРОЯ ЭТОГО МЕТОДА.
4. ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ
ЭТОТ РАЗДЕЛ ОПИСЫВАЕТ СПОСОБЫ, С ПОМОЩЬЮ КОТОРЫХ
ПРОГРАММА МОЖЕТ ПЕРЕДАВАТЬ ДАННЫЕ МЕЖДУ ПАМЯТЬЮ И
ПЕРИФЕРИЙНЫМИ УСТРОЙСТВАМИ. СНАЧАЛА ИЗЛАГАЕТСЯ
ПРОГРАММИРУЕМЫЙ ВВОД-ВЫВОД БЕЗ ПРЕРЫВАНИЯ, ЗАТЕМ ВВОДЯТСЯ
КОНЦЕПЦИИ ДЛЯ ИСПОЛЬЗОВАНИЯ ПРЕРЫВАНИЙ ДЛЯ ОБСЛУЖИВАНИЯ
УСТРОЙСТВ ВВОДА-ВЫВОДА ПОСРЕДСТВОМ СРАВНЕНИЯ ПРЕИМУЩЕСТВ И
НЕДОСТАТКОВ ПОДПРОГРАММ ВНУТРЕННЕЙ ОБРАБОТКИ ПРЕРЫВАНИЙ И
ДРАЙВЕРОВ УСТРОЙСТВ. ПОСЛЕ ЭТИХ ОБЩИХ УКАЗАНИЙ ОПИСЫВАЕТСЯ
СТРУКТУРА ПОДПРОГРАММ ОБРАБОТКИ ПРЕРЫВАНИЙ И ПОКАЗЫВАЕТСЯ В
ДЕТАЛЯХ, КАК ОРГАНИЗОВАТЬ И ПИСАТЬ ИХ. ПРИМЕР СХЕМЫ
ОСНОВНОЙ ПРОГРАММЫ, КОТОРАЯ СОДЕРЖИТ ПОДПРОГРАММУ ОБРАБОТКИ
ПРЕРЫВАНИЙ, ЗАКАНЧИВАЕТ ОБСУЖДЕНИЕ. В КОНЦЕ РАЗДЕЛА -
ПРИМЕНЕНИЕ ПОДПРОГРАММ ОБРАБОТКИ ПРЕРЫВАНИЙ В XM-СИСТЕМЕ.
4.1. ПРОГРАММИРУЕМЫЙ ВВОД-ВЫВОД
ПЕРВЫМ СПОСОБОМ ПЕРЕДАЧИ ДАННЫХ МЕЖДУ ПАМЯТЬЮ И
ПЕРИФЕРИЙНЫМ УСТРОЙСТВОМ ЯВЛЯЕТСЯ ПРОГРАММИРУЕМЫЙ
ВВОД-ВЫВОД. В СООТВЕТСТВИИ С ЭТИМ СПОСОБОМ ПРОГРАММА
ОПЕРИРУЕТ С УСТРОЙСТВАМИ, ЗАПРЕЩАЯ ПРЕРЫВАНИЯ И ИСПОЛЬЗУЯ
ПРИЗНАКИ ДЛЯ КООРДИНАЦИИ ПЕРЕДАЧИ ДАННЫХ. ПРОГРАММА
ПРОВЕРЯЕТ РАЗРЯД ГОТОВНОСТИ В РЕГИСТРЕ СОСТОЯНИЯ
СООТВЕТСТВУЮЩЕГО УСТРОЙСТВА, ПОСЫЛАЕТ ДАННЫЕ В
СООТВЕТСТВУЮЩИЙ МОМЕНТ И, ЗАТЕМ, ОЖИДАЕТ ДРУГОЙ СИГНАЛ
ГОТОВНОСТИ ИЛИ ДЕЛАЕТ ДРУГУЮ ОБРАБОТКУ И, ВРЕМЯ ОТ ВРЕМЕНИ,
ПОДСЧЕТ УСТРОЙСТВ. ПРОГРАММИРУЕМЫЙ ВВОД-ВЫВОД ЗАВИСИТ ОТ
КОНКРЕТНОГО УСТРОЙСТВА И НЕ ДОЛЖЕН ИСПОЛЬЗОВАТЬ ВОЗМОЖНОСТИ
ОПЕРАЦИОННОЙ СИСТЕМЫ, ПРЕДНАЗНАЧЕННЫЕ ДЛЯ ПРОЦЕССОВ
ВВОДА-ВЫВОДА. КРОМЕ ТОГО, ОН ЗАНИМАЕТ РЕСУРСЫ СИСТЕМЫ ДО
ОКОНЧАНИЯ ВВОДА-ВЫВОДА.
ОДНАКО ПРОГРАММИРУЕМЫЙ ВВОД-ВЫВОД В ТО ЖЕ ВРЕМЯ
ЯВЛЯЕТСЯ ЛУЧШИМ ПРАКТИЧЕСКИ МЕТОДОМ. НАПРИМЕР, РЕЗИДЕНТНЫЙ
МОНИТОР ИСПОЛЬЗУЕТ ПРОГРАММИРУЕМЫЙ ВВОД-ВЫВОД ДЛЯ ПЕЧАТИ
СВОЕГО СООБЩЕНИЯ ОБ ОШИБКЕ: ?MON-F-SYSTEM-HALT. СНАЧАЛА ОН
ВЫПОЛНЯЕТ ОПЕРАЦИЮ RESET ДЛЯ ОСТАНОВКИ ВСЕХ АКТИВНЫХ
ПРОЦЕССОВ ВВОДА-ВЫВОДА. ПОТОМ ОН ЖДЕТ В СЖАТОМ ЦИКЛЕ ДЛЯ
СИСТЕМНОГО ТЕРМИНАЛА, ЧТОБЫ НАПЕЧАТЧТЬ СООБЩЕНИЕ ОБ ОШИБКЕ
ПО ОДНОМУ СИМВОЛУ ЗА РАЗ. ОЧЕВИДНО, В ТАКОЙ СИТУАЦИИ, ГДЕ
МОНИТОР МОЖЕТ БЫТЬ ИСПОРЧЕН, НИ ОДНО ДРУГОЕ ЗАДАНИЕ ИЛИ
ПЕРЕДАЧА ДАННЫХ НЕ МОГУТ ВЫПОЛНЯТЬСЯ, И СИСТЕМНЫЙ ТЕРМИНАЛ
РАЗРЕШЕН ТОЛЬКО КАК УСТРОЙСТВО ВЫВОДА. ПОДПРОГРАММА
МОНИТОРА .PRINT ТАКЖЕ МОЖЕТ БЫТЬ ИСПОРЧЕНА И НЕ МОЖЕТ БЫТЬ
ИСПОЛЬЗОВАНА. УЧИТЫВАЯ ЭТИ ТРЕБОВАНИЯ, ПРОГРАММИРУЕМЫЙ
ВВОД-ВЫВОД ЯВЛЯЕТСЯ ЛУЧШИМ СПОСОБОМ ДЛЯ ПЕЧАТИ СООБЩЕНИЯ ОБ
ОШИБКЕ.
В ПРИКЛАДНЫХ ПРОГРАММАХ МОЖНО ИСПОЛЬЗОВАТЬ
ПРОГРАММИРУЕМЫЙ ВВОД-ВЫВОД ДЛЯ КРИТИЧЕСКИХ ПО ВРЕМЕНИ
УСТРОЙСТВ, КОГДА ПРОГРАММА ДОЛЖНА РЕАГИРОВАТЬ ТАК БЫСТРО,
КАК ТОЛЬКО СИМ