Цитата Сообщение от Patron Посмотреть сообщение
Иначе и быть не могло - ведь тогда контроллер шины ВМ1 не мог бы формировать признак двойного зависания.
Ну скриншоты с УКНЦ, там ВМ2.

---------- Post added at 16:59 ---------- Previous post was at 16:40 ----------

Цитата Сообщение от Patron Посмотреть сообщение
Любопытно, что у 1801ВМ1 чтение нового значения PSW из вектора прерывания происходит с копированием младшего байта и обнулением старшего, что является очевидной ошибкой.

Из-за этого процессор 1801ВМ1 вываливается из HALT-моды каждый раз, когда срабатывает блок прерываний USER-моды. Поэтому в HALT-моде процессора 1801ВМ1 допустимы только два прерывания: HALT (после команды HALT или сигнала IRQ1) и ЗАВИСАНИЕ, тогда как и любое аппаратное прерывание, и T-Trap, и Tpap_To_010 (например, после MFPT), и Trap_To_04 (например, после JSR R0) и любое программное прерывание типа EMT, IOT и т.п. - моментально выносят ВМ1 из HALT-моды.
Кстати в ВМ2 точно также. Так как процессор имеет полноценное разделение на режимы HALT и USER (в отличии от ВМ1), то каждый режим имеет свое адресное пространство. Соответственно вектора для каждого режима находятся в своем адресном пространстве. В ВМ2 также введены регистры копии счетчика команд (CPC) и состояния процессора (CPSW). Эти регистры-копии повторяют значения PC и PSW, только когда в PSW не установлены одновременно два бита - 7 (запрет прерываний) и 8 (HALT), изменяются CPC и CPSW при изменении PC и младшего байта PSW. При установке этих двух битов CPC и CPSW "замораживаются". Соответственно, если из HALT-режима возникает прерывание USER-режима, то процессор переключается в USER-режим сбросом бита 8 в PSW, т.к. этот бит находится в старшем байте, то CPSW не изменяется. Далее уже в стек ложаться CPSW и CPC (да, у ВМ2 так, в любом режиме), читается вектор USER-режима (здесь в PSW копируется только младший байт, бит 8 уже сброшен), ну и обрабатывается прерывание. Здесь есть одно но! Прерывание USER-режима должно происходить при разрешенных прерываниях (бит 7=0), иначе CPC и CPSW будут "замороженными" и возвратиться назад не удасться. Также из USER-режима возможен возврат в HALT-режим, если адрес возврата равен или больше 160000. При адресе >=160000 в PSW копируются все 9 бит, а иначе только 8, восьмой бит остается неизменным.