The .EXIT request enables a user program to pass command lines to KMON in the chain information area (locations 500-777) for execution after the job exits. This is performed under the following conditions:
- The word (not byte) location 510 must contain the total number of bytes of command lines to be passed to KMON.
- The command lines are stored, beginning at location 512. The lines must be .ASCIZ strings with no embedded carriage return or line feed. For example:
The user program must set SPXIT$ or CHNIF$ in the Job Status Word beforeКод:.TITLE EEXIT1.MAC XIT.NU =: 510 ;(.XITDF) char count XIT.AS =: 512 ;(.XITDF) .Asciz command(s) .=XIT.NU .WORD B-A .=XIT.AS A: .ASCIZ /COPY A.MAC B.MAC/ .ASCIZ /DELETE A.MAC/ B:
doing an .EXIT, which must be issued with R0 = 0.
Последний раз редактировалось form; 30.12.2012 в 16:34.
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
Действительно, пишут, что ТАК НАДО! )))
первоисточник (откуда у меня эта шпора и кто её писал история умалчивает)
вариант патрона - рабочий (!)Код:командная строка из программы: !!! .RADIX 8 MOV #ENDC-STARTC, R1 - вот та самая попытка положить длину??? MOV #STARTC, R1 - а вот эта строка тогда зачем ??? MOV #ENDC-STARTC, R2 MOV #512, R3 - остальное это надо уже систему знать PUK: MOVB (R1)+, (R3)+ SOB R2, PUK BIS #4000, @#44 CLR R0 EMT 350 STARTC: .ASCIZ "DIR/FU/VOL/BL DK:" ENDC: .EVEN
Код:Рабочий вариант выглядит так: Код: ; .MCall .Exit START: Mov #CMD, R3 Mov #512, R1 1$: MovB (R3)+,(R1)+ BNE 1$ Sub #512, R1 Mov R1, @#510 BiS #4000, @#44 Clr R0 .Exit CMD: .ASCIZ \$Dir/Fu/Bl/Vol\ .End START
Легко заметить, что в рабочем варианте в ячейку 510 заносится длина строки.
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
В нерабочем варианте нужно строку
заменить наКод:MOV #ENDC-STARTC, R1
Код:MOV #ENDC-STARTC, @#510
---------- Post added at 16:00 ---------- Previous post was at 15:33 ----------
Продвинутый вариант - выполняет введённую с клавиатуры команду и снова запускает сам себя ( файл CMD2.MAC ):
Код:; .MCall .Exit, .TTYIN, .Print START: .Print #Prompt Mov #512, R1 1$: .TTYIN CmpB R0, #15 BEq 2$ CmpB R0, #40 BLt 1$ CmpB R0, #177 BEq 1$ MovB R0, (R1)+ Br 1$ 2$: Cmp R1, #512 BNE 3$ .Print #Help Br START 3$: ClrB (R1)+ Mov #CMD, R3 MovB (R3)+,(R1)+ BNE .-2. Sub #512, R1 Mov R1, @#510 .Print #CrLf BiS #4000, @#44 Clr R0 .Exit ;=========================================================== Prompt: .ASCII <015><012><016>\Введите команду >\<017><200> Help: .ASCII <015><012><016>\Исполнитель команд \<017>\v1.0\ CrLf: .Byte 0 CMD: .ASCIZ \$RU CMD2\ .End START ;
Последний раз редактировалось Patron; 30.12.2012 в 17:29.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
Последний раз редактировалось form; 30.12.2012 в 17:17.
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
Вариант с .GTLIN ( файл CMD3.MAC )
Код:; .MCall .Exit, .GtLin, .Print START: .Print #CrLf Mov #512, R1 Mov #CmdBuf, R3 .GtLin R3, #Prompt TstB (R3) BNE 1$ .Print #Help Br START 1$: MovB (R3)+,(R1)+ BNE .-2. Mov #CMD, R3 MovB (R3)+,(R1)+ BNE .-2. Sub #512, R1 Mov R1, @#510 .Print #CrLf BiS #4000, @#44 Clr R0 .Exit ;=========================================================== Prompt: .ASCII <015><016>\Введите команду >\<017><200> Help: .ASCII <015><012><016>\Исполнитель команд \<017>\v2.0\ CrLf: .Byte 0 CMD: .ASCIZ \$RU CMD3\ CmdBuf: .End START ;
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)