Особенности Z80...
Есть сигнал 153, примерный смысл - в регистре инструкций находится инструкция, при которой сохраняются флаги, в том числе в них входят сдвиги с префиксом CB.
Есть сигнал 183, примерный смысл - в регистре инструкций находится инструкция, при которой результат сохраняется в аккумулятор, в том числе в них входят сдвиги rlc/rrc/rlnc/rrnc.
То есть при сдвигах с префиксом CB нет записи результата в аккумулятор, что логично, а при обычных сдвигах нет записи флагов, что странно. Видимо при обычных сдвигах флаг переноса сохраняется особым образом.
Далее RS-триггер.
Вход R = M1T1 and (153 or 183). Сброс при M1T1, если текущая инструкция требует сохранения результата в аккумулятор или сохранения флагов. Сохранение происходит во время выборки следующей инструкции, то есть выход этого триггера можно назвать "идёт процесс сохранения результата и/или флагов".
Но вход S = M1T3 or (M4T2 and (34 or 35 or что-то_ещё)). При M1T3 понятно - результат сохранили, новую инструкцию выполнять начали, но M4T2 при обычных сдвигах? Они же за 1 M-цикл выполняются, M1. То есть явно какие-то лишние условия.
В другом месте похожее. Вывод флагов на шину
flag_oe = ~(w3[353] or w2[225])
а потом некий строб при (подставим flag_oe в выражение)
flag_oe or w2[225] =
= ~(w3[353] or w2[225]) or w2[225] =
= (~w3[353] and ~w2[225]) or w2[225] =
= (~w3[353] or w2[225]) and (~w2[225] or w2[225]) =
= (~w3[353] or w2[225]) and TRUE =
= (~w3[353] or w2[225])
То есть опять какие-то странности в логических выражениях. Зачем такие сложности? Или это задаёт порядок формирования сигналов?
p.s. А схема десятичной коррекции участвует в формировании на шине адреса 0066h при NMI