{PokeBranch.mc, HGM, 4-Nov-84 6:27:49}
{This tries to make all the branching signals jump up and down. Each branch condition happens twice. The first time it should not cause a branch, and the second time it should cause a branch on all possible bits. (All the branches get CANCELBRed anyway.) Unfortunately, the IO/Ether disp bits don't fit into this pattern.}
{There is an empty click between each clump of 4 branches to make it easier to find the things on a scope.}
Reserve[0F5F, 0FFF]; { section used by the CP Kernel }
SetTask[7]; StartAddress[Go];
RegDef[R0,R,0];
RegDef[R1,R,1];
RegDef[R2,R,2];
Go: ClrIntErr, c1, at[0];
Noop, c2, at[00FF];
Noop, c3, at[0F00];
{Try to clear PC16}
Xbus ← R0 LRot0, XC2npcDisp, c1;
BRANCH[PC16IsOne, $, 0E], c2;
GOTO[Loop], c3;
PC16IsOne:
Ybus ← R0 + PC16, GOTO[Loop], c3;
Loop: IB ← 0, {Scope sync} c1;
R0 ← 0, c2;
R1 ← R1 xor ~R1, c3;
FlapNegBr:
[] ← R0, NegBr, c1;
CANCELBR[$, 0F], c2;
Noop, c3;
[] ← R1, NegBr, c1;
CANCELBR[$, 0F], c2;
Noop, c3;
FlapZeroBr:
[] ← R1, ZeroBr, c1;
CANCELBR[$, 0F], c2;
Noop, c3;
[] ← R0, ZeroBr, c1;
CANCELBR[$, 0F], c2;
Noop, c3;
FlapNZeroBr:
[] ← R0, NZeroBr, c1;
CANCELBR[$, 0F], c2;
ClrIntErr, {Maybe it takes time?} c3;
[] ← R1, NZeroBr, c1;
CANCELBR[$, 0F], c2;
Noop, c3;
FlapMesaIntBr:
MesaIntBr, c1;
MesaIntRq, CANCELBR[$, 0F], c2;
Noop, c3;
MesaIntBr, c1;
CANCELBR[$, 0F], c2;
Noop, c3;
Noop, c1;
Noop, c2;
Noop, c3;
FlapPgCarryBr:
[] ← R0+1, PgCarryBr, c1;
CANCELBR[$, 0F], c2;
Noop, c3;
[] ← R1+1, PgCarryBr, c1;
CANCELBR[$, 0F], c2;
Noop, c3;
FlapCarryBr:
[] ← R0+1, CarryBr, c1;
CANCELBR[$, 0F], c2;
Noop, c3;
[] ← R1+1, CarryBr, c1;
CANCELBR[$, 0F], c2;
Noop, c3;
FlapXRefBr:
[] ← R0 LRot0, XRefBr, c1;
CANCELBR[$, 0F], c2;
Noop, c3;
[] ← R1 LRot0, XRefBr, c1;
CANCELBR[$, 0F], c2;
Noop, c3;
FlapNibCarryBr:
[] ← R0+1, NibCarryBr, c1;
CANCELBR[$, 0F], c2;
Noop, c3;
[] ← R1+1, NibCarryBr, c1;
CANCELBR[$, 0F], c2;
Noop, c3;
Noop, c1;
Noop, c2;
Noop, c3;
Noop, c1;
Noop, c2;
Noop, c3;
FlapXDisp:
Xbus ← R0 LRot0, XDisp, c1;
CANCELBR[$, 0F], c2;
Noop, c3;
Xbus ← R1 LRot0, XDisp, c1;
CANCELBR[$, 0F], c2;
Noop, c3;
FlapYDisp:
Ybus ← R0, YDisp, c1;
CANCELBR[$, 0F], c2;
Noop, c3;
Ybus ← R1, YDisp, c1;
CANCELBR[$, 0F], c2;
Noop, c3;
FlapXC2npcDisp:
Xbus ← R0 LRot0, XC2npcDisp, c1;
CANCELBR[$, 0F], c2;
Ybus ← R0 + PC16, c3;
Xbus ← R1 LRot0, XC2npcDisp, c1;
CANCELBR[$, 0F], c2;
Ybus ← R0 + PC16, c3;
FlapEtherDisp:
Ybus ← R0, EtherDisp, c1;
CANCELBR[$, 0F], c2;
Noop, c3;
Ybus ← R1, EtherDisp, c1;
CANCELBR[$, 0F], c2;
Noop, c3;
Noop, c1;
Noop, c2;
Noop, c3;
FlapXwdDisp:
Xbus ← R0 LRot0, XwdDisp, c1;
CANCELBR[$, 0F], c2;
Noop, c3;
Xbus ← R1 LRot0, XwdDisp, c1;
CANCELBR[$, 0F], c2;
Noop, c3;
FlapXHDisp:
Xbus ← R0 LRot0, XHDisp, c1;
CANCELBR[$, 0F], c2;
Noop, c3;
Xbus ← R1 LRot0, XHDisp, c1;
CANCELBR[$, 0F], c2;
Noop, c3;
FlapXLDisp:
Xbus ← R0 LRot0, XLDisp, c1;
CANCELBR[$, 0F], c2;
Noop, c3;
Xbus ← R1 LRot0, XLDisp, c1;
CANCELBR[$, 0F], c2;
Noop, c3;
{Overflow is CarryIn#CarryOut of MSB}
FlapPgCrOvDisp:
[] ← R0+0, PgCrOvDisp, c1;
CANCELBR[$, 0F], c2;
R2 ← R1 RShift1, c3;
[] ← R2+1, PgCrOvDisp, c1;
CANCELBR[$, 0F], c2;
Noop, c3;
Noop, c1;
Noop, c2;
GOTO[Loop], c3;