УКНЦ РАФОС SYSMAC
Данный материал защищён авторскими правами!
Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей. |
УТВЕРЖДЕН ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ СМ ЭВМ ОПЕРАЦИОННАЯ СИСТЕМА С РАЗДЕЛЕНИЕМ ФУНКЦИЙ Р А Ф О С СИСТЕМНЫЕ БИБЛИОТЕКИ СИСТЕМНАЯ МАКРОБИБЛИОТЕКА РУКОВОДСТВО ПРОГРАММИСТА ТОМ 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.