С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
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
Пультовый режим все равно организован своеобразно, вполне могли быть начальные варианты когда признак пульта размещался в битах psw[5] или psw[6].
В АЛУ имеется копия регистра инструкций, извлечение нужных полей из опкода выполняется мгновенно в блоке генератора констант. Флаг Т тоже очищается с использованием константы. Вот фрагмент выполнямой последовательности микрокода для clr R0 mtps R0
При этом 791401 тест mtps проходит нормально. Но надо все равно проверить на реальном ВМ1, вполне может быть что у меня где-то ошибка.Код:# plr(173777507057)->(176), op(10, y ), x(17), y(17)) # X=R0 (000000) # Y=000000 (const) # Read @ 000206, 106400 ; завершение чтения регистра опкода # R0=000000 ; окончание clr R0, назначение приемника # mj(1, 04, 176), ir(106400) # plm(014733122470) # # plr(014733122470)->(057), op(01, x+y ), x(01), y(03)) # X=R7 (000210) ; странный запуск чтения @PC, вместо PC результат попадает в R12 # Y=000002 (const) # mj(1, 04, 057), ir(106400) # QBUS=tplm(1), plrt(4), word read # ADR=000210 # plm(172630146035) # R12=000212 # # plr(172630146035)->(110), op(02, x&~y), x(17), y(13)) # X=R0 (000000) # Y=000020 (const) # mj(1, 04, 110), ir(106400) # plm(106674746035) # DAT=000000 (byte) ; новый PSW со сброшенным T # R12=000000 (byte) # # plr(106674746035)->(111), op(16, x&y ), x(10), y(13)) # Read @ 000210, 005001 # X=PSW (000344) # Y=000020 (const) # mj(1, 04, 111), ir(106400) # plm(100176542075) # PSW=000000 (byte) ; непонятки # # plr(100176542075)->(156), op(12, x|y ), x(10), y(00)) # Y=DAT (000400) # X=PSW (000000) # mj(1, 04, 156), ir(106400) # plm(010737123467) # PSW=000000 (byte) ; записали сохраненный в DAT PSW # # plr(010737123467)->(176), op(01, x+y ), x(01), y(03)) # X=R7 (000210) ; чтение кода инструкции (PC)+ # Y=000002 (const) # QBUS=tplm(4), plrt(4), word read # ADR=000210 # R7=000212 # Read @ 000210, 005001 # mj(1, 00, 176), ir(005001) # plm(010737122431)
После того как оперблок запросил у секвенсера Qbus транзакцию, она может закончится только двумя способами - успешное завершение по RPLY или наступление тайм-аута, при котором всегда безусловно фиксируется запрос на исключение и асинхронно абортируется микрокод - он принудительно переходит на микроадрес 176 - анализ прерываний и начало декодирования новой команды. То есть, на каком бы этапе выполнения команды не возник тайм-аут - исключение обязательно будет - триггер запроса установлен, и может быть сброшен только отработкой 4-го вектора.
Последний раз редактировалось Vslav; 30.01.2015 в 02:00.
Эту тему просматривают: 30 (пользователей: 0 , гостей: 30)