Примерный объём программной памяти -- 50 шагов. Шаги выполняются последовательно, у каждого шага есть признак номера программы (1, 2 или 1+2). В каждый момент времени машина настроена на выполнение программы 1 или программы 2, и шаги, не промаркированные как принадлежащие этой программе, игнорируются. За каждый шаг выполняется одна или несколько команд, по одной команде каждого типа (см. список ниже). После выполнения шага машина может остановиться или перейти к следующему шагу. После выполнения программы машина автоматически возвращается к началу программы, выполняя бесконечный цикл. Формат регистров -- 12 десятичных знаков, целые числа, отрицательные числа хранятся в виде дополнения. У машины есть клавиатурный регситр, регистры I, II, K, работающие независимо, пара регистров III и IV и несколько (в моём случае 5) банков по 10 "накапливающих" регистров (с номерами от 0 до 9). Клавиатурный регистр работает только на чтение (число записывается в него из клавиатуры), остальные регистры не могут быть записаны оператором напрямую, но работают на чтение и запись. В одной команде нельзя использовать одновременно III и IV регистры. В одной команде нельзя использовать одновременно два "накапливающих" регистра с разными номерами, нельзя складывать и вычитать из "накапливающих" регистров одной командой. Одновременно с любой операцией чтения чисел может быть напечатано прочтённое число и код операции, формат печати гибко настраивается. Отрицательные числа из регистров I, II, K печатаются в естественной форме, из остальных -- в виде дополнения. Примерный набор команд машины; одновременно может выполняться по одной команде из каждой строки Прочитать любой регистр, опционально обнулить его и/или прибавить/отнять его значение к любому набору других регистров. После вычисления сдвинуть goto назад или вперёд до метки Метка, на которой останавливается каретка при сдвижении назад Метка, на которой останавливается каретка при сдвижении вперёд После вычисления перейти с первой программы на вторую, со второй на первую. Условный оператор: если каретка движется по goto вперёд, то она остановится на этом шаге, если значение регистра I положительное, или на следующем, если отрицательное. Вроде бы, не может быть совмещён с командой Goto вперёд. Условный оператор: если каретка движется по goto вперёд, то она остановится на этом шаге, если значение регистра II положительное, или на следующем, если отрицательное. Вроде бы, не может быть совмещён с командой Goto вперёд. Пример программы: умножение двух чисел. Предполагается, что множители в регистрах III и IV, в регистре II единица, произведение должно оказаться в регистре K. Read K; Clear; //обнуляем переменную Read I; Clear; //обнуляем переменную Read IV; I-=; // переносим множитель из IV в I, заменив его знак. backward: Read II; I+= ; Goto forward; // backward - метка перехода назад. читаем регистр II (там 1), добавляем к регистру I, прыгаем вперёд. I>0?; Read K; Print; Stop; // если I больше 0, то сюда указывает Goto forward: регистр K прочитается, распечатается, машина остановится. Read III; K+=; Goto backward; //если I<0, то Goto forward указывает сюда: прибавляем к К множимое, возвращаемся назад.