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