Сообщение от
Oleg N. Cher
hobot, это значит
Олег, да не программер я ! Я не знаю что такое "код возврата". )
Вот ты бы почитал SYSMAC.HLP раз собрался что то ваять под RT-11 ведь
от штатных директив и запросов всё равно не денешься )))
Ты просил минимальную, на макро-11 и что бы просто выходила в систему, я ей в первой же строке написал "конец" без указания стартовой метки, не уверен что во всех вариантах монитора она заработает, может под каким нибудь вариантом трапниться, но под SJ работает так как я описал.
Выход в систему осуществляется грамотно наверное вот так:
Код:
5.3.12. .EXIT
ЗАПРОС .EXIT ВЫЗЫВАЕТ ОКОНЧАНИЕ ВЫПОЛНЕНИЯ ПРОГРАММЫ
ПОЛЬЗОВАТЕЛЯ И ПЕРЕДАЕТ УПРАВЛЕНИЕ KMON.
ПЕРЕД ВЫХОДОМ ИЗ ПРОГРАММЫ ВЫПОЛНЕНИЕ ВСЕХ ИНИЦИИРО-
ВАННЫХ ОПЕРАЦИЙ ВВОДА-ВЫВОДА И /ИЛИ ПОДПРОГРАММ ЗАВЕРШЕНИЯ
БУДЕТ ЗАКОНЧЕНО. ВСЕ НЕВЫПОЛНЕННЫЕ ЗАПРОСЫ .MRKT И .CMKT
БУДУТ АННУЛИРОВАНЫ.
ЕСЛИ ЧАСТЬ ФОНОВОЙ ПРОГРАММЫ ЗАНИМАЕТ ОБЛАСТЬ ПАМЯТИ
KMON И USR, ТО ОНА БУДЕТ ЗАПИСАНА В БЛОКИ ДЛЯ ВРЕМЕННОГО
ХРАНЕНИЯ ДАННЫХ НА СИСТЕМНОЕ УСТРОЙСТВО (ЕСЛИ РАНЕЕ БЫЛА
ВЫПОЛНЕНА КОМАНДА SET EXIT SWAP). ПОСЛЕ ЭТОГО KMON И USR
ЗАГРУЖАЮТСЯ В ПАМЯТЬ И УПРАВЛЕНИЕ ПЕРЕДАЕТСЯ КЛАВИАТУРНОМУ
МОНИТОРУ. ЕСЛИ БЫЛА ВЫПОЛНЕНА КОМАНДА SET EXIT NOSWAP, ТО
ПРОГРАММА ПОЛЬЗОВАТЕЛЯ ПРОСТО ПЕРЕЗАПИСЫВАЕТСЯ.
ЕСЛИ R0 = 0 ВО ВРЕМЯ ВЫПОЛНЕНИЯ .EXIT, ТО ВЫПОЛНЯЕТСЯ
ОПЕРАЦИЯ АНАЛОГИЧНАЯ .HRESET, ЗАПРЕЩАЮЩАЯ ПОСЛЕДУЮЩЕЕ
ВЫПОЛНЕНИЕ КОМАНД REENTER, START ИЛИ CLOSE.
ЗАПРОС .EXIT ПОЗВОЛЯЕТ ПРОГРАММЕ ПЕРЕДАТЬ КОМАНДЫ КЛА-
ВИАТУРНОМУ МОНИТОРУ, ИСПОЛЬЗУЯ ЯЧЕЙКИ 500-777, ДЛЯ ИХ ПОС-
ЛЕДУЮЩЕГО ВЫПОЛНЕНИЯ. ДЛЯ ЭТОГО НЕОБХОДИМО:
1) ЯЧЕЙКА 510 ДОЛЖНА СОДЕРЖАТЬ ОБЩЕЕ КОЛИЧЕСТВО БАЙТОВ
В КОМАНДЕ, КОТОРАЯ БУДЕТ ПЕРЕДАНА KMON;
2) КОМАНДЫ ЗАПИСЫВАЮТСЯ, НАЧИНАЯ С ЯЧЕЙКИ 512; СТРОКА
ДОЛЖНА БЫТЬ ЗАПИСАНА В СИМВОЛАХ КОИ-7 И НЕ ДОЛЖНА СОДЕРЖАТЬ
ВК ИЛИ ПС ; НАПРИМЕР:
.=510
.WORD B-A
A: .ASCIZ /COPY A.MAC W.MAC/
.ASCIZ /DELETE A.MAC/
B= .
3) ПРОГРАММА ПОЛЬЗОВАТЕЛЯ ДОЛЖНА УСТАНОВИТЬ 5 ИЛИ 11
РАЗРЯД В ССЗ ПЕРЕД ВЫПОЛНЕНИЕМ .EXIT; СОДЕРЖИМОЕ R0 ДОЛЖНО
БЫТЬ НУЛЕВЫМ.
КОГДА ЗАПРОС .EXIT ИСПОЛЬЗУЕТСЯ ДЛЯ ПЕРЕДАЧИ КОМАНД
НЕОБХОДИМО УЧИТЫВАТЬ СЛЕДУЮЩЕЕ:
1) ЕСЛИ ЭТО СВОЙСТВО ИСПОЛЬЗУЕТСЯ ПРОГРАММОЙ, КОТОРАЯ
ВЫЗЫВАЕТСЯ С ПОМОЩЬЮ КОСВЕННОГО ФАЙЛА, ТО ВСЕ КОМАНДЫ СЛЕ-
ДУЮЩИЕ В КОСВЕННОМ ФАЙЛЕ ЗА КОМАНДОЙ, ИНИЦИИРУЮЩЕЙ ПУСК
ЭТОЙ ПРОГРАММЫ, ВЫПОЛНЯТЬСЯ НЕ БУДУТ;
2) КОСВЕННЫЙ ФАЙЛ МОЖЕТ БЫТЬ ВЫЗВАН, ИСПОЛЬЗУЯ ЭТО
СВОЙСТВО, ТОЛЬКО В ТОМ СЛУЧАЕ ЕСЛИ ПЕРЕДАВАЕМАЯ KMON СТРОКА
СОДЕРЖИТ ЕДИНСТВЕННУЮ СПЕЦИФИКАЦИЮ ФАЙЛА; ПОПЫТКА ПЕРЕДАЧИ
НЕСКОЛЬКИХ КОСВЕННЫХ ФАЙЛОВ ИЛИ КОМБИНАЦИЙ КОСВЕННЫХ ФАЙЛОВ
С ДРУГИМИ КОМАНДАМИ KMON ПРИВОДИТ К НЕПРАВИЛЬНЫМ РЕЗУЛЬТА-
ТАМ;
3) .EXIT В ПОДПРОГРАММЕ ЗАВЕРШЕНИЯ НЕДОПУСТИМ. ЗАМЕ-
ТИМ, ЧТО ЗАПРОС .EXIT ИЗМЕНЯЕТ ТЕКУЩЕЕ ПОЛОЖЕНИЕ УКАЗАТЕЛЯ
СТЕКА.
ФОРМАТ МАКРОКОМАНДЫ: .EXIT
ПРИМЕР.
.TITLE EXIT.MAC
;В ЭТОМ ПРИМЕРЕ, ПОСЛЕ ЗАВЕРШЕНИЯ ПРОГРАММЫ,
;КЛАВИАТУРНОМУ МОНИТОРУ ПЕРЕДЕТСЯ КОМАНДНАЯ
;СТРОКА НА ПЕЧАТЬ СПРАВОЧНИКА УСТРОЙСТВА DK:
.MCALL .EXIT
CHNIF$ = 4000
JSW = 44
START: MOV #510,R0
MOV #CMDSTR,R1
MOV #START,SP
1$: MOVB (R1)+,(R0)+
CMP R1,#CMDEND
BLO 1$
BIS #CHNIF$,@#JSW ;УСТАНОВИТЬ 11-ЫЙ РАЗРЯД
;В JSW
CLR R0 ;В R0 ДОЛЖЕН БЫТЬ 0
.EXIT
CMDSTR: .WORD CMDEND-CMDSTR ;ДЛИНА КОМАНДНОЙ СТРОКИ
.ASCIZ "DIRECT/FULL *.MAC" ;КОМАНДНАЯ СТРОКА
CMDEND:
.EVEN
.END START