Версия 5.4 вообще во многом переломная: в ней впервые появился (в 5.4G) многострочный SL. В ней же появились макрокоманды для драйверов с расширенными номерами устройств (10-77), хотя сами расширенные номера появились только в 5.5.
- - - Добавлено - - -
Можно смело последний читать - там история есть.
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
В 5.6 вроде подробная была.
Там кстати также называется глава - между 5.0 и 5.5, но по ходу чтения указаны конкретные версии и даже буковки.
- - - Добавлено - - -
Попутно посмотрел, что RTEMовские заточки интегрировали в основной RT-11 начиная с версии 5.02, и ошибки которые были при этом допущены так и остались навсегда нетронутыми![]()
Последний раз редактировалось form; 14.12.2016 в 00:42.
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
Именно так там и написано если читать - конкретные версии (в том числе 5.4 и разные буквы к нему упоминаются не раз).
- - - Добавлено - - -
По хорошему на досуге надо основные изменения с V4.0 записать. А то многое уже забываться стало, а ведь когда-то описание макробиблиотеки (к примеру) содержало приписку FB/XM only на большую часть макрокоманд
- - - Добавлено - - -
Сравнил смещения .GVAL для TSX+ и РАФОС/TS - вот где постоянство: ничего не изменилось. Только новое добавилось (ну и где-то подкорректировалось в связи с развитием: например раньше по смещению -6 был признак привилегированности задания, а позже стало указывать на конкретную привилегию SYSPRV, но смысл по сути не изменился)![]()
Последний раз редактировалось form; 14.12.2016 в 01:02.
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, вот мои изменения в исходнике 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 чтобы на ходу определять адрес.
Последний раз редактировалось form; 14.12.2016 в 03:20.
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
мне нужны подробности. почему так а не по другому, это одна из причин
почему я AC.SYS до сих пор не переделал, просто потому, что я не могу
разделить ненужный функционал от нужного (точнее я разделяю, но прога
перестаёт работать! "смайл")
я вот протакие вещи совсем совсем не в курсе (самой природы таких ограничений).
ХА! form
, ты будешь смеятся - забрал драйвер который с COM файлом - он так-же выпадает в 066
перезагрузился и у меня висит система ))) То есть приглашение . и всё ничего не печатает,
в смысле на клавиатуру нет реакции ))) это означает что???
В любом случае всем очень благодарен за участие как минимум,
честно сейчас уверен может проще дизасемблировать оригинальный JS.SYS и подсмотреть,
как там эту задачу решили??? Только опять (писал выше) мне дизасм. скажет мало-мало чем (к примеру) form'у )))
Сейчас выкину по последней шпоре, попробую.
Почему и обязательно .CHAIN через регистры? Почему
не
Ладно, сейчас буду править по последней шпоре.Код:/* MOV #^RSY ,@#^O500 MOV #^RSHE,@#^O502 MOV #^RLL ,@#^O504 MOV #^RSAV,@#^O506 .CHAIN
Это ознчает, что в стартовом командном файле нет команды загрузки драйвера - выше писал, что она обязательна
Просто больше места займет, а так - пофигу.
Кроме того нужно убрать тестирование KMON indicator - слишком много бардака с ним, да и смысла нет - мы вполне эффективно проверяем его наличие другим способом![]()
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
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)