УКНЦ РАФОС SYSMAC

Материал из Emuverse
Версия от 02:25, 7 октября 2015; Nzeemin (обсуждение | вклад) (Новая страница: «{{ДИ}} <pre> УТВЕРЖДЕН ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ СМ ЭВМ ОПЕРАЦИОННАЯ СИСТЕМА С РАЗДЕ…»)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск
Red copyright.png Данный материал защищён авторскими правами!

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




 УТВЕРЖДЕН






   ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ СМ ЭВМ
  ОПЕРАЦИОННАЯ СИСТЕМА С РАЗДЕЛЕНИЕМ ФУНКЦИЙ

    Р А Ф О С

     СИСТЕМНЫЕ БИБЛИОТЕКИ
   СИСТЕМНАЯ МАКРОБИБЛИОТЕКА





   РУКОВОДСТВО ПРОГРАММИСТА
    ТОМ 3  КНИГА 2  ЧАСТЬ 2




    ЛИСТОВ  55
�


   - 2 -




			АННОТАЦИЯ



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

 - МАКРОКОМАНДЫ ДЛЯ РАБОТЫ С ФАЙЛАМИ;

 - МАКРОКОМАНДЫ ДЛЯ ПЕРЕДАЧИ ДАННЫХ;

 - МАКРОКОМАНДЫ ОБЩЕГОО НАЗНАЧЕНИЯ.

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

 СПИСОК СИСТЕМНЫХ МАКРОКОМАНД С КРАТКИМ ОПИСАНИЕМ
ФУНКЦИЙ ПРИВЕДЕН В Т. 2  КН. 6.  Ч. 3.
�

   - 3 -




			СОДЕРЖАНИЕ


 АННОТАЦИЯ       2

1. СИСТЕМНЫЕ МАКРОКОМАНДЫ ОБРАБОТКИ ФАЙЛОВ    4

1.1.  .CHCOPY (ТОЛЬКО ДЛЯ FB- И ХМ-МОНИТОРОВ)   4
1.2.  .CLOSE						 5
1.3.		.DELETE						 5
1.4.		.ENTER						 6
1.5.		.LOOKUP						 8
1.6.		.PURGE						 8
1.7.		.RENAME						 9
1.8.		.REOPEN						 9
1.9.		.SAVESTATUS					10

2.	СИСТЕМНЫЕ МАКРОКОМАНДЫ ПЕРЕДАЧИ ДАННЫХ   12

2.1.  .PRINT						12
2.2.		.RCVD/.RCVDC/.RCVDW (ТОЛЬКО ДЛЯ FB- И
  ХМ-МОНИТОРОВ)     12
2.2.1.    .RCVD						12
2.2.2.		  .RCVDC					13
2.2.3.		  .RCVDW					13
2.3.		.READ/.READC/.READW				14
2.3.1.		  .READ						14
2.3.2.		  .READC					15
2.3.3.		  .READW					15
2.4.		.SDAT/.SDATC/.SDATW				16
2.4.1.		  .SDAT						16
2.4.2.		  .SDATC					16
2.4.3.		  .SDATW					17
2.5.		.SPFUN						18
2.6.		.TTYIN/.TTINR					20
2.7.		.TTYOUT/.TTOUTR					20
2.8.		.WRITE/.WRITC/.WRITW				21
2.8.1.		  .WRITE					22
2.8.2.		  .WRITC					22
2.8.3.		  .WRITW					23

3.	СИСТЕМНЫЕ МАКРОКОМАНДЫ ОБЩЕГО НАЗНАЧЕНИЯ  24

3.1.  .CDFN						24
3.2.		.CHAIN						25
3.3.		.CMKT						26
3.4.		.CNFCF						26
3.5.		.CNTXSW (ТОЛЬК ДЛЯ FB-И ХМ-МОНИТОРОВ)  27
3.6.  .CSIGEN						28
3.7.		.CSISPC						29
3.7.1.		  ИНФООРМАЦИЯ О КЛЮЧАХ    30
�


3.8.  .CSTAT (ТОЛЬКО ДЛЯ FB- И ХМ-МОНИТОРОВ)  31
3.9.  .CTRLT						31
3.10.		.DATE						32
3.11.		.DBLK						33
3.12.		.DEVICE (ТОЛЬКО ДЛЯ FB- И ХМ-МОНИТОРОВ)  33
3.13.  .DIR						34
3.14.		.DSTATUS					34
3.15.		.EXIT						34
3.16.		.PETSH						35
3.17.		.GTIM						37
3.18.		.GTJB						37
3.19.		.GTLIN						38
3.20.		.GVAL						38
3.21.		.HERR						39
3.22.		.PRESET						39
3.23.		.INTEN						39
3.24.		.JSWDF						40
3.25.		.LOCK						40
3.26.		.MPPS						40
3.27.		.MRKT						41
3.28.		.MTPS						42
3.29.		.MWAIT (ТОЛЬКО ДЛЯ FB-И ХМ-МОНИТОРОВ)  42
3.30.  .POP						43
3.31.		.PROTECT (ТОЛЬКОО ДЛЯ FB-И ХМ-МОНИТОРОВ) 43
3.32.  .PUSH						43
3.33.		.QSET						44
3.34.		.RCTRLO						44
3.35.		.RELEAS						45
3.36.		.ROFDF						45
3.37.		.RSUM (ТОЛЬКО ДЛЯ FB-И ХМ-МОНИТОРОВ)  45
3.38.  .SCCA						46
3.39.		.SCMDF						46
3.40.		.SERR						47
3.41.		.SETTOP						48
3.42.		.SFPA						48
3.43.		.SPND (ТОЛЬКО ДЛЯ FB-И ХМ-МОНИТОРОВ)  49
3.44.		.SRESET						50
3.45.		.SYNCN						50
3.46.		.TLOCK (ТОЛЬКО ДЛЯ FX-И ХМ-МОНИТОРОВ)  51
3.47.  .TRPSET						52
3.48.		.TWAIT						52
3.49.		.UNLOCK						53
3.50.		.UNPROTECT (ТОЛЬКО ДЛЯ FX-И ХМ-МОНИТОРОВ) 53
3.51.		.USBDF						54
3.52.		.WAIT						54
�

			- 4 -

	1. СИСТЕМНЫЕ МАКРОКОМАНДЫ ОБРАБОТКИ ФАЙЛОВ


 1.1. .CHCOPY (ТОЛЬКО ДЛЯ FB- И МХ- МОНИТОРОВ)


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

                    .CHCOPY     AREA,CHAN,OCHAN
ГДЕ
AREA    - ОБЛАСТЬ ИЗ ДВУХ СЛОВ ДЛЯ АРГУМЕНТОВ ЕМТ;
CHAN    - КАНАЛ, КОТОРЫЙ БУДЕТ ИСПОЛЬЗОВАТЬСЯ ПРОГРАММОЙ
          ДЛЯ СЧИТЫВАНИЯ ДАННЫХ;
OCHAN   - НОМЕР КАНАЛА В ДРУГОЙ ПРОГРАММЕ, КОТОРЫЙ БУДЕТ
          КОПИРОВАТЬСЯ.

 ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:
                    !------------!-----------!
R0  =>  AREA        !    13      !   CHAN    !
                    !------------!-----------!
                    !          OCHAN         !
                    !------------------------!

	ЕСЛИ КАНАЛ OCHAN В ОДНОЙ ПРОГРАММЕ БЫЛ ОТКРЫТ
ПОСРЕДСТВОМ МАКРОКОМАНДЫ .ENTER ПРИ СОЗДАНИИ ФАЙЛА FILE1,
ТО ПОСЛЕ ВЫПОЛНЕНИЯ МАКРОКОМАНДЫ .CHCOPY В ДРУГОЙ
ПРОГРАММЕ КАНАЛ CHAN БУДЕТ СВЯЗАН С ФАЙЛОМ FILE1.
        ЕСЛИ В ЭТОМ СЛУЧАЕ ВТОРАЯ ПРОГРАММА ВЫПОЛНИТ
МАКРОКОМАНДУ .CLOSE, TO FILE1 НЕ СТАНЕТ ПОСТОЯННЫМ
(ОСТАНЕТСЯ ВРЕМЕННЫМ). ДЛЯ ТО;ГО, ЧТОБЫ ФАЙЛ СТАЛ
ПОСТОЯННЫМ, ПЕРВАЯ ПРОГРАММА ТОЖЕ ДОЛЖНА ВЫПОЛНИТЬ
МАКРОКОМАНДУ .CLOSE.
	МАКРОКОМАНДА .CHCOPY ДОПУСТИМА ТОЛЬКО ДЛЯ УСТРОЙСТВ
�


С КАТАЛОГОВОЙ ОРГАНИЗАЦИЕЙ; ПРИ ИСПОЛЬЗОВАНИИ ДРУГИХ
УСТРОЙСТВ ОНА ИГНОРИРУЕТСЯ.
 П_P_И_M_E_Ч_A_H_И_E. ЧТОБЫ ЗАКРЫТЬ КАНАЛ, ОТКРЫТЫЙ С
ПОМОЩЬЮ .CHCOPY, НУЖНО ПРИМЕНИТЬ МАКРОКОМАНДЫ .CLOSE ЛИБО
.PURGE.
ОШИБКИ:
        КОД                 ПОЯСНЕНИЕ
         0          НЕТ ДРУГОЙ ПРОГРАММЫ, КАНАЛОВ
                    ОПРЕДЕЛЕНО НЕДОСТАТОЧНО ИЛИ УКАЗАННЫЙ
                    КАНАЛ (OCHAN) НЕ ОТКРЫТ;

         1          КАНАЛ CHAN УЖЕ ОТКРЫТ.

ПРИМЕР:
    В ОПЕРАТИВНОЙ ПРОГРАММЕ КАНАЛ 1 ОТКРЫТ ДЛЯ ФАЙЛА
PRINT.SAV. В ФОНОВОЙ ПРОГРАММЕ МАКРОКОМАНДА .CHCOPY
КОПИРУЕТ ЭТОТ ФАЙЛ ПО КАНАЛУ 0, А ЗАТЕМ ФАЙЛ СЧИТЫВАЕТСЯ
В ОБЛАСТЬ BUFF И РАСПЕЧАТЫВАЕТСЯ НА СИСТЕМНЫЙ ТЕРМИНАЛ,
СКОПИРОВАТЬ ЭТОТ ФАЙЛ ПО КАНАЛУ 2 НЕЛЬЗЯ, Т.К. ЭТОТ КАНАЛ
БЫЛ ОТКРЫТ РАНЕЕ.

ПРОГРАММА, РАБОТАЮЩАЯ В ФОНОВОМ РАЗДЕЛЕ:
        .MCALL  .PRINT,.EXIT,.LOOKUP,.CHCOPY,.SDATW
        .MCALL  .PURGE,.READW
ST:     .PURGE  #0                 ;ОЧИСТИТЬ КАКНАЛ 0
        .CHCOPY #AREA,,#0,#1       ;СКОПИРОВАТЬ ФАЙЛ
                                   ;С КАНАЛА 0 ПО КАНАЛУ 1
         BCS    NCH
        .READW  #AREA,#0,#BUFF,#25,#0,  ;ДОЧИТАТЬ ФАЙЛ
         BCS    NRE
        .PRINT  #BUFF              ;РАСПЕЧАТАТЬ ФАЙЛ
        .LOOKUP #AREA,#2,#FILE1    ;ОТКРЫТЬ ФАЙЛ
                                   ;ПО КАНАЛУ 2
         BCS    NLO
        .CHCOPY #AREA,#2,#1        ;СКОПИРОВАТЬ ФАЙЛ
                                   ;С КАНАЛА 1 ПО КАНАЛУ 2
         BCS    NCH
        .PRINT  #MSG1
        .SDATW  #AREA,#MSG,#COUNT  ;ПЕРЕДАТЬ СООБЩЕНИЕ В
                                   ;ОПЕРАТИВНУЮ ПРОГРАММУ
         BCS    NSD
        .EXIT
NSD:    .PRINT  #NOS
        .EXIT
NSH:    .PRINT  #NOCH
        .EXIT
NRE:    .PRINT  #NORE
        .EXIT
NLO:    .PRINT  #NOLO
        .EXIT
NOS:    .ASCIZ  /НЕТ ЗАДАНИЯ/

�


                        - 5 -

NOCH:   .ASCIZ  /ОШИБКА .CHCOPY/
NORE:   .ASCIZ  /ОШИБКА .READ/
NOLO:   .ASCIZ  /ОШИБКА .LOOKUP/
MSG:    .ASCIZ  /ТИК-ТОК/           ;ТЕКСТ ДЛЯ ОПЕРАТИВНОЙ
                                    ;ПРОГРАММЫ
COUNT = .-MSG
MSG1:	.ASCIZ  /КАНАЛ ЗАНЯТ/
        .ЕЖЕН
АРЕА:   .БЛКВ   10
FILE1:  .RAD50  /SY PRINT SAV/      ;ИМЯ УСТРОЙСТВА И ФАЙЛА
BUFF:   .BLKW   25
        .END    ST

ПРОГРАММА, РАБОТАЮЩАЯ В ОПЕРАТИВНОМ РАЗДЕЛЕ:

        .MCALL  .LOOKUP,.RCVDW,.EXIT,.PRINT
START1: .LOOKUP #AREA,#1,#FILE      ;ОТКРЫТЬ ФАЙЛ ПО КАНАЛУ 1
         BCS    NLOO
        .RCVDW  #AREA,#TEXT,#20     ;ПРИНЯТЬ СТРОКУ
         BCS    NRS
        .PRINT  #TEXT+2             ;ПЕЧАТЬ ПОЛУЧЕННОГО СООБЩЕНИЯ
        .EXIT
NRC:    .PRINT  #MSG                ;ОШИБКА .RCVDW
        .EXIT
NLOO:   .PRINT  #MSG1               ;ОШИБКА .LOOKUP
        .EXIT
FILE:   .RAD50  /SY/
        .RAD50  /PRINT/
        .RAD50  /SAV/
AREA:   .BLKW   10
TEXT:   .BLKW   20
MSG:    .ASCIZ  /НЕТ ЗАДАНИЯ/
MSG1:   .ASCIZ   /ОШИБКА LOOKUP/
        .EVEN
        .END    START1

                        1.2. .CLOSE


        СИСТЕМНАЯ МАКРОКОМАНДА .CLOSE ЗАВЕРШАЕТ РАБОТУ С
УКАЗАННЫМ КАНАЛОМ (ЗАКРЫВАЕТ КАНАЛ) И ТЕМ САМЫМ
ОСВОБОЖДАЕТ ЕГО ДЛЯ ДРУГИХ ОПЕРАЦИЙ.
        ФОРМАТ МАКРОКОМАНДЫ:
                        .CLOSE  CHAR
ГДЕ
CHAN - НОМЕР КАНАЛА, КОТОРЫЙ НЕОБХОДИМО ЗАКРЫТЬ.
�


        ФОРМАТ РЕГИСТРА RO:

                         !-------!--------!
RO =>                    !   6   !  CHAN  !
                         !-------!--------!

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

ОШИБКИ: ОТСУТСТВУЮТ.

П_P_И_М_Е_Ч_A_H_И_E. СЛЕДУЕТ ПОМНИТЬ, ЧТО ПРИ
ОТСУТСТВИИ ДРАЙВЕРА СООТВЕТСТВУЮЩЕГО УСТРОЙСТВА В ПАМЯТИ,
ВОЗНИКАЕТ ОШИБКА МОНИТОРА.

ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .SPFUN.


                        1.3. .DELETE

        МАКРОКОМАНДА .DELETE ИСКЛЮЧАЕТ ИМЯ ФАЙЛА С
УКАЗАННОГО УСТРОЙСТВА И В КАТАЛОГЕ ОСТАЕТСЯ ПУСТАЯ ЗАПИСЬ
<UNUSED> ТОГО ЖЕ РАЗМЕРА. ЭТА МАКРОКОМАНДА НЕДОПУСТИМА
ДЛЯ МЛ.
        ФОРМАТ МАКРОКОМАНДЫ:
                        .DELETE AREA,CHAN,DBLK,SEGNUM
ГДЕ
�


                            - 6 -


AREA    - БЛОК АРГУМЕНТОВ ЕМТ ИЗ 3-Х СЛОВ;
CHAN    - НОМЕР КАНАЛА;
DBLK    - БЛОК УСТРОЙСТВА (СМ. Т.3 КН.2 Ч.1);
SEGNUM  - НОМЕР ФАЙЛА ПРИ ОПЕРАЦИЯХ С КАССЕТАМИ, ЕСЛИ ЭТОТ
          АРГУМЕНТ ПРОПУЩЕН, ЕМУ ПРИСВАИВАЕТСЯ ЗНАЧЕНИЕ 0.
        ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:

                        !-------!--------!
RO =>   AREA:           !   0   !  CHAN  !
                        !-------!--------!
                        !     DBLK       !
                        !----------------!
                        !    SEGNUM      !
                        !----------------!

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

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

ОШИБКИ:
        КОД             ПОЯСНЕНИЕ

         0      КАНАЛ ЗАНЯТ;
         1      ФАЙЛ В КАТАЛОГЕ УСТРОЙСТВА НЕ НАЙДЕН;
         2      НЕДОПУСТИМАЯ ОПЕРАЦИЯ
                ДЛЯ ДАННОГО УСТРОЙСТВА.

ПРИМЕР:
        .MCALL  .LOOKUP,.EXIT,.SRESET,.CSISPC
        .MCALL  .DELETE,.PRINT
         ERRWD = 52
ST:     .DELETE #AREA,#0,#FILE      ;УДАЛИТЬ ФАЙЛ ПО
                                    ;КАНАЛУ 0
         BCC    DE1
         JMP    NDE
DE1:    .PRINT  #MSG
        .LOOKUP #AREA,#3,#FILE1     ;ОТКРЫТЬ ФАЙЛ ПО
                                    ;КАНАЛУ 3
         BCS    NLO
        .PRINT #MSG1
�


        .DELETE #AREA,#3,#FILE1     ;УДАЛИТЬ ЕГО
         BCS    NDE1
        .PRINT  #MSG2
DE2:    .DELETE #AREA,#4,#FILE2     ;УДАЛИТЬ ФАЙЛ ПО
                                    ;КАНАЛУ 4
         BCS    NDE1
        .PRINT  #MSG3
DE3:    .LOOKUP #AREA,#4,#FILE2
         BCS    NLO
        .PRINT #MSG1
        .EXIT
AREA:   .BLKW   10
FILE:   .RAD50  /SY/
        .RAD50  /SYST/
        .RAD50  /MAC/
FILE1:  .RAD50  /SY ABC/
FILE2:  .RAD50  /SY DEF MAC/
NLO:    .PRINT  #NOLO
        .EXIT
NDE:    .PRINT  #NODE
        .EXIT
NDE1:   .TSTB   @#ERRWD             ;ОПРЕДЕЛЕНИЕ КОДА ОШИБКИ
         BNE    NDE
        .PRINT  #NODE1
         JMP    DE2
MSG3:   .ASCIZ  /BAD/
NODE:   .ASCIZ  /ФАЙЛ НЕ НАЙДЕН/
MSG:    .ASCIZ  /ФАЙЛ SYST.МАС УДАЛЕН/
МSG1:   .ASCIZ  /КАНАЛ ОТКРЫТ/
NOLO:   .ASCIZ  /ОШИБКА LOOKUP/
NODE1:  .ASCIZ   /КАНАЛ ЗАНЯТ/
MSG2:   .ASCIZ  /ФАЙЛ АБС УДАЛЕН/
        .EVEN
        .END    ST


                        1.4. .ENTER


        МАКРОКОМАНДА .ENTER СОЗДАЕТ ВРЕМЕННЫЙ ФАЙЛ С
УКАЗАННЫМ ИМЕНЕМ НА ЗАДАННОМ УСТРОЙСТВЕ. УКАЗАННЫЙ НОМЕР
КАНАЛА СВЯЗЫВАЕТСЯ С ФАЙЛОМ.
        ФАЙЛ СТАНОВИТСЯ ПОСТОЯННЫМ ТОЛЬКО ПОСЛЕ ВЫПОЛНЕНИЯ
МАКРОКОМАНДЫ .CLOSE. ЕСЛИ СУЩЕСТВОВАЛ ПОСТОЯННЫЙ ФАЙЛ С
ТЕМ ЖЕ ИМЕНЕМ, ТО ОН ИСКЛЮЧАЕТСЯ, А ЭТО ИМЯ ПОЛУАЕТ
ВНОВЬ СОЗДАННЫЙ ФАЙЛ. ФАКТИЕСКАЯ ДЛИНА ФАЙЛА
ОПРЕДЕЛЯЕТСЯ ПРИ ВЫПОЛНЕНИИ .CLOSE.
        ПОСЛЕ ВЫПОЛНЕНИЯ МАКРОКОМАНДЫ .ENTER RO СОДЕРЖИТ
ФАКТИЕСКИЙ РАЗМЕР ОБЛАСТИ НОСИТЕЛЯ, ДОСТУПНОЙ ДЛЯ ФАЙЛА.
ЕСЛИ УСТРОЙСТВО ЯВЛЯЕТСЯ БЕСКАТАЛОГОВЫМ, ТО RO СОДЕРЖИТ
0.
        ФОРМАТ МАКРОКОМАНДЫ:
                        .ENTER  AREA,CHAN,DBLK,LEN,SEGNUM
�


                        - 7 -


ГДЕ
AREA    - АДРЕС БЛОКА АРГУМЕНТОВ ЕМТ ИЗ ЧЕТЫРЕХ СЛОВ;
CHAN    - НОМЕР КАНАЛА;
DBLK    - БЛОК УСТРОЙСТВА (СМ. Т.3 КН.2 Ч.1);
LEN     - РАЗМЕР ФАЙЛА, КОТОРЫЙ МОЖЕТ ПРИНИМАТЬ СЛЕДУЮЩИЕ
          ЗНАЧЕНИЯ:
    0   - ПРЕДОСТАВЛЯЕТСЯ 1/2 НАИБОЛЬШЕЙ ПУСТОЙ ОБЛАСТИ,
            ЛИБО ВТОРАЯ ПО ВЕЛИЧИНЕ ПУСТАЯ ОБЛАСТЬ ЦЕЛИКОМ;
    М   - ФАЙЛ, СОСТОИТ ИЗ М БЛОКОВ; ВЕЛИЧИНА М
            УКАЗЫВАЕТСЯ ПОЛЬЗОВАТЕЛЕМ;
   -1   - НАИБОЛЬШАЯ ПУСТАЯ ОБЛАСТЬ НА УСТРОЙСТВЕ;
SEGNUM  - ПРИ РАБОТЕ С КАССЕТАМИ ОЗНАЧАЕТ НОМЕР ФАЙЛА;
          ЕСЛИ ОН ОПУЩЕН, ПРИНИМАЕТСЯ НУЛЕВОЕ ЗНАЧЕНИЕ;
          ПРИ РАБОТЕ С МАГНИТНЫМИ ЛЕНТАМИ ЭТОТ АРГЕМЕНТ
          МОЖЕТ ПРИНИМАТЬ СЛЕДУЮЩИЕ ЗНАЧЕНИЯ:
    0   - ПЕРЕМОТКА МАГНИТНОЙ ЛЕНТЫ ОТ НАЧАЛА ВПЕРЕД,
          ДО ТЕХ ПОР, ПОКА НЕ БУДЕТ НАЙДЕНО ИМЯ ФАЙЛА
          ИЛИ ПОКА НЕ БУДЕТ ОБНАРУЖЕНА МЕТКА ЛОГИЕСКОГО
          КОНЦА МАГНИТНОЙ ЛЕНТЫ (LEOT);
    N   - ПОЗИЦИОНИРОВАНИЕ МАГНИТНОЙ ЛЕНТЫ НА НААЛО ФАЙЛА
          С ПОРЯДКОВЫМ НОМЕРОМ N;
          АЛГОРИТМ ПОЗИЦИОНИРОВАНИЯ: ЕСЛИ N БОЛЬШЕ,
          ЧЕМ К (НОМЕР ФАЙЛА, НА КОТОРОМ УСТАНОВЛЕНА
          ЛЕНТА В ТЕКУЩИЙ МОМЕНТ), ТО ПОИСК ПРОИЗВОДИТСЯ
          ОТ ЭТОГО ПОЛОЖЕНИЯ К LEOT; ЕСЛИ N МЕНЬШЕ К,
          ТО ПРОИЗОЙДЕТ ПЕРЕМОТКА ЛЕНТЫ НА НААЛО, А ЗАТЕМ
          БУДЕТ ВЫПОЛНЯТЬСЯ ПОИСК; В СЛУЧАЕ,ЕСЛИ N ЛИШЬ
          НА ЕДИНИЦУ МЕНЬШЕ К, ТО ПРОИСХОДИТ ОБРАТНАЯ
          ПЕРЕМОТКА НА НААЛО ЭТОГО (N-ГО) ФАЙЛА;
   -1   - ПЕРЕМОТКА ДО МЕТКИ LEOT И ОТКРЫТИЕ ФАЙЛА;
   -2   - ПЕРЕМОТКА МАГНИТНОЙ ЛЕНТЫ НА НАЧАЛО И
          ПРОДВИЖЕНИЕ ВПЕРЕД ДО ТЕХ ПОР, ПОКА НЕ БУДЕТ
          НАЙДЕНО ИМЯ ФАЙЛА ИЛИ МЕТКА LEOT.
�


        ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:

                        !-------!--------!
RO =>   AREA:           !   2   !  CHAN  !
                        !-------!--------!
                        !     DBLK       !
                        !----------------!
                        !      LEN       !
                        !----------------!
                        !    SEGNUM      !
                        !----------------!

        ПОСЛЕ ЗАВЕРШЕНИЯ МАКРОКОМАНДЫ .ENTER РЕГИСТР RO
СОДЕРЖИТ ДЛИНУ ЗАРЕЗЕРВИРОВАННОЙ ОБЛАСТИ НА НОСИТЕЛЕ В
БЛОКАХ ИЛИ 0 ДЛЯ УСТРОЙСТВ БЕСКАТАЛОГОВОЙ ОРГАНИЗАЦИИ.
        ПРИМЕНЯЯ НУЛЕВОЕ ЗНАЧЕНИЕ АРГУМЕНТА LEN В
МАКРОКОМАНДЕ .ENTER НЕОБХОДИМО ИМЕТЬ ВВИДУ, ЧТО
НАЗНАЧАЕТСЯ ПОЛОВИНА НАИБОЛЬШЕЙ ОБЛАСТИ, Т.Е., ЕСЛИ НА
УСТРОЙСТВЕ НАИБОЛЬШАЯ СВОБОДНАЯ ОБЛАСТЬ СОСТАВЛЯЕТ 200
БЛОКОВ, А ДЛИНА ФАЙЛА, ПОДЛЕЖАЩЕГО ПЕРЕДАЧЕ, 150 БЛОКОВ,
ТО ПЕРЕДАЧА С АРГУМЕНТОМ LEN=0 НЕВОЗМОЖНА, Т.К.
МАКРОКОМАНДА .ENTER ПРЕДОСТАВИТ ТОЛЬКО 100 БЛОКОВ. ВО
ВРЕМЯ ПЕРЕДАЧИ ПОЯВИТСЯ ОШИБКА ВВОДА/ВЫВОДА. ОДНАКО, ЕСЛИ
С ПОМОЩЬЮ АРГУМЕНТА М=150 ЗАТРЕБОВАНА ДЛИНА В 150 БЛОКОВ,
ТО ПЕРЕДАЧА ПРОЙДЕТ БЕЗ ОШИБОК. ЗА ЭТИМ ОБСТОЯТЕЛЬСТВОМ
ОСОБЕННО НЕОБХОДИМО СЛЕДИТЬ ПРИ КОПИРОВАНИИ НА
УСТРОЙСТВА, ИМЕЮЩИЕ МАЛО СВОБОДНОГО МЕСТА, НАПРИМЕР, DX:.

        П_R_И_M_E_Ч_A_H_И_E. МАКРОКОМАНДА .ENTER ТРЕБУЕТ,
ЧТОБЫ ДРАЙВЕР УСТРОЙСТВА НАХОДИЛСЯ В ПАМЯТИ ПЕРЕД ЕЕ
ВЫПОЛНЕНИЕМ. ПОЭТОМУ НЕОДХОДИМО ПЕРЕД .ENTER, НАПРИМЕР,
ВЫПОЛНИТЬ МАКРОКОМАНДУ .FETCH.

ОШИБКИ:

        КОД             ПОЯСНЕНИЕ
         0      КАНАЛ ЗАНЯТ;
         1      ПРИ ИСПОЛЬЗОВАНИИ МАКРОКОМАНДЫ С
                ФИКСИРОВАННОЙ ДЛИНОЙ LEN НЕ НАЙДЕНА
                ОБЛАСТЬ, БОЛЬШАЯ ИЛИ РАВНАЯ М, ИЛИ
                КАТАЛОГ УСТРОЙСТВА ОКАЗАЛСЯ ЗАПОЛНЕННЫМ.

ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .WRITE.
�


                        - 8 -

                1.5     .LOOKUP

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

    .CLOSE
    .SAVESTATUS
    .SRESET
    .HRESET
    .PURGE
    .CSIGEN ( ОСВОБОДИТ ТОЛЬК КАНАЛЫ С НОМЕРАМИ 0 - 10 )

    ФОРМАТ МАКРОКОМАНДЫ :
    .LOOKUP AREA,CHAN,DBLK,SEGNUM

    ГДЕ
    AREA    -   ОБЛАСТЬ ИЗ ТРЕХ СЛОВ БЛОКА АРГУМЕНТОВ EMT;
    CHAN    -   НОМЕР КАНАЛА;
    DBLK    -   БЛОК УСТРОЙСТВА ( СМ. Т.3 КН.2 Ч.1 );
    SEGNUM
            -   ПРИ ОПЕРАЦИЯХ С КАССЕТАМИ ОЗНАЧАЕТ НОМЕР ФАЙЛА;
                ЕСЛИ АРГУМЕНТ ПРОПУЩЕН , ТО ЕГО ЗНАЧЕНИЕ
                ПРЕДОПЛАГАЕТСЯ РАВНЫМ 0 ; ПРИ ОПЕРАЦИЯХ С
                МАГНИТНЫМИ ЛЕНТАМИ АРГУМЕНТ ОЗНАЧАЕТ СЛЕДУЮЩЕЕ ;
        -1  -   ПОИСК ИМЕНИ ФАЙЛА ИЗ ТЕКУЩЕГО ПОЛОЖЕНИЯ ; ЕСЛИ
                ОНО В ДАННЫЙ МОМЕНТ НЕ ОПРЕДЕЛЕНО , ТО ДРАЙВЕР
                БУДЕТ ВЫПОЛНЯТЬ АЛГОРИТМ ПОЗИЦИОНИРОВАНИЯ ,
                КОТОРЫЙ ВЫЗОВЕТ ОБРАТНУЮ ПЕРЕМОТКУ , ДО ТЕХ ПОР ,
                ПОКА НЕ БУДЕТ НАЙДЕНА ПРЕДЫДУЩАЯ МЕТКА EOF ;

        0   -   ПРЯМАЯ ПЕРЕМОТКА МАГНИТНОЙ ЛЕНТЫ ОТ НАЧАЛА
                ВПЕРЕД ДО ТЕХ ПОР , ПОКА НЕ БУДЕТ НАЙДЕНО
                ИМЯ ФАЙЛА ИЛИ LEOT ;

        N   -   ЛЮБОЕ ПООЛОЖИТЕЛЬНОЕ ЧИСЛО ; ОНО ОЗНАЧАЕТ
                УСТАНОВКУ ЛЕНТЫ НА ФАЙЛ С ПОРЯДКОВЫМ
                НОМЕРОМ N ; АЛГОРИТМ ПОЗИЦИОНИРОВАНИЯ
                СМ. В ОПИСАНИИ МАКРОКОМАНДЫ .ENTER .
�


    ФОРМАТ СПИСКА АРГУМЕНТОВ EMT :
                    !--------!--------!
    R0 => AREA :    !    1   !  CHAN  !
                    !--------!--------!
                    !      DBLK       !
                    !-----------------!
                    !     SEGNUM      !
                    !-----------------!

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

