Uknc RAFOS sysmac

From Felixl.com

Jump to: navigation, search



 УТВЕРЖДЕН






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

    Р А Ф О С

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





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