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
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Нет - в такой ситуации EM.SYS будет передавать управление на системный обработчик Trap to 010 - это более совместимо.
...
Компилируя вчера EM.SYS v1.0 я столкнулся с любопытной деталью - при компиляции и линковке программами от RT-11 v05.04 - код в нулевом блоке драйвера оказался на одно слово ближе к началу, нежели при сборке в RT-11 v05.07
Т.е. никакие .ASECT не "спасли" - код лёг в разные ячейки.
О совместимости тут даже речи не идет. Если прога начнет работать с FIS, обнаружив, что он есть и трапнется на операции которая в теории тоже есть, поверь, совместимее оно не будет
Втыкание кода .ASECTами в "неиспользуемые" ячейки в принципе криво. Из-за таких извратов драйвер (даже с точки зрения RT-11 V5.02) оказывается часто с вложенным незапланированным функционалом или как к примеру родной WD с его ".=.-2" после DRBEG, оказывается эффективно превращен в драйвер от RT-11 V4.
---------- Post added at 16:20 ---------- Previous post was at 16:16 ----------
Если уж тут говорить о совместимости - правильнее сделать FP exception
---------- Post added at 16:25 ---------- Previous post was at 16: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
Поскольку сейчас я переделываю драйвер EM.SYS, то вынужден решать как раз эту проблему. При сборке в RT-11 v05.07 - неудачно расположенный код оказывается заменён на разную служебную информацию.
Я правильно понимаю, что наиболее совместимо линковать драйвер, как обычный файл .SAV ?
Для драйвера нужно /NOBITMAP делать.
---------- Post added at 16:36 ---------- Previous post was at 16:33 ----------
А вообще, если взялся переделывать драйвер, лучше выкинуть уродсткое .ASECTство и сделать нормальные оверлеи SETовские если вдруг по какой-то причине что-то не влезает. Хотя там вроде не так много всего чтобы не влезало.
---------- Post added at 16:56 ---------- Previous post was at 16:36 ----------
Нефиг вообще лезть в 200/202 если не нужна прога инсталяции.Код:.ASECT .=200 NOP RETURN
Код
Упрощаем до...Код:FINDRV: MOV PC, R0 ADD #DEVNAM-., R0 MOV PC, -(SP) ADD #AREA-., (SP)
Код:JSR R1,10$ .RAD50 /EM/ .BLKW 4 10$: MOV R1,R0 TST (R1)+ MOV R1,@SP
---------- Post added at 17:04 ---------- Previous post was at 16:56 ----------
Неясно зачем стек попается - DSTAT при ошибке его также сдвинет.
Код:O.GOOD: CMP (PC)+,(PC)+ OO.BAD: TST (SP)+ O.BAD: SEC RETURN
---------- Post added at 17:08 ---------- Previous post was at 17:04 ----------
Уже поправил - я правильно прочитал - там криво
Последний раз редактировалось form; 01.03.2012 в 14:07.
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
Видимо автор исходил из того, что если система не суппортит .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
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)