УКНЦ ФОДОС-2 программирование периферии

Материал из Emuverse
Версия от 17:21, 29 марта 2020; Nzeemin (обсуждение | вклад) (категория)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Данный материал защищён авторскими правами!

Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей.

                       ОПЕРАЦИОННАЯ СИСТЕМА ФОДОС-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 ТАКЖЕ МОЖЕТ БЫТЬ ИСПОРЧЕНА И НЕ МОЖЕТ БЫТЬ
ИСПОЛЬЗОВАНА. УЧИТЫВАЯ ЭТИ ТРЕБОВАНИЯ, ПРОГРАММИРУЕМЫЙ
ВВОД-ВЫВОД ЯВЛЯЕТСЯ ЛУЧШИМ СПОСОБОМ ДЛЯ ПЕЧАТИ СООБЩЕНИЯ ОБ
ОШИБКЕ.
     В ПРИКЛАДНЫХ ПРОГРАММАХ МОЖНО ИСПОЛЬЗОВАТЬ
ПРОГРАММИРУЕМЫЙ ВВОД-ВЫВОД ДЛЯ КРИТИЧЕСКИХ ПО ВРЕМЕНИ
УСТРОЙСТВ, КОГДА ПРОГРАММА ДОЛЖНА РЕАГИРОВАТЬ ТАК БЫСТРО,
КАК ТОЛЬКО СИМВОЛ БУДЕТ НАХОДИТЬСЯ В РЕГИСТРЕ.

     ПРИМЕР:

;
;R1 УКАЗЫВАЕТ ТЕКСТ СООБЩЕНИЯ.
;TTPS - СЛОВО В ПАМЯТИ, СОДЕРЖАЩЕЕ АДРЕС РЕГИСТРА СОСТОЯНИЯ
;ПЕЧАТАЮЩЕГО ТЕРМИНАЛА; ЕГО ПРИЗНАК ГОТОВНОСТИ УСТАНАВЛИВА-
;ЕТСЯ В ПОСЛЕДНЕМ ПО СЧЕТУ РАЗРЯДЕ МЛАДШЕГО БАЙТА (РАЗР.7).
;TTPB - СЛОВО В ПАМЯТИ, СОДЕРЖАЩЕЕ АДРЕС БУФЕРА ТЕРМИНАЛА.
;ПЕРЕСЫЛКА СИМВОЛОВ В БУФЕР ВОССТАНАВЛИВАЕТ ПРИЗНАК ЗАНЯ-
;ТОСТИ В РЕГИСТРЕ СОСТОЯНИЯ
;
5$: TSTB @TTPS ;ПРОВЕРИТЬ, TT - ИСПОЛЬЗУ-
                                ;ЕТСЯ?
        BPL 5$ ;ЕСЛИ ДА, ПРОВЕРИТЬ СНОВА
        MOVB (R1)+,@TTPB ;ЕСЛИ НЕТ, ПЕЧАТАТЬ СИМВОЛ
        BNE 5$ ;ПЕРЕХОД НАЗАД, ЕСЛИ ПЕЧА-
                                ;ТАТЬ ДАЛЬШЕ


     В ЭТОМ ПРИМЕРЕ ИЗ RMON ДЕМОНСТРИРУЕТСЯ ПРОГРАММИРУЕМЫЙ
ВВОД-ВЫВОД.
     ДРАЙВЕР УСТРОЙСТВА ГИБКИХ ДИСКОВ С ОДИНАРНОЙ ПЛОТНОСТЬЮ
ЗАПИСИ (В ДАЛЬНЕЙШЕМ ПРОСТО ГИБКИЕ ДИСКИ, ЕСЛИ НЕ ОГОВОРЕНА
ОСОБО ПЛОТНОСТЬ ЗАПИСИ), DX, ПРЕДУСМАТРИВАЕТ ДРУГОЙ ПРИМЕР
ПРОГРАММИРУЕМОГО ВВОДА-ВЫВОДА. ПРИ СЧИТЫВАНИИ ДАННЫХ С
ГИБКОГО ДИСКА ПО ОДНОМУ СЕКТОРУ ЗА РАЗ ДРАЙВЕР СНАЧАЛА
ТРЕБУЕТ СЧИТЫВАНИЯ ОДНОГО СЕКТОРА. УСТРОЙСТВО ГИБКИХ ДИСКОВ
ЗАВЕРШАЕТ ОПЕРАЦИЮ СЧИТЫВАНИЯ, РАЗМЕЩАЕТ ДАННЫЕ ВО
ВНУТРЕННЕМ БУФЕРЕ И ВЫХОДИТ К ПРЕРЫВАНИЮ. ДРАЙВЕР ЗАПРЕЩАЕТ
ПРЕРЫВАНИЯ И ИСПОЛЬЗУЕТ ПРОГРАММИРУЕМЫЙ ВВОД-ВЫВОД ДЛЯ
ПЕРЕДАЧИ ДАННЫХ ИЗ ВНУТРЕННЕГО БУФЕРА В ПАМЯТЬ. КОГДА
ВНУТРЕННИЙ БУФЕР СНОВА ГОТОВ ДЛЯ СЧИТЫВАНИЯ СЛЕДУЮЩЕГО
СЕКТОРА, ДРАЙВЕР РАЗРЕШАЕТ ПРЕРЫВАНИЕ СНОВА.

     ПРИМЕР:

;
;R4 УКАЗЫВАЕТ РЕГИСТР СОСТОЯНИЯ ГИБКОГО ДИСКА;
;R5 УКАЗЫВАЕТ ВНУТРЕННИЙ БУФЕР;
;R2 УКАЗЫВАЕТ БУФЕР ДАННЫХ В ПАМЯТИ.
;
TRBYT: TSTB @TTPS ;ОЖИДАЕТ ОКОНЧАНИЯ ПЕРЕДАЧИ
        BPL TRBYT ;ВЕТВЛЕНИЕ, ЕСЛИ ПЕРЕДАЧА НЕ
                                ;ЗАКОНЧЕНА
EFBUF: MOVB @R5,(R2)+ ;ПЕРЕДАЧА СИМВОЛА
        DEC @SP ;ПРОВЕРКА НА ОКОНЧАНИЕ СЧЕТ-
                                ;ЧИКА
        BGT TRBYT ;ДАЛЬНЕЙШАЯ ПЕРЕДАЧА

     4.2. ВВОД-ВЫВОД, ОБРАБАТЫВАЕМЫЙ ПО ПРЕРЫВАНИЯМ
     ХОТЯ ПРОГРАММИРУЕМЫЙ ВВОД-ВЫВОД В НЕКОТОРЫХ СЛУЧАЯХ
ЛУЧШЕ, ВООБЩЕ, ЛУЧШИМ СПОСОБОМ ОБРАБОТКИ УСТРОЙСТВ
ВВОДА-ВЫВОДА ЯВЛЯЕТСЯ ОБРАБОТКА ПРЕРЫВАНИЙ. В СООТВЕТСТВИИ
С ЭТИМ СПОСОБОМ ПРОГРАММА НАЧИНАЕТ ПЕРЕДАЧУ ВВОДА-ВЫВОДА, НЕ
ПРЕКРАЩАЯ ОБРАБОТКУ. КОГДА ПЕРЕДАЧА ЗАВЕРШАЕТСЯ, УСТРОЙСТВО
ВЫХОДИТ НА ПРЕРЫВАНИЕ. ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ
ОПРЕДЕЛЯЕТ, ЗАВЕРШЕНА ПЕРЕДАЧА ИЛИ НЕТ ИЛИ ПРОИЗОШЛА ОШИБКА,
И ОНА ВЫПОЛНЯЕТ СООТВЕТСТВУЮЩИЕ ФУНКЦИИ (ПРОДОЛЖАЕТ
ПЕРЕДАЧУ, ВОЗВРАЩАЕТСЯ В ПРОГРАММУ ИЛИ, ВОЗМОЖНО, ПОВТОРЯЕТ
ПЕРЕДАЧУ В СЛУЧАЕ ОШИБКИ). ПРЕИМУЩЕСТВОМ ИСПОЛЬЗОВАНИЯ
ПРЕРЫВАНИЙ ЯВЛЯЕТСЯ ВОЗМОЖНОСТЬ ВЫПОЛНЕНИЯ ДВУХ И БОЛЕЕ
КОНКУРИРУЮЩИХ ПРОЦЕССОВ, И РЕСУРСЫ СИСТЕМЫ НЕ
МОНОПОЛИЗИРУЮТСЯ.

     4.2.1. КАК РАБОТАЮТ ПРЕРЫВАНИЯ
     ПРЕРЫВАНИЯ - ВЫНУЖДЕННЫЕ ПЕРЕДАЧИ ВЫПОЛНЕНИЯ
ПРОГРАММЫ - ВОЗНИКАЮТ В СЛУЧАЕ ТАКИХ ВНЕШНИХ ПРИЧИН, КАК
ЗАВЕРШЕНИЕ ВВОДА-ВЫВОДА. СОСТОЯНИЕ ПРОЦЕССОРА ПЕРЕД
ПРЕРЫВАНИЕМ СОХРАНЯЕТСЯ В СТЕКЕ, ТАК ЧТО ОБРАБОТКА МОЖЕТ
ПРОДОЛЖАТЬСЯ СПОКОЙНО ПОСЛЕ ВОЗВРАЩЕНИЯ ИЗ ПРЕРЫВАНИЯ.
ПРОЦЕССОР СОХРАНЯЕТ СЛОВО СОСТОЯНИЯ ПРОЦЕССОРА (PS), КОТОРОЕ
СОДЕРЖИТ ТЕКУЩЕЕ СОСТОЯНИЕ МАШИНЫ, И СЧЕТЧИК КОМАНД (PC),
КОТОРЫЙ УКАЗЫВАЕТ АДРЕС ВОЗВРАТА.
     ЗАТЕМ ПРОЦЕССОР ЗАГРУЖАЕТ НОВОЕ СОДЕРЖИМОЕ PS И PC ИЗ
ДВУХ ПРЕДВАРИТЕЛЬНО НАЗНАЧЕННЫХ ЯЧЕЕК НИЖНЕЙ ПАМЯТИ,
НАЗЫВАЕМЫХ ВЕКТОРОМ ПРЕРЫВАНИЯ. ЭТИ СЛОВА СОДЕРЖАТ АДРЕС
ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЯ И НОВОЕ СЛОВО СОСТОЯНИЯ,
ПРОЦЕССОРА (PS), КОТОРОЕ УКАЗЫВАЕТ НОВЫЙ ПРИОРИТЕТ
ПРОЦЕССОРА. КОГДА ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЯ
ЗАВЕРШАЕТСЯ, ОНА ВЫПОЛНЯЕТ КОМАНДУ RTI, КОТОРАЯ
ВОССТАНАВЛИВАЕТ СТАРЫЕ PC И PS ИЗ СТЕКА, И ВОЗОБНОВЛЯЕТСЯ
ВЫПОЛНЕНИЕ В ПРЕРВАННОЙ ПРОГРАММЕ.

     4.2.2. ПРИОРИТЕТЫ УСТРОЙСТВ И ПРОЦЕССОРА
     ОБРАБОТКА ПРЕРЫВАНИЯ ТЕСНО СВЯЗАНА С ПРИОРИТЕТОМ
ПРОЦЕССОРА И УСТРОЙСТВ. РИС.2 ИЛЛЮСТРИРУЕТ СТРУКТУРУ
ПРИОРИТЕТОВ ФОДОС-2.

ПРИОРИТЕТ ПРОЦЕССОРА ПРИОРИТЕТ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
 
7 ----------------- ДРАЙВЕРЫ УСТРОЙСТВ
6 ----------------- И
5 ----------------- ПОДПРОГРАММА ОБРАБОТКИ
4 ----------------- ПРЕРЫВАНИЯ
 
 
      ------------ FORK ---------- FORK-УРОВЕНЬ
      !
бй      !
      ! ---- ОСНОВНАЯ ПОДПРОГРАММА
      ! ! ЗАВЕРШЕНИЯ
      ------------- FG -----------! 
      !                           !    ОСНОВНАЯ
      !                           ---- МАГИСТРАЛЬ
      ! 
      !                           ---- ФОНОВАЯ ПОДПРОГРАММА
      !                           !    ЗАВЕРШЕНИЯ
      ------------- BG -----------! 
      !                           !    ФОНОВАЯ 
      !                           ---- МАГИСТРАЛЬ
      ! 
      ! 
 0------- ОТСУТСТВИЕ ЗАДАНИЯ -------- ХОЛОСТОЙ ЦИКЛ МОНИТОРА
 
                         РИС.2 


     КАЖДОЕ УСТРОЙСТВО СИСТЕМЫ ИМЕЕТ НАЗНАЧЕННЫЙ ЕМУ
ПРИОРИТЕТ, И В ПЕРВУЮ ОЧЕРЕДЬ БУДЕТ ОБСЛУЖЕНО УСТРОЙСТВО С
БОЛЕЕ ВЫСОКИМ ПРИОРИТЕТОМ ПОСЛЕ ПРЕРЫВАНИЯ. КАССЕТНАЯ
ЛЕНТА, НАПРИМЕР, ИМЕЕТ ПРИОРИТЕТ 6, ДИСК,ОБЫЧНО, 5, ТЕРМИНАЛ
И ДРУГИЕ СИМВОЛЬНО-ОРИЕНТИРОВАННЫЕ УСТРОЙСТВА - 4. ЭТИ
ПРИОРИТЕТЫ ТОЧНО НАЗНАЧЕНЫ СИСТЕМОЙ И, ВООБЩЕ, РЕГУЛИРУЮТСЯ
ПОСРЕДСТВОМ ПЕРЕКЛЮЧАТЕЛЯ СМЕННЫХ ПРИОРИТЕТОВ В КАЖДОМ
ИНТЕРФЕЙСЕ УСТРОЙСТВ ВВОДА-ВЫВОДА. МОЖНО УПРАВЛЯТЬ ПОРЯДКОМ
УСТРОЙСТВ С ОДИНАКОВЫМ ПРИОРИТЕТОМ. ДЛЯ ЭТИХ УСТРОЙСТВ
ПЕРВОЕ ЗАНЯВШЕЕ ЦП (ЦЕНТРАЛЬНЫЙ ПРОЦЕССОР) ОБСЛУЖИВАЕТСЯ
ВПЕРЕД ДРУГИХ УСТРОЙСТВ, КОГДА ОДНОВРЕМЕННО ВОЗНИКАЮТ
ПРЕРЫВАНИЯ.
     ЦЕНТРАЛЬНЫЙ ПРОЦЕССОР (ЦП) ОПЕРИРУЕТ С ЛЮБЫМ ОДНИМ ИЗ
ВОСЬМИ УРОВНЕЙ ПРИОРИТЕТА, ОТ 0 ДО 7. (ЭВМ "ЭЛЕКТРОНИКА
60М": ИЛИ С 0, ИЛИ С 7.) КОГДА ЦП РАБОТАЕТ С ПРИОРИТЕТОМ 7,
НИ ОДНО УСТРОЙСТВО НЕ МОЖЕТ ЕГО ПРЕРВАТЬ. КОГДА ЦП
ОПЕРИРУЕТ С БОЛЕЕ НИЗКИМ ПРИОРИТЕТОМ, ПРИЧИНОЙ ПРЕРЫВАНИЯ
МОЖЕТ СТАТЬ ЛИШЬ УСТРОЙСТВО С БОЛЕЕ ВЫСОКИМ ПРИОРИТЕТОМ.
МОЖНО УСТАНАВЛИВАТЬ ПРИОРИТЕТЫ ПРОЦЕССОРА ВНУТРИ
ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЯ, ИЗМЕНЯЯ СЛОВО СОСТОЯНИЯ
ПРОЦЕССОРА. В СИСТЕМЕ ФОДОС-2 ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
ПРЕДУСМАТРИВАЕТ ЭТО, И МОЖНО НАПРЯМУЮ ИЗМЕНЯТЬ PS
САМОСТОЯТЕЛЬНО. ОНО ВКЛЮЧАЕТ ПРОГРАММНЫЕ ЗАПРОСЫ .MTPS И
.MFPS И ЗАПРОСЫ .INTEN И .FORK.
     СИСТЕМА ПРЕРЫВАНИЙ ПОЗВОЛЯЕТ ПРОЦЕССОРУ ПОСЛЕДОВАТЕЛЬНО
СРАВНИВАТЬ ЕГО СОБСТВЕННЫЙ ПРИОРИТЕТ С ПРИОРИТЕТОМ
ПРЕРЫВАЮЩЕГО УСТРОЙСТВА И ВЫЯВЛЯТЬ УСТРОЙСТВО С БОЛЕЕ
ВЫСОКИМ ПРИОРИТЕТОМ, ЧЕМ ПРИОРИТЕТ ПРОЦЕССОРА. ЭТА СИСТЕМА
МОЖЕТ БЫТЬ ВЛОЖЕННОЙ, Т.Е. ОБРАБОТКА ОДНОГО ПРЕРЫВАНИЯ
МОЖЕТ БЫТЬ ПРЕРВАНА ПРЕРЫВАНИЕМ С БОЛЕЕ ВЫСОКИМ ПРИОРИТЕТОМ.
ОБСЛУЖИВАНИЕ УСТРОЙСТВ С НИЗКИМ ПРИОРИТЕТОМ ПРОДОЛЖАЕТСЯ,
КОГДА ЗАКОНЧЕНО ОБСЛУЖИВАНИЕ УСТРОЙСТВ С БОЛЕЕ ВЫСОКИМ
ПРИОРИТЕТОМ.

     4.2.3. СЛОВО СОСТОЯНИЯ ПРОЦЕССОРА
     СЛОВО СОСТОЯНИЯ ПРОЦЕССОРА (PS) ЗАНИМАЕТ ВЕРХНИЙ АДРЕС
СТРАНИЦЫ ВВОДА-ВЫВОДА. (ИСКЛЮЧАЯ ПРОЦЕССОР ЭВМ "ЭЛЕКТРОНИКА
60М", ЕГО PS НЕ АДРЕСУЕТСЯ НА СТРАНИЦЕ ВВОДА-ВЫВОДА.
МОНИТОР ОБРАЩАЕТСЯ К PS, ИСПОЛЬЗУЯ КОМАНДЫ MTPS И MFPS.) ОНО
СОДЕРЖИТ ИНФОРМАЦИЮ О ТЕКУЩЕМ СОСТОЯНИИ МАШИНЫ. ЭТА
ИНФОРМАЦИЯ СОДЕРЖИТ ТЕКУЩИЙ ПРИОРИТЕТ ПРОЦЕССОРА, ТЕКУЩИЙ И
ПРЕДШЕСТВУЮЩИЙ ОПЕРАЦИОННЫЕ РЕЖИМЫ, КОДЫ УСЛОВИЙ,
ОПИСЫВАЮЩИХ РЕЗУЛЬТАТЫ ПОСЛЕДНЕЙ ДИРЕКТИВЫ И УКАЗАТЕЛЬ,
ВЫЗЫВАЮЩИЙ ПРЕРЫВАНИЕ ПОСЛЕ ВЫПОЛНЕНИЯ ДИРЕКТИВЫ
(ИСПОЛЬЗУЕТСЯ ДЛЯ ОТЛАДКИ ПРОГРАММ).
     РИС.3 ПОКАЗЫВАЕТ РАЗРЯДЫ PS. РАЗРЯДЫ С 5 ПО 7
ОПРЕДЕЛЯЮТ ТЕКУЩИЙ ПРИОРИТЕТ. (ЭВМ "ЭЛЕКТРОНИКА 60М" -
ТОЛЬКО РАЗРЯД 7 ОПРЕДЕЛЯЕТ ПРИОРИТЕТ: 0 ИЛИ 7.) ПРИ
ИЗМЕНЕНИИ РАЗРЯДОВ, НЕОБХОДИМО ИЗМЕНЯТЬ ПРИОРИТЕТ ЦП. МОЖНО
ИЗМЕНИТЬ ПРИОРИТЕТ ДО 7, НАПРИМЕР, ДЛЯ ПРЕДОТВРАЩЕНИЯ
ВОЗНИКНОВЕНИЯ ЛЮБОГО ДРУГОГО ПРЕРЫВАНИЯ. КОГДА НЕОБХОДИМА
ОБРАБОТКА ОСОБОГО ПРЕРЫВАНИЯ, МОЖНО ИЗМЕНИТЬ ПРИОРИТЕТ
ПРОЦЕССОРА ДО ПРИОРИТЕТА УСТРОЙСТВА ТАК, ЧТО ТОЛЬКО
УСТРОЙСТВА С ВЫСШИМ ПРИОРИТЕТОМ БУДУТ ПРЕРЫВАТЬ ЭТУ
ПОДПРОГРАММУ ОБРАБОТКИ. (ОБСЛУЖИВАЕМОЕ УСТРОЙСТВО ПРЕРВАТЬ
НЕЛЬЗЯ.) ВООБЩЕ, НЕТ НЕОБХОДИМОСТИ В САМОСТОЯТЕЛЬНОМ ДОСТУПЕ
К PS, МОЖНО ИСПОЛЬЗОВАТЬ ЗАПРОСЫ СИСТЕМЫ ФОДОС-2, ТАКИЕ, КАК
 .INTEN И .FORK, ДЛЯ ИЗМЕНЕНИЯ ПРИОРИТЕТА ПРОЦЕССОРА.

15   14 13   12  11 10     8 7     5  4   3   2   1   0 
--------------------------------------------------------- 
!      !       !   !        !       ! T ! N ! Z ! V ! C !
--------------------------------------------------------- 
   !       !     !              !     !  \______  ______/
   !       !     !              !     !         \/ 
   !       !     !              !     !          ! 
   !       !     !              !     !          ! 
   !       !     !              !     !          -> КОДЫ 
   !       !     !              !     !            УСЛОВИЙ 
   !       !     !              !     ! 
   !       !     !              !     ---------> T-РАЗРЯД 
   !       !     !              ! 
   !       !     !              --------------> ПРИОРИТЕТ 
   !       !     !                                      *
   !       !     -----------------> ОСНОВНОЙ РЕГИСТР SET
   !       !                                              *
   !       -------------------------> ПРЕДШЕСТВУЮЩИЙ РЕЖИМ 
   !                                                      *
   ----------------------------------------> ТЕКУЩИЙ РЕЖИМ


 * - ТОЛЬКО В СИСТЕМЕ XM

                          РИС.3.

     4.3. ВНУТРЕННИЕ ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЙ В
СРАВНЕНИИ С ДРАЙВЕРАМИ УСТРОЙСТВ
     Т.К. В СИСТЕМЕ ФОДОС-2 ИСПОЛЬЗУЮТСЯ КАК
ПРОГРАММИРУЕМЫЙ (НЕПРЕРЫВНЫЙ), ТАК И ДРАЙВЕРНЫЙ (ПРЕРЫВНЫЙ)
ВВОД-ВЫВОД, КОГДА НЕОБХОДИМО ВКЛЮЧИТЬ НОВОЕ УСТРОЙСТВО В
СИСТЕМУ, КОТОРОЕ УЖЕ НЕ ПОДДЕРЖИВАЕТСЯ СИСТЕМОЙ, СНАЧАЛА
НЕОБХОДИМО РЕШИТЬ, ИСПОЛЬЗОВАТЬ ВНУТРЕННЮЮ ПОДПРОГРАММУ
ОБРАБОТКИ ПРЕРЫВАНИЙ ИЛИ НАПИСАТЬ ДРАЙВЕР. КАКОВО БЫ НИ
БЫЛО РЕШЕНИЕ, И ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ, И ДРАЙВЕР
МОГУТ ВКЛЮЧАТЬ КАК ПРОГРАММИРУЕМУЮ СЕКЦИЮ ВВОДА-ВЫВОДА, ТАК
И ДРАЙВЕРНЫЙ КОД. ОБЫЧНЫЙ ИНТЕРФЕЙС СИСТЕМЫ ФОДОС-2 МЕЖДУ
МОНИТОРОМ И ПЕРИФЕРИЙНЫМ УСТРОЙСТВОМ ЕСТЬ ДРАЙВЕР УСТРОЙСТВА
КОТОРЫЙ ВЫПОЛНЕН КАК ФАЙЛ ОБРАЗА ПАМЯТИ НА УСТРОЙСТВЕ
МАССОВОГО ХРАНЕНИЯ И НАХОДИТСЯ В ПАМЯТИ, ЕСЛИ ОН НЕОБХОДИМ
ДЛЯ ВЫПОЛНЕНИЯ ВВОДА-ВЫВОДА УСТРОЙСТВА (СМ. РАЗД.2).
ДРАЙВЕР УСТРОЙСТВА ОБЫЧНО ВКЛЮЧАЕТ В СЕБЯ ПОДПРОГРАММУ
ОБРАБОТКИ ПРЕРЫВАНИЙ.
     ЕСЛИ ДЛЯ ИСПОЛЬЗОВАНИЯ ВЫБРАНА ПОДПРОГРАММА ОБРАБОТКИ
ПРЕРЫВАНИЙ, НЕОБХОДИМО РАЗМЕСТИТЬ ПРОГРАММУ В ПАМЯТИ ТАК,
ЧТОБЫ ПРОГРАММА НАПРЯМУЮ МЕНЯЛА РЕГИСТР СОСТОЯНИЯ И РЕГИСТР
БУФЕРА ДЛЯ УКАЗАННОГО УСТРОЙСТВА, И ПОДПРОГРАММА ОБРАБОТКИ
ПРЕРЫВАНИЙ МОГЛА ОБСЛУЖИВАТЬ ПРЕРЫВАНИЯ ВНУТРИ СОБСТВЕННЫХ
КОДОВ, Т.Е. КОДЫ ПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЙ ВСЕГДА
ДОЛЖНЫ БЫТЬ В ПАМЯТИ.
     ЕСЛИ РЕШЕНО ИСПОЛЬЗОВАТЬ ДРАЙВЕР, КОДЫ ПОДПРОГРАММЫ
ОБРАБОТКИ ПРЕРЫВАНИЙ ДОЛЖНЫ НАХОДИТЬСЯ В ДРАЙВЕРЕ, А НЕ В
ПРОГРАММЕ. ВЫХОДИТЬ ИЗ ОСНОВНОЙ ПРОГРАММЫ НЕОБХОДИМО
ПОСРЕДСТВОМ ЗАПРОСОВ .READ И .WRITE, И МОНИТОР, И ДРАЙВЕР
ВМЕСТЕ ИНИЦИИРУЮТ ПЕРЕДАЧУ ДАННЫХ, ОБРАБАТЫВАЮТ ПРЕРЫВАНИЯ И
СООБЩАЮТ ПРОГРАММЕ, КОГДА ПЕРЕДАЧА ЗАВЕРШАЕТСЯ. В СИСТЕМЕ
SJ ИЛИ ДЛЯ ФОНОВОГО ЗАДАНИЯ В FB ДРАЙВЕР ДОЛЖЕН БЫТЬ
РЕЗИДЕНТОМ, ТОЛЬКО КОГДА ПРОГРАММА НЕПОСРЕДСТВЕННО НУЖДАЕТСЯ
В НЕМ ДЛЯ ВЫПОЛНЕНИЯ ВВОДА-ВЫВОДА. (Т.Е. ДРАЙВЕР ДОЛЖЕН
БЫТЬ ВСЯКИЙ РАЗ РЕЗИДЕНТОМ, КОГДА ФАЙЛ ИЛИ КАНАЛ ОТКРЫТЫ.)
ДЛЯ ОСНОВНОГО И СИСТЕМНОГО ЗАДАНИЯ ДЛЯ FB И XM НЕОБХОДИМО
ЗАГРУЖАТЬ ДРАЙВЕР, ИСПОЛЬЗУЯ КОМАНДУ МОНИТОРА LOAD) ПЕРЕД
ВЫПОЛНИЕМ ПРОГРАММЫ, ТАК ЧТО ДРАЙВЕР ВСЕГДА РЕЗИДЕНТ.
     СЛЕДУЕТ ИСПОЛЬЗОВАТЬ ВНУТРЕННЮЮ ПОДПРОГРАММУ ОБРАБОТКИ
ПРЕРЫВАНИЙ ДЛЯ СЕНСОРОВ И УПРАВЛЯЮЩИХ УСТРОЙСТВ, ТАКИХ, КАК
АНАЛОГО-ЦИФРОВЫЕ ПРЕОБРАЗОВАТЕЛИ. С ПОМОЩЬЮ ДРАЙВЕРОВ
СЛЕДУЕТ ОБСЛУЖИВАТЬ УСТРОЙСТВА ФАЙЛОВОЙ СТРУКТУРЫ, ТАКИЕ,
КАК ДИСКИ, ЗА ИСКЛЮЧЕНИЕМ ЖЕСТКИХ ДИСКОВ ВИНЧЕСТЕРСКОГО
ТИПА. ЭТИМ МЕТОДОМ МОЖНО ОБСЛУЖИВАТЬ МНОГО ПОДСОЕДИНЯЕМОЙ
АППАРАТУРЫ.
     ДВУМЯ БОЛЬШИМИ ПРЕИМУЩEСТВАМИ ВНУТРЕННИХ ПОДПРОГРАММ
ОБРАБОТКИ ПРЕРЫВАНИЙ ЯВЛЯЮТСЯ СКОРОСТЬ И КОЛИЧЕСТВО
УПРАВЛЯЮЩЕЙ ИНФОРМАЦИИ. Т.К. МОНИТОР НЕ УЧАСТВУЕТ В
ПЕРЕДАЧЕ ДАННЫХ, ВНУТРЕННЯЯ ПОДПРОГРАММА ОБРАБОТКИ
ПРЕРЫВАНИЙ МОЖЕТ ЧАСТО ОБРАБАТЫВАТЬ ПРЕРЫВАНИЯ НАДЕЖНЕЕ, ЧЕМ
ДРАЙВЕРЫ УСТРОЙСТВ. ЕСЛИ СКОРОСТЬ ОБРАБОТКИ ПРЕРЫВАНИЙ НЕ
ЯВЛЯЕТСЯ ОПРЕДЕЛЯЮЩИМ ФАКТОРОМ ПРОГРАММЫ, МОЖНО ВЫБРАТЬ
НАПИСАНИЕ ВНУТРЕННЕЙ ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЙ, ДАЖЕ
ЕСЛИ УСТРОЙСТВО - ДИСК.
     ВНУТРЕННЯЯ ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ ИМЕЕТ
ДОСТУП КО ВСЕМ РЕГИСТРАМ СОСТОЯНИЯ И РЕГИСТРАМ БУФЕРА.
(ДРАЙВЕР ТОЖЕ ИМЕЕТ ДОСТУП КО ВСЕМ ЭТИМ РЕГИСТРАМ, НО НЕ
ИМЕЕТ ПРОГРАММА, ИСПОЛЬЗУЮЩАЯ ДРАЙВЕР.) ОНА МОЖЕТ ПЕРЕДАТЬ
ЧАСТЬ ИНФОРМАЦИИ ПРОГРАММЕ. ЭТО ОБЕСПЕЧИВАЕТ БОЛЬШУЮ
ГИБКОСТЬ В СПОСОБЕ ПРОГРАММНОГО ВЫЗОВА ПОДПРОГРАММЫ
ОБРАБОТКИ ПРЕРЫВАНИЙ И В КОЛИЧЕСТВЕ ИНФОРМАЦИИ, ВОЗВРАЩАЕМОЙ
ИЗ ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЙ.
     ТРЕМЯ БОЛЬШИМИ ПРЕИМУЩЕСТВАМИ ИСПОЛЬЗОВАНИЯ ДРАЙВЕРОВ
ЯВЛЯЕТСЯ ОБЕСПЕЧЕНИЕ НЕЗАВИСИМОСТИ УСТРОЙСТВА ОТ ПРОГРАММЫ
ПОЛЬЗОВАТЕЛЯ, ОНИ МОГУТ РАЗДЕЛЯТЬ ВРЕМЯ ПРОЦЕССОРА С ДРУГИМИ
ПРОЦЕССАМИ И ПРОСТЫ В ИСПОЛЬЗОВАНИИ. ДРАЙВЕРЫ ИМЕЮТ
СТАНДАРТНЫЙ ПРОТОКОЛ ДЛЯ ПРИСОЕДИНЕНИЯ К МОНИТОРУ СИСТЕМЫ
ФОДОС-2. ЕСТЬ ТАКЖЕ СТАНДАРТНЫЙ ПРОТОКОЛ ДЛЯ ИНТЕРФЕЙСА
МЕЖДУ МОНИТОРОМ И ПРОГРАММОЙ, ТАК ЧТО ЛЮБАЯ ПРОГРАММА,
КОТОРАЯ СОГЛАСОВАНА СО СТАНДАРТАМИ МОНИТОРА, МОЖЕТ
ИСПОЛЬЗОВАТЬ ДРАЙВЕРЫ. ЭТО ПРОГРАММЫ ПОЛЬЗОВАТЕЛЯ,
ВСПОМОГАТЕЛЬНЫЕ ПРОГРАММЫ СИСТЕМЫ И ЯЗЫКОВЫЕ ПРОЦЕССОРЫ
ФОДОС-2 АССЕМБЛЕР, ФОРТРАН И БЕЙСИК. ТАКИМ ОБРАЗОМ, ДРАЙВЕР
ДЕЛАЕТ НОВОЕ УСТРОЙСТВО ДОСТУПНЫМ БОЛЬШОМУ КОЛИЧЕСТВУ
ПРОГРАММ БЕЗ СПЕЦИАЛЬНОЙ МОДИФИКАЦИИ. (КРОМЕ ТОГО, ДРАЙВЕР
ДЛЯ УСТРОЙСТВ ПРОИЗВОЛЬНОГО ДОСТУПА К ДАННЫМ ДЕЛАЕТ ФАЙЛОВУЮ
СИСТЕМУ ФОДОС-2 ПРИМЕНИМОЙ НА УСТРОЙСТВЕ БЕЗ ДОПОЛНИТЕЛЬНЫХ
ЗАТРАТ.) НАПРОТИВ, ВНУТРЕННЯЯ ПОДПРОГРАММА ОБРАБОТКИ
ПРЕРЫВАНИЙ ДЕЛАЕТ НОВОЕ УСТРОЙСТВО ДОСТУПНЫМ ОДНОЙ
ПРИКЛАДНОЙ ПРОГРАММЕ.
     ДРАЙВЕРЫ УСТРОЙСТВ УДОБНЫ ДЛЯ ИСПОЛЬЗОВАНИЯ. ОНИ
СТАНДАРТНЫ ДЛЯ ОБСЛУЖИВАНИЯ УСТРОЙСТВ ВВОДА-ВЫВОДА,
ПРОЦЕДУРА ДЛЯ ИХ НАПИСАНИЯ И ИСПОЛЬЗОВАНИЯ ЯСНА И ДОСТУПНА,
ПОСКОЛЬКУ ФОДОС-2 ПРЕДУСМАТРИВАЕТ ИСПОЛЬЗОВАНИЕ ЗАПРОСОВ ПРИ
НАПИСАНИИ ДРАЙВЕРОВ; ИМЕЮТСЯ ТАКЖЕ КОМАНДЫ КЛАВИАТУРНОГО
МОНИТОРА ДЛЯ УСТАНОВКИ ДРАЙВЕРА В ТАБЛИЦУ УСТРОЙСТВ МОНИТОРА
И ЗАГРУЗКИ В ПАМЯТЬ. КРОМЕ ТОГО, ДРАЙВЕРЫ ПОЗВОЛЯЮТ
ИЗВЛЕКАТЬ ВЫГОДУ ИЗ ПРОГРАММНЫХ ЗАПРОСОВ МОНИТОРА ДЛЯ
ВЫПОЛНЕНИЯ ПЕРЕДАЧИ ДАННЫХ. НАКОНЕЦ, ДРАЙВЕР ЭТО ЛИШЬ
СПОСОБ СОЕДИНЕНИЯ УСТРОЙСТВА С ВИРТУАЛЬНЫМ ЗАДАНИЕМ В
СИСТЕМЕ XM.
     РИС.4 ИЛЛЮСТРИРУЕТ РАЗЛИЧИЯ МЕЖДУ ВНУТРЕННЕЙ
