С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Видимо автор исходил из того, что если система не суппортит .DSTAT - выбрать аргумент. Но во-первых его суппортят все RT-11 как минимум начиная с версии 3, во-вторых при неподдерживаемом вызове RT-11 не выставляет C.
---------- Post added at 17:10 ---------- Previous post was at 17:09 ----------
Да, это правильный код.
---------- Post added at 17:12 ---------- Previous post was at 17:10 ----------
Еще упростить как я нарисовал, код подсократится на слова 3-4
Кстати даже как написано топорно можно было сократить на слово - незачем несколько раз подряд MOV PC,Rx делать
Хотя нет - тут не поможет - мало раз делается![]()
Последний раз редактировалось form; 01.03.2012 в 14: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
Это фрагмент из первой версии драйвера. Потом авторы совместными усилиями всё запутали.
---------- Post added at 13:21 ---------- Previous post was at 13:13 ----------
Похоже, что вот этот код неправильный:
При отсутствии FPP - BIS #EIS$,CONFIG не отменяется перед выходом.Код:O.ON: CALL FINDRV TST R1 ; Если драйвер уже загружен, BNE L1$ ; напечатать об этом MOV @#SYSPTR, R0 BIS #EIS$,CONFIG(R0) ; включить EIS .IF DF FPP BIT #FPP$,CONFG1(R0) ; Ошибка, если нет FPP. BNE 2$ JSR R0,3$ .ASCIZ /?EM-F-Use FPP/ .EVEN 3$: .PRINT MOV (SP)+,R0; BR O.BAD
Я бы сказал, что устанавливать его в принципе надо перед тем как уже запустился в работу. @#SYSPTR эффективно можно заменить на @R3 в данном случае. Еще ошибка: драйвер исходит из того, что EIS в принципе не поддерживается, а если он таки поддерживается и драйвер по сути эмулировал FIS, то при выключении его конфиг покажет что поддержки нет.
---------- Post added at 17:29 ---------- Previous post was at 17:27 ----------
А, не, он там что-то пытается учинить разборками с прерываниями... Даже копаться лень![]()
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
https://zx-pk.ru/threads/2348-dvk-(i...a%d6%c3%c4+182
Трудно сказать, что было в исходной версии - у меня, к сожалению, архивов не сохранилось. Если судить по тексту, то собственно часть установки драйвера модифицировалась/правилась - стиль "не мой".
Что же касается самого кода исполнение EIS/FIS'а, то он изначально писался для поддержки арифметики для специализированной системы ЧПУ и тестировался на стандартных DEC'овских тестах довольно тщательно. А вот обертка в драйвер была сделана "на коленке" по просьбе разработчиков NTS и потом зажила своей жизнью.
Последний раз редактировалось Igorn; 05.09.2019 в 04:49.
Хотя в любом случае, он пытается вмешаться в уже проделанную BSTRAPом работу на основе своих личных впечатлений, что неправильно.
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
Вобщем посмотрел что там со стеком делается... Там это делается из расчета, что оно в подпрограмме. Но на самом деле все в принципе упрощается - незачем по 10 раз одно и то же делать.
Вот к примеру прототип:
Я не стал тут рисовать точку для SYSGEN, но замечу про нее - во-первых 54 можно сразу положить в R3 из DRSET, во-вторых MMGT$ проверять не надо ибо если усер переименовал EM.SYS в EMX.SYS или наоборот, в пору усомниться в его вменяемости. Для всех остальных разборок с системой места остается дохрена. Если бы оставалось мало, можно было бы элементарно перенести эти разборки в оверлей.Код:.TITLE EM -- EIS/FIS EMULATION DRIVER .IDENT /V02.00/ .MCALL .ASSUME,.DRDEF,.DSTAT,.EXIT .MCALL .PRINT,.TTYOUT ; Одновременная установка WONLY$ и RONLY$ эффективно избавляет ; нас от потребности заниматься онанизмом после .DRBEG. ; Запретить FETCH для данного драйвера - благородное дело. ; Если будет собираться в 5.01 и старее, можно просто закоментить ; DRPTR. .DRDEF EM,377,WONLY$!RONLY$,0,0,0 .DRPTR FETCH=*NO* .DRSET ON, O.ON-O.BASE, O.EXEC .DRSET OFF, O.OFF-O.BASE, O.EXEC .DRSET INFORM, O.INFO-O.BASE, O.EXEC ; Эти опции у нас делают примерно одно и то же. Попутно предупреждаем ; пользователя, что если он указал несколько опций в строке - хрен ему. O.EXEC: TSTB -(R5) BEQ 40$ JSR R0,10$ .ASCII /?EM-W-Options ignored - /<200> .EVEN 10$: TST (SP)+ .PRINT 20$: TSTB -(R5) BEQ 30$ .TTYOUT @R5 BR 20$ 30$: .PRINT R5 40$: JSR R1,50$ .RAD50 /EM/ .BLKW 4 50$: MOV R1,R0 TST (R1)+ MOV R1,@SP ADD PC,R3 O.BASE: .DSTAT MOV 4(R1),R1 BCC 10$ RETURN 10$: JMP @R3 ; Точки входа ON/OFF/INFORM. Сюда попадаем с адресом ; загрузки драйвера в R1 (0 если не загружен, в этом случае Z установлен). O.ON: O.OFF: O.INFO: RETURN .ASSUME . LE 1000,MESSAGE=<;SET area overflow> .DRBEG EM EMINT: .DREND EM .END
---------- Post added at 19:29 ---------- Previous post was at 19:15 ----------
Хотя для SYSGEN там вроде и так оффсет клался в R3...
Последний раз редактировалось form; 01.03.2012 в 16:55.
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
Я пофиксил в драйвере EM.SYS только те моменты, которые приводят к невозможности корректно выйти из прерывания. Поскольку аргументы FIS не используют методов адресации - похоже, что неправильного выполнения команд FIS на ДВК-1 вообще быть не должно.
Проверять затирание исходных данных команд EIS крайне накладно из-за использования там методов адресации. При использовании SP в качестве регистра-приёмника в команде EIS - значение SP не изменяется.
Последний раз редактировалось Patron; 01.03.2012 в 19:27.
Выпущена новая версия драйвера EM.SYS ( v1.4 ) - более дружелюбная к пользователю.
Родные версии EM.SYS при несовпадении параметров генерации вели себя так:
Код:.SET EM INFORM ?EM-I-v1.0 by I.Nys, 116-20-42 Options: EIS FIS .SET EM ON ?KMON-F-Invalid command .SET EM SYSGEN .SET EM ON ?KMON-F-Invalid command .INS EM .SET EM ON .SET EM ON ?EM-I-Already running
Новая версия ведёт себя так:
Код:.SET EM INFORM EM v1.4 by I.NYS, MX Options: EIS FIS .SET EM ON ?EM-I-Conflicting SYSGEN options ?EM-I-Use: SET EM SYSGEN .SET EM SYSGEN .SET EM ON .SET EM ON ?EM-I-Already running..
Последний раз редактировалось Patron; 04.03.2012 в 16:18.
Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)