Ну в 5.0 простой LOAD не сработает вроде бы.
Вид для печати
Потому и говорю, что нужно вручную сделать - из обработчика SET вызвать .DSTAT, если драйвер не загружен - передать команду загрузки и повторный SET ON (или запуск как программы - не суть важно), снова .DSTAT и оттуда получить адрес LQE, а дальше - та же процедура что сейчас для LOAD используется.
- - - Добавлено - - -
А для 5.02 и новее, кстати, есть еще более простой способ - вообще никакого драйвера не нужно. Правда не такой изящный - позволять иногда попасть в подсказку, но на любые команды снова попадать в свою программу :)
UCF для того и придуман :)
Просто про нее ничего не писалось в советской литературе, хотя сама по себе таблица упоминается как минимум в документации РАФОСа.
Есть, но там нужно несколько иначе его вытаскивать - из таблиц вроде на него выхода нет.
Точнее в FB/XM 5.0 вижу - все также как и в новых, а в SJ по другому (кстати это ко всем SJ относится видимо, но в силу проверки сигнатуры подсказки собственно тест на кмон наверное можно исключить в принципе). Вот сколько полезного можно узнать, копаясь в вопросах старины :)
Плохо смотрел - в 5.0 появляется, но только для FB/XM :)
Но как написал выше, тест по сути вообще не нужен - по привычке его сделал. Он имеет смысл если проверяется ввод, а мы проверяем .PRINT - он такой только в KMON.
- - - Добавлено - - -
А в 5.4 наверное появилась фича SET SL KMON, для нее и в SJ сделали также.
- - - Добавлено - - -
А нет, вру, там не 450 - просто относительно других смещений сохранились расстояния, но похоже тогда они еще не были фиксированными. Занятно. Я считал всегда, что настройки SET EDIT имеют фиксированные смещения, оказывается они тоже менялись. Вот почему их не документировали раньше :)
Точнее до определенного момента. В 5.03 (и кажется 5.02) уже в RTDATA, но смещение с FB/XM не совпадает.
Также не подтвердилась версия про SL - в 5.03 опция SET SL KMON уже есть, а смещения разные у FB/XM и SJ.
Хотя тогда FB/XM легко было отличить от SJ по биту FBMON$. Это в 5.6 его разжаловали в виду того, что SB по сути стал просто однозадачным FB.
Версия 5.4 вообще во многом переломная: в ней впервые появился (в 5.4G) многострочный SL. В ней же появились макрокоманды для драйверов с расширенными номерами устройств (10-77), хотя сами расширенные номера появились только в 5.5.
- - - Добавлено - - -
Можно смело последний читать - там история есть.
В 5.6 вроде подробная была.
Там кстати также называется глава - между 5.0 и 5.5, но по ходу чтения указаны конкретные версии и даже буковки.
- - - Добавлено - - -
Попутно посмотрел, что RTEMовские заточки интегрировали в основной RT-11 начиная с версии 5.02, и ошибки которые были при этом допущены так и остались навсегда нетронутыми :)
Именно так там и написано если читать - конкретные версии (в том числе 5.4 и разные буквы к нему упоминаются не раз).
- - - Добавлено - - -
По хорошему на досуге надо основные изменения с V4.0 записать. А то многое уже забываться стало, а ведь когда-то описание макробиблиотеки (к примеру) содержало приписку FB/XM only на большую часть макрокоманд :)
- - - Добавлено - - -
Сравнил смещения .GVAL для TSX+ и РАФОС/TS - вот где постоянство: ничего не изменилось. Только новое добавилось (ну и где-то подкорректировалось в связи с развитием: например раньше по смещению -6 был признак привилегированности задания, а позже стало указывать на конкретную привилегию SYSPRV, но смысл по сути не изменился) :)
form, вот мои изменения в исходнике SH.MAC
Беда в том, что я основную часть программы просто не понимаю и воспринимаю скорее интуитивно.Код:.MCALL .MODULE
.MODULE SH,VERSION=1,COMMENT=<RT-11 Shell Driver>,AUDIT=YES
.ENABL LC, MCL
.DSABL GBL
$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 SH,340,0,0,0,0 ;DEFINE DRIVER PARAMETERS
.DRPTR LOAD=SHLOA,FETCH=*NO*,UNLOAD=SHUNL ;DEFINE SERVICE ENTRIES
.DRBEG SH ;START OF DRIVER CODE
MOV SHCQE,R4 ;GET ADDRESS OF QUEUE ELEMENT
BIS #HDERR$,@-(R4) ;SET HARD ERROR STATUS
.DRFIN SH ;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$: ;MOV (SP)+,R1 ;RESTORE REGISTERS
;MOV (SP)+,R0 ;
20$: .PRINT #FNF
BR 5$
;JMP @(PC)+ ;JUMP TO SYSTEM ROUTINE
SHPRI:: .BLKW ;ADDRESS OF SYSTEM .PRINT ROUTINE
SHARE:: .BLKW 3 ;EMT AREA
SHPGM:: .RAD50 /SY SHELL SAV/ ;PROGRAM TO CHAIN TO
.DREND SH
.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
FNF: .ASCIZ /?SH-F-File not found SY:SHELL.SAV/
.END
.LO SH
000066
@
Правильно я понимаю, что драйвер проверяет приглашение и если оно выводится пытается
запустить программу оболочки? Но только всё слишком не явно для меня.
Даже .CHAIN директива описана "не моим" (чит. не простым) способом каким-то?
Буду рад любым комментариям и обсуждению.
- - - Добавлено - - -
увидел только сейчас, забираю
Все это выкинуть, JMP раскоментировать. Тогда будет до бесконечности писать что программы нет (если ее нет). А так получится сбой системы из-за использования вызовов за пределами перехваченного без сохранения регистров. То есть ничего добавлять не надо чтобы до бесконечности писало что программы нету - надо только убрать :)
- - - Добавлено - - -
А так, если когда придется делать что-то в этом роде - в драйвере так не получится. Нужно или во время загрузки подправлять в памяти адреса (но это 5.02 и новее) или использовать .ADDR чтобы на ходу определять адрес.
мне нужны подробности. почему так а не по другому, это одна из причин
почему я AC.SYS до сих пор не переделал, просто потому, что я не могу
разделить ненужный функционал от нужного (точнее я разделяю, но прога
перестаёт работать! "смайл")
я вот протакие вещи совсем совсем не в курсе (самой природы таких ограничений).
ХА! form
, ты будешь смеятся - забрал драйвер который с COM файлом - он так-же выпадает в 066
перезагрузился и у меня висит система ))) То есть приглашение . и всё ничего не печатает,
в смысле на клавиатуру нет реакции ))) это означает что???
В любом случае всем очень благодарен за участие как минимум,
честно сейчас уверен может проще дизасемблировать оригинальный JS.SYS и подсмотреть,
как там эту задачу решили??? Только опять (писал выше) мне дизасм. скажет мало-мало чем (к примеру) form'у )))
Сейчас выкину по последней шпоре, попробую.
Почему и обязательно .CHAIN через регистры? Почему
не
Ладно, сейчас буду править по последней шпоре.Код:/* MOV #^RSY ,@#^O500
MOV #^RSHE,@#^O502
MOV #^RLL ,@#^O504
MOV #^RSAV,@#^O506
.CHAIN
Это ознчает, что в стартовом командном файле нет команды загрузки драйвера - выше писал, что она обязательна :)
Просто больше места займет, а так - пофигу.
Кроме того нужно убрать тестирование KMON indicator - слишком много бардака с ним, да и смысла нет - мы вполне эффективно проверяем его наличие другим способом :)
Поправил, собрал.
Реакция на команду INS SH > ?MON-F-Trap to 4 110664
Зато после перезагрузки и команды LO SH
вроде бы почти оно (надо ещё пощупать на нюансы)
http://pic.pdp-11.ru/thumbs/20161214010145171.png
form, я вот такие вещи "не врубаю" как может программа доходить до АСКИЗ про нет файла,
если буквально перед ней стоит прямой переход BR ??? Мне как Паскальщику не понять это сходу!
Проблема в том, что мы с тобой видим один и тот же бублик, только видимо ты видишь его в виде замеса
из ингридиентов, а я в виде готовой булочки )))
- - - Добавлено - - -
Ещё что то подчистить ??? Можно планочку пониже, рупор погромче, у нас тут в танках только паскаль и броня толстая )))
- - - Добавлено - - -
стоп! Моя ошибка! Это не мой аскиз - это мон ругается за меня ) Вот это я совсем не понимаю.
- - - Добавлено - - -
в общем выкинул и свою строку, вроде бы всё красиво и соотв. ТЗ )))
Огромное преогромное !!! Но буду ещё тестить проверять мучить по всякому !!! )))
Пара слов о разборках с системой в которой RT-11 программа выполняется и попутных фичах. RSTS/E пока не затронут - сам не знаю что в нем и как кроме некоторой теории ;)
Код:$SYSGE =: 372 ;СМЕЩЕНИЕ ДО СЛОВА ПАРАМЕТРОВ ГЕНЕРАЦИИ
TSXP$ =: 100000 ;БИТ TSX-PLUS
RTEM$ =: 10 ;БИТ RTEM-11
$SYSVE =: 276 ;СМЕЩЕНИЕ НОМЕРА ВЕРСИИ RT-11
$SYSUP =: 277 ;СМЕЩЕНИЕ НОМЕРА КОРРЕКЦИИ RT-11
$CNFG1 =: 300 ;СМЕЩЕНИЕ СЛОВА КОНФИГУРАЦИИ СИСТЕМЫ
FJOB$ =: 200 ;БИТ ЗАГРУЖЕННОГО FOREGROUND ИЛИ SYSTEM ЗАДАНИЯ
FBMON$ =: 1 ;БИТ МОНИТОРА FB/XM ИЛИ SET NOSJ
$TSXVE =: -40 ;СМЕЩЕНИЕ ВЕРСИИ TSX/TSX-PLUS
$RTEID =: 252 ;АДРЕС ИДЕНТИФИКАТОРА RTEM-11
RTE$ID =: ^RRTE ;ИДЕНТИФИКАТОР RTME-11
Код:;ЭТО УНИВЕРСАЛЬНЫЙ СПОСОБ ПРОВЕРКИ НА TSX/TSX-PLUS (И РАФОС/TS - КАК БЕЗ НЕГО).
;РУКОВОДСТВО ПРОГРАММИСТА TSX-PLUS ПРЕДЛАГАЕТ ДРУГОЙ СПОСОБ: ВЫЗВАТЬ КАКОЙ-НИБУДЬ
;EMT 375 С ФУНКЦИЕЙ, СПЕЦИФИЧНОЙ ДЛЯ TSX (ПРЕДВАРИТЕЛЬНО ЗАПРЕТИВ ПРЕРЫАНИЕ ПРОГРАММЫ
;МАКРОКОМАНДОЙ .SERR), НО СПОСОБ ОТРИЦАТЕЛЬНЫХ СМЕЩЕНИЙ .GVAL ВЫГЛЯДИТ ПРОЩЕ
;И, ЕСЛИ СКЛЕРОЗ НЕ ПОДВОДИТ, В РАФОСОВСКОЙ ДОКУМЕНТАЦИИ РЕКОМЕНДУЕТСЯ ИМЕННО ОН).
.GVAL $AREA,#$TSXVE ;ПОЛУЧАЕМ ВЕРСИЮ TSX
BCS ... ;CS - ЭТО НЕ TSX/TSX-PLUS
;В ПРОТИВНОМ СЛУЧАЕ ИМЕЕМ В R0 ВЕРСИЮ СИСТЕМЫ
;В ВИДЕ X.Y (X*100.+Y)
Код:;ПРОВЕРКА ПАРАМЕТРОВ ГЕНЕРАЦИИ СИСТЕМЫ МОЖЕТ ВЫЯВИТЬ TSX-PLUS, НО НЕ СМОЖЕТ ВЫЯВИТЬ
;СТАРЫЕ ВЕРСИИ TSX (И РАФОС/TS - КАК БЕЗ НЕГО). RTEM-11 ВЫЯВИТ.
.GVAL $AREA,#$SYSGE ;ПОЛУЧАЕМ ПАРАМЕТРЫ ГЕНЕРАЦИИ СИСТЕМЫ
TST R0 ;TSX-PLUS?
BMI ... ;MI - ДА
;ЗАТО RTEM-11 ЧЕРЕЗ ДАННОЕ СМЕЩЕНИЕ RMON ВЫЯВИТЬ МОЖНО ОЧЕНЬ ЛЕГКО
BIT #RTEM$,R0 ;RTEM-11?
BNE ... ;NE - ДА
;ТАКЖЕ ВОЗМОЖЕН ДРУГОЙ СПОСОБ ПРОВЕРКИ НА RTEM-11 - БЕЗ ПРИВЛЕЧЕНИЯ СМЕЩЕНИЙ RMON
CMP #RTE$ID,@#$RTEID ;RTEM-11?
BEQ ... ;EQ - ДА
Код:;ДАЛЕЕ РАЗБИРАЕМСЯ С ВЕРСИЯМИ RT-11 (С ВЕРСИЯМИ TSX/TSX-PLUS МЫ РАЗОБРАЛИСЬ ВЫШЕ,
;И МЕТОД, ОПИСАННЫЙ НИЖЕ, ПОКАЖЕТ В НИХ ТОЛЬКО ВЕРСИЮ RT-11 ИЗ ПОД КОТОРОЙ БЫЛ ЗАПУЩЕН
;TSX/TSX-PLUS ИЛИ РАФОС/TS.
;
;ЭТОТ НОМЕР ВЕСЬМА ПОЛЕЗЕН ЧТОБЫ ЗНАТЬ НА ЧТО СПОСОБНА СИСТЕМА. В RT-11 ЕСТЬ
;ЧЕТКО РАСПИСАННОЕ СООТВЕТСТВИЕ ВОЗМОЖНОСТЕЙ ВЕРСИЯМ; TSX-PLUS ПО НОМЕРАМ ВЕРСИИ ТАКЖЕ
;ОПРЕДЕЛЯЕТ СООТВЕТСТВИЕ ВОЗМОЖНОСТЕЙ УЖЕ В ЗАГРУЖЕННОМ TSX-PLUS. НАШ (ИЛИ СКОРЕЕ "НАШ")
;РАФОС НЕ НАРУШАЕТ ТРАДИЦИЙ - ОН ЧЕСТНО СОВПАДАЕТ С ВЕРСИЕЙ RT-11 С КОТОРОЙ ЕГО СП...ИСАЛИ.
;ФОДОС, "НАПИСАННЫЙ" ПОЗЖЕ НЕКИМИ РЕДИСКАМИ НЕ СЛЕДУЕТ ЭТОЙ ТРАДИЦИИ И ПОТОМУ МОЖЕТ ВВОДИТЬ
;В ЗАБЛУЖДЕНИЕ, НО, ПОСКОЛЬКУ РЕДИСКИ ДАННОГО ВИДА РОДИЛИСЬ ПОЗЖЕ V4.00 И УМЕРЛИ РАНЬШЕ V5.01,
;СМЕЛО СЧИТАЕМ ФОДОС КАК RT-11 V5.0 ([ПРАВДА, ОПЯТЬ ТАКИ, ЕСЛИ СКЛЕРОЗ НЕ
;ИЗМЕНЯЕТ, ВСЕ ЖЕ ВИДЕЛ ФОДОС - RT-11 V3, НО НИ РАЗУ V4]. ВОТ ТОЛЬКО КАК
;ОПРЕДЕЛИТЬ ЧТО ЭТО ИМЕННО ФОДОС - КАКОЙ ТОЛЬКО ХЕРНИ ОНИ НЕ ВПИСЫВАЛИ
;ДАЖЕ В СТРОКУ КОТОРАЯ ПЕЧАТАЕТСЯ ПРИ ЗАГРУЗКЕ)...
.GVAL #AREA,#$SYSVE ;ПОЛУЧАЕМ ВЕРСИЮ СИСТЕМЫ
;МЛАДШИЙ БАЙТ - ВЕРСИЯ, СТАРШИЙ - НОМЕР КОРРЕКЦИИ
Код:;ПРОВЕРКА НА НАЛИЧИЕ FOREGROUND JOB (А ТАКЖЕ ПОПУТНО НА TSX)
;ЭТОТ БИТ ВСЕГДА УСТАНОВЛЕН В TSX/TSX-PLUS (И РАФОС/TS - КАК БЕЗ НЕГО)
;ТАМ ГДЕ ВСЕ ПОДОБНЫЕ УСЛОВИЯ МОЖНО УРАВНЯТЬ ЭТОТ БИТ ОТЛИЧНО СРАБОТАЕТ...
.GVAL #AREA,#$CNFG1 ;ПОЛУЧАЕМ КОНФИГУРАЦИЮ СИСТЕМЫ
TSTB R0 ;БИТ 7 ГОВОРИТ О ЗАГРУЖЕННОМ FOREGROUND/SYSTEM JOB
BMI ... ;MI - ЗАГРУЖЕН
Код:;ПРОВЕРКА НА SJ МОНИТОР. ЭТА ПРОВЕРКА ПОЗВОЛИТ ИДЕНТИФИЦИРОВАТЬ SJ МОНИТОР.
;SJ МОНИТОР КРОМЕ ОДНОЗАДАЧНОСТИ ОТЛИЧАЕТСЯ ТАКЖЕ ОТСУТСТВИЕМ МНОГИХ СИСТЕМНЫХ ВЫЗОВОВ И
;ВОЗМОЖНОСТЕЙ. НАЧИНАЯ С RT-11 ВЕРСИИ 5.6, SJ МОНИТОРА НЕ СТАЛО, А ОДНОЗАДАЧНЫЙ МОНИТОР SB
;ЯВЛЯЕТСЯ СКОРЕЕ ОДНОЗАДАЧНОЙ ВЕРСИЕЙ FB МОНИТОРА (И ПОДДЕРЖИВАЕТ ВСЕ ЕГО СИСТЕМНЫЕ ВЫЗОВЫ).
;ПРИ ЭТОМ В RT-11 V5.6 И НОВЕЕ ЗНАЧЕНИЕ ЭТОГО БИТА МОЖЕТ БЫТЬ ИЗМЕНЕНО КОМАНДОЙ
;SET MODE [NO]SJ. СЛОВОМ, ЕСЛИ ПОЛАГАТЬСЯ НА ЭТОТ БИТ - НУЖНО ТАКЖЕ ПРОВЕРЯТЬ ВЕРСИЮ СИСТЕМЫ.
.GVAL $AREA,#$CNFG1 ;ПОЛУЧАЕМ КОНФИГУРАЦИЮ СИСТЕМЫ
BIT #FBMON$,R0 ;SJ МОНИТОР
BEQ ... ;EQ - ДА
Если помните я просил помощи урезать только до промтера и всё что с ним связано,
там ещё что то в нём я не помню сейчас уже точно, но сегодня абсолютно не актуальное.
Далее я столкнулся ещё с одним тупиком - я совершенно не понимаю как сделать современные даты
в нём. Извиняюсь, но я Паскальщик на уровне хобби. Я например не представляю где там в исходнике
параметр отвечающий 2 буковки на год или 4, попытка убрать это (что бы не чесалось) снова приводит к краху.
В итоге я забросил и пользуюсь как есть. )))
Вот это лишний функционал 100%
Не вижу ничего невозможного. Драйверу передаётся 16-разрядное слово. Каким способом интерпретирует это слово драйвер - это сугубо его личное дело. Он может считать это слово, например, именем файла от 0.SAV до 65535.SAV (подставляя расширение, естественно, самостоятельно) или от 0.SAV до 177777.SAV, здесь только необходимо будет учитывать ограничение на невозможность использования в именах запускаемых файлов ничего кроме цифр. Но если я правильно понял ТЗ хобота, ему такое ограничение не доставит неудобства.
Дык уж давно бы! Там объём-то с гулькин нос... Кстати, как называется файл дизассемблера для 11-го процессора и где его взять?
Тупой дизассемблер (дизассемблит все подряд не разбирая) где-то здесь выкладывал (как для RT-11 так и для UNIX/Win). Можно искать по слову дизассемблер. Есть DISSAV, ориентированный конкретно на SAV файлы RT-11 (взять можно на ftp://ftp.dbit.com/pub/pdp11/rt11/). Есть DOB, ориентированный на OBJ файлы - он есть вживую на CTAKAH'е, исходники доступны там же в SW:[DOB2]. IDA вроде тоже умеет дизассемблить SAV'ы.
Странно, что лишний функционал. Вроде бы он обеспечивает перезапуск оболочки по кругу, как того требует техническое задание. Ниже рассмотрим поподробнее.
- - - Добавлено - - -
1. Драйвер AC при настроенном параметре SET AC COM и при вызове SET AC ON позволяет запускать без глюков исполняемый файл SY:ACM.SAV.
2. Второй пункт желателен, но желателен это значит, что не обязателен. Да, настройки запускаемого имени файла в AC.SYS нет, всегда запускается SY:ACM.SAV.
3. Драйвер AC естественно никому не мешает, на .CHAIN не реагирует, он реагирует только на вывод промптера KMON-ом.
4. Вот здесь у AC идеальный порядок, в отличии от JS. JS.SYS я видел две версии. Первая реагирует на EMT 350, в итоге она не дает этому EMT выполнить всю нужную работу по завершению текущей задачи, да и к тому же прервет любой командный файл. Вторая версия получше и реагирует на EMT 351 в области KMON с командой MOV R5,R5 после этого EMT, вроде бы нормально, но такую команду KMON выдает не только на вывод промптера, но и на ввод недостающих параметров, например ввели команду COPY без параметров, так вот этот JS не даст вывести запрос "From?", а запустит оболочку.
Драйвер AC реагирует только на вывод промптера KMON для ввода команды, потому при нем нормально отработает командный файл, даже если он был запущен с параметром SET TT NOQUIET, т.е. с выводом команд на экран. При исполнении командного файла драйвер AC не реагирует на промтер KMON для запуска, только, если настроено, меняет его вид.
Еще один вариант на закуску - скрытый драйвер. Особого смысла нет - просто побаловаться если есть интерес. Принцип такой: некая команда SET (или запуск драйвера по RUN или еще какой вариант на этапе подготовки дискеты) ищет во вторичном загрузчике команду MOV @#177570,R4 перед которой идет инструкция BR. Эта конструкция одинакова во всех RT-11 как минимум начиная с V4.0 (с оговоркой). Меняем BR на NOP, а MOV меняем на MOV #157400,R4 (значение по надобности скорректировать). В результате получаем во время загрузки зарезервированное окно куда уже драйвер из инсталционной процедуры может вписаться. Ну и оговорка (вернее две): метод не подойдет для mapped мониторов - там просто нет этого кода в загрузчике. Также в старых мониторах следующей после MOV командой идет BIC #3777,R4 - это легко проверить и поставить два NOPа. От обычного драйвера отличается только тем, что требует чуть-чуть меньше памяти (за счет экономии на служебных словах вначале и в конце драйверва).
Да, этот минус есть, но по условиям задачи как я понимаю отключать все это не требуется, а если нужно - отключается легко (но с перезагрузкой). При использовании же перехватчика, наоборот памяти будет немного больше чем если использовать драйвер.
Отлично сработает. Никто не мешает проверить сколько памяти есть (или явно указать) и считать исходя из этого.
Но, как уже написал - это скорее баловство чем реальная идея (впрочем сам вопрос который поднят по-моему тоже :)).
- - - Добавлено - - -
Еще как вариант: просто меняем вторичный загрузчик на свою программу (а места для нее ого-го! хоть простенькую операционку запихивай), а уже эта программа позволяет или ввести пароль и загрузиться нормально или загрузиться вышеописанным способом. Кстати можно и не вышеописанным, а с тем же драйвером AC: просто меняем ему слово 60 так чтобы он (не)инсталился (но это сложнее - придется подгружать драйвер для записи, хотя 4 блока под программу - и не то можно наваять :)).
Немного больше, на несколько слов, что резервируются макрокомандами .DRBEG, .DRFIN, .DREND, ну и несколько команд обработки очереди ввода-вывода. Но у драйвера универсальность настройки параметров, да и не нужен, то взял и выгрузил.
- - - Добавлено - - -
Свой вторичный загрузчик - это уже изврат. А про пароль hobot жаловался, что мол выводится запрос, а его не прервать, хотя снять пароль в JS.SYS просто.
К тому же вторичный загрузчик делает всю основную работу - грузит системный драйвер, RMON, настраивает все адреса, инсталлирует драйверы.
Чего же тут извратного - достаточно простое решение.
Что абсолютно не требуется от программы которая его заменит в блоках 2-4: всю эту работу выполнит родной вторичный загрузчик в штатном режиме - цели заменить его совсем нет. Я вот даже придумал как ничего не трогая на диске и не подгружая драйвер сообщить драйверу AC или какому там еще нужно или нет включаться. Сейчас вот только додумываю реализацию (вопрос скорее привлекает не с практической точки зрения, а с точки зрения покопаться в дебрях системы)...
Подробности простые: во втором слове конфигурации системы есть бит XITSW$ (настройка SET EXIT NOSWAP). К примеру драйвер проверяет этот бит из подпрограммы инсталяции и не инсталится если бит установлен. В загружаемой системе он всегда очищен (вариант пропатченой вручную системы не рассматриваем). Сложность состоит в том, что наша программка работает до того как запустился вторичный загрузчик и RMON в памяти еще нет. Ну а возможное решение сейчас обдумываю (через блок битов конфигурации) - его легко найти и он не менялся (там очень важен порядок).
AC как таковой тут не причем и смысла как такового (как и в самом вопросе который решается) нету. Просто я сам себе поставил вопрос: передать драйверу информацию и сам себе на него ответил :) Решение со своим вторичным загрузчиком которое позволяет как грузить систему обычным образом так и с включенным драйвером менюшки есть. Жаль только ничего особенного при этом не выкопал: решение элементарное - даже скучно :)
- - - Добавлено - - -
То есть к AC или любому другому драйверу это относится так, что драйвер, запускаемый из стартового файла той же командой SET ON может получить информацию запускаться ему или нет.
Смысл ровно такой же как и у команды SET AC ON в стартовом файле: никакого кроме "так захотелось". Я просто поставил себе вопрос (даже не касаемо данной темы - у меня ведь еще boot menu есть в запасе которым я так и не занимался больше, да мало ли еще какие идеи будут) - можно ли из программы, запускающейся до того как загружена система передать информацию драйверу который будет устанавливаться в этой системе. И сам ответил на него: да, можно, при том совершенно элементарно. Все. Никакого смысла не искалось :)
То есть вопрос про пароль который поднимался решается легко и не требует дополнительной памяти - это если таки хочется смысл увидеть :)
Alex_K, в ссылках на моё ТЗ, описании функционала AC.SYS на определённом этапе произошла путаница.
Но похоже мне уже не оправдаться ) Просто относительно AC.SYS было и есть совсем другое ТЗ (в другой теме
пару лет назад). Проехали. Лучше расскажите какой и для чего планировалась оболочка AC и почему не стали
делать? Или я снова что то пропустил?
В целом такого количества упоминаний [hobot] (чуть не в каждом посте) давно я не видел. Но это привело к тому,
что так или иначе мне приписали некоторые вещи которых я не делал не писал и не говорил. Я оказался в позе
цитату из романа приводить не буду
На самом деле, драйвер от Олега (новоиспечённый) первичные испытания прошёл успешно.
И да, AC.SYS - похоже универсал, тем больше смысла править для поддержки совр.дат или
убрать календарное приветствие как "апендикс". Обсуждение - лично для меня получается
(получилось) просто сверх интересным ! Но если он (драйвер AC.SYS) используется для правильного (чит.удобного) системного приглашения - всё остальное логично же ! - лишний функционал.
что касается "нельзя настроить изменить"
ACM.SAV - изменить можно с помощью DESS - это ведь и есть имя запланированного shell ?
http://pic.pdp-11.ru/thumbs/acmsav1.png
http://pic.pdp-11.ru/thumbs/acmsav2.png
- - - Добавлено - - -
Вот к примеру - я нигде никогда на пароль не жаловался ) Я прикинул в своём тексте - если его легко обойти на дисководах
(любых), то на разделе ЖД его так просто уже не победить. В целом сочинительство всяческих паролей под RT-11 думаю
пустая трата времени, либо пароль на старт машинки в целом, либо никакого. Все остальное бесполезное есть.
Это не касается старших систем где всё иначе совсем.