ПОДПРОГРАММОЙ ОБРАБОТКИ ПРЕРЫВАНИЙ И ДРАЙВЕРАМИ.

------------------------------------------------------------
!                                                          !
!                               ----------------------     !
!                               ! СПЕЦИАЛИЗИРОВАННАЯ !     !
!                               !     ПРИКЛАДНАЯ     !     !
!                               !      ПРОГРАММА     !     !
!                               !- - - - - - - - - - !     !
!  --------------               !     ВНУТРЕННЯЯ     !     !
!  ! УСТРОЙСТВО !---------------!     ПОДПРОГРАММА   !     !
!  --------------               !     ОБРАБОТКИ      !     !
!                               !     ПРЕРЫВАНИЙ     !     !
!                               !- - - - - - - - - - !     !
!                               !                    !     !
!                               ----------------------     !
!                                                          !
!       ВНУТРЕННЯЯ ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ       !
!                                                          !
!-----------------------------------------------------------
!                              ---------      ------------ !
!                              !       !   ---!ПРИКЛАДНАЯ! !
!                              !       !   !  !ПРОГРАММА ! !
!                              !       !   !  ------------ !
!                              !       !   !               !
!                              !       !   !  ------------ !
!              --------------  !       !   !--!ВСПОМОГАТ.! !
!              !            !  !       !   !  !ПРОГРАММА ! !
!              !   ДРАЙВЕР  !  !       !   !  ------------ !
!              ! УСТРОЙСТВА !  !       !   !               !
!------------  !            !  !       !   !  -----------  !
!!          !  --------------  ! РЕЗИ- !   !--! ФОРТРАН !  !
!!УСТРОЙСТВО!--!            !--!ДЕНТНЫЙ!---!  -----------  !
!!          !  !ПОДПРОГРАММА!  !МОНИТОР!   !               !
!------------  ! ОБРАБОТКИ  !  !       !   !  -----------  !
!              ! ПРЕРЫВАНИЙ !  !       !   !--!  БЕЙСИК !  !
!              !            !  !       !   !  -----------  !
!              !            !  !       !   !               !
!              --------------  !       !   !  -----------  !
!                              !       !   !--!АССЕМБЛЕР!  !
!                              !       !   !  -----------  !
!                              !       !   !               !
!                              !       !   !  ------------ !
!                              !       !   !--!ПРИКЛАДНАЯ! !
!                              !       !      !ПРОГРАММА ! !
!                              ---------      -----------  !
!                                                          !
!                 ДРАЙВЕР УСТРОЙСТВА                       !
!                                                          !
------------------------------------------------------------

                        РИС.4.

     4.4. КАК ПЛАНИРОВАТЬ ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЙ
     НАИБОЛЕЕ ВАЖНОЙ ЧАСТЬЮ НАПИСАНИЯ ПОДПРОГРАММЫ ОБРАБОТКИ
ПРЕРЫВАНИЙ ЯВЛЯЕТСЯ МОМЕНТ ЕЕ ПЛАНИРОВАНИЯ. НИЖЕ ПРИВЕДЕНО
РУКОВОДСТВО.
     1. ИЗУЧИТЬ УСТРОЙСТВО.
     2. ИЗУЧИТЬ СТРУКТУРУ ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЙ.
     3. ИЗУЧИТЬ СХЕМУ ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЙ.
     4. ПРОДУМАТЬ ТРЕБОВАНИЯ К ПРОГРАММЕ.
     5. ПОДГОТОВИТЬ БЛОК-СХЕМУ ПРОГРАММЫ.
     6. НАПИСАТЬ КОДЫ.
     7. ПРОВЕРИТЬ И ОТЛАДИТЬ ПРОГРАММУ.

     4.4.1. ИЗУЧИТЬ УСТРОЙСТВО
     ЭТОТ ПУНКТ ЯВЛЯЕТСЯ РЕШАЮЩИМ ДЛЯ НАПИСАНИЯ ПРАВИЛЬНО
РАБОТАЮЩЕЙ ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЙ. НЕОБХОДИМО
ВНИМАТЕЛЬНО ИЗУЧИТЬ ДОКУМЕНТАЦИЮ К НЕМУ. НЕ ВЗИРАЯ НА
ФОРМАТ ДОКУМЕНТАЦИИ (БУДЬ ТО РУКОВОДСТВО ИЛИ БРОШЮРА), ОНА
ДОЛЖНА СОДЕРЖАТЬ СУЩЕСТВЕННУЮ ИНФОРМАЦИЮ, КОТОРАЯ НЕОБХОДИМА
ДЛЯ ПОДДЕРЖКИ ЕГО СИСТЕМОЙ ФОДОС-2. НЕОБХОДИМО ПОЛУЧИТЬ ЭТУ
ИНФОРМАЦИЮ.
     НЕОБХОДИМО ПОНЯТЬ, КАК РАБОТАЕТ УСТРОЙСТВО, В ЧЕМ ОНО
НУЖДАЕТСЯ И КАК ОНО ОБСЛУЖИВАЕТ ПЕРЕДАЧИ ДАННЫХ. МОЖНО
ИСПОЛЬЗОВАТЬ СЛЕДУЮЩИЙ ПРОВЕРОЧНЫЙ СПИСОК ДЛЯ УВЕРЕННОСТИ В
ТОМ, ЧТО ИМЕЕТСЯ ДОСТАТОЧНАЯ ИНФОРМАЦИЯ СПЕЦИФИЧЕСКИХ
УСТРОЙСТВ ДЛЯ НАПИСАНИЯ ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЙ.
НЕОБХОДИМО ИЗУЧИТЬ КАЖДЫЙ ВОПРОС, ПРЕЖДЕ ЧЕМ ПИСАТЬ
ПОДПРОГРАММУ ОБРАБОТКИ ПРЕРЫВАНИЙ. НЕКОТОРЫЕ ИЗ СЛЕДУЮЩИХ
ВОПРОСОВ НЕПРИМЕНИМЫ КО ВСЕМ ТИПАМ УСТРОЙСТВ: НЕКОТОРЫЕ
ОТНОСЯТСЯ ДЛЯ БОЛЬШЕГО ЧИСЛА НОСИТЕЛЕЙ, НЕКОТОРЫЕ БОЛЬШЕ
ОТНОСЯТСЯ К СЕНСОРАМ И КОММУНИКАЦИЯМ. НЕОБХОДИМО ХОРОШО
РАЗОБРАТЬСЯ В КАЖДОМ ВОПРОСЕ, ЧТОБЫ УВИДЕТЬ, ПОДХОДИТ ЛИ ОН
К ДАННОМУ УСТРОЙСТВУ.
 1. ЧТО ТАКОЕ ВЕКТОР ПРЕРЫВАНИЯ УСТРОЙСТВА?
    НЕОБХОДИМО РЕШИТЬ, ЧТО СДЕЛАТЬ ВЕКТОРОМ ПРЕРЫВАНИЙ,
    ПРИНЯВ ВО ВНИМАНИЕ КАК КОНФЛИКТ С СУЩЕСТВУЮЩИМИ
    УСТРОЙСТВАМИ, ПОДДЕРЖИВАЕМЫМИ СИСТЕМОЙ ФОДОС-2, ТАК И
    КОНФЛИКТ С УСТРОЙСТВАМИ, ПОДДЕРЖИВАЕМЫМИ ДРУГИМИ
    ОПЕРАЦИОННЫМИ СИСТЕМАМИ, ЕСЛИ ОНИ ИСПОЛЬЗУЮТСЯ. ЕСЛИ
    ВЕКТОР ВЫБРАН, НЕОБХОДИМО УБЕДИТЬСЯ, ЧТО УСТРОЙСТВО
    УСТАНОВЛЕНО ПРАВИЛЬНО, И АППАРАТУРА СКАЧЕТ ПО ЭТОМУ
    АДРЕСУ. В СИСТЕМЕ ФОДОС-2 ИСПОЛЬЗУЮТСЯ ВСЕ ВЕКТОРА ПО
    АДРЕСАМ НИЖЕ 500, И ИХ НЕЛЬЗЯ ИСПОЛЬЗОВАТЬ КАК ВЕКТОРА
    ПРЕРЫВАНИЙ. В РАЗД.2 ПРИВОДИТСЯ СПИСОК ВЕКТОРОВ
    ПЕРИФЕРИЙНЫХ УСТРОЙСТВ.
 2. ЧТО ТАКОЕ РЕГИСТРЫ СОСТОЯНИЯ?
    НЕОБХОДИМО ИЗУЧИТЬ, ГДЕ ЭТИ РЕГИСТРЫ РАСПОЛОЖЕНЫ И ЧТО
    ОЗНАЧАЕТ В НИХ КАЖДЫЙ РАЗРЯД.
 3. КАКОЙ У УСТРОЙСТВА ПРИОРИТЕТ?
 4. УСТРОЙСТВО ПРОИЗВОЛЬНОГО ДОСТУПА К ПАМЯТИ ИЛИ
    ПРОГРАММИРУЕМОЙ ПЕРЕДАЧИ (СЛОВНО- ИЛИ
    СИМВОЛЬНО-ОРИЕНТИРОВАННОЕ).
 5. ГДЕ НАХОДЯТСЯ РЕГИСТРЫ БУФЕРОВ ДАННЫХ?
    НЕОБХОДИМО ИЗУЧИТЬ, ГДЕ РАСПОЛОЖЕНЫ РЕГИСТРЫ И ЧТО
    ОЗНАЧАЮТ РАЗРЯДЫ В КАЖДОМ СЛУЧАЕ.
 6. КАКОВЫ КОДЫ ДЛЯ ТИПИЧНЫХ ОПЕРАЦИЙ?
    НЕОБХОДИМО ИЗУЧИТЬ, КАК ИНИЦИИРОВАТЬ ЛЮБУЮ ОПЕРАЦИЮ,
    МАНИПУЛИРУЯ РАЗРЯДАМИ РЕГИСТРОВ УСТРОЙСТВА. ДРАЙВЕРЫ
    УСТРОЙСТВ ДОЛЖНЫ ВЫПОЛНЯТЬ ОПЕРАЦИИ ЧТЕНИЯ, ЗАПИСИ,
    ПОИСКА И СБРОСА.
 7. КОГДА ПРОИСХОДИТ ПРЕРЫВАНИЕ УСТРОЙСТВА?
    ОДНИ УСТРОЙСТВА ПРЕРЫВАЮТСЯ ДЛЯ КАЖДОГО СИМВОЛА, ДРУГИЕ
    ОРИЕНТИРУЮТСЯ НА СЛОВА, БЛОКИ ИЛИ ПАКЕТЫ. НЕКОТОРЫЕ
    УСТРОЙСТВА ПРЕРЫВАЮТСЯ ДВАЖДЫ ДЛЯ ОПРЕДЕЛЕННЫХ ОПЕРАЦИЙ,
    ТАКИХ, КАК ПОИСК ИЛИ СБРОС ПРИВОДА. НЕОБХОДИМО ИСКАТЬ
    ВЫХОД, ЕСЛИ УСТРОЙСТВО ДЕЛАЕТ ЭТО, И ПЛАНИРОВАТЬ
    ЗАРАНЕЕ, КАК БУДЕТ ПРИНИМАТЬСЯ В РАСЧЕТ ЭТА ИНФОРМАЦИЯ
    ПОЗЖЕ.
 8. КАКОЙ ПРИВОД ЯВЛЯЕТСЯ ОСНОВНЫМ ДЛЯ ПЕРЕДАЧИ ДАННЫХ?
    ЭТО, КОНЕЧНО, ОТНОСИТСЯ К ПРЕДЫДУЩЕМУ ВОПРОСУ, НО
    НЕОБХОДИМО ОПРЕДЕЛИТЬ, КАК ПОСЫЛАЮТСЯ ЗАПРОСЫ
    ВВОДА-ВЫВОДА В УСТРОЙСТВО: БАЙТАМИ, СЛОВАМИ ИЛИ
    БЛОКАМИ. ЕСЛИ, НАПРИМЕР, ПРОГРАММА ОПЕРИРУЕТ СЛОВАМИ, А
    УСТРОЙСТВО ОРИЕНТИРОВАНО НА СИМВОЛЫ, НЕОБХОДИМО
    ПРЕОБРАЗОВАТЬ СЛОВА В БАЙТЫ В ПОДПРОГРАММЕ ОБРАБОТКИ.
 9. УСТРОЙСТВО НУЖДАЕТСЯ В ПОЛОЖИТЕЛЬНОМ ИЛИ ОТРИЦАТЕЛЬНОМ
    СЧЕТЧИКЕ БАЙТОВ?
    НЕКОТОРЫМ УСТРОЙСТВАМ ТРЕБУЕТСЯ ОТРИЦАТЕЛЬНЫЙ СЧЕТЧИК
    БАЙТОВ ИЛИ СЛОВ. ЕСЛИ ДАННОЕ УСТРОЙСТВО - ОДНО ИЗ НИХ,
    НЕОБХОДИМО СДЕЛАТЬ СЧЕТЧИК БАЙТОВ (СЛОВ) В ПОДПРОГРАММЕ
    ОБРАБОТКИ ПРЕРЫВАНИЙ ОТРИЦАТЕЛЬНЫМ.
10. КАКОВА СТРУКТУРА УСТРОЙСТВА, ЕГО ГЕОМЕТРИЯ?
    ЕСЛИ УСТРОЙСТВО - ДИСК, НЕОБХОДИМО РАЗОБРАТЬСЯ, КАКОВА
    СТРУКТУРА ЦИЛИНДРОВ, ДОРОЖЕК И СЕКТОРОВ, ОПРЕДЕЛИТЬ ИХ
    РАЗМЕР, ВЫЯСНИТЬ, ТРЕБУЕТ ЛИ УСТРОЙСТВО ЧЕРЕДОВАНИЯ
    ЗАПИСИ, И, ЕСЛИ ДА, ТО ИЗУЧИТЬ, КАК ОПТИМИЗИРОВАТЬ
    СКОРОСТЬ ЗАПИСИ. (ЧЕРЕДОВАНИЕ ОПИСЫВАЕТ ПРОЦЕСС ЗАПИСИ
    ДАННЫХ НА ВРАЩАЮЩЕЕСЯ УСТРОЙСТВО, КОТОРОЕ ТРЕБУЕТ
    ПРОГРАММНОГО ВМЕШАТЕЛЬСТВА МЕЖДУ СЕКТОРАМИ. ДИСК
    ВРАЩАЕТСЯ ПОСТОЯННО, ДАННЫЕ ЗАПИСЫВАЮТСЯ В ОДИН СЕКТОР,
    ПРОГРАММА ВМЕШИВАЕТСЯ, КАК ТОЛЬКО МИНУЕТ СМЕЖНЫЙ СЕКТОР,
    ТОГДА СЛЕДУЮЩИЕ ДАННЫЕ ЗАПИСЫВАЮТСЯ В СЛЕДУЮЩИЙ
    ИМЕЮЩИЙСЯ СЕКТОР.)
11. КАКОВ МЕХАНИЗМ БУФЕРИЗАЦИИ?
    НЕКОТОРЫЕ УСТРОЙСТВА ПЕРЕДАЮТ ДАННЫЕ ПРОГРАММЕ ПО ОДНОМУ
    СИМВОЛУ ЗА РАЗ. ДРУГИЕ СОБИРАЮТ ДАННЫЕ ВО ВНУТРЕННИЙ
    БУФЕР ИЛИ ПЕРЕДАЮТ ИХ ПАКЕТАМИ. НЕОБХОДИМО РЕШИТЬ, КАК
    БУФЕРИЗОВАТЬ ДАННЫЕ В ПРОГРАММЕ, УБЕДИТЬСЯ, ЧТО РАЗМЕР
    ОБЛАСТИ, ОТВЕДЕННОЙ ПОД БУФЕР, ДОСТАТОЧНО ВЕЛИК.
12. КАК ВЫПОЛНЯТЬ ВЫЧИСЛЕНИЕ АДРЕСА ДАННЫХ НА УСТРОЙСТВЕ?
    ЭТО ОТНОСИТСЯ К СТРУКТУРЕ УСТРОЙСТВА. НЕОБХОДИМО
    ИЗУЧИТЬ УСТРОЙСТВО И ОПРЕДЕЛИТЬ, КАК ИСКАТЬ НУЖНЫЕ
    ДАННЫЕ. НОМЕРА БЛОКОВ ДОЛЖНЫ БЫТЬ ПРЕОБРАЗОВАНЫ В
    СПЕЦИАЛЬНЫЕ АДРЕСА УСТРОЙСТВА. (НЕКОТОРЫЕ ПРОЦЕССОРЫ НЕ
    ИМЕЮТ ИНСТРУКЦИЙ УМНОЖЕНИЯ И ДЕЛЕНИЯ.)
13. КАКИЕ СОБСТВЕННЫЕ ОПЕРАЦИИ ТРЕБУЮТСЯ УСТРОЙСТВУ?
    НЕКОТОРЫМ УСТРОЙСТВАМ ТРЕБУЕТСЯ ВЫПОЛНИТЬ СБРОС В
    НАЧАЛЬНОЕ СОСТОЯНИЕ ПЕРЕД ПОВТОРЕНИЕМ, ДРУГИМ - ЧТОБЫ
    УСТРОЙСТВО БЫЛО ДОСТУПНЫМ ИЛИ ЧТОБЫ ЗАПОЛНЕНИЕ ДИСКА
    БЫЛО ГАРАНТИРОВАНО ПЕРЕД ВЫПОЛНЕНИЕМ ЛЮБОЙ ОПЕРАЦИИ НА
    НЕМ. НЕОБХОДИМО, НАПРИМЕР, ДЕЛАТЬ СБРОС В НАЧАЛЬНОЕ
    СОСТОЯНИЕ ПОСЛЕ НЕЗАВЕРШЕННОГО ПОИСКА ИЛИ ОШИБКИ
    ПРИВОДА.
14. КАК ОБСЛУЖИВАТЬ ОШИБКИ И УСЛОВИЯ ИСКЛЮЧЕНИЯ?
    СНАЧАЛА НЕОБХОДИМО РЕШИТЬ, КАКИЕ ОШИБКИ БУДУТ
    НЕВОССТАНОВИМЫМИ, И ПЕРЕДАЧА ДОЛЖНА БЫТЬ ПРЕЖДЕВРЕМЕННО
    ПРЕРВАНА, И КАКИЕ ОШИБКИ ВОССТАНОВИМЫ, И ДОЛЖНО БЫТЬ
    ПОВТОРЕНИЕ ПЕРЕДАЧИ. ОБЫЧНЫЕ ВОССТАНОВИМЫЕ ОШИБКИ:
    ОШИБКИ КОНТРОЛЬНОЙ СУММЫ, ОШИБКИ ЗАПАЗДЫВАНИЯ ДАННЫХ,
    ВРЕМЕННЫЕ ОШИБКИ. НЕОБХОДИМО РЕШИТЬ, СКОЛЬКО ВРЕМЕНИ
    ПОВТОРЯТЬ ПЕРЕДАЧУ ДЛЯ ВОССТАНОВИМЫХ ОШИБОК И КАК
    ОБСЛУЖИВАТЬ УСЛОВИЯ НЕВОССТАНОВИМЫХ ОШИБОК.
15. НА ЧТО ОБРАТИТЬ ВНИМАНИЕ ПРИ ПРЕЖДЕВРЕМЕННОМ ПРЕРЫВАНИИ?
    НЕОБХОДИМО ВЫЯСНИТЬ, ОТНОСИТЕЛЬНО БЫСТРОЕ ИЛИ МЕДЛЕННОЕ
    УСТРОЙСТВО. НЕДОПУСТИМО ИСПОЛЬЗОВАНИЕ ОЧИСТКИ
    КОНТРОЛЛЕРА, ЕСЛИ ТОЛЬКО ОДИН ПРИВОД ДВУХПРИВОДНОГО
    КОНТРОЛЛЕРА ЗАТРАГИВАЕТСЯ В РЕЗУЛЬТАТЕ ПРЕЖДЕВРЕМЕННОГО
    ПРЕРЫВАНИЯ ПРОГРАММЫ, Т.К. ЭТО МОЖЕТ ПОМЕШАТЬ РАБОТЕ СО
    ВТОРЫМ ПРИВОДОМ. ТАКОЕ ЖЕ ВНИМАНИЕ СТОИТ УДЕЛИТЬ
    ДВУХПОРТОВЫМ УСТРОЙСТВАМ.

     4.4.2. ПОДГОТОВКА БЛОК-СХЕМЫ ПРОГРАММЫ
     МНОГИЕ ПРОГРАММИСТЫ ГОТОВЯТ БЛОК-СХЕМУ ПОСЛЕ НАПИСАНИЯ
ПРОГРАММЫ ИЛИ СОВЕРШЕННО ЕЮ ПРЕНЕБРЕГАЮТ. ОДНАКО БЛОК-СХЕМА
МОЖЕТ ПОМОЧЬ НАЙТИ ЛОГИЧЕСКИЕ НЕТОЧНОСТИ И ОШИБКИ. К
СОЖАЛЕНИЮ, БЛОК-СХЕМА НЕ ОКАЖЕТ БОЛЬШОЙ ПОМОЩИ В УСЛОВИЯХ
КОНКУРЕНЦИИ ЗАДАНИЙ. (УСЛОВИЯ ТАКОГО РОДА - СИТУАЦИЯ, В
КОТОРОЙ ДВА ИЛИ БОЛЕЕ ПРОЦЕССОВ ПЫТАЮТСЯ МОДИФИЦИРОВАТЬ
СТРУКТУРУ ОБЩИХ ДАННЫХ ОДНОВРЕМЕННО; В РЕЗУЛЬТАТЕ,
СТРУКТУРА ДАННЫХ РАЗРУШАЕТСЯ, И НУЖНО ИДТИ НА КОМПРОМИСС.
ОН МОЖЕТ БЫТЬ НАЙДЕН ПОСРЕДСТВОМ ПРЕРЫВАНИЯ УСТРОЙСТВА, ПОКА
ВЫПОЛНЯЕТСЯ ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ, БЛАГОДАРЯ
ИЗМЕНЕННОМУ ПРИОРИТЕТУ ПРОЦЕССОРА.)
     ПРИ ПРОГНОЗИРОВАНИИ ПРОГРАММЫ НЕОБХОДИМО ВНИМАТЕЛЬНО
ИССЛЕДОВАТЬ КАЖДЫЙ ШАГ: НЕОБХОДИМО ИМЕТЬ В ВИДУ, ЧТО МОЖЕТ
СЛУЧИТЬСЯ, ЕСЛИ ПРЕРЫВАНИЯ БУДУТ ПРОИСХОДИТЬ В КАЖДОЙ
ДИРЕКТИВЕ.
     НЕОБХОДИМО ПОТРАТИТЬ ДОСТАТОЧНОЕ КОЛИЧЕСТВО ВРЕМЕНИ ДЛЯ
ОЧИСТКИ И ПРЯМОГО ОБСЛУЖИВАНИЯ УСЛОВИЯ ОШИБКИ; ЕСЛИ
ПРОГРАММА ХОРОШО ОБСЛУЖИВАЕТ УСЛОВИЯ ОШИБКИ, ТО В НОРМАЛЬНОМ
СОСТОЯНИИ ПРОГРАММА РАБОТАЕТ ТАКЖЕ ХОРОШО.

     4.4.3. НАПИСАНИЕ КОДОВ
     МОЖНО ЗАИМСТВОВАТЬ КОДЫ ИЗ ДРУГИХ ПОДПРОГРАММ ОБРАБОТКИ
ПРЕРЫВАНИЙ. НЕОБХОДИМО НАЧАТЬ С ОБЩИХ ЧАСТЕЙ, ЗАТЕМ
ДОБАВИТЬ ДЕТАЛИ ДЛЯ ПОДГОНКИ К СПЕЦИФИЧЕСКОМУ УСТРОЙСТВУ.
КОГДА КОДЫ НАПИСАНЫ, НЕОБХОДИМО ПРОВЕРИТЬ ЛОГИКУ,
ПРОТРАНСЛИРОВАТЬ, ПРОВЕРИТЬ И ОТЛАДИТЬ.

     4.4.4. ПРОВЕРКА И ОТЛАДКА
     ПРОВЕРКА ПОДПРОГРАММЫ С ВНУТРЕННЕЙ ОБРАБОТКОЙ
ПРЕРЫВАНИЙ - ПОПЫТКА ВЫПОЛНИТЬ ЕЕ. ЕСЛИ ПОДПРОГРАММА
СОСТАВЛЕНА ПРАВИЛЬНО, ОНА БУДЕТ СПОСОБНА СЧИТЫВАТЬ И
ЗАПИСЫВАТЬ ДАННЫЕ ТОЧНО, БЕЗ ПОТЕРИ НЕКОТОРЫХ ДАННЫХ И БУДЕТ
ПРАВИЛЬНО ОБСЛУЖИВАТЬ УСЛОВИЯ ОШИБКИ. ЕСЛИ ОБНАРУЖИЛИСЬ
ОШИБКИ, НЕОБХОДИМО СВЯЗАТЬ ПОДПРОГРАММУ С ODT (НЕ VDT) И
ПОПРОБОВАТЬ ВЫПОЛНИТЬ ЕЕ ШАГ ЗА ШАГОМ. СДЕЛАТЬ
КОРРЕКТИРОВКУ ПОДПРОГРАММЫ, СНОВА ОТТРАНСЛИРОВАТЬ И СНОВА
ВЫПОЛНИТЬ ЕЕ, ЕСЛИ НЕОБХОДИМО.

     4.5. СТРУКТУРА ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЙ
     ЭТОТ ПОДРАЗДЕЛ ДАЕТ НАБРОСОК ОБЩЕЙ СТРУКТУРЫ ВНУТРЕННЕЙ
ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЙ. ПОЛЬЗОВАТЕЛЬ ДОЛЖЕН
ВЫБРАТЬ ИЗ НЕЕ ЛИШЬ ТО, ЧТО ПРИМЕНИМО К ЕГО СЛУЧАЮ.

     4.5.1. ЗАЩИТА ВЕКТОРОВ: ЗАПРОС .PROTECT
     В СИСТЕМАХ FB И XM, ГДЕ ВЫПОЛНЯЕТСЯ БОЛЕЕ ОДНОГО
ЗАДАНИЯ, СЛЕДУЕТ ИСПОЛЬЗОВАТЬ ПРОГРАММНЫЙ ЗАПРОС .PROTECT
ДЛЯ ЗАЩИТЫ ВЕКТОРОВ ПРЕРЫВАНИЯ ПЕРЕД ЗАСЫЛКОЙ В НИХ
ЗНАЧЕНИЙ. ЭТО ГАРАНТИРУЕТ, ЧТО ВЕКТОР УЖЕ НЕ БУДЕТ
ОТНОСИТЬСЯ К МОНИТОРНОМУ ИЛИ ДРУГОМУ ЗАДАНИЮ, ОБЕСПЕЧИВАЕТ
ПОЛЬЗОВАТЕЛЬСКОМУ ЗАДАНИЮ СОБСТВЕННОСТЬ ВЕКТОРА И ЗАЩИЩАЕТ
ЕГО ОТ ВМЕШАТЕЛЬСТВА ДРУГОГО ЗАДАНИЯ ИЛИ МОНИТОРА ПУТЕМ
УСТАНОВКИ РАЗРЯДОВ В КАРТЕ ЗАЩИТЫ ПАМЯТИ (РАЗД.3 ДЕТАЛЬНО
ОПИСЫВАЕТ КАРТУ ЗАЩИТЫ НИЖНЕЙ ПАМЯТИ.) ПОЛЬЗОВАТЕЛЬСКОМУ
ЗАДАНИЮ НЕОБХОДИМО НЕМЕДЛЕННО ВЫХОДИТЬ В СЛУЧАЕ ОШИБКИ
ЗАПРОСА .PROTECT. ЗАДАНИЕ НЕ ДОЛЖНО ИМЕТЬ ДОСТУПА К
ВЕКТОРАМ, КОТОРЫЕ ВСЕГДА ИСПОЛЬЗУЮТСЯ. ПРИМЕР ИСПОЛЬЗОВАНИЯ
ЗАПРОСА .PROTECT ПРИВЕДЕН В ПОДРАЗДЕЛЕ 4.6. СМ. В [1]
ФОРМАТ ПРОГРАММНОГО ЗАПРОСА .PROTECT.
     НЕСМОТРЯ НА ТО, ЧТО ЗАПРОС .PROTECT НЕ РАБОТАЕТ В
СИСТЕМЕ SJ, ЕГО ЦЕЛЕСООБРАЗНО ИСПОЛЬЗОВАТЬ В ПРОГРАММЕ.
ЗАПРОС НЕ ОКАЗЫВАЕТ ДЕЙСТВИЯ, НЕМЕДЛЕННО ВОЗВРАЩАЮЩЕГО В
ПРОГРАММУ, ТЕМ НЕ МЕНЕЕ ИСПОЛЬЗОВАНИЕ ЕГО УПРОЩАЕТ ПОЗЖЕ
ПЕРЕХОД, ЕСЛИ ПРОГРАММА БУДЕТ ВЫПОЛНЯТЬСЯ В СРЕДЕ FB.

     4.5.2. УСТАНОВКА ВЕКТОРА ПРЕРЫВАНИЯ
     ПРОГРАММА ПОЛЬЗОВАТЕЛЯ ДОЛЖНА ПОЗАБОТИТЬСЯ О ПЕРЕСЫЛКЕ
АДРЕСА ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЙ В ПЕРВОЕ СЛОВО
ВЕКТОРА ПРЕРЫВАНИЯ. СИСТЕМА ФОДОС-2 ТРЕБУЕТ, ЧТОБЫ ВСЕ
ПРЕРЫВАНИЯ ПОДНИМАЛИ ПРИОРИТЕТ ПРОЦЕССОРА ДО 7, ПОЭТОМУ
ПРОГРАММА ПОЛЬЗОВАТЕЛЯ ДОЛЖНА ЗАПОЛНИТЬ ВТОРОЕ СЛОВО ВЕКТОРА
ПРЕРЫВАНИЯ 7-КОЙ, НОВЫМ ПРИОРИТЕТОМ.
     ПРИМЕР:

        XXVEC=220 ;ОПРЕДЕЛЯЕТСЯ ВЕКТОР
        PR7=340 ;ПРИОРИТЕТ 7 РАВЕН 340
;
;ТОЧКОЙ ВХОДА ДЛЯ ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЙ
;ЯВЛЯЕТСЯ ISREP:
;
        .PROTECT #AREA,#XXVEC ;ЗАЩИТА ВЕКТОРА
        BCS NOVEC ;ВЕКТОР ИСПОЛЬЗУЕТСЯ
        MOV #ISREP,@#XXVEC ;УСТАНОВКА ПЕРВОГО СЛОВА
        MOV #PR7,@#XXVEC ;УСТАНОВКА ВТОРОГО СЛОВА

     В ЭТОМ ПРИМЕРЕ ПОКАЗАН ТИПИЧНЫЙ СЛУЧАЙ УСТАНОВКИ
ДВУХСЛОВНОГО ВЕКТОРА ПРЕРЫВАНИЯ. ПРОГРАММЕ НЕ СЛЕДУЕТ
УСТАНАВЛИВАТЬ ВЕКТОР, ПОКА ОН ЗАЩИЩЕН. ЗДЕСЬ XX - ИМЯ
УСТРОЙСТВА И 220 И 222 - АДРЕСА ВЕКТОРОВ ПРЕРЫВАНИЯ.

     4.5.3. ЧИСТАЯ ОСТАНОВКА: ЗАПРОС .DEVICE
     ПРОГРАММНЫЙ ЗАПРОС .DEVICE ЯВЛЯЕТСЯ МНОГОЗНАЧИТЕЛЬНЫМ
ЛИШЬ В СИСТЕМАХ XB И XM. ЕГО ПРЕДНАЗНАЧЕНИЕ - ЗАМЕНА
УСТРОЙСТВА (ПОСРЕДСТВОМ ОЧИСТКИ ЕГО РАЗРЯДА РАЗРЕШЕНИЯ
ПРЕРЫВАНИЯ), ЕСЛИ ВЫПОЛНЯЮЩАЯСЯ ПРОГРАММА ПРЕЖДЕВРЕМЕННО
ПРЕРВАНА ПО СУ/C ИЛИ ЕСЛИ ПРОГРАММА ВЫПОЛНЕНА. (ФОРМАТ
ПРОГРАММНОГО ЗАПРОСА .DEVICE СМ. В [1], А В ПОДРАЗДЕЛЕ
4.6 - ПРИМЕР ИСПОЛЬЗОВАНИЯ ЗАПРОСА .DEVICE.)
     ЭТОТ ЗАПРОС НЕОБЯЗАТЕЛЕН В ОБЛАСТИ SJ. ОДНАКО,
ЦЕЛЕСООБРАЗНО ЕГО ИСПОЛЬЗОВАТЬ В ПОЛЬЗОВАТЕЛЬСКОЙ ПРОГРАММЕ.
ЗАПРОС НЕ ПРЕДПРИНИМАЕТ ДЕЙСТВИЙ ВОЗВРАЩЕНИЯ НЕПОСРЕДСТВЕННО
В ПРОГРАММУ ПОЛЬЗОВАТЕЛЯ, ОДНАКО ИСПОЛЬЗОВАНИЕ ЕГО УПРОЩАЕТ
ПОЗЖЕ ПЕРЕХОД, ЕСЛИ ПРОГРАММA БУДЕТ ВЫПОЛНЯТЬСЯ В ОБЛАСТИ
FB.
     ЕСЛИ ПРОГРАММА ВЫПОЛНЯЕТСЯ В СРЕДЕ SJ, МОНИТОР ОЖИДАЕТ
