Flags

 Схема

В схеме находится 6 флагов процессора : I, C, D, Z, V, N, а также схема с tri-state буфером, для выдачи содержимого флагов на внутреннюю шину данных DB, по команде P/DB.
Также в нижней части находится схема вычисления DBZ. (DB = 0)

B-флаг располагается отдельно, в левой части процессора, там где находится схема обработки прерываний. 

Входные и выходные значения флагов используют инверсную логику (кроме флага B).
Дополнительно значение флагов Carry и Decrement (Dec) выводятся наружу. Carry используется в схеме вычисления ADD/SB7, а Dec используется в схеме, которая формирует контрольные линии DAA/DSA, которые активируют схемы BCD-коррекции.

I-флаг также выводится наружу, в схему обработки прерываний, для маскирования IRQ.

Значения флагов также используются в схеме выбора условного перехода (Branch logic).

V-флаг может быть установлен через входной контакт SO (set overflow), для этого имеется соотв. контрольная линия, которая приходит на схему флага V.

Что с чем обменивать решает схема контроля флагов, которая будет разобрана отдельно. На выходе этой контрольной схемы имеется ряд управляющих сигналов, которые управляют процессом обмена, установки и сброса значений флагов.

На флаги CD и I подается 5й разряд регистра инструкций (IR5), для обработки инструкций CLC/SEC, CLI/SEI и CLD/SED. Декодер устроен так, что он срабатывает одновременно для пары инструкций, а логика флагов, используя IR5 решает - установить флаг или сбросить.

Эту схему можно найти на схеме 6502 Д. Хенсона (Donald Hanson) :

Эти же команды можно найти и на транзисторной схеме, за исключением того, что я опустил нумерацию разрядов в командах типа DB6/V и сделал их просто DB/V итп.
Дональд пропустил на схеме команду 0/V, которая используется при обработке инструкции CLV.

Смысловое значение названий следующее:

Логическая схема

Схема получилась большая и на полный экран не влазиет, поэтому ссылка кликабельна.

По схеме говорить особо нечего, тут присутствуют 6 флагов и tri-state буфер, для выдачи содержимого флагов наружу, на внутреннюю шину данных DB.

Схема управления отдельно взятым флагом немного хитрая. Сам флаг представляет собой пару защёлок, значение которых перетекает друг в друга каждые 2 полутакта.
В промежутке вклинивается схема NAND, которая при отсутствии команд работает как обычный инвертор.
Если же на вход флага подается какая-либо команда, то NOR отсекает старое значение защёлки и оно заменяется новым из источника, который соответствует входной команде (напр. при выполнении команды IR5/D новое значение флага D устанавливается в соответствии со значением IR5).



Назад...