Минималистическая аккумуляторная фон Неймановская архитектура с 8-разрядными командами, и 16-разрядными данными.
Команда - 4 бита на код операции + 1 бит на тип адресации + 3 бита на номер регистра.
Разрядность данных можно изменить, не затрагивая систему команд.
Используется одна 2х-портовая память с 10..16-разрядными шинами адреса, 8-разрядной шиной команд, и 16-разрядной шиной данных.
Регистры, кроме PC, физически расположены в одной памяти с командами и данными.
В общем адресном пространстве - команды, данные, регистры, I/O порты.
Доступ к I/O портам - через общую адресацию, специальных команд не предусмотрено.
Аппаратно реализованы 2 типа адресации источника (или приемника в команде ST) - регистровый, и индексный.
В зависимости от типа адресации, src (или dst в команде ST) означает либо Rn, либо imm8(Rn), n=0..7.
Отсутствует разница между константами (включая адреса длинных переходов), и переменными, тк хранятся в общей памяти данных, и используют одинаковые методы адресации.
Флагов нет, условные переходы объединены с командами сравнения.
Команда длинного перехода JMP всегда сохраняет адрес следующей команды в аккумуляторе, поэтому может эмулировать команду вызова подпрограммы.
Аппаратного стека нет, адрес возврата сохраняется в аккумуляторе, и может быть сохранен в регистре следующей командой (ST Rn).
Команда длинного перехода JMP использует регистровую или индексную адресацию, поэтому может эмулировать команду возврата из подпрограммы.
Команда ROT src циклически вращает аккумулятор по счетчику, заданному в src, и эмулирует ROL n, ROR n.
Команда занимает 1 байт, + 1 байт при индексной адресации, + 1 байт для команд с коротким переходом.
Число тактов == числу байт команды (для ROT число тактов увеличивается на число сдвигов).
BR imm -- PC = PC + imm8
BEQ src, imm -- if(A == src) PC = PC + imm8
BNE src, imm -- if(A != src) PC = PC + imm8
BGE src, imm -- if(A >= src) PC = PC + imm8
BGT src, imm -- if(A > src) PC = PC + imm8
BLE src, imm -- if(A <= src) PC = PC + imm8
BLT src, imm -- if(A < src) PC = PC + imm8
JMP src -- A = PC, PC = src
LD src -- A = src
ST dst -- dst = A
ADD src -- A += src
SUB src -- A -= src
AND src -- A &= src
OR src -- A |= src
XOR src -- A ^= src
ROT src -- A = rot(A, src)