ОКОНЧАНИЯ ЛЮБОГО ВВОДА-ВЫВОДА, ЕСЛИ ИМЕЕТСЯ АКТИВНАЯ ОЧЕРЕДЬ
НЕВЫПОЛНЕННЫХ ЭЛЕМЕНТОВ. В СРЕДЕ FB, КОГДА ПРОГРАММА
ВЫПОЛНЯЕТСЯ, МОНИТОР НЕ ТОЛЬКО ОЖИДАЕТ, ЕСЛИ ИМЕЕТСЯ
АКТИВНАЯ ОЧЕРЕДЬ НЕВЫПОЛНЕННЫХ ЭЛЕМЕНТОВ, НО И ВХОДИТ В
ТОЧКУ ВХОДА ДРАЙВЕРА УСТРОЙСТВА В ТОМ МЕСТЕ, ГДЕ ОН БЫЛ
ПРЕЖДЕВРЕМЕННО ПРЕРВАН. ЕСЛИ ЗАДАНИЕ БЫЛО ПРЕЖДЕВРЕМЕННО
ПРЕРВАНО ПО СУ/C ИЛИ ЕСЛИ ОНО ВЫШЛО НА ЗАПРОС .HRESET,
МОНИТОР SJ ВЫПОЛНЯЕТ АППАРАТНУЮ ОЧИСТКУ ДЛЯ ПРЕКРАЩЕНИЯ
ВВОДА-ВЫВОДА НА ЛЮБОМ УСТРОЙСТВЕ. ЕСЛИ ДЛЯ ДАННОГО
УСТРОЙСТВА НАЗНАЧЕНА АППАРАТУРА, НЕОБХОДИМО УБЕДИТЬСЯ, ЧТО
ПРОИЗОШЕЛ ЧИСТЫЙ ОСТАНОВ, КОГДА ПОЛУЧЕН СИГНАЛ ИНИЦИАЛИЗАЦИИ
КАНАЛА.

     4.5.4. ПОНИЖЕНИЕ ПРИОРИТЕТА ПРОЦЕССОРА: ЗАПРОС .INTEN
     КОГДА ВОЗНИКАЕТ ПРЕРЫВАНИЕ, УПРАВЛЕНИЕ ПЕРЕДАЕТСЯ
ПОДПРОГРАММЕ ОБРАБОТКИ ПРЕРЫВАНИЙ, АДРЕС КОТОРОЙ НАХОДИТСЯ В
ПЕРВОМ СЛОВЕ ВЕКТОРА ПРЕРЫВАНИЯ. В ЭТОЙ ТОЧКЕ ПРИОРИТЕТ
ПРОЦЕССОРА РАВЕН 7, И ВСЕ ОСТАЛЬНЫЕ ПРЕРЫВАНИЯ ЗАПРЕЩАЮТСЯ.
ЕСЛИ ТРЕБУЕТСЯ ЗАПРЕТИТЬ НЕКОТОРЫЕ ПРЕРЫВАНИЯ, ЭТО ОТНОСИТСЯ
К ЭТОМУ КОДУ. ОН ДОЛЖЕН БЫТЬ КРАТОК И ЭФФЕКТИВЕН И НЕ
ДОЛЖЕН РАЗРУШАТЬ СОДЕРЖИМОЕ РЕГИСТРОВ. ЕСЛИ ПОДПРОГРАММА
НУЖДАЕТСЯ В ИСПОЛЬЗОВАНИИ РЕГИСТРОВ, ОНА ДОЛЖНА СОХРАНЯТЬ ИХ
СОДЕРЖИМОЕ И ВОССТАНАВЛИВАТЬ ИХ ПЕРЕД ВЫХОДОМ ИЗ ЗАПРОСА
.INTEN. ЕСЛИ КОД ВЫПОЛНЯЕТСЯ НА ПРИОРИТЕТЕ 7 СЛИШКОМ ДОЛГО,
ПРОИЗОЙДЕТ ПРЕРЫВАНИЕ СИСТЕМЫ В СКРЫТОМ ВИДЕ (МЕРА, КОТОРОЙ
СИСТЕМА БЫСТРО ОТВЕЧАЕТ НА ПРЕРЫВАНИЕ). ХОРОШЕЙ БУДЕТ
ОБРАБОТКА НЕ БОЛЕЕ 50 МИКРОСЕКУНД НА ПРИОРИТЕТЕ 7.
     СЛЕДУЕТ ПОНИЖАТЬ ПРИОРИТЕТ ПРОЦЕССОРА ДЛЯ УСТРОЙСТВА
КАК ТОЛЬКО ВОЗМОЖНО. ЭТО ЗНАЧИТ, ЧТО ТОЛЬКО УСТРОЙСТВА С
ВЫСОКИМ ПРИОРИТЕТОМ БУДУТ СПОСОБНЫ ПРЕРВАТЬ ПОДПРОГРАММУ
ОБРАБОТКИ ПРЕРЫВАНИЙ ДАННОГО УСТРОЙСТВА. ДЛЯ ПОНИЖЕНИЯ
ПРИОРИТЕТА НЕОБХОДИМО ИСПОЛЬЗОВАТЬ ЗАПРОС .INTEN. УКАЗАТЕЛЬ
СТЕКА И ОБЩИЕ РЕГИСТРЫ R0-R5 ДОЛЖНЫ СОДЕРЖАТЬ ТЕ ЖЕ
ЗНАЧЕНИЯ, КОТОРЫЕ УЖЕ СОДЕРЖАЛИСЬ ТАМ ДО ВЫЗОВА ЗАПРОСА
.INTEN, КОГДА ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ ПОКИДАЕТ
ЗАПРОС .INTEN. ЕСЛИ ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ
ЗАПИСАНА НЕ В ПОЗИЦИОННО-НЕЗАВИСИМОМ КОДЕ (PIC), НЕОБХОДИМО
ИСПОЛЬЗОВАТЬ СЛЕДУЮЩИЙ ФОРМАТ:
 .INTEN PRIO
     ЗАПРОС .INTEN ГЕНЕРИРУЕТСЯ В СЛЕДУЮЩИЙ КОД:

        JSR R5,@54
        .WORD ^C<PRIO*40>&340


     ЕСЛИ ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ ИСПОЛЬЗУЕТ
ПОЗИЦИОННО-НЕЗАВИСИМЫЙ КОД (PIC), НЕОБХОДИМО ИСПОЛЬЗОВАТЬ
.INTEN СО ВТОРЫМ АРГУМЕНТОМ, PIC. (АРГУМЕНТ ДОЛЖЕН БЫТЬ В
САМОМ ДЕЛЕ ВСЕМ, ЧЕМ УГОДНО, ТОЛЬКО НЕ ПРОБЕЛОМ.)

 .INTEN PRIO,PIC
     ЭТОТ ЗАПРОС ГЕНЕРИРУЕТСЯ В СЛЕДУЮЩИЙ ПОЗИЦИОННО-НЕЗАВИ-
СИМЫЙ КОД:

        MOV @#54,-(SP)
        JSR R5,@(SP)+
        .WORD ^C<PRIO*40>&340

     ОБА ФОРМАТА ВЫЗЫВАЮТ ПЕРЕХОД К ПОДПРОГРАММЕ МОНИТОРА
INTEN, КОТОРАЯ ПОНИЖАЕТ ПРИОРИТЕТ ПРОЦЕССОРА И В СИСТЕМАХ FB
И XM ПЕРЕКЛЮЧАЕТ РЕЖИМ В СИСТЕМНЫЙ. ЗАТЕМ МОНИТОР ВЫЗЫВАЕТ
ПОДПРОГРАММУ ОБРАБОТКИ ПРЕРЫВАНИЙ КАК СОПОДПРОГРАММУ. R4 И
R5 МОЖНО ИСПОЛЬЗОВАТЬ ПОСЛЕ ВЫХОДА ИЗ ЗАПРОСА. НЕДОПУСТИМО
РАЗРУШЕНИЕ СОДЕРЖИМОГО ЛЮБОГО ДРУГОГО РЕГИСТРА. ЕСЛИ
ТРЕБУЮТСЯ РЕГИСТРЫ R0-R3, НЕОБХОДИМО СОХРАНИТЬ ИХ В СТЕКЕ
ИЛИ ПАМЯТИ И ВОССТАНОВИТЬ ПЕРЕД ОКОНЧАНИЕМ. ЕСЛИ ТРЕБУЕТСЯ
СОХРАНИТЬ ЗНАЧЕНИЯ В ПРОЦЕССЕ РАБОТЫ ЗАПРОСА .INTEN,
НЕОБХОДИМО СОХРАНИТЬ ИХ В ПАМЯТИ ПЕРЕД ВЫЗОВОМ И
ВОССТАНОВИТЬ ПОСЛЕ ВЫХОДА ИЗ НЕГО. ТАКИМ ОБРАЗОМ, ЕСЛИ
СОДЕРЖИМОЕ PS ВАЖНОЕ, ТАКОЕ КАК ЗНАЧЕНИЯ РАЗРЯДОВ УСЛОВИЙ,
СЛЕДУЕТ СОХРАНИТЬ ИХ ПЕРЕД ИСПОЛЬЗОВАНИЕМ ВЫЗОВА .INTEN.
Т.К. .INTEN ВЫЗЫВАЕТ ПЕРЕКЛЮЧЕНИЕ СИСТЕМНОГО СТЕКА В FB И
XM, СЛЕДУЕТ ИЗБЕГАТЬ ЧРЕЗМЕРНОГО ИСПОЛЬЗОВАНИЯ СТЕКА В
ПОДПРОГРАММЕ ОБРАБОТКИ ПРЕРЫВАНИЙ.
     МОЖНО ХРАНИТЬ И ВОССТАНАВЛИВАТЬ РЕГИСТРЫ И PS,
ИСПОЛЬЗУЯ ЯЧЕЙКИ ПАМЯТИ ВМЕСТО СТЕКА.
     ХРАНЕНИЕ В ЯЧЕЙКАХ ПАМЯТИ ДОЛЖНО ПРЕДОХРАНИТЬ
ПОДПРОГРАММУ ПРЕРЫВАНИЙ ОТ ПОВТОРНОГО ВХОДА. ЕСЛИ
ПОДПРОГРАММА БУДЕТ ИСПОЛЬЗОВАТЬСЯ ДЛЯ МНОГИХ УСТРОЙСТВ,
НЕОБХОДИМО ПОЗАБОТИТЬСЯ ПРИ ПЛАНИРОВАНИИ О ПОВТОРНОМ ВХОДЕ.

     4.5.5. ИСПОЛЬЗОВАНИЕ ПРОГРАММНОГО ЗАПРОСА .SYNCH
     ЗАПРОС .SYNCH ПОЛЕЗЕН В СИСТЕМАХ FB И XM. ЕГО ЦЕЛЬ -
УБЕДИТЬСЯ, ЧТО ЗАДАНИЕ ВЫПОЛНЕНО ПРАВИЛЬНО, КОГДА
ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ ВЫПОЛНЯЕТ ПРОГРАММНЫЙ
ЗАПРОС. (В СИСТЕМЕ SJ НЕ РАБОТАЕТ.)

     ЕСЛИ НЕОБХОДИМО ВЫДАТЬ ОДИН ИЛИ НЕСКОЛЬКО ЗАПРОСОВ ИЗ
ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЙ, ПЕРВЫМ ДОЛЖЕН СЛЕДОВАТЬ
ЗАПРОС .SYNCH. ЗАПРОС .INTEN ПЕРЕДАЕТ УПРАВЛЕНИЕ В
СИСТЕМНЫЙ РЕЖИМ, А ПРОГРАММНЫЙ ЗАПРОС .SYNCH МОЖЕТ
ВЫПОЛНЯТЬСЯ ТОЛЬКО В СОСТОЯНИИ ПОЛЬЗОВАТЕЛЯ. ЗАПРОС .SYNCH
САМ ОБСЛУЖИВАЕТ ПЕРЕХОД НАЗАД ПОЛЬЗОВАТЕЛЯ. НИКОГДА НЕ
СЛЕДУЕТ ВЫДАВАТЬ ИЗ ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЙ
ЗАПРОСЫ, ТРЕБУЮЩИЕ USR, ДАЖЕ ПОСЛЕ ИСПОЛЬЗОВАНИЯ .SYNCH.
МОЖНО ТАКЖЕ ИСПОЛЬЗОВАТЬ .SYNCH ПОСЛЕ .FORK. ПРИ
ИСПОЛЬЗОВАНИИ ЗАПРОСА .SYNCH, R0-R3, SP ДОЛЖНЫ СОДЕРЖАТЬ ТЕ
ЖЕ ЗНАЧЕНИЯ, КАКИЕ БЫЛИ ПОСЛЕ ИСПОЛЬЗОВАНИЯ ЗАПРОСА .INTEN.
     В ТАБЛ.5 ПОКАЗАН ФОРМАТ SYNCH-БЛОКА, КОТОРЫЙ РАБОТАЕТ
ПОДОБНО ЭЛЕМЕНТУ ОЧЕРЕДИ ЗАВЕРШЕНИЯ. ИНФОРМАЦИЯ В 7-СЛОВНОМ
SYNCH-БЛОКЕ РАЗМЕЩЕНА ВО ГЛАВЕ СООТВЕТСТВУЮЩЕЙ ОЧЕРЕДИ
ЗАВЕРШЕНИЯ ЗАДАНИЙ. СЛЕДОВАТЕЛЬНО, КОДЫ, СЛЕДУЮЩИE ЗА
 .SYNCH ВЫПОЛНЯЮТСЯ КАК ПОДПРОГРАММА ЗАВЕРШЕНИЯ В РЕЖИМЕ
ПОЛЬЗОВАТЕЛЯ С ПРИОРИТЕТОМ 0. ПОЭТОМУ ПРОГРАММА
ПОЛЬЗОВАТЕЛЯ ДОЛЖНА ЗАПРЕЩАТЬ ПРЕРЫВАНИЯ ПЕРЕД ЗАПРОСОМ
.SYNCH ИЛИ ОНА ДОЛЖНА БЫТЬ ПОДГОТОВЛЕНА ДЛЯ УСТРОЙСТВА,
ЧТОБЫ ПРЕРЫВАНИЕ ОПЯТЬ ВЫПОЛНЯЛОСЬ ПЕРЕД ВЫПОЛНЕНИЕМ .SYNCH.
SYNCH-БЛОК ДОСТУПЕН ДЛЯ ПОВТОРНОГО ИСПОЛЬЗОВАНИЯ, ЕСЛИ
Q.COMP РАВНО 0. МОЖНО ПРОВЕРИТЬ SYNCH-БЛОК ПУТЕМ ПОДАЧИ
СЛЕДУЮЩЕГО ЗАПРОСА .SYNCH. ЕСЛИ УПРАВЛЕНИЕ ПЕРЕДАЕТСЯ К
ВОЗВРАТУ ПО ОШИБКЕ (СЛОВО, СЛЕДУЮЩЕЕ ЗА ВЫЗОВОМ .SYNCH),
ЗНАЧИТ, БЛОК ПО-ПРЕЖНЕМУ ИСПОЛЬЗУЕТСЯ.

                                                  ТАБЛИЦА 5
------------------------------------------------------------
! СМЕЩЕНИЕ !   ИМЯ    !   ВЛАДЕЛЕЦ    !     СОДЕРЖИМОЕ     !
------------------------------------------------------------
!    0     !  Q.LINK  !      --       !  ЗАРЕЗЕРВИРОВАНО   !
!    2     !  Q.CSW   ! ПОЛЬЗОВАТЕЛЬ  !  НОМЕР  ЗАДАНИЯ    !
!    4     !  Q.BLKN  !      --       !  ЗАРЕЗЕРВИРОВАНО   !
!    6     !  Q.FUNK  !      --       !  ЗАРЕЗЕРВИРОВАНО   !
!    10    !  Q.BUFF  ! ПОЛЬЗОВАТЕЛЬ  !  R0 - АРГУМЕНТ ДЛЯ !
!          !          !               !  ПЕРЕХОДА          !
!    12    !  Q.WCNT  ! МОНИТОР       !  -1                !
!    14    !  Q.COMP  ! ПОЛЬЗОВАТЕЛЬ  !  0 ПРИ ТРАНСЛИРО-  !
!          !          !               !  ВАНИИ; МОНИТОР    !
!          !          !               !  ЗАТЕМ СОХРАНЯЕТ   !
!          !          !               !  СОДЕРЖИМОЕ ЭТОГО  !
!          !          !               !  СЛОВА             !
------------------------------------------------------------

     ВООБЩЕ, МОЖЕТ ПРОЙТИ МНОГО ВРЕМЕНИ МЕЖДУ ВЫЗОВОМ .SYNCH
И ВОЗВРАТОМ. СНАЧАЛА МОНИТОР ПЕРЕКЛЮЧАЕТСЯ В РЕЖИМ
ПОЛЬЗОВАТЕЛЯ, И ЗАПРАШИВАЕТСЯ ПЛАН ПЕРЕХОДА ДЛЯ ОПРЕДЕЛЕНИЯ
НАЛИЧИЯ ПЕРЕКЛЧАТЕЛЕЙ КОНТЕКСТА. ЗАТЕМ ПОДПРОГРАММА
ЗАВЕРШЕНИЯ ФОНОВОГО ЗАДАНИЯ ОЖИДАЕТ ВЫЧИСЛЕНИЯ ГРАНИЦЫ
БЛОКИРОВКИ ОСНОВНОГО ЗАДАНИЯ. ЭТО МОЖЕТ ЗАНЯТЬ МНОГО
ВРЕМЕНИ, ПРЕЖДЕ ЧЕМ КОДЫ, СЛЕДУЮЩИЕ ЗА .SYNCH, ДЕЙСТВИТЕЛЬНО
ВЫПОЛНЯТСЯ.
     В КОДЕ СЛЕДУЮЩЕГО ВЫЗОВА .SYNCH R0 И R1 СВОБОДНЫ ДЛЯ
ИСПОЛЬЗОВАНИЯ, Т.К. ОНИ ИМЕЮТСЯ В ЛЮБОЙ ПОДПРОГРАММЕ
ЗАВЕРШЕНИЯ. ОДНАКО НЕОБХОДИМО СОХРАНИТЬ R2-R5, ЕСЛИ
ПОДПРОГРАММА .SYNCH ИСПОЛЬЗУЕТ ИХ. R4 И R5 НЕ СОХРАНЯЮТСЯ
ПРИ ВЫЗОВЕ. ПОЭТОМУ, ЕСЛИ ИХ СОДЕРЖИМОЕ ВАЖНО, НЕОБХОДИМО
СОХРАНИТЬ ИХ В ПАМЯТИ ПЕРЕД ВЫЗОВОМ .SYNCH. МОЖНО
ИСПОЛЬЗОВАТЬ Q.BUFF В SYNCH-БЛОКЕ ДЛЯ ПЕРЕСЫЛКИ ЗНАЧЕНИЯ В
R0 ДЛЯ ПОДПРОГРАММЫ.
     ЗАПРОС .SYNCH ИМЕЕТ НЕОБЫЧНЫЙ ВОЗВРАТ ПО ОШИБКЕ.
ПЕРВОЕ СЛОВО ПОСЛЕ .SYNCH - АДРЕС ВОЗВРАТА ПО ОШИБКЕ, ВТОРОЕ
СЛОВО ПОСЛЕ .SYNCH - ВОЗВРАТ ПРИ УСПЕШНОМ ЗАВЕРШЕНИИ.
     В СРЕДЕ SJ ПОДПРОГРАММЫ, СЛЕДУЮЩИЕ ЗА ВЫЗОВОМ .SYNCH
(ФАКТИЧЕСКИ ПОДПРОГРАММЫ ЗАВЕРШЕНИЯ), БУДУТ ВМОНТИРОВАНЫ
(Т.Е. ОНИ МОГУТ ПРЕРЫВАТЬ ДРУГ ДРУГА). ОНИ ВЫДАЮТСЯ
СЕРИЯМИ В FB И XM. В SJ МЕХАНИЗМ ЗАПРОСА ПОХОЖ НА СХЕМУ FB
И XM, НО НЕ ДЕЛАЕТ ЕГО ДВАЖДЫ.

     4.5.6. ВЫПОЛНЕНИЕ НА FORK-УРОВНЕ: ЗАПРОС .FORK
     ПРОГРАMМНЫЙ ЗАПРОС .FORK ВЫДАЕТ ДРУГОЙ, БОЛЕЕ НИЗКИЙ
ПРИОРИТЕТ ПРОЦЕССОРА. КОГДА ИСПОЛЬЗУЕТСЯ ВЫЗОВ .FORK,
FORK-БЛОК ДОБАВЛЯЕТСЯ К FORK-ОЧЕРЕДИ, КОТОРАЯ ОРГАНИЗОВАНА
FIFO (ПЕРВЫМ ВОШЕЛ, ПЕРВЫМ ВЫШЕЛ). FORK-ПОДПРОГРАММЫ (ВСЕ
КОДЫ, СЛЕДУЮЩИЕ ЗА ЗАПРОСОМ .FORK) ВЫПОЛНЯЮТСЯ В СИСТЕМНОМ
РЕЖИМЕ С ПРИОРИТЕТОМ 0 ПОСЛЕ ОБРАБОТКИ ВСЕХ ПРЕРЫВАНИЙ, НО
ПЕРЕД ПЕРЕХОДОМ В РЕЖИМ ПОЛЬЗОВАТЕЛЯ. ПЕРЕКЛЮЧЕНИЕ
КОНТЕКСТОВ ЗАПРЕЩЕНО ВО ВРЕМЯ ВЫПОЛНЕНИЯ FORK-ПОДПРОГРАММ.
     R4 И R5 СОХРАНЯЮТСЯ ВО ВРЕМЯ ВЫЗОВА .FORK. КРОМЕ ТОГО,
R0-R3 МОЖНО ИСПОЛЬЗОВАТЬ ПОСЛЕ ЗАПРОСА .FORK. ПОДОБНО
.SYNCH, ЗАПРОС .FORK ПРЕДПОЛАГАЕТ, ЧТО R0-R3 И SP НЕ
ИЗМЕНЯЮТСЯ ПОСЛЕ ВОЗВРАЩЕНИЯ ИЗ ЗАПРОСА .INTEN НЕДОПУСТИМО
ИСПОЛЬЗОВАНИЕ ЗАПРОСА .FORK БЕЗ ПРЕДВАРИТЕЛЬНОГО ЗАПРОСА
.INTEN.
     НЕОБХОДИМО ПРЕДОСТАВИТЬ 4-СЛОВНЫЙ БЛОК ПАМЯТИ ДЛЯ
ЭЛЕМЕНТА FORK-ОЧЕРЕДИ, НИЖНИЕ ТРИ СЛОВА СОДЕРЖАТ R4, R5 И
АДРЕС ВОЗВРАТА PC. ПЕРВОЕ СЛОВО - СЛОВО СВЯЗИ, КОТОРОЕ
ДОЛЖНО БЫТЬ 0, КОГДА ВЫДАЕТСЯ ЗАПРОС .FORK. Т.К.
ПОДПРОГРАММУ .FORK НЕ СЛЕДУЕТ ПЕРЕЗАПУСКАТЬ, НЕОБХОДИМО
УБЕДИТЬСЯ, ЧТО УСТРОЙСТВО НЕ МОЖЕТ БЫТЬ ПРЕРВАНО МЕЖДУ
МОМЕНТОМ ВЫДАЧИ .FORK И МОМЕНТОМ НАЧАЛА ВЫПОЛНЕНИЯ
ПОДПРОГРАММЫ (КОДЫ, СЛЕДУЮЩИЕ ЗА ВЫЗОВОМ).
     НЕДОПУСТИМО ПОВТОРНОЕ ИСПОЛЬЗОВАНИЕ FORK-БЛОКА, ПОКА
РАБОТАЕТ ПОДПРОГРАММА .FORK. ПРЕДПОЛАГАЕТСЯ, ЧТО FORK-БЛОК
ЯВЛЯЕТСЯ СВОБОДНЫМ, КОГДА ВЫЗОВ, КОТОРЫЙ ИСПОЛЬЗОВАЛ ЕГО,
ВОЗВРАЩАЕТСЯ. ТАБЛ.6 ИЛЛЮСТРИРУЕТ СОДЕРЖИМОЕ FORK-БЛОКА.

                                                  ТАБЛИЦА 6 
------------------------------------------------------------
! СМЕЩЕНИЕ !   ИМЯ    !   ВЛАДЕЛЕЦ    !     СОДЕРЖИМОЕ     !
------------------------------------------------------------
!    0     !  F.BLNK  !   МОНИТОР     !  СЛОВО  СВЯЗИ      !
!    2     !  F.BADR  !   МОНИТОР     !  АДРЕС ПОДПРОГРАММЫ!
!          !          !               !  .FORK             !
!    4     !  F.BR5   !   МОНИТОР     !  ОБЛАСТЬ ХРАНЕНИЯ  !
!          !          !               !  R5                !
!    6     !  F.BR4   !   МОНИТОР     !  ОБЛАСТЬ ХРАНЕНИЯ  !
!          !          !               !  R4                !
------------------------------------------------------------

     ОБЫЧНО ЗАПРОС .FORK ИСПОЛЬЗУЕТСЯ В ДРАЙВЕРАХ УСТРОЙСТВ.
ЧТОБЫ ИСПОЛЬЗОВАТЬ ЕГО В ПОДПРОГРАММЕ ОБРАБОТКИ ПРЕРЫВАНИЙ,
НЕОБХОДИМО СНАЧАЛА УСТАНОВИТЬ УКАЗАТЕЛЬ, НАЗЫВАЕМЫЙ $FKPTR.
РЕКОМЕНДУЕТСЯ СДЕЛАТЬ ЭТО В ОСНОВНОЙ ПРОГРАММЕ СЛЕДУЮЩИМ
ОБРАЗОМ:

        MOV @#54,R4
        ADD 402(R4),R4
        MOV R4,$FKPTR
        .
        .
        .
$FKPTR: .WORD 0
XXFBLK: .WORD 0,0,0,0

     ЗАТЕМ В ПОДПРОГРАММЕ ОБРАБОТКИ ПРЕРЫВАНИЙ МОЖНО
ИСПОЛЬЗОВАТЬ ОБЫЧНУЮ ФОРМУ ЗАПРОСА .FORK:
     .FORK XXFBLK
     МАКРОРАСШИРЕНИЕ ЗАПРОСА .FORK ВЫГЛЯДИТ СЛЕДУЮЩИМ
ОБРАЗОМ:

        JSR R5,@$FKPTR
        .WORD XXFBLK-.

     В СИСТЕМЕ SJ ЗАПРОС .FORK НЕ ПОДДЕРЖИВАЕТСЯ, ЕСЛИ НЕ
ВЫБРАНА ПОДДЕРЖКА ТАЙМЕРА ВО ВРЕМЯ ГЕНЕРАЦИИ СИСТЕМЫ.
ВМЕСТО ЭТОГО МОНИТОР МОДЕЛИРУЕТ ПРОЦЕСС ПУТЕМ СОХРАНЕНИЯ
R0-R3 ПЕРЕД ВЫЗОВОМ ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЙ.
йЗАТЕМ ОН НЕ ПЫТАЕТСЯ ВЫДАВАТЬ СЕРИИ FORK-ПОДПРОГРАММ. В
ПОДПРОГРАММЕ ОБРАБОТКИ ПРЕРЫВАНИЙ НЕТ СВОБОДНЫХ ДЛЯ
ИСПОЛЬЗОВАНИЯ РЕГИСТРОВ ПЕРЕД ВЫЗОВОМ .INTEN. ПОСЛЕ ВЫЗОВА
.INTEN МОЖНО ИСПОЛЬЗОВАТЬ РЕГИСТРЫ R4 И R5.
     ЗАПРОС .FORK ИМЕЕТ РАЗЛИЧНЫЕ ПРИМЕНЕНИЯ В СИСТЕМАХ
РЕАЛЬНОГО ВРЕМЕНИ, T.K. ОН ДОПУСКАЕТ ОТКЛАДЫВАТЬ ОБРАБОТКУ
РАСТЯНУТЫХ, НО НЕ КРИТИЧЕСКИХ ПО ВРЕМЕНИ ПРЕРЫВАНИЙ, ПОКА НЕ
БУДУТ ОБРАБОТАНЫ ВСЕ ДРУГИЕ ПРЕРЫВАНИЯ.
     ПОНИЖЕНИЕ ПРИОРИТЕТА ПРИВОДИТ К ПРОБЛЕМАМ В ДРАЙВЕРАХ
ДРУГИХ УСТРОЙСТВ, КОТОРЫЕ БУДУТ ПЕРЕЗАПУСКАТЬСЯ.
ИСПОЛЬЗОВАНИЕ .SYNCH НЕ ВСЕГДА РЕШАЕТ ПРОБЛЕМУ, МОНИТОР SJ
ТОЛЬКО МОДЕЛИРУЕТ .SYNCH И СБРАСЫВАЕТ ПРИОРИТЕТ К 0, КОТОРЫЙ
ПРИВОДИТ К ТЕМ ЖЕ ПРОБЛЕМАМ ПЕРЕЗАПУСКА ДРАЙВЕРОВ. МОНИТОР
FB ДОЛЖЕН ВЫПОЛНИТЬ ПЕРЕКЛЮЧЕНИЕ КОНТЕКСТА ПОСЛЕ ВОЗВРАТА ИЗ
.SYNCH В РЕЖИМ ПОЛЬЗОВАТЕЛЯ, ВЫПОЛНЯЕМЫЙ В СТЕКЕ
ПОЛЬЗОВАТЕЛЯ. ПЕРЕКЛЮЧЕНИЕ КОНТЕКСТА - ДЛИТЕЛЬНЫЙ ПРОЦЕСС И
НЕ ПРОХОДИТ ДО КОНЦА, ЕСЛИ ИДЕТ ЗАВЕРШЕНИЕ ОСНОВНОГО
ЗАДАНИЯ.
     ЗАПРОС .FORK РЕШАЕТ ПРОБЛЕМУ. ОН ВОЗВРАЩАЕТСЯ НА
ПРИОРИТЕТ 0, ТОЛЬКО КОГДА ВСЕ ДРУГИЕ ПРЕРЫВАНИЯ УЖЕ
ОБРАБОТАНЫ, НО ПЕРЕД ПЕРЕДАЧЕЙ УПРАВЛЕНИЯ В ПРЕРВАННУЮ
ПРОГРАММУ ПОЛЬЗОВАТЕЛЯ.

     4.5.7. ИТОГ ПО .INTEN, .FORK И .SYNCH
     ТАБЛ.7 ОБОБЩАЕТ ДЕЙСТВИЯ ВЫЗОВОВ .INTEN, .FORK И
.SYNCH. РИС.5 ПОКАЗЫВАЕТ СОСТОЯНИЕ РЕГИСТРОВ ДЛЯ КАЖДОГО
ВЫЗОВА.

                                                   ТАБЛИЦА 7
------------------------------------------------------------
!        !           !         ! РЕГИСТРЫ,     ! ДАННЫЕ,   !
! МАКРО- !   НОВЫЙ   !  НОВЫЙ  ! ДОСТУПНЫЕ ДЛЯ ! СОХРАНЯЮ- !
! ВЫЗОВ  ! ПРИОРИТЕТ !  СТЕК   ! ИСПОЛЬЗОВАНИЯ ! ЩИЕСЯ ПРИ !
!        !           !         ! ПОСЛЕ ВЫЗОВА  ! ВЫЗОВЕ    !
------------------------------------------------------------
! .INTEN ! УСТРОЙСТВА! СИСТЕМ- !   R4, R5      !   НЕТ     !
!        !           ! НЫЙ     !               !           !
! .FORK  !     0     ! СИСТЕМ- !   R0 - R5     !   R4, R5  !
!        !           ! НЫЙ     !               !           !
! .SYNCH !     0     ! ПОЛЬЗО- !   R0, R1      !     R0    !
!        !           ! ВАТЕЛЯ  !               !           !
------------------------------------------------------------

 ОПЕРАЦИЯ       R0       R1      R2      R3     R4     R5
----------    ----------------------------------------------
        !
        !     I----------- СОДЕРЖИМОЕ НЕИЗВЕСТНО ---------I
        V       !        !       !       !      !      !
 ПРЕРЫВАНИЕ ----!--------!-------!-------!------!------!--- 
        !       !        !       !       !      !      !
        !       V        V       V       V      V      V
        !     I---------- СОХРАНИТЬ/ВОССТАНОВИТЬ, --------I
        !                 ЕСЛИ НЕОБХОДИМО       !      !
        V       !        !       !       !      V      V
     .INTEN ----!--------!-------!-------!------------------
        !       !        !       !       !  I-- СВОБОДНО --I
        !       !        !       !       !        ДЛЯ 
        !       V        V       V       V    ИСПОЛЬЗОВАНИЯ
        !     I-- СООХРАНИТЬ/ВОССТАНОВИТЬ--I    !  ----!----
        !       !        !       !       !      !  !   !  !!
        !       !        !       !       !      !<-!   !<-!!
        V       V        V       V       V      !      !   !
     .FORK  ------------------------------------!------!-- !
        !                                       !      !   !
        !                                       V      V   !
        !     I------------- СВОБОДНО  ДЛЯ --------------I !
        !       !        !   ИСПОЛЬЗОВАНИЯ      !      !   !
        !       !        !       !       !      !      !   !
        !       !        !       !       !      !      !   !
        V       V        V       V       V      V      V   !
     .SYNCH ---------------------------------------------- !
        !   /\                                             !
        !   ! I---СВОБОДНО---I I--СОХРАНИТЬ/ВОССТАНОВИТЬ--I!
        !   !   !        !       !       !      !      !   !
        !   !   !        !       !       !      !      !   !
        V   !   V        V       V       V      V      V   !
            !                                              !
       ЗАГРУЖЕНО                                    СОДЕРЖАТ
        ДАННЫМИ                                     ДАННЫЕ 
       ПОЛЬЗОВА-                                   ПОЛЬЗОВА-
        ТЕЛЯ                                         ТЕЛЯ 

                          РИС.5

     4.5.8. ВЫХОД ИЗ ОБРАБОТКИ ПРЕРЫВАНИЯ: RTS PC
     ЗАПРОС .INTEN ЗАСТАВЛЯЕТ МОНИТОР ВЫЗЫВАТЬ ПОДПРОГРАММУ
ОБРАБОТКИ ПРЕРЫВАНИЙ КАК СОПОДПРОГРАММУ. В КОНЦЕ ЭТОЙ
ПОДПРОГРАММЫ, ДЛЯ ВЫХОДА ИЗ НЕЕ НЕОБХОДИМО ИСПОЛЬЗОВАТЬ
ИНСТРУКЦИЮ RTS PC, ПО КОТОРОЙ УПРАВЛЕНИЕ ВОЗВРАЩАЕТСЯ В
МОНИТОР, КОТОРЫЙ ВОССТАНАВЛИВАЕТ R4, R5 И ВЫПОЛНЯЕТ КОМАНДУ
RTI.
     АНАЛОГИЧНО ОСУЩЕСТВЛЯЕТСЯ ВЫХОД ИЗ ПОДПРОГРАММ С
ПОМОЩЬЮ КОМАНДЫ RTS PC .FORK И .SYNCH. СТЕК ДОЛЖЕН БЫТЬ
ТАКИМ ЖЕ, ЧТО И ПЕРЕД ВХОДОМ, И РЕГИСТРЫ ДОЛЖНЫ ИМЕТЬ
НАЧАЛЬНЫЕ ЗНАЧЕНИЯ.
     4.6. СХЕМАТИЧЕСКАЯ КОНСТРУКЦИЯ ПОДПРОГРАММЫ ОБРАБОТКИ
ПРЕРЫВАНИЙ
     В ПРИМЕРЕ, ПРИВЕДЕННОМ НИЖЕ, ПОКАЗАНА ОСНОВНАЯ