ОШИБКИ :
    КОД         ПОЯСНЕНИЯ

    0       КАНАЛ ЗАНЯТ ;

    1       УКАЗАННЫЙ ФАЙЛ В КАТАЛОГЕ НЕ НАЙДЕН .

ПРИМЕР : СМ. ПРИМЕР МАКРОКМАНДЫ .SPFUN .


                        1.6     .PURGE


    СИСТЕМНАЯ МАКРОКОМАНДА .PURGE ИСПОЛЬЗУЕТСЯ ДЛЯ
ОСВОБОЖДЕНИЯ КАНАЛА БЕЗ ВЫПОЛНЕНИЯ МАКРОКОМАНД .HRESET ,
.SRESET , .SAVESTATUS ИЛИ .CLOSE .

    ФОРМАТ МАКРОКОМАНДЫ :
                        .PURGE  CHAN
    ГДЕ
    CHAN    -   НОМЕР КАНАЛА .

    ФОРМАТ РЕГИСТРА R0 :

                !--------!--------!
    R0 =>       !    3   !  CHAN  !
                !--------!--------!

    МАКРОКОМАНДА .PURGE ОСВОБОЖДАЕТ КАНАЛ , НЕ ВЫПОЛНЯЯ
НИКАКИХ ДРУГИХ ОПЕРАЦИЙ .

    ЕСЛИ МАКРОКОМАНДОЙ .ENTER БЫЛ СОЗДАН ВРЕМЕННЫЙ ФАЙЛ ,
ТО ФАЙЛ СТАНОВИТСЯ НЕДОСТУПНЫМ ДЛЯ ПОСЛЕДДУЮЩЕГО
ИСПОЛЬЗОВАНИЯ .
�


                        - 9 -


    ЕСЛИ УКАЗАННЫЙ В МАКРОКОМАНДЕ КАНАЛ НЕ ЗАНЯТ , Т. Е.
НЕ СВЯЗАН С ФАЙЛОМ , ТО МАКРОКОМАНДА ИГНОРИРУЕТСЯ .

    ОШИБКИ : ОТСУТСВУЮТ .

    ПРИМЕР : СМ. ПРИМЕР МАКРОКОМАНДЫ .CHCOPY .


                        1.7.    .RENAME


    ЭТА СИСТЕМНАЯ МАКРОКОМАНДА ВЫЗЫВАЕТ ИЗМЕНЕНИЕ ИМЕНИ
УКАЗАННОГО ФАЙЛА . ЕСЛИ НА УКАЗАННОМ УСТРОЙСТВЕ УЖЕ
СУЩЕСТВУЕТ ФАЙЛ С ТЕМ ЖЕ ИМЕНЕМ , ТО ОН СТИРАЕТСЯ .

    ФОРМАТ МАКРОКОМАНДЫ :
                        .RENAME     AREA,CHAN,DBLK

    ГДЕ
    AREA    -   БЛОК АРГУМЕНТОВ EMT ИЗ 2-Х СЛОВ ;
    CHAN    -   НОМЕР КАНАЛА ;
    DBLK    -   БЛОК , СОДЕРЖАЩИЙ ДВЕ ПОСЛЕДОВАТЕЛЬНЫЕ
                СПЕЦИФИКАЦИИ ФАЙЛОВ , ПРИ ЭТОМ ПЕРВЫЕ ЧЕТЫРЕ
                СЛОВА ПРЕДАЗНАЧЕНЫ ДЛЯ ФАЙЛА , У КОТОРОГО БУДЕТ
                ИЗМЕНЯТЬСЯ ИМЯ , ПОСЛЕДНИЕ - ДЛЯ НОВОГО ИМЕНИ .

            ФОРМАТ СПИСКА АРГУМЕНТОВ EMT :

                        !--------!--------!
        R0 => AREA :    !    4   !  CHAN  !
                        !--------!--------!
                        !      DBLK       !
                        !-----------------!

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

    МАКРОКОМАНДА ДЕЙСТВИТЕЛЬНА ТОЛЬКО ДЛЯ ОПЕРАЦИЙ С
КАТАЛОГОВЫМИ УСТРОЙСТВАМИ ; ДЛЯ ОСТАЛЬНЫХ УСТРОЙСТВ ОНА
ИГНОРИРУЕТСЯ .

    П_Р_И_М_Е_Ч_А_Н_И_Е . ПО ЗАВЕРШЕНИЮ .RENAME КАНАЛ
CHAN БУДЕТ СВОБОДЕН .

�


    ОШИБКИ :
        КОД         ПОЯСНЕНИЕ
        0       КАНАЛ ЗАНЯТ ;
        1       ФАЙЛ НЕ НАЙДЕН ;
        2       НЕДОПУСТИМАЯ ОПЕРАЦИЯ
                ДЛЯ ДАННОГО УСТРОЙСТВА .

ПРИМЕР :

ФАЙЛ DATA.TMP НА DX0: ПЕРЕИМЕНОВЫВАЕТСЯ В ФАЙЛ DATA.CNT .
        .MCALL  .FETCH,.PRINT,.EXIT,.RENAME
ST:     .FETCH  #HSPACE,#NAMBLK     ;ЗАГРУЗИТЬ ДРАЙВЕР DX
        BCS     FEER
        .RENAME #AREA,#0,#NAMBLK    ;СДЕЛАТЬ ПЕРЕИМЕНОВАНИЕ
        BCS     RENER
        .EXIT
FEER:   .PRINT  #FMSG
        .EXIT
RENER:  .PRINT  #RNMSG
        .EXIT
AREA:   .BLKW   2                   ;ОБЛ. АРГУМЕНТОВ EMT
NAMBLK: .RAD50  /DX0DATA  TMP/      ;СТАРОЕ ИМЯ
        .RAD50  /DX0DATA  CNT/      ;НОВОЕ ИМЯ
FMSG:   .ASCIZ  /ОШИБКА .FETCH/
RNMSG:  .ASCIZ  /ОШИБКА .RENAME/
        .EVEN
HSPACE  =.
        .END   ST


                        1.8.    .REOPEN


    МАКРОКОМАНДА .REOPEN СВЯЗЫВАЕТ УКАЮЗАННЫЙ КАНАЛ С
ФАЙЛОМ , ДЛЯ КОТОРОГО БЫЛА ВЫПОЛНЕНА МАКРОКОМАНДА
.SAVESTATUS , ТАКИМ ОБРАЗОМ ПРОИЗВОДЯ ПОВТОРНОЕ ОТКРЫТИЕ
ЭТОГО ФАЙЛА .

    ФОРМАТ МАКРОКОМАНДЫ :
                        .REOPEN     AREA,,CHAN,DBLK

    ГДЕ

    AREA    -   ОБЛАСТЬ ИЗ ДВУХ СЛОВ ДЛЯ АРГУМЕНТОВ EMT ;
    CHAN    -   НОМЕР КАНАЛА ;
�

                        - 10 -

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

    ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:

                        !--------!--------!
RO => AREA:             !   6    !  CHAN  !
                        !-----------------!
                        !      CBLK       !
                        !-----------------!

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

ОШИБКИ:
        КОД         ПОЯСНЕНИЕ
         0       КАНАЛ ЗАНЯТ.

ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .SAVESTATUS.


                        1.9.    .SAVESTATUS


    МАКРОКОМАНДА .SAVESTATUS ПЕРЕДАЕТ 5 СЛОВ ИНФОРМАЦИИ
О СОСТОЯНИИ КАНАЛА В УКАЗАННУЮ ОБЛАСТЬ ПАМЯТИ. ЭТИ СЛОВА
СОДЕРЖАТ ПОЛНУЮ ИНФОРМАЦИЮ, НЕОБХОДИМУЮ СИСТЕМЕ ДЛЯ
ОПРЕДЕЛЕНИЯ ФАЙЛА.
�


    ФОРМАТ МАКРОКОМАНДЫ:
                .SAVESTATUS     AREA,CHAN,CBLK
ГДЕ
AREA    - ОБЛАСТЬ ИЗ ДВУХ СЛОВ ДЛЯ АРГУМЕНТОВ ЕМТ;
CHAN    - НОМЕР КАНАЛА;
CBLK    - АДРЕС БЛОКА ПАМЯТИ (5СЛОВ), ГДЕ СОХРАНЯЕТСЯ
          ИНФОРМАЦИЯ О СОСТОЯНИИ КАНАЛА.

    ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:

                        !--------!--------!
RO => AREA:             !   5    !  CHAN  !
                        !-----------------!
                        !      CBLK       !
                        !-----------------!

    ПОСЛЕ ВЫПОЛНЕНИЯ МАКРОКОМАНДЫ ФАЙЛ ЗАКРЫВАЕТСЯ И
КАНАЛ ОСВОБОЖДАЕТСЯ ДЛЯ ИСПОЛЬЗОВАНИЯ.
    МАКРОКОМАНДА .SAVESTATUS ПРИМЕНЯЕТСЯ ТОЛЬКО В ТОМ
СЛУЧАЕ, ЕСЛИ ФАЙЛ БЫЛ ОТКРЫТ ПОСРЕДСТВОМ МАКРОКОМАНДЫ
.LOOKUP. ЕСЛИ ФАЙЛ БЫЛ ОТКРЫТ МАКРОКОМАНДОЙ .ENTER, TO
ИСПОЛЬЗОВАНИЕ МАКРОКОМАНДЫ .SAVESTATUS НЕДОПУСТИМО, ПРИ
ЭТОМ ВОЗНИКАЕТ ОШИБКА.
    ЭТА МАКРОКОМАНДА МОЖЕТ ОТНОСИТЬСЯ ТОЛЬКО К ТЕМ
ФАЙЛАМ, КОТОРЫЕ НАХОДЯТСЯ НА УСТРОЙСТВЕ С КАТАЛОГОВОЙ
ОРГАНИЗАЦИЕЙ.
    ПЯТЬ СЛОВ, НЕСУЩИХ ИНФОРМАЦИЮ О СОСТОЯНИИ КАНАЛА,
ПРИВЕДЕНЫ В ТАБЛИЦЕ (СИМВОЛОМ <*> ПОМЕЧЕНЫ  БИТЫ,
ПОЯСНЕНИЯ К КОТОРЫМ ДАНЫ, ДЛЯ БИТА УСТАНОВЛЕННОГО В 1).
�

                        - 11 -

                                                  ТАБЛИЦА
---------------------------------------------------------
  СЛОВО  !  БИТ  !          СОДЕРЖИМОЕ
---------!-------!---------------------------------------
    1    !       ! СЛОВО СОСТОЯНИЯ КАНАЛА.
         !-------!---------------------------------------
         !  0*   ! АППАРАТНАЯ ОШИБКА ПО ЭТОМУ КАНАЛУ.
         !-------!---------------------------------------
         !  1-5* ! ИНДЕКС В ТАБЛИЦАХ МОНИТОРА. ОПИСЫВАЕТ
         !       ! ФИЗИЧЕСКОЕ УСТРОЙСТВО, СВЯЗАННОЕ С
         !       ! ЭТИМ КАНАЛОМ.
         !-------!---------------------------------------
         !  6*   ! НА КАНАЛЕ ВЫПОЛНЯЕТСЯ МАКРОКОМАНДА
         !       ! .RENAME.
         !-------!---------------------------------------
         !  7*   ! В КАТАЛОГЕ ДОЛЖНА ПРОИЗОЙТИ НОВАЯ
         !       ! ЗАПИСЬ МАКРОКОМАНДЫ .CLOSE (Т.Е.
         !       ! ЭТОТ БИТ УСТАНОВЛЕН, ЕСЛИ ВЫПОЛНЕНА
         !       ! МАКРОКОМАНДА .ENTER).
         !-------!---------------------------------------
         !  8-12 ! НОМЕР СЕГМЕНТА КАТАЛОГА ОТ 1 ДО 37
         !       ! (ВОСЬМЕРИЧНЫЕ), В КОТОРОМ НАХОДИТСЯ
         !       ! ЗАПИСЬ О ТЕКУЩЕМ ФАЙЛЕ.
         !-------!---------------------------------------
         !  13*  ! НАЙДЕН КОНЕЦ ФАЙЛА.
         !-------!---------------------------------------
         !  14   ! НЕ ИСПОЛЬЗУЕТСЯ.
         !-------!---------------------------------------
         !  15*  ! ЭТОТ КАНАЛ В ДАННЫЙ МОМЕНТ ЗАНЯТ.
---------!-------!---------------------------------------
    2    !       ! НАЧАЛЬНЫЙ НОМЕР БЛОКА ФАЙЛА. НУЛЬ,ЕСЛИ
         !       ! УСТРОЙСТВО ПОСЛЕДОВАТЕЛЬНОГО ДОСТУПА.
---------!-------!---------------------------------------
    3    !       ! ДЛИНА ФАЙЛА (В БЛОКАХ ПО 256 СЛОВ).
---------!-------!---------------------------------------
    4    !       ! НЕ ИСПОЛЬЗУЕТСЯ.
---------!-------!---------------------------------------
    5    !       ! ЧЕТНЫЙ БАЙТ: КОЛИЧЕСТВО НЕЗАВЕРШЕННЫХ
         !       ! ОПЕРАЦИЙ ВВОДА/ВЫВОДА ПО КАНАЛУ
         !       ! (ДЛИНА ОЧЕРЕДИ).
         !       ! НЕЧЕТНЫЙ БАЙТ: НОМЕР УСТРОЙСТВА,
         !       ! СВЯЗАННОГО С КАНАЛОМ (ОТ 0 ДО 7).
�


    СОЧЕТАНИЕ МАКРОКОМАНД .SAVESTATUS/.REOPEN ОЧЕНЬ
УДОБНО, НО НЕОБХОДИМО СОБЛЮДАТЬ НЕКОТОРЫЕ МЕРЫ
ПРЕДОСТОРОЖНОСТИ:
    1) ЕСЛИ ПОСЛЕ ВЫПОЛНЕНИЯ МАКРОКОМАНДЫ .SAVESTATUS
ФАЙЛ БЫЛ УДАЛЕН ДО МАКРОКОМАНДЫ .REOPEN, ТО ВЫПОЛНЕННАЯ В
ЭТОТ МОМЕНТ МАКРОКОМАНДА .ENTER МОЖЕТ ИСПОЛЬЗОВАТЬ
ОБЛАСТЬ ЭТОГО ФАЙЛА КАК СВОБОДНУЮ И ИЗМЕНИТЬ ЕЕ
СОДЕРЖИМОЕ. ПОСЛЕ ЭТОГО СОДЕРЖИМОЕ ФАЙЛА НЕЛЬЗЯ
ВОССТАНОВИТЬ.
    2) ПРИ ВЫПОЛНЕНИИ МАКРОКОМАНДЫ .REOPEN ПРИСУТСТВИЕ В
ПАМЯТИ ДРАЙВЕРА СООТВЕТСТВУЮЩЕГО УСТРОЙСТВА
НЕОБЯЗАТЕЛЬНО. ОДНАКО, ЕСЛИ ВЫПОЛНЯЮТСЯ МАКРОКОМАНДЫ
.READ ИЛИ .WRITE, ТО ПРИ ОТСУТСТВИИ ДРАЙВЕРА ВЫДАЕТСЯ
НЕУСТРАНИМАЯ ОШИБКА.

ОШИБКИ:
        КОД             ПОЯСНЕНИЕ
         0          УКАЗАННЫЙ КАНАЛ НЕ СВЯЗАН С ФАЙЛОМ,
                    Т.Е. НЕ ВЫПОЛНЕНА МАКРОКОМАНДА .LOOKUP;

         1          УКАЗАННЫЙ ФАЙЛ ОТКРЫТ МАКРОКОМАНДОЙ
                    .ENTER ИЛИ НАХОДИТСЯ НА СТ: ИЛИ МТ:
ПРИМЕР:
В ПРИМЕРЕ СРАЗУ ОТКРЫВАЮТСЯ ВСЕ НЕОБХОДИМЫЕ ДЛЯ РАБОТЫ
ПРОГРАММЫ ФАЙЛЫ, ИХ СОСТОЯНИЯ СОХРАНЯЮТСЯ, А ЗАТЕМ ОНИ
ОТКРЫВАЮТСЯ ПО МЕРЕ НЕОБХОДИМОСТИ С ПОМОЩЬЮ .REOPEN.

        .MCALL  .READ,.EXIT,.CSIGEN,.SAVESTATUS,.REOPEN
ST:      MOV    #AREA,R5
        .CSIGEN #DSPACE,#DEXT       ;ВВЕСТИ СТРОКУ
         MOV    RO,BUFF             ;УКАЗАТЕЛЬ НА
                                    ;СВОБОДНУЮ ПАМЯТЬ
        .SAVEST R5,#3,#BLOCK1       ;СОХРАНИТЬ ИНФОРМАЦИЮ
                                    ;О ПЕРВОМ ВХОД. ФАЙЛЕ
        .SEVEST R5,#4,#BLOCK2       ;О ВТОРОМ
        .SAVEST R5,#5,#BLOCK3       ;О ТРЕТЬЕМ
         MOV    #BLOCK1,R4
PRCS:   .REOPEN R5,#0,R4            ;ПЕРЕОТКРЫТЬ ФАЙЛ
                                    ;ПО КАНАЛУ 0
        .READ   R5,#0,BUFF,COUNT,BLOCK  ;И ОБРАБОТАТЬ ЕГО
DONE:    ADD    "12,R4              ;УКАЗАТЕЛЬ НА
                                    ;СЛЕДУЮЩИЙ БЛОК
         CMP    R4,#BLOCK3          ;ПОСЛЕДН. ФАЙЛ ОБРАБОТАН?
         BLOS   PRCS                ;НЕТ, ВЫПОЛНИТЬ СЛЕДУЮЩИЙ
        .EXIT
BLOCK1: .WORD   0,0,0,0,0           ;БЛОКИ ДЛЯ ИНФОРМАЦИИ
BLOCK2: .WORD   0,0,0,0,0           ;О СОХРАНЕННОМ
BLOCK3: .WORD   0,0,0,0,0           ;СОСТОЯНИИ КАНАЛОВ
AREA:   .BLKW   10
BUFF:   .WORD   0
BLOCK:  .WORD   0
COUNT:  .WORD   256
DEXT:   .WORD   0,0,0,0
DSPACE = .
        .END    ST
�
                        - 12 -

        2. СИСТЕМНЫЕ МАКРОКОМАНДЫ ПЕРЕДАЧИ ДАННЫХ



                        2.1.    .PRINT

    ЭТА МАКРОКОМАНДА ПРЕДНАЗНАЧЕНА ДЛЯ ВЫВОДА СТРОКИ
ТЕКСТА НА СИСТЕМНЫЙ ТЕРМИНАЛ.
    ФОРМАТ МАКРОКОМАНДЫ:
                        .PRINT      ADDR
ГДЕ
ADDR    - АДРЕС РАСПЕЧАТЫВАЕМОЙ СТРОКИ.

    СТРОКА, ВЫДАВАЕМАЯ НА ПЕЧАТЬ, МОЖЕТ ОКАНЧИВАТЬСЯ
ЛИБО НУЛЕВЫМ БАЙТОМ, ЛИБО БАЙТОМ СО ЗНАЧЕНИЕМ <200>. ЕСЛИ
СТРОКА ОКАНЧИВАЕТСЯ НУЛЕВЫМ БАЙТОМ, ТО АВТОМАТИЧЕСКИ
ДОБАВЛЯЕТСЯ <CR><LF>. ЕСЛИ СТРОКУ ЗАКАНЧИВАЕТ БАЙТ <200>,
ТО ВЫДАЧА <CR> <LF> НЕ ПРОИЗВОДИТСЯ.
    ПРИ ВЫПОЛНЕНИИ ОПЕРАТИВНОЙ (ФОНОВОЙ) ПРОГРАММЫ ПЕРЕД
ВЫВОДОМ ТЕКСТА НА СИСТЕМНЫЙ ТЕРМИНАЛ СНАЧАЛА ПЕЧАТАЕТСЯ
СООБЩЕНИЕ F> (B>), A ЗА НИМ СЛЕДУЕТ ТЕКСТ СТРОКИ.
    УПРАВЛЕНИЕ ВОЗВРАЩАЕТСЯ ПРОГРАММЕ ПОЛЬЗОВАТЕЛЯ ПОСЛЕ
РАЗМЕЩЕНИЯ В БУФЕРЕ ВЫВОДА ВСЕХ ВЫВОДИМЫХ СИМВОЛОВ.
    ОПЕРАТИВНАЯ ПРОГРАММА, ИСПОЛЬЗУЯ СИСТЕМНУЮ
МАКРОКОМАНДУ .PRINT, ВЫДАЕТ СООБЩЕНИЕ НЕЗАВИСИМО ОТ
СОСТОЯНИЯ ФОНОВОЙ ЗАДАЧИ. ПОЭТОМУ ДЛЯ СТРОЧНЫХ СООБЩЕНИЙ
УДОБНЕЕ ИСПОЛЬЗОВАТЬ МАКРОКОМАНДУ .PRINT, ЧЕМ .TTOUTR ИЛИ
.TTYOUT.
ОШИБКИ: ОТСУТСТВУЮТ.
ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .CHCOPY.

                        2.2.    .RCVD/.RCVDW
                            (ТОЛЬКО ДЛЯ FB- И ХМ- МОНИТОРОВ)

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


    П_Р_И_M_E_Ч_A_H_И_E. ПРИ ИСПОЛЬЗОВАНИИ МАКРОКОМАНД
.RCVD И .RCVDC ДЛЯ БУФЕРИЗАЦИИ ЗАПРОСОВ ВВОДА НУЖНО
ВЫДЕЛЯТЬ ДОПОЛНИТЕЛЬНЫЕ ЭЛЕМЕНТЫ ОЧЕРЕДИ (СМ.
МАКРОКОМАНДУ .QSET)

ОШИБКИ ОДИНАКОВЫ ДЛЯ ВСЕХ ТРЕХ РЕЖИМОВ:
        КОД             ПОЯСНЕНИЕ
         0          В СИСТЕМЕ НЕТ ДРУГОГО ЗАДАНИЯ.



        2.2.1.  .RCVD

    СИСТЕМНАЯ МАКРОКОМАНДА .RCVD ИСПОЛЬЗУЕТСЯ, ЧТОБЫ
ПРИНЯТЬ ДАННЫЕ. ПОСЛЕ ТОГО, КАК ЗАПРОС ПОСТАВЛЕН В
ОЧЕРЕДЬ, ПРОДОЛЖАЕТСЯ ВЫПОЛНЕНИЕ ПРОГРАММЫ, ВЫДАВШЕЙ
ЗАПРОС НА ПРИЕМ ДАННЫХ. В МОМЕНТ, КОГДА ПРОГРАММЕ НУЖНО
ПОЛУЧИТЬ ЗАТРЕБОВАННЫЕ ДАННЫЕ, В НЕЙ СТАВИТСЯ
МАКРОКОМАНДА .MWAIT. ПРИ ЭТОМ ВЫПОЛНЕНИЕ ПРОГРАММЫ
ПРИОСТАНАВЛИВАЕТСЯ ДО ОКОНЧАНИЯ ПРИЕМА ДАННЫХ.
    ФОРМАТ МАКРОКОМАНДЫ:
                        .RCVD   AREA,BUF,WCNT
ГДЕ

�


                        - 13 -

AREA    - АДРЕС 5 СЛОВ БЛОКА АРГУМЕНТОВ ЕМТ;
BUF     - АДРЕС БУФЕРА ДЛЯ ПРИЕМА ДАННЫХ;
WCNT    - ДЛИНА БУФЕРА В СЛОВАХ.

    ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:

                        !--------!--------!
RO => AREA:             !   26   !    0   !
                        !--------!--------!
                        ! ЗАРЕЗЕРВИРОВАНО !
                        !-----------------!
                        !       BUF       !
                        !-----------------!
                        !      WCNT       !
                        !-----------------!
                        !       1         !
                        !-----------------!

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


        2.2.2.  .RCVDC

    СИСТЕМНАЯ МАКРОКОМАНДА .RCVDC ОСУЩЕСТВЛЯЕТ ПРИЕМ
ДАННЫХ. ПОСЛЕ ТОГО, КАК ЗАПРОС ПОСТАВЛЕН В ОЧЕРЕДЬ НА
ОБРАБОТКУ, ПРОДОЛЖАЕТСЯ ВЫПОЛНЕНИЕ ТЕКУЩЕЙ ПРОГРАММЫ
ПОЛЬЗОВАТЕЛЯ. КОГДА ПЕРЕДАЧА ДАННЫХ ЗАКОНЧИТСЯ,
УПРАВЛЕНИЕ БУДЕТ ПЕРЕДАНО ПОДПРОГРАММЕ ЗАВЕРШЕНИЯ.
    ФОРМАТ МАКРОКОМАНДЫ:
                        .RCVDC  AREA,BUF,WCNT,CRTN
ГДЕ
AREA    - АДРЕС 5 СЛОВ БЛОКА АРГУМЕНТОВ ЕМТ;
BUF     - АДРЕС БУФЕРА ДЛЯ ПРИЕМА ДАННЫХ;
WCNT    - ДЛИНА БУФЕРА В СЛОВАХ;
CRTN    - АДРЕС ПОДПРОГРАММЫ ЗАВЕРШЕНИЯ.
�


    ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:

                        !--------!--------!
RO => AREA:             !   26   !   0    !
                        !--------!--------!
                        ! ЗАРЕЗЕРВИРОВАНО !
                        !-----------------!
                        !       BUF       !
                        !-----------------!
                        !      WCNT       !
                        !-----------------!
                        !      CRTN       !
                        !-----------------!

ПЕРВОЕ СЛОВО БУФЕРА BUF СОДЕРЖИТ КОЛИЧЕСТВО ПРИНЯТЫХ
СЛОВ.


        2.2.3.  .RCVDW


    СИСТЕМНАЯ МАКРОКОМАНДА .RCVDW ОСУЩЕСТВЛЯЕТ ПРИЕМ
СООБЩЕНИЙ С ОЖИДАНИЕМ КОНЦА ПЕРЕДАЧИ, Т.Е. ПРОГРАММА,
ВЫДАВШАЯ ЗАПРОС НА ПРИЕМ СООБЩЕНИЯ, ПРИОСТАНАВЛИВАЕТСЯ ДО
ПЕРЕДАЧИ СООБЩЕНИЯ ДРУГОЙ ПРОГРАММОЙ. ПОСЛЕ ОКОНЧАНИЯ
ПРИЕМА ЭТА ПРОГРАММА ПРОДОЛЖАЕТ ВЫПОЛНЯТЬСЯ. ПЕРВОЕ СЛОВО
В БУФЕРЕ ПРИЕМА, КАК И В ОСТАЛЬНЫХ МАКРОКОМАНДАХ ЭТОГО
ТИПА, СОДЕРЖИТ КОЛИЧЕСТВО ПРИНЯТЫХ СЛОВ.
    ФОРМАТ МАКРОКОМАНДЫ:
                        .RCVDW  AREA,BUF,WCNT
ГДЕ
AREA    - АДРЕС 5 СЛОВ БЛОКА АРГУМЕНТОВ ЕМТ;
BUF     - АДРЕС БУФЕРА ДЛЯ ПРИЕМА ДАННЫХ;
WCNT    - ДЛИНА БУФЕРА В СЛОВАХ.
�


                        - 14 -

    ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:

                        !--------!--------!
RO => AREA:             !   26   !   0    !
                        !--------!--------!
                        ! ЗАРЕЗЕРВИРОВАНО !
                        !-----------------!
                        !       BUF       !
                        !-----------------!
                        !      WCNT       !
                        !-----------------!
                        !       0         !
                        !-----------------!

ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .SDAT.


        2.3.    .READ/.READC/.READW


    ДАННЫЕ МАКРОКОМАНДЫ ОБЕСПЕЧИВАЮТ ПЕРЕДАЧУ УКАЗАННОГО
КОЛИЧЕСТВА СЛОВ ПО ЗАДАННОМУ КАНАЛУ В ПАМЯТЬ В ОДНОМ ИЗ
ТРЕХ РЕЖИМОВ.
    ПОСЛЕ ВЫПОЛНЕНИЯ ЛЮБОЙ СИСТЕМНОЙ МАКРОКОМАНДЫ ТИПА
.READ RO БУДЕТ СОДЕРЖАТЬ ПОЛЕЗНУЮ ИНФОРМАЦИЮ.
    ЕСЛИ СЧИТЫВАНИЕ ПРОИЗВОДИТСЯ С УСТРОЙСТВА
ПОСЛЕДОВАТЕЛЬНОГО ДОСТУПА, ТО RO СОДЕРЖИТ ТРЕБУЕМОЕ ДЛЯ
ОПЕРАЦИИ ЧИСЛО СЛОВ. ПРИ ОБСЛУЖИВАНИИ УСТРОЙСТВ С ПРЯМЫМ
ДОСТУПОМ RO СОДЕРЖИТ ФАКТИЧЕСКОЕ КОЛИЧЕСТВО СЛОВ, КОТОРОЕ
БУДЕТ СЧИТАНО (.READ/.READC) ИЛИ БЫЛО СЧИТАНО (.READW).
    ЕСЛИ СДЕЛАНА ПОПЫТКА СЧИТЫВАНИЯ ПОСЛЕ КОНЦА ФАЙЛА,
ТО ЧАСТИЧНАЯ ПЕРЕДАЧА ВСЕ ЖЕ ВОЗМОЖНА, НО ЭТО КОЛИЧЕСТВО
СЛОВ (ТАКЖЕ ОТРАЖАЕМОЕ В RO) БУДЕТ МЕНЬШЕ, ЧЕМ ТРЕБУЕТСЯ.
В СЛУЧАЕ ЧАСТИЧНОЙ ПЕРЕДАЧСИ УСТАНАВЛИВАЕТСЯ БИТ С, И
ВЫДАЕТСЯ КОД ОШИБКИ 0. ПОЭТОМУ ПРОГРАММА ВСЕГДА ДОЛЖНА
ИСПОЛЬЗОВАТЬ СВЕДЕНИЯ О ФАКТИЧЕСКОМ ЧИСЛЕ ПРИНЯТЫХ СЛОВ,
СОДЕРЖАЩИХСЯ В RO. НАПРИМЕР, ЕСЛИ ДЛЯ ФАЙЛА ДЛИНОЙ В 7
БЛОКОВ, ИМЕЮЩЕГО НОМЕРА БЛОКОВ С 0 ПО 6 ВЫПОЛНЯЕТСЯ
МАКРОКОМАНДА НА ЧТЕНИЕ 512 СЛОВ, НАЧИНАЯ С БЛОКА 6, ТО
СЧИТЫВАЕТСЯ ТОЛЬКО 256 СЛОВ И УСТАНАВЛИВАЕТСЯ БИТ С
(КОД ОШИБКИ 0 В EERWD).

ОШИБКИ ОДИНАКОВЫ ДЛЯ ВСЕХ ТРЕХ РЕЖИМОВ:
            КОД             ПОЯСНЕНИЕ
             0          ПОПЫТКА СЧИТЫВАНИЯ ПОСЛЕ КОНЦА ФАЙЛА;
             1          ОШИБКА АППАРАТУРЫ;
             2          КАНАЛ НЕ ОТКРЫТ.
�


        2.3.1.  .READ


    МАКРОКОМАНДА .READ ВЫПОЛНЯЕТ ПЕРЕДАЧУ ДАННЫХ ПО
УКАЗАННОМУ КАНАЛУ В ПАМЯТЬ. ПОСЛЕ ТОГО, КАК ЗАПРОС
УСТАНОВЛЕН В ОЧЕРЕДЬ К СООТВЕТСТВУЮЩЕМУ ДРАЙВЕРУ,
УПРАВЛЕНИЕ НЕМЕДЛЕННО ПЕРЕДАЕТСЯ ПРОГРАММЕ ПОЛЬЗОВАТЕЛЯ,
ПРИ ЭТОМ НИКАКИХ СПЕЦИАЛЬНЫХ ДЕЙСТВИЙ НЕ ПРЕДПРИНИМАЕТСЯ.
НАЗНАЧЕНИЕ КАНАЛА ПРОИЗВОДИТСЯ С ПОМОЩЬЮ МАКРОКОМАНД
.LOOKUP И .ENTER.
    ФОРМАТ МАКРОКОМАНДЫ:
                        .READ   AREA,CHAN,BUF,WCNT,BLK
