Теперь о командах [b]@ [/b]и [b]![/b]

для загрузки адреса используется действия, подобные команде call, a для следующее действие по разименованию или присвоению производится дополнительными командами, которые формально из набора выпадают, так как "теряют смысл" без предварительной подготовки. Возможно, я этого смысла просто не нашел, но для упрощения схемы я эти команды ввожу и никак не маскирую.

[code]CASE 8 => -- @ -- call*
    PC[] = TR[]; PC[].ena = VCC;
    RStack.di[] = PC[]; RStack.cmd[] = push; -- сохраняется неизменное(!) значение PC
CASE 9 => -- продолжение @ -  ret-@
    PC[] = RStack.do[]; PC[].ena = VCC; RStack.cmd[] = pop;
    TR[] = DI[]; TR[].ena = VCC;
CASE 10 => -- ! -- call*
    PC[] = TR[]; PC[].ena = VCC;
    RStack.di[] = PC[]; RStack.cmd[] = push; -- сохраняется неизменное(!) значение PC
    TR[] = DStack.do[]; TR[].ena = VCC; DRStack.cmd[] = pop;
CASE 11 => -- продолжение ! ret-!
    PC[] = RStack.do[]; PC[].ena = VCC; RStack.cmd[] = pop;
    TR[] = DStack.do[]; TR[].ena = VCC; DRStack.cmd[] = pop;    
[/code]
    
Лишние занятые коды, конечно не особенно приятны, но пока я их оставляю. Обойти их можно некоторым усложнением схемы и введением 5-битной внутренней команды, которая бы прямо дешифровалась из 4-хбитной команды, но я этого здесь делать не буду, так как формально две лишние команды мало что меняют, ибо есть префиксы, а с ними достаточное количество дополнительных команд.

Еще пара нужных команд - [b]>R[/b] и [b]R>[/b]:

[code]CASE 12 => -- >R
    RStack.di[] = TR[]; RStack.cmd[] = push;
    TR[] = DStack.do[]; TR[].ena = VCC;
    DStack.cmd[] = pop;

CASE 13 => -- R>
    DStack.di[] = TR[]; DStack.cmd[] = push;
    TR[] = RStack.do[]; TR[].ena = VCC;
    RStack.cmd[] = pop;
[/code]

