Ты пальцем ткни ;)
Это само по себе не мешает обойти. Еще раз: оборвать можно ДО того как стартовая команда выполнится :)
Но теоретически я могу предположить как можно предотвратить это.
Вид для печати
http://archive.pdp-11.org.ru/ukdwk_a...t/Other/40in1/
Подходит и для эмулятора и для живой машинки )))
ага, только нету на SY: ни PIP ни DUP ни DIR ничего вообще нету )
Чёрный экран, приглашение ком.строки и курсор мигает. ) Такое прерывание не позволит ничего сделать кроме как
перезагрузить дискету (ну со сторонней дискеты мучать её никто не запретит никому и никогда).
- - - Добавлено - - -
Я помню ты уже "хвастался", я про эти телеки ничего не знаю (про себя прозвал их "шляндыч") )))
form, это ты можешь ) Только ты ещё должен сориентироваться и понять где и что прервать.
А вот у нас юзер который без инструкции UKNCBTL запустить не может ))) Надо же оберегать
от него пакет программ. К тому же - меню для игр - это только 1 вариант использования.
А если полновесную граф. оболочку под КЦГД накатать поверх RT-11 ?
Вот там и пригодятся
и прочие всякие вещи в консольном окне что бы мелькали )))
Вот для начала драйвер. Не причесывал, для простоты пока работает только в 5.02 и новее. Для включения LOA SH, для выключения UNL SH (если есть возможность ;)). Запускает прогу SY:SHELL.SAV если она есть. Если нету - обычная работа в системе.
Если есть желание - можешь самостоятельно доработать :)Код:.LO SH
.COP/NOPRO PIP.SAV SHELL
Files copied:
DK:PIP.SAV to DK:SHELL.SAV
*
PIP V05.31
*
PIP V05.31
*^C
*^C
*SHELL.SAV/D
*^C
.UNL SH
.
В драйвере никаких хитростей, никаких перехватов векторов. Все документированное-стандартное :)
а где же то самое кольцо??? )))
надо что бы (если нету) он тупо писал - нету!!! нету нету нету нету нету нету нету нету - бесконечно )))
Обычная работа в системе - не надо! )))
- - - Добавлено - - -
он вообще выпадать в систему не должен! он наоборот от этого должен оберегать (от выпадания в систему)
- - - Добавлено - - -
но этот вариант я изучу, спасибо.
- - - Добавлено - - -
забрал из каки вместе с исходником
- - - Добавлено - - -
обращение к SY между сообщениями само собой происходит )
Ну так просто убрать проверку файла и будет бесконечно писать :)
Так даже проще - сразу куча кода высвободится и сохранять регистры не нужно...
- - - Добавлено - - -
Или можно вставить код зачистки нижней памяти с чистым остановом (на ВМ3 правда он по дороге трапнется, но большую часть зачистит, ну а на УКНЦ вчистую отработает) :D
form, кстати говоря - я только сейчас обратил внимание!!!
Смотри - классический JS.SYS какая хитрая скотинка.
Во первых прервать его таки можно, но это его не убивает (если только не выгрузить),
после запуска любой программы он снова ищет свою прогу (значит он что то в памяти в делает с монитором, но не на диске - ибо "не навреди") и сам в себе он строку об ошибке не содержит!
Это KMON вместо него орёт что файла нету !!! (см. скрин выше).
Сейчас правлю исходник SH - переименовал его в SSH - типа Старт Шелл )))
Попробую что получиться, но
1. я понятия не имею что такое ХУК
2. мне то можно .PRINT использовать или нет?
- - - Добавлено - - -
form, НЕТ у меня не блинчик и даже не ком получился.
1. LINK ругнулся на три глобальных метки которые я не трогал !!!
2. теперь по LO SSH MON пишет что команда-инвалид )))
Листинг SSH.MAC
Код:.MCALL .MODULE
.MODULE SSH,VERSION=1,COMMENT=<RT-11 Shell Driver>,AUDIT=YES
$SYPTR =: 54 ;POINTER TO RMON
$E16LS =: 316 ;EMT 340-357 DISPATCH TABLE OFFSET
$KMONI =: 450 ;KMON INDICATOR OFFSET
E6.PRI =: <351-340>*2 ;OFFSET TO .PRINT ROUTINE
.MCALL .ADDR,.CHAIN,.DRDEF ;SYSTEM MACRO CALLS
.MCALL .DSTAT,.EXIT,.LOOKUP ;
.MCALL .LOOKUP,.PURGE,.PRINT ;
.DRDEF SSH,340,0,0,0,0 ;DEFINE DRIVER PARAMETERS
.DRPTR LOAD=SHLOA,FETCH=*NO*,UNLOAD=SHUNL ;DEFINE SERVICE ENTRIES
.DRBEG SSH ;START OF DRIVER CODE
MOV SHCQE,R4 ;GET ADDRESS OF QUEUE ELEMENT
BIS #HDERR$,@-(R4) ;SET HARD ERROR STATUS
.DRFIN SSH ;FINISH I/O
SHINT:: TST @(PC)+ ;RUNNING KMON?
SHKMI:: .BLKW ;
BEQ 20$ ;IF EQ NO
.IF EQ MMG$T
CMP @14(SP),(PC)+ ;CHECK IF PROMPT IS PRINTED
.IFF
CMP @16(SP),(PC)+ ;CHECK IF PROMPT IS PRINTED
.ENDC
MOV R5,R5 ;
BNE 20$ ;IF NE NO
MOV R0,-(SP) ;SAVE REGISTERS
MOV R1,-(SP) ;
5$: .ADDR #SHARE,R0 ;POINT TO EMT AREA
.ADDR #SHPGM,R1 ;POINT TO PROGRAM NAME
.LOOKUP R0,#0,R1 ;LOOKUP THE FILE
ROL -(SP) ;SAVE ERROR STATUS
.PURGE #0 ;PURGE CHANNEL
ROR (SP)+ ;RESTORE ERROR STATUS
BCS 10$ ;IF CS FILE NOT FOUND
MOV #500,R0 ;POINT TO CHAIN AREA
MOV (R1)+,(R0)+ ;COPY PROGRAM NAME
MOV (R1)+,(R0)+ ;
MOV (R1)+,(R0)+ ;
MOV (R1)+,(R0)+ ;
.CHAIN ;CHAIN TO PROGRAM
10$: .PRINT #NSHF ;RESTORE REGISTERS
; MOV (SP)+,R0 ;
; JMP @(PC)+ ;JUMP TO SYSTEM ROUTINE
20$: BR 5$
SHPRI:: .BLKW ;ADDRESS OF SYSTEM .PRINT ROUTINE
SHARE:: .BLKW 3 ;EMT AREA
SHPGM:: .RAD50 /SY SHELL SAV/ ;PROGRAM TO CHAIN TO
.DREND SSH
.PSECT SETOVR
SHLOA:: MOV @R5,R5 ;R5=SHLQE
MOV @#$SYPTR,R4 ;R4=RMON
MOV R4,R2 ;COPY
ADD $E16LS(R4),R4 ;R4=EMT 340-357 DISPATCH TABLE
MOV E6.PRI(R4),R3 ;R3=ADDRESS OF .EXIT ROUTINE
ADD R4,R3 ;
MOV R3,SHPRI-SHLQE(R5) ;STORE IN DRIVER
MOV R5,R3 ;R3=SHINT
ADD #SHINT-SHLQE,R3 ;
SUB R4,R3 ;R3=OFFSET TO SHINT
MOV R3,E6.PRI(R4) ;POINT TO OUR ROUTINE
ADD #$KMONI,R2 ;R2=KMON INDICATOR
MOV R2,SHKMI-SHLQE(R5) ;STORE IN DRIVER
SHXIT:: CLC ;FLAG NO ERROR
RETURN ;RETURN
SHUNL:: MOV @R5,R5 ;R5=SHLQE
MOV @#$SYPTR,R4 ;R4=RMON
ADD $E16LS(R4),R4 ;R4=EMT 340-357 DISPATCH TABLE
MOV E6.PRI(R4),R3 ;R3=ADDRESS OF .EXIT ROUTINE
ADD R4,R3 ;
MOV #SHINT-SHLQE,R2 ;R2=SHINT
ADD R5,R2 ;
CMP R3,R2 ;OUR HOOK SET?
BEQ 20$ ;IF EQ YES
JSR R0,10$ ;NO, SET ERROR MESSAGE
.ASCIZ /?SH-F-Other driver hooks .PRINT - can't unload/
.EVEN
10$: COM (SP)+ ;CLEAN STACK, SET CARRY
RETURN ;RETURN
20$: MOV SHPRI-SHLQE(R5),R5 ;R5=ADDRESS OF SYSTEM .PRINT ROUTINE
SUB R4,R5 ;CONVERT TO OFFSET FROM EMTLST
MOV R5,E6.PRI(R4) ;UNHOOK .PRINT
BR SHXIT ;EXIT
NSHF: .ASCIZ /?SH-F-File not found SY:SHELL.SAV/
.END