ГДЕ
AREA    - АДРЕС СПИСКА АРГУМЕНТОВ ЕМТ ИЗ 5 СЛОВ;
CHAN    - НОМЕ кАнАЛА;Я
BUF     - _АДРЕС БУФЕРА, КУДА ПОМЕЩАЮТСЯ ДАННЫЕ;
WCNT    - ДЛИНА БУФЕРА В СЛОВАХ;
BLK     - НОМЕР БЛОКА, КОТОРЫЙ ДОЛЖЕН БЫТЬ СЧИТАН; ДЛЯ
          УСТРОЙСТВ С КАТАЛОГОВОЙ ОРГАНИЗАЦИЕЙ - ЭТО БЛОК
          ОТНОСИТЕЛЬНО НАЧАЛА ФАЙЛА; ЕСЛИ УСТРОЙСТВО С
          БЕСКАТАЛОГОВОЙ ОРГАНИЗАЦИЕЙ (МАГНИТНЫЕ ЛЕНТЫ,
          КАССЕТЫ), ТО ЭТО НОМЕР АБСОЛЮТНОГО БЛОКА НА
          УСТРОЙСТВЕ; ПОЛЬЗОВАТЕЛЬ ДОЛЖЕН САМ ИЗМЕНЯТЬ
          ЭТОТ АРГУМЕНТ ПЕРЕД ОЧЕРЕДНЫМ ИСПОЛЬЗОВАНИЕМ
          ДАННОЙ МАКРОКОМАНДЫ.

    ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:

                        !--------!--------!
RO => AREA:             !   10   !  CHAN  !
                        !--------!--------!
                        !       BLK       !
                        !-----------------!
                        !       BUF       !
                        !-----------------!
                        !      WCNT       !
                        !-----------------!
                        !        1        !
                        !-----------------!

    П_P_И_M_E_Ч_A_H_И_E. ДЛЯ ИСПОЛЬЗОВАНИЯ ДАННЫХ,
СЧИТАННЫХ ПО ОПРЕДЕЛЕННОМУ КАНАЛУ, ДОЛЖНА БЫТЬ ВЫПОЛНЕНА
МАКРОКОМАНДА .WAIT, КОТОРАЯ ПЕРЕВОДИТ ПРОГРАММУ В
�


                        - 15 -

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


        2.3.2.  .READC


    МАКРОКОМАНДА ПЕРЕДАЕТ НЕОБХОДИМОЕ ЧИСЛО СЛОВ ПО
УКАЗАННОМУ КАНАЛУ В ПАМЯТЬ. УПРАВЛЕНИЕ ВОЗВРАЩАЕТСЯ
ПРОГРАММЕ ПОЛЬЗОВАТЕЛЯ СРАЗУ ПОСЛЕ ТОГО, КАК ЗАПРОС
ПОСТАВЛЕН В ОЧЕРЕДЬ. ПРОГРАММА ПОЛЬЗОВАТЕЛЯ ПРОДОЛЖАЕТ
ВЫПОЛНЯТЬСЯ ДО ОКОНЧАНИЯ ВВОДА ДАННЫХ, ЗАТЕМ УПРАВЛЕНИЕ
ПЕРЕДАЕТСЯ ПОДПРОГРАММЕ ЗАВЕРШЕНИЯ, УКАЗАННОЙ В
МАКРОКОМАНДЕ. ПОСЛЕ ВЫПОЛНЕНИЯ ИНСТРУКЦИИ RTS РС В
ПОДПРОГРАММЕ ЗАВЕРШЕНИЯ УПРАВЛЕНИЕ ВОЗВРАЩАЕТСЯ
ПРЕРВАННОЙ ПРОГРАММЕ.
    ФОРМАТ МАКРОКОМАНДЫ:
                .READC  AREA,CHAN,BUF,WCNT,CRTN,BLK
ГДЕ
AREA    - АДРЕС 5 СЛОВ БЛОКА АРГУМЕНТОВ ЕМТ;
CHAN    - НОМЕР КАНАЛА;
BUF     - АДРЕС БУФЕРА, КУДА ПОМЕЩАЮТСЯ ДАННЫЕ;
WCNT    - ДЛИНА БУФЕРА В СЛОВАХ;
BLK     - НОМЕР БЛОКА, КОТОРЫЙ ДОЛЖЕН БЫТЬ СЧИТАН; ДЛЯ
          УСТРОЙСТВ С КАТАЛОГОВОЙ ОРГАНИЗАЦИЕЙ - ЭТО БЛОК
          ОТНОСИТЕЛЬНО НАЧАЛА ФАЙЛА; ЕСЛИ УСТРОЙСТВО С
          БЕСКАТАЛОГОВОЙ ОРГАНИЗАЦИЕЙ (МАГНИТНЫЕ ЛЕНТЫ,
          КАССЕТЫ), ТО ЭТО НОМЕР АБСОЛЮТНОГО БЛОКА НА
          УСТРОЙСТВЕ; ПОЛЬЗОВАТЕЛЬ ДОЛЖЕН САМ ИЗМЕНЯТЬ
          ЭТОТ АРГУМЕНТ ПЕРЕД ОЧЕРЕДНЫМ ИСПОЛЬЗОВАНИЕМ
          ДАННОЙ МАКРОКОМАНДЫ;
CRTN    - АДРЕС ПОДПРОГРАММЫ ЗАВЕРШЕНИЯ.

    ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:

                        !--------!--------!
RO => AREA:             !   10   !  CHAN  !
                        !--------!--------!
                        !       BLK       !
                        !-----------------!
                        !       BUF       !
                        !-----------------!
                        !      WCNT       !
                        !-----------------!
                        !      CRTN       !
                        !-----------------!
�


    ПРИ ВХОДЕ В ПОДПРОГРАММУ ЗАВЕРШЕНИЯ:
        - RO СОДЕРЖИТ СЛОВО СОСТОЯНИЯ КАНАЛА;
          УСТАНОВЛЕННЫЙ В НЕМ БИТ 0 ОЗНАЧАЕТ ВОЗНИКШУЮ ПРИ
          ПЕРЕДАЧЕ АППАРАТНУЮ ОШИБКУ;

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

 П_P_И_M_E_Ч_A_H_И_E. В ПОДПРОГРАММАХ ЗАВЕРШЕНИЯ
НЕДОПУСТИМО ИСПОЛЬЗОВАНИЕ МАКРОКОМАНД, ТРЕБУЮЩИХ USR (СМ.
Т.3 КН.2 Ч.1).


        2.3.3.  .READW


    ЭТА МАКРОКОМАНДА ПЕРЕДАЕТ УКАЗАННОЕ КОЛИЧЕСТВО СЛОВ
ПО ОПРЕДЕЛЕННОМУ КАНАЛУ В ПАМЯТЬ. УПРАВЛЕНИЕ ВОЗВРАЩАЕТСЯ
ПРОГРАММЕ ПОЛЬЗОВАТЕЛЯ ТОЛЬКО ПОСЛЕ ЗАВЕРШЕНИЯ ОПЕРАЦИИ
ЧТЕНИЯ ИЛИ ПРИ ОБНАРУЖЕНИИ ОШИБКИ.
    ФОРМАТ МАКРОКОМАНДЫ:
                    .READW  AREA,CHAN,BUF,WCNT,BLK
ГДЕ
AREA    - АДРЕС 5 СЛОВ БЛОКА АРГУМЕНТОВ ЕМТ;
CHAN    - НОМЕР КАНАЛА;
BUF     - АДРЕС БУФЕРА, КУДА ПОМЕЩАЮТСЯ ДАННЫЕ;
WCNT    - ДЛИНА БУФЕРА В СЛОВАХ;
�



                        - 16 -

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

    ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:

                        !--------!--------!
RO => AREA:             !   10   !  CHAN  !
                        !--------!--------!
                        !       BLK       !
                        !-----------------!
                        !       BUF       !
                        !-----------------!
                        !      WCNT       !
                        !-----------------!
                        !        0        !
                        !-----------------!

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

ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .WRITE.


        2.4.    .SDAT/.SDATC/.SDATW


    СИСТЕМНЫЕ МАКРОКОМАНДЫ ТИПА .SDAT ПРИМЕНЯЮТСЯ В
СОЧЕТАНИИ С МАКРОКОМАНДАМИ .RCVD/.RCVDC/.RCVDW ДЛЯ
ОСУЩЕСТВЛЕНИЯ ПЕРЕДАЧИ СООБЩЕНИЙ. ЭТИ МАКРОКОМАНДЫ
ВЫПОЛНЯЮТСЯ АНАЛОГИЧНО МАКРОКОМАНДАМ ТИПА .WRITE, НО
ПЕРЕДАЧА ПРОИСХОДИТ НЕ НА ПЕРЕФИРИЙНОЕ УСТРОЙСТВО, А В
СООТВЕТСТВУЮЩУЮ ПРОГРАММУ, РАБОТАЮЩУЮ В ДРУГОМ РАЗДЕЛЕ И
СОДЕРЖАЩУЮ МАКРОКОМАНДУ ТИПА .RCVD.

    П_P_И_M_E_Ч_A_H_И_E. ДЛЯ МАКРОКОМАНД ТИПА .SDAT
ДЕЙСТВИТЕЛЬНЫ ВСЕ СОГЛАШЕНИЯ И ЗАМЕЧАНИЯ, КАСАЮЩИЕСЯ
МАКРОКОМАНД ТИПА .RCVD.

ОШИБКИ ОДИНАКОВЫ ДЛЯ ВСЕХ ТРЕХ РЕЖИМОВ:
            КОД                 ПОЯСНЕНИЕ
             0          ОТСУТСТВУЕТ ДРУГОЕ ЗАДАНИЕ.
�


        2.4.1.  .SDAT


    ВЫПОЛНЯЕТ ПЕРЕДАЧУ УКАЗАННОГО КОЛИЧЕСТВА СЛОВ.
УПРАВЛЕНИЕ ПЕРЕДАЕТСЯ ПРОГРАММЕ ПОЛЬЗОВАТЕЛЯ СРАЗУ ПОСЛЕ
ТОГО, КАК ЗАПРОС ПОСТАВЛЕН В ОЧЕРЕДЬ.
    ФОРМАТ МАКРОКОМАНДЫ:
                        .SDAT   AREA,BUF,WCNT
ГДЕ
AREA    - АДРЕС 5 СЛОВ БЛОКА АРГУМЕНТОВ ЕМТ;
BUF     - АДРЕС БУФЕРА ДЛЯ ПЕРЕДАЧИ ДАННЫХ;
WCNT    - ДЛИНА БУФЕРА В СЛОВАХ.

    ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:

                        !--------!--------!
RO => AREA:             !   25   !   0    !
                        !--------!--------!
                        ! НЕ ИСПОЛЬЗУЕТСЯ !
                        !-----------------!
                        !       BUF       !
                        !-----------------!
                        !      WCNT       !
                        !-----------------!
                        !        1        !
                        !-----------------!


        2.4.2.  .SDATC


    ВЫПОЛНЯЕТ ПЕРЕДАЧУ УКАЗАННОГО КОЛИЧЕСТВА СЛОВ.
УПРАВЛЕНИЕ ВОЗВРАЩАЕТСЯ ПРОГРАММЕ ПОЛЬЗОВАТЕЛЯ НЕМЕДЛЕННО
ПОСЛЕ ТОГО, КАК ЗАПРОС ПОСТАВЛЕН В ОЧЕРЕДЬ. ВЫПОЛНЕНИЕ
ПРОГРАММЫ ПОЛЬЗОВАТЕЛЯ ПРОДОЛЖАЕТСЯ ДО ОКОНЧАНИЯ
ПЕРЕДАЧИ, ЗАТЕМ УПРАВЛЕНИЕ ПЕРЕДАЕТСЯ ПОДПРОГРАММЕ
ЗАВЕРШЕНИЯ, А ПО ИНСТРУКЦИИ RTS PC В ПОДПРОГРАММЕ
ЗАВЕРШЕНИЯ УПРАВЛЕНИЕ ПЕРЕДАЕТСЯ ПРЕРВАННОЙ ПРОГРАММЕ
ПОЛЬЗОВАТЕЛЯ.
    ФОРМАТ МАКРОКОМАНДЫ:
                    .SDATC  AREA,BUF,WCNT,CRTN
�


                        - 17 -

ГДЕ
AREA    - АДРЕС 5 СЛОВ БЛОКА АРГУМЕНТОВ ЕМТ;
BUF     - АДРЕС БУФЕРА ДЛЯ ПЕРЕДАЧИ ДАННЫХ;
WCNT    - ДЛИНА БУФЕРА В СЛОВАХ;
CRTN    - АДРЕС ПОДПРОГРАММЫ ЗАВЕРШЕНИЯ.

    ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:

                        !--------!--------!
RO => AREA:             !   25   !   0    !
                        !--------!--------!
                        ! НЕ ИСПОЛЬЗУЕТСЯ !
                        !-----------------!
                        !       BUF       !
                        !-----------------!
                        !      WCNT       !
                        !-----------------!
                        !      CRTN       !
                        !-----------------!


        2.4.3.  .SDATW


    ВЫПОЛНЯЕТ ПЕРЕДАЧУ УКАЗАННОГО КОЛИЧЕСТВА СЛОВ.
УПРАВЛЕНИЕ ВОЗВРАЩАЕТСЯ В ПРОГРАММУ ПОЛЬЗОВАТЕЛЯ ПОСЛЕ
ЗАВЕРШЕНИЯ ПЕРЕДАЧИ.
    ФОРМАТ МАКРОКОМАНДЫ:
                        .SDATW  AREA,BUF,WCNT
ГДЕ
AREA    - АДРЕС 5 СЛОВ БЛОКА АРГУМЕНТОВ ЕМТ;
BUF     - АДРЕС БУФЕРА ДЛЯ ПЕРЕДАЧИ ДАННЫХ;
WCNT    - ДЛИНА БУФЕРА В СЛОВАХ.

    ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:

                        !--------!--------!
RO => AREA:             !   25   !   0    !
                        !--------!--------!
                        ! НЕ ИСПОЛЬЗУЕТСЯ !
                        !-----------------!
                        !       BUF       !
                        !-----------------!
                        !      WCNT       !
                        !-----------------!
                        !        0        !
                        !-----------------!

ПРИМЕР:
    В ПРИВЕДЕННОМ ПРИМЕРЕ ФОНОВАЯ ПРОГРАММА ПОСЫЛАЕТ
СООБЩЕНИЕ В ОПЕРАТИВНУЮ ПРОГРАММУ ПОСРЕДСТВОМ МАКРОКОМАНД
.SDAT И .SDATW.
�


ПРИНИМАЮЩАЯ ПРОГРАММА:

        .MCALL  .RCVD,.MWAIT,.EXIT,.RCVDC,.PRINT
ST:      MOV    #AREA,R5
        .RCVD   R5,#BUFF,#20.       ;ПРИНЯТЬ СООБЩЕНИЕ
         BCS    NRC
        .MWAIT
        .PRINT  #BUFF+2             ;ПЕЧАТЬ ПРИНЯТОГО
                                    ;ТЕКСТА
        .RCVDC  R5,#BUUF1,#20.,#PROG1   ;ПРИНЯТЬ
                                        ;ВТОРОЕ СООБЩЕНИЕ
         BCS    NRCC                ;И ВВЕСТИ П/П ЗАВЕРШЕНИЯ
        .MWAIT                      ;ОЖИДАТЬ ПРИЕМА
        .PRINT  #MSG4
        .EXIT
PROG1:  .PRINT  #BUFF1+2            ;П/П ЗАВЕРШЕНИЯ, ПЕЧАТЬ
         RTS    PC                  ;ПРИНЯТОГО СООБЩЕНИЯ
NRC:    .PRINT  #NORC
        .EXIT
NRCC:   .PRINT  #NORCC
        .EXIT
NORC:   .ASCIZ  /НЕТ ВТОРОГО ЗАДАНИЯ/
NORCC:  .ASCIZ  /ОШИБКА .RCVDC/
        .EVEN
BUFF:   .WORD   0                   ;БУФЕР ДЛЯ
        .BLKW   20.                 ;ПЕРВОГО СООБЩЕНИЯ
BUFF1:  .WORD   0                   ;ДЛЯ ВТОРОГО
        .BLKW   20
MSG4:   .ASCIZ  /ПЕРЕДАЧА ОКОНЧЕНА/
        .EVEN
AREA:   .BLKW   10
        .END    ST

ПЕРЕДАЮЩАЯ ПРОГРАММА:

        .MCALL  .SDAT,.RCVD,.MWAIT,.SDATC,.PRINT,.EXIT
ST:      MOV    #AREA,RO
        .SDAT   RO,#MSG,#COUNT      ;ПЕРЕДАТЬ СООБЩЕНИЕ
�


                        - 18 -

         BCS    NSD
        .SDATS  R5,#MSG1,#COUNT1,#PROG      ;ПЕРЕДАТЬ
         BCS    NSD1                        ;ВТОРОЕ СООБЩЕНИЕ
        .PRINT  #MSG3
        .EXIT
PROG:   .PRINT  #MSG2               ;П/П ЗАВЕРШЕНИЯ, ПЕЧАТЬ
         RTS    PC                  ;СООБЩЕНИЯ
NSD:    .PRINT  #NOSD
        .EXIT
NSD1:   .PRINT  #NOSD1
        .EXIT
MSG:    .ASCIZ  /СООБЩЕНИЕ/         ;ТЕКСТ ПЕРВОГО СООБЩЕНИЯ/
COUNT = .- MSG+1/2
        .EVEN
MSG1:   .ASCIZ  /ЕЩЕ ОДНО СООБЩЕНИЕ/
COUNT1 = .- MSG1+1/2
        .EVEN
MSG2:   .ASCIZ  /ПЕРЕДАЧА ОКОНЧЕНА/
MSG3:   .ASCIZ  /ИДЕТ ПЕРЕДАЧА СООБЩЕНИЯ/
NOSD:   .ASCIZ  /НЕТ ДРУГОГО ЗАДАНИЯ/
NOSD1:  .ASCIZ  /ОШИБКА .SDATC/
        .EVEN
AREA:   .BLKW   10
        .END    ST


        2.5.    .SPFUN


    ЭТА СИСТЕМНАЯ МАКРОКОМАНДА ИСПОЛЬЗУЕТСЯ ДРАЙВЕРАМИ
УСТРОЙСТВ ДЛЯ ВЫПОЛНЕНИЯ СПЕЦИАЛЬНЫХ ФУНКЦИЙ, ЗАВИСЯЩИХ
ОТ УСТРОЙСТВ. НАПРИМЕР, ОБРАТНАЯ ПЕРЕМОТКА МАГНИТНОЙ
ЛЕНТЫ. МАКРОКОМАНДА МОЖЕТ ТАКЖЕ ИСПОЛЬЗОВАТЬСЯ С ДИСКОМ
DX: ДЛЯ СЧИТЫВАНИЯ И ЗАПИСИ АБСОЛЮТНЫХ СЕКТОРОВ.
    ФОРМАТ МАКРОКОМАНДЫ:
                .SPFUN  AREA,CHAN,FUNC,BUF,WCNT,BLK,CRTN
ГДЕ
AREA    - БЛОК АРГУМЕНТОВ ЕМТ ИЗ 6 СЛОВ;
CHAN    - НОМЕР КАНАЛА;
FUNC    - КОД ФУНКЦИИ, КОТОРУЮ НЕОБХОДИМО ВЫПОЛНИТЬ;
BUF     - АДРЕС БУФЕРА; ЕСЛИ БУФЕР НЕ НУЖЕН, НЕОБХОДИМО
          ЭТОТ ПАРАМЕТР УСТАНОВИТЬ В 0;
WCNT    - ЭТОТ АРГУМЕНТ ЯВЛЯЕТСЯ СПЕЦИФИЧНЫМ ДЛЯ КАЖДОГО
          КОНКРЕТНОГО ДРАЙВЕРА И ВОЗМОЖНО, БУДЕТ ЗАВИСЕТЬ
          ОТ УКАЗАННОЙ ФУНКЦИИ;
BLK     - ДАННЫЙ АРГУМЕНТ ИСПОЛЬЗУЕТСЯ АНАЛОГИЧНО
          АРГУМЕНТУ WCNT;
CRTN    - ТОЧКА ВХОДА В ПОДПРОГРАММУ ЗАВЕРШЕНИЯ; КОГДА
          ЭТОТ АРГУМЕНТ ПРОПУЩЕН, ТО АВТОМАТИЧЕСКИ
          УСТАНАВЛИВАЕТСЯ 0; ЕСЛИ CRTN=0 РЕЖИМ АНАЛОГИЧЕН
          .READW; ЕСЛИ CRTN=1 РЕЖИМ АНАЛОГИЧЕН .READ; ЕСЛИ
          CRTN>500, ТО ЭТО АДРЕС ПОДПРОГРАММЫ ЗАВЕРШЕНИЯ.
�


    ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:

                        !--------!---------!
RO => AREA:             !   32   !  CHAN   !
                        !--------!---------!
                        !       BLK        !
                        !------------------!
                        !       BUF        !
                        !------------------!
                        !      WCNT        !
                        !------------------!
                        !       377        !
                        !------------------!
                        !      CRTN        !
                        !------------------!

    АРГУМЕНТЫ BLK, CHAN И WCNT МОГУТ ОПРЕДЕЛЯТЬСЯ ТАК
ЖЕ, КАК ДЛЯ ОПЕРАЦИИ .READ/.WRITE.
МАКРОКОМАНДА .SPFUN ДАЕТ ВОЗМОЖНОСТЬ ВЫПОЛНЯТЬ СЛЕДУЮЩИЕ
ФУНКЦИИ:
�


                        - 19 -

        ФНКЦИЯ                  МТ              СТ
        ------                  --              --
ПЕРЕМОТКА ВПЕРЕД ДО
ПОСЛЕДНЕГО ФАЙЛА                                377

ПЕРЕМОТКА ВПЕРЕД ДО
ПОСЛЕДНЕГО БЛОКА                                376

ПЕРЕМОТКА ВПЕРЕД ДО
СЛЕДУЮЩЕГО ФАЙЛА                                375

ПЕРЕМОТКА ВПЕРЕД ДО
СЛЕДУЮЩЕГО БЛОКА                                374

ПЕРЕМОТКА ДО ТОЧКИ
ЗАГРУЗКИ                        373             373

ЗАПИСАТЬ МЕЖФАЙЛОВЫЙ
ПРОМЕЖУТОК                                      372

ЗАПИСАТЬ ЕОF                    377

ПЕРЕМОТКА ВПЕРЕД НА
ОДНУ ЗАПИСЬ                     376

ПЕРЕМОТКА НАЗАД НА
ОДНУ ЗАПИСЬ                     375

ЗАПИСЬ                          371

ЧТЕНИЕ                          370

ЗАПИСЬ С РАСШИРЕННЫМ
МЕЖФАЙЛОВЫМ ПРОМЕЖУТКОМ         374

ОБРАТНАЯ ПЕРЕМОТКА
В АВТОНОМНОМ РЕЖИМЕ             372


        ФУНКЦИЯ                 DX
        -------                 --

ЗАПИСЬ СО СТИРАНИЕМ
МАРКЕРА ДАННЫХ                  З75

ЗАПИСЬ                          376

ЧТЕНИЕ                          377
�


    П_P_И_M_E_Ч_A_H_И_E. ДЛЯ МАГНИТНОЙ ЛЕНТЫ ММ: КОДЫ
ПОЛНОСТЬЮ СОВПАДАЮТ С КОДАМИ ДЛЯ МТ:.
    СЛЕДУЕТ ОТМЕТИТЬ, ЧТО КОД ФУНКЦИИ ЗАНИМАЕТ ТОЛЬКО
ОДИН БАЙТ И ЕГО ЗНАЧЕНИЕ ВСЕГДА ОТРИЦАТЕЛЬНО. ДОПУСТИМЫЕ
ЗНАЧЕНИЯ КОДА НЕ ВЫХОДЯТ ЗА ПРЕДЕЛЫ ОТ -1 ДО -128
ДЕСЯТИЧНЫХ (ОТ 377 ДО 200 ВОСЬМЕРИЧНЫХ).
    П_P_И_M_E_Ч_A_H_И_E. ПЕРЕД ВЫПОЛНЕНИЕМ МАКРОКОМАНДЫ
.SPFUN ДРАЙВЕР СООТВЕТСТВУЮЩЕГО УСТРОЙСТВА ДОЛЖЕН БЫТЬ
ЗАГРУЖЕН В ПАМЯТЬ.

ОШИБКИ:
        КОД             ПОЯСНЕНИЕ
         0          ПОПЫТКА СЧИТЫВАНИЯПОСЛЕ КОНЦА ФАЙЛА;
         1          ОШИБКА КАНАЛА;
         2          УКАЗАННЫЙ КАНАЛ НЕ ОТКРЫТ.

ПРИМЕР:
В ПРИВЕДЕННОМ ПРИМЕРЕ ПРОИЗВОДИТСЯ ПЕРЕМОТКА КАССЕТЫ И
ЗАПИСЫВАЕТСЯ БЛОК В 256 СЛОВ И МЕЖФАЙЛОВЫЙ ПРОМЕЖУТОК.

        .MCALL  .PRINT,.FETCH,.LOOKUP,.SPFUN
        .MCALL  .WRITW,.EXIT,.WAIT,.CLOSE
ST:     .FETCH  #HSPC,#CT           ;ЗАГРУЗИТЬ ДРАЙВЕР СТ
         BCS    LKERR
        .LOOKUP #AREA,#4,#ST
         BCS    LKERR
        .SPFUN  #AREA,#4,#373,#0    ;ПЕРЕМОТАТЬ СИНХРОННО
         BCS    SERR
        .WRITW  #AREA,#4,#BUFF,#256.,BLK
         BCS    WTERR
        .SPFUN  #AREA,#4,#372,#1    ;ЗАПИСЬ МЕЖФАЙЛОВОГО
                                    ;ПРОМЕЖУТКА
        .PRINT  #DONE
        .WAIT   #4
        .CLOSE  #4
        .EXIT
AREA:   .BLKW   10
FERR:   .PRINT  #FMSG
        .EXIT
LKERR:  .PRINT  #LKMSG
        .EXIT
SERR:   .PRINT  #SMSG
        .EXIT
WTERR:  .PRINT  #WTMSG
        .EXIT
DONE:   .ASCIZ  /КОНЕЦ РАБОТЫ/
FMSG:   .ASCIZ  /ОШИБКА FETCH/
LKMSG:  .ASCIZ  /ОШИБКА LOOKUP/
SMSG:   .ASCIZ  /ОШИБКА SPFUN/
WTMSG:  .ASCIZ  /ОШИБКА WRITW/
        .EVEN
CT:     .RAD50  /CT/
        .WORD   0,0,0
BUFF:   .BLKW   256
BLK:    .WORD   0
HSPC =  .
        .END    ST
�


                        - 20 -


        2.6.    .TTYIN/.TTINR


    ЭТИ СИСТЕМНЫЕ МАКРОКОМАНДЫ ПРОИЗВОДЯТ ПЕРЕДАЧУ
ЗНАКОВ С СИСТЕМНОГО ТЕРМИНАЛА В ПРОГРАММУ ПОЛЬЗОВАТЕЛЯ.
ПЕРЕСЫЛАЕМЫЙ СИМВОЛ МОЖЕТ БЫТЬ ПОМЕЩЕН ЛИБО В RO, ЛИБО В
RO И КАКУЮ-НИБУДЬ ЯЧЕЙКУ.
    ФОРМАТ МАКРОКОМАНДЫ:
                        .TTYIN   CHAR
                        .TTINR
ГДЕ
CHAR    - АДРЕС ПАМЯТИ, КУДА ПЕРЕСЫЛАЕТСЯ СИМВОЛ ИЗ RO.
ЕСЛИ АРГУМЕНТ CHAR НЕ УКАЗАН, ТО СИМВОЛ ОСТАЕТСЯ В RO И
РАСПОЛАГАЕТСЯ В ЕГО МЛАДШЕМ БАЙТЕ.
МАКРОКОМАНДА .TTYIN РАСШИРЯЕТСЯ В ПОСЛЕДОВАТЕЛЬНОСТЬ:
        EMT     340
        BCS     .-2
A .TTINR КАК
        EMT     340
    ПРИ РАБОТЕ .TTYIN ВЫПОЛНЕНИЕ ОСНОВНОЙ ПРОГРАММЫ
ПРИОСТАНАВЛИВАЕТСЯ ДО ТЕХ ПОР, ПОКА СИМВОЛ НЕ БУДЕТ
ВВЕДЕН. ПРИ ИСПОЛЬЗОВАНИИ .TTINR, ЕСЛИ НЕТ ЗНАКА (БИТ 12
JSW РАВЕН 1)  ИЛИ СТРОКИ (БИТ 12 JSW РАВЕН 0) НА ВВОД, ТО
ВЫПОЛНЯЕТСЯ ВОЗВРАТ ИЗ МАКРОКОМАНДЫ С УСТАНОВЛЕННЫМ БИТОМ
С.
    СЛЕДУЕТ ИМЕТЬ ВВИДУ, ЧТО ПОД УПРАВЛЕНИЕМ FB- ИЛИ
ХМ- МОНИТОРА МАКРОКОМАНДА .TTINR НЕ БУДЕТ УСТАНАВЛИВАТЬ
БИТ С, ЕСЛИ ПРЕДВАРИТЕЛЬНО НЕ УСТАНОВЛЕН БИТ 6 В JSW.
    ИСПОЛЬЗУЯ БИТ 12 В JSW, МОЖНО УПРАВЛЯТЬ РЕЖИМАМИ
РАБОТЫ СИСТЕМНОГО ТЕРМИНАЛА (ТТ:). СУЩЕСТВУЕТ ДВА РЕЖИМА
РАБОТЫ:

    БИТ 12=0
ПРОИЗВОДИТСЯ ОБЫЧНЫЙ ВВОД/ВЫВОД, ДЛЯ КОТОРОГО
ВЫПОЛНЯЕТСЯ:
        - ВСЕ НАБРАННЫЕ СИМВОЛЫ ОТОБРАЖАЮТСЯ НА ЭКРАНЕ
          (ЭХО-ПЕЧАТЬ);
        - ВЫПОЛНЯЕТСЯ СТИРАНИЕ СТРОКИ ИЛИ СИМВОЛА С
          ПОМОЩЬЮ СООТВЕТСТВЕННО СПЕЦИАЛЬНЫХ КОМАНД
          ОПЕРАТОРА <CTRL/U> ИЛИ <DEL>;
        - СИМВОЛЫ ТЕКУЩЕЙ СТРОКИ БУДУТ ПЕРЕДАНЫ В
          ПРОГРАММУ ПОЛЬЗОВАТЕЛЯ ПОСЛЕ НАЖАТИЯ <CTRL/Z>,
          <CTRL/C>, <CR> И <LF>; ДО ИХ ПОЯВЛЕНИЯ СИМВОЛЫ
          СОБИРАЮТСЯ В БУФЕРЕ УСТРОЙСТВА (КОДЫ <CR> И <LF>
          ТАКЖЕ ПЕРЕСЫЛАЮТСЯ В ПРОГРАММУ).

    БИТ 12=1
�


СИСТЕМНЫЙ ТЕРМИНАЛ НАХОДИТСЯ В СПЕЦИАЛЬНОМ РЕЖИМЕ, ПРИ
ЭТОМ:
        - НИ ОДИН ИЗ НАБИРАЕМЫХ НА КЛАВИАТУРЕ ТЕРМИНАЛА
          СИМВОЛОВ НЕ ОТОБРАЖАЕТСЯ НА ЭКРАНЕ, КРОМЕ
          <CTRL/C> И <CTRL/O>;
        - <CTRL/U> И <DEL> НЕ ВЫПОЛНЯЮТ СВОИХ ФУНКЦИЙ И
          ПЕРЕДАЮТСЯ ПРОГРАММЕ КАК ОБЫЧНЫЕ ЗНАКИ;
        - СИМВОЛЫ ПО ОДНОМУ ПЕРЕДАЮТСЯ В ПРОГРАММУ
          ПОЛЬЗОВАТЕЛЯ.
    ЭТОТ БИТ ПОЛЬЗОВАТЕЛЬ ДОЛЖЕН УСТАНАВЛИВАТЬ САМ. ПРИ
ВОЗВРАЩЕНИИ УПРАВЛЕНИЯ СИСТЕМЕ ОН СБРАСЫВАЕТСЯ.
КОМБИНАЦИИ <CTRL/F> И <CTRL/B> НЕ ЗАВИСЯТ ОТ БИТА 12.
    КОМБИНАЦИИ <CTRL/S> И <CTRL/Q> НЕ БУДУТ
