ProgramCounter (Счётчик команд)

Входы (Inputs)

ПинТипОписание
ClockbitТактовый сигнал — срабатывание по фронту (0→1)
ResetbitСброс счётчика в 0 (высший приоритет)
LoadbitЗагрузка адреса Addr в счётчик (средний приоритет)
Addrbus8Адрес для загрузки (используется командами JMP, JZ, JN)
Incbus8Шаг инкремента (по умолчанию 1, если пин не подключён)

Выходы (Outputs)

ПинТипОписание
Qbus8Текущий адрес команды (0–255)

Логика работы

ProgramCounter — ключевой элемент процессора, хранящий адрес текущей выполняемой инструкции. По каждому фронту Clock (переход 0→1) выполняется одно из трёх действий, в порядке приоритета:

  1. Reset = 1 (высший приоритет): Q сбрасывается в 0. Addr и Load игнорируются.
  2. Load = 1 (средний приоритет): Q принимает значение Addr. Используется командами JMP (безусловный переход), JZ и JN (условные переходы) для изменения потока выполнения.
  3. Иначе (низший приоритет): Q увеличивается на Inc. Это обеспечивает последовательное выполнение программы.

Важно: если пин Inc не подключён, ProgramCounter использует значение по умолчанию 1 (определяется через isInputConnected). Это значит, что при обычной работе (без переходов) счётчик инкрементируется на 1 каждый такт, переходя к следующей инструкции в ROM.

Счётчик работает в диапазоне 0–255. При переполнении (255 + 1) значение сбрасывается в 0.

Применение

Используется на уровнях 16, 18–29. ProgramCounter — обязательный компонент любого процессора. Типичная схема подключения:

Без ProgramCounter процессор не сможет последовательно читать команды из ROM.