Цитата Сообщение от gid Посмотреть сообщение
Там почти для всех опкодов, если шесть младших битов == 000111 (число 7), то бит plx[20] == 0 - эта ситуация прослеживается почти в каждом микроадресе, нету в обработке mark, trap, emt и опкодов меньше 7. Как будто, специально отлавливается, но зачем-то распространена на весь микрокод.
Пока за весь микрокод не скажу, но почти все одноадресные инструкции начинаются так (пример для TST):
Код:
if (dd address mode == 0)
  01: A = PC
     IR preload start, word read start
     if (dd register == PC)
        01: R12 = PC + 2
        31: MCIR = 1012
        49: PC = PC & 1777778, assign NZVC
        11: next instruction
     else
        01: PC = PC + 2
        31: MCIR = 1012
        49: Rd = Rd & 1777778, assign NZVC,
            MCIR poll, wait read
        01: next instruction
else
Ветвление по address mode сделано совсем ранним, на первом же микроадресе цепочки декодирования, таким образом выделяется отдельная ветка регистровых операций, что позволяет минимизировать число тактов исполнения и ускорить инструкции (уменьшить занимаемое ими число тактов). Причем тут же в первом цикле всегда запускается предвыборка по (PC)+ следующей инструкции. Но на адресе 01 PC уже имеет значение ".+2", если его позволить модифицировать, то инструкции типа ASL PC будут уже работать за значением ".+4". Поэтому если аргумент 0001112, то PC пока не меняем, выполняем саму операцию а потом (на адресе 11) запустим получение следующей инструкции уже по новому значению PC (результату операции). Прикол в том что TST работает по это же ветке, и TST PC будет извлекать следующую инструкцию дважды - получаем фантомный цикл.