begin comment x8 simulator: 17-12-71;
integer aantal kasten, max addr, bufs, max master;
aantal kasten := 4;
bufs := 3000;
max master := 512;
max addr := aantal kasten × 2 ⭡ 14 - 1;
begin
real fh, ft, a, s, b, ot, c, iv, lt, of, last par word,
nint, ov, bt, or, m, addr, cg, itv, ingreep type, dyst stat;
comment ingreep type betekenis:
0 geen ingreep
1 charon/sleutelingreep
2 foutingreep
3 foutingreep tijdens charon/sleutelingreep ;
real val, valh, valt, ah, at, sh, st, hulp1, hulp2, hulp3;
Boolean addrop, regop, memop, mcaddr, flag, nega, negs, subcd, gate,
prot;
switch dsw := basis cyclus 1;
integer procedure randbit;
randbit := random;
integer procedure randint;
begin real x;
x := entier((entier(random × tp13) + random) × tp14);
randint := if x ≥ tp26 then x - tp27m1 else x
end randint;
procedure init x8;
begin
fh := randint;
ft := randint;
a := randint;
s := randint;
b := randint;
ot := and(randint, tp18m1);
or := randint;
c := randbit;
iv := randbit;
lt := randbit;
of := randbit;
last par word := randint;
nint := randbit;
ov := randbit;
bt := randbit;
m := addr := cg := itv := ingreep type := dyst stat := 0;
prot := bt = 0
end init x8;
procedure memreg;
if mem op then
mem1
else begin
m := if addr < 59 then
(if addr = 57 then fh else ft)
else if addr < 61 then
(if addr = 59 then a else s)
else if addr = 61 then
b
else
tlink + (if c = 0 then 0 else -tp26m1)
end memreg;
real procedure compf(h,t);
value h,t;
real h,t;
compf := compose(h,set(bit(14, h), 26, 26, t));
Boolean procedure signinc;
signinc := bit(14, valh) ≠ (if 1/valt > 0 then 0 else 1);
procedure b up1;
begin
if 1/b < 0 then undef(335);
b := b + 1
end b up1;
procedure bdown1;
begin b := -(1 - b);
if b < 0 then undef(330) end bdown1;
procedure b up2;
begin
if 1/b < 0 then undef(336);
b := b + 2
end b up2;
procedure bdown2;
begin b := -(2 - b);
if b < 0 then undef(331) end bdown2;
real procedure star(x);
value x;
real x;
begin comment only for abs(x) > tp18m1;
y := x - x ÷ tp18 × tp18;
star := if y = 0 ∧ x > 0 then 0 else y
end star;
real procedure tlink;
tlink := ot +
(if c = 0 then 0 else tp18) +
(if iv = 0 then 0 else tp19) +
(if lt = 0 then 0 else tp20) +
(if of = 0 then 0 else tp21) +
(if parbit(last par word) = 0 then 0 else tp22) +
(if nint = 0 then 0 else tp23) +
(if ov = 0 then 0 else tp24) +
(if bt ≠ 0 then 0 else tp25);
procedure calc addr;
begin
mcaddr := false;
if b20c19 < 3 then
begin
comment stat, : stat, statb;
if b20c19 < 2 then begin
addr := b14t0;
addrop := b20c19 = 1
end else begin
addrop := false;
addr := (if abs(b) > tp18m1
then b - b ÷ tp18 × tp18
else b) + b14t0 - tp14
end;
reg op := ¬addrop ∧ addr > 56 ∧ addr < 63
end else begin
b14t9 := b14t0 ÷ tp9;
b8t0 := b14t0 - b14t9 × tp9;
if b14t9 > 57 then
begin comment mr;
if b14t9 = 63 then
begin
if ¬filled[63] then undef(25401);
x := m0[63];
ccs := ccs + 2;
if trace then report reading(63, x);
end else
x := if b14t9 < 61 then
(if b14t9 = 58 then ft else
if b14t9 = 59 then a else s) else
if b14t9 = 61 then b else ot
end mr else
begin comment mpq;
if ¬filled[63] then undef(25402);
y := m0[63];
ccs := ccs + 2;
if trace then report reading(63, y);
if abs(y) > tp18m1 then y := y - y ÷ tp18 × tp18;
if y < 64 then undef(332);
cg := 0;
addr := y + b14t9;
mem1;
x := m;
end mpq;
addr := (if abs(x) > tp18m1 then x - x ÷ tp18 × tp18
else x) + b8t0 - tp8;
if addr > 56 ∧ addr < 63 then undef(333);
reg op := false;
addrop := b20c19 = 4;
mcaddr := b14t9 = 61 ∧ ¬addrop
end dyn, : dyn;
if addr < 0 then undef(26320) else
if addr = 0 then addr := 0 else
if addr > tp18m1 then undef(26321);
mem op := ¬ (addrop ∨ reg op)
end calc addr;
procedure condf;
begin comment conditiezetting op floating point getal
in valh en valt;
x := bit(14, valh);
c :=
if b18c17 = 1 then x else
if b18c17 = 2 then
(if valt ≠ 0 then 1 else
if and(valh, tp14m1)=(if 1/valt > 0 then 0 else tp14m1)
then 0 else 1) else
if lt = x then 0 else 1;
lt := x
end condf;
procedure cond;
begin comment conditiezetting op 27-bits woord in val;
x := if (if val = 0 then 1/val else val) > 0
then 0 else 1;
c := if b18c17 = 1 then x else
if b18c17 = 2 then (if val = 0 then 0 else 1) else
if lt = x then 0 else 1;
lt := x
end cond;
comment begin pariteitsberekening;
integer array parlist[0: 511];
integer procedure parbit(bin);
value bin;
real bin;
begin real x, y;
if (if bin = 0 then 1/bin else bin) < 0 then
bin := bin + tp27m1;
x := bin ÷ 512;
y := x ÷ 512;
x := parlist[bin - x × 512] + parlist[x - y × 512] + parlist[y] + 1;
rep:
if x > 1 then begin x := x - 2;
goto rep end _m_o_d 2;
parbit := x
end parbit;
procedure init parlist;
begin
integer i,j;
parlist[0] := 0;
for i := 1, i + i while i ≤ 256 do
for j := 0 step 1 until i - 1 do
parlist[i+j] := 1 - parlist[j]
end init parlist;
comment einde pariteitsberekening;
comment begin memory simulation;
procedure bring in(region);
real region;
if m3p = 0 then begin
if m2p = 0 then begin
if m1p = 0 then begin
m1p := region;
m1l := m cnt
end else begin
m2p := region;
m2l := m cnt
end
end else begin
m3p := region;
m3l := m cnt
end
end unused regions else begin
procedure transp(m, mp);
integer mp;
integer array m;
begin
to drum(m, mp × bufs);
mp := region;
drum cnt := drum cnt + 1;
from drum(m, mp × bufs)
end transp;
if m1l > m2l then begin
if m2l > m3l then transp(m3, m3p) else transp(m2, m2p)
end m2 of m3
else
if m1l > m3l then transp(m3, m3p) else transp(m1, m1p)
end bring in;
procedure stm;
if addr > 56 ∧ addr < 63 then undef(305) else stm1;
procedure stm1;
if addr > max addr then undef(26322) else
begin
integer region;
if in monitor then goto skip adm;
if prot then
begin
if dgp[addr ÷ 512] ≥ 0 then
begin
if ¬ (addr < 16 ∨ addr = 63) then undef(27500)
end
end;
if nowrite[addr] then
begin real m1, addr1, cg1;
m1 := m;
addr1 := addr;
cg1 := cg;
undef(5);
m := m1;
addr := addr1;
cg := cg1
end nowrite;
m cnt := m cnt + 1;
skip adm:
filled[addr] := cg = 0;
region := addr ÷ bufs;
x := addr - region × bufs;
rep:
if region = 0 then m0[x] := m else
if region = m1p then begin m1[x] := m; m1l := m cnt end else
if region = m2p then begin m2[x] := m; m2l := m cnt end else
if region = m3p then begin m3[x] := m; m3l := m cnt end else
begin
bring in(region);
goto rep
end;
if trace then report writing(addr, m)
end stm 1;
procedure mem;
if addr > 56 ∧ addr < 63 then undef(304) else mem1;
procedure mem1;
if addr > max addr then undef(26323) else
begin
integer region;
Boolean fa;
if in monitor then goto skip adm1;
if prot then
begin
if dgp[addr ÷ 512] > 0 then
begin
if ¬ (addr < 16 ∨ addr = 63) then undef(27501)
end
end;
ccs := ccs + 2;
m cnt := mcnt + 1;
fa := filled[addr];
if cg < 2 ∧ ¬fa then undef(25400);
skip adm1:
region := addr ÷ bufs;
x := addr - region × bufs;
rep:
if region = 0 then m := m0[x] else
if region = m1p then begin m := m1[x]; m1l := m cnt end else
if region = m2p then begin m := m2[x]; m2l := m cnt end else
if region = m3p then begin m := m3[x]; m3l := m cnt end else
begin
bring in (region);
goto rep
end;
if trace then report reading(addr, m);
if in monitor then goto skip adm2;
if cg = 0 then
else if cg = 1 then last par word := m
else begin
last par word := if fa then m else -m;
if cg = 3 then c := if fa then 0 else 1
end;
skip adm2:
end mem1;
procedure init memory;
begin
y := max addr ÷ tp9;
for x := 0 step 1 until y do dgp[x] := 2;
comment dp := true, gp := true;
m cnt := m1p := m1l := m2p := m2l := m3p := m3l := drum cnt := 0;
x := 0;
rep:
filled[x] := nowrite[x] := noexec[x] := false;
x := x + 1;
if x ≤ max addr then goto rep
end init memory;
integer array m0, m1, m2, m3[0: bufs - 1];
Boolean array filled, nowrite, noexec[0 : max addr];
real m1p, m1l, m2p, m2l, m3p, m3l;
integer array dgp[0 : max addr ÷ 512];
real m cnt, drum cnt;
comment end memory simulation;
comment simulatie charon;
real charon teller, ie0, ie1;
integer af0, af1, if0, if1, lvif0, lvif1;
integer afv0, afv1, ifv0, ifv1, lvifv0, lvifv1;
integer ip lezer;
procedure setq(l, q0, q1, v);
value l;
integer l, q0, q1, v;
if l > 31 then q0 := set(v, l - 14, l - 14, q0)
else if l > 17 then q1 := set(v, 43 - l, 43 - l, q1)
else
q0 := set(v, 17 - l, 17 - l, q0);
integer procedure readq(l, q0, q1);
value l;
integer l, q0, q1;
readq :=
if l > 31 then bit(l - 14, q0)
else if l > 17 then bit(43 - l, q1)
else
bit(17 - l, q0);
procedure init q(q0, q1, qlist);
integer q0, q1;
string qlist;
begin
integer i;
q0 := q1 := 0;
for i := 0 step 1 until 39 do
set q(i, q0, q1, stringsymbol(i, qlist))
end init q;
procedure wek charon;
;
procedure attendeer charon af(n);
undef(600 + n);
procedure init charon;
begin
charon teller := 0;
ip lezer := 5;
init q(afv0, afv1,“0000000000000000000000000000000000000000”);
init q(ifv0, ifv1,“1111111111111111111111001111110000111111”);
init q(lvifv0, lvifv1,“1111111111111100111111001111110000001111”);
ls
end init charon;
procedure bva;
goto bva1;
procedure ls;
begin
iv := bt := 1;
ov := ie0 := ie1 := dyst stat := 0;
af0 := af1 := if0 := if1 := 0;
lvif0 := tp26m1;
lvif1 := tp26m1 - tp12 + 1;
end ls;
procedure lsip;
begin
ls;
ip;
ot := tp18m1;
setq(ip lezer, if0,if1,1);
if ¬ sva then bva
end lsip;
procedure lsbi;
begin
ls;
bi;
ot := tp18m1;
setq(ip lezer, if0,if1,1);
if ¬ sva then bva
end lsbi;
procedure lsnb;
begin
ls;
ot := tp18m1;
setq(38,if0,if1,1);
if ¬ sva then bva
end lsnb;
procedure ip;
begin real n, amount;
real procedure word;
begin
integer n;
real procedure rehep1;
begin real n;
n := rehep1 := rehep;
if n > 127 then undef(160)
end rehep1;
skip:
n := -(64 - rehep1);
if n < 0 then goto skip;
word := ((n × 128 + rehep1) × 128 + rehep1) × 128 + rehep1
end word;
block:
n := word;
amount := n ÷ tp18;
addr := n - amount × tp18;
if addr = tp18m1 then addr := -1;
if amount ≠ 0 ∨ addr ≠ 0 then
begin
loop:
addr := addr + 1;
amount := amount - 1;
m := word;
if m > tp26m1 then m := m - tp27m1;
stm;
goto if amount = 0 ∨ amount = -512 then block else loop
end block
end ip;
procedure bi;
begin
real a, s;
integer adr, cnt;
procedure rehep inf;
begin
rep:
s := rehep;
if s > 63 then
begin
if s ≠ 127 then undef(172);
for s := rehep while s ≠ 127 do;
goto rep
end
end rehep inf;
procedure re biword;
begin
integer n;
real res;
Boolean par;
res := s;
par := parlist[s] = 0;
for n := 1 step 1 until 4 do
begin
rehep inf;
res := res × 64 + s;
par := par ≡ parlist[s] = 0
end;
if par then undef(173);
a := res ÷ tp27;
s := -(a × tp27 - x);
if s > tp26m1 then s := s - tp27m1
end re biword;
read biblock:
rehep inf;
if s = 0 then goto read biblock;
re biword;
if a ≠ 3 then undef(174);
adr := and(s, tp18m1);
cnt := and(s ÷ tp18, 511);
if cnt = 0 then cnt := 512;
if adr > 0 ∨ cnt > 0 then
begin
for cnt := cnt step -1 until 1 do
begin rehep inf;
re biword;
if a ≠ 0 then undef(175);
adr := adr + 1;
if adr < 24 ∨ adr > 56 ∧ adr < 63 then undef(176);
addr := adr;
m := s;
stm1;
end cnt;
goto read biblock
end biblock;
end bi;
comment einde simulatie charon;
comment begin monitor procedures;
comment master program for x8s,61271;
integer array lwork[1: maxmaster];
integer symb,char,plab,pvar,ptmp,ploc,pin,pwork,valuedenoted,level;
Boolean errorfree;
procedure insert2(p,x1,x2);
integer x2,x1,p;
begin
integer q;
q := p;
p := pwork;
pwork := pwork-3;
begin
if ¬(pwork<pin) then goto l2;
error(“workspace exhausted”,pwork);
goto l999;
l2:
lwork[p-0] := x1;
lwork[p-1] := x2;
lwork[p-2] := q;
goto l999;
end;
l999:
end;
Boolean procedure find2(p,x1,x2);
integer x2,x1,p;
begin
integer q,y;
find2 := true;
q := p;
lfnd:
if ¬(0<q) then goto l1;
y := lwork[q-0];
begin
if ¬(y=x1) then goto l2;
x2 := lwork[q-1];
goto l999;
l2:
q := lwork[q-2];
goto lfnd;
end;
l1:
find2 := false;
l999:
end;
Boolean procedure still2(p,x1,x2);
integer x2,x1,p;
begin
still2 := true;
if ¬(0<p) then goto l1;
x1 := lwork[p-0];
x2 := lwork[p-1];
p := lwork[p-2];
goto l999;
l1:
still2 := false;
l999:
end;
procedure insert5(p,x1,x2,x3,x4,x5);
integer x5,x4,x3,x2,x1,p;
begin
integer q;
q := p;
p := pwork;
pwork := pwork-6;
begin
if ¬(pwork<pin) then goto l2;
error(“workspace exhausted”,pwork);
goto l999;
l2:
lwork[p-0] := x1;
lwork[p-1] := x2;
lwork[p-2] := x3;
lwork[p-3] := x4;
lwork[p-4] := x5;
lwork[p-5] := q;
goto l999;
end;
l999:
end;
procedure prescan;
begin
pwork := maxmaster;
errorfree := true;
ploc := maxmaster;
pin := 1;
plab := 0;
pvar := 0;
ptmp := 0;
char := 93;
level := 1;
nextsymbol;
begin
if ¬xp(1207) then goto l2;
text;
connectlabels;
begin
if ¬errorfree then goto l3;
goto l999;
l3:
nlcr;
printtext(“incorrect program”);
goto terminate;
goto l999;
end;
l2:
error(“no program”,symb);
goto terminate;
goto l999;
end;
l999:
end;
procedure text;
begin
integer y,loc;
ltxt:
if ¬xp(1115) then goto l1;
begin
if ¬xp(1117) then goto l2;
y := valuedenoted;
begin
if ¬xp(1202) then goto l3;
definelabel(y);
goto ltxt;
l3:
gv(1115);
applylabel(y,loc);
gv(loc);
goto ltxt;
end;
l2:
error(“bad label”,symb);
goto ltxt;
end;
l1:
if ¬xp(1005) then goto l6;
gv(1005);
begin
if ¬xp(1117) then goto l7;
y := valuedenoted;
notevariable(y,loc);
gv(loc);
goto ltxt;
l7:
error(“bad variable”,symb);
goto ltxt;
end;
l6:
if ¬xp(1117) then goto l9;
gv(1117);
gv(valuedenoted);
goto ltxt;
l9:
if ¬(symb=1207) then goto l10;
gv(1207);
shiftline;
nextsymbol;
level := level+1;
goto ltxt;
l10:
if ¬(symb=1218) then goto l11;
begin
if ¬(level=1) then goto l12;
goto l999;
l12:
level := level-1;
if ¬xp(1218) then goto l13;
gv(1218);
goto ltxt;
l13:
goto l0;
end;
l11:
if ¬(symb=1038) then goto l15;
gv(1038);
string;
gv(1038);
goto ltxt;
l15:
if ¬(symb=1219) then goto l16;
gv(1219);
shiftline;
nextsymbol;
goto ltxt;
l16:
gv(symb);
nextsymbol;
goto ltxt;
l0:
l999:
end;
Boolean procedure xp(x);
integer x;
begin xp := true;
if ¬(symb=x) then goto l1;
nextsymbol;
goto l999;
l1:
xp := false;
l999:
end;
procedure gv(x);
integer x;
begin
if ¬(pwork<pin) then goto l1;
error(“workspace exhausted”,pwork);
goto l999;
l1:
lwork[pin-0] := x;
pin := pin+1;
l999:
end;
procedure definelabel(lab);
integer lab;
begin
integer dummy;
if ¬find2(plab,lab,dummy) then goto l1;
error(“label defined twice”,lab);
goto l999;
l1:
insert2(plab,lab,pin);
l999:
end;
procedure applylabel(lab,loc);
integer loc,lab;
begin
if ¬find2(plab,lab,loc) then goto l1;
goto l999;
l1:
insert2(ptmp,lab,pin);
loc := 0;
l999:
end;
procedure notevariable(var,loc);
integer loc,var;
begin
if ¬find2(pvar,var,loc) then goto l1;
goto l999;
l1:
loc := ploc;
insert2(pvar,var,loc);
ploc := ploc-1;
l999:
end;
procedure connectlabels;
begin
integer lab,pl,loc;
lrst:
if ¬still2(ptmp,lab,pl) then goto l1;
begin
if ¬find2(plab,lab,loc) then goto l2;
lwork[pl-0] := loc;
goto lrst;
l2:
error(“label defined nonce”,lab);
goto lrst;
end;
l1:
end;
procedure error(x,y);
integer y;
begin
integer pos;
pos := printpos-1;
newline;
printtext(x);
print(y);
nlcr;
space(pos);
errorfree := false;
end;
procedure string;
begin
lstr:
if ¬ask(121) then goto l1;
nextsymbol;
goto l999;
l1:
gv(char);
xok;
goto lstr;
l999:
end;
Boolean procedure ask(c1);
integer c1;
begin ask := true;
if ¬(char=c1) then goto l1;
xok;
goto l999;
l1:
ask := false;
l999:
end;
procedure xok;
begin prsym(126);
nextchar;
end;
procedure nextchar;
begin prsym(char);
char := resym;
end;
procedure newline;
begin prsym(119);
print(pin);
prsym(118);
end;
procedure shiftline;
begin
integer pos;
pos := printpos-24;
newline;
space(pos);
end;
procedure nextsymbol;
begin
if ¬trysymbol then goto l1;
goto l999;
l1:
error(“unkown char”,char);
nextchar;
nextsymbol;
l999:
end;
Boolean procedure trysymbol;
begin
integer val;
trysymbol := true;
lnxt:
if ¬(char=93) then goto l1;
nextchar;
goto lnxt;
l1:
if ¬(char=119) then goto l2;
newline;
char := resym;
goto lnxt;
l2:
if ¬(char=118) then goto l3;
nextchar;
goto lnxt;
l3:
if ¬(char<10) then goto l4;
val := char;
ldec:
xok;
begin
if ¬(char<10) then goto l5;
val := val×10+char;
goto ldec;
l5:
symb := 1117;
valuedenoted := val;
goto l999;
end;
l4:
if ¬(char≤16) then goto l7;
if ¬atogsymbol then goto l7;
goto l999;
l7:
if ¬(char≤25) then goto l8;
if ¬htopsymbol then goto l8;
goto l999;
l8:
if ¬(char≤35) then goto l9;
if ¬qtozsymbol then goto l9;
goto l999;
l9:
if ¬ask(120) then goto l10;
begin
if ¬ask(64) then goto l11;
if ¬ask(120) then goto l0;
symb := 1203;
goto l999;
l11:
if ¬ask(66) then goto l12;
if ¬ask(120) then goto l0;
symb := 1204;
goto l999;
l12:
if ¬ask(14) then goto l13;
if ¬ask(26) then goto l0;
if ¬ask(120) then goto l0;
symb := 1213;
goto l999;
l13:
if ¬ask(16) then goto l14;
begin
if ¬ask(14) then goto l15;
if ¬ask(120) then goto l0;
symb := 1216;
goto l999;
l15:
if ¬ask(29) then goto l16;
if ¬ask(120) then goto l0;
symb := 1215;
goto l999;
l16:
goto l0;
end;
l14:
if ¬ask(21) then goto l18;
begin
if ¬ask(14) then goto l19;
if ¬ask(120) then goto l0;
symb := 1212;
goto l999;
l19:
if ¬ask(29) then goto l20;
if ¬ask(120) then goto l0;
symb := 1211;
goto l999;
l20:
goto l0;
end;
l18:
if ¬ask(23) then goto l22;
if ¬ask(14) then goto l0;
if ¬ask(120) then goto l0;
symb := 1214;
goto l999;
l22:
val := 0;
loct:
begin
if ¬ask(120) then goto l24;
symb := 1117;
valuedenoted := val;
goto l999;
l24:
if ¬ask(93) then goto l25;
goto loct;
l25:
if ¬(char<8) then goto l26;
adjust(val);
val := val×8+char;
xok;
goto loct;
l26:
error(“unknown char”,char);
nextchar;
goto loct;
end;
end;
l10:
if ¬ask(80) then goto l28;
symb := 1201;
goto l999;
l28:
if ¬ask(99) then goto l29;
symb := 1218;
goto l999;
l29:
if ¬ask(90) then goto l30;
symb := 1202;
goto l999;
l30:
if ¬ask(87) then goto l31;
symb := 1210;
goto l999;
l31:
if ¬ask(70) then goto l32;
symb := 1213;
goto l999;
l32:
if ¬ask(74) then goto l33;
symb := 1215;
goto l999;
l33:
if ¬ask(72) then goto l34;
symb := 1211;
goto l999;
l34:
if ¬ask(65) then goto l35;
symb := 1205;
goto l999;
l35:
if ¬ask(76) then goto l36;
symb := 1206;
goto l999;
l36:
if ¬ask(98) then goto l37;
symb := 1207;
goto l999;
l37:
if ¬ask(79) then goto l38;
symb := 1208;
goto l999;
l38:
if ¬ask(64) then goto l39;
symb := 1209;
goto l999;
l39:
if ¬ask(121) then goto l40;
symb := 1038;
goto l999;
l40:
if ¬ask(91) then goto l41;
symb := 1219;
goto l999;
l41:
if ¬ask(127) then goto l42;
if ¬ask(70) then goto l0;
symb := 1214;
goto l999;
l42:
if ¬ask(66) then goto l43;
symb := 1217;
goto l999;
l43:
if ¬ask(126) then goto l44;
begin
if ¬ask(72) then goto l45;
symb := 1212;
goto l999;
l45:
if ¬ask(74) then goto l46;
symb := 1216;
goto l999;
l46:
goto l0;
end;
l44:
l0: trysymbol := false;
l999:
end;
procedure adjust(y);
integer y;
begin
if ¬(tp23≤y) then goto l1;
y := y-tp24;
goto l999;
l1:
l999:
end;
Boolean procedure atogsymbol;
begin atogsymbol := true;
if ¬ask(10) then goto l1;
begin
if ¬ask(11) then goto l2;
result(1103);
goto l999;
l2:
if ¬ask(13) then goto l3;
result(1102);
goto l999;
l3:
if ¬ask(29) then goto l4;
result(1101);
goto l999;
l4:
result(101);
goto l999;
end;
l1:
if ¬ask(11) then goto l6;
begin
if ¬ask(29) then goto l7;
result(112);
goto l999;
l7:
if ¬ask(31) then goto l8;
result(1020);
goto l999;
l8:
result(103);
goto l999;
end;
l6:
if ¬ask(12) then goto l10;
result(104);
goto l999;
l10:
if ¬ask(13) then goto l11;
begin
if ¬ask(10) then goto l12;
result(1105);
goto l999;
l12:
if ¬ask(18) then goto l13;
result(1033);
goto l999;
l13:
if ¬ask(30) then goto l14;
result(1031);
goto l999;
l14:
goto l0;
end;
l11:
if ¬ask(14) then goto l16;
result(1106);
goto l999;
l16:
if ¬ask(15) then goto l17;
begin
if ¬ask(10) then goto l18;
result(1107);
goto l999;
l18:
if ¬ask(20) then goto l19;
result(106);
goto l999;
l19:
result(105);
goto l999;
end;
l17:
if ¬ask(16) then goto l21;
begin
if ¬ask(24) then goto l22;
result(1003);
goto l999;
l22:
result(107);
goto l999;
end;
l21:
l0: atogsymbol := false;
l999:
end;
Boolean procedure htopsymbol;
begin htopsymbol := true;
if ¬ask(18) then goto l1;
begin
if ¬ask(15) then goto l2;
result(1004);
goto l999;
l2:
if ¬ask(23) then goto l3;
begin
if ¬ask(28) then goto l4;
result(1109);
goto l999;
l4:
result(1108);
goto l999;
end;
l3:
if ¬ask(25) then goto l6;
result(1011);
goto l999;
l6:
if ¬ask(29) then goto l7;
result(109);
goto l999;
l7:
if ¬ask(31) then goto l8;
result(108);
goto l999;
l8:
goto l0;
end;
l1:
if ¬ask(21) then goto l10;
begin
if ¬ask(28) then goto l11;
begin
if ¬ask(11) then goto l12;
result(1012);
goto l999;
l12:
if ¬ask(18) then goto l13;
result(1018);
goto l999;
l13:
if ¬ask(23) then goto l14;
result(1019);
goto l999;
l14:
result(1017);
goto l999;
end;
l11:
if ¬ask(29) then goto l16;
result(110);
goto l999;
l16:
result(1115);
goto l999;
end;
l10:
if ¬ask(22) then goto l18;
result(1116);
goto l999;
l18:
if ¬ask(23) then goto l19;
begin
if ¬ask(14) then goto l20;
result(1035);
goto l999;
l20:
if ¬ask(18) then goto l21;
result(113);
goto l999;
l21:
if ¬ask(21) then goto l22;
result(1034);
goto l999;
l22:
goto l0;
end;
l19:
if ¬ask(24) then goto l24;
begin
if ¬ask(15) then goto l25;
begin
if ¬ask(15) then goto l26;
result(1006);
goto l999;
l26:
result(115);
goto l999;
end;
l25:
if ¬ask(23) then goto l28;
result(1001);
goto l999;
l28:
if ¬ask(27) then goto l29;
result(111);
goto l999;
l29:
if ¬ask(29) then goto l30;
result(114);
goto l999;
l30:
if ¬ask(31) then goto l31;
result(116);
goto l999;
l31:
goto l0;
end;
l24:
if ¬ask(25) then goto l33;
begin
if ¬ask(10) then goto l34;
result(1110);
goto l999;
l34:
if ¬ask(27) then goto l35;
result(1104);
goto l999;
l35:
if ¬ask(30) then goto l36;
result(1014);
goto l999;
l36:
goto l0;
end;
l33:
l0: htopsymbol := false;
l999:
end;
Boolean procedure qtozsymbol;
begin qtozsymbol := true;
if ¬ask(27) then goto l1;
result(1111);
goto l999;
l1:
if ¬ask(28) then goto l2;
begin
if ¬ask(18) then goto l3;
result(1016);
goto l999;
l3:
if ¬ask(25) then goto l4;
result(1037);
goto l999;
l4:
if ¬ask(29) then goto l5;
begin
if ¬ask(10) then goto l6;
begin
if ¬ask(27) then goto l7;
result(1013);
goto l999;
l7:
if ¬ask(29) then goto l8;
result(1032);
goto l999;
l8:
goto l0;
end;
l6:
if ¬ask(24) then goto l10;
result(1002);
goto l999;
l10:
goto l0;
end;
l5:
if ¬ask(31) then goto l12;
result(1015);
goto l999;
l12:
result(117);
goto l999;
end;
l2:
if ¬ask(29) then goto l14;
begin
if ¬ask(10) then goto l15;
result(1036);
goto l999;
l15:
if ¬ask(27) then goto l16;
result(1112);
goto l999;
l16:
result(102);
goto l999;
end;
l14:
if ¬ask(31) then goto l18;
result(1005);
goto l999;
l18:
if ¬ask(32) then goto l19;
if ¬ask(27) then goto l0;
begin
if ¬ask(18) then goto l20;
result(1113);
goto l999;
l20:
if ¬ask(24) then goto l21;
result(1114);
goto l999;
l21:
goto l0;
end;
l19:
l0: qtozsymbol := false;
l999:
end;
procedure result(res);
integer res;
begin symb := res;
lskp:
begin
if ¬(10≤char) then goto l2;
if ¬(char≤35) then goto l2;
nextchar;
goto lskp;
l2:
goto l999;
end;
l999:
end;
integer pwrte,pexec,interdata,interaddr,interpari,interinst,interprot;
procedure program;
begin level := 1;
pwork := ploc;
pwrte := 0;
pexec := 0;
prefillonconditions;
jumpto(1);
instructionlist;
end;
procedure prefillonconditions;
begin insert5(pwrte,0,maxaddr,1,1,pin);
insert5(pexec,0,maxaddr,1,1,pin);
interdata := pin;
interaddr := pin;
interpari := pin;
interinst := pin;
interprot := pin;
gv(1002);
gv(1219);
end;
procedure instructionlist;
begin
lrst:
instruction;
begin
if ¬is(1219) then goto l2;
goto lrst;
l2:
if ¬(symb=1218) then goto l3;
goto l999;
l3:
error(“skipped from”,symb);
skipinstruction;
begin
if ¬is(1219) then goto l5;
goto lrst;
l5:
goto l999;
end;
end;
l999:
end;
procedure instruction;
begin
if ¬is(1207) then goto l1;
level := level+1;
instructionlist;
if ¬is(1218) then goto l0;
level := level-1;
goto l999;
l1:
if ¬(symb≤1005) then goto l2;
if ¬iscontrolinstruction then goto l2;
goto l999;
l2:
if ¬(symb≤1020) then goto l3;
if ¬isconsoleinstruction then goto l3;
goto l999;
l3:
if ¬(symb≤1038) then goto l4;
if ¬iscommentinstruction then goto l4;
goto l999;
l4:
error(“incorrect master instruction”,symb);
skipinstruction;
goto l999;
l0:
l999:
end;
Boolean procedure iscontrolinstruction;
begin
integer p,val;
iscontrolinstruction := true;
if ¬is(1001) then goto l1;
if ¬iscountoption(p) then goto l0;
if ¬isoncondition(p) then goto l0;
skipinstruction;
goto l999;
l1:
if ¬is(1006) then goto l2;
if ¬isoffcondition then goto l0;
goto l999;
l2:
if ¬is(1003) then goto l3;
if ¬is(1115) then goto l0;
next(p);
jumpto(p);
goto l999;
l3:
if ¬is(1004) then goto l4;
if ¬isexpr(p) then goto l0;
begin
if ¬(p=0) then goto l5;
skipinstruction;
goto l999;
l5:
instruction;
goto l999;
end;
l4:
if ¬is(1005) then goto l7;
next(p);
if ¬is(1213) then goto l0;
if ¬isexpr(val) then goto l0;
lwork[p-0] := val;
goto l999;
l7:
if ¬is(1002) then goto l8;
goto terminate;
goto l999;
l8:
l0: iscontrolinstruction := false;
l999:
end;
procedure next(p);
integer p;
begin p := symb;
pin := pin+1;
symb := lwork[pin-0];
end;
Boolean procedure is(p);
integer p;
begin is := true;
if ¬(p=symb) then goto l1;
next(symb);
goto l999;
l1:
is := false;
l999:
end;
Boolean procedure iscountoption(n);
integer n;
begin iscountoption := true;
if ¬isprimary(n) then goto l1;
if ¬is(1217) then goto l0;
goto l999;
l1:
n := 1;
goto l999;
l0: iscountoption := false;
l999:
end;
Boolean procedure isoncondition(count);
integer count;
begin isoncondition := true;
if ¬is(1113) then goto l1;
if ¬is(1101) then goto l0;
chain(count,pwrte);
goto l999;
l1: if ¬is(1106) then goto l2;
if ¬is(1101) then goto l0;
chain(count,pexec);
goto l999;
l2: if ¬is(1114) then goto l3;
goto lact;
l3: lact:if ¬is(1109) then goto l4;
interdata := pin;
goto l999;
l4: if ¬is(1102) then goto l5;
interaddr := pin;
goto l999;
l5: if ¬is(1110) then goto l6;
interpari := pin;
goto l999;
l6: if ¬is(1104) then goto l7;
interprot := pin;
goto l999;
l7: if ¬is(1105) then goto l8;
interdata := pin;
goto l999;
l8:
l0: isoncondition := false;
l999:
end;
procedure chain(count,p);
integer p,count;
begin
integer from,to;
if ¬islocitem(from,to) then goto l1;
begin
if ¬is(1210) then goto l2;
chain(count,p);
goto lins;
l2:
lins:
insert5(p,from,to,count,count,pin);
catch(p,from,to);
goto l999;
end;
l1:
l999:
end;
procedure catch(p,from,to);
integer to,from,p;
begin
integer q;
q := from;
begin
if ¬(p=pwrte) then goto l2;
lwrt:
nowrite[q] := true;
begin
if ¬(to≤q) then goto l3;
goto l999;
l3:
q := q+1;
goto lwrt;
end;
l2:
lxec:
noexec[q] := true;
begin
if ¬(to≤q) then goto l6;
goto l999;
l6:
q := q+1;
goto lxec;
end;
end;
l999:
end;
Boolean procedure isoffcondition;
begin
integer from,to;
isoffcondition := true;
if ¬is(1113) then goto l1;
if ¬is(1101) then goto l0;
lwrt:
if ¬islocitem(from,to) then goto l0;
releasewrite(from,to);
begin
if ¬is(1210) then goto l2;
goto lwrt;
l2:
goto l999;
end;
l1:
if ¬is(1106) then goto l4;
if ¬is(1101) then goto l0;
lxec:
if ¬islocitem(from,to) then goto l0;
releaseexec(from,to);
begin
if ¬is(1210) then goto l5;
goto lxec;
l5:
goto l999;
end;
l4:
l0: isoffcondition := false;
l999:
end;
procedure releasewrite(from,to);
integer to,from;
begin
integer q;
q := from;
lwrt:
nowrite[q] := false;
begin
if ¬(to≤q) then goto l2;
goto l999;
l2:
q := q+1;
goto lwrt;
end;
l999:
end;
procedure releaseexec(from,to);
integer to,from;
begin
integer q;
q := from;
lxec:
noexec[q] := false;
begin
if ¬(to≤q) then goto l2;
goto l999;
l2:
q := q+1;
goto lxec;
end;
l999:
end;
Boolean procedure islocitem(from,to);
integer to,from;
begin islocitem := true;
if ¬isaddress(from) then goto l1;
begin
if ¬is(1202) then goto l2;
if ¬isprimary(to) then goto l0;
goto l999;
l2:
to := from;
goto l999;
end;
l1:
l0: islocitem := false;
l999:
end;
Boolean procedure isaddress(y);
integer y;
begin isaddress := true;
if ¬is(1116) then goto l1;
if ¬isprimary(y) then goto l0;
checkaddr(y);
goto l999;
l1:
l0: isaddress := false;
l999:
end;
procedure checkaddr(y);
integer y;
begin
if ¬(y=0) then goto l1;
y := 0;
goto l999;
l1:
if ¬(0≤y) then goto l2;
if ¬(y≤tp18m1) then goto l2;
goto l999;
l2:
errornumber := 0;
error(“bad address”,y);
goto terminate;
l999:
end;
procedure skipinstruction;
begin
integer lev,i;
lev := level;
lskp:
if ¬(symb=1219) then goto l1;
if ¬(lev=level) then goto l1;
goto l999;
l1:
if ¬is(1207) then goto l2;
level := level+1;
goto lskp;
l2:
if ¬(symb=1218) then goto l3;
if ¬(lev=level) then goto l3;
goto l999;
l3:
if ¬is(1218) then goto l4;
level := level-1;
goto lskp;
l4:
next(i);
goto lskp;
l999:
end;
procedure jumpto(p);
integer p;
begin pin := p;
symb := lwork[pin-0];
end;
Boolean procedure isconsoleinstruction;
begin
integer ad,exp,from,to;
isconsoleinstruction := true;
if ¬is(1011) then goto l1;
ip;
goto l999;
l1: if ¬is(1017) then goto l2;
ls;
goto l999;
l2: if ¬is(1018) then goto l3;
lsip;
goto l999;
l3: if ¬is(1012) then goto l4;
lsbi;
goto l999;
l4: if ¬is(1019) then goto l5;
lsnb;
goto l999;
l5: if ¬is(1013) then goto l6;
if ¬isaddress(ad) then goto l0;
ot := ad;
bva;
goto l999;
l6: if ¬is(1014) then goto l7;
if ¬isexpr(exp) then goto l0;
if ¬is(1108) then goto l0;
llcs: begin
if ¬islocitem(from,to) then goto l8;
fill(from,to,exp);
begin
if ¬is(1210) then goto l9;
goto llcs;
l9: goto l999;
end;
l8: if ¬isputreg(exp) then goto l11;
begin
if ¬is(1210) then goto l12;
goto llcs;
l12: goto l999;
end;
l11: goto l0;
end;
l7: if ¬is(1020) then goto l15;
bva;
goto l999;
l15: if ¬is(1016) then goto l16;
sva := true;
bva;
goto l999;
l16: if ¬is(1015) then goto l17;
begin
if ¬is(1001) then goto l18;
sva := true;
goto l999;
l18: if ¬is(1006) then goto l19;
sva := false;
goto l999;
l19: goto l0;
end;
l17:
l0: isconsoleinstruction := false;
l999:
end;
procedure fill(from,to,exp);
integer exp,to,from;
begin
integer p;
p := from;
lstr:
addr := p;
m := exp;
stm;
begin
if ¬(p=to) then goto l2;
goto l999;
l2:
p := p+1;
goto lstr;
end;
l999:
end;
Boolean procedure isputreg(exp);
integer exp;
begin
integer bit;
isputreg := true;
if ¬is(101) then goto l1;
a := exp;
goto l999;
l1:if ¬is(103) then goto l2;
b := exp;
goto l999;
l2:if ¬is(106) then goto l3;
fh := exp;
goto l999;
l3:if ¬is(107) then goto l4;
ft := exp;
goto l999;
l4:if ¬is(114) then goto l5;
ot := exp;
checkaddr(ot);
goto l999;
l5:if ¬is(111) then goto l6;
or := exp;
goto l999;
l6:if ¬is(117) then goto l7;
s := exp;
goto l999;
l7:reducetobit(exp,bit);
if ¬is(104) then goto l8;
c := bit;
negate(c);
goto l999;
l8:if ¬is(115) then goto l9;
of := bit;
goto l999;
l9:if ¬is(108) then goto l10;
iv := bit;
goto l999;
l10:if ¬is(116) then goto l11;
ov := bit;
goto l999;
l11:if ¬is(109) then goto l12;
itv := bit;
goto l999;
l12:if ¬is(110) then goto l13;
lt := bit;
goto l999;
l13:if ¬is(112) then goto l14;
bt := bit;
goto l999;
l14:if ¬is(113) then goto l15;
nint := bit;
goto l999;
l15:isputreg := false;
l999:
end;
procedure reducetobit(exp,bit);
integer bit,exp;
begin
if ¬(exp=0) then goto l1;
bit := 0;
goto l999;
l1: bit := 1;
l999:
end;
Boolean procedure iscommentinstruction;
begin
integer from,to;
iscommentinstruction := true;
if ¬is(1032) then goto l1;
displaystatus;
print(pin);
printregs;
goto l999;
l1:
if ¬is(1031) then goto l2;
ldmp:
begin
if ¬islocitem(from,to) then goto l3;
dump(from,to);
begin
if ¬is(1210) then goto l4;
goto ldmp;
l4:
goto l999;
end;
l3:
dump(0,maxaddr);
goto l999;
end;
l2:
if ¬is(1033) then goto l7;
ldsp:
begin
if ¬islocitem(from,to) then goto l8;
givedisplay(from,to);
begin
if ¬is(1210) then goto l9;
goto ldsp;
l9:
goto l999;
end;
l8:
if ¬isdisplayreg then goto l11;
begin
if ¬is(1210) then goto l12;
goto ldsp;
l12:
goto l999;
end;
l11:
if ¬isexpr(to) then goto l14;
nlcr;
proct(to,9);
print(to);
begin
if ¬is(1210) then goto l15;
goto ldsp;
l15:
goto l999;
end;
l14:
goto l0;
end;
l7:
if ¬is(1034) then goto l18;
nlcr;
goto l999;
l18:
if ¬is(1035) then goto l19;
newpage;
goto l999;
l19:
if ¬is(1036) then goto l20;
prsym(118);
goto l999;
l20:
if ¬is(1037) then goto l21;
begin
if ¬isexpr(to) then goto l22;
space(to);
goto l999;
l22:
space(1);
goto l999;
end;
l21:
if ¬is(1038) then goto l24;
printstring;
goto l999;
l24:
l0: iscommentinstruction := false;
l999:
end;
procedure givedisplay(from,to);
integer to,from;
begin
integer p,y;
p := from;
ldsp:
addr := p;
mem;
y := m;
nlcr;
printtext(“m[”);
proct(p,9);
printtext(“]: ”);
proct(y,9);
print(y);
begin
if ¬(p=to) then goto l2;
goto l999;
l2:
p := p+1;
goto ldsp;
end;
l999:
end;
Boolean procedure isdisplayreg;
begin isdisplayreg := true;
nlcr;
if ¬is(101) then goto l1;
printtext(“a ”);
proct(a,9);
print(a);
goto l999;
l1:if ¬is(103) then goto l2;
printtext(“b”);
proct(b,9);
print(b);
goto l999;
l2:if ¬is(106) then goto l3;
printtext(“fk ”);
proct(fh,9);
print(fh);
goto l999;
l3:if ¬is(107) then goto l4;
printtext(“g ”);
proct(ft,9);
print(ft);
goto l999;
l4:if ¬is(114) then goto l5;
printtext(“ot ”);
proct(ot,9);
print(ot);
goto l999;
l5:if ¬is(111) then goto l6;
printtext(“or ”);
proct(or,9);
print(or);
goto l999;
l6:if ¬is(117) then goto l7;
printtext(“s ”);
proct(s,9);
print(s);
goto l999;
l7:if ¬is(102) then goto l8;
printtext(“t ”);
proct(tlink,9);
print(tlink);
goto l999;
l8:if ¬is(104) then goto l9;
printtext(“c ”);
prsym(c);
goto l999;
l9:if ¬is(115) then goto l10;
printtext(“of ”);
prsym(of);
goto l999;
l10:if ¬is(116) then goto l11;
printtext(“ov ”);
prsym(ov);
goto l999;
l11:if ¬is(108) then goto l12;
printtext(“iv ”);
prsym(iv);
goto l999;
l12:if ¬is(109) then goto l13;
printtext(“itv”);
prsym(itv);
goto l999;
l13:if ¬is(112) then goto l14;
printtext(“bt ”);
prsym(bt);
goto l999;
l14:if ¬is(113) then goto l15;
printtext(“nint”);
prsym(nint);
goto l999;
l15:if ¬is(105) then goto l16;
printtext(“f ”);
print(compf(fh,ft));
goto l999;
l16:isdisplayreg := false;
l999:
end;
procedure displaystatus;
begin
if ¬(errornumber≥100 ∧ errornumber<200) then goto l1;
nlcr;
printtext(“wrong data”);
goto l999;
l1:if ¬(errornumber≥300 ∧ errornumber<400) then goto l2;
nlcr;
printtext(“wrong addr”);
goto l999;
l2:if ¬(errornumber≥400 ∧ errornumber<500) then goto l3;
nlcr;
printtext(“wrong pari”);
goto l999;
l3:if ¬(errornumber≥200 ∧ errornumber<300) then goto l4;
nlcr;
printtext(“wrong inst”);
goto l999;
l4:if ¬(errornumber=0) then goto l5;
nlcr;
printtext(“in dyst ”);
goto l999;
l5:if ¬(errornumber=1) then goto l6;
nlcr;
printtext(“tijd op ”);
goto l999;
l6:if ¬(errornumber=2) then goto l7;
nlcr;
printtext(“gestopt ”);
goto l999;
l7:if ¬(errornumber=3) then goto l8;
nlcr;
printtext(“exec”);
goto l999;
l8:if ¬(errornumber=4) then goto l9;
nlcr;
printtext(“write ”);
goto l999;
l9:if ¬(errornumber≥500 ∧ errornumber<600) then goto l10;
nlcr;
printtext(“protection”);
goto l999;
l10:nlcr;
printtext(“status ok”);
l999:
end;
procedure printstring;
begin
integer y;
lstr:
next(y);
begin
if ¬(y=1038) then goto l2;
goto l999;
l2:
prsym(y);
goto lstr;
end;
l999:
end;
Boolean procedure isexpr(val);
integer val;
begin
integer y;
isexpr := true;
if ¬isconj(val) then goto l1;
lrst:
begin
if ¬is(1208) then goto l2;
if ¬isconj(y) then goto l0;
takeor(val,y,val);
goto lrst;
l2:
goto l999;
end;
l1:
l0: isexpr := false;
l999:
end;
Boolean procedure isconj(val);
integer val;
begin
integer y;
isconj := true;
if ¬isnegatable(val) then goto l1;
lrst:
begin
if ¬is(1201) then goto l2;
if ¬isnegatable(y) then goto l0;
takeand(val,y,val);
goto lrst;
l2:
goto l999;
end;
l1:
l0: isconj := false;
l999:
end;
Boolean procedure isnegatable(val);
integer val;
begin isnegatable := true;
if ¬is(1206) then goto l1;
if ¬isnegatable(val) then goto l0;
negate(val);
goto l999;
l1:
if ¬issimple(val) then goto l2;
goto l999;
l2:
l0: isnegatable := false;
l999:
end;
Boolean procedure issimple(val);
integer val;
begin
integer y;
issimple := true;
if ¬isarithmeticexpr(val) then goto l1;
begin
if ¬is(1211) then goto l2;
if ¬isarithmeticexpr(y) then goto l0;
begin
if ¬(val<y) then goto l3;
val := 1;
goto l999;
l3:
val := 0;
goto l999;
end;
l2:
if ¬is(1212) then goto l5;
if ¬isarithmeticexpr(y) then goto l0;
begin
if ¬(val≤y) then goto l6;
val := 1;
goto l999;
l6:
val := 0;
goto l999;
end;
l5:
if ¬is(1213) then goto l8;
if ¬isarithmeticexpr(y) then goto l0;
begin
if ¬(val=y) then goto l9;
val := 1;
goto l999;
l9:
val := 0;
goto l999;
end;
l8:
if ¬is(1214) then goto l11;
if ¬isarithmeticexpr(y) then goto l0;
begin
if ¬(val=y) then goto l12;
val := 0;
goto l999;
l12:
val := 1;
goto l999;
end;
l11:
if ¬is(1216) then goto l14;
if ¬isarithmeticexpr(y) then goto l0;
begin
if ¬(y≤val) then goto l15;
val := 1;
goto l999;
l15:
val := 0;
goto l999;
end;
l14:
if ¬is(1215) then goto l17;
if ¬isarithmeticexpr(y) then goto l0;
begin
if ¬(y<val) then goto l18;
val := 1;
goto l999;
l18:
val := 0;
goto l999;
end;
l17:
goto l999;
end;
l1:
l0: issimple := false;
l999:
end;
procedure takeor(x1,x2,x3);
integer x3,x2,x1;
begin
if ¬(0=x1) then goto l1;
if ¬(0=x2) then goto l1;
x3 := 0;
goto l999;
l1:
x3 := 1;
l999:
end;
procedure takeand(x1,x2,x3);
integer x3,x2,x1;
begin
if ¬(0=x1) then goto l1;
x3 := 0;
goto l999;
l1:
if ¬(0=x2) then goto l2;
x3 := 0;
goto l999;
l2:
x3 := 1;
l999:
end;
procedure negate(x1);
integer x1;
begin
if ¬(x1=0) then goto l1;
x1 := 1;
goto l999;
l1:
x1 := 0;
l999:
end;
Boolean procedure isarithmeticexpr(val);
integer val;
begin
integer y;
isarithmeticexpr := true;
if ¬isterm(val) then goto l1;
lrst:
begin
if ¬is(1209) then goto l2;
if ¬isterm(y) then goto l0;
val := val+y;
goto lrst;
l2:
if ¬is(1205) then goto l3;
if ¬isterm(y) then goto l0;
val := val-y;
goto lrst;
l3:
if ¬is(1203) then goto l4;
if ¬isterm(y) then goto l0;
val := xor(val,y);
goto lrst;
l4:
goto l999;
end;
l1:
l0: isarithmeticexpr := false;
l999:
end;
Boolean procedure isterm(val);
integer val;
begin
integer y;
isterm := true;
if ¬isfactor(val) then goto l1;
lrst:
begin
if ¬is(1217) then goto l2;
if ¬isfactor(y) then goto l0;
val := val×y;
goto lrst;
l2:
if ¬is(1204) then goto l3;
if ¬isfactor(y) then goto l0;
val := and(val,y);
goto lrst;
l3:
goto l999;
end;
l1:
l0: isterm := false;
l999:
end;
Boolean procedure isfactor(val);
integer val;
begin isfactor := true;
lrst:
if ¬is(1209) then goto l1;
goto lrst;
l1:
if ¬is(1205) then goto l2;
if ¬isfactor(val) then goto l0;
val := -val;
goto l999;
l2:
if ¬is(1103) then goto l3;
if ¬isfactor(val) then goto l0;
val := abs(val);
goto l999;
l3:
if ¬isprimary(val) then goto l4;
goto l999;
l4:
l0: isfactor := false;
l999:
end;
Boolean procedure isprimary(val);
integer val;
begin
integer y;
isprimary := true;
if ¬is(1117) then goto l1;
next(val);
goto l999;
l1:if ¬is(1005) then goto l2;
next(y);
val := lwork[y-0];
goto l999;
l2:if ¬is(1111) then goto l3;
val := read;
goto l999;
l3:if ¬isaddress(y) then goto l4;
addr := y;
mem;
val := m;
goto l999;
l4:if ¬issingleregister(val) then goto l5;
goto l999;
l5:if ¬is(1112) then goto l6;
val := 1;
goto l999;
l6:if ¬is(1107) then goto l7;
val := 0;
goto l999;
l7:if ¬is(1207) then goto l8;
if ¬isexpr(val) then goto l0;
if ¬is(1218) then goto l0;
goto l999;
l8:
l0: isprimary := false;
l999:
end;
Boolean procedure issingleregister(val);
integer val;
begin issingleregister := true;
if ¬is(101) then goto l1;
val := a;
goto l999;
l1:if ¬is(103) then goto l2;
val := b;
goto l999;
l2:if ¬is(106) then goto l3;
val := fh;
goto l999;
l3:if ¬is(107) then goto l4;
val := ft;
goto l999;
l4:if ¬is(114) then goto l5;
val := ot;
goto l999;
l5:if ¬is(111) then goto l6;
val := or;
goto l999;
l6:if ¬is(117) then goto l7;
val := s;
goto l999;
l7:if ¬is(102) then goto l8;
val := tlink;
goto l999;
l8:if ¬is(104) then goto l9;
val := c;
negate(val);
goto l999;
l9:if ¬is(115) then goto l10;
val := of;
goto l999;
l10:if ¬is(108) then goto l11;
val := iv;
goto l999;
l11:if ¬is(116) then goto l12;
val := ov;
goto l999;
l12:if ¬is(109) then goto l13;
val := itv;
goto l999;
l13:if ¬is(110) then goto l14;
val := lt;
goto l999;
l14:if ¬is(112) then goto l15;
val := bt;
goto l999;
l15:if ¬is(113) then goto l16;
val := nint;
goto l999;
l16: issingleregister := false;
l999:
end;
procedure startmonitor;
begin prescan;
newpage;
program;
end;
procedure master;
begin
integer pold;
sva := false;
pold := pin;
if ¬(errornumber≥100 ∧ errornumber<200) then goto l1;
jumpto(interdata);
instruction;
goto terminate;
goto l999;
l1: if ¬(errornumber≥300 ∧ errornumber<400) then goto l2;
jumpto(interaddr);
instruction;
goto terminate;
goto l999;
l2: if ¬(errornumber≥400 ∧ errornumber<500) then goto l3;
jumpto(interpari);
instruction;
goto terminate;
goto l999;
l3: if ¬(errornumber≥200 ∧ errornumber<300) then goto l4;
jumpto(interinst);
instruction;
goto terminate;
goto l999;
l4: if ¬(errornumber≥500 ∧ errornumber<600) then goto l5;
jumpto(interprot);
instruction;
goto terminate;
goto l999;
l5: if ¬(errornumber=1) then goto l6;
displaystatus;
goto terminate;
goto l999;
l6: if ¬(errornumber=2) then goto l7;
instructionlist;
goto l999;
l7: if ¬(errornumber=3) then goto l8;
interrupt(pexec,ot);
pin := pold;
goto l999;
l8: if ¬(errornumber=4) then goto l9;
interrupt(pwrte,addr);
pin := pold;
goto l999;
l9:
l999:
end;
procedure interrupt(p,pl);
integer pl,p;
begin
integer from,to,count,q;
q := p;
lnxq:
if ¬(q=0) then goto l1;
goto l999;
l1:
from := lwork[q-0];
to := lwork[q-1];
count := lwork[q-2];
begin
if ¬(from≤pl) then goto l3;
if ¬(pl≤to) then goto l3;
count := count-1;
lwork[q-2] := count;
if ¬(count≤0) then goto l3;
count := lwork[q-3];
lwork[q-2] := count;
pin := lwork[q-4];
jumpto(pin);
instruction;
goto l999;
l3:
q := lwork[q-5];
goto lnxq;
end;
l999:
end;
procedure terminate;
begin printtext(“terminate”);
master
end;
procedure report reading(addr, val);
value addr, val;
integer addr, val;
begin
nlcr;
printtext(“read ”);
proct(addr, 9);
proct(val, 9)
end;
procedure report writing(addr, val);
value addr, val;
integer addr, val;
begin
nlcr;
printtext(“write ”);
proct(addr, 9);
proct(val, 9)
end;
procedure report eoi;
begin
nlcr;
printtext(“e o inst”)
end;
procedure report eod(addr, instr);
value addr, instr;
integer addr, instr;
begin
nlcr;
printtext(“e o do ”);
proct(addr, 9);
proct(instr, 9)
end;
procedure report interrupt(ir addr);
value ir addr;
integer ir addr;
begin
nlcr;
printtext(“interr ”);
proct(ir addr, 9)
end;
procedure report skip;
begin
nlcr;
printtext(“skip ”)
end;
comment einde ad hoc master- en trace-procedures;
integer ir addr, error number;
Boolean sva, in monitor, trace, key;
real ccs, ccs1, ccs of, ccsmax, dcs, dcs max;
real jcnt, tcnt;
real array tlist[0 : 31];
procedure init monitor;
begin
ir addr := 0;
ccs := ccs1 := ccs of := dcs := 0;
error number := 999;
jcnt := tcnt := 0;
ccsmax := 1000000;
dcsmax := 100;
trace := sva := key := false;
in monitor := true;
start monitor
end init monitor;
integer procedure undef(ern);
value ern;
integer ern;
begin undef := 1;
ir addr := ern ÷ 1000;
error number := ern - ir addr × 1000;
if in monitor then terminate else
if filled[ir addr] impl (ir addr= 0 ∨ ov=0) then
begin
in monitor := true;
cg := 0;
master;
in monitor := false
end else begin
ingreep type := ingreep type + 2;
ov := 0;
goto ingreep
end
end undef;
procedure proct(m,dig);
value m,dig;
integer m, dig;
begin real n, x;
space(1);
if dig = 6 then x := m / tp15 else
begin
x := (if 1/m < 0 then m + tp27m1 else m) / tp24;
dig := 9
end;
rep:
n := entier(x);
prsym(n);
if dig= 7 then space(1);
dig := dig - 1;
if dig= 0 then goto out;
x := (x-n) × 8;
goto rep;
out:
space(1)
end proct;
integer procedure reoct;
begin
integer n;
skip:
n := resym;
if n < 10 then undef(151);
if n ≠ 120 then goto skip;
x := 0;
rep:
n := resym;
if n = 93 then n := resym;
if n < 8 then
begin
x := x × 8 + n;
goto rep
end;
if n ≠ 120 then undef(152);
if x > tp27m1 then undef(153);
if x > tp26m1 then x := x - tp27m1;
reoct := x
end reoct;
integer procedure oct(x);
value x;
real x;
begin
integer i, sgn, n;
real res;
if 1/x < 0 then begin
sgn := -1;
x := -x
end else sgn := 1;
x := (x + .05)÷9; comment by editor: guessed transliteration of /\9 - unlikely to be correct because integer divide is already '/'. Maybe Modulo? ;
res := 0;
for i := 1 step 1 until 9 do
begin x := x × 10;
n := entier(x);
x := x - n;
res := res × 8 + n
end;
oct := (if res > tp26m1 then res - tp27m1 else res) × sgn
end oct;
procedure tn(s, x);
value x;
real x;
string s;
begin
integer i, n;
i := 0;
for n := stringsymbol(i, s) while n ≠ 255,
93 while i < 7 do
begin
i := i + 1;
prsym(n)
end;
proct(x, 9); space(5)
end tn;
procedure dump(from, to);
value from, to;
integer from, to;
begin
real i, j, x;
if from < 0 ∨ to > max addr then undef(161);
if line number ≠ 1 ∨ print pos ≠ 0 then new page;
printtext(“geheugendump van”);
proct(from, 6);
printtext(“tot”);
proct(to,6);
nlcr;
addr := from;
goto heading;
rep:
addr := addr + 1;
repa:
if addr > to then goto out;
if ¬ filled[addr] then goto rep;
printtext(“loc”);
addr := addr ÷ 8 × 8;
proct(addr,6);
prsym(65);
proct(addr + 7,6);
i := 0;
repi:
j := 0;
space(8);
repj:
if filled[addr] then
begin mem1;
proct(m, 9) end else space(12);
addr := addr + 1;
if addr > to then goto out;
j := j + 1;
if j < 4 then goto repj;
i := i + 1;
if i < 2 then goto repi;
nlcr;
if line number = 1 then
heading:
begin space(25);
for i := 0 step 1 until 7 do
begin
if i = 4 then space(8);
printtext(“ .....”); prsym(i)
end;
nlcr;
nlcr;
end;
goto repa;
out:
nlcr;
for i := 1 step 1 until 144 do prsym(66);
nlcr
end dump;
procedure print tlist;
begin
integer max,tcnt1, num, x;
nlcr;
printtext(“vorige sprongadressen”);
nlcr;
max := if jcnt > 32 then 32 else jcnt;
tcnt1 := tcnt;
for num := 1 step 1 until max do
begin
space(2);
fixt(2, 0, -num);
x := tlist[tcnt1];
if 1/x < 0 then proct(and(x, tp26m1), 9) else
begin
space(4);
proct(x, 6)
end;
tcnt1 := tcnt1 - 1;
if tcnt1 = -1 then tcnt1 := 31
end;
nlcr
end print tlist;
procedure print dgp;
begin
integer i, j;
nlcr;
printtext(“protectiebits”);
for i := 0 step 1 until aantal kasten - 1 do
begin
nlcr;
printtext(“kast”);
absfixt(2, 0, i);
printtext(“ dp ”);
for j := 0 step 1 until 3 do
prsym((even(dgp[32 × i + 8 × j]) + 1) / 2);
printtext(“ gp ”);
for j := 0 step 1 until 31 do
prsym((dgp[32 × i + j] + 1) ÷ 2)
end;
nlcr
end print dgp;
comment dp 0 1 0 1
gp 0 0 1 1
dgp -1 0 1 2;
procedure print regs;
begin
nlcr;
printtext(“registers”);
nlcr;
tn(“tlink”, tlink );
tn(“fh”, fh );
tn(“ft”, ft );
tn(“a”, a );
tn(“s”, s );
tn(“b”, b );
tn(“or”, or );
tn(“addr”, addr );
tn(“m”, m );
tn(“ir addr”,ir addr);
nlcr;
printtext(“jcnt (dec)”);
absfixt(10, 0, jcnt);
space(10);
printtext(“ccs (dec)”);
absfixt(10, 0, ccs );
printtext(“+”);
absfixt(6, 0, ccs of);
space(10);
printtext(“drum cnt (dec)”);
absfixt(10, 0, drum cnt);
nlcr
end print regs;
procedure print charon;
begin
integer i;
nlcr;
nlcr;
printtext(“charon”);
nlcr;
printtext(“apparaat af if lvif”);
for i := 0 step 1 until 39 do
if read q(i, ifv0, ifv1) + read q(i, lvifv0, lvifv1) = 2 then
begin
nlcr;
absfixt(7, 0, i);
absfixt(4, 0, readq(i, af0, af1));
absfixt(4, 0, readq(i, if0, if1));
absfixt(4, 0, readq(i, lvif0, lvif1))
end;
nlcr;
for i := 1 step 1 until 26 do prsym(66);
nlcr
end print charon;
comment einde monitor procedures;
comment herkennen van instructies;
real x, y, z, u, v, w, tp26, tp27, tp27m1;
real i,l,n;
real array tp[0: 27];
integer tp1, tp2, tp3, tp4, tp5, tp6, tp7, tp8, tp9, tp10,
tp11, tp12, tp13, tp14, tp15, tp16, tp17, tp18, tp19, tp20,
tp21, tp22, tp23, tp24, tp25;
integer tp14m1, tp18m3, tp18m1, tp26m1;
comment hulp-velden uit or: ;
real b14t0,b16c15,b18c17,b20c19,b20,
b14t12, b11t0, b11t5, b11t9, b8t6, b5t0,
b4t0,b24,b21,b14t9,b8t0;
comment switches voor het herkennen van instructies: ;
switch sb26t22 :=
aplus,
aeq,
if b20c19 = 1 then aplusdyn else plusa,
if b20c19 = 1 then aeqdyn else
if b16c15 = 1 then aplusa else eqa,
splus,
seq,
if b20c19 = 1 then splusdyn else pluss,
if b20c19 = 1 then seqdyn else
if b16c15 = 1 then spluss else eqs,
mulas,
muls,
axor,
aand,
divas,
diva,
sxor,
sand,
bplus,
beq,
if b20c19 = 1 then bplusdyn else plusb,
if b20c19 = 1 then beqdyn else
if b16c15 = 1 then bplusb else eqb,
if b18c17 > 1 then dsw[undef(202)] else jump,
if b18c17 > 1 then dsw[undef(204)] else
if b21 = 0 then goto else
if b20c19 = 3 then gotodyn else dsw[undef(203)],
repn,
if b18c17 = 0 then subn else
if b18c17 = 2 then subn else
if b21 = 0 then subc else if b20c19 = 1 then subcdyn else do,
if b16c15 = 1 then (if b20c19 = 1 then dsw[undef(228)] else gplus) else fplus,
if b16c15 = 1 then
(if b20c19 = 1 then dsw[undef(229)] else geq )
else feq,
if b21 = 0 then
(if b20c19 = 1 ∨ b20c19 = 3 ∨ b18c17 ≠ 0 then
dsw[undef(232)] else operate)
else dsw[undef(200)],
tabel6,
if b16c15 = 1 then
(if b20c19 = 1 then dsw[undef(230)] else gtd )
else ftd,
if b16c15 = 1 then
(if b20c19 = 1 then dsw[undef(231)] else eqg )
else if b20c19 = 1 then feqdyn else eqf,
dsw[undef(201)],
tabel7;
switch sb24c21c6c5 :=
lca, lua, lcas, luas,
rca, rua, rcas, ruas,
lcs, lus, lcsa, lusa,
rcs, rus, rcsa, rusa;
comment hulp-procedures: ;
procedure itp(x);
real x;
begin x := tp[i];
i := i + 1
end itp;
comment initialisatie: ;
tp[0] := 1;
for i := 1 step 1 until 27 do tp[i] := tp[i - 1] × 2;
i := 1;
itp(tp1);
itp(tp2);
itp(tp3);
itp(tp4);
itp(tp5);
itp(tp6);
itp(tp7);
itp(tp8);
itp(tp9);
itp(tp10);
itp(tp11);
itp(tp12);
itp(tp13);
itp(tp14);
itp(tp15);
itp(tp16);
itp(tp17);
itp(tp18);
itp(tp19);
itp(tp20);
itp(tp21);
itp(tp22);
itp(tp23);
itp(tp24);
itp(tp25);
itp(tp26);
itp(tp27);
tp14m1 := tp14 - 1;
tp18m3 := tp18 - 3;
tp18m1 := tp18 - 1;
tp26m1 := tp26 - 1;
tp27m1 := tp27 - 1;
set random(date/622598 + time/7200);
init parlist;
init x8;
init memory;
init charon;
init monitor;
bva1:
in monitor := false;
basis cyclus 1:
if ot > tp18m3 then
begin comment dynamische stop;
if dyst stat < 2 then
begin
dyst stat := dyst stat + 1;
goto skip
end else if charon teller > 0 then
begin
ccs := ccs + charon teller;
dyst stat := 0; goto skip
end else undef(1)
end else dyst stat := 0;
cg := 0;
addr := ot;
mem;
or := m;
if noexec[ot] then undef(4);
ot := ot + 1;
if ot > max addr then undef(26358);
basis cyclus 2:
if ccs ≥ ccsmax then undef(2);
flag := false;
y := if 1/or < 0 then or + tp27m1 else or;
x := y ÷ tp15;
b14t0 := y - x × tp15;
y := x;
x := y ÷ tp2;
b16c15 := y - x × tp2;
y := x;
x := y ÷ tp2;
b18c17 := y - x × tp2;
y := x;
x := y ÷ tp2;
b20c19 := y - x × tp2;
y := x;
x := y ÷ tp1;
b21 := y - x × tp1;
goto sb26t22[x + 1];
tabel6:
b24 := 0;
goto tabel;
tabel7:
b24 := 1;
tabel:
b20 := b20c19 ÷ 2;
if b20 + b20 ≠ b20c19 then
begin
if bitstring(26, 17, or) = 1004 ∧ b14t0 = 31488 then
goto memprot;
undef(206)
end b19 = 1;
b14t12 := b14t0 ÷ tp12;
b11t0 := b14t0 - b14t12 × tp12;
if b14t12 = 0 then
begin comment shift, nora, nors, noras, rgt, ten;
b11t5 := b11t0 ÷ tp5;
b4t0 := b11t0 - b11t5 × tp5;
if b11t5 < 4 then goto shift else
if b11t5 = 5 then
begin
if b21 + b20 + b4t0 = 0 then
goto if b24 = 0 then nora else nors
end else if b11t5 = 7 then
begin
if b24 + b21 + b20 + b4t0 = 0 then goto noras
end else if b11t5 > 7 ∧ b11t5 < 11 then
begin
if b24 + b20 = 0 ∧ b4t0 < 3 then goto rgt
end else if b11t5 = 32 then
begin
if b24 = 1 ∧ b21 + b20 = 0 ∧ b4t0 < 2 then goto ten
end
end else if b14t12 = 6 then
begin comment clp, int, maak iv, maak ov, itvon;
b11t9 := b11t0 ÷ tp9;
b8t0 := b11t0 - b11t9 × tp9;
if b21 + b20 + b18c17 + b8t0 = 0 then
begin
if b11t9 = 0 then goto maak iv;
if b11t9 = 1 then goto maak ov;
if b11t9 = 2 ∧ b24 = 1 then goto itvon;
if b11t9 = 3 ∧ b24 = 0 then goto clp;
if b11t9 = 4 ∧ b24 = 0 then goto int
end
end else if b14t12 = 7 then
begin comment maak q, lees q;
b11t9 := b11t0 ÷ tp9;
b8t0 := b11t0 - b11t9 × tp9;
b 8t6 := b 8t0 ÷ tp6;
b5t0 := b 8t0 - b 8t6 × tp6;
if b11t9 < 4 then
begin
if b21 + b18c17 + b8t6 = 0 then goto maak q
end else
if b21 = 0 ∧ b8t6 < 2 ∧ b5t0 < 2 then goto lees q
end tabel;
undef(205);
aplusdyn: b20c19 := 4;
goto aplus;
aeqdyn: b20c19 := 4;
goto aeq;
splusdyn: b20c19 := 4;
goto splus;
seqdyn: b20c19 := 4;
goto seq;
bplusdyn: b20c19 := 4;
goto bplus;
beqdyn: b20c19 := 4;
goto beq;
gotodyn:
b20c19 := 4;
b21 := 0;
comment abnormale betekenis van b21;
goto goto;
subcdyn: b20c19 := 4;
goto subc;
feqdyn: b20c19 := 4;
goto feq;
aeq:
if b16c15 > 1 then
begin
if b16c15 ≠ c+2 then goto skip
end;
calc addr;
if addr op then val := addr else
begin
cg := itv + itv + 1;
memreg;
val := m
end;
if mc addr then bdown1;
if b21 = 1 then val := -val;
if b18c17 > 0 then cond;
if b16c15 ≠ 1 then a := val;
goto time0;
seq:
if b16c15 > 1 then
begin if b16c15 ≠ c+2 then goto skip end;
calc addr;
if addr op then val := addr else
begin
cg := itv + itv + 1;
memreg;
val := m
end;
if mc addr then bdown1;
if b21 = 1 then val := -val;
if b18c17 > 0 then cond;
if b16c15 ≠ 1 then s := val;
goto time0;
beq:
if b16c15 > 1 then
begin
if b16c15 ≠ c+2 then goto skip
end;
calc addr;
if addr op then val := addr else
begin
cg := itv + itv + 1;
memreg;
val := m
end;
if mc addr then bdown1;
if b21 = 1 then val := -val;
if b18c17 > 0 then cond;
if b16c15 ≠ 1 then b := val;
goto time0;
aplus:
if b16c15 > 1 then
begin
if b16c15 ≠ c+2 then goto skip
end;
calc addr;
if ddr op then val := addr else
begin
cg := itv + 1;
memreg;
val := m
end;
if mc addr then bdown1;
val := if b21 = 0 then a + val else a - val;
if abs(val) > tp26m1 then
begin of := 1;
val := if val > 0 then val - tp27m1 else val + tp27m1
end;
if b18c17 > 0 then cond;
if b16c15 ≠ 1 then a := val;
goto time0;
splus:
if b16c15 > 1 then
begin
if b16c15 ≠ c+2 then goto skip
end;
calc addr;
if addr op then val := addr else
begin
cg := itv + 1;
memreg;
val := m
end;
if mc addr then bdown1;
val := if b21 = 0 then s + val else s - val;
if abs(val) > tp26m1 then
begin of := 1;
val := if val > 0 then val - tp27m1 else val + tp27m1
end;
if b18c17 > 0 then cond;
if b16c15 ≠ 1 then s := val;
goto time0;
bplus:
if b16c15 > 1 then
begin
if b16c15 ≠ c+2 then goto skip
end;
calc addr;
if addr op then val := addr else
begin
cg := itv + 1;
memreg;
val := m
end;
if mc addr then bdown1;
val := if b21 = 0 then b + val else b - val;
if abs(val) > tp26m1 then
begin of := 1;
val := if val > 0 then val - tp27m1 else val + tp27m1
end;
if b18c17 > 0 then cond;
if b16c15 ≠ 1 then b := val;
goto time0;
eqa:
if b16c15 > 1 then
begin
if b16c15 ≠ c+2 then goto skip
end;
calc addr;
if regop then undef(306);
val := if b21 = 0 then a else -a;
if b18c17 > 0 then cond;
m := val;
cg := itv;
stm1;
if mc addr then b up1;
goto time2;
eqs:
if b16c15 > 1 then
begin
if b16c15 ≠ c+2 then goto skip
end;
calc addr;
if regop then undef(307);
val := if b21 = 0 then s else -s;
if b18c17 > 0 then cond;
m := val;
cg := itv;
stm1;
if mc addr then b up1;
goto time2;
eqb:
if b16c15 > 1 then
begin
if b16c15 ≠ c+2 then goto skip
end;
calc addr;
if regop then undef(308);
val := if b21 = 0 then b else -b;
if b18c17 > 0 then cond;
m := val;
cg := itv;
stm1;
if mc addr then b up1;
goto time2;
aplusa:
flag := true;
plusa:
if b16c15 > 1 then
begin
if b16c15 ≠ c+2 then goto skip
end;
calc addr;
if regop then undef(309);
cg := 1;
mem1;
val := m;
val := if b21 = 0 then val + a else val - a;
if abs(val) > tp26m1 then
begin of := 1;
val := if val > 0 then val - tp27m1 else val + tp27m1
end;
if b18c17 > 0 then cond;
if flag ∨ b16c15 ≠ 1 then
begin
m := val;
cg := itv;
stm1
end;
if flag then a := m;
if mc addr then b up1;
goto time3;
spluss:
flag := true;
pluss:
if b16c15 > 1 then
begin
if b16c15 ≠ c+2 then goto skip
end;
calc addr;
if regop then undef(310);
cg := 1;
mem1;
val := m;
val := if b21 = 0 then val + s else val - s;
if abs(val) > tp26m1 then
begin of := 1;
val := if val > 0 then val - tp27m1 else val + tp27m1
end;
if b18c17 > 0 then cond;
if flag ∨ b16c15 ≠ 1 then
begin
m := val;
cg := itv;
stm1
end;
if flag then s := m;
if mc addr then b up1;
goto time3;
bplusb:
flag := true;
plusb:
if b16c15 > 1 then
begin
if b16c15 ≠ c+2 then goto skip
end;
calc addr;
if regop then undef(311);
cg := 1;
mem1;
val := m;
val := if b21 = 0 then val + b else val - b;
if abs(val) > tp26m1 then
begin of := 1;
val := if val > 0 then val - tp27m1 else val + tp27m1
end;
if b18c17 > 0 then cond;
if flag ∨ b16c15 ≠ 1 then
begin
m := val;
cg := itv;
stm1
end;
if flag then b := m;
if mc addr then b up1;
goto time3;
axor:
if b16c15 > 1 then
begin
if b16c15 ≠ c+2 then goto skip
end;
calc addr;
if addr op then val := addr else
begin
cg := 1;
memreg;
val := m
end;
if mc addr then bdown1;
val := xor(a, if b21 = 0 then val else -val);
if b18c17 > 0 then cond;
if b16c15 ≠ 1 then a := val;
goto time0;
sxor:
if b16c15 > 1 then
begin
if b16c15 ≠ c+2 then goto skip
end;
calc addr;
if addr op then val := addr else
begin
cg := 1;
memreg;
val := m
end;
if mc addr then bdown1;
val := xor(s, if b21 = 0 then val else -val);
if b18c17 > 0 then cond;
if b16c15 ≠ 1 then s := val;
goto time0;
aand:
if b16c15 > 1 then
begin
if b16c15 ≠ c+2 then goto skip
end;
calc addr;
if addr op then val := addr else
begin
cg := 1;
memreg;
val := m
end;
if mc addr then bdown1;
val := and(a, if b21 = 0 then val else -val);
if b18c17 > 0 then cond;
if b16c15 ≠ 1 then a := val;
goto time0;
sand:
if b16c15 > 1 then
begin
if b16c15 ≠ c+2 then goto skip
end;
calc addr;
if addr op then val := addr else
begin
cg := 1;
memreg;
val := m
end;
if mc addr then bdown1;
val := and(s, if b21 = 0 then val else -val);
if b18c17 > 0 then cond;
if b16c15 ≠ 1 then s := val;
goto time0;
muls:
if b16c15 = 1 then undef(223);
flag := true;
mulas:
if b16c15 = 1 then undef(222);
if b16c15 > 1 then
begin
if b16c15 ≠ c+2 then goto skip
end;
calc addr;
if addr op then val := addr else
begin
cg := 1;
memreg;
val := m
end;
if mc addr then bdown1;
if b21 = 1 then val := - val;
hulp1 := val;
comment voor ccs-metingen;
if flag then a := 0;
y := val×s + a;
if y=0 then a := s := y else
if abs(y)<tp26 then
begin
s := y;
a := if y>0 then 0 else -0
end else begin
y := val ÷ tp13;
z := y × tp13;
v := s ÷ tp13;
z := (s - v×tp13) × z + (val - z) × s + a;
w := z ÷ tp26;
s := z - w×tp26;
a := y × v + w;
if s=0 then s := sign(a)×0
end mulas;
if b18c17 > 0 then begin
val := a;
cond
end;
x := abs(hulp1)/tp26;
y := 26;
rep ccs mulas:
x := x + x;
y := y - 1;
ccs := ccs + 1;
if x≥1 then x := x - 1 else
begin x := x + x;
y := y - 1;
if x ≥ 1 then x := x - 1
end;
if x = 0 then ccs := ccs + (y+1) ÷ 2 else goto rep ccs mulas;
goto time2;
diva:
if b16c15 = 1 then undef(224);
flag := true;
divas:
if b16c15 = 1 then undef(225);
if b16c15 > 1 then
begin
if b16c15 ≠ c+2 then goto skip
end;
calc addr;
if addr op then val := addr else
begin
cg := 1;
memreg;
val := m
end;
if mc addr then bdown1;
if b21 = 1 then val := - val;
if abs(val) ≤ abs(a) then undef(103);
if flag then
s := if a = 0 then a else if a > 0 then 0 else -0 else
if ¬1/a>0 ≡ 1/s>0 then undef(102);
hulp1 := a;
if abs(a)<tp13 then
begin
y := a × tp26 + s;
s := y ÷ val;
a := y - s × val
end else begin
u := s ÷ tp13;
y := a × tp13 + u;
v := y ÷ val;
y := (y - v × val - u) × tp13 + s;
w := y ÷ val;
a := y - w × val;
s := v × tp13 + w
end diva, divas;
if a=0 then
a := if hulp1 = 0 then hulp1 else
if hulp1 > 0 then 0 else -0;
if b18c17 > 0 then
begin
val := a;
cond
end;
ccs := ccs + 28;
goto time0;
ten:
if b16c15 = 1 then undef(211);
if b16c15 > 1 then
begin
if b16c15 ≠ c+2 then goto skip
end;
x := s × 10;
val := s := tail of(x);
if b4t0 = 0 then a := head of(x);
if b18c17 > 0 then cond;
goto time1;
noras:
if b16c15 = 1 then undef(219);
flag := true;
shift:
if b16c15 = 1 then undef(218);
if b16c15 > 1 then
begin
if b16c15 ≠ c+2 then goto skip
end;
if b20 =0 then l := b4t0 else
begin l := b4t0 + b;
if l < 0 ∨ l > 31 then undef(140)
end;
if b11t5 > 1 then
begin comment ook voor noras;
nega := 1/a < 0;
negs := 1/s < 0;
end;
if flag then
begin comment noras;
b := if a = 0 then norm shift
(if nega ∧ ¬negs then s - tp26m1 else
if negs ∧ ¬nega then s + tp26m1 else s, x) + 26 else
norm shift(a, x);
l := n := b; goto lcas
end;
n := l;
goto sb24c21c6c5[(b24 + b24 + b21) × 4 + b11t5 + 1];
lca:
a := circ shift(a, n);
if b18c17 > 0 then
begin
val := a;
cond
end;
goto timel2;
lcs:
s := circ shift(s, n);
if b18c17 > 0 then
begin
val := s;
cond
end;
goto timel2;
lcas:
if n>26 then
begin
n := 53-n;
goto rcas2
end;
lcas2:
if n≠0 then
begin
if nega then a := a + tp27m1;
if negs then s := s + tp26m1;
hulp1 := tp[n];
hulp2 := tp26/hulp1;
hulp3 := hulp2 + hulp2;
ah := a ÷ hulp3;
sh := s ÷ hulp2;
a := -((ah × hulp3 - a) × hulp1 - sh);
s := -((sh × hulp2 - s) × hulp1 - ah);
if a ≥ tp26 then a := a - tp27m1;
if negs then s := s - tp26m1;
end;
if b18c17 > 0 then
begin
val := a;
cond
end;
goto timel2;
lcsa:
if n>27 then
begin
n := 54 - n;
goto rcsa2
end;
lcsa2:
if n≠0 then
begin
if negs then s := s + tp27m1;
if nega then a := a + tp27m1;
hulp1 := tp[n];
hulp3 := tp27/hulp1;
sh := s ÷ hulp3;
ah := a ÷ hulp3;
s := -((sh × hulp3 - s) × hulp1 - ah);
a := -((ah × hulp3 - a) × hulp1 - sh);
if s ≥ tp26 then s := s - tp27m1;
if a ≥ tp26 then a := a - tp27m1;
end;
if b18c17 > 0 then
begin
val := s;
cond
end;
goto timel2;
rca:
a := circ shift(a, -n);
if b18c17 > 0 then
begin
val := a;
cond
end;
goto timel2;
rcs:
s := circ shift(s, -n);
if b18c17 > 0 then
begin
val := s;
cond
end;
goto timel2;
rcas:
if n>26 then
begin
n := 53-n;
goto lcas2
end;
rcas2:
if n≠0 then
begin
if nega then a := a + tp27m1;
if negs then s := s + tp26m1;
hulp1 := tp[n];
hulp2 := tp26/hulp1;
hulp3 := hulp2 + hulp2;
ah := a ÷ hulp1;
sh := s ÷ hulp1;
at := ah × hulp1 - a;
a := -((sh × hulp1 - s) × hulp3 - ah);
s := -(at × hulp2 - sh);
if a ≥ tp26 then a := a - tp27m1;
if negs then s := s - tp26m1;
end;
if b18c17 > 0 then
begin
val := a;
cond
end;
goto timel2;
rcsa:
if n>27 then
begin
n := 54 - n;
goto lcsa2
end;
rcsa2:
if n≠0 then
begin
if negs then s := s + tp27m1;
if nega then a := a + tp27m1;
hulp1 := tp[n];
hulp3 := tp27/hulp1;
sh := s ÷ hulp1;
ah := a ÷ hulp1;
st := sh × hulp1 - s;
s := -((ah × hulp1 - a) × hulp3 - sh);
a := -(st × hulp3 - ah);
if s ≥ tp26 then s := s - tp27m1;
if a ≥ tp26 then a := a - tp27m1;
end;
if b18c17 > 0 then
begin
val := s;
cond
end;
goto timel2;
lua:
if n ≥ 26 then a := sign(a) × 0 else
if a ≠ 0 ∧ n ≠ 0 then
begin
hulp2 := tp[26 - n];
at := a - a ÷ hulp2 × hulp2;
a := if at = 0 then sign(a) × 0 else tp26 / hulp2 × at
end;
if b18c17 > 0 then
begin
val := a;
cond
end;
goto timel;
lus:
if n ≥ 26 then s := sign(s) × 0 else
if s ≠ 0 ∧ n ≠ 0 then
begin
hulp2 := tp[26 - n];
st := s - s ÷ hulp2 × hulp2;
s := if st = 0 then sign(s) × 0 else tp26 / hulp2 × st
end;
if b18c17 > 0 then
begin
val := s;
cond
end;
goto timel;
luas:
if n > 26 then
begin
if negs then s := s + tp26m1;
hulp1 := tp[n - 26];
hulp2 := tp26/hulp1;
a := -(s ÷ hulp2 × hulp2 - s) × hulp1;
s := if negs then -tp26m1 else 0;
if nega then
begin
a := a - tp26m1 + hulp1 - 1;
s := s + tp26m1
end;
end else
if n ≠ 0 then
begin
if nega then a := a + tp26m1;
if negs then s := s + tp26m1;
hulp1 := tp[n];
hulp2 := tp26/hulp1;
sh := s ÷ hulp2;
a := -((a ÷ hulp2 × hulp2 - a) × hulp1 - sh);
s := -(sh × hulp2 - s) × hulp1;
if negs then s := s - tp26m1;
if nega then
begin a := a - tp26m1;
s := s + hulp1 - 1 end;
end;
if b18c17 > 0 then
begin
val := a;
cond
end;
goto timel2;
lusa:
if n>26 then
begin
if nega then a := a + tp27m1;
hulp1 := tp[n - 27];
hulp2 := tp26/hulp1;
s := -(a ÷ hulp2 × hulp2 - a) × hulp1;
a := 0;
if negs then
begin
s := s - tp26m1 + hulp1 - 1;
a := -0
end;
end else if n ≠ 0 then begin
if nega then a := a + tp27m1;
if negs then s := s + tp26m1;
hulp1 := tp[n];
hulp2 := tp26/hulp1;
hulp3 := hulp2 + hulp2;
ah := a ÷ hulp3;
a := -(ah × hulp3 - a) × hulp1;
s := -((s ÷ hulp2 × hulp2 - s) × hulp1 - ah);
if a ≥ tp26 then a := a - tp27m1;
if negs then
begin
s := s - tp26m1;
a := a + hulp1 - 1
end;
end;
if b18c17 > 0 then
begin
val := s;
cond
end;
goto timel2;
rua:
a := if n ≥ 26 then sign(a) × 0 else a ÷ tp[n];
if b18c17 > 0 then
begin
val := a;
cond
end;
goto timel;
rus:
s := if n ≥ 26 then sign(s) × 0 else s ÷ tp[n];
if b18c17 > 0 then
begin
val := s;
cond
end;
goto timel;
ruas:
if n>26 then
begin s := a÷tp[n-26];
a := if nega then -0 else 0;
if nega ∧ ¬negs then s := s + tp26m1 else
if negs ∧ ¬ nega then s := s - tp26m1
end else if n≠0 then
begin
hulp1 := tp[n];
hulp2 := tp26/hulp1;
ah := a ÷ hulp1;
if nega then a := a + tp26m1;
if negs then s := s + tp26m1;
s := -((a ÷ hulp1 × hulp1 - a) × hulp2 - s ÷ hulp1);
a := ah;
if negs then s := s - tp26m1;
end;
if b18c17 > 0 then
begin
val := a;
cond
end;
goto timel2;
rusa:
if n>26 then
begin a := s÷tp[n-27]; s := if negs then -0 else 0 end
else if n ≠ 0 then
begin
hulp1 := tp[n];
hulp3 := tp27/hulp1;
sh := s ÷ hulp1;
if negs then s := s + tp26m1;
if nega then a := a + tp27m1;
a := -((s ÷ hulp1 × hulp1 - s) × hulp3 - a ÷ hulp1);
s := sh;
if a ≥ tp26 then a := a - tp27m1
end;
if b18c17 > 0 then
begin
val := s;
cond
end;
goto timel2;
nora:
if b16c15 > 1 then
begin if b16c15 ≠ c+2 then goto skip end;
b := l := norm shift(a, val);
if b18c17 > 0 then cond;
if b16c15 ≠ 1 then a := val;
goto timel;
nors:
if b16c15 > 1 then
begin if b16c15 ≠ c+2 then goto skip end;
b := l := norm shift(s, val);
if b18c17 > 0 then cond;
if b16c15 ≠ 1 then s := val;
goto timel;
feq:
if b16c15 > 1 then
begin if b16c15 ≠ c+2 then goto skip end;
calc addr;
if addrop then begin valh := 0; valt := addr end else
if addr = 57 then
begin valh := fh; valt := ft end else
if addr = 59 then begin
valh := a;
valt := s
end else begin
cg := 0;
mem;
valh := m;
addr := addr + 1;
mem;
valt := m
end;
if mc addr then bdown2;
if signinc then of := 1;
if b21 = 1 then
begin
valh := -valh;
valt := -valt
end;
if b18c17 > 0 then condf;
if abs(valh) > tp14m1 then nint := 1;
fh := valh;
ft := valt;
goto time0;
eqf:
if b16c15 > 1 then
begin if b16c15 ≠ c+2 then goto skip end;
calc addr;
if b21 = 0 then
begin
valh := fh;
valt := ft
end else begin
valh := -fh;
valt := -ft
end;
if b18c17 > 0 then condf;
if abs(valh) > tp14m1 then nint := 1;
cg := 0;
m := valh;
stm;
addr := addr + 1;
m := valt;
stm;
if mc addr then b up2;
goto time0;
geq:
calc addr;
if addr = 57 then undef(341);
cg := 0;
memreg;
valt := m;
valh := sign(m) × 0;
if mc addr then bdown1;
if b21 = 1 then
begin
valh := -valh;
valt := -valt
end;
if b18c17 > 0 then condf;
fh := valh;
ft := valt;
goto time0;
eqg:
calc addr;
if regop then undef(312);
if b21 = 0 then begin
valh := fh;
valt := ft
end else begin
valh := -fh;
valt := -ft
end;
if b18c17 > 0 then condf;
if ¬(valh = 0 ∧ sign(1/valh) = sign(1/valt)) then nint := 1;
cg := 0;
m := valt;
stm1;
if mc addr then b up1;
goto time0;
ftd:
flag := true;
fplus:
if b16c15 > 1 then
begin
if b16c15 ≠ c+2 then goto skip
end;
calc addr;
if addrop then begin
valh := 0;
valt := addr
end else if addr = 57 then begin
valh := fh;
valt := ft
end else if addr = 59 then begin
valh := a;
valt := s
end else begin
cg := 0;
mem;
valh := m;
addr := addr + 1;
mem;
valt := m
end;
if mc addr then bdown2;
if signinc then of := 1;
x := compf(fh, ft);
y := compf(valh, valt);
if flag then
begin
if b21 = 0 then
begin
x := x × y;
ccs := ccs + 4;
ccsof := ccsof + 45
end else begin
if x = 0 ∧ y =0 then undef(120);
x := x / y;
ccs := ccs + 44;
ccsof := ccsof + 5
end
end else begin
x := if b21 =0 then x + y else x - y;
if b20c19 = 1 then ccs := ccs + 1;
ccsof := ccsof + 9
end;
valh := head of(x);
valt := tail of(x);
if b18c17 > 0 then condf;
if abs(valh) > tp14m1 then nint := 1;
fh := valh;
ft := valt;
goto time0;
gtd:
flag := true;
gplus:
calc addr;
if addr = 57 then undef(342);
cg := 0;
memreg;
valt := m;
valh := sign(m) × 0;
x := compf(fh, ft);
y := compose(valh, valt);
if flag then
begin
if b21 = 0 then
begin
x := x × y;
ccs := ccs + 5;
ccsof := ccsof + 43
end else begin
if x = 0 ∧ y =0 then undef(121);
x := x / y;
ccs := ccs + 45;
ccsof := ccsof + 5
end
end else begin
x := if b21 =0 then x + y else x - y;
ccsof := ccsof + 9
end;
valh := head of(x);
valt := tail of(x);
if b18c17 > 0 then condf;
if abs(valh) > tp14m1 then nint := 1;
fh := valh;
ft := valt;
goto time0;
jump:
flag := true;
goto:
if b16c15 > 1 then
begin
if b16c15 ≠ c+2 then goto skip
end else if b16c15 = 1 then
begin
if of = 0 then goto skip
end;
calc addr;
if mc addr then bdown1;
if b16c15 = 1 then of := 0;
if addrop then val := addr else
if addr = 62 then undef(343) else
begin
cg := 0;
memreg;
val := m
end;
if b21 = 1 then val := -val;
hulp1 := val;
if abs(val) > tp18m1 then val := star(val);
if flag then val := -(-ot - val);
if 1/val < 0 then undef(26350) else
if val > tp18m1 then val := star(val) else
if val > tp18m3 then else
if val > max addr then undef(26351);
jcnt := jcnt + 1;
tcnt := tcnt + 1;
if tcnt = 32 then tcnt := 0;
tlist[tcnt] := ot;
ot := val;
if b18c17 = 0 then goto time0;
y := (if 1/hulp1 < 0 then hulp1 + tp26m1 else hulp1) ÷ tp18;
x := y ÷ 2;
c := y - x - x;
y := x ÷ 2;
iv := x - y - y;
x := y ÷ 2;
lt := y - x - x;
y := x ÷ 2;
of := x - y - y;
x := y ÷ 2;
last par word := -(y - x - x - 1);
y := x ÷ 2;
nint := x - y - y;
x := y ÷ 2;
ov := y - x - x;
if bt = 0 ∨ x ≠ 0 then
begin
iv := ov := 1;
bt := 0
end;
goto time0;
repn:
if b16c15 > 1 then
begin if b16c15 ≠ c+2 then goto skip end else
if b16c15 = 1 then
begin if of = 0 then goto skip end;
if b16c15 = 1 then of := 0;
hulp1 := b21 + b21 + b21 + b21 + b20c19;
if ¬ filled[hulp1] then undef(25410);
x := m0[hulp1] -1;
if trace then report reading(hulp1, x + 1);
if x < -tp26m1 then x := tp26m1;
m0[hulp1] := x;
if trace then report writing(hulp1, x);
if if b18c17 = 0 then true else
if b18c17 = 1 then x ≥ 1 else
if b18c17 = 2 then x = 0 else x ≥ 0 then
begin
if b14t0 > max addr then undef(26354);
jcnt := jcnt + 1;
tcnt := tcnt + 1;
if tcnt = 32 then tcnt := 0;
tlist[tcnt] := ot;
ot := b14t0
end;
goto time0;
subn:
if b16c15 > 1 then
begin
if b16c15 ≠ c+2 then goto skip
end else if b16c15 = 1 then
begin
if of = 0 then goto skip
end;
if b16c15 = 1 then of := 0;
hulp2 := if ingreep type = 2 then tlink + tp24 else tlink;
x := b18c17 + b21;
hulp1 := x + x + x + x + b20c19 + 8;
if prot then
begin
if hulp1 > 15 ∧ dgp[0] ≥ 0 then undef(27503)
end;
filled[hulp1] := true;
m0[hulp1] := hulp2;
if trace then report writing(hulp1, hulp2);
if b14t0 > max addr then undef(26355);
jcnt := jcnt + 1;
tcnt := tcnt + 1;
if tcnt = 32 then tcnt := 0;
tlist[tcnt] := hulp2 - tp26m1;
ot := b14t0;
goto time0;
subc:
if b16c15 > 1 then
begin
if b16c15 ≠ c+2 then goto skip
end else if b16c15 = 1 then
begin
if of = 0 then goto skip
end;
calc addr;
subcd := bt = 1 ∧ b18c17 = 3;
gate := bt = 0 ∧ addr ≥ 256 ∧ addr < 320;
if mc addr then bdown1;
if b16c15 = 1 then of := 0;
if gate then prot := false;
if addrop then val := addr else
if addr = 62 then undef(344) else
begin
cg := 0;
memreg;
val := m
end;
if gate then prot := true;
hulp2 := if ingreep type = 2 then tlink + tp24 else tlink;
addr := if b > tp18m1 then star(b) else b;
if 1/addr < 0 then undef(26362);
if ¬addr op ∧ b = 0 then undef(26363);
if gate ∧ addr < 256 then undef(27502);
cg := 0;
m := hulp2;
stm;
b := b + 1;
if abs(val) > tp18m1 then val := star(val);
if 1/val < 0 then undef(26352) else
if val > tp18m3 then else
if val > max addr then undef(26353);
jcnt := jcnt + 1;
tcnt := tcnt + 1;
if tcnt = 32 then tcnt := 0;
tlist[tcnt] := hulp2 - tp26m1;
ot := val;
if gate then
begin
bt := 1;
iv := 0
end;
if subcd then iv := 0;
goto time2;
do:
if b16c15 > 1 then
begin
if b16c15 ≠ c+2 then goto skip
end else if b16c15 = 1 then
begin
if of = 0 then goto skip
end;
calc addr;
if mc addr then bdown1;
if b16c15 = 1 then of := 0;
if b18c17 = 3 then s := addr;
if addr = 62 then undef(345) else
begin
cg := 0;
memreg;
val := m
end;
or := val;
dcs := dcs + 1;
if dcs > dcs max then undef(3);
if key then
begin
ingreep type := 1;
ir addr := 28;
goto ingreep
end;
if trace then report eod(addr, val);
goto basis cyclus 2;
clp:
if b16c15 = 1 then undef(212);
if b16c15 > 1 then
begin if b16c15 ≠ c+2 then goto skip end;
c := parbit(last par word);
goto time0;
int:
if b16c15 > 1 then
begin if b16c15 ≠ c+2 then goto skip end;
val := nint;
nint := 0;
if b16c15 ≠ 1 then c := val;
goto time0;
rgt:
if b16c15 > 1 then
begin if b16c15 ≠ c+2 then goto skip end;
val := if b11t5 = 8 then a else
if b11t5 = 9 then s else b;
if b21 = 1 then val := - val;
if b18c17 > 0 then cond;
if b16c15 ≠ 1 then
begin
if b4t0 = 0 then a := val
else if b4t0 = 1 then s := val
else b := val
end;
goto time0;
lees q:
if b16c15 > 1 then
begin if b16c15 ≠ c+2 then goto skip end;
if b20 = 0 then l := b5t0 else
begin
l := b5t0 + b;
if l < 0 ∨ l > 1 then undef(141)
end;
if b11t9= 5 then val := if l = 0 then if0 else if1 else
if b11t9= 6 then val := if l = 0 then lvif0 else lvif1 else
undef(145);
if b8t6 = 1 then
val := and( val, if b24 = 0 then a else s);
if b18c17 > 0 then cond;
if b16c15 ≠ 1 then
begin if b24 = 0 then a := val else s := val end;
goto time1;
maak q:
if b16c15 = 1 then undef(213);
if b16c15 > 1 then
begin if b16c15 ≠ c+2 then goto skip end;
if bt = 0 then undef(130);
if b20 = 0 then l := b5t0 else
begin
if b < 0 then undef(142);
l := b5t0 + b
end;
if l > 39 then undef(143);
if b11t9 = 0 then
begin
if read q(l, afv0, afv1) = 0 then undef(147);
set q(l, af0, af1, b24); attendeer charon af(l)
end else
if b11t9 = 1 then
begin
if read q(l, ifv0, ifv1) = 0 then undef(148);
set q(l, if0, if1, b24)
end else
if b11t9 = 2 then
begin
if read q(l, lvifv0, lvifv1) = 0 then undef(149);
set q(l, lvif0, lvif1, b24)
end else
undef(146);
goto time1;
maak iv:
if b16c15 = 1 then undef(214);
if b16c15 > 1 then
begin if b16c15 ≠ c+2 then goto skip end;
if bt = 0 then undef(131);
iv := b24;
goto time0;
maak ov:
if b16c15 = 1 then undef(215);
if b16c15 > 1 then
begin if b16c15 ≠ c+2 then goto skip end;
if bt = 0 then undef(132);
ov := b24;
goto time0;
itvon:
if b16c15 = 1 then undef(216);
if b16c15 > 1 then
begin if b16c15 ≠ c+2 then goto skip end;
if bt = 0 then undef(133);
itv := 1;
goto basis cyclus1;
memprot:
if b16c15 = 1 then undef(217);
if b16c15 > 1 then
begin if b16c15 ≠ c+2 then goto skip end;
if bt = 0 then undef(134);
b20c19 := 2;
b14t0 := tp14;
calc addr;
cg := 0;
mem reg;
val := m;
hulp1 := bitstring(17,13,val) × 16;
if hulp1 > max addr ÷ tp9 then undef(26361);
val := circ shift(val, 3);
for hulp3 := 0 step 1 until 15 do
dgp[hulp1 + hulp3] :=
bit(hulp3, val) × 2 + bit(hulp3 ÷ 8 + 25, val) - 1;
b up1;
goto time2;
operate:
if b16c15 = 1 then undef(226);
if b16c15 > 1 then
begin if b16c15 ≠ c+2 then goto skip end;
if b20c19 ≠ 2 then l := b14t0 else l := b14t0 + b;
if l < 0 ∨ l > 15 then undef(154);
begin
comment by editor: Algol 60 standard later removed numeric labels: ;
switch act := l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15,l16;
goto act[l + 1];
l1: newpage; goto time0;
l2: s := rehep; goto time0;
l3: puhep(s); goto time0;
l4: col(s); goto time0;
l5: prsym(s); goto time0;
l6: s := resym; goto time0;
l7: pusym(s); goto time0;
l8: csym(s); goto time0;
l9: proct(s, 9); goto time0;
l10: s := reoct; goto time0;
l11: undef(155); goto time0;
l12: undef(156); goto time0;
l13: print(s); goto time0;
l14: s := read; goto time0;
l15: punch(s); goto time0;
l16: cpunch(s); goto time0;
end operate;
timel:
ccs := ccs + (if l < 16 then 1 else 2);
goto time0;
timel2:
ccs := ccs + 1 + (l - 1) ÷ 2;
goto time0;
skip:
if trace then report skip;
goto time0;
time3:
ccs := ccs + 1;
time2:
ccs := ccs + 1;
time1:
ccs := ccs + 1;
time0:
if ingreep type > 0 then
begin
bt := 1;
iv := 0
end;
ingreep type := itv := 0;
prot := bt = 0;
if sva then undef(0);
if charon teller > 0 then
begin
charon teller := charon teller - ccs + ccs1;
if charon teller ≤ 0 then wek charon
end;
ccs1 := ccs;
dcs := 0;
if trace then report eoi;
if key then
begin
ingreep type := 1;
ir addr := 28;
goto ingreep
end;
if iv = 0 then x := y := 0 else
begin
x := lvif0;
y := lvif1;
if if0 + if1 > 0 then
begin
if and(and(ie0, lvif0), if0) +
and(and(ie1, lvif1), if1) > 0 then
begin comment charon ingreep;
ingreep type := 1;
ir addr := 24; goto ingreep
end charon ingreep
end minstens een if aan
end horend;
ie0 := x;
ie1 := y;
comment bewaren voor volgende opdracht;
goto basis cyclus 1;
ingreep:
if trace then report interrupt(ir addr);
if itv = 1 then undef(135);
prot := false;
cg := 0;
addr := ir addr;
mem1;
or := m;
goto basis cyclus 2;
end extra end removed here;
comment ad hoc master- en trace-procedures, voor testdoeleinden;
procedure master;
begin
nlcr;
printtext(“simulatie beeindigd met foutnummer”);
absfixt(3, 0, error number);
if ingreep type = 1 then printtext(“in charon/sleutelingreep”);
if ingreep type = 2 then printtext(“in foutingreep”);
if ingreep type = 3 then printtext(“in foutingreep tijdens charon/sleutelingreep”);
print regs;
print tlist;
print dgp;
print charon;
dump(0, max addr);
exit
end master;
procedure start monitor;
begin
sva := true;
lsip;
sva := false;
cg := 0;
addr := 512;
m := 0;
stm;
bva
end start monitor;
end