ФУНКЦИОНИРОВАТЬ КАК ОБЫЧНО, ЕСЛИ БЫЛА ВЫПОЛНЕНА КОМАНДА
(ДЛЯ FB- И ХМ- МОНИТОРОВ) SET TT NOPAGE.
    П_P_И_M_E_Ч_A_H_И_E. МАКРОКОМАНДА .TTYIN НЕ
СЧИТЫВАЕТ ДАННЫХ ИЗ КОМАНДНОГО ФАЙЛА. ЕСЛИ ПРИ
ИСПОЛЬЗОВАНИИ КОМАНДНЫХ ФАЙЛОВ НЕОБХОДИМА ТАКАЯ ФУНКЦИЯ,
ИСПОЛЬЗУЕТСЯ МАКРОКОМАНДА .GTLIN.

ОШИБКИ ОДИНАКОВЫ ДЛЯ ОБОИХ РЕЖИМОВ:
            КОД                 ПОЯСНЕНИЕ
             0          В КОЛЬЦЕВОМ БУФЕРЕ ВЫВОДА НЕТ СИМВОЛОВ.

ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .TTYOUT/.TTOUTR.


        2.7.    .TTYOUT/.TTOUTR.


    СИСТЕМНЫЕ МАКРОКОМАНДЫ .TTYOUT И .TTOUTR ВЫПОЛНЯЮТ
ПЕРЕДАЧУ СИМВОЛОВ ИЗ RO НА СИСТЕМНЫЙ ТЕРМИНАЛ.
    РАЗНИЦА МЕЖДУ НИМИ В ТОМ, ЧТО В СЛУЧАЕ, ЕСЛИ В
БУФЕРЕ МОНИТОРА НЕТ МЕСТА ДЛЯ СИМВОЛА ИЗ RO, ТО
МАКРОКОМАНДА .TTYOUT ПРИОСТАНОВИТ ВЫПОЛНЕНИЕ ВСЕЙ
ПРОГРАММЫ ПОЛЬЗОВАТЕЛЯ И БУДЕТ ОЖИДАТЬ ПОЯВЛЕНИЕ
СВОБОДНОЙ ЯЧЕЙКИ, В ТО ВРЕМЯ КАК МАКРОКОМАНДА .TTOUTR
ПРОДОЛЖИТ ВЫПОЛНЕНИЕ ПРОГРАММЫ, ДАЖЕ ЕСЛИ СИМВОЛ НЕ
�


                        - 21 -

ПЕРЕДАН ИЗ RO В МОНИТОР.
    ФОРМАТ МАКРОКОМАНДЫ:
                        .TTYOUT     CHAR
                        .TTOUTR
ГДЕ
CHAR    - АДРЕС ЯЧЕЙКИ, СОДЕРЖАЩЕЙ СИМВОЛ, КОТОРЫЙ БУДЕТ
          ЗАГРУЖЕН В RO И ПЕРЕДАН В МОНИТОР.
ЕСЛИ АРГУМЕНТ CHAR НЕ УКАЗАН, ТО В МОНИТОР БУДЕТ ПЕРЕДАНО
СОДЕРЖИМОЕ RO.
    ЕСЛИ ПОСЛЕ ВЫПОЛНЕНИЯ МАКРОКОМАНДЫ .TTOUTR БИТ С
УСТАНОВЛЕН, ЭТО ОЗНАЧАЕТ, ЧТО В БУФЕРЕ НЕТ МЕСТА, И
СИМВОЛ НЕ БЫЛ ВЫВЕДЕН. КОГДА В СИСТЕМЕ ФУНКЦИОНИРУЕТ FB-
ИЛИ ХМ- МОНИТОР, .TTOUTR НЕ УСТАНАВЛИВАЕТ БИТ ПЕРЕНОСА,
ВМЕСТО ЭТОГО ПРОГРАММА БЛОКИРУЕТСЯ ДО ТЕХ ПОР, ПОКА НЕ
ОСВОБОДИТСЯ МЕСТО В БУФЕРЕ ВЫВОДА. ЕСЛИ НЕОБХОДИМО
ИЗБЕЖАТЬ ПОДОБНУЮ СИТУАЦИЮ, Т.Е. ПРОДОЛЖИТЬ ВЫПОЛНЕНИЕ
ПРОГРАММЫ И ИМЕТЬ ВОЗМОЖНОСТЬ УСТАНАВЛИВАТЬ БИТ С, ТО
НЕОБХОДИМО УСТАНОВИТЬ БИТ 6 В JSW ПЕРЕД ВЫПОЛНЕНИЕМ
МАКРОКОМАНДЫ .TTOUTR.
    П_P_И_M_E_Ч_A_H_И_E. ЕСЛИ ОПЕРАТИВНАЯ ПРОГРАММА
ОСТАВИТ БИТ 6 В JSW УСТАНОВЛЕННЫМ, ТО ЛЮБЫЕ ПОСЛЕДУЮЩИЕ
МАКРОКОМАНДЫ .TTYIN И .TTYOUT ЗАБЛОКИРУЮТ ФОНОВУЮ
ПРОГРАММУ. ПОСКОЛЬКУ КАЖДАЯ ПРОГРАММА ИМЕЕТ СВОЕ JSW, ОНИ
МОГУТ НЕЗАВИСИМО ДРУГ ОТ ДРУГА НАХОДИТЬСЯ В РАЗНЫХ
РЕЖИМАХ РАБОТЫ С СИСТЕМНЫМ ТЕРМИНАЛОМ.

ОШИБКИ:
            КОД                 ПОЯСНЕНИЕ
             0          ЦИКЛИЧЕСКИЙ БУФЕР ВЫВОДА ЗАПОЛНЕН.

ПРИМЕР:
        .MCALL  .EXIT,.TTYIN,.TTYOUT,.TTINR,.TTOUTR
ST:      MOV    #BUFF,R1
         CLR    R2
         BIS    "100,`#44           ;УСТАНОВИТЬ БИТ 6
INLOOP: .TTINR                      ;ВВЕСТИ СИМВОЛЫ
                                    ;С ТЕРМИНАЛА
         BCS    NOCHAR
CHRIN:   MOVB   RO,(R1)+            ;ЗАПИСАТЬ СИМВОЛ В БУФЕР
         INC    R2                  ;УВЕЛИЧИТЬ СЧЕТЧИК
         CMP    RO,#12
         BNE    INLOOP
         MOV    #BUFF,R1
OUTLOP:  MOVB   (R1),RO             ;ЗАНЕСТИ СИМВОЛ В RO
        .TTOUTR                     ;РАСПЕЧАТАТЬ ЕГО
         BCS    NOROOM              ;НЕТ МЕСТА ДЛЯ ВЫХОДНОГО
                                    ;БУФЕРA
CHROUT:  DEC    R2                  ;УМЕНЬШИТЬ СЧЕТЧИК
         BEQ    ST
         INC    R1                  ;СДВИНУТЬ УКАЗАТЕЛЬ
                                    ;БУФЕРА И ПЕЧАТАТЬ
         BR     OUTLOP              ;СЛЕДУЮЩИЙ СИМВОЛ
�


NOCHAR: .TTINR                      ;ПЕРИОДИЧЕСКАЯ ПРОВЕРКА
         BCC    CHRIN               ;НА НАЛИЧИЕ СИМВОЛА
         NOP
         NOP
          .
          .
          .
         NOP
         BR     NOCHAR
NOROOM:  MOVB   (R1),RO             ;ПЕРИОДИЧЕСКАЯ ПОПЫТКА
        .TTOUTR                     ;ВЫВЕСТИ СИМВОЛ
         BCC    CHROUT
TYPETT:  BIC    #100,`#44           ;ВОССТАНОВИТЬ БИТ 6
        .TTYOUT (R1)                ;ВЫВЕСТИ СИМВОЛ
         BIS    #100,`#44
         BR     CHROUT
BUFF:   .BLKW   100.
        .END    ST


        2.8.    .WRITE/.WRITC/.WRITW


    ДАННЫЕ МАКРОКОМАНДЫ ОБЕСПЕЧИВАЮТ ПЕРЕДАЧУ УКАЗАННОГО
КОЛИЧЕСТВА СЛОВ ИЗ ПАМЯТИ ПО УКАЗАННОМУ КАНАЛУ.
    П_P_И_M_E_Ч_A_H_И_E. ПРИ ИСПОЛЬЗОВАНИИ ЗАПРОСОВ ТИПА
.READ/.WRITE ДЛЯ БУФЕРНЫХ ОПЕРАЦИЙ ВВОДА/ВЫВОДА
НЕОБХОДИМО ВЫДЕЛЯТЬ ДОПОЛНИТЕЛЬНЫЕ ЭЛЕМЕНТЫ ОЧЕРЕДИ (СМ.
МАКРОКОМАНДУ .QSET).

ОШИБКИ ОДИНАКОВЫ ДЛЯ ВСЕХ ТРЕХ РЕЖИМОВ:
            КОД                 ПОЯСНЕНИЕ
             0          ПОПЫТКА ЗАПИСИ ПОСЛЕ КОНЦА ФАЙЛА;
             1          ОШИБКА АППАРАТУРЫ;
             2          КАНАЛ НЕ ОТКРЫТ.
�

                         - 22 -


          2.8.1.  .WRITE


    ВЫПОЛНЯЕТ ПЕРЕДАЧУ УКАЗАННОГО КОЛИЧЕСТВА СЛОВ ИЗ
ПАМЯТИ ПО КАНАЛУ CHAN. УПРАВЛЕНИЕ ПЕРЕДАЕТСЯ ПРОГРАММЕ
ПОЛЬЗОВАТЕЛЯ СРАЗУ ПОСЛЕ ТОГО, КАК ЗАПРОС ПОСТАВЛЕН В
ОЧЕРЕДЬ. НАЗНАЧЕНИЕ КАНАЛА ПРОИЗВОДИТСЯ ПРИ ПОМОЩИ
МАКРОКОМАНД .LOOKUP И .ENTER.
    ФОРМАТ МАКРОКОМАНДЫ:
                .WRITE  AREA,CHAN,BUF,WCNT,BLK
ГДЕ
AREA    - АДРЕС СПИСКА АРГУМЕНТОВ ЕМТ ИЗ 5 СЛОВ;
CHAN    - НОМЕР КАНАЛА;
BUF     - АДРЕС БУФЕРА ВЫВОДА;
WCNT    - КОЛИЧЕСТВО ПЕРЕДАВАЕМЫХ СЛОВ;
BLK     - НОМЕР ЗАПИСЫВАЕМОГО БЛОКА; ДЛЯ УСТРОЙСТВ С
          ФАЙЛОВОЙ ОРГАНИЗАЦИЕЙ - ЭТО БЛОК ОТНОСИТЕЛЬНО
          НАЧАЛА ФАЙЛА; ЕСЛИ УСТРОЙСТВО ОТКРЫТО, КАК
          УСТРОЙСТВО С НЕФАЙЛОВОЙ СТРУКТУРОЙ, ТО ЭТО
          АБСОЛЮТНЫЙ НОМЕР БЛОКА НА УСТРОЙСТВЕ.
    ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:

                        !--------!--------!
RO => AREA:             !   11   !  CHAN  !
                        !--------!--------!
			!	BLK	  !
			!-----------------!
			!	BUF	  !
			!-----------------!
			!	WCNT	  !
			!-----------------!
			!	1	  !
			!-----------------!
�


        2.8.2.  .WRITC


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


    ФОРМАТ МАКРОКОМАНДЫ:
                .WRITC  AREA,CHAN,BUF,WCNT,CRTN,BLK
ГДЕ
AREA    - АДРЕС СПИСКА АРГУМЕНТОВ ЕМТ ИЗ 5 СЛОВ;
CHAN    - НОМЕР КАНАЛА;
BUF     - АДРЕС БУФЕРА ВЫВОДА;
WCNT    - ДЛИНА БУФЕРА В СЛОВАХ;
CRTN	- АДРЕС ПОДПРОГРАММЫ ЗАВЕРШЕНИЯ;
BLK     - НОМЕР ЗАПИСЫВАЕМОГО БЛОКА; ДЛЯ УСТРОЙСТВ С
          ФАЙЛОВОЙ ОРГАНИЗАЦИЕЙ - ЭТО БЛОК ОТНОСИТЕЛЬНО
          НАЧАЛА ФАЙЛА; ЕСЛИ УСТРОЙСТВО ОТКРЫТО, КАК
          УСТРОЙСТВО С НЕФАЙЛОВОЙ СТРУКТУРОЙ, ТО ЭТО
          АБСОЛЮТНЫЙ НОМЕР БЛОКА НА УСТРОЙСТВЕ.

    ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:

                        !--------!--------!
RO => AREA:             !   11   !  CHAN  !
                        !--------!--------!
			!	BLK	  !
			!-----------------!
			!	BUF	  !
			!-----------------!
			!	WCNT	  !
			!-----------------!
			!	CRTN	  !
			!-----------------!
�


                        - 23 -

    П_P_И_M_E_Ч_A_H_И_E. ДЛЯ МАКРОКОМАНДЫ .WRITC
ДЕЙСТВИТЕЛЬНЫ ВСЕ СОГЛАШЕНИЯ И ПРИМЕЧАНИЯ, КАСАЮЩИЕСЯ
МАКРОКОМАНДЫ .READC.


        2.8.3.  .WRITW


    ЭТА МАКРОКОМАНДА ПЕРЕДАЕТ УКАЗАННОЕ КОЛИЧЕСТВО СЛОВ
ИЗ ПАМЯТИ ПО УКАЗАННОМУ КАНАЛУ. УПРАВЛЕНИЕ ВОЗВРАЩАЕТСЯ В
ПРОГРАММУ ПОЛЬЗОВАТЕЛЯ ПОСЛЕ ЗАВЕРШЕНИЯ ВЫВОДА.
    ФОРМАТ МАКРОКОМАНДЫ:
                    .WRITW  AREA,CHAN,BUF,WCNT,BLK
ГДЕ
AREA    - АДРЕС СПИСКА АРГУМЕНТОВ ЕМТ ИЗ 5 СЛОВ;
CHAN    - НОМЕР КАНАЛА;
BUF     - АДРЕС БУФЕРА ВЫВОДА;
WCNT    - ДЛИНА БУФЕРА В СЛОВАХ;
BLK     - НОМЕР ЗАПИСЫВАЕМОГО БЛОКА; ДЛЯ УСТРОЙСТВ С
          ФАЙЛОВОЙ ОРГАНИЗАЦИЕЙ - ЭТО БЛОК ОТНОСИТЕЛЬНО
          НАЧАЛА ФАЙЛА; ЕСЛИ УСТРОЙСТВО ОТКРЫТО, КАК
          УСТРОЙСТВО С НЕФАЙЛОВОЙ СТРУКТУРОЙ, ТО ЭТО
          АБСОЛЮТНЫЙ НОМЕР БЛОКА НА УСТРОЙСТВЕ.
    ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:

                        !--------!--------!
RO => AREA:             !   11   !  CHAN  !
                        !--------!--------!
                        !       BLK       !
                        !-----------------!
                        !       BUF       !
                        !-----------------!
                        !      WCNT       !
                        !-----------------!
                        !        0        !
                        !-----------------!

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

        .MCALL  .FETCH,.READW,.WRITW,.ENTER,.LOOKUP,.PRINT
        .MCALL  .EXIT,.CLOSE
         ERRWD = 52
ST:     .FETCH  #HSPACE,#PCNAME     ;ЗАГРУЗИТЬ ДРАЙВЕР РС
         BCS    FERR
         MOV    #AREA,R5            ;ОБЛ. АРГУМЕНТОВ ЕМТ
         CLR    R4                  ;R4 = КАНАЛ ВЫВОДА 0
         МОV    #1,R3               ;R3 = КАНАЛ ВВОДА 1
        .ENTER  R5,R4,#PCNAME       ;ОТКРЫТЬ ФАЙЛ
         BCS    ENERR
�


        .LOOKUP R5,R3,#PCNAME
         BCS    LKERR
         CLR    R1                  ;R1 - НОМЕР БЛОКА
LOOP:   .READW  R5,R3,#BUFF,#256.,R1    ;СЧИТАТЬ БЛОК
         BCS    RDERR
        .WRITW  R5,R4,#BUFF,#256.,R1    ;ЗАПИСАТЬ ЕГО
         BCS    WTERR
         INC    R1                  ;УВЕЛИЧИТЬ СЧЕТЧИК
         BR     LOOP
RDERR:   TSTB   ERRWD               ;ЭТО EOF?
         BEQ    1$                  ;ДА
        .PRINT  #RDMSG
1$:     .EXIT
WTERR:  .PRINT  #WTMSG
        .EXIT
PCNAME: .RAD50  /PC/                ;ДЛЯ РС НЕ НУЖНО ИМЯ
        .WORD   0                   ;ФАЙЛА, ОНО - 0
FERR:   .PRINT  #FEMSG
        .EXIT
ENERR:  .PRINT  #ENMSG
        .EXIT
LKERR:  .PRINT  #LKMSG
        .EXIT
FEMSG:  .ASCIZ  /СДЕЛАТЬ INSTALL PC/
ENMSG:  .ASCIZ  /ОШИБКА ENTER/
LKMSG:  .ASCIZ  /ОШИБКА LOOKUR/
RDMSG:  .ASCIZ  /ОШИБКА READ/
WTMSG:  .ASCIZ  /ОШИБКА WRITE/
        .EVEN
AREA:   .BLKW   10
BUFF:   .BLKW   256.
HSPACE  = .
        .END    ST

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

        .MCALL  .PRINT,.EXIT,.FETCH,.ENTER,.LOOKUP
        .MCALL  .CLOSE,.READC,.WRITC,.WAIT
         ERRWD = 52
ST:     .FETCH  #AREA,#PCNAME       ;ЗАГРУЗИТЬ ДРАЙВЕР РС
         BCS    FERR
FLNK:    MOV    #AREA,R5            ;ОБЛ. АРГУМЕНТОВ ЕМТ
        .ENTER  R5,#1,#PCNAME       ;ОТКРЫТЬ ФАЙЛ
         BCS    ENERR
        .LOOKUP R5,#0,#PCNAME
�


                       - 24 -

         BCS    LKERR
         CLR    R1              ;R1 = НОМЕР БЛОКА
LOOP:    CLR    DFLG            ;СБРОС ФЛАГА ВЫП./ОШИБ.
        .READC  R5,#0,#BUFF,#256.,RDCOMP,R1 ;СЧИТАТЬ БЛОК
         BCS    EOF
1$:      TST    DFLG            ;ФЛАГ УСТАНОВЛЕН?
         BEQ    1$              ;HET
         BMI    IOERR           ;ДА
EOF:    .CLOSE  #1
        .EXIT
RDCOMP:  ROR    RO              ;БИТ С УСТАНОВЛЕН, ЗНАЧИТ
         BCS    RWERR           ;ВСТРЕТИЛАСЬ ОШИБКА
        .WRITC  R5,#0,#BUFF,#256.,#WRCOMP,BLKN  ;ЗАПИСАТЬ
                                                ;БЛОК
         BCC    RTS
RWERR:   MOV    #-1,DFLG        ;ФЛАГ ОШИБКИ
RTS:     RTS    PC
WRCOMP:  ROR    RO
         BCS    RWERR           ;ОШИБКА АППАРАТУРЫ
         INC    BLKN
        .READC  R5,#1,#BUFF,#256.,#RDCOMP,BLKN
         BCC    3$
         TSTB   ERRWD
         BNE    RWERR
         INC    BFLG
3$:      RTS    PC
FERR:    MOV    #FMSG,RO
         BR     TYPIT
IOERR:   MOV    #IOMSG,RO
         BR TYPIT
LKERR:   MOV    #LMSG,RO
         BR TYPIT
ENERR:   MOV    #EMSG,RO
TYPIT:  .PRINT
        .EXIT
FMSG:   .ASCIZ  /СДЕЛАТЬ INSTALL PC/
EMSG:   .ASCIZ  /ОШИБКА ENTER/
LMSG:   .ASCIZ  /ОШИБКА LOOKUP/
IOMSG:  .ASCIZ  !ОШИБКА ВВОДА/ВЫВОДА!
        .EVEN
DFLG:   .WORD   0
PCNAME: .RAD50  /PC/
        .WORD   0
BLKN:   .WORD   0
AREA:   .BLKW   10
BUFF:   .BLKW   256.
HSPACE  = .
        .END    ST
�


        3.  СИСТЕМНЫЕ МАКРОКОМАНДЫ ОБЩЕГО НАЗНАЧЕНИЯ


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


        3.1.    .CDFN


    СИСТЕМНАЯ МАКРОКОМАНДА .CDFN ИСПОЛЬЗУЕТСЯ ДЛЯ
УВЕЛИЧЕНИЯ ЧИСЛА КАНАЛОВ ВВОДА/ВЫВОДА.
    ФОРМАТ МАКРОКОМАНДЫ:
                        .CDFN   AREA,ADDR,NUM
ГДЕ
AREA    - АДРЕС СПИСКА АРГУМЕНТОВ ЕМТ ИЗ ТРЕХ СЛОВ;
ADDR    - АДРЕС БУФЕРА ДЛЯ РАЗМЕЩЕНИЯ КАНАЛОВ
          ВВОДА/ВЫВОДА;
NUM     - КОЛИЧЕСТВО ДОПОЛНИТЕЛЬНЫХ КАНАЛОВ ВВОДА/ВЫВОДА.
    ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:

                        !--------!--------!
RO => AREA:             !   15   !    0   !
                        !--------!--------!
                        !      ADDR       !
                        !-----------------!
                        !       NUM       !
                        !-----------------!

    КАЖДАЯ ЗАДАЧА, ОПЕРАТИВНАЯ ИЛИ ФОНОВАЯ,
ПЕРВОНАЧАЛЬНО ОБЕСПЕЧИВАЕТСЯ 16 (ДЕСЯТИЧНЫМИ) КАНАЛАМИ
ВВОДА/ВЫВОДА, ИМЕЮЩИМИ НОМЕРА С 0 ПО 15. С ПОМОЩЬЮ ДАННОЙ
МАКРОКОМАНДЫ ЧИСЛО КАНАЛОВ МОЖЕТ БЫТЬ УВЕЛИЧЕНО ДО 255
(ДЕСЯТИЧНЫХ).
    ПАМЯТЬ, ИСПОЛЬЗУЕМАЯ ДЛЯ РАЗМЕЩЕНИЯ НОВЫХ КАНАЛОВ
ВВОДА/ВЫВОДА, РЕЗЕРВИРУЕТСЯ В ПРОГРАММЕ ПОЛЬЗОВАТЕЛЯ.
КАЖДЫЙ КАНАЛ ВВОДА/ВЫВОДА ТРЕБУЕТ 5 СЛОВ ПАМЯТИ. ЕСЛИ
КОЛИЧЕСТВО ОПРЕДЕЛЯЕМЫХ КАНАЛОВ РАВНО N, ТО ПОЛЬЗОВАТЕЛЬ
ДОЛЖЕН ЗАРЕЗЕРВИРОВАТЬ ДЛЯ НИХ 5*N СЛОВ ПАМЯТИ, НАЧИНАЯ С
�


                       - 25 -

АДРЕСА ADDR.
    РЕКОМЕНДУЕТСЯ ИСПОЛЬЗОВАТЬ МАКРОКОМАНДУ .CDFN В
НАЧАЛЕ ПРОГРАММЫ, ПЕРЕД ДЕЙСТВИЕМ ЛЮБОЙ ОПЕРАЦИИ
ВВОДА/ВЫВОДА.
    МАКРОКОМАНДА .CDFN ОПРЕДЕЛЯЕТ ТОЛЬКО НОВЫЕ КАНАЛЫ;
РАНЕЕ ОПРЕДЕЛЕННЫЕ КАНАЛЫ НЕ ИСПОЛЬЗУЮТСЯ, НО СОДЕРЖИМОЕ
СТАРЫХ КАНАЛОВ ПЕРЕДАЕТСЯ В НОВЫЕ. ОПРЕДЕЛЕНИЕ МЕНЬШЕГО,
ЧЕМ УЖЕ ЕСТЬ, КОЛИЧЕСТВА КАНАЛОВ ПРИВОДИТ К СООБЩЕНИЮ ОБ
ОШИБКЕ.
    ЕСЛИ ИСПОЛЬЗУЕТСЯ НЕСКОЛЬКО МАКРОКОМАНД .CDFN,
БУФЕРА КАНАЛОВ ДОЛЖНЫ НАЧИНАТЬСЯ ЛИБО С ОДНОЙ И ТОЙ ЖЕ
ЯЧЕЙКИ, ЛИБО ВООБЩЕ НЕ ПЕРЕКРЫВАТЬСЯ.
    ЕСЛИ ПРОГРАММА ИСПОЛЬЗУЕТ ОВЕРЛЕЙНУЮ СТРУКТУРУ, 15
КАНАЛ НЕ ДОЛЖЕН ИЗМЕНЯТЬСЯ, Т.К. ИСПОЛЬЗУЕТСЯ ДРАЙВЕРОМ
ОВЕРЛЕЕВ. ДРУГИЕ КАНАЛЫ МОГУТ БЫТЬ ОПРЕДЕЛЕНЫ И
ИСПОЛЬЗОВАНЫ КАК ОБЫЧНО.
    МАКРОКОМАНДА .SRESET И .HRESET ОТМЕНЯЮТ ДЕЙСТВИЕ
МАКРОКОМАНДЫ .CDFN И УСТАНАВЛИВАЮТ ИСХОДНЫЕ 16 КАНАЛОВ,
ОПРЕДЕЛЕННЫЕ ПРИ ЗАПУСКЕ ПРОГРАММЫ.

ОШИБКИ:
        КОД                 ПОЯСНЕНИЕ
         0      СДЕЛАНА ПОПЫТКА ОПРЕДЕЛИТЬ МЕНЬШЕ КАНАЛОВ,
                ЧЕМ УЖЕ СЕТЬ.

ПРИМЕР:
    В ПРИМЕРЕ ОПРЕДЕЛЯЕТСЯ СНАЧАЛА 25. КАНАЛОВ, ЗАТЕМ
30. КАНАЛОВ. ПРИ ПОПЫТКЕ ОПРЕДЕЛИТЬ 20. КАНАЛОВ ВОЗНИКАЕТ
ОШИБКА, Т.К. РАНЕЕ БЫЛО ОПРЕДЕЛЕНО БОЛЬШЕЕ КОЛИЧЕСТВО
КАНАЛОВ. НА СИСТЕМНЫЙ ТЕРМИНАЛ ВЫДАЮТСЯ СООБЩЕНИЯ.

        .MCALL  .CDFN,.PRINT,.HRESET,.EXIT
START:  .CDFN   #AREA,#CHANL,#25.   ;ОПРЕДЕЛИТЬ 25. КАНАЛОВ
         BCS    ERR
        .PRINT  #MSG                ;ПЕЧАТЬ СООБЩЕНИЯ
        .CDFN   #AREA,#CHANL,#30.   ;ОПРЕДЕЛИТЬ 30. КАНАЛОВ
         BCS    ERR
        .PRINT  #MSG                ;ПЕЧАТЬ СООБЩЕНИЯ
        .CDFN   #AREA,#CHANL,#20.   ;ОПРЕДЕЛИТЬ 20. КАНАЛОВ
         BCC    ERR1
        .PRINT  #MSG
CONT:   .HRESET                     ;ВОЗВРАТ К 16 КАНАЛАМ
        .CDFN   #AREA,#CHANL,#20.   ;ОПРЕДЕЛИТЬ 20. КАНАЛОВ
         BCS    ERR
        .PRINT  #MSG                ;ПЕЧАТЬ СООБЩЕНИЯ
        .EXIT
ERR:    .PRINT  #MSG1
        .EXIT
ERR1:   .PRINT  #MSG1
         BR     CONT
�


AREA:   .BLKW   3                   ;БЛОК АРГУМЕНТОВ ЕМТ
MSG:    .ASCIZ  /КАНАЛЫ ОПРЕДЕЛЕНЫ/
MSG1:   .ASCIZ  /ОШИБКА .CDFN/
        .EVEN
CHANL:  .BLKW   30.+*5              ;ОБЛАСТЬ ДЛЯ КАНАЛОВ
        .END    START


        3.2.    .CHAIN


    СИСТЕМНАЯ МАКРОКОМАНДА .CHAIN ОБЕСПЕЧИВАЕТ ПЕРЕДАЧУ
УПРАВЛЕНИЯ ИЗ ОДНОЙ ФОНОВОЙ ПРОГРАММЫ В ДРУГУЮ БЕЗ
ВМЕШАТЕЛЬСТВА ОПЕРАТОРА. ПОВТОРЯЯ ЭТОТ ПРОЦЕСС, МОЖНО
ОРГАНИЗОВАТЬ БОЛЬШУЮ ЦЕПОЧКУ ПРОГРАММ.
    ЯЧЕЙКИ ПАМЯТИ 500-507 СОДЕРЖАТ ИМЯ УСТРОЙСТВА И
ФАЙЛА (В КОДЕ RADIX-50) ДЛЯ ЗАГРУЖАЕМОЙ ПРОГРАММЫ, А
ОБЛАСТЬ 510-777 ИСПОЛЬЗУЕТСЯ ДЛЯ ПЕРЕДАЧИ ИНФОРМАЦИИ
МЕЖДУ СВЯЗЫВАЕМЫМИ ПРОГРАММАМИ.
    ФОРМАТ МАКРОКОМАНДЫ:
                        .CHAIN
    ФОРМАТ РЕГИСТРА RO:

                        !--------!--------!
RO =>                   !   10   !    0   !
                        !--------!--------!

    ВЫПОЛНЕНИЕ МАКРОКОМАНДЫ .CHAIN ГАРАНТИРУЕТ
СОХРАНЕНИЕ СОДЕРЖИМОГО ОБЛАСТИ ПАМЯТИ 500-777.
    ПРИ ВЫПОЛНЕНИИ МАКРОКОМАНДЫ .CHAIN ОТКРЫТЫЕ КАНАЛЫ
ВВОДА/ВЫВОДА МОГУТ ИСПОЛЬЗОВАТЬСЯ НОВОЙ ПРОГРАММОЙ.
ОДНАКО СЛЕДУЕТ ПОМНИТЬ, ЧТО МОНИТОР ВО ВРЕМЯ ВЫПОЛНЕНИЯ
МАКРОКОМАНДЫ .CHAIN ВОЗВРАЩАЕТСЯ К ИСХОДНЫМ 16 КАНАЛАМ.
СЛЕДОВАТЕЛЬНО, ПРОГРАММЫ, ОСТАВЛЯЮЩИЕ ФАЙЛЫ ОТКРЫТЫМИ, НЕ
ДОЛЖНЫ ИСПОЛЬЗОВАТЬ МАКРОКОМАНДУ .CDFN.
    НЕРЕЗИДЕНТНЫЕ ДРАЙВЕРЫ УСТРОЙСТВ ВЫГРУЖАЮТСЯ ВО
ВРЕМЯ ВЫПОЛНЕНИЯ МАКРОКОМАНДЫ .CHAIN И ДОЛЖНЫ БЫТЬ
ЗАГРУЖЕНЫ НОВОЙ ПРОГРАММОЙ С ПОМОЩЬЮ МАКРОКОМАНДЫ .FETCH.
    ПРОВЕРКОЙ БИТА CHAIN$ (8 БИТ) СЛОВА СОСТОЯНИЯ
ПРОГРАММЫ JSW (СМ. Т.3 КН.2 Ч.1) МОЖНО УСТАНОВИТЬ, БЫЛА
ЛИ ПРОГРАММА ЗАГРУЖЕНА ПОСРЕДСТВОМ МАКРОКОМАНДЫ  .CHAIN
ИЛИ КОМАНДОЙ МОНИТОРА RUN. БИТ CHAIN$ УСТАНАВЛИВАЕТСЯ
ТОЛЬКО ПРИ ЗАГРУЗКЕ ПРОГРАММЫ МАКРОКОМАНДОЙ .CHAIN.

ОШИБКИ:
    МАКРОКОМАНДОЙ .CHAIN ВЫДАЮТСЯ ТЕЖЕ СООБЩЕНИЯ ОБ
