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 - МЛАДШИЙ БАЙТ СОДЕРЖИТ МНЕМОНИКУ КЛЮЧА, СТАРШИЙ -
НОМЕР ФАЙЛА, С КОТОРЫМ СВЯЗАН КЛЮЧ; ЕСЛИ 15 БИТ
=1, ТО КЛЮЧ ИМЕЕТ ЗНАЧЕНИЕ;
СЛОВО 3 - ЕСЛИ УСТАНОВЛЕН 15 БИТ СЛОВА 2, ТО СОДЕРЖИТСЯ
ЗНАЧЕНИЕ КЛЮЧА; ЕСЛИ НЕТ, ТО СЛЕДУЮЩИЙ КЛЮЧ
(ЕСЛИ ОН ЕСТЬ).
�
- 31 -
П_P_И_M_E_Ч_A_H_И_E. ЕСЛИ КЛЮЧ ИМЕЕТ НЕСКОЛЬКО
ЗНАЧЕНИЙ, В СТЕК ЗАПИСЫВАЕТСЯ СООТВЕТСТВУЮЩЕЕ КОЛИЧЕСТВО
КЛЮЧЕЙ.
СЛЕДУЕТ ПОМНИТЬ, ЧТО В FB-МОНИТОРЕ ВВОД С СИСТЕМНОГО
ТЕРМИНАЛА ВСЕГДА ОСУЩЕСТВЛЯЕТ НЕЯВНОЕ ОБРАЩЕНИЕ К
МАКРОКОМАНДЕ .UNLOCK ДЛЯ USR. ЭТО НУЖНО ИМЕТЬ ВВИДУ ПРИ
ИСПОЛЬЗОВАНИИ МАКРОКОМАНДЫ .LOCK.
3.8. .CSTAT (ТОЛЬКО ДЛЯ FB- И ХМ-МОНИТОРОВ)
СИСТЕМНАЯ МАКРОКОМАНДА .CSTAT ЗАПОЛНЯЕТ 6 СЛОВ
ПАМЯТИ ИНФОРМАЦИЕЙ О КАНАЛЕ.
ФОРМАТ МАКРОКОМАНДЫ:
.CSTAT AREA,CHAN,ADDR
ГДЕ
AREA - АДРЕС СПИСКА АРГУМЕНТОВ ЕМТ ИЗ ДВУХ СЛОВ;
CHAN - НОМЕР КАНАЛА, О КОТОРОМ ТРЕБУЕТСЯ ИНФОРМАЦИЯ;
ADDR - АДРЕС БЛОКА ИЗ 6 СЛОВ, СОДЕРЖАЩИХ ИНФОРМАЦИЮ О
КАНАЛЕ.
ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:
!--------!--------!
RO => AREA: ! 27 ! CHAN !
!--------!--------!
! ADDR !
!-----------------!
ПОЛЬЗОВАТЕЛЮ ПЕРЕДАЕТСЯ:
СЛОВО 1 - СЛОВО СОСТОЯНИЯ КАНАЛА;
СЛОВО 2 - НОМЕР ПЕРВОГО БЛОКА ФАЙЛА;
СЛОВО 3 - ДЛИНА ФАЙЛА;
СЛОВО 4 - МАКСИМАЛЬНЫЙ НОМЕР ЗАПИСАННОГО БЛОКА;
СЛОВО 5 - НОМЕР УСТРОЙСТВА;
СЛОВО 6 - ИМЯ УСТРОЙСТВА (В RADIX-50).
СЛОВО 2 СОДЕРЖИТ 0, ЕСЛИ УСТРОЙСТВО С
ПОСЛЕДОВАТЕЛЬНЫМ ДОСТУПОМ ИЛИ КАНАЛ БЫЛ ОТКРЫТ
МАКРОКОМАНДАМИ .LOOKUP ИЛИ .ENTER, КАК ДЛЯ УСТРОЙСТВА С
НЕФАЙЛОВОЙ СТРУКТУРОЙ.
В СЛОВЕ 3 ИНФОРМАЦИЯ ОТСУТСТВУЕТ, ЕСЛИ УСТРОЙСТВО С
НЕФАЙЛОВОЙ СТРУКТУРОЙ, А ТАКЖЕ, ЕСЛИ КАНАЛ БЫЛ ОТКРЫТ
МАКРОКОМАНДАМИ .LOOKUP ИЛИ .ENTER ДЛЯ УСТРОЙСТВА С
НЕФАЙЛОВОЙ СТРУКТУРОЙ.
В СЛОВЕ 4 ИНФОРМАЦИЯ ОТСУТСТВУЕТ, ЕСЛИ УСТРОЙСТВО С
НЕФАЙЛОВОЙ СТРУКТУРОЙ.
ОШИБКИ:
КОД ПОЯСНЕНИЕ
0 КАНАЛ НЕ ОТКРЫТ.
�
ПРИМЕР:
В ПРИМЕРЕ ПОКАЗАНО ПОЛУЧЕНИЕ ИМЕНИ УСТРОЙСТВА,
СВЯЗАННОГО С ПЕРВЫМ ВЫХОДНЫМ ФАЙЛОМ В КОМАНДНОЙ СТРОКЕ.
.MCALL .CSTAT,.CSIGEN,.PRINT,.EXIT
START: .CSIGEN #DEVSPC,#DEVEXT ;ВВОД КОМАНДНОЙ СТРОКИ
.CSTAT #AREA,#0,#ADDR ;ПОЛУЧИТЬ ИНФОРМАЦИЮ
;О 0 КАНАЛЕ
BCS ERR
MOV #ADDR+10,R5
MOV (R5)+,RO
ADD (PC)+,R0
.RAD50 / 0/
ADD (R5),R0
MOV R0,DEVNAM ;ПОЛУЧИТЬ ИМЯ УСТРОЙСТВ
.EXIT
AREA: .BLKW 5 ;БЛОК АРГУМЕНТОВ ЕМТ
ADDR: .BLKW 6 ;БЛОК ИНФОРМАЦИИ
;О КАНАЛЕ
DEVNAM: .WORD 0
DEVEXT: .WORD 0,0,0,0 ;БЛОК РАСШИРЕНИЙ
;ПО УМОЛЧАНИЮ
ERR: .PRINT #MSG
.EXIT
MSG: .ASCIZ /КАНАЛ НЕ ОТКРЫТ/
.EVEN
DEVSPC = . ;АДРЕС ЗАГРУЗКИ
;ДРАЙВЕРОВ
.END START
3.9. .CTRLT
СИСТЕМНАЯ МАКРОКОМАНДА .CTRLT ОПРЕДЕЛЯЕТ
СИМВОЛИЧЕСКИЕ ОБОЗНАЧЕНИЯ УПРАВЛЯЮЩИХ СИМВОЛОВ (ИМЕЮЩИХ
КОДЫ 0-37).
ФОРМАТ МАКРОКОМАНДЫ:
.CTRLT
�
- 32 -
РАСШИРЕНИЕ МАКРОКОМАНДЫ:
NUL =^0000
SOH =^0001
STH =^0002
ETX =^0003
EOT =^0004
ENQ =^0005
ACK =^0006
BEL =^0007
BS =^0010
HT =^0011
LF =^0012
VT =^0013
FF =^0014
CR =^0015
SO =^0016
SI =^0017
DLE =^0020
DC1 =^0021
DC2 =^0022
DC3 =^0023
DC4 =^0024
NAK =^0025
SYN =^0026
ETB =^0027
CAN =^0030
EM =^0031
SUB$ =^0032
ESC =^0033
FS =^0034
GS =^0035
RS =^0036
US =^0037
ДАННАЯ МАКРОКОМАНДА КОДОВ ЕМТ НЕ ГЕНЕРИРУЕТ, А
ЯВЛЯЕТСЯ ЧИСТО ОПИСАТЕЛЬНОЙ.
ОШИБКИ: ОТСУТСТВУЮТ.
ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .CHAIN.
3.10. .DATE
СИСТЕМНАЯ МАКРОКОМАНДА .DATE ПЕРЕДАЕТ ИНФОРМАЦИЮ О
ТЕКУЩЕЙ ДАТЕ В RO:
- БИТЫ 13-10 - НОМЕР МЕСЯЦА (1-12.);
- БИТЫ 9-5 - ДЕНЬ НЕДЕЛИ (1-31.);
- БИТЫ 4-0 - ГОД (ЗНАЧЕНИЕ ГОДА ОПРЕДЕЛЯЕТСЯ
ВЫЧИТАНИЕМ ИЗ ТЕКУЩЕГО ГОДА ЧИСЛА 72.).
�
ФОРМАТ МАКРОКОМАНДЫ:
.DATE
ФОРМАТ РЕГИСТРА RO:
!--------!--------!
RO => ! 12 ! 0 !
!--------!--------!
ЕСЛИ ПОСЛЕ ВЫПОЛНЕНИЯ МАКРОКОМАНДЫ RO=0, ТО ЭТО
ОЗНАЧАЕТ, ЧТО ДАТА НЕ БЫЛА ВВЕДЕНА ПОЛЬЗОВАТЕЛЕМ.
П_P_И_M_E_Ч_A_H_И_E. РАФОС НЕ ПРОИЗВОДИТ ПРОВЕРКУ НА
КОРРЕКТНОСТЬ УКАЗАННОЙ ДАТЫ (КОНЕЦ МЕСЯЦА И ГОДА).
НАПРИМЕР, ПОЛЬЗОВАТЕЛЬ МОЖЕТ ВВЕСТИ ИАКУЮ ДАТУ КАК 31
ФЕВРАЛЯ. НЕОБХОДИМО ТОЧНО ВЫЧИСЛЯТЬ ПРОГРАММОЙ ГОД И
ПЕРВЫЙ ДЕНЬ КАЖДОГО МЕСЯЦА.
ОШИБКИ: ОТСУТСТВУЮТ.
ПРИМЕР:
В ПРИМЕРЕ ПРИВЕДЕНА ПОДПРОГРАММА ОБРАБОТКИ ДАТЫ,
ВВЕДЕННОЙ ПОЛЬЗОВАТЕЛЕМ КОМАНДОЙ МОНИТОРА DATE.
; ОБРАЩЕНИЕ К ПОДПРОГРАММЕ:
;
; JSR PC,DATE
;
; РЕЗУЛЬТАТ: RO = МЕСЯЦ (1-12)
; R1 = ЧИСЛО (1-31)
; R2 = ГОД (ПО МОДУЛЮ 100)
;
; ОШИБКИ: RO=0, ЕСЛИ ДАТА НЕ ВВЕДЕНА ПОЛЬЗОВАТЕЛЕМ
;
.MCALL .DATE,.POP,.PUSH
DATE:
.PUSH R2,R1,RO ;СОХРАНИТЬ РЕГИСТРЫ
.DATE ;ВЫБРАТЬ ДАТУ
MOV RO,R2 ;ВВЕДЕНА?
BEQ 1$ ;HET
BIC #^C37,R2 ;ВЫБРАТЬ ГОД В R2
ADD #72.,R2
MOV RO,R1 ;ВЫБРАТЬ ЧИСЛО
ASL R1
ASL R1
ASL R1
SWAB R1
BIC #^C37,R1
SWAB RO ;ВЫБРАТЬ МЕСЯЦ
ASR RO
ASR RO
BIC #^C37,RO
1$: .POP RO,R1,R2 ;ВОССТАНОВИТЬ РЕГИСТРЫ
RTS PC
.END
�
- 33 -
3.11. .DBLK
СИСТЕМНАЯ МАКРОКОМАНДА .DBLK СОЗДАЕТ БЛОК УСТРОЙСТВА
(СМ. Т.3 КН.2 Ч.1) ДЛЯ УКАЗАННОГО ФАЙЛА В КОДЕ RADIX-50.
ФОРМАТ МАКРОКОМАНДЫ:
.DBLK DEV,NAM,TYP
ГДЕ
DEV - ИМЯ УСТРОЙСТВА;
NAM - НАИМЕНОВАНИЕ ФАЙЛА;
TYP - РАСШИРЕНИЕ ИМЕНИ ФАЙЛА.
ДАННАЯ МАКРОКОМАНДА КОДОВ ЕМТ НЕ ГЕНЕРИРУЕТ.
ОЩИБКИ: ОТСУТСТВУЮТ.
ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .CHAIN.
3.12. .DEVICE (ТОЛЬКО ДЛЯ FB- И ХМ- МОНИТОРОВ)
СИСТЕМНАЯ МАКРОКОМАНДА .DEVICE ОПРЕДЕЛЯЕТ ТАБЛИЦЫ
АДРЕСОВ, В КОТОРЫЕ НУЖНО ЗАПИСАТЬ УКАЗАННУЮ ИНФОРМАЦИЮ
ПРИ ЗАВЕРШЕНИИ ПРОГРАММЫ.
ФОРМАТ МАКРОКОМАНДЫ:
.DEVICE AREA,ADDR[,LINK]
ГДЕ
AREA - АДРЕС СПИСКА АРГУМЕНТОВ ЕМТ ИЗ ДВУХ СЛОВ;
ADDR - АДРЕС ТАБЛИЦЫ АДРЕСОВ И ЗНАЧЕНИЙ;
LINK - АРГУМЕНТ, ПОЗВОЛЯЮЩИЙ ОБ_ЕДИНЯТЬ ТАБЛИЦЫ ПРИ
ПОСЛЕДОВАТЕЛЬНЫХ ВЫПОЛНЕНИЯХ МАКРОКОМАНДЫ
.DEVICE; ЕСЛИ АРГУМЕНТ ОПУЩЕН, ТО ПРЕДЫДУЩИЙ
СПИСОК ЗАМЕНЯЕТСЯ НОВЫМ, А НЕ ОБ_ЕДИНЯЕТСЯ.
ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ (БЕЗ ОБ_ЕДИНЕНИЯ):
!--------!--------!
RO => AREA: ! 14 ! 0 !
!--------!--------!
! ADDR !
!-----------------!
ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ (С ОБ_ЕДИНЕНИЕМ):
!--------!--------!
RO => AREA: ! 14 ! 1 !
!--------!--------!
! ADDR !
!-----------------!
�
ТАБЛИЦА АДРЕСОВ И ЗНАЧЕНИЙ ЗАПОЛНЯЕТСЯ ПОЛЬЗОВАТЕЛЕМ
ПОСЛОВНО:
СЛОВО 1 - АДРЕС, В КОТОРЫЙ ПОМЕЩАЕТСЯ ИНФОРМАЦИЯ;
СЛОВО 2 - ЗНАЧЕНИЕ, КОТОРОЕ НЕОБХОДИМО ЗАНЕСТИ ПО
ЗАВЕРШЕНИЮ ПРОГРАММЫ;
СЛОВО 3 - АДРЕС;
СЛОВО 4 - ЗНАЧЕНИЕ;
И Т.Д.
ЗАКАНЧИВАЕТСЯ ТАБЛИЦА НУЛЕВЫМ СЛОВОМ.
ОШИБКИ: ОТСУТСТВУЮТ.
ПРИМЕР:
В ПРИМЕРЕ ПО ОКОНЧАНИИ РАБОТЫ В ЯЧЕЙКУ 172570
ЗАНОСИТСЯ 0.
.MCALL .DEVICE,.EXIT
START: .DEVICE #AREA ;ОПРЕДЕЛИТЬ ТАБЛИЦУ
.EXIT
AREA: .BYTE 0,10 ;БЛОК АРГУМЕНТОВ ЕМТ
.WORD ATOD
ATOD: .WORD 172570 ;ТАБЛИЦА АДРЕСОВ И
.WORD 0 ;ЗНАЧЕНИЙ
.WORD 0
.END START
�
- 34 -
3.13. .DIR
СИСТЕМНАЯ МАКРОКОМАНДА .DIR ВЫПОЛНЯЕТ МАКРОКОМАНДУ,
ЗАДАННУЮ ТАБЛИЦЕЙ АРГУМЕНТОВ.
ФОРМАТ МАКРОКОМАНДЫ:
.DIR ADDR
ГДЕ
ADDR - АДРЕС ТАБЛИЦЫ АРГУМЕНТОВ ВЫПОЛНЯЕМОЙ
МАКРОКОМАНДЫ.
ТАБЛИЦА АРГУМЕНТОВ МОЖЕТ БЫТЬ РАСПОЛОЖЕНА В ЛЮБОМ
МЕСТЕ ПРОГРАММЫ ПОЛЬЗОВАТЕЛЯ.
ОШИБКИ: ОТСУТСТВУЮТ.
ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .SYNCH.
3.14. .DSTATUS
СИСТЕМНАЯ МАКРОКОМАНДА .DSTATUS ПЕРЕДАЕТ СИСТЕМНЫЕ
ХАРАКТЕРИСТИКИ УСТРОЙСТВА В ПРОГРАММУ ПОЛЬЗОВАТЕЛЯ.
ФОРМАТ МАКРОКОМАНДЫ:
.DSTATUS ADDR,DNAM
ГДЕ
ADDR - АДРЕС БЛОКА ИЗ 4 СЛОВ ДЛЯ ИНФОРМАЦИИ О СОСТОЯНИИ
УСТРОЙСТВА;
DNAM - АДРЕС СЛОВА, СОДЕРЖАЩЕГО ИМЯ УСТРОЙСТВА
(RADIX-50), О КОТОРОМ НЕОБХОДИМО ПОЛУЧИТЬ
ИНФОРМАЦИЮ.
ПОЛЬЗОВАТЕЛЬ ПОЛУЧАЕТ СЛЕДУЮЩУЮ ИНФОРМАЦИЮ:
СЛОВО 1 - ПАРАМЕТРЫ УСТРОЙСТВА (ДРАЙВЕРА);
СЛОВО 2 - РАЗМЕР ДРАЙВЕРА В БАЙТАХ;
СЛОВО 3 - АДРЕС ЗАГРУЗКИ ДРАЙВЕРА;
СЛОВО 4 - РАЗМЕР УСТРОЙСТВА В БЛОКАХ.
СЛОВО ПАРАМЕТРОВ УСТРОЙСТВА СОДЕРЖИТ:
БИТ 15 - 0 УСТРОЙСТВО С БЕСКАТАЛОГОВОЙ ОРГАНИЗАЦИЕЙ;
- 1 УСТРОЙСТВО С КАТАЛОГОВОЙ ОРГАНИЗАЦИЕЙ;
БИТ 14 - 1 УСТРОЙСТВО ТОЛЬКО ДЛЯ ЧТЕНИЯ;
БИТ 13 - 1 УСТРОЙСТВО ТОЛЬКО ДЛЯ ЗАПИСИ;
БИТ 12 - 1 УСТРОЙСТВО С НЕСТАНДАРТНОЙ ФАЙЛОВОЙ
СТРУКТУРОЙ;
БИТ 11 - 0 ПРИ УДАЛЕНИИ ПРОГРАММЫ ДРАЙВЕР ВЫПОЛНЯЕТ
ЗАВЕРШАЮЩИХ ОПЕРАЦИЙ С УСТРОЙСТВОМ, ЕСЛИ ЭЛЕМЕНТ
ОЧЕРЕДИ АКТИВЕН;
- 1 ПРИ УДАЛЕНИИ ПРОГРАММЫ ДРАЙВЕР ВЫПОЛНЯЕТ
ЗАВЕРШАЮЩИЕ ОПЕРАЦИИ С УСТРОЙСТВОМ;
БИТ 10 - 0 МАКРОКОМАНДА .SPFUN ЗАПРЕЩЕНА;
- 1 ДРАЙВЕР МОЖЕТ ВЫПОЛНЯТЬ МАКРОКОМАНДУ .SPFUN;
�
БИТЫ 0-7- НОМЕР, ОПРЕДЕЛЯЮЩИЙ ТИП УСТРОЙСТВА.
НИЖЕ ПЕРЕЧИСЛЕНЫ НОМЕРА УСТРОЙСТВ, ИСПОЛЬЗУЕМЫХ В
РАФОС:
0 - ДИСК С ПЛАВАЮЩИМИ ГОЛОВКАМИ КАССЕТНОГО ТИПА (RK);
3 - УСТРОЙСТВО ПЕЧАТИ (LP);
4 - СИСТЕМНЫЙ ТЕРМИНАЛ (ТТ) ИЛИ ДРАЙВЕР ПАКЕТНОЙ
ОБРАБОТКИ (ВАТСН);
7 - УСТРОЙСТВО ВВОДА/ВЫВОДА НА ПЕРФОЛЕНТУ (РС);
11 - МАГНИТНАЯ ЛЕНТА (МТ);
12 - ДИСК С ФИКСИРОВАННЫМИ ГОЛОВКАМИ (RF);
�
- 35 -
13 - НАКОПИТЕЛЬ НА КАССЕТНОЙ ЛЕНТЕ (СТ);
14 - УСТРОЙСТВО ВВОДА С ПЕРФОКАРТ (CR);
20 - МАГНИТНАЯ ЛЕНТА С ВЫСОКОЙ ПЛОТНОСТЬЮ (ММ);
21 - ПАКЕТ СМЕННЫХ ДИСКОВ (DP);
22 - ГИБКИЙ ДИСК (DX);
23 - 29 МБАЙТНЫЙ ПАКЕТ ДИСКОВ (DP);
24 - ДРАЙВЕР ПРОТОКОЛИРОВАНИЯ ОШИБОК (EL);
25 - НУЛЬ-ДРАЙВЕР (NL);
60 - ДРАЙВЕР ВИРТУАЛЬНЫХ НОСИТЕЛЕЙ (UX,UY,UZ).
ОШИБКИ:
КОД ПОЯСНЕНИЕ
0 УСТРОЙСТВО НЕ ОБНАРУЖЕНО В ТАБЛИЦАХ
МОНИТОРА.
ПРИМЕР:
В ПРИМЕРЕ ОПРЕДЕЛЯЕТСЯ РЕЗИДЕНТНОСТЬ ДРАЙВЕРА И, В
СЛУЧАЕ НЕОБХОДИМОСТИ, ДРАЙВЕР ЗАГРУЖАЕТСЯ ИЛИ
ВЫГРУЖАЕТСЯ.
.MCALL .DSTATUS,.PRINT,.EXIT,.FETCH,.RELEAS
START: .DSTATUS #CODE,#FTPR ;ПОЛУЧИТЬ ИНФОРМАЦИЮ
;ОБ УСТРОЙСТВЕ
BCC 1$
.PRINT #MSG
.EXIT
1$: TST CODE+4 ;УЖЕ ЗАГРУЖЕН?
BNE 3$ ;ДА
.FETCH #DRVR,#FTPR ;НЕТ...ЗАГРУЗИТЬ
;ДРАЙВЕР
BCC 2$
.PRINT #MSG1
.EXIT
2$: .PRINT #MSG2 ;ПЕЧАТЬ СООБЩЕНИЯ
.EXIT
3$: .RELEAS #FTPR ;ВЫГРУЗИТЬ ДРАЙВЕР
BCC 4$
.PRINT #MSG3
.EXIT
4$: .PRINT #MSG4 ;ПЕЧАТЬ СООБЩЕНИЯ
.EXIT
CODE: .BLKW 4 ;БЛОК ИНФОРМАЦИИ
FTPR: .RAD50 /RKO/ ;ИМЯ УСТРОЙСТВА
.RAD50 /FILE MAC/ ;ИМЯ ФАЙЛА
MSG: .ASCIZ /УСТРОЙСТВО ОТСУТСТВУЕТ/
MSG1: .ASCIZ /ОШИБКА FETCH/
MSG2: .ASCIZ /ДРАЙВЕР РЕЗИДЕНТЕН/
MSG3: .ASCIZ /ОШИБКА RELEAS/
MSG4: .ASCIZ /ДРАЙВЕР ВЫГРУЖЕН/
.EVEN
�
DRVR = . ;АДРЕС ЗАГРУЗКИ
;ДРАЙВЕРА
.END START
3.15. .EXIT
СИСТЕМНАЯ МАКРОКОМАНДА .EXIT ВЫЗЫВАЕТ ОКОНЧАНИЕ
ПРОГРАММЫ ПОЛЬЗОВАТЕЛЯ.
ФОРМАТ МАКРОКОМАНДЫ:
.EXIT
ВСЕ НЕЗАВЕРШЕННЫЕ МАКРОКОМАНДЫ .MRKT АННУЛИРУЮТСЯ.
ВСЕ МАКРОКОМАНДЫ ВВОДА/ВЫВОДА И ПОДПРОГРАММЫ
ЗАВЕРШЕНИЯ, ВЫПОЛНЯЕМЫЕ ДЛЯ ДАННОЙ ЗАДАЧИ, ЗАКАНЧИВАЮТСЯ
НОРМАЛЬНО.
ЕСЛИ ПРИ ВЫПОЛНЕНИИ МАКРОКОМАНДЫ .EXIT RO=0, ТО
ВЫПОЛНЯЕТСЯ ПОДРАЗУМЕВАЕМАЯ МАКРОКОМАНДА .HRESET,
ЗАПРЕЩАЯ ПОСЛЕДУЮЩЕЕ ВЫПОЛНЕНИЕ КОМАНД МОНИТОРА REENTER,
START, CLOSE.
МАКРОКОМАНДА .EXIT ПОЗВОЛЯЕТ ПРОГРАММЕ ПОЛЬЗОВАТЕЛЯ
ПЕРЕДАВАТЬ В ОБЛАСТЬ KMON (ЯЧЕЙКИ 500-777) КОМАНДНЫЕ
СТРОКИ, КОТОРЫЕ ВЫПОЛНЯЮТСЯ СЛЕДУЮЩИМ ОБРАЗОМ:
- ЯЧЕЙКА 510 ДОЛЖНА СОДЕРЖАТЬ ОБЩЕЕ ЧИСЛО БАЙТОВ
КОМАНДНЫХ СТРОК, ПЕРЕДАВАЕМЫХ В KMON;
- КОМАНДНЫЕ СТРОКИ, СОДЕРЖАЩИЕСЯ С 512 ЯЧЕЙКИ,
ДОЛЖНЫ БЫТЬ СТРОКАМИ ДИРЕКТИВЫ .ASCIZ, НАПРИМЕР:
.=510
.WORD B-A
A: .ASCIZ /COPY A.MAC B.MAC/
.ASCIZ /DELET A.MAC/
B - .
- ПЕРЕД ВЫПОЛНЕНИЕМ МАКРОКОМАНДЫ .EXIT
ПОЛЬЗОВАТЕЛЬ ДОЛЖЕН УСТАНОВИТЬ БИТ CHNIF$ В
СЛОВЕ СОСТОЯНИЯ ПРОГРАММЫ (JSW) (СМ. Т.3 КН.2
Ч.1) И ОЧИСТИТЬ RO.
�
- 36 -
ПРИ ИСПОЛЬЗОВАНИИ ПЕРЕДАВАЕМЫХ КОМАНДНЫХ СТРОК,
ИМЕЮТСЯ СЛЕДУЮЩИЕ ОГРАНИЧЕНИЯ:
- ЕСЛИ ПРОГРАММА ВЫЗВАНА ВЫПОЛНЯЮЩИМСЯ КОМАНДНЫМ
ФАЙЛОМ, ТО ЕГО ВЫПОЛНЕНИЕ ПРЕРЫВАЕТСЯ И
ВЫПОЛНЯЮТСЯ КОМАНДНЫЕ СТРОКИ ПРОГРАММЫ;
- ИЗ ПРОГРАММЫ МОЖЕТ БЫТЬ ВЫЗВАН ТОЛЬКО ОДИН
КОМАНДНЫЙ ФАЙЛ;
- МАКРОКОМАНДА .EXIT АННУЛИРУЕТ ВЫЗОВЫ МАКРОКОМАНД
.CDFN И .QSET И ВЫПОЛНЯЕТ МАКРОКОМАНДУ .UNLOCK,
ЕСЛИ БЫЛА ВЫПОЛНЕНА МАКРОКОМАНДА .LOCK; ТАКИМ
ОБРАЗОМ, КОМАНДА МОНИТОРА CLOSE НЕ ЗАКРЫВАЕТ
КАНАЛОВ, ОТКРЫТЫХ С ПОМОЩЬЮ .CDFN;
- МАКРОКОМАНДА .EXIT В ПОДПРОГРАММАХ ЗАВЕРШЕНИЯ
НЕДОПУСТИМА.
П_P_И_M_Ч_A_H_И_E. ПРОГРАММА ПОЛЬЗОВАТЕЛЯ САМА
ОБЕСПЕЧИВАЕТ ЦЕЛОСТНОСТЬ ДАННЫХ, ПЕРЕДАВАЕМЫХ KMON ВО
ВРЕМЯ ВЫПОЛНЕНИЯ МАКРОКОМАНДЫ .EXIT. НЕОБХОДИМО, ЧТОБЫ
ЭТА ОБЛАСТЬ НЕ ПОРТИЛАСЬ СТЕКОМ ПОЛЬЗОВАТЕЛЯ, Т.К.
МАКРОКОМАНДА .EXIT ЗАНОСИТ НЕКОТОРОЕ (ПЕРЕМЕННОЕ) ЧИСЛО
СЛОВ В СТЕК.
ОШИБКИ: ОТСУТСТВУЮТ.
ПРИМЕР:
В ПРИМЕРЕ ПОСЛЕ ОКОНЧАНИЯ РАБОТЫ ПРОГРАММЫ
ПРОИСХОДИТ ПОЛНАЯ РАСПЕЧАТКА КАТАЛОГА.
.MCALL .EXIT,.JSWDF
.JSWDF ;ОПРЕДЕЛИТЬ МНЕМОНИКУ
;JSW И ЕГО БИТОВ
;(ЗДЕСЬ CHNIF$)
START: MOV #510,RO
MOV #CMDSTR,R1
1$: MOV (R1)+,(RO)+
CMP R1,#CMDEND
BLO 1$
BIS #CHNIF$,@#JSW ;УСТАНОВИТЬ БИТ CHNIF$
CLR RO
.EXIT
CMDSTR: .WORD CMDEND-CMDSTR ;ДЛИНА КОМАНДНОЙ
;СТРОКИ
.ASCIZ DIRECT/FULL *.MAC ;КОМАНДНАЯ СТРОКА
CMDEND:
.EVEN
.END START
�
3.16. .FETCH
СИСТЕМНАЯ МАКРОКОМАНДА .FETCH ЗАГРУЖАЕТ ДРАЙВЕР С
СИСТЕМНОГО УСТРОЙСТВА В ОПЕРАТИВНУЮ ПАМЯТЬ.
ФОРМАТ МАКРОКОМАНДЫ:
.FETCH ADDR,DNAM
ГДЕ
ADDR - АДРЕС, КУДА ДОЛЖЕН ЗАГРУЖАТЬСЯ ДРАЙВЕР
УСТРОЙСТВА;
DNAM - АДРЕС СЛОВА, СОДЕРЖАЩЕГО ИМЯ УСТРОЙСТВА В КОДЕ
RADIX-50.
АДРЕС ПАМЯТИ ДЛЯ ЗАГРУЗКИ ДРАЙВЕРА ПЕРЕСЫЛАЕТСЯ В
СТЕК. ПОСЛЕ ВЫПОЛНЕНИЯ МАКРОКОМАНДЫ .FETCH RO СОДЕРЖИТ
АДРЕС ПЕРВОЙ СВОБОДНОЙ ЯЧЕЙКИ ВЫШЕ ДРАЙВЕРА. ЕСЛИ ДРАЙВЕР
УЖЕ В ПАМЯТИ, ТО RO СОДЕРЖИТ ТОТ ЖЕ АДРЕС, ЧТО И
НАХОДЯЩИЙСЯ В СТЕКЕ. ЕСЛИ ЗНАЧЕНИЕ В СТЕКЕ < 400
(ВОСЬМЕРИЧНЫХ), ТО ДЛЯ ДРАЙВЕРА ВЫПОЛНЯЕТСЯ МАКРОКОМАНДА
.RELEAS.
СЛЕДУЮЩИЕ МАКРОКОМАНДЫ ТРЕБУЮТ ПРИСУТСТВИЯ ДРАЙВЕРА
В ПАМЯТИ:
.CLOSE .LOOKUP .ENTER
.RENAME .SPFUN .DELET
.READ .READC .READW
.WRITE .WRITC .WRITW
П_P_И_M_E_Ч_A_H_И_E. ОПЕРАЦИИ ВВОДА/ВЫВОДА НЕ МОГУТ
БЫТЬ ВЫПОЛНЕНЫ, ЕСЛИ НЕ ЗАГРУЖЕН ДРАЙВЕР УСТРОЙСТВА.
ОШИБКИ:
КОД ПОЯСНЕНИЕ
0 УСТРОЙСТВО С УКАЗАННЫМ ИМЕНЕМ НЕ СУЩЕСТВУЕТ
В СИСТЕМЕ НЕТ ДРАЙВЕРА ЭТОГО УСТРОЙСТВА.
ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .DSTATUS.
�
- 37 -
3.17. .GTIM
СИСТЕМНАЯ МАКРОКОМАНДА .GTIM ВОЗВРАЩАЕТ ТЕКУЩЕЕ
СОДЕРЖИМОЕ СИСТЕМНОГО ТАЙМЕРА (В ТИКАХ) ПО УКАЗАННОМУ
АДРЕСУ.
ФОРМАТ МАКРОКОМАНДЫ:
.GTIM AREA,ADDR
ГДЕ
AREA - АДРЕС СПИСКА АРГУМЕНТОВ ЕМТ ИЗ ДВУХ СЛОВ;
ADDR - АДРЕС ДВУХ СЛОВ, КУДА ПОМЕЩАЕТСЯ ВРЕМЯ (ПЕРВОЕ
СЛОВО СОДЕРЖИТ СТАРШИЕ РАЗРЯДЫ, ВТОРОЕ -
МЛАДШИЕ).
ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:
!--------!--------!
RO => AREA: ! 21 ! 0 !
!--------!--------!
! ADDR !
!-----------------!
ПРОГРАММА ПОЛЬЗОВАТЕЛЯ ДОЛЖНА САМА ПРЕОБРАЗОВЫВАТЬ
ВРЕМЯ ИЗ ТИКОВ В ЧАСЫ, МИНУТЫ, СЕКУНДЫ (1 СЕК = 50 ТИКАМ
ДЛЯ СЕТИ С ЧАСТОТОЙ 50 ГЦ).
ОШИБКИ: ОТСУТСТВУЮТ.
ПРИМЕР:
В ПРИМЕРЕ ПОЛЬЗОВАТЕЛЬ ПОЛУЧАЕТ В ЯЧЕЙКЕ TIME
ТЕКУЩЕЕ ВРЕМЯ В ТИКАХ.
.MCALL .GTIM,.EXIT
START: .GTIM #AREA,#TIME ;ПОЛУЧИТЬ ВРЕМЯ
.EXIT
TIME: .WORD 0,0
AREA: .BLKW 2 ;БЛОК АРГУМЕНТОВ ЕМТ
.END START
3.18. .GTJB
СИСТЕМНАЯ МАКРОКОМАНДА .GTJB ВОЗВРАЩАЕТ ПАРАМЕТРЫ
ЗАДАНИЯ В ПРОГРАММУ ПОЛЬЗОВАТЕЛЯ.
ФОРМАТ МАКРОКОМАНДЫ:
.GTJB AREA,ADDR
ГДЕ
AREA - АДРЕС СПИСКА АРГУМЕНТОВ ЕМТ ИЗ ДВУХ СЛОВ;
ADDR - АДРЕС БЛОКА ИЗ ВОСЬМИ СЛОВ, КУДА ПОМЕЩАЮТСЯ
ПАРАМЕТРЫ.
�
ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:
!--------!--------!
RO => AREA: ! 20 ! 0 !
!--------!--------!
! ADDR !
!-----------------!
ПОЛЬЗОВАТЕЛЬ ПОЛУЧАЕТ:
СЛОВО 1 - НОМЕР РАЗДЕЛА: 0-ФОНОВОЕ ЗАДАНИЕ, 1-ОПЕРАТИВНОЕ
ЗАДАНИЕ (ДЛЯ SJ-МОНИТОРА ВСЕГДА 0);
СЛОВО 2 - ВЕРХНИЙ АДРЕС РАЗДЕЛА;
СЛОВО 3 - НИЖНИЙ АДРЕС РАЗДЕЛА (ДЛЯ SJ-МОНИТОРА ВСЕГДА 0);
СЛОВО 4 - НАЧАЛЬНЫЙ АДРЕС БУФЕРА КАНАЛОВ ВВОДА/ВЫВОДА;
СЛОВО 5 - АДРЕС СМЕШАННОЙ ОБЛАСТИ ЗАДАНИЯ (ДЛЯ FB- И
ХМ-МОНИТОРОВ);
СЛОВО 6-8
- ЗАРЕЗЕРВИРОВАНЫ.
ОШИБКИ: ОТСУТСТВУЮТ.
ПРИМЕР:
В ПРИМЕРЕ ОПРЕДЕЛЯЕТСЯ РАЗДЕЛ, В КОТОРОМ РАБОТАЕТ
ПРОГРАММА.
�
- 38 -
.MCALL .GTJB,.PRINT,.EXIT
START: .GTJB #AREA,#JOBARG ;ПОЛУЧИТЬ ПАРАМЕТРЫ
MOV #MSG,RO
TST JOBARG ;ФОНОВЫЙ РАЗДЕЛ?
BNE 1$ ;HET
MOV #MSG1,RO
1$: .PRINT ;ПЕЧАТЬ СООБЩЕНИЯ
.EXIT
MSG: .ASCIZ /ПРОГРАММА В ОПЕРАТИВНОМ РАЗДЕЛЕ/
MSG1: .ASCIZ /ПРОГРАММА В ФОНОМ РАЗДЕЛЕ/
.EVEN
AREA: .BLKW 2 ;БЛОК АРГУМЕНТОВ ЕМТ
JOBARG: .BLKW 8. ;БЛОК ПАРАМЕТРОВ
.END START
3.19. .GTLIN
СИСТЕМНАЯ МАКРОКОМАНДА .GTLIN ВВОДИТ КОМАНДНУЮ
ИНФОРМАЦИЮ, ОТЛИЧНУЮ ОТ ФОРМАТА CSI С СИСТЕМНОГО
ТЕРМИНАЛА ИЛИ ИЗ ВЫПОЛНЯЮЩЕГОСЯ КОМАНДНОГО ФАЙЛА.
ФОРМАТ МАКРОКОМАНДЫ:
.GTLIN LINBUF[,PROMPT]
ГДЕ
LINBUF - АДРЕС БУФЕРА, КУДА ВВОДИТСЯ СТРОКА;
PROMPT - НЕОБЯЗАТЕЛЬНЫЙ АРГУМЕНТ; АДРЕС СТРОКИ-ПОДСКАЗКИ,
ПЕЧАТАЮЩЕЙСЯ НА СИСТЕМНОМ ТЕРМИНАЛЕ.
ВВОДИМАЯ СТРОКА В ОБЛАСТИ LINBUF (81. БАЙТ)
ОКАНЧИВАЕТСЯ НУЛЕВЫМ БАЙТОМ ВМЕСТО <CR><LF>.
МАКРОКОМАНДА .GTLIN ТРЕБУЕТ USR И ВЫБИРАЕТ СТРОКУ С
СИСТЕМНОГО ТЕРМИНАЛА ИЛИ ИЗ КОМАНДНОГО ФАЙЛА В
ЗАВИСИМОСТИ ОТ ТОГО, ОТКУДА БЫЛА ЗАГРУЖЕНА ПРОГРАММА.
ЕСЛИ БЫЛА ЗАДАНА КОМАНДА SET TT QUIET, A BBOД
ПРОИСХОДИТ ИЗ КОСВЕННОГО ФАЙЛА, СТРОКА-ПОДСКАЗКА
ИГНОРИРУЕТСЯ. В ПРОТИВНОМ СЛУЧАЕ СТРОКА-ПОДСКАЗКА
ВЫВОДИТСЯ НА СИСТЕМНЫЙ ТЕРМИНАЛ ПРЕЖДЕ, ЧЕМ ВЫБРАНА
ВВОДИМАЯ СТРОКА.
ОШИБКИ: ОТСУТСТВУЮТ.
ПРИМЕР:
В ПРИМЕРЕ ВВОДИТСЯ СТРОКА С ТЕРМИНАЛА И
РАСПЕЧАТЫВАЕТСЯ.
.MCALL .GTLIN,.PRINT,.EXIT
START: .GTLIN #BUFF,#PROMPT ;ВВЕСТИ СТРОКУ
TSTB BUFF ;СТРОКА ПУСТАЯ?
BEQ END ;ДА
.PRINT #BUFF ;НЕТ...ВЫВЕСТИ СТРОКУ
BR START
END: .EXIT
�
PROMPT: .ASCIZ /ВВЕДИТЕ СТРОКУ/ ;СТРОКА-ПОДСКАЗКА
BUFF: .BLKB 82. ;БУФЕР ВВОДИМОЙ СТРОКИ
.END START
3.20. .GVAL
СИСТЕМНАЯ МАКРОКОМАНДА .GVAL ВОЗВРАЩАЕТ В RO
СОДЕРЖИМОЕ УКАЗАННОЙ ЯЧЕЙКИ МОНИТОРА.
ФОРМАТ МАКРОКОМАНДЫ:
.GVAL AREA,OFFSET
ГДЕ
AREA - АДРЕС СПИСКА АРГУМЕНТОВ ЕМТ ИЗ ДВУХ СЛОВ;
OFFSET - СМЕЩЕНИЕ НУЖНОЙ ЯЧЕЙКИ ОТ НАЧАЛА МОНИТОРА.
ФОРМАТ СПИСКА АРГУМЕНТОВ ЕМТ:
!--------!--------!
RO=> AREA: ! 34 ! 0 !
!--------!--------!
! OFFSET !
!-----------------!
МАКРОКОМАНДА .GVAL ИСПОЛЬЗУЕТСЯ ТОЛЬКО ДЛЯ ЧТЕНИЯ И
ОБЕСПЕЧИВАЕТ СОХРАННОСТЬ ИНФОРМАЦИИ В МОНИТОРЕ.
П_P_M_E_Ч_A_H_И_E. ДЛЯ СМЕЩЕНИЙ РЕКОМЕНДУЕТСЯ
ПОЛЬЗОВАТЬСЯ МНЕМОНИКОЙ, ПОЛУЧЕННОЙ С ПОМОЩЬЮ
МАКРОКОМАНДЫ .ROFDF.
ОШИБКИ:
КОД ПОЯСНЕНИЕ
0 СМЕЩЕНИЕ ВЫХОДИТ ЗА ПРЕДЕЛЫ РЕЗИДЕНТНОГО
МОНИТОРА.
ПРИМЕР:
В ПРИМЕРЕ ПОЛЬЗОВАТЕЛЬ ПОЛУЧАЕТ НОМЕР ВЕРСИИ
�
= 39 =
МОНИТОРА В ЯЧЕЙКЕ MONVER И НОМЕР КОРРЕКЦИИ МОНИТОРА В
ЯЧЕЙКЕ MONUPD.
.MCALL .GVAL,.EXIT,.ROFDF
.ROFDF ;ПОЛУЧИТЬ МНЕМОНИКУ
;СМЕЩЕНИЯ МОНИТОРА
;(ЗДЕСЬ SYSVER)
START: .GVAL #AREA,#SYSVER ;ПОЛУЧИТЬ В RO СОДЕР-
;ЖИМОЕ ЯЧЕЙКИ МОНИТОРА
MOVB RO,MONVER ;ПОЛУЧИТЬ НОМЕР ВЕРСИИ
SWAB RO
MOVB RO,MONUPD ;ПОЛУЧИТЬ НОМЕР КОРРЕКЦИИ
.EXIT
MONVER: .BLKB
MONUPD: .BLKB
AREA: .BLKW 2 ;БЛОК АРГУМЕНТОВ ЕМТ
.END START
3.21. .HERR
СИСТЕМНАЯ МАКРОКОМАНДА .HERR ЗАПРЕЩАЕТ ОБРАБОТКУ
СЕРЬЕЗНЫХ ОШИБОК В ПРОГРАММЕ ПОЛЬЗОВАТЕЛЯ.
ФОРМАТ МАКРОКОМАНДА:
.HERR
ФОРМАТ РЕГИСТРА RO:
!--------!--------!
RO=> ! 5 ! 0 !
!--------!--------!
СИСТЕМНАЯ МАКРОКОМАНДА .HERR РАЗРЕШАЕТ СИСТЕМЕ
УДАЛЯТЬ ПРОГРАММУ ПО СЕРЬЕЗНОЙ ОШИБКЕ И ВЫДАВАТЬ
СООБЩЕНИЕ ОБ ОШИБКЕ НА ТЕРМИНАЛ.
ОШИБКИ: ОБРАБОТКУ ОШИБОК ПРОИЗВОДИТ МОНИТОР.
ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .SERR.
3.22. .HRESET
СИСТЕМНАЯ МАКРОКОМАНДА .HRESET ОЧИЩАЕТ КАНАЛЫ
ВВОДА/ВЫВОДА, ОСВОБОЖДАЕТ ДРАЙВЕРЫ УСТРОЙСТВ, ЗАГРУЖЕННЫЕ
В ОПЕРАТИВНУЮ ПАМЯТЬ ПО МАКРОКОМАНДЕ .FETCH, И ПРЕКРАЩАЕТ
ВСЕ ОПЕРАЦИИ ВВОДА/ВЫВОДА.
ФОРМАТ МАКРОКОМАНДЫ:
.HRESET
СИСТЕМНАЯ МАКРОКОМАНДА .HRESET НЕ ИСПОЛЬЗУЕТСЯ ДЛЯ
СБРОСА УСЛОВИЙ ОШИБОК.
�
СИСТЕМНАЯ МАКРОКОМАНДА .HRESET ДЕЙСТВИТЕЛЬНА ТОЛЬКО
В СВОЕМ ЗАДАНИИ. ДРУГОЕ ЗАДАНИЕ ПРОДОЛЖАЕТ ВЫПОЛНЯТЬСЯ.
ОШИБКИ: ОТСУТСТВУЮТ.
ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .CDFN.
3.23. .INTEN
СИСТЕМНАЯ МАКРОКОМАНДА .INTEN СООБЩАЕТ МОНИТОРУ О
ВОЗНИКШЕМ ПРЕРЫВАНИИ; ПЕРЕКЛЮЧАЕТ РАБОТУ В СОСТОЯНИЕ
СИСТЕМЫ; УСТАНАВЛИВАЕТ ТРЕБУЕМЫЙ ПРИОРИТЕТ ПРОЦЕССОРА.
ФОРМАТ МАКРОКОМАНДЫ:
.INTEN PRIO[,PIC]
ГДЕ
PRIO - ТРЕБУЕМЫЙ ПРИОРИТЕТ ПРОЦЕССОРА;
PIC - ПРОИЗВОЛЬНЫЙ АРГУМЕНТ.
АРГУМЕНТ PIC УКАЗЫВАЕТ, ЧТО ПРОГРАММА ОБРАБОТКИ
ПРЕРЫВАНИЯ НАПИСАНА В ПОЗИЦИОННО-НЕЗАВИСИМОМ КОДЕ, В
ПРОТИВНОМ СЛУЧАЕ АРГУМЕНТ PIC ДОЛЖЕН ОТСУТСТВОВАТЬ.
ВСЕ ВНЕШНИЕ ПРЕРЫВАНИЯ ПЕРЕВОДЯТ ПРИОРИТЕТ
ПРОЦЕССОРА НА 7 УРОВЕНЬ. МАКРОКОМАНДА .INTEN ПОНИЖАЕТ
ПРИОРИТЕТ ПРОЦЕССОРА ДО ТРЕБУЕМОЙ ВЕЛИЧИНЫ.
ВЫХОД ИЗ ПРОГРАММЫ ОБРАБОТКИ ПРЕРЫВАНИЯ, КОТОРАЯ
ИСПОЛЬЗОВАЛА МАКРОКОМАНДУ .INTEN, ДОЛЖЕН БЫТЬ ПО RTS PC.
ОШИБКИ: ОТСУТСТВУЮТ.
�
- 40 -
ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .SYNCH.
3.24. .JSWDF
СИСТЕМНАЯ МАКРОКОМАНДА .JSWDF ОПРЕДЕЛЯЕТ СИМВОЛЫ И
МНЕМОНИЧЕСКИЕ ОБОЗНАЧЕНИЯ РАЗРЯДОВ СЛОВА СОСТОЯНИЯ
ПРОГРАММЫ (СМ. Т.3 КН.2 Ч.1).
ФОРМАТ МАКРОКОМАНДЫ:
.JSWDF
РАСШИРЕНИЕ МАКРОКОМАНДЫ:
JSW =^044
USWAP$ =^0100000
TTLC$ =^040000
RSTRT$ =^020000
TTSPC$ =^010000
CHNIF$ =^04000
VIRT$ =^02000
OVLY$ =^01000
CHAIN$ =^0400
HLTER$ =^0200
TCBIT$ =^0100
ESCFL$ =^040
ESCSQ$ =^020
GTLIN$ =^010
ДАННАЯ МАКРОКОМАНДА НЕ ГЕНЕРИРУЕТ КОДОВ ЕМТ, А
ЯВЛЯЕТСЯ ЧИСТО ОПИСАТЕЛЬНОЙ.
ОШИБКИ: ОТСУТСТВУЮТ.
ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .EXIT.
3.25. .LOCK
СИСТЕМНАЯ МАКРОКОМАНДА .LOCK ЗАГРУЖАЕТ USR (ЕСЛИ ОНА
НЕ ЗАГРУЖЕНА) И ДЕЛАЕТ ЕЕ РЕЗИДЕНТНОЙ В ОПЕРАТИВНОЙ
ПАМЯТИ.
ФОРМАТ МАКРОКОМАНДЫ:
.LOCK
ЕСЛИ СОБЛЮДЕНЫ ВСЕ УСЛОВИЯ, ВЫЗЫВАЮЩИЕ СВОПИНГ, ТО
ПРОГРАММА ЗАНОСИТСЯ В БЛОКИ СВОПИНГА, А USR ЗАГРУЖАЕТСЯ В
ПАМЯТЬ. В ПРОТИВНОМ СЛУЧАЕ, ИСПОЛЬЗУЕТСЯ USR, НАХОДЯЩАЯСЯ
В ПАМЯТИ.
USR НЕ ВЫВОДИТСЯ ИЗ ПАМЯТИ ДО ВЫПОЛНЕНИЯ
МАКРОКОМАНДЫ .UNLOCK.
�
ОБРАЩЕНИЕ К CSI ВЫЗЫВАЕТ НЕЯВНУЮ МАКРОКОМАНДУ
.INLOCK.
ЕСЛИ USR РЕЗИДЕНТНА, МАКРОКОМАНДА .LOCK
ИГНОРИРУЕТСЯ.
ЧИСЛО МАКРОКОМАНД .LOCK И .UNLOCK ДОЛЖНО СОВПАДАТЬ.
МАКРОКОМАНДА .LOCK ЗАПРЕЩАЕТ ПОВТОРНОЕ СЧИТЫВАНИЕ
ПРОГРАММЫ ПОЛЬЗОВАТЕЛЯ, ПОЭТОМУ НЕОБХОДИМО, ЧТОБЫ ЕЕ
ВЫЗОВ НЕ ИСХОДИЛ ИЗ ОБЛАСТИ, В КОТОРУЮ БУДЕТ ОБМЕНИВАТЬСЯ
USR.
НЕ СЛЕДУЕТ РАЗРУШАТЬ ОБЛАСТЬ USR (ДАЖЕ ЕСЛИ ОНА НЕ
НУЖНА) ПОСЛЕ ВЫПОЛНЕНИЯ МАКРОКОМАНДЫ .LOCK, Т.К. ЭТО
ПРИВЕДЕТ К НЕПРЕДВИДЕННЫМ РЕЗУЛЬТАТАМ ПРИ ВЫПОЛНЕНИИ
МАКРОКОМАНДЫ .UNLOCK.
ЕСЛИ ОПЕРАТИВНОЕ ЗАДАНИЕ ВЫПОЛНЯЕТ МАКРОКОМАНДУ
.LOCK ВО ВРЕМЯ ИСПОЛЬЗОВАНИЯ USR ФОНОВЫМ ЗАДАНИЕМ, ТО
ВЫПОЛНЕНИЕ ОПЕРАТИВНОГО ЗАДАНИЯ ПРИОСТАНАВЛИВАЕТСЯ ДО
ОСВОБОЖДЕНИЯ USR.
ОШИБКИ: ОТСУТСТВУЮТ.
ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .UNLOCK.
3.26. .MFPS
СИСТЕМНАЯ МАКРОКОМАНДА .MFPS СЧИТЫВАЕТ БИТЫ
ПРИОРИТЕТА ИЗ СЛОВА СОСТОЯНИЯ ПРОЦЕССОРА.
ФОРМАТ МАКРОКОМАНДЫ:
.MFPS ADDR
ГДЕ
ADDR - АДРЕС, В КОТОРЫЙ ПОМЕЩАЕТСЯ ЗНАЧЕНИЕ ПРИОРИТЕТА.
ЕСЛИ АДРЕС ОТСУТСТВУЕТ, ЗНАЧЕНИЕ ПОМЕЩАЕТСЯ В СТЕК.
П_P_И_M_E_Ч_A_H_И_E. КОДЫ УСЛОВИЙ РАЗРУШАЮТСЯ В
ПРОЦЕССЕ ВЫПОЛНЕНИЯ МАКРОКОМАНДЫ.
ОШИБКИ: ОТСУТСТВУЮТ.
ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .MTPS.
�
- 41 -
3.27. .MRKT
Системная макрокоманда .MRKT планирует запуск указанной
подпрограммы завершения через заданный интервал времени в тиках
( 50 тиков = 1 сек для частоты сети 50 Гц ).
формат макрокоманды:
.MRKT AREA,TIME,CRTN,ID
где
AREA - адрес списка аргументов EMT из четырех слов;
TIME - адрес двух слов, содержащих временной интервал;
CRTN - адрес входа в подпрограмму завершения;
ID - идентификатор каждой макрокоманды .MRKT.
Формат списка аргументов EMT:
!-------!--------!
R0=>AREA: ! 22 ! 0 !
!-------!--------!
! TIME !
!----------------!
! CRTN !
!----------------!
! ID !
!----------------!
Системная макрокоманда .MRKT требует элемент очереди.
Пользователь должен сам распределить достаточное количество
элементов очереди.
ID в диапазоне 177400-177777 ( восьмеричных ) зарезер-
вированы для системного использования.
Несколько макрокоманд .MRKT могут иметь один и тотже ID.
При входе в подпрограмму завершения R0 содержит ID.
Ошибки:
Код Пояснение
0 Нет свободного места очереди.
Пример:
В примере по истечению времени выдается сообщение на
терминал.
.MCALL .READ,.WAIT,.MRKT,.CMKT
.MCALL .QSET,.PRINT,.EXIT,.LOOKUP
START: .LOOKUP #AREA,#0,#FILE ;ОТКРЫТЬ ФАЙЛ
BCS LKERR
MOV #AREA,-(SP)
.QSET #QUEUE,#5 ;ДОБАВИТЬ 5 ЭЛЕМЕНТОВ
;ОЧЕРЕДИ
�
.MRKT (SP),#INTRVL,#MRTN,#1 ;ЗАПУСТИТЬ MRTN
;ПО ИСТЕЧЕНИИ ВРЕМЕНИ
BCS NOMRKT
.READ #RDLST ;ЧИТАТЬ
BCS RDERR
.WAIT #0 ;ЖДАТЬ
.CMKT (SP),#1 ;ОСВОБОДИТЬ ЭЛЕМЕНТ
;ОЧЕРЕДИ (ОТМЕНИТЬ .MRKT)
BCS NOTDUM
.EXIT
MRTN: ;ПОДПРОГРАММА ЗАВЕРШЕНИЯ
.PRINT #FAIL1
RTS PC
LKERR: .PRINT #LM
.EXIT
RDERR: .PRINT #RDMSG
.EXIT
NOTDUM: .PRINT #FAIL
.EXIT
NOMRKT: .PRINT #NOQ
.EXIT
NOQ: .ASCIZ /НЕТ ЭЛЕМЕНТА ОЧЕРЕДИ/
FAIL: .ASCIZ /ОШИБКА CMKT/
FAIL1: .ASCIZ /ВРЕМЯ ИСТЕКЛО/
LM: .ASCIZ /ОШИБКА LOOKUP/
RDMSG: .ASCIZ /ОШИБКА READ/
.EVEN
INTRVL: .WORD 0,13. ;ВРЕМЯ
QUEUE: .BLKW 5*7 ;БЛОК ЭЛЕМЕНТОВ
AREA: .BLKW 5 ;БЛОК АРГУМЕНТОВ EMT
;ДЛЯ .MRKT
FILE: .RAD50 /DK FILE TST/
RDLST: .BYTE 0 ;БЛОК АРГУМЕНТОВ EMT
.BYTE 10 ;ДЛЯ .READ
BLOCK: .WORD 0
.WORD BUFF
.WORD 256.
.WORD 1
BUFF: .BLKW 256. ;БУФЕР ВВОДА
.END START
�
- 42 -
3.28. .MTPS
СИСТЕМНАЯ МАКРОКОМАНДА .MTPS УСТАНАВЛИВАЕТ БИТЫ
ПРИОРИТЕТА, КОДЫ УСЛОВИЙ И Т-БИТ В СЛОВЕ СОСТОЯНИЯ
ПРОЦЕССОРА.
ФОРМАТ МАКРОКОМАНДЫ:
.MTPS ADDR
ГДЕ
ADDR - АДРЕС, СОДЕРЖИМОЕ КОТОРОГО ПОМЕЩАЕТСЯ В СЛОВО
СОСТОЯНИЯ ПРОЦЕССОРА.
ЕСЛИ АДРЕС ОТСУТСТВУЕТ, ЗНАЧЕНИЕ БЕРЕТСЯ ИЗ СТЕКА.
ОШИБКИ: ОТСУТСТВУЮТ.
ПРИМЕР:
В ПРИМЕРЕ ПРИОРИТЕТ СОХРАНЯЕТСЯ В СТЕКЕ,
УСТАНАВЛИВАЕТСЯ НОВЫЙ ПРИОРИТЕТ, А ЗАТЕМ
ВОССТАНАВЛИВАЕТСЯ СТАРЫЙ.
.MCALL .MFPS,.MTPS,.EXIT
START: JSR PC,PICKQ
NOP
NOP
NOP
.EXIT
PICKQ: .MFPS ;СОХРАНИТЬ ПРИОРИТЕТ
;В СТЕКЕ
MOV #QHEAD,R4
.MTPS #340 ;УСТАНОВИТЬ ПРИОРИТЕТ 7
MOV @R4,R5
BEQ 1$
MOV @R5,@R4
.MTPS ;ВОССТАНОВИТЬ ПРИОРИТЕТ
;ИЗ СТЕКА
CLZ
1$: RTS PC
QHEAD: .WORD Q1
Q1: .WORD Q2,0,0
Q2: .WORD Q3,0,0
Q3: .WORD 0,0,0
.END START
�
3.29. .MWAIT (ТОЛЬКО ДЛЯ FB- I XM-МОНИТОРОВ)
СИСТЕМНАЯ МАКРОКОМАНДА .MWAIT ПРИОСТАНАВЛИВАЕТ
ВЫПОЛНЕНИЕ ПРОГРАММЫ ДО ОКОНЧАНИЯ ПРИЕМА ИЛИ ПЕРЕДАЧИ
СООБЩЕНИЙ МЕЖДУ ПРОГРАММАМИ.
ФОРМАТ МАКРОКОМАНДЫ:
.MWAIT
ФОРМАТ РЕГИСТРА RO:
!--------!--------!
RO=> ! 11 ! 0 !
!--------!--------!
ОБЫЧНО ЭТА МАКРОКОМАНДА ИСПОЛЬЗУЕТСЯ В СОЧЕТАНИИ С
МАКРОКОМАНДАМИ .RCVD ИЛИ .SDAT, КОТОРЫЕ НЕ
ПРЕДУСМАТРИВАЮТ НИКАКИХ ОПЕРАЦИЙ ПОСЛЕ ЗАВЕРШЕНИЯ
СООБЩЕНИЯ.
ОШИБКИ: ОТСУТСТВУЮТ.
ПРИМЕР:
В ПРИМЕРЕ ПРИНИМАЕТСЯ СООБЩЕНИЕ ИЗ ДРУГОГО ЗАДАНИЯ И
ПРОВЕРЯЕТСЯ ЕГО ПРАВИЛЬНОСТЬ.
.MCALL .MWAIT,.RCVD,.PRINT,.EXIT
WORDS = 255.
START: .RCVD #AREA,#RBUFF,#WORDS ;ПОЛУЧИТЬ СООБЩЕНИЕ
MOV #RBUFF+2,R5
.MWAIT ;ЖДАТЬ
CMPB (R5)+,#14
BNE ERR
.EXIT
ERR: .PRINT #MSG
.EXIT
MSG: .ASCIZ /ОШИБОЧНОЕ СООБЩЕНИЕ/
.EVEN
AREA: .BLKW 10 ;БЛОК АРГУМЕНТОВ ЕМТ
RBUFF: .BLKW 256. ;БУФЕР ДЛЯ ПРИЕМА
;СООБЩЕНИЯ
.END START
�
- 43 -
3.30. .POP
Системная макрокоманда .POP выбирает значения из стека
и помещает их в указанные аргументы.
Формат макрокоманды:
.POP ADDR
где
ADDR - адрес, куда помещается значение из стека.
Несколько адресов должны заключаться в угловые скобки.
Например: .POP <ADR1,ADR2,...,ADRN>
Ошибки: отсутствуют.
Пример: см. пример макрокоманды .DATE.
3.31. .PROTECT ( только для FB- и XM-монитора ).
Системная макрокоманда .PROTECT дает программе возможность
монопольного испольования вектора устройства в диапаоне 0-476
( восьмеричных ).
Формат макрокоманды:
.PROTECT AREA,ADDR
где
AREA - адрес списка аргументов EMT из двух слов;
ADDR - адрес вектора, который должен быть закреплен.
Формат списка аргументов EMT:
!-------!--------!
R0=>AREA: ! 31 ! 0 !
!-------!--------!
! ADDR !
!----------------!
! ADDR+2 !
!----------------!
Успешное выполнение системной макрокоманды .PROTECT оначает,
что эаданный вектор в данный момент не испольэуется другим эаданием
или монитором и эакрепляется эа данной программой.
Ошибки:
Код Пояснение
0 Вектор не испольэуется и не может быть эакреплен;
1 адрес (ADDR) > 476 (восьмеричных) или < 4.
Пример: см. пример макрокоманды .UNPROTECT.
�
3.32. .PUSH.
Системная макрокоманда .PUSH эаносит содержимое укаэанных
аргументов в стек.
Формат макрокоманды:
.PUSH ADDR
где
ADDR - аргумент, эначение которого необходимо эанести в стек.
Несколько аргументов должны заключаться в угловые скобки.
Например: .PUSH <ADR1,ADR2,...,ADRN>
Ошибки: отсутствуют.
Пример: см. пример макрокоманды .DATE.
�
-44-
3.30. .QSET
Системная макрокоманда .QSET убеличивает длину очереди
элементов ввода/быбода, подпрограмм авершения и т.п.
Формат макрокоманды:
.QSET ADDR,LEN
где
ADDR - начальный адрес области для новых элементов очереди;
LEN - число новых элементов очереди.
В SJ- и FB-мониторах каждый элемент очереди эанимает
семь слов. В XM-мониторе - десять слов. Следовательно, область,
отводимая для очереди, должна равняться:
- для SJ- и FB-мониторов - LEN*7;
- для XM-монитора - LEN*10.
Макрокоманда .QSET может выэываться столько раэ,
сколько требуется.
Область для элементов очереди реэервируется польэователем.
Необходимо следить, чтобы программа не иэменяла элементы, если они
уже установлены.
Макрокоманда .SRESET и .HRESET отменяют все очереди эле-
ментов, определенные пользователем. После них необходимо повторить
макрокоманду .QSET, чтобы снова определить область для элементов
очереди.
Элементы очереди заданные макрокомандой .QSET не должны
перекрываться с областью, в которую обменивается USR.
Нижеперечисленные макрокоманды требуют элемент очереди:
.READ .READC .READW
.WRITE .WRITEC .WRITEW
.RCVD .RCVDC .RCVDW
.SDAT .SDATC .SDATW
.TWAIT .MRKT
Ошибки: отсутствуют.
Пример: см. пример макрокоманды .MRKT.
3.34. .RCTRLO.
Системная макрокоманда .RCTRLO разрешает вывод на
системный терминал ( сбрасывает флаг CTRL/O ).
Формат макрокоманды:
.RCTRLO
Команда <CTRL/O>, введенная с терминала, запрещает вывод
на терминал. Разрешить вывод на терминал можно повторным введе-
нием <CTRL/O> с терминала или с помощью макрокоманды .RCTRLO.
�
Ошибки: отсутствуют.
Пример:
В примере пользователь с помощью клавиатуры терминала
запрещает вывод на терминал. В программе макрокоманда .RCTRLO
разрешает вывод на терминал, о чем указывает появление
звездочки на экране.
.MCALL .RCTRL0,.CSIGEN,.EXIT,.SRESET
START: .RCTRLO ;РАЗРЕШИТЬ ВЫВОД НА ТТ:
.CSIGEN #DSPACE,#DEXT,#0 ;ВВЕСТИ КОМАНДНУЮ
;СТРОКУ
BCS NSCI
.READW #AREA,#3,#BUFF,#256.,#0 ;ЧИТАТЬ
BCS NRE
.WRITEW #AREA,#0,#BUFF,#256.,#0 ;ЗАПИСАТЬ
BCS NWR
.SRESET
JMP START
NCSI: .PRINT #MSG
.EXIT
NRE: .PRINT #MSG1
.EXIT
NWR: .PRINT #MSG2
.EXIT
MSG: .ASCIZ /ОШИБКА CSI/
MSG1: .ASCIZ /ОШИБКА READ/
MSG2: .ASCIZ /ОШИБКА WRITE/
.EVEN
DEXT: .WORD 0,0,0,0 ;БЛОК РАСШИРЕНИЯ
AREA: .BLKW 5 ;БЛОК АРГУМЕНТОВ EMT
BUFF: .BLKW 256. ;АДРЕС ВВОДА/ВЫВОДА
DSPACE =. ;АДРЕС ЗАГРУЗКИ
;ДРАЙВЕРОВ
.END START
�
-45-
3.35. .RELEAS.
Системная макрокоманда .RELEAS удаляет указанный драйвер
из оперативной памяти.
Формат макрокоманды:
.RELEAS DNAM
где
DNAM - адрес слова,содержащего имя устройства в коде RADIX-50.
После макрокоманды .RELEAS, чтобы вновь использовать
устройство, необходимо выполнить макрокоманду .FETCH.
ПРИМЕЧАНИЕ. Макрокоманда .RELEAS не удаляет драйвер,
загруженный командой монитора LOAD.
Ошибки:
Код Пояснение
0 Устройство с указанным именем не существует.
Пример: см. пример макрокоманды .DSTATUS.
3.36. .ROFDF.
Системная макрокоманда .ROFDF определяет мнемонические
смещения полезных ячеек резидентного монитора
( см. т.3 кн.2 4.1 п.2.2 ).
Формат макрокоманды:
.ROFDF
Расширение макрокоманды:
$USRLC =^0266
QCOMP =^0270
SPUSR =^0272
SYUNIT -^0275
SYSVER =^0276
SYSUPD =^0277
TTKS =^0304
TTKB =^0306
TTPS =^0310
TTPB =^0312
MAXBLK =^0314
SYSCH =^0324
GTVEC =^0354
$MTPS =^0360
$MFPS =^0362
STATWD =^0366
USRAREA =^0374
IFMXNST =^0377
EMTRTN =^0400
FORK =^0402
�
Данная макрокоманда не генерирует кодов EMT, а является
чисто описательной.
Ошибки: отсутствуют.
Пример: см. пример макрокоманды .GVAL.
3.37. .RSUM ( только для FB- и XM-мониторов )
Системная макрокоманда .RSUM продолжает выполнение
программы после того, как она была приостановлена
макрокомандой .SPND.
Формат макрокоманды:
.RSUM
Формат регистра R0:
!---------!--------!
R0=> ! 2 ! 0 !
!---------!--------!
Монитор содержит счетчик остановов для каждой
программы. Этот счетчик уменьшается макрокомандой .SPND и
увеличивается макрокомандой .RSUM. Программа будет приос-
тановлена только в том случае, если значение счетчика
отрицательно. Поэтому, если системная макрокоманда .RSUM
выдается раньше .SPND, то макрокоманда .SPND игнорируется.
Макрокоманда .RSUM из любой программы завершения
возобновляет выполнение остановленной программы.
Так как системная макрокоманда .TWAIT реализуется
в мониторе с использованием останова и возобновления, то
макрокоманда .RSUM, выданная из подпрограммы завершения
без соответствующей .SPND, может вызвать продолжение основ-
ной программы прежде, чем закончится полный временной
интервал, указанный в .TWAIT.
Системная макрокоманда .RSUM, как и другие макро-
команды, может быть выдана из программы прерывания,
�
-46-
написанной пользователем, если имеется последовательность
.INTEN/.SYNCH, все замечания, относящиеся к .RSUM в
подпрограмме завершения, применимы к этому случаю.
Ошибки: отсутствуют.
Пример: см. пример макрокоманды .SPND.
3.38. .SCCA
Системная макрокоманда .SCCA запрещает завершение
программы по команде оператора <CTRL/C>; дает возможность
программе различать единичную и двойную команды <CTRL/C>.
Формат макрокоманды:
.SCCA AREA,ADDR
где
AREA - адрес списка аргументов EMT из двух слов;
ADDR - адрес, предназначенный для слова соостояния
терминала ( резервируется пользователем ).
Формат списка аргументов EMT:
!--------!--------!
R0=> AREA: ! 35 ! 0 !
!--------!--------!
! ADDR !
!-----------------!
Системная макрокоманда .SCCA перехватывает и
временно запрещает команду оператора <CTRL/C>, препят-
ствует завершению программы. Символы <CTRL/C> воспри-
нимаются как обычные символы без специальных системных
функций и помещают во входной буфер.
Если ADDR=0, то при двойной команде <CTRL/C>
происходи завершение программы, а при одинарной не
происходит.
При этом, если появляется двойная команда
<CTRL/C> устанавливается 15 бит слова состояния терми-
нала ( ADDR ). Пользователь должен сам очистить его
для дальнейшего использования.
Ошибки: отсутствуют.
Пример:
В ПРИМЕРЕ ЗАПРЕЩАЕТСЯ ВЫХОД ПО ДВОЙНОМУ CTRL/C И
ВВОДИТСЯ ЛЮБАЯ (ВКЛЮЧАЯ CTRL/C) ИНФОРМАЦИЯ С ТЕРМИНАЛА.
КАК ТОЛЬКО ВСТРЕТИТСЯ ДВОЙНОЕ CTRL/C ПРОГРАММА ПЕРЕХОДИТ
В РЕЖИМ ОЖИДАНИЯ И РАЗРЕШАЕТСЯ ВЫХОД В МОНИТОР ПО ДВОЙНОМУ
CTRL/C.
�
.MCALL .SCCA,.PRINT,.TTYIN,.TTYOUT
JSW = 44
TTSPC$ = 10000
START: MOV #SCCA,R1
.SCCA #AREA,R1 ;ЗАПРЕТИТЬ CTRL/C
BIS #TTSPC$,@#JSW
CLR (R1)
.PRINT #MSG
1$: TST (R1) ;ДВОЙНОЕ CTRL/C?
BNE 2$ ;ДА
.TTYIN ;НЕТ...ВВЕСТИ СИМВОЛ
.TTYOUT ;ЭХО-ПЕЧАТЬ
BR 1$
2$: .PRINT #CTRLC
.SCCA #AREA,#0 ;РАЗРЕШИТЬ ДВОЙНОЕ CTRL/
BR .
SCCA: .BLKW 1 ;ЦЛОВО СОСТОЯНИЯ
;ТЕРМИНАЛА
AREA: .BLKW 2 ;БЛОК АРГУМЕНТОВ ЕМТ
MSG: .ASCII /ПРИМЕР МАКРОКОМАНДЫ .SCCA/<15><12>
.ASCIZ ВВЕДИТЕ CTRL/C DWA RAZA
.EVEN
CTRLC: .ASCII CTRL/C ВВЕДЕНА <15><12>
.ASCII ВВЕДИТЕ ДВОЙНОЕ CTRL/C ДЛЯ ВЫХОДА
.ASCIZ /ИЗ ПРОГРАММЫ/
.EVEN
.END START
3.39. .SCMDF
СИСТЕМНАЯ МАКРОКОМАНДА .SCMDF ОПРЕДЕЛЯЕТ
МНЕМОНИЧЕСКИЕ ОБОЗНАЧЕНИЯ СИСТЕМНОЙ ОБЛАСТИ СВЯЗИ (СМ.
Т.3 КН.2. Ч.1).
ФОРМАТ МАКРОКОМАНДЫ:
.SCMDF
РАСШИРЕНИЕ МАКРОКОМАНДЫ:
USERPC =^040
USERSP =^042
UFLOAT =^046
USERTOP =^050
SYSPTR =^054
TTFILL =^056
TTNFIL =^057
�
-47-
Данная макрокоманда не генерирует кодов EMT, а
является чисто описательной.
Ошибки: отсутствуют.
Пример: см.пример макрокоманды .UNLOCK.
3.40. .SERR
Системная макрокоманда .SERR позволяет программе
обрабатывать серьезные ошибки и запрещает монитору пре-
кращать ее выполнение вслучае их появления.
Формат макрокоманды:
.SERR
Формат регистра R0:
!-------!------!
R0=> ! 4 ! 0 !
!-------!------!
Во время выполнения программы могут возникнуть
серьезные ошибки. Например, попытка передать ввод/вывод
устройству, не имеющему драйвера в памяти, или попытка
загрузить драйвер устройства на место USR. Обычно эти
ошибки вызывают окончание программы с сообщением об
ошибке на системный терминал. Однако, в некоторых
случаях необходимо предотвратить преждвременное оконча-
ние программы из-за этих ошибок.
После выполнения макрокоманды устанавливается бит
C, а байт 52 содержит отрицательный код ошибки.
Ошибки:
Код ПОяснение
-1 Вызов USR из подпрограммы завершения.
-2 Отсутствыет драйвер устройства, а для
данной операции он необходим.
-3 Ошибка чтения каталога.
-4 Ошибка .FETCH; либо произошла ошибка во
время считывания драйвера, либо попытка
загрузить драйвер на место RMON или USR;
-5 Ошибка считывания оверлея;
-6 В каталоге нет места для файлов;
-7 Недопустимый адрес; попытка выполнить
действие вне области задания;
-10 Недопустимый номер канала; номер больше,
чем фактическое количество существующих
каналов;
-11 Недопустимая EMT; недопустимый код функции.
�
Системная макрокоманда .SERR не обрабатывает прерыва-
ния по 4 и 10, а также прерывания от процессора с плавающей
запятой. Они обрабатываются системными макрокомандами
.TRPSET, .SFPA.
Пример:
В примере для макрокоманды .ENTER треуется драйвер
PC:, который не загружен в память. После выполнения макро-
команды .SERR обработка ошибок происходит в программе, а
после выполнения макрокоманды .HERR происходит выход по
ошибке в монитор.
.MCALL .ENTNR,.HERR,.SERR,.PRINT,.EXIT,.USBDF
START: .SERR ;ЗАПРЕТИТЬ ПРЕРЫВАНИЕ
;ПРОГРАММЫ ПО ОШИБКЕ
.USBDF ;ОПРЕДЕЛИТЬ МНЕМОНИКУ
;СТАТУСА ЗАВЕРШЕНИЯ
;ПРОГРАММЫ USERRB
.ENTER #AREA,#1,#FILE ;ОТКРЫТЬ ФАЙЛ НА PC:
BCC 3$
JSR PC,ERR ;ИДТИ НА ОБРАБОТКУ
;ОШИБКИ
.HERR ;РАЗРЕШИТЬ ПРЕРЫВАНИЕ
;ПРОГРАММЫ ПО ОШИБКЕ
.ENTER #AREA,#1,#FILE ;ОТКРЫТЬ ФАЙЛ НА PC:
BCS ERR1
3$: .EXIT
ERR1: .PRINT #MSG
.EXIT
MSG: .ASCIZ /ОШИБКА .ENTER/
.EVEN
ERR: MOVB @#52,R0 ;ПОДПРОГРАММА ОБРАБОТКИ
NEG R0 ;ОШИБОК
DEC R0
ASL R0
MOV COD(R0),R0
.PRINT
BISB #3,@#USERRB ;УСТАНОВИТЬ ЗАВЕРШЕНИЕ
;ГРУБОЙ ОШИБКОЙ
RTS PC
COD: C1
C2
C3
C4
C5
C6
C7
C10
�
-48-
C11
C1: .ASCIZ /USER?/
C2: .ASCIZ /НЕ ЗАГРУЖЕН ДРАЙВЕ/
C3: .ASCIZ /ОШИБКА ЧТЕНИЯ КАТАЛОГА/
C4: .ASCIZ /ОШИБКА .FETCH/
C5: .ASCIZ /ОВЕРЛЕЙ?/
C6: .ASCIZ /НЕТ МЕСТА В КАТАЛОГЕ/
C7: .ASCIZ /ОШИБКА АДРЕСАЦИИ/
C10: .ASCIZ /НЕВЕРНЫЙ НОМЕР КАНАЛА/
C11: .ASCIZ /НЕВЕРНЫЙ КОД EMT/
.EVEN
AREA: .BLKW 4 ;БЛОК АРГУМЕНТОВ EMT
FILE: .RAD50 /PC/
.WORD 0,0,0
.END START
3.41. .SETTOP
Системная макрокоманда .SETTOP позволяет программе
пользователя запрашивать новый адрес верхней границы
памяти для программы.
Формат макрокоманды:
.SETTOP ADR
где
ADDR - адрес слова, содержащего верхнюю границу программы.
Монитор определяет допустимость этого адреса, необ-
ходимость свопинга в случае использования USR. Если верхняя
граница памяти, предназначенной для программы, расположена
ниже начального адреса USR, то свопинг не производится, т.к.
USR при этом не перекрывается. Если .SETTOP из фоновой прог-
раммы запрашивает верхнюю границу выше начального адреса USR,
а команда SET USR NOSWOP не была выдана, то требуется
свопинг.
По завершении системной макрокоманды .SETTOP R0 и
ячейка 50 ( восьмеричное ) содержит максимальный адрес
предоставляемой пользователю памяти. Если требуемый адрес
превышает допустимую величину, то программе предоставляется
допустимое значение адреса.
Для определения действительного верхнего адреса
программы нужно проверить содержимое R0 или ячейки 50.
Адрес выданный в R0 или ячейку 50, используется
программой как абсолютный верхний адрес программы. Если
это значение будет превышено, могут быть уничтожены части
части монитора и целостность системы будет нарушена.
Ошибки: отсутствуют.
Пример: см. пример макрокоманды .UNLOCK.
�
3.42. .SFPA
Системная макрокоманда .SFPA предоставляет ползователям,
имеющим процессор с плавающей запятой ( в комплексах СМ-1420 или
СМ-4/20 ), возможность обрабатывать прерывания по ошибке.
Формат макрокоманды:
.SFPA AREA,ADDR
где
AREA - адрес списка аргументов EMT из двух слов;
ADDR - адрес программы обработки прерывания.
Формат списка аргументов EMT:
!-------!-------!
R0=> AREA: ! 30 ! 0 !
!-------!-------!
! ADDR !
!---------------!
Обычно, если возникает прерывание по ошибке при
использовании процессора с плавающей запятой, прекращается
выполнение программы и выдается сообщение об ошибке на
системный терминал.
Системная макрокоманда .SFPA позволяет пользователю
самому обрабатывать прерывания. Аргумент ADDR указывает
адрес программы обработки прерывания.
Если аргумент ADDR=#0, то макрокоманда .SFPA
игнорируется.
Если аргумент ADDR=#1, то регистры процессора с
плавающей запятой должны должны быть включены в область
сохранения при переключении системы с одной задачи на другую.
Если ADDR=#1, пользователь не обрабатывает прерывания по
ошибке.
Системную макрокоманду .SFPA необходимо повторять
каждый раз, когда возникают прерывания, если пользователь
хочет обрабатывать их сам, т.е. программа обработки преры-
вания должна содержать вызов .SFPA.
�
- 49 -
Ошибки: отсутствуют.
Пример:
.MCALL .SFPA,.EXIT
START: .
.
.
.SFPA #AREA,#FPTRAP
.
.
.
.EXIT
FPTRAP: MOV R0,-(SP)
.
.
.
.SFPA #AREA,#FPTRAP
.
.
.
MOV (SP)+,R0
RTI
AREA: .BLKW 10
.END START
3.43. .SPND (только для FB- и XM-мониторов )
Системная макрокоманда .SPND приостанавливает работу
программы.
Формат макрокоманды:
.SPND
Формат регистра R0:
!-------!------!
R0=> ! 1 ! 0 !
!-------!------!
Системная макрокоманда .SPND из подпрограммы
завершения уменьшает счетчик остановов, но не останав-
ливает основную программу. Если подпрограмма завершения
осуществляет макрокоманду .SPND, основная программа про-
должается до выдачи этой макрокоманды самой программой,
только после этого она будет приостановлена, и потребуется
две макрокоманды .RSUM для ее продолжения.
Монитор содержит счетчик остановов для каждой
программы. Этот счетчик уменьшается макрокомандой .SPND и
увеличивается макрокомандой .RSUM. Программа будет при-
остановлена только в том случае, если значение счетчика
отрицательно. Поэтому, если системная макрокоманда .RSUM
выдана раньше .SPND, то макрокоманда .SPND игнорируется.
�
Программа должна выдавать одинаковое число
системных макрокоманд .SPND и .RSUM.
Системная макрокоманда .SPND, как и другие
макрокоманды, может быть выдана из подпрограммы прерывания,
написанной пользователем, если имеется последовательность
.INTEN/.SYNCH. Все замечания, относящиеся к .SPND в под-
программе завершения, применимы к этому случаю.
Ошибки: отсутствуют.
Пример:
.MCALL .SPND,.RSUM,.READC,.EXIT
.MCALL .LOOKUP,.PRINT,.WAIT
START: .LOOKUP #AREA,#2,#FILE2
BCS 1$
.LOOKUP #AREA,#3,#FILE3
BCS 1$
.LOOKUP #AREA,#4,FILE4
BCC 3$
1$: .PRINX #2$
.EXIT
2$: .ASCIZ /ОШИБКА LOOKUP/
.EVEN
3$: MOV #2,RSVCTR
MOV #AREA,R5
.READC R5,#2,#BUF1,COUNT1,#CROUTN,BLOK1
BCS ERROR
.READC R5,#3,#BUF2,COUNT2,#CROUTN,BLOK2
BCS ERROR
.READC R5,#4,#BUF3,COUNT3,#CROUTN,BLOK3
BCS ERROR
.SPND
.WAIT #2
.WAIT #3
.WAIT #4
.EXIT
CROUTN: ASL R1
INC DONFL(R1)
ROR R0
ADC ERRFLG(R1)
DEC RSVCTR
BNE 1$
.RSUM
1$: RTS PC
ERROR: .PRINT #RDMSG
.EXIT
RDMSG: .ASCIZ /ОШИБКА READ/
.EVEN
AREA: .BLKW 10
RSVCTR: 0
COUNT1: 256.
COUNT2: 256.
COUNT3: 256.
�
- 50 -
BLOK1: 0
BLOK2: 0
BLOK31: 0
FILE2: .RAD50 /DK TEST2 TMP/
FILE3: .RAD50 /DK TEST3 TMP/
FILE4: .RAD50 /DK TEST4 TMP/
DONFL: 0,0,0
ERRFLG: 0,0,0
BUF1: .BLKW 256.
BUF2: .BLKW 256.
BUF3: .BLKW 256.
.END START
3.44. .SRESET
Системная макрокоманда .SRESET инициализирует
определенные таблицы монитора, связанные с подпрограммой:
освобождает каналы, очищает очередь подпрограмм завершения,
удаляет загруженные драйверы.
Формат макрокоманды:
.SRESET
Драйверы системных устройств и драйверы,загруженные
командой монитора LOAD, остаются резидентными.
Возвращает к использованию только 16 ( десятичное )
каналов ввода/вывода. Любые каналы, открытые системной макро-
командой .CDFN, исключаются.
Чтобы открыть больше 16 каналов после выполнения
.SRESET, необходимо повторить макрокоманду .QSET или .CDFN.
Очищает очередь программ завершения.
Ошибки: отсуиствуют.
Пример: см. пример макрокоманды .RCTRLO.
3.45. .SYNCH
Системная макрокоманда .SYNCH дает возможность
программе обработки прерывания выполнять системные макро-
команды.
Формат макрокоманды:
.SYNCH AREA[,PIC]
где
AREA - адрес блока из семи слов;
PIC - произвольный аргумент,позволяющий макрокоманде
.SYNCH генерировать позиционно-независимый код.
�
Блок AREA содержит:
Слово 1 - системное слово, которое не должно изменяться
пользователем;
Слово 2 - текущий номер задания (может быть получен
макрокомандой .GTJB );
Слово 3 - не используется;
Слово 4 - не используется;
Слово 5 - аргумент R0; при успешном выполнении макро-
команды .SYNCH это слово заносится в R0;
Слово 6 - должно содержать -1;
Слово 7 - должно содержать 0.
Между макрокомандами .SYNCH и .INTEN ползователь
не должен ничего заносить в стек.
Если макрокоманда .SYNCH не выполнена, то возврат
происходит в следующую за макрокомандой ячейку. В этом
случае программа обработки прерываний не может выполнять
макрокоманды; R4 и R5 свободны для использования.
Если макрокоманда .SYNCH выполнена, то возврат
происходит в следующую за возвратом по ошибке ячейку.
Программе обработки прерывания разрешено выполнять макро-
команды. R0 содержит аргумент, находившийся в пятом слове
блока AREA. R2, R3, R4 и R5 нельзя использовать без предвари-
тельного сохранения в стеке, а R0 и R1 - можно.
�
- 51 -
Выход из программы обработки прерывания должен быть
по инструкции RTS PC.
Ошибки:
Возврат по ошибке происходит в следующих случаях:
- не закончена макрокоманда .SYNCH, использующая
тот же блок AREA;
- Указан недопустимый номер задания;
- Если произошло удаление или останов основной
программы.
Пример:
.MCALL .GTJB,.INTEN,.WRITC,.SYNCH
.MCALL .EXIT,.DIR,.PRINT
START: MOV #JOB,R5 ;ПОЛУЧИТЬ НОМЕР
.GTJB #AREA,R5 ;ЗАДАНИЯ
MOV (R5),SYNBLK+2
.
.
.
INTRPT: .INTEN 5 ;ПЕРЕЙТИ В СИСТЕМНОЕ
;СОСТОЯНИЕ, УСТАНОВИТЬ
;ПРИОРИТЕТ 5
.SYNCH #SYNBLK
BR SYNFAIL ;БЛОК .SYNCH ЗАНЯТ
.DIR WRITE ;ЗАПИСЬ В БУФЕР
BCS WTFAIL
RTS PC ;ВЫХОД
SYNBLK: 0,0,0,0,5,-1,0 ;БЛОК .SYNCH
SYNFAIL:
MOV #SYNER,R0
BR ERRM
WTFAIL: MOV #MSG,R0
ERRM: .PRINT
.EXIT
MSG: .ASCIZ /ОШИБКА ЧТЕНИЯ/
SYNER: .ASCIZ /ОШИБКА SYNCH/
.EVEN
AREA: .BLKW 5 ;БЛОК АРГУМЕНТОВ EMT
;ДЛЯ .READ
JOB: .BLKW 5 ;БЛОК АРГУМЕНТОВ EMT
;ДЛЯ .SYNCH
CRTN1: . ;ТЕКСТ ПОДПРОГРАММЫ
. ;ЗАВЕРШЕНИЯ
RTS PC
WRITE: .WRITC #AREA,CHAN,BUFF,WCNT,#CRTN1,BLK
CHAN: 0
BUFF: .BLKW 256.
WCNT: 256.
BLK: 0
.END START
�
3.46. .TLOCK ( Только для FB- и XM-мониторов )
Системная макрокоманда .TLOCK проверяет занятость
USR, если USR свободна, то выполняется макрокоманда .LOCK,
в противном случае происходит возврат в программу пользова-
теля с установленным C битом.
Формат макрокоманды:
.TLOCK
Формат регистра R0:
!--------!---------!
R0=> ! 7 ! 0 !
!--------!---------!
Возврат по C биту означает, что макрокоманда
.TLOCK не выполнена.
Ошибки:
Код Пояснение
0 USR уже используется другой программой.
Пример:
.MCALL .TLOCK,.LOOKUP,.UNLOOCK,.PRINT,.EXIT
START: .TLOCK ;USR ЗАНЯТА ?
BCS SUSPND ;ДА
.LOOKUP #AREA,#4,#J1NAM ;НЕТ ... ОТКРЫТЬ
BCS LKERR ;ФАЙЛ
.UNLOCK ;ОСВОБОДИТЬ USR
.EXIT
SUSPND: JSR PC,SPSJOB
JSR PC,SCHED
BR START
AREA: .BLKW 10
J1NAM: .RAD50 /DK TEST1 TMP/
LKERR: .PRINT #LKMSG
.EXIT
LKMSG: .ASCIZ /ОШИБКА LOOKUP/
.EVEN
SPSJOB: . ;ТЕКСТ ПОДПРОГРАММЫ
.
.
RTS PC
SCHED: . ;ТЕКСТ ПОДПРОГРАММЫ
.
.
RTS PC
.END START
�
-52-
2/Б/4.072.200-33-02-2
3.47. .TRPSET
Системная макрокоманда .TRPSET позволяет пользователю
самому обрабатывать прерывания по вектору 4 и 10.
Формат макрокоманды:
.TRPSET AREA,ADDR
где
AREA
-адрес списка аргументов из двух слов;
ADDR
-адрес программы обработки прерывания.
Формат списка аргыментов EMT:
!------!------!
R0=> AREA: ! 3 ! 0 !
!------!------!
! ADDR !
!-------------!
Макрокоманда .TRPSET запрещает монитору удалять
программупри возникновении прерывания по векторам 4 и 10.
При входе в программу обработки прерывания бит C
указывает:
бит C = 0
- прерывание по вектору 4;
бит C = 1
- прерывание по вектору 10;
Программа обработки прерывания должна заканчиваться
инструкцией RTI.
Макрокоманду .TRPSET необходимо повторять каждый раз,
как возникает прерывание, если пользователь хочет и в даль-
нейшем обрабатывать их сам, т.е. подпрограмма обработки пре-
рывания должна содержать .TRPSET.
Если ADDR = 0, макркоманда .TRPSET игнорируется.
Ошибки: отсутствуют.
�
Пример:
В премере макрокоманда .TRPSET указывает адрес
программы обработки ловушек 4 и 10.
.MCALL .TRPSET,.EXIT,.PRINT
START: .TRPSET #AREA,#TRPLOC ;ЗАПРЕТИТЬ УДАЛЯТЬ
;ПРОГРАММУ
MOV #101,R0
TST (R0)+ ;НЕЧЕТНЫЙ АДРЕС
.WORD 67 ;НЕВЕРНЫЙ КОД ИНСТРУКЦИИ
.EXIT
TRPLOC: MOV R0,-(SP) ;ПРОГРАММА ОБРАБОТКИ
BCS 1$ ;ЛОВУШЕК
.PRINT #TRP4
BR 2$
1$: .PRINT #TRP10
2$: .TRPSET #AREA,#TRPLOC
MOV (SP),R0
RTI
AREA: .BLKW10 ;БЛОК АРГУМЕНТОВ EMT
TRP4: .ASCIZ /TRAP TO 4/
TRP10: .ASUIZ /TRAP TO 10/
.EVEN
.END START
3.48. .TWAIT
Системная макрокоманда .TWAIT приостанавливает
выполнение программы на указанный интервал времени.
Формат макрокоманды:
.TWAIT AREA,TIME
где
AREA
-адрес списка аргументов EMT из двух слов;
TIME
-адрес двух слов, содержащих временной интервал
в тиках.
Формат списка аргументов EMT:
!------!------!
R0=> AREA: ! 24 ! 0 !
!------!------!
! TIME !
!-------------!
Системная макрокоманда .TWAIT требует элемент
очереди, поэтому прежде необходимо выполнить макрокоманду
.QSET.
�
-53-
2/Б/4.072.200-33-02-2
Примечание:
Макрокоманда .TWAIT реализуется в мониторе
с использованием макрокоманд .SPND и .RSUM. Поэтому
макрокоманда .RSUM, выданная программой заверения без
соответствующей макрокоманды .SPND, может вызвать продолже-
ние основной программы раньше, чем закончится временной
интервал.
Ошибки:
Код Пояснение
0 Отсутствует элемент очереди.
Пример: см. пример макрокоманды .CHCOPY.
3.49. .UNLOCK
Системная макрокоманда .UNLOCK отменяет запрещение
свопинга USR, заданное макрокомандой .LOCK.
Формат макрокоманды:
.UNLOCK
Если макрокоманда .LOCK требовала свопинга, то
.UNLOCK загружает программу пользователя обратно в
память.
Если USR не требует свопинга, то .UNLOCK игно-
рируется.
Если выполнено больше макрокоманд .UNLOCK, чем
макрокоманд .LOCK, то лишние макрокманды игнорируются.
ВЫзов CSI выполняет подразумеваемую макрокоманду
.UNLOCK.
макрокоманда .UNLOCK не должна находиться в об-
ласти, в которую обменивалась USR, иначе она не будет
выполнена.
Ошибки: отсутствуют.
Пример:
В примере макрокомандой .SETTOP запрашивается вся
память, что приводит к нерезидентности USR. Перед открытием
канала, макрокомандой .LOCK USR заносится в память и
становится резидентной, т.е. при выполнении макрокоманд
.LOOKUP свопинга не происходит. После выполнени макро-
команды .UNLOCK USR снова становится нерезидентной.
.MCALL .LOCK,.UNLOCK,.SETTOP,.SCMDF
.MCALL .LOOKUP,.PRINT,.EXIT
�
START: .SCMDF ;ОПРЕДЕЛИТЬ МНЕМОНИКУ
;СИСТЕМНОЙ ОБЛАСТИ СВЯЗИ
;(ЗДЕСЬ SYSPTR)
.SETTOP @#SYSPTR ;ЗАПРОСИТЬ ВСЮ ПАМЯТЬ
.LOCK ;ВЫЗОВ USR В ПАМЯТЬ
.LOOKUP #AREA,#0,#DEV1 ;ИСПОЛЗОВАНИЕ USR
BCS 1$
.LOOKUP #AREA,#1,#DEV2
BCS 1$
.UNLOCK ;УДАЛИТЬ USR ИЗ ПАМЯТИ
.EXIT
1$: .PRINT #MSG
.EXIT
MSG: .ASCIZ /ОШИБКА .LOOKUP/
.EVEN
AREA: .BLKW 3 ;БЛОКАРГУМЕНТОВ EMT
DEV1: .RAD50 /SY FORTRASAV/
DEV2: .RAD50 /SY PATCH SAV/
.END START
3.50. .UNPROTECT ( Только для FB- и XM-мониторов )
Системная макрокоманда .UNPROTECT освобождает вектор
устройства в диапазоне 0 - 476.
Формат макрокоманды:
.UNPROTECT AREA,ADDR
где
AREA
-адрес списка аргументов EMT из двух слов;
ADDR
-адрес вектора, который должен быть освобожден.
Формат списка аргументов EMT:
!------!------!
R0=> AREA: ! 31 ! 1 !
!------!------!
! ADDR !
!-------------!
Ошибки:
Код Пояснение
1 Адрес (ADDR) > 476 (восьмеричных) или < 4.
Пример:
�
- 54 -
.MCALL .PROTECT,.UNPROTECT,.EXIT,.PRINT
START: .PROTECT #AREA,#234 ;ЗАЩИТА ЯЧЕЕК 234,236
BCS INUSE
.
.
.
.UNPROTECT #AREA,#234 ;ОСВОБОДИТЬ ЯЧЕЙКИ
.EXIT
INUSE: .PRINT #ERR
.EXIT
ERR: .ASCIZ /ОШИБКА PROTECT/
.EVEN
AREA: .BLKW 2
.END START
3.51. .USBDF
СИСТЕМНАЯ МАКРОКОМАНДА .USBDF ОПРЕДЕЛЯЕТ
МНЕМОНИЧЕСКИЕ ОБОЗНАЧЕНИЯ СТАТУСА ЗАВЕРШЕНИЯ ПРОГРАММЫ
(СМ. Т.3 КН.2 Ч.1 П.2.3.2.2).
ФОРМАТ МАКРОКОМАНДЫ:
.USBDF
РАСШИРЕНИЕ МАКРОКОМАНДЫ:
ERRBYT =^052
USERRB =^053
SEVER$ =^010
ERROR$ =^04
WARN$ =^02
SUCCS$ =^01
ДАННАЯ МАКРОКОМАНДА НЕ ГЕНЕРИРУЕТ КОДОВ ЕМТ, А
ЯВЛЯЕТСЯ ЧИСТО ОПИСАТЕЛЬНОЙ.
ОШИБКИ: ОТСУТСТВУЮТ.
ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .SERR.
3.52. .WAIT
СИСТЕМНАЯ МАКРОКОМАНДА .WAIT ПРИОСТАНАВЛИВАЕТ
ВЫПОЛНЕНИЕ ПРОГРАММЫ ДО ЗАВЕРШЕНИЯ ОПЕРАЦИЙ ВВОДА/ВЫВОДА
ПО УКАЗАННОМУ КАНАЛУ.
ФОРМАТ МАКРОКОМАНДЫ:
.WAIT CHAN
ГДЕ
CHAN - НОМЕР КАНАЛА ВВОДА/ВЫВОДА.
�
ФОРМАТ РЕГИСТРА RO:
!--------!--------!
RO=> ! 0 ! CHAN !
!--------!--------!
МАКРОКОМАНДА .WAIT, ИСПОЛЬЗУЕМАЯ СОВМЕСТНО С
МАКРОКОМАНДАМИ .READ/.WRITE, ПОЗВОЛЯЕТ ОСУЩЕСТВИТЬ
ДВОЙНУЮ БУФЕРИЗАЦИЮ ПРОЦЕССА ВВОДА/ВЫВОДА.
МАКРОКОМАНДА .WAIT ПЕРЕДАЕТ ПОЛЬЗОВАТЕЛЮ ИНФОРМАЦИЮ
ОБ ОШИБКАХ АППАРАТУРЫ В ОПЕРАЦИИ ВВОДА/ВЫВОДА.
В FB-МОНИТОРЕ ВЫПОЛНЕНИЕ МАКРОКОМАНДЫ .WAIT ПРИ
ОПЕРАЦИЯХ ВВОДА/ВЫВОДА ВЫЗОВЕТ ПРИОСТАНОВКУ ОДНОЙ
ПРОГРАММЫ И ВЫПОЛНЕНИЕ (ЕСЛИ ВОЗМОЖНО) ДРУГОЙ.
ОШИБКИ:
КОД ПОЯСНЕНИЕ
0 КАНАЛ НЕ ОТКРЫТ;
1 В ОПЕРАЦИИ ВВОДА/ВЫВОДА БЫЛА АППАРАТНАЯ
ОШИБКА.
ПРИМЕР: СМ. ПРИМЕР МАКРОКОМАНДЫ .MRKT.
