УКНЦ ФОДОС-2 SYSMAC

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

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



                  ОПЕРАЦИОННАЯ СИСТЕМА ФОДОС-2
                   СИСТЕМНАЯ МАКРОБИБЛИОТЕКА
                    РУКОВОДСТВО ПРОГРАММИСТА
                   589.7545471.00042-01 33 01
                           ЛИСТОВ 158
                              1985

                          СОДЕРЖАНИЕ

                                                       ЛИСТ
1.  Назначение и условия применения
2.  Обращение к системной макробиблиотеке
2.1.   Адресация аргументов
2.2.   Ключевой аргумент CODE
3.  Входные и выходные данные
3.1.   Номер канала
3.2.   Блок устройства
3.3.   Блок аргументов ЕМТ
3.4.   Подпрограммы завершения
3.5.   Требование USR
4.  Сообщения
5.  Программные запросы
5.1.   Программные запросы для операций с файлами
5.1.1.   .CHCOPY (FB,XM)
5.1.2.   .CLOSE
5.1.3.   .DELETE
5.1.4.   .ENTER
5.1.5.   .LOOKUP
5.1.6.   .PURGE
5.1.7.   .RENAME
5.1.8.   .REOPEN
5.1.9.   .SAVESTATUS
5.2.   Программные  запросы  для   организации ввода-вывода
5.2.1.   .READ,.READC,.READW
5.2.2.   .WRITE,.WRITC,.WRITW
5.2.3.   .RCVD,.RCVDC,.RCVDW (FB,ХМ)
5.2.4.   .SDAT,.SDATC,.SDATW (FB,ХМ)
5.2.5.   .TTYIN,.TTINR
5.2.6.   .TTYOUT,.TTOUTR
5.2.7.   .PRINT
5.2.8.   .MTIN
5.2.9.   .MTOUT
5.2.10.  .MTPRNT
5.2.11.  .SPFUN
5.3.   Запросы общего назначения
5.3.1.   .CDFN
5.3.2.   .CHAIN
5.3.3.   .CMKT
5.3.4.   .CNTXSW (FB,XM)
5.3.5.   .CSIGEN
5.3.6.   .CSISPC
5.3.6.1. Передача  информации  о  переключателях программе пользователя
5.3.7.   .ABTIO
5.3.8.   .CSTAT (FB,XM)
5.3.9.   .DATE
5.3.10.  .DEVICE(FB,XM)
5.3.11.  .DSTATUS
5.3.12.  .EXIT
5.3.13.  .FETCH,.RELEAS
5.3.14.  .FORK
5.3.15.  .FPROT
5.3.16.  .GTIM
5.3.17.  .GTJB
5.3.18.  .GTLIN
5.3.19.  .GVAL,.PVAL
5.3.20.  .HERR,.SERR
5.3.21.  .HRESET
5.3.22.  .INTEN
5.3.23.  .LOCK,.UNLOCK
5.3.24.  .MFPS, .MTPS
5.3.25.  .MRKT
5.3.26.  .MTATCH
5.3.27.  .MTDTCH
5.3.28.  .MTSET
5.3.29.  .MTGET
5.3.30.  .MTSTAT
5.3.31.  .MTRCTD
5.3.32.  .MWAIT (FB,XM)
5.3.33.  .PEEK,.POKE
5.3.34.  .PROTECT,.UNPROTECT (FB,XM)
5.3.35.  .QSET
5.3.36.  .RCTRLD
5.3.37.  .SPND,.RSUM (FB,XM)
5.3.38.  .SCCA
5.3.39.  .SDTTM
5.3.40.  .SETTOP
5.3.41.  .SPCPS (FB,ХМ)
5.3.42.  .SFDAT
5.3.43.  .SFPA
5.3.44.  .SRESET
5.3.45.  .SYNCH
5.3.46.  .TLOCK
5.3.47.  .TRPSET
5.3.48.  .TWAIT
5.3.49.  .WAIT
6.  Сообщения
ПРИЛОЖЕНИЕ  1. Коды ошибок программных запросов
ПРИЛОЖЕНИЕ  2. Структура блока CBLK
ПЕРЕЧЕНЬ ССЫЛОЧНЫХ ДОКУМЕНТОВ

           1. Назначение и условия применения

    Ядром операционной системы RT11 является монитор. В зависимости от 
конфигурации технических средств и потребностей пользователя может 
использоваться один из трех мониторов RT11: монитор одного задания (SJ),
монитор основного-фонового задания (FB) и монитор расширенной памяти (XM).
все изложенное в данном документе, если не оговорено особо, относится к
любому монитору RT11.
    Монитор выполняется параллельно с прикладными программами и обеспечивает
выполнение следующих функций:
    - Инициализация и управление характеристиками операционной системы;
    - Распределение системных ресурсов и получение информации о состояниии 
	операционной системы;
    - Интерпретация команд;
    - Операции с файлами;
    - Управление вводом-выводом;
    - Обеспечение связи между заданиями;
    - Завершение или временный приостанов программы;
    - Работа с расширенной памятью.
 
    Связь пользователя с RT11 осуществляется главным образом с помощью команд 
клавиатурного монитора и программных запросов.
    Программные запросы обеспечивают разнообразные возможности для 
манипулирования файлами, выполнения операций ввода-вывода, управления 
выполнением и приостановкой программ и реализации других стандартных 
системных функций.
    Программный запрос представляет собой макрокоманду, помещаемую 
пользователем в исходный текст программы на языке ассемблера (программа 
может  содержать  несколько  программных запросов).
    Каждая  макрокоманда  заменяется   последовательностью обычных 
символических команд. этот процесс называется  макрорасширением и выполняется 
во время ассемблирования.
    Для формирования макрорасширения ассемблер использует макроопределения, 
включенные в системную макробиблиотеку SYSMAC.SML, которая находится на 
системном томе и может быть использована любой программой.
    Большинство программных запросов используют машинную команду ЕМТ, которая 
обеспечивает передачу управления монитору из программы, как только при 
выполнении этой программы очередь доходит до команды ЕМТ.
    Младший байт команды ЕМТ содержит код в интервале от 340 до 377 
(восьмеричное), определяющий  местоположение передаваемых монитору 
аргументов:

 МЛАДШИЙ          ПРОГРАММНЫЙ ЗАПРОС                    
  БАЙТ                                                  

 340-357  программный запрос с аргументами в стеке и/или в R0                                          
 360-373  используется только монитором RT11         
 374      программный запрос с одним аргументом. Регистр R0 содержит 
	  функциональный код в старшем байте и номер канала в младшем байте                
 375      программный запрос с несколькими аргументами. Регистр R0 
	  используется в качестве указателя на блок аргументов                            
 376      используется только монитором RT11         
 377      Резервный. RT11 игнорирует этот ЕМТ и возвращает управление 
	  программе пользователя.     


        2. Обращение к системной макробиблиотеке

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

    1) .PRGREQ ARG1,ARG2,...,ARGN
    2) .PRGREQ AREA,ARG1,...,ARGN

    В ЭТИХ ФОРМАТАХ PRGREQ ПРЕДСТАВЛЯЕТ СОБОЙ ИМЯ ПРОГ-
РАММНОГО ЗАПРОСА, AREA - УКАЗАТЕЛЬ НА АДРЕС БЛОКА АРГУМЕН-
ТОВ, ARG1,ARG2,...,ARGN - АРГУМЕНТЫ ПРОГРАММНОГО ЗАПРОСА.
    ПРОГРАММЫЕ ЗАПРОСЫ ПЕРВОГО ФОРМАТА ВЫЗЫВАЮТ ГЕНЕРАЦИЮ
КОМАНДЫ ЕМТ С КОДОМ 374 ИЛИ ОДНОЙ ИЗ КОМАНД ЕМТ 340-357.
    ПРОГРАММНЫЕ ЗАПРОСЫ, ИСПОЛЬЗУЮЩИЕ КОМАНДУ ЕМТ 374,
ПОМЕЩАЮТ В МЛАДШИЙ БАЙТ РЕГИСТРА R0 НОМЕР КАНАЛА, А В СТАР-
ШИЙ - ФУНКЦИОНАЛЬНЫЙ КОД (СМ.РИС.1).

          15               8 7                 0
           -------------------------------------
      R0 = ! ФУНКЦИОНАЛЬНЫЙ !   НОМЕР КАНАЛА   !
           !      КОД       !(ЕСЛИ ПРИМЕНЯЕТСЯ)!
           -------------------------------------

                          РИС.1


    ОДНИМ ИЗ ПРОГРАММНЫХ ЗАПРОСОВ, ИСПОЛЬЗУЮЩИХ ЕМТ 374,
ЯВЛЯЕТСЯ ЗАПРОС .DATE. МАКРООПРЕДЕЛЕНИЕ ДЛЯ ЭТОГО ЗАПРОСА
СЛЕДУЮЩЕЕ:
.MACRO .DATE
      MOV     #10.*^O400,%0
      EMT     ^374
.ENDM
    СООТВЕТСТВУЮЩИЙ ЗАПРОСУ .DATE ФУНКЦИОНАЛЬНЫЙ КОД, РАВ-
НЫЙ 10., ПОМЕЩАЕТСЯ В СТАРШИЙ БАЙТ РЕГИСТРА R0, А НОМЕР
XКАНАЛА (0) - В МЛАДШИЙ БАЙТ РЕГИСТРА R0.
    ПРОГРАММНЫЕ ЗАПРОСЫ, ИСПОЛЬЗУЮЩИЕ ЕМТ 340-357, ПОМЕ-
ЩАЮТ АРГУМЕНТЫ (ЕСЛИ ОНИ ЗАДАНЫ) В СТЕК И/ИЛИ В R0.
    ПРОГРАММНЫЙ ЗАПРОС .CSIGEN ЯВЛЯЕТСЯ ПРИМЕРОМ ПРОГРАММ-
НОГО ЗАПРОСА, ИСПОЛЬЗУЮЩЕГО ЕМТ 344. НИЖЕ ПРЕДСТАВЛЕНО
УПРОЩЕННОЕ МАКРООПРЕДЕЛЕНИЕ ДЛЯ ЭТОГО ЗАПРОСА:

.MACRO .CSIGEN DEVSPC,DEFEXT,CSTRNG,LINBUF
.IFF NB <LINBUF>       MOV     LINBUF,-(6.)
      MOV     DEVSPC,-(6.)
.IFF NB <LINBUF>       INC     (6.)
      MOV     DEFEXT,-(6.)
.IF B CSTRNG
      CLR     -(6.)
.IFF
.IF IDN CSTRNG,#0
       CLR     -(6.)
.IFF
       MOV     CSTRNG,-(6.)
.ENDC
.ENDC
       EMT     ^O344
.ENDM

    ВСЕ УКАЗАННЫЕ АРГУМЕНТЫ ПОМЕЩАЮТСЯ В СТЕК ПОЛЬЗОВАТЕЛЯ
(СМ.РИС.2) И ИСПОЛЬЗУЮТСЯ МОНИТОРОМ ПРИ ВЫПОЛНЕНИИ ЗАПРОСА
.CSIGEN.

                      ------------ ВЕРХНИЙ АДРЕС
                      !  LINBUF  !
                      ------------
                      !  DEVSPC  !
                      ------------
                      !  DEFEXT  !
                      ------------
 УКАЗАТЕЛЬ СТЕКА ->   !  CSTRNG  !
                      ------------ НИЖНИЙ АДРЕС

                          РИС.2


    ПРОГРАММНЫЕ ЗАПРОСЫ ВТОРОГО ФОРМАТА ВЫЗЫВАЮТ ГЕНЕРАЦИЮ
КОМАНДЫ ЕМТ С КОДОМ 375.
    ФОРМАТ БЛОКА АРГУМЕНТОВ ДЛЯ ЕМТ 375 ПРЕДСТАВЛЕН НА
РИС.3.

              ----------------------------------
R0 ->  AREA:   ! ФУНКЦИОНАЛЬНЫЙ !     НОМЕР     !
              !      КОД       !     КАНАЛА    !
              !     (CODE)     !     (CHAN)    !
              ----------------------------------
              !              ARG1              !
              ----------------------------------
              !              ARG2              !
              ----------------------------------
                               .
              ----------------------------------
              !              ARGN              !
              ----------------------------------

                          РИС.3

    НЕКОТОРЫЕ АРГУМЕНТЫ ПРОГРАММНЫХ ЗАПРОСОВ МОГУТ БЫТЬ
ОПУЩЕНЫ. ЕСЛИ ОТСУТСТВУЕТ АРГУМЕНТ AREA, ТО ПРЕДПОЛАГАЕТСЯ
ЧТО ОН СОДЕРЖИТСЯ В R0. ЕСЛИ НЕ УКАЗАНЫ (ОПУЩЕНЫ) КАКИЕ-
ЛИБО ИЗ АРГУМЕНТОВ ОТ ARG1 ДО ARGN, ТО СОДЕРЖИМОЕ СООТ-
ВЕТСТВУЮЩИХ ЭТИМ АРГУМЕНТАМ СЛОВ В БЛОКЕ АРГУМЕНТОВ НЕ
ИЗМЕНЯЕТСЯ.
    НАПРИМЕР, ПРИ ВЫПОЛНЕНИИ ЗАПРОСА

              .PRGREQ AREA,ARG1,ARG2

РЕГИСТР R0 СОДЕРЖИТ АДРЕС БЛОКА АРГУМЕНТОВ, ВТОРОЕ СЛОВО
СОДЕРЖИТ ARG1, ТРЕТЬЕ - ARG2.
    ПРИ ВЫПОЛНЕНИИ ЗАПРОСА
              .PRGREQ AREA
СТАРШИЙ БАЙТ ПЕРВОГО СЛОВА БЛОКА АРГУМЕНТОВ СОДЕРЖИТ ФУНК-
ЦИОНАЛЬНЫЙ КОД. СОДЕРЖИМОЕ ДРУГИХ СЛОВ БЛОКА АРГУМЕНТОВ НЕ
ИЗМЕНЯЕТСЯ.
    ЕСЛИ В ЗАПРОСЕ
              .PRGREQ ,ARG1

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

      1) MOV  #ARG1,AREA+2
         MOV  #ARG2,AREA+4
         .PRGREQ      #AREA

      2) MOV  #AREA,R0
         .PRGREQ      ,#ARG1,#ARG2

      3) MOV  #AREA,R0
         MOV  #ARG1,2(R0)
         MOV  #ARG2,4(R0)
         MOV  #CODE*400!CHAN,(R0)
         .PRGREQ

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

         .MCALL  .PRINT,.TWAIT
 START:  .TWAIT  #EMTBLK
         .PRINT  #MSG
         BR      START

 EMTBLK: .BYTE   0,24
         .WORD   TIME

 TIME:   .WORD   0,10.*50
         .ASCIZ  /ЧЕРЕЗ 10 СЕКУНД - ПЕЧАТЬ  СООБЩЕНИЯ/
         .END    START


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

    .PRGREQ #AREA,#4
    ЕСЛИ ВЕЛИЧИНА ЯВЛЯЕТСЯ СОДЕРЖИМЫМ РЕГИСТРА, ТО ДОЛЖНА
БЫТЬ ИСПОЛЬЗОВАНА МНЕМОНИКА РЕГИСТРА (RN). ЕСЛИ ВЕЛИЧИНА
ЯВЛЯЕТСЯ СОДЕРЖИМЫМ ЯЧЕЙКИ ПАМЯТИ, ТО ДОЛЖНА БЫТЬ ИСПОЛЬЗО-
ВАНА МЕТКА ЭТОЙ ЯЧЕЙКИ, НАПРИМЕР:

      .PRGREQ LIST,NUMBER
              .
              .
                 .
 LIST:   .WORD   AREA
 NUMBER: .WORD   4

    ПРИМЕЧАНИЕ. ПРИ ВЫПОЛНЕНИИ ЗАПРОСА, СОДЕРЖИМОЕ РЕГИСТ-
РОВ ОБЩЕГО НАЗНАЧЕНИЯ, КРОМЕ R0, НЕ ИЗМЕНЯЕТСЯ. УКАЗАТЕЛЬ
СТЕКА НЕ ПЕРЕУСТАНАВЛИВАЕТСЯ. ИСКЛЮЧЕНИЕМ ЯВЛЯЕТСЯ ВЫЗОВ
ИНТЕРПРЕТАТОРА КОМАНДНОЙ СТРОКИ (ЗАПРОСЫ .CSIGEN,.CSISPC).

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

       ПРИМЕР.
         .WRITW  #AREA,#CHAN,#BUFF,#WCNT,#BLK
            .
            .
            .
         .READW  #AREA,CODE=SET
            .
            .
            .

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

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

    3.2. БЛОК УСТРОЙСТВА
    БЛОК УСТРОЙСТВА (DBLK) ПРЕДСТАВЛЯЕТ СОБОЙ БЛОК ИНФОР-
МАЦИИ В КОДАХ RADIX-50, КОТОРЫЙ СОДЕРЖИТ ФИЗИЧЕСКОЕ ИЛИ
ЛОГИЧЕСКОЕ ИМЯ УСТРОЙСТВА, ИМЯ И ТИП ФАЙЛА. РАЗМЕР БЛОКА -
4 СЛОВА.
ПРИМЕР:

                   .RAD50/DX1/
                   .RAD50/FIL/
                   .RAD50/NAM/
                   .RAD50/TYP/

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


                   .RAD50/DX1FILNAMTYP/

ПРИ ЭТОМ КАЖДОЕ ПРОПУЩЕННОЕ ПОЛЕ ОПЕРАНДА ДОЛЖНО ЗАМЕНЯТЬСЯ
ПРОБЕЛОМ.

                                                 ТАБЛИЦА 2
-----------------------------------------------------------
! УСЛОВНОЕ   !                   АРГУМЕНТ                 !
!ОБОЗНАЧЕНИЕ !                                            !
!---------------------------------------------------------!
! ADDR       !  АДРЕС; ЗНАЧЕНИЕ АДРЕСА ЗАВИСИТ ОТ ИСПОЛЬ- !
!            !  ЗУЕМОГО ЗАПРОСА                           !
! AREA       !  АДРЕС БЛОКА АРГУМЕНТОВ ЕМТ                !
! BLK        !  НОМЕР БЛОКА ОТНОСИТЕЛЬНО НАЧАЛА ФАЙЛА, С  !
!            !  КОТОРОГО ДОЛЖНА ВЫПОЛНЯТЬСЯ ОПЕРАЦИЯ      !
!            !  ВВОДА-ВЫВОДА                              !
! BUF        !  АДРЕС БУФЕРА ПАМЯТИ                       !
! CBLK       !  АДРЕС БЛОКА ИЗ ПЯТИ СЛОВ, В КОТОРОМ ХРА-  !
!            !  НИТСЯ ИНФОРМАЦИЯ О СОСТОЯНИИ КАНАЛА       !
! CHAN       !  НОМЕР КАНАЛА                              !
! CRTN       !  ТОЧКА ВХОДА ПОДПРОГРАММЫ ЗАВЕРШЕНИЯ       !
! DBLK       !  АДРЕС БЛОКА УСТРОЙСТВА                    !
! NUM        !  ЧИСЛО, ЗНАЧЕНИЕ КОТОРОГО ЗАВИСИТ ОТ       !
!            !  ИСПОЛЬЗУЕМОГО   ЗАПРОСА                   !
! WCNT       !  СЧЕТЧИК СЛОВ; КОЛИЧЕСТВО СЛОВ, КОТОРЫЕ    !
!            !  НЕОБХОДИМО ПЕРЕДАТЬ В ИЛИ ИЗ БУФЕРА ПРИ   !
!            !  ВЫПОЛНЕНИИ ОПЕРАЦИИ ВВОДА-ВЫВОДА          !
! SEQN       !  ПОСЛЕДОВАТЕЛЬНЫЙ НОМЕР ФАЙЛА (ДЛЯ ОПЕРАЦИЙ!
!            !  С МАГНИТНОЙ ЛЕНТОЙ)                       !
! CHRCNT     !  СЧЕТЧИК СИМВОЛОВ                          !
! FUNC       !  ЧИСЛОВОЙ КОД, ОПРЕДЕЛЯЮЩИЙ ВЫПОЛНЯЕМУЮ    !
!            !  ФУНКЦИЮ                                   !
! JOBBLK     ! АДРЕС БЛОКА, СОДЕРЖАЩЕГО ИМЯ СИСТЕМНОГО    !
!            ! ЗАДАНИЯ В КОДАХ КОИ-7                      !
! JOBDEV     !  АДРЕС БЛОКА, СОДЕРЖАЩЕГО ИМЯ УСТРОЙСТВА И !
!            ! ИМЯ СИСТЕМНОГО ЗАДАНИЯ                     !
! UNIT       ! ЛОГИЧЕСКИЙ НОМЕР ТЕРМИНАЛА                 !
-----------------------------------------------------------

    3.3. БЛОК АРГУМЕНТОВ ЕМТ


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

AREA:   -----------------------------------------
       ! ФУНКЦИОНАЛЬНЫЙ    !     НОМЕР         !
       !     КОД           !    КАНАЛА         !
       !---------------------------------------!
       !           1-Й АРГУМЕНТ                !
       !---------------------------------------!
       !           2-ОЙ АРГУМЕНТ               !
       !---------------------------------------!
                           .
                           .
                           .
       -----------------------------------------
       !           N-ЫЙ АРГУМЕНТ               !
       -----------------------------------------

                РИС.4 БЛОК АРГУМЕНТОВ ЕМТ


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

    3.5. ТРЕБОВАНИЕ USR
    ДЛЯ ВЫПОЛНЕНИЯ НЕКОТОРЫХ ПРОГРАММНЫХ ЗАПРОСОВ НЕОБХО-
ДИМО, ЧТОБЫ КОМПОНЕНТА МОНИТОРА USR НАХОДИЛАСЬ В ОПЕРАТИВ-
НОЙ ПАМЯТИ. ТРЕБОВАНИЕ USR ПРОГРАММНЫМ ЗАПРОСАМ ОПИСАНО В
ТАБЛ.3. ЗАМЕТИМ, ЧТО ЗАПРОС CLOSE НА УСТРОЙСТВАХ НЕФАЙЛОВОЙ
СТРУКТУРЫ (LP:,TT:,PC:, И Т.Д.) НЕ ТРЕБУЕТ НАЛИЧИЯ USR В
ПАМЯТИ.
    ПРОГРАММА USR НЕ ЯВЛЯЕТСЯ РЕЕНТЕРАБЕЛЬНОЙ; ЕСЛИ USR
ИСПОЛЬЗУЕТСЯ ОДНИМ ЗАДАНИЕМ (В РЕЖИМЕ FB), ДРУГОЕ ЗАДАНИЕ,
ТРЕБУЮЩЕЕ USR, БУДЕТ ЖДАТЬ ЕЕ ОСВОБОЖДЕНИЯ.
                                                  ТАБЛИЦА 3
------------------------------------------------------------
! ПРОГРАММНЫЙ ЗАПРОС  !           ТРЕБОВАНИЕ USR           !
!                     !-------------------------------------
!                     !  РЕЖИМ SJ  !  РЕЖИМ FB !  РЕЖИМ XM !
------------------------------------------------------------
!                     !       *    !           !           !
! .CDFN               !     ДА     !    НЕТ    !    НЕТ    !
!       1)            !            !           !           !
! .CLOSE              !     ДА     !    ДА     !    ДА     !
! .CSIGEN             !     ДА     !    ДА     !    ДА     !
! .CSISPC             !     ДА     !    ДА     !    ДА     !
! .DELETE             !     ДА     !    ДА     !    ДА     !
! .DSTATUS            !     ДА     !    ДА     !    ДА     !
! .ENTER              !     ДА     !    ДА     !    ДА     !
! .EXIT               !     ДА     !    ДА     !    ДА     !
! .FETCH/.RELEAS      !     ДА     !    ДА     !    ДА     !
! .GTLIN              !     ДА     !    ДА     !    ДА     !
! .HRESET             !     ДА     !    НЕТ    !    НЕТ    !
!      2)             !            !           !           !
! .LOCK               !     ДА     !    ДА     !    ДА     !
! .LOOKUP             !     ДА     !    ДА     !    ДА     !
!                     !       *    !      *    !           !
! .QSET               !     ДА     !    ДА     !    ДА     !
! .RENAME             !     ДА     !    ДА     !    ДА     !
! .REOPEN             !     НЕТ    !    НЕТ    !    НЕТ    !
!                     !       *    !           !           !
! .SRESET             !     ДА     !    НЕТ    !    НЕТ    !
!       3)            !            !           !           !
! .TLOCK              !     ДА     !    ДА     !    ДА     !
------------------------------------------------------------

             1)               ЕСЛИ КАНАЛ БЫЛ ОТКРЫТ ПО .ENTER ;
 
             2)               ЕСЛИ USR НАХОДИТСЯ В СОСТОЯНИИ СВОПИНГА;
 
             3)               ЕСЛИ USR НЕ  ИСПОЛЬЗУЕТСЯ ДРУГИМ ЗАДАНИЕМ.
 
        ЗАПРОСЫ, ПОМЕЧЕННЫЕ В ТАБЛ.3 ЗВЕЗДОЧКОЙ, ВСЕГДА ТРЕ-
    БУЮТ ЗАГРУЗКИ НОВОЙ КОПИИ USR ПЕРЕД ИХ ВЫПОЛНЕНИЕМ (ДАЖЕ,
    ЕСЛИ USR В ЭТОТ МОМЕНТ НАХОДИТСЯ В ПАМЯТИ).
 
                          4. СООБЩЕНИЯ
        ПРИ ОБРАБОТКЕ ЗАПРОСОВ, МОНИТОР МОЖЕТ ОБНАРУЖИТЬ УСЛО-
   ВИЯ ОШИБОК. ПРОГРАММНЫЕ ЗАПРОСЫ ИНФОРМИРУЮТ ОБ ЭТОМ ПОЛЬЗО-
   ВАТЕЛЯ, ИСПОЛЬЗУЯ  С-РАЗРЯД,  БАЙТ  ОШИБОК  (52-ОЙ  БАЙТ  В
   ОБЛАСТИ СВЯЗЕЙ СИСТЕМЫ) И  ПЕЧАТЬ  НА  ТЕРМИНАЛЕ  СООБЩЕНИЙ
   МОНИТОРА. С-РАЗРЯД ОЧИЩАЕТСЯ  ПОСЛЕ  ВЫПОЛНЕНИЯ  ЗАПРОСА  И
   УСТАНАВЛИВАЕТСЯ В СЛУЧАЕ ОШИБКИ. ДЛЯ ОБНАРУЖЕНИЯ ОШИБКИ  ЗА
   ЗАПРОСОМ ДОЛЖНА СЛЕДОВАТЬ КОМАНДА BCS ИЛИ BCC. КОГДА  УСТА-
   НОВЛЕН С-РАЗРЯД, БАЙТ ОШИБОК СОДЕРЖИТ КОД ОШИБКИ.
        ПРИ ВОЗНИКНОВЕНИИ  СЕРЬЕЗНЫХ  ОШИБОК  (В  ЭТОМ  СЛУЧАЕ
   МОНИТОР ПЕЧАТАЕТ СООТВЕТСТВУЮЩЕЕ  СООБЩЕНИЕ  НА  ТЕРМИНАЛЕ)
   УПРАВЛЕНИЕ ПЕРЕДАЕТСЯ МОНИТОРУ. ДЛЯ АНАЛИЗА ПОДОБНЫХ ОШИБОК
   РЕКОМЕНДУЕТСЯ ИСПОЛЬЗОВАТЬ ПРОГРАММНЫЙ ЗАПРОС .SERR. В ПРИ-
   ЛОЖЕНИИ ПЕРЕЧИСЛЕНЫ КОДЫ ОШИБОК ПРОГРАММНЫХ ЗАПРОСОВ И ПРИ-
   ЧИНЫ, ВЫЗЫВАЮЩИЕ ЭТИ ОШИБКИ.
 
                     5. ПРОГРАММНЫЕ ЗАПРОСЫ
        СУЩЕСТВУЮТ СЛЕДУЮЩИЕ ТИПЫ ПРОГРАММНЫХ ЗАПРОСОВ:
          - ЗАПРОСЫ ДЛЯ ОПЕРАЦИЙ С ФАЙЛАМИ;
          - ЗАПРОСЫ ДЛЯ ОРГАНИЗАЦИИ ВВОДА-ВЫВОДА ДАННЫХ;
          - ЗАПРОСЫ ОБЩЕГО НАЗНАЧЕНИЯ;
          - ЗАПРОСЫ РАСШИРЕННОЙ ПАМЯТИ;
          - ЗАПРОСЫ ДЛЯ ДРАЙВЕРОВ.
        В ТАБЛИЦЕ 4 ПЕРЕЧИСЛЕНЫ ПРОГРАММНЫЕ  ЗАПРОСЫ,  КОТОРЫЕ
   МОГУТ ИСПОЛЬЗОВАТЬСЯ В ЛЮБОМ ИЗ РЕЖИМОВ (SJ,FB,XM).  ЗАПРО-
   СЫ, ПОМЕЧЕННЫЕ В ТАБЛ.4 СИМВОЛАМИ "МТ", МОЖНО  ИСПОЛЬЗОВАТЬ
   ТОЛЬКО ПРИ НАЛИЧИИ В СИСТЕМЕ МУЛЬТИТЕРМИНАЛЬНОЙ ПОДДЕРЖКИ.
        ОПИСАНИЕ ПРОГРАММНЫХ ЗАПРОСОВ ДЛЯ ПРОГРАММ - ДРАЙВЕРОВ
   УСТРОЙСТВ ДАЕТСЯ В [1].
        ОПИСАНИЕ ЗАПРОСОВ РАСШИРЕННОЙ ПАМЯТИ ДАЕТСЯ В [2].
 
 
                                                      ТАБЛИЦА 4
    ------------------------------------------------------------
    ! ПРОГРАММНЫЙ ! КОД ! ФУНК- !                              !
    !   ЗАПРОС    ! ЕМТ ! ЦИОН. !         НАЗНАЧЕНИЕ           !
    !             !     ! КОД   !                              !
    ------------------------------------------------------------
    ! .ABTIO      ! 374 !  13   ! ПРЕРЫВАЕТ ОПЕРАЦИИ ВВОДА-ВЫ- !
    !             !     !       ! ВОДА НА УКАЗАННОМ КАНАЛЕ     !
    ! .CDFN       ! 375 !  15   ! ОПРЕДЕЛЯЕТ ДОПОЛНИТЕЛЬНЫЕ    !
    !             !     !       ! КАНАЛЫ ДЛЯ ОПЕРАЦИЙ ВВОДА-   !
    !             !     !       ! ВЫВОДА                       !
    ! .CHAIN      ! 374 !   10  ! ПЕРЕДАЕТ УПРАВЛЕНИЕ ДРУГОЙ   !
    !             !     !       ! ФОНОВОЙ ПРОГРАММЕ            !
    ! .CLOSE      ! 374 !   6   ! ЗАКРЫВАЕТ КАНАЛ И ОСВОБОЖДАЕТ!
    !             !     !       ! ЕГО ДЛЯ ИСПОЛЬЗОВАНИЯ В      !
    !             !     !       ! ДРУГИХ ОПЕРАЦИЯХ             !
    ! .CMKT       ! 375 !   23  ! АННУЛИРУЕТ ОДИН ИЛИ НЕСКОЛЬКО!
    !             !     !       ! ЗАПРОСОВ .MRKT               !
    ! .CSIGEN     ! 344 !   -   ! ВЫЗЫВАЕТ РАБОТУ ИНТЕРПРЕТАТО-!
    !             !     !       ! РА КОМАНДНОЙ СТРОКИ В ОБЩЕМ  !
    !             !     !       ! РЕЖИМЕ                       !
    ! .CSISPC     ! 345 !   -   ! ВЫЗЫВАЕТ РАБОТУ ИНТЕРПРЕТАТО-!
    !             !     !       ! РА КОМАНДНОЙ СТРОКИ В СПЕ-   !
    !             !     !       ! ЦИАЛЬНОМ РЕЖИМЕ              !
    ! .CSTAT      ! 375 !   27  ! ПОЗВОЛЯЕТ ПОЛУЧИТЬ ИНФОРМАЦИЮ!
    !             !     !       ! О СОСТОЯНИИ ОПРЕДЕЛЕННОГО    !
    !             !     !       ! КАНАЛА                       !
    ! .CTIMIO     !  -  !   -   ! ИСПОЛЬЗУЕТСЯ В ПРОГРАММАХ -  !
    !             !     !       ! ДРАЙВЕРАХ УСТРОЙСТВ ДЛЯ ОТМЕ-!
    !             !     !       ! МЕНЫ ЗАПРОСОВ, ТРЕБУЮЩИХ НА- !
    !             !     !       ! ЛИЧИЯ ТАЙМЕРА                !
    ! .DATE       ! 374 !   12  ! ПЕРЕСЫЛАЕТ ТЕКУЩУЮ ДАТУ В    !
    !             !     !       ! РЕГИСТР R0                   !
    ! .DELETE     ! 375 !   0   ! СТИРАЕТ ФАЙЛ С ТОМА УКАЗАН-  !
    !             !     !       ! НОГО УСТРОЙСТВА              !
    ! .DRAST:     !     !       ! ОПРЕДЕЛЯЕТ НАЧАЛО ПОДПРОГРАМ-!
    !             !     !       ! МЫ ОБРАБОТКИ ПРЕРЫВАНИЙ      !
    ! .DRBEG      !     !       ! СОЗДАЕТ ТАБЛИЦУ ЗАГОЛОВКА    !
    !             !     !       ! ДРАЙВЕРА                     !
    ! .DRBOT      !     !       ! ОПРЕДЕЛЯЕТ НАЧАЛО ПЕРВИЧНОГО !
    !             !     !       ! ЗАГРУЗЧИКА В ДРАЙВЕРЕ        !
    ! .DRDEF      !     !       ! ОПРЕДЕЛЯЕТ ПАРАМЕТРЫ ДРАЙВЕРА!
    !             !     !       ! И УСТРОЙСТВА                 !
    ! .DREND      !     !       ! ФОРМИРУЕТ ТАБЛИЦУ АДРЕСОВ    !
    !             !     !       ! ПОДПРОГРАММ МОНИТОРА; ОПРЕДЕ-!
    !             !     !       ! ЛЯЕТ ЛОГИЧЕСКИЙ КОНЕЦ ТЕКСТА !
    !             !     !       ! ДРАЙВЕРА                     !
    ! .DRFIN      !     !       ! ПЕРЕДАЕТ УПРАВЛЕНИЕ МОНИТОРУ !
    !             !     !       ! ПО  ЗАВЕРШЕНИИ ОБСЛУЖИВАНИЯ  !
    !             !     !       ! ЭЛЕМЕНТА ОЧЕРЕДИ             !
    ! .DRSET      !     !       ! ИСПОЛЬЗУЕТСЯ ДЛЯ ФОРМИРОВАНИЯ!
    !             !     !       ! ТАБЛИЦ ПАРАМЕТРОВ ДРАЙВЕРА   !
    ! .DRVTB      !     !       ! ИСПОЛЬЗУЕТСЯ ДЛЯ ОПИСАНИЯ    !
    !             !     !       ! ТАБЛИЦЫ ВЕКТОРОВ ПРЕРЫВАНИЙ  !
    !             !     !       ! И ПОДПРОГРАММ ИХ ОБРАБОТКИ   !
    ! .DSTATUS    ! 342 !    -  ! ПОЗВОЛЯЕТ ПОЛУЧИТЬ ИНФОРМАЦИЮ!
    !             !     !       ! О СОСТОЯНИИ ОПРЕДЕЛЕННОГО    !
    !             !     !       ! УСТРОЙСТВА                   !
    ! .ENTER      ! 375 !   2   ! РЕЗЕРВИРУЕТ ОБЛАСТЬ НА ТОМЕ  !
    !             !     !       ! УКАЗАННОГО УСТРОЙСТВА ДЛЯ    !
    !             !     !       ! СОЗДАНИЯ НОВОГО ФАЙЛА        !
    ! .EXIT       ! 350 !   -   ! ЗАВЕРШАЕТ ВЫПОЛНЕНИЕ ПРОГРАМ-!
    !             !     !       ! МЫ ПОЛЬЗОВАТЕЛЯ И ПЕРЕДАЕТ   !
    !             !     !       ! УПРАВЛЕНИЕ КЛАВИАТУРНОМУ     !
    !             !     !       ! МОНИТОРУ                     !
    ! .FETCH      ! 343 !   -   ! ЗАГРУЖАЕТ ДРАЙВЕР УСТРОЙСТВА !
    ! .FPROT      ! 375 !  43   ! УСТАНАВЛИВАЕТ (ОТМЕНЯЕТ)     !
    !             !     !       ! ЗАЩИТУ ФАЙЛА                 !
    ! .GTIM       ! 375 !   21  ! ОПРЕДЕЛЯЕТ ТЕКУЩЕЕ ВРЕМЯ ДНЯ !
    ! .GTJB       ! 375 !   20  ! ОПРЕДЕЛЯЕТ ПАРАМЕТРЫ ВЫПОЛНЯ-!
    !             !     !       ! ЕМОГО ЗАДАНИЯ                !
    ! .GTLIN      ! 345 !   -   ! ПРИНИМАЕТ ВХОДНУЮ СТРОКУ С   !
    !             !     !       ! ТЕРМИНАЛА ИЛИ ИЗ КОСВЕННОГО  !
    !             !     !       ! ФАЙЛА                        !
    ! .GVAL       ! 376 !   34  ! ПЕРЕСЫЛАЕТ В R0 СОДЕРЖИМОЕ   !
    !             !     !       ! УКАЗАННОЙ ЯЧЕЙКИ МОНИТОРА    !
    ! .HERR       ! 374 !    5  ! ОТМЕНЯЕТ ДЕЙСТВИЕ ЗАПРОСА    !
    !             !     !       ! .SERR                        !
    ! .HRESET     ! 357 !   -   ! ПРЕКРАЩАЕТ ВСЕ ОПЕРАЦИИ      !
    !             !     !       ! ВВОДА-ВЫВОДА И ВЫПОЛНЯЕТ     !
    !             !     !       ! ФУНКЦИИ ЗАПРОСА .SRESET      !
    ! .INTEN      !  -  !   -   ! СООБЩАЕТ МОНИТОРУ О ТОМ, ЧТО !
    !             !     !       ! ПРОИЗОШЛО ПРЕРЫВАНИЕ ОТ      !
    !             !     !       ! УСТРОЙСТВА И УСТАНАВЛИВАЕТ   !
    !             !     !       ! ПРИОРИТЕТ ПРОЦЕССОРА НА СО-  !
    !             !     !       ! ОТВЕТСТВУЮЩИЙ УРОВЕНЬ        !
    ! .LOCK       ! 346 !   -   ! ДЕЛАЕТ ПРОГРАММУ USR РЕЗИ-   !
    !             !     !       ! ДЕНТНОЙ В ПАМЯТИ ДО ТЕХ ПОР, !
    !             !     !       ! ПОКА НЕ БУДЕТ ВЫПОЛНЕН .EXIT !
    !             !     !       ! ИЛИ .UNLOCK . ЕСЛИ НЕОБХОДИ- !
    !             !     !       ! МО, СВОПИРУЕТ ПРОГРАММУ      !
    !             !     !       ! ПОЛЬЗОВАТЕЛЯ                 !
    ! .LOOKUP     ! 375 !   1   ! ОТКРЫВАЕТ СУЩЕСТВУЮЩИЙ ФАЙЛ  !
    !             !     !       ! ДЛЯ ВВОДА И/ИЛИ ВЫВОДА НА    !
    !             !     !       ! УКАЗАННОМ КАНАЛЕ             !
    ! .MFPS       !  -  !   -   ! ВЫБИРАЕТ СОДЕРЖИМОЕ ССП      !
    ! .MRKT       ! 375 !   22  ! ПЛАНИРУЕТ ЗАПУСК ПОДПРОГРАММЫ!
    !             !     !       ! ЗАВЕРШЕНИЯ ЧЕРЕЗ ОПРЕДЕЛЕН-  !
    !             !     !       ! НЫЙ ИНТЕРВАЛ ВРЕМЕНИ         !
    ! .MTATCH(MT) ! 374 !   37  ! УСТАНАВЛИВАЕТ СВЯЗЬ МЕЖДУ    !
    !             !     !       ! ЗАДАНИЕМ И ОПРЕДЕЛЕННЫМ ТЕР- !
    !             !     !       ! МИНАЛОМ                      !
    ! .MTDTCH(MT) ! 374 !   37  ! ПРЕРЫВАЕТ СВЯЗЬ УКАЗАННОГО   !
    !             !     !       ! ТЕРМИНАЛА С ЗАДАНИЕМ И ОСВО- !
    !             !     !       ! БОЖДАЕТ ЕГО ДЛЯ ИСПОЛЬЗОВАНИЯ!
    !             !     !       ! ДРУГИМ ЗАДАНИЕМ              !
    ! .MTGET(MT)  ! 374 !   37  ! ОПРЕДЕЛЯЕТ СОСТОЯНИЕ УКАЗАН- !
    !             !     !       ! НОГО ТЕРМИНАЛА               !
    ! .MTIN(MT)   ! 374 !   37  ! ДЕЙСТВУЕТ В МУЛЬТИТЕРМИНАЛЬ- !
    !             !     !       ! НОМ РЕЖИМЕ АНАЛОГИЧНО .TTYIN !
    ! .MTOUT(MT)  ! 374 !  37   ! ДЕЙСТВУЕТ В МУЛЬТИТЕРМИНАЛЬ- !
    !             !     !       ! НОМ РЕЖИМЕ АНАЛОГИЧНО .TTYOUT!
    ! .MTPRNT(MT) ! 374 !  32   ! ДЕЙСТВУЕТ В МУЛЬТИТЕРМИНАЛЬ- !
    !             !     !       ! НОМ РЕЖИМЕ АНАЛОГИЧНО .PRINT !
    ! .MTPS       !  -  !       ! УСТАНАВЛИВАЕТ ССП            !
    ! .MTRCTD(MT) ! 374 !   37  ! ОБЕСПЕЧИВАЕТ ВЫВОД НА УКАЗАН-!
    !             !     !       ! НЫЙ ТЕРМИНАЛ                 !
    ! .MTSET(MT)  ! 374 !   37  ! УСТАНАВЛИВАЕТ И МОДИФИЦИРУЕТ !
    !             !     !       ! ХАРАКТЕРИСТИКИ ТЕРМИНАЛА В   !
    !             !     !       ! МУЛЬТИТЕРМИНАЛЬНОМ РЕЖИМЕ    !
    ! .MTSTAT(MT) ! 375 !   37  ! ПЕРЕСЫЛАЕТ ПРОГРАММЕ ИНФОРМА-!
    !             !     !       ! ЦИЮ О СОСТОЯНИИ МУЛЬТИТЕРМИ- !
    !             !     !       ! НАЛЬНОЙ СИСТЕМЫ              !
    ! .PEEK       ! 375 !   34  ! ОПРЕДЕЛЯЕТ СОДЕРЖИМОЕ ЯЧЕЕК  !
    !             !     !       ! ПАМЯТИ                       !
    ! .POKE       ! 375 !   34  ! ИЗМЕНЯЕТ СОДЕРЖИМОЕ ЯЧЕЕК    !
    !             !     !       ! ПАМЯТИ                       !
    ! .PRINT      ! 351 !   -   ! ВЫДАЕТ НА ПЕЧАТЬ СТРОКУ СИМ- !
    !             !     !       ! ВОЛОВ КОИ-7                  !
    ! .PURGE      ! 374 !   3   ! ОСВОБОЖДАЕТ КАНАЛ            !
    ! .PVAL       ! 375 !   34  ! ИЗМЕНЯЕТ СОДЕРЖИМОЕ ЯЧЕЕК    !
    !             !     !       ! МОНИТОРА                     !
    ! .QELDF      !  -  !   -   ! ОПРЕДЕЛЯЕТ МНЕМОНИЧЕСКИЕ     !
    !             !     !       ! ОБОЗНАЧЕНИЯ ДЛЯ ЭЛЕМЕНТОВ    !
    !             !     !       ! ОЧЕРЕДИ ВВОДА-ВЫВОДА         !
    ! .QSET       ! 353 !   -   ! УВЕЛИЧИВАЕТ РАЗМЕР ОЧЕРЕДИ   !
    !             !     !       ! ВВОДА-ВЫВОДА ДЛЯ МОНИТОРА    !
    ! .RCTRLD     ! 355 !   -   ! ОБЕСПЕЧИВАЕТ ВЫВОД НА ТЕРМИ- !
    !             !     !       ! НАЛ                          !
    ! .READ       ! 375 !   10  ! ПЕРЕДЕТ ДАННЫЕ ПО УКАЗАННОМУ !
    !             !     !       ! КАНАЛУ В БУФЕР ПАМЯТИ И ВОЗ- !
    !             !     !       ! ВРАЩАЕТ УПРАВЛЕНИЕ ПРОГРАММЕ !
    !             !     !       ! ПОЛЬЗОВАТЕЛЯ, КАК ТОЛЬКО ЗА- !
    !             !     !       ! ПРОС НА ЧТЕНИЕ ДАННЫХ БУДЕТ  !
    !             !     !       ! ПОСТАВЛЕН В ОЧЕРЕДЬ ВВОДА-   !
    !             !     !       ! ВЫВОДА                       !
    ! .READC      ! 375 !   10  ! ПЕРЕДЕТ ДАННЫЕ ПО УКАЗАННОМУ !
    !             !     !       ! КАНАЛУ В БУФЕР ПАМЯТИ И ВОЗ- !
    !             !     !       ! ВРАЩАЕТ УПРАВЛЕНИЕ ПРОГРАММЕ !
    !             !     !       ! ПОЛЬЗОВАТЕЛЯ, КАК ТОЛЬКО ЗА- !
    !             !     !       ! ПРОС НА ЧТЕНИЕ ДАННЫХ БУДЕТ  !
    !             !     !       ! ПОСТАВЛЕН В ОЧЕРЕДЬ ВВОДА-   !
    !             !     !       ! ВЫВОДА. ПОСЛЕ ОКОНЧАНИЯ ЧТЕ- !
    !             !     !       ! НИЯ УПРАВЛЕНИЕ ПЕРЕДАЕТСЯ    !
    !             !     !       ! ПОДПРОГРАММЕ ЗАВЕРШЕНИЯ      !
    ! .READW      ! 375 !   10  ! ПЕРЕДЕТ ДАННЫЕ ПО УКАЗАННОМУ !
    !             !     !       ! КАНАЛУ В БУФЕР ПАМЯТИ И ВОЗ- !
    !             !     !       ! ВРАЩАЕТ УПРАВЛЕНИЕ ПРОГРАММЕ !
    !             !     !       ! ПОЛЬЗОВАТЕЛЯ ПОСЛЕ ОКОНЧАНИЯ !
    !             !     !       ! ОПЕРАЦИИ                     !
    ! .RELEAS     ! 343 !   -   ! УДАЛЯЕТ ДРАЙВЕР УСТРОЙСТВА   !
    !             !     !       ! ИЗ ПАМЯТИ                    !
    ! .RENAME     ! 375 !   4   ! ПЕРЕИМЕНОВЫВАЕТ ФАЙЛ. НЕДО-  !
    !             !     !       ! ПУСТИМ В ОПЕРАЦИЯХ С МАГНИТ- !
    !             !     !       ! НОЙ ЛЕНТОЙ                   !
    ! .REOPEN     ! 375 !   6   ! ОБЕСПЕЧИВАЕТ ВОССТАНОВЛЕНИЕ  !
    !             !     !       ! ПАРАМЕТРОВ, КОТОРЫЕ ЗАПОМИНА-!
    !             !     !       ! ЛИСЬ ПО ЗАПРОСУ .SAVESTATUS  !
    !             !     !       ! И ПОВТОРНО ОТКРЫВАЕТ КАНАЛ   !
    !             !     !       ! ДЛЯ ВВОДА-ВЫВОДА             !
    ! .SAVESTATUS ! 375 !   5   ! ЗАПОМИНАЕТ ПАРАМЕТРЫ СОСТОЯ- !
    !             !     !       ! НИЯ ОТКРЫТОГО ФАЙЛА В ОПРЕДЕ-!
    !             !     !       ! ЛЕННОЙ ОБЛАСТИ ПАМЯТИ И ОСВО-!
    !             !     !       ! БОЖДАЕТ КАНАЛ                !
    ! .SCCA       ! 374 !   35  ! ПОЗВОЛЯЕТ БЛОКИРОВАТЬ ВЫПОЛ- !
    !             !     !       ! НЕНИЕ КОМАНДЫ СУ/С           !
    ! .SDTTM      ! 375 !   40  ! УСТАНАВЛИВАЕТ СИСТЕМНУЮ ДАТУ !
    !             !     !       ! И/ИЛИ ВРЕМЯ                  !
    ! .SERR       ! 374 !   4   ! БЛОКИРУЕТ ПРЕРЫВАНИЕ ПРОГРАМ-!
    !             !     !       ! МЫ ПРИ ОБНАРУЖЕНИИ МОНИТОРОМ !
    !             !     !       ! ОШИБКИ                       !
    ! .SETTOP     ! 354 !   -   ! ОПРЕДЕЛЯЕТ ВЕРХНЮЮ ГРАНИЦУ   !
    !             !     !       ! ПАМЯТИ ДЛЯ ВЫПОЛНЯЕМОГО ЗА-  !
    !             !     !       ! ДАНИЯ                        !
    ! .SFDAT      ! 375 !   42  ! ИЗМЕНЯЕТ ДАТУ СОЗДАНИЯ ФАЙЛА !
    ! .SFPA       ! 375 !   30  ! УСТАВАВЛИВАЕТ В ПРОГРАММЕ    !
    !             !     !       ! ПОЛЬЗОВАТЕЛЯ АДРЕС ПОДПРОГ-  !
    !             !     !       ! РАММЫ ОБРАБОТКИ ПРЕРЫВАНИЯ   !
    !             !     !       ! ОТ ПРОЦЕССОРА ПЛАВАЮЩЕЙ      !
    !             !     !       ! ЗАПЯТОЙ                      !
    ! .SPFUN      ! 375 !   32  ! ВЫПОЛНЯЕТ СПЕЦИАЛЬНЫЕ ФУНКЦИИ!
    !             !     !       ! ДЛЯ УСТРОЙСТВ                !
    ! .SRESET     ! 352 !   -   ! ВОССТАНАВЛИВАЕТ КАНАЛЫ ВВОДА-!
    !             !     !       ! ВЫВОДА И УДАЛЯЕТ ДРАЙВЕРЫ    !
    !             !     !       ! УСТРОЙСТВ ИЗ ПАМЯТИ          !
    ! .SYNCH      !  -  !   -   ! ОБЕСПЕЧИВАЕТ ВОЗМОЖНОСТЬ ВЫ- !
    !             !     !       ! ПОЛНЕНИЯ ПРОГРАММНЫХ ЗАПРОСОВ!
    !             !     !       ! В ПОДПРОГРАММЕ ОБРАБОТКИ     !
    !             !     !       ! ПРЕРЫВАНИЯ                   !
    ! .TIMIO      !  -  !   -   ! ПЛАНИРУЕТ ЗАПУСК ПОДПРОГРАММЫ!
    !             !     !       ! ЗАВЕРШЕНИЯ ЧЕРЕЗ ЗАДАННЫЙ    !
    !             !     !       ! ИНТЕРВАЛ ВРЕМЕНИ             !
    ! .TLOCK      ! 374 !    7  ! ОПРЕДЕЛЯЕТ, ИСПОЛЬЗУЕТСЯ ЛИ  !
    !             !     !       ! USR В ДАННЫЙ МОМЕНТ ДРУГИМ   !
    !             !     !       ! ЗАДАНИЕМ. ЕСЛИ USR НЕ ИСПОЛЬ-!
    !             !     !       ! ЗУЕТСЯ, ТО ВЫПОЛНЯЕТСЯ .LOCK !
    ! .TRPSET     ! 375 !    3  ! УСТАНАВЛИВАЕТ ОБРАБОТКУ ПРЕ- !
    !             !     !       ! РЫВАНИЙ ПО 4-ОМУ ИЛИ 10-ОМУ  !
    !             !     !       ! ВЕКТОРАМ В ПРОГРАММЕ ПОЛЬЗО- !
    !             !     !       ! ВАТЕЛЯ                       !
    ! .TTINR      ! 340 !   -   ! ПЕРЕДАЮТ ОДИН СИМВОЛ ИЗ БУ-  !
    ! .TTYIN      !     !       ! ФЕРА ТЕРМИНАЛА В РЕГИСТР R0  !
    ! .TTYOUT     ! 341 !   -   ! ПЕРЕДАЮТ ОДИН СИМВОЛ ИЗ РЕ-  !
    ! .TTOUTR     !     !       ! ГИСТРА R0 В БУФЕР ТЕРМИНАЛА  !
    ! .TWAIT      ! 375 !   24  ! ПРИОСТАНАВЛИВАЕТ ВЫПОЛНЕНИЕ  !
    !             !     !       ! ЗАДАНИЯ НА УКАЗАННЫЙ ИНТЕРВАЛ!
    !             !     !       ! ВРЕМЕНИ                      !
    ! .UNLOCK     ! 347 !   -   ! ОСВОБОЖДАЕТ ПРОГРАММУ USR,   !
    !             !     !       ! ЕСЛИ РАНЕЕ БЫЛ ВЫПОЛНЕН ЗАП- !
    !             !     !       ! РОС .LOCK И, ЕСЛИ НЕОБХОДИМО,!
    !             !     !       ! ВНОВЬ ЗАГРУЖАЕТ ПРОГРАММУ    !
    !             !     !       ! ПОЛЬЗОВАТЕЛЯ                 !
    ! .WAIT       ! 374 !   0   ! ОЖИДАЕТ ЗАВЕРШЕНИЯ ОПЕРАЦИИ  !
    !             !     !       ! ВВОДА-ВЫВОДА НА УКАЗАННОМ    !
    !             !     !       ! КАНАЛЕ                       !
    ! .WRITC      ! 375 !   11  ! ПЕРЕДАЕТ ДАННЫЕ ПО УКАЗАННО- !
    !             !     !       ! МУ КАНАЛУ НА УСТРОЙСТВО И    !
    !             !     !       ! ВОЗВРАЩАЕТ УПРАВЛЕНИЕ ПРОГ-  !
    !             !     !       ! РАММЕ ПОЛЬЗОВАТЕЛЯ КАК ТОЛЬКО!
    !             !     !       ! ЗАПРОС НА ПЕРЕДАЧУ ДАННЫХ БУ-!
    !             !     !       ! ДЕТ ПОСТАВЛЕН В ОЧЕРЕДЬ      !
    !             !     !       ! ВВОДА-ВЫВОДА. ПОСЛЕ ОКОНЧАНИЯ!
    !             !     !       ! ЗАПИСИ, УПРАВЛЕНИЕ ПЕРЕДАЕТСЯ!
    !             !     !       ! ПОДПРОГРАММЕ ЗАВЕРШЕНИЯ      !
    ! .WRITE      ! 375 !   11  ! ПЕРЕДАЕТ ДАННЫЕ ПО УКАЗАННО- !
    !             !     !       ! МУ КАНАЛУ НА УСТРОЙСТВО И    !
    !             !     !       ! ВОЗВРАЩАЕТ УПРАВЛЕНИЕ ПРОГ-  !
    !             !     !       ! РАММЕ ПОЛЬЗОВАТЕЛЯ КАК ТОЛЬКО!
    !             !     !       ! ЗАПРОС НА ПЕРЕДАЧУ ДАННЫХ БУ-!
    !             !     !       ! ДЕТ ПОСТАВЛЕН В ОЧЕРЕДЬ      !
    !             !     !       ! ВВОДА-ВЫВОДА                 !
    ! .WRITW      ! 375 !   11  ! ПЕРЕДАЕТ ДАННЫЕ ПО УКАЗАННО- !
    !             !     !       ! МУ КАНАЛУ НА УСТРОЙСТВО И    !
    !             !     !       ! ВОЗВРАЩАЕТ УПРАВЛЕНИЕ ПРОГ-  !
    !             !     !       ! РАММЕ ПОЛЬЗОВАТЕЛЯ ПОСЛЕ     !
    !             !     !       ! ОКОНЧАНИЯ ПЕРЕДАЧИ ДАННЫХ    !
    ------------------------------------------------------------
 
 
                                                      ТАБЛИЦА 5
    ------------------------------------------------------------
    ! ПРОГРАММНЫЙ ! КОД ! ФУНК- !                              !
    !   ЗАПРОС    ! ЕМТ ! ЦИОН. !         НАЗНАЧЕНИЕ           !
    !             !     ! КОД   !                              !
    ------------------------------------------------------------
    ! .CHCOPY     ! 375 !  13   ! ОТКРЫВАЕТ КАНАЛ ДЛЯ ВВОДА И  !
    !             !     !       ! ЛОГИЧЕСКИ СВЯЗЫВАЕТ ЕГО С    !
    !             !     !       ! ОТКРЫТЫМ КАНАЛОМ ДРУГОГО     !
    !             !     !       ! ЗАДАНИЯ                      !
    ! .CNTXSW     ! 375 !   33  ! ОПРЕДЕЛЯЕТ ЯЧЕЙКИ ПАМЯТИ ДЛЯ !
    !             !     !       ! ОПЕРАЦИИ ПЕРЕКЛЮЧЕНИЯ  КОН-  !
    !             !     !       ! ТЕКСТА                       !
    ! .CRAW(XM)   ! 374 !   36  ! СОЗДАЕТ ВИРТУАЛЬНОЕ АДРЕСНОЕ !
    !             !     !       ! ОКНО                         !
    ! .CRRG(XM)   ! 374 !   36  ! СОЗДАЕТ ДИНАМИЧЕСКУЮ ОБЛАСТЬ !
    !             !     !       ! ФИЗИЧЕСКОЙ ПАМЯТИ            !
    ! .DEVICE     ! 375 !   14  ! ПОЗВОЛЯЕТ ЗАПРЕТИТЬ ПРЕРЫВА- !
    !             !     !       ! НИЕ ОТ УСТРОЙСТВА В РЕЖИМЕ   !
    !             !     !       ! FB ПОСЛЕ ОКОНЧАНИЯ ВЫПОЛНЕНИЯ!
    !             !     !       ! ПРОГРАММЫ                    !
    ! .ELAW(XM)   ! 374 !   36  ! АННУЛИРУЕТ ВИРТУАЛЬНОЕ АДРЕС-!
    !             !     !       ! НОЕ ОКНО                     !
    ! .ELRG(XM)   ! 374 !   36  ! АННУЛИРУЕТ ДИНАМИЧЕСКУЮ ОБ-  !
    !             !     !       ! ЛАСТЬ ФИЗИЧЕСКОЙ ПАМЯТИ И    !
    !             !     !       ! ДЕЛАЕТ ЕЕ СВОБОДНОЙ ДЛЯ ИС-  !
    !             !     !       ! ПОЛЬЗОВАНИЯ ДРУГИМ ЗАДАНИЕМ  !
    ! .GMCX(XM)   ! 374 !   36  ! ПЕРЕСЫЛАЕТ ПРОГРАММЕ ИНФОР-  !
    !             !     !       ! МАЦИЮ О СОСТОЯНИИ ОПРЕДЕЛЕН- !
    !             !     !       ! НОГО ОКНА                    !
    ! .MAP(XM)    ! 374 !   36  ! ОТОБРАЖАЕТ ПРЕДВАРИТЕЛЬНО    !
    !             !     !       ! СОЗДАННОЕ ОКНО ВИРТУАЛЬНОГО  !
    !             !     !       ! АДРЕСА                       !
    ! .MWAIT      ! 374 !   11  ! ПЕРЕВОДИТ ТЕКУЩЕЕ ЗАДАНИЕ В  !
    !             !     !       ! СОСТОЯНИЕ ОЖИДАНИЯ ДО ЗАВЕР- !
    !             !     !       ! ШЕНИЯ ПЕРЕДАЧИ ДАННЫХ        !
    ! .PROTECT    ! 375 !   31  ! ЗАКРЕПЛЯЕТ ОДИН ИЗ ВЕКТОРОВ  !
    !             !     !       ! (АДРЕСА ОТ 0 ДО 476) ЗА ДАН- !
    !             !     !       ! НЫМ ЗАДАНИЕМ                 !
    ! .RCVD       ! 375 !   26  ! ОСУЩЕСТВЛЯЮТ ПРИЕМ СООБЩЕНИЙ !
    ! .RCVDC      !     !       ! ИЛИ ДАННЫХ, ПЕРЕДАВАЕМЫХ ДРУ-!
    ! .RCVDW      !     !       ! ГИМ ЗАДАНИЕМ В РЕЖИМЕ FB.    !
    !             !     !       ! АНАЛОГИЧНЫ ЗАПРОСАМ .READ,   !
    !             !     !       ! .READC,.READW                !
    ! .RDBBK(XM)  !  -  !   -   ! СОЗДАЕТ БЛОК ОПРЕДЕЛЕНИЯ     !
    !             !     !       ! ОБЛАСТИ                      !
    ! .RDBDF(XM)  ! -   !   -   ! ОПРЕДЕЛЯЕТ МНЕМОНИЧЕСКИЕ     !
    !             !     !       ! ОБОЗНАЧЕНИЯ ДЛЯ БЛОКА ОПРЕДЕ-!
    !             !     !       ! НИЯ ОБЛАСТИ                  !
    ! .RSUM       ! 374 !   2   ! ВОЗОБНОВЛЯЕТ ВЫПОЛНЕНИЕ ЗАДА-!
    !             !     !       ! НИЯ, КОТОРОЕ БЫЛО ПРЕРВАНО   !
    !             !     !       ! ПО ЗАПРОСУ .SPND             !
    ! .SDAT       ! 375 !   25  ! ОСУЩЕСТВЛЯЮТ ПЕРЕДАЧУ СООБЩЕ-!
    ! .SDATC      !     !       ! НИЙ ИЛИ ДАННЫХ ДРУГОЙ        !
    ! .SDATW      !     !       ! ПРОГРАММЕ. АНАЛОГИЧНЫ ЗАПРО- !
    !             !     !       ! САМ .WRITE,.WRITC,.WRITW     !
    ! .SPCPS      ! 375 !   41  ! ПОЗВОЛЯЕТ ИЗМЕНИТЬ АДРЕС     !
    !             !     !       ! ВОЗВРАТА ИЗ ПРЕРЫВАНИЯ В ПОД-!
    !             !     !       ! ПРОГРАММЕ ЗАВЕРШЕНИЯ         !
    ! .SPND       ! 374 !   1   ! ПРИОСТАНАВЛИВАЕТ ВЫПОЛНЕНИЕ  !
    !             !     !       ! ЗАДАНИЯ                      !
    ! .UNMAP(XM)  ! 374 !   36  ! ОТМЕНЯЕТ ДЕЙСТВИЕ ЗАПРОСА    !
    !             !     !       ! .MAP                         !
    ! .UNPROTECT  ! 374 !   31  ! ОТМЕНЯЕТ ДЕЙСТВИЕ ЗАПРОСА    !
    !             !     !       ! .PROTECT                     !
    ! .WDBBK(XM)  !  -  !   -   ! СОЗДАЕТ БЛОК ОПРЕДЕЛЕНИЯ ОКНА!
    ! .WDBDF(XM)  !  -  !   -   ! ОПРЕДЕЛЯЕТ МНЕМОНИЧЕСКИЕ     !
    !             !     !       ! ОБОЗНАЧЕНИЯ ДЛЯ БЛОКА ОПРЕДЕ-!
    !             !     !       ! ЛЕНИЯ ОКНА                   !
    ------------------------------------------------------------
 
 
        5.1. ПРОГРАММНЫЕ ЗАПРОСЫ ДЛЯ ОПЕРАЦИЙ С ФАЙЛАМИ
        5.1.1. .CHCOPY (РЕЖИМ FB,XM)
        ЗАПРОС .CHCOPY ОТКРЫВАЕТ  КАНАЛ  ДЛЯ  ВВОДА  ДАННЫХ  И
   ЛОГИЧЕСКИ СВЯЗЫВАЕТ ЕГО С КАНАЛОМ ДРУГОГО ЗАДАНИЯ  ОТКРЫТЫМ
   ДЛЯ ВВОДА ИЛИ ВЫВОДА. ЗАПРОС МОЖЕТ ИСПОЛЬЗОВАТЬСЯ ОСНОВНОЙ,
   ФОНОВОЙ ПРОГРАММАМИ, А  ТАКЖЕ  СИСТЕМНЫМ  ЗАДАНИЕМ.  ЗАПРОС
   .CHCOPY ДОПУСТИМ ТОЛЬКО ДЛЯ ФАЙЛОВ,  КОТОРЫЕ  НАХОДЯТСЯ  НА
   ДИСКАХ; ОДНАКО СИСТЕМА НЕ ОБНАРУЖИТ  ОШИБКИ,  ЕСЛИ  ИСПОЛЬ-
   ЗУЕТСЯ ДРУГОЕ УСТРОЙСТВО. ДЛЯ ТОГО,  ЧТОБЫ  ЗАКРЫТЬ  КАНАЛ,
   ОТКРЫТЫЙ ПО .CHCOPY НЕОБХОДИМО ИСПОЛЬЗОВАТЬ ЗАПРОСЫ  .CLOSE
   ИЛИ .PURGE.
        ФОРМАТ МАКРОКОМАНДЫ:
        .CHCOPY AREA,CHAN,OCHAN[,JOBBLK]
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 3-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        CHAN - НОМЕР КАНАЛА, ИСПОЛЬЗУЕМОГО ЗАДАНИЕМ ДЛЯ ЧТЕНИЯ
   ДАННЫХ;
        OCHAN - НОМЕР КАНАЛА ДРУГОГО ЗАДАНИЯ;
        JOBBLK - АДРЕС БЛОКА ИЗ ТРЕХ СЛОВ,  СОДЕРЖАЩЕГО  ЛОГИ-
   ЧЕСКОЕ ИМЯ ЗАДАНИЯ.
        ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
          AREA:   .BYTE   CHAN,13
                  .WORD   OCHAN
                  .WORD   JOBBLK
  ПРИМЕР.
  ;ПРИМЕР СОСТОИТ ИЗ ДВУХ ПРОГРАММ. ПЕРВАЯ ИЗ ПРОГРАММ
  ;(ОСНОВНАЯ) ВЫПОЛНЯЕТ ПЕРЕДАЧУ ДАННЫХ ВО ВТОРУЮ -
  ;ФОНОВУЮ ПРОГРАММУ.
          .TITLE  CHCOPF.MAC
  ;ОСНОВНАЯ ПРОГРАММА
          .MCALL  .ENTER,.PRINT,.SDATW,.RCVDW,.CLOSE,.WRITW
	  .MCALL  .EXIT 
  STARTF: MOV     #AREA,R5
          .ENTER  R5,#0,#FILE,#5          ;СОЗДАТЬ ФАЙЛ
          .WRITW  R5,#0,#RECRD,#256.,#4   ;ЗАПИСАТЬ БЛОК
          BCS     ENTERR
          .SDATW  R5,#BUFR,#2             ;ПЕРЕДАТЬ СООБШЕНИЕ
          ;       .
          .RCVDW  R5,#BUFR,#1
          .CLOSE  #0
          .PRINT  #FEXIT
          .EXIT
  ENTERR: .PRINT  #ERMSG
          .EXIT
  FILE:   .RAD50  /DK QUFILE/
          .RAD50  /TMP/
  AREA:   .BLKW   5
  BUFR:   .WORD   0                       ;НОМЕР КАНАЛА
          .WORD   4                       ;НОМЕР БЛОКА
  RECRD:  .BLKW   256.
  ERMSG:  .ASCIZ  /ОШИБКА .ENTER/
  FEXIT:  .ASCIZ  /КОНЕЦ ОСНОВНОЙ ПРОГРАММЫ/
          .END    STARTF
 
          .TITLE  CHCOPB.MAC
  ;ФОНОВАЯ ПРОГРАММА
          .MCALL  .CHCOPY,.RCVDW,.READW,.EXIT,.PRINT,.SDATW
  STARTB: MOV     #AREA,R5
          .RCVDW  R5,#MSG,#2      ;ПОЛУЧИТЬ СООБЩЕНИЕ
          BCS     1$
          .CHCOPY R5,#0,MSG+2     ;НОМЕР КАНАЛА ИЗ MSG+2
          BCS     2$
          .READW  R5,#0,#BUFF,#256.,MSG+4 ;ЧИТАТЬ БЛОК
          BCS     3$
          ;       .
          .SDATW  R5,#MSG,#1
          .PRINT  #BEXIT
          .EXIT
  1$:     MOV     #NOJOB,R0
          BR      4$
  2$:     MOV     #NOCH,R0
          BR      4$
  3$:     MOV     #RDERR,R0
  4$:     .PRINT
          .EXIT
  AREA:   .BLKW   5
  MSG:    .BLKW   3               ;БУФЕР ДЛЯ СООБЩЕНИЯ
  BUFF:   .BLKW   256.
  BEXIT:  .ASCIZ  /КОНЕЦ ФОНОВОЙ ПРОГРАММЫ/
  NOJOB:  .ASCIZ  /НЕТ ОСНОВНОГО ЗАДАНИЯ/
  NOCH:   .ASCIZ  /НЕ ОТКРЫТ КАНАЛ ДЛЯ ОСНОВНОГО ЗАДАНИЯ/
  RDERR:  .ASCIZ  /ОШИБКА ЧТЕНИЯ/
          .END    STARTB
 
        5.1.2. .CLOSE
        ЗАПРОС .CLOSE ЗАВЕРШАЕТ ДЕЙСТВИЕ НА УКАЗАННОМ КАНАЛЕ И
   ОСВОБОЖДАЕТ ЕГО ДЛЯ ИСПОЛЬЗОВАНИЯ В  ДРУГОЙ  ОПЕРАЦИИ.  ДЛЯ
   ВЫПОЛНЕНИЯ ЗАПРОСА ДРАЙВЕР СООТВЕТСТВУЮЩЕГО УСТРОЙСТВА ДОЛ-
   ЖЕН НАХОДИТЬСЯ В ПАМЯТИ.
        ФОРМАТ МАКРОКОМАНДЫ
        .CLOSE CHAN
        ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
          AREA:   .BYTE   CHAN,6
        ДЛЯ ТОГО, ЧТОБЫ СДЕЛАТЬ ФАЙЛ ПОСТОЯННЫМ НА ТОМЕ  НЕОБ-
   ХОДИМО НА  СООТВЕТСТВУЮЩЕМ  КАНАЛЕ,  ОТКРЫТОМ  ДЛЯ  ВЫВОДА,
   ВЫПОЛНИТЬ ЗАПРОС .CLOSE. ЗАПРОС .CLOSE НА НЕОТКРЫТОМ КАНАЛЕ
   ИГНОРИРУЕТСЯ.
        .CLOSE, ВЫПОЛНЯЕМЫЙ НА КАНАЛЕ, КОТОРЫЙ БЫЛ  ОТКРЫТ  ПО
   .ENTER ВЫЗЫВАЕТ КОРРЕКТИРОВКУ  СПРАВОЧНИКА  УСТРОЙСТВА  ДЛЯ
   ОПРЕДЕЛЕНИЯ ФАЙЛА КАК ПОСТОЯННОГО НА ЭТОМ УСТРОЙСТВЕ.  ЕСЛИ
   ФАЙЛ ОТКРЫТ ПО .LOOKUP,  ТО  КОРРЕКТИРОВКИ  СПРАВОЧНИКА  НЕ
   ПРОИСХОДИТ.
        ЕСЛИ УСТРОЙСТВО, СВЯЗАННОЕ С  УКАЗАННЫМ  КАНАЛОМ,  УЖЕ
   СОДЕРЖИТ ФАЙЛ С ТЕМ ЖЕ ИМЕНЕМ И ТИПОМ, ЧТО И ВНОВЬ  СОЗДАН-
   НЫЙ ФАЙЛ, ТО СТАРАЯ КОПИЯ ФАЙЛА СТИРАЕТСЯ, КОГДА НОВЫЙ ФАЙЛ
   СТАНОВИТСЯ ПОСТОЯННЫМ.
        ЕСЛИ НА УСТРОЙСТВЕ УЖЕ СУЩЕСТВУЕТ  ЗАЩИЩЕННЫЙ  ФАЙЛ  С
   ТЕМ ЖЕ ИМЕНЕМ, ТО ТЕКУЩИЙ ФАЙЛ ЗАКРЫВАЕТСЯ,  НО  ПОЯВЛЯЮТСЯ
   ДВА ФАЙЛА С ОДИНАКОВЫМИ ИМЕНАМИ.
        ПРИМЕЧАНИЕ. МОНИТОР ИНФОРМИРУЕТ ПРОГРАММУ ПОЛЬЗОВАТЕЛЯ
   ОБ ОШИБКЕ ПРИ ВЫПОЛНЕНИИ ЗАПРОСА .CLOSE ТОЛЬКО В  ТОМ  СЛУ-
   ЧАЕ, ЕСЛИ ДО ЭТОГО БЫЛ ВЫПОЛНЕН ЗАПРОС .SERR.
        ПРИМЕР ИСПОЛЬЗОВАНИЯ .CLOSE  СМ.  В  ОПИСАНИИ  ЗАПРОСА
   .CSISPC.
 
        5.1.3. .DELETE
        ЗАПРОС .DELETE УДАЛЯЕТ ФАЙЛ ИЗ СПРАВОЧНИКА  УКАЗАННОГО
   УСТРОЙСТВА. .DELETE НЕДОПУСТИМ ДЛЯ МАГНИТНЫХ ЛЕНТ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .DELETE AREA,CHAN,DBLK
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 2-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        DBLK - АДРЕС БЛОКА УСТРОЙСТВА, СОДЕРЖАЩЕГО  СПЕЦИФИКА-
   ЦИЮ УДАЛЯЕМОГО ФАЙЛА.
        ПРИМЕЧАНИЯ:
        1. ОБРАЩЕНИЕ К ОТКРЫТОМУ КАНАЛУ ПРИВОДИТ К ОШИБКЕ;
        2. УДАЛЕННЫЙ ФАЙЛ В  ЛИСТИНГЕ  СПРАВОЧНИКА  УСТРОЙСТВА
   БУДЕТ ОПИСАН КАК НЕИСПОЛЬЗУЕМАЯ ОБЛАСТЬ  (UNUSED)  ТОГО  ЖЕ
   РАЗМЕРА;
        3. ЗАПРОС .DELETE НА УСТРОЙСТВАХ НЕФАЙЛОВОЙ  СТРУКТУРЫ
   ИГНОРИРУЕТСЯ;
        4. ПРИ ВЫПОЛНЕНИИ .DELETE  НЕОБХОДИМО,  ЧТОБЫ  ДРАЙВЕР
   СООТВЕТСТВУЮЩЕГО УСТРОЙСТВА НАХОДИЛСЯ В ПАМЯТИ;
        5. ПОСЛЕ ВЫПОЛНЕНИЯ .DELETE, УКАЗАННЫЙ КАНАЛ  ОСВОБОЖ-
   ДАЕТСЯ ДЛЯ ДАЛЬНЕЙШЕГО ИСПОЛЬЗОВАНИЯ.
        ПРИМЕР ИСПОЛЬЗОВАНИЯ .DELETE СМ.  В  ОПИСАНИИ  ЗАПРОСА
   .CSISPC.
 
        5.1.4. .ENTER
        ЗАПРОС .ENTER РЕЗЕРВИРУЕТ ОБЛАСТЬ НА ОПРЕДЕЛЕННОМ УСТ-
   РОЙСТВЕ И ЗАНОСИТ В СПРАВОЧНИК УСТРОЙСТВА ЗАПИСЬ О СОЗДАНИИ
   ВРЕМЕННОГО ФАЙЛА. ПО ЗАПРОСУ .ENTER МОНИТОР  ИДЕНТИФИЦИРУЕТ
   НОМЕР КАНАЛА, ОПРЕДЕЛЕННЫЙ В ЗАПРОСЕ, С  УКАЗАННЫМ  ФАЙЛОМ.
   ЗАМЕТИМ, ЧТО ЕСЛИ ПРОГРАММА ИМЕЕТ ОВЕРЛЕЙНУЮ СТРУКТУРУ,  ТО
   15-Й КАНАЛ ИСПОЛЬЗУЕТСЯ ОВЕРЛЕЙНЫМ ДРАЙВЕРОМ  И  НЕ  ДОЛЖЕН
   МОДИФИЦИРОВАТЬСЯ ПРОГРАММОЙ ПОЛЬЗОВАТЕЛЯ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .ENTER AREA,CHAN,DBLK,LEN[,SEQN]
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 4-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        DBLK - АДРЕС БЛОКА УСТРОЙСТВА, В КОТОРОМ ОПИСАН СОЗДА-
   ВАЕМЫЙ ФАЙЛ;
        LEN - РАЗМЕР ФАЙЛА; (СМ.ТАБЛ.6);
        SEQN - ПОСЛЕДОВАТЕЛЬНЫЙ НОМЕР ФАЙЛА ДЛЯ МАГНИТНОЙ ЛЕН-
   ТЫ; ЗНАЧЕНИЯ АРГУМЕНТА SEQN И СООТВЕТСТВУЮЩИЕ  ИМ  ДЕЙСТВИЯ
   МОНИТОРА ОПИСАНЫ В ТАБЛ.7.
        ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
          AREA:   .BYTE   CHAN,2
                  .WORD   DBLK
                  .WORD   LEN
                  .WORD   SEQN
 
                                                      ТАБЛИЦА 6
    ------------------------------------------------------------
    ! ЗНАЧЕНИЕ    !               ДЕЙСТВИЕ МОНИТОРА            !
    ! АРГУМЕНТА   !                                            !
    !-----------------------------------------------------------
    !     0       ! ОТВОДИТ ДЛЯ ФАЙЛА ПОЛОВИНУ НАИБОЛЬШЕЙ      !
    !             ! СВОБОДНОЙ ОБЛАСТИ ИЛИ ПОЛНОСТЬЮ ВТОРУЮ ПО  !
    !             ! ВЕЛИЧИНЕ СВОБОДНУЮ ОБЛАСТЬ НА ТОМЕ, В ЗА-  !
    !             ! ВИСИМОСТИ ОТ ТОГО, КАКАЯ ИЗ НИХ БОЛЬШЕ     !
    !     М       ! ОТВОДИТ ДЛЯ ФАЙЛА М БЛОКОВ                 !
    !     -1      ! ОТВОДИТ ДЛЯ ФАЙЛА НАИБОЛЬШУЮ СВОБОДНУЮ ОБ- !
    !             ! ЛАСТЬ НА ТОМЕ                              !
    ------------------------------------------------------------
 
 
                                                      ТАБЛИЦА 7
    ------------------------------------------------------------
    ! ЗНАЧЕНИЕ    !             ДЕЙСТВИЕ МОНИТОРА              !
    ! АРГУМЕНТА   !                                            !
    ------------------------------------------------------------
    !     0       ! ПЕРЕМАТЫВАЕТ МАГНИТНУЮ ЛЕНТУ И ПРОИЗВОДИТ  !
    !             ! ПОИСК МЕТКИ LEOT (ЛОГИЧЕСКИЙ КОНЕЦ ЛЕНТЫ)  !
    !     N       ! УСТАНАВЛИВАЕТ МАГНИТНУЮ ЛЕНТУ В ПОЛОЖЕНИЕ, !
    !             ! СООТВЕТСТВУЮЩЕЕ ФАЙЛУ С ПОСЛЕДОВАТЕЛЬНЫМ   !
    !             ! НОМЕРОМ N                                  !
    !     -1      ! ПРОИЗВОДИТ ПОИСК LEOT                      !
    !     -2      ! ПЕРЕМАТЫВАЕТ МАГНИТНУЮ ЛЕНТУ И ПРОИЗВОДИТ  !
    !             ! ПОИСК LEOT ИЛИ ФАЙЛА С ТЕМ ЖЕ ИМЕНЕМ, ЧТО  !
    !             ! И ВНОВЬ СОЗДАВАЕМЫЙ ФАЙЛ                   !
    ------------------------------------------------------------
 
        ФАЙЛ, СОЗДАННЫЙ ПО .ENTER НЕ  ЯВЛЯЕТСЯ  ПОСТОЯННЫМ  ДО
   ТЕХ ПОР, ПОКА НА СООТВЕТСТВУЮЩЕМ КАНАЛЕ НЕ  БУДЕТ  ВЫПОЛНЕН
   ЗАПРОС .CLOSE. ЗАПРОСЫ .LOOKUP  И  .SAVESTATUUS  НЕДЕЙСТВИ-
   ТЕЛЬНЫ ДЛЯ ФАЙЛОВ, КОТОРЫЕ НЕ ЯВЛЯЮТСЯ ПОСТОЯННЫМИ.  ОДНАКО
   ЧТЕНИЕ ТАКОГО ФАЙЛА ВОЗМОЖНО ПОСРЕДСТВОМ ОБРАЩЕНИЯ К НОМЕРУ
   СООТВЕТСТВУЮЩЕГО  БЛОКА.  ЕСЛИ  НА  СООТВЕТСТВУЮЩЕМ  КАНАЛЕ
   ВЫПОЛНЯЕТСЯ .CLOSE, ТО ЛЮБОЙ СУЩЕСТВУЮЩИЙ НА ТОМЕ  ПОСТОЯН-
   НЫЙ, НЕЗАЩИЩЕННЫЙ ФАЙЛ С ТЕМ ЖЕ ИМЕНЕМ И ТИПОМ СТИРАЕТСЯ  И
   НОВЫЙ ФАЙЛ СТАНОВИТСЯ ПОСТОЯННЫМ. ХОТЯ  ОБЛАСТЬ  ДЛЯ  ФАЙЛА
   РЕЗЕРВИРУЕТСЯ ПРИ ВЫПОЛНЕНИИ .ENTER, ФАКТИЧЕСКАЯ ДЛИНА ФАЙ-
   ЛА ОПРЕДЕЛЯЕТСЯ ПОСЛЕ ВЫПОЛНЕНИЯ .CLOSE.
        КАЖДОЕ ЗАДАНИЕ МОЖЕТ ИМЕТЬ ДО 255 ОДНОВРЕМЕННО  ОТКРЫ-
   ТЫХ ФАЙЛОВ. ЕСЛИ ТРЕБУЕТСЯ, ВСЕ 255 ФАЙЛОВ МОГУТ БЫТЬ  ОТК-
   РЫТЫ ДЛЯ ВЫВОДА ПОСРЕДСТВОМ .ENTER. ДЛЯ  ВЫПОЛНЕНИЯ  .ENTER
   НЕОБХОДИМО, ЧТОБЫ ДРАЙВЕР СООТВЕТСТВУЮЩЕГО УСТРОЙСТВА БЫЛ В
   ПАМЯТИ. ПОСЛЕ ВЫПОЛНЕНИЯ .ENTER РЕГИСТР R0 БУДЕТ  СОДЕРЖАТЬ
   РАЗМЕР ОБЛАСТИ ТОМА, ОТВЕДЕННЫЙ ДЛЯ СОЗДАНИЯ НОВОГО ФАЙЛА.
  ПРИМЕР.
 
          .TITLE  ENTER.MAC
  ;В СЛЕДУЮЩЕМ ПРИМЕРЕ С ИСПОЛЬЗОВАНИЕМ ЗАПРОСА .ENTER
  ;ВЫПОЛНЯЕТСЯ КОПИРОВАНИЕ ФАЙЛА ENTER.SAV НА УСТРОЙСТВО
  ;DK:.
 
          .MCALL  .LOOKUP,.ENTER,.WRITW,.READW,.CLOSE
          .MCALL  .PRINT,.EXIT
          ERRBYT = 52
  START:  .LOOKUP #AREA,#0,#ENTER         ;СВЯЗАТЬ 0-ОЙ КАНАЛ
                                          ;С ФАЙЛОМ ENTER.SAV
          BCS     5$
          MOV     R0,R3                   ;РАЗМЕР ФАЙЛА В R3
          .ENTER  #AREA,#1,#NEWFIL,R3     ;ОТКРЫТЬ НОВЫЙ ФАЙЛ
          BCS     6$
          CLR     BLK
  1$:     .READW  #AREA,#0,#BUFFR,#256.,BLK ;ЧИТАТЬ БЛОК
          BCC     2$
          TSTB    @#ERRBYT                ;КОНЕЦ ФАЙЛА?
          BEQ     3$                      ;ДА
          MOV     #RERR,R0
          BR      7$
  2$:     .WRITW  #AREA,#1,#BUFFR,#256.,BLK ;ЗАПИСАТЬ БЛОК
          INC     BLK
          BCC     1$
          MOV     #WERR,R0
          BR      7$
  3$:     .CLOSE  #1
          MOV     #DONE,R0
          BR      7$
  5$:     MOV     #NOFIL,R0
          BR      7$
  6$:     MOV     #NOENT,R0
  7$:     .PRINT
          .EXIT
 
  AREA:   .WORD   0
  BLK:    .WORD   0,0,0,0
  BUFFR:  .BLKW   256.
  ENTER:  .RAD50  /DK/
          .RAD50  /ENT/
          .RAD50  /ER/
          .RAD50  /SAV/
  NEWFIL: .RAD50  /DK/
          .RAD50  /NEWENT/
          .RAD50  /SAV/
 
  NOFIL:  .ASCIZ  /ФАЙЛ НЕ НАЙДЕН/
  NOENT:  .ASCIZ  /ОШИБКА .ENTER  /
  WERR:   .ASCIZ  /ОШИБКА .WRITW /
  RERR:   .ASCIZ  / ОШИБКА .READW /
  DONE:   .ASCIZ  /КОПИРОВАНИЕ ЗАВЕРШЕНО/
          .EVEN
          .END    START
  
        5.1.5. .LOOKUP
         ИСПОЛЬЗУЮТСЯ ДВЕ ФОРМЫ ЗАПРОСА .LOOKUP.  ПЕРВАЯ  ФОРМА
    .LOOKUP  СВЯЗЫВАЕТ  УКАЗАННЫЙ  КАНАЛ  С  УСТРОЙСТВОМ  И/ИЛИ
    СУЩЕСТВУЮЩИМ ФАЙЛОМ ДЛЯ ВЫПОЛНЕНИЯ  ОПЕРАЦИЙ  ВВОДА-ВЫВОДА.
    ИСПОЛЬЗУЕМЫЙ КАНАЛ БУДЕТ "ЗАНЯТ" ДО ТЕХ ПОР, ПОКА НЕ  БУДЕТ
    ВЫПОЛНЕН    ОДИН    ИЗ    СЛЕДУЮЩИХ    ЗАПРОСОВ:    .CLOSE,
    .SAVESTATUS,.SRESET,.HRESET,.PURGE,.CSIGEN   (ЕСЛИ    НОМЕР
    КАНАЛА В ДИАПОЗОНЕ ОТ 0 ДО 10 (ВОСЬМЕРИЧНОЙ).
         ЗАМЕТИМ, ЧТО ЕСЛИ ПРОГРАММА ИМЕЕТ ОВЕРЛЕЙНУЮ  СТРУКТУ-
    РУ, ТО 15-ЫЙ КАНАЛ ИСПОЛЬЗУЕТСЯ ОВЕРЛЕЙНЫМ ДРАЙВЕРОМ  И  НЕ
    ДОЛЖЕН ИЗМЕНЯТЬСЯ ПРОГРАММОЙ ПОЛЬЗОВАТЕЛЯ.
         ЕСЛИ ПЕРВОЕ  СЛОВО  ИМЕНИ  ФАЙЛА  В  БЛОКЕ  УСТРОЙСТВА
    (DBLK) СОДЕРЖИТ НУЛЬ И УСТРОЙСТВО ЕСТЬ УСТРОЙСТВО  ФАЙЛОВОЙ
    СТРУКТУРЫ, ТО АБСОЛЮТНЫЙ БЛОК 0  ЭТОГО  УСТРОЙСТВА  ОПРЕДЕ-
    ЛЯЕТСЯ КАК "НАЧАЛО ФАЙЛА" (В ЭТОМ СЛУЧАЕ ГОВОРЯТ О НЕФАЙЛО-
    ВОМ .LOOKUP). ЭТОТ МЕТОД ДОПУСКАЕТ  ВВОД-ВЫВОД  ДЛЯ  ЛЮБОГО
    ФИЗИЧЕСКОГО БЛОКА НА УСТРОЙСТВЕ. ЕСЛИ ИМЯ ФАЙЛА  ОПРЕДЕЛЕНО
    ДЛЯ УСТРОЙСТВА НЕФАЙЛОВОЙ СТРУКТУРЫ, ТО ИМЯ  ФАЙЛА  ИГНОРИ-
    РУЕТСЯ.
         ДЛЯ ВЫПОЛНЕНИЯ .LOOKUP ДРАЙВЕР  СООТВЕТСТВУЮЩЕГО  УСТ-
    РОЙСТВА ДОЛЖЕН БЫТЬ В ПАМЯТИ. ПОСЛЕ  ВЫПОЛНЕНИЯ  .LOOKUP  ,
    РЕГИСТР R0 БУДЕТ СОДЕРЖАТЬ ДЛИНУ ОТКРЫТОГО ФАЙЛА В  БЛОКАХ.
    ПОСЛЕ ВЫПОЛНЕНИЯ .LOOKUP ДЛЯ УСТРОЙСТВ НЕСПРАВОЧНОЙ  СТРУК-
    ТУРЫ, РЕГИСТР RO БУДЕТ СОДЕРЖАТЬ НОЛЬ.
         ФОРМАТ МАКРОКОМАНДЫ:
         .LOOKUP AREA,CHAN,DBLK[,SEQN]
    ГДЕ AREA - АДРЕС БЛОКА ИЗ 3-Х СЛОВ АРГУМЕНТОВ ЕМТ;
         SEQN - ПОСЛЕДОВАТЕЛЬНЫЙ НОМЕР ФАЙЛА ДЛЯ МАГНИТНОЙ ЛЕН-
    ТЫ; ЗНАЧЕНИЯ, КОТОРЫЕ МОЖЕТ ИМЕТЬ SEQN И СООТВЕТСТВУЮЩИЕ ИМ
    ДЕЙСТВИЯ МОНИТОРА ОПИСАНЫ В ТАБЛИЦЕ 8.
         ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
           AREA:   .BYTE   CHAN,1
                   .WORD   DBLK
                   .WORD   SEQN
   ПРИМЕР 1.
  
          .TITLE  LOOKUP.MAC
   ;В ДАННОМ ПРИМЕРЕ, ИСПОЛЬЗУЮЩЕМ ЗАПРОС .LOOKUP,
  ;ОПРЕДЕЛЯЕТСЯ НАЛИЧИЕ НА УСТРОЙСТВЕ DK: РАБОЧЕГО
  ;ФАЙЛА, СОДЕРЖАЩЕГО ОЧЕРЕДЬ ФАЙЛОВ ДЛЯ ВЫВОДА НА
  ;УКАЗАННОЕ УСТРОЙСТВО.
  ;ЕСЛИ РАБОЧИЙ ФАЙЛ СУЩЕСТВУЕТ, ТО ЕГО РАЗМЕР
  ;(В БЛОКАХ) ПЕЧАТАЕТСЯ НА СИСТЕМНОМ ТЕРМИНАЛЕ.
           .MCALL  .LOOKUP,.PRINT,.EXIT
   START:  .LOOKUP #AREA,#0,#QUSPEC ;ОТКРЫТЬ ФАЙЛ
          BCC     1$
          .PRINT  #NOFILE         ;ФАЙЛА НЕТ
          .EXIT
   1$:     MOV     #SIZE,R1
          CALL    CNV10
          .PRINT  #BUFF
          .EXIT
 
  CNV10:  MOV     R0,-(SP)        ;ПОДПРОГРАММА
          CLR     R0              ;ПРЕОБРАЗОВАНИЯ РАЗМЕРА
  1$:     INC     R0              ;ФАЙЛА ДЛЯ ВЫВОДА НА
          SUB     #10.,@SP        ;ТЕРМИНАЛ
          BGE     1$
          ADD     #72,@SP
          DEC     R0
          BEQ     2$
          CALL    CNV10
   2$:     MOVB    (SP)+,(R1)+
          RETURN
 
  AREA:   .BLKW   3
  QUSPEC: .RAD50  /DK QUFILE/
          .RAD50  /TMP/
  BUFF:   .ASCII  /РАЗМЕР ФАЙЛА QUFILE.TMP = /
  SIZE:   .ASCIZ  /      /
  NOFILE: .ASCIZ  /НА DK: НЕТ ФАЙЛА QUFILE.TMP/
          .EVEN
 
          .END    START
 
 
                                                      ТАБЛИЦА 8
    ------------------------------------------------------------
    ! ЗНАЧЕНИЕ    !             ДЕЙСТВИЕ  МОНИТОРА             !
    ! АРГУМЕНТА   !                                            !
    !----------------------------------------------------------!
    !     -1      ! ПРОИЗВОДИТ ПОИСК ФАЙЛА С ТЕКУЩЕГО ПОЛОЖЕНИЯ!
    !             ! МАГНИТНОЙ ЛЕНТЫ                            !
    !      0      ! ПЕРЕМАТЫВАЕТ МАГНИТНУЮ ЛЕНТУ И ПРОИЗВОДИТ  !
    !             ! ПОИСК ФАЙЛА                                !
    !   N(N>0)    ! УСТАНАВЛИВАЕТ МАГНИТНУЮ ЛЕНТУ В ПОЛОЖЕНИЕ  !
    !             ! СООТВЕТСТВУЮЩЕЕ ФАЙЛУ С ПОСЛЕДОВАТЕЛЬНЫМ   !
    !             ! НОМЕРОМ N                                  !
    ------------------------------------------------------------
 
       ВТОРАЯ ФОРМА .LOOKUP СВЯЗЫВАЕТ КАНАЛ С УКАЗАННЫМ ЗАДА-
   НИЕМ ДЛЯ ОБМЕНА ИНФОРМАЦИЕЙ В РЕЖИМАХ FB И ХМ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .LOOKUP AREA,CHAN,JOBDES
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 2-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        JOBDES - АДРЕС БЛОКА ИЗ 4-Х СЛОВ; 1-ОЕ СЛОВО  СОДЕРЖИТ
   ИМЯ ДРАЙВЕРА ОЧЕРЕДИ СООБЩЕНИЙ (MQ) В КОДАХ RADIX-50; 2,3,4
   СЛОВА СОДЕРЖАТ ЛОГИЧЕСКОЕ ИМЯ СИСТЕМНОГО  ЗАДАНИЯ  В  КОДАХ
   КОИ-7. ЕСЛИ 2-ОЕ СЛОВО СОДЕРЖИТ 0 , ТО КАНАЛ  (CHAN)  МОЖЕТ
   ИСПОЛЬЗОВАТЬСЯ ТОЛЬКО  ЗАПРОСАМИ  .READ/C/W  ДЛЯ  ПОЛУЧЕНИЯ
   СООБЩЕНИЯ ОТ ЛЮБОГО ЗАДАНИЯ.
        ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
          AREA:   .BYTE   CHAN,1
                  .WORD   JOBDES
  ПРИМЕР 2.
          .TITLE  SJLOOK.MAC
  ;В ДАННОМ ПРИМЕРЕ ЗАПРОС .LOOKUP ОТКРЫВАЕТ КАНАЛ
  ;ДЛЯ СИСТЕМНОГО ЗАДАНИЯ QUEUE.REL.
  ;ПРИМЕР ВЫПОЛНЯЕТСЯ ПОД УПРАВЛЕНИЕМ МОНИТОРОВ FB
  ;ИЛИ ХМ.
  ;
 
          .MCALL  .LOOKUP,.PRINT,.EXIT,.WRITW,.READW
  START:  .LOOKUP #AREA,#0,#QMSG  ;ОТКРЫТЬ КАНАЛ ДЛЯ QUEUE
          BCC     1$
          .PRINT  #NOJOB
          .EXIT
  1$:     .WRITW  #AREA,#0,#RMSJ,#6
          BCS     2$
          .READW  #AREA,#0,#RMSJ,#6
          BCS     2$
          .PRINT  #QRUN
          .EXIT
  2$:     .PRINT  #MSGERR
          .EXIT
  AREA:   .BLKW   5
  QMSG:   .RAD50  /MQ/
          .ASCIZ  /QUEUE/
          .WORD   0,0
  RMSJ:   .WORD   0
          .ASCII  /SJLOOK/
  MSGERR: .ASCIZ  /ОШИБКА/
  NOJOB:  .ASCIZ  /QUEUE НЕ ЗАГРУЖЕНА/
  QRUN:   .ASCIZ  /QUEUE РАБОТАЕТ!/
          .EVEN
          .END    START
 
 
        5.1.6. .PURGE
        ЗАПРОС .PURGE ОСВОБОЖДАЕТ УКАЗАННЫЙ КАНАЛ ДЛЯ  ИСПОЛЬ-
   ЗОВАНИЯ В ДРУГОЙ ОПЕРАЦИИ БЕЗ ВЫПОЛНЕНИЯ КАКИХ-ЛИБО ФУНКЦИЙ
   ЗАПРОСОВ .HRESET,.SRESET,.SAVESTATUS ИЛИ .CLOSE.  ВРЕМЕННЫЙ
   ФАЙЛ ОТКРЫТЫЙ НА ЭТОМ КАНАЛЕ ПО .ENTER, АННУЛИРУЕТСЯ.  ЗАП-
   РОС .PURGE НА СВОБОДНОМ КАНАЛЕ ИГНОРИРУЕТСЯ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .PURGE CHAN
        ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
          AREA:   .BYTE   CHAN,3
        ПРИМЕР ИСПОЛЬЗОВАНИЯ .PURGE  СМ.  В  ОПИСАНИИ  ЗАПРОСА
   .HERR.
 
        5.1.7. .RENAME
        ЗАПРОС .RENAME ИЗМЕНЯЕТ ИМЯ ФАЙЛА (НЕДОПУСТИМ В ОПЕРА-
   ЦИЯХ С МАГНИТНОЙ ЛЕНТОЙ).
        ФОРМАТ МАКРОКОМАНДЫ:
        .RENAME AREA,CHAN,DBLK
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 2-ХСЛОВ АРГУМЕНТОВ ЕМТ;
        DBLK - АДРЕС БЛОКА, СОДЕРЖАЩЕГО ИМЯ УСТРОЙСТВА  И  ИМЯ
   ФАЙЛА, КОТОРЫЕ ТРЕБУЕТСЯ ИЗМЕНИТЬ, И НОВОЕ ИМЯ УСТРОЙСТВА И
   ИМЯ ФАЙЛА В КОДАХ RADIX-50.
        ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
 
          AREA:   .BYTE   CHAN,4
                  .WORD   DBLK
   НАПРИМЕР,
          .RENAME  #AREA,#7,#DXLK
          BCS  RNMERR
           .
           .
           .
   DBLK:  .RAD50 /DX1OLDFILMAC/
          .RAD50 /DX1NEWFILMAC/
 
        ЕСЛИ ФАЙЛ С ТЕМ ЖЕ ИМЕНЕМ, ЧТО И НОВОЕ, УЖЕ СУЩЕСТВУЕТ
   НА ТОМЕ, ТО ОН УДАЛЯЕТСЯ. ПОВТОРНОЕ ОПРЕДЕЛЕНИЕ ИМЕНИ  УСТ-
   РОЙСТВА DX1 В НОВОЙ СПЕЦИФИКАЦИИ ФАЙЛА НЕОБХОДИМО ДЛЯ  ПРА-
   ВИЛЬНОГО ВЫПОЛНЕНИЯ ОПЕРАЦИИ И НЕ ДОЛЖНО ОПУСКАТЬСЯ.  ПОСЛЕ
   ВЫПОЛНЕНИЯ .RENAME ИСПОЛЬЗУЕМЫЙ КАНАЛ ОСВОБОЖДАЕТСЯ. ЗАПРОС
   .RENAME ТРЕБУЕТ, ЧТОБЫ ДРАЙВЕР СООТВЕТСТВУЮЩЕГО  УСТРОЙСТВА
   БЫЛ В ПАМЯТИ ПЕРЕД ВЫПОЛНЕНИЕМ ОПЕРАЦИИ. ЗАПРОС .RENAME  НЕ
   ВЫПОЛНЯЕТСЯ ДЛЯ ЗАЩИЩЕННЫХ ФАЙЛОВ.
  ПРИМЕР.
          .TITLE  RENAME.MAC
  ;В ДАННОМ ПРИМЕРЕ ЗАПРОС .RENAME ИСПОЛЬЗУЕТСЯ
  ;ДЛЯ ИЗМЕНЕНИЯ ИМЕНИ ФАЙЛА.
          .MCALL  .CSISPC,.RENAME,.FETCH,.PRINT,.SRESET,.EXIT
          ERRBYT = 52
  START:  .CSISPC #FILESP,#DEFEXT ;ВВОД КОМАНДНОЙ СТРОКИ
          .FETCH  #DRVLOD,#FILESP ;ЗАГРУЗИТЬ ДРАЙВЕР
          BCS     2$
          MOV     #FILESP,R2
          MOV     #FILESP+46,R3
          MOV     @R2,#FILESP+36
          .REPT   4
          MOV     (R2)+,(R3)+
          .ENDR
          .RENAME #AREA,#0,#FILESP+36 ;ПЕРЕИМЕНОВАТЬ ФАЙЛ
          BCC     1$
          DECB    @#ERRBYT        ;АНАЛИЗ ОШИБКИ
          BEQ     3$
          MOV     #ILLOP,R0
          BR      4$
  1$:     .SRESET
          .EXIT
 
  2$:     MOV     #FERR,R0
          BR      4$
  3$:     MOV     #NOFIL,R0
  4$:     .PRINT
          BR      1$
 
  AREA:   .BLKW   5
  DEFEXT: .WORD   0,0,0,0
  NOFIL:  .ASCIZ  /ФАЙЛ НЕ НАЙДЕН/
  ILLOP:  .ASCIZ  /НЕДОПУСТИМАЯ ОПЕРАЦИЯ/
  FERR:   .ASCIZ  /ОШИБКА .FETCH/
          .EVEN
  FILESP: .BLKW   39.*2
  DRVLOD  =.
          .END    START
 
 
        5.1.8. .REOPEN
        ЗАПРОС .REOPEN ПОВТОРНО СВЯЗЫВАЕТ  УКАЗАННЫЙ  КАНАЛ  С
   ФАЙЛОМ, ДЛЯ КОТОРОГО БЫЛ ВЫПОЛНЕН ЗАПРОС .SAVESTATUS.  СОВ-
   МЕСТНОЕ ИСПОЛЬЗОВАНИЕ ЗАПРОСОВ .SAVESTATUS И  .REOPEN  ТРЕ-
   БУЕТСЯ ДЛЯ ОДНОВРЕМЕННОГО ОБРАЩЕНИЯ К БОЛЬШОМУ  ЧИСЛУ  ФАЙ-
   ЛОВ. ФАЙЛЫ ОТКРЫВАЮТСЯ ПО .LOOKUP И ПАРАМЕТРЫ ИХ  СОСТОЯНИЯ
   ЗАПОМИНАЮТСЯ ПО .SAVESTATUS. КОГДА ТРЕБУЮТСЯ ДАННЫЕ ИЗ ФАЙ-
   ЛА, .REOPEN ОБЕСПЕЧИВАЕТ ПРОГРАММЕ ВОЗМОЖНОСТЬ ЧТЕНИЯ  ЭТИХ
   ДАННЫХ. НЕ ЯВЛЯЕТСЯ ОБЯЗАТЕЛЬНЫМ ВЫПОЛНЕНИЕ .REOPEN НА  ТОМ
   ЖЕ КАНАЛЕ, НА КОТОРОМ БЫЛИ ВЫПОЛНЕНЫ .LOOKUP И .SAVESTATUS.
        ФОРМАТ МАКРОКОМАНДЫ:
        .REOPEN AREA,CHAN,CBLK
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 2-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        CBLK - АДРЕС БЛОКА  ИЗ  5-ТИ  СЛОВ,  ГДЕ  ЗАПОМИНАЕТСЯ
   ИНФОРМАЦИЯ О СОСТОЯНИИ КАНАЛА.
        ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
          AREA:   .BYTE   CHAN,6
                  .WORD   CBLK
        ПРИМЕР СМ. В ОПИСАНИИ ЗАПРОСА .SAVESTATUS.
 
        5.1.9. .SAVESTATUS
        ЗАПРОС .SAVESTATUS ЗАПОМИНАЕТ ПЯТЬ СЛОВ  ИНФОРМАЦИИ  О
   СОСТОЯНИИ КАНАЛА В УКАЗАННОЙ ПОЛЬЗОВАТЕЛЕМ ОБЛАСТИ  ПАМЯТИ.
   ЭТИ СЛОВА СОДЕРЖАТ  ПОЛНУЮ  ИНФОРМАЦИЮ,  КОТОРАЯ  ТРЕБУЕТСЯ
   ОПЕРАЦИОННОЙ СИСТЕМЕ ДЛЯ ТОЧНОГО ОПРЕДЕЛЕНИЯ  ФАЙЛА.  ПОСЛЕ
   ВЫПОЛНЕНИЯ .SAVESTATUS УКАЗАННЫЙ КАНАЛ ОСВОБОЖДАЕТСЯ.  ЕСЛИ
   НЕОБХОДИМО ПОЛУЧИТЬ ДАННЫЕ ПО ЭТОМУ КАНАЛУ, ТО ИСПОЛЬЗУЕТСЯ
   ЗАПРОС .REOPEN. ЗАПРОС .SAVESTATUS МОЖЕТ  ИСПОЛЬЗОВАТЬСЯ  В
   ТОМ СЛУЧАЕ, ЕСЛИ ФАЙЛ  БЫЛ  ОТКРЫТ  ПО  .LOOKUP.  ЕСЛИ  БЫЛ
   ИСПОЛЬЗОВАН .ENTER, ТО .SAVESTATUS ИГНОРИРУЕТСЯ  И  ГЕНЕРИ-
   РУЕТСЯ ОШИБКА. ЗАПРОС .SAVESTATUS НЕДОПУСТИМ В ОПЕРАЦИЯХ  С
   ФАЙЛАМИ, КОТОРЫЕ НАХОДЯТСЯ НА МАГНИТНОЙ ЛЕНТЕ.
        ЗАПРОСЫ .SAVESTATUS И .REOPEN ИСПОЛЬЗУЮТСЯ ДЛЯ  РАБОТЫ
   С БОЛЬШИМ ЧИСЛОМ ФАЙЛОВ ПРИ ОГРАНИЧЕННОМ ЧИСЛЕ КАНАЛОВ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .SAVESTATUS AREA,CHAN,CBLK
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 2-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        CBLK - АДРЕС БЛОКА ИЗ 5-ТИ СЛОВ, В КОТОРЫЙ БУДЕТ ЗАПИ-
   САНА ИНФОРМАЦИЯ О СОСТОЯНИИ КАНАЛА; АДРЕС ДОЛЖЕН БЫТЬ  УКА-
   ЗАН В ПРЕДЕЛАХ ПРОГРАММЫ ПОЛЬЗОВАТЕЛЯ. (СМ. ПРИЛОЖЕНИЕ 2).
        ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
          AREA:   .BYTE   CHAN,5
                  .WORD   CBLK
 
  ПРИМЕР.
          .TITLE  SAVEST.MAC
          .MCALL  .CSIGEN,.SAVESTATUS,.READW,.WRITW,.PRINT
          .MCALL  .PURGE,.REOPEN,.CLOSE,.EXIT
          ERRBYT = 52
  START:  .CSIGEN #DSPACE,#DEFEXT ;ВВОД КОМАНДНОЙ СТРОКИ
          MOV     #3,R4           ;ВХОДНОЙ КАНАЛ
          MOV     #AREA,R3        ;УКАЗАТЕЛЬ НА БЛОК
                                  ;СОСТОЯНИЯ КАНАЛА
          MOV     #SAVBLK,R5
  1$:     .SAVEST R3,R4,R5        ;СОХРАНИТЬ ИНФОРМАЦИЮ
                                  ;О КАНАЛЕ
          BCS     2$
          ADD     #12,R5          ;УКАЗАТЕЛЬ НА СЛЕДУЮЩИЙ
                                  ;БЛОК ИНФОРМАЦИИ
          INC     R4
          CMP     #8.,R4          ;ВХОДНЫЕ ФАЙЛЫ ВСЕ?
          BGE     1$              ;НЕТ
  2$:     MOV     #SAVBLK,R5
          BEQ     7$
  4$:     .REOPEN R3,#3,R5        ;ПОВТОРНО ИСПОЛЬЗОВАТЬ
                                  ;КАНАЛ 3
          CLR     BLK
  5$:     .READW  R3,#3,#BUFF,#256.,BLK ;ЧИТАТЬ БЛОК
          BCC     6$
          TSTB    @#ERRBYT        ;КОНЕЦ ФАЙЛА?
 
          BNE     8$
          .PURGE  #3              ;ОСВОБОДИТЬ КАНАЛ
          ADD     #12,R5
          TST     @R5             ;ПОСЛЕДНИЙ ФАЙЛ?
          BNE     4$
          .CLOSE  #0              ;ЗАКРЫТЬ ВЫХ.КАНАЛ
          .PRINT  #DONE
          .EXIT
 
  6$:     .WRITW  R3,#0,#BUFF,#256.,WBLK ;ЗАПИСАТЬ БЛОК
          INC     WBLK
          INC     BLK
          BCC     5$
          MOV     #WERR,R0
          BR      9$
  7$:     MOV     #NOIMP,R0
          BR      9$
  8$:     MOV     #RERR,R0
  9$:     .PRINT
          .EXIT
 
  AREA:   .BLKW   5
  BLK:    .WORD   0
  WBLK:   .WORD   0
  SAVBLK: .BLKW   30.
  DEFEXT: .WORD   0,0,0,0
  NOIMP:  .ASCIZ  /НЕТ БОЛЬШЕ ВХОДНЫХ ФАЙЛОВ/
  WERR:   .ASCIZ  /ОШИБКА ЗАПИСИ/
  RERR:   .ASCIZ  /ОШИБКА ЧТЕНИЯ/
  DONE:   .ASCIZ  /КОНЕЦ ПРОГРАММЫ/
          .EVEN
  BUFF:   .BLKW   256.
  DSPACE  =.
 
          .END    START
 
        5.2. ПРОГРАММНЫЕ  ЗАПРОСЫ  ДЛЯ   ОРГАНИЗАЦИИ
             ВВОДА-ВЫВОДА ДАННЫХ
 
        5.2.1. .READ,.READC,.READW
        СИСТЕМА RT11 ПРЕДУСМАТРИВАЕТ ТРИ РЕЖИМА  ВЫПОЛНЕНИЯ
   ОПЕРАЦИЙ ВВОДА-ВЫВОДА:
                    .READ /.WRITE
                    .READC/.WRITC
                    .READW/.WRITW
        ПРИ ИСПОЛЬЗОВАНИИ ЗАПРОСОВ .READ И .READC ДОЛЖНЫ  БЫТЬ
   ОПРЕДЕЛЕНЫ  ДОПОЛНИТЕЛЬНЫЕ  ЭЛЕМЕНТЫ  ДЛЯ  ОЧЕРЕДИ   ВВОДА-
   ВЫВОДА.
        ЕСЛИ ЗАПРОСЫ READ/C/W ИСПОЛЬЗУЮТСЯ ДЛЯ ОБМЕНА ИНФОРМА-
   ЦИЕЙ МЕЖДУ ЗАДАНИЯМИ, ТО РАЗМЕР БУФЕРА (BUF) ДОЛЖЕН НА ОДНО
   СЛОВО ПРЕВЫШАТЬ ЧИСЛО СЛОВ ДЛЯ ЧТЕНИЯ  (WCNT)  Т.К.  ПЕРВОЕ
   СЛОВО БУФЕРА (BUF) БУДЕТ СОДЕРЖАТЬ ДЕЙСТВИТЕЛЬНОЕ КОЛИЧЕСТ-
   ВО ПЕРЕДАННЫХ СЛОВ.
        ЗАПРОС .READ ИСПОЛЬЗУЕТСЯ ДЛЯ  ПЕРЕДАЧИ  ОПРЕДЕЛЕННОГО
   КОЛИЧЕСТВА СЛОВ ПО УКАЗАННОМУ КАНАЛУ В БУФЕР ПАМЯТИ. УПРАВ-
   ЛЕНИЕ ПЕРЕДАЕТСЯ ПРОГРАММЕ  ПОЛЬЗОВАТЕЛЯ  НЕМЕДЛЕННО  ПОСЛЕ
   НАЧАЛА ВЫПОЛНЕНИЯ ЗАПРОСА .READ. ПОСЛЕ ЗАВЕРШЕНИЯ  ПЕРЕДАЧИ
   ДАННЫХ НИКАКИХ ДЕЙСТВИЙ НЕ ПРОИСХОДИТ.
 
        ФОРМАТ МАКРОКОМАНДЫ:
        .READ AREA,CHAN,BUF,WCNT,BLK
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 5-ТИ СЛОВ АРГУМЕНТОВ ЕМТ;
        BUF - АДРЕС БУФЕРА ДЛЯ ЧТЕНИЯ ДАННЫХ;
        WCNT - КОЛИЧЕСТВО СЛОВ ДЛЯ ЧТЕНИЯ;
        BLK -  НОМЕР  БЛОКА  ДЛЯ  ОПЕРАЦИИ  ЧТЕНИЯ;  ЕСЛИ  БЫЛ
   ИСПОЛЬЗОВАН ФАЙЛОВЫЙ .LOOKUP, TO BLK - НОМЕР БЛОКА  ОТНОСИ-
   ТЕЛЬНО  НАЧАЛА  ФАЙЛА;  ЕСЛИ  БЫЛ  ИСПОЛЬЗОВАН   НЕФАЙЛОВЫЙ
   .LOOKUP, TO BLK - АБСОЛЮТНЫЙ НОМЕР БЛОКА УСТРОЙСТВА;  ПРОГ-
   РАММА ПОЛЬЗОВАТЕЛЯ ДОЛЖНА МОДИФИЦИРОВАТЬ BLK ПЕРЕД ЕГО ПОВ-
   ТОРНЫМ ИСПОЛЬЗОВАНИЕМ.
        ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
          AREA:   .BYTE   CHAN,10
                  .WORD   BLK
                  .WORD   BUF
                  .WORD   WCNT
                  .WORD   1
  ПРИМЕР.
          .TITLE  READ.MAC
  ;ПРИМЕР ИСПОЛЬЗОВАНИЯ ЗАПРОСОВ .READ,.WRITE.
          .MCALL  .READ,.WRITE,.CLOSE,.PRINT,.CSIGEN
          .MCALL  .WAIT,.SRESET,.EXIT
          ERRBYT = 52
          .ENABL  LSB
  START:  .CSIGEN #DSPACE,#DEFEXT ;ВВОД КОМАНДНОЙ СТРОКИ
          MOV     #AREA,R5
          CLR     IOBLK
  1$:     .READ   R5,#3   ;ЧИТАТЬ С 0-ГО БЛОКА
          BCS     6$      ;ОШИБКА ЧТЕНИЯ
          ;       .
          BIT     #1,IOBLK
          BNE     2$
          .PRINT  #MES
          ;       .
  2$:     .WAIT   #3      ;ЖДАТЬ ЗАВЕРШЕНИЯ ОПЕРАЦИИ
          BCS     5$
          .WRITE  R5,#0   ;ЗАПИСАТЬ БЛОК
          BCS     3$
          INC     IOBLK
          ;       .
          .WAIT   #0      ;ЖДАТЬ ЗАВЕРШЕНИЯ ОПЕРАЦИИ
          BCC     1$
  3$:     MOV     #WERR,R0
  4$:     .PRINT
          BR      7$
  5$:     MOV     #RERR,R0
          BR      4$
  6$:     TSTB    @#ERRBYT
          BNE     5$
          .PRINT  #MES1
          .CLOSE  #0
  7$:     .SRESET         ;УДАЛИТЬ ЗАГРУЖЕННЫЙ ДРАЙВЕР
          .EXIT
  AREA:   .WORD   0
  IOBLK:  .WORD   0
          .WORD   BUFF
          .WORD   256.
          .WORD   0
  BUFF:   .BLKW   256.
  DEFEXT: .WORD   0,0,0,0
  MES1:   .ASCIZ  /ОПЕРАЦИЯ ВВОДА-ВЫВОДА ЗАВЕРШЕНА/
  MES:    .ASCIZ  <15><12>/ВЫПОЛНЕНИЕ ПРОГРАММЫ ПРОДОЛЖАЕТСЯ/
  WERR:   .ASCIZ  /ОШИБКА .WRITE/
  RERR:   .ASCIZ  /ОШИБКА .READ/
          .EVEN
  DSPACE  =.
 
          .END    START
 
        ЕСЛИ ВВОД ВЫПОЛНЯЕТСЯ С ТЕРМИНАЛА И BLK=0, ТО НА  ТЕР-
   МИНАЛЕ ПЕЧАТАЕТСЯ "^" (КОД 136).
        КОГДА ПРОГРАММЕ ПОЛЬЗОВАТЕЛЯ  НУЖНО  ВЫПОЛНИТЬ  ЧТЕНИЕ
   ДАННЫХ, МОЖЕТ БЫТЬ ИСПОЛЬЗОВАН ЗАПРОС .WAIT.  ЭТО  ГАРАНТИ-
   РУЕТ ТО, ЧТО ДАННЫЕ БУДУТ ПРОЧИТАНЫ ПОЛНОСТЬЮ. ЕСЛИ ВО ВРЕ-
   МЯ ПЕРЕДАЧИ ДАННЫХ ПРОИЗОШЛА ОШИБКА, ЗАПРОС .WAIT  СООБЩАЕТ
   О НЕЙ.
        ЗАПРОС .READC ПЕРЕДАЕТ ОПРЕДЕЛЕННОЕ КОЛИЧЕСТВО СЛОВ ПО
   УКАЗАННОМУ КАНАЛУ В ПАМЯТЬ. УПРАВЛЕНИЕ ПРОГРАММЕ  ПОЛЬЗОВА-
   ТЕЛЯ БУДЕТ ПЕРЕДАНО СРАЗУ ПОСЛЕ НАЧАЛА  ВЫПОЛНЕНИЯ  .READC.
   ПОПЫТКА ЧТЕНИЯ ДАННЫХ ПОСЛЕ КОНЦА ФАЙЛА  ВЫЗЫВАЕТ  ПЕРЕДАЧУ
   УПРАВЛЕНИЯ ВЫЗЫВАЮЩЕЙ ПРОГРАММЕ С УСТАНОВЛЕНИЕМ С-РАЗРЯДА И
   ЗАПИСЬЮ НУЛЯ В  БАЙТ  ОШИБОК  (52-БАЙТ).  ПОСЛЕ  ВЫПОЛНЕНИЯ
   .READC УПРАВЛЕНИЕ БУДЕТ ПЕРЕДАНО  ПОДПРОГРАММЕ  ЗАВЕРШЕНИЯ,
   АДРЕС КОТОРЫЙ УКАЗАН В ЗАПРОСЕ. ЕСЛИ В ПОДПРОГРАММЕ  ЗАВЕР-
   ШЕНИЯ ВЫПОЛНЯЕТСЯ КОМАНДА RTS PC, ТО УПРАВЛЕНИЕ ВОЗВРАЩАЕТ-
   СЯ ПРОГРАММЕ ПОЛЬЗОВАТЕЛЯ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .READC AREA,CHAN,BUF,WCNT,CRTN,BLK
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 5-ТИ СЛОВ АРГУМЕНТОВ ЕМТ;
        BUF - АДРЕС БУФЕРА ДЛЯ ЧТЕНИЯ ДАННЫХ;
        WCNT - КОЛИЧЕСТВО СЛОВ ДЛЯ ЧТЕНИЯ;
        CRTN - АДРЕС  ПОДПРОГРАММЫ  ЗАВЕРШЕНИЯ  (АДРЕС  ДОЛЖЕН
   БЫТЬ БОЛЬШЕ 500 (ВОСЬМЕРИЧНОЙ));
        BLK - СМ. ЗАПРОС .READ
        ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
          AREA:   .BYTE   CHAN,10
                  .WORD   BLK
                  .WORD   BUF
                  .WORD   WCNT
                  .WORD   CRTN
        ПРИ ЗАПУСКЕ ПОДПРОГРАММЫ ЗАВЕРШЕНИЯ  СПРАВЕДЛИВО  СЛЕ-
   ДУЮЩЕЕ:
        1) РЕГИСТР R0 СОДЕРЖИТ СЛОВО СОСТОЯНИЯ КАНАЛА; ЕСЛИ  В
   R0 УСТАНОВЛЕН РАЗРЯД 0, ТО ПРОИЗОШЛА АППАРАТНАЯ  ОШИБКА  ВО
   ВРЕМЯ ПЕРЕДАЧИ ДАННЫХ;
        2) РЕГИСТР R1 СОДЕРЖИТ НОМЕР КАНАЛА ДЛЯ ОПЕРАЦИИ;  ЭТА
   ИНФОРМАЦИЯ НЕОБХОДИМА, КОГДА  ОДНА  И  ТА  ЖЕ  ПОДПРОГРАММА
   ЗАВЕРШЕНИЯ ИСПОЛЬЗУЕТСЯ В НЕСКОЛЬКИХ ОПЕРАЦИЯХ.
  ПРИМЕР.
          .TITLE  READC.MAC
  ;ПРИМЕР ИСПОЛЬЗОВАНИЯ ЗАПРОСОВ .READC,.WRITC.
          .MCALL  .READC,.WRITC,.CSIGEN,.PRINT
          .MCALL  .CLOSE,.WAIT,.SRESET,.EXIT
          ERRBYT  = 52
          .ENABL  LSB
  START:  .CSIGEN #DSPACE,#DEFEXT ;ВВОД КОМАНДНОЙ СТРОКИ
          CALL    IOXFER          
          .PRINT  #MES
          MOV     #-1,R5
  1$:     DEC     R5
          BNE     1$
          TSTB    EOF
          BEQ     1$              ;0 - ОШИБКА ЗАПИСИ
          BLT     RERR            ;<0- ОШИБКА ЧТЕНИЯ
          .CLOSE  #0              ;>0- КОНЕЦ ФАЙЛА
          MOV     #DONE,R0
          BR      EXIT
  WERR:   MOV     #WRERR,R0
          BR      EXIT
  RERR:   MOV     #RDERR,R0
  EXIT:   .PRINT
          .SRESET                 ;УДАЛИТЬ ЗАГРУЖЕННЫЕ
                                  ;ДРАЙВЕРЫ
          .EXIT
 
  WRDONE: .WAIT   #0
          BCS     3$
  IOXFER: .READC  #AREA,#3,,,#4$  ;ЧИТАТЬ БЛОК
          BCC     7$
          TSTB    @#ERRBYT        ;КОНЕЦ ФАЙЛА?
          BEQ     6$              ;ДА
  2$:     DECB    EOF
  3$:     DECB    EOF
          RETURN
  4$:     .WAIT   #3
          BCS     2$
          .WRITC  #AREA,#0,,,#WRDONE;ЗАПИСАТЬ БЛОК
          BCS     3$
  5$:     INC     BLOK
          RETURN
  6$:     INCB    EOF
  7$:     RETURN
 
  AREA:   .WORD   0       ;БЛОК АРГУМЕНТОВ ЕМТ
  BLOK:   .WORD   0       ;НОМЕР БЛОКА
          .WORD   BUFF    ;АДРЕС БУФЕРА
          .WORD   256.    ;СЧЕТЧИК СЛОВ
          .WORD   0       ;АДРЕС ПОДПРОГРАММЫ ЗАВЕРШЕНИЯ
  BUFF:   .BLKW   256.
  DEFEXT: .WORD   0,0,0,0
  DONE:   .ASCIZ  /КОНЕЦ ПРОГРАММЫ/
  MES:    .ASCIZ  /ВЫПОЛНЕНИЕ ПРОГРАММЫ ПРОДОЛЖАЕТСЯ/
  WRERR:  .ASCIZ  /ОШИБКА .WRITC/
  RDERR:  .ASCIZ  /ОШИБКА .READC/
  EOF:    .BYTE   0
          .EVEN
  DSPACE  =.
          
          .END    START
 
        ЗАПРОС .READW ПЕРЕДАЕТ ОПРЕДЕЛЕНННОЕ  КОЛИЧЕСТВО  СЛОВ
   ПО УКАЗАННОМУ КАНАЛУ В ПАМЯТЬ. УПРАВЛЕНИЕ ПЕРЕДАЕТСЯ  ПРОГ-
   РАММЕ ПОЛЬЗОВАТЕЛЯ ПОСЛЕ ВЫПОЛНЕНИЯ ЗАПРОСА .READW ИЛИ  ПРИ
   ОБНАРУЖЕНИИ ОШИБКИ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .READW AREA,CHAN,BUF,WCNT,BLK
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 5-ТИ СЛОВ АРГУМЕНТОВ ЕМТ;
        WCNT - КОЛИЧЕСТВО СЛОВ ДЛЯ ЧТЕНИЯ (КАЖДЫЙ ЗАПРОС МОЖЕТ
   ПЕРЕДАТЬ МАКСИМАЛЬНО 32К СЛОВ);
        BLK - СМ. ЗАПРОС .READ
        ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
          AREA:   .BYTE   CHAN,10
                  .WORD   BLK
                  .WORD   BUF
                  .WORD   WCNT
                  .WORD   0
        ЕСЛИ ПОСЛЕ  ЗАВЕРШЕНИЯ  ЗАПРОСА  БУДЕТ  УСТАНОВЛЕН  С-
   РАЗРЯД, ТО ЭТО УКАЗЫВАЕТ НА ТО,  ЧТО  НА  КАНАЛЕ  ПРОИЗОШЛА
   АППАРАТНАЯ ОШИБКА. ЕСЛИ ОШИБКИ НЕ БЫЛО, ТО ДАННЫЕ НАХОДЯТСЯ
   В ПАМЯТИ, НАЧИНАЯ С УКАЗАННОГО АДРЕСА. В РЕЖИМЕ FB ОДНО  ИЗ
   ЗАДАНИЙ МОЖЕТ ВЫПОЛНЯТЬСЯ В ТО  ВРЕМЯ  КАК  ДРУГОЕ  ЗАДАНИЕ
   ОЖИДАЕТ ЗАВЕРШЕНИЯ ОПЕРАЦИИ.
  ПРИМЕР.
 
          .TITLE  READW.MAC
  ;ПРИМЕР ИСПОЛЬЗОВАНИЯ ЗАПРОСОВ .READW,.WRITW.
          .MCALL  .CSIGEN,.READW,.WRITW,.PRINT,.CLOSE
          .MCALL  .SRESET,.EXIT
 
          ERRBYT = 52
 
  START:  .CSIGEN #DSPACE,#DEFEXT
          CLR     IOBLK
          MOV     #AREA,R5
  READ:   .READW  R5,#3
          BCC     2$
          TSTB    @#ERRBYT
          BEQ     3$
          MOV     #RERR,R0
  1$:     .PRINT
          BR      4$
  2$:     .WRITW  R5,#0
          INC     IOBLK
          BCC     READ
          MOV     #WERR,R0
          BR      1$
  3$:     .CLOSE  #0
          .PRINT  #DONE
  4$:     .SRESET
          .EXIT
 
  DEFEXT: .WORD   0,0,0,0
  AREA:   .WORD   0
  IOBLK:  .WORD   0
          .WORD   BUFF
          .WORD   256.
          .WORD   0
  BUFF:   .BLKW   256.
  RERR:   .ASCIZ  /ОШИБКА .READW/
  WERR:   .ASCIZ  /ОШИБКА .WRITW/
  DONE:   .ASCIZ  /КОНЕЦ ПРОГРАММЫ/
          .EVEN
  DSPACE  =.
 
          .END    START
 
        5.2.2. .WRITE,.WRITC,.WRITW
        ПРИ ИСПОЛЬЗОВАНИИ ЗАПРОСОВ .WRITE И .WRITC ДОЛЖНЫ БЫТЬ
   ОПРЕДЕЛЕНЫ  ДОПОЛНИТЕЛЬНЫЕ  ЭЛЕМЕНТЫ  ДЛЯ  ОЧЕРЕДИ   ВВОДА-
   ВЫВОДА.
        ЗАПРОС .WRITE ПЕРЕДАЕТ УКАЗАННОЕ  КОЛИЧЕСТВО  СЛОВ  ИЗ
   ПАМЯТИ ПО УКАЗАННОМУ КАНАЛУ. УПРАВЛЕНИЕ ПРОГРАММЕ ПОЛЬЗОВА-
   ТЕЛЯ ПЕРЕДАЕТСЯ СРАЗУ ЖЕ ПОСЛЕ ТОГО, КАК ЗАПРОС БУДЕТ  ПОС-
   ТАВЛЕН В ОЧЕРЕДЬ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .WRITE AREA,CHAN,BUF,WCNT,BLK
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 5-ТИ СЛОВ АРГУМЕНТОВ ЕМТ;
        BUF - АДРЕС БУФЕРА ПАМЯТИ,  КОТОРЫЙ  ИСПОЛЬЗУЕТСЯ  ДЛЯ
   ВЫВОДА;
        WCNT - КОЛИЧЕСТВО СЛОВ ДЛЯ ЗАПИСИ;
        BLK - НОМЕР БЛОКА ДЛЯ ОПЕРАЦИИ  ЗАПИСИ;  ЕСЛИ  ИСПОЛЬ-
   ЗУЕТСЯ ФАЙЛОВЫЙ .LOOKUP ИЛИ .ENTER, TO BLK  -  НОМЕР  БЛОКА
   ОТНОСИТЕЛЬНО НАЧАЛА ФАЙЛА; ЕСЛИ БЫЛ ИСПОЛЬЗОВАН  НЕФАЙЛОВЫЙ
   .LOOKUP ИЛИ .ENTER, ТО BLK - АБСОЛЮТНЫЙ  НОМЕР  БЛОКА  УСТ-
   РОЙСТВА; ПРОГРАММА ПОЛЬЗОВАТЕЛЯ ДОЛЖНА  МОДИФИЦИРОВАТЬ  BLK
   ПЕРЕД ЕГО ПОВТОРНЫМ ИСПОЛЬЗОВАНИЕМ.
        ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
          AREA:   .BYTE   CHAN,11
                  .WORD   BLK
                  .WORD   BUF
                  .WORD   WCNT
                  .WORD   1
        ЗАПРОС .WRITC ПЕРЕДАЕТ  ЗАДАННОЕ  КОЛИЧЕСТВО  СЛОВ  ИЗ
   ПАМЯТИ ПО УКАЗАННОМУ КАНАЛУ. УПРАВЛЕНИЕ ПЕРЕДАЕТСЯ ПРОГРАМ-
   МЕ ПОЛЬЗОВАТЕЛЯ НЕМЕДЛЕННО ПОСЛЕ НАЧАЛА ВЫПОЛНЕНИЯ  .WRITC.
   ПОСЛЕ ВЫПОЛНЕНИЯ ЗАПРОСОВ, УПРАВЛЕНИЕ БУДЕТ ПЕРЕДАНО  ПОДП-
   РОГРАММЕ ЗАВЕРШЕНИЯ. ПО КОМАНДЕ RTS PC  УПРАВЛЕНИЕ  ВОЗВРА-
   ШАЕТСЯ ПРОГРАММЕ ПОЛЬЗОВАТЕЛЯ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .WRITC AREA,CHAN,BUF,WCNT,CRTN,BLK
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 5-ТИ СЛОВ АРГУМЕНТОВ ЕМТ;
        BUF - АДРЕС БУФЕРА ПАМЯТИ,  КОТОРЫЙ  ИСПОЛЬЗУЕТСЯ  ДЛЯ
   ВЫВОДА;
        WCNT - КОЛИЧЕСТВО СЛОВ ДЛЯ ЗАПИСИ;
        CRTN - АДРЕС ПОДПРОГРАММЫ ЗАВЕРШЕНИЯ;
        BLK - СМ. ЗАПРОС .WRITE
        ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
          AREA:   .BYTE   CHAN,11
                  .WORD   BLK
                  .WORD   BUF
                  .WORD   WCNT
                  .WORD   CRTN
 
        ЗАПРОС .WRITW ПЕРЕДАЕТ  ЗАДАННОЕ  КОЛИЧЕСТВО  СЛОВ  ИЗ
   ПАМЯТИ ПО УКАЗАННОМУ КАНАЛУ. УПРАВЛЕНИЕ ПЕРЕДАЕТСЯ ПРОГРАМ-
   МЕ ПОЛЬЗОВАТЕЛЯ ПОСЛЕ ЗАВЕРШЕНИЯ .WRITW.
        ФОРМАТ МАКРОКОМАНДЫ:
        .WRITW AREA,CHAN,BUF,WCNT,BLK
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 5-ТИ СЛОВ АРГУМЕНТОВ ЕМТ;
        BUF - АДРЕС БУФЕРА, КОТОРЫЙ ИСПОЛЬЗУЕТСЯ ДЛЯ ВЫВОДА;
        WCNT - КОЛИЧЕСТВО СЛОВ ДЛЯ ЗАПИСИ;
        BLK - СМ. ЗАПРОС .WRITE.
        ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
          AREA:   .BYTE   CHAN,10
                  .WORD   BLK
                  .WORD   BUF
                  .WORD   WCNT
                  .WORD   0
 
        5.2.3. .RCVD,.RCVDC,.RCVDW (РЕЖИМ FB,ХМ)
        СУЩЕСТВУЮТ ТРИ ФОРМЫ ЗАПРОСА ПОЛУЧЕНИЯ ДАННЫХ, КОТОРЫЕ
   ИСПОЛЬЗУЮТСЯ ВМЕСТЕ С ЗАПРОСАМИ .SDAT. ЗАПРОСЫ .RCVD АНАЛО-
   ГИЧНЫ ЗАПРОСАМ .READ, НО  В  ОТЛИЧИИ  ОТ  НИХ  ОСУЩЕСТВЛЯЮТ
   ПРИЕМ ДАННЫХ ИЗ ДРУГОЙ ПРОГРАММЫ, А НЕ  С  УСТРОЙСТВА.  ПРИ
   ИСПОЛЬЗОВАНИИ ЗАПРОСОВ .RCVD И .RCVDC ДОЛЖНЫ БЫТЬ ОПРЕДЕЛЕ-
   НЫ ДОПОЛНИТЕЛЬНЫЕ ЭЛЕМЕНТЫ ДЛЯ ОЧЕРЕДИ ВВОДА-ВЫВОДА.
        ЗАПРОС .RCVD ИСПОЛЬЗУЕТСЯ  ДЛЯ  ПОЛУЧЕНИЯ  ДАННЫХ  ИЛИ
   СООБЩЕНИЙ, ПОСЫЛАЕМЫХ ДРУГОЙ ПРОГРАММОЙ.  УПРАВЛЕНИЕ  ВЫЗЫ-
   ВАЮЩЕЙ ПРОГРАММЕ ПЕРЕДАЕТСЯ СРАЗУ ЖЕ ПОСЛЕ НАЧАЛА  ВЫПОЛНЕ-
   НИЯ ЗАПРОСА .RCVD. ПРИ НЕОБХОДИМОСТИ, С .RCVD  ИСПОЛЬЗУЕТСЯ
   ЗАПРОС .MWAIT, КОТОРЫЙ ЗАДЕРЖИВАЕТ ВЫПОЛНЕНИЕ ПРОГРАММЫ  ДО
   ОКОНЧАНИЯ ОПЕРАЦИИ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .RCVD AREA,BUF,WCNT
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 5-ТИ СЛОВ АРГУМЕНТОВ ЕМТ;
        BUF - АДРЕС БУФЕРА ДЛЯ СООБЩЕНИЙ (ДАННЫХ);
        WCNT - КОЛИЧЕСТВО ПЕРЕДАВАЕМЫХ СЛОВ.
        ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
          AREA:   .BYTE   0,26
                  .WORD   <ЗАРЕЗЕРВИРОВАНО>
                  .WORD   BUF
                  .WORD   WCNT
                  .WORD   1
        ПОСЛЕ ВЫПОЛНЕНИЯ МОНИТОРОМ ЗАПРОСА .RCVD, ПЕРВОЕ СЛОВО
   БУФЕРА  (BUF)  БУДЕТ  СОДЕРЖАТЬ  ДЕЙСТВИТЕЛЬНОЕ  КОЛИЧЕСТВО
   ПЕРЕДАННЫХ СЛОВ. ТАКИМ ОБРАЗОМ, ОБЛАСТЬ ПАМЯТИ  ДЛЯ  ПРИЕМА
   ДАННЫХ ДОЛЖНА БЫТЬ, ПО КРАЙНЕЙ МЕРЕ, НА ОДНО  СЛОВО  БОЛЬШЕ
   РАЗМЕРА ПЕРЕДАВАЕМОГО СООБЩЕНИЯ.
        КОМБИНАЦИЯ .SDAT/.RCVD  МОЖЕТ  БЫТЬ  ИСПОЛЬЗОВАНА  ДЛЯ
   ПЕРЕДАЧИ КАК НЕСКОЛЬКИХ СЛОВ, ТАК И ЦЕЛОГО БУФЕРА. ОПЕРАЦИЯ
   ПО ЗАПРОСУ  .RCVD  ЗАКАНЧИВАЕТСЯ  ТОЛЬКО  ПОСЛЕ  ВЫПОЛНЕНИЯ
   .SDAT ИЗ ДРУГОЙ ПРОГРАММЫ.
        ПРИМЕР ИСПОЛЬЗОВАНИЯ  .RCVD  СМ.  В  ОПИСАНИИ  ЗАПРОСА
   .MWAIT.
        ЗАПРОС .RCVDC ОСУЩЕСТВЛЯЕТ ПРИЕМ  ДАННЫХ  И  ЗАПУСКАЕТ
   ПОДПРОГРАММУ ЗАВЕРШЕНИЯ ПОСЛЕ ПОЛУЧЕНИЯ  СООБЩЕНИЯ  (АНАЛО-
   ГИЧНО .READC).
        ФОРМАТ МАКРОКОМАНДЫ:
        .RCVDC AREA,BUF,WCNT,CRTN
   ГДЕ CRTN - АДРЕС ПОДПРОГРАММЫ ЗАВЕРШЕНИЯ.
        ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
          AREA:   .BYTE   0,26
                  .WORD   <ЗАРЕЗЕРВИРОВАНО>
                  .WORD   BUF
                  .WORD   WCNT
                  .WORD   CRTN
 
        ЗАПРОС .RCVDW  ОСУЩЕСТВЛЯЕТ  ПРИЕМ  ДАННЫХ  И  ОЖИДАЕТ
   ОКОНЧАНИЯ ОПЕРАЦИИ. ВЫПОЛНЕНИЕ ВЫЗЫВАЮЩЕЙ ПРОГРАММЫ  ЗАДЕР-
   ЖИВАЕТСЯ ДО ОКОНЧАНИЯ ПЕРЕДАЧИ СООБЩЕНИЯ ДРУГОЙ ПРОГРАММОЙ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .RCVDW AREA,BUF,WCNT
        ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
          AREA:   .BYTE   0,26
                  .WORD   <ЗАРЕЗЕРВИРОВАНО>
                  .WORD   BUF
                  .WORD   WCNT
                  .WORD   0
 
        КАК И В .RCVD, ПЕРВОЕ СЛОВО БУФЕРА ДЛЯ .RCVDC И .RCVDW
   БУДЕТ СОДЕРЖАТЬ ДЕЙСТВИТЕЛЬНОЕ КОЛИЧЕСТВО ПЕРЕДАННЫХ СЛОВ.
        ПРИМЕР ИСПОЛЬЗОВАНИЯ .RCVDW  СМ.  В  ОПИСАНИИ  ЗАПРОСА
   .CHCOPY.
 
        5.2.4. .SDAT,.SDATC,.SDATW (РЕЖИМ FB,ХМ)
        ЗАПРОСЫ .SDAT,.SDATC,.SDATW ИСПОЛЬЗУЮТСЯ ВМЕСТЕ С ЗАП-
   РОСАМИ .RCVD,.RCVDC, .RCVDW ДЛЯ ПЕРЕДАЧИ СООБЩЕНИЙ ИЛИ ДАН-
   НЫХ МЕЖДУ ПРОГРАММАМИ ПОД УПРАВЛЕНИЕМ МОНИТОРОВ FB ИЛИ XM.
        ЗАПРОСЫ   .SDAT,.SDATC,.SDATW   АНАЛОГИЧНО    ЗАПРОСАМ
   .WRITE,.WRITC,.WRITW, ТОЛЬКО ОСУЩЕСТВЛЯЮТ  ПЕРЕДАЧУ  ДАННЫХ
   НЕ НА УСТРОЙСТВО, А  ДРУГОЙ  ПРОГРАММЕ.  ПРИ  ИСПОЛЬЗОВАНИИ
   ЗАПРОСОВ .SDAT И .SDATC ДОЛЖНЫ БЫТЬ ОПРЕДЕЛЕНЫ ДОПОЛНИТЕЛЬ-
   НЫЕ ЭЛЕМЕНТЫ ДЛЯ ОЧЕРЕДИ ВВОДА-ВЫВОДА.
        .SDAT
        ФОРМАТ МАКРОКОМАНДЫ:
        .SDAT AREA,BUF,WCNT
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 5-ТИ СЛОВ АРГУМЕНТОВ ЕМТ;
        BUF - АДРЕС БУФЕРА  ДЛЯ  СООБЩЕНИЙ  (ДАННЫХ),  КОТОРЫЕ
   БУДУТ ПЕРЕДАНЫ;
        WCNT - КОЛИЧЕСТВО СЛОВ ДЛЯ ПЕРЕДАЧИ.
        ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
          AREA:   .BYTE   0,25
                  .WORD   <ЗАРЕЗЕРВИРОВАНО>
                  .WORD   BUF
                  .WORD   WCNT
                  .WORD   1
 
        ПРИМЕР ИСПОЛЬЗОВАНИЯ  .SDAT  СМ.  В  ОПИСАНИИ  ЗАПРОСА
   .MWAIT.
        .SDATC
        ФОРМАТ МАКРОКОМАНДЫ:
        .SDATC AREA,BUF,WCNT,CRTN
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 5-ТИ СЛОВ АРГУМЕНТОВ ЕМТ;
        BUF - АДРЕС БУФЕРА  ДЛЯ  СООБЩЕНИЙ  (ДАННЫХ),  КОТОРЫЕ
   БУДУТ ПЕРЕДАНЫ;
        WCNT - КОЛИЧЕСТВО СЛОВ ДЛЯ ПЕРЕДАЧИ;
        CRTN - АДРЕС ПОДПРОГРАММЫ ЗАВЕРШЕНИЯ.
        ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
          AREA:   .BYTE   0,25
                  .WORD   <ЗАРЕЗЕРВИРОВАНО>
                  .WORD   BUF
                  .WORD   WCNT
                  .WORD   CRTN
        .SDATW
        ФОРМАТ МАКРОКОМАНДЫ:
        .SDATW AREA,BUF,WCNT
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 5-ТИ СЛОВ АРГУМЕНТОВ ЕМТ;
        BUF - АДРЕС БУФЕРА  ДЛЯ  СООБЩЕНИЙ  (ДАННЫХ),  КОТОРЫЕ
   БУДУТ ПЕРЕДАНЫ;
        WCNT - КОЛИЧЕСТВО СЛОВ ДЛЯ ПЕРЕДАЧИ.
        ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
          AREA:   .BYTE   0,25
                  .WORD   <ЗАРЕЗЕРВИРОВАНО>
                  .WORD   BUF
                  .WORD   WCNT
                  .WORD   0
 
        ПРИМЕР ИСПОЛЬЗОВАНИЯ .SDATW  СМ.  В  ОПИСАНИИ  ЗАПРОСА
   .CHCOPY.
 
        5.2.5. .TTYIN,.TTINR
        ЗАПРОСЫ .TTYIN И .TTINR ИСПОЛЬЗУЮТСЯ ДЛЯ ПЕРЕДАЧИ СИМ-
   ВОЛОВ С ТЕРМИНАЛА В ПРОГРАММУ ПОЛЬЗОВАТЕЛЯ.
        МАКРОРАСШИРЕНИЕ ДЛЯ .TTYIN:
                EMT 340
                BCS .-2
        МАКРОРАСШИРЕНИЕ ДЛЯ .TTINR:
                EMT 340
        ЗАПРОС .TTYIN ЦИКЛИТСЯ В ОЖИДАНИИ ПОДАЧИ  СИМВОЛА  ИЛИ
   СТРОКИ СИМВОЛОВ, В ТО ВРЕМЯ КАК ПОЛЬЗОВАТЕЛЬ МОЖЕТ ИЛИ ОЖИ-
   ДАТЬ,  ИЛИ  ПРОДОЛЖАТЬ  ВЫПОЛНЕНИЕ   ПРОГРАММЫ,   ИСПОЛЬЗУЯ
   .TTINR. ЕСЛИ ПО ЗАВЕРШЕНИЮ ВЫПОЛНЕНИЯ .TTINR  УСТАНАВЛИВАЕТ
   С-РАЗРЯД, ТО ЭТО  ЗНАЧИТ  ЧТО  В  БУФЕРЕ  ТЕРМИНАЛА  СИМВОЛ
   ОТСУТСТВУЕТ (ПОЛЬЗОВАТЕЛЬ ЕЩЕ НЕ НАПЕЧАТАЛ ЕГО). В  РЕЖИМАХ
   FB,ХМ И  SJ(БЕЗ  МУЛЬТИТЕРМИНАЛЬНОЙ  ПОДДЕРЖКИ)  .TTINR  НЕ
   УСТАНАВЛИВАЕТ С-РАЗРЯД, ЕСЛИ НЕ УСТАНОВЛЕН  6-ОЙ  РАЗРЯД  В
   СЛОВЕ СОСТОЯНИЯ ЗАДАНИЯ (ССЗ).
        СУЩЕСТВУЮТ ДВА РЕЖИМА ВВОДА С ТЕРМИНАЛА.  РЕЖИМ  ВВОДА
   ОПРЕДЕЛЯЕТСЯ СОДЕРЖИМЫМ 12-ГО РАЗРЯДА В ССЗ. ЕСЛИ СОДЕРЖИМОЕ
   12-ГО РАЗРЯДА НОЛЬ, ТО  ГОВОРЯТ  ОБ ОБЩЕМ РЕЖИМЕ ВВОДА-ВЫВО-
   ДА. В ЭТОМ РЕЖИМЕ  ВЫПОЛНЯЮТСЯ  СЛЕДУЮЩИЕ ДЕЙСТВИЯ:
        1) МОНИТОР ОБЕСПЕЧИВАЕТ "ЭХО" ВСЕМ СИМВОЛАМ,  ВВОДИМЫМ
   С ТЕРМИНАЛА;
        2) СТИРАНИЕ СИМВОЛОВ И СТРОК ОСУЩЕСТВЛЯЕТСЯ С  ПОМОЩЬЮ
   КОМАНД ЗБ И СУ/U СООТВЕТСТВЕННО;
        3) ДЛЯ ПЕРЕДАЧИ СИМВОЛОВ ПРОГРАММЕ  НЕОБХОДИМО  ПОДАТЬ
   ВК , ПС ИЛИ КОМАНДЫ СУ/Z ИЛИ СУ/С; ВОЗВРАТ КАРЕТКИ И  ПЕРЕ-
   ВОД СТРОКИ ТАКЖЕ ПЕРЕДАЮТСЯ ПРОГРАММЕ ПОЛЬЗОВАТЕЛЯ.
        ЕСЛИ 12-ЫЙ РАЗРЯД В ССЗ РАВЕН ЕДИНИЦЕ,  ТО  УСТАНАВЛИ-
   ВАЕТСЯ СПЕЦИАЛЬНЫЙ РЕЖИМ ВВОДА-ВЫВОДА. В ЭТОМ РЕЖИМЕ ВЫПОЛ-
   НЯЮТСЯ СЛЕДУЮЩИЕ ДЕЙСТВИЯ:
        1) МОНИТОР НЕ ВЫДАЕТ "ЭХО" СИМВОЛАМ, ВВОДИМЫМ С ТЕРМИ-
   НАЛА, КРОМЕ СУ/С И СУ/D;
        2) СУ/U И ЗБ НЕ ВЫПОЛНЯЮТ СВОИХ ФУНКЦИЙ;
        3) СИМВОЛЫ СРАЗУ ЖЕ ПЕРЕДАЮТСЯ ПРОГРАММЕ ПОЛЬЗОВАТЕЛЯ.
        В СПЕЦИАЛЬНОМ  РЕЖИМЕ  ПРОГРАММА  ПОЛЬЗОВАТЕЛЯ  ДОЛЖНА
   САМА ВЫПОЛНЯТЬ ПЕЧАТЬ ВВОДИМЫХ СИМВОЛОВ, ЕСЛИ ЭТО НЕОБХОДИ-
   МО (ИСКЛЮЧЕНИЕ СОСТАВЛЯЮТ СУ/С И СУ/D).
        12-ЫЙ РАЗРЯД В ССЗ ДОЛЖЕН  УСТАНАВЛИВАТЬСЯ  ПРОГРАММОЙ
   ПОЛЬЗОВАТЕЛЯ. ЭТОТ РАЗРЯД ОЧИЩАЕТСЯ, ЕСЛИ УПРАВЛЕНИЕ  ПЕРЕ-
   ДАЕТСЯ МОНИТОРУ.
        ДЕЙСТВИЯ СУ/F,СУ/В И СУ/Х НЕ  ЗАВИСЯТ  ОТ  СОДЕРЖИМОГО
   12-ГО РАЗРЯДА, ЕСЛИ РАНЕЕ НЕ БЫЛА  ПОДАНА  КОМАНДА  SET  TT
   NOFB).
        КОМАНДЫ СУ/S И СУ/Q ВЫПОЛНЯЮТСЯ МОНИТОРОМ, ЕСЛИ ТОЛЬКО
   В РЕЖИМЕ FB(XM) РАНЕЕ НЕ  БЫЛА  ВЫПОЛНЕНА  КОМАНДА  SET  TT
   NOPAGE.
        ЕСЛИ В РЕЖИМЕ FB (XM) СДЕЛАН ЗАПРОС ВВОДА,  А  СИМВОЛА
   НЕТ В НАЛИЧИИ, ТО ВЫПОЛНЕНИЕ ПРОГРАММЫ БЛОКИРУЕТСЯ  ДО  ТЕХ
   ПОР, ПОКА В БУФЕРЕ ВВОДА НЕ ПОЯВИТСЯ СИМВОЛ. ЭТО СПРАВЕДЛИ-
   ВО ДЛЯ .TTYIN И TTINR И НЕ ЗАВИСИТ  ОТ  РЕЖИМА  ВВОДА.  ДЛЯ
   ТОГО, ЧТОБЫ ПРОДОЛЖИТЬ ВЫПОЛНЕНИЕ ПРОГРАММЫ  (И  ОБЕСПЕЧИТЬ
   УСТАНОВКУ С-РАЗРЯДА В СЛУЧАЕ ОТСУТСТВИЯ  СИМВОЛА  В  БУФЕРЕ
   ВВОДА) НЕОБХОДИМО УСТАНОВИТЬ ПЕРЕД  .TTINR  6-ОЙ  РАЗРЯД  В
   ССЗ. 6-ОЙ РАЗРЯД ОЧИЩАЕТСЯ ПОСЛЕ ОКОНЧАНИЯ ВЫПОЛНЕНИЯ ПРОГ-
   РАММЫ.
        ВВОДИМЫЕ ПО .TTYIN, .TTYINR СИМВОЛЫ  МОЖНО  РЕДАКТИРО-
   ВАТЬ С ПОМОЩЬЮ SL, ЕСЛИ ПРЕДВАРИТЕЛЬНО БЫЛИ ПОДАНЫ  КОМАНДЫ
   SET SL ON И SET SL TTYIN И СОДЕРЖИМОЕ 4-ГО И 12-ГО РАЗРЯДОВ
   ССЗ РАВНЫ НУЛЮ.
        ПРИ РЕДАКТИРОВАНИИ  ПОСРЕДСТВОМ  SL,  СОДЕРЖИМОЕ  6-ГО
   РАЗРЯДА ССЗ НЕ СУЩЕСТВЕННО,  И  ВЫПОЛНЕНИЕ  ЗАПРОСА  .TTINR
   БУДЕТ ЗАВЕРШЕНО ТОЛЬКО ПОСЛЕ ЗАВЕРШЕНИЯ ОПЕРАЦИИ РЕДАКТИРО-
   ВАНИЯ.
        ПРИМЕЧАНИЕ. ЗАПРОС  .TTYIN  НЕ  ОБСЛУЖИВАЕТ  КОСВЕННЫЕ
   ФАЙЛЫ. ДЛЯ ЭТОЙ ЦЕЛИ  НЕОБХОДИМО  ВОСПОЛЬЗОВАТЬСЯ  ЗАПРОСОМ
   .GTLIN. ПО .TTYIN НЕВОЗМОЖНО ПОЛУЧИТЬ СИМВОЛ ИЗ  КОСВЕННОГО
   ФАЙЛА.
        ФОРМАТ МАКРОКОМАНДЫ:
        .TTYIN CHAR
        .TTINR
   ГДЕ CHAR - АДРЕС ЯЧЕЙКИ, КУДА  ПЕРЕСЫЛАЕТСЯ  КОД  ВВОДИМОГО
   СИМВОЛА; ЕСЛИ CHAR УКАЗАН В ЗАПРОСЕ, ТО КОД ПЕРЕСЫЛАЕТСЯ  В
   УКАЗАННУЮ ЯЧЕЙКУ И В R0; ЕСЛИ CHAR НЕ УКАЗАН, ТО В R0.
        ПРИМЕР ИСПОЛЬЗОВАНИЯ .TTYIN,.TTINR СМ. В ОПИСАНИИ ЗАП-
   РОСОВ .TTYOUT,.TTOUTR.
 
        5.2.6. .TTYOUT,.TTOUTR
        ЗАПРОСЫ .TTYOUT,.TTOUTR ИСПОЛЬЗУЮТСЯ ДЛЯ ПЕРЕДАЧИ СИМ-
   ВОЛОВ ИЗ R0 В БУФЕР ТЕРМИНАЛА. ДЕЙСТВИЯ ЭТИХ ЗАПРОСОВ  АНА-
   ЛОГИЧНЫ ДЕЙСТВИЯМ ЗАПРОСОВ .TTYIN,.TTINR. ЕСЛИ БУФЕР ТЕРМИ-
   НАЛА ЗАПОЛНЕН, ТО ЗАПРОС .TTYOUT ОЖИДАЕТ ПОЯВЛЕНИЯ В БУФЕРЕ
   СВОБОДНОГО МЕСТА ДЛЯ ВЫВОДИМОГО СИМВОЛА, ТОГДА КАК  .TTOUTR
   НЕ ОЖИДАЕТ СВОБОДНОГО МЕСТА И СИМВОЛ, НАХОДЯЩИЙСЯ В R0,  НА
   ТЕРМИНАЛ НЕ ВЫВОДИТСЯ. ЕСЛИ ПОСЛЕ ЗАВЕРШЕНИЯ .TTOUTR  УСТА-
   НОВЛЕН  С-РАЗРЯД, ТО  ЭТО  ГОВОРИТ О ТОМ, ЧТО В БУФЕРЕ  НЕТ
   СВОБОДНОГО МЕСТА И ЧТО СИМВОЛ НЕ БЫЛ ВЫВЕДЕН НА ТЕРМИНАЛ. В
   РЕЖИМАХ FB,ХМ ЗАПРОС .TTOUTR НЕ УСТАНАВЛИВАЕТ  С-РАЗРЯД.  В
   ЭТОМ СЛУЧАЕ, ВЫПОЛНЕНИЕ ПРОГРАММЫ БЛОКИРУЕТСЯ ДО  ПОЯВЛЕНИЯ
   В БУФЕРЕ  СВОБОДНОГО  МЕСТА.  ДЛЯ  ТОГО,  ЧТОБЫ  ПРОДОЛЖИТЬ
   ВЫПОЛНЕНИЕ  ПРОГРАММЫ  И  ОБЕСПЕЧИТЬ  УСТАНОВКУ  С-РАЗРЯДА,
   НЕОБХОДИМО В ССЗ УСТАНОВИТЬ 6-ОЙ РАЗРЯД.
        ПРИМЕЧАНИЕ. ЕСЛИ В ОСНОВНОМ  ЗАДАНИИ  УСТАНОВЛЕН  6-ОЙ
   РАЗРЯД В ССЗ, ТО ЗАПРОСЫ .TTYIN И  .TTYOUT  БУДУТ  ВЫЗЫВАТЬ
   БЛОКИРОВКУ ФОНОВОГО ЗАДАНИЯ. ЗАМЕТИМ, ЧТО КАЖДОЕ ЗАДАНИЕ  В
   ОСНОВНОМ ИЛИ ФОНОВОМ РЕЖИМЕ ИМЕЕТ СВОЕ  СОБСТВЕННОЕ  ССЗ  И
   ПОЭТОМУ ОНИ МОГУТ ИСПОЛЬЗОВАТЬ РАЗЛИЧНЫЕ РЕЖИМЫ РАБОТЫ ТЕР-
   МИНАЛА НЕЗАВИСИМО ДРУГ ОТ ДРУГА.
        ФОРМАТ МАКРОКОМАНДЫ:
        .TTYOUT CHAR
        .TTOUTR
   ГДЕ CHAR - АДРЕС ЯЧЕЙКИ, СОДЕРЖАЩЕЙ  КОД  СИМВОЛА,  КОТОРЫЙ
   БУДЕТ ПЕРЕСЫЛАТЬСЯ В R0 С ПОСЛЕДУЮЩИМ ВЫВОДОМ НА  ТЕРМИНАЛ;
   ЕСЛИ CHAR НЕ УКАЗАН, НА ТЕРМИНАЛ ВЫВОДИТСЯ СОДЕРЖИМОЕ R0.
  ПРИМЕР.
          .TITLE  TTIO.MAC
          .MCALL  .TTYIN,.TTYOUT,.TTINR,.TTOUTR,.EXIT
          JSW     =44       ;СЛОВО СОСТОЯНИЯ ЗАДАНИЯ
  START:  MOV     #BUFFER,R1
          CLR     R2
          BIS     #100,@#JSW ;УСТАНОВИТЬ 6 РАЗРЯД
  INLOOP: .TTINR             ;ВВЕСТИ СИМВОЛ С ТТ:
          BCS     NOCHR
  CHRIN:  MOVB    R0,(R1)+   ;ПЕРЕСЛАТЬ СИМВОЛ В БУФЕР
          INC     R2
          CMPB    R0,#12
          BNE     INLOOP
          MOV     #BUFFER,R1
  OUTLOOP:MOVB    (R1),R0    ;ПЕРЕСЛАТЬ СИМВОЛ В R0
          .TTOUTR            ;ВЫВЕСТИ СИМВОЛ НА ТТ:
          BCS     NOROOM
  CHROUT: DEC     R2
          BEQ     START
          INC     R1
          BR      OUTLOOP    ;ПЕЧАТАТЬ СЛЕДУЮЩИЙ СИМВОЛ
  NOCHR:  .TTINR
          BCC     CHRIN      ;ЕСТЬ СИМВОЛ?
          ;       .
          ;       .
          ;       .
          BR      NOCHR
          
  NOROOM: MOVB    (R1),R0
          .TTOUTR
          BCC     CHROUT     ;ПРИ НАЛИЧИИ СИМВОЛА -
                             ;ПЕЧАТАТЬ ЕГО
          ;       .
          ;       .
          ;       .
          BIC     #100,@#JSW ;ОЧИСТИТЬ 6 РАЗРЯД И
          .TTYOUT (R1)       ;ПЕЧАТАТЬ СИМВОЛ
          BIS     #100,@#JSW
          BR      CHROUT
 
  BUFFER: .BLKB   128.
          .END    START
 
        5.2.7. .PRINT
        ЗАПРОС .PRINT ВЫЗЫВАЕТ ПЕЧАТЬ СТРОКИ СИМВОЛОВ КОИ-7 НА
   СИСТЕМНОМ ТЕРМИНАЛЕ.  В  РЕЖИМАХ  FB,ХМ  КАЖДОМУ  СООБЩЕНИЮ
   ПРЕДШЕСТВУЕТ ПОБУЖДАЮЩИЙ ЗНАК В> ИЛИ F>, В  ЗАВИСИМОСТИ  ОТ
   ТОГО, КАКОЕ ЗАДАНИЕ ЕГО ПЕЧАТАЕТ (В> - ФОНОВОЕ, F> - ОСНОВ-
   НОЕ). ЭТО ПРОИСХОДИТ В СЛУЧАЕ ПЕРЕКЛЮЧЕНИЯ СИСТЕМНОГО  ТЕР-
   МИНАЛА НА ОБСЛУЖИВАНИЕ ДРУГОГО ЗАДАНИЯ.
        ЕСЛИ ВВОД НА ТЕРМИНАЛ ВЫПОЛНЯЕТСЯ СИСТЕМНЫМ  ЗАДАНИЕМ,
   ТО В КАЧЕСТВЕ ПОБУЖДАЮЩЕГО ЗНАКА ПЕЧАТАЕТСЯ ИМЯ  СИСТЕМНОГО
   ЗАДАНИЯ.
        СТРОКА ТЕКСТА,  КОТОРАЯ  ВЫВОДИТСЯ  НА  ПЕЧАТЬ,  МОЖЕТ
   ОКАНЧИВАТЬСЯ КАК НУЛЕВЫМ (0) БАЙТОМ, ТАК И  БАЙТОМ  200.  В
   ПЕРВОМ СЛУЧАЕ, В ОТЛИЧИИ ОТ  ВТОРОГО,  ВЫВОД  АВТОМАТИЧЕСКИ
   ЗАКАНЧИВАЕТСЯ ВК И ПС .
        УПРАВЛЕНИЕ ВОЗВРАЩАЕТСЯ ПРОГРАММЕ  ПОЛЬЗОВАТЕЛЯ  ПОСЛЕ
   ТОГО КАК ВСЕ СИМВОЛЫ БУДУТ ЗАПИСАНЫ В БУФЕР ВЫВОДА  МОНИТО-
   РА.
        ОСНОВНОЕ ЗАДАНИЕ ПЕЧАТАЕТ СООБЩЕНИЕ СРАЗУ ЖЕ,  НЕЗАВИ-
   СИМО ОТ СОСТОЯНИЯ ФОНОВОГО ЗАДАНИЯ.
        ТАКИМ ОБРАЗОМ, ДЛЯ  ПЕЧАТИ  СРОЧНЫХ  СООБЩЕНИЙ  ДОЛЖЕН
   ИСПОЛЬЗОВАТЬСЯ ЗАПРОС .PRINT, А НЕ .TTYIN ИЛИ .TTYOUT.
        ЕСЛИ ФОНОВОЕ ЗАДАНИЕ ПЕЧАТАЕТ ПОБУЖДАЮЩИЙ ЗНАК И ЗВЕЗ-
   ДОЧКУ, ТО СИСТЕМНЫЙ ТЕРМИНАЛ БУДЕТ ПРИНАДЛЕЖАТЬ ЕМУ И  ЗАП-
   РОСЫ .TTYOUT ИЗ ОСНОВНОГО  ЗАДАНИЯ  ВЫПОЛНЯТЬСЯ  НЕ  БУДУТ,
   ПОКА ДЛЯ ФОНОВОГО НЕ БУДЕТ ВЫПОЛНЕН ВК .
        ФОРМАТ МАКРОКОМАНДЫ:
        .PRINT ADDR
   ГДЕ ADDR - АДРЕС СТРОКИ, КОТОРУЮ НЕОБХОДИМО НАПЕЧАТАТЬ.
  ПРИМЕР.
          .TITLE  PRINT.MAC
  ;В ЭТОМ ПРИМЕРЕ ЗАПРОС .PRINT ИСПОЛЬЗУЕТСЯ ДЛЯ ПЕЧАТИ
  ;СИМВОЛОВ, ВВОДИМЫХ С ТЕРМИНАЛА.
          .MCALL  .GTLIN,.PRINT,.EXIT
  START:  .GTLIN  #BUFF,#PROMPT   ;ВВОД СИМВОЛОВ С ТЕРМИНАЛА
          TSTB    BUFF            ;СТРОКА ПУСТАЯ?
          BEQ     1$              ;ДА
          .PRINT  #BUFF           ;НЕТ-ПЕЧАТЬ СТРОКИ
          CLRB    BUFF
          BR      START
  1$:     .EXIT
  BUFF:   .BLKW   41.
  PROMPT: .ASCII  /ВВЕДИТЕ СТРОКУ :   /<200>
          
          .END START
 
        5.2.8. .MTIN
        ЗАПРОС .MTIN ЯВЛЯЕТСЯ МУЛЬТИТЕРМИНАЛЬНОЙ ФОРМОЙ ЗАПРО-
   СА .TTYIN. ЗАПРОС .MTIN ПЕРЕСЫЛАЕТ ОДИН ИЛИ БОЛЕЕ  СИМВОЛОВ
   ИЗ БУФЕРА ВВОДА МОНИТОРА В БУФЕР, УКАЗАННЫЙ  ПОЛЬЗОВАТЕЛЕМ.
   ТЕРМИНАЛ ДОЛЖЕН БЫТЬ ЛОГИЧЕСКИ СВЯЗАН С  ТЕКУЩИМ  ЗАДАНИЕМ.
   ЕСЛИ ЗАПРОС ВЫПОЛНЕН  УСПЕШНО,  ТО  МОДИФИЦИРОВАННЫЙ  АДРЕС
   БУФЕРА ПОЛЬЗОВАТЕЛЯ БУДЕТ ЗАПИСАН В R0 . ЕСЛИ РАЗРЯД  TCBIT
   УСТАНОВЛЕН В СЛОВЕ M.TSTS, ТО ЗАПРОС .MTIN УСТАНАВЛИВАЕТ С-
   РАЗРЯД И ПЕРЕДАЕТ  УПРАВЛЕНИЕ  ВЫЗЫВАЮЩЕЙ  ПРОГРАММЕ,  ЕСЛИ
   ВВОД С ТЕРМИНАЛА НЕВОЗМОЖЕН (Т.Е. НЕТ СТРОКИ,  ЕСЛИ  РАЗРЯД
   TTSPC ОЧИЩЕН ИЛИ НЕТ СИМВОЛА В БУФЕРЕ  ВВОДА,  ЕСЛИ  РАЗРЯД
   TTSPC УСТАНОВЛЕН). В ПРОТИВНОМ СЛУЧАЕ, .MTIN БУДЕТ  ОЖИДАТЬ
   ОПЕРАЦИИ ВВОДА  И,  ТЕМ  САМЫМ,  ВЫПОЛНЕНИЕ  ЗАДАНИЯ  БУДЕТ
   ПРИОСТАНОВЛЕНО.
        ФОРМАТ МАКРОКОМАНДЫ:
        .MTIN AREA,ADDR,UNIT[,CHRCNT]
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 3-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        ADDR - АДРЕС БУФЕРА ПОЛЬЗОВАТЕЛЯ;
        UNIT - ЛОГИЧЕСКИЙ НОМЕР ТЕРМИНАЛА (ЛНТ);
        CHRCNT - КОЛИЧЕСТВО ПЕРЕСЫЛАЕМЫХ  СИМВОЛОВ  (ОТ  1  ДО
   255); ЕСЛИ ЭТОТ АРГУМЕНТ ОПУЩЕН, ТО ПЕРЕДАЕТСЯ ОДИН СИМВОЛ.
        ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
          AREA:   .BYTE   2,37
                  .WORD   ADDR
                  .BYTE   UNIT,CHRCNT

        5.2.9. .MTOUT
        ЗАПРОС .MTOUT ЯВЛЯЕТСЯ МУЛЬТИТЕРМИНАЛЬНОЙ ФОРМОЙ  ЗАП-
   РОСА .TTYOUT. ЗАПРОС .MTOUT ПЕРЕСЫЛАЕТ ОДИН ИЛИ БОЛЕЕ  СИМ-
   ВОЛОВ ИЗ БУФЕРА ПОЛЬЗОВАТЕЛЯ В БУФЕР ВЫВОДА ТЕРМИНАЛА. ТЕР-
   МИНАЛ ДОЛЖЕН БЫТЬ ЛОГИЧЕСКИ СВЯЗАН С ЗАДАНИЕМ.  МОДИФИЦИРО-
   ВАННЫЙ АДРЕС БУФЕРА ПОЛЬЗОВАТЕЛЯ БУДЕТ ЗАПИСАН В  R0,  ЕСЛИ
   ЗАПРОС ВЫПОЛНЕН УСПЕШНО. ЕСЛИ В БУФЕРЕ ВЫВОДА НЕТ СВОБОДНО-
   ГО МЕСТА И РАЗРЯД  TCBIT  УСТАНОВЛЕН  В  СЛОВЕ  M.TSTS,  ТО
   .MTOUT УСТАНАВЛИВАЕТ С-РАЗРЯД И ПЕРЕДАЕТ  УПРАВЛЕНИЕ  ВЫЗЫ-
   ВАЮЩЕЙ ПРОГРАММЕ.  ЕСЛИ  РАЗРЯД  TCBIT  ОЧИЩЕН,  ВЫПОЛНЕНИЕ
   ЗАДАНИЯ ПРИОСТАНАВЛИВАЕТСЯ ДО ТЕХ  ПОР,  ПОКА  НЕ  ПОЯВИТСЯ
   СВОБОДНОЕ МЕСТО В БУФЕРЕ ВЫВОДА.
        ФОРМАТ МАКРОКОМАНДЫ:
        .MTOUT AREA,ADDR,UNIT[,CHRCNT]
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 3-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        ADDR - АДРЕС БУФЕРА ПОЛЬЗОВАТЕЛЯ;
        UNIT - ЛОГИЧЕСКИЙ НОМЕР ТЕРМИНАЛА;
        CHRCNT - КОЛИЧЕСТВО ПЕРЕДАВАЕМЫХ  СИМВОЛОВ  (ОТ  1  ДО
   255); ЕСЛИ ЭТОТ АРГУМЕНТ ОПУЩЕН, ТО ПЕРЕДАЕТСЯ ОДИН СИМВОЛ.
        ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
          AREA:   .BYTE   3,37
                  .WORD   ADDR
                  .BYTE   UNIT,CHRCNT
 
       5.2.10. .MTPRNT
        ЗАПРОС .MTPRNT ЯВЛЯЕТСЯ МУЛЬТИТЕРМИНАЛЬНОЙ ФОРМОЙ ЗАП-
   РОСА .PRINT. ОН ОСУЩЕСТВЛЯЕТ  ВЫВОД  ОДНОЙ  ИЛИ  НЕСКОЛЬКИХ
   СТРОК СИМВОЛОВ НА УКАЗАННЫЙ ТЕРМИНАЛ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .MTPRNT AREA,ADDR,UNIT
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 3-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        ADDR - АДРЕС  СТРОКИ,  КОТОРУЮ  НЕОБХОДИМО  НАПЕЧАТАТЬ
   (Т.Е. .ASCII /СТРОКА/ <200> ИЛИ .ASCIZ /СТРОКА/);
        UNIT - ЛОГИЧЕСКИЙ НОМЕР ТЕРМИНАЛА.
        ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
          AREA:   .BYTE   7,37
                  .WORD   ADDR
                  .BYTE   UNIT
 
       5.2.11. .SPFUN
        ЗАПРОС .SPFUN ИСПОЛЬЗУЕТСЯ ГЛАВНЫМ ОБРАЗОМ  ДРАЙВЕРАМИ
   УСТРОЙСТВ ДЛЯ ВЫПОЛНЕНИЯ СПЕЦИАЛЬНЫХ ФУНКЦИЙ, ЗАВИСЯЩИХ  ОТ
   ЭТИХ УСТРОЙСТВ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .SPFUN AREA,CHAN,FUNC,BUF,WCNT,BLK[,CRTN]
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 6-ТИ СЛОВ АРГУМЕНТОВ ЕМТ;
        FUNC - КОД ФУНКЦИИ, КОТОРАЯ БУДЕТ ВЫПОЛНЯТЬСЯ;
        BUF - АДРЕС БУФЕРА; ЭТОТ АРГУМЕНТ  ДОЛЖЕН  БЫТЬ  РАВЕН
   НУЛЮ, ЕСЛИ ДЛЯ ОПЕРАЦИИ БУФЕР НЕ ТРЕБУЕТСЯ;
        CRTN - АДРЕС ПОДПРОГРАММЫ  ЗАВЕРШЕНИЯ;  ЕСЛИ  CRTN  НЕ
   УКАЗАН, ТО ЕГО ЗНАЧЕНИЕ АВТОМАТИЧЕСКИ ПРИРАВНИВАЕТСЯ  НУЛЮ;
   ЕСЛИ CRTN РАВЕН НУЛЮ, ТО УПРАВЛЕНИЕ ПРОГРАММЕ  ПОЛЬЗОВАТЕЛЯ
   БУДЕТ ПЕРЕДАНО ПОСЛЕ ЗАВЕРШЕНИЯ ОПЕРАЦИИ; ЕСЛИ  CRTN  РАВЕН
   1, УПРАВЛЕНИЕ БУДЕТ ПЕРЕДАНО ПРОГРАММЕ ПОЛЬЗОВАТЕЛЯ  НЕМЕД-
   ЛЕННО ПОСЛЕ НАЧАЛА ОПЕРАЦИИ; ЕСЛИ CRTN=N ,  ТО  N  -  АДРЕС
   ПОДПРОГРАММЫ ЗАВЕРШЕНИЯ (N>500 (ВОСЬМЕРИЧНОЙ)).
        АРГУМЕНТЫ  CHAN,BLK,WCNT  ТЕ  ЖЕ,  ЧТО  И  В  ЗАПРОСАХ
   .READ/.WRITE. ОНИ ИСПОЛЬЗУЮТСЯ ТОЛЬКО ТОГДА, КОГДА  НЕОБХО-
   ДИМО ПРОИЗВЕСТИ ЗАПИСЬ НА  МАГНИТНУЮ  ЛЕНТУ  С  РАСШИРЕННЫМ
   МЕЖФАЙЛОВЫМ ПРОМЕЖУТКОМ.
        ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
          AREA:   .BYTE   CHAN,32
                  .WORD   BLK
                  .WORD   BUF
                  .WORD   WCNT
                  .BYTE   377,FUNC
                  .WORD   CRTN
        В ТАБЛ.9 ПРИВОДЯТСЯ ФУНКЦИИ  ЗАПРОСА  .SPFUN  И  СООТ-
   ВЕТСТВУЮЩИЕ ИМ КОДЫ.
 
                                                    ТАБЛИЦА 9
    -----------------------------------------------------------
    !                                 !         КОД           !
    !          ФУНКЦИЯ                !-----------------------!
    !                                 !  MТ !  DX !  DY !  LD !
    !---------------------------------------------------------!
    ! ПЕРЕМОТКА ДО ТОЧКИ ЗАГРУЗКИ     ! 373 !     !     !     !
    ! ЗАПИСЬ МЕТКИ EOF                ! 377 !     !     !     !
    ! ПЕРЕМОТКА ВПЕРЕД НА ОДИН БЛОК   ! 376 !     !     !     !
    ! ПЕРЕМОТКА НАЗАД НА ОДИН БЛОК    ! 375 !     !     !     !
    ! ЗАПИСЬ                          ! 371 ! 376 ! 376 !     !
    ! ЧТЕНИЕ                          ! 370 ! 377 ! 377 !     !
    ! ЗАПИСЬ С РАСШИРЕННЫМ МЕЖФАЙЛОВЫМ!     !     !     !     !
    ! ПРОМЕЖУТКОМ                     ! 374 !     !     !     !
    ! ОБРАТНАЯ ПЕРЕМОТКА В АВТОНОМНОМ !     !     !     !     !
    ! РЕЖИМЕ                          ! 372 !     !     !     !
    ! ЗАПИСЬ СО СТИРАНИЕМ МАРКЕРА     !     !     !     !     !
    ! ДАННЫХ                          !     ! 375 ! 375 !     !
    ! ОПРЕДЕЛЕНИЕ РАЗМЕРА УСТРОЙСТВА  !     !     !     !     !
    ! (ТОМА)                          !     !  -  ! 373 ! 373 !
    ! ЧТЕНИЕ(ЗАПИСЬ) ТАБЛИЦЫ ТРАНСЛЯ- !     !     !     !     !
    ! ЦИИ                             !     !     !     ! 372 !
    -----------------------------------------------------------
 
        ДЛЯ ИСПОЛЬЗОВАНИЯ  ЗАПРОСА  .SPFUN  НЕОБХОДИМО,  ЧТОБЫ
   ДРАЙВЕР СООТВЕТСТВУЮЩЕГО УСТРОЙСТВА НАХОДИЛСЯ  В  ПАМЯТИ  И
   КАНАЛ БЫЛ СВЯЗАН С ФАЙЛОМ ПО ЗАПРОСУ .LOOKUP.
  ПРИМЕР.
          .TITLE  SPFUN.MAC
  ;ПРИМЕР ИСПОЛЬЗОВАНИЯ ЗАПРОСА .SPFUN.
          .MCALL  .SPFUN,.FETCH,.LOOKUP,.PRINT,.CLOSE,.EXIT
  START:  .FETCH  #DSPC,#MT       ;ЗАГРУЗИТЬ ДРАЙВЕР МТ:
          BCS     1$
          .LOOKUP #AREA,#4,#MT    ;ОТКРЫТЬ КАНАЛ
          BCS     2$
          .SPFUN  #AREA,#4,#373,#0;ПЕРЕМОТКА ДО ТОЧКИ
                                  ;ЗАГРУЗКИ
          .BCS    3$
          .CLOSE  #4
          .EXIT
  1$:     MOV     #FERR,R0
          BR      5$
  2$:     MOV     #LKERR,R0
          BR      5$
  3$:     MOV     #SPERR,R0
  5$:     .PRINT
          .EXIT
  AREA:   .WORD   0
  MT:     .RAD50  /MT /
          .WORD   0,0,0
  FERR:   .ASCIZ  /ОШИБКА .FETCH/
  LKERR:  .ASCIZ  /ОШИБКА .LOOKUP/
  SPERR:  .ASCIZ  /ОШИБКА .SPFUN/
          .EVEN
  DSPC    =.
          .END    START
 
        5.3. ЗАПРОСЫ ОБЩЕГО НАЗНАЧЕНИЯ
        5.3.1. .CDFN
        ЗАПРОС .CDFN ИСПОЛЬЗУЕТСЯ  ДЛЯ  ПЕРЕОПРЕДЕЛЕНИЯ  ЧИСЛА
   КАНАЛОВ ВВОДА-ВЫВОДА. КАЖДОЕ  ЗАДАНИЕ  НЕЗАВИСИМО  ОТ  ТОГО
   ЯВЛЯЕТСЯ ЛИ ОНО ОСНОВНЫМ ИЛИ ФОНОВЫМ, ПЕРВОНАЧАЛЬНО ОБЕСПЕ-
   ЧИВАЕТСЯ 16 (ДЕСЯТИЧНОЕ) КАНАЛАМИ  ВВОДА-ВЫВОДА  (ОТ  0  ДО
   15). ЗАПРОС .CDFN ПОЗВОЛЯЕТ УВЕЛИЧИТЬ ЧИСЛО КАНАЛОВ  ДО 255
   (ДЕСЯТИЧНОЕ) (ОТ 0 ДО 254). КАНАЛ С НОМЕРОМ 255 ИСПОЛЬЗУЕТ-
   СЯ МОНИТОРОМ. ОБЛАСТЬ ПАМЯТИ ДЛЯ НОВЫХ КАНАЛОВ ОПРЕДЕЛЯЕТСЯ
   В ПРЕДЕЛАХ ПРОГРАММЫ ПОЛЬЗОВАТЕЛЯ. ПОД КАЖДЫЙ КАНАЛ  ВВОДА-
   ВЫВОДА ОТВОДИТСЯ ПЯТЬ СЛОВ (СЕМЬ СЛОВ ДЛЯ МОНИТОРА  ХМ).  В
   РЕЖИМЕ ХМ ОБЛАСТЬ ПАМЯТИ ДЛЯ ДОПОЛНИТЕЛЬНЫХ  КАНАЛОВ,  УКА-
   ЗАННЫХ В ЗАПРОСЕ .CDFN, ДОЛЖНА РАСПОЛАГАТЬСЯ В  НИЖНИХ  28К
   ОПЕРАТИВНОЙ  ПАМЯТИ.  РЕКОМЕНДУЕТСЯ,  ЧТОБЫ  ЗАПРОС   .CDFN
   ВЫПОЛНЯЛСЯ  В  НАЧАЛЕ  ПРОГРАММЫ  ПЕРЕД  ОПЕРАЦИЯМИ  ВВОДА-
   ВЫВОДА. ЕСЛИ В ПРОГРАММЕ ИСПОЛЬЗУЕТСЯ БОЛЕЕ ОДНОГО  ЗАПРОСА
   .CDFN, ТО ОБЛАСТИ КАНАЛОВ ДЛЯ  НИХ  НЕ  ДОЛЖНЫ  ПЕРЕКРЫВАТЬ
   ДРУГ ДРУГА, НО МОГУТ ИМЕТЬ ОДИН И ТОТ ЖЕ  НАЧАЛЬНЫЙ  АДРЕС.
   ДВА ЗАПРОСА .SRESET И .HRESET ВОССТАНАВЛИВАЮТ  ПЕРВОНАЧАЛЬ-
   НОЕ ЧИСЛО КАНАЛОВ (16 (ДЕСЯТИЧНОЙ)). СЛЕДОВАТЕЛЬНО ВСЕ ЗАП-
   РОСЫ .CDFN ДОЛЖНЫ ВЫПОЛНЯТЬСЯ ПОВТОРНО ПОСЛЕ  ИСПОЛЬЗОВАНИЯ
   .SRESET ИЛИ .HRESET.
        ЗАМЕТИМ, ЧТО ЗАПРОС  .CDFN  ОПРЕДЕЛЯЕТ  НОВЫЕ  КАНАЛЫ.
   ОБЛАСТЬ ПАМЯТИ ДЛЯ РАНЕЕ ОПРЕДЕЛЕННЫХ  КАНАЛОВ  НЕ  ИСПОЛЬ-
   ЗУЕТСЯ. ТАК, ЗАПРОС .CDFN ДЛЯ 20 (ДЕСЯТИЧНОЙ) КАНАЛОВ  ВВО-
   ДА-ВЫВОДА (В ТО ВРЕМЯ КАК  16  ПЕРВОНАЧАЛЬНЫХ  КАНАЛОВ  УЖЕ
   ОПРЕДЕЛЕНЫ) СОЗДАЕТ 20 НОВЫХ КАНАЛОВ ВВОДА-ВЫВОДА.  ОБЛАСТЬ
   ДЛЯ 16-ТИ ПЕРВОНАЧАЛЬНЫХ КАНАЛОВ НЕ ИСПОЛЬЗУЕТСЯ, НО СОДЕР-
   ЖИМОЕ СТАРЫХ КАНАЛОВ БУДЕТ СКОПИРОВАНО В НОВЫЕ.
        ДЛЯ ПРОГРАММЫ  С  ОВЕРЛЕЙНОЙ  СТРУКТУРОЙ  15-ЫЙ  КАНАЛ
   ИСПОЛЬЗУЕТСЯ ОВЕРЛЕЙНЫМ ДРАЙВЕРОМ И НЕ ДОЛЖЕН ИЗМЕНЯТЬСЯ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .CDFN AREA,ADDR,NUM
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 3-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        ADDR - АДРЕС ОБЛАСТИ ПАМЯТИ ДЛЯ НОВЫХ КАНАЛОВ;
        NUM - ЧИСЛО СОЗДАВАЕМЫХ КАНАЛОВ.
        ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
          AREA:   .BYTE   0,15
                  .WORD   ADDR
                  .WORD   NUM
 
  ПРИМЕР.
          .TITLE  CDFN.MAC
  ; В ЭТОМ ПРИМЕРЕ ЗАПРОС .CDFN ИСПОЛЬЗУЕТСЯ ДЛЯ
  ; ОПРЕДЕЛЕНИЯ 32. НОВЫХ КАНАЛОВ.
 
          .MCALL  .CDFN,.PRINT,.EXIT,.HRESET
 
  START:  .CDFN   #AREA,#CHAN,#255.   ;ОПРЕДЕЛИТЬ 32.КАНАЛА
          BCC     1$
          .PRINT  #MSG1               ;ПЕЧАТЬ СООБЩЕНИЯ
          .EXIT                       ;ВЫХОД ИЗ ПРОГРАММЫ
  1$:     .PRINT  #MSG2               ;ПЕЧАТЬ СООБЩЕНИЯ
          .HRESET
          .EXIT                       ;ВЫХОД ИЗ ПРОГРАММЫ
 
  AREA:   .BLKW   3                   ;БЛОК АРГУМЕНТОВ ЕМТ
  CHAN:   .BLKW   5*255.              ;ОБЛАСТЬ ДЛЯ КАНАЛОВ
 
  MSG1:   .ASCIZ  /ОШИБКА .CDFN/
  MSG2:   .ASCII  /ОПРЕДЕЛЕНЫ 32. НОВЫХ КАНАЛА/<15><12>
          .ASCIZ /ВОЗВРАТ К 16. КАНАЛАМ/
          .EVEN
 
          .END    START
 
        5.3.2. .CHAIN
        ЗАПРОС .CHAIN ПОЗВОЛЯЕТ ОДНОЙ ФОНОВОЙ  ПРОГРАММЕ  ИНИ-
   ЦИИРОВАТЬ ВЫПОЛНЕНИЕ ДРУГОЙ ФОНОВОЙ  ПРОГРАММЫ  БЕЗ  ВМЕША-
   ТЕЛЬСТВА ОПЕРАТОРА. ЭТОТ ПРОЦЕСС МОЖЕТ ПОВТОРЯТЬСЯ, И  ПОЗ-
   ВОЛЯЕТ ОРГАНИЗОВАТЬ  ПОСЛЕДОВАТЕЛЬНОЕ  ВЫПОЛНЕНИЕ  БОЛЬШОГО
   ЧИСЛА ПРОГРАММ.
        ЯЧЕЙКИ 500-507 ДОЛЖНЫ СОДЕРЖАТЬ ИМЯ УСТРОЙСТВА  И  ИМЯ
   ФАЙЛА (В КОДАХ RADIX-50), КОТОРЫЙ НЕОБХОДИМО ВЫЗВАТЬ. ЯЧЕЙ-
   КИ 510-777 ИСПОЛЬЗУЮТСЯ ДЛЯ ПЕРЕДАЧИ ИНФОРМАЦИИ МЕЖДУ  ПОС-
   ЛЕДОВАТЕЛЬНО ВЫПОЛНЯЕМЫМИ ПРОГРАММАМИ.
        ФОРМАТ МАКРОКОМАНДЫ: .CHAIN
        ПРИМЕЧАНИЯ:
        1) СОДЕРЖИМОЕ ОБЛАСТЕЙ ОПЕРАТИВНОЙ ПАМЯТИ, ЗА ИСКЛЮЧЕ-
   НИЕМ ОБЛАСТИ ПАМЯТИ КОТОРУЮ ЗАНИМАЕТ РЕЗИДЕНТНЫЙ МОНИТОР  И
   ЯЧЕЕК 500-777, МОЖЕТ ИЗМЕНЯТЬСЯ  ПОСЛЕ  ВЫПОЛНЕНИЯ  .CHAIN;
   ЕСЛИ .CHAIN ВЫПОЛНЯЕТСЯ ИЗ ВИРТУАЛЬНОГО ЗАДАНИЯ, ТО  СОДЕР-
   ЖИМОЕ ЯЧЕЕК 500-777 НЕ СОХРАНЯЕТСЯ.
        2) КАНАЛЫ ВВОДА-ВЫВОДА ОСТАЮТСЯ ОТКРЫТЫМИ ПОСЛЕ ВЫПОЛ-
   НЕНИЯ ЗАПРОСА .CHAIN ДЛЯ  ИСПОЛЬЗОВАНИЯ  НОВОЙ  ПРОГРАММОЙ.
   ОДНАКО, КАНАЛЫ ВВОДА-ВЫВОДА, ОТКРЫТЫЕ ПО ЗАПРОСУ  .CDFN  НЕ
   МОГУТ ИСПОЛЬЗОВАТЬСЯ. ТАК КАК  ПО  ЗАПРОСУ  .CHAIN  МОНИТОР
   ВОССТАНАВЛИВАЕТ ПЕРВОНАЧАЛЬНОЕ ЧИСЛО КАНАЛОВ (16  (ДЕСЯТИЧ-
   НОЙ)), ТО ПРОГРАММА, КОТОРАЯ ОСТАВЛЯЕТ ФАЙЛЫ ОТКРЫТЫМИ  ПРИ
   ВЫПОЛНЕНИИ .CHAIN НЕ ДОЛЖНА ИСПОЛЬЗОВАТЬ .CDFN. НЕРЕЗИДЕНТ-
   НЫЕ ДРАЙВЕРЫ УСТРОЙСТВ УДАЛЯЮТСЯ ИЗ ПАМЯТИ  ПРИ  ВЫПОЛНЕНИИ
   .CHAIN, ПОЭТОМУ ОНИ ДОЛЖНЫ БЫТЬ ВНОВЬ ЗАГРУЖЕНЫ НОВОЙ ПРОГ-
   РАММОЙ.
        3) ПО 8-ОМУ РАЗРЯДУ ССЗ  ПРОГРАММА  МОЖЕТ  ОПРЕДЕЛИТЬ,
   КАК ОНА БЫЛА ЗАГРУЖЕНА - ПО ЗАПРОСУ .CHAIN ИЛИ  ПО  КОМАНДЕ
   RUN.   РАЗРЯД   УСТАНАВЛИВАЕТСЯ   ВО    ВРЕМЯ    ВЫПОЛНЕНИЯ
   ПРОГРАММЫ, ЕСЛИ ОНА БЫЛА ЗАГРУЖЕНА С ПОМОЩЬЮ  .CHAIN.  ЕСЛИ
   ПРОГРАММА, ЗАНИМАЮЩАЯ ЯЧЕЙКИ ОТ 500 ДО  777,  ПРЕДНАЗНАЧЕНА
   ДЛЯ ЗАГРУЗКИ ПО ЗАПРОСУ .CHAIN, ТО В НЕЙ ДОЛЖЕН БЫТЬ  УСТА-
   НОВЛЕН 8-ОЙ РАЗРЯД В ССЗ ВО ВРЕМЯ  ЕЕ  ТРАНСЛЯЦИИ.  В  ЭТОМ
   СЛУЧАЕ, ПРОГРАММА БУДЕТ ЗАГРУЖЕНА ПРАВИЛЬНО. ЕСЛИ РАЗРЯД НЕ
   УСТАНОВЛЕН, ЯЧЕЙКИ 500-777, СОДЕРЖИМОЕ КОТОРЫХ  СОХРАНЯЕТСЯ
   ОТ ПРЕДЫДУЩЕЙ ПРОГРАММЫ, МОГУТ ВЫЗВАТЬ НЕПРАВИЛЬНУЮ  РАБОТУ
   НОВОЙ ПРОГРАММЫ.
        4) ДЛЯ ЗАПРОСА .CHAIN ХАРАКТЕРНЫ ТЕ ЖЕ ОШИБКИ,  ЧТО  И
   ДЛЯ КОМАНДЫ RUN.
  ПРИМЕР.
  ; В ЭТОМ ПРИМЕРЕ ПРОГРАММА CHAIN1.SAV ЗАГРУЖАЕТСЯ
  ; ИЗ ПРОГРАММЫ CHAIN.SAV ПОСРЕДСТВОМ ЗАПРОСА .CHAIN
 
          .TITLE  CHAIN.MAC
 
          .MCALL  .CHAIN,.TTYIN,.PRINT
 
  START:  MOV     #500,R1
          MOV     #CHPTR,R2
          .REPT   4
          MOV     (R2)+,(R1)+   ;ИМЯ ФАЙЛА В ЯЧЕЙКИ 500-507
          .ENDR
          .PRINT  #PROMT
  LOOP:   .TTYIN                ;ПЕРЕДАТЬ СИМВОЛЫ С ТТ: В
                                ;ЯЧЕЙКИ 510-777
          MOVB    R0,(R1)+
          CMPB    R0,#12        ;КОНЕЦ СТРОКИ?
          BNE     LOOP          ;НЕТ
          CLRB    @R1
          .CHAIN                ;ЗАПУСК ПРОГРАММЫ CHAIN1
  CHPTR:  .RAD50  /DK/
          .RAD50  /CHAIN1/
          .RAD50  /SAV/
  PROMT:  .ASCII /ВВЕДИТЕ ДАННЫЕ ДЛЯ ПРОГРАММЫ CHAIN1: /<200>
          
          .END    START
 
  ; ПРОГРАММА  CHAIN1
 
          .TITLE  CHAIN1.MAC
 
          .MCALL  .PRINT,.EXIT
 
          JSW = 44
          CHAIN$ = 400
 
  STARTC: BIT     #CHAIN$,@#JSW   ;8 РАЗРЯД УСТАНОВЛЕН?
          BEQ     1$              ;НЕТ
          .PRINT  #CHAIND         ;ДА - ПЕЧАТЬ СООБЩЕНИЯ
          MOV     #510,R0
          .PRINT                  ;ПЕЧАТЬ СОДЕРЖИМОГО ЯЧЕЕК
                                  ;510-777
          .EXIT
  1$:     .PRINT  #NOCHN
          .EXIT
  CHAIND: .ASCII  /СОДЕРЖИМОЕ ЯЧЕЕК 510-777 :  /<200>
  NOCHN:  .ASCIZ  /НЕ УСТАНОВЛЕН 8-ОЙ РАЗРЯД !/
          .END    STARTC
 
        5.3.3. .CMKT
        ЗАПРОС .CMKT АННУЛИРУЕТ ОДИН  ИЛИ  НЕСКОЛЬКО  ЗАПРОСОВ
   .MRKT.
        ФОРМАТ МАКРОКОМАНДЫ:
        .CMKT AREA,ID[,TIME]
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 3-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        ID - ЧИСЛО, ИСПОЛЬЗУЕМОЕ ДЛЯ ИДЕНТИФИКАЦИИ С  ЗАПРОСОМ
   .MRKT, КОТОРЫЙ НЕОБХОДИМО АННУЛИРОВАТЬ; ЕСЛИ НЕСКОЛЬКО ЗАП-
   РОСОВ .MRKT ИМЕЮТ ОДИНАКОВЫЙ ID,  ТО  АННУЛИРУЕТСЯ  ТОТ  ИЗ
   НИХ, КОТОРОМУ СООТВЕТСТВУЕТ НАИМЕНЬШИЙ НЕИСТЕКШИЙ  ИНТЕРВАЛ
   ВРЕМЕНИ; ЕСЛИ ID=0, ТО АННУЛИРУЮТСЯ ВСЕ ЗАПРОСЫ .MRKT;
        TIME - АДРЕС БЛОКА ИЗ  2-Х  СЛОВ,  В  КОТОРЫЕ  МОНИТОР
   ЗАПИСЫВАЕТ ВЕЛИЧИНУ НЕИСПОЛЬЗОВАННОГО ВРЕМЕНИ  В  АННУЛИРО-
   ВАННОМ ЗАПРОСЕ; ПЕРВОЕ СЛОВО СОДЕРЖИТ НИЖНЮЮ ГРАНИЦУ ИНТЕР-
   ВАЛА ВРЕМЕНИ, ВТОРОЕ - ВЕРХНЮЮ ГРАНИЦУ; ЕСЛИ АДРЕС НЕ  УКА-
   ЗАН, ТАКОЙ ЗАПИСИ НЕ ПРОИСХОДИТ, ЕСЛИ ID=0,  АРГУМЕНТ  TIME
   ИГНОРИРУЕТСЯ.
        ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
          AREA:   .BYTE   0,23
                  .WORD   ID

        ПРИМЕЧАНИЕ. АННУЛИРОВАННЫЙ  ЗАПРОС  .MRKT  ОСВОБОЖДАЕТ
   СООТВЕТСТВУЮЩИЙ ЭЛЕМЕНТ ОЧЕРЕДИ.
        ПРИМЕР ИСПОЛЬЗОВАНИЯ  .CMKT  СМ.  В  ОПИСАНИИ  ЗАПРОСА
   .MRKT.
 
        5.3.4. .CNTXSW (РЕЖИМ FB,XM)
        ПРИ ПЕРЕДАЧЕ УПРАВЛЕНИЯ  ОТ  ОДНОГО  ЗАДАНИЯ  ДРУГОМУ,
   МОНИТОР ВЫПОЛНЯЕТ, ТАК  НАЗЫВАЕМУЮ,  ОПЕРАЦИЮ  ПЕРЕКЛЮЧЕНИЯ
   КОНТЕКСТА. ОНА ЗАКЛЮЧАЕТСЯ В СОХРАНЕНИИ СИСТЕМОЙ  НЕОБХОДИ-
   МЫХ ПАРАМЕТРОВ ДЛЯ ОДНОЗНАЧНОГО  ОПРЕДЕЛЕНИЯ  И  ВЫПОЛНЕНИЯ
   ЗАДАНИЯ. ЭТИ ПАРАМЕТРЫ ВКЛЮЧАЮТ ВСЕ РЕГИСТРЫ ОБЩЕГО  НАЗНА-
   ЧЕНИЯ, ЯЧЕЙКИ 34-52, А ТАКЖЕ ВСЕ РЕГИСТРЫ ППЗ, ЕСЛИ  ЗАПРОС
   .SFPA ВЫПОЛНЯЛСЯ С ОТЛИЧНЫМ ОТ  НУЛЯ  АДРЕСОМ  ПОДПРОГРАММЫ
   ОБРАБОТКИ ПРЕРЫВАНИЯ ОТ ППЗ.
        ЗАПРОС  .CNTXSW  ИСПОЛЬЗУЕТСЯ  ДЛЯ  ОПРЕДЕЛЕНИЯ  ЯЧЕЕК
   ПАМЯТИ, КОТОРЫЕ БУДУТ  ДОПОЛНИТЕЛЬНО  ВКЛЮЧЕНЫ  В  ОПЕРАЦИЮ
   ПЕРЕКЛЮЧЕНИЯ КОНТЕКСТА.
        ИНОГДА,  ДЛЯ  ОБОИХ  ЗАДАНИЙ  НЕОБХОДИМО   НЕЗАВИСИМОЕ
   ИСПОЛЬЗОВАНИЕ ОПРЕДЕЛЕННОЙ ЯЧЕЙКИ ПАМЯТИ, КОТОРАЯ НЕ  ВКЛЮ-
   ЧЕНА В ОБЫЧНУЮ ОПЕРАЦИЮ ПЕРЕКЛЮЧЕНИЯ  КОНТЕКСТА.  НАПРИМЕР,
   ЕСЛИ ПРОГРАММА ИСПОЛЬЗУЕТ КОМАНДУ IOT,ТО ОНА ДОЛЖНА УСТАНО-
   ВИТЬ В ВЕКТОРЕ 20 АДРЕС СВОЕЙ ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫ-
   ВАНИЯ ПО ЭТОЙ КОМАНДЕ. А ЕСЛИ  ОБА  ЗАДАНИЯ  -  ОСНОВНОЕ  И
   ФОНОВОЕ - ИСПОЛЬЗУЮТ КОМАНДУ IOT, ТО ВЕКТОР 20 ДОЛЖЕН ВСЕГ-
   ДА СОДЕРЖАТЬ СООТВЕТСТВУЮЩИЙ С ВЫПОЛНЯЕМЫМ ЗАДАНИЕМ  АДРЕС.
   ЭТО ДОСТИГАЕТСЯ ПУТЕМ ВКЛЮЧЕНИЯ ЯЧЕЕК  20  И  22  В  СПИСОК
   АДРЕСОВ ЗАПРОСА .CNTXSW.
        ЕСЛИ ЗАПРОС .CNTXSW УКАЗАН В ПРОГРАММЕ НЕСКОЛЬКО  РАЗ,
   ТО МОНИТОР ИСПОЛЬЗУЕТ СПИСОК АДРЕСОВ ПОСЛЕДНЕГО ИЗ НИХ.
        СПИСОК АДРЕСОВ .CNTXSW НЕ МОЖЕТ БЫТЬ В ОБЛАСТИ СВОПИН-
   ГА USR И ЕГО НЕЛЬЗЯ ИЗМЕНЯТЬ В ПРОЦЕССЕ РАБОТЫ ПРОГРАММЫ.
        В РЕЖИМЕ ХМ, ЗАПРОС .CNTXSW ИГНОРИРУЕТСЯ ДЛЯ ВИРТУАЛЬ-
   НЫХ ЗАДАНИЙ, Т.К. ОНИ НЕ ИСПОЛЬЗУЮТ ПАМЯТЬ СОВМЕСТНО С ДРУ-
   ГИМИ ЗАДАНИЯМИ. ДЛЯ ВИРТУАЛЬНЫХ ЗАДАНИЙ ВЕКТОРЫ IOT,  TRAP,
   BPT И ВЕКТОР 250 АВТОМАТИЧЕСКИ ВКЛЮЧАЮТСЯ  МОНИТОРОМ  XM  В
   ОПЕРАЦИЮ ПЕРЕКЛЮЧЕНИЯ КОНТЕКСТА,  И,  СЛЕДОВАТЕЛЬНО,  МОГУТ
   БЫТЬ ИСПОЛЬЗОВАНЫ ДРУГИМ ЗАДАНИЕМ БЕЗ .CNTXSW.
        ФОРМАТ МАКРОКОМАНДЫ:
        .CNTXSW AREA,ADDR
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 2-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        ADDR - АДРЕС СПИСКА  АДРЕСОВ  (ДОЛЖЕН  БЫТЬ  ОГРАНИЧЕН
   НУЛЕМ); АДРЕСА В СПИСКЕ ДОЛЖНЫ БЫТЬ ЧЕТНЫМИ И В ПРЕДЕЛАХ ОТ
   2 ДО 476 ИЛИ В ОБЛАСТИ ЗАДАНИЯ ПОЛЬЗОВАТЕЛЯ, ИЛИ В ПРЕДЕЛАХ
   ОТ 160000 ИЛИ 177776.
        ФОРМАТ БЛОКА АРГУМЕНТОВ ЕМТ:
          AREA:   .BYTE   0,33
                  .WORD   ADDR
  ПРИМЕР.
          .TITLE  CNTXSW.MAC
  ; В ЭТОМ ПРИМЕРЕ ЗАПРОС .CNTXSW ИСПОЛЬЗУЕТСЯ ДЛЯ
  ; ВКЛЮЧЕНИЯ ЯЧЕЕК 20,22,177302,177304,177310 В
  ; ОПЕРАЦИЮ ПЕРЕКЛЮЧЕНИЯ КОНТЕКСТА.
          .MCALL  .CNTXSW,.PRINT,.EXIT
  START:  .CNTXSW #AREA,#SWLIST
          BCC     1$
          .PRINT  #ADDRER
          .EXIT
  1$:     .PRINT  #CNTOK
          .EXIT
 
  SWLIST: .WORD   20
          .WORD   22
          .WORD   177302
          .WORD   177304
          .WORD   177310
          .WORD   0
 
  AREA:   .BLKW   2
 
  ADDRER: .ASCIZ  /ОШИБКА .CNTXSW /
  CNTOK:  .ASCIZ  /АДРЕСА ВКЛЮЧЕНЫ В ОПЕРАЦИЮ КОНТЕКСТА/
 
          .END    START
 
        5.3.5. .CSIGEN
        ЗАПРОС .CSIGEN ВЫЗЫВАЕТ РАБОТУ ИНТЕРПРЕТАТОРА  КОМАНД-
   НОЙ СТРОКИ (CSI) В ОБЩЕМ РЕЖИМЕ. В  ЭТОМ  РЕЖИМЕ  CSI  ОСУ-
   ЩЕСТВЛЯЕТСЯ СИНТАКСИЧЕСКИЙ АНАЛИЗ КОМАНДНОЙ СТРОКИ И ВЫПОЛ-
   НЯЕТ СЛЕДУЮЩИЕ ФУНКЦИИ:
        1) ЗАГРУЖАЕТ ДРАЙВЕРЫ УКАЗАННЫХ УСТРОЙСТВ;
        2) ВЫПОЛНЯЕТ ЗАПРОСЫ .LOOKUP И/ИЛИ .ENTER ДЛЯ  УКАЗАН-
   НЫХ ФАЙЛОВ;
        3) ЗАПИСЫВАЕТ В СТЕК ИНФОРМАЦИЮ О ПЕРЕКЛЮЧАТЕЛЯХ;
        4) ВЫПОЛНЯЕТ ЗАПРОС .CLOSE НА КАНАЛАХ 0-10 (ВОСЬМЕРИЧ-
   НОЙ).
        ОБЛАСТЬ, КОТОРАЯ ОТВОДИТСЯ  ДЛЯ  ДРАЙВЕРОВ  УСТРОЙСТВ,
   ДОЛЖНА   БЫТЬ  ДОСТАТОЧНОЙ  ДЛЯ  ОДНОВРЕМЕННОГО  РАЗМЕЩЕНИЯ
   ВСЕХ НЕОБХОДИМЫХ ДРАЙВЕРОВ. ЕСЛИ ЭТОЙ ОБЛАСТИ  НЕДОСТАТОЧНО,
   ТО ПРОГРАММА ПОЛЬЗОВАТЕЛЯ МОЖЕТ БЫТЬ РАЗРУШЕНА.
        ПОСЛЕ ВЫПОЛНЕНИЯ ЗАПРОСА .CSIGEN РЕГИСТР R0 БУДЕТ УКА-
   ЗЫВАТЬ НА ПЕРВУЮ СВОБОДНУЮ ЯЧЕЙКУ  ПАМЯТИ  ПОСЛЕ  ДРАЙВЕРОВ
   УСТРОЙСТВ.
        КОГДА УПРАВЛЕНИЕ ВОЗВРАЩАЕТСЯ  ПРОГРАММЕ  ПОЛЬЗОВАТЕЛЯ
   ПОСЛЕ ВЫПОЛНЕНИЯ ЗАПРОСА .CSIGEN, ВСЕ УКАЗАННЫЕ ФАЙЛЫ БУДУТ
   ОТКРЫТЫ ДЛЯ ВВОДА И/ИЛИ ВЫВОДА. ТРИ  ВЫХОДНЫХ  ФАЙЛА  БУДУТ
   ОТКРЫТЫ СООТВЕТСТВЕННО НА 0,1 И 2-ОМ КАНАЛАХ; ШЕСТЬ ВХОДНЫХ
   - БУДУТ СВЯЗАНЫ С КАНАЛАМИ 3-10 (ВОСЬМЕРИЧНОЙ).
        НАПРИМЕР, В КОМАНДНОЙ СТРОКЕ
   *,LP:=F1,F2
   0-ОЙ И 2-ОЙ КАНАЛЫ ОСТАЮТСЯ СВОБОДНЫМИ,  1-Й  КАНАЛ  СВЯЗЫ-
   ВАЕТСЯ С LP:, 3 И 4-Й КАНАЛЫ СВЯЗЫВАЮТСЯ  СООТВЕТСТВЕННО  С
   ФАЙЛАМИ F1 И F2 НА DK:, КАНАЛЫ 5-10 (ВОСЬМЕРИЧНОЙ) ОСТАЮТСЯ
   СВОБОДНЫМИ.
        ПРОГРАММА ПОЛЬЗОВАТЕЛЯ МОЖЕТ ОПРЕДЕЛИТЬ ОТКРЫТ ИЛИ НЕТ
   КАНАЛ ПОСРЕДСТВОМ ЗАПРОСА .WAIT НА СООТВЕТСТВУЮЩЕМ  КАНАЛЕ,
   И ПОЛУЧИТЬ СООБЩЕНИЕ ОБ ОШИБКЕ, ЕСЛИ КАНАЛ НЕ ОТКРЫТ.
        ПЕРЕКЛЮЧАТЕЛИ И ИХ АРГУМЕНТЫ ЗАПИСЫВАЮТСЯ В СТЕК .
        ФОРМАТ МАКРОКОМАНДЫ:
        .CSIGEN DEVSPC,DEFTUP,CSTR[,LINBUF]
   ГДЕ DEVSPC - АДРЕС ОБЛАСТИ ПАМЯТИ ДЛЯ ДРАЙВЕРОВ УСТРОЙСТВ;
        DEFTUP - АДРЕС БЛОКА ИЗ  4-Х  СЛОВ,  КОТОРЫЙ  СОДЕРЖИТ
   ТИПЫ  ФАЙЛОВ  В  КОДАХ  RADIX-50.  СОДЕРЖИМОЕ  ЭТОГО  БЛОКА
   ИСПОЛЬЗУЕТСЯ МОНИТОРОМ, ЕСЛИ В КОМАНДНОЙ СТРОКЕ НЕ  УКАЗАНЫ
   ТИПЫ ФАЙЛОВ;
        CSTR - АДРЕС КОМАНДНОЙ СТРОКИ. ОНА НЕ ДОЛЖНА СОДЕРЖАТЬ
   ВК , ПС , НО ДОЛЖНА ОКАНЧИВАТЬСЯ НУЛЕВЫМ БАЙТОМ. ЕСЛИ  CSTR
   НЕ УКАЗАН ИЛИ 0, ТО ВВОД ОСУЩЕСТВЛЯЕТСЯ  С  ТЕРМИНАЛА;  ПОД
   УПРАВЛЕНИЕМ МОНИТОРА FB(ХМ),  ЕСЛИ  ВВОД  ОСУЩЕСТВЛЯЕТСЯ  С
   СИСТЕМНОГО ТЕРМИНАЛА, БУДЕТ АВТОМАТИЧЕСКИ  ВЫПОЛНЕН  ЗАПРОС
   .UNLOCK ДЛЯ USR;
        LINBUF - АДРЕС, ПО КОТОРОМУ БУДЕТ ЗАПИСАНА КОПИЯ  ВВЕ-
   ДЕННОЙ КОМАНДНОЙ СТРОКИ; ЭТА ОБЛАСТЬ ОПРЕДЕЛЯЕТСЯ ПОЛЬЗОВА-
   ТЕЛЕМ И ИМЕЕТ ДЛИНУ 81 (ДЕСЯТИЧНОЙ) БАЙТ; КОМАНДНАЯ  СТРОКА
   В ЭТОЙ ОБЛАСТИ ОГРАНИЧИВАЕТСЯ НУЛЕВЫМ БАЙТОМ.
        ПРИМЕЧАНИЯ:
        1) БЛОК, АДРЕС КОТОРОГО УКАЗАН В DEFTYP, В 1-ОМ  СЛОВЕ
   СОДЕРЖИТ ТИП ФАЙЛА ДЛЯ ВСЕХ ВХОДНЫХ ФАЙЛОВ, ВО 2, 3 И  4-ОМ
   СЛОВАХ - ТИПЫ ФАЙЛОВ СООТВЕТСТВЕННО ДЛЯ 0,1 И 2-ГО ВЫХОДНЫХ
   ФАЙЛОВ. ЕСЛИ В БЛОКЕ НЕ УКАЗАН ТИП ФАЙЛА ДЛЯ  ОПРЕДЕЛЕННОГО
   КАНАЛА, СООТВЕТСТВУЮЩЕЕ СЛОВО ДОЛЖНО  СОДЕРЖАТЬ  НУЛЬ.  ВСЕ
   ТИПЫ ФАЙЛОВ ДОЛЖНЫ БЫТЬ ЗАПИСАНЫ В КОДАХ RADIX-50.
        2) ЗАПРОС CSIGEN АВТОМАТИЧЕСКИ ВОСПРИНИМАЕТ  КОМАНДНУЮ
   СТРОКУ ИЗ КОСВЕННОГО ФАЙЛА, ЕСЛИ УКАЗАН  ВВОД  С  ТЕРМИНАЛА
   (CSTR=0) И ПРОГРАММА, ИСПОЛЬЗУЮЩАЯ .CSIGEN ВЫЗЫВАЕТСЯ ЧЕРЕЗ
   КОСВЕННЫЙ ФАЙЛ.
        3) АРГУМЕНТ LINBUF ПРЕДОСТАВЛЯЕТ ПОЛЬЗОВАТЕЛЮ  ВОЗМОЖ-
   НОСТЬ  ВОССТАНОВЛЕНИЯ  ПЕРВОНАЧАЛЬНО  ВВЕДЕННОЙ   КОМАНДНОЙ
   СТРОКИ.
        4) ЕСЛИ ОШИБКА ПРОИСХОДИТ ПРИ ВВОДЕ КОМАНДНОЙ СТРОКИ С
   ТЕРМИНАЛА, ТО CSI ПЕЧАТАЕТ СООБЩЕНИЕ ОБ ОШИБКЕ НА  ТЕРМИНА-
   ЛЕ, ЕСЛИ ПРИ ВВОДЕ ИЗ ПАМЯТИ - УСТАНАВЛИВАЕТСЯ  С-РАЗРЯД  И
   КОД ОШИБКИ (52-ОЙ БАЙТ).
  ПРИМЕР.
          .TITLE  CSIGEN.MAC
  ;ПРИМЕР ПРОГРАММЫ С ИСПОЛЬЗОВАНИЕМ ЗАПРОСА .CSIGEN
  ;ВЫПОЛНЯЕТ КОПИРОВАНИЕ УКАЗАННОГО ФАЙЛА
 
          .MCALL .CSIGEN,.READW,.WRITW,.CLOSE,.SRESET,.EXIT
          .MCALL .PRINT
 
          ERRBYT=52
 
  START:  .CSIGEN #DSPACE,#DEXT   ;ВВЕСТИ КОМАНДНУЮ СТРОКУ
          MOV     R0,BUFF         ;УКАЗАТЕЛЬ НА СВОБОДНУЮ
                                  ;ПАМЯТЬ
          CLR     INBLK           ;НОМЕР БЛОКА
          MOV     #AREA,R5
  READ:   .READW  R5,#3,BUFF,#400,INBLK ;ЧИТАТЬ БЛОК
          BCC     2$
          TSTB    @#ERRBYT        ;КОНЕЦ ФАЙЛА?
          BEQ     EOF             ;ДА
          MOV     #INERR,R0
  1$:     .PRINT                  ;ПЕЧАТЬ ССОБЩЕНИЯ
          CLR     R0
          .EXIT
  2$:     .WRITW  R5,#0,BUFF,#400,INBLK ;ЗАПИСАТЬ БЛОК
          BCC     NOERR
          MOV     #WTERR,R0
          BR      1$
  NOERR:  INC     INBLK           ;УВЕЛИЧИТЬ СЧЕТЧИК И
          BR      READ            ;ЧИТАТЬ СЛЕДУЮЩИЙ БЛОК
  EOF:    .CLOSE  #0              ;КОНЕЦ ФАЙЛА - ЗАКРЫТЬ
          .CLOSE  #3              ;ВХОДНОЙ И ВЫХОДНОЙ
                                  ;КАНАЛЫ
          .SRESET                 ;УДАЛИТЬ ДРАЙВЕРЫ ИЗ
                                  ;ПАМЯТИ
          .EXIT
 
  DEXT:   .WORD   0,0,0,0
  BUFF:   .WORD   0
  INBLK:  .WORD   0
  AREA:   .BLKW   5
 
  INERR:  .ASCIZ /ОШИБКА ВВОДА/
  WTERR:  .ASCIZ /ОШИБКА ВЫВОДА/
          .EVEN
 
  DSPACE  =.
 
          .END    START
 
        5.3.6. .CSISPC
        ЗАПРОС .CSISPC ВЫЗЫВАЕТ РАБОТУ CSI В СПЕЦИАЛЬНОМ РЕЖИ-
   МЕ. В ЭТОМ РЕЖИМЕ  ОН  ОСУЩЕСТВЛЯЕТ  СИНТАКСИЧЕСКИЙ  АНАЛИЗ
   КОМАНДНОЙ СТРОКИ И ПЕРЕДАЕТ СПЕЦИФИКАЦИИ ФАЙЛОВ И  ПЕРЕКЛЮ-
   ЧАТЕЛИ, УКАЗАННЫЕ В НЕЙ,  ПРОГРАММЕ  ПОЛЬЗОВАТЕЛЯ.  В  СПЕ-
   ЦИАЛЬНОМ РЕЖИМЕ  CSI  НЕ  ВЫПОЛНЯЕТ  ДЕЙСТВИЙ,  АНАЛОГИЧНЫХ
   ФУНКЦИЯМ ЗАПРОСОВ .FETCH,.CLOSE, .ENTER,.LOOKUP.
        ПЕРЕКЛЮЧАТЕЛИ И ИХ АРГУМЕНТЫ ПЕРЕСЫЛАЮТСЯ В СТЕК.
        ЕСЛИ ПРОГРАММА, ИСПОЛЬЗУЮЩАЯ .CSISPC, ВЫЗЫВАЕТСЯ ЧЕРЕЗ
   КОСВЕННЫЙ ФАЙЛ И CSTR=0, TO .CSISPC АВТОМАТИЧЕСКИ  ВЫБИРАЕТ
   ВХОДНУЮ СТРОКУ ИЗ КОСВЕННОГО ФАЙЛА.
        ФОРМАТ МАКРОКОМАНДЫ:
        .CSISPC OUTSPC,DEFTUP[,CSTR[],LINBUF]
   ГДЕ OUTSPC - АДРЕС БЛОКА ИЗ 39 СЛОВ ДЛЯ СПЕЦИФИКАЦИЙ ФАЙЛОВ
   КОМАНДНОЙ СТРОКИ;
        DEFTYP - АДРЕС БЛОКА ИЗ  4-Х  СЛОВ,  КОТОРЫЙ  СОДЕРЖИТ
   ТИПЫ  ФАЙЛОВ  В  КОДАХ  RADIX-50.  СОДЕРЖИМОЕ  ЭТОГО  БЛОКА
   ИСПОЛЬЗУЕТСЯ МОНИТОРОМ, ЕСЛИ В КОМАНДНОЙ СТРОКЕ НЕ  УКАЗАНЫ
   ТИПЫ ФАЙЛОВ;
        CSTR - АДРЕС КОМАНДНОЙ СТРОКИ. ОНА НЕ ДОЛЖНА СОДЕРЖАТЬ
   ВК,ПС , НО ДОЛЖНА ОКАНЧИВАТЬСЯ НУЛЕВЫМ БАЙТОМ. ЕСЛИ CSTR НЕ
   УКАЗАН ИЛИ 0, ТО ВВОД ОСУЩЕСТВЛЯТСЯ С ТЕРМИНАЛА;
        LINBUF - АДРЕС, ПО КОТОРОМУ БУДЕТ ЗАПИСАНА КОПИЯ  ВВЕ-
   ДЕННОЙ КОМАНДНОЙ СТРОКИ; ЭТА ОБЛАСТЬ ОПРЕДЕЛЯЕТСЯ ПОЛЬЗОВА-
   ТЕЛЕМ И ИМЕЕТ ДЛИНУ 81 БАЙТ; КОМАНДНАЯ СТРОКА В ЭТОЙ ОБЛАС-
   ТИ ОГРАНИЧИВАЕТСЯ НУЛЕВЫМ БАЙТОМ.
        БЛОК, АДРЕС КОТОРОГО УКАЗАН В OUTSPC, СОДЕРЖИТ  СПЕЦИ-
   ФИКАЦИЮ ДЛЯ 9 ФАЙЛОВ: ПО 5 СЛОВ ДЛЯ КАЖДОГО ИЗ 3-Х ВЫХОДНЫХ
   ФАЙЛОВ И ПО 4 СЛОВА ДЛЯ КАЖДОГО  ИЗ  6-ТИ  ВХОДНЫХ  ФАЙЛОВ.
   ПЯТЬ СЛОВ ДЛЯ ВЫХОДНОГО ФАЙЛА ИМЕЮТ  СЛЕДУЮЩЕЕ  СОДЕРЖИМОЕ:
   1-ОЕ СЛОВО - ИМЯ УСТРОЙСТВА; 2 И 3 СЛОВА - ИМЯ ФАЙЛА;  4-ОЕ
   СЛВО - ТИП ФАЙЛА; 5-Е СЛОВО - ДЛИНА ВЫХОДНОГО  ФАЙЛА.  ЕСЛИ
   КАКОЙ-ТО ФАЙЛ ОТСУТСТВУЕТ, ТО СООТВЕТСТВУЮЩИЕ  СЛОВА  БЛОКА
   СОДЕРЖАТ НУЛИ.
        НАПРИМЕР,
   *DX1:LIST.MAC[15]=PC:
        ПОСЛЕ ВЫПОЛНЕНИЯ .CSISPC  ПЕРВЫЕ  5  СЛОВ  ДЛЯ  БЛОКА,
   АДРЕС КОТОРОГО УКАЗАН В OUTSPC, БУДУТ ИМЕТЬ СЛЕДУЮЩЕЕ  ЗНА-
   ЧЕНИЯ:
   16337  RADIX-50 ДЛЯ DX1
   46173  RADIX-50 ДЛЯ LIS
   76400  RADIX-50 ДЛЯ T
   50553  RADIX-50 ДЛЯ MAC
   00017  ДЛИНА ФАЙЛА
 
        ПЕРВЫЕ 4 СЛОВА ДЛЯ СПЕЦИФИКАЦИЙ ВХОДНЫХ ФАЙЛОВ  (НАЧИ-
   НАЯ С АДРЕСА OUTSPC+36) БУДУТ ВЫГЛЯДЕТЬ ТАК:
   62170  RADIX-50 ДЛЯ PC
    0     ИМЯ ФАЙЛА НЕ УКАЗАНО
    0
    0
        ЕСЛИ ПРИ ВВОДЕ С ТЕРМИНАЛА ПРОИЗОШЛА  ОШИБКА,  USR  НЕ
   ПЕЧАТАЕТ НА ТЕРМИНАЛЕ СООБЩЕНИЕ ОБ ОШИБКЕ, А  УСТАНАВЛИВАЕТ
   С-РАЗРЯД В ССП.
  ПРИМЕР.
 
          .TITLE  CSISPC.MAC
 
  ;В ЭТОМ ПРИМЕРЕ ИСПОЛЬЗУЕТСЯ СПЕЦИАЛЬНЫЙ РЕЖИМ
  ;РАБОТЫ ИНТЕРПРЕТАТОРА КОМАНДНОЙ СТРОКИ.
  ;ЗАПРОС .DSTATUS ОПРЕДЕЛЯЕТ ЗАГРУЖЕН ЛИ ДРАЙВЕР
  ;ВЫХОДНОГО УСТРОЙСТВА И, ЕСЛИ НЕТ, ТО ИСПОЛЬЗУЕТСЯ
  ;ЗАПРОС .FETCH ДЛЯ ЗАГРУЗКИ ДРАЙВЕРА В ПАМЯТЬ.
  ;ЗАТЕМ УКАЗАНЫЙ ФАЙЛ УДАЛЯЕТСЯ ПО ЗАПРОСУ .DELETE.
 
          .MCALL  .CSISPC,.DSTATUS,.FETCH,.PRINT,.EXIT,.DELETE
 
  START:  MOV     SP,R5   ;СОХРАНИТЬ ТЕКУЩИЙ УКАЗАТЕЛЬ СТЕКА
          .CSISPC #OUTSP,#DEFEXT ;ВВОД КОМАНДНОЙ СТРОКИ
          MOV     R5,SP   ;ВОССТАНОВИТЬ УКАЗАТЕЛЬ СТЕКА
          .DSTAT  #STAT,#OUTSP   ;ПРОВЕРИТЬ НАЛИЧИЕ ДРАЙВЕРА
                                 ;ВЫХОДНОГО УСТРОЙСТВА
          TST     STAT+4         ;ДРАЙВЕР ЗАГРУЖЕН?
          BNE     2$             ;ДА
          .FETCH  #DEVLOD,#INSPEC;НЕТ-ЗАГРУЗИТЬ ДРАЙВЕР
          BCC     2$
          .PRINT  #FEFAIL
          .EXIT
  2$:     .DELETE #AREA,#0,#INSPEC;УДАЛИТЬ ФАЙЛ
          BCC     3$
          .PRINT  #NOFILE
          BR      START
  3$:     .PRINT  #FILDEL
          .EXIT
 
  AREA:   .BLKW   2
  STAT:   .BLKW   4
  DEFEXT: .WORD   0,0,0,0
  FEFAIL: .ASCIZ  /ОШИБКА .FETCH/
  NOFILE: .ASCIZ  /ФАЙЛ НЕ НАЙДЕН/
  FILDEL: .ASCIZ  /ФАЙЛ УДАЛЕН/
          .EVEN
  OUTSP:  .BLKW   5*3     ;СПЕЦИФИКАЦИИ ВЫХ.ФАЙЛОВ
  INSPEC: .BLKW   4*6     ;СПЕЦИФИКАЦИИ ВХ.ФАЙЛОВ
  DEVLOD: .BLKW   1       ;АДРЕС ЗАГРУЗКИ ДРАЙВЕРА
          .END    START
 
      5.3.6.1. ПЕРЕДАЧА  ИНФОРМАЦИИ  О  ПЕРЕКЛЮЧАТЕЛЯХ
               ПРОГРАММЕ ПОЛЬЗОВАТЕЛЯ.
        В ОБЩЕМ И СПЕЦИАЛЬНОМ РЕЖИМАХ РАБОТЫ CSI ПЕРЕКЛЮЧАТЕЛИ
   И ИХ АРГУМЕНТЫ ПЕРЕСЫЛАЮТСЯ В СТЕК. ПЕРЕКЛЮЧАТЕЛЬ ПРЕДСТАВ-
   ЛЯЕТ СОБОЙ НАКЛОННУЮ ЧЕРТУ  (/),  ЗА  КОТОРОЙ  СЛЕДУЕТ  ИМЯ
   ПЕРЕКЛЮЧАТЕЛЯ (СИМВОЛ КОИ-7). ЗА ПЕРЕКЛЮЧАТЕЛЕМ МОЖЕТ  СЛЕ-
   ДОВАТЬ АРГУМЕНТ, ПЕРЕД КОТОРЫМ  СТАВИТСЯ  РАЗДЕЛИТЕЛЬ  (:).
   АРГУМЕНТ МОЖЕТ  БЫТЬ  ВОСЬМЕРИЧНЫМ  ИЛИ  ДЕСЯТИЧНЫМ  ЧИСЛОМ
   (ЧИСЛОМ С ТОЧКОЙ),  ИЛИ  КОМБИНАЦИЕЙ  БУКВЕННО  -  ЦИФРОВЫХ
   СИМВОЛОВ (ОТ ОДНОГО ДО ТРЕХ), ПЕРВЫЙ ИЗ КОТОРЫХ -  БУКВА. В
   КОМАНДНОЙ СТРОКЕ ПЕРЕКЛЮЧАТЕЛИ МОГУТ БЫТЬ СВЯЗАНЫ С  ФАЙЛА-
   МИ.
   НАПРИМЕР: *DK:FOO/A,DX1:FILE.OBJ/A:100
        В ЭТОМ СЛУЧАЕ ИМЕЕТСЯ ДВА ПЕРЕКЛЮЧАТЕЛЯ А,  ПЕРВЫЙ  ИЗ
   КОТОРЫХ СВЯЗАН С ВХОДНЫМ ФАЙЛОМ FOO, ВТОРОЙ СВЯЗАН С  ВХОД-
   НЫМ ФАЙЛОМ FILE:OBJ И ИМЕЕТ АРГУМЕНТ 100 (ВОСЬМЕРИЧНЫЙ).
        В ТАБЛ. 10 ПРИВОДИТСЯ ФОРМАТ СОДЕРЖИМОГО  СТЕКА  ПОСЛЕ
   ВЫПОЛНЕНИЯ ЗАПРОСА .CSIGEN  ИЛИ  .CSISPC.  УКАЗАТЕЛЬ  СТЕКА
   БУДЕТ СОДЕРЖАТЬ АДРЕС ПЕРВОГО СЛОВА.
 
                                                   ТАБЛИЦА 10
    -----------------------------------------------------------
    ! СЛОВО !      СОДЕРЖИМОЕ      !         ЗНАЧЕНИЕ         !
    !---------------------------------------------------------!
    !   1   !          N           ! ЧИСЛО ПЕРЕКЛЮЧАТЕЛЕЙ В   !
    !       !                      ! КОМАНДНОЙ СТРОКЕ         !
    !   2   ! ИМЯ ПЕРЕКЛЮЧАТЕЛЯ И  ! ЧЕТНЫЙ БАЙТ СОДЕРЖИТ ИМЯ !
    !       ! НОМЕР ФАЙЛА          ! ПЕРЕКЛЮЧАТЕЛЯ. РАЗРЯДЫ   !
    !       !                      ! 8-14 СОДЕРЖАТ НОМЕР      !
    !       !                      ! (ОТ 0 ДО 10) ФАЙЛА, С КО-!
    !       !                      ! ТОРЫМ СВЯЗАН ДАННЫЙ ПЕРЕ-!
    !       !                      ! КЛЮЧАТЕЛЬ. РАЗРЯД 15 СО- !
    !       !                      ! ДЕРЖИТ 1, ЕСЛИ ПЕРЕКЛЮЧА-!
    !       !                      ! ТЕЛЬ ИМЕЕТ АРГУМЕНТ      !
    !   3   ! АРГУМЕНТ ПЕРЕКЛЮЧА-  ! ЕСЛИ УСТАНОВЛЕН 15-Й РАЗ-!
    !       ! ТЕЛЯ ИЛИ ИМЯ СЛЕДУ-  ! РЯД В СЛОВЕ 2, ТО СЛОВО 3!
    !       ! ЮЩЕГО ПЕРЕКЛЮЧАТЕЛЯ  ! СОДЕРЖИТ АРГУМЕНТ ПЕРЕ-  !
    !       !                      ! КЛЮЧАТЕЛЯ. В ПРОТИВНОМ   !
    !       !                      ! СЛУЧАЕ - ИМЯ СЛЕДУЮЩЕГО  !
    !       !                      ! ПЕРЕКЛЮЧАТЕЛЯ            !
    -----------------------------------------------------------
 
        НАПРИМЕР, ПОСЛЕ ОБРАБОТКИ CSI КОМАНДНОЙ СТРОКИ
        *FILE/B:20.,FIL2/E=DX1:INPUT/X:SY:20
   СТЕК БУДЕТ СОДЕРЖАТЬ ЗНАЧЕНИЯ, ОПИСАННЫЕ В ТАБЛ. 11.
 
                                                   ТАБЛИЦА 11
    -----------------------------------------------------------
    ! СОДЕРЖИМОЕ  !                  ЗНАЧЕНИЕ                 !
    !---------------------------------------------------------!
    !     4       ! ЧИСЛО ПЕРЕКЛЮЧАТЕЛЕЙ (ПЕРЕКЛЮЧАТЕЛЬ X     !
    !             ! ИМЕЕТ ДВА АРГУМЕНТА И РАССМАТРИВАЕТСЯ КАК !
    !             ! ДВА ПЕРЕКЛЮЧАТЕЛЯ)                        !
    !  101530     ! ПОСЛЕДНИЙ ПЕРЕКЛЮЧАТЕЛЬ (X) СВЯЗАН С 3-ИМ !
    !             ! ФАЙЛОМ  И ИМЕЕТ АРГУМЕНТ                  !
    !    20       ! АРГУМЕНТ ПЕРЕКЛЮЧАТЕЛЯ  X                 !
    !  101530     ! СЛЕДУЮЩИЙ ПЕРЕКЛЮЧАТЕЛЬ (X) СВЯЗАН С 3-ИМ !
    !             ! ФАЙЛОМ  И ИМЕЕТ АРГУМЕНТ                  !
    !  75250      ! АРГУМЕНТ ПЕРЕКЛЮЧАТЕЛЯ  X-SY В КОДАХ      !
    !             ! RADIX-50                                  !
    !    505      ! СЛЕДУЮЩИЙ ПЕРЕКЛЮЧАТЕЛЬ (Е) СВЯЗАН С 1-М  !
    !             ! ФАЙЛОМ  И НЕ ИМЕЕТ АРГУМЕНТА              !
    !  100102     ! ПЕРЕКЛЮЧАТЕЛЬ (В) СВЯЗАН С 0-М  ФАЙЛОМ И  !
    !             ! ИМЕЕТ АРГУМЕНТ                            !
    !    24       ! АРГУМЕНТ ПЕРЕКЛЮЧАТЕЛЯ  В                 !
    -----------------------------------------------------------
 
        ПРИМЕЧАНИЯ:
 
        1) ВО МНОГИХ СЛУЧАЯХ, ПРОГРАММЕ ПОЛЬЗОВАТЕЛЯ  НЕ  ТРЕ-
   БУЕТСЯ ОБРАБОТКА ПЕРЕКЛЮЧАТЕЛЕЙ  ПОСРЕДСТВОМ  CSI.  ОДНАКО,
   ВОЗМОЖЕН НЕПРЕДНАМЕРЕННЫЙ ВВОД  ПЕРЕКЛЮЧАТЕЛЕЙ  ПОЛЬЗОВАТЕ-
   ЛЕМ. В ЭТОМ СЛУЧАЕ, РЕКОМЕНДУЕТСЯ СОХРАНИТЬ ЗНАЧЕНИЕ УКАЗА-
   ТЕЛЯ СТЕКА ПЕРЕД ВЫЗОВОМ CSI,  А  ЗАТЕМ  ВОССТАНОВИТЬ  ЕГО.
   ЗАМЕТИМ, ЧТО КОМАНДНАЯ СТРОКА БЕЗ ПЕРЕКЛЮЧАТЕЛЕЙ ПЕРЕМЕЩАЕТ
   УКАЗАТЕЛЬ СТЕКА НА ОДНО СЛОВО.
 
        5.3.7. .ABTIO
        ЗАПРОС .ABTIO ПОЗВОЛЯЕТ ТЕКУЩЕМУ ЗАДАНИЮ ЗАПРЕТИТЬ ВСЕ
   ОПЕРАЦИИ ВВОДА - ВЫВОДА НА УКАЗАННОМ  КАНАЛЕ,  НЕ  ПРЕРЫВАЯ
   ВЫПОЛНЕНИЯ ПРОГРАММЫ.
        ЗАПРЕЩАЕТСЯ ИСПОЛЬЗОВАТЬ .ABTIO В ПОДПРОГРАММАХ ЗАВЕР-
   ШЕНИЯ.
        ФОРМАТ МАКРОКОМАНДЫ: .ABTIO CHAN
   ГДЕ CHAN - НОМЕР КАНАЛА.
 
        5.3.8. .CSTAT (РЕЖИМ FB,XM)
        ЗАПРОС .CSTAT ПЕРЕДАЕТ ПРОГРАММЕ ПОЛЬЗОВАТЕЛЯ ИНФОРМА-
   ЦИЮ О СОСТОЯНИИ КАНАЛА.
        ФОРМАТ МАКРОКОМАНДЫ:
        .CSTAT AREA,CHAN,ADDR
   ГДЕ AREA - АДРЕС БЛОКА ИЗ ДВУХ СЛОВ АРГУМЕНТОВ ЕМТ;
        CHAN - НОМЕР КАНАЛА, ИНФОРМАЦИЮ  О  КОТОРОМ  ТРЕБУЕТСЯ
   ПОЛУЧИТЬ;
        ADDR - АДРЕС БЛОКА ИЗ 6-ТИ СЛОВ ДЛЯ ИНФОРМАЦИИ О  СОС-
   ТОЯНИИ КАНАЛА.
        ФОРМАТ БЛОКА АРГУМЕНТОВ:
          AREA:   .BYTE   CHAN,27
                  .WORD   ADDR
  ПРИМЕР.
 
          .TITLE  CSTAT.MAC
  ;В ЭТОМ ПРИМЕРЕ ЗАПРОС .CSTAT ИСПОЛЬЗУЕТСЯ ДЛЯ ОПРЕДЕЛЕНИЯ
  ;УСТРОЙСТВА, СВЯЗАНОГО С УКАЗАННЫМ КАНАЛОМ.
 
          .MCALL  .CSTAT,.CSIGEN,.PRINT,.EXIT
 
  START:  MOV     SP,R5
          .CSIGEN #DEVSDC,#DEFEXT ;ВВОД КОМАНДНОЙ СТРОКИ
          MOV     R5,SP
          .CSTAT  #AREA,#0,#ADDR  ;ПОЛУЧИТЬ ИНФОРМАЦИЮ О
                                  ;КАНАЛЕ
          BCS     NOCHAN          ;КАНАЛ НЕ ОТКРЫТ
          MOV     #ADDR+10,R5
          MOV     (R5)+,R0
          ADD     (PC)+,R0
          .RAD50  /  0/
          ADD     (R5),R0         ;ПОЛУЧИТЬ ИМЯ УСТРОЙСТВА
          MOV     R0,DEVNAM
          .EXIT
 
  NOCHAN: .PRINT  #MSG
          .EXIT
 
  MSG:    .ASCIZ  /НЕТ ВЫХОДНОГО ФАЙЛА - КАНАЛ НЕ ОТКРЫТ/
          .EVEN
  AREA:   .BLKW   5
  ADDR:   .BLKW   6
  DEVNAM: .WORD   0               ;ИМЯ УСТРОЙСТВА
  DEFEXT: .WORD   0,0,0,0
 
  DEVSDC  =.                      ;АДРЕС ЗАГРУЗКИ ДРАЙВЕРА
 
          .END    START
 
 
        5.3.9. .DATE
        ЗАПРОС .DATE ПЕРЕДАЕТ ИНФОРМАЦИЮ  О  ТЕКУЩЕЙ  ДАТЕ  ИЗ
   СИСТЕМНОЙ ЯЧЕЙКИ ДАТЫ В РЕГИСТР R0. ЯЧЕЙКА ДАТЫ ИМЕЕТ  СЛЕ-
   ДУЮЩИЙ ФОРМАТ:
        РАЗРЯДЫ 13-10 - МЕСЯЦ;
        РАЗРЯДЫ 9-5 - ДЕНЬ;
        РАЗРЯДЫ 4-0 - ГОД.
        ЗНАЧЕНИЕ ГОДА В РАЗРЯДАХ С 0 ПО 4 ЯВЛЯЕТСЯ ФАКТИЧЕСКИМ
   ГОДОМ МИНУС 1972.
        ФОРМАТ МАКРОКОМАНДЫ:
        .DATE
        НУЛЕВОЕ ЗНАЧЕНИЕ В R0 УКАЗЫВАЕТ НА ТО,  ЧТО  ПОЛЬЗОВА-
   ТЕЛЬ ДАТУ НЕ ОПРЕДЕЛИЛ.
  ПРИМЕР.
          .TITLE DATE.MAC
  ;ПРИМЕР ПОДПРОГРАММЫ ОБРАБОТКИ ДАТЫ (ВВЕДЕНОЙ ПО КОМАНДЕ
  ;DATE) С ИСПОЛЬЗОВАНИЕМ ЗАПРОСА .DATE, К КОТОРОЙ МОЖНО
  ;ОБРАТИТЬСЯ ИЗ ПРОГРАММЫ ПОЛЬЗОВАТЕЛЯ.
  ;
  ;ВЫХ.ДАННЫЕ:    R0 = МЕСЯЦ (1-12)
  ;               R1 = ДЕНЬ  (1-31)
  ;               R2 = ГОД   (ДВЕ ПОСЛЕДНИЕ ЦИФРЫ)
  ;
  ;ОШИБКИ:        R0 = 0, ЕСЛИ ДАТА НЕ ВВЕДЕНА
  ;
 
          .MCALL  .DATE
 
  DATE::  .DATE           ;ПОЛУЧИТЬ ДАТУ ИЗ R0
          MOV     R0,R2
          BEQ     1$      ;ВЕТВЛЕНИЕ, ЕСЛИ ДАТА НЕ
                          ;ВВЕДЕНА
          BIC     #37,R2;ВЫБРАТЬ ГОД
          ADD     #72,R2
          MOV     R0,R1
          ASL     R1      ;ВЫБРАТЬ ДЕНЬ
          ASL     R1
          ASL     R1
          SWAB    R1
          BIC     #37,R1;ВЫБРАТЬ МЕСЯЦ
          SWAB    R0
          ASR     R0
          ASR     R0
          BIC     #37,R0
  1$:     RETURN          ;ВЫХОД ИЗ ПОДПРОГРАММЫ
          .END
 
 
       5.3.10. .DEVICE(РЕЖИМ FB,XM)
        ЗАПРОС .DEVICE ПОЗВОЛЯЕТ ЗАПИСАТЬ ОПРЕДЕЛЕННЫЕ  ЗНАЧЕ-
   НИЯ ПО УКАЗАННЫМ АДРЕСАМ  ПОСЛЕ  ВЫХОДА  ИЗ  ПРОГРАММЫ  (ПО
   .EXIT ИЛИ СУ/С). ЭТА ФУНКЦИЯ В  ОСНОВНОМ  ИСПОЛЬЗУЕТСЯ  ДЛЯ
   ЗАПИСИ В РЕГИСТРЫ УСТРОЙСТВ НЕОБХОДИМЫХ ЗНАЧЕНИЙ.
        В ПРОГРАММЕ МОЖЕТ БЫТЬ НЕСКОЛЬКО  ЗАПРОСОВ  .DEVICE  И
   ПОЛЬЗОВАТЕЛЬ МОЖЕТ СВЯЗАТЬ ВСЕ ТАБЛИЦЫ АДРЕСОВ В ОДНУ  ТАБ-
   ЛИЦУ.
        ЗАПРОС .DEVICE ИГНОРИРУЕТСЯ, ЕСЛИ ОН ВЫДАЕТСЯ ИЗ  ВИР-
   ТУАЛЬНОГО ЗАДАНИЯ В РЕЖИМЕ ХМ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .DEVICE AREA,ADDR[,LINK]
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 2-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        ADDR - АДРЕС ТАБЛИЦЫ АДРЕСОВ И ЗНАЧЕНИЙ;
        LINK - ПРОИЗВОЛЬНЫЙ АРГУМЕНТ, КОТОРЫЙ  ПОЗВОЛЯЕТ  СВЯ-
   ЗАТЬ ТАБЛИЦЫ АДРЕСОВ И ЗНАЧЕНИЙ  ПОСЛЕДОВАТЕЛЬНЫХ  ЗАПРОСОВ
   .DEVICE. ЕСЛИ АРГУМЕНТ LINK  ОПУЩЕН,  ТО  УЖЕ  СУЩЕСТВУЮЩАЯ
   ТАБЛИЦА ЗАМЕНЯЕТСЯ НОВОЙ ПРИ ОБНАРУЖЕНИИ ОЧЕРЕДНОГО ЗАПРОСА
   .DEVICE.
        ТАБЛИЦА АДРЕСОВ И ЗНАЧЕНИЙ МОЖЕТ ИМЕТЬ ДВА  ФОРМАТА  -
   СВЯЗАННЫЙ И НЕ СВЯЗАННЫЙ. ОБА ФОРМАТА  ДОЛЖНЫ  ОКАНЧИВАТЬСЯ
   НУЛЕМ. СВЯЗАННЫЙ ФОРМАТ ДОЛЖЕН ИМЕТЬ В ПЕРВОМ  СЛОВЕ  ТАКЖЕ
   НОЛЬ. НА РИС.5 ПОКАЗАНЫ РАЗЛИЧНЫЕ ФОРМАТЫ ТАБЛИЦЫ АДРЕСОВ И
   ЗНАЧЕНИЙ.
 
           НЕ СВЯЗАННЫЙ                     СВЯЗАННЫЙ
          -------------                   -------------
  ADDR:   !   АДРЕС   !         ADDR:     !     0     !
          -------------                   -------------
          ! ЗНАЧЕНИЕ  !                   !   АДРЕС   !
          -------------                   -------------
          !   АДРЕС   !                   ! ЗНАЧЕНИЕ  !
          -------------                   -------------
          ! ЗНАЧЕНИЕ  !                   !   АДРЕС   !
          -------------                   -------------
                .                         ! ЗНАЧЕНИЕ  !
                .                         -------------
                .                               .
          -------------                         .
          !  АДРЕС    !                         .
          -------------                   -------------
          ! ЗНАЧЕНИЕ  !                   !   АДРЕС   !
          -------------                   -------------
          !     0     !                   ! ЗНАЧЕНИЕ  !
          -------------                   -------------
                                          !     0     !
                                          -------------
 
                              РИС.5
 
 
       5.3.11. .DSTATUS
        ЗАПРОС .DSTATUS ИСПОЛЬЗУЕТСЯ ДЛЯ ПОЛУЧЕНИЯ  ИНФОРМАЦИИ
   ОБ ОПРЕДЕЛЕННОМ УСТРОЙСТВЕ.
        ФОРМАТ МАКРОКОМАНДЫ:
 
        .DSTATUS DSTBLK,DEVNAM
   ГДЕ DSTBLK - АДРЕС БЛОКА ИЗ 4-Х СЛОВ СОСТОЯНИЯ УСТРОЙСТВА;
        DEVNAM - АДРЕС ИМЕНИ УСТРОЙСТВА В КОДАХ RADIX-50. ПЕР-
   ВЫМ СЛОВОМ БЛОКА СОСТОЯНИЯ ЯВЛЯЕТСЯ  СЛОВО  СОСТОЯНИЯ  УСТ-
   РОЙСТВА. ВОЗМОЖНЫЕ ЗНАЧЕНИЯ РАЗРЯДОВ СЛОВА  СОСТОЯНИЯ  УСТ-
   РОЙСТВА ПРИВЕДЕНЫ В ТАБЛ.12.
                                                   ТАБЛИЦА 12
    -----------------------------------------------------------
    ! РАЗРЯД ! СОДЕРЖИМОЕ !            ЗНАЧЕНИЕ               !
    !---------------------------------------------------------!
    ! 0-7    !     0      ! КАССЕТА МАГНИТНЫХ ДИСКОВ          !
    !        !     2      ! ЛОГИЧЕСКОЕ УСТРОЙСТВО РЕГИСТРАЦИИ !
    !        !            ! ОШИБОК                            !
    !        !     3      ! ПОСТРОЧНО-ПЕЧАТАЮЩЕЕ УСТРОЙСТВО   !
    !        !     4      ! СИСТЕМНЫЙ ТЕРМИНАЛ ИЛИ ДРАЙВЕР    !
    !        !            ! BATCH                             !
    !        !     6      ! ГИБКИЕ ДИСКИ С ДВОЙНОЙ ПЛОТНОСТЬЮ !
    !        !     7      ! ПЕРФОЛЕНТОЧНОЕ УСТРОЙСТВО ВВОДА И !
    !        !            ! ВЫВОДА                            !
    !        !    11      ! НАКОПИТЕЛЬ НА МАГНИТНОЙ ЛЕНТЕ     !
    !        !    21      ! ПАКЕТ МАГНИТНЫХ ДИСКОВ DP         !
    !        !            ! (29 МГБАЙТ)                       !
    !        !    22      ! ГИБКИЕ ДИСКИ                      !
    !        !    25      ! ФИКТИВНОЕ УСТРОЙСТВО              !
    !        !    34      ! КАССЕТНАЯ МАГНИТНАЯ ЛЕНТА         !
    !        !    41      ! УСТРОЙСТВО ПЕЧАТИ ПОСЛЕДОВАТЕЛЬНО-!
    !        !            ! ГО ТИПА                           !
    !        !    42      ! ДРАЙВЕР ОБМЕНА МЕЖДУ ЗАДАНИЯМИ    !
    !        !    46      ! ДРАЙВЕР ЛОГИЧЕСКОГО ДИСКА         !
    !        !    47      ! ДРАЙВЕР РАСШИРЕННОЙ ПАМЯТИ        !
    !        !    50      ! ДИСКИ ВИНЧЕСТЕРСКОГО ТИПА ИЛИ     !
    !        !            ! ГИБКИЕ МИНИ-ДИСКИ                 !
    !        !    51      ! РЕДАКТОР КОМАНДНОЙ СТРОКИ         !
    !  10    !    1       ! ДРАЙВЕР УСТРОЙСТВА ДОПУСКАЕТ      !
    !        !            ! ИСПОЛЬЗОВАНИЕ ЗАПРОСА .SPFUN      !
    !        !    0       ! НЕ ДОПУСКАЕТСЯ ИСПОЛЬЗОВАНИЕ      !
    !        !            ! ЗАПРОСА .SPFUN                    !
    !  11    !    -       ! РЕЗЕРВНЫЙ                         !
    !  12    !    1       ! УСТРОЙСТВО НЕСПРАВОЧНОЙ СТРУКТУРЫ !
    !  13    !    1       ! УСТРОЙСТВО ТОЛЬКО ДЛЯ ЗАПИСИ      !
    !  14    !    1       ! УСТРОЙСТВО ТОЛЬКО ДЛЯ ЧТЕНИЯ      !
    !  15    !    1       ! УСТРОЙСТВО С ПРОИЗВОЛЬНЫМ ДОСТУПОМ!
    !        !            ! К ДАННЫМ                          !
    !        !    0       ! УСТРОЙСТВО С ПОСЛЕДОВАТЕЛЬНЫМ     !
    !        !            ! ДОСТУПОМ К ДАННЫМ                 !
    -----------------------------------------------------------
 
        ВТОРОЕ СЛОВО ПРЕДСТАВЛЯЕТ СОБОЙ  ДЛИНУ  ДРАЙВЕРА  УСТ-
   РОЙСТВА В БАЙТАХ.
        ТРЕТЬЕ СЛОВО ПРЕДСТАВЛЯЕТ СОБОЙ АДРЕС ЗАГРУЗКИ ДРАЙВЕ-
   РА ПЛЮС 6. ЕСЛИ 0 - ДРАЙВЕРА В ПАМЯТИ НЕТ.
        ЧЕТВЕРТОЕ СЛОВО ПРЕДСТАВЛЯЕТ СОБОЙ ЕМКОСТЬ  УСТРОЙСТВА
   (В БЛОКАХ) ДЛЯ УСТРОЙСТВ С ПРОИЗВОЛЬНЫМ ДОСТУПОМ  К  ДАННЫМ
   ИЛИ 0 ДЛЯ УСТРОЙСТВ С ПОСЛЕДОВАТЕЛЬНЫМ ДОСТУПОМ К ДАННЫМ.
        ИМЯ УСТРОЙСТВА В DEVNAM МОЖЕТ БЫТЬ ЛОГИЧЕСКИМ  ИМЕНЕМ,
   ПРИСВОЕННЫМ ПОЛЬЗОВАТЕЛЕМ.
        ПРИМЕР ИСПОЛЬЗОВАНИЯ .DSTATUS СМ. В  ОПИСАНИИ  ЗАПРОСА
   .CSISPC.
 
       5.3.12. .EXIT
        ЗАПРОС .EXIT ВЫЗЫВАЕТ ОКОНЧАНИЕ  ВЫПОЛНЕНИЯ  ПРОГРАММЫ
   ПОЛЬЗОВАТЕЛЯ И ПЕРЕДАЕТ УПРАВЛЕНИЕ KMON.
        ПЕРЕД ВЫХОДОМ ИЗ ПРОГРАММЫ ВЫПОЛНЕНИЕ  ВСЕХ  ИНИЦИИРО-
   ВАННЫХ ОПЕРАЦИЙ ВВОДА-ВЫВОДА И /ИЛИ ПОДПРОГРАММ  ЗАВЕРШЕНИЯ
   БУДЕТ ЗАКОНЧЕНО. ВСЕ НЕВЫПОЛНЕННЫЕ ЗАПРОСЫ  .MRKT  И  .CMKT
   БУДУТ АННУЛИРОВАНЫ.
        ЕСЛИ ЧАСТЬ ФОНОВОЙ ПРОГРАММЫ ЗАНИМАЕТ  ОБЛАСТЬ  ПАМЯТИ
   KMON И USR, ТО ОНА БУДЕТ ЗАПИСАНА В  БЛОКИ  ДЛЯ  ВРЕМЕННОГО
   ХРАНЕНИЯ ДАННЫХ НА СИСТЕМНОЕ УСТРОЙСТВО  (ЕСЛИ  РАНЕЕ  БЫЛА
   ВЫПОЛНЕНА КОМАНДА SET EXIT SWAP). ПОСЛЕ ЭТОГО  KMON  И  USR
   ЗАГРУЖАЮТСЯ В ПАМЯТЬ И УПРАВЛЕНИЕ ПЕРЕДАЕТСЯ  КЛАВИАТУРНОМУ
   МОНИТОРУ. ЕСЛИ БЫЛА ВЫПОЛНЕНА КОМАНДА SET EXIT  NOSWAP,  ТО
   ПРОГРАММА ПОЛЬЗОВАТЕЛЯ ПРОСТО ПЕРЕЗАПИСЫВАЕТСЯ.
        ЕСЛИ R0 = 0 ВО ВРЕМЯ ВЫПОЛНЕНИЯ .EXIT, ТО  ВЫПОЛНЯЕТСЯ
   ОПЕРАЦИЯ  АНАЛОГИЧНАЯ  .HRESET,   ЗАПРЕЩАЮЩАЯ   ПОСЛЕДУЮЩЕЕ
   ВЫПОЛНЕНИЕ КОМАНД REENTER, START ИЛИ CLOSE.
        ЗАПРОС .EXIT ПОЗВОЛЯЕТ ПРОГРАММЕ ПЕРЕДАТЬ КОМАНДЫ КЛА-
   ВИАТУРНОМУ МОНИТОРУ, ИСПОЛЬЗУЯ ЯЧЕЙКИ 500-777, ДЛЯ ИХ  ПОС-
   ЛЕДУЮЩЕГО ВЫПОЛНЕНИЯ. ДЛЯ ЭТОГО НЕОБХОДИМО:
        1) ЯЧЕЙКА 510 ДОЛЖНА СОДЕРЖАТЬ ОБЩЕЕ КОЛИЧЕСТВО БАЙТОВ
   В КОМАНДЕ, КОТОРАЯ БУДЕТ ПЕРЕДАНА KMON;
        2) КОМАНДЫ ЗАПИСЫВАЮТСЯ, НАЧИНАЯ С ЯЧЕЙКИ 512;  СТРОКА
   ДОЛЖНА БЫТЬ ЗАПИСАНА В СИМВОЛАХ КОИ-7 И НЕ ДОЛЖНА СОДЕРЖАТЬ
   ВК ИЛИ ПС ; НАПРИМЕР:
      .=510
      .WORD B-A
  A:  .ASCIZ /COPY A.MAC W.MAC/
      .ASCIZ /DELETE A.MAC/
  B=  .
        3) ПРОГРАММА ПОЛЬЗОВАТЕЛЯ ДОЛЖНА УСТАНОВИТЬ 5  ИЛИ  11
   РАЗРЯД В ССЗ ПЕРЕД ВЫПОЛНЕНИЕМ .EXIT; СОДЕРЖИМОЕ R0  ДОЛЖНО
   БЫТЬ НУЛЕВЫМ.
        КОГДА ЗАПРОС .EXIT ИСПОЛЬЗУЕТСЯ  ДЛЯ  ПЕРЕДАЧИ  КОМАНД
   НЕОБХОДИМО УЧИТЫВАТЬ СЛЕДУЮЩЕЕ:
        1) ЕСЛИ ЭТО СВОЙСТВО ИСПОЛЬЗУЕТСЯ ПРОГРАММОЙ,  КОТОРАЯ
   ВЫЗЫВАЕТСЯ С ПОМОЩЬЮ КОСВЕННОГО ФАЙЛА, ТО ВСЕ КОМАНДЫ  СЛЕ-
   ДУЮЩИЕ В КОСВЕННОМ ФАЙЛЕ  ЗА  КОМАНДОЙ,  ИНИЦИИРУЮЩЕЙ  ПУСК
   ЭТОЙ ПРОГРАММЫ, ВЫПОЛНЯТЬСЯ НЕ БУДУТ;
        2) КОСВЕННЫЙ ФАЙЛ МОЖЕТ  БЫТЬ  ВЫЗВАН,  ИСПОЛЬЗУЯ  ЭТО
   СВОЙСТВО, ТОЛЬКО В ТОМ СЛУЧАЕ ЕСЛИ ПЕРЕДАВАЕМАЯ KMON СТРОКА
   СОДЕРЖИТ ЕДИНСТВЕННУЮ СПЕЦИФИКАЦИЮ ФАЙЛА; ПОПЫТКА  ПЕРЕДАЧИ
   НЕСКОЛЬКИХ КОСВЕННЫХ ФАЙЛОВ ИЛИ КОМБИНАЦИЙ КОСВЕННЫХ ФАЙЛОВ
   С ДРУГИМИ КОМАНДАМИ KMON ПРИВОДИТ К НЕПРАВИЛЬНЫМ  РЕЗУЛЬТА-
   ТАМ;
        3) .EXIT В ПОДПРОГРАММЕ ЗАВЕРШЕНИЯ  НЕДОПУСТИМ.  ЗАМЕ-
   ТИМ, ЧТО ЗАПРОС .EXIT ИЗМЕНЯЕТ ТЕКУЩЕЕ ПОЛОЖЕНИЕ  УКАЗАТЕЛЯ
   СТЕКА.
        ФОРМАТ МАКРОКОМАНДЫ: .EXIT
  ПРИМЕР.
          .TITLE  EXIT.MAC
  ;В ЭТОМ ПРИМЕРЕ, ПОСЛЕ ЗАВЕРШЕНИЯ ПРОГРАММЫ,
  ;КЛАВИАТУРНОМУ МОНИТОРУ ПЕРЕДЕТСЯ КОМАНДНАЯ
  ;СТРОКА НА ПЕЧАТЬ СПРАВОЧНИКА УСТРОЙСТВА DK:
          .MCALL  .EXIT
  CHNIF$  = 4000
  JSW     = 44
 
  START:  MOV     #510,R0
          MOV     #CMDSTR,R1
          MOV     #START,SP
 
  1$:     MOVB    (R1)+,(R0)+
          CMP     R1,#CMDEND
          BLO     1$
          BIS     #CHNIF$,@#JSW ;УСТАНОВИТЬ 11-ЫЙ РАЗРЯД
                                ;В JSW
          CLR     R0            ;В R0 ДОЛЖЕН БЫТЬ 0
          .EXIT
 
  CMDSTR: .WORD   CMDEND-CMDSTR ;ДЛИНА КОМАНДНОЙ СТРОКИ
          .ASCIZ  "DIRECT/FULL *.MAC" ;КОМАНДНАЯ СТРОКА
  CMDEND:
          .EVEN
          .END    START
 
       5.3.13. .FETCH,.RELEAS
        ЗАПРОС .FETCH ЗАГРУЖАЕТ ДРАЙВЕР УСТРОЙСТВА ИЗ  СИСТЕМ-
   НОГО УСТРОЙСТВА В ОПЕРАТИВНУЮ ПАМЯТЬ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .FETCH ADDR,DEVNAM
   ГДЕ ADDR - АДРЕС ЗАГРУЗКИ ДРАЙВЕРА;
        DEVNAM - АДРЕС ИМЕНИ УСТРОЙСТВА В КОДАХ RADIX-50.
        ПОСЛЕ ВЫПОЛНЕНИЯ .FETCH,  R0  СОДЕРЖИТ  АДРЕС  ПЕРВОЙ,
   РАСПОЛОЖЕННОЙ ВЫШЕ  ДРАЙВЕРА,  ЯЧЕЙКИ  ОПЕРАТИВНОЙ  ПАМЯТИ.
   ЕСЛИ ДРАЙВЕР УЖЕ ЗАГРУЖЕН  В  ПАМЯТЬ,  R0  БУДЕТ  СОДЕРЖАТЬ
   АДРЕС ЗАГРУЗКИ ADDR.
        ДЛЯ ВЫПОЛНЕНИЯ ЗАПРОСОВ
           .CLOSE   .READC   .READ    .SFDAT
           .LOOKUP  .WRITE   .WRITC   .FPROT
           .ENTER   .READW   .SPFUN
           .RENAME  .WRITW   .DELETE
   НЕОБХОДИМО НАЛИЧИЕ В ПАМЯТИ ДРАЙВЕРОВ СООТВЕТСТВУЮЩИХ  УСТ-
   РОЙСТВ.
        В РЕЖИМЕ FB, ДРАЙВЕРЫ ДЛЯ ОСНОВНОЙ ПРОГРАММЫ ИЛИ  СИС-
   ТЕМНОГО ЗАДАНИЯ ДОЛЖНЫ ЗАГРУЖАТЬСЯ ПО КОМАНДЕ LOAD ПЕРЕД ИХ
   ВЫПОЛНЕНИЕМ.
        В РЕЖИМЕ ХМ, ДРАЙВЕРЫ УСТРОЙСТВ ДОЛЖНЫ  ЗАГРУЖАТЬСЯ  В
   ЛЮБУЮ ОБЛАСТЬ ПАМЯТИ (ФОНОВУЮ ИЛИ ОСНОВНУЮ) ПО КОМАНДЕ LOAD
   ПЕРЕД ЗАГРУЗКОЙ ПРОГРАММ.
        ПРИМЕР ИСПОЛЬЗОВАНИЯ .FETCH  СМ.  В  ОПИСАНИИ  ЗАПРОСА
   .CSISPC.
        ЗАПРОС .RELEAS УДАЛЯЕТ ДРАЙВЕР  УКАЗАННОГО  УСТРОЙСТВА
   ИЗ ПАМЯТИ. ЗАПРОС .RELEAS ИГНОРИРУЕТСЯ, ЕСЛИ ДРАЙВЕР:
        1) ЯВЛЯЕТСЯ ЧАСТЬЮ RMON (Т.Е. ЯВЛЯЕТСЯ ДРАЙВЕРОМ  СИС-
   ТЕМНОГО УСТРОЙСТВА);
        2) ОТСУТСТВУЕТ В ПАМЯТИ;
        3) БЫЛ ЗАГРУЖЕН ПО КОМАНДЕ LOAD.
        ЗАПРОС .RELEAS В ОСНОВНОЙ ПРОГРАММЕ  ИЛИ  В  СИСТЕМНОМ
   ЗАДАНИИ ПОД УПРАВЛЕНИЕМ МОНИТОРА FB(ХМ) ВСЕГДА  ИГНОРИРУЕТ-
   СЯ, Т.К. МОНИТОРЫ FB ИЛИ ХМ МОГУТ  ИСПОЛЬЗОВАТЬ  ТОЛЬКО  ТЕ
   ДРАЙВЕРЫ, КОТОРЫЕ БЫЛИ ЗАГРУЖЕНЫ ПО КОМАНДЕ LOAD.
        ФОРМАТ МАКРОКОМАНДЫ:
        .RELEAS DEVNAM
   ГДЕ DEVNAM - АДРЕС ИМЕНИ УСТРОЙСТВА В КОДАХ RADIX-50.
  ПРИМЕР.
          .TITLE  RELEAS.MAC
  ;В ЭТОМ ПРИМЕРЕ ДРАЙВЕР РС: ЗАГРУЖАЕТСЯ В ПАМЯТЬ,
  ;А ЗАТЕМ ПО ЗАПРОСУ .RELEAS УДАЛЯЕТСЯ ИЗ ПАМЯТИ.
 
          .MCALL  .FETCH,.RELEAS,.EXIT,.PRINT
 
  START:  .FETCH  #DSPACE,#DEVNAM ;ЗАГРУЗИТЬ ДРАЙВЕР
          BCS     FERR
          .RELEAS #DEVNAM         ;УДАЛИТЬ ДРАЙВЕР
          BR      START
 
  FERR:   .PRINT  #NODEV
          .EXIT
  DEVNAM: .RAD50  /PC /
  NODEV:  .ASCIZ  " УСТРОЙСТВО ОТСУТСТВУЕТ !"
          .EVEN
  DSPACE:
 
          .END    START
 
       5.3.14. .FORK
        ЗАПРОС .FORK ИСПОЛЬЗУЕТСЯ В ДРАЙВЕРАХ ДЛЯ  СИНХРОНИЗА-
   ЦИИ РАБОТЫ СИСТЕМЫ.  ЗАПРОСУ  .FORK  ДОЛЖЕН  ПРЕДШЕСТВОВАТЬ
   ЗАПРОС .INTEN, .FORK ТРЕБУЕТ  ДЛЯ  СВОЕГО  ВЫПОЛНЕНИЯ  БЛОК
   ПАМЯТИ ИЗ 4-Х СЛОВ. СОДЕРЖИМОЕ  РЕГИСТРОВ  R4  И  R5  ПОСЛЕ
   ВЫПОЛНЕНИЯ ЗАПРОСА СОХРАНЯЕТСЯ. .FORK  ИСПОЛЬЗУЕТСЯ  В  ТОМ
   СЛУЧАЕ, КОГДА ДОЛЖЕН БЫТЬ  УПОРЯДОЧЕН  ДОСТУП  К  СИСТЕМНЫМ
   РЕСУРСАМ ИЛИ ДОЛЖНА БЫТЬ ВЫПОЛНЕНА НЕ КРИТИЧЕСКАЯ ПО ВРЕМЕ-
   НИ, НО БОЛЬШАЯ ПО РАЗМЕРУ, ЧАСТЬ ПРОГРАММЫ. ПОСЛЕ ОБРАБОТКИ
   МОНИТОРОМ ЗАПРОСА .FORK ПРЕРЫВАНИЕ ОТ УСТРОЙСТВА БУДЕТ ЗАП-
   РЕЩЕНО И ДРАЙВЕР БУДЕТ РАБОТАТЬ НА НУЛЕВОМ ПРИОРИТЕТЕ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .FORK FKBLK
   ГДЕ FKBLK - АДРЕС БЛОКА ИЗ 4-Х СЛОВ (ДОЛЖЕН БЫТЬ В ДРАЙВЕРЕ
   УСТРОЙСТВА).
 
       5.3.15. .FPROT
        С ПОМОЩЬЮ ЗАПРОСА .FPROT УСТАНАВЛИВАЕТСЯ ИЛИ ОТМЕНЯЕТ-
   СЯ ЗАЩИТА ФАЙЛА (ОТ УДАЛЕНИЯ).
        НА ЗАЩИЩЕНЫЙ ФАЙЛ НЕ РАСПОСТРАНЯЕТСЯ ДЕЙСТВИЯ ЗАПРОСОВ
   .CLOSE, .DELETE, .ENTER И .RENAME. ОДНАКО ДАННЫЕ, ХРАНЯЩИЕ-
   СЯ  В  ЗАЩИЩЕНОМ  ФАЙЛЕ,  МОЖНО  МОДИФИЦИРОВАТЬ.  НАПРИМЕР,
   ИСПОЛЬЗОВАНИЕ ЗАПРОСА  .LOOKUP  ДЛЯ  ЗАЩИЩЕННОГО  ФАЙЛА  ЗА
   КОТОРЫМ СЛЕДУЕТ .WRITE, ИСПОЛЬЗУЮЩИЙ ТОТ ЖЕ  КАНАЛ,  ДОПУС-
   КАЕТСЯ.
        ЗАЩИТА ФАЙЛА ОТ УДАЛЕНИЯ РЕАЛИЗУЕТСЯ УСТАНОВКОЙ  15-ГО
   РАЗРЯДА В СЛОВЕ СОСТОЯНИЯ СПРАВОЧНИКА УСТРОЙСТВА  ДЛЯ  УКА-
   ЗАННОГО ФАЙЛА.
        ФОРМАТ МАКРОКОМАНДЫ:
        .FPROT AREA,CCHAN,DBLK,PROT
   ГДЕ AREA - АДРЕС БЛОКА (ИЗ 4-Х СЛОВ) АРГУМЕНТОВ ЕМТ;
        CHAN - НОМЕР КАНАЛА ( ОТ 0 ДО 376);
        DBLK - АДРЕС БЛОКА (ИЗ 4-Х СЛОВ), СОДДЕРЖАЩЕГО  СПЕЦИ-
   ФИКАЦИЮ ФАЙЛА В КОДАХ RADIX-50;
        PROT - КОНСТАНТА, РАВНАЯ  1  (ЗАЩИТА  УСТАНАВЛИВАЕТСЯ)
   ИЛИ 0 (ЗАЩИТА ОТМЕНЯЕТСЯ).
        ФОРМАТ БЛОКА АРГУМЕНТОВ:
          AREA:   .BYTE   CHAN,43
                  .WORD   DBLK    
                  .WORD   PROT
  ПРИМЕР.
          .TITLE FPROT.MAC
  ;В ПРИМЕРЕ ИСПОЛЬЗУЮТСЯ ЗАПРОСЫ .FPROT И .SFDAT
  ;ДЛЯ УСТАНОВКИ ЗАЩИТЫ УКАЗАННОГО ФАЙЛА И
  ;ИЗМЕНЕНИЯ ДАТЫ СОЗДАНИЯ ФАЙЛА НА ТЕКУЩУЮ ДАТУ.
  ;КОМАНДНАЯ СТРОКА ВВОДИТСЯ С ТЕРМИНАЛА.
 
          .MCALL .FPROT,.FETCH,.CSISPC,.DSTATUS,.SFDAT
          .MCALL .PRINT,.EXIT
 
  START:  .CSISPC #OUTSP,#DEFEXT  ;ВВОД КОМАНДНОЙ СТРОКИ
          .DSTAT  #STAT,#INSPEC   ;ПРОВЕРИТЬ НАЛИЧИЕ
                                  ;УСТРОЙСТВА
          TST     STAT+4          ;ДРАЙВЕР ЗАГРУЖЕН?
          BNE     1$              ;ДА
          .FETCH  #DRVLOD,#INSPEC ;НЕТ-ЗАГРУЗИТЬ ДРАЙВЕР
          BCC     1$
          .PRINT  #LOFAIL
          BR      START
  1$:     .FPROT  #EMTBLK,#0,#INSPEC,#1;УСТАНОВИТЬ ЗАЩИТУ
                                       ;ФАЙЛА     
          BCC     2$
          .PRINT  #PRFAIL
          BR      START
  2$:     .SFDAT  #EMTBLK,#0,#INSPEC,#0;ИЗМЕНИТЬ ДАТУ НА
                                       ;ТЕКУЩУЮ   
          BCC     3$
          .PRINT  #SDFAIL
          BR      START
  3$:     .EXIT
 
  EMTBLK: .BLKW   4
  DEFEXT: .WORD   0,0,0,0
  STAT:   .BLKW   4               ;БЛОК СОСТОЯНИЯ УСТРОЙСТВА  
  LOFAIL: .ASCIZ  /ОШИБКА ЗАПРОСА .FETCH/
  PRFAIL: .ASCIZ  /ОШИБКА ЗАПРОСА .FPROT/
  SDFAIL: .ASCIZ  /ОШИБКА ЗАПРОСА .SFDAT/
          .EVEN
  OUTSP:  .BLKW   5*3
  INSPEC: .BLKW   4*6
  DRVLOD: .BLKW   1
          .END    START
 
 
       5.3.16. .GTIM
        ЗАПРОС .GTIM ПОЗВОЛЯЕТ  ПРОГРАММЕ  ОПРЕДЕЛИТЬ  ТЕКУЩЕЕ
   ВРЕМЯ СУТОК.  ВЕЛИЧИНА  ВРЕМЕНИ  ОПРЕДЕЛЯЕТСЯ  В  ТИКАХ  (1
   ТИК=1/50 С).
        ФОРМАТ МАКРОКОМАНДЫ:
        .GTIM AREA,ADDR
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 2-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        ADDR - АДРЕС БЛОКА ИЗ 2-Х СЛОВ,  СОДЕРЖАЩЕГО  ЗНАЧЕНИЕ
   ВРЕМЕНИ ВО ВНУТРЕННЕМ ФОРМАТЕ; ПЕРВОЕ СЛОВО СОДЕРЖИТ  СТАР-
   ШИЕ РАЗРЯДЫ, ВТОРОЕ СЛОВО - МЛАДШИЕ.
        ФОРМАТ БЛОКА АРГУМЕНТОВ:
          AREA:   .BYTE   0,21
                  .WORD   ADDR
        ПОЛЬЗОВАТЕЛЬ ДОЛЖЕН ПРЕДУСМОТРЕТЬ  В  СВОЕЙ  ПРОГРАММЕ
   ОПЕРАЦИЮ  ПРЕОБРАЗОВАНИЯ  ТИКОВ  В  ЧАСЫ-МИНУТЫ-СЕКУНДЫ.  В
   РЕЖИМЕ FB ВЕЛИЧИНА ВРЕМЕНИ АВТОМАТИЧЕСКИ  ВОССТАНАВЛИВАЕТСЯ
   ПОСЛЕ 24:00:, В РЕЖИМЕ SJ  ОПЕРАЦИЯ  ВОССТАНОВЛЕНИЯ  ВЫПОЛ-
   НЯЕТСЯ, ЕСЛИ ПРИ ГЕНЕРАЦИИ СИСТЕМЫ БЫЛА ОПРЕДЕЛЕНА ПОДДЕРЖ-
   КА ТАЙМЕРА.
  ПРИМЕР.
 
          .TITLE  .GTIM.MAC
 
  ;В ЭТОМ ПРИМЕРЕ ПОЛЬЗОВАТЕЛЬ ПОЛУЧАЕТ ТЕКУЩЕЕ ВРЕМЯ
  ;В ТИКАХ.
 
          .MCALL  .GTIM,.EXIT
 
  START:  .GTIM   #AREA,#TICKS    ;ОПРЕДЕЛИТЬ ТЕКУЩЕЕ
                                  ;ВРЕМЯ
          .EXIT
 
  TICKS:  .WORD   0,0
  AREA:   .BLKW   2
          
          .END START
 
       5.3.17. .GTJB
        ЗАПРОС  .GTJB  ПОЗВОЛЯЕТ  ПРОГРАММЕ  ОПРЕДЕЛИТЬ  НОМЕР
   ВЫПОЛНЯЕМОГО ЗАДАНИЯ, НИЖНЮЮ ГРАНИЦУ ПАМЯТИ И ДРУГИЕ  ПАРА-
   МЕТРЫ ЗАДАНИЯ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .GTJB AREA,ADDR[,JOBBLK]
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 2-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        ADDR - АДРЕС БЛОКА ИЗ 8-МИ ИЛИ 12-ТИ СЛОВ ДЛЯ ПАРАМЕТ-
   РОВ ЗАДАНИЯ (СМ. ТАБЛ.13);
        JOBBLK - АДРЕС БЛОКА ИЗ 3-Х СЛОВ, СОДЕРЖАЩЕГО ЛОГИЧЕС-
   КОЕ ИМЯ ЗАДАНИЯ В КОДАХ КОИ-7.
        ФОРМАТ БЛОКА АРГУМЕНТОВ:
          AREA:   .BYTE   0,20
                  .WORD   ADDR
                  .WORD   JOBBLK
 
                                                   ТАБЛИЦА 13
    -----------------------------------------------------------
    !   СЛОВО     !             СОДЕРЖИМОЕ                    !
    !---------------------------------------------------------!
    !     1       ! НОМЕР ЗАДАНИЯ; В РЕЖИМАХ FB,XM БЕЗ ПОД-   !
    !             ! ДЕРЖКИ СИСТЕМНЫХ ЗАДАНИЙ: ФОНОВОЕ - 0,    !
    !             ! ОСНОВНОЕ - 2;                             !
    !             ! В РЕЖИМАЬ FB,ХМ С ПОДДЕРЖКОЙ СИСТЕМНЫХ ЗА-!
    !             ! ДАНИЙ: ФОНОВОЕ - 0, СИСТЕМНЫЕ - 2,4,6,10, !
    !             ! 12,14, ОСНОВНОЕ - 16                      !
    !     2       ! ВЕРХНЯЯ ГРАНИЦА ОБЛАСТИ ЗАДАНИЯ           !
    !     3       ! НИЖНЯЯ ГРАНИЦА ОБЛАСТИ ЗАДАНИЯ            !
    !     4       ! НАЧАЛО ОБЛАСТИ КАНАЛОВ ВВОДА-ВЫВОДА       !
    !     5       ! АДРЕС СМЕШАННОЙ ОБЛАСТИ ЗАДАНИЙ ДЛЯ       !
    !             ! МОНИТОРОВ FB И XM                         !
    !     6       ! МЛАДШИЙ БАЙТ - НОМЕР СИСТЕМНОГО ТЕРМИНАЛА !
    !             ! ДЛЯ СИСТЕМ С МУЛЬТИТЕРМИНАЛЬНОЙ ПОДДЕРЖКОЙ!
    !     7       ! В РЕЖИМЕ ХМ - ВЕРХНИЙ ВИРТУАЛЬНЫЙ АДРЕС   !
    !             ! ДЛЯ ВИРТУАЛЬНОГО ЗАДАНИЯ.                 !
    !   10-12     ! В РЕЖИМАХ FB,ХМ С ПОДДЕРЖКОЙ СИСТЕМНЫХ    !
    !             ! ЗАДАНИЙ - ЛОГИЧЕСКОЕ ИМЯ ЗАДАНИЯ В КОДАХ  !
    !             ! КОИ-7                                     !
    -----------------------------------------------------------
 
        ПРИМЕЧАНИЕ.  ИНФОРМАЦИЮ  НЕОБХОДИМУЮ  ДЛЯ   УПРАВЛЕНИЯ
   ВЫПОЛНЕНИЕМ ОСНОВНОГО ЗАДАНИЯ, МОНИТОР ХРАНИТ В, ТАК  НАЗЫ-
   ВАЕМОЙ, СМЕШАННОЙ ОБЛАСТИ, КОТОРАЯ СОЗДАЕТСЯ ВО ВРЕМЯ  ЗАГ-
   РУЗКИ ОСНОВНОЙ ПРОГРАММЫ В МЛАДШИХ АДРЕСАХ ОСНОВНОЙ ОБЛАСТИ
   ПАМЯТИ.
        СЛОВО 4 СОДЕРЖИТ АДРЕС, С КОТОРОГО НАЧИНАЕТСЯ  ОБЛАСТЬ
   КАНАЛОВ ВВОДА-ВЫВОДА. ОБЫЧНО ЭТОТ АДРЕС НАХОДИТСЯ В  ПРЕДЕ-
   ЛАХ RMON. ОДНАКО, ПОСЛЕ ВЫПОЛНЕНИЯ .CDFN,  ОБЛАСТЬ  КАНАЛОВ
   ВВОДА-ВЫВОДА ЗАМЕНЯЕТСЯ НА ОБЛАСТЬ,  АДРЕС  КОТОРОЙ  УКАЗЫ-
   ВАЕТСЯ ПОЛЬЗОВАТЕЛЕМ.
  ПРИМЕР.
          .TITLE  GTJB.MAC
  ;В ДАННОМ ПРИМЕРЕ С ПОМОЩЬЮ ЗАПРОСА .GTJB ОПРЕДЕЛЯЕТСЯ
  ;ЗАГРУЖЕНО ЛИ ОСНОВНОЕ ЗАДАНИЕ.
  ;ПРОГРАММА МОЖЕТ ВЫПОЛНЯТЬСЯ КАК ПОД УПРАВЛЕНИЕМ МОНИТОРА
  ;FB, ИМЕЮЩЕГО ПОДДЕРЖКУ СИСТЕМНЫХ ЗАДАНИЙ, ТАК И ПОД
  ;УПРАВЛЕНИЕМ МОНИТОРА FB, КОТОРЫЙ НЕ ИМЕЕТ ПОДДЕРЖКИ
  ;СИСТЕМНЫХ ЗАДАНИЙ.
 
          .MCALL  .GVAL,.GTJB,.PRINT,.EXIT
 
          SYSGEN = 372            ;СЛОВО ПАРАМЕТРОВ ГЕНЕРАЦИИ
          SYSJOB = 40000          ;РАЗРЯД СИСТЕМНОГО ЗАДАНИЯ
 
  START:  MOV     #2,     R1
          .GVAL   #LIST,  #SYSGEN ;ПОЛУЧИТЬ В R0 СОДЕРЖИМОЕ
                                  ;ЯЧЕЙКИ МОНИТОРА
          BIT     #SYSJOB,R0      ;ЕСТЬ ПОДДЕРЖКА СИСТЕМНОГО
                                  ;ЗАДАНИЯ
          BEQ     1$
          MOV     #16,    R1      ;НОМЕР ОСНОВНОГО ЗАДАНИЯ=16
 
  1$:     .GTJB   #LIST,#JOBARG,R1;ПОЛУЧИТЬ ПАРАМЕТРЫ
          BCS     2$
          .PRINT  #FGLOAD
          .EXIT
  2$:     .PRINT  #NOFG
          .EXIT
 
  LIST:   .BLKW   3
  JOBARG: .BLKW   12.             ;БЛОК ПАРАМЕТРОВ ЗАДАНИЯ
  FGLOAD: .ASCIZ  / ПРОГРАММА В ОСНОВНОЙ ОБЛАСТИ ПАМЯТИ/
  NOFG:   .ASCIZ  /НЕТ ПРОГРАММЫ В ОСНОВНОЙ ОБЛАСТИ/
          .EVEN
          .END    START
 
       5.3.18. .GTLIN
        ЗАПРОС .GTLIN ИСПОЛЬЗУЕТСЯ ДЛЯ ПОЛУЧЕНИЯ ОТ  ПОЛЬЗОВА-
   ТЕЛЯ КОМАНДНОЙ ИНФОРМАЦИИ, ОТЛИЧНОЙ ОТ КОМАНДНЫХ СТРОК  CSI
   И ПОЗВОЛЯЕТ ПРОГРАММЕ РАБОТАТЬ С КОСВЕННЫМИ ФАЙЛАМИ.
        ЗАПРОС .GTLIN ТРЕБУЕТ НАЛИЧИЯ USR В ПАМЯТИ И ПРИНИМАЕТ
   ВХОДНУЮ СТРОКУ С СИСТЕМНОГО ТЕРМИНАЛА,  ИЛИ  ИЗ  КОСВЕННОГО
   ФАЙЛА, В ЗАВИСИМОСТИ ОТ ТОГО БЫЛА ЛИ  ВЫЗВАНА  ПРОГРАММА  С
   ТЕРМИНАЛА ИЛИ КОМАНДОЙ ИЗ КОСВЕННОГО ФАЙЛА.
        ЗАПРОС .GTLIN ИГНОРИРУЕТ АРГУМЕНТ PSTR, ЕСЛИ ВВОД ОСУ-
   ЩЕСТВЛЯЕТСЯ ИЗ КОСВЕННОГО ФАЙЛА И, ЕСЛИ РАНЕЕ БЫЛА ВЫПОЛНЕ-
   НА КОМАНДА SET TT QUIET. ОДНАКО, ЕСЛИ ВВОД ОСУЩЕСТВЛЯЕТСЯ С
   ТЕРМИНАЛА ИЛИ ИЗ КОСВЕННОГО ФАЙЛА, И РАНЕЕ НЕ БЫЛА ВЫПОЛНЕ-
   НА КОМАНДА SET TT QUIET, ЗАПРОС .GTLIN  БУДЕТ  ИСПОЛЬЗОВАТЬ
   АРГУМЕНТ PSTR ДЛЯ ПЕЧАТИ ПОБУЖДАЮЩЕЙ СТРОКИ СИМВОЛОВ  ПЕРЕД
   ВЫБОРКОЙ ВХОДНОЙ СТРОКИ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .GTLIN SPTR[,PSTR][,TYPE]
   ГДЕ SPTR - АДРЕС БУФЕРА ДЛЯ ЗАПИСИ  ВХОДНОЙ  СТРОКИ;  ДЛИНА
   СТРОКИ НЕ ДОЛЖНА ПРЕВЫШАТЬ 81 БАЙТ; СТРОКА БУДЕТ ОГРАНИЧЕНА
   НУЛЕВЫМ БАЙТОМ ВМЕСТО ВК ПС ;
        PSTR - АДРЕС ПОБУЖДАЮЩЕЙ СТРОКИ, КОТОРАЯ  БУДЕТ  ПЕЧА-
   ТАТЬСЯ НА ТЕРМИНАЛЕ; PSTR ИМЕЕТ ТОТ ЖЕ ФОРМАТ, ЧТО И  АРГУ-
   МЕНТ ЗАПРОСА .PRINT.
        TYPE - НЕОБЯЗАТЕЛЬНЫЙ  АРГУМЕНТ, ПОЗВОЛЯЮЩИЙ  ОСУЩЕСТ-
   ВИТЬ ВВОД С ТЕРМИНАЛА ПРИ ВЫПОЛНЕНИИ КОСВЕННОГО ФАЙЛА.
        ПРИМЕЧАНИЕ.  ЕДИНСТВЕННЫМИ  ЗАПРОСАМИ,  КОТОРЫЕ  МОГУТ
   ОСУЩЕСТВЛЯТЬ ВВОД ИЗ  КОСВЕННОГО  ФАЙЛА,  ЯВЛЯЮТСЯ  ЗАПРОСЫ
   .CSIGEN, .CSISPC И .GTLIN.
  ПРИМЕР.
          .TITLE  GTLIN.MAC
  ;В ЭТОМ ПРИМЕРЕ ПЕЧАТАЕТСЯ СТРОКА, ВВЕДЕНАЯ С
  ;ТЕРМИНАЛА.
 
          .MCALL  .GTLIN,.PRINT,.EXIT
 
  START:  .GTLIN  #BUFF,#PROMT
          TSTB    BUFF
          BEQ     1$
          .PRINT  #BUFF
          CLRB    BUFF
          BR      START
  1$:     .EXIT
  BUFF:   .BLKW   41.
  PROMT:  .ASCII  /ВВЕДИТЕ СТРОКУ -  /<200>
          .END    START
 
       5.3.19. .GVAL,.PVAL
        ЗАПРОС .GVAL ПЕРЕДАЕТ В R0 СОДЕРЖИМОЕ УКАЗАНОЙ  ЕР.
          .TITLE  GTLIN.MAC
  ;В ЭТОМ ПРИМЕРЕ ПЕЧАТАЕТСЯ СТРОКА, ВВЕДЕНАЯ С
  ;ТЕРМИНАЛА.
          .MCALL  .GTLIN,.PRINT,.EXIT
  START:  .GTLIN  #BUFF,#PROMT
          TSTB    BUFF
          BEQ     1$
          .PRINT  #BUFF
          CLRB    BUFF
          BR      START
  1$:     .EXIT
  BUFF:   .BLKW   41.
  PROMT:  .ASCII  /ВВЕДИТЕ СТРОКУ -  /<200>
          .END    START
 
       5.3.19. .GVAL,.PVAL
        ЗАПРОС .GVAL ПЕРЕДАЕТ В R0 СОДЕРЖИМОЕ УКАЗАНОЙ  ЯЧЕЙКИ
   МОНИТОРА.
        ФОРМАТ МАКРОКОМАНДЫ:
        .GVAL AREA, OFFSET
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 2-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        OFFSET - ЗНАЧЕНИЕ СМЕЩЕНИЯ ОТНОСИТЕЛЬНО НАЧАЛА RMON.
        ФОРМАТ БЛОКА АРГУМЕНТОВ:
 
          AREA:   .BYTE   0,34
                  .WORD   OFFSET
 
        ПРИМЕР ИСПОЛЬЗОВАНИЯ  .GVAL  СМ.  В  ОПИСАНИИ  ЗАПРОСА
   .GTJB.
        ЗАПРОС .PVAL ИЗМЕНЯЕТ СОДЕРЖИМОЕ УКАЗАНОЙ ЯЧЕЙКИ МОНИ-
   ТОРА. СТАРОЕ СОДЕРЖИМОЕ ЗАПИСЫВАЕТСЯ В РЕГИСТР R0.
        В РЕЖИМЕ ХМ .GVAL И .PVAL  ДОЛЖНЫ  ИСПОЛЬЗОВАТЬСЯ  ДЛЯ
   ИЗМЕНЕНИЯ СОДЕРЖИМОГО ЯЧЕЕК МОНИТОРА  ДЛЯ  СОВМЕСТИМОСТИ  С
   ДРУГИМИ МОНИТОРАМИ RT11.
        ФОРМАТ МАКРОКОМАНДЫ:
        .PVAL AREA,OFFSET,VALUE
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 2-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        OFFSET - ЗНАЧЕНИЕ СМЕЩЕНИЯ ОТНОСИТЕЛЬНО  НАЧАЛА  RMON;
   VALUE - НОВОЕ СОДЕРЖИМОЕ ЯЧЕЙКИ МОНИТОРА.
        ФОРМАТ БЛОКА АРГУМЕНТОВ:
 
          AREA:   .BYTE   2,34
                  .WORD   OFFSET
                  .WORD   VALUE
 
       5.3.20. .HERR,.SERR
        ЗАПРОСЫ .HERR,  .SERR  ПОЗВОЛЯЮТ  ЗАДАТЬ  ОПРЕДЕЛЕННЫЙ
   РЕЖИМ РАБОТЫ МОНИТОРА ПРИ ОБНАРУЖЕНИИ  УСЛОВИЙ  ОШИБОК.  ВО
   ВРЕМЯ ВЫПОЛНЕНИЯ ПРОГРАММЫ  МОГУТ  ВОЗНИКНУТЬ  ОПРЕДЕЛЕННЫЕ
   ОШИБКИ, ВЫЗЫВАЮЩИЕ ПРЕРЫВАНИЕ  ПРОГРАММЫ  (СМ.  ТАБЛ.  14).
   ОБЫЧНО ЭТИ ОШИБКИ ВЫЗЫВАЮТ  ВЫХОД  ИЗ  ПРОГРАММЫ  И  ПЕЧАТЬ
   МОНИТОРОМ СООБЩЕНИЯ ОБ ОШИБКЕ. ОДНАКО В  НЕКОТОРЫХ  СЛУЧАЯХ
   НЕВОЗМОЖНО ПРЕРВАТЬ ВЫПОЛНЕНИЕ  ПРОГРАММЫ  ИЗ-ЗА  ВОЗНИКШИХ
   ОШИБОК. НАПРИМЕР,  МНОГОПОЛЬЗОВАТЕЛЬСКАЯ  ПРОГРАММА  ДОЛЖНА
   СОХРАНЯТЬ УПРАВЛЕНИЕ И ПРЕРВАТЬ РАБОТУ ТОЛЬКО С ТЕМ ПОЛЬЗО-
   ВАТЕЛЕМ, КОТОРЫЙ  СДЕЛАЛ  ОШИБКУ.  В  ЭТОМ  СЛУЧАЕ  ПОЛЕЗНО
   ИСПОЛЬЗОВАТЬ ЗАПРОС .SERR, КОТОРЫЙ ЗАПРЕЩАЕТ МОНИТОРУ  УДА-
   ЛЕНИЕ ИЗ ПАМЯТИ ПРОГРАММЫ,  В  КОТОРОЙ  ОБНАРУЖЕНА  ОШИБКА.
   ВМЕСТО ЭТОГО, ПРИ  ВОЗНИКНОВЕНИИ  ОШИБКИ  ПОСЛЕ  ВЫПОЛНЕНИЯ
   ЗАПРОСА .SERR, УСТАНАВЛИВАЕТСЯ  С-РАЗРЯД  И  КОД  ОШИБКИ  В
   52-ОМ БАЙТЕ. В НЕКОТОРЫХ  СЛУЧАЯХ  ЗАПРОС  .SERR  ОСТАВЛЯЕТ
   КАНАЛЫ ОТКРЫТЫМИ,  НАПРИМЕР,  ЕСЛИ  ИСПОЛЬЗОВАЛИСЬ  ЗАПРОСЫ
   .LOOKUP И .ENTER.
        ЗАПРОС .HERR ОТМЕНЯЕТ ДЕЙСТВИЕ ЗАПРОСА .SERR.  В  ЭТОМ
   СЛУЧАЕ ПЕЧАТАЕТСЯ СООБЩЕНИЕ ОБ ОШИБКЕ И ПРОГРАММА УДАЛЯЕТСЯ
   ИЗ ПАМЯТИ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .HERR
        .SERR
 
                                                   ТАБЛИЦА 14
    -----------------------------------------------------------
    !    КОД      !           ПРИЧИНА ОШИБКИ                  !
    !---------------------------------------------------------!
    !     -1      ! ВЫЗОВ USR ИЗ ПОДПРОГРАММЫ ЗАВЕРШЕНИЯ      !
    !     -2      ! В ПАМЯТИ НЕТ ДРАЙВЕРА УСТРОЙСТВА          !
    !     -3      ! ОШИБКА ВВОДА-ВЫВОДА СПРАВОЧНИКА УСТРОЙСТВА!
    !     -4      ! ОШИБКА .FETCH. ОШИБКА ПРИ ЧТЕНИИ ДРАЙВЕРА,!
    !             ! ИЛИ ПОПЫТКА ЗАГРУЗИТЬ ЕГО ВЫШЕ USR ИЛИ    !
    !             ! RMON                                      !
    !     -5      ! ОШИБКА ЧТЕНИЯ ОВЕРЛЕЙНОГО СЕГМЕНТА        !
    !     -6      ! В СПРАВОЧНИКЕ УСТРОЙСТВА НЕТ СВОБОДНОГО   !
    !             ! МЕСТА ДЛЯ ЗАПИСИ ФАЙЛА                    !
    !     -7      ! НЕДОПУСТИМЫЙ АДРЕС (ТОЛЬКО В РЕЖИМЕ FB)   !
    !             ! ПОПЫТКА ВЫПОЛНИТЬ ОПЕРАЦИЮ ВНЕ ГРАНИЦ ЗА- !
    !             ! ДАНИЯ                                     !
    !     -10     ! НЕСУЩЕСТВУЮЩИЙ НОМЕР КАНАЛА               !
    !     -11     ! НЕДОПУСТИМАЯ КОМАНДА EMT; ОПРЕДЕЛЕН НЕДО- !
    !             ! ПУСТИМЫЙ ФУНКЦИОНАЛЬНЫЙ КОД               !
    !     -14     ! НЕДОПУСТИМЫЙ СПРАВОЧНИК                   !
    !     -15     ! ОТСУТСТВУЕТ ДРАЙВЕР УСТРОЙСТВА (В РЕЖИМЕ  !
    !             ! ХМ)                                       !
    -----------------------------------------------------------
 
  ПРИМЕР.

.MCALL	.ENTER	.HERR	.SERR	.PRINT	.EXIT	.USRDF

START:	.SERR			;запретить прерывание программы
				;по ошибке
	.USRDF			;определить мнемонику статуса завершения
				;программы USERRB
	.ENTER	#AREA,#1,#FILE	;открыть файл на PR:
	BCC	3$
	CALL	ERR		;обработать ошибку
	.HERR			;разрешить прерывание программы по ошибке
	.ENTER	#AREA,#1,#FILE	;открыть файл на PR:
	BCS	ERR1
3$:	.EXIT
ERR1:	.PRINT	#MSG
	.EXIT
MSG:	.ASCIZ	/ошибка .ENTER/
	.EVEN
ERR:	MOVB	@#52,R0		;подпрограмма обработки ошибок
	NEG	R0
	DEC	R0
	ASL	R0
	MOV	COD(R0),R0
	.PRINT
	BISB	#3,@#USERRB	;установить завершение с грубой ошибкой
	RETURN

COD:
	C1
	C2
	C3
	C4
	C5
	C6
	C7
	C10
	C11
	C14
C1:	.ASCIZ	/USR?/
C2:	.ASCIZ	/не загружен драйвер/
C3:	.ASCIZ	/ошибка чтения каталога/
C4:	.ASCIZ	/ошибка .FETCH/
C5:	.ASCIZ	/оверлей?/
C6:	.ASCIZ	/каталог переполнен/
C7:	.ASCIZ	/ошибка адресации/
C10:	.ASCIZ	.ASCIZ	/неверный номер канала/
C11:	.ASCIZ	/неверный код EMT/
C14:	.ASCIZ  /недопустимый каталог/
	.EVEN
AREA:	.BLKW	4
FILE:	.RAD50	/PR /
	.WORD	0,0,0
.END START
 
       5.3.21. .HRESET
        ЗАПРОС .HRESET ПРЕКРАЩАЕТ ВЫПОЛНЕНИЕ  ОПЕРАЦИЙ  ВВОДА-
   ВЫВОДА ДЛЯ ВЫЗЫВАЮЩЕЙ ПРОГРАММЫ И ВЫПОЛНЯЕТ ФУНКЦИИ ЗАПРОСА
   .SRESET. В РЕЖИМЕ SJ ЗАПРОС .HRESET ИСПОЛЬЗУЕТСЯ ДЛЯ  ПРЕК-
   РАЩЕНИЯ ВСЕХ ОПЕРАЦИЙ ВВОДА-ВЫВОДА ДЛЯ ЗАДАНИЯ,  В  КОТОРОМ
   ИСПОЛЬЗУЕТСЯ .HRESET. ВСЕ ДРУГИЕ ОПЕРАЦИИ ВВОДА-ВЫВОДА ПРО-
   ДОЛЖАЮТСЯ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .HRESET
        ПРИМЕР ИСПОЛЬЗОВАНИЯ .HRESET СМ.  В  ОПИСАНИИ  ЗАПРОСА
   .CDFN.
 
       5.3.22. .INTEN
        ЗАПРОС .INTEN ИСПОЛЬЗУЕТСЯ  В  ПОДПРОГРАММЕ  ОБРАБОТКИ
   ПРЕРЫВАНИЯ ПРОГРАММЫ  ПОЛЬЗОВАТЕЛЯ  И  ВЫПОЛНЯЕТ  СЛЕДУЮЩИЕ
   ФУНКЦИИ:
        1) СООБЩАЕТ МОНИТОРУ О ТОМ, ЧТО ПРОИЗОШЛО ПРЕРЫВАНИЕ;
        2) УСТАНАВЛИВАЕТ ПРИОРИТЕТ ПРОЦЕССОРА НА СООТВЕТСТВУЮ-
   ЩИЙ УРОВЕНЬ.
        ВСЕ ВНЕШНИЕ ПРЕРЫВАНИЯ ВЫЗЫВАЮТ РАБОТУ  ПРОЦЕССОРА  ПО
   7-МУ ПРИОРИТЕТУ. ЗАПРОС .INTEN ИСПОЛЬЗУЕТСЯ  ДЛЯ  ПОНИЖЕНИЯ
   ПРИОРИТЕТА ДО УРОВНЯ, НА КОТОРОМ БУДЕТ РАБОТАТЬ  СООТВЕТСТ-
   ВУЮЩЕЕ УСТРОЙСТВО.
        ФОРМАТ МАКРОКОМАНДЫ:
        .INTEN PRIOR[,PIC]
   ГДЕ PRIOR  -  ПРИОРИТЕТ  ПРОЦЕССОРА,  КОТОРЫЙ  ПОЛЬЗОВАТЕЛЬ
   УСТАНАВЛИВАЕТ ДЛЯ СВОЕЙ ПОДПРОГРАММЫ ОБРАБОТКИ  ПРЕРЫВАНИЯ;
   ОБЫЧНО ТОТ ПРИОРИТЕТ, ПО  КОТОРОМУ  УСТРОЙСТВО  ЗАПРАШИВАЕТ
   ПРЕРЫВАНИЕ;
        PIC - НЕОБЯЗАТЕЛЬНЫЙ  АРГУМЕНТ;  ДОЛЖЕН  БЫТЬ  УКАЗАН,
   ЕСЛИ ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЯ НАПИСАНА В ПОЗИЦИОН-
   НО-НЕЗАВИСИМЫХ КОДАХ; ЛЮБАЯ ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВА-
   НИЯ (ДРАЙВЕР  УСТРОЙСТВА),  ДОЛЖНА  БЫТЬ  НАПИСАНА  В  ЭТИХ
   КОДАХ.
 
       5.3.23. .LOCK,.UNLOCK
        ЗАПРОС .LOCK БЛОКИРУЕТ USR  В  ПАМЯТИ  ДЛЯ  ВЫПОЛНЕНИЯ
   РЯДА ОПЕРАЦИЙ. ЕСЛИ СУЩЕСТВУЮТ УСЛОВИЯ, ВЫЗЫВАЮЩИЕ  ПРОЦЕСС
   СВОПИНГА, ТО ПРОГРАММА ПОЛЬЗОВАТЕЛЯ (ТА ЕЕ  ЧАСТЬ,  КОТОРУЮ
   USR ПЕРЕКРЫВАЕТ В ПАМЯТИ) ЗАПИСЫВАЕТСЯ В  БЛОКИ  ДИСКА  ДЛЯ
   ВРЕМЕННОГО ХРАНЕНИЯ ДАННЫХ И USR ЗАГРУЖАЕТСЯ  В  ПАМЯТЬ.  В
   ПРОТИВНОМ СЛУЧАЕ ИСПОЛЬЗУЕТСЯ USR, НАХОДЯЩАЯСЯ В  ПАМЯТИ  И
   СВОПИНГА НЕ ПРОИСХОДИТ. ЗАПРОС .LOCK ВСЕГДА ЗАГРУЖАЕТ USR В
   ПАМЯТЬ, ЕСЛИ ТАМ ЕЕ НЕТ. USR БУДЕТ БЛОКИРОВАНА В ПАМЯТИ  ДО
   ТЕХ ПОР, ПОКА НЕ БУДЕТ СДЕЛАН ЗАПРОС .UNLOCK. ЗАМЕТИМ,  ЧТО
   В РЕЖИМЕ FB, ВЫЗОВ CSI МОЖЕТ ТАКЖЕ ВЫПОЛНИТЬ ДЕЙСТВИЕ  АНА-
   ЛОГИЧНОЕ .UNLOCK.
        В РЕЖИМЕ FB ЗАПРОС  .LOCK  ЗАПРЕЩАЕТ  ДРУГИМ  ЗАДАНИЯМ
   ИСПОЛЬЗОВАТЬ USR. ПОСЛЕ ЗАПРОСА .LOCK ДОЛЖЕН БЫТЬ  ВЫПОЛНЕН
   ЗАПРОС .UNLOCK ДЛЯ ОСВОБОЖДЕНИЯ USR.
        ЗАПРОСЫ .LOCK И .UNLOCK ДОПОЛНЯЮТ ДРУГ ДРУГА И, ПОЭТО-
   МУ, ДОЛЖНЫ БЫТЬ СОГЛАСОВАНЫ (Т.Е., ЕСЛИ ВЫПОЛНЕНО ТРИ  ЗАП-
   РОСА .LOCK, ТО ДОЛЖНО БЫТЬ ВЫПОЛНЕНО, ПО КРАЙНЕЙ МЕРЕ,  ТРИ
   .UNLOCK, В ПРОТИВНОМ СЛУЧАЕ USR НЕ БУДЕТ УДАЛЕНА  ИЗ  ПАМЯ-
   ТИ). ЕСЛИ КОЛИЧЕСТВО .UNLOCK БОЛЬШЕ ЧЕМ .LOCK, ТО ОШИБКИ НЕ
   ПРОИСХОДИТ.
        ФОРМАТ МАКРОКОМАНДЫ: .LOCK
        ПРИМЕЧАНИЯ:
        1. ВАЖНО, ЧТОБЫ ПРОГРАММА ИСПОЛЬЗУЮЩАЯ .LOCK НЕ НАХОДИ-
   ЛАСЬ В ОБЛАСТИ ПАМЯТИ, КУДА БУДЕТ ЗАГРУЖАТЬСЯ USR. ЕСЛИ ЭТО
   ПРОИЗОЙДЕТ, ТО  ПОСЛЕ  ВЫПОЛНЕНИЯ  .LOCK  УПРАВЛЕНИЕ  БУДЕТ
   ПЕРЕДАНО НЕ ПРОГРАММЕ ПОЛЬЗОВАТЕЛЯ, А USR.
        2. ПОСЛЕ ВЫПОЛНЕНИЯ .LOCK НЕ  РЕКОМЕНДУЕТСЯ  ИСПОЛЬЗОВАТЬ
ЭТО  МОЖЕТ  ВЫЗВАТь 
РЕЗУЛЬТАТЫ
        3. ЕСЛИ ОСНОВНОЕ ЗАДАНИЕ 
НАХОДИЛАСЬ В ОБЛАСТИ ПАМЯТИ, КУДА БУДЕТ ЗАГРУЖАТЬСЯ USR. ЕСЛИ ЭТО
    ПРОИЗОЙДЕТ, ТО  ПОСЛЕ  ВЫПОЛНЕНИЯ  .LOCK  УПРАВЛЕНИЕ  БУДЕТ
    ПЕРЕДАНО НЕ ПРОГРАММЕ ПОЛЬЗОВАТЕЛЯ, А USR.
         2. ПОСЛЕ ВЫПОЛНЕНИЯ .LOCK НЕ  РЕКОМЕНДУЕТСЯ  ИСПОЛ
СЯ СВОПИНГ, ТО .UNLOCK ЗАГРУЖАЕТ ПРОГРАММУ ПОЛъЗОВАУЕАмЯТЬ.
/jа!ю> 8 ФОРмАв?ъъкъОКОМАНЪъ:м
0
э#ъ/пъ  .UNLOSK# 
 ъЪьъ:Ъ 
 Ъгъъ м
 ' ъъъъ п  0 /!ю! "П ъ#&ч ,  О въвъ-
!
* ъ ?ъъыГ    2$ ъ5ъъчъ5в5471>0ъ0ъъ-п1 3?=м
 Е НАХОДИ-
   ЛАСЬ В ОБЛАСТИ ПАМЯТИ, КУДА БУДЕТ ЗАГРУЖАТЬСЯ USR. ЕСЛИ ЭТО
   ПРОИЗОЙДЕТ, ТО  ПОСЛЕ  ВЫПОЛНЕНИЯ  .LOCK  УПРАВЛЕНИЕ  БУДЕТ
   ПЕРЕДАНО НЕ ПРОГРАММЕ ПОЛЬЗОВАТЕЛЯ, А USR.
        2. ПОСЛЕ ВЫПОЛНЕНИЯ .LOCK НЕ  РЕКОМЕНДУЕТСЯ  ИСПОЛОКА НЕ БУДЕТ
   ВЫПОЛНЕН .UNLOCK В ПЕРВОМ ЗАДАНИИ.
  ПРИМЕР.
 
          .TITLE  LOCK.MAC
  ;ПРИМЕР ИСПОЛЬЗОВАНИЯ ЗАПРОСОВ .LOCK,.UNLOCK
          .MCALL  .LOCK,.UNLOCK,.LOOKUP,.SETTOP,.PRINT,.EXIT
          SYSPTR=54               ;УКАЗАТЕЛЬ НА НАЧАЛО RMON
  START:  .SETTOP @#SYSPTR        ;ЗАПРОСИТЬ ВСЮ СВОБОДНУЮ
                                  ;ПАМЯТЬ
          .LOCK                   ;ВЫЗОВ USR В ПАМЯТЬ
          .LOOKUP #AREA,#0,#FILE1 ;ОТКРЫТЬ ФАЙЛ НА 0-ОМ КАНАЛЕ
          BCC     1$
  2$:     .PRINT  #LMSG
          .EXIT
  1$:     .PRINT  #F1FND
          MOV     #AREA,R0
          INC     @R0             ;НОМЕР КАНАЛА = 1
          MOV     #FILE2,2(R0)
          .LOOKUP                 ;ОТКРЫТЬ ФАЙЛ НА 1-ОМ КАНАЛЕ
          BCS     2$
          .PRINT  #F2FND
          .UNLOCK                 ;УДАЛИТЬ USR ИЗ ПАМЯТИ
          .EXIT
 
  AREA:   .BLKW   3
  FILE1:  .RAD50  /DK /
          .RAD50  /PIP   /
          .RAD50  /SAV/
  FILE2:  .RAD50  /DK /
          .RAD50  /DIR   /
          .RAD50  /SAV/
  LMSG:   .ASCIZ  /ОШИБКА .LOOKUP/
  F1FND:  .ASCIZ  /ФАЙЛ PIP.SAV ОТКРЫТ НА 0-ОМ КАНАЛЕ/
  F2FND:  .ASCIZ  /ФАЙЛ DIR.SAV ОТКРЫТ НА 1-ОМ КАНАЛЕ/
          .EVEN
 
          .END    START
 
 
       5.3.24. .MFPS, .MTPS
        ЗАПРОСЫ .MFPS И .MTPS ОБЕСПЕЧИВАЮТ ДОСТУП К ССП.  ЗАП-
   РОС .MFPS ИСПОЛЬЗУЕТСЯ ДЛЯ ВЫБОРКИ ССП.
        ФОРМАТ МАКРОКОМАНДЫ:
        .MFPS ADDR
   ГДЕ ADDR - АДРЕС, ПО КОТОРОМУ ЗАПИСЫВАЕТСЯ СОДЕРЖИМОЕ  ССП;
   ЕСЛИ АДРЕС НЕ УКАЗАН, СОДЕРЖИМОЕ ССП ПЕРЕСЫЛАЕТСЯ ДЛЯ УСТА-
   НОВКИ ССП.
        ФОРМАТ МАКРОКОМАНДЫ:
        .MTPS ADDR
   ГДЕ ADDR - АДРЕС СЛОВА, КОТОРОЕ БУДЕТ ЗАПИСАНО В ССП;  ЕСЛИ
   АДРЕС НЕ УКАЗАН, ТО ЗНАЧЕНИЕ ДЛЯ ССП БЕРЕТСЯ ИЗ СТЕКА.
  ПРИМЕР.
          .TITLE  MFPS.MAC
  ;В ДАННОМ ПРИМЕРЕ, С ИСПОЛЬЗОВАНИЕМ ЗАПРОСОВ .MFPS,.MTPS,
  ;ОСУЩЕСТВЛЯЕТСЯ ОБРАЩЕНИЕ К ПОДПРОГРАММЕ, КОТОРАЯ
  ;ОПРЕДЕЛЯЕТ НАЛИЧИЕ СВОБОДНОГО ЭЛЕМЕНТА ОЧЕРЕДИ.
 
          .MCALL  .MFPS,.MTPS,.EXIT,.PRINT,.TTINR
 
          JSW = 44        ;СЛОВО СОСТОЯНИЯ ЗАДАНИЯ
          TTSPC$ = 10000  ;РАЗРЯД СПЕЦИАЛЬНОГО РЕЖИМА ВЫВОДА
 
  START:                          ;ГЛАВНАЯ ПРОГРАММА
          BIS     #TTSPC$,@#JSW   ;УСТАНОВИТЬ 12 РАЗРЯД В JSW
          ;       .
          ;       .
          CALL    GETQUE          ;ВЫЗОВ ПОДПРОГРАММЫ
 
          BCC     1$
          .PRINT  #NOELEM
          BIC     #TTSPC$,@#JSW
          .EXIT
 
  1$:     NOP                     ;ПРОДОЛЖЕНИЕ ГЛАВНОЙ
          NOP                     ;ПРОГРАММЫ
          .PRINT  #GOT1
  2$:     .TTINR
          BCS     2$
          BR      START
 
  GETQUE: MOV     #QHEAD,R4
          TST     @R4
          BEQ     11$
          .MFPS                   ;СОХРАНИТЬ ЗНАЧЕНИЕ В СТЕКЕ
          .MTPS   #340            ;УСТАНОВИТЬ ПРИОРИТЕТ = 7
          MOV     @R4,R5          ;УКАЗАТЕЛЬ НА СЛЕДУЮЩИЙ
                                  ;ЭЛЕМЕНТ
          MOV     @R5,@R4
          .MTPS                   ;ВОССТАНОВИТЬ РАЗРЯДЫ
                                  ;ПРИОРИТЕТА
          TST     (PC)+
  11$:    SEC
          RETURN
 
  QHEAD:  .WORD   Q1
  Q1:     .WORD   Q2,0,0
  Q2:     .WORD   Q3,0,0
  Q3:     .WORD   0,0,0
 
  NOELEM: .ASCIZ  /НЕТ В НАЛИЧИИ ЭЛЕМЕНТА ОЧЕРЕДИ/
  GOT1:   .ASCII  /ЕСТЬ СВОБОДНЫЙ ЭЛЕМЕНТ - НАЖМИТЕ ЛЮБУЮ /
          .ASCIZ  /КЛАВИШУ ДЛЯ ПРОДОЛЖЕНИЯ/
          .EVEN
 
          .END    START
 
       5.3.25. .MRKT
        ЗАПРОС .MRKT ПЛАНИРУЕТ ЗАПУСК ПОДПРОГРАММЫ  ЗАВЕРШЕНИЯ
   ЧЕРЕЗ ОПРЕДЕЛЕННЫЙ ИНТЕРВАЛ ВРЕМЕНИ.
        ЗАПРОС .MRKT ИСПОЛЬЗУЮТ  ЭЛЕМЕНТЫ  ОЧЕРЕДИ  ИЗ  СПИСКА
   ЭЛЕМЕНТОВ ОЧЕРЕДИ ВВОДА-ВЫВОДА. ЭЛЕМЕНТ ОЧЕРЕДИ ИСПОЛЬЗУЕТ-
   СЯ ДО ТЕХ ПОР, ПОКА НЕ БУДЕТ ВВЕДЕНА ПОДПРОГРАММА  ЗАВЕРШЕ-
   НИЯ ИЛИ НЕ БУДЕТ ВЫПОЛНЕН ЗАПРОС .CMKT.
        ФОРМАТ МАКРОКОМАНДЫ:
        .MRKT AREA,TIME,CRTN,ID
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 4-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        TIME - АДРЕС БЛОКА ИЗ 2-Х СЛОВ,  СОДЕРЖАЩЕГО  ВЕЛИЧИНУ
   ИНТЕРВАЛА ВРЕМЕНИ; 
	CRTN - ТОЧКА ВХОДА ПОДПРОГРАММЫ ЗАВЕРШЕНИЯ;
        ID - ЧИСЛО, ИСПОЛЬЗУЕМОЕ ДЛЯ ИДЕНТИФИКАЦИИ  ЗАПРОСА  С
   ПРОГРАММОЙ ЗАВЕРШЕНИЯ И ЗАПРОСАМИ .CMKT; ЭТО ЧИСЛО НЕ ДОЛЖ-
   НО БЫТЬ В ПРЕДЕЛАХ ОТ 177400 ДО 177777; НЕСКОЛЬКО  ЗАПРОСОВ
 
        ФОРМАТ БЛОКА АРГУМЕНТОВ:Й 
          AREA:   .BYTE   0,22
                  .WORD   TIME
                  .WORD   CRTN
                  .WORD   ID
  ПРИМЕР.
 
          .TITLE  TREAD.MAC
          AREA:   .BYTE   0,22
                  .WORD   TIME
                  .WORD   CRTN
                  .WORD   ID
 
 
  ПРИМЕР.
 
          .TITLE  TREAD.MAC
  ;ПЗ R0
          BEQ     1$
          .PRINT
  1$:     CLR     TBYT
          .MRKT   #TAREA,#TIME,#TOUT,#1;ЗАПУСТИТЬ ПОДПРОГРАММУ
                                      ;ЗАВЕРШЕНИЯ ПО ИСТЕЧЕНИИ
                                      ;ВРЕМЕНИ
          BIS     #TCBIT$,@#JSW
          CLRB    @R1
  TTIN:   .TWAIT  #AREA
          .TTINR
          BIT     #1,(PC)+
  TBYT:   .WORD   0
          BNE     2$
          BCS     TTIN
          MOVB    R0,(R1)+
          .CMKT   #TAREA,#0       ;ОТМЕНИТЬ .MRKT
  2$:     BIS     #TTSPC$,@#JSW
  3$:     .TTINR
          MOVB    R0,(R1)+
          BCC     3$
          CLRB    -(R1)
          BIC     #TCBIT$!TTSPC$,@#JSW
          ROR     TBYT
          RETURN
  TOUT:   INC     TBYT
          RETURN
  XQUE:   .BLKW   10.
  AREA:   .WORD   0,WAIT
  TAREA:  .BLKW   4
  TIME:   .WORD   0,500.
  WAIT:   .WORD   0,1
  LINE:   .ASCII  /ОБРАБОТКА ДАННЫХ    /
  BUFF:   .BLKB   81.
  PROMT:  .ASCIZ  /ВВЕДИТЕ ДАННЫЕ :   / <200>
  TIMOUT: .ASCIZ  /ВРЕМЯ НА ВВОД ДАННЫХ ИСТЕКЛО/
          .END START
 
       5.3.26. .MTATCH
        ЗАПРОС .MTATCH ЛОГИЧЕСКИ СВЯЗЫВАЕТ ЗАДАНИЕ  С  ОПРЕДЕ-
   ЛЕННЫМ ТЕРМИНАЛОМ. ЭТОТ ЗАПРОС ДОЛЖЕН БЫТЬ  ВЫПОЛНЕН  ПЕРЕД
   ТЕМ КАК ЗАДАНИЕ НАЧНЕТ ИСПОЛЬЗОВАТЬ ТЕРМИНАЛ В МУЛЬТИТЕРМИ-
   НАЛЬНОМ РЕЖИМЕ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .MTATCH AREA,ADDR,UNIT
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 3-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        ADDR - АДРЕС СЛОВА  АСИНХРОННОГО  СОСТОЯНИЯ  ТЕРМИНАЛА
   ИЛИ 0;
        UNIT - ЛОГИЧЕСКИЙ НОМЕР ТЕРМИНАЛА.
        ФОРМАТ БЛОКА АРГУМЕНТОВ:
          AREA:   .BYTE   5,37
                  .WORD   ADDR
                  .BYTE   UNIT,0
 
       5.3.27. .MTDTCH
        ЗАПРОС .MTDTCH ПРЕРЫВАЕТ ЛОГИЧЕСКУЮ  СВЯЗЬ  УКАЗАННОГО
   ТЕРМИНАЛА С ЗАДАНИЕМ И  ДЕЛАЕТ  ЕГО  ДОСТУПНЫМ  ДЛЯ  ДРУГИХ
   ЗАДАНИЙ. ПОПЫТКА ПРЕРВАТЬ  СВЯЗЬ  С  ТЕРМИНАЛОМ,  ЛОГИЧЕСКИ
   СВЯЗАННЫМ С ДРУГИМ ЗАДАНИЕМ, ПРИВОДИТ К ОШИБКЕ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .MTDTCH AREA,UNIT
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 3-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        UNIT - ЛОГИЧЕСКИЙ НОМЕР ТЕРМИНАЛА.
        ФОРМАТ БЛОКА АРГУМЕНТОВ:
          AREA:   .BYTE   6,37
                  .WORD   <НЕ ИСПОЛЬЗУЕТСЯ>
                  .BYTE   UNIT
 
       5.3.28. .MTSET
        ЗАПРОС .MTSET ПОЗВОЛЯЕТ УСТАНОВИТЬ ХАРАКТЕРИСТИКИ ТЕР-
   МИНАЛА. ОН ТАКЖЕ ОПРЕДЕЛЯЕТ РЕЖИМ ВВОДА-ВЫВОДА ДЛЯ  УКАЗАН-
   НОГО ТЕРМИНАЛА.
        ФОРМАТ МАКРОКОМАНДЫ:
        .MTSET AREA,ADDR,UNIT
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 3-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        ADDR - АДРЕС БЛОКА ИЗ 4-Х  СЛОВ  СОСТОЯНИЯ  УКАЗАННОГО
   ТЕРМИНАЛА;
        UNIT - ЛОГИЧЕСКИЙ НОМЕР ТЕРМИНАЛА.
        ФОРМАТ БЛОКА АРГУМЕНТОВ:
          AREA:   .BYTE   0,37
                  .WORD   ADDR
                  .BYTE   UNIT
 
        НА РИС. 6 ПОКАЗАНА СТРУКТУРА БЛОКА СОСТОЯНИЯ  ТЕРМИНА-
   ЛА, КОТОРЫЙ ОРГАНИЗУЕТСЯ ПОЛЬЗОВАТЕЛЕМ. ОПИСАНИЕ СЛОВ БЛОКА
   СОСТОЯНИЯ ПРИВЕДЕНО В ТАБЛ.15.

                     -------------------------------
                     !         M.TSTS              !
                     !-----------------------------!
                     !         M.TST2              !
                     !-----------------------------!
                     !         M.TST3              !
                     !-----------------------------!
                     !  M.TSTW      !    M.TWID    !
                     -------------------------------
 
          РИС. 6. СТРУКТУРА  БЛОКА СОСТОЯНИЯ ТЕРМИНАЛА
 
 
                                                   ТАБЛИЦА 15
    ----------------------------------------------------------
    !  ОБОЗНАЧЕНИЕ     !              ОПИСАНИЕ               !
    !--------------------------------------------------------!
    !  M.TSTS          ! СЛОВО КОНФИГУРАЦИИ ТЕРМИНАЛА        !
    !  M.TSTS2         ! РЕЗЕРВНОЕ                      ! РГЗ
    !
    !                  !              Ъ ъъъъъъъъъъъъъъъъ     !
    !--------------------------------------------------------!
    !  M.TSTS          ! СЛОВО КОНФИГУРАЦИИ ТЕРМИНАЛА        !
ОНФИГУРАЦИИ  ТЕРМИН хM.TSъSъъъъъъъъъЫБЛ.16/ъъ
 
                                                    ТАБЛ. 16
    -----------------------------------------------------------
    ! РАЗРЯД ! СОДЕРЖАНИЕ   !             ЗНАЧЕНИЕ            !
    !----------------------------------------------------------
    !  M.TSTS          ! СЛОВО КОНФИГУРАЦИИ ТЕРМИНАЛА        !
    !   0    !      1       ! АППАРАТНАЯ ТАБУЛЯЦИЯ            !
    !   1    !      2       ! ВЫПОЛНЕНИЕ ВОЗВРАТА КАРЕТКИ И   !
    !        !              ! ПЕРЕВОДА СТРОКИ, ЕСЛИ ДЕЙСТВИ-  !
    !        !              ! ТЕЛЬНАЯ ДЛИНА СТРОКИ БОЛЬШЕ     !
    !        !              ! УСТАНОВЛЕННОЙ В M.TWID          !
    !   2    !      4       ! АППАРАТНЫЙ ПЕРЕВОД ФОРМАТА      !
    !   3    !     10       ! ВЫПОЛНЕНИЕ КОМАНД СУ/F И СУ/В   !
    !  4,5   !      -       ! РЕЗЕРВНЫЕ                       !
    !   6    !    100       ! ЗАПРЕЩЕНИЕ РЕЖИМА ОЖИДАНИЯ ДЛЯ  !
    !        !              ! ТЕРМИНАЛА (ЭКВИВАЛЕНТЕН 6-ОМУ   !
    !        !              ! РАЗРЯДУ В ССЗ); РАЗРЯД TCBIT    !
    !  7-11  !      -       ! РЕЗЕРВНЫЕ                       !
    !  12    !   10000      ! РЕЖИМ ПОСИМВОЛЬНОГО ВВОДА (ЭКВИ-!
    !        !              ! ВАЛЕНТЕН РАЗРЯДУ СПЕЦИАЛЬНОГО   !
    !        !              ! РЕЖИМА В ССЗ); РАЗРЯД TTSPC     !
    !  13    !      -       ! РЕЗЕРВНЫЙ                       !
    !  14    !   40000      ! ЗАПРЕЩЕНИЕ ПРЕОБРАЗОВАНИЯ КОДОВ !
    !        !              ! СИМВОЛОВ НИЖНЕГО РЕГИСТРА В КО- !
    !        !              ! ДЫ СИМВОЛОВ ВЕРХНЕГО РЕГИСТРА   !
    -----------------------------------------------------------
 
        В ТАБЛ.17 ДАНЫ ЗНАЧЕНИЯ РАЗРЯДОВ ДЛЯ M.TSTW.
 
                                                   ТАБЛИЦА 17
    -----------------------------------------------------------
    ! РАЗРЯД ! СОДЕРЖИМОЕ   !             ЗНАЧЕНИЕ            !
    !----------------------------------------------------------
    !  10    !    2000      ! ТЕРМИНАЛ ИСПОЛЬЗУЕТСЯ ОСНОВНЫМ  !
    !        !              ! И ФОНОВЫМ ЗАДАНИЯМИ             !
    !  11    !    4000      ! ТЕРМИНАЛ НЕ ВКЛЮЧЕН             !
    !  14    !   40000      ! ДВАЖДЫ ПОДАНА КОМАНДА СУ/С      !
    !  15    !  100000      ! СИСТЕМНЫЙ ТЕРМИНАЛ              !
!
    -----------------------------------------------------------
 
 
       5.3.29. .MTGET
 
        ЗАПРОС .MTGET ПОЗВОЛЯЕТ ПОЛУЧИТЬ ИНФОРМАЦИЮ О
ъИч, ОПИСАННУЮ 

    -----------------------------------------------------------
    ! ОТНОСИТЕЛЬНЫЙ   !                $                      !
    ! НОМЕР БАЙТА В   !               СОДЕРЖИМОЕ           

    !        0        ! СЛОВО КОНФИГУРАЦИИ ТЕРМИНАЛА. ЗНАЧЕНИЯ!
    !                 ! РАЗРЯДОВ ТЕ ЖЕ, ЧТО И В .MTSET        !
    !       2-4       ! РЕЗЕРВНЫЕ                             !
    !        6        ! ДЛИНА СТРОКИ                          !
    !        7        ! ТЕКУЩЕЕ ПОЛОЖЕНИЕ СТРОКИ              !
    -----------------------------------------------------------
 
        ФОРМАТ МАКРОКОМАНДЫ:
        .MTGET AREA,ADDR,UNIT
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 3-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        ADDR - АДРЕС БЛОКА СОСТОЯНИЯ ТЕРМИНАЛА ИЗ 4-Х СЛОВ;
        UNIT - ЛОГИЧЕСКИЙ НОМЕР ТЕРМИНАЛА, ИНФОРМАЦИЮ О  СОСТОЯ-
   НИИ КОТОРОГО ТРЕБУЕТСЯ ПОЛУЧИТЬ.
        ФОРМАТ БЛОКА АРГУМЕНТОВ:
          AREA:   .BYTE   1,37
                  .WORD   ADDR
                  .BYTE   UNIT

       5.3.30. .MTSTAT
        ЗАПРОС .MTSTAT ПОЗВОЛЯЕТ ПОЛУЧИТЬ ИНФОРМАЦИЮ О СОСТОЯНИИ
   МУЛЬТИТЕРМИНАЛЬНОЙ СИСТЕМЫ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .MTSTAT AREA,ADDR
   ГДЕ AREA - АДРЕС 3-Х СЛОВНОГО БЛОКА АРГУМЕНТОВ;
        ADDR - АДРЕС 8-МИ СЛОВНОГО БЛОКА, СОДЕРЖАЩЕГО ИНФОРМАЦИЮ
   О СОСТОЯНИИ МУЛЬТИТЕРМИНАЛЬНОЙ СИСТЕМЫ (СМ. ЗАПРОС .MTGET).
        ФОРМАТ БЛОКА АРГУМЕНТОВ:
          AREA:   .BYTE   10,37
                  .WORD   ADDR
                  .WORD   0
 
       5.3.31. .MTRCTD
        ЗАПРОС .MTRCTD ЯВЛЯЕТСЯ МУЛЬТИТЕРМИНАЛЬНОЙ ФОРМОЙ ЗАПРО-
   СА .RCTRLD. ОН ОТМЕНЯЕТ КОМАНДУ СУ/D  И  РАЗРЕШАЕТ  ВЫВОД  НА
   УКАЗАННЫЙ ТЕРМИНАЛ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .MTRCTD AREA,UNIT ГДЕ AREA - АДРЕС  БЛОКА  ИЗ  3-Х  СЛОВ
   АРГУМЕНТОВ ЕМТ;
        UNIT - ЛОГИЧЕСКИЙ НОМЕР ТЕРМИНАЛА.
        ФОРМАТ БЛОКА АРГУМЕНТОВ:
          AREA:   .BYTE   4,37
                  .WORD   <НЕ ИСПОЛЬЗУЕТСЯ>
                  .BYTE   UNIT
 
       5.3.32. .MWAIT (РЕЖИМ FB,XM)
        ЗАПРОС .MWAIT ПЕРЕВОДИТ ПРОГРАММУ В  СОСТОЯНИЕ  ОЖИДАНИЯ
   ДО ТЕХ ПОР, ПОКА ВСЕ СООБЩЕНИЯ НЕ БУДУТ ПЕРЕДАНЫ ИЛИ  ПОЛУЧЕ-
   НЫ. С ПОМОЩЬЮ ЭТОГО ЗАПРОСА ПОЛЬЗОВАТЕЛЬ МОЖЕТ УДОСТОВЕРИТЬСЯ
   В ПРАВИЛЬНОСТИ ВЫПОЛНЕНИЯ ОПЕРАЦИИ. ЗАПРОС .MWAIT ИСПОЛЬЗУЕТ-
   СЯ В ОСНОВНОМ СОВМЕСТНО С ЗАПРОСАМИ .RCVD ИЛИ .SDAT,  КОТОРЫЕ
   НЕ ПРЕДУСМАТРИВАЮТ СПЕЦИАЛЬНЫХ ДЕЙСТВИЙ ПОСЛЕ  ПОЛУЧЕНИЯ  ИЛИ
   ПЕРЕДАЧИ СООБЩЕНИЙ (ДАННЫХ).
        ФОРМАТ МАКРОКОМАНДЫ:
        .MWAIT
  ПРИМЕР.
 
  ;В ПРИВЕДЕНОМ ПРИМЕРЕ ИСПОЛЬЗУЕТСЯ ЗАПРОС .MWAIT.
  ;ПРИМЕР СОСТОИТ ИЗ ДВУХ ПРОГРАММ: ФОНОВОЙ, КОТОРАЯ
  ;ПОСЫЛАЕТ СООБЩЕНИЕ, И ОСНОВНОЙ ПРОГРАММЫ, КОТОРОЕ
  ;ЭТО СООБЩЕНИЕ ПОЛУЧАЕТ.
 
          .TITLE  MWAITF.MAC
 
  ;ОСНОВНАЯ ПРОГРАММА ...
 
          .MCALL  .MWAIT,.RCVD,.PRINT,.EXIT
 
  START:  .RCVD   #AREA,#MBUFF,#40. ;ПОЛУЧИТЬ СООБЩЕНИЕ
          ;       .
          ;       .
          ;       .
          .PRINT  #FGJOB
          ;       .
          ;       .
          ;       .
          .MWAIT          ;ОЖИДАТЬ ПРИЕМА
          TST     MBUFF+2 ;СООБЩЕНИЯ НЕТ?
          BEQ     FEXIT   ;ЕСЛИ НЕТ - ВЫХОД
                          ;ИЗ ПРОГРАММЫ
          .PRINT  #FMSG
          .PRINT  #MBUFF+2;ПЕЧАТЬ ПОЛУЧЕННОГО
                          ;СООБЩЕНИЯ
          BR      START
 
  FEXIT:  .EXIT
  AREA:   .BLKW   5
  MBUFF:  .BLKW   41.
          .WORD   0
  FGJOB:  .ASCIZ  /ОСНОВНАЯ ПРОГРАММА ГОТОВА К ПРИЕМУ СООБЩЕНИЙ/
  FMSG:   .ASCIZ  /ПЕРЕДАНО СООБЩЕНИЕ:/
          .EVEN
 
          .END START
 
  ;ФОНОВАЯ ПРОГРАММА ...
 
          .TITLE  MWAITB.MAC
 
          .MCALL  .MWAIT,.SDAT,.GTLIN,.PRINT,.EXIT
 
  START:  CLR     BUFF
          .GTLIN  #BUFF,#PROMPT   ;ВВЕСТИ СООБЩЕНИЕ
          .SDAT   #AREA,#BUFF,#40.;ПЕРЕДАТЬ СООБЩЕНИЕ
          BCS     1$
          .MWAIT
          TST     BUFF
          BNE     START
          .EXIT
  1$:     .PRINT  #NOFG
          .EXIT
 
  AREA:   .BLKW   5
  BUFF:   .BLKW   40.
  PROMPT: .ASCII  /ВВЕДИТЕ СООБЩЕНИЕ ДЛЯ ОСНОВНОЙ ПРОГРАММЫ/
          .BYTE   15,12,200
  NOFG:   .ASCIZ  /ОСНОВНОЙ ПРОГРАММЫ НЕТ/
          .EVEN
 
          .END    START
 
 
       5.3.33. .PEEK,.POKE
        ЗАПРОС .PEEK ПЕРЕДАЕТ В РЕГИСТР R0 СОДЕРЖИМОЕ  УКАЗАННОЙ
   ЯЧЕЙКИ ПАМЯТИ (НИЖЕ 28К СЛОВ) ИЛИ СОДЕРЖИМОЕ ЯЧЕЙКИ  СТРАНИЦЫ
   ВВОДА - ВЫВОДА.
        ЗАПРОС .POKE ИЗМЕНЯЕТ СОДЕРЖИМОЕ ЯЧЕЙКИ ПАМЯТИ. ПРИ ЭТОМ
   СТАРОЕ СОДЕРЖИМОЕ ЗАПИСЫВАЕТСЯ В РЕГИСТР R0.
        ФОРМАТ МАКРОКОМАНДЫ:
        .PEEK AREA,ADDR
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 2-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        ADDR - АДРЕС ЯЧЕЙКИ ПАМЯТИ.
        ФОРМАТ БЛОКА АРГУМЕНТОВ:
          AREA:   .BYTE   1,34
                  .WORD   ADDR
 
        ФОРМАТ МАКРОКОМАНДЫ:
        .POKE AREA,ADDR,VALUE
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 3-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        ADDR - АДРЕС ЯЧЕЙКИ ПАМЯТИ;
        VALUE - НОВОЕ СОДЕРЖИМОЕ ЯЧЕЙКИ ПАМЯТИ.
        ФОРМАТ БЛОКА АРГУМЕНТОВ:
          AREA:   .BYTE   3,34
                  .WORD   ADDR
                  .WORD   VALUE
  ПРИМЕР.
 
  ;В ДАННОМ ПРИМЕРЕ ЗАПРОСЫ .PEEK,.POKE ИСПОЛЬЗУЮТСЯ
  ;ДЛЯ ЧТЕНИЯ И УСТАНОВКИ РАЗМЕРА ФАЙЛА, ОТКРЫТОГО
  ;РАНЕЕ ПО ЗАПРОСУ .ENTER.
 
          .MCALL  .PEEK,.POKE,.EXIT
 
          RMON   = 54
          MAXBLK = 314
 
  START:  .PEEK   #EMTBLK,#RMON   ;УСТАНОВИТЬ АДРЕС НАЧАЛА
                                  ;RMON
          ADD     #MAXBLK,R0      ;ПОЛУЧИТЬ РАЗМЕР ФАЙЛА
          MOV     R0,R1
          .POKE   #EMTBLK,R1,#NEWSIZ ;УСТАНОВИТЬ НОВЫЙ
                                     ;РАЗМЕР ФАЙЛА
          MOV     R0,OLDSIZ
          .EXIT
 
  EMTBLK: .BLKW   3
  NEWSIZ: .WORD   100.
  OLDSIZ: .WORD   0               ;СТАРЫЙ РАЗМЕР ФАЙЛА
 
          .END    START
 
 
       5.3.34. .PROTECT,.UNPROTECT (РЕЖИМ FB,XM)
        ЗАПРОС .PROTECT ИСПОЛЬЗУЕТСЯ ДЛЯ ПОЛУЧЕНИЯ  ИСКЛЮЧИТЕЛЬ-
   НОГО ПРАВА ПОЛЬЗОВАНИЯ ВЕКТОРОМ ПРЕРЫВАНИЯ В ДИАПОЗОНЕ  0-476
   И УСТАНАВЛИВАЕТ ЗАЩИТУ ВЕКТОРА.
        ЕСЛИ ЗАПРОС .PROTECT ЗАВЕРШЕН УСПЕШНО, ТО ЭТО  УКАЗЫВАЕТ
   НА ТО, ЧТО ЯЧЕЙКИ ВЕКТОРА НЕ ИСПОЛЬЗУЮТСЯ ДРУГИМ ЗАДАНИЕМ ИЛИ
   МОНИТОРОМ И В ЭТОМ  СЛУЧАЕ  ТЕКУЩЕЕ  ЗАДАНИЕ  МОЖЕТ  ЗАПИСАТЬ
   АДРЕС ПОДПРОГРАММЫ ОБРАБОТКИ  ПРЕРЫВАНИЯ  И  ЗНАЧЕНИЯ  УРОВНЯ
   ПРИОРИТЕТА В ЭТИ ЯЧЕЙКИ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .PROTECT AREA,ADDR
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 3-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        ADDR - АДРЕС ВЕКТОРА, КОТОРЫЙ БУДЕТ ИСПОЛЬЗОВАТЬСЯ  ДАН-
   НЫМ ЗАДАНИЕМ; ADDR ДОЛЖЕН БЫТЬ КРАТЕН ЧЕТЫРЕМ И МЕНЬШЕ 476.
        ФОРМАТ БЛОКА АРГУМЕНТОВ:
          AREA:   .BYTE   0,31
                  .WORD   ADDR
        ЗАПРРОС .UNPROTECT ОТМЕНЯЕТ РЕЗУЛЬТАТ  ДЕЙСТВИЯ  ЗАПРОСА
   .PROTECT.
        ФОРМАТ МАКРОКОМАНДЫ:
        .UNPROTECT AREA,ADDR
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 2-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        ADDR - АДРЕС ВЕКТОРА, КОТОРЫЙ ОСВОБОЖДАЕТСЯ ОТ ЗАЩИТЫ.
        ФОРМАТ БЛОКА АРГУМЕНТОВ:
          AREA:   .BYTE   1,31
                  .WORD   ADDR
  ПРИМЕР.
          .TITLE  PROTECT.MAC
  ;В ДАННОМ ПРИМЕРЕ ПОКАЗАНО, КАК УСТАНОВИТЬ ЗАЩИТУ ВЕКТОРА
  ;УСТРОЙСТВА, А ЗАТЕМ ОТМЕНИТЬ ЗАЩИТУ ВЕКТОРА.
 
          .MCALL  .PROTECT,.UNPROTECT,.PRINT,.EXIT
 
  START:  .PROTECT   #AREA,#300
          BCS        1$
          .UNPROTECT #AREA,#300
          .EXIT
  1$:     .PRINT     #NOVEC
          .EXIT
  AREA:   .BLKW      3
  NOVEC:  .ASCIZ     /ВЕКТОР УЖЕ ЗАЩИЩЕН !/
          .END       START
 
         5.3.35. .QSET
        ВСЕ ОПЕРАЦИИ ВВОДА-ВЫВОДА В СИСТЕМЕ ФОДОС ОСУЩЕСТВЛЯЮТСЯ
   ЧЕРЕЗ ЦЕНТРАЛИЗОВАННУЮ СИСТЕМУ УПРАВЛЕНИЯ ОЧЕРЕДЬЮ  ЗАПРОСОВ.
   КАЖДЫЙ ЗАПРОС НЕСИНХРОННОЙ ПЕРЕДАЧИ (НАПРИМЕР,  .WRITE)  ТРЕ-
   БУЕТ ДЛЯ СВОЕГО ВЫПОЛНЕНИЯ НАЛИЧИЕ ЭЛЕМЕНТА ОЧЕРЕДИ. ЕСЛИ ДЛЯ
   ОЧЕРЕДНОГО ЗАПРОСА ВВОДА-ВЫВОДА НЕТ СВОБОДНОГО ЭЛЕМЕНТА  ОЧЕ-
   РЕДИ, ТО ВЫПОЛНЕНИЕ ПРОГРАММЫ ПОЛЬЗОВАТЕЛЯ БУДЕТ  БЛОКИРОВАНО
   ДО ТЕХ ПОР, ПОКА ЭЛЕМЕНТ ОЧЕРЕДИ НЕ ОСВОБОДИТСЯ. В РЕЖИМЕ FB,
   ОДНО ИЗ ЗАДАНИЙ МОЖЕТ ВЫПОЛНЯТЬСЯ, ПОКА ДРУГОЕ  ЗАДАНИЕ  ОЖИ-
   ДАЕТ ЭЛЕМЕНТ ОЧЕРЕДИ.
        ЗАПРОС .QSET ИСПОЛЬЗУЕТСЯ ДЛЯ ТОГО, ЧТОБЫ УВЕЛИЧИТЬ ЧИС-
   ЛО ЭЛЕМЕНТОВ ОЧЕРЕДИ ВВОДА-ВЫВОДА. ОБЩЕЕ ПРАВИЛО  ЗАКЛЮЧАЕТСЯ
   В ТОМ, ЧТОБЫ В КАЖДОЙ ПРОГРАММЕ КОЛИЧЕСТВО ЭЛЕМЕНТОВ  ОЧЕРЕДИ
   БЫЛО НА ЕДИНИЦУ БОЛЬШЕ, ЧЕМ ОБЩЕЕ КОЛИЧЕСТВО ЗАПРОСОВ  ВВОДА-
   ВЫВОДА, КОТОРЫЕ БУДУТ ВЫПОЛНЯТЬСЯ ОДНОВРЕМЕННО  НА  РАЗЛИЧНЫХ
   КАНАЛАХ.
        ЗАПРОСЫ .MRKT,.TWAIT И .SDAT ТАКЖЕ  ИСПОЛЬЗУЮТ  ЭЛЕМЕНТЫ
   ОЧЕРЕДИ И ДОЛЖНЫ  ПРИНИМАТЬСЯ  ВО  ВНИМАНИЕ  ПРИ  ОПРЕДЕЛЕНИИ
   КОЛИЧЕСТВА ЭЛЕМЕНТОВ ОЧЕРЕДИ ДЛЯ ПРОГРАММЫ. КАЖДЫЙ РАЗ, КОГДА
   ВЫПОЛНЯЕТСЯ .QSET, НЕПРЕРЫВНАЯ ОБЛАСТЬ ПАМЯТИ, КОТОРАЯ  ОТВО-
   ДИТСЯ ПОД ЭЛЕМЕНТЫ ОЧЕРЕДИ ДЕЛИТСЯ НА СЕГМЕНТЫ, СОДЕРЖАЩИЕ ПО
   7 СЛОВ (ПО 10 СЛОВ ДЛЯ  МОНИТОРА  XM)  И  СВЯЗЫВАЕТСЯ  С  УЖЕ
   СУЩЕСТВУЮЩЕЙ ОЧЕРЕДЬЮ ВВОДА-ВЫВОДА ДЛЯ ЭТОГО ЗАДАНИЯ.
        ЗАПРОС .QSET МОЖЕТ БЫТЬ ИСПОЛЬЗОВАН НЕОДНОКРАТНО В ПРОГ-
   РАММЕ ПОЛЬЗОВАТЕЛЯ. ПРИ ЭТОМ, ОБЛАСТИ ПАМЯТИ ДЛЯ  НОВЫХ  ЭЛЕ-
   МЕНТОВ ОЧЕРЕДИ,  ОТВОДИМЫЕ  РАЗЛИЧНЫМИ  .QSET,  НЕОБЯЗАТЕЛЬНО
   ДОЛЖНЫ БЫТЬ СОПРИКАСАЮЩИМИСЯ. ОБЛАСТЬ ПАМЯТИ ДЛЯ ДОПОЛНИТЕЛЬ-
   НЫХ ЭЛЕМЕНТОВ ОЧЕРЕДИ  ВВОДА-ВЫВОДА  ДОЛЖНА  БЫТЬ  ОПРЕДЕЛЕНА
   ВНУТРИ ПРОГРАММЫ  ПОЛЬЗОВАТЕЛЯ.  ЗАПРОСВ  .SRESET  И  .HRESET
   АННУЛИРУЮТ РЕЗУЛЬТАТ ДЕЙСТВИЯ .QSET.
        НЕОБХОДИМО  СОБЛЮДАТЬ  ОСТОРОЖНОСТЬ  ПРИ   РАСПРЕДЕЛЕНИИ
   ПАМЯТИ ДЛЯ ЭЛЕМЕНТОВ ОЧЕРЕДИ. ОЧЕРЕДЬ ВВОДА-ВЫВОДА ИЗМЕНЯЕТСЯ
   МОНИТОРОМ АСИНХРОННО. ЕСЛИ ОБЛАСТЬ, ОТВЕДЕННАЯ  ПОЛЬЗОВАТЕЛЕМ
   ДЛЯ ЭЛЕМЕНТОВ ОЧЕРЕДИ ОКАЗАЛАСЬ НЕДОСТАТОЧНОЙ, ЭТО ПРИВЕДЕТ К
   НАРУШЕНИЮ ВЫПОЛНЕНИЯ ПРОГРАММЫ. ЭЛЕМЕНТЫ ДЛЯ  ОЧЕРЕДИ  ВВОДА-
   ВЫВОДА НЕЛЬЗЯ РАСПОЛАГАТЬ В ОВЕРЛЕЙНОЙ  ОБЛАСТИ,  А  ТАКЖЕ  В
   ОБЛАСТИ ПАМЯТИ, ПРЕДНАЗНАЧЕННОЙ ДЛЯ СВОПИНГА USR.
        СЛЕДУЮЩИЕ ЗАПРОСЫ ТРЕБУЮТ ДЛЯ СВОЕГО ВЫПОЛНЕНИЯ  ЭЛЕМЕНТ
   ОЧЕРЕДИ:
   .TWAIT     .READW     .WRITE    .SDAT      .SDATW
   .MRKT      .RCVD      .WRITC    .READC     .SDATC
   .READ      .RCVDC     .WRITW    .RCVDW
        ФОРМАТ МАКРОКОМАНДЫ:
        .QSET ADDR,LEN
   ГДЕ ADDR - АДРЕС НАЧАЛА ОБЛАСТИ ДЛЯ НОВЫХ  ЭЛЕМЕНТОВ  ОЧЕРЕДИ
   ВВОДА-ВЫВОДА;
        LEN - ЧИСЛО НОВЫХ ЭЛЕМЕНТОВ ОЧЕРЕДИ ВВОДА-ВЫВОДА.
        ПРИМЕР  ИСПОЛЬЗОВАНИЯ  .QSET  СМ.  В  ОПИСАНИИ   ЗАПРОСА
   .TWAIT.
 
       5.3.36. .RCTRLD
        ЗАПРОС .RCTRLD ОБЕСПЕЧИВАЕТ ГОТОВНОСТЬ СИСТЕМНОГО ТЕРМИ-
   НАЛА К ПЕЧАТИ. КОМАНДА СУ/D ЗАПРЕЩАЕТ ВЫВОД  НА  ТЕРМИНАЛ  ДО
   ТЕХ ПОР, ПОКА НЕ БУДЕТ ПОВТОРНО ПОДАНА  КОМАНДА  СУ/D  ИЛИ  В
   ПРОГРАММЕ НЕ БУДЕТ ВЫПОЛНЕН ЗАПРОС .RCTRLD. Т.Е. ПРОГРАММА, В
   КОТОРОЙ ПРЕДУСМОТРЕНА ПЕЧАТЬ СООБЩЕНИЙ НА  ТЕРМИНАЛЕ,  ДОЛЖНА
   ПРЕДУСМАТРИВАТЬ  ВОЗМОЖНОСТЬ  ПОДАЧИ  ПОЛЬЗОВАТЕЛЕМ   КОМАНДЫ
   СУ/D.
        ФОРМАТ МАКРОКОМАНДЫ:
        .RCTRLD
  ПРИМЕР.
          .TITLE  RCTRLD.MAC
          .MCALL  .RCTRLD,.CSIGEN,.EXIT
  START:  .RCTRLD
          .CSIGEN #DSPACE,#DEXT,#0
 
  ;               .
  ;               .
  ;               .
          JMP     START
 
  DEXT:   .WORD   0,0,0,0
  DSPACE  = .
 
          .END    START
 
       5.3.37. .SPND,.RSUM (РЕЖИМ FB,XM)
        ЗАПРОС .SPND ВРЕМЕННО ПРИОСТАНАВЛИВАЕТ ВЫПОЛНЕНИЕ  ПРОГ-
   РАММЫ ПОЛЬЗОВАТЕЛЯ  И  ДОПУСКАЕТ  РАБОТУ  ТОЛЬКО  ПОДПРОГРАММ
   ЗАВЕРШЕНИЯ (ДЛЯ ОПЕРАЦИЙ ВВОДА-ВЫВОДА И ЗАПРОСОВ .MRKT).
        ФОРМАТ МАКРОКОМАНДЫ:
        .SPND
        ЗАПРОС .RSUM ИЗ ПОДПРОГРАММЫ ЗАВЕРШЕНИЯ  ВНОВЬ  ПЕРЕДАЕТ
   УПРАВЛЕНИЕ ПРОГРАММЕ ПОЛЬЗОВАТЕЛЯ.
 
        ФОРМАТ МАКРОКОМАНДЫ:
        .RSUM
        ПРИМЕЧАНИЯ:
        1. МОНИТОР СОДЕРЖИТ ТАК НАЗЫВАЕМЫЙ СЧЕТЧИК  ПРИОСТАНОВКИ
   ДЛЯ КАЖДОГО ЗАДАНИЯ. ЭТОТ  СЧЕТЧИК  УМЕНЬШАЕТСЯ  ПО  .SPND  И
   НАРАЩИВАЕТСЯ ПО .RSUM. ЗАДАНИЕ БУДЕТ  ФАКТИЧЕСКИ  ПРИОСТАНОВ-
   ЛЕННЫМ, ЕСЛИ СЧЕТЧИК БУДЕТ СОДЕРЖАТЬ ОТРИЦАТЕЛЬНОЕ  ЗНАЧЕНИЕ.
   ПОЭТОМУ, ЕСЛИ .RSUM БУДЕТ ВЫПОЛНЯТЬСЯ ПЕРЕД .SPND,  ПОСЛЕДНИЙ
   ЗАПРОС БУДЕТ ИГНОРИРОВАТЬСЯ.
        2. ПРОГРАММА ДОЛЖНА ИСПОЛЬЗОВАТЬ РАВНОЕ КОЛИЧЕСТВО .SPND
   И .RSUM.
        3. ЗАПРОС .SPND  ИЗ  ПОДПРОГРАММЫ  ЗАВЕРШЕНИЯ  УМЕНЬШАЕТ
   СЧЕТЧИК ПРИОСТАНОВКИ, НО НЕ ПРИОСТАНАВЛИВАЕТ ВЫПОЛНЕНИЕ ПРОГ-
   РАММЫ. ЕСЛИ  В  ПОДПРОГРАММЕ  ЗАВЕРШЕНИЯ  ВЫПОЛНЯЕТСЯ  .SPND,
   ВЫПОЛНЕНИЕ ПРОГРАММЫ ПРОДОЛЖАЕТСЯ ДО ТЕХ ПОР ПОКА  ОНА  ТАКЖЕ
   НЕ ВЫПОЛНИТ .SPND,  ПОСЛЕ  ЧЕГО  ВЫПОЛНЕНИЕ  ПРОГРАММЫ  БУДЕТ
   ПРИОСТАНОВЛЕНО И ДЛЯ ВОЗОБНОВЛЕНИЯ ЕЕ РАБОТЫ ПОТРЕБУЕТСЯ  УЖЕ
   ДВА ЗАПРОСА .RSUM.
        4. .SPND И .RSUM  ПОДОБНО  ДРУИМ  ЗАПРОСАМ,  МОГУТ  БЫТЬ
   ВЫПОЛНЕНЫ В ПОДПРОГРАММАХ ОБРАБОТКИ ПРЕРЫВАНИЙ, КОТОРЫЕ НАПИ-
   САНЫ  ПОЛЬЗОВАТЕЛЕМ,  ЕСЛИ  РАНЕЕ  БЫЛИ  ВЫПОЛНЕНЫ  .INTEN  И
   .SYNCH. ВСЕ ЗАМЕЧАНИЯ, ОТНОСЯЩИЕСЯ К .SPND И .RSUM  ИЗ  ПОДП-
   РОГРАММ ЗАВЕРШЕНИЯ, ИМЕЮТ СИЛУ И ДЛЯ ЭТОГО СЛУЧАЯ.
 
       5.3.38. .SCCA
        ЗАПРОС .SCCA ВЫПОЛНЯЕТ СЛЕДУЮЩИЕ ФУНКЦИИ:
        - БЛОКИРУЕТ ВЫПОЛНЕНИЕ КОМАНДЫ СУ/С;
        - СООБЩАЕТ О ТОМ, ЧТО С ТЕРМИНАЛА БЫЛО ПОДАНО ДВЕ КОМАН-
   ДЫ СУ/С;
        ПО ЗАПРОСУ .SCCA КОМАНДА СУ/С ВОСПРИНИМАЕТСЯ  ПРОГРАММОЙ
   КАК ОБЫЧНАЯ УПРАВЛЯЮЩАЯ КОМАНДА БЕЗ СПЕЦИАЛЬНЫХ ФУНКЦИЙ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .SCCA AREA,ADDR
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 2-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        ADDR - АДРЕС СЛОВА СОСТОЯНИЯ ТЕРМИНАЛА.
        СЛОВО СОСТОЯНИЯ ТЕРМИНАЛА  ПРЕДНАЗНАЧЕНО ДЛЯ  ФИКСИРОВА-
   НИЯ ПОДАЧИ ДВУХ КОМАНД СУ/С. ЕСЛИ В НЕМ УСТАНОВЛЕН 15-Й  РАЗ-
   РЯД, ТО ЭТО ЗНАЧИТ,  ЧТО  С  ТЕРМИНАЛА  БЫЛИ  ПОСЛЕДОВАТЕЛЬНО
   ПОДАНЫ ДВЕ КОМАНДЫ СУ/С. ЭТОТ РАЗРЯД ДОЛЖЕН  ОЧИЩАТЬСЯ  ПРОГ-
   РАММОЙ ПОЛЬЗОВАТЕЛЯ.
        ЕСЛИ АРГУМЕНТ ADDR РАВЕН НУЛЮ В ЗАПРОСЕ  .SCCA,  МОНИТОР
   ВОССТАНАВЛИВАЕТ СИСТЕМНЫЕ ФУНКЦИИ КОМАНДЫ СУ/С.
        ФОРМАТ БЛОКА АРГУМЕНТОВ:
          AREA:   .BYTE   0,35
                  .WORD   ADDR
  ПРИМЕР.
          .TITLE  SCCA.MAC
          .MCALL  .SCCA,.TTYIN,.TTYOUT,.PRINT
          JSW    = 44
ъъъъъ    CLR     (R1)
          .PRINT  #MSG1
 
  1$:     TST     (R1)
          BNE     2$
          .TTYIN
          .TTYOUT
          BV      1$
  2$:     .PRINT  #MSG2
          .SCCA   #AREA,#0
          CR      .
  SCCA:   .BLKW   1
  AREA:   .BLKW   2
 MSG1:   .ASCII  /ПРИМЕР ИСПОЛЬЗОВАНИЯ ЗАПРОСА .SCCA/<
ъъъъъъъъ    CLR     (R1)
          .PRINT  #MSG1
 
 
  1$:     TST     (R1)
          BNE     2$
          .TTYIN
          .TTYOUT
       ИСТЕМНУЮ ДАТУ И ВРЕМЯ.
 
        ФОРМАТ МАКРОКОМАНДЫ:
        .SDTTM AREA,ADDR
   ГДЕ AREA - АДРЕС БЛОКА АРГУМЕНТОВ ЕМТ ИЗ 2-Х СЛОВ;
        ADDR - АДРЕС БЛОКА ИЗ 3-Х СЛОВ, СОДЕРЖАЩЕГО НОВУЮ ДАТУ И
   ВРЕМЯ.
        ФОРМАТ БЛОКА АРГУМЕНТОВ:
          AREA:   .BYTE   0,40
                  .WORD   ADDR
 
        ПЕРВОЕ СЛОВО ТРЕХСЛОВНОГО БЛОКА СОДЕРЖИТ НОВУЮ  ДАТУ  ВО
   ВНУТРЕННЕМ ФОРМАТЕ (СМ.  ЗАПРОС  .DATE).  ЕСЛИ  ПЕРВОЕ  СЛОВО
   СОДЕРЖИТ -1, ТО МОНИТОР ИГНОРИРУЕТ ЕГО. ВТОРОЕ И ТРЕТЬЕ СЛОВА
   СОДЕРЖАТ НОВОЕ ЗНАЧЕНИЕ ВРЕМЕНИ (СТАРШЕГО И МЛАДШЕГО  ПОРЯДКА
   СООТВЕТСТВЕННО). ЕСЛИ  ВТОРОЕ  СЛОВО  СОДЕРЖИТ  ОТРИЦАТЕЛЬНУЮ
   ВЕЛИЧИНУ, ТО МОНИТОР НЕ ИЗМЕНЯЕТ ЗНАЧЕНИЕ ВРЕМЕНИ.
        ИЗМЕНЕНИЯ СИСТЕМНОЙ ДАТЫ ИЛИ ВРЕМЕНИ НЕ ВЛИЯЕТ НА ВЫПОЛ-
   НЕНИЕ ЗАПРОСОВ, ИСПОЛЬЗУЮЩИХ ТАЙМЕР.
  ПРИМЕР.
          .TITLE  SDTTM.MAC
  ;В ЭТОМ ПРИМЕРЕ ПРИВЕДЕНА ПОДПРОГРАММА КОРРЕКЦИИ
  ;ВРЕМЕНИ (НА 1 ЧАС) С УЧЕТОМ ДЕКРЕТНОГО ВРЕМЕНИ.
 
          .MCALL  .SDTTM,.PRINT,.GTIM,.EXIT
          .GLOBL  STD,DALITE
 
  STD:    COM     HR
          NEG     HR+2
 
  DALITE:: .GTIM  #AREA,#TIME     ;ПОЛУЧИТЬ ТЕКУЩЕЕ ВРЕМЯ
          CALL    JADD
          .SDTTM  #AREA,#NEWDT    ;УСТАНОВИТЬ НОВОЕ ВРЕМЯ
          .GTIM   #AREA,#TIME     ;ПОЛУЧИТЬ НОВОЕ ВРЕМЯ
          RETURN
 
  NEWDT:  .WORD   -1              ;ДАТУ НЕ ИЗМЕНЯТЬ
  TIME:   .WORD   0,0
  HR:     .WORD   2               ;1 ЧАС ВО ВНУТРЕННЕМ
          .WORD   137440          ;ФОРМАТЕ
  AREA:   .WORD   0,0
  JADD:
          MOV     #HR,R4
          MOV     #AREA,R3
          MOV     #HR,R1
          MOV     -(R4),R2
          ADD     -(R3),R2
          MOV     -(R4),R5
          ADC     R5
          ADD     -(R3),R5
          MOV     R2,-(R1)
          MOV     R5,-(R1)
          RETURN
          .END
 
       5.3.40. .SETTOP
        ЗАПРОС .SETTOP ПОЗВОЛЯЕТ ПРОГРАММЕ ПОЛЬЗОВАТЕЛЯ  УСТАНО-
   ВИТЬ НОВЫЙ АДРЕС В КАЧЕСТВЕ ВЕРХНЕЙ ГРАНИЦЫ ПРОГРАММЫ.  МОНИ-
   ТОР ОПРЕДЕЛЯЕТ, ЯВЛЯЕТСЯ ЛИ ЭТОТ АДРЕС ДОПУСТИМЫМ И НУЖЕН  ЛИ
   СВОПИНГ USR. НАПРИМЕР,  ЕСЛИ  ЗАПРОС  ОПРЕДЕЛЯЕТ  АДРЕС  НИЖЕ
   НАЧАЛЬНОГО АДРЕСА USR, ТО  СВОПИНГ  USR  НЕ  ТРЕБУЕТСЯ.  ЕСЛИ
   .SETTOP ИЗ ФОНОВОГО ЗАДАНИЯ ОПРЕДЕЛЯЕТ АДРЕС ВЫШЕ  НАЧАЛЬНОГО
   АДРЕСА USR И РАНЕЕ НЕ БЫЛА ВЫПОЛНЕНА КОМАНДА SET USR  NOSWAP,
   ТО НЕОБХОДИМ СВОПИНГ USR.
        ПОСЛЕ ВЫПОЛНЕНИЯ .SETTOP, R0 И ЯЧЕЙКА 50 БУДУТ СОДЕРЖАТЬ
   АДРЕС ПАМЯТИ, ПРЕДОСТАВЛЕННЫЙ МОНИТОРОМ ПРОГРАММЕ ПОЛЬЗОВАТЕ-
   ЛЯ В КАЧЕСТВЕ ВЕРХНЕГО АДРЕСА ПРОГРАММЫ. ЕСЛИ ПРОГРАММА  ЗАП-
   РАШИВАЕТ ПО .SETTOP НЕДОПУСТИМЫЙ АДРЕС ДЛЯ  ДАННОГО  ЗАДАНИЯ,
   МОНИТОР НЕ УДОВЛЕТВОРИТ ЭТО ТРЕБОВАНИЕ, И УСТАНОВИТ ДЛЯ ПРОГ-
   РАММЫ ФАКТИЧЕСКИ ДОПУСТИМУЮ ВЕРХНЮЮ ГРАНИЦУ ПАМЯТИ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .SETTOP ADDR
   ГДЕ ADDR - ЗАПРАШИВАЕМЫЙ АДРЕС ВЕРХНЕЙ ГРАНИЦЫ ПРОГРАММЫ.
        ПРИМЕР ИСПОЛЬЗОВАНИЯ  .SETTOP  СМ.  В  ОПИСАНИИ  ЗАПРОСА
   .LOCK.
 
       5.3.41. .SPCPS (РЕЖИМ FB,ХМ)
        ЗАПРОС .SPCPS ИСПОЛЬЗУЕТСЯ  В  ПОДПРОГРАММАХ  ЗАВЕРШЕНИЯ
   ДЛЯ СОХРАНЕНИЯ СОДЕРЖИМОГО РЕГИСТРОВ РС И PS И ЗАМЕНУ  СОДЕР-
   ЖИМОГО РС НА НОВОЕ ЗНАЧЕНИЕ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .SPCPS AREA,ADDR
   ГДЕ AREA - АДРЕС БЛОКА АРГУМЕНТОВ ЕМТ ИЗ 2-Х СЛОВ;
        ADDR - АДРЕС БЛОКА ИЗ 3-Х СЛОВ, СОДЕРЖАЩЕГО НОВОЕ ЗНАЧЕ-
   НИЕ РС, СТАРОЕ ЗНАЧЕНИЕ РС И СТАРОЕ ЗНАЧЕНИЕ PS СООТВЕТСТВЕН-
   НО В 1-ОМ, 2-ОМ И 3-ЕМ СЛОВАХ.
        МОНИТОР СОХРАНЯЕТ СТАРЫЕ ЗНАЧЕНИЯ PS  И  РС  И  ПЕРЕДАЕТ
   УПРАВЛЕНИЕ ПО АДРЕСУ, КОТОРЫЙ ЯВЛЯЕТСЯ СОДЕРЖИМЫМ 1-ГО СЛОВА.
        ФОРМАТ БЛОКА АРГУМЕНТОВ:
          AREA:   .BYTE   0,41
                  .WORD   ADDR
  ПРИМЕР.
          .TITLE  SPCPS.MAC
  ;ПРИМЕР ИСПОЛЬЗОВАНИЯ ЗАПРОСА .SPCPS.
 
          .MCALL  .READC,.WRITC,.CSIGEN,.PRINT,.SPCPS
          .MCALL  .CLOSE,.WAIT,.SRESET,.EXIT
 
          ERRBYT  = 52
          .ENABL  LSB
 
  START:  .CSIGEN #DSPACE,#DEFEXT ;ВВОД КОМАНДНОЙ СТРОКИ
          CALL    IOXFER          
          .PRINT  #MES
  1$:     DEC     R5
          BR      1$
  FINI:   .CLOSE  #0              ;>0- КОНЕЦ ФАЙЛА
          MOV     #DONE,R0
          BR      EXIT
  WERR:   MOV     #WRERR,R0
          BR      EXIT
  RERR:   MOV     #RDERR,R0
  EXIT:   .PRINT
          .SRESET                 ;УДАЛИТЬ ЗАГРУЖЕННЫЕ
                                  ;ДРАЙВЕРЫ
          .EXIT
 
  WRDONE: .WAIT   #0
          BCS     3$
  IOXFER: .READC  #AREA,#3,,,#6$  ;ЧИТАТЬ БЛОК
          BCC     5$
          TSTB    @#ERRBYT        ;КОНЕЦ ФАЙЛА?
          BEQ     4$              ;ДА
  2$:     MOV     #RERR,SBLOK
          BR      4$
  3$:     MOV     #WERR,SBLOK
  4$:     TSTB    SPCALL
          BNE     5$
          .SPCPS  #AREA,#SBLOK
          INCB    SPCALL
          BCS     7$
  5$:     RETURN
  6$:     .WAIT   #3
          BCS     2$
          .WRITC  #AREA,#0,,,#WRDONE;ЗАПИСАТЬ БЛОК
          BCS     3$
          INC     BLOK
          RETURN
  7$:     .PRINT  #SPERR
          RETURN
 
  AREA:   .WORD   0       ;БЛОК АРГУМЕНТОВ ЕМТ
  BLOK:   .WORD   0       ;НОМЕР БЛОКА
          .WORD   BUFF    ;АДРЕС БУФЕРА
          .WORD   256.    ;СЧЕТЧИК СЛОВ
          .WORD   0       ;АДРЕС ПОДПРОГРАММЫ ЗАВЕРШЕНИЯ
  SBLOK:  .WORD   FINI,0,0
 
  BUFF:   .BLKW   256.
  DEFEXT: .WORD   0,0,0,0
  SPCALL: .BYTE   0
          .NLIST  BEX
  DONE:   .ASCIZ  /КОНЕЦ ПРОГРАММЫ/
  MES:    .ASCIZ  /ВЫПОЛНЕНИЕ ПРОГРАММЫ ПРОДОЛЖАЕТСЯ/
  WRERR:  .ASCIZ  /ОШИБКА .WRITC/
  RDERR:  .ASCIZ  /ОШИБКА .READC/
  SPERR:  .ASCIZ  /ОШИБКА .SPCPS/
          .EVEN
  DSPACE  =.
          
          .END    START
 
       5.3.42. .SFDAT
        ЗАПРОС .SFDAT ПОЗВОЛЯЕТ ПРОГРАММЕ  ПОЛЬЗОВАТЕЛЯ  УСТАНО-
   ВИТЬ ИЛИ ИЗМЕНИТЬ ДАТУ СОЗДАНИЯ УКАЗАННОГО ФАЙЛА  (КАК  ЗАЩИ-
   ЩЕННОГО ТАК И НЕ ЗАЩИЩЕННОГО).
        ФОРМАТ МАКРОКОМАНДЫ:
        .SFDAT AREA,CHAN,DBLK,DATE
   ГДЕ AREA - АДРЕС БЛОКА АРГУМЕНТОВ ЕМТ ИЗ 3-Х СЛОВ;
        CHAN - НОМЕР КАНАЛА;
        DBLK - АДРЕС БЛОКА ИЗ 4-Х СЛОВ, СОДЕРЖАЩЕГО СПЕЦИФИКАЦИЮ
   ФАЙЛА;
        DATE - АДРЕС ЯЧЕЙКИ, СОДЕРЖАЩЕЙ НОВОЕ ЗНАЧЕНИЕ  ДАТЫ  (В
   ФОРМАТЕ RT11); ЕСЛИ АРГУМЕНТ  РАВЕН  НУЛЮ,  ТО  ИСПОЛЬЗУЕТСЯ
   СИСТЕМНАЯ ДАТА.
        ФОРМАТ БЛОКА АРГУМЕНТОВ:
          AREA:   .BYTE   CHAN,42
                  .WORD   DBLK
                  .WORD   DATE
        ПРИМЕР  ИСПОЛЬЗОВАНИЯ  .SFDAT  СМ.  В  ОПИСАНИИ  ЗАПРОСА
   .FPROT.
 
       5.3.43. .SFPA
        ЗАПРОС .SFPA ПОЗВОЛЯЕТ ПОЛЬЗОВАТЕЛЮ, РАБОТАЮЩЕМУ С  ПРО-
   ЦЕССОРОМ ПЛАВАЮЩЕЙ  ЗАПЯТОЙ,  УСТАНОВИТЬ  АДРЕС  ПОДПРОГРАММЫ
   ОБРАБОТКИ ПРЕРЫВАНИЯ ОТ ППЗ. ЕСЛИ АДРЕС ПОДПРОГРАММЫ ОБРАБОТ-
   КИ ПРЕРЫВАНИЯ НЕ ОПРЕДЕЛЕН И ПРОИСХОДИТ  ПРЕРЫВАНИЕ  ОТ  ППЗ,
   МОНИТОР ПЕЧАТАЕТ СООБЩЕНИЕ  ОБ  ОШИБКЕ  И  УДАЛЯЕТ  ПРОГРАММУ
   ПОЛЬЗОВАТЕЛЯ ИЗ ПАМЯТИ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .SFPA AREA,ADDR
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 2-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        ADDR - АДРЕС ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЯ ОТ ППЗ.
        ПО ОКОНЧАНИИ РАБОТЫ ПОДПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЯ ОТ
   ППЗ, НЕОБХОДИМО ПОВТОРИТЬ ЗАПРОС .SFPA, Т.К.  МОНИТОР  ЗАПРЕ-
   ЩАЕТ ОБРАБОТКУ ПРЕРЫВАНИЙ ПОСЛЕ ОБСЛУЖИВАНИЯ ОДНОГО  ИЗ  НИХ.
   ЭТО ДЕЛАЕТСЯ ДЛЯ ТОГО, ЧТОБЫ ИСКЛЮЧИТЬ ВОЗМОЖНОСТЬ ЗАЦИКЛИВА-
   НИЯ ПРОГРАММЫ ПРИ МНОГОКРАТНОМ ПОВТОРЕНИИ ПРЕРЫВАНИЯ ОТ ППЗ.
        ПРИ ИСПОЛЬЗОВАНИИ ППЗ, МОНИТОР  ВЫПОЛНЯЕТ  КОМАНДУ  STST
   -(SP). ПОЭТОМУ, ПЕРЕД КОМАНДОЙ RTI, ПОДПРОГРАММА ПОЛЬЗОВАТЕЛЯ
   ДОЛЖНА УВЕЛИЧИТЬ УКАЗАТЕЛЬ СТЕКА НА ДВА.
        ФОРМАТ БЛОКА АРГУМЕНТОВ:
          AREA:   .BYTE   0,30
                  .WORD   ADDR
 
       5.3.44. .SRESET
        ЗАПРОС .SRESET ВЫПОЛНЯЕТ СЛЕДУЮЩИЕ ФУНКЦИИ:
        1) УДАЛЯЕТ ИЗ ПАМЯТИ ДРАЙВЕРЫ  УСТРОЙСТВ,  КОТОРЫЕ  БЫЛИ
   ЗАГРУЖЕНЫ ПО ЗАПРОСУ .FETCH; ДРАЙВЕРЫ, КОТОРЫЕ БЫЛИ ЗАГРУЖЕНЫ
   ПО КОМАНДЕ LOAD, ОСТАЮТСЯ РЕЗИДЕНТНЫМИ, ТАК ЖЕ КАК И  ДРАЙВЕР
   СИСТЕМНОГО УСТРОЙСТВА;
        2) СТИРАЕТ ОТКРЫТЫЕ В НАСТОЯЩЕЕ ВРЕМЯ ФАЙЛЫ (ФАЙЛЫ, ОТК-
   РЫТЫЕ ПО .ENTER, НИКОГДА НЕ СТАНУТ ПОСТОЯННЫМИ);
        3) ВОССТАНАВЛИВАЕТ ЧИСЛО КАНАЛОВ ВВОДА-ВЫВОДА (16 (ДЕСЯ-
   ТИЧНОЙ)); КАНАЛЫ, ОПРЕДЕЛЕННЫЕ ПО .CDFN, АННУЛИРУЮТСЯ;
        4) ВОССТАНАВЛИВАЕТ ОЧЕРЕДЬ ВВОДА-ВЫВОДА (ПЕРВОНАЧАЛЬНО -
   ОДИН ЭЛЕМЕНТ); QSET ДОЛЖЕН ВЫПОЛНЯТЬСЯ ПОВТОРНО ДЛЯ ОПРЕДЕЛЕ-
   НИЯ ДОПОЛНИТЕЛЬНЫХ ЭЛЕМЕНТОВ ОЧЕРЕДИ;
        5) ОЧИЩАЕТ ОЧЕРЕДЬ ПОДПРОГРАММ ЗАВЕРШЕНИЯ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .SRESET
        ПРИМЕР ИСПОЛЬЗОВАНИЯ  .SRESET  СМ.  В  ОПИСАНИИ  ЗАПРОСА
   .READ.
 
       5.3.45. .SYNCH
        ЗАПРОС .SYNCH ПОЗВОЛЯЕТ В ПОДПРОГРАММЕ ОБРАБОТКИ  ПРЕРЫ-
   ВАНИЯ ИСПОЛЬЗОВАТЬ ПРОГРАММНЫЕ ЗАПРОСЫ. БЕЗ .SYNCH ЗАПРОСЫ ИЗ
   ПОДПРОГРАММЫ ОБРАБОТКИ  ПРЕРЫВАНИЯ  НЕ  БУДУТ  ОБРАБАТЫВАТЬСЯ
   МОНИТОРОМ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .SYNCH AREA[,PIC]
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 7-МИ СЛОВ; ЭТОТ БЛОК НЕОБХОДИМ  ПРИ
   ИСПОЛЬЗОВАНИИ .SYNCH; СОДЕРЖИМОЕ БЛОКА ФОРМИРУЕТСЯ  ПОЛЬЗОВА-
   ТЕЛЕМ (СМ. ТАБЛ.19); PIC - НЕОБЯЗАТЕЛЬНЫЙ  АРГУМЕНТ,  КОТОРЫЙ
   ДАЕТ МАКРОКОМАНДЕ .SYNCH ВОЗМОЖНОСТЬ ОБРАЗОВАНИЯ PIC -  КОДОВ
   ДЛЯ ИСПОЛЬЗОВАНИЯ ДРАЙВЕРАМИ УСТРОЙСТВ.
 
                                                   ТАБЛИЦА 19
    ----------------------------------------------------------
    !   СЛОВО     !                СОДЕРЖИМОЕ                !
    !--------------------------------------------------------!
    !     1       ! ИСПОЛЬЗУЕТСЯ ТОЛЬКО СИСТЕМОЙ; ЕГО СОДЕР- !
    !             ! ЖИМОЕ НЕ ДОЛЖНО ИЗМЕНЯТЬСЯ ПЛЬЗОВАТЕЛЕМ  !
    !     2       ! НОМЕР ТЕКУЩЕГО ЗАДАНИЯ (0 ИЛИ 2); МОЖЕТ  !
    !             ! БЫТЬ ПОЛУЧЕН С ПОМОЩЬЮ ЗАПРОСА .GTJB     !
    !    3,4      ! НЕ ИСПОЛЬЗУЮТСЯ                          !
    !     5       ! АРГУМЕНТ R0; ПРИ УСПЕШНОМ ВЫПОЛНЕНИИ     !
    !             ! .SYNCH РЕГИСТР R0 БУДЕТ СОДЕРЖАТЬ ЭТОТ   !
    !             ! АРГУМЕНТ                                 !
    !     6       ! -1                                       !
    !     7       !  0                                       !
    ----------------------------------------------------------
 
        ПРИМЕЧАНИЕ. МЕЖДУ ВЫПОЛНЕНИЕМ ЗАПРОСОВ .INTEN И .SYNCH
   НЕЛЬЗЯ ВЫПОЛНЯТЬ ОПЕРАЦИИ СО СТЕКОМ.
 
       5.3.46. .TLOCK
        ЗАПРОС .TLOCK МОЖЕТ ИСПОЛЬЗОВАТЬСЯ ПРОГРАММАМИ,  КОТО-
   РЫЕ ВЫПОЛНЯЮТСЯ В РЕЖИМЕ FB, ДЛЯ  ТОГО  ЧТОБЫ  СДЕЛАТЬ  USR
   РЕЗИДЕНТНОЙ, ЕСЛИ ТОЛЬКО USR НЕ ЗАНЯТА ОБСЛУЖИВАНИЕМ ДРУГО-
   ГО ЗАДАНИЯ. ЕСЛИ USR ИСПОЛЬЗУЕТСЯ ДРУГИМ ЗАДАНИЕМ,  ТО  ПРИ
   ВЫПОЛНЕНИИ .TLOCK БУДЕТ УСТАНОВЛЕН С-РАЗРЯД, ЧТО  УКАЗЫВАЕТ
   НА ТО, ЧТО ЗАПРОС НЕ ВЫПОЛНЕН.
        ФОРМАТ МАКРОКОМАНДЫ:
        .TLOCK
  ПРИМЕР.
          .TITLE  TLOCK.MAC
  ;ПРИМЕР ИСПОЛЬЗОВАНИЯ ЗАПРОСА .TLOCK.
          .MCALL  .TLOCK,.UNLOCK,.LOOKUP,.PRINT,.EXIT
  START:  .TLOCK                  ;USR ЗАНЯТА?
          BCS     SUSPND          ;ДА
          .LOOKUP #AREA,#4,#FILE  ;ОТКРЫТЬ ФАЙЛ
          BCS     LKERR
 
          .PRINT  #J1MSG
          .UNLOCK                 ;ОСВОБОДИТЬ USR
          TSTB    J2SW
          BNE     1$
          CALL    JOB2
  1$:     .EXIT
 
  SUSPND: TSTB    J2SW
          BNE     START
          JSR     PC,JOB2
          INC     J2SW
          BR      START
 
  AREA:   .BLKW   5
  FILE:   .RAD50  /DK /
          .RAD50  /FILE  /
          .RAD50  /TMP/
  LKERR:  .PRINT  #LKMSG
          .EXIT
  LKMSG:  .ASCIZ  /ФАЙЛ НЕ НАЙДЕН/
  J1MSG:  .ASCIZ  /ВЫПОЛНЯЕТСЯ ЗАДАНИЕ 1/
  J2MSG:  .ASCIZ  /ВЫПОЛНЯЕТСЯ ЗАДАНИЕ 2/
  J2SW:   .BYTE   0
          .EVEN
  JOB2:   .PRINT  #J2MSG
          RTS     PC
 
          .END    START
 
       5.3.47. .TRPSET
        ЗАПРОС .TRPSET ПОЗВОЛЯЕТ УСТАНОВИТЬ АДРЕС ПОДПРОГРАММЫ
   ОБРАБОТКИ ПРЕРЫВАНИЯ ПО 4-МУ И 10-МУ ВЕКТОРАМ. ЗНАЧЕНИЕ  С-
   РАЗРЯДА НА ВХОДЕ В ПОДПРОГРАММУ УКАЗЫВАЕТ НА ТО, КАКОЕ ПРЕ-
   РЫВАНИЕ ПРОИЗОШЛО: ОЧИЩЕННЫЙ С-РАЗРЯД  -  ПРЕРЫВАНИЕ  ПО  4
   ВЕКТОРУ; УСТАНОВЛЕННЫЙ С-РАЗРЯД - ПО 10 ВЕКТОРУ.  ВЫХОД  ИЗ
   ПОДПРОГРАММЫ ОБРАБОТКИ  ПРЕРЫВАНИЯ  ПОЛЬЗОВАТЕЛЯ  ОСУЩЕСТВ-
   ЛЯЕТСЯ ПО КОМАНДЕ RTI.
        ЕСЛИ ПРИ ВЫПОЛНЕНИИ СТЕКА ПРОИЗОШЛО ПРЕРЫВАНИЕ ПО 4-МУ
   ВЕКТОРУ, ТО ОНО НЕ ОБРАБАТЫВАЕТСЯ ПО .TRPSET И НА ТЕРМИНАЛЕ
   ПЕЧАТАЕТСЯ СООБЩЕНИЕ ?MON-F-STACK OVERFLOW МОНИТОРОМ SJ ИЛИ
   ?MON-F-TRAP TO 4 МОНИТОРОМ FB И XM.
 
        ФОРМАТ МАКРОКОМАНДЫ:
        .TRPSET AREA,ADDR
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 2-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        ADDR - АДРЕС ПОДПРОГРАММЫ ОБРАБОТКИ  ПРЕРЫВАНИЯ;  ЕСЛИ
   ADDR=0, ТО ПРЕДЫДУЩИЙ .TRPSET ОТМЕНЯЕТСЯ.
        ФОРМАТ БЛОКА АРГУМЕНТОВ:
          AREA:   .BYTE   0,3
                  .WORD   ADDR
  ПРИМЕР.
          .TITLE  TRPSET.MAC
          .MCALL  .TRPSET,.PRINT,.EXIT
          DIVZ    =67
  START:  .TRPSET #AREA,#TRPLOC ;ЗАПРЕТИТЬ УДАЛЕНИЕ
                                ;ПРОГРАММЫ
          DIVZ                  ;НЕДОПУСТИМАЯ КОМАНДА
          TST     @#166666      ;НЕСУЩЕСТВУЮЩИЙ АДРЕС
          .EXIT
 
  TRPLOC:                       ;ПОДПРОГРАММА ОБРАБОТКИ
                                ;ПРЕРЫВАНИЙ
          BCS     1$
          .PRINT  #TRP4
          BR      2$
  1$:     .PRINT  #TRP10
          .TRPSET #AREA,#TRPLOC
  2$:     RTI
 
  AREA:   .WORD   0,0
  TRP4:   .ASCIZ  /ПРЕРЫВАНИЕ ПО 4 ВЕКТОРУ/
  TRP10:  .ASCIZ  /ПРЕРЫВАНИЕ ПО 10 ВЕКТОРУ/
          .EVEN
          
          .END    START
 
       5.3.48. .TWAIT
        ЗАПРОС .TWAIT  ПРИОСТАНАВЛИВАЕТ  ВЫПОЛНЕНИЕ  ПРОГРАММЫ
   ПОЛЬЗОВАТЕЛЯ НА УКАЗАННЫЙ ИНТЕРВАЛ ВРЕМЕНИ.  ЗАПРОС  .TWAIT
   ТРЕБУЕТ ДЛЯ СВОЕГО ВЫПОЛНЕНИЯ ЭЛЕМЕНТ ОЧЕРЕДИ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .TWAIT AREA,TIME
   ГДЕ AREA - АДРЕС БЛОКА ИЗ 2-Х СЛОВ АРГУМЕНТОВ ЕМТ;
        TIME - АДРЕС БЛОКА ИЗ 2-Х СЛОВ, КОТОРЫЕ СОДЕРЖАТ ВЕЛИ-
   ЧИНУ ИНТЕРВАЛА  ВРЕМЕНИ  (ПЕРВОЕ  СЛОВО  -  НИЖНЮЮ  ГРАНИЦУ
   ИНТЕРВАЛА, ВТОРОЕ СЛОВО - ВЕРХНЮЮ ГРАНИЦУ ИНТЕРВАЛА).
        ФОРМАТ БЛОКА АРГУМЕНТОВ:
          AREA:   .BYTE   0,24
                  .WORD   TIME
  ПРИМЕР.
          .TITLE  TWAIT.MAC
 
          .MCALL  .TWAIT,.QSET,.PRINT,.EXIT
 
  START:  CALL    TASK
  1$:     .TWAIT  #AREA,#TIME
          BCS     NOQ
          CALL    TASK
          DEC     COUNT
          BNE     1$
          .PRINT  #EXIT
          .EXIT
 
  TASK:
          INC     TCNT
          BIT     #1,TCNT
          BEQ     1$
          .PRINT  #TIK
          RETURN
  1$:     .PRINT  #TAK
          RETURN
 
  NOQ:    .PRINT  #QERR
          .EXIT
  AREA:   .WORD   0,0
  TIME:   .WORD   0,50.*2
  COUNT:  .WORD   7
  TCNT:   .WORD   0
  TIK:    .ASCII  /ТИК - /<200>
  TAK:    .ASCIZ  /ТАК/
  EXIT:   .ASCIZ  /КОНЕЦ ПРОГРАММЫ/
  QERR:   .ASCIZ  /НЕТ ЭЛЕМЕНТА ОЧЕРЕДИ/
          .EVEN
 
          .END    START
 
       5.3.49. .WAIT
        ЗАПРОС .WAIT ПРИОСТАНАВЛИВАЕТ ВЫПОЛНЕНИЕ ПРОГРАММЫ  ДО
   ТЕХ ПОР, ПОКА НЕ ЗАКОНЧИТСЯ ОПЕРАЦИЯ ВВОДА-ВЫВОДА  НА  УКА-
   ЗАННОМ КАНАЛЕ. ПО ЭТОМУ ЗАПРОСУ МОЖНО ПОЛУЧИТЬ ИНФОРМАЦИЮ О
   ПРАВИЛЬНОСТИ ВЫПОЛНЕНИЯ ОПЕРАЦИИ: ЕСЛИ КАНАЛ НЕ ОТКРЫТ  ИЛИ
   ПРОИЗОШЛА АППАРАТНАЯ ОШИБКА, УСТАНАВЛИВАЕТСЯ С-РАЗРЯД.
        В РЕЖИМЕ FB(XM) ЗАПРОС  .WAIT,  ЕСЛИ  ОПЕРАЦИЯ  ВВОДА-
   ВЫВОДА НЕ ЗАВЕРШЕНА ВЫЗЫВАЕТ ЗАДЕРЖКУ ВЫПОЛНЕНИЯ ОДНОГО  ИЗ
   ЗАДАНИЙ И ВЫПОЛНЕНИЕ ДРУГОГО, ЕСЛИ ОНО СУЩЕСТВУЕТ.
        ФОРМАТ МАКРОКОМАНДЫ:
        .WAIT CHAN
        ПРИМЕР ИСПОЛЬЗОВАНИЯ  .WAIT  СМ.  В  ОПИСАНИИ  ЗАПРОСА
   .READ.
 
                          6. СООБЩЕНИЯ
  ИНФОРМАЦИЯ О СООБЩЕНИЯХ ДАНА В [3].
 
                                              ПРИЛОЖЕНИЕ  1
 
                КОДЫ ОШИБОК ПРОГРАММНЫХ ЗАПРОСОВ
        В ТАБЛИЦЕ ПРИВЕДЕНЫ КОДЫ ОШИБОК ПРОГРАММНЫХ ЗАПРОСОВ И
   ПРИЧИНЫ, ВЫЗЫВАЮЩИЕ ЭТИ ОШИБКИ.
 
                                                       ТАБЛИЦА
    -----------------------------------------------------------
    !  ЗАПРОС    !  КОД   !         ПРИЧИНА ОШИБКИ            !
    !            ! ОШИБКИ !                                   !
    !---------------------------------------------------------!
    ! .CDFN      !   0    ! ПОПЫТКА ОПРЕДЕЛИТЬ МЕНЬШЕЕ ЧИСЛО  !
    !            !        ! КАНАЛОВ, ЧЕМ ЕСТЬ В НАЛИЧИИ       !
    ! .CHCOPY    !   0    ! ДРУГОЕ ЗАДАНИЕ НЕ СУЩЕСТВУЕТ ИЛИ  !
    !            !        ! КАНАЛ (OCHAN) НЕ ОТКРЫТ           !
    !            !   1    ! КАНАЛ (CHAN) ЗАНЯТ                !
    ! .CLOSE     !   3    ! ЗАЩИЩЕННЫЙ ФАЙЛ С ТЕМ ЖЕ ИМЕНЕМ   !
    !            !        ! УЖЕ СУЩЕСТВУЕТ                    !
    ! .CMKT      !   0    ! ЗАПРОС С УКАЗАННЫМ ID (ID=0)      !
    !            !        ! НЕ СУЩЕСТВУЕТ                     !
    ! .CNTXSW    !   0    ! В СПИСКЕ АДРЕСОВ УКАЗАН  НЕДОПУС- !
    !            !        ! ТИМЫЙ АДРЕС                       !
    ! .CSIGEN    !   0    ! НЕДОПУСТИМАЯ КОМАНДА              !
    !            !   1    ! УКАЗАННОГО УСТРОЙСТВА НЕТ В       !
    !            !        ! ТАБЛИЦАХ СИСТЕМЫ                  !
    !            !   2    ! ПОПЫТКА ОТКРЫТЬ ЗАЩИЩЕННЫЙ ФАЙЛ,  !
    !            !        ! ИМЕЮЩИЙ ТО ЖЕ ИМЯ                 !
    !            !   3    ! ПОПЫТКА ОТКРЫТЬ ФАЙЛ ПО .ENTER    !
    !            !        ! НЕУДАЧНА ИЗ-ЗА ПЕРЕПОЛНЕНИЯ       !
    !            !        ! СПРАВОЧНИКА УСТРОЙСТВА            !
    !            !   4    ! ВХОДНОЙ ФАЙЛ НЕ НАЙДЕН ПРИ        !
    !            !        ! ВЫПОЛНЕНИИ .LOOKUP                !
    ! .CSISPC    !   0    ! НЕДОПУСТИМАЯ КОМАНДА              !
    !            !   1    ! НЕДОПУСТИМОЕ УСТРОЙСТВО           !
    ! .CSTAT     !   0    ! КАНАЛ НЕ ОТКРЫТ                   !
    ! .DELETE    !   0    ! УКАЗАННЫЙ КАНАЛ ЗАНЯТ             !
    !            !   1    ! ФАЙЛ НЕ НАЙДЕН В СПРАВОЧНИКЕ      !
    !            !        ! УСТРОЙСТВА                        !
    !            !   2    ! НЕДОПУСТИМАЯ ОПЕРАЦИЯ             !
    !            !   3    ! ЗАЩИЩЕННЫЙ ФАЙЛ                   !
    ! .DSTATUS   !   0    ! УСТРОЙСТВО НЕ НАЙДЕНО В ТАБЛИЦАХ  !
    !            !        ! СИСТЕМЫ                           !
    ! .ENTER     !   0    ! УКАЗАННЫЙ КАНАЛ ЗАНЯТ             !
    !            !   1    ! НА УСТРОЙСТВЕ НЕ НАЙДЕНА ОБЛАСТЬ  !
    !            !        ! БОЛЬШАЯ ИЛИ РАВНАЯ М (LEN=М); ИЛИ !
    !            !        ! УСТРОЙСТВО ИЛИ СПРАВОЧНИК УСТРОЙ- !
    !            !        ! СТВА ПЕРЕПОЛНЕН                   !
    !            !   3    ! ЗАЩИЩЕННЫЙ ФАЙЛ С ТЕМ ЖЕ ИМЕНЕМ   !
    !            !        ! УЖЕ СУЩЕСТВУЕТ                    !
    ! .FETCH     !   0    ! НЕДОПУСТИМОЕ ИМЯ УСТРОЙСТВА ИЛИ В !
    !            !        ! СИСТЕМЕ ОТСУТСТВУЕТ ДРАЙВЕР УКА-  !
    !            !        ! ЗАННОГО УСТРОЙСТВА                !
    ! .RELEAS    !   0    ! НЕДОПУСТИМОЕ ИМЯ УСТРОЙСТВА       !
    ! .FPROT     !   0    ! УКАЗАННЫЙ КАНАЛ ЗАНЯТ             !
    !            !   1    ! ФАЙЛ НЕ НАЙДЕН                    !
    !            !   2    ! НЕДОПУСТИМАЯ ОПЕРАЦИЯ             !
    !            !   3    ! НЕДОПУСТИМОЕ ЗНАЧЕНИЕ АРГУМЕНТА   !
    !            !        ! "PROT"                            !
    ! .GTJB      !   0    ! НЕТ ЗАДАНИЯ                       !
    ! .GVAL      !   0    ! УКАЗАННОЕ ЗНАЧЕНИЕ СМЕЩЕНИЯ НАХО- !
    ! .PVAL      !        !                                   !
    !            !        ! ДИТСЯ ВНЕ ОБЛАСТИ RMON            !
    ! .LOOKUP    !   0    ! УКАЗАННЫЙ КАНАЛ ЗАНЯТ. НЕТ ЗАДАНИЯ!
    ! .MRKT      !   0    ! НЕТ СВОБОДНОГО ЭЛЕМЕНТА ОЧЕРЕДИ   !
    ! .MTATCH    !   2    ! НЕСУЩЕСТВУЮЩИЙ ЛНТ                !
    !            !   3    ! НЕДОПУСТИМЫЙ ФУНКЦИОНАЛЬНЫЙ КОД   !
    !            !   4    ! ТЕРМИНАЛ ЛОГИЧЕСКИ СВЯЗАН С ДРУГИМ!
    !            !        ! ЗАДАНИЕМ                          !
    !            !   5    ! НЕДЕЙСТВИТЕЛЬНЫЙ АДРЕС СЛОВА АСИНХ!
    !            !        ! РОННОГО СОСТОЯНИЯ ТЕРМИНАЛА (В РЕ-!
    !            !        ! ЖИМЕ XM)                          !
    ! .MTDTCH    !   1    ! НЕДОПУСТИМЫЙ ЛОГИЧЕСКИЙ НОМЕР ТЕР-!
    !            !        ! МИНАЛА; ТЕРМИНАЛ НЕ СВЯЗАН С ЗАДА-!
    !            !        ! НИЕМ                              !
    !            !   2    ! НЕСУЩЕСТВУЮЩИЙ ЛНТ                !
    !            !   3    ! НЕДОПУСТИМЫЙ ФУНКЦИОНАЛЬНЫЙ КОД   !
    ! .MTGET     !   1    ! НЕДОПУСТИМЫЙ НОМЕР ТЕРМИНАЛА; ТЕР-!
    !            !        ! МИНАЛ НЕ СВЯЗАН С ЗАДАНИЕМ        !
    !            !   2    ! НЕСУЩЕСВУЮЩИЙ ЛНТ                 !
    !            !   3    ! НЕДОПУСТИМЫЙ ФУНКЦИОНАЛЬНЫЙ КОД   !
    !            !   4    ! ТЕРМИНАЛ СВЯЗАН С ДРУГИМ ЗАДАНИЕМ !
    !            !   5    ! НЕДЕЙСТВИТЕЛЬНЫЙ АДРЕС БУФЕРА     !
    !            !        ! АСИНХРОННОГО СОСТОЯНИЯ ТЕРМИНАЛА  !
    ! .MTIN      !   0    ! НЕТ СИМВОЛОВ В БУФЕРЕ ВВОДА       !
    !            !   1    ! НЕДОПУСТИМЫЙ НОМЕР ТЕРМИНАЛА; ТЕР-!
    !            !        ! МИНАЛ НЕ СВЯЗАН С ЗАДАНИЕМ        !
    !            !   2    ! НЕСУЩЕСТВУЮЩИЙ ЛНТ                !
    !            !   3    ! НЕДОПУСТИМЫЙ ФУНКЦИОНАЛЬНЫЙ КОД   !
    !            !   5    ! НЕДЕЙСТВИТЕЛЬНЫЙ АДРЕС БУФЕРА     !
    !            !        ! (В РЕЖИМЕ XM)                     !
    ! .MTOUT     !   0    ! НЕТ СВОБОДНОГО МЕСТА В БУФЕРЕ ВЫ- !
    !            !        ! ВОДА                              !
    !            !   1    ! НЕДОПУСТИМЫЙ НОМЕР ТЕРМИНАЛА, ТЕР-!
    !            !        ! МИНАЛ НЕ СВЯЗАН С ЗАДАНИЕМ        !
    !            !   2    ! НЕСУЩЕСТВУЮЩИЙ ЛНТ                !
    !            !   3    ! НЕДОПУСТИМЫЙ ФУНКЦИОНАЛЬНЫЙ КОД   !
    !            !   5    ! НЕДЕЙСТВИТЕЛЬНЫЙ АДРЕС БУФЕРА     !
    ! .MTPRNT    !   1    ! НЕДОПУСТИМЫЙ НОМЕР ТЕРМИНАЛА; ТЕР-!
    !            !        ! МИНАЛ НЕ СВЯЗАН С ЗАДАНИЕМ        !
    !            !   2    ! НЕСУЩЕСТВУЮЩИЙ ЛНТ                !
    !            !   3    ! НЕДОПУСТИМЫЙ ФУНКЦИОНАЛЬНЫЙ КОД   !
    !            !   5    ! НЕДЕЙСТВИТЕЛЬНЫЙ АДРЕС БУФЕРА     !
    !            !        ! СТРОКИ                            !
    ! .MTRCTD    !   1    ! НЕДОПУСТИМЫЙ НОМЕР ТЕРМИНАЛА; ТЕР-!
    !            !        ! МИНАЛ НЕ СВЯЗАН С ЗАДАНИЕМ        !
    !            !   2    ! НЕСУЩЕСТВУЮЩИЙ ЛНТ                !
    !            !   3    ! НЕДОПУСТИМЫЙ ФУНКЦИОНАЛЬНЫЙ КОД   !
    ! .MTSET     !   1    ! НЕДОПУСТИМЫЙ НОМЕР ТЕРМИНАЛА; ТЕР-!
    !            !        ! МИНАЛ НЕ СВЯЗАН С ЗАДАНИЕМ        !
    !            !   2    ! НЕСУЩЕСТВУЮЩИЙ ЛНТ                !
    !            !   3    ! НЕДОПУСТИМЫЙ ФУНКЦИОНАЛЬНЫЙ КОД   !
    !            !   5    ! НЕДЕЙСТВИТЕЛЬНЫЙ АДРЕС БУФЕРА     !
    ! .MTSTAT    !   3    ! НЕДОПУСТИМЫЙ ФУНКЦИОНАЛЬНЫЙ КОД   !
    !            !   5    ! НЕДЕЙСТВИТЕЛЬНЫЙ АДРЕС БУФЕРА     !
    ! .PROTECT   !   0    ! УКАЗАННЫЙ ВЕКТОР УЖЕ ИСПОЛЬЗУЕТСЯ !
    !            !   1    ! АДРЕС ВЕКТОРА БОЛЬШЕ 474 ИЛИ НЕ   !
    !            !        ! КРАТЕН ЧЕТЫРЕМ                    !
    ! .UNPROTECT !   1    ! АДРЕС ВЕКТОРА БОЛЬШЕ 474 ИЛИ НЕ   !
    !            !        ! КРАТЕН ЧЕТЫРЕМ                    !
    ! .RCVD      !   0    ! ПОПЫТКА ОБРАЩЕНИЯ К НЕСУЩЕСТВУЮЩЕ-!
    ! .RCVDC     !        ! МУ ЗАДАНИЮ                        !
    ! .RCVDW     !        !                                   !
    ! .READ      !   0    ! ПОПЫТКА ЧТЕНИЯ ПОСЛЕ КОНЦА ФАЙЛА  !
    ! .READC     !        !                                   !
    ! .READW     !        !                                   !
    !            !   1    ! АППАРАТНАЯ ОШИБКА НА КАНАЛЕ       !
    !            !   2    ! УКАЗАННЫЙ КАНАЛ НЕ ОТКРЫТ         !
    ! .RENAME    !   0    ! УКАЗАННЫЙ КАНАЛ ЗАНЯТ             !
    !            !   1    ! ФАЙЛ НЕ НАЙДЕН                    !
    !            !   2    ! НЕДОПУСТИМАЯ ОПЕРАЦИЯ             !
    !            !   3    ! ПОПЫТКА ПЕРЕИМЕНОВАНИЯ ЗАЩИШЕННОГО!
    !            !        ! ФАЙЛА                             !
    ! .REOPEN    !   0    ! УКАЗАННЫЙ КАНАЛ ЗАНЯТ             !
    ! .SAVESTATUS!   0    ! УКАЗАННЫЙ КАНАЛ НЕ ОТКРЫТ         !
    !            !   1    ! ФАЙЛ ОТКРЫТ ПО .ENTER ИЛИ НАХОДИТ-!
    !            !        ! СЯ НА МАГНИТНОЙ ЛЕНТЕ, ПОЭТОМУ    !
    !            !        ! .SAVESTATUS ДЛЯ НЕГО НЕДОПУСТИМ   !
    ! .SDAT      !   0    ! ПОПЫТКА ОБРАЩЕНИЯ К НЕСУЩЕСТВУЮЩЕ-!
    ! .SDATC     !        ! МУ ЗАДАНИЮ                        !
    ! .SDATW     !        !                                   !
    ! .SFDAT     !   0    ! КАНАЛ ЗАНЯТ                       !
    !            !        ! ФАЙЛ НЕ НАЙДЕН                    !
    !            !        ! УСТРОЙСТВО НЕФАЙЛОВОЙ СТРУКТУРЫ   !
    ! .SPCPS     !   0    ! ПОПЫТКА ИСПОЛЬЗОВАТЬ .SPCPS В     !
    !            !        ! ГЛАВНОЙ ПРОГРАММЕ (А НЕ В ПОДПРОГ-!
    !            !        ! РАММЕ ЗАВЕРШЕНИЯ)                 !
    !            !   1    ! ПРЕДЫДУЩИЙ .SPCPS НЕ ВЫПОЛНЕН     !
    ! .SPFUN     !   0    ! ПОПЫТКА ЧТЕНИЯ ИЛИ ЗАПИСИ ПОСЛЕ   !
    !            !        ! КОНЦА ФАЙЛА                       !
    !            !   1    ! АППАРАТНАЯ ОШИБКА НА КАНАЛЕ       !
    !            !   2    ! КАНАЛ НЕ ОТКРЫТ                   !
    ! .TLOCK     !   0    ! USR УЖЕ ИСПОЛЬЗУЕТСЯ ДРУГИМ ЗАДА- !
    !            !        ! НИЕМ                              !
    ! .TTYIN     !   0    ! НЕТ СИМВОЛА В БУФЕРЕ ВВОДА        !
    ! .TTINR     !        !                                   !
    ! .TTYOUT    !   0    ! БУФЕР ВЫВОДА ПЕРЕПОЛНЕН           !
    ! .TTOUTR    !        !                                   !
    ! .TWAIT     !   0    ! НЕТ СВОБОДНОГО ЭЛЕМЕНТА ОЧЕРЕДИ   !
    ! .WAIT      !   0    ! УКАЗАННЫЙ КАНАЛ НЕ ОТКРЫТ         !
    !            !   1    ! АППАРАТНАЯ ОШИБКА НА КАНАЛЕ ВО    !
    !            !        ! ВРЕМЯ ВЫПОЛНЕНИЯ ПРЕДЫДУЩЕЙ ОПЕРА-!
    !            !        ! ЦИИ ВВОДА-ВЫВОДА                  !
    ! .WRITE     !   0    ! ПОПЫТКА ЗАПИСИ ПОСЛЕ КОНЦА ФАЙЛА  !
    ! .WRITC     !   1    ! АППАРАТНАЯ ОШИБКА НА КАНАЛЕ       !
    !            !   2    ! КАНАЛ НЕ ОТКРЫТ                   !
    -----------------------------------------------------------
 
         ПРИМЕЧАНИЯ:
         1. ДЛЯ ЗАПРОСА .SYNCH ВОЗВРАТ ПО ОШИБКЕ  ПРОИСХОДИТ  В
    СЛЕДУЮЩИХ СЛУЧАЯХ:
         - НЕ ЗАКОНЧЕНА МАКРОКОМАНДА .SYNCH,  ИСПОЛЬЗУЮЩАЯ  ТОТ
    ЖЕ БЛОК АРГУМЕНТОВ ЕМТ;
         - УКАЗАН НЕДОПУСТИМЫЙ НОМЕР ЗАДАНИЯ;
         - ЕСЛИ ПРОИЗОШЛО УДАЛЕНИЕ ИЛИ ОСТАНОВ ПРОГРАММЫ.
         ПРИ ЭТОМ УПРАВЛЕНИЕ ПЕРЕДАЕТСЯ НА СЛЕДУЮЩУЮ ЗА  .SYNCH
    ЯЧЕЙКУ. ЕСЛИ  МАКРОКОМАНДА  .SYNCH  ВЫПОЛНЕНА  УСПЕШНО,  ТО
    ВОЗВРАТ ПРОИСХОДИТ В СЛЕДУЮЩУЮ ЗА ВОЗВРАТОМ ПО ОШИБКЕ ЯЧЕЙ-
    КУ.
         2. ПРИ ВЫПОЛНЕНИИ ЗАПРОСОВ, НЕ  УКАЗАННЫХ  В  ТАБЛИЦЕ,
    ОШИБОК НЕ ПРОИСХОДИТ.
 
                                                ПРИЛОЖЕНИЕ  2
 
                       СТРУКТУРА БЛОКА CBLK
 
                                                    ТАБЛИЦА
  -----------------------------------------------------------
  ! СЛОВО  ! РАЗРЯД  ! ЗНАЧЕНИЕ !         ОПИСАНИЕ          !
  !---------------------------------------------------------!
  !   1    !    0    !     1    !АППАРАТНАЯ ОШИБКА НА КАНАЛЕ!
  !(СЛОВО  !   1-5   !     N    ! N-ИНДЕКС УСТРОЙСТВА В ТАБ-!
  !СОСТОЯ- !         !          ! ЛИЦАХ МОНИТОРА (ИДЕНТИФИ- !
  !НИЯ КА- !         !          ! ЦИРУЕТ ФИЗИЧЕСКОЕ УСТРОЙ- !
  !НАЛА)   !         !          ! СТВО, КОТОРОЕ СВЯЗАНО С   !
  !        !         !          ! ИСПОЛЬЗУЕМЫМ КАНАЛОМ)     !
  !        !    6    !     1    ! НА КАНАЛЕ ВЫПОЛНЯЕТСЯ     !
  !        !         !          ! ЗАПРОС .RENAME            !
  !        !    7    !     1    ! НА КАНАЛЕ ВЫПОЛНЕН .ENTER;!
  !        !         !          ! СПРАВОЧНИК УСТРОЙСТВА ДОЛ-!
  !        !         !          ! ЖЕН МОДИФИЦИРОВАТЬСЯ ПО   !
  !        !         !          ! ЗАПРОСУ .CLOSE            !
  !        !  8-12   !          ! НОМЕР СЕГМЕНТА СПРАВОЧНИКА!
  !        !         !          ! (1-37(ВОСЬМЕРИЧНОЙ)), В   !
  !        !         !          ! КОТОРОМ НАХОДИТСЯ ЗАПИСЬ О!
  !        !         !          ! ТЕКУЩЕМ ФАЙЛЕ             !
  !        !   13    !     1    ! ОБНАРУЖЕНА МЕТКА КОНЦА ФАЙ!
  !        !         !          ! ЛА (EOF)                  !
  !        !   14    !     -    ! НЕ ИСПОЛЬЗУЕТСЯ           !
  !        !   15    !     1    ! КАНАЛ ЗАНЯТ               !
  !   2    !         !          ! НОМЕР НАЧАЛЬНОГО БЛОКА    !
  !        !         !          ! ФАЙЛА НА ТОМЕ; ЗНАЧЕНИЕ   !
  !        !         !          ! СЛОВА РАВНО НУЛЮ, ЕСЛИ    !
  !        !         !          ! УСТРОЙСТВО ПОСЛЕДОВАТЕЛЬНО!
  !        !         !          ! ГО ДОСТУПА                !
  !   3    !         !          ! ДЛИНА ФАЙЛА В БЛОКАХ      !
  !   4    !         !          ! НЕ ИСПОЛЬЗУЕТСЯ           !
  !   5    !         !          ! ЧЕТНЫЙ БАЙТ - ЧИСЛО НЕЗА- !
  !        !         !          ! ВЕРШЕННЫХ ОПЕРАЦИЙ ВВОДА- !
  !        !         !          ! ВЫВОДА НА КАНАЛЕ; НЕЧЕТНЫЙ!
  !        !         !          ! БАЙТ - НОМЕР ПРИВОДА      !
  !        !         !          ! УСТРОЙСТВА, СВЯЗАННОГО С  !
  !        !         !          ! КАНАЛОМ (ОТ 0 ДО 7)       !
  -----------------------------------------------------------
 
 
                  ПЕРЕЧЕНЬ ССЫЛОЧНЫХ ДОКУМЕНТОВ
 
        1.ОПЕРАЦИОННАЯ СИСТЕМА ФОДОС-2
        ПРОГРАММИРОВАНИЕ ПЕРИФЕРИЙНЫХ УСТРОЙСТВ
        РУКОВОДСТВО СИСТЕМНОГО ПРОГРАММИСТА
        589.7547471.00042-01 32 03

        2.ОПЕРАЦИОННАЯ СИСТЕМА ФОДОС-2
        МОНИТОР РАСШИРЕННОЙ ПАМЯТИ
        РУКОВОДСТВО ПРОГРАММИСТА
        589.7547471.00042-01 33 04

        3.ОПЕРАЦИОННАЯ СИСТЕМА ФОДОС-2
        СООБЩЕНИЯ СИСТЕМЫ
        589.7547471.00042-01 90 03

        4.ОПЕРАЦИОННАЯ СИСТЕМА ФОДОС-2
        ОПИСАНИЕ ПРИМЕНЕНИЯ
        589.7547471.00042-01 31 01