ПРОГРАММА, КОТОРАЯ СОДЕРЖИТ ВНУТРЕННЮЮ ПОДПРОГРАММУ
ОБРАБОТКИ ПРЕРЫВАНИЙ. ЭТА ПРОГРАММА ПРЕДСТАВЛЯЕТ НЕКОТОРЫЕ
ЗАДАЧИ ИНИЦИАЛИЗАЦИИ И ПРИОСТАНАВЛИВАЕТ СЕБЯ. КОГДА ДАННЫЕ
ПОСТУПАЮТ С ПЕРИФЕРИЙНОГО УСТРОЙСТВА, ПОДПРОГРАММА ОБРАБОТКИ
ПРЕРЫВАНИЙ СОБИРАЕТ ИХ. КОГДА ВСЕ ДАННЫЕ СОБРАНЫ,
ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ ПРОДОЛЖАЕТ ОСНОВНУЮ
ПРОГРАММУ, КОТОРАЯ МОЖЕТ ПОТОМ ОБРАБАТЫВАТЬ НОВУЮ ИНФОРМАЦИЮ
ДО ТЕХ ПОР, ПОКА СНОВА НЕ ПРИОСТАНОВИТ СЕБЯ. ВЫПОЛНЕНИЕ
ОСНОВНОЙ ПРОГРАММЫ МОЖЕТ ВКЛЮЧАТЬ НЕКОТОРУЮ ОБРАБОТКУ НОВЫХ
ДАННЫХ ИЛИ ЗАПИСЬ ДАННЫХ В ФАЙЛ, ИСПОЛЬЗУЕМЫЙ ФОНОВЫМ
ЗАДАНИЕМ АНАЛИЗА ДАННЫХ. Т.К. ЭТОТ ПРИМЕР ДОВОДИТ НОМЕР
ЗАДАНИЯ ДО 2-Х, ОН НЕ МОЖЕТ НОРМАЛЬНО ВЫПОЛНЯТЬСЯ В СИСТЕМЕ,
ИМЕЮЩЕЙ ПРИЗНАК СИСТЕМНОГО ЗАДАНИЯ.
     В ПРИМЕРЕ XX - ДВУХСИМВОЛЬНОЕ ИМЯ УСТРОЙСТВА.
     ПРИМЕР:
** ОСНОВНАЯ ПРОГРАММА **

        XXVEC=VVV ;ВЕКТОР УСТРОЙСТВА
        PR7=340 ;ПРИОРИТЕТ 7
        DEVPRI=5 ;ПРИОРИТЕТ УСТРОЙСТВА
                                ;РАВЕН 5
                                ;(0-7, НО НЕ 000-340)
        XXCSR=NNNNN ;РЕГИСТР СОСТОЯНИЯ
                                ;УСТРОЙСТВА
        IENABLE=100 ;РАЗРЯД РАЗРЕШЕНИЯ
                                ;ПРЕРЫВАНИЯ
START: .PROTECT #LIST,#XXVEC ;ЗАЩИТА ВЕКТОРА
        BCS ERROR ;ОБРАБОТКА ОШИБКИ .PROTECT
        MOV #ISREP,@#XXVEC ;УСТАНОВКА ПЕРВОГО СЛОВА
                                ;ВЕКТОРА
        MOV #PR7,@#XXVEC+2 ;УСТАНОВКА ВТОРОГО СЛОВА
                                ;ВЕКТОРА
        .DEVICE #LIST,#DEVLST ;БЛОКИРОВАТЬ УСТРОЙСТВО ОТ
                                ;ВЫХОДА ИЛИ ПРЕЖДЕВРЕМЕННОГО
                                ;ПРЕРЫВАНИЯ
;
;СТРОКИ КОДА ИНИЦИАЛИЗИРУЮТ ВХОДНЫЕ БУФЕРЫ В ПОДПРОГРАММЕ
;ОБРАБОТКИ;
;ИНИЦИАЛИЗИРУЮТ ДРУГИЕ УКАЗАТЕЛИ И ПРИЗНАКИ
;
SPND: BIS #IENABL,@#XXCSR ;РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ
        .SPND ;ОЖИДАНИЕ ПОЯВЛЕНИЯ
                                ;НЕКОТОРЫХ ДАННЫХ
;
;СТРОКИ КОДА ХРАНЯТ ДАННЫЕ;
;ПЕРЕУСТАНАВЛИВАЮТСЯ НЕКОТОРЫЕ ПРИЗНАКИ
;
        BR SPND ;ОЖИДАЮТСЯ ДРУГИЕ ДАННЫЕ
DEVLST: .WORD XXCSR ;СПИСОК ДЛЯ .DEVICE
        .WORD 0
        .WORD 0
LIST: .BLKW 3 ;БЛОК АРГУМЕНТОВ EMT
ERROR: . ;ПОДПРОГРАММЫ ДЛЯ ОБРАБОТКИ
                                ;ОШИБОК
        .
        .
              ** ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ **

ISPEP: . ;ТОЧКА ВХОДА ПРЕРЫВАНИЯ;
        . ;ПРИОРИТЕТ РАВЕН 7
        .
        .INTEN DEVPRI ;НО НЕ #DEVPRI.
                                ;ПОНИЖАЕТСЯ ДО ПРИОРИТЕТА
                                ;УСТРОЙСТВА; В ДАННОМ СЛУ-
                                ;ЧАЕ, В СИСТЕМНОМ РЕЖИМЕ,
                                ;ДОСТУПНЫ R4 И R5
;
;ЕСЛИ ЕСТЬ ДРУГИЕ ДАННЫЕ ДЛЯ ВЫБОРКИ:
;
        BR RETURN
;
;ЕСЛИ НЕТ БОЛЬШЕ ДАННЫХ ДЛЯ ВЫБОРКИ:
;
        .SYNCH #SYNBLK ;ВОЗВРАТ В ОСНОВНУЮ
                                ;ПРОГРАММУ ДЛЯ ОБРАБОТКИ
                                ;ДАННЫХ
        BR SYNERR ;ВОЗВРАТ ПО ОШИБКЕ .SYNCH
        .RSUM ;ВОЗОБНОВЛЕНИЕ ОСНОВНОЙ
                                ;ПРОГРАММЫ
RETURN: RTS PC ;ОЖИДАНИЕ СЛЕДУЮЩЕГО
                                ;ПРЕРЫВАНИЯ
        .
        .
        .
SYNBLK: .WORD 0,2,0,0,0,-1,0 ;ЗДЕСЬ: 2 - НОМЕР ОСНОВНОГО
                                ;ЗАДАНИЯ
SYNERR: ;ОБРАБОТКА ОШИБОК .SYNCH


              5. ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ

     5.1. ТАЙМ-АУТ УСТРОЙСТВА ВВОДА-ВЫВОДА
     ИСПОЛЬЗУЯ ДОПОЛНИТЕЛЬНОЕ СРЕДСТВО, ТАЙМ-АУТ УСТРОЙСТВА,
ДРАЙВЕР МОЖЕТ НАЗНАЧИТЬ ПОДПРОГРАММУ ЗАВЕРШЕНИЯ, КОТОРАЯ
БУДЕТ ВЫПОЛНЯТЬСЯ, ЕСЛИ ПРЕРЫВАНИЕ НЕ ВОЗНИКЛО В УКАЗАННЫЙ
ИНТЕРВАЛ ВРЕМЕНИ. ТАКИМ ОБРАЗОМ, ДРАЙВЕР МОЖЕТ ВЫПОЛНЯТЬ
ПОДПРОГРАММУ ЗАВЕРШЕНИЯ ПО ИСТЕЧЕНИИ ЭТОГО ИНТЕРВАЛА ВРЕМЕНИ
БЕЗ ВЫЗОВА .SYNCH И СООТВЕТСТВУЮЩЕЙ ЕМУ ПОТЕНЦИАЛЬНОЙ
ЗАДЕРЖКИ.
     ВЫБОР СРЕДСТВА ТАЙМ-АУТА ПРОИЗВОДИТСЯ ВО ВРЕМЯ
ГЕНЕРАЦИИ СИСТЕМЫ. ТАЙМ-АУТ ИСПОЛЬЗУЕТСЯ ЧАСТИЧНО В
МУЛЬТИ-ТЕРМИНАЛЬНОМ МОНИТОРЕ СИСТЕМЫ ФОДОС-2. ПАРАМЕТР
АВТОМАТИЧЕСКИ ВКЛЮЧЕН В СИСТЕМУ, ЕСЛИ ВЫБРАНА
МУЛЬТИ-ТЕРМИНАЛЬНАЯ ПОДДЕРЖКА. В ПРОТИВНОМ СЛУЧАЕ, ЕСЛИ ЭТО
СРЕДСТВО ИСПОЛЬЗУЕТСЯ В ДРАЙВЕРЕ, НЕОБХОДИМО ВКЛЮЧИТЬ ЕГО ВО
ВРЕМЯ ГЕНЕРАЦИИ СИСТЕМЫ.
     ДЛЯ ОБЕСПЕЧЕНИЯ ТАЙМ-АУТА УСТРОЙСТВА В СИСТЕМЕ ФОДОС-2
ПРЕДУСМОТРЕНЫ ДВА ЗАПРОСА: .TIMIO И .CTIMIO. ОНИ ДОСТУПНЫ
ТОЛЬКО ДРАЙВЕРАМ УСТРОЙСТВ. ЕСЛИ ПРИ ТРАНСЛЯЦИИ ФАЙЛА
ДРАЙВЕРА В УСЛОВИИ TIM$IT РАВЕН 1, ТО ЗАПРОС .DRDEF ВЫДАЕТ
ДИРЕКТИВУ .MCALL ДЛЯ ЗАПРОСОВ .TIMIO И .CTIMIO.

     5.1.1. ЗАПРОС .TIMIO
     ЗАПРОС .TIMIO ИСПОЛЬЗУЕТСЯ В СЕКЦИИ ИНИЦИИРОВАНИЯ
ВВОДА-ВЫВОДА ДЛЯ ФОРМИРОВАНИЯ ВЫЗОВА ТАЙМ-АУТА. ЭТОТ ЗАПРОС
МОЖЕТ РАСПОЛАГАТЬСЯ В ЛЮБОМ МЕСТЕ ДРАЙВЕРА, КРОМЕ УРОВНЯ
ПРЕРЫВАНИЯ. ЕСЛИ НЕОБХОДИМО ВЫДАТЬ ЗАПРОС НА УРОВНЕ
ПРЕРЫВАНИЯ, ТО СНАЧАЛА ДОЛЖЕН СЛЕДОВАТЬ ЗАПРОС .FORK.
     ЗАПРОС .TIMIO ПЛАНИРУЕТ ВЫПОЛНЕНИЕ ПОДПРОГРАММЫ
ЗАВЕРШЕНИЯ ПОСЛЕ ИСТЕЧЕНИЯ УКАЗАННОГО ИНТЕРВАЛА ВРЕМЕНИ.
ПОДПРОГРАММА ЗАВЕРШЕНИЯ ВЫПОЛНЯЕТСЯ В КОНТЕКСТЕ ЗАДАНИЯ,
УКАЗАННОГО В БЛОКЕ ТАЙМЕРА. В XM-СИСТЕМЕ ПОДПРОГРАММА
ЗАВЕРШЕНИЯ ВЫПОЛНЯЕТСЯ С ВНУТРЕННИМ ОТОБРАЖЕНИЕМ, ТАК КАК
ОНА ЯВЛЯЕТСЯ ЧАСТЬЮ ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЙ. КАК
ОБЫЧНО, RO И R1 ИСПОЛЬЗУЮТСЯ В ПОДПРОГРАММАХ ЗАВЕРШЕНИЯ.
КОГДА ВВОДИТСЯ ПОДПРОГРАММА ЗАВЕРШЕНИЯ, RO СОДЕРЖИТ
ПОСЛЕДОВАТЕЛЬНОЕ ЧИСЛО ЗАПРОСОВ ТАЙМ-АУТА.
     ТАК КАК ДЛЯ ВЫДАЧИ ЗАПРОСА .TIMIO ИЛИ .CTIMIO
НЕОБХОДИМО ПЕРЕХОДИТЬ К FORK-УРОВНЮ (НУЛЕВОМУ ПРИОРИТЕТУ
ПРОЦЕССОРА), ДРАЙВЕР ДОЛЖЕН ЗАПРЕТИТЬ ПРЕРЫВАНИЕ УСТРОЙСТВА
ПЕРЕД ИСПОЛЬЗОВАНИЕМ .FORK, ИЛИ ДОЛЖЕН БЫТЬ ТЩАТЕЛЬНО
ЗАКОДИРОВАН ВО ИЗБЕЖАНИЕ ПРОБЛЕМЫ ПОВТОРНОГО ВВОДА.
ЗАПРЕЩЕНО ПОВТОРНО ИСПОЛЬЗОВАТЬ БЛОК ТАЙМЕРА, ПОКА НЕ
ИСЧЕЗНЕТ ЭЛЕМЕНТ ТАЙМЕРА И НЕ БУДЕТ ВВЕДЕНА ПОДПРОГРАММА
ЗАВЕРШЕНИЯ, ИЛИ ПОКА ЭЛЕМЕНТ ТАЙМЕРА НЕ БУДЕТ УСПЕШНО
УСТРАНЕН.
     ФОРМАТ ЗАПРОСА .TIMIO СЛЕДУЮЩИЙ:
     .TIMIO TBK,HI,LO
