С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Так и должно быть. С помощью .FETCH драйвер подгружается для программы, а не насовсем.
Если хочется из программы подгрузить драйвер нужно использовать другой вариант: с помощью .DSTAT проверить загружен ли он, если нет - сделать выход с выполнением командами LOAD CL и RUN имяпрограммы (пример выходя с командой есть в описании макробиблиотеки).
- - - Добавлено - - -
Начальный верхний адрес - это содержимое @#50 плюс 2.
После вызова .FETCH, новый адрес вернется в R0
- - - Добавлено - - -
У меня тоже некоторые проги так делают.
В последних прогах где-то перешел на родной $INIDM от DEC![]()
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 про команду на выходе - я понял, мне наверное и то и то нужно
- - - Добавлено - - -
@form > Начальный верхний адрес - это содержимое @#50 плюс 2.
После вызова .FETCH, новый адрес вернется в R0
Правильно или не очень )))
- такой вариант часы запускает.
Код:START: MOV @#50,R0 SUB #2,@#R0 .FETCH @#R0,#NLNAME ;Load NL handler BCS FERR ;Not available ; Use handler
поправил в такой вид, часики подгружает и на выходе выгружает,Код:.TITLE RELEAS .MCALL .FETCH,.RELEAS,.EXIT,.PRINT START: MOV @#50,R1 ADD #2, R1 .FETCH R1,#NLNAME ;Load NL handler BCS FERR ;Not available ; Use handler ; .RELEAS #NLNAME ;Mark NL no longer in memory .PRINT #OK ;NL not available BR . FERR: .PRINT #NONL ;NL not available .EXIT NLNAME: .RAD50 /CL / ;Name for NL handler NONL: .ASCIZ /?RELEAS-F-NL handler not available/ OK: .ASCIZ /?RELEAS-I-Ok!/ .EVEN HSPACE: ;Beginning of handler area .END START
получается .RELEAS можно не использовать? я его закомментил как видно.
Годится. Вместо ADD #2,R1 здесь можно использовать TST (R1)+ - это на слово короче.
Он нужен только если тебе в рамках работы программы потребовалось освободить память от ранее .FETCHнутого драйвера. Специально вызывать его перед выходом не надо - он неявно сам выполнится когда потребуется.
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
Да! Я это и хотел попросить разжевать для меня. Я очень туг в плане этой регистровой математики, иначе быть мне системщиком однозначно. По синтаксису я понимаю эту строку так, сравниваем с нулём содержимое R1? Но что в
данном случае означают скобки с плюсом и как сравнение с нулём может заменить операцию сложения (типа сдвиг, смещение). ??? может немного сумбурно, но я же хотел чётко понимать процедуру, а не тупо шпаргалить. вот прибавить двойку мне более понято, ещё вопрос третий вариант два INC подряд будет тем же самом в плане результата, ведь можно
тогда написать свой макрос где тупо задать количество операций INC или DEC?
- - - Добавлено - - -
ура! я сдал Олегу контрольную ))) Спасибо за шпору Хунта!
Просто проверяем значение ячейки памяти, адрес которой хранится в регистре (как итог - знаем равно нулю/меньше нуля или наоборот). В данном случае для нас результат проверки неинтересен, для нас важно, что такой адрес существует в принципе (иначе такая команда не годилась бы).
Это значит что после обращения, значение регистра увеличится на 2 (или на 1 если обращение байтовое [исключение - регистры 6 (SP) и 7 (PC) - они всегда на 2 изменяются]).
Это не имеет смысла поскольку уже два вызова INC/DEC - это два слова (для регистра), а дальше - больше. Тут как раз ADD будет лучше.
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
Последний раз редактировалось hobot; 31.05.2019 в 13:57.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)