ОШИБКАХ, КАКИЕ ГЕНЕРИРУЮТСЯ ПРИ ВЫПОЛНЕНИИ КОМАНДЫ
МОНИТОРА RUN. ПРИ ПОЯВЛЕНИИ ОШИБКИ МАКРОКОМАНДА .CHAIN
�


                        - 26 -

ИГНОРИРУЕТСЯ И УПРАВЛЕНИЕ ПЕРЕДАЕТСЯ МОНИТОРУ.

ПРИМЕР:
    ПРОГРАММА PRINT.SAV ЗАГРУЖАЕТСЯ ИЗ ГОЛОВНОЙ
ПРОГРАММЫ С ПОМОЩЬЮ МАКРОКОМАНДЫ .CHAIN.

    ГОЛОВНАЯ ПРОГРАММА
    ------------------

        .MCALL  .CHAIN,.TTYIN,.DBLK,.CTRLT
        .CTRLT                  ;ОПРЕДЕЛИТЬ УПРАВЛЯ-
                                ;ЮЩИЕ СИМВОЛЫ
                                ;(ЗДЕСЬ LF)
START:   MOV    #500,R1
         MOV    #FILE,R2
        .REPT   4
         MOV    (R2)+,(R1)+     ;ИМЯ ФАЙЛА В 500-507
        .ENDR
1$:     .TTYIN                  ;ЗАНЕСЕНИЕ СИМВОЛОВ С
         MOVB   RO,(R1)+        ;ТТ: В ОБЛАСТЬ 510-777
         CMPB   RO,#LF          ;ВСЯ СТРОКА ВВЕДЕНА?
         BNE    1$              ;HET
         CLRB   -(R1)           ;ДА
        .CHAIN                  ;ЗАПУСК ПРОГРАММЫ PRINT
FILE:   .DBLK   SY,PRINT,SAV    ;ИМЯ УСТРОЙСТВА И ФАЙЛА
        .END    START

    ПРОГРАММА PRINT
    ---------------

        .MCALL  .PRINT,.EXIT
BUFF=510
START:  .PRINT  #MSG            ;ПЕЧАТЬ СООБЩЕНИЯ
        .PRINT  #BUFF           ;ПЕЧАТЬ ОБЛАСТИ 510-777
        .PRINT  #MSG1           ;ПЕЧАТЬ СООБЩЕНИЯ
        .EXIT
MSG:    .ASCIZ  /НАЧАЛО ПЕЧАТИ СООБЩЕНИЯ ИЗ/
        .ASCIZ  /ОБЛАСТИ 510-777/
MSG1:   .ASCIZ  /КОНЕЦ ПЕЧАТИ/
        .EVEN
        .END    START


        3.3.    CMKT


    СИСТЕМНАЯ МАКРОКОМАНДА .СМКТ ПРЕДНАЗНАЧЕНА ДЛЯ
ОТМЕНЫ НЕВЫПОЛНЕННЫХ МАКРОКОМАНД ВРЕМЕННОГО ИНТЕРВАЛА
(.MRKT).
�


    ФОРМАТ МАКРОКОМАНДЫ:
                        .CMKT   AREA,ID,TIME
ГДЕ
AREA    - АДРЕС СПИСКА АРГУМЕНТОВ ЕМТ ИЗ ТРЕХ СЛОВ;
ID      - ИДЕНТИФИКАТОР КАЖДОЙ МАКРОКОМАНДЫ .MRKT;
TIME    - АДРЕС ДВУХ СЛОВ, СОДЕРЖАЩИХ ВРЕМЯ, ОСТАВШЕЕСЯ В
          ОТМЕНЕННОЙ МАКРОКОМАНДЕ; ПЕРВОЕ СЛОВО СОДЕРЖИТ
          СТАРШИЕ РАЗРЯДЫ, ВТОРОЕ - МЛАДШИЕ.
    ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:

                        !--------!--------!
RO => AREA:             !   23   !    0   !
                        !--------!--------!
                        !       ID        !
                        !-----------------!
                        !      TIME       !
                        !-----------------!

    ОТМЕНА МАКРОКОМАНДЫ .MRKT ОСВОБОЖДАЕТ
СООТВЕТСТВУЮЩИЙ ЭЛЕМЕНТ ОЧЕРЕДИ ДЛЯ ДРУГИХ ЦЕЛЕЙ.
    ЕСЛИ НЕСКОЛЬКО МАКРОКОМАНД .MRKT ИМЕЮТ ОДИНАКОВЫЙ
ID, ТО ОТМЕНЯЕТСЯ МАКРОКОМАНДА С САМЫМ РАННИМ ВРЕМЕНЕМ
ОКОНЧАНИЯ.
    ЕСЛИ ID = 0, ТО ВСЕ НЕСИСТЕМНЫЕ МАКРОКОМАНДЫ .MRKT
(В ДИАПАЗОНЕ 1-177377) ДЛЯ ДАННОЙ ПРОГРАММЫ ОТМЕНЯЮТСЯ, А
АРГУМЕНТ TIME ИГНОРИРУЕТСЯ.

ОШИБКИ:
        КОД                 ПОЯСНЕНИЕ
         0      МАКРОКОМАНДА .MRKT С ЗАДАННЫМ NUM НЕ
                НАЙДЕНА (ЛИБО МАКРОКОМАНДА НЕ БЫЛА ЗАДАНА,
                ЛИБО ОНА УЖЕ ЗАКОНЧЕНА).

ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .MRKT.


    3.4.    .CNFDF


    СИСТЕМНАЯ МАКРОКОМАНДА .CNFDF ОПРЕДЕЛЯЕТ СИМВОЛЫ И
МНЕМОНИЧЕСКИЕ ОБОЗНАЧЕНИЯ РАЗРЯДОВ СЛОВ КОНФИГУРАЦИИ
СИСТЕМЫ (СМ. Т.3 КН.2 Ч.1).
    ФОРМАТ МАКРОКОМАНДЫ:
                        .CNFDF
    РАСШИРЕНИЕ МАКРОКОМАНДЫ:
�


                        - 27 -

CONFIG  =^0300
FBMON$  =^01
HWDSP$  =^04
BATCH$  =^010
CLK50$  =^040
HWFPU$  =^0100
FJOB$   =^0200
GTLNK$  =^0400
USR$    =^01000
LSI$    =^04000
MMU$    =^010000
LKCS$   =^020000
KW$P    =^040000
CLOCK$  =^0100000
CONFG2  =^0370
CACHE$  =^01
MPTY$   =^02
SWREG$  =^04
LIGHT$  =^010
EIS$    =^0400
VS6$0   =^01000
TYP70$  =^040000
TYP60$  =^0100000
SYSGEN  =^0372
ERLG$   =^01
MMGT$   =^02
TIMIT$  =^04
MPTY$   =^010000
TIMER$  =^020000
ESCP$   =^014000
MTTY$   =^020000

    ДАННАЯ МАКРОКОМАНДА КОДОВ ЕМТ НЕ ГЕНЕРИРУЕТ, А
ЯВЛЯЕТСЯ ЧИСТО ОПИСАТЕЛЬНОЙ.

ОШИБКИ: ОТСУТСТВУЮТ.

ПРИМЕР:
    В ПРИМЕРЕ ОПРЕДЕЛЯЕТСЯ РЕЗИДЕНТНОСТЬ USR.

        .MCALL  .CNFDF,.EXIT,.PRINT,.GVAL
        .CNFDF                  ;ОПРЕДЕЛИТЬ МНЕМОНИКУ
                                ;СМЕЩЕНИЯ МОНИТОРА
                                ;CONFIG (300) И ЕГО
                                ;БИТОВ (ЗДЕСЬ USR$)
START:  .GVAL   #AREA,#CONFIG   ;ПОЛУЧИТЬ СОДЕРЖИМОЕ
                                ;СМЕЩЕНИЯ CONFIG B RO
         BIT    RO,#USR$        ;БИТ USR$ УСТАНОВЛЕН
         BEQ    1$              ;HET
        .PRINT  #MSG            ;ДА...ПЕЧАТЬ СООБЩЕНИЯ
�


         BR     2$
1$:     .PRINT  #MSG1           ;ПЕЧАТЬ СООБЩЕНИЯ
2$:     .EXIT
AREA:   .BLKW   2               ;БЛОК АРГУМЕНТОВ ЕМТ
MSG:    .ASCIZ  /USR НЕ РЕЗИДЕНТНА/
MSG1:   .ASCIZ  /USR РЕЗИДЕНТНА/
        .EVEN
        .END    START


        3.5.    .CNTXSW (ТОЛЬКО ДЛЯ FB- И ХМ- МОНИТОРОВ)


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

                        !--------!--------!
RO => AREA:             !   33   !    0   !
                        !--------!--------!
                        !      ADDR       !
                        !-----------------!

    ТАБЛИЦА АДРЕСОВ ДОЛЖНА ЗАКАНЧИВАТЬСЯ НУЛЕВЫМ СЛОВОМ.
АДРЕСА ДОЛЖНЫ БЫТЬ ЧЕТНЫМИ И ПРИНАДЛЕЖАТЬ К ОДНОЙ ИЗ
СЛЕДУЮЩИХ ОБЛАСТЕЙ:
    - В ДИАПАЗОНЕ 0 - 476 (ВОСЬМЕРИЧНЫХ);
    - В ОБЛАСТИ ЗАДАНИЯ ПОЛЬЗОВАТЕЛЯ;
    - В СТРАНИЦЕ ВВОДА/ВЫВОДА (160000-177776).

    ПРИ ПЕРЕКЛЮЧЕНИИ ИЗ ФОНОВОГО РЕЖИМА В ОПЕРАТИВНЫЙ (И
НАОБОРОТ) СИСТЕМА СОХРАНЯЕТ ИНФОРМАЦИЮ ДЛЯ ПРОГРАММЫ,
ВКЛЮЧАЮЩУЮ:
    - СОДЕРЖИМОЕ УНИВЕРСАЛЬНЫХ РЕГИСТРОВ RO-R5;
    - ВЕКТОР ИНСТРУКЦИИ TRAP (ЯЧЕЙКИ 34-36);
    - ЯЧЕЙКИ СИСТЕМНОЙ ОБЛАСТИ СВЯЗИ (40-52);
    - ЯЧЕЙКИ, ОПРЕДЕЛЕННЫЕ МАКРОКОМАНДОЙ .CNTXSW.

    ЕСЛИ МАКРОКОМАНДА .SFPA ВЫПОЛНЯЕТСЯ С НЕНУЛЕВЫМИ
АДРЕСАМИ, ТО ТАКЖЕ СОХРАНЯЮТСЯ ВСЕ РЕГИСТРЫ И СЛОВО
�


                        - 28 -

СОСТОЯНИЯ ПРОЦЕССОРА С ПЛАВАЮЩЕЙ ЗАПЯТОЙ (ДЛЯ СМ-1420).

    ПРИ МНОГОКРАТНОМ ВЫПОЛНЕНИИ МАКРОКОМАНДЫ .CNTXSW,
СОХРАНЯЮТСЯ ТОЛЬКО АДРЕСА ИЗ ПОСЛЕДНЕГО СПИСКА;
ПРЕДШЕСТВУЮЩИЕ СПИСКИ ИГНОРИРУЮТСЯ.
    ЕСЛИ АРГУМЕНТ ADDR=0, ТО НИКАКИЕ АДРЕСА НЕ
СОХРАНЯЮТСЯ.
    П_P_И_M_E_Ч_A_H_И_E. В ХМ - МОНИТОРЕ МАКРОКОМАНДА
.CNTXSW ИГНОРИРУЕТСЯ ПО ДВУМ ПРИЧИНАМ:
    - ВИРТУАЛЬНАЯ ПРОГРАММА НЕ ДЕЛИТ ЯЧЕЙКИ ПАМЯТИ С
      ДРУГИМИ ПРОГРАММАМИ;
    - ВЕКТОРЫ IOT, TRAP, BPT, А ТАКЖЕ ВЕКТОР
      ПРЕРЫВАНИЙ ДИСПЕТЧЕРА ПАМЯТИ (ЯЧЕЙКИ 250, 252)
      АВТОМАТИЧЕСКИ ВКЛЮЧАЮТСЯ В ОБЛАСТЬ СОХРАНЕНИЯ
      ХМ-МОНИТОРОМ И МОГУТ ИСПОЛЬЗОВАТЬСЯ ПРОГРАММАМИ,
      НЕ ПРИМЕНЯЯ МАКРОКОМАНДУ .CNTXSW.

ОШИБКИ:
        КОД                 ПОЯСНЕНИЕ
         0      НЕЧЕТНЫЙ АДРЕС В ТАБЛИЦЕ ADDR ИЛИ ОН

ПРИМЕР:
    В ПРИМЕРЕ ВКЛЮЧАЮТСЯ В ОБЛАСТЬ СОХРАНЕНИЯ ЗАДАЧИ
АДРЕСА 20, 22, 177302, 177304, 177310.

        .MCALL  .CNTXSW,.PRINT,.EXIT
START:   MOV    #LIST,RO
        .CNTXSW .SWAPLS             ;ВКЛЮЧИТЬ В ОБЛАСТЬ
                                    ;СОХРАНЕНИЯ ЗАДАЧИ
         BCC    1$
        .PRINT  #MSG
        .EXIT
1$:     .PRINT  #MSG1
        .EXIT
SWAPLS: .WORD   20                  ;ТАБЛИЦА АДРЕСОВ
        .WORD   22                  1ДЛЯ СОХРАНЕНИЯ
        .WORD   177302
        .WORD   177304
        .WORD   177310
        .WORD   0                   ;КОНЕЦ ТАБЛИЦЫ
LIST:   .BYTE   0,33                ;БЛОК АРГУМЕНТОВ ЕМТ
        .WORD   0
MSG:    .ASCIZ  /АДРЕС НЕВЕРЕН/
MSG1:   .ASKIZ  /АДРЕСА ВКЛЮЧЕНЫ В/
        .ASCIZ  /ПЕРЕКЛЮЧАТЕЛЬ РЕСУРСОВ/
        .EVEN
        .END    START
�


        3.6.    .CSIGEN


    СИСТЕМНАЯ МАКРОКОМАНДА .CSIGEN ВЫЗЫВАЕТ
ИНТЕРПРЕТАТОР КОМАНДНОЙ СТРОКИ (CSI) В ОБЫЧНОМ РЕЖИМЕ ДЛЯ
ОБРАБОТКИ СТАНДАРТНОЙ КОМАНДНОЙ СТРОКИ РАФОС.
    ФОРМАТ МАКРОКОМАНДЫ:
                .CSIGEN   DEVSPC,DEVEXT,CSTRNG[,LINBUF]
ГДЕ
DEVSPC  - АДРЕС ОБЛАСТИ ПАМЯТИ, КУДА ЗАГРУЖАЮТСЯ ДРАЙВЕРЫ
          УСТРОЙСТВ;
DEVEXT  - АДРЕС БЛОКА ИЗ ЧЕТЫРЕХ СЛОВ, СОДЕРЖАЩЕГО
          РАСШИРЕНИЯ ФАЙЛОВ ПО УМОЛЧАНИЮ В КОДЕ RADIX-50;
CSTRNG  - АДРЕС КОМАНДНОЙ СТРОКИ ИЛИ =0, ЕСЛИ ВВОД СТРОКИ
          ПРОИСХОДИТ С ТЕРМИНАЛА;
LINBUF  - АДРЕС, ГДЕ СОХРАНЯЕТСЯ КОПИЯ КОМАНДНОЙ СТРОКИ.
    ЕСЛИ СТРОКА НАХОДИТСЯ В ПАМЯТИ, ОНА ДОЛЖНА
ЗАКАНЧИВАТЬСЯ НУЛЕВЫМ БАЙТОМ, А НЕ СОДЕРЖАТЬ СИМВОЛЫ
<CR>,<LF>.
    БЛОК DEVEXT СОДЕРЖИТ:
СЛОВО 1 - РАСШИРЕНИЕ ДЛЯ ВСЕХ ВХОДНЫХ ФАЙЛОВ;
СЛОВО 2 - РАСШИРЕНИЕ ДЛЯ ПЕРВОГО ВЫХОДНОГО ФАЙЛА;
СЛОВО 3 - РАСШИРЕНИЕ ДЛЯ ВТОРОГО ВЫХОДНОГО ФАЙЛА;
СЛОВО 4 - РАСШИРЕНИЕ ДЛЯ ТРЕТЬЕГО ВЫХОДНОГО ФАЙЛА.
    ЕСЛИ НЕ ИСПОЛЬЗУЮТСЯ РАСШИРЕНИЯ ПО УМОЛЧАНИЮ,
СООТВЕТСТВУЮЩИЕ СЛОВА ДОЛЖНЫ СОДЕРЖАТЬ 0.
    ОБЛАСТЬ LINBUF (ДЛИНОЮ 81. БАЙТ) РЕЗЕРВИРУЕТСЯ
ПОЛЬЗОВАТЕЛЕМ. ВВОДИМАЯ СТРОКА ПРЕДСТАВЛЯЕТСЯ, КАК СТРОКА
ДИРЕКТИВЫ .ASCIZ, И МОЖЕТ БЫТЬ НАПЕЧАТАНА С ПОМОЩЬЮ
МАКРОКОМАНДЫ .PRINT.
    МАКРОКОМАНДА .CSIGEN АВТОМАТИЧЕСКИ ВЫБИРАЕТ СТРОКУ
ИЗ КОМАНДНОГО ФАЙЛА, ЕСЛИ БЫЛ УКАЗАН ВВОД С ТЕРМИНАЛА
(CSTRNG=0), А САМА ПРОГРАММА ВЫЗЫВАЛАСЬ ИЗ ЭТОГО
�


                        - 29 -

КОМАНДНОГО ФАЙЛА.
    МАКРОКОМАНДА .CSIGEN СВЯЗЫВАЕТ ТРИ ВОЗМОЖНЫХ
ВЫХОДНЫХ ФАЙЛА С КАНАЛАМИ 0,1,2 СООТВЕТСТВЕННО И ШЕСТЬ
ВХОДНЫХ ФАЙЛОВ - С КАНАЛАМИ 3-10 (ВОСЬМЕРИЧНЫХ). ПРОПУСК
СПЕЦИФИКАЦИИ ФАЙЛА В КОМАНДНОЙ СТРОКЕ ОСТАВЛЯЕТ
СООТВЕТСТВУЮЩИЙ КАНАЛ СВОБОДНЫМ.
    ОБЛАСТЬ DEVSPC ДОЛЖНА БЫТЬ ДОСТАТОЧНОЙ, ЧТОБЫ
ВМЕСТИТЬ ВСЕ ВВОДИМЫЕ ДРАЙВЕРЫ ОДНОВРЕМЕННО. ЕСЛИ РАЗМЕРЫ
ДРАЙВЕРОВ ПРЕВЫШАЮТ ИМЕЮЩУЮСЯ ОБЛАСТЬ, ПРОГРАММА
ПОЛЬЗОВАТЕЛЯ МОЖЕТ БЫТЬ ИСПОРЧЕНА. ПО ЗАВЕРШЕНИИ
МАКРОКОМАНДЫ .CSIGEN RO СОДЕРЖИТ АДРЕС ПЕРВОЙ СВОБОДНОЙ
ЯЧЕЙКИ ВЫШЕ ДРАЙВЕРОВ.
    КЛЮЧИ И СВЯЗАННЫЕ С НИМИ ЗНАЧЕНИЯ ПЕРЕДАЮТСЯ В СТЕК
(СМ. НИЖЕ).

ОШИБКИ:
        КОД                 ПОЯСНЕНИЕ
         0      НЕДОПУСТИМАЯ КОМАНДА;
         1      УКАЗАННОЕ УСТРОЙСТВО ОТСУТСТВУЕТ;
         2      НЕ ИСПОЛЬЗУЕТСЯ;
         3      ПЕРЕПОЛНЕНИЕ КАТАЛОГА;
         4      ВХОДНОЙ ФАЙЛ НЕ НАЙДЕН.

    П_P_И_M_E_Ч_A_H_И_E. ЕСЛИ ВВОД СТРОКИ ПРОИСХОДИТ С
ТЕРМИНАЛА, ТО ПРИ ПОЯВЛЕНИИ ОШИБОК СООБЩЕНИЕ О НИХ
ВЫВОДИТСЯ НА СИСТЕМНЫЙ ТЕРМИНАЛ.

    ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .CSTAT.


        3.7.    .CSISPC


    СИСТЕМНАЯ МАКРОКОМАНДА .CSISPC ВЫЗЫВАЕТ
ИНТЕРПРЕТАТОР КОМАНДНОЙ СТРОКИ В СПЕЦИАЛЬНОМ РЕЖИМЕ ДЛЯ
ОБРАБОТКИ СТАНДАРТНОЙ КОМАНДНОЙ СТРОКИ СИСТЕМЫ РАФОС.
    ФОРМАТ МАКРОКОМАНДЫ:
                .CSISPC  OUTSPC,DEVEXT,CSTRNG[,LINBUF]
ГДЕ
OUTSPC  - АДРЕС БЛОКА ИЗ 39 СЛОВ, ГДЕ РАЗМЕЩАЮТСЯ
          ДЕСКРИПТОРЫ ФАЙЛОВ, УКАЗАННЫЕ В МАКРОКОМАНДЕ
          .CSISPC;
DEVEXT  - АДРЕС БЛОКА ИЗ ЧЕТЫРЕХ СЛОВ, СОДЕРЖАЩЕГО
          РАСШИРЕНИЯ ФАЙЛОВ ПО УМОЛЧАНИЮ В КОДЕ RADIX-50;
CSTRNG  - АДРЕС КОМАНДНОЙ СТРОКИ ИЛИ #8, ЕСЛИ ВВОД СТРОКИ
          ПРОИСХОДИТ С ТЕРМИНАЛА;
LINBUF  - АДРЕС, ГДЕ СОХРАНЯЕТСЯ КОПИЯ КОМАНДНОЙ СТРОКИ.
    В ЭТОМ РЕЖИМЕ ИНТЕРПРЕТАТОР КОМАНДНОЙ СТРОКИ НЕ
ПРОИЗВОДИТ ЗАГРУЗКУ ДРАЙВЕРОВ И НЕ ВЫПОЛНЯЕТ МАКРОКОМАНД
.CLOSE, .ENTER И .LOOKUP.
�


    В БЛОКЕ OUTSPC ОТВОДИТСЯ ПЕРВЫЕ 15 СЛОВ ДЛЯ ТРЕХ
ВЫХОДНЫХ ФАЙЛОВ (5 СЛОВ НА ФАЙЛ) И 24 СЛОВА ДЛЯ ШЕСТИ
ВХОДНЫХ ФАЙЛОВ (4 СЛОВА НА ФАЙЛ). ЕСЛИ КАКОЙ-ТО ФАЙЛ
ОТСУТСТВУЕТ, ТО СООТВЕТСТВУЮЩЕЕ ПОЛЕ ЗАПОЛНЯЕТСЯ НУЛЯМИ.
    В БЛОК ДЛЯ ВЫХОДНЫХ ФАЙЛОВ ЗАНОСИТСЯ:
1 СЛОВО     - ИМЯ УСТРОЙСТВА (RADIX-50);
2-3 СЛОВО   - ИМЯ ФАЙЛА (RADIX-50);
4 СЛОВО     - РАСШИРЕНИЕ ИМЕНИ ФАЙЛА (RADIX-50);
5 СЛОВО     - РАЗМЕР ФАЙЛА (ВОСЬМЕРИЧНОЕ).
    В БЛОК ДЛЯ ВХОДНЫХ ФАЙЛОВ ЗАНОСИТСЯ:
1 СЛОВО     - ИМЯ УСТРОЙСТВА (RADIX-50);
2-3 СЛОВО   - ИМЯ ФАЙЛА (RADIX-50);
4 СЛОВО     - РАСШИРЕНИЕ ИМЕНИ ФАЙЛА (RADIX-50).
    ЕСЛИ СТРОКА НАХОДИТСЯ В ПАМЯТИ, ОНА ДОЛЖНА
ЗАКАНЧИВАТЬСЯ НУЛЕВЫМ БАЙТОМ, А НЕ СОДЕРЖАТЬ СИМВОЛЫ
<CR>,<LF>.
    БЛОК DEVEXT СОДЕРЖИТ:
СЛОВО 1 - РАСШИРЕНИЕ ДЛЯ ВСЕХ ВХОДНЫХ ФАЙЛОВ;
�


                        - 30 -

СЛОВО 2 - РАСШИРЕНИЕ ДЛЯ ПЕРВОГО ВЫХОДНОГО ФАЙЛА;
СЛОВО 3 - РАСШИРЕНИЕ ДЛЯ ВТОРОГО ВЫХОДНОГО ФАЙЛА;
СЛОВО 4 - РАСШИРЕНИЕ ДЛЯ ТРЕТЬЕГО ВЫХОДНОГО ФАЙЛА.
    ЕСЛИ НЕ ИСПОЛЬЗУЮТСЯ РАСШИРЕНИЯ ПО УМОЛЧАНИЮ,
СООТВЕТСТВУЮЩИЕ СЛОВА ДОЛЖНЫ СОДЕРЖАТЬ 0.
    ОБЛАСТЬ LINBUF (ДЛИНОЮ 81. БАЙТ) РЕЗЕРВИРУЕТСЯ
ПОЛЬЗОВАТЕЛЕМ. ВВОДИМАЯ СТРОКА ПРЕДСТАВЛЯЕТСЯ, КАК СТРОКА
ДИРЕКТИВЫ .ASCIZ, И МОЖЕТ БЫТЬ НАПЕЧАТАНА С ПОМОЩЬЮ
МАКРОКОМАНДЫ .PRINT.
    МАКРОКОМАНДА .CSISPC АВТОМАТИЧЕСКИ ВЫБИРАЕТ СТРОКУ
ИЗ КОМАНДНОГО ФАЙЛА, ЕСЛИ БЫЛ УКАЗАН ВВОД С ТЕРМИНАЛА
(CSTRNG=0), А САМА ПРОГРАММА ВЫЗЫВАЛАСЬ ИЗ ЭТОГО
КОМАНДНОГО ФАЙЛА.
    КЛЮЧИ И СВЯЗАННЫЕ С НИМИ ЗНАЧЕНИЯ ПЕРЕДАЮТСЯ В СТЕК
(СМ. НИЖЕ).

ОШИБКИ:
            КОД             ПОЯСНЕНИЕ
             0      НЕДОПУСТИМАЯ КОМАНДА;
             1      УКАЗАННОЕ УСТРОЙСТВО ОТСУТСТВУЕТ.

    П_P_И_M_E_Ч_A_H_И_E. ЕСЛИ ВВОД СТРОКИ ПРОИСХОДИТ С
ТЕРМИНАЛА, ТО ПРИ ПОЯВЛЕНИИ ОШИБОК СООБЩЕНИЕ О НИХ
ВЫВОДИТСЯ НА СИСТЕМНЫЙ ТЕРМИНАЛ.

ПРИМЕР:
    В ПРИМЕРЕ ПОКАЗАНО ИСПОЛЬЗОВАНИЕ CSI В СПЕЦИАЛЬНОМ
РЕЖИМЕ. ПРОГРАММА ЧИТАЕТ ФАЙЛ В ФОРМАТЕ ДОС И ЗАПИСЫВАЕТ
ЕГО В ФОРМАТЕ РАФОС.

        .MCALL  .CSISPC,.PRINT,.EXIT,.ENTER,.CLOSE
START:  .CSISPC #OUTSPC,#DEXT,#CSTRNG   ;ВВЕСТИ КОМАНДНУЮ
                                        ;СТРОКУ ИЗ ПАМЯТИ
         BCC    1$
        .PRINT  #MSG
        .EXIT
1$:     .ENTER  #AREA,#0,#OUTSPC,#OUTSPC+10 ;ОТКРЫТЬ ФАЙЛ
                                            ;ДЛЯ ВЫВОДА
         BCC    2$
        .PRINT  #MSG1
        .EXIT
2$:      JSR    PC,INPUT            ;ПОДПРОГРАММА ВВОДА
                                    ;В ФОРМАТЕ ДОС И ВЫВОДА
                                    ;В ФОРМАТЕ РАФОС
        .CLOSE  #0                  ;ЗАКРЫТЬ ВЫХОДНОЙ ФАЙЛ
        .EXIT
CSTRNG: .ASCIZ  RK1:RAFOS.MAC=RK2:DOS.MAC   ;КОМАНДНАЯ
                                            ;СТРОКА
        .EVEN
�


DEXT:   .WORD   0,0,0,0             ;БЛОК РАСШИРЕНИЙ
                                    ;ПО УМОЛЧАНИЮ
AREA:   .BLKW   5                   ;БЛОК АРГУМЕНТОВ ЕМТ
MSG:    .ASCIZ  /ОШИБКА CSI/
MSG1:   .ASCIZ  /ОШИБКА ENTER/
        .EVEN
INPUT:   .                          ;ТЕКСТ ПОДПРОГРАММЫ
         .
         RTS    PC
OUTSPC  = .                         ;БЛОК ДЕСКРИПТОРОВ
        .END    START


        3.7.1.  ИНФОРМАЦИЯ О КЛЮЧАХ


    В ОБЩЕМ И СПЕЦИАЛЬНОМ РЕЖИМАХ ИНТЕРПРЕТАТОРА
КОМАНДНОЙ СТРОКИ (CSI) КЛЮЧИ И СООТВЕТСТВУЮЩИЕ ИМ
ЗНАЧЕНИЯ ПЕРЕДАЮТСЯ В СТЕК.
    КЛЮЧОМ ЯВЛЯЕТСЯ КОСАЯ ЧЕРТА (/), ЗА КОТОРОЙ СЛЕДУЕТ
ЛЮБОЙ СИМВОЛ (ЖЕЛАТЕЛЬНО, ЧТОБЫ ОН БЫЛ НЕСЛУЖЕБНЫМ).
    ЗА КЛЮЧОМ МОЖЕТ СЛЕДОВАТЬ ЗНАЧЕНИЕ КЛЮЧА, КОТОРОЕ
УКАЗЫВАЕТСЯ ДВОЕТОЧИЕМ (:). ЗНАЧЕНИЕ КЛЮЧА МОЖЕТ БЫТЬ
ЛИБО ВОСЬМЕРИЧНЫМ ЧИСЛОМ, ЛИБО ДЕСЯТИЧНЫМ ЧИСЛОМ, ЛИБО
НАБОРОМ БУКВЕННО-ЦИФРОВЫХ СИМВОЛОВ (ОТ 1 ДО 3 СИМВОЛОВ),
ПЕРВЫЙ ИЗ КОТОРЫХ ДОЛЖЕН БЫТЬ БУКВЕННЫМ. ДЕСЯТИЧНЫЕ
ВЕЛИЧИНЫ УКАЗЫВАЮТСЯ ЧИСЛОМ С ТОЧКОЙ. ЕСЛИ ТОЧКА
ОТСУТСТВУЕТ, ТО ЧИСЛО СЧИТАЕТСЯ ВОСЬМЕРИЧНЫМ.
    ПОЛЬЗОВАТЕЛЬ ПОЛУЧАЕТ В СТЕКЕ КЛЮЧИ И ИХ ЗНАЧЕНИЯ В
СЛЕДУЮЩЕМ ВИДЕ:
СЛОВО 1 - (ВЕРХУШКА СТЕКА). КОЛИЧЕСТВО КЛЮЧЕЙ В КОМАНДНОЙ
          СТРОКЕ; ЕСЛИ 0, ТО КЛЮЧИ ОТСУТСТВУЮТ;
СЛОВО 2 - МЛАДШИЙ БАЙТ СОДЕРЖИТ МНЕМОНИКУ КЛЮЧА, СТАРШИЙ -
          НОМЕР ФАЙЛА, С КОТОРЫМ СВЯЗАН КЛЮЧ; ЕСЛИ 15 БИТ
          =1, ТО КЛЮЧ ИМЕЕТ ЗНАЧЕНИЕ;
СЛОВО 3 - ЕСЛИ УСТАНОВЛЕН 15 БИТ СЛОВА 2, ТО СОДЕРЖИТСЯ
          ЗНАЧЕНИЕ КЛЮЧА; ЕСЛИ НЕТ, ТО СЛЕДУЮЩИЙ КЛЮЧ
          (ЕСЛИ ОН ЕСТЬ).
