b2m wrote:Тут, кстати, пригодилась бы система рестартов, потому как для команды JMP надо делать 4х-битный регистр страницы, в котором будут старшие 4 бита адреса перехода и менять этот регистр для вызова "дальних" версий CALLPROC и RETPROC нежелательно.
...
Может быть я неудачно придумал дальние безусловные
JUMP и
CALL?
Я их решил реализовать так: если 8-битная команда:
KKKKDDDD, где
KKKK-КОП,
DDDD-данные (литера или номер регистра), то
DDDD - подключены к внутренней 4х-битной магистрали, а
KKKK - к памяти микрокоманд.
Аппаратно
4х-битный регистр страницы подключен к внутренней 4х-битной магистрали,
PC_Low - подключен к внутренней 4х-битной магистрали,
а вот
PC_High к ней
не подключен.
При выполнении
JUMP и
CALL:
KKKK-
JUMP или
CALL,
DDDD -
4х-битный регистр страницы .
после
выборки КОПа
JUMP или
CALL программный счётчик
PC автоматом аппаратно увеличивается на 1 и во время выполнения КОПа указывает уже на следующий
KKKKDDDD.
DDDD сразу защёлкиваем в 4х-битный регистр страницы
А вот во время выполнения КОПа можно защелкнуть
DDDD - в
PC_Low, а
KKKK - в
PC_High, причём одновременно, поскольку
PC_High должен быть аппаратно подключен входами к линиям
KKKK - это никак не мешает обычной работе.
После чего снова делаем инкремент
PC.
Инкремент
PC происходит аппаратно, т.к.
PC_Low и
PC_High - это два счётчика с предзагрузкой, включенные последовательно.
1-уровневый стек, я хотел реализовать аппаратно защёлкивая состояния
PC_Low,
PC_High и
4х-битный регистр страницы в отдельные 4х-битные регистры одновременно и параллельно.