Ах да, последнее на сегодня. Когда-то давно, на NedoPC возник спор, что происходит на ногах у ВМ80 во время выполнения 16ти битного сложения командой DAD. По количеству машинных циклов было понятно, что эта команда прогоняется через ALU и занимает 3 машинных цикла, что подтверждает всем известная дока. Большинство арифметических команд накладывается на цикл М1 следующего опкода, если результат ALU надо сохранить в аккумулятор (помечены сноской 9 в известной доке на карте растактовки). Это возможно благодаря внутренней шине ALU, о чем я уже упомянул выше. Однако, команда DAD единственная из тех, что использует машинные циклы М2 и М3, но при этом ей не нужна шина, потому, что все необходимые данные уже внутри, в регистрах. Так вот, я хочу поставить жирную точку в этом споре. Легче всего это отследить по сигналу SYNC. Вот его схема:
Здесь видно, что сигнал SYNC формируется из сигнала T1, который может блокироваться сигналом RESET (все верно, сигнал SYNC в состоянии сброса не генерируется, но при этом машина молотит, загружая каждый раз опкод NOP в регистр инструкции). Этот сигнал запоминается сначала по тактовой фазе F1 и затем по тактовой последовательности F2. Помешать сформированному сигналу может только лог.1 на READY_INT, который, складываясь по NOR будет давить SYNC к лог.0. Напомню, что сигнал SYNC имеет положительную полярность: активный лог.1. Таким образом, SYNC это всего лишь T1 задержанный до T2. Внутри, READY_INT блокирует сигнал WR (перед выдачей на ножку WR) и обнуляет сигнал-статус SY_WO, который по сути является битом D1 в слове состояния и который означает, что процессор хочет запись. Это, в свою очередь, блокирует DBIN выход. Зачем сделано именно так? Это упрощает генерацию сигнала чтения DBIN, который генерируется чаще и должен быть длиннее. Теперь сигнал READY_INT:
Сигнал формируется только от ID_DADX, который стреляет на все 4 опкода команды DAD (09H, 19H, 29H и 39H) и два сигнала машинный циклов M4 и M5. Сигналы машинных циклов M4 и M5 сначала складываются по ИЛИ, а затем по ИЛИ-НЕ (что эквивалентно И). Т.е., блокировка происходит для M4 или M5 только при команде DAD. Соответственно, сигналы SYNC, DBIN и WR во время исполнения 2 и 3 циклов команды DAD не активны. READY_INT так же блокирует вход READY, что не даст вам остановить ВМ80 сигналом неготовности во время прогона вычислений команды DAD. Шину адреса он не блокирует - там будет активность. Шина данных так же управляется только внутренним сигналом SY_WO, поэтому на шине данных так же будет что-то выставлено (в том числе и слово состояния в своем временном слоту). Произойдет обычная запись, но при отсутствии стробирующих сигналов DBIN и WR конфликта шины или чего-то деструктивного не будет. На остальные входы и выходы READY_INT не влияет.
Очевидно, что в схеме ошибка. Вместо M4 и M5 должны быть M2 и M3. Я специально в тексте объяснения написал соответственно этой схеме, чтобы не было путаницы. Но в целом и так ясно. Не понятно, почему сигнал назван именно как READY_INT, ведь к прерываниям он отношения не имеет (сокращение INT у меня ассоциируется с ними), быть может как READY INTERNALLY? Но все это сейчас уже и не важно, наверное.