�


                        - 31 -

    П_P_И_M_E_Ч_A_H_И_E. ЕСЛИ КЛЮЧ ИМЕЕТ НЕСКОЛЬКО
ЗНАЧЕНИЙ, В СТЕК ЗАПИСЫВАЕТСЯ СООТВЕТСТВУЮЩЕЕ КОЛИЧЕСТВО
КЛЮЧЕЙ.
    СЛЕДУЕТ ПОМНИТЬ, ЧТО В FB-МОНИТОРЕ ВВОД С СИСТЕМНОГО
ТЕРМИНАЛА ВСЕГДА ОСУЩЕСТВЛЯЕТ НЕЯВНОЕ ОБРАЩЕНИЕ К
МАКРОКОМАНДЕ .UNLOCK ДЛЯ USR. ЭТО НУЖНО ИМЕТЬ ВВИДУ ПРИ
ИСПОЛЬЗОВАНИИ МАКРОКОМАНДЫ .LOCK.


        3.8.    .CSTAT  (ТОЛЬКО ДЛЯ FB- И ХМ-МОНИТОРОВ)


    СИСТЕМНАЯ МАКРОКОМАНДА .CSTAT ЗАПОЛНЯЕТ 6 СЛОВ
ПАМЯТИ ИНФОРМАЦИЕЙ О КАНАЛЕ.
    ФОРМАТ МАКРОКОМАНДЫ:
                    .CSTAT  AREA,CHAN,ADDR
ГДЕ
AREA    - АДРЕС СПИСКА АРГУМЕНТОВ ЕМТ ИЗ ДВУХ СЛОВ;
CHAN    - НОМЕР КАНАЛА, О КОТОРОМ ТРЕБУЕТСЯ ИНФОРМАЦИЯ;
ADDR    - АДРЕС БЛОКА ИЗ 6 СЛОВ, СОДЕРЖАЩИХ ИНФОРМАЦИЮ О
          КАНАЛЕ.
    ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:

                        !--------!--------!
RO => AREA:             !   27   !  CHAN  !
                        !--------!--------!
                        !       ADDR      !
                        !-----------------!

    ПОЛЬЗОВАТЕЛЮ ПЕРЕДАЕТСЯ:
СЛОВО 1 - СЛОВО СОСТОЯНИЯ КАНАЛА;
СЛОВО 2 - НОМЕР ПЕРВОГО БЛОКА ФАЙЛА;
СЛОВО 3 - ДЛИНА ФАЙЛА;
СЛОВО 4 - МАКСИМАЛЬНЫЙ НОМЕР ЗАПИСАННОГО БЛОКА;
СЛОВО 5 - НОМЕР УСТРОЙСТВА;
СЛОВО 6 - ИМЯ УСТРОЙСТВА (В RADIX-50).
    СЛОВО 2 СОДЕРЖИТ 0, ЕСЛИ УСТРОЙСТВО С
ПОСЛЕДОВАТЕЛЬНЫМ ДОСТУПОМ ИЛИ КАНАЛ БЫЛ ОТКРЫТ
МАКРОКОМАНДАМИ .LOOKUP ИЛИ .ENTER, КАК ДЛЯ УСТРОЙСТВА С
НЕФАЙЛОВОЙ СТРУКТУРОЙ.
    В СЛОВЕ 3 ИНФОРМАЦИЯ ОТСУТСТВУЕТ, ЕСЛИ УСТРОЙСТВО С
НЕФАЙЛОВОЙ СТРУКТУРОЙ, А ТАКЖЕ, ЕСЛИ КАНАЛ БЫЛ ОТКРЫТ
МАКРОКОМАНДАМИ .LOOKUP ИЛИ .ENTER ДЛЯ УСТРОЙСТВА С
НЕФАЙЛОВОЙ СТРУКТУРОЙ.
    В СЛОВЕ 4 ИНФОРМАЦИЯ ОТСУТСТВУЕТ, ЕСЛИ УСТРОЙСТВО С
НЕФАЙЛОВОЙ СТРУКТУРОЙ.

ОШИБКИ:
            КОД             ПОЯСНЕНИЕ
             0          КАНАЛ НЕ ОТКРЫТ.
�



ПРИМЕР:
    В ПРИМЕРЕ ПОКАЗАНО ПОЛУЧЕНИЕ ИМЕНИ УСТРОЙСТВА,
СВЯЗАННОГО С ПЕРВЫМ ВЫХОДНЫМ ФАЙЛОМ В КОМАНДНОЙ СТРОКЕ.

        .MCALL  .CSTAT,.CSIGEN,.PRINT,.EXIT
START:  .CSIGEN #DEVSPC,#DEVEXT     ;ВВОД КОМАНДНОЙ СТРОКИ
        .CSTAT  #AREA,#0,#ADDR      ;ПОЛУЧИТЬ ИНФОРМАЦИЮ
                                    ;О 0 КАНАЛЕ
         BCS    ERR
         MOV    #ADDR+10,R5
         MOV    (R5)+,RO
         ADD    (PC)+,R0
        .RAD50  /   0/
         ADD    (R5),R0
         MOV    R0,DEVNAM           ;ПОЛУЧИТЬ ИМЯ УСТРОЙСТВ
        .EXIT
AREA:   .BLKW   5                   ;БЛОК АРГУМЕНТОВ ЕМТ
ADDR:   .BLKW   6                   ;БЛОК ИНФОРМАЦИИ
                                    ;О КАНАЛЕ
DEVNAM: .WORD   0
DEVEXT: .WORD   0,0,0,0             ;БЛОК РАСШИРЕНИЙ
                                    ;ПО УМОЛЧАНИЮ
ERR:    .PRINT  #MSG
        .EXIT
MSG:    .ASCIZ  /КАНАЛ НЕ ОТКРЫТ/
        .EVEN
DEVSPC  = .                         ;АДРЕС ЗАГРУЗКИ
                                    ;ДРАЙВЕРОВ
        .END    START


        3.9.    .CTRLT


    СИСТЕМНАЯ МАКРОКОМАНДА .CTRLT ОПРЕДЕЛЯЕТ
СИМВОЛИЧЕСКИЕ ОБОЗНАЧЕНИЯ УПРАВЛЯЮЩИХ СИМВОЛОВ (ИМЕЮЩИХ
КОДЫ 0-37).
    ФОРМАТ МАКРОКОМАНДЫ:
                        .CTRLT
�


                        - 32 -

    РАСШИРЕНИЕ МАКРОКОМАНДЫ:
NUL     =^0000
SOH     =^0001
STH     =^0002
ETX     =^0003
EOT     =^0004
ENQ     =^0005
ACK     =^0006
BEL     =^0007
BS      =^0010
HT      =^0011
LF      =^0012
VT      =^0013
FF      =^0014
CR      =^0015
SO      =^0016
SI      =^0017
DLE     =^0020
DC1     =^0021
DC2     =^0022
DC3     =^0023
DC4     =^0024
NAK     =^0025
SYN     =^0026
ETB     =^0027
CAN     =^0030
EM      =^0031
SUB$    =^0032
ESC     =^0033
FS      =^0034
GS      =^0035
RS      =^0036
US      =^0037

    ДАННАЯ МАКРОКОМАНДА КОДОВ ЕМТ НЕ ГЕНЕРИРУЕТ, А
ЯВЛЯЕТСЯ ЧИСТО ОПИСАТЕЛЬНОЙ.

ОШИБКИ: ОТСУТСТВУЮТ.

ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .CHAIN.


        3.10.   .DATE


    СИСТЕМНАЯ МАКРОКОМАНДА .DATE ПЕРЕДАЕТ ИНФОРМАЦИЮ О
ТЕКУЩЕЙ ДАТЕ В RO:
    - БИТЫ 13-10    - НОМЕР МЕСЯЦА (1-12.);
    - БИТЫ  9-5     - ДЕНЬ НЕДЕЛИ (1-31.);
    - БИТЫ  4-0     - ГОД (ЗНАЧЕНИЕ ГОДА ОПРЕДЕЛЯЕТСЯ
                      ВЫЧИТАНИЕМ ИЗ ТЕКУЩЕГО ГОДА ЧИСЛА 72.).
�


    ФОРМАТ МАКРОКОМАНДЫ:
                        .DATE
    ФОРМАТ РЕГИСТРА RO:

                        !--------!--------!
RO =>                   !   12   !    0   !
                        !--------!--------!

    ЕСЛИ ПОСЛЕ ВЫПОЛНЕНИЯ МАКРОКОМАНДЫ RO=0, ТО ЭТО
ОЗНАЧАЕТ, ЧТО ДАТА НЕ БЫЛА ВВЕДЕНА ПОЛЬЗОВАТЕЛЕМ.

    П_P_И_M_E_Ч_A_H_И_E. РАФОС НЕ ПРОИЗВОДИТ ПРОВЕРКУ НА
КОРРЕКТНОСТЬ УКАЗАННОЙ ДАТЫ (КОНЕЦ МЕСЯЦА И ГОДА).
НАПРИМЕР, ПОЛЬЗОВАТЕЛЬ МОЖЕТ ВВЕСТИ ИАКУЮ ДАТУ КАК 31
ФЕВРАЛЯ. НЕОБХОДИМО ТОЧНО ВЫЧИСЛЯТЬ ПРОГРАММОЙ ГОД И
ПЕРВЫЙ ДЕНЬ КАЖДОГО МЕСЯЦА.

ОШИБКИ: ОТСУТСТВУЮТ.

ПРИМЕР:
    В ПРИМЕРЕ ПРИВЕДЕНА ПОДПРОГРАММА ОБРАБОТКИ ДАТЫ,
ВВЕДЕННОЙ ПОЛЬЗОВАТЕЛЕМ КОМАНДОЙ МОНИТОРА DATE.

; ОБРАЩЕНИЕ К ПОДПРОГРАММЕ:
;
;           JSR     PC,DATE
;
; РЕЗУЛЬТАТ: RO = МЕСЯЦ (1-12)
;            R1 = ЧИСЛО (1-31)
;            R2 = ГОД (ПО МОДУЛЮ 100)
;
; ОШИБКИ: RO=0, ЕСЛИ ДАТА НЕ ВВЕДЕНА ПОЛЬЗОВАТЕЛЕМ
;
        .MCALL  .DATE,.POP,.PUSH
DATE:
        .PUSH   R2,R1,RO            ;СОХРАНИТЬ РЕГИСТРЫ
        .DATE                       ;ВЫБРАТЬ ДАТУ
         MOV    RO,R2               ;ВВЕДЕНА?
         BEQ    1$                  ;HET
         BIC    #^C37,R2            ;ВЫБРАТЬ ГОД В R2
         ADD    #72.,R2
         MOV    RO,R1               ;ВЫБРАТЬ ЧИСЛО
         ASL    R1
         ASL    R1
         ASL    R1
         SWAB   R1
         BIC    #^C37,R1
         SWAB   RO                  ;ВЫБРАТЬ МЕСЯЦ
         ASR    RO
         ASR    RO
         BIC    #^C37,RO
1$:     .POP    RO,R1,R2            ;ВОССТАНОВИТЬ РЕГИСТРЫ
         RTS    PC
        .END
�


                        - 33 -


        3.11.   .DBLK


    СИСТЕМНАЯ МАКРОКОМАНДА .DBLK СОЗДАЕТ БЛОК УСТРОЙСТВА
(СМ. Т.3 КН.2 Ч.1) ДЛЯ УКАЗАННОГО ФАЙЛА В КОДЕ RADIX-50.
    ФОРМАТ МАКРОКОМАНДЫ:
                        .DBLK   DEV,NAM,TYP
ГДЕ
DEV - ИМЯ УСТРОЙСТВА;
NAM - НАИМЕНОВАНИЕ ФАЙЛА;
TYP - РАСШИРЕНИЕ ИМЕНИ ФАЙЛА.
    ДАННАЯ МАКРОКОМАНДА КОДОВ ЕМТ НЕ ГЕНЕРИРУЕТ.

ОЩИБКИ: ОТСУТСТВУЮТ.

ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .CHAIN.


        3.12.   .DEVICE (ТОЛЬКО ДЛЯ FB- И ХМ- МОНИТОРОВ)


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

                        !--------!--------!
RO => AREA:             !   14   !   0    !
                        !--------!--------!
                        !       ADDR      !
                        !-----------------!

    ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ (С ОБ_ЕДИНЕНИЕМ):

                        !--------!--------!
RO => AREA:             !   14   !    1   !
                        !--------!--------!
                        !       ADDR      !
                        !-----------------!

�


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

ОШИБКИ: ОТСУТСТВУЮТ.

ПРИМЕР:
    В ПРИМЕРЕ ПО ОКОНЧАНИИ РАБОТЫ В ЯЧЕЙКУ 172570
ЗАНОСИТСЯ 0.

        .MCALL  .DEVICE,.EXIT
START:  .DEVICE #AREA               ;ОПРЕДЕЛИТЬ ТАБЛИЦУ
        .EXIT
AREA:   .BYTE   0,10                ;БЛОК АРГУМЕНТОВ ЕМТ
        .WORD   ATOD
ATOD:   .WORD   172570              ;ТАБЛИЦА АДРЕСОВ И
        .WORD   0                   ;ЗНАЧЕНИЙ
        .WORD   0
        .END    START
�


                        - 34 -


        3.13.   .DIR


    СИСТЕМНАЯ МАКРОКОМАНДА .DIR ВЫПОЛНЯЕТ МАКРОКОМАНДУ,
ЗАДАННУЮ ТАБЛИЦЕЙ АРГУМЕНТОВ.
    ФОРМАТ МАКРОКОМАНДЫ:
                        .DIR    ADDR
ГДЕ
ADDR    - АДРЕС ТАБЛИЦЫ АРГУМЕНТОВ ВЫПОЛНЯЕМОЙ
          МАКРОКОМАНДЫ.
    ТАБЛИЦА АРГУМЕНТОВ МОЖЕТ БЫТЬ РАСПОЛОЖЕНА В ЛЮБОМ
МЕСТЕ ПРОГРАММЫ ПОЛЬЗОВАТЕЛЯ.

ОШИБКИ: ОТСУТСТВУЮТ.

ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .SYNCH.


        3.14.   .DSTATUS


    СИСТЕМНАЯ МАКРОКОМАНДА .DSTATUS ПЕРЕДАЕТ СИСТЕМНЫЕ
ХАРАКТЕРИСТИКИ УСТРОЙСТВА В ПРОГРАММУ ПОЛЬЗОВАТЕЛЯ.
    ФОРМАТ МАКРОКОМАНДЫ:
                        .DSTATUS    ADDR,DNAM
ГДЕ
ADDR    - АДРЕС БЛОКА ИЗ 4 СЛОВ ДЛЯ ИНФОРМАЦИИ О СОСТОЯНИИ
          УСТРОЙСТВА;
DNAM    - АДРЕС СЛОВА, СОДЕРЖАЩЕГО ИМЯ УСТРОЙСТВА
          (RADIX-50), О КОТОРОМ НЕОБХОДИМО ПОЛУЧИТЬ
          ИНФОРМАЦИЮ.
    ПОЛЬЗОВАТЕЛЬ ПОЛУЧАЕТ СЛЕДУЮЩУЮ ИНФОРМАЦИЮ:
СЛОВО 1 - ПАРАМЕТРЫ УСТРОЙСТВА (ДРАЙВЕРА);
СЛОВО 2 - РАЗМЕР ДРАЙВЕРА В БАЙТАХ;
СЛОВО 3 - АДРЕС ЗАГРУЗКИ ДРАЙВЕРА;
СЛОВО 4 - РАЗМЕР УСТРОЙСТВА В БЛОКАХ.
    СЛОВО ПАРАМЕТРОВ УСТРОЙСТВА СОДЕРЖИТ:
БИТ 15  - 0 УСТРОЙСТВО С БЕСКАТАЛОГОВОЙ ОРГАНИЗАЦИЕЙ;
        - 1 УСТРОЙСТВО С КАТАЛОГОВОЙ ОРГАНИЗАЦИЕЙ;
БИТ 14  - 1 УСТРОЙСТВО ТОЛЬКО ДЛЯ ЧТЕНИЯ;
БИТ 13  - 1 УСТРОЙСТВО ТОЛЬКО ДЛЯ ЗАПИСИ;
БИТ 12  - 1 УСТРОЙСТВО С НЕСТАНДАРТНОЙ ФАЙЛОВОЙ
          СТРУКТУРОЙ;
БИТ 11  - 0 ПРИ УДАЛЕНИИ ПРОГРАММЫ ДРАЙВЕР ВЫПОЛНЯЕТ
          ЗАВЕРШАЮЩИХ ОПЕРАЦИЙ С УСТРОЙСТВОМ, ЕСЛИ ЭЛЕМЕНТ
          ОЧЕРЕДИ АКТИВЕН;
        - 1 ПРИ УДАЛЕНИИ ПРОГРАММЫ ДРАЙВЕР ВЫПОЛНЯЕТ
          ЗАВЕРШАЮЩИЕ ОПЕРАЦИИ С УСТРОЙСТВОМ;
БИТ 10  - 0 МАКРОКОМАНДА .SPFUN ЗАПРЕЩЕНА;
        - 1 ДРАЙВЕР МОЖЕТ ВЫПОЛНЯТЬ МАКРОКОМАНДУ .SPFUN;
�


БИТЫ 0-7- НОМЕР, ОПРЕДЕЛЯЮЩИЙ ТИП УСТРОЙСТВА.
    НИЖЕ ПЕРЕЧИСЛЕНЫ НОМЕРА УСТРОЙСТВ, ИСПОЛЬЗУЕМЫХ В
РАФОС:
0   - ДИСК С ПЛАВАЮЩИМИ ГОЛОВКАМИ КАССЕТНОГО ТИПА (RK);
3   - УСТРОЙСТВО ПЕЧАТИ (LP);
4   - СИСТЕМНЫЙ ТЕРМИНАЛ (ТТ) ИЛИ ДРАЙВЕР ПАКЕТНОЙ
      ОБРАБОТКИ (ВАТСН);
7   - УСТРОЙСТВО ВВОДА/ВЫВОДА НА ПЕРФОЛЕНТУ (РС);
11  - МАГНИТНАЯ ЛЕНТА (МТ);
12  - ДИСК С ФИКСИРОВАННЫМИ ГОЛОВКАМИ (RF);
�


                        - 35 -

13  - НАКОПИТЕЛЬ НА КАССЕТНОЙ ЛЕНТЕ (СТ);
14  - УСТРОЙСТВО ВВОДА С ПЕРФОКАРТ (CR);
20  - МАГНИТНАЯ ЛЕНТА С ВЫСОКОЙ ПЛОТНОСТЬЮ (ММ);
21  - ПАКЕТ СМЕННЫХ ДИСКОВ (DP);
22  - ГИБКИЙ ДИСК (DX);
23  - 29 МБАЙТНЫЙ ПАКЕТ ДИСКОВ (DP);
24  - ДРАЙВЕР ПРОТОКОЛИРОВАНИЯ ОШИБОК (EL);
25  - НУЛЬ-ДРАЙВЕР (NL);
60  - ДРАЙВЕР ВИРТУАЛЬНЫХ НОСИТЕЛЕЙ (UX,UY,UZ).

ОШИБКИ:
        КОД             ПОЯСНЕНИЕ
         0      УСТРОЙСТВО НЕ ОБНАРУЖЕНО В ТАБЛИЦАХ
                МОНИТОРА.

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

        .MCALL  .DSTATUS,.PRINT,.EXIT,.FETCH,.RELEAS
START:  .DSTATUS #CODE,#FTPR        ;ПОЛУЧИТЬ ИНФОРМАЦИЮ
                                    ;ОБ УСТРОЙСТВЕ
         BCC    1$
        .PRINT  #MSG
        .EXIT
1$:      TST    CODE+4              ;УЖЕ ЗАГРУЖЕН?
         BNE    3$                  ;ДА
        .FETCH  #DRVR,#FTPR         ;НЕТ...ЗАГРУЗИТЬ
                                    ;ДРАЙВЕР
         BCC    2$
        .PRINT  #MSG1
        .EXIT
2$:     .PRINT  #MSG2               ;ПЕЧАТЬ СООБЩЕНИЯ
        .EXIT
3$:     .RELEAS #FTPR               ;ВЫГРУЗИТЬ ДРАЙВЕР
         BCC    4$
        .PRINT  #MSG3
        .EXIT
4$:     .PRINT  #MSG4               ;ПЕЧАТЬ СООБЩЕНИЯ
        .EXIT
CODE:   .BLKW   4                   ;БЛОК ИНФОРМАЦИИ
FTPR:   .RAD50  /RKO/               ;ИМЯ УСТРОЙСТВА
        .RAD50  /FILE   MAC/        ;ИМЯ ФАЙЛА
MSG:    .ASCIZ  /УСТРОЙСТВО ОТСУТСТВУЕТ/
MSG1:   .ASCIZ  /ОШИБКА FETCH/
MSG2:   .ASCIZ  /ДРАЙВЕР РЕЗИДЕНТЕН/
MSG3:   .ASCIZ  /ОШИБКА RELEAS/
MSG4:   .ASCIZ  /ДРАЙВЕР ВЫГРУЖЕН/
        .EVEN
�


DRVR    = .                         ;АДРЕС ЗАГРУЗКИ
                                    ;ДРАЙВЕРА
        .END    START


        3.15.   .EXIT


    СИСТЕМНАЯ МАКРОКОМАНДА .EXIT ВЫЗЫВАЕТ ОКОНЧАНИЕ
ПРОГРАММЫ ПОЛЬЗОВАТЕЛЯ.
    ФОРМАТ МАКРОКОМАНДЫ:
                        .EXIT
    ВСЕ НЕЗАВЕРШЕННЫЕ МАКРОКОМАНДЫ .MRKT АННУЛИРУЮТСЯ.
    ВСЕ МАКРОКОМАНДЫ ВВОДА/ВЫВОДА И ПОДПРОГРАММЫ
ЗАВЕРШЕНИЯ, ВЫПОЛНЯЕМЫЕ ДЛЯ ДАННОЙ ЗАДАЧИ, ЗАКАНЧИВАЮТСЯ
НОРМАЛЬНО.
    ЕСЛИ ПРИ ВЫПОЛНЕНИИ МАКРОКОМАНДЫ .EXIT RO=0, ТО
ВЫПОЛНЯЕТСЯ ПОДРАЗУМЕВАЕМАЯ МАКРОКОМАНДА .HRESET,
ЗАПРЕЩАЯ ПОСЛЕДУЮЩЕЕ ВЫПОЛНЕНИЕ КОМАНД МОНИТОРА REENTER,
START, CLOSE.
    МАКРОКОМАНДА .EXIT ПОЗВОЛЯЕТ ПРОГРАММЕ ПОЛЬЗОВАТЕЛЯ
ПЕРЕДАВАТЬ В ОБЛАСТЬ KMON (ЯЧЕЙКИ 500-777) КОМАНДНЫЕ
СТРОКИ, КОТОРЫЕ ВЫПОЛНЯЮТСЯ СЛЕДУЮЩИМ ОБРАЗОМ:
    - ЯЧЕЙКА 510 ДОЛЖНА СОДЕРЖАТЬ ОБЩЕЕ ЧИСЛО БАЙТОВ
      КОМАНДНЫХ СТРОК, ПЕРЕДАВАЕМЫХ В KMON;
    - КОМАНДНЫЕ СТРОКИ, СОДЕРЖАЩИЕСЯ С 512 ЯЧЕЙКИ,
      ДОЛЖНЫ БЫТЬ СТРОКАМИ ДИРЕКТИВЫ .ASCIZ, НАПРИМЕР:

        .=510
        .WORD   B-A
A:      .ASCIZ  /COPY A.MAC B.MAC/
        .ASCIZ  /DELET A.MAC/
B   -   .

    - ПЕРЕД ВЫПОЛНЕНИЕМ МАКРОКОМАНДЫ .EXIT
      ПОЛЬЗОВАТЕЛЬ ДОЛЖЕН УСТАНОВИТЬ БИТ CHNIF$ В
      СЛОВЕ СОСТОЯНИЯ ПРОГРАММЫ (JSW) (СМ. Т.3 КН.2
      Ч.1) И ОЧИСТИТЬ RO.
�


                        - 36 -

    ПРИ ИСПОЛЬЗОВАНИИ ПЕРЕДАВАЕМЫХ КОМАНДНЫХ СТРОК,
ИМЕЮТСЯ СЛЕДУЮЩИЕ ОГРАНИЧЕНИЯ:
    - ЕСЛИ ПРОГРАММА ВЫЗВАНА ВЫПОЛНЯЮЩИМСЯ КОМАНДНЫМ
      ФАЙЛОМ, ТО ЕГО ВЫПОЛНЕНИЕ ПРЕРЫВАЕТСЯ И
      ВЫПОЛНЯЮТСЯ КОМАНДНЫЕ СТРОКИ ПРОГРАММЫ;
    - ИЗ ПРОГРАММЫ МОЖЕТ БЫТЬ ВЫЗВАН ТОЛЬКО ОДИН
      КОМАНДНЫЙ ФАЙЛ;
    - МАКРОКОМАНДА .EXIT АННУЛИРУЕТ ВЫЗОВЫ МАКРОКОМАНД
      .CDFN И .QSET И ВЫПОЛНЯЕТ МАКРОКОМАНДУ .UNLOCK,
      ЕСЛИ БЫЛА ВЫПОЛНЕНА МАКРОКОМАНДА .LOCK; ТАКИМ
      ОБРАЗОМ, КОМАНДА МОНИТОРА CLOSE НЕ ЗАКРЫВАЕТ
      КАНАЛОВ, ОТКРЫТЫХ С ПОМОЩЬЮ .CDFN;
    - МАКРОКОМАНДА .EXIT  В ПОДПРОГРАММАХ ЗАВЕРШЕНИЯ
      НЕДОПУСТИМА.

    П_P_И_M_Ч_A_H_И_E. ПРОГРАММА ПОЛЬЗОВАТЕЛЯ САМА
ОБЕСПЕЧИВАЕТ ЦЕЛОСТНОСТЬ ДАННЫХ, ПЕРЕДАВАЕМЫХ KMON ВО
ВРЕМЯ ВЫПОЛНЕНИЯ МАКРОКОМАНДЫ .EXIT. НЕОБХОДИМО, ЧТОБЫ
ЭТА ОБЛАСТЬ НЕ ПОРТИЛАСЬ СТЕКОМ ПОЛЬЗОВАТЕЛЯ, Т.К.
МАКРОКОМАНДА .EXIT ЗАНОСИТ НЕКОТОРОЕ (ПЕРЕМЕННОЕ) ЧИСЛО
СЛОВ В СТЕК.

ОШИБКИ: ОТСУТСТВУЮТ.

ПРИМЕР:
    В ПРИМЕРЕ ПОСЛЕ ОКОНЧАНИЯ РАБОТЫ ПРОГРАММЫ
ПРОИСХОДИТ ПОЛНАЯ РАСПЕЧАТКА КАТАЛОГА.

        .MCALL  .EXIT,.JSWDF
        .JSWDF                      ;ОПРЕДЕЛИТЬ МНЕМОНИКУ
                                    ;JSW И ЕГО БИТОВ
                                    ;(ЗДЕСЬ CHNIF$)
START:   MOV    #510,RO
         MOV    #CMDSTR,R1
1$:      MOV    (R1)+,(RO)+
         CMP    R1,#CMDEND
         BLO    1$
         BIS    #CHNIF$,@#JSW       ;УСТАНОВИТЬ БИТ CHNIF$
         CLR    RO
        .EXIT
CMDSTR: .WORD   CMDEND-CMDSTR       ;ДЛИНА КОМАНДНОЙ
                                    ;СТРОКИ
        .ASCIZ  DIRECT/FULL *.MAC   ;КОМАНДНАЯ СТРОКА
CMDEND:
        .EVEN
        .END    START
�


        3.16.   .FETCH


    СИСТЕМНАЯ МАКРОКОМАНДА .FETCH ЗАГРУЖАЕТ ДРАЙВЕР С
СИСТЕМНОГО УСТРОЙСТВА В ОПЕРАТИВНУЮ ПАМЯТЬ.
    ФОРМАТ МАКРОКОМАНДЫ:
                        .FETCH  ADDR,DNAM
ГДЕ
ADDR    - АДРЕС, КУДА ДОЛЖЕН ЗАГРУЖАТЬСЯ ДРАЙВЕР
          УСТРОЙСТВА;
DNAM    - АДРЕС СЛОВА, СОДЕРЖАЩЕГО ИМЯ УСТРОЙСТВА В КОДЕ
          RADIX-50.
    АДРЕС ПАМЯТИ ДЛЯ ЗАГРУЗКИ ДРАЙВЕРА ПЕРЕСЫЛАЕТСЯ В
СТЕК. ПОСЛЕ ВЫПОЛНЕНИЯ МАКРОКОМАНДЫ .FETCH RO СОДЕРЖИТ
АДРЕС ПЕРВОЙ СВОБОДНОЙ ЯЧЕЙКИ ВЫШЕ ДРАЙВЕРА. ЕСЛИ ДРАЙВЕР
УЖЕ В ПАМЯТИ, ТО RO СОДЕРЖИТ ТОТ ЖЕ АДРЕС, ЧТО И
НАХОДЯЩИЙСЯ В СТЕКЕ. ЕСЛИ ЗНАЧЕНИЕ В СТЕКЕ < 400
(ВОСЬМЕРИЧНЫХ), ТО ДЛЯ ДРАЙВЕРА ВЫПОЛНЯЕТСЯ МАКРОКОМАНДА
.RELEAS.
    СЛЕДУЮЩИЕ МАКРОКОМАНДЫ ТРЕБУЮТ ПРИСУТСТВИЯ ДРАЙВЕРА
В ПАМЯТИ:
        .CLOSE          .LOOKUP         .ENTER
        .RENAME         .SPFUN          .DELET
        .READ           .READC          .READW
        .WRITE          .WRITC          .WRITW

    П_P_И_M_E_Ч_A_H_И_E. ОПЕРАЦИИ ВВОДА/ВЫВОДА НЕ МОГУТ
БЫТЬ ВЫПОЛНЕНЫ, ЕСЛИ НЕ ЗАГРУЖЕН ДРАЙВЕР УСТРОЙСТВА.

ОШИБКИ:
        КОД             ПОЯСНЕНИЕ
         0      УСТРОЙСТВО С УКАЗАННЫМ ИМЕНЕМ НЕ СУЩЕСТВУЕТ
                В СИСТЕМЕ НЕТ ДРАЙВЕРА ЭТОГО УСТРОЙСТВА.

ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .DSTATUS.
�


                        - 37 -


        3.17.   .GTIM


    СИСТЕМНАЯ МАКРОКОМАНДА .GTIM ВОЗВРАЩАЕТ ТЕКУЩЕЕ
СОДЕРЖИМОЕ СИСТЕМНОГО ТАЙМЕРА (В ТИКАХ) ПО УКАЗАННОМУ
АДРЕСУ.
    ФОРМАТ МАКРОКОМАНДЫ:
                        .GTIM   AREA,ADDR
ГДЕ
AREA    - АДРЕС СПИСКА АРГУМЕНТОВ ЕМТ ИЗ ДВУХ СЛОВ;
ADDR    - АДРЕС ДВУХ СЛОВ, КУДА ПОМЕЩАЕТСЯ ВРЕМЯ (ПЕРВОЕ
          СЛОВО СОДЕРЖИТ СТАРШИЕ РАЗРЯДЫ, ВТОРОЕ -
          МЛАДШИЕ).
    ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:

                        !--------!--------!
RO => AREA:             !   21   !   0    !
                        !--------!--------!
                        !       ADDR      !
                        !-----------------!

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

ОШИБКИ: ОТСУТСТВУЮТ.

ПРИМЕР:
    В ПРИМЕРЕ ПОЛЬЗОВАТЕЛЬ ПОЛУЧАЕТ В ЯЧЕЙКЕ TIME
ТЕКУЩЕЕ ВРЕМЯ В ТИКАХ.

        .MCALL  .GTIM,.EXIT
START:  .GTIM   #AREA,#TIME         ;ПОЛУЧИТЬ ВРЕМЯ
        .EXIT
TIME:   .WORD   0,0
AREA:   .BLKW   2                   ;БЛОК АРГУМЕНТОВ ЕМТ
        .END    START


        3.18.   .GTJB


    СИСТЕМНАЯ МАКРОКОМАНДА .GTJB ВОЗВРАЩАЕТ ПАРАМЕТРЫ