ГДЕ TBK - АДРЕС БЛОКА ТАЙМЕРА, СЕМИСЛОВНОГО ПСЕВДОЭЛЕМЕНТА
           ОЧЕРЕДИ ТАЙМЕРА; НЕЛЬЗЯ ИСПОЛЬЗОВАТЬ НОМЕРНОЙ
 ЗНАК (#) ПЕРЕД TBK;
      HI - КОНСТАНТА, ОБОЗНАЧАЮЩАЯ СТАРШЕЕ СЛОВО
           ДВУХСЛОВНОГО ИНТЕРВАЛА ВРЕМЕНИ;
      LO - КОНСТАНТА, ОБОЗНАЧАЮЩАЯ МЛАДШЕЕ СЛОВО
           ДВУХСЛОВНОГО ИНТЕРВАЛА ВРЕМЕНИ.
     ФОРМАТ БЛОКА ТАЙМЕРА ПОКАЗАН В ТАБЛ.8.

                                                  ТАБЛИЦА 8
------------------------------------------------------------
! СМЕЩЕНИЕ !  ИМЯ  ! ВЛАДЕЛЕЦ !         ЗНАЧЕНИЕ           !
------------------------------------------------------------
!    0     ! C.HOT ! .TIMIO   ! СТАРШЕЕ  СЛОВО  ВРЕМЕНИ    !
!    2     ! C.LOT ! .TIMIO   ! МЛАДШЕЕ  СЛОВО  ВРЕМЕНИ    !
!    4     !C.LINK ! МОНИТОР  ! СВЯЗЬ СО СЛЕДУЮЩИМ ЭЛЕМЕН- !
!          !       !          ! ТОМ ОЧЕРЕДИ; 0 ПОКАЗЫВАЕТ  !
!          !       !          ! ОТСУТСТВИЕ ЭЛЕМЕНТА        !
!    6     !C.JNUM ! ПОЛЬЗОВ. ! НОМЕР ЗАДАНИЯ ВЛАДЕЛЬЦА;   !
!          !       !          ! ПЕРЕДАЕТСЯ ИЗ ЭЛЕМЕНТА     !
!          !       !          ! ОЧЕРЕДИ                    !
!    10    ! C.SEQ ! ПОЛЬЗОВ. ! НОМЕР ЗАПРОСА ТАЙМЕРА.     !
!          !       !          ! ДОПУСТИМЫЙ ДИАПАЗОН ИСПОЛЬ-!
!          !       !          ! ЗОВАНИЯ НОМЕРОВ ОТ 177000  !
!          !       !          ! ДО 177377                  !
!    12    ! C.SYS ! МОНИТОР  ! -1                         !
!    14    !C.COMP ! ПОЛЬЗОВ. ! АДРЕС ПОДПРОГРАММЫ ЗАВЕРШЕ-!
!          !       !          ! НИЯ, КОТОРАЯ БУДЕТ ВЫПОЛ-  !
!          !       !          ! НЯТЬСЯ, ЕСЛИ ВОЗНИКНЕТ     !
!          !       !          ! ТАЙМ-АУТ. МОНИТОР ОБНУЛЯЕТ !
!          !       !          ! ЭТО СЛОВО, КОГДА ВЫЗЫВАЕТ  !
!          !       !          ! ПОДПРОГРАММУ ЗАВЕРШЕНИЯ,   !
!          !       !          ! ПОКАЗЫВАЯ, ЧТО БЛОК ТАЙМЕРА!
!          !       !          ! ИМЕЕТСЯ В НАЛИЧИИ ДЛЯ ПОВ- !
!          !       !          ! ТОРНОГО ИСПОЛЬЗОВАНИЯ      !
------------------------------------------------------------

     ХОТЯ ЗАПРОС .TIMIO ПЕРЕМЕЩАЕТ СТАРШЕЕ И МЛАДШЕЕ СЛОВА
ВРЕМЕНИ В БЛОК ТАЙМЕРА, НЕОБХОДИМО ОБОЗНАЧАТЬ ИХ ПРАВИЛЬНО
ПРИ МАКРОВЫЗОВЕ. ИНТЕРВАЛ ВРЕМЕНИ ВЫРАЖАЕТСЯ В ТИКАХ.
ИМЕЕТСЯ 50 ДЕСЯТИЧНЫХ ТИКОВ.
     МЛАДШЕЕ СЛОВО ВРЕМЕНИ ВМЕЩАЕТ ЗНАЧЕНИЕ ДО 65535 ТИКОВ.
ЭТО ЭКВИВАЛЕНТНО ПРИБЛИЗИТЕЛЬНО 1310 СЕК. ИЛИ
ПРИБЛИЗИТЕЛЬНО 21,8 МИН.. ЕСЛИ НЕОБХОДИМО УКАЗАТЬ ИНТЕРВАЛ
ВРЕМЕНИ В 21,8 МИНУТАХ И МЕНЕЕ, ТО АРГУМЕНТ HI ДОЛЖЕН
СОДЕРЖАТЬ 0, И АРГУМЕНТ LO В ЗАПРОСЕ .TIMIO ДОЛЖЕН СОДЕРЖАТЬ
ЧИСЛО ТИКОВ.
     ЕСЛИ НЕОБХОДИМО УКАЗАТЬ ИНТЕРВАЛ ВРЕМЕНИ
ПРОДОЛЖИТЕЛЬНЕЕ, ЧЕМ 21,8 МИН., ТО СТАРШЕЕ СЛОВО ДОЛЖНО БЫТЬ
ПРЕДСТАВЛЕНО В ВИДЕ СЛОВА ПЕРЕНОСА. КАЖДЫЙ ИНТЕРВАЛ,
ПРОДОЛЖИТЕЛЬНОСТЬЮ 21,8 МИН., ВЫЗЫВАЕТ ПЕРЕНОС 1 В СТАРШЕЕ
СЛОВО. ПОЭТОМУ, ДЛЯ ОБОЗНАЧЕНИЯ ИНТЕРВАЛА, ЧУТЬ БОЛЬШЕГО,
ЧЕМ 21,8 МИН., НЕОБХОДИМО ОПРЕДЕЛЯТЬ 1 ДЛЯ АРГУМЕНТА HI И 0
ДЛЯ АРГУМЕНТА LO. ДЛЯ ОБОЗНАЧЕНИЯ 43,6 МИН. В АРГУМЕНТ HI
ПЕРЕМЕЩАЕТСЯ 2, 0 - В АРГУМЕНТ LO И Т.Д. ТАК КАК
ДВУХСЛОВНОЕ ВРЕМЯ ПОЗВОЛЯЕТ ПОКАЗАТЬ ДО 65565 ЕДИНИЦ, КАЖДАЯ
ДЛИНОЙ В 21,8 МИН., ТО САМЫЙ БОЛЬШОЙ ИНТЕРВАЛ, КОТОРЫЙ МОЖНО
УКАЗАТЬ, РАВЕН 2,7 ГОДА.
     ЕДИНСТВЕННЫМИ ИНФОРМАЦИОННЫМИ СЛОВАМИ, КОТОРЫЕ
НЕОБХОДИМО УСТАНОВИТЬ В БЛОКЕ ТАЙМЕРА, ЯВЛЯЮТСЯ НОМЕР
ЗАДАНИЯ, ПОСЛЕДОВАТЕЛЬНЫЙ НОМЕР И АДРЕС ПОДПРОГРАММЫ
ЗАВЕРШЕНИЯ. НОМЕР ЗАДАНИЯ ПОЛУЧАЕТСЯ ИЗ ТЕКУЩЕГО ЭЛЕМЕНТА
ОЧЕРЕДИ И, ЗАТЕМ, ПОМЕЩАЕТСЯ В БЛОК ТАЙМЕРА. НЕОБХОДИМО
НАЗНАЧИТЬ ПОСЛЕДОВАТЕЛЬНЫЙ НОМЕР, НАЧИНАЯ С 177000, И МОЖНО
РАБОТАТЬ ДО САМОГО ВЫСШЕГО НОМЕРА ПОСЛЕДОВАТЕЛЬНОСТИ,
177377. НОМЕР ЗАДАНИЯ И ПОСЛЕДОВАТЕЛЬНЫЙ НОМЕР ПЕРЕДАЮТСЯ
ПОДПРОГРАММОЙ ЗАВЕРШЕНИЯ, КОГДА ОНА ВВОДИТСЯ. АДРЕС
ПОДПРОГРАММЫ ЗАВЕРШЕНИЯ НЕОБХОДИМО ПЕРЕМЕСТИТЬ К СЕДЬМОМУ
СЛОВУ БЛОКА ТАЙМЕРА.
     НИЖЕ ПРИВЕДЕНО МАКРОРАСШИРЕНИЕ ЗАПРОСА .TIMIO:
        .TIMIO TBK,HI,LO
        JSR R5,@$TIMIT ;УКАЗАТЕЛЬ КОНЦА ДРАЙВЕРА
        .WORD TBK-.
        .WORD 0 ;КОД ДЛЯ .TIMIO
        .WORD HI ;СТАРШЕЕ СЛОВО ИНТЕРВАЛА
                                ;ВРЕМЕНИ
        .WORD LO ;МЛАДШЕЕ СЛОВО ИНТЕРВАЛА
                                ;ВРЕМЕНИ

     5.1.2. ЗАПРОС .CTIMIO
     ПОСЛЕ ВОЗНИКНОВЕНИЯ УСЛОВИЯ, КОТОРОЕ ОЖИДАЛ ДРАЙВЕР,
НЕОБХОДИМО ВЫДАТЬ ВЫЗОВ УСТРАНЕНИЯ ТАЙМ-АУТА, КОТОРЫЙ
ЗАПРЕЩАЕТ ПОДПРОГРАММУ ЗАВЕРШЕНИЯ. ВЫЗОВ .CTIMIO
ИСПОЛЬЗУЕТСЯ В ДРАЙВЕРЕ ДЛЯ УСТРАНЕНИЯ ЗАПРОСА ТАЙМ-АУТА.
ВЫПОЛНЕНИЕ ДОЛЖНО ПРОИСХОДИТЬ В СИСТЕМНОМ РЕЖИМЕ, КОГДА
ВЫДАЕТСЯ ВЫЗОВ. ЕСЛИ .CTIMINMYV2^X7.O ИСПОЛЬЗУЕТСЯ НА УРОВНЕ
ПРЕРЫВАНИЯ, ТО СНАЧАЛА ВЫДАЕТСЯ ВЫЗОВ .FORK.
     НАПРИМЕР, ДРАЙВЕР ПОСТРОЧНО-ПЕЧАТАЮЩЕГО УСТРОЙСТВА
МОЖЕТ ПРОВЕРЯТЬ НА УСЛОВИЕ АВТОНОМНОСТИ. КОГДА ПРОГРАММА
ЗАПРАШИВАЕТ ПЕРЕДАЧУ ВВОДА-ВЫВОДА, СЕКЦИЯ ИНИЦИИРОВАНИЯ
ВВОДА-ВЫВОДА ДРАЙВЕРА ВЫЗЫВАЕТ НЕМЕДЛЕННОЕ ПРЕРЫВАНИЕ.
ЗАТЕМ СЕКЦИЯ ОБРАБОТКИ ПРЕРЫВАНИЙ ДРАЙВЕРА ПРОВЕРЯЕТ РАЗРЯД
ОШИБКИ УСТРОЙСТВА. ЕСЛИ РАЗРЯД УСТАНОВЛЕН,
ПОСТРОЧНО-ПЕЧАТАЮЩЕЕ УСТРОЙСТВО НЕАВТОНОМНО, И ДРАЙВЕР
ПЕЧАТАЕТ СООБЩЕНИЕ, УСТАНАВЛИВАЕТ ПОСРЕДСТВОМ .TIMIO
ДВУХМИНУТНЫЙ ТАЙМЕР И ВОЗВРАЩАЕТСЯ В МОНИТОР ПО КОМАНДЕ RTS
PC ДЛЯ ОЖИДАНИЯ ДРУГОГО ПРЕРЫВАНИЯ. УСТРОЙСТВО НЕ ДОЛЖНО
ПРЕРЫВАТЬСЯ СНОВА, ПОКА УСЛОВИЕ ОШИБКИ НЕ БУДЕТ
ЗАФИКСИРОВАНО ОПЕРАТОРОМ. ЕСЛИ ЗА ДВЕ МИНУТЫ НЕ ВОЗНИКЛО
ПРЕРЫВАНИЕ, ПОДПРОГРАМА ЗАВЕРШЕНИЯ ТАЙМЕРА ПЕЧАТАЕТ ДРУГОЕ
СООБЩЕНИЕ ОБ ОШИБКЕ, УСТАНАВЛИВАЕТ ДРУГОЙ ДВУХМИНУТНЫЙ
ТАЙМЕР И ВОЗВРАЩАЕТСЯ ОПЯТЬ В МОНИТОР ПО RTS PC ДЛЯ ОЖИДАНИЯ
ПРЕРЫВАНИЯ (ПРИМЕР ДРАЙВЕРА ПОСТРОЧНО-ПЕЧАТАЮЩЕГО УСТРОЙСТВА
СМ. П.5.1.3.3).
     В ЭТОМ ПРИМЕРЕ, КОГДА ВОЗНИКАЕТ ПРЕРЫВАНИЕ И РАЗРЯД
ОШИБКИ ЧИСТ, ДРАЙВЕР ВЫДАЕТ ВЫЗОВ .CTIMIO ДЛЯ УСТРАНЕНИЯ
ВРЕМЕННОГО ОЖИДАНИЯ.
     В ВИДЕ ДРУГОГО ПРИМЕРА, ДРАЙВЕР ДИСКА МОЖЕТ УСТАНОВИТЬ
ТАЙМЕР ДО ТОГО, КАК НАЧНЕТ ОПЕРАЦИЮ ПОИСКА. Т.К.
ПРЕРЫВАНИЯ ИЩУТСЯ ДВАЖДЫ, ДРАЙВЕР НЕ ДОЛЖЕН УСТРАНЯТЬ ТАЙМЕР
ПОСЛЕ ПЕРВОГО ПРЕРЫВАНИЯ. КОГДА ВОЗНИКАЕТ ВТОРОЕ
ПРЕРЫВАНИЕ, ХОТЯ ПОИСК УЖЕ ЗАВЕРШЕН, ДРАЙВЕР ДОЛЖЕН
УСТРАНИТЬ ТАЙМЕР.
     ЕСЛИ ИНТЕРВАЛ ВРЕМЕНИ В КАКОМ-ТО ПРИМЕНЕНИИ УЖЕ ИСТЕК,
И УСТРОЙСТВО ПОЭТОМУ В ТАЙМ-АУТЕ, ВЫПОЛНЕНИЕ ЗАПРОСА .CTIMIO
НЕ УДАЕТСЯ. ТАК КАК ПОДПРОГРАММА ЗАВЕРШЕНИЯ БЫЛА ПОМЕЩЕНА В
ОЧЕРЕДЬ, ВЫЗОВ .CTIMIO ВОЗВРАЩАЕТСЯ С УСТАНОВЛЕННЫМ РАЗРЯДОМ
ПЕРЕНОСА. ОБЫЧНО МОЖНО ИГНОРИРОВАТЬ ЭТО УСЛОВИЕ.
     ФОРМАТ ВЫЗОВА .CTIMIO СЛЕДУЮЩИЙ:
     .CTIMIO TBK
ГДЕ TBK - АДРЕС СЕМИСЛОВНОГО БЛОКА ТАЙМЕРА; БЛОК, УКАЗАННЫЙ
          В ВЫЗОВЕ .CTIMIO, ДОЛЖЕН БЫТЬ ТАКИМ ЖЕ, КАК УЖЕ
й ИСПОЛЬЗОВАННЫЙ СООТВЕТСТВУЮЩИМ ЗАПРОСОМ .TIMIO.
й ЗАПРОС .CTIMIO РАСШИРЯЕТСЯ СЛЕДУЮЩИМ ОБРАЗОМ:

        .CTIMIO
        JSR R5,@$TIMIT ;УКАЗАТЕЛЬ КОНЦА ДРАЙВЕРА
        .WORD TBK-.
        .WORD 1 ;КОД ДЛЯ .CTIMIO

     ЕСЛИ ЗАДАНИЕ ПОЛЬЗОВАТЕЛЯ ПРЕЖДЕВРЕМЕННО ПРЕРВЕТСЯ И
ДРАЙВЕР ВВЕДЕТСЯ В ТОЧКЕ ВХОДА ПРЕЖДЕВРЕМЕННОГО ПРЕРЫВАНИЯ,
ТО НЕОБХОДИМО СРАЗУ ЖЕ УСТРАНИТЬ ЛЮБЫЕ ВАЖНЫЕ ЗАПРОСЫ
ТАЙМЕРА. ОДНАКО ЕСЛИ ПОДПРОГРАММА ЗАВЕРШЕНИЯ ТАЙМЕРА УЖЕ
БЫЛА ВВЕДЕНА, НЕОБХОДИМО ДОЖДАТЬСЯ ЕЕ ВЫПОЛНЕНИЯ.

     5.1.3. ПРИМЕНЕНИЕ ТАЙМ-АУТА УСТРОЙСТВА
     ПОДДЕРЖКА ТАЙМ-АУТА УСТРОЙСТВА ИСПОЛЬЗУЕТСЯ В СИСТЕМЕ
ФОДОС-2 ЛИШЬ В НЕСКОЛЬКИХ СЛУЧАЯХ. ОДНАКО В РЯДЕ УСЛОВИЙ
ПРИМЕНЯЮТСЯ ЗАПРОСЫ ТАЙМЕРА.

     5.1.3.1. МУЛЬТИТЕРМИНАЛЬНАЯ ОБРАБОТКА
     МУЛЬТИТЕРМИНАЛЬНАЯ ОБРАБОТКА В СИСТЕМЕ ФОДОС-2
ИСПОЛЬЗУЕТ ТАЙМ-АУТ УСТРОЙСТВА ДЛЯ ПРОВЕРКИ СОСТОЯНИЯ
УДАЛЕННЫХ ТЕРМИНАЛОВ. ЭТА ПРОВЕРКА ОСУЩЕСТВЛЯЕТСЯ С ПОМОЩЬЮ
СПЕЦИАЛЬНОЙ ПОДПРОГРАММЫ, КОТОРАЯ ПРОВЕРЯЕТ ГОТОВНОСТЬ
КАЖДОГО УДАЛЕННОГО ТЕРМИНАЛА И ИСПОЛЬЗУЕТ ЗАПРОС .TIMIO.

     5.1.3.2. ОБЫЧНАЯ ПРОЦЕДУРА ТАЙМЕРА ДЛЯ ДРАЙВЕРА ДИСКА
     ДРАЙВЕР ДИСКА МОЖЕТ ВЫПОЛНИТЬ ЛЮБУЮ ПРОЦЕДУРУ ТАЙМЕРА
ДЛЯ ЛЮБОЙ ОПЕРАЦИИ ДИСКА. ЦЕЛЬЮ ПОДПРОГРАММЫ ТАЙМЕРА
ЯВЛЯЕТСЯ АННУЛИРОВАНИЕ ИЛИ ВОССТАНОВЛЕНИЕ ЛЮБОЙ ОПЕРАЦИИ,
КОТОРАЯ ДЛИТСЯ СЛИШКОМ ДОЛГО. ЕСЛИ ОПЕРАЦИЯ НЕ
ЗАКАНЧИВАЕТСЯ ЗА ОТВЕДЕННЫЙ ПРОМЕЖУТОК ВРЕМЕНИ, ТО, СКОРЕЕ
ВСЕГО, НА ДИСКЕ ОШИБОЧНО РАЗРУШЕНЫ НЕКОТОРЫЕ ОПЕРАЦИИ.
     СЕКЦИЯ ИНИЦИИРОВАНИЯ ВВОДА-ВЫВОДА УСТАНАВЛИВАЕТ ТАЙМЕР,
ИСПОЛЬЗУЯ ЗАПРОС .TIMIO. ЗАТЕМ ДРАЙВЕР НАЧИНАЕТ ОПЕРАЦИИ,
ЗАПРОШЕННЫЕ ЗАДАНИЕМ: ОПЕРАЦИИ СЧИТЫВАНИЯ, ЗАПИСИ ИЛИ
УСТАНОВКИ. ДРАЙВЕР ВОЗВРАЩАЕТСЯ В МОНИТОР ПО КОМАНДЕ RTS PC
И ОЖИДАЕТ ПРЕРЫВАНИЯ УСТРОЙСТВА. ЕСЛИ ПРЕРЫВАНИЕ ВОЗНИКАЕТ
ДО ИСТЕЧЕНИЯ ИНТЕРВАЛА ВРЕМЕНИ, ДРАЙВЕР АННУЛИРУЕТ ТАЙМЕР И
ВЫПОЛНЯЕТ ОБЫЧНУЮ ПОСЛЕДОВАТЕЛЬНОСТЬ ПРОВЕРКИ ОШИБОК В
РЕЗУЛЬТАТЕ ПЕРЕДАЧИ. ВООБЩЕ, ДРАЙВЕР ИЛИ СНИЖАЕТСЯ ДО
FORK-УРОВНЯ ДЛЯ ВОССТАНОВЛЕНИЯ НЕПРАВИЛЬНОЙ ОПЕРАЦИИ, ИЛИ
ВЫВОДИТСЯ В МОНИТОР ПОСРЕДСТВОМ .DRFIN ДЛЯ УДАЛЕНИЯ ТЕКУЩЕГО
ЭЛЕМЕНТА ОЧЕРЕДИ.
     ЕСЛИ ПРЕРЫВАНИЕ НЕ ВОЗНИКЛО ЗА УКАЗАННЫЙ ПРОМЕЖУТОК
ВРЕМЕНИ, НАЧИНАЕТ ВЫПОЛНЯТЬСЯ ПОДПРОГРАММА ЗАВЕРШЕНИЯ
ТАЙМЕРА. ЕЕ ПЕРВЫМ ДЕЙСТВИЕМ ДОЛЖНО БЫТЬ МОДЕЛИРОВАНИЕ
ПРЕРЫВАНИЯ. ЭТО ДЕЙСТВИЕ ДУБЛИРУЕТ СРЕДУ ДРАЙВЕРА ПОСЛЕ
ЭТОГО ПРЕРЫВАНИЯ И ГАРАНТИРУЕТ, ЧТО СТЕК ИМЕЕТ НЕОБХОДИМУЮ
ИНФОРМАЦИЮ. ЗАТЕМ ПОДПРОГРАММА ЗАВЕРШЕНИЯ ТАЙМЕРА ДЕЙСТВУЕТ
ТАК, КАК ЕСЛИ БЫ УСТРОЙСТВО БЫЛО ПРЕРВАНО, НО ПЕРЕДАЧА БЫЛА
ОШИБОЧНОЙ. ПОДПРОГРАММА ЗАВЕРШЕНИЯ ТАЙМЕРА ПРОСТО ПЕРЕХОДИТ
В ПРАВИЛЬНУЮ СЕКЦИЮ КОДОВ В СЕКЦИИ ОБРАБОТКИ ПРЕРЫВАНИЙ
ДРАЙВЕРА УСТРОЙСТВА ДЛЯ ОКОНЧАНИЯ ПРОЦЕССА.
     ПОДПРОГРАММА ЗАВЕРШЕНИЯ ТАЙМЕРА ДОЛЖНА ИСПОЛЬЗОВАТЬ
СЛЕДУЮЩИЕ КОМАНДЫ ДЛЯ МОДЕЛИРОВАНИЯ ПРЕРЫВАНИЯ И ВВОДА
СИСТЕМНОГО РЕЖИМА:

        MOV @SP,-(SP) ;ОТВОДИТ МЕСТО ДЛЯ СТЕКА
        CLR 2(SP) ;ИММИТИРОВАТЬ ПРЕРЫВАНИЕ
                                ;PS=0
        .MTPS #340 ;ПЕРЕХОД НА ПРИОРИТЕТ 7
        .INTEN 0,PIC ;ВВОД СИСТЕМНОГО РЕЖИМА

     ПОСЛЕ ВХОДА ДРАЙВЕРА В СИСТЕМНЫЙ РЕЖИМ, ОН
ПРЕДПРИНИМАЕТ СООТВЕТСТВУЮЩЕЕ ДЕЙСТВИЕ КАК РЕЗУЛЬТАТ
ТАЙМ-АУТА. ДРАЙВЕР СНОВА МОЖЕТ ПЫТАТЬСЯ ВЫПОЛНИТЬ ОПЕРАЦИЮ.
ДЛЯ ЭТОГО ОН УМЕНЬШАЕТ СЧЕТЧИК ПОВТОРЕНИЙ, СНИЖАЕТСЯ ДО
FORK-УРОВНЯ И ПЕРЕХОДИТ В СЕКЦИЮ ИНИЦИИРОВАНИЯ ВВОДА-ВЫВОДА.
КОД В СЕКЦИИ ИНИЦИИРОВАНИЯ ВВОДА-ВЫВОДА УСТАНАВЛИВАЕТ ДРУГОЙ
ТАЙМЕР, ПОВТОРЯЕТ ПЕРЕДАЧУ И ВОЗВРАЩАЕТСЯ В МОНИТОР ПО
КОМАНДЕ RTS PC ДЛЯ ОЖИДАНИЯ СЛЕДУЮЩЕГО ПРЕРЫВАНИЯ.
     ЕСЛИ ДРАЙВЕР РЕШАЕТ, ЧТО ТАЙМ-АУТ ПОКАЗЫВАЕТ СЕРЬЕЗНУЮ
ОШИБКУ, ОДНУ ИЗ ТЕХ, КОТОРЫЕ НЕ ДОЛЖНЫ ПОВТОРЯТЬСЯ ВНОВЬ, ТО
ДЛЯ ПЕРЕДАЧИ МОЖЕТ ПОСЛЕДОВАТЬ ТА ЖЕ САМАЯ ПРОЦЕДУРА,
КОТОРАЯ ПРОИСХОДИТ, КОГДА СЧЕТЧИК ПОВТОРЕНИЙ ИСЧЕРПАН. В
ЭТОМ СЛУЧАЕ ДРАЙВЕР УСТАНАВЛИВАЕТ РАЗРЯД НЕВОССТАНОВИМОЙ
ОШИБКИ В СЛОВЕ СОСТОЯНИЯ КАНАЛА, А ЗАТЕМ ВВОДИТСЯ В МОНИТОР
ВЫЗОВОМ .DRFIN ДЛЯ УДАЛЕНИЯ ТЕКУЩЕГО ЭЛЕМЕНТА ОЧЕРЕДИ.
ПЕРЕД ТЕМ, КАК ДРАЙВЕР ПЕРЕЙДЕТ К УДАЛЕНИЮ ТЕКУЩЕГО ЭЛЕМЕНТА
ОЧЕРЕДИ С ПОМОЩЬЮ .DRFIN, ОН ДОЛЖЕН АННУЛИРОВАТЬ ЛЮБОЙ
ЗАПРОС ТАЙМЕРА, КОТОРЫЙ ЕЩЕ НЕ ЗАКОНЧЕН.

     5.1.3.3. ПРИМЕР ДРАЙВЕРА ПОСТРОЧНО-ПЕЧАТАЮЩЕГО
УСТРОЙСТВА
     НИЖЕ ПРИВЕДЕН ПРИМЕР, СОСТОЯЩИЙ ИЗ ВЫДЕРЖЕК, ВЗЯТЫХ ИЗ
ДРАЙВЕРА ПОСТРОЧНО-ПЕЧАТАЮЩЕГО УСТРОЙСТВА СИСТЕМЫ ФОДОС-2,
МОДИФИЦИРОВАННОГО ДЛЯ ИСПОЛЬЗОВАНИЯ ПОДДЕРЖКИ ТАЙМЕРА ДЛЯ
ПРОВЕРКИ УСЛОВИЯ АВТОНОМНОСТИ УСТРОЙСТВА.
     КОГДА СЕКЦИЯ ИНИЦИИРОВАНИЯ ВВОДА-ВЫВОДА ДРАЙВЕРА
НАЧИНАЕТ ПЕРЕДАЧУ, ЭТО ПРИВОДИТ К НЕМЕДЛЕННОМУ ПРЕРЫВАНИЮ И
ЗАСТАВЛЯЕТ СЕКЦИЮ ОБРАБОТКИ ПРЕРЫВАНИЙ ВЫПОЛНЯТЬ ПРОВЕРКУ
РАЗРЯДА ОШИБКИ В CSR. ЕСЛИ ЕСТЬ ОШИБКА, УПРАВЛЕНИЕ
ПЕРЕХОДИТ К ПОДПРОГРАММЕ OFFLIN, КОТОРАЯ ВЫДАЕТ ВЫЗОВ .SYNCH
ДЛЯ ВХОДА В РЕЖИМ ПОЛЬЗОВАТЕЛЯ, ПЕЧАТАЕТ СООБЩЕНИЕ ОБ
ОШИБКЕ, А, ЗАТЕМ, УСТАНАВЛИВАЕТ ДВУХМИНУТНЫЙ ТАЙМЕР, ПОСЛЕ
ЧЕГО ДРАЙВЕР ВОЗВРАЩАЕТСЯ В МОНИТОР ПО КОМАНДЕ RTS PC И
ОЖИДАЕТ ПРЕРЫВАНИЕ УСТРОЙСТВА.
     ЕСЛИ УСТРОЙСТВО БЫЛО ПРЕРВАНО, ЭТО ОЗНАЧАЕТ, ЧТО
УСЛОВИЕ ОШИБКИ БЫЛО ИСПРАВЛЕНО ОПЕРАТОРОМ. ДРАЙВЕР
АННУЛИРУЕТ ТАЙМЕР И ПРОВЕРЯЕТ СНОВА РАЗРЯД ОШИБКИ, ЧТОБЫ
УБЕДИТЬСЯ, ЧТО ПРОБЛЕМЫ ОТСУТСТВУЮТ. ЕСЛИ ОШИБОК НЕТ, ТО
ДРАЙВЕР ОБРАБАТЫВАЕТСЯ КАК ОБЫЧНО. ЕСЛИ ОШИБКА ЕСТЬ,
ДРАЙВЕР ЦИКЛИТСЯ В ПОДПРОГРАММЕ OFFLIN. ЕСЛИ ПРЕРЫВАНИЕ НЕ
ВОЗНИКНЕТ ЗА 2 МИНУТЫ, ТО НАЧИНАЕТ ВЫПОЛНЯТЬСЯ ПОДПРОГРАММА
ЗАВЕРШЕНИЯ ТАЙМЕРА. ОНА ПЕЧАТАЕТ СООБЩЕНИЕ ОБ ОШИБКЕ,
УСТАНАВЛИВАЕТ ДРУГОЙ ДВУХМИНУТНЫЙ ТАЙМЕР И ВОЗВРАЩАЕТСЯ В
МОНИТОР ПО КОМАНДЕ RTS PC ДЛЯ ОЖИДАНИЯ ПРЕРЫВАНИЯ.

     ПРИМЕР:

 ;СЕКЦИЯ ИНИЦИИРОВАНИЯ ВВОДА-ВЫВОДА
        .DRBEG LP

        MOV LPCQE,R4 ;R4 УКАЗЫВАЕТ ТЕКУЩИЙ
                                ;ЭЛЕМЕНТ ОЧЕРЕДИ
        ASL 6(R4) ;ПЕРЕХОД ОТ СЧЕТЧИКА СЛОВ
                                ;К СЧЕТЧИКУ БАЙТОВ
        BCC LPERR ;ЗАПРОС СЧИТЫВАНИЯ
                                ;НЕДОПУСТИМ
        BEQ LPDONE ;ПЕРЕХОД НА НЕМЕДЛЕННОЕ
                                ;ОКОНЧАНИЕ
RET: BIS #100,@LPS ;РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ,
                                ;НАЧАЛО ПЕРЕДАЧИ
        RTS PC
 ;СЕКЦИЯ ОБРАБОТКИ ПРЕРЫВАНИЙ
 .ENABL LSB
        .DRAST LP,4,LPDONE
        CLR @LPS ;ЗАПРЕЩЕНИЕ ПРЕРЫВАНИЙ
        .FORK FRKBLK
        TST TICMPL ;АКТИВНЫЙ ЭЛЕМЕНТ ТАЙМЕРА?
        BEQ 1$ ;НЕТ
        .CTIMIO TIMBLK ;ДА, УДАЛИТЬ ЕГО
        BCS 1$ ;ОШИБКА
        CLR TICMPL ;И НЕ УСТАНАВЛИВАТЬ ЕГО
                                ;СНОВА
1$: MOV LPCQE,R4 ;R4 УКАЗЫВАЕТ ТЕКУЩИЙ
                                ;ЭЛЕМЕНТ ОЧЕРЕДИ
        TST @(PC)+ ;ОШИБОЧНОЕ УСЛОВИЕ?
LPS: .WORD LP$CSR ;РЕГИСТР СОСТОЯНИЯ
                                ;ПОСТРОЧНО-
                                ;ПЕЧАТАЮЩЕГО УСТРОЙСТВА
ERROPT: BMI OFFLIN ;ДА, ИДТИ НА ИСПРАВЛЕНИЕ
   .
   .
   .
 ;СЕКЦИЯ ЗАВЕРШЕНИЯ ВВОДА-ВЫВОДА
LPDONE: CLR @LPS ;ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ
        .DRFIN LP
   .
   .
   .
 ;ПОСТРОЧНО-ПЕЧАТАЮЩЕЕ УСТРОЙСТВО АВТОНОМНО, ПРЕДУПРЕЖДЕНИЕ
 ;ПЕЧАТАТЬ КАЖДЫЕ ДВЕ МИНУТЫ

OFFLIN: MOV LPCQE,R5 ;УКАЗЫВАЕТ ЭЛЕМЕНТ ОЧЕРЕДИ
        MOVB Q$JNUM(R5),R5 ;УСТАНАВЛИВАЕТ НОМЕР
                                ;ТЕКУЩЕГО ЗАДАНИЯ
        ASR R5 ;СДВИНУТЬ ЕГО
        ASR R5 ;ВПРАВО
        ASR R5 ;НА ТРИ РАЗРЯДА
        BIC #^C<16>,R5 ;ВЫДЕЛЯЕТ НОМЕР ЗАДАНИЯ
        MOV R5,SYJNUM ;СОХРАНЯЕТ ЕГО ДЛЯ .SYNCH
        MOV R5,TIJNUM ;СОХРАНЯЕТ ЕГО ДЛЯ .TIMIO
        .SYNCH SYNBLK,PIC ;ПЕРЕХОД В РЕЖИМ
                                ;ПОЛЬЗОВАТЕЛЯ
        RTS PC ;СИНХРОНИЗАЦИЯ ЗАКОНЧЕНА,
                                ;ПРОДВИНУТЬСЯ
1$: CLR TICMPL ;ПОКАЗЫВАЕТ, ЧТО МЫ ПОПАЛИ
                                ;СЮДА
        TST @LPS ;ОШИБКА ВСЕ ЕЩЕ ЕСТЬ?
        BPL 2$ ;НЕТ, ЗАКОНЧИТЬ
        MOV PC,RO ;В СЛУЧАЕ ПОДПРОГРАММЫ
                                ;ЗАВЕРШЕНИЯ ПЕЧАТАЕТ
                                ;СООБЩЕНИЕ
        ADD #MESSAG-.,RO ;УКАЗАТЕЛЬ СООБЩЕНИЯ
                                ;КАК PIC
        .PRINT ;ПЕЧАТАТЬ ЕГО
        MOV PC,RO ;В PIC-КОДАХ, УКАЗЫВАЯ ДЛЯ
        ADD #1$-.,R0 ;.TIMIO ПОДПРОГРАММУ
                                ;ЗАВЕРШЕНИЯ
        MOV RO,TICMPL ;ЗАПОМИНАЕТ ЕГО
        .TIMIO TIMBLK,0,2*60.*60. ;УСТАНАВЛИВАЕТ
                                ;ДВУХМИНУТНЫЙ ТАЙМЕР
2$: RTS PC ;ВОЗВРАТ НАЗАД
FRKBLK: .WORD 0,0,0,0 ;FORK-БЛОК
TIMBLK: .WORD 0 ;БЛОК ТАЙМЕРА: СТАРШЕЕ
                                ;СЛОВО ВРЕМЕНИ
        .WORD 0 ;МЛАДШЕЕ СЛОВО ВРЕМЕНИ
        .WORD 0 ;СВЯЗЬ СО СЛЕДУЮЩИМ
                                ;ЭЛЕМЕНТОМ ОЧЕРЕДИ
TIJNUM: .WORD 0 ;НОМЕР ЗАДАНИЯ
        .WORD 177000+3 ;ПОСЛЕДОВАТЕЛЬНЫЙ НОМЕР
        .WORD 0 ;МОНИТОР УСТАНАВЛИВАЕТ
                                ;ЗДЕСЬ -1
TICMPL: .WORD 0 ;АДРЕС ПОДПРОГРАММЫ
                                ;ЗАВЕРШЕНИЯ
SYNBLK: .WORD 0 ;SYNCH-БЛОК
SYJNUM: .WORD 0 ;НОМЕР ЗАДАНИЯ
        .WORD 0,0,0,-1,0 ;ОСТАЛЬНЫЕ
MESSAG: .ASCIZ "?LP-W-LP OFF LINE - PLEASE CORRECT"
        .EVEN
        .DREND LP

     В ЭТОМ ПРИМЕРЕ ПРИВЕДЕН ДРАЙВЕР ПОСТРОЧНО-ПЕЧАТАЮЩЕГО
УСТРОЙСТВА.

     5.2. РЕГИСТРАЦИЯ ОШИБОК
     РЕГИСТРАЦИЯ ОШИБОК - ЭТО ДОПОЛНИТЕЛЬНОЕ СРЕДСТВО
СИСТЕМЫ ФОДОС-2, ПРЕДНАЗНАЧЕННОЕ ДЛЯ ОБЕСПЕЧЕНИЯ НАДЕЖНОСТИ
СИСТЕМЫ. ДРАЙВЕРЫ УСТРОЙСТВ, КОТОРЫЕ ПОДДЕРЖИВАЮТ
РЕГИСТРАЦИЮ ОШИБОК, ВЫЗЫВАЮТ РЕГИСТРАТОР ОШИБОК ПОСЛЕ КАЖДОЙ
ПЕРЕДАЧИ ВВОДА-ВЫВОДА. РЕГИСТРАТОР ОШИБОК СОБИРАЕТ
СТАТИСТИКУ О ДЕЯТЕЛЬНОСТИ УСТРОЙСТВ ВВОДА-ВЫВОДА, КОТОРУЮ
МОЖНО ИСПОЛЬЗОВАТЬ ДЛЯ ПРОВЕРКИ ИХ НАДЕЖНОСТИ.
     ПОДДЕРЖКА РЕГИСТРАЦИИ ОШИБОК ВЫБИРАЕТСЯ В ПРОЦЕССЕ
ГЕНЕРАЦИИ СИСТЕМЫ. РЕГИСТРАЦИЯ ОШИБОК МОЖЕТ ВЫПОЛНЯТЬСЯ ПОД
УПРАВЛЕНИЕМ МОНИТОРОВ XM ИЛИ FB. ЕСЛИ СИСТЕМА СПОСОБНА
ВЫПОЛНЯТЬ СИСТЕМНОЕ ЗАДАНИЕ, РЕГИСТРАТОР ОШИБОК ВЫПОЛНЯЕТСЯ
КАК СИСТЕМНОЕ ЗАДАНИЕ; В ПРОТИВНОМ СЛУЧАЕ, ОН ВЫПОЛНЯЕТСЯ
КАК ОБЫЧНОЕ ОСНОВНОЕ ЗАДАНИЕ. СОДЕРЖИМОЕ ФАЙЛА ПАРАМЕТРОВ
ГЕНЕРАЦИИ СИСТЕМЫ ДЛЯ РЕГИСТРАЦИИ ОШИБОК СЛЕДУЮЩЕЕ:
ERL$G - ЕСЛИ ЭТО ЗНАЧЕНИЕ РАВНО 1, ТО РЕГИСТРАЦИЯ ОШИБОК
        РАЗРЕШЕНА ДЛЯ ЭТОЙ СИСТЕМЫ;
ERL$S - ЭТО УСЛОВИЕ ОПРЕДЕЛЯЕТ ЧИСЛО 256-СЛОВНЫХО БЛОКОВ,
        ИСПОЛЬЗУЕМЫХ ПОД ВНУТРЕННИЙ БУФЕР РЕГИСТРАЦИИ В
        МОНИТОРЕ SJ;
ERL$U - МАКСИМАЛЬНОЕ КОЛИЧЕСТВО ИНДИВИДУАЛЬНЫХ ПРИВОДОВ
        УСТРОЙСТВ, ДЛЯ КОТОРЫХ РЕГИСТРАТОР ОШИБОК СОБИРАЕТ
        СТАТИСТИКУ; ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ РАВНО 10,
        МАКСИМАЛЬНОЕ ЧИСЛО ПРИВОДОВ РАВНО 30; КАЖДЫЙ ПРИВОД
        ДОБАВЛЯЕТ СЕМЬ СЛОВ В РЕГИСТРАТОР ОШИБОК; ДЛЯ
        КАЖДОГО БЛОКА ТРЕБУЕТСЯ ОДНА ПОЗИЦИЯ (НАПРИМЕР, ДЛЯ
        СИСТЕМЫ С ДИСКАМИ СМ-5400 ТРЕБУЕТСЯ ДВЕ ПОЗИЦИИ);
        ЗНАЧЕНИЕ ЭТОЙ ПЕРЕМЕННОЙ УСТАНАВЛИВАЕТСЯ ПРИ ОТВЕТЕ
        НА ВОПРОС ВО ВРЕМЯ ГЕНЕРАЦИИ СИСТЕМЫ.
     НЕОБХОДИМО ПЕРЕСМОТРЕТЬ ТРЕБОВАНИЯ, ПРЕД'ЯВЛЯЕМЫЕ К
ПАМЯТИ И ВРЕМЕНИ, ДО ИСПОЛЬЗОВАНИЯ РЕГИСТРАТОРА ОШИБОК, ТАК
КАК РЕГИСТРАТОР ОШИБОК СОЗДАЕТ ОПРЕДЕЛЕННОЕ МИНИМАЛЬНОЕ
КОЛИЧЕСТВО ДОПОЛНИТЕЛЬНЫХ ГЛАВ ДЛЯ КАЖДОЙ ПЕРЕДАЧИ
ВВОДА-ВЫВОДА, И САМ РЕГИСТРАТОР ОШИБОК ИСПОЛЬЗУЕТ ПОЧТИ 2K
СЛОВ ПАМЯТИ. ОДНАКО РЕГИСТРАТОР ОШИБОК МОЖЕТ ВЫПОЛНЯТЬСЯ НЕ
КАЖДЫЙ РАЗ, ЧТОБЫ ТРЕБУЮЩАЯСЯ ЕМУ ПАМЯТЬ БЫЛА ДОСТУПНА
ПРОГРАММАМ ПОЛЬЗОВАТЕЛЯ И ВЫЗОВЫ ДРАЙВЕРОМ РЕГИСТРАТОРА
ОШИБОК ВОЗВРАЩАЛИСЬ БЫ НЕМЕДЛЕННО. САМЫЙ УДОБНЫЙ СПОСОБ
ИСПОЛЬЗОВАНИЯ РЕГИСТРАЦИИ ОШИБОК СИСТЕМЫ - ЭТО ИСПОЛЬЗОВАНИЕ
ЕЕ В ВИДЕ ПРОВЕРКИ, КОГДА ЕСТЬ СОМНЕНИЯ В НАДЕЖНОСТИ
СИСТЕМЫ.
     ВСЕ КОДЫ ДРАЙВЕРА, КОТОРЫЕ ПРЕДНАЗНАЧЕНЫ ТОЛЬКО ДЛЯ
РЕГИСТРАЦИИ ОШИБОК, ДОЛЖНЫ БЫТЬ РАЗМЕЩЕНЫ СРЕДИ КОМАНД
УСЛОВНОЙ ТРАНСЛЯЦИИ. ЭТИ КОМАНДЫ ВКЛЮЧАЮТ КОД РЕГИСТРАЦИИ
ОШИБОК, ЕСЛИ СИМВОЛ ERL$G=1, И ОПУСКАЮТ ЕГО В ПРОТИВНОМ
СЛУЧАЕ. ТАКИМ ОБРАЗОМ, КОДЫ РЕГИСТРАЦИИ ОШИБОК ИЛИ
ВКЛЮЧАЮТСЯ В ДРАЙВЕР ПРИ ЕГО ТРАНСЛИРОВАНИИ, ИЛИ НЕТ.

     5.2.1. КОГДА И КАК ВЫЗЫВАТЬ РЕГИСТРАТОР ОШИБОК
     ДРАЙВЕР УСТРОЙСТВА ВЫЗЫВАЕТ РЕГИСТРАТОР ОШИБОК ПОСЛЕ
КАЖДОЙ ПЕРЕДАЧИ ВВОДА-ВЫВОДА, НЕЗАВИСИМО ОТ ТОГО, БЫЛА
ПЕРЕДАЧА УСПЕШНОЙ ИЛИ НЕТ. ЕСЛИ ПЕРЕДАЧА БЫЛА ОШИБОЧНОЙ,
ДРАЙВЕР ВЫЗЫВАЕТ РЕГИСТРАТОР ОШИБОК ОДИН РАЗ ДЛЯ КАЖДОЙ
ПОВТОРНОЙ ПОПЫТКИ ПЕРЕДАЧИ И ЕЩЕ РАЗ, КОГДА РАЗРЕШЕННОЕ
КОЛИЧЕСТВО ПОВТОРНЫХ ПОПЫТОК УЖЕ ИСЧЕРПАНО. ТАК КАК ВЫЗОВЫ
РЕГИСТРАТОРА ОШИБОК ДОЛЖНЫ БЫТЬ УПОРЯДОЧЕНЫ, ДРАЙВЕР МОЖЕТ
ВЫЗЫВАТЬ ЕГО ТОЛЬКО ВО ВРЕМЯ ИНИЦИИРОВАНИЯ ВВОДА-ВЫВОДА ИЛИ
СЛЕДОМ ЗА ВЫЗОВОМ ЗАПРОСА .FORK.
     ДРАЙВЕР ДОЛЖЕН УСТАНОВИТЬ РЕГИСТРЫ ВЫЗОВА РЕГИСТРАТОРА
ОШИБОК.

     5.2.1.1. РЕГИСТРАЦИЯ УСПЕШНОЙ ПЕРЕДАЧИ
     РЕГИСТРЫ R4 И R5 УСТАНАВЛИВАЮТСЯ ПЕРЕД ВЫЗОВОМ
РЕГИСТРАТОРА ОШИБОК ПОСЛЕ КАЖДОЙ УСПЕШНОЙ ПЕРЕДАЧИ СЛЕДУЮЩИМ
ОБРАЗОМ:
 R5 - ДОЛЖЕН УКАЗЫВАТЬ НА ТРЕТЬЕ СЛОВО ТЕКУЩЕГО ЭЛЕМЕНТА
      ОЧЕРЕДИ;
 R4 - СОДЕРЖИТ ДВА БАЙТА ИНФОРМАЦИИ: СТАРШИЙ БАЙТ ЯВЛЯЕТСЯ
      БАЙТОМ ИДЕНТИФИКАЦИИ УСТРОЙСТВА, DD$COD, МЛАДШИЙ БАЙТ
      РАВЕН -1.

     5.2.1.2. РЕГИСТРАЦИЯ НЕВОССТАНОВИМОЙ ОШИБКИ
     ПЕРЕД ВЫЗОВОМ РЕГИСТРАТОРА ОШИБОК НЕОБХОДИМО УСТАНОВИТЬ
РЕГИСТРЫ С R2 ПО R5 ПОСЛЕ ВОЗНИКНОВЕНИЯ НЕВОССТАНОВИМОЙ
ОШИБКИ. ПРИМЕРАМИ НЕВОССТАНОВИМЫХ ОШИБОК ЯВЛЯЮТСЯ:
НЕАВТОНОМНОСТЬ УСТРОЙСТВА, БЛОКИРОВКА УСТРОЙСТВА ЗАПИСИ,
ОТСУТСТВИЕ ЛЕНТЫ В ПЕРФОЛЕНТОЧНОМ УСТРОЙСТВЕ ВВОДА И Т.Д..
ВОССТАНОВИМАЯ ОШИБКА, КОТОРАЯ ИСЧЕРПАЛА ЧИСЛО ПОВТОРНЫХ
ПЕРЕДАЧ, РАССМАТРИВАЕТСЯ КАК НЕВОССТАНОВИМАЯ ОШИБКА.
R5 - ДОЛЖЕН УКАЗЫВАТЬ НА ТРЕТЬЕ СЛОВО ТЕКУЩЕГО ЭЛЕМЕНТА
     ОЧЕРЕДИ;
R4 - СОДЕРЖИТ ДВА БАЙТА ИНФОРМАЦИИ: СТАРШИЙ БАЙТ ЯВЛЯЕТСЯ
     БАЙТОМ ИДЕНТИФИКАЦИИ УСТРОЙСТВА, DD$COD; МЛАДШИЙ БАЙТ
     ЯВЛЯЕТСЯ 0;
R3 - СОДЕРЖИТ ДВА БАЙТА ИНФОРМАЦИИ: СТАРШИЙ БАЙТ СОДЕРЖИТ
     ОБЩЕЕ ЧИСЛО ПОВТОРНЫХ ПОПЫТОК, РАЗРЕШЕННЫХ ДЛЯ ЭТОЙ
     ПЕРЕДАЧИ; МЛАДШИЙ БАЙТ СОДЕРЖИТ ЧИСЛО РЕГИСТРОВ
     УСТРОЙСТВА, СОДЕРЖИМОЕ КОТОРЫХ ДОЛЖНО ПОЯВЛЯТЬСЯ В
     ПРОТОКОЛЕ ОШИБОК;
R2 - УКАЗЫВАЕТ НА БУФЕР В ДРАЙВЕРЕ, КОТОРЫЙ СОДЕРЖИТ
     РЕГИСТРЫ УСТРОЙСТВА ДЛЯ РЕГИСТРАЦИИ.

     5.2.1.3. РЕГИСТРАЦИЯ ВОССТАНОВИМОЙ ОШИБКИ
     ПЕРЕД ВЫЗОВОМ РЕГИСТРАТОРА ОШИБОК НЕОБХОДИМО УСТАНОВИТЬ
РЕГИСТРЫ R2-R5 ПОСЛЕ ВОЗНИКНОВЕНИЯ ВОССТАНОВИМОЙ ОШИБКИ.
ОБЫЧНО ВОССТАНОВИМЫЕ ОШИБКИ МОГУТ БЫТЬ ИСПРАВЛЕНЫ
ПОСРЕДСТВОМ ПОВТОРНОЙ ПОПЫТКИ ПЕРЕДАЧИ. ПРИМЕРАМИ
ВОССТАНОВИМЫХ ОШИБОК ЯВЛЯЮТСЯ: ОШИБКИ ВРЕМЕНИ ВЫПОЛНЕНИЯ,
АППАРАТНЫЕ ОШИБКИ СЧИТЫВАНИЯ ИЛИ ЗАПИСИ.
     НЕОБХОДИМО УСТАНОВИТЬ В ДРАЙВЕРЕ СЧЕТЧИК ОБЩЕГО ЧИСЛА
ПОВТОРНЫХ ПОПЫТОК, РАЗРЕШЕННЫХ ДЛЯ КАЖДОЙ ПЕРЕДАЧИ. СЧЕТЧИК
ДОЛЖЕН УМЕНЬШАТЬСЯ ВСЯКИЙ РАЗ, КОГДА ВЫПОЛНЯЕТСЯ ПОВТОРНАЯ
ПЕРЕДАЧА ДЛЯ ВОССТАНОВИМОЙ ОШИБКИ. КОГДА СЧЕТЧИК ДОСТИГАЕТ
0, РЕГИСТРАТОР ОШИБОК РАССМАТРИВАЕТ ЭТУ ОШИБКУ КАК
НЕВОССТАНОВИМУЮ. ПРИ ВОССТАНОВИМОЙ ОШИБКЕ СООБЩЕНИЕ ОБ
ОШИБКЕ ПЕЧАТАЕТСЯ ОТДЕЛЬНОЙ ЗАПИСЬЮ ДЛЯ КАЖДОГО ПОВТОРА
ДАННОЙ ПЕРЕДАЧИ.
     СООБЩЕНИЯ ОБО ВСЕХ ПОВТОРНЫХ ПЕРЕДАЧАХ ПЕЧАТАЮТСЯ ДАЖЕ
В ТОМ СЛУЧАЕ, КОГДА РЕГИСТРЫ БЫЛИ ИДЕНТИЧНЫ. СООБЩЕНИЕ НЕ
ДЕЛАЕТ РАЗЛИЧИЙ МЕЖДУ ВОССТАНОВИМОЙ И НЕВОССТАНОВИМОЙ
ОШИБКАМИ. ОНО ПЕЧАТАЕТ ТОЛЬКО СОДЕРЖИМОЕ РЕГИСТРОВ ВО ВРЕМЯ
ОШИБКИ И ЗНАЧЕНИЕ СЧЕТЧИКА ПОВТОРНЫХ ПЕРЕДАЧ.
НЕВОССТАНОВИМУЮ ОШИБКУ МОЖНО УЗНАТЬ ЛИШЬ НА ВЫХОДЕ, ТАК КАК
ОНА БУДЕТ ПОЯВЛЯТЬСЯ СО СЧЕТЧИКОМ ПОВТОРНЫХ ПЕРЕДАЧ, РАВНЫМ
0.
R5 - ДОЛЖЕН УКАЗЫВАТЬ НА ТРЕТЬЕ СЛОВО ТЕКУЩЕГО ЭЛЕМЕНТА
     ОЧЕРЕДИ;
R4 - СОДЕРЖИТ ДВА БАЙТА ИНФОРМАЦИИ: СТАРШИЙ БАЙТ ЯВЛЯЕТСЯ
     БАЙТОМ ИДЕНТИФИКАЦИИ УСТРОЙСТВА, DD$COD; МЛАДШИЙ БАЙТ
     ЯВЛЯЕТСЯ ТЕКУЩИМ ЗНАЧЕНИЕМ СЧЕТЧИКА ПОВТОРНЫХ ПЕРЕДАЧ;
R3 - СОДЕРЖИТ ДВА БАЙТА ИНФОРМАЦИИ: СТАРШИЙ БАЙТ СОДЕРЖИТ
     ОБЩЕЕ ЧИСЛО ПОВТОРНЫХ ПОПЫТОК, РАЗРЕШЕННЫХ ДЛЯ ЭТОЙ
     ПЕРЕДАЧИ; МЛАДШИЙ БАЙТ СОДЕРЖИТ ЧИСЛО РЕГИСТРОВ
     УСТРОЙСТВА, СОДЕРЖИМОЕ КОТОРЫХ ДОЛЖНО ПОЯВЛЯТЬСЯ В
     СООБЩЕНИИ ОБ ОШИБКЕ;
R2 - УКАЗЫВАЕТ БУФЕР В ДРАЙВЕРЕ, КОТОРЫЙ СОДЕРЖИТ РЕГИСТРЫ
     УСТРОЙСТВА ДЛЯ РЕГИСТРАЦИИ.

     5.2.1.4. РАЗЛИЧИЯ МЕЖДУ ВОССТАНОВИМОЙ (SOFT) И
НЕВОССТАНОВИМОЙ (HARD) ОШИБКАМИ
     САМ РЕГИСТРАТОР ОШИБОК НЕ РАЗЛИЧАЕТ ВОССТАНОВИМЫЕ И
НЕВОССТАНОВИМЫЕ ОШИБКИ И ЗАПИСЫВАЕТ ОДНУ И ТУ ЖЕ ИНФОРМАЦИЮ
В ОБОИХ СЛУЧАЯХ. ОДНАКО ПОСРЕДСТВОМ ПРОВЕРКИ СООБЩЕНИЯ
МОЖНО ОПРЕДЕЛИТЬ НЕВОССТАНОВИМУЮ ОШИБКУ, ПОТОМУ ЧТО В ЭТОМ
СЛУЧАЕ ПЕРЕДАЧА ИСЧЕРПАЕТ ВСЕ СВОИ ПОВТОРНЫЕ ПОПЫТКИ И БУДЕТ
ИМЕТЬ ЗАПИСИ ДЛЯ КАЖДОЙ ИЗ ЭТИХ ПОВТОРНЫХ ПОПЫТОК, В ТОМ
ЧИСЛЕ И ТУ, ДЛЯ КОТОРОЙ СЧЕТЧИК ПОВТОРНЫХ ПЕРЕДАЧ РАВЕН 0.
     В СЛУЧАЕ, КОГДА ОШИБКИ МОГУТ БЫТЬ ИСПРАВЛЕНЫ
ПОЛЬЗОВАТЕЛЕМ, ТАКИЕ, КАК АВТОНОМНОЕ УСТРОЙСТВО ИЛИ
ОГРАНИЧЕННАЯ ЗАПИСЬ, РЕГИСТРАТОР ОШИБОК МОЖЕТ НЕ ВЫЗЫВАТЬСЯ.
ОБЫЧНО СООБЩАЕТСЯ ЛИШЬ ОБ АППАРАТНЫХ ОШИБКАХ ДИСКА ИЛИ
ЛЕНТЫ, ТАК КАК ЭТИ ОШИБКИ РАССМАТРИВАЮТСЯ С ТОЧКИ ЗРЕНИЯ
НАДЕЖНОСТИ УСТРОЙСТВ.

     5.2.1.5. ВЫЗОВ РЕГИСТРАТОРА ОШИБОК
 ПОСЛЕ ТОГО, КАК НЕОБХОДИМЫЕ РЕГИСТРЫ БУДУТ УСТАНОВЛЕНЫ,
МОЖНО ВЫЗВАТЬ РЕГИСТРАТОР ОШИБОК:
     JSR PC,@$ELPTR
ГДЕ $ELPTR - ЕГО УКАЗАТЕЛЬ В РЕЗИДЕНТНОМ МОНИТОРЕ.
     ЗАПРОС .DREND ОТВОДИТ МЕСТО В ДРАЙВЕРЕ ДЛЯ ЭТОГО
УКАЗАТЕЛЯ. УКАЗАТЕЛЬ ЗАПОЛНЯЕТСЯ ВО ВРЕМЯ ЗАГРУЗКИ (ДЛЯ
СИСТЕМНОГО УСТРОЙСТВА) ИЛИ ПО ЗАПРОСУ .FETCH ИЛИ ПО КОМАНДЕ
МОНИТОРА LOAD (ДЛЯ УСТРОЙСТВА ДАННЫХ). ЕСЛИ РЕГИСТРАТОР
ОШИБОК НЕ РАБОТАЕТ, ТО МОНИТОР ВОЗВРАЩАЕТСЯ НЕПОСРЕДСТВЕННО
К ДРАЙВЕРУ. ЕСЛИ РЕГИСТРАТОР ОШИБОК РАБОТАЕТ, ТО СЛОВО
СВЯЗИ В RMON СОДЕРЖИТ ЕГО ТОЧКУ ВХОДА.

     ПРИМЕР:

$ERLOG: MOV (PC)+,-(SP) ;ВХОДИТ ЗДЕСЬ ИЗ ДРАЙВЕРА,
                                ;ПОМЕЩАЯ СЛЕДУЮЩЕЕ СЛОВО
                                ;В СТЕК
$ELHND::.WORD 0 ;0, ЕСЛИ РЕГИСТРАТОР ОШИБОК
                                ;НЕ РАБОТАЕТ; ИНАЧЕ, СОДЕР-
                                ;ЖИТ ТОЧКУ ВХОДА РЕГИСТРА-
                                ;ТОРА ОШИБОК
        BNE 1$ ;ПЕРЕХОД, ЕСЛИ ЗАГРУЖЕН
        TST (SP)+ ;ОЧИСТКА СТЕКА
1$: RTS PC ;ВЫЗОВ РЕГИСТРАТОРА ОШИБОК
                                ;ИЛИ ВОЗВРАТ К ДРАЙВЕРУ

     ПРИВЕДЕННЫЕ ВЫШЕ СТРОКИ КОДА ИЗ RMON ПОКАЗЫВАЮТ, КАК
ВЫПОЛНЯЕТСЯ ВЫЗОВ РЕГИСТРАТОРА ОШИБОК.
     КОМАНДЫ МОНИТОРА SRUN ИЛИ FRUN УСТАНАВЛИВАЮТ ТОЧКУ
ВХОДА РЕГИСТРАТОРА ОШИБОК; КОМАНДА UNLOAD EL ОБНУЛЯЕТ
$ELHND.
     ПРИ ВОЗВРАЩЕНИИ ИЗ ВЫЗОВА РЕГИСТРАТОРА ОШИБОК, РЕГИСТРЫ
R0-R3 ВОССТАНАВЛИВАЮТСЯ В ДРАЙВЕРЕ, R4 И R5 - РАЗРУШЕНЫ.

     5.3. СПЕЦИАЛЬНЫЕ ФУНКЦИИ
     ИНОГДА ДРАЙВЕРАМ НЕОБХОДИМО ВЫПОЛНЯТЬ ДЕЙСТВИЯ
УКАЗАННЫХ УСТРОЙСТВ, ДЛЯ КОТОРЫХ НЕТ СООТВЕТСТВУЮЩИХ
ПРОГРАММНЫХ ЗАПРОСОВ ФОДОС-2. ПРИМЕРЫ ТАКИХ ДЕЙСТВИЙ:
ПЕРЕМОТКА МАГНИТНЫХ ЛЕНТ И СЧИТЫВАНИЕ ИЛИ ЗАПИСЬ АБСОЛЮТНЫХ
СЕКТОРОВ НА ГИБКИХ ДИСКАХ. ПРОГРАММНЫЙ ЗАПРОС .SPFUN
ОБЕСПЕЧИВАЕТ СРЕДСТВА ПРОГРАММАМ ДЛЯ ИНИЦИАЦИИ ТАКИХ
СПЕЦИАЛЬНЫХ ФУНКЦИЙ. КОГДА ПРОГРАММА ВЫДАЕТ ЗАПРОС .SPFUN,
ДОЛЖЕН ПРИСУТСТВОВАТЬ И КОД СПЕЦИАЛЬНОЙ ФУНКЦИИ В ВИДЕ
ОДНОГО ИЗ АРГУМЕНТОВ. ЭТОТ КОД СООБЩАЕТ ДРАЙВЕРУ, КАКИЕ
СПЕЦИАЛЬНЫЕ ФУНКЦИИ ОН ДОЛЖЕН ВЫПОЛНИТЬ. НАПРИМЕР, КОДОМ,
КОТОРЫЙ ПРИКАЗЫВАЕТ ДРАЙВЕРУ МТ ВЫПОЛНЯТЬ АВТОНОМНУЮ
ПЕРЕМОТКУ МАГНИТНОЙ ЛЕНТЫ, ЯВЛЯЕТСЯ 372.

     5.3.1. ПРОГРАММНЫЙ ЗАПРОС .SPFUN
     ФОРМАТ ПРОГРАММНОГО ЗАПРОСА .SPFUN СЛЕДУЮЩИЙ:
     .SPFUN AREA,CHAN,FUNC,BUF,WCNT,BLK[,CRTN]
     ПОЛНОЕ ОПИСАНИЕ АРГУМЕНТОВ ДЛЯ .SPFUN СМ. В [1].
     ДЛЯ ИСПОЛЬЗОВАНИЯ ВЫЗОВА СПЕЦИАЛЬНЫХ ФУНКЦИЙ В ДРАЙВЕРЕ
УСТРОЙСТВА НЕОБХОДИМО ОПРЕДЕЛИТЬ ИНТЕРФЕЙС МЕЖДУ ПРОГРАММНЫМ
ЗАПРОСОМ И ДРАЙВЕРОМ УСТРОЙСТВА. ТАКИМ ОБРАЗОМ, ЗНАЧЕНИЯ
АРГУМЕНТОВ BUF, WCNT И BLK ЗАВИСЯТ ОТ КОНКРЕТНЫХ СПЕЦИАЛЬНЫХ
ФУНКЦИЙ, КОТОРЫЕ ВЫЗЫВАЮТ ЗАПРОС. ЕСЛИ ЗАПРОС ВЫЗЫВАЕТ
ПЕРЕДАЧУ ДАННЫХ, АРГУМЕНТЫ ИМЕЮТ СВОИ ОБЫЧНЫЕ ЗНАЧЕНИЯ.
ОДНАКО, ХОТЯ МОНИТОР ОСУЩЕСТВЛЯЕТ ПРОВЕРКУ, ЧТОБЫ BUF
ЯВЛЯЛСЯ ДЕЙСТВИТЕЛЬНЫМ АДРЕСОМ В ОБЛАСТИ ЗАДАНИЯ, ОН НЕ
ГАРАНТИРУЕТ, ЧТО BUF+WCNT ЕЩЕ НАХОДИТСЯ В ОБЛАСТИ ЗАДАНИЯ.
ПОЭТОМУ НЕОБХОДИМО УКАЗЫВАТЬ ДОПУСТИМЫЕ ЗНАЧЕНИЯ, ЕСЛИ
ИСПОЛЬЗУЕТСЯ ЗАПРОС .SPFUN ДЛЯ ПЕРЕДАЧИ ДАННЫХ.
     ЕСЛИ ВЫЗОВ СПЕЦИАЛЬНОЙ ФУНКЦИИ ЗАКЛЮЧАЕТСЯ В ВОЗВРАТЕ
ОДНОГО ЗНАЧЕНИЯ, ТО BUF ДОЛЖЕН БЫТЬ ОДНОСЛОВНОЙ БУФЕРНОЙ
ОБЛАСТЬЮ. МОЖНО ИЗМЕНЯТЬ WCNT И BLK ПО СВОЕМУ УСМОТРЕНИЮ.
ОНИ МОГУТ БЫТЬ СПЕЦИФИКАЦИЯМИ ОДНОГО СЛОВА, УКАЗАТЕЛЯМИ
БОЛЬШИХ БУФЕРОВ И Т.Д., ТАК КАК ДРАЙВЕР ИНТЕРПРЕТИРУЕТ ИХ В
СООТВЕТСТВИИ С КОДОМ СПЕЦИАЛЬНОЙ ФУНКЦИИ. МОНИТОР НЕ
ИЗМЕНЯЕТ ИХ, КОГДА ПЕРЕДАЕТ В ДРАЙВЕР. НАПРИМЕР, ОН НЕ
ИЗМЕНЯЕТ СЧЕТЧИК СЛОВ ИЗ ПОЛОЖИТЕЛЬНОГО В ОТРИЦАТЕЛЬНЫЙ.

     5.3.2. ПОДДЕРЖКА СПЕЦИАЛЬНЫХ ФУНКЦИЙ В ДРАЙВЕРЕ
УСТРОЙСТВА
     ДЛЯ ОСУЩЕСТВЛЕНИЯ ПОДДЕРЖКИ ВЫЗОВА СПЕЦИАЛЬНЫХ ФУНКЦИЙ
В ДРАЙВЕРЕ УСТРОЙСТВА НЕОБХОДИМО ЗАДАТЬ SPFUN$, ОДИН ИЗ
РАЗРЯДОВ ЗНАЧЕНИЯ STAT, КОТОРОЕ ПРЕДУСМОТРЕНО ДЛЯ ЗАПРОСА
.DRDEF. ЭТО ЗНАЧИТ, ЧТО ДРАЙВЕР ДОПУСКАЕТ ИСПОЛЬЗОВАНИЕ
СПЕЦИАЛЬНЫХ ФУНКЦИЙ.
     ЗАТЕМ ОПРЕДЕЛЯЕТСЯ СИМВОЛИКА В ДРАЙВЕРЕ ДЛЯ
ПРЕДСТАВЛЕНИЯ ТИПОВ СПЕЦИАЛЬНЫХ ФУНКЦИЙ, КОТОРЫЕ МОЖЕТ
ВЫПОЛНИТЬ ДРАЙВЕР. НАПРИМЕР, ДРАЙВЕР УСТРОЙСТВА ГИБКИХ
ДИСКОВ С ДВОЙНОЙ ПЛОТНОСТЬЮ ЗАПИСИ DY ОПРЕДЕЛЯЕТ СЛЕДУЮЩИЕ
КОДЫ СПЕЦИАЛЬНЫХ ФУНКЦИЙ:

        SIZ$FN =373 ;УСТАНАВЛИВАЕТ РАЗМЕР УСТРОЙСТВА
        WDD$FN =375 ;ЗАПИСЫВАЕТ МЕТКУ УДАЛЕННЫХ ДАННЫХ
        WRT$FN =376 ;ЗАПИСЫВАЕТ УКАЗАННЫЙ СЕКТОР
        RED$FN =377 ;СЧИТЫВАЕТ УКАЗАННЫЙ СЕКТОР

     ВСЕ КОДЫ СПЕЦИАЛЬНЫХ ФУНКЦИЙ ДОЛЖНЫ БЫТЬ ОТРИЦАТЕЛЬНЫМИ
ЗНАЧЕНИЯМИ БАЙТА (Т.Е. В ДИАПАЗОНЕ ВОСЬМЕРИЧНЫХ ЧИСЕЛ ОТ
200 ДО 377); РЕКОМЕНДУЕТСЯ, ЧТОБЫ ОПРЕДЕЛЕННЫЙ КОД
СПЕЦИАЛЬНОЙ ФУНКЦИИ ПРЕДСТАВЛЯЛ ОДНУ И ТУ ЖЕ ОПЕРАЦИЮ НА
ВСЕХ УСТРОЙСТВАХ. ПОЭТОМУ НЕОБХОДИМО ОЗНАКОМИТЬСЯ СО ВСЕМИ
УЖЕ СУЩЕСТВУЮЩИМИ КОДАМИ СПЕЦИАЛЬНЫХ ФУНКЦИЙ (СМ. [1]),
ЧТОБЫ УБЕДИТЬСЯ, ЕСТЬ ЛИ СООТВЕТСТВУЮЩИЙ ДАННОЙ СПЕЦИАЛЬНОЙ
ФУНКЦИИ КОД ИЛИ ОН ОТСУТСТВУЕТ. ЕСЛИ КОД УЖЕ СУЩЕСТВУЕТ, ТО
ЕГО СМЕЛО МОЖНО ИСПОЛЬЗОВАТЬ, ЕСЛИ ЖЕ ТАКОВОЙ ОТСУТСТВУЕТ,
ТО НЕОБХОДИМО ПРИСВОИТЬ ЭТОЙ ФУНКЦИИ ЛЮБОЙ СВОБОДНЫЙ КОД,
НАЧИНАЯ С 200 В СТОРОНУ КОДА 377. ЭТО ПОМОЖЕТ ИЗБЕЖАТЬ В
БУДУЩЕМ КОНФЛИКТОВ В ВИДУ ПОЯВЛЕНИЯ НОВЫХ КОДОВ СЛЕДУЮЩИХ
ВЕРСИЙ СИСТЕМЫ.
     КОГДА ДРАЙВЕР ВВОДИТСЯ ДЛЯ ПЕРЕДАЧИ ВВОДА-ВЫВОДА, ОН
ДОЛЖЕН ПРОВЕРИТЬ ЧЕТВЕРТОЕ СЛОВО ЭЛЕМЕНТА ОЧЕРЕДИ, ЧТОБЫ
УБЕДИТЬСЯ, ЯВЛЯЕТСЯ ЛИ ОНО ЗАПРОСОМ СПЕЦИАЛЬНОЙ ФУНКЦИИ.
Q.FUNC, ЯВЛЯЮЩИЙСЯ МЛАДШИМ БАЙТОМ ЧЕТВЕРТОГО СЛОВА ЭЛЕМЕНТА
ОЧЕРЕДИ ВВОДА-ВЫВОДА, СОДЕРЖИТ КОД СПЕЦИАЛЬНОЙ ФУНКЦИИ. В
СТАНДАРТНЫХ ЗАПРОСАХ ВВОДА-ВЫВОДА ДЛЯ ОПЕРАЦИИ СЧИТЫВАНИЯ,
ЗАПИСИ ИЛИ УСТАНОВКИ ЭТОТ БАЙТ РАВЕН 0. ДЛЯ ВЫЗОВОВ
СПЕЦИАЛЬНОЙ ФУНКЦИИ ЭТОТ БАЙТ РАВЕН ОТРИЦАТЕЛЬНОМУ ЗНАЧЕНИЮ
КОДА СПЕЦИАЛЬНОЙ ФУНКЦИИ. НЕОБХОДИМО ПРОВЕРЯТЬ, ЧТОБЫ ЭТОТ
КОД БЫЛ ДОПУСТИМЫМ ДЛЯ ДАННОГО УСТРОЙСТВА, В ПРОТИВНОМ
СЛУЧАЕ, НЕОБХОДИМО УХОДИТЬ НА НЕВОССТАНОВИМУЮ ОШИБКУ.
     ЕСЛИ ЭТО ЗАПРОС СПЕЦИАЛЬНОЙ ФУНКЦИИ, ДРАЙВЕР ДОЛЖЕН
ИНИЦИИРОВАТЬ ЭТУ ФУНКЦИЮ И ВОЗВРАТИТЬСЯ ПО КОМАНДЕ RTS PC.
В СЕКЦИИ ОБРАБОТКИ ПРЕРЫВАНИЙ ДРАЙВЕР ДОЛЖЕН ПРОВЕРИТЬ, КАК
ОБЫЧНО, НАЛИЧИЕ ОШИБОК И ОПРЕДЕЛИТЬ ЗАВЕРШЕНИЕ ОПЕРАЦИИ.
ДРАЙВЕР ВОЗВРАЩАЕТ ИЛИ ДАННЫЕ, ИЛИ СЛОВО, ИНФОРМИРУЮЩИЕ О
СОСТОЯНИИ, В БУФЕР ПОЛЬЗОВАТЕЛЯ ВЫЗВАННОЙ ПРОГРАММЫ.
     ТАК ОСУЩЕСТВЛЯЕТСЯ ВЫПОЛНЕНИЕ СПЕЦИАЛЬНЫХ ФУНКЦИЙ ДЛЯ
ОПРЕДЛЕННОГО УСТРОЙСТВА, МОЖНО УСТАНОВИТЬ ПРАВИЛО ВЫЗОВА ДЛЯ
ЭТОЙ ФУНКЦИИ В ПРОГРАММНОМ ЗАПРОСЕ .SPFUN, А ТАКЖЕ ПРАВИЛО
ВОЗВРАТА ИЗ ДРАЙВЕРА. ДРАЙВЕР ДОЛЖЕН РАССМАТРИВАТЬ
АРГУМЕНТЫ СООТВЕТСТВЕННО ДЛЯ КАЖДОГО РАЗЛИЧНОГО ВЫЗОВА
СПЕЦИАЛЬНОЙ ФУНКЦИИ.

     5.3.3. ТОМА ПЕРЕМЕННОГО РАЗМЕРА
     ДРАЙВЕР МОЖЕТ УПРАВЛЯТЬ УСТРОЙСТВОМ, КОТОРОЕ ДОПУСКАЕТ
ИСПОЛЬЗОВАНИЕ ТОМОВ ДВУХ (ИЛИ БОЛЬШЕ) РАЗЛИЧНЫХ РАЗМЕРОВ.
ПРИМЕРОМ ТАКОГО ДРАЙВЕРА ЯВЛЯЕТСЯ ДРАЙВЕР DY, КОТОРЫЙ МОЖЕТ
ОБСЛУЖИВАТЬ ГИБКИЕ ДИСКИ С ОДИНАРНОЙ ИЛИ С ДВОЙНОЙ
ПЛОТНОСТЬЮ ЗАПИСИ НА ОДНОМ ПРИВОДЕ УСТРОЙСТВА.
     ДРАЙВЕР УСТРОЙСТВА, КОТОРОЕ ПОДДЕРЖИВАЕТ ТОМА РАЗЛИЧНЫХ
РАЗМЕРОВ, ДОЛЖЕН ПЕРЕДАВАТЬ РАЗМЕР В БЛОКАХ САМОГО
МАЛЕНЬКОГО ТОМА В ПАРАМЕТР SIZE ЗАПРОСА .DRDEF. ЭТО
ЗНАЧЕНИЕ ВОЗВРАЩАЕТСЯ В ВЫПОЛНЯЮЩУЮСЯ ПРОГРАММУ, КОГДА ОНА
ВЫДАЕТ ПРОГРАММНЫЙ ЗАПРОС .DSTATUS.
     ЕСЛИ ВЫПОЛНЯЮЩЕЙСЯ ПРОГРАММЕ ВАЖНО ЗНАТЬ РАЗМЕР
УСТАНОВЛЕННОГО В ДАННЫЙ МОМЕНТ ТОМА, ПРОГРАММА МОЖЕТ СДЕЛАТЬ
ВЫЗОВ .SPFUN. ДРАЙВЕР ДОЛЖЕН БЫТЬ В СОСТОЯНИИ ДАТЬ ОТВЕТ
НА ЗАПРОС ПОСРЕДСТВОМ ВОЗВРАЩЕНИЯ ФАКТИЧЕСКОГО РАЗМЕРА ТОМА
В ОДНОСЛОВНУЮ БУФЕРНУЮ ОБЛАСТЬ. ДРАЙВЕР ТАКЖЕ ДОЛЖЕН
ОСУЩЕСТВЛЯТЬ ПОДДЕРЖКУ СПЕЦИАЛЬНЫХ ФУНКЦИЙ, КАК ОПИСАНО
ВЫШЕ. СТАНДАРТНЫЙ КОД СПЕЦИАЛЬНОЙ ФУНКЦИИ ДЛЯ ОПРЕДЕЛЕНИЯ
ФАКТИЧЕСКОГО РАЗМЕРА ТОМА РАВЕН 373.

     5.3.4. УСТРОЙСТВА СО СПЕЦИАЛЬНЫМИ СПРАВОЧНИКАМИ
     МОНИТОР ФОДОС-2 МОЖЕТ СОПРЯГАТЬСЯ С УСТРОЙСТВАМИ
ФАЙЛОВОЙ СТРУКТУРЫ, ИМЕЮЩИМИ НЕСТАНДАРТНЫЕ (Т.Е. НЕ СИСТЕМЫ
ФОДОС-2) СПРАВОЧНИКИ. ПРИМЕРОМ ТАКОГО УСТРОЙСТВА ЯВЛЯЕТСЯ
МАГНИТНАЯ ЛЕНТА. ЕЕ ДРАЙВЕР УСТАНАВЛИВАЕТ РАЗРЯД 12
(SPECL$) СЛОВА СОСТОЯНИЯ УСТРОЙСТВА. USR ОБРАБАТЫВАЕТ
ОПЕРАЦИИ СПРАВОЧНИКА ДЛЯ УСТРОЙСТВ СПРАВОЧНОЙ СТРУКТУРЫ
ФОДОС-2; ДЛЯ СПЕЦИАЛЬНЫХ УСТРОЙСТВ ДРАЙВЕР ДОЛЖЕН
ОБРАБАТЫВАТЬ ОПЕРАЦИИ СПРАВОЧНИКА, КАК .LOOKUP, .ENTER,
 .CLOSE И .DELETE, ТАК ЖЕ, КАК И ПЕРЕДАЧУ ДАННЫХ.
     МОНИТОР ЗАПРАШИВАЕТ СПЕЦИАЛЬНУЮ ОПЕРАЦИЮ СПРАВОЧНИКА
ПОСРЕДСТВОМ ЗАСЫЛКИ ПОЛОЖИТЕЛЬНОГО НЕНУЛЕВОГО ЗНАЧЕНИЯ В
БАЙТ КОДА ФУНКЦИИ ЭЛЕМЕНТА ОЧЕРЕДИ. ПОЛОЖИТЕЛЬНЫЕ КОДЫ
ФУНКЦИЙ ЯВЛЯЮТСЯ СТАНДАРТНЫМИ ДЛЯ ВСЕХ УСТРОЙСТВ. ОНИ
ПРИВЕДЕНЫ НИЖЕ:

 КОД:          1           2          3           4
 ФУНКЦИЯ:   ЗАКРЫТИЕ    УДАЛЕНИЕ   ПРОСМОТР      ВВОД

     ЭТИ ФУНКЦИИ СООТВЕТСТВУЮТ ПРОГРАММНЫМ ЗАПРОСАМ .CLOSE,
.DELETE, .LOOKUP И .ENTER (СМ.[1]). ЗАПРОС .RENAME НЕ
ПОДДЕРЖИВАЕТСЯ ДЛЯ СПЕЦИАЛЬНЫХ УСТРОЙСТВ.
     ПЯТОЕ СЛОВО В ЭЛЕМЕНТЕ ОЧЕРЕДИ ДЛЯ СПЕЦИАЛЬНОЙ ФУНКЦИИ
СПРАВОЧНИКА СОДЕРЖИТ УКАЗАТЕЛЬ БЛОКА ОПРЕДЕЛИТЕЛЯ ФАЙЛА,
СОДЕРЖАЩЕГО ИМЯ УСТРОЙСТВА, ИМЯ И ТИП ФАЙЛА В RADIX-50.
     ПРОГРАММНЫЕ ОШИБКИ (ТАКИЕ, КАК "ФАЙЛ НЕ НАЙДЕН" ИЛИ
"СПРАВОЧНИК ЗАПОЛНЕН"), ВОЗНИКАЮЩИЕ В ДРАЙВЕРЕ СПЕЦИАЛЬНОГО
УСТРОЙСТВА ВО ВРЕМЯ ОПЕРАЦИЙ СПРАВОЧНИКА, ВОЗВРАЩАЮТСЯ В
МОНИТОР. КОД КАЖДОЙ ОШИБКИ ВЫБИРАЕТСЯ ДЛЯ ОПРЕДЕЛЕННОГО
ТИПА ОШИБКИ. КОД ОШИБКИ ВОЗВРАЩАЕТСЯ ПОСРЕДСТВОМ ЗАСЫЛКИ
ЕГО В SPUSR (ОШИБКА USR СПЕЦИАЛЬНОГО УСТРОЙСТВА),
РАСПОЛОЖЕННОГО У ФИКСИРОВАННОГО СМЕЩЕНИЯ 272 ОТ НАЧАЛА
РЕЗИДЕНТНОГО МОНИТОРА. АППАРАТНЫЕ ОШИБКИ ВОЗВРАЩАЮТСЯ
ОБЫЧНЫМ СПОСОБОМ ПОСРЕДСТВОМ УСТАНОВКИ НУЛЕВОГО РАЗРЯДА В
СЛОВЕ СОСТОЯНИЯ КАНАЛА (ВТОРОЕ СЛОВО ЭЛЕМЕНТА ОЧЕРЕДИ).
     ПРОГРАММНЫЕ ЗАПРОСЫ ДЛЯ ОПЕРАЦИЙ СПРАВОЧНИКА
СПЕЦИАЛЬНЫХ УСТРОЙСТВ ОБРАБАТЫВАЮТСЯ СТАНДАРТНЫМИ
ПРОГРАММНЫМИ ЗАПРОСАМИ. КОГДА, НАПРИМЕР, ВЫДАЕТСЯ ЗАПРОС
.LOOKUP, МОНИТОР ПРОВЕРЯЕТ РАЗРЯД СПЕЦИАЛЬНОГО УСТРОЙСТВА В
СЛОВЕ СОСТОЯНИЯ УСТРОЙСТВА. ЕСЛИ УСТРОЙСТВО ИМЕЕТ
СПЕЦИАЛЬНУЮ СПРАВОЧНУЮ СТРУКТУРУ, ТО СООТВЕТСТВУЮЩИЙ КОД
ФУНКЦИИ ВВОДИТСЯ В ЭЛЕМЕНТ ОЧЕРЕДИ, И ЭЛЕМЕНТ
НЕПОСРЕДСТВЕННО УСТАНАВЛИВАЕТСЯ В ОЧЕРЕДЬ ДРАЙВЕРА, ОБХОДЯ
ОБРАБОТКУ ПОСРЕДСТВОМ USR. НЕЗАВИСИМОСТЬ УСТРОЙСТВА
СОХРАНЯЕТСЯ, ТАК КАК ОПЕРАЦИИ .LOOKUP, .ENTER, .CLOSE И
.DELETE ОЧЕВИДНЫ ДЛЯ ПОЛЬЗОВАТЕЛЯ.
     ДЛЯ СПЕЦИАЛЬНЫХ УСТРОЙСТВ ЗАПРОС .LOOKUP ВОЗВРАЩАЕТ
РАЗМЕР ФАЙЛА В ШЕСТОЕ СЛОВО ЭЛЕМЕНТА ОЧЕРЕДИ (Q.WCNT). ДЛЯ
ЗАПРОСА .ENTER ШЕСТОЕ СЛОВО ВОЗВРАЩАЕТ РАЗМЕР НОВОГО ФАЙЛА.

     5.4. ДРАЙВЕРЫ УСТРОЙСТВ В XM-СИСТЕМЕ
     ДРАЙВЕРЫ УСТРОЙСТВ В СИСТЕМАХ SJ И FB ТРЕБУЮТ
НЕСКОЛЬКИХ ИЗМЕНЕНИЙ ДЛЯ ПРАВИЛЬНОЙ РАБОТЫ В СИСТЕМЕ XM.
ПРЕДВАРИТЕЛЬНО НЕОБХОДИМО ОЗНАКОМИТЬСЯ С УСЛОВНЫМИ
ОБОЗНАЧЕНИЯМИ В СИСТЕМЕ XM.

     5.4.1. УСЛОВНЫЕ ОБОЗНАЧЕНИЯ НАИМЕНОВАНИЙ И УСЛОВНЫЕ
ОБОЗНАЧЕНИЯ СИСТЕМЫ
     ПРИ НАПИСАНИИ ДРАЙВЕРА УСТРОЙСТВА ПИШЕТСЯ ОБЩИЙ
ИСХОДНЫЙ ФАЙЛ С ИМЕНЕМ DD.MAC, ГДЕ DD - ЭТО ДВУХСИМВОЛЬНОЕ
ИМЯ УСТРОЙСТВА, ВКЛЮЧАЮЩЕЕ КОД, КОТОРЫЙ ОБЕСПЕЧИВАЕТ
ПОДДЕРЖКУ РАСШИРЕННОЙ ПАМЯТИ В ДИРЕКТИВАХ УСЛОВНОЙ
ТРАНСЛЯЦИИ. ОБОЗНАЧЕНИЕМ УСЛОВИЯ, КОТОРОЕ ОБЕСПЕЧИВАЕТ
ПОДДЕРЖКУ РАСШИРЕННОЙ ПАМЯТИ ПРИ ГЕНЕРАЦИИ СИСТЕМЫ, ЯВЛЯЕТСЯ
MMG$T, КОТОРОЕ ИМЕЕТ ЗНАЧЕНИЕ 0, ЕСЛИ ПОДДЕРЖКА РАСШИРЕННОЙ
ПАМЯТИ НЕ ВЫБРАНА, ИЛИ 1, ЕСЛИ ВЫБРАНА ПОДДЕРЖКА РАСШИРЕННОЙ
ПАМЯТИ.
     ЭТО ОЗНАЧАЕТ, ЧТО КОД РАСШИРЕННОЙ ПАМЯТИ ТРАНСЛИРУЕТСЯ
ТОЛЬКО ТОГДА, КОГДА ЗНАЧЕНИЕ, УСЛОВНО ОБОЗНАЧЕННОЕ MMG$T,
РАВНО 1. ДАЛЕЕ НЕОБХОДИМО ПРОТРАНСЛИРОВАТЬ ИСХОДНЫЙ ФАЙЛ
DD.MAC С УСЛОВНЫМ ФАЙЛОМ СИСТЕМЫ, SYCND, И С XM.MAC,
СОЗДАВАЯ DDX.OBJ ДЛЯ XM-СИСТЕМЫ ИЛИ DD.OBJ ДЛЯ СИСТЕМ SJ ИЛИ
FB. ЭТА ПРОЦЕДУРА ГАРАНТИРУЕТ, ЧТО ДОПОЛНИТЕЛЬНЫЕ СРЕДСТВА
СИСТЕМЫ, КОТОРЫЕ ПОДДЕРЖИВАЮТ ДРАЙВЕР, СОГЛАСУЮТСЯ С
ДОПОЛНИТЕЛЬНЫМИ СРЕДСТВАМИ ДАННОГО МОНИТОРА.

     5.4.2. XM-СРЕДА
     В СИСТЕМЕ XM ДРАЙВЕРЫ ДОЛЖНЫ РАЗМЕЩАТЬСЯ В ПРЕДЕЛАХ
МЛАДШИХ 28К СЛОВ ФИЗИЧЕСКОЙ ПАМЯТИ. МОЖЕТ БЫТЬ ЕЩЕ ОДНО
ОГРАНИЧЕНИЕ, В ЗАВИСИМОСТИ ОТ НАЛИЧИЯ ИЛИ ОТСУТСТВИЯ
ПОДДЕРЖКИ .FETCH В XM-МОНИТОРЕ.
     ЕСЛИ XM-МОНИТОР ОСУЩЕСТВЛЯЕТ ПОДДЕРЖКУ .FETCH, ДРАЙВЕР
НЕ МОЖЕТ РАЗМЕЩАТЬСЯ В ПРЕДЕЛАХ ОБЛАСТИ ФИЗИЧЕСКОЙ ПАМЯТИ,
ОТОБРАЖЕННОЙ ПОСРЕДСТВОМ РАС1 (РЕГИСТР АДРЕСА СТРАНИЦЫ 1),
ОБЛАСТЬЮ, КОТОРАЯ ВКЛЮЧАЕТ ЯЧЕЙКИ ПАМЯТИ ОТ 20000 ДО 37776.
ПЕРЕД ВЫЗОВОМ ПРОГРАММ, ИСПОЛЬЗУЮЩИХ ДРАЙВЕРЫ НЕОБХОДИМО
СДЕЛАТЬ ИХ РЕЗИДЕНТНЫМИ ПО КОМАНДЕ МОНИТОРА LOAD, КОТОРАЯ
ПРИВОДИТ К ОГРАНИЧЕНИЮ АДРЕСА.
     ЕСЛИ XM-МОНИТОР ПОДДЕРЖИВАЕТ .FETCH (ОПРЕДЕЛЯЕТСЯ ВО
ВРЕМЯ ГЕНЕРАЦИИ СИСТЕМЫ), ОГРАНИЧЕНИЕ РАСПРОСТРАНЯЕТСЯ
ТОЛЬКО НА РАЗМЕЩЕНИЕ ДРАЙВЕРА В ПАМЯТИ, ОН НЕ ДОЛЖЕН
ПРЕВЫШАТЬ 28К СЛОВ. ПРИ ПОДДЕРЖКЕ .FETCH НЕТ НАДОБНОСТИ В
ЗАГРУЗКЕ ДРАЙВЕРОВ XM ПЕРЕД ВЫЗОВОМ ПРОГРАММ. ОДНАКО, ДАЖЕ
ПРИ ПОДДЕРЖКЕ .FETCH, ТОТ ЖЕ САМЫЙ ДРАЙВЕР МОЖЕТ БЫТЬ
ЗАГРУЖЕН ПО КОМАНДЕ МОНИТОРА LOAD.
     КОГДА ДРАЙВЕРЫ ВВЕДЕНЫ, ОНИ ВЫПОЛНЯЮТСЯ С ВНУТРЕННИМ
ОТОБРАЖЕНИЕМ, КОТОРОЕ РАЗРЕШАЕТ ДОСТУП К МЛАДШИМ 28К СЛОВАМ
ПАМЯТИ ПЛЮС СТРАНИЦА УСТРОЙСТВА ВВОДА-ВЫВОДА (СМ. РАЗДЕЛ
6). ОДНАКО ПРОГРАММЕ, ЗАПРАШИВАЮЩЕЙ ПЕРЕДАЧУ ВВОДА-ВЫВОДА,
НЕТ НЕОБХОДИМОСТИ ИМЕТЬ ТАКОЕ ЖЕ ОТОБРАЖЕНИЕ, ЧТО И
ВНУТРЕННЕЕ. ФАКТИЧЕСКИ ПРОГРАММА МОЖЕТ ПОПАДАТЬ В ОДНУ ИЗ
ТРЕХ ВОЗМОЖНЫХ КАТЕГОРИЙ:
     - ПРИВИЛЕГИРОВАННОЕ ЗАДАНИЕ, ОТОБРАЖЕНИЕ КОТОРОГО
АНАЛОГИЧНО ВНУТРЕННЕМУ;
     - ПРИВИЛЕГИРОВАННОЕ ЗАДАНИЕ, КОТОРОЕ ОТОБРАЖАЕТСЯ В
АДРЕСА ФИЗИЧЕСКОЙ ПАМЯТИ СВЫШЕ 28К СЛОВ;
     - ВИРТУАЛЬНОЕ ЗАДАНИЕ С ЛЮБЫМ ВИДОМ ОТОБРАЖЕНИЯ.
     ОСНОВНУЮ ТРУДНОСТЬ ДЛЯ ДРАЙВЕРОВ В СИСТЕМЕ XM
ПРЕДСТАВЛЯЕТ СВЯЗЬ С БУФЕРОМ ДАННЫХ ПОЛЬЗОВАТЕЛЯ. ЭТА
ТРУДНОСТЬ ВОЗНИКАЕТ ОТТОГО, ЧТО ПРОГРАММА, ЗАПРАШИВАЮЩАЯ
ПЕРЕДАЧУ ВВОДА-ВЫВОДА, ВЫДАЕТ 16-РАЗРЯДНЫЙ ВИРТУАЛЬНЫЙ АДРЕС
БУФЕРА В ПРОГРАММНОМ ЗАПРОСЕ, НЕСМОТРЯ НА ТО, ЧТО ЧАСТЬ
ОБЛАСТИ ВИРТУАЛЬНОЙ АДРЕСАЦИИ ПОЛЬЗОВАТЕЛЯ МОЖЕТ БЫТЬ
ОТОБРАЖЕНА ГДЕ-ЛИБО ЕЩЕ В ФИЗИЧЕСКОЙ ПАМЯТИ. ПОЭТОМУ
ДРАЙВЕР ДОЛЖЕН НАЙТИ ФАКТИЧЕСКИЙ 18- ИЛИ 22-РАЗРЯДНЫЙ
ФИЗИЧЕСКИЙ АДРЕС БУФЕРА ДАННЫХ ПОЛЬЗОВАТЕЛЯ ПЕРЕД
ПЕРЕМЕЩЕНИЕМ ИНФОРМАЦИИ В НЕГО И ИЗ НЕГО. МОНИТОР СЛЕДИТ ЗА
ТЕМ, ЧТОБЫ БУФЕРНАЯ ОБЛАСТЬ ПАМЯТИ ЗАНИМАЛА СМЕЖНЫЕ ЯЧЕЙКИ В
ФИЗИЧЕСКОЙ ПАМЯТИ.
     ДЕЛО В ТОМ, ЧТО В СИСТЕМЕ XM ЯЧЕЙКИ ФИЗИЧЕСКОЙ ПАМЯТИ
ВЫРАЖЕНЫ В ВИДЕ 18- ИЛИ 22-РАЗРЯДНЫХ АДРЕСОВ, ЭТО ВАЖНО,
КОГДА НЕОБХОДИМО ОБОЗНАЧИТЬ АДРЕС В ПРЕДЕЛАХ САМОГО ДРАЙВЕРА
В ВИДЕ АДРЕСА БУФЕРА. ЕСЛИ, НАПРИМЕР, ДРАЙВЕР СОДЕРЖИТ
СТРОКУ НУЛЕЙ, КОТОРУЮ ОН ЗАПИСЫВАЕТ В УСТРОЙСТВО КАК ЧАСТЬ
ИНИЦИАЛИЗАЦИИ, ДРАЙВЕР УСТАНАВЛИВАЕТ ОПЕРАЦИЮ ЗАПИСИ
УСТРОЙСТВА, ОБОЗНАЧАЯ АДРЕС СТРОКИ В ДРАЙВЕРЕ КАК АДРЕС
БУФЕРА. ТАК КАК ДРАЙВЕР РАЗМЕЩАЕТСЯ В ПРЕДЕЛАХ МЛАДШИХ 28К
СЛОВ ФИЗИЧЕСКОЙ ПАМЯТИ, ЕГО ФИЗИЧЕСКИЙ АДРЕС МОЖЕТ БЫТЬ
ВЫРАЖЕН КАК ЕГО ВИРТУАЛЬНЫЙ 16-РАЗРЯДНЫЙ АДРЕС ПЛЮС
ДОПОЛНИТЕЛЬНЫЕ РАЗРЯДЫ ДЛЯ XM (РАЗРЯДЫ 16 И 17 ДЛЯ
18-РАЗРЯДНОГО АДРЕСА ИЛИ РАЗРЯДЫ С 16 ПО 21 ДЛЯ
22-РАЗРЯДНОГО АДРЕСА), КОТОРЫЕ ДОЛЖНЫ БЫТЬ НУЛЕВЫМИ.
     НА РИС.6 ПОКАЗАНА XM-СИСТЕМА. ПРОГРАММА, КОТОРАЯ
ЗАПРАШИВАЕТ ПЕРЕДАЧУ ВВОДА-ВЫВОДА, ОТОБРАЗИЛА ОБЛАСТЬ БУФЕРА
ДАННЫХ В ФИЗИЧЕСКУЮ ПАМЯТЬ ВЫШЕ ГРАНИЦЫ 28К СЛОВ.

                         ОБЛАСТЬ
                    ФИЗИЧЕСКИХ АДРЕСОВ
                      .-------------
                       ! СТРАНИЦА !
                       !ВВОДА-ВЫВОД!
                    . .!-----------!
                       ! !
                       ! !
                   . . !           ! 
                       !           ! 
          ОБЛАСТЬ . .  !           !       ОБЛАСТЬ 
          ВНУТРЕННЕГО  !-----------!.   ВИРТУАЛЬНОГО 
ДИАПАЗОН  ВИРТУАЛЬНОГО !           ! .     АДРЕСА   ДИАПАЗОН
АДРЕСА РАС  АДРЕСА .   !   BUFF:   !   . ПОЛЬЗОВ. РАС АДРЕСА
-----------------.     !-----------!.     .-----------------
!177776!7!      ! .    !           ! .     !      !7!177776!
!160000! !      !      !           !   .   !      ! !160000!
!------!-!------!.  28K!-----------!      .!---------------!
!157776!6!      !----->!           !       !      !6!157776!
!140000! !      !      !           !       !      ! !140000!
!------!-!------!      !-----------!       !---------------!
!137776!5!      !----->!           !       !      !5!137776!
!120000! !      !      !           !       !      ! !120000!
!------!-!------!      !-----------!       !------!-!------!
!117776!4!      !----->!           !       !      !4!117776!
!100000! !      !      !           !       !      ! !100000!
!------!-!------!      !-----------!       !------!-!------!
! 77776!3!      !----->!  ДРАЙВЕР  !       !      !3! 77776!
! 60000! !      !      ! УСТРОЙСТВА!       !      ! ! 60000!
!------!-!------!      !-----------!       !------!-!------!
! 57776!2!      !----->!           !       !      !2! 57776!
! 40000! !      !      !           !       !      ! ! 40000!
!------!-!------!      !-----------!       !------!-!------!
! 37776!1!      !-->   !           !       !      !1! 37776!
! 20000! !      !      !           !       !      ! ! 20000!
!------!-!------!      !-----------!       !------!-!------!
! 17776!0!202   !----->!           !       !      !0! 17776!
! 00000! !200   !      !           !       !      ! ! 00000!
-----------------      -------------       -----------------
                  /\                  /\
                   !                   !
                   !                   !
             ВНУТРЕННЕЕ           ВИРТУАЛЬНОЕ 
             ОТОБРАЖЕНИЕ          ОТОБРАЖЕНИЕ 

                         РИС.6.

     МОНИТОР ФОДОС-2 ПРЕДОСТАВЛЯЕТ ПОДПРОГРАММЫ ДЛЯ
ДРАЙВЕРОВ ДЛЯ ДОСТУПА К БУФЕРУ ДАННЫХ ПОЛЬЗОВАТЕЛЯ В
ФИЗИЧЕСКОЙ ПАМЯТИ. ДАЛЕЕ ОПИСАНЫ ЭТИ ПОДПРОГРАММЫ И
СИТУАЦИИ, В КОТОРЫХ ОНИ ИСПОЛЬЗУЮТСЯ.

     5.4.3. ЭЛЕМЕНТ ОЧЕРЕДИ В XM
     ДЛЯ ТОГО, ЧТОБЫ НАЙТИ ФАКТИЧЕСКИЙ БУФЕР ПОЛЬЗОВАТЕЛЯ В
ФИЗИЧЕСКОЙ ПАМЯТИ, ДРАЙВЕРУ ТРЕБУЕТСЯ ДОПОЛНИТЕЛЬНОЕ
ИНФОРМАЦИОННОЕ СЛОВО В ЭЛЕМЕНТЕ ОЧЕРЕДИ. ЭТО СЛОВО ЯВЛЯЕТСЯ
ЗНАЧЕНИЕМ ДЛЯ РАС1, КОТОРОЕ, БУДУЧИ ОБ'ЕДИНЕНО С АДРЕСОМ
ВИРТУАЛЬНОГО БУФЕРА ПОЛЬЗОВАТЕЛЯ, ОБЕСПЕЧИВАЕТ ФИЗИЧЕСКИЙ
АДРЕС БУФЕРА. ХОТЯ ДЛЯ ДРАЙВЕРОВ В XM-СИСТЕМЕ ИСПОЛЬЗУЕТСЯ
ТОЛЬКО ОДНО ДОПОЛНИТЕЛЬНОЕ СЛОВО, ЭЛЕМЕНТ ОЧЕРЕДИ
ПРЕДОСТАВЛЯЕТ МЕСТО ДЛЯ ДВУХ СЛОВ. ЭТИ ДВА СЛОВА, СО
СМЕЩЕНИЯМИ 20 И 22, СОХРАНЯЮТСЯ ДЛЯ БУДУЩЕГО ИСПОЛЬЗОВАНИЯ В
СИСТЕМЕ И НЕ ДОЛЖНЫ ИСПОЛЬЗОВАТЬСЯ ПОЛЬЗОВАТЕЛЕМ. КОГДА
УСЛОВНО ОБОЗНАЧЕННЫЙ СИСТЕМОЙ MMG$T УСТАНОВЛЕН 1, ЗАПРОС
.QELDF, ВЫЗВАННЫЙ ПОСРЕДСТВОМ .DRDEF В НАЧАЛЕ ДРАЙВЕРА,
РАСШИРЯЕТСЯ ПРИ ГЕНЕРАЦИИ ДОПУСТИМЫХ СМЕЩЕНИЙ ДЛЯ ЭЛЕМЕНТА
ОЧЕРЕДИ XM. НИЖЕ ПРИВЕДЕНО ЭТО МАКРОРАСШИРЕНИЕ:

        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$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=^O10
        Q.PAR=^O16 (ЗНАЧЕНИЕ РАС1)
        Q$PAR=^O12
        Q.ELGN=^O24 (РАЗМЕР ЭЛЕМЕНТА ОЧЕРЕДИ)

     5.4.4. УСТРОЙСТВА ПРОИЗВОЛЬНОГО ДОСТУПА К ДАННЫМ:
ПОДПРОГРАММА $MPPHY

     УСТРОЙСТВА ПРОИЗВОЛЬНОГО ДОСТУПА К ДАННЫМ, НАПРИМЕР,
БОЛЬШИНСТВО ДИСКОВ, РАБОТАЮТ, ОБЫЧНО, С 18-РАЗРЯДНЫМИ ИЛИ
22-РАЗРЯДНЫМИ АДРЕСАМИ, ПОЭТОМУ ИХ ДРАЙВЕРАМ НЕТ
НЕОБХОДИМОСТИ ОТОБРАЖАТЬСЯ В БУФЕР ПОЛЬЗОВАТЕЛЯ. ЭТИ
ДРАЙВЕРЫ ИСПОЛЬЗУЮТ ПОДПРОГРАММУ МО
НИТОРА $MPPHY ДЛЯ ПОИСКА
БУФЕРА ПОЛЬЗОВАТЕЛЯ В ФИЗИЧЕСКОЙ ПАМЯТИ. $MPPHY ИСПОЛЬЗУЕТ
ЗНАЧЕНИЕ Q.PAR ЭЛЕМЕНТА ОЧЕРЕДИ И АДРЕС ВИРТУАЛЬНОГО БУФЕРА
Q.BUFF ДЛЯ СОЗДАНИЯ ИСТИННОГО 18- ИЛИ 22-РАЗРЯДНОГО АДРЕСА
БУФЕРА ПОЛЬЗОВАТЕЛЯ.
     ФОРМАТ ВЫЗОВА ПОДПРОГРАММЫ $MPPHY СЛЕДУЮЩИЙ:
     JSR PC,@$MPPTR
ГДЕ $MPPTR - СОДЕРЖИТ УКАЗАТЕЛЬ ПОДПРОГРАММЫ $MPPHY В
             РЕЗИДЕНТНОМ МОНИТОРЕ; ЗАПРОС .DREND РАЗМЕЩАЕТ
             ЭТОТ УКАЗАТЕЛЬ В КОНЦЕ ДРАЙВЕРА; УКАЗАТЕЛЬ
             ЗАПОЛНЯЕТСЯ ВО ВРЕМЯ НАЧАЛЬНОЙ ЗАГРУЗКИ (ДЛЯ
             СИСТЕМНОГО УСТРОЙСТВА) ИЛИ ВО ВРЕМЯ LOAD (ДЛЯ
             УСТРОЙСТВА ДАННЫХ).
     ПЕРЕД ВЫЗОВОМ:
R5 ДОЛЖЕН УКАЗЫВАТЬ НА Q.BUFF, ПЯТОЕ СЛОВО ЭЛЕМЕНТА ОЧЕРЕДИ.
     ПОСЛЕ ВЫЗОВА:
(SP), ПЕРВОЕ СЛОВО В СТЕКЕ, СОДЕРЖИТ ШЕСТНАДЦАТЬ МЛАДШИХ
РАЗРЯДОВ ФИЗИЧЕСКОГО АДРЕСА БУФЕРА;
2(SP), ВТОРОЕ СЛОВО В СТЕКЕ, СОДЕРЖИТ 2 СТАРШИХ РАЗРЯДА
ФИЗИЧЕСКОГО АДРЕСА БУФЕРА В РАЗРЯДАХ 4 И 5 (ДЛЯ
18-РАЗРЯДНОГО АДРЕСА) ИЛИ В РАЗРЯДАХ С 4 ПО 9 (ДЛЯ
22-РАЗРЯДНОГО АДРЕСА);
R5 УКАЗЫВАЕТ НА Q.WCNT, ШЕСТОЕ СЛОВО ЭЛЕМЕНТА ОЧЕРЕДИ;
ЗНАЧЕНИЕ НЕ ИЗМЕНЯЕТСЯ.
     ПРИМЕР:
        CMP (R5)+,(R5) ;ПЕРЕХОДИТ К АДРЕСУ БУФЕРА
                                ;В ЭЛЕМЕНТЕ ОЧЕРЕДИ
        JSR PC,@$MPPTR ;ПЕРЕВОДИТ ВИРТУАЛЬНЫЙ
                                ;АДРЕС ПОЛЬЗОВАТЕЛЯ
                                ;В ФИЗИЧЕСКИЙ
        MOV (SP)+,-(R4) ;ЗАСЫЛАЕТ 16 МЛАДШИХ
                                ;РАЗРЯДОВ В RKBA, СТАРШИЕ
                                ;РАЗРЯДЫ - В СТЕК
        MOV (R5)+,-(R4) ;ЗАСЫЛАЕТ СЧЕТЧИК СЛОВ
                                ;В RKWC
        BEQ 7$ ;СЧЕТЧИК РАВЕН 0 = ПОИСК
 BMI 5$ ;СЧЕТЧИК ОТРИЦАТЕЛЬНЫЙ =
                                ;ЗАПИСЬ ВСЕХ ДО ПОСЛЕДНЕГО
        NEG @R4 ;СЧЕТЧИК ПОЛОЖИТЕЛЬНЫЙ =
                                ;СЧИТЫВАТЬ, ФИКСИРУЯ СЧЕТЧИК
                                ;ДЛЯ КОНТРОЛЛЕРА
        MOV #CSIE!FNREAD!CSGO,R3 ;ФУНКЦИЯ СЧИТЫВАНИЯ
5$: BIS (SP)+,R3 ;ПРИСОЕДИНЕНИЕ СТАРШИХ
                                ;РАЗРЯДОВ АДРЕСА В ФУНКЦИЮ
        MOV R3,-(R4) ;НАЧАЛО ОПЕРАЦИИ
6$: RTS PC ;ВЫХОД ИЗ ПРЕРЫВАНИЯ

     ЭТОТ ПРИМЕР ВЗЯТ ИЗ ДРАЙВЕРА RK.

     5.4.5. СИМВОЛЬНО-ОРИЕНТИРОВАННЫЕ УСТРОЙСТВА:
ПОДПРОГРАММЫ $GETBYT И $PUTBYT
     ДРАЙВЕРЫ СИМВОЛЬНО-ОРИЕНТИРОВАННЫХ УСТРОЙСТВ, ТАКИХ КАК
ПЕРФОЛЕНТОЧНОЕ УСТРОЙСТВО ВВОДА-ВЫВОДА ПОСТРОЧНО-ПЕЧАТАЮЩЕЕ
УСТРОЙСТВО, ДОЛЖНЫ САМИ ПЕРЕДАВАТЬ ДАННЫЕ ИЗ УСТРОЙСТВА В
ОБЛАСТЬ БУФЕРА ПОЛЬЗОВАТЕЛЯ. УСТРОЙСТВО САМО ИСПОЛЬЗУЕТ
РЕГИСТРЫ В СТРАНИЦЕ ВВОДА-ВЫВОДА ДЛЯ ЗАПИСИ ОДНОГО СИМВОЛА
ЗА РАЗ. ДРАЙВЕР МОЖЕТ ИСПОЛЬЗОВАТЬ ДВЕ ПОДПРОГРАММЫ
МОНИТОРА - $GETBYT И $PUTBYT - ДЛЯ ПЕРЕДВИЖЕНИЯ ДАННЫХ МЕЖДУ
СТРАНИЦЕЙ ВВОДА-ВЫВОДА И ОБЛАСТЬЮ БУФЕРА ПОЛЬЗОВАТЕЛЯ.
     5.4.5.1. ПОДПРОГРАММА $GETBYT
     ДРАЙВЕР МОЖЕТ ИСПОЛЬЗОВАТЬ ПОДПРОГРАММУ МОНИТОРА
$GETBYT ДЛЯ ПЕРЕМЕЩЕНИЯ БАЙТА ИЗ ОБЛАСТИ БУФЕРА ФИЗИЧЕСКОЙ
ПАМЯТИ В СТЕК. ЗАТЕМ ДРАЙВЕР МОЖЕТ ПЕРЕМЕЩАТЬ СИМВОЛЫ В
РЕГИСТР БУФЕРА ДАННЫХ УСТРОЙСТВА СТРАНИЦЫ ВВОДА-ВЫВОДА И
ИНИЦИИРОВАТЬ ПЕРЕДАЧУ ВВОДА-ВЫВОДА.
     ФОРМАТ ВЫЗОВА ПОДПРОГРАММЫ $GETBYT:
     JSR PC,@$GTBYT
ГДЕ $GTBYT - СОДЕРЖИТ УКАЗАТЕЛЬ ПОДПРОГРАММЫ $GETBYT В
             РЕЗИДЕНТНОМ МОНИТОРЕ; ЗАПРОС .DREND РАЗМЕЩАЕТ
             ЭТОТ УКАЗАТЕЛЬ В КОНЦЕ ДРАЙВЕРА; УКАЗАТЕЛЬ
             ЗАПОЛНЯЕТСЯ ВО ВРЕМЯ НАЧАЛЬНОЙ ЗАГРУЗКИ (ДЛЯ
             СИСТЕМНОГО УСТРОЙСТВА) ИЛИ ВО ВРЕМЯ LOAD (ДЛЯ
             УСТРОЙСТВА ДАННЫХ).
     ПЕРЕД ВЫЗОВОМ:
R4 ДОЛЖЕН УКАЗЫВАТЬ НА Q.BLKN, ТРЕТЬЕ СЛОВО ЭЛЕМЕНТА
ОЧЕРЕДИ.
     ПОСЛЕ ВЫЗОВА:
(SP), ПЕРВОЕ СЛОВО В СТЕКЕ, СОДЕРЖИТ СЛЕДУЮЩИЙ БАЙТ ИЗ
БУФЕРА ПОЛЬЗОВАТЕЛЯ В МЛАДШЕМ БАЙТЕ; СОДЕРЖИМОЕ СТАРШЕГО
БАЙТА НЕ ОПРЕДЕЛЕНО;
R4 НЕ ИЗМЕНЯЕТСЯ.
     АДРЕС БУФЕРА (Q.BUFF) В ЭЛЕМЕНТЕ ОЧЕРЕДИ
УСТАНАВЛИВАЕТСЯ 1. ЕСЛИ ВОЗНИКАЕТ ПЕРЕПОЛНЕНИЕ ОТОБРАЖЕНИЯ,
ПОДПРОГРАММА ВЫЧИТАЕТ 20000 ИЗ ЗНАЧЕНИЯ В Q.BUFF И ДОБАВЛЯЕТ
200 К ЗНАЧЕНИЮ В Q.PAR. БОЛЕЕ ПОДРОБНО ПЕРЕПОЛНЕНИЕ
ОТОБРАЖЕНИЯ ОПИСАНО В П.5.4.7.
     ПРИМЕР:
        MOV PCCQE,R4 ;УКАЗАТЕЛЬ ТЕКУЩЕГО
                                ;ЭЛЕМЕНТА ОЧЕРЕДИ
        MOV #PP$CSR,R5 ;УКАЗАТЕЛЬ РЕГИСТРА
                                ;СОСТОЯНИЯ ПЕРФОЛЕНТОЧНОГО
                                ;УСТРОЙСТВА ВВОДА-ВЫВОДА
        TST (RT)+ ;ОШИБКА?
        BMI PPERR ;ДА, В УСТРОЙСТВЕ НЕТ ЛЕНТЫ
        TST Q$WCNT(R4) ;ЕСТЬ ЕЩЕ СИМВОЛЫ ДЛЯ
                                ;ВЫВОДА?
        BEQ PCDONE ;НЕТ, ГОТОВНОСТЬ К ПЕРЕДАЧЕ
        INC Q$WCNT(R4) ;УМЕНЬШАЕТСЯ СЧЕТЧИК БАЙТОВ
                                ;(ОН ОТРИЦАТЕЛЬНЫЙ)
        JSR PC,@$GTBYT ;ИЗЫМАЕТСЯ БАЙТ ИЗ БУФЕРА
                                ;ПОЛЬЗОВАТЕЛЯ
        MOVB (SP)+,@R5 ;ВЫВОДИТ ЕГО НА ПЕРФОЛЕНТУ

     ЭТОТ ПРИМЕР ИЗ ДРАЙВЕРА PC ПОКАЗЫВАЕТ КАК ДРАЙВЕР
ПОЛУЧАЕТ БАЙТ ИЗ БУФЕРА ПОЛЬЗОВАТЕЛЯ И ВЫВОДИТ ЕГО НА
ПЕРФОЛЕНТУ.

     5.4.5.2. ПОДПРОГРАММА $PUTBYT
     ПОСЛЕ УСПЕШНОЙ ПЕРЕДАЧИ ДАННЫХ ДРАЙВЕР МОЖЕТ ПОЛУЧИТЬ
СИМВОЛ ИЗ РЕГИСТРА БУФЕРА ДАННЫХ УСТРОЙСТВА СТРАНИЦЫ
ВВОДА-ВЫВОДА И ЗАНЕСТИ ЕГО В СТЕК. ЗАТЕМ ОН МОЖЕТ
ИСПОЛЬЗОВАТЬ ПОДПРОГРАММУ $PUTBYT ДЛЯ ПЕРЕМЕЩЕНИЯ БАЙТА ИЗ
СТЕКА В БУФЕР ПОЛЬЗОВАТЕЛЯ ФИЗИЧЕСКОЙ ПАМЯТИ.
     ФОРМАТ ВЫЗОВА ПОДПРОГРАММЫ $PUTBYT СЛЕДУЮЩИЙ:
     JSR PC,@$PTBYT
ГДЕ $PTBYT - СОДЕРЖИТ УКАЗАТЕЛЬ ПОДПРОГРАММЫ $PUTBYT В
             РЕЗИДЕНТНОМ МОНИТОРЕ; ЗАПРОС .DREND РАЗМЕЩАЕТ
             ЭТОТ УКАЗАТЕЛЬ В КОНЦЕ ДРАЙВЕРА; УКАЗАТЕЛЬ
             ЗАПОЛНЯЕТСЯ ВО ВРЕМЯ НАЧАЛЬНОЙ ЗАГРУЗКИ (ДЛЯ
             СИСТЕМНОГО УСТРОЙСТВА) ИЛИ ВО ВРЕМЯ LOAD (ДЛЯ
             УСТРОЙСТВА ДАННЫХ).

     ПЕРЕД ВЫЗОВОМ:
R4 ДОЛЖЕН УКАЗЫВАТЬ НА Q.BLKN, ТРЕТЬЕ СЛОВО ЭЛЕМЕНТА
ОЧЕРЕДИ; БАЙТ ДЛЯ ПЕРЕДАЧИ В БУФЕР ПОЛЬЗОВАТЕЛЯ ДОЛЖЕН
НАХОДИТЬСЯ ВВЕРХУ СТЕКА; СИМВОЛ ДОЛЖЕН НАХОДИТЬСЯ В МЛАДШЕМ
БАЙТЕ ПЕРВОГО СЛОВА СТЕКА; СТАРШИЙ БАЙТ НЕОПРЕДЕЛЕН.
     ПОСЛЕ ВЫЗОВА:
СЛОВО, СОДЕРЖАЩЕЕ СИМВОЛ ДЛЯ ПЕРЕДАЧИ, УДАЛЯЕТСЯ ИЗ СТЕКА.
R4 НЕ ИЗМЕНЯЕТСЯ.
     АДРЕС БУФЕРА (Q.BUFF) В ЭЛЕМЕНТЕ ОЧЕРЕДИ
УСТАНАВЛИВАЕТСЯ 1. ЕСЛИ ВОЗНИКАЕТ ПЕРЕПОЛНЕНИЕ ОТОБРАЖEНИЯ,
ПОДПРОГРАММА ВЫЧИТАЕТ 20000 ИЗ ЗНАЧЕНИЯ В Q.BUFF И ДОБАВЛЯЕТ
200 К ЗНАЧЕНИЮ В Q.PAR. БОЛЕЕ ПОДРОБНО ПЕРЕПОЛНЕНИЕ
ОТОБРАЖЕНИЯ ОПИСАНО В П.5.4.7.
     ПРИМЕР:
        MOV PRCQE,R4 ;R4 УКАЗЫВАЕТ НА Q.BLKN
        MOVB @#PRB,-(SP) ;ЗАСЫЛАЕТ СИМВОЛ
        JSR PC,@$PTBYT ;ПЕРЕМЕЩАЕТ ЕГО В БУФЕР
                                ;ПОЛЬЗОВАТЕЛЯ
        DEC Q$WCNT(R4) ;УМЕНЬШАЕТ СЧЕТЧИК БАЙТОВ

     ЭТОТ ПРИМЕР ИЗ ДРАЙВЕРА PC ПОКАЗЫВАЕТ, КАК ДРАЙВЕР
ПОЛУЧАЕТ СИМВОЛ ИЗ ПЕРФОЛЕНТОЧНОГО УСТРОЙСТВА ВВОДА-ВЫВОДА И
ПЕРЕМЕЩАЕТ ЕГО В БУФЕР ПОЛЬЗОВАТЕЛЯ.
     5.4.6. ДРУГИЕ УСТРОЙСТВА: ПОДПРОГРАММА $PUTWRD
     ПОДПРОГРАММА МОНИТОРА $PUTWRD ПОДОБНА $PUTBYT, С ТЕМ
ИСКЛЮЧЕНИЕМ, ЧТО $PUTWRD ПЕРЕМЕЩАЕТ В БУФЕР ПОЛЬЗОВАТЕЛЯ
ФИЗИЧЕСКОЙ ПАМЯТИ СЛОВО, А НЕ БАЙТ. ОНА ПОЛЕЗНА, КОГДА
ДРАЙВЕРУ НЕОБХОДИМО ПЕРЕДАТЬ ИНФОРМАЦИЮ О СОСТОЯНИИ СЛОВОМ В
БУФЕР ПОЛЬЗОВАТЕЛЯ, А НЕ СИМВОЛ ДАННЫХ ИЗ УСТРОЙСТВА.
$PUTWRD МОГУТ ИСПОЛЬЗОВАТЬ ДРАЙВЕРЫ ЛЮБОГО ТИПА УСТРОЙСТВ.
     ФОРМАТ ВЫЗОВА ПОДПРОГРАМЫ $PUTWRD СЛЕДУЮЩИЙ:
     JSR PC,@$PTWRD
ГДЕ $PTWRD - СОДЕРЖИТ УКАЗАТЕЛЬ ПОДПРОГРАММЫ $PUTWRD В
             РЕЗИДЕНТНОМ МОНИТОРЕ; ЗАПРОС .DREND РАЗМЕЩАЕТ
             ЭТОТ УКАЗАТЕЛЬ В КОНЦЕ ДРАЙВЕРА; УКАЗАТЕЛЬ
             ЗАПОЛНЯЕТСЯ ВО ВРЕМЯ НАЧАЛЬНОЙ ЗАГРУЗКИ (ДЛЯ
             СИСТЕМНОГО УСТРОЙСТВА) ИЛИ ВО ВРЕМЯ LOAD (ДЛЯ
             УСТРОЙСТВА ДАННЫХ).
     ПЕРЕД ВЫЗОВОМ:
R4 ДОЛЖЕН УКАЗЫВАТЬ НА Q.BLKN, ТРЕТЬЕ СЛОВО ЭЛЕМЕНТА
ОЧЕРЕДИ; СЛОВО ДЛЯ ПЕРЕДАЧИ В БУФЕР ПОЛЬЗОВАТЕЛЯ ДОЛЖНО
НАХОДИТЬСЯ ВВЕРХУ СТЕКА.
     ПОСЛЕ ВЫЗОВА:
СЛОВО ДЛЯ ПЕРЕДАЧИ УДАЛЯЕТСЯ ИЗ СТЕКА.
R4 НЕ ИЗМЕНЯЕТСЯ.
     АДРЕС БУФЕРА (Q.BUFF) В ЭЛЕМЕНТЕ ОЧЕРЕДИ
УСТАНАВЛИВАЕТСЯ 1. ЕСЛИ ВОЗНИКАЕТ ПЕРЕПОЛНЕНИЕ ОТОБРАЖЕНИЯ,
ПОДПРОГРАММА ВЫЧИТАЕТ 20000 ИЗ ЗНАЧЕНИЯ В Q.BUFF И ДОБАВЛЯЕТ
200 К ЗНАЧЕНИЮ В Q.PAR. БОЛЕЕ ПОДРОБНО ПЕРЕПОЛНЕНИЕ
ОТОБРАЖЕНИЯ ОПИСАНО В П.5.4.7.
 ПРИМЕР:
        MOV #DDNBLK,-(SP) ;ПОМЕЩАЕТ РАЗМЕР В БЛОКАХ
                                ;В СТЕК
        MOV DYCQE,R4 ;R4 УКАЗЫВАЕТ НА Q.BLKN
        JSR PC,@$PTWRD ;ВЫЗОВ ПОДПРОГРАММЫ

     ЭТОТ ПРИМЕР ИЗ ДРАЙВЕРА DY ПОКАЗЫВАЕТ КАК ДРАЙВЕР
ОТВЕЧАЕТ НА ВЫЗОВ СПЕЦИАЛЬНОЙ ФУНКЦИИ, КОТОРАЯ ЗАПРАШИВАЕТ
РАЗМЕР УСТАНОВЛЕННОГО В ДАННЫЙ МОМЕНТ ТОМА. В ДАННОМ СЛУЧАЕ
ИМЕЕТСЯ ГИБКИЙ ДИСК С ДВОЙНОЙ ПЛОТНОСТЬЮ ЗАПИСИ. ДРАЙВЕР
ИСПОЛЬЗУЕТ $PUTWRD ДЛЯ ПЕРЕМЕЩЕНИЯ РАЗМЕРА ТОМА В ОБЛАСТЬ
БУФЕРА ПОЛЬЗОВАТЕЛЯ.
     5.4.7. ДРАЙВЕРЫ, КОТОРЫЕ ИМЕЮТ НЕПОСРЕДСТВЕННЫЙ ДОСТУП
К БУФЕРУ ПОЛЬЗОВАТЕЛЯ
     В НЕКОТОРЫХ СИТУАЦИЯХ ТРЕБУЮТСЯ КОМБИНАЦИИ ПРОЦЕДУР,
ОПИСАННЫХ ВЫШЕ. В ДРУГИХ, ТРЕБУЕТСЯ ТОЛЬКО ЧАСТЬ ДРАЙВЕРА
ДЛЯ ПЕРЕДАЧИ. НЕКОТОРЫЕ ДРАЙВЕРЫ НЕ МОГУТ ИСПОЛЬЗОВАТЬ
ПОДПРОГРАММЫ МОНИТОРА И ДОЛЖНЫ ИМЕТЬ НЕПОСРЕДСТВЕННЫЙ ДОСТУП
К БУФЕРУ ПОЛЬЗОВАТЕЛЯ.
     ПРОЦЕДУРА ДРАЙВЕРА ДЛЯ ОТОБРАЖЕНИЯ В БУФЕР ПОЛЬЗОВАТЕЛЯ
СЛЕДУЮЩАЯ.
     УСТРОЙСТВА, ТАКИЕ КАК ГИБКИЙ ДИСК, ПЕРЕДАЮТ ДАННЫЕ ПО
СЕКТОРУ ЗА РАЗ МЕЖДУ САМИМ ДИСКОМ И ВНУТРЕННИМ БУФЕРОМ
ДАННЫХ ДИСКА. ОДНАКО ГИБКИЙ ДИСК НЕ ЯВЛЯЕТСЯ УСТРОЙСТВОМ
ПРОИЗВОЛЬНОГО ДОСТУПА К ДАННЫМ, ПОЭТОМУ ДРАЙВЕР DX НЕ МОЖЕТ
ИСПОЛЬЗОВАТЬ ПОДПРОГРАММУ МОНИТОРА $MPPHY. КРОМЕ ТОГО,
ДРУГИЕ ПОДПРОГРАММЫ МОНИТОРА ДЛЯ СИМВОЛЬНО-ОРИЕНТИРОВАННЫХ
УСТРОЙСТВ, ИМЕЮЩИХ В НАЛИЧИИ ВНУТРЕННИЙ БУФЕР ДАННЫХ
УСТРОЙСТВА, СЛИШКОМ МЕДЛЕННЫ ДЛЯ ПРАКТИЧЕСКОГО
ИСПОЛЬЗОВАНИЯ. ПОЭТОМУ, ДРАЙВЕР DX ОТОБРАЖАЕТСЯ В БУФЕР
ПОЛЬЗОВАТЕЛЯ ФИЗИЧЕСКОЙ ПАМЯТИ, А ЗАТЕМ ВЫПОЛНЯЕТ ОПЕРАЦИЮ
ВВОДА-ВЫВОДА ТАК, КАК ЕСЛИ БЫ ОНА БЫЛА ПРОСТОЙ ПЕРЕДАЧЕЙ
МЕЖДУ ПАМЯТЬЮ И УСТРОЙСТВОМ. ДРАЙВЕР ОСУЩЕСТВЛЯЕТ ЭТО
ОТОБРАЖЕНИЕ, ЗАИМСТВУЯ ОБЛАСТЬ РАС1.
     $P1EXT КОПИРУЕТ ИЗ ДРАЙВЕРА В СТЕК МОНИТОРА НЕОБХОДИМЫЕ
ИНСТРУКЦИИ ПО ПЕРЕДАЧЕ ДАННЫХ, ТАКИМ ОБРАЗОМ, ПЕРЕМЕЩЕНИЕ
ИНСТРУКЦИЙ ПРОИСХОДИТ ИЗ ВОЗМОЖНОЙ ОБЛАСТИ РАС1. ЗАТЕМ
$P1EXT УСТАНАВЛИВАЕТ НЕОБХОДИМОЕ ЗНАЧЕНИЕ РАС1 И ВЫПОЛНЯЕТ
КОМАНДЫ, СКОПИРОВАННЫЕ В СТЕК. ПОСЛЕ ОКОНЧАНИЯ $P1EXT
ВОССТАНАВЛИВАЕТ РАС1, ОЧИЩАЕТ СТЕК МОНИТОРА И ЗАСЫЛАЕТ В
ДРАЙВЕР ПО СЛОВАМ СЛЕДУЮЩИЙ СПИСОК КОМАНД.
     ВЫЗОВ ПОДПРОГРАММЫ $P1EXT ОСУЩЕСТВЛЯЕТСЯ ПО КОМАНДЕ
JSR R0, СЛЕДУЮЩЕЙ ПОСЛЕ ЧИСЛА БАЙТОВ ДЛЯ КОПИРОВАНИЯ В СТЕК
МОНИТОРА ПЛЮС 2, СПИСКА КОМАНД ДЛЯ ОСУЩЕСТВЛЕНИЯ ПЕРЕДАЧИ
ДАННЫХ И ЗНАЧЕНИЯ РАС1 (Q.PAR) ИЗ ЭЛЕМЕНТА ОЧЕРЕДИ.
     ПРИМЕР:
        MOV @#SYSPTR,R4 ;R4 СОДЕРЖИТ УКАЗАТЕЛЬ
                                ;БАЗЫ МОНИТОРА
        MOV P1EXT(R4),(PC)+ ;ЗАСЫЛАЕТ АДРЕС ПОДПРОГРАММЫ
                                ;$P1EXT
$P1EXT: .WORD P1EXT ;УКАЗАТЕЛЬ ПОДПРОГРАММЫ
        . ;$P1EXT
        .
        .
;--- УДАЛЯЕТ ДВЕ СЛЕДУЮЩИЕ НИЖЕ СТРОКИ, ЕСЛИ ДИСПЕТЧЕР
;--- ПАМЯТИ НЕ ИСПОЛЬЗУЕТСЯ
        JSR R0,@#P1EXT ;РАЗРЕШАЕТ МОНИТОРУ
                                ;ВЫПОЛНЯТЬ СЛЕДУЮЩИЕ КОДЫ
        .WORD PARVAL-. ;ЧИСЛО БАЙТОВ ДЛЯ
                                ;КОПИРОВАНИЯ + 2
;---
2$: TSTB @R4 ;ПРОВЕРЯЕТ ПРИЗНАК
                                ;ГОТОВНОСТИ ПЕРЕДАЧИ
        BPL 2$ ;ОЖИДАЕТ ГОТОВНОСТЬ
3$: MOVB (R2)+,@R5 ;ПЕРЕМЕЩАЕТ СИМВОЛ ИЗ БУФЕРА
                                ;ПОЛЬЗОВАТЕЛЯ НА ГИБКИЙ ДИСК
        TSTB @R4 ;УСТАНАВЛИВАЕТ CSR ДЛЯ
                                ;СЛЕДУЮЩЕГО РАЗА
        DECB R1 ;УМЕНЬШАЕТ СЧЕТЧИК ПЕРЕДАЧ
        BNE 2$ ;ЕСЛИ НЕ 0, ПЕРЕДАВАТЬ
                                ;ОСТАЛЬНЫЕ СИМВОЛЫ
;--- ЕСЛИ ИСПОЛЬЗУЕТСЯ ДИСПЕТЧЕР ПАМЯТИ, ОГРАНИЧИТЬСЯ
;--- СПИСКОМ ЗНАЧЕНИЙ РАС1
PARVAL: .WORD 0 ;УДАЛЯЕТСЯ, ЕСЛИ
                                ;ИСПОЛЬЗУЕТСЯ
                                ;ДИСПЕТЧЕР ПАМЯТИ
;---
;ДАЛЕЕ ПРОДОЛЖАЕТСЯ ОБЫЧНЫЙ ПРОЦЕСС

     В ЭТОМ ПРИМЕРЕ ПРИВЕДЕНА КОМАНДА ИЗ ДРАЙВЕРА DX,
КОТОРАЯ ИЛЛЮСТРИРУЕТ ОПИСАННУЮ ВЫШЕ ТЕХНИКУ. R1 - СЧЕТЧИК
ПЕРЕДАННЫХ БАЙТОВ, R2 - УКАЗАТЕЛЬ БУФЕРА ПОЛЬЗОВАТЕЛЯ, R4 -
УКАЗАТЕЛЬ РЕГИСТРА СОСТОЯНИЯ УСТРОЙСТВА ГИБКИХ ДИСКОВ И R5 -
УКАЗАТЕЛЬ РЕГИСТРА ДАННЫХ УСТРОЙСТВА ГИБКИХ ДИСКОВ. P1EXT -
УКАЗАТЕЛЬ ЗНАЧЕНИЯ ФИКСИРОВАННОГО СМЕЩЕНИЯ ПОДПРОГРАММЫ
$P1EXT ОТНОСИТЕЛЬНО МОНИТОРА.
     К СПИСКУ КОМАНД, ПЕРЕХОДЯЩЕМУ В $P1EXT, НАКЛАДЫВАЮТСЯ
СЛЕДУЮЩИЕ ОГРАНИЧЕНИЯ:
- В СПИСКЕ НЕ ДОЛЖНО БЫТЬ КОМАНД, ССЫЛАЮЩИХСЯ НА ДРУГИЕ
  ЯЧЕЙКИ ДРАЙВЕРА, ПРЕДНАЗНАЧЕННЫЕ ДЛЯ ОТНОСИТЕЛЬНОЙ
  АДРЕСАЦИИ ВНУТРИ САМОГО СПИСКА;
- СПИСОК КОМАНД МОЖЕТ ИСПОЛЬЗОВАТЬ СТЕК ДЛЯ ВРЕМЕННОГО
  ХРАНЕНИЯ, ЕСЛИ НЕВОЗМОЖНО ПЕРЕМЕЩЕНИЕ ДРУГИХ РАННИХ
  ЗНАЧЕНИЙ ИЗ СТЕКА ИЛИ СБРОСА ДРУГИХ ЗНАЧЕНИЙ В СТЕК ПОСЛЕ
  ЕГО ГОТОВНОСТИ;
- ЕСЛИ ИСПОЛЬЗУЕТСЯ СПИСОК КОМАНД, R0 ДОЛЖЕН БЫТЬ СОХРАНЕН И
  ВОССТАНОВЛЕН;
- НЕ РЕКОМЕНДУЕТСЯ ИСПОЛЬЗОВАТЬ СПИСОК КОМАНД БОЛЕЕ 32-Х
  СЛОВ, ТАК КАК ОБЛАСТЬ СТЕКА ОГРАНИЧЕНА.
     ЧТОБЫ ДРАЙВЕР ИМЕЛ ДОСТУП НЕПОСРЕДСТВЕННО К БУФЕРУ
ПОЛЬЗОВАТЕЛЯ, НЕОБХОДИМО ПОНЯТЬ, КАК ОБЛАСТЬ РАС1
ОТОБРАЖАЕТСЯ В ОБЛАСТЬ ПОЛЬЗОВАТЕЛЯ. РИС.7 ПОМОЖЕТ
РАЗОБРАТЬСЯ В ЭТОМ ВОПРОСЕ. ОН ПОКАЗЫВАЕТ ВИРТУАЛЬНОЕ
ЗАДАНИЕ В ОБЫЧНОЙ ХМ-СИСТЕМЕ С БУФЕРОМ ПОЛЬЗОВАТЕЛЯ,
РАЗМЕЩЕННЫМ В ФИЗИЧЕСКОЙ ПАМЯТИ СВЫШЕ 28К СЛОВ. ПРОГРАММА
ПОЛЬЗОВАТЕЛЯ ОТОБРАЖАЕТСЯ В БУФЕР ЧЕРЕЗ РАС6. ДРАЙВЕР
ИСПОЛЬЗУЕТ РАС1, ПОМЕЩАЯ ТУДА ЗНАЧЕНИЕ Q.PAR ИЗ ЭЛЕМЕНТА
ОЧЕРЕДИ, А ЗАТЕМ ИСПОЛЬЗУЕТ ЗНАЧЕНИЕ Q.BUFF ИЗ ЭЛЕМЕНТА
ОЧЕРЕДИ ДЛЯ ДОСТУПА К БУФЕРУ ПОЛЬЗОВАТЕЛЯ. РАС1
ОТОБРАЖАЕТСЯ В ФИЗИЧЕСКУЮ ПАМЯТЬ СЕКЦИЯМИ 32-СЛОВНЫХ БЛОКОВ
(ДЕСЯТИЧНОЕ) И, В ЛУЧШЕМ СЛУЧАЕ, МОЖЕТ ОТОБРАЖАТЬ ОБЛАСТЬ
РАЗМЕРОМ 4К СЛОВ. (РАЗМЕР СТРАНИЦЫ РПС1 (РЕГИСТР ПРИЗНАКА
СТРАНИЦЫ) УСТАНОВЛЕН ВСЕГДА ТАК, ЧТО ОТОБРАЖАЕТСЯ ВСЯ
СТРАНИЦА.) ЕСЛИ БУФЕР ПОЛЬЗОВАТЕЛЯ НАЧИНАЕТСЯ С ЯЧЕЙКИ
ФИЗИЧЕСКОЙ ПАМЯТИ, КОТОРАЯ НЕ КРАТНА 32-М СЛОВАМ, РАС1
ОТОБРАЖАЕТСЯ В ПЕРВУЮ ЖЕ ОБЛАСТЬ ВЫШЕ НАЧАЛА БУФЕРА, КРАТНУЮ
32-М СЛОВАМ. ОБЛАСТЬ ОТОБРАЖЕНИЯ РАС1 МОЖЕТ НАЧИНАТЬСЯ В
ФИЗИЧЕСКОЙ ПАМЯТИ С ЛЮБОГО АДРЕСА, ДВЕ МЛАДШИЕ ВОСЬМЕРИЧНЫЕ
ЦИФРЫ КОТОРОГО ЯВЛЯЮТСЯ НУЛЯМИ. ТАКИМ ОБРАЗОМ, ПРИ
ОТОБРАЖЕНИИ РАС1 В БУФЕР ПОЛЬЗОВАТЕЛЯ БУДЕТ ОТОБРАЖЕНО 4К
ИЛИ 4К-31 СЛОВ (ДЕСЯТИЧНОЕ).

                         ОБЛАСТЬ
                    ФИЗИЧЕСКИХ АДРЕСОВ
                       -------------
                       ! СТРАНИЦА  !
                       !ВВОДА-ВЫВОД!
                       !-----------!
                       !           !
                       !           !
                      .!-----------!.
                       !   BUFF:   ! .
          ОБЛАСТЬ      !           !       ОБЛАСТЬ
          ВНУТРЕННЕГО..!-----------!. . ВИРТУАЛЬНОГО
ДИАПАЗОН  ВИРТУАЛЬНОГО !           !       АДРЕСА   ДИАПАЗОН
АДРЕСА РАС  АДРЕСА     !           ! . . ПОЛЬЗОВ. РАС АДРЕСА
-----------------   .. !           !       -----------------
!      ! !      !      !           !  . .  !      ! !      !
!      ! !      !      !           !   . . !      ! !      !
!      ! !      !  ..  !           !    . .!---------------!
!      ! !      !      !-----------!     . !      !6!157776!
!      ! !      !      !  ДРАЙВЕР  !      .!      ! !140000!
!      ! !      ! ..   ! УСТРОЙСТВА!       !---------------!
!      ! !      !      !-----------!       !      ! !      !
!      ! !      !      !           !       !      ! !      !
!---------------!..    !           !       !      ! !      !
! 37776!1!      !      !           !       !      ! !      !
! 20000! !      !      !           !       !      ! !      !
!---------------!.     !           !       !      ! !      !
!      ! !      !      !           !       !      ! !      !
!      ! !      !      !           !       !      ! !      !
-----------------      -------------       -----------------
                        РИС.7.


     НИЖЕ ПРИВЕДЕН РИС.8, НА КОТОРОМ ПОКАЗАНА РАБОТА
ОТОБРАЖЕНИЯ.

Q.PAR =3317              ОБЛАСТЬ                   АДРЕС
Q.BUFF=020024       ФИЗИЧЕСКИХ АДРЕСОВ          ВИРТУАЛЬНОГО
               СВЫШЕ 28К, В 32-СЛОВНЫХ СЕКЦИЯХ     БУФЕРА
                       -------------            ПОЛЬЗОВАТЕЛЯ
                       ! СТРАНИЦА  !            РАВЕН 140224
                       !ВВОДА-ВЫВОД!
                       !-----------!
                       !           !
                       :           :
                       !           !
                 351700!------------
                      .!           !
                       !           !
                       !-----------!
                     . !           !
                       !           !
                 351500!-----------!.
                     . !           !
                       :           :
                       !           ! .
                    .  !-----------!
                       !           !
                       !           !  .
                   .   !-----------!
               331724->!BUFF:      !
                   .   !           !   .
                 331700!-----------!
                  .   .!           !
                  .  . !           !    .           ДИАПАЗОН
           НОВОЕ 331600!-----------!            ВИРТУАЛЬНОГО
ДИАПАЗОН   ЗНАЧЕНИЕ .  !           !    ЗНАЧЕНИЕ      АДРЕСА
АДРЕСА РАС   РАС . .   !           !     .РАС   РАС ПОЛЬЗОВ.
-----------------331500!-----------!.     .-----------------
! 37776!1! 3317 ! .    !           !  .    ! 3315 !6!157776!
! 20000! !      !.     !           !    .  !      ! !140000!
-----------------331400-------------      .-----------------
                       :           :
                        РИС.8.


     НА РИС.8 ПОКАЗАНА ОБЛАСТЬ БУФЕРА, РАЗМЕЩЕННАЯ У ЯЧЕЙКИ
331724 ФИЗИЧЕСКОЙ ПАМЯТИ С ПРИКЛАДНОЙ ПРОГРАММОЙ,
ОТОБРАЖЕННОЙ В БУФЕР ПОСРЕДСТВОМ РАС6. БУФЕР НА 24
(ВОСЬМЕРИЧНOЕ) БАЙТА ВЫШЕ 331700, КОТОРОЕ ЯВЛЯЕТСЯ
32-СЛОВНОЙ ГРАНИЦЕЙ. $P1EXT ПОМЕЩАЕТ ЗНАЧЕНИЕ Q.PAR, 3317,
В РАС1, ЗАМЕНЯЯ ЗНАЧЕНИЕ РАС1 ПО УМОЛЧАНИЮ (0200). ЭТО
ВЫЗЫВАЕТ ОТОБРАЖЕНИЕ РАС1 В 4К-СЛОВНУЮ ОБЛАСТЬ ФИЗИЧЕСКОЙ
ПАМЯТИ, НАЧИНАЯ С АДРЕСА 331700. В РЕЗУЛЬТАТЕ, КОГДА
ДРАЙВЕР ОБРАЩАЕТСЯ К ВНУТРЕННИМ ВИРТУАЛЬНЫМ АДРЕСАМ В
ДИАПАЗОНЕ ОТ 20000 ДО 37776, ОН ВЫБИРАЕТ ЯЧЕЙКИ ФИЗИЧЕСКОЙ
ПАМЯТИ С 331700 ПО 351676. ТАК КАК ЗНАЧЕНИЕМ В Q.BUFF
ЯВЛЯЕТСЯ 20024, ТО ИСПОЛЬЗУЯ ЭТО ЗНАЧЕНИЕ, ДРАЙВЕР МОЖЕТ
ИМЕТЬ ДОСТУП К ОБЛАСТИ БУФЕРА ПОЛЬЗОВАТЕЛЯ В ЯЧЕЙКЕ 331724.
     ЕСЛИ КОЛИЧЕСТВО ДАННЫХ ДЛЯ ПЕРЕДАЧИ СЛИШКОМ БОЛЬШОЕ, ТО
МОЖЕТ ПОТРЕБОВАТЬСЯ ПЕРЕМЕЩЕНИЕ УКАЗАТЕЛЯ БУФЕРА И
РЕГУЛИРОВАНИЕ ОТОБРАЖЕНИЯ ДЛЯ ЕГО УЧЕТА. СУЩЕСТВУЕТ ДВА
СПОСОБА ПЕРЕМЕЩЕНИЯ УКАЗАТЕЛЯ БУФЕРА. САМЫЙ ЛЕГКИЙ СПОСОБ -
ЭТО МОДИФИКАЦИЯ РАС1. НАПРИМЕР, КАЖДЫМ 32-М СЛОВАМ,
ПЕРЕМЕЩЕННЫМ ЧЕРЕЗ БУФЕР, ДОБАВЛЯЕТСЯ 1 К ЗНАЧЕНИЮ РАС1.
ДРАЙВЕР DX, НАПРИМЕР, ПЕРЕДАЕТ 64 СЛОВА ЗА РАЗ, ДОБАВЛЯЯ 2 К
ЗНАЧЕНИЮ РАС1 ПОСЛЕ КАЖДОЙ ПЕРЕДАЧИ, ЧТОБЫ ИЗБЕЖАТЬ
ПЕРЕПОЛНЕНИЯ ОТОБРАЖЕНИЯ.
     ДРУГИМ СПОСОБОМ ПЕРЕМЕЩЕНИЯ УКАЗАТЕЛЯ БУФЕРА ЯВЛЯЕТСЯ
МОДИФИКАЦИЯ ЗНАЧЕНИЯ Q.BUFF ПОСРЕДСТВОМ ИЗМЕНЕНИЯ ЗНАЧЕНИЯ В
САМОМ ЭЛЕМЕНТЕ ОЧЕРЕДИ. СНАЧАЛА НЕОБХОДИМО ПОСЛЕ
МОДИФИКАЦИИ ЗНАЧЕНИЯ Q.BUFF СРАВНИТЬ НОВОЕ ЗНАЧЕНИЕ С 40000.
ЕСЛИ ЗНАЧЕНИЕ БОЛЬШЕ ИЛИ РАВНО 40000, ИЗ НЕГО НАДО ВЫЧЕСТЬ
20000 И ПРИБАВИТЬ ЗАТЕМ 200 К Q.PAR. ЭТО ПОЗВОЛИТ НЕ ТОЛЬКО
СЛЕДИТЬ ЗА РЕГУЛИРОВАНИЕМ ОТОБРАЖЕНИЯ, НО И ПОМОЖЕТ ИЗБЕЖАТЬ
ПЕРЕПОЛНЕНИЕ ОТОБРАЖЕНИЯ.
     И, НАКОНЕЦ, НЕОБХОДИМО ВЫБРАТЬ ЛЮБУЮ ЯЧЕЙКУ В БУФЕРЕ
ПОЛЬЗОВАТЕЛЯ, ЕСЛИ ДАНО СМЕЩЕНИЕ БАЙТА ОТ НАЧАЛА БУФЕРА. ПО
СУЩЕСТВУ, НЕОБХОДИМО ОПРЕДЕЛИТЬ ЧИСЛО 32-СЛОВНЫХ СЕКЦИЙ В
16-РАЗРЯДНОМ СМЕЩЕНИИ БАЙТА ДЕЛЕНИЕМ НА 100 (ВОСЬМЕРИЧНОЕ) И
ПРИБАВЛЕНИЕМ ЧАСТНОГО К РАС1, А ОСТАТКА К Q.BUFF. ТОГДА
МОЖНО ПРАВИЛЬНО ВЫБРАТЬ ЯЧЕЙКУ В БУФЕРЕ ПОЛЬЗОВАТЕЛЯ.
     НАПРИМЕР, ПРЕДПОЛОЖИМ, ЧТО НУЖЕН БАЙТ СО СМЕЩЕНИЕМ
12345 ОТ НАЧАЛА БУФЕРА, ПОКАЗАННОГО НА РИС.8. ЧАСТНОЕ ОТ
ДЕЛЕНИЯ 12345 НА 100 РАВНО 123, ОСТАТОК - 45. ПРИБАВЛЕНИЕ
123 К ТЕКУЩЕМУ ЗНАЧЕНИЮ Q.PAR, КОТОРОЕ РАВНО 3317, ДАЕТ 3442
ДЛЯ НОВОГО ЗНАЧЕНИЯ РАС1. ПРИБАВЛЕНИЕ 45 К ЗНАЧЕНИЮ Q.BUFF,
КОТОРОЕ РАВНО 020024, ДАЕТ 020071 - НОВЫЙ АДРЕС БУФЕРА (В
ДАННОМ СЛУЧАЕ ПОЛУЧЕН АДРЕС БАЙТА).
     5.5. ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ В СИСТЕМЕ XM
     СУЩЕСТВУЮТ ДВА ВИДА ЗАДАНИЙ В СИСТЕМЕ XM, ВИРТУАЛЬНОЕ
ЗАДАНИЕ И ПРИВИЛЕГИРОВАННОЕ ЗАДАНИЕ, ВИРТУАЛЬНЫЕ ЗАДАНИЯ НЕ
МОГУТ СОДЕРЖАТЬ ВНУТРЕННЮЮ ПОДПРОГРАММУ ОБРАБОТКИ ПРЕРЫВАНИЙ
(СМ. РАЗД.4). ПО САМОМУ ОПРЕДЕЛЕНИЮ ВИРТУАЛЬНОГО
ОТОБРАЖЕНИЯ, ВИРТУАЛЬНЫЕ ЗАДАНИЯ НЕ ИМЕЮТ ДОСТУПА К СТРАНИЦЕ
ВВОДА-ВЫВОДА УСТРОЙСТВА. СЛЕДОВАТЕЛЬНО, ОНИ НЕ МОГУТ
УСТАНОВИТЬ РАЗРЯД РАЗРЕШЕНИЯ ПРЕРЫВАНИЯ УСТРОЙСТВА ИЛИ
ПЕРЕДАВАТЬ ДАННЫЕ В (ИЛИ ИЗ) РЕГИСТР БУФЕРА ДАННЫХ
УСТРОЙСТВА.
     ЕСЛИ ЗАДАНИЕ, СОДЕРЖАЩЕЕ ВНУТРЕННЮЮ ПОДПРОГРАММУ
ОБРАБОТКИ ПРЕРЫВАНИЙ, ДОЛЖНО ВЫПОЛНЯТЬСЯ В СИСТЕМЕ XM, ТО
ОНО ДОЛЖНО БЫТЬ ВЫПОЛНЕНО КАК ПРИВИЛЕГИРОВАННОЕ ЗАДАНИЕ.
ПРИВИЛЕГИРОВАННОЕ ОТОБРАЖЕНИЕ ПРЕДОСТАВЛЯЕТ ПРОГРАММЕ НИЖНИЕ
28К СЛОВ ПАМЯТИ И ДОСТУП К СТРАНИЦЕ ВВОДА-ВЫВОДА И ПОЗВОЛЯЕТ
ПРОГРАММЕ ОТОБРАЖАТЬ ЧАСТЯМИ ОБЛАСТЬ ВИРТУАЛЬНОГО АДРЕСА
ПОЛЬЗОВАТЕЛЯ В РАСШИРЕННУЮ ФИЗИЧЕСКУЮ ПАМЯТЬ, ЕСЛИ ЭТОГО
ТРЕБУЕТ ПРОГРАММА.
     КОГДА ПРЕРЫВАНИЯ ПРОИСХОДЯТ В XM, ПОДПРОГРАММА ИХ
ОБРАБОТКИ ВЫПОЛНЯЕТ ОТОБРАЖЕНИЕ ВНУТРЕННЕ, НЕ
ПОЛЬЗОВАТЕЛЬСКИ. ЭТО ОЗНАЧАЕТ, ЧТО КАК БЫ ПРОГРАММА НИ
ОТОБРАЖАЛА НЕКОТОРЫЕ СВОИ ОБЛАСТИ ВИРТУАЛЬНЫХ АДРЕСОВ В
РАСШИРЕННУЮ ПАМЯТЬ, ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ
ВЫПОЛНЯЕТ ПО УМОЛЧАНИЮ ВНУТРЕННЕЕ ОТОБРАЖЕНИЕ НИЖНИХ 28К
СЛОВ ПАМЯТИ ПЛЮС СТРАНИЦЫ ВВОДА-ВЫВОДА. ПРОИСХОДИТ
СЛЕДУЮЩЕЕ: СНАЧАЛА ОГРАНИЧЕНИЯ XM ТРЕБУЮТ, ЧТОБЫ
ОТОБРАЖЕНИЕ ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЙ И ДРУГИХ
ИСПОЛЬЗУЕМЫХ ЕЮ ДАННЫХ БЫЛО ТО ЖЕ, ЧТО И ВНУТРЕННЕЕ
ОТОБРАЖЕНИЕ В ЛЮБОЕ ВРЕМЯ, КОГДА ПРОИСХОДИТ ПРЕРЫВАНИЕ.
     РИС.9 СОДЕРЖИТ СХЕМУ ВНУТРЕННЕГО ОТОБРАЖЕНИЯ ПО
УМОЛЧАНИЮ, КОТОРОЕ ПРЕДУСМАТРИВАЕТ ДОСТУП К НИЖНИМ 28К
СЛОВАМ ПАМЯТИ И К СТРАНИЦЕ ВВОДА-ВЫВОДА. ЭТО ТАКЖЕ СХЕМА
ОТОБРАЖЕНИЯ ДЛЯ ПРИВИЛЕГИРОВАННОГО ЗАДАНИЯ, ЕСЛИ ОНО НАЧАЛО
ВЫПОЛНЯТЬСЯ. ЭТА СХЕМА ОТОБРАЖЕНИЯ ЭФФЕКТИВНА ВСЕГДА, КОГДА
ПРЕРЫВАНИЕ ОБРАБАТЫВАЕТСЯ. (ЗАШТРИХОВАННАЯ OБЛАСТЬ НА
РИСУНКЕ ПРЕДСТАВЛЯЕТ СОБОЙ ПАМЯТЬ, КОТОРАЯ НЕДОСТУПНА
ПОЛЬЗОВАТЕЛЬСКОМУ ЗАДАНИЮ.) НА РИС.9 ВЕКТОРЫ ПРЕРЫВАНИЯ 200
И 202 СОДЕРЖАТ ТОЧКУ ВХОДА ПОДПРОГРАММЫ ОБРАБОТКИ
ПРЕРЫВАНИЙ, НАЗЫВАЕМУЮ ISREP:, И ЗНАЧЕНИЕ 340, КОТОРОЕ
ЯВЛЯЕТСЯ НОВЫМ ПРИОРИТЕТОМ PS. ЕСЛИ ПРОИЗОШЛО ПРЕРЫВАНИЕ,
СИСТЕМА ИСПОЛЬЗУЕТ ВНУТРЕННЕЕ ОТОБРАЖЕНИЕ ДЛЯ ПОИСКА
ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЙ. В ЭТОМ ПРИМЕРЕ ОНА
НАЧИНАЕТСЯ С АДРЕСА 120000. ПОСЛЕ ЭТОГО ПРИВИЛЕГИРОВАННОЕ
ОТОБРАЖЕНИЕ И ВНУТРЕННЕЕ ОТОБРАЖЕНИЕ ОДИНАКОВЫ НА ЭТОЙ
ДИАГРАММЕ, ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ НАХОДИТСЯ В
ФИЗИЧЕСКОЙ ПАМЯТИ ТОЧНО В МЕСТЕ ТОЧКИ ВНУТРЕННЕГО
ОТОБРАЖЕНИЯ, ТОГДА ОНА МОЖЕТ БЫТЬ ВЫПОЛНЕНА ПРАВИЛЬНО.

                         ОБЛАСТЬ
                    ФИЗИЧЕСКИХ АДРЕСОВ
                      .-------------.
                       ! СТРАНИЦА  !
                     . !ВВОДА-ВЫВОД! .
                      .!-----------!.
                    .. !///////////!  .
                       !///////////! .
                   ..  !///////////!   .
                       !///////////!  .
          ОБЛАСТЬ ..   !///////////!    .  ОБЛАСТЬ
          ВНУТРЕННЕГО  !///////////!    ВИРТУАЛЬНОГО
ДИАПАЗОН  ВИРТУАЛЬНОГО !///////////!   . . АДРЕСА   ДИАПАЗОН
АДРЕСА РАС  АДРЕСА     !///////////!     ПОЛЬЗОВ. РАС АДРЕСА
-----------------..    !///////////!    . .-----------------
!177776!7!      !      !///////////!     . !      !7!177776!
!160000! !      !.     !///////////!      .!      ! !160000!
!------!-!------!------!-----------!-------!---------------!
!157776!6!      !----->!           !<------!      !6!157776!
!140000! !      !      !           !       !      ! !140000!
!------!-!------!      !-----------!       !---------------!
!137776!5!      !----->!           !<------!      !5!137776!
!120000! !ISREP:!      !    ПОП    !       !ISREP:! !120000!
!======!-!------!120000!-----------!       !------!-!======!
!117776!4!      !----->!           !<------!      !4!117776!
!100000! !      !      !           !       !      ! !100000!
!------!-!------!      !-----------!       !------!-!------!
! 77776!3!      !----->!           !<------!      !3! 77776!
! 60000! !      !      !           !       !      ! ! 60000!
!------!-!------!      !-----------!       !------!-!------!
! 57776!2!      !----->!           !<------!      !2! 57776!
! 40000! !      !      !           !       !      ! ! 40000!
!------!-!------!      !-----------!       !------!-!------!
! 37776!1!      !----->!           !<------!      !1! 37776!
! 20000! !      !      !           !       !      ! ! 20000!
!------!-!------!      !-----------!       !------!-!------!
! 17776!0!      !----->!           !<------!      !0! 17776!
! 00000! !      !      !           !       !      ! ! 00000!
-----------------      -------------       -----------------
                   /\                  /\
                    !                   !
                    !                   !
               ВНУТРЕННЕЕ      ПРИВИЛЕГИРОВАННОЕ
               ОТОБРАЖЕНИЕ     НЕМОДИФИЦИРОВАННОЕ
                               ОТОБРАЖЕНИЕ

 ГДЕ ПОП - ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ;
     РАС - РЕГИСТР АДРЕСА СТРАНИЦЫ

                        РИС.9.

     РИС.10 СОДЕРЖИТ ПРИВИЛЕГИРОВАННОЕ ЗАДАНИЕ, КОТОРОЕ
ИЗМЕНЯЕТ ОТОБРАЖЕНИЕ ВИРТУАЛЬНОГО АДРЕСА ПОЛЬЗОВАТЕЛЯ.
(ЗАШТРИХОВАННАЯ НА РИС.10 ОБЛАСТЬ ПРЕДСТАВЛЯЕТ ПАМЯТЬ,
КОТОРАЯ НЕ ДОСТУПНА ПОЛЬЗОВАТЕЛЮ.) НАПРИМЕР, ПОДПРОГРАММА
ОБРАБОТКИ ПРЕРЫВАНИЙ НЕ МОЖЕТ БЫТЬ ВЫПОЛНЕНА ПРАВИЛЬНО, ЕСЛИ
ПРЕРЫВАНИЕ ПРОИЗОШЛО ПОТОМУ, ЧТО ПОДПРОГРАММА ОБРАБОТКИ
ПРЕРЫВАНИЙ НЕ БЫЛА РАСПОЛОЖЕНА В ФИЗИЧЕСКОЙ ПАМЯТИ В ДОЛЖНОМ
МЕСТЕ. УКАЗАННАЯ ОБЛАСТЬ ПАМЯТИ ДО ВНУТРЕННЕГО ОТОБРАЖЕНИЯ
СОДЕРЖИТ ПРОИЗВОЛЬНЫЕ ДАННЫЕ ИЛИ КОМАНДЫ.

                         ОБЛАСТЬ 
                    ФИЗИЧЕСКИХ АДРЕСОВ
                   ...>-------------<----
                   I   ! СТРАНИЦА  !    !
                   I   !ВВОДА-ВЫВОД!    !
                   I .>!-----------!<---!
                   I I !           !   !!
                   I I !           !   !!
                   I I !-----------!<--!!
                   I I !           !  !!!
          ОБЛАСТЬ  I I !    ПОП    !  !!!  ОБЛАСТЬ
          ВНУТРЕННЕГОI !-----------!<-!!ВИРТУАЛЬНОГО
ДИАПАЗОН  ВИРТУАЛЬНОГО !///////////! !!!!  АДРЕСА   ДИАПАЗОН
АДРЕСА РАС  АДРЕСА I I !///////////! !!!!ПОЛЬЗОВ. РАС АДРЕСА
-----------------..I I !///////////! !!!!-------------------
!177776!7!      !    I !///////////! !!!   !      !7!177776!
!160000! !      !....I !///////////! !!!   !      ! !160000!
!------!-!------!------!-----------! !!!---!---------------!
!157776!6!      !----->!///////////! !!    !      !6!157776!
!140000! !      !      !///////////! !!    !      ! !140000!
!------!-!------!      !-----------! !!----!---------------!
!137776!5!      !----->!///////////! !     !      !5!137776!
!120000! !ISREP:!      !/// ??? ///! !     !ISREP:! !120000!
!======!-!------!120000!-----------! ------!------!-!======!
!117776!4!      !----->!           !<------!      !4!117776!
!100000! !      !      !           !       !      ! !100000!
!------!-!------!      !-----------!       !------!-!------!
! 77776!3!      !----->!           !<------!      !3! 77776!
! 60000! !      !      !           !       !      ! ! 60000!
!------!-!------!      !-----------!       !------!-!------!
! 57776!2!      !----->!           !<------!      !2! 57776!
! 40000! !      !      !           !       !      ! ! 40000!
!------!-!------!      !-----------!       !------!-!------!
! 37776!1!      !----->!           !<------!      !1! 37776!
! 20000! !      !      !           !       !      ! ! 20000!
!------!-!------!      !-----------!       !------!-!------!
! 17776!0!202   !----->!           !<------!      !0! 17776!
! 00000! !200   !      ! Ю         !       !      ! ! 00000!
-----------------      -------------       -----------------
                   /\                  /\
                    !                   !
                    !                   !
               ВНУТРЕННЕЕ      ПРИВИЛЕГИРОВАННОЕ
               ОТОБРАЖЕНИЕ     НЕМОДИФИЦИРОВАННОЕ
                               ОТОБРАЖЕНИЕ

 ГДЕ ПОП - ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЙ;
     РАС - РЕГИСТР АДРЕСА СТРАНИЦЫ

                        РИС.10.

     ВТОРОЕ ОГРАНИЧЕНИЕ ДЛЯ ПОДПРОГРАММЫ ОБРАБОТКИ
ПРЕРЫВАНИЙ В XM ОТНОСИТСЯ К ОБЛАСТИ МОНИТОРА, ИСПОЛЬЗУЮЩЕЙ
РЕГИСТР АДРЕСА СТРАНИЦЫ 1 (РАС1) ПРИ ВНУТРЕННЕМ ОТОБРАЖЕНИИ.
РАС1 КОНТРОЛИРУЕТ ОТОБРАЖЕНИЯ ВИРТУАЛЬНЫХ АДРЕСОВ С 20000 ДО
37776. ЕСЛИ XM-МОНИТОР ЗАГРУЖАЕТСЯ ПРИ ВНУТРЕННЕМ
ОТОБРАЖЕНИИ, ТО ВИРТУАЛЬНЫЙ АДРЕС ОТОБРАЖАЕТСЯ В ТОТ