Хотя в любом случае, он пытается вмешаться в уже проделанную BSTRAPом работу на основе своих личных впечатлений, что неправильно.
Вид для печати
Хотя в любом случае, он пытается вмешаться в уже проделанную BSTRAPом работу на основе своих личных впечатлений, что неправильно.
Почему ASH -2(SP), R0 может требовать корректировки адреса возврата?
---------- Post added at 13:56 ---------- Previous post was at 13:53 ----------
Типа, просто отказываться выполнить команду, если регистром-приёмником является R6 или источник был затёрт при входе в прерывание.
Вобщем посмотрел что там со стеком делается... Там это делается из расчета, что оно в подпрограмме. Но на самом деле все в принципе упрощается - незачем по 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)+
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...
Я пофиксил в драйвере EM.SYS только те моменты, которые приводят к невозможности корректно выйти из прерывания. Поскольку аргументы FIS не используют методов адресации - похоже, что неправильного выполнения команд FIS на ДВК-1 вообще быть не должно.
Проверять затирание исходных данных команд EIS крайне накладно из-за использования там методов адресации. При использовании SP в качестве регистра-приёмника в команде EIS - значение SP не изменяется.
Выпущена новая версия драйвера 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..
Как выяснилось - драйвер EM.SYS не обошли проблемы "последнего слова", которое затирается у драйвера при загрузке в "продвинутых" мониторах, если в исходнике не были учтены параметры генерации.
В новой версии драйвера EM.SYS ( v1.4 ) эти проблемы решены.