ЗАДАНИЯ В ПРОГРАММУ ПОЛЬЗОВАТЕЛЯ.
    ФОРМАТ МАКРОКОМАНДЫ:
                        .GTJB   AREA,ADDR
ГДЕ
AREA    - АДРЕС СПИСКА АРГУМЕНТОВ ЕМТ ИЗ ДВУХ СЛОВ;
ADDR    - АДРЕС БЛОКА ИЗ ВОСЬМИ СЛОВ, КУДА ПОМЕЩАЮТСЯ
          ПАРАМЕТРЫ.
�


    ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:

                        !--------!--------!
RO => AREA:             !   20   !   0    !
                        !--------!--------!
                        !       ADDR      !
                        !-----------------!

    ПОЛЬЗОВАТЕЛЬ ПОЛУЧАЕТ:
СЛОВО 1 - НОМЕР РАЗДЕЛА: 0-ФОНОВОЕ ЗАДАНИЕ, 1-ОПЕРАТИВНОЕ
          ЗАДАНИЕ (ДЛЯ SJ-МОНИТОРА ВСЕГДА 0);
СЛОВО 2 - ВЕРХНИЙ АДРЕС РАЗДЕЛА;
СЛОВО 3 - НИЖНИЙ АДРЕС РАЗДЕЛА (ДЛЯ SJ-МОНИТОРА ВСЕГДА 0);
СЛОВО 4 - НАЧАЛЬНЫЙ АДРЕС БУФЕРА КАНАЛОВ ВВОДА/ВЫВОДА;
СЛОВО 5 - АДРЕС СМЕШАННОЙ ОБЛАСТИ ЗАДАНИЯ (ДЛЯ FB- И
          ХМ-МОНИТОРОВ);
СЛОВО 6-8
        - ЗАРЕЗЕРВИРОВАНЫ.

ОШИБКИ: ОТСУТСТВУЮТ.

ПРИМЕР:
    В ПРИМЕРЕ ОПРЕДЕЛЯЕТСЯ РАЗДЕЛ, В КОТОРОМ РАБОТАЕТ
ПРОГРАММА.
�


                        - 38 -

        .MCALL  .GTJB,.PRINT,.EXIT
START:  .GTJB   #AREA,#JOBARG       ;ПОЛУЧИТЬ ПАРАМЕТРЫ
         MOV    #MSG,RO
         TST    JOBARG              ;ФОНОВЫЙ РАЗДЕЛ?
         BNE    1$                  ;HET
         MOV    #MSG1,RO            
1$:     .PRINT                      ;ПЕЧАТЬ СООБЩЕНИЯ
        .EXIT
MSG:    .ASCIZ  /ПРОГРАММА В ОПЕРАТИВНОМ РАЗДЕЛЕ/
MSG1:   .ASCIZ  /ПРОГРАММА В ФОНОМ РАЗДЕЛЕ/
        .EVEN
AREA:   .BLKW   2                   ;БЛОК АРГУМЕНТОВ ЕМТ
JOBARG: .BLKW   8.                  ;БЛОК ПАРАМЕТРОВ
        .END    START


        3.19.   .GTLIN


    СИСТЕМНАЯ МАКРОКОМАНДА .GTLIN ВВОДИТ КОМАНДНУЮ
ИНФОРМАЦИЮ, ОТЛИЧНУЮ ОТ ФОРМАТА CSI С СИСТЕМНОГО
ТЕРМИНАЛА ИЛИ ИЗ ВЫПОЛНЯЮЩЕГОСЯ КОМАНДНОГО ФАЙЛА.
    ФОРМАТ МАКРОКОМАНДЫ:
                        .GTLIN  LINBUF[,PROMPT]
ГДЕ
LINBUF  - АДРЕС БУФЕРА, КУДА ВВОДИТСЯ СТРОКА;
PROMPT  - НЕОБЯЗАТЕЛЬНЫЙ АРГУМЕНТ; АДРЕС СТРОКИ-ПОДСКАЗКИ,
          ПЕЧАТАЮЩЕЙСЯ НА СИСТЕМНОМ ТЕРМИНАЛЕ.
    ВВОДИМАЯ СТРОКА В ОБЛАСТИ LINBUF (81. БАЙТ)
ОКАНЧИВАЕТСЯ НУЛЕВЫМ БАЙТОМ ВМЕСТО <CR><LF>.
    МАКРОКОМАНДА .GTLIN ТРЕБУЕТ USR И ВЫБИРАЕТ СТРОКУ С
СИСТЕМНОГО ТЕРМИНАЛА ИЛИ ИЗ КОМАНДНОГО ФАЙЛА В
ЗАВИСИМОСТИ ОТ ТОГО, ОТКУДА БЫЛА ЗАГРУЖЕНА ПРОГРАММА.
    ЕСЛИ БЫЛА ЗАДАНА КОМАНДА SET TT QUIET, A BBOД
ПРОИСХОДИТ ИЗ КОСВЕННОГО ФАЙЛА, СТРОКА-ПОДСКАЗКА
ИГНОРИРУЕТСЯ. В ПРОТИВНОМ СЛУЧАЕ СТРОКА-ПОДСКАЗКА
ВЫВОДИТСЯ НА СИСТЕМНЫЙ ТЕРМИНАЛ ПРЕЖДЕ, ЧЕМ ВЫБРАНА
ВВОДИМАЯ СТРОКА.

ОШИБКИ: ОТСУТСТВУЮТ.

ПРИМЕР:
    В ПРИМЕРЕ ВВОДИТСЯ СТРОКА С ТЕРМИНАЛА И
РАСПЕЧАТЫВАЕТСЯ.
        .MCALL  .GTLIN,.PRINT,.EXIT
START:  .GTLIN  #BUFF,#PROMPT       ;ВВЕСТИ СТРОКУ
         TSTB   BUFF                ;СТРОКА ПУСТАЯ?
         BEQ    END                 ;ДА
        .PRINT  #BUFF               ;НЕТ...ВЫВЕСТИ СТРОКУ
         BR     START
END:    .EXIT
�


PROMPT: .ASCIZ  /ВВЕДИТЕ СТРОКУ/    ;СТРОКА-ПОДСКАЗКА
BUFF:   .BLKB   82.                 ;БУФЕР ВВОДИМОЙ СТРОКИ
        .END    START


        3.20.   .GVAL


    СИСТЕМНАЯ МАКРОКОМАНДА .GVAL ВОЗВРАЩАЕТ В RO
СОДЕРЖИМОЕ УКАЗАННОЙ ЯЧЕЙКИ МОНИТОРА.
    ФОРМАТ МАКРОКОМАНДЫ:
                        .GVAL AREA,OFFSET
ГДЕ
AREA    - АДРЕС СПИСКА АРГУМЕНТОВ ЕМТ ИЗ ДВУХ СЛОВ;
OFFSET  - СМЕЩЕНИЕ НУЖНОЙ ЯЧЕЙКИ ОТ НАЧАЛА МОНИТОРА.
    ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:

                        !--------!--------!
RO=> AREA:              !   34   !   0    !
                        !--------!--------!
                        !     OFFSET      !
                        !-----------------!

    МАКРОКОМАНДА .GVAL ИСПОЛЬЗУЕТСЯ ТОЛЬКО ДЛЯ ЧТЕНИЯ И
ОБЕСПЕЧИВАЕТ СОХРАННОСТЬ ИНФОРМАЦИИ В МОНИТОРЕ.
    П_P_M_E_Ч_A_H_И_E. ДЛЯ СМЕЩЕНИЙ РЕКОМЕНДУЕТСЯ
ПОЛЬЗОВАТЬСЯ МНЕМОНИКОЙ, ПОЛУЧЕННОЙ С ПОМОЩЬЮ
МАКРОКОМАНДЫ .ROFDF.

ОШИБКИ:
        КОД             ПОЯСНЕНИЕ
         0      СМЕЩЕНИЕ ВЫХОДИТ ЗА ПРЕДЕЛЫ РЕЗИДЕНТНОГО
                МОНИТОРА.

ПРИМЕР:
    В ПРИМЕРЕ ПОЛЬЗОВАТЕЛЬ ПОЛУЧАЕТ НОМЕР ВЕРСИИ
�


                        = 39 =

МОНИТОРА В ЯЧЕЙКЕ MONVER И НОМЕР КОРРЕКЦИИ МОНИТОРА В
ЯЧЕЙКЕ MONUPD.
        .MCALL  .GVAL,.EXIT,.ROFDF
        .ROFDF                      ;ПОЛУЧИТЬ МНЕМОНИКУ
                                    ;СМЕЩЕНИЯ МОНИТОРА
                                    ;(ЗДЕСЬ SYSVER)
START:  .GVAL   #AREA,#SYSVER       ;ПОЛУЧИТЬ В RO СОДЕР-
                                    ;ЖИМОЕ ЯЧЕЙКИ МОНИТОРА
         MOVB   RO,MONVER           ;ПОЛУЧИТЬ НОМЕР ВЕРСИИ
         SWAB   RO
         MOVB   RO,MONUPD           ;ПОЛУЧИТЬ НОМЕР КОРРЕКЦИИ
        .EXIT
MONVER: .BLKB
MONUPD: .BLKB
AREA:   .BLKW   2                   ;БЛОК АРГУМЕНТОВ ЕМТ
        .END    START


        3.21.   .HERR


    СИСТЕМНАЯ МАКРОКОМАНДА .HERR ЗАПРЕЩАЕТ ОБРАБОТКУ
СЕРЬЕЗНЫХ ОШИБОК В ПРОГРАММЕ ПОЛЬЗОВАТЕЛЯ.
    ФОРМАТ МАКРОКОМАНДА:
                        .HERR
    ФОРМАТ РЕГИСТРА RO:

                        !--------!--------!
RO=>                    !    5   !    0   !
                        !--------!--------!

    СИСТЕМНАЯ МАКРОКОМАНДА .HERR РАЗРЕШАЕТ СИСТЕМЕ
УДАЛЯТЬ ПРОГРАММУ ПО СЕРЬЕЗНОЙ ОШИБКЕ И ВЫДАВАТЬ
СООБЩЕНИЕ ОБ ОШИБКЕ НА ТЕРМИНАЛ.

ОШИБКИ: ОБРАБОТКУ ОШИБОК ПРОИЗВОДИТ МОНИТОР.

ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .SERR.


        3.22.   .HRESET


    СИСТЕМНАЯ МАКРОКОМАНДА .HRESET ОЧИЩАЕТ КАНАЛЫ
ВВОДА/ВЫВОДА, ОСВОБОЖДАЕТ ДРАЙВЕРЫ УСТРОЙСТВ, ЗАГРУЖЕННЫЕ
В ОПЕРАТИВНУЮ ПАМЯТЬ ПО МАКРОКОМАНДЕ .FETCH, И ПРЕКРАЩАЕТ
ВСЕ ОПЕРАЦИИ ВВОДА/ВЫВОДА.
    ФОРМАТ МАКРОКОМАНДЫ:
                        .HRESET
    СИСТЕМНАЯ МАКРОКОМАНДА .HRESET НЕ ИСПОЛЬЗУЕТСЯ ДЛЯ
СБРОСА УСЛОВИЙ ОШИБОК.
�


    СИСТЕМНАЯ МАКРОКОМАНДА .HRESET ДЕЙСТВИТЕЛЬНА ТОЛЬКО
В СВОЕМ ЗАДАНИИ. ДРУГОЕ ЗАДАНИЕ ПРОДОЛЖАЕТ ВЫПОЛНЯТЬСЯ.

ОШИБКИ: ОТСУТСТВУЮТ.

ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .CDFN.


        3.23.   .INTEN


    СИСТЕМНАЯ МАКРОКОМАНДА .INTEN СООБЩАЕТ МОНИТОРУ О
ВОЗНИКШЕМ ПРЕРЫВАНИИ; ПЕРЕКЛЮЧАЕТ РАБОТУ В СОСТОЯНИЕ
СИСТЕМЫ; УСТАНАВЛИВАЕТ ТРЕБУЕМЫЙ ПРИОРИТЕТ ПРОЦЕССОРА.
    ФОРМАТ МАКРОКОМАНДЫ:
                        .INTEN PRIO[,PIC]
ГДЕ
PRIO    - ТРЕБУЕМЫЙ ПРИОРИТЕТ ПРОЦЕССОРА;
PIC     - ПРОИЗВОЛЬНЫЙ АРГУМЕНТ.
    АРГУМЕНТ PIC УКАЗЫВАЕТ, ЧТО ПРОГРАММА ОБРАБОТКИ
ПРЕРЫВАНИЯ НАПИСАНА В ПОЗИЦИОННО-НЕЗАВИСИМОМ КОДЕ, В
ПРОТИВНОМ СЛУЧАЕ АРГУМЕНТ PIC ДОЛЖЕН ОТСУТСТВОВАТЬ.
    ВСЕ ВНЕШНИЕ ПРЕРЫВАНИЯ ПЕРЕВОДЯТ ПРИОРИТЕТ
ПРОЦЕССОРА НА 7 УРОВЕНЬ. МАКРОКОМАНДА .INTEN ПОНИЖАЕТ
ПРИОРИТЕТ ПРОЦЕССОРА ДО ТРЕБУЕМОЙ ВЕЛИЧИНЫ.
    ВЫХОД ИЗ ПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЯ, КОТОРАЯ
ИСПОЛЬЗОВАЛА МАКРОКОМАНДУ .INTEN, ДОЛЖЕН БЫТЬ ПО RTS PC.

ОШИБКИ: ОТСУТСТВУЮТ.
�


                        - 40 -

ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .SYNCH.


        3.24.   .JSWDF


    СИСТЕМНАЯ МАКРОКОМАНДА .JSWDF ОПРЕДЕЛЯЕТ СИМВОЛЫ И
МНЕМОНИЧЕСКИЕ ОБОЗНАЧЕНИЯ РАЗРЯДОВ СЛОВА СОСТОЯНИЯ
ПРОГРАММЫ (СМ. Т.3 КН.2 Ч.1).
    ФОРМАТ МАКРОКОМАНДЫ:
                        .JSWDF
    РАСШИРЕНИЕ МАКРОКОМАНДЫ:

JSW     =^044
USWAP$  =^0100000
TTLC$   =^040000
RSTRT$  =^020000
TTSPC$  =^010000
CHNIF$  =^04000
VIRT$   =^02000
OVLY$   =^01000
CHAIN$  =^0400
HLTER$  =^0200
TCBIT$  =^0100
ESCFL$  =^040
ESCSQ$  =^020
GTLIN$  =^010

    ДАННАЯ МАКРОКОМАНДА НЕ ГЕНЕРИРУЕТ КОДОВ ЕМТ, А
ЯВЛЯЕТСЯ ЧИСТО ОПИСАТЕЛЬНОЙ.

ОШИБКИ: ОТСУТСТВУЮТ.

ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .EXIT.


        3.25.   .LOCK


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


    ОБРАЩЕНИЕ К CSI ВЫЗЫВАЕТ НЕЯВНУЮ МАКРОКОМАНДУ
.INLOCK.
    ЕСЛИ USR РЕЗИДЕНТНА, МАКРОКОМАНДА .LOCK
ИГНОРИРУЕТСЯ.
    ЧИСЛО МАКРОКОМАНД .LOCK И .UNLOCK ДОЛЖНО СОВПАДАТЬ.
    МАКРОКОМАНДА .LOCK ЗАПРЕЩАЕТ ПОВТОРНОЕ СЧИТЫВАНИЕ
ПРОГРАММЫ ПОЛЬЗОВАТЕЛЯ, ПОЭТОМУ НЕОБХОДИМО, ЧТОБЫ ЕЕ
ВЫЗОВ НЕ ИСХОДИЛ ИЗ ОБЛАСТИ, В КОТОРУЮ БУДЕТ ОБМЕНИВАТЬСЯ
USR.
    НЕ СЛЕДУЕТ РАЗРУШАТЬ ОБЛАСТЬ USR (ДАЖЕ ЕСЛИ ОНА НЕ
НУЖНА) ПОСЛЕ ВЫПОЛНЕНИЯ МАКРОКОМАНДЫ .LOCK, Т.К. ЭТО
ПРИВЕДЕТ К НЕПРЕДВИДЕННЫМ РЕЗУЛЬТАТАМ ПРИ ВЫПОЛНЕНИИ
МАКРОКОМАНДЫ .UNLOCK.
    ЕСЛИ ОПЕРАТИВНОЕ ЗАДАНИЕ ВЫПОЛНЯЕТ МАКРОКОМАНДУ
.LOCK ВО ВРЕМЯ ИСПОЛЬЗОВАНИЯ USR ФОНОВЫМ ЗАДАНИЕМ, ТО
ВЫПОЛНЕНИЕ ОПЕРАТИВНОГО ЗАДАНИЯ ПРИОСТАНАВЛИВАЕТСЯ ДО
ОСВОБОЖДЕНИЯ USR.

ОШИБКИ: ОТСУТСТВУЮТ.

ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .UNLOCK.


        3.26.   .MFPS


    СИСТЕМНАЯ МАКРОКОМАНДА .MFPS СЧИТЫВАЕТ БИТЫ
ПРИОРИТЕТА ИЗ СЛОВА СОСТОЯНИЯ ПРОЦЕССОРА.
    ФОРМАТ МАКРОКОМАНДЫ:
                        .MFPS ADDR
ГДЕ
ADDR    - АДРЕС, В КОТОРЫЙ ПОМЕЩАЕТСЯ ЗНАЧЕНИЕ ПРИОРИТЕТА.
    ЕСЛИ АДРЕС ОТСУТСТВУЕТ, ЗНАЧЕНИЕ ПОМЕЩАЕТСЯ В СТЕК.
    П_P_И_M_E_Ч_A_H_И_E. КОДЫ УСЛОВИЙ РАЗРУШАЮТСЯ В
ПРОЦЕССЕ ВЫПОЛНЕНИЯ МАКРОКОМАНДЫ.

ОШИБКИ: ОТСУТСТВУЮТ.

ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .MTPS.
�


   - 41 -


	3.27. .MRKT


	Системная макрокоманда .MRKT планирует запуск указанной
подпрограммы завершения через заданный интервал времени в тиках
( 50 тиков = 1 сек для частоты сети 50 Гц ).
 формат макрокоманды:

              .MRKT AREA,TIME,CRTN,ID
где
AREA    - адрес списка аргументов EMT из четырех слов;
TIME    - адрес двух слов, содержащих временной интервал;
CRTN    - адрес входа в подпрограмму завершения;
ID      - идентификатор каждой макрокоманды .MRKT.

	Формат списка аргументов EMT:

		 !-------!--------!
R0=>AREA:        !  22   !   0    !
		 !-------!--------!
		 !      TIME      !
		 !----------------!
                 !      CRTN      !
                 !----------------!
		 !       ID       !
		 !----------------!

	Системная макрокоманда .MRKT требует элемент очереди.
Пользователь должен сам распределить достаточное количество
элементов очереди.
        ID в диапазоне 177400-177777 ( восьмеричных ) зарезер-
вированы для системного использования.
 Несколько макрокоманд .MRKT могут иметь один и тотже ID.
	При входе в подпрограмму завершения R0 содержит ID.

Ошибки:
 Код  Пояснение
  0 Нет свободного места очереди.

Пример:
 В примере по истечению времени выдается сообщение на
терминал.

 .MCALL	.READ,.WAIT,.MRKT,.CMKT
	.MCALL	.QSET,.PRINT,.EXIT,.LOOKUP
START:	.LOOKUP	#AREA,#0,#FILE		;ОТКРЫТЬ ФАЙЛ
  BCS	LKERR
	 MOV	#AREA,-(SP)
	.QSET	#QUEUE,#5		;ДОБАВИТЬ 5 ЭЛЕМЕНТОВ
     ;ОЧЕРЕДИ
�


 .MRKT	(SP),#INTRVL,#MRTN,#1	;ЗАПУСТИТЬ MRTN
					;ПО ИСТЕЧЕНИИ ВРЕМЕНИ
  BCS	NOMRKT
	.READ	#RDLST			;ЧИТАТЬ
  BCS	RDERR
	.WAIT	#0			;ЖДАТЬ
 .CMKT	(SP),#1			;ОСВОБОДИТЬ ЭЛЕМЕНТ
     ;ОЧЕРЕДИ (ОТМЕНИТЬ .MRKT)
	 BCS	NOTDUM
	.EXIT
MRTN:					;ПОДПРОГРАММА ЗАВЕРШЕНИЯ
 .PRINT	#FAIL1
	 RTS	PC
LKERR:	.PRINT	#LM
	.EXIT
RDERR:	.PRINT	#RDMSG
	.EXIT
NOTDUM:	.PRINT	#FAIL
	.EXIT
NOMRKT:	.PRINT	#NOQ
	.EXIT
NOQ:	.ASCIZ	/НЕТ ЭЛЕМЕНТА ОЧЕРЕДИ/
FAIL:	.ASCIZ	/ОШИБКА CMKT/
FAIL1:	.ASCIZ	/ВРЕМЯ ИСТЕКЛО/
LM:	.ASCIZ	/ОШИБКА LOOKUP/
RDMSG:	.ASCIZ	/ОШИБКА READ/
	.EVEN
INTRVL:	.WORD	0,13.			;ВРЕМЯ
QUEUE:	.BLKW	5*7			;БЛОК ЭЛЕМЕНТОВ
AREA:	.BLKW	5			;БЛОК АРГУМЕНТОВ EMT
					;ДЛЯ .MRKT
FILE:	.RAD50	/DK FILE TST/
RDLST:	.BYTE	0			;БЛОК АРГУМЕНТОВ EMT
	.BYTE	10			;ДЛЯ .READ
BLOCK:	.WORD	0
	.WORD	BUFF
	.WORD	256.
	.WORD	1
BUFF:	.BLKW	256.			;БУФЕР ВВОДА
 .END	START
�


                        - 42 -


        3.28.   .MTPS


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

ОШИБКИ: ОТСУТСТВУЮТ.

ПРИМЕР:
    В ПРИМЕРЕ ПРИОРИТЕТ СОХРАНЯЕТСЯ В СТЕКЕ,
УСТАНАВЛИВАЕТСЯ НОВЫЙ ПРИОРИТЕТ, А ЗАТЕМ
ВОССТАНАВЛИВАЕТСЯ СТАРЫЙ.

        .MCALL  .MFPS,.MTPS,.EXIT
START:   JSR    PC,PICKQ
         NOP
         NOP
         NOP
        .EXIT
PICKQ:  .MFPS                   ;СОХРАНИТЬ ПРИОРИТЕТ
                                ;В СТЕКЕ
         MOV    #QHEAD,R4
        .MTPS   #340            ;УСТАНОВИТЬ ПРИОРИТЕТ 7
         MOV    @R4,R5
         BEQ    1$
         MOV    @R5,@R4
        .MTPS                   ;ВОССТАНОВИТЬ ПРИОРИТЕТ
                                ;ИЗ СТЕКА
         CLZ
1$:      RTS    PC
QHEAD:  .WORD   Q1
Q1:     .WORD   Q2,0,0
Q2:     .WORD   Q3,0,0
Q3:     .WORD   0,0,0
        .END    START
�


        3.29.   .MWAIT (ТОЛЬКО ДЛЯ FB- I XM-МОНИТОРОВ)


    СИСТЕМНАЯ МАКРОКОМАНДА .MWAIT ПРИОСТАНАВЛИВАЕТ
ВЫПОЛНЕНИЕ ПРОГРАММЫ ДО ОКОНЧАНИЯ ПРИЕМА ИЛИ ПЕРЕДАЧИ
СООБЩЕНИЙ МЕЖДУ ПРОГРАММАМИ.
    ФОРМАТ МАКРОКОМАНДЫ:
                        .MWAIT
    ФОРМАТ РЕГИСТРА RO:

                        !--------!--------!
RO=>                    !   11   !   0    !
                        !--------!--------!

    ОБЫЧНО ЭТА МАКРОКОМАНДА ИСПОЛЬЗУЕТСЯ В СОЧЕТАНИИ С
МАКРОКОМАНДАМИ .RCVD ИЛИ .SDAT, КОТОРЫЕ НЕ
ПРЕДУСМАТРИВАЮТ НИКАКИХ ОПЕРАЦИЙ ПОСЛЕ ЗАВЕРШЕНИЯ
СООБЩЕНИЯ.

ОШИБКИ: ОТСУТСТВУЮТ.

ПРИМЕР:
    В ПРИМЕРЕ ПРИНИМАЕТСЯ СООБЩЕНИЕ ИЗ ДРУГОГО ЗАДАНИЯ И
ПРОВЕРЯЕТСЯ ЕГО ПРАВИЛЬНОСТЬ.

        .MCALL  .MWAIT,.RCVD,.PRINT,.EXIT
WORDS =  255.
START:  .RCVD   #AREA,#RBUFF,#WORDS     ;ПОЛУЧИТЬ СООБЩЕНИЕ
         MOV    #RBUFF+2,R5
        .MWAIT                          ;ЖДАТЬ
         CMPB   (R5)+,#14
         BNE    ERR
        .EXIT
ERR:    .PRINT  #MSG
        .EXIT
MSG:    .ASCIZ  /ОШИБОЧНОЕ СООБЩЕНИЕ/
        .EVEN
AREA:   .BLKW   10                      ;БЛОК АРГУМЕНТОВ ЕМТ
RBUFF:  .BLKW   256.                    ;БУФЕР ДЛЯ ПРИЕМА
                                        ;СООБЩЕНИЯ
        .END    START
�


			- 43 -


	3.30. .POP

    Системная макрокоманда .POP выбирает значения из стека
и помещает их в указанные аргументы.
    Формат макрокоманды:
              .POP ADDR
где
ADDR    - адрес, куда помещается значение из стека.
    Несколько адресов должны заключаться в угловые скобки.

Например:                   .POP <ADR1,ADR2,...,ADRN>

Ошибки: отсутствуют.

Пример: см. пример макрокоманды .DATE.


	3.31. .PROTECT  ( только для FB- и XM-монитора ).


    Системная макрокоманда .PROTECT  дает программе возможность
монопольного испольования вектора устройства в диапаоне 0-476
( восьмеричных ).
    Формат макрокоманды:
                 .PROTECT  AREA,ADDR
где
AREA	- адрес списка аргументов EMT из двух слов;
ADDR	- адрес вектора, который должен быть закреплен.
    Формат списка аргументов EMT:

		 !-------!--------!
R0=>AREA:        !  31   !   0    !
		 !-------!--------!
		 !      ADDR      !
		 !----------------!
		 !    ADDR+2      !
		 !----------------!

    Успешное выполнение системной макрокоманды .PROTECT оначает,
что эаданный вектор в данный момент не испольэуется другим эаданием
или монитором и эакрепляется эа данной программой.

Ошибки:
 Код  Пояснение
  0 Вектор не испольэуется и не может быть эакреплен;
  1 адрес (ADDR) > 476 (восьмеричных) или < 4.

Пример: см. пример макрокоманды .UNPROTECT.
�



	3.32. .PUSH.


    Системная макрокоманда .PUSH эаносит содержимое укаэанных
аргументов в стек.
    Формат макрокоманды:
                 .PUSH ADDR
где
ADDR	- аргумент, эначение которого необходимо эанести в стек.
    Несколько аргументов должны заключаться в угловые скобки.

Например:         .PUSH <ADR1,ADR2,...,ADRN>

Ошибки: отсутствуют.

Пример: см. пример макрокоманды .DATE.
�


			-44-


	3.30. .QSET


	Системная макрокоманда .QSET убеличивает длину очереди
элементов ввода/быбода, подпрограмм авершения и т.п.
 Формат макрокоманды:
                            .QSET ADDR,LEN
где
ADDR	- начальный адрес области для новых элементов очереди;
LEN	- число новых элементов очереди.
 В SJ- и FB-мониторах каждый элемент очереди эанимает
семь слов. В XM-мониторе - десять слов. Следовательно, область,
отводимая для очереди, должна равняться:
 - для SJ- и FB-мониторов - LEN*7;
	- для XM-монитора - LEN*10.
	Макрокоманда .QSET может выэываться столько раэ,
сколько требуется.
 Область для элементов очереди реэервируется польэователем.
Необходимо следить, чтобы программа не иэменяла элементы, если они
уже установлены.
 Макрокоманда .SRESET и .HRESET отменяют все очереди эле-
ментов, определенные пользователем. После них необходимо повторить
макрокоманду .QSET, чтобы снова определить область для элементов
очереди.
 Элементы очереди заданные макрокомандой .QSET не должны
перекрываться с областью, в которую обменивается USR.
	Нижеперечисленные макрокоманды требуют элемент очереди:

 .READ		.READC		.READW				
	.WRITE		.WRITEC		.WRITEW
	.RCVD		.RCVDC		.RCVDW
	.SDAT		.SDATC		.SDATW
	.TWAIT		.MRKT

Ошибки: отсутствуют.

Пример: см. пример макрокоманды .MRKT.


	3.34. .RCTRLO.


	Системная макрокоманда .RCTRLO разрешает вывод на
системный терминал ( сбрасывает флаг CTRL/O ).
	Формат макрокоманды:
                            .RCTRLO
	Команда <CTRL/O>, введенная с терминала, запрещает вывод
на терминал. Разрешить вывод на терминал можно повторным введе-
нием <CTRL/O> с терминала или с помощью макрокоманды .RCTRLO.
�


Ошибки: отсутствуют.

Пример:
 В примере пользователь с помощью клавиатуры терминала
запрещает вывод на терминал. В программе макрокоманда .RCTRLO
разрешает вывод на терминал, о чем указывает появление
звездочки на экране.

 .MCALL	.RCTRL0,.CSIGEN,.EXIT,.SRESET
START:	.RCTRLO				;РАЗРЕШИТЬ ВЫВОД НА ТТ:
 .CSIGEN	#DSPACE,#DEXT,#0	;ВВЕСТИ КОМАНДНУЮ
     ;СТРОКУ
         BCS	NSCI
	.READW	#AREA,#3,#BUFF,#256.,#0	;ЧИТАТЬ
  BCS	NRE
	.WRITEW	#AREA,#0,#BUFF,#256.,#0	;ЗАПИСАТЬ
  BCS	NWR
	.SRESET
	 JMP	START
NCSI:	.PRINT	#MSG
	.EXIT
NRE:	.PRINT	#MSG1
	.EXIT
NWR:	.PRINT	#MSG2
	.EXIT
MSG:	.ASCIZ	/ОШИБКА CSI/
MSG1:	.ASCIZ	/ОШИБКА READ/
MSG2:	.ASCIZ	/ОШИБКА WRITE/
	.EVEN
DEXT:	.WORD	0,0,0,0			;БЛОК РАСШИРЕНИЯ
AREA:	.BLKW	5			;БЛОК АРГУМЕНТОВ EMT
BUFF:	.BLKW	256.			;АДРЕС ВВОДА/ВЫВОДА
DSPACE	=.				;АДРЕС ЗАГРУЗКИ
     ;ДРАЙВЕРОВ
 .END	START
�


			-45-


	3.35. .RELEAS.


	Системная макрокоманда .RELEAS удаляет указанный драйвер
из оперативной памяти.
 Формат макрокоманды:
                            .RELEAS	DNAM
где
DNAM	- адрес слова,содержащего имя устройства в коде RADIX-50.
	После макрокоманды .RELEAS, чтобы вновь использовать
устройство, необходимо выполнить макрокоманду .FETCH.

	ПРИМЕЧАНИЕ. Макрокоманда .RELEAS не удаляет драйвер,
загруженный командой монитора LOAD.

Ошибки:
 Код  Пояснение
  0 Устройство с указанным именем не существует.

Пример: см. пример макрокоманды .DSTATUS.


	3.36. .ROFDF.


	Системная макрокоманда .ROFDF определяет мнемонические
смещения полезных ячеек резидентного монитора
( см. т.3 кн.2 4.1 п.2.2 ).
 Формат макрокоманды:
                            .ROFDF
	Расширение макрокоманды:

$USRLC	=^0266
QCOMP	=^0270
SPUSR	=^0272
SYUNIT	-^0275
SYSVER	=^0276
SYSUPD	=^0277
TTKS	=^0304
TTKB	=^0306
TTPS	=^0310
TTPB	=^0312
MAXBLK	=^0314
SYSCH	=^0324
GTVEC	=^0354
$MTPS	=^0360
$MFPS	=^0362
STATWD	=^0366
USRAREA	=^0374
IFMXNST	=^0377
EMTRTN	=^0400
FORK	=^0402
�


	Данная макрокоманда не генерирует кодов EMT, а является
чисто описательной.

Ошибки: отсутствуют.

Пример: см. пример макрокоманды .GVAL.


	3.37. .RSUM ( только для FB- и XM-мониторов )


 Системная макрокоманда .RSUM продолжает выполнение
программы после того, как она была приостановлена
макрокомандой .SPND.
	Формат макрокоманды:
                            .RSUM
	Формат регистра R0:

		!---------!--------!
R0=>    	!    2    !   0    !
		!---------!--------!

	Монитор содержит счетчик остановов для каждой
программы. Этот счетчик уменьшается макрокомандой .SPND и
увеличивается макрокомандой .RSUM. Программа будет приос-
тановлена только в том случае, если значение счетчика
отрицательно. Поэтому, если системная макрокоманда .RSUM
выдается раньше .SPND, то макрокоманда .SPND игнорируется.
 Макрокоманда .RSUM из любой программы завершения
возобновляет выполнение остановленной программы.
 Так как системная макрокоманда .TWAIT реализуется
в мониторе с использованием останова и возобновления, то
макрокоманда .RSUM, выданная из подпрограммы завершения
без соответствующей .SPND, может вызвать продолжение основ-
ной программы прежде, чем закончится полный временной
интервал, указанный в .TWAIT.
	Системная макрокоманда .RSUM, как и другие макро-
команды, может быть выдана из программы прерывания,
�


   -46-


написанной пользователем, если имеется последовательность
.INTEN/.SYNCH, все замечания, относящиеся к .RSUM в
подпрограмме завершения, применимы к этому случаю.

Ошибки: отсутствуют.

Пример: см. пример макрокоманды .SPND.


	3.38. .SCCA


	Системная макрокоманда .SCCA запрещает завершение
программы по команде оператора <CTRL/C>; дает возможность
программе различать единичную и двойную команды <CTRL/C>.
 Формат макрокоманды:
                            .SCCA   AREA,ADDR
где
AREA	- адрес списка аргументов EMT из двух слов;
ADDR	- адрес, предназначенный для слова соостояния
   терминала ( резервируется пользователем ).
 Формат списка аргументов EMT:

   !--------!--------!
R0=> AREA:         	!  35    !   0    !
			!--------!--------!
			!      ADDR       !
			!-----------------!

	Системная макрокоманда .SCCA перехватывает и
временно запрещает команду оператора <CTRL/C>, препят-
ствует завершению программы. Символы <CTRL/C> воспри-
нимаются как обычные символы без специальных системных
функций и помещают во входной буфер.
 Если ADDR=0, то при двойной команде <CTRL/C>
происходи завершение программы, а при одинарной не
происходит.
  При этом, если появляется двойная команда 
<CTRL/C> устанавливается 15 бит слова состояния терми-
нала ( ADDR ). Пользователь должен сам очистить его
для дальнейшего использования.

Ошибки: отсутствуют.

Пример:
    В ПРИМЕРЕ ЗАПРЕЩАЕТСЯ ВЫХОД ПО ДВОЙНОМУ CTRL/C И
ВВОДИТСЯ ЛЮБАЯ (ВКЛЮЧАЯ CTRL/C) ИНФОРМАЦИЯ С ТЕРМИНАЛА.
КАК ТОЛЬКО ВСТРЕТИТСЯ ДВОЙНОЕ CTRL/C ПРОГРАММА ПЕРЕХОДИТ
В РЕЖИМ ОЖИДАНИЯ И РАЗРЕШАЕТСЯ ВЫХОД В МОНИТОР ПО ДВОЙНОМУ
CTRL/C.
�


        .MCALL  .SCCA,.PRINT,.TTYIN,.TTYOUT
JSW     = 44
TTSPC$  = 10000
START:   MOV    #SCCA,R1
        .SCCA   #AREA,R1        ;ЗАПРЕТИТЬ CTRL/C
         BIS    #TTSPC$,@#JSW
         CLR    (R1)
        .PRINT  #MSG
1$:      TST    (R1)            ;ДВОЙНОЕ CTRL/C?
         BNE    2$              ;ДА
        .TTYIN                  ;НЕТ...ВВЕСТИ СИМВОЛ
        .TTYOUT                 ;ЭХО-ПЕЧАТЬ
         BR     1$
2$:     .PRINT  #CTRLC
        .SCCA   #AREA,#0        ;РАЗРЕШИТЬ ДВОЙНОЕ CTRL/
         BR     .
SCCA:   .BLKW   1               ;ЦЛОВО СОСТОЯНИЯ
                                ;ТЕРМИНАЛА
AREA:   .BLKW   2               ;БЛОК АРГУМЕНТОВ ЕМТ
MSG:    .ASCII  /ПРИМЕР МАКРОКОМАНДЫ .SCCA/<15><12>
        .ASCIZ  ВВЕДИТЕ CTRL/C DWA RAZA
        .EVEN
CTRLC:  .ASCII  CTRL/C ВВЕДЕНА <15><12>
        .ASCII  ВВЕДИТЕ ДВОЙНОЕ CTRL/C ДЛЯ ВЫХОДА
        .ASCIZ  /ИЗ ПРОГРАММЫ/
        .EVEN
        .END    START


        3.39.   .SCMDF


    СИСТЕМНАЯ МАКРОКОМАНДА .SCMDF ОПРЕДЕЛЯЕТ
МНЕМОНИЧЕСКИЕ ОБОЗНАЧЕНИЯ СИСТЕМНОЙ ОБЛАСТИ СВЯЗИ (СМ.
Т.3 КН.2. Ч.1).
    ФОРМАТ МАКРОКОМАНДЫ:
                        .SCMDF
    РАСШИРЕНИЕ МАКРОКОМАНДЫ:

USERPC  =^040
USERSP  =^042
UFLOAT  =^046
USERTOP =^050
SYSPTR  =^054
TTFILL  =^056
TTNFIL  =^057
�


			-47-


	Данная макрокоманда не генерирует кодов EMT, а
является чисто описательной.

Ошибки: отсутствуют.

Пример: см.пример макрокоманды .UNLOCK.


	3.40. .SERR


	Системная макрокоманда .SERR позволяет программе
обрабатывать серьезные ошибки и запрещает монитору пре-
кращать ее выполнение вслучае их появления.
 Формат макрокоманды:
                            .SERR
	Формат регистра R0:

		!-------!------!
R0=>    	!   4   !  0   !
		!-------!------!

	Во время выполнения программы могут возникнуть
серьезные ошибки. Например, попытка передать ввод/вывод
устройству, не имеющему драйвера в памяти, или попытка
загрузить драйвер устройства на место USR. Обычно эти
ошибки вызывают окончание программы с сообщением об
ошибке на системный терминал. Однако, в некоторых
случаях необходимо предотвратить преждвременное оконча-
ние программы из-за этих ошибок.
 После выполнения макрокоманды устанавливается бит
C, а байт 52 содержит отрицательный код ошибки.

Ошибки:
 Код  ПОяснение
 -1 Вызов USR из подпрограммы завершения.
 -2 Отсутствыет драйвер устройства, а для
  данной операции он необходим.
 -3 Ошибка чтения каталога.
 -4 Ошибка .FETCH; либо произошла ошибка во
  время считывания драйвера, либо попытка
  загрузить драйвер на место RMON или USR;
	-5 Ошибка считывания оверлея;
 -6	В каталоге нет места для файлов;
 -7 Недопустимый адрес; попытка выполнить
  действие вне области задания;
 -10 Недопустимый номер канала; номер больше,
  чем фактическое количество существующих
  каналов;
 -11 Недопустимая EMT; недопустимый код функции.
�



 Системная макрокоманда .SERR не обрабатывает прерыва-
ния по 4 и 10, а также прерывания от процессора с плавающей
запятой. Они обрабатываются системными макрокомандами
.TRPSET, .SFPA.

Пример:
 В примере для макрокоманды .ENTER треуется драйвер
PC:, который не загружен в память. После выполнения макро-
команды .SERR обработка ошибок происходит в программе, а
после  выполнения макрокоманды .HERR происходит выход по
ошибке в монитор.

 .MCALL	.ENTNR,.HERR,.SERR,.PRINT,.EXIT,.USBDF
START:	.SERR			;ЗАПРЕТИТЬ ПРЕРЫВАНИЕ
    ;ПРОГРАММЫ ПО ОШИБКЕ
 .USBDF			;ОПРЕДЕЛИТЬ МНЕМОНИКУ
    ;СТАТУСА ЗАВЕРШЕНИЯ
    ;ПРОГРАММЫ USERRB
	.ENTER	#AREA,#1,#FILE	;ОТКРЫТЬ ФАЙЛ НА PC:
	 BCC	3$
	 JSR	PC,ERR		;ИДТИ НА ОБРАБОТКУ
    ;ОШИБКИ
 .HERR		;РАЗРЕШИТЬ ПРЕРЫВАНИЕ
    ;ПРОГРАММЫ ПО ОШИБКЕ
 .ENTER	#AREA,#1,#FILE	;ОТКРЫТЬ ФАЙЛ НА PC:
	 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	;УСТАНОВИТЬ ЗАВЕРШЕНИЕ
    ;ГРУБОЙ ОШИБКОЙ
  RTS	PC
COD:		C1
		C2
		C3
		C4
		C5
    		C6
                C7
                C10
�


			-48-


		C11
C1:	.ASCIZ	/USER?/
C2:	.ASCIZ	/НЕ ЗАГРУЖЕН ДРАЙВЕ/
C3:	.ASCIZ	/ОШИБКА ЧТЕНИЯ КАТАЛОГА/
C4:	.ASCIZ	/ОШИБКА .FETCH/
C5:	.ASCIZ	/ОВЕРЛЕЙ?/
C6:	.ASCIZ	/НЕТ МЕСТА В КАТАЛОГЕ/
C7:	.ASCIZ	/ОШИБКА АДРЕСАЦИИ/
C10:	.ASCIZ	/НЕВЕРНЫЙ НОМЕР КАНАЛА/
C11:	.ASCIZ	/НЕВЕРНЫЙ КОД EMT/
	.EVEN
AREA:	.BLKW	4		;БЛОК АРГУМЕНТОВ EMT
FILE:	.RAD50	/PC/
	.WORD	0,0,0
	.END	START


	3.41. .SETTOP


	Системная макрокоманда .SETTOP позволяет программе
пользователя запрашивать новый адрес верхней границы
памяти для программы.
 Формат макрокоманды:
                            .SETTOP ADR
где
ADDR	- адрес слова, содержащего верхнюю границу программы.
 Монитор определяет допустимость этого адреса, необ-
ходимость свопинга в случае использования USR. Если верхняя
граница памяти, предназначенной для программы, расположена
ниже начального адреса USR, то свопинг не производится, т.к.
USR при этом не перекрывается. Если .SETTOP из фоновой прог-
раммы запрашивает верхнюю границу выше начального адреса USR,
а команда SET USR NOSWOP не была выдана, то требуется
свопинг.
 По завершении системной макрокоманды .SETTOP R0 и
ячейка 50 ( восьмеричное ) содержит максимальный адрес
предоставляемой пользователю памяти. Если требуемый адрес
превышает допустимую величину, то программе предоставляется
допустимое значение адреса.
 Для определения действительного верхнего адреса
программы нужно проверить содержимое R0 или ячейки 50.
 Адрес выданный в R0 или ячейку 50, используется
программой как абсолютный верхний адрес программы. Если
это значение будет превышено, могут быть уничтожены части
части монитора и целостность системы будет нарушена.

Ошибки: отсутствуют.

Пример: см. пример макрокоманды .UNLOCK.
�


	3.42. .SFPA


	Системная макрокоманда .SFPA предоставляет ползователям,
имеющим процессор с плавающей запятой ( в комплексах СМ-1420 или
СМ-4/20 ), возможность обрабатывать прерывания по ошибке.
 Формат макрокоманды:
                            .SFPA   AREA,ADDR
где
AREA	- адрес списка аргументов EMT из двух слов;
ADDR	- адрес программы обработки прерывания.
 Формат списка аргументов EMT:

			!-------!-------!
R0=> AREA:      	!  30   !  0    !
			!-------!-------!
			!     ADDR      !
			!---------------!

	Обычно, если возникает прерывание по ошибке при
использовании процессора с плавающей запятой, прекращается
выполнение программы и выдается сообщение об ошибке на
системный терминал.
 Системная макрокоманда .SFPA позволяет пользователю
самому обрабатывать прерывания. Аргумент ADDR указывает
адрес программы обработки прерывания.
 Если аргумент ADDR=#0, то макрокоманда .SFPA 
игнорируется.
 Если аргумент ADDR=#1, то регистры процессора с
плавающей запятой должны должны быть включены в область
сохранения при переключении системы с одной задачи на другую.
Если ADDR=#1, пользователь не обрабатывает прерывания по
ошибке.
 Системную макрокоманду .SFPA необходимо повторять
каждый раз, когда возникают прерывания, если пользователь
хочет обрабатывать их сам, т.е. программа обработки преры-
вания должна содержать вызов .SFPA.
�


   - 49 -


Ошибки: отсутствуют.

Пример:
 .MCALL	.SFPA,.EXIT
START:	  .
	  .
          .
	.SFPA	#AREA,#FPTRAP
	  .
	  .
          .
	.EXIT
FPTRAP:	 MOV	R0,-(SP)
	  .
	  .
	  .
	.SFPA	#AREA,#FPTRAP
	  .
	  .
	  .
	 MOV	(SP)+,R0
	 RTI
AREA:	.BLKW	10
	.END	START


	3.43. .SPND (только для FB- и XM-мониторов )


 Системная макрокоманда .SPND приостанавливает работу
программы.
 Формат макрокоманды:
                            .SPND
	Формат регистра R0:

		!-------!------!
R0=>    	!   1   !  0   !
		!-------!------!

	Системная макрокоманда .SPND из подпрограммы
завершения уменьшает счетчик остановов, но не останав-
ливает основную программу. Если подпрограмма завершения
осуществляет макрокоманду .SPND, основная программа про-
должается до выдачи этой макрокоманды самой программой,
только после этого она будет приостановлена, и потребуется
две макрокоманды .RSUM для ее продолжения.
 Монитор содержит счетчик остановов для каждой
программы. Этот счетчик уменьшается макрокомандой .SPND и
увеличивается макрокомандой .RSUM. Программа будет при-
остановлена только в том случае, если значение счетчика
отрицательно. Поэтому, если системная макрокоманда .RSUM
выдана раньше .SPND, то макрокоманда .SPND игнорируется.
�


 Программа должна выдавать одинаковое число
системных макрокоманд .SPND и .RSUM.
 Системная макрокоманда .SPND, как и другие
макрокоманды, может быть выдана из подпрограммы прерывания,
написанной пользователем, если имеется последовательность
.INTEN/.SYNCH. Все замечания, относящиеся к .SPND в под-
программе завершения, применимы к этому случаю.

Ошибки: отсутствуют.

Пример:

 .MCALL	.SPND,.RSUM,.READC,.EXIT
	.MCALL	.LOOKUP,.PRINT,.WAIT
START:	.LOOKUP	#AREA,#2,#FILE2
	 BCS	1$
	.LOOKUP	#AREA,#3,#FILE3
	 BCS	1$
	.LOOKUP	#AREA,#4,FILE4
	 BCC	3$
1$:	.PRINX	#2$
	.EXIT
2$:	.ASCIZ	/ОШИБКА LOOKUP/
	.EVEN
3$:	 MOV	#2,RSVCTR
	 MOV	#AREA,R5
	.READC	R5,#2,#BUF1,COUNT1,#CROUTN,BLOK1
	 BCS	ERROR
	.READC	R5,#3,#BUF2,COUNT2,#CROUTN,BLOK2
	 BCS	ERROR
	.READC	R5,#4,#BUF3,COUNT3,#CROUTN,BLOK3
	 BCS	ERROR
	.SPND
	.WAIT	#2
	.WAIT	#3
	.WAIT	#4
	.EXIT
CROUTN:	 ASL	R1
	 INC	DONFL(R1)
	 ROR	R0
	 ADC	ERRFLG(R1)
	 DEC	RSVCTR
	 BNE	1$
	.RSUM
1$:	 RTS	PC
ERROR:	.PRINT	#RDMSG
	.EXIT
RDMSG:	.ASCIZ	/ОШИБКА READ/
	.EVEN
AREA:	.BLKW	10
RSVCTR:		0
COUNT1:		256.
COUNT2:		256.
COUNT3:		256.
�


			- 50 -


BLOK1:		0
BLOK2:		0
BLOK31:		0
FILE2:	.RAD50	/DK TEST2 TMP/
FILE3:	.RAD50	/DK TEST3 TMP/
FILE4:	.RAD50	/DK TEST4 TMP/
DONFL:		0,0,0
ERRFLG:		0,0,0
BUF1:	.BLKW	256.
BUF2:	.BLKW	256.
BUF3:	.BLKW	256.
	.END	START


	3.44. .SRESET


	Системная макрокоманда .SRESET инициализирует
определенные таблицы монитора, связанные с подпрограммой:
освобождает каналы, очищает очередь подпрограмм завершения,
удаляет загруженные драйверы.
 Формат макрокоманды:
                            .SRESET
	Драйверы системных устройств и драйверы,загруженные
командой монитора LOAD, остаются резидентными.
 Возвращает к использованию только 16 ( десятичное )
каналов ввода/вывода. Любые каналы, открытые системной макро-
командой .CDFN, исключаются.
 Чтобы открыть больше 16 каналов после выполнения 
.SRESET, необходимо повторить макрокоманду .QSET или .CDFN.
	Очищает очередь программ завершения.

Ошибки: отсуиствуют.

Пример: см. пример макрокоманды .RCTRLO.


	3.45. .SYNCH


	Системная макрокоманда .SYNCH дает возможность
программе обработки прерывания выполнять системные макро-
команды.
 Формат макрокоманды:
                            .SYNCH	AREA[,PIC]
где
AREA	- адрес блока из семи слов;
PIC	- произвольный аргумент,позволяющий макрокоманде
   .SYNCH генерировать позиционно-независимый код.
�


 Блок AREA содержит:
Слово 1 - системное слово, которое не должно изменяться
   пользователем;
Слово 2 - текущий номер задания (может быть получен
   макрокомандой .GTJB );
Слово 3 - не используется;
Слово 4 - не используется;
Слово 5 - аргумент R0; при успешном выполнении макро-
   команды .SYNCH это слово заносится в R0;
Слово 6 - должно содержать -1;
Слово 7 - должно содержать 0.
 Между макрокомандами .SYNCH и .INTEN ползователь
не должен ничего заносить в стек.
 Если макрокоманда .SYNCH не выполнена, то возврат
происходит в следующую за макрокомандой ячейку. В этом
случае программа обработки прерываний не может выполнять
макрокоманды; R4 и R5 свободны для использования.
 Если макрокоманда .SYNCH выполнена, то возврат
происходит в следующую за возвратом по ошибке ячейку.
Программе обработки прерывания разрешено выполнять макро-
команды. R0 содержит аргумент, находившийся в пятом слове
блока AREA. R2, R3, R4 и R5 нельзя использовать без предвари-
тельного сохранения в стеке, а R0 и R1 - можно.
�


   - 51 -


	Выход из программы обработки прерывания должен быть
по инструкции RTS PC.

Ошибки:
 Возврат по ошибке происходит в следующих случаях:
 - не закончена макрокоманда .SYNCH, использующая
   тот же блок AREA;
	- Указан недопустимый номер задания;
 - Если произошло удаление или останов основной
   программы.

Пример:
 .MCALL	.GTJB,.INTEN,.WRITC,.SYNCH
	.MCALL	.EXIT,.DIR,.PRINT
START:	 MOV	#JOB,R5		;ПОЛУЧИТЬ НОМЕР
 .GTJB	#AREA,R5	;ЗАДАНИЯ
 MOV	(R5),SYNBLK+2
	 .
	 .
	 .
INTRPT:	.INTEN	5		;ПЕРЕЙТИ В СИСТЕМНОЕ
    ;СОСТОЯНИЕ, УСТАНОВИТЬ
    ;ПРИОРИТЕТ 5
 .SYNCH	#SYNBLK
	 BR	SYNFAIL		;БЛОК .SYNCH ЗАНЯТ
 .DIR	WRITE		;ЗАПИСЬ В БУФЕР
  BCS	WTFAIL
	 RTS	PC		;ВЫХОД
SYNBLK:		0,0,0,0,5,-1,0	;БЛОК .SYNCH
SYNFAIL:
	 MOV	#SYNER,R0
	 BR	ERRM
WTFAIL:	 MOV	#MSG,R0
ERRM:	.PRINT
	.EXIT
MSG:	.ASCIZ	/ОШИБКА ЧТЕНИЯ/
SYNER:	.ASCIZ	/ОШИБКА SYNCH/
	.EVEN
AREA:	.BLKW	5		;БЛОК АРГУМЕНТОВ EMT
				;ДЛЯ .READ
JOB:	.BLKW	5		;БЛОК АРГУМЕНТОВ EMT
				;ДЛЯ .SYNCH
CRTN1:	  .			;ТЕКСТ ПОДПРОГРАММЫ
   .   ;ЗАВЕРШЕНИЯ
  RTS	PC
WRITE:	.WRITC	#AREA,CHAN,BUFF,WCNT,#CRTN1,BLK
CHAN:		0
BUFF:	.BLKW	256.
WCNT:		256.
BLK:		0
	.END	START
�


	3.46. .TLOCK ( Только для FB- и XM-мониторов )


 Системная макрокоманда .TLOCK проверяет занятость
USR, если USR свободна, то выполняется макрокоманда .LOCK,
в противном случае происходит возврат в программу пользова-
теля с установленным C битом.
 Формат макрокоманды:
                            .TLOCK
        Формат регистра R0:

   !--------!---------!
R0=>            	!   7    !    0    !
   !--------!---------!

 Возврат по C биту означает, что макрокоманда 
.TLOCK не выполнена.

Ошибки:
 Код  Пояснение
  0 USR уже используется другой программой.

Пример:
 .MCALL	.TLOCK,.LOOKUP,.UNLOOCK,.PRINT,.EXIT
START:	.TLOCK				;USR ЗАНЯТА ?
  BCS	SUSPND			;ДА
 .LOOKUP	#AREA,#4,#J1NAM		;НЕТ ... ОТКРЫТЬ
  BCS	LKERR			;ФАЙЛ
 .UNLOCK				;ОСВОБОДИТЬ USR
	.EXIT
SUSPND:	 JSR	PC,SPSJOB
	 JSR	PC,SCHED
	 BR	START
AREA:	.BLKW	10
J1NAM:	.RAD50	/DK TEST1 TMP/
LKERR:	.PRINT	#LKMSG
	.EXIT
LKMSG:	.ASCIZ	/ОШИБКА LOOKUP/
	.EVEN
SPSJOB:	 .				;ТЕКСТ ПОДПРОГРАММЫ
  .
  .
  RTS	PC
SCHED:	 .				;ТЕКСТ ПОДПРОГРАММЫ
  .
  .
  RTS	PC
	.END	START
�


			-52-

		2/Б/4.072.200-33-02-2

 3.47. .TRPSET


	Системная макрокоманда .TRPSET позволяет пользователю
самому обрабатывать прерывания по вектору 4 и 10.

 Формат макрокоманды:

   .TRPSET	AREA,ADDR
где

AREA
	-адрес списка аргументов из двух слов;

ADDR
	-адрес программы обработки прерывания.

 Формат списка аргыментов EMT:

   !------!------!
 R0=> AREA:	!  3   !  0   !
			!------!------!
			!    ADDR     !
			!-------------!

	Макрокоманда .TRPSET запрещает монитору удалять
программупри возникновении прерывания по векторам 4 и 10.

 При входе в программу обработки прерывания бит C
указывает:

бит C = 0
 - прерывание по вектору 4;

бит C = 1
 - прерывание по вектору 10;

 Программа обработки прерывания должна заканчиваться
инструкцией RTI.

 Макрокоманду .TRPSET необходимо повторять каждый раз,
как возникает прерывание, если пользователь хочет и в даль-
нейшем обрабатывать их сам, т.е. подпрограмма обработки пре-
рывания должна содержать .TRPSET.

 Если ADDR = 0, макркоманда .TRPSET игнорируется.

Ошибки: отсутствуют.
�


Пример:

 В премере макрокоманда .TRPSET указывает адрес
программы обработки ловушек 4 и 10.

 .MCALL	.TRPSET,.EXIT,.PRINT
START:	.TRPSET	#AREA,#TRPLOC		;ЗАПРЕТИТЬ УДАЛЯТЬ
     ;ПРОГРАММУ
 MOV	#101,R0
	TST	(R0)+			;НЕЧЕТНЫЙ АДРЕС
 .WORD	67			;НЕВЕРНЫЙ КОД ИНСТРУКЦИИ
 .EXIT
TRPLOC:	MOV	R0,-(SP)		;ПРОГРАММА ОБРАБОТКИ
 BCS	1$			;ЛОВУШЕК
 .PRINT	#TRP4
	BR	2$
1$:	.PRINT	#TRP10
2$:	.TRPSET	#AREA,#TRPLOC
	MOV	(SP),R0
	RTI
AREA:	.BLKW10			;БЛОК АРГУМЕНТОВ EMT
TRP4:	.ASCIZ	/TRAP TO 4/
TRP10:	.ASUIZ	/TRAP TO 10/
	.EVEN
	.END	START


	3.48. .TWAIT


	Системная макрокоманда .TWAIT приостанавливает
выполнение программы на указанный интервал времени.

 Формат макрокоманды:

   .TWAIT	AREA,TIME
где

AREA
	-адрес списка аргументов EMT из двух слов;
TIME
	-адрес двух слов, содержащих временной интервал
  в тиках.

 Формат списка аргументов EMT:

			!------!------!
 R0=> AREA:	!  24  !  0   !
			!------!------!
			!   TIME      !
			!-------------!
			
	Системная макрокоманда .TWAIT требует элемент
очереди, поэтому прежде необходимо выполнить макрокоманду
.QSET.
�

			-53-

		2/Б/4.072.200-33-02-2


 Примечание:
  Макрокоманда .TWAIT реализуется в мониторе
с использованием макрокоманд .SPND и .RSUM. Поэтому
макрокоманда .RSUM, выданная программой заверения без
соответствующей макрокоманды .SPND, может вызвать продолже-
ние основной программы раньше, чем закончится временной
интервал.

Ошибки:

 Код Пояснение

  0 Отсутствует элемент очереди.

Пример: см. пример макрокоманды .CHCOPY.


	3.49. .UNLOCK


	Системная макрокоманда .UNLOCK отменяет запрещение
свопинга USR, заданное макрокомандой .LOCK.

	Формат макрокоманды:

   .UNLOCK

	Если макрокоманда .LOCK требовала свопинга, то
.UNLOCK загружает программу пользователя обратно в
память.

 Если USR не требует свопинга, то .UNLOCK игно-
рируется.

 Если выполнено больше макрокоманд .UNLOCK, чем
макрокоманд .LOCK, то лишние макрокманды игнорируются.

 ВЫзов CSI выполняет подразумеваемую макрокоманду
.UNLOCK.

 макрокоманда .UNLOCK не должна находиться в об-
ласти, в которую обменивалась USR, иначе она не будет
выполнена.

Ошибки: отсутствуют.

Пример:

 В примере макрокомандой .SETTOP запрашивается вся
память, что приводит к нерезидентности USR. Перед открытием
канала, макрокомандой .LOCK USR заносится в память и
становится резидентной, т.е. при выполнении макрокоманд
.LOOKUP свопинга не происходит. После выполнени макро-
команды .UNLOCK USR снова становится нерезидентной.

 .MCALL	.LOCK,.UNLOCK,.SETTOP,.SCMDF
	.MCALL	.LOOKUP,.PRINT,.EXIT
�


START:	.SCMDF			;ОПРЕДЕЛИТЬ МНЕМОНИКУ
    ;СИСТЕМНОЙ ОБЛАСТИ СВЯЗИ
    ;(ЗДЕСЬ SYSPTR)
	.SETTOP	@#SYSPTR	;ЗАПРОСИТЬ ВСЮ ПАМЯТЬ
 .LOCK			;ВЫЗОВ USR В ПАМЯТЬ
 .LOOKUP	#AREA,#0,#DEV1	;ИСПОЛЗОВАНИЕ USR
	BCS	1$
	.LOOKUP	#AREA,#1,#DEV2
	BCS	1$
	.UNLOCK			;УДАЛИТЬ USR ИЗ ПАМЯТИ
 .EXIT
1$:	.PRINT	#MSG
	.EXIT
MSG:	.ASCIZ	/ОШИБКА .LOOKUP/
	.EVEN
AREA:	.BLKW	3		;БЛОКАРГУМЕНТОВ EMT
DEV1:	.RAD50	/SY FORTRASAV/
DEV2:	.RAD50	/SY PATCH SAV/
	.END	START



	3.50. .UNPROTECT  ( Только для FB- и XM-мониторов )


 Системная макрокоманда .UNPROTECT освобождает вектор
устройства в диапазоне 0 - 476.

 Формат макрокоманды:

   .UNPROTECT	AREA,ADDR
где

AREA
	-адрес списка аргументов EMT из двух слов;

ADDR
	-адрес вектора, который должен быть освобожден.

 Формат списка аргументов EMT:

   !------!------!
 R0=> AREA:	!  31  !  1   !
			!------!------!
			!    ADDR     !
			!-------------!
Ошибки:

 Код  Пояснение

  1 Адрес (ADDR) > 476 (восьмеричных) или < 4.

Пример:
�


                        - 54 -


        .MCALL  .PROTECT,.UNPROTECT,.EXIT,.PRINT
START:  .PROTECT #AREA,#234         ;ЗАЩИТА ЯЧЕЕК 234,236
         BCS    INUSE
         .
         .
         .
        .UNPROTECT #AREA,#234       ;ОСВОБОДИТЬ ЯЧЕЙКИ
        .EXIT
INUSE:  .PRINT  #ERR
        .EXIT
ERR:    .ASCIZ  /ОШИБКА PROTECT/
        .EVEN
AREA:   .BLKW   2
        .END    START


        3.51.   .USBDF


    СИСТЕМНАЯ МАКРОКОМАНДА .USBDF ОПРЕДЕЛЯЕТ
МНЕМОНИЧЕСКИЕ ОБОЗНАЧЕНИЯ СТАТУСА ЗАВЕРШЕНИЯ ПРОГРАММЫ
(СМ. Т.3 КН.2 Ч.1 П.2.3.2.2).
    ФОРМАТ МАКРОКОМАНДЫ:
                        .USBDF
    РАСШИРЕНИЕ МАКРОКОМАНДЫ:
ERRBYT  =^052
USERRB  =^053
SEVER$  =^010
ERROR$  =^04
WARN$   =^02
SUCCS$  =^01
    ДАННАЯ МАКРОКОМАНДА НЕ ГЕНЕРИРУЕТ КОДОВ ЕМТ, А
ЯВЛЯЕТСЯ ЧИСТО ОПИСАТЕЛЬНОЙ.

ОШИБКИ: ОТСУТСТВУЮТ.

ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .SERR.


        3.52.   .WAIT


    СИСТЕМНАЯ МАКРОКОМАНДА .WAIT ПРИОСТАНАВЛИВАЕТ
ВЫПОЛНЕНИЕ ПРОГРАММЫ ДО ЗАВЕРШЕНИЯ ОПЕРАЦИЙ ВВОДА/ВЫВОДА
ПО УКАЗАННОМУ КАНАЛУ.
    ФОРМАТ МАКРОКОМАНДЫ:
                        .WAIT CHAN
ГДЕ
CHAN    - НОМЕР КАНАЛА ВВОДА/ВЫВОДА.
�


    ФОРМАТ РЕГИСТРА RO:

                        !--------!--------!
RO=>                    !   0    !  CHAN  !
                        !--------!--------!

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

ОШИБКИ:
        КОД             ПОЯСНЕНИЕ
         0      КАНАЛ НЕ ОТКРЫТ;
         1      В ОПЕРАЦИИ ВВОДА/ВЫВОДА БЫЛА АППАРАТНАЯ
                ОШИБКА.

ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .MRKT.
