ORG

Used Exports

BUILTINS: ABS BOOLEAN CHAR DEC INC INTEGER LONGINT LSL ODD ORD REAL SET
Files: File New Register Rider Set Write WriteByte WriteInt WriteString
ORB: Array Bool Const Int MakeFileName Mod ModDesc.orgname Module NilTyp NoTyp ObjDesc.class ObjDesc.dsc ObjDesc.exno ObjDesc.lev ObjDesc.name ObjDesc.next ObjDesc.rdo ObjDesc.type ObjDesc.val Object Par Pointer Proc Real Record String Typ Type TypeDesc.base TypeDesc.dsc TypeDesc.form TypeDesc.len TypeDesc.mno TypeDesc.nofpar TypeDesc.size TypeDesc.typobj Var byteType charType intType noType realType strType system topScope
ORS: Ident Mark Pos div eql minus neq plus rdiv str times
SYSTEM: VAL

MODULE ORG; (* NW 18.4.2016 / 4.4.2017 code generator in Oberon-07 for RISC*)
.MODULE ORG (KEY 98F2A948, VERSION 1, SIZE 0000F448)
.IMPORT Files (KEY 73F5D686)
.IMPORT ORS (KEY 76547166)
.IMPORT Texts (KEY 0B9E9984)
.IMPORT ORB (KEY 8A2CD362)
.TYPEDESC 00000020 FFFFFFFF FFFFFFFF FFFFFFFF 00000004 FFFFFFFF
.DATA 888CH
.STRING 88A4H "register stack overflow"
.STRING 88BCH "Reg Stack"
.STRING 88C8H "program too long"
.STRING 88DCH "not allowed"
.STRING 88E8H "address error"
.STRING 88F8H "not Boolean?"
.STRING 8908H "too many strings"
.STRING 891CH "level error, not accessible"
.STRING 8938H "bad index"
.STRING 8944H "error in Index"
.STRING 8954H "bad mode in DeRef"
.STRING 8968H "ext level too large"
.STRING 897CH "too many record types"
.STRING 8994H "bad divisor"
.STRING 89A0H "bad divisor"
.STRING 89ACH "bad modulus"
.STRING 89B8H "bad modulus"
.STRING 89C4H "not implemented"
.STRING 89D4H "bad mode in Store"
.STRING 89E8H "different length/size, not implemented"
.STRING 8A10H "inadmissible assignment"
.STRING 8A28H "string too long"
.STRING 8A38H "zero increment"
.STRING 8A48H "fixup impossible"
.STRING 8A5CH "too many locals"
.STRING 8A6CH "locals not allowed"
.STRING 8A80H "bad count"
.STRING 8A8CH "not addressable"
.STRING 8A9CH ".rsc"
.FIXUP T 0H
IMPORT SYSTEM, Files, ORS, ORB;
(*Code generator for Oberon compiler for RISC processor.
Procedural interface to Parser OSAP; result in array "code".
Procedure Close writes code-files*)
CONST WordSize* = 4;
StkOrg0 = -64; VarOrg0 = 0; (*for RISC-0 only*)
MT = 12; SB = 13; SP = 14; LNK = 15; (*dedicated registers*)
maxCode = 8000; maxStrx = 2400; maxTD = 120; C24 = 1000000H;
Reg = 10; RegI = 11; Cond = 12; (*internal item modes*)
(*frequently used opcodes*) U = 2000H; V = 1000H;
Mov = 0; Lsl = 1; Asr = 2; Ror= 3; And = 4; Ann = 5; Ior = 6; Xor = 7;
Add = 8; Sub = 9; Cmp = 9; Mul = 10; Div = 11;
Fad = 12; Fsb = 13; Fml = 14; Fdv = 15;
Ldr = 8; Str = 10;
BR = 0; BLR = 1; BC = 2; BL = 3;
MI = 0; PL = 8; EQ = 1; NE = 9; LT = 5; GE = 13; LE = 6; GT = 14;
TYPE Item* = RECORD
mode*: INTEGER;
type*: ORB.Type;
a*, b*, r: LONGINT;
rdo*: BOOLEAN (*read only*)
END ;
(* Item forms and meaning of fields:
mode r a b
--------------------------------
Const - value (proc adr) (immediate value)
Var base off - (direct adr)
Par - off0 off1 (indirect adr)
Reg regno
RegI regno off -
Cond cond Fchain Tchain *)
VAR pc*, varsize: LONGINT; (*program counter, data index*)
tdx, strx: LONGINT;
entry: LONGINT; (*main entry point*)
RH: LONGINT; (*available registers R[0] ... R[H-1]*)
curSB: LONGINT; (*current static base in SB*)
frame: LONGINT; (*frame offset changed in SaveRegs and RestoreRegs*)
fixorgP, fixorgD, fixorgT: LONGINT; (*origins of lists of locations to be fixed up by loader*)
check: BOOLEAN; (*emit run-time checks*)
version: INTEGER; (* 0 = RISC-0, 1 = RISC-5 *)
relmap: ARRAY 6 OF INTEGER; (*condition codes for relations*)
code: ARRAY maxCode OF LONGINT;
data: ARRAY maxTD OF LONGINT; (*type descriptors*)
str: ARRAY maxStrx OF CHAR;
(*instruction assemblers according to formats*)
PROCEDURE Put0(op, a, b, c: LONGINT);
BEGINa (*emit format-0 instruction*)
0000a .PROC 1
0000a(4EE90014): SUB SP, SP, 14H
0001a(AFE00000): STR LNK, SP, 0H
0002a(A0E00004): STR R0, SP, 4H
0003a(A1E00008): STR R1, SP, 8H
0004a(A2E0000C): STR R2, SP, CH
0005a(A3E00010): STR R3, SP, 10H
code[pc]b := ((a*10H +c b)d * 10H +e op)f * 10000H +g c;h INC(pc)
0006b .PROC 2
0006b .FIXUP D
0006b(8D000006): LDR SB, MT, MOD0 [ORG]
0007b(80D00018): LDR R0, SB, 18H [data]
0008b(41091F40): SUB R1, R0, 1F40H
0009b(DA08CA1C): BLCC MT [trap=1, pos=2250]
000Ab(40010002): LSL R0, R0, 2H
000Bb(00D80000): ADD R0, SB, R0
000Cc(81E00008): LDR R1, SP, 8H
000Dc(41110004): LSL R1, R1, 4H
000Ed(82E0000C): LDR R2, SP, CH
000Fd(01180002): ADD R1, R1, R2
0010e(41110004): LSL R1, R1, 4H
0011f(82E00004): LDR R2, SP, 4H
0012f(01180002): ADD R1, R1, R2
0013g(41110010): LSL R1, R1, 10H
0014h(82E00010): LDR R2, SP, 10H
0015h(01180002): ADD R1, R1, R2
0016h(A1000064): STR R1, R0, 64H
ENDi Put0;
0017i(40D80018): ADD R0, SB, 18H
0018i(81000000): LDR R1, R0, 0H
0019i(41180001): ADD R1, R1, 1H
001Ai(A1000000): STR R1, R0, 0H
001Bi(8FE00000): LDR LNK, SP, 0H
001Ci(4EE80014): ADD SP, SP, 14H
001Di(C700000F): B LNK
PROCEDURE Put1(op, a, b, im: LONGINT);
BEGINj (*emit format-1 instruction, -10000H <= im < 10000H*)
001Ej(4EE90014): SUB SP, SP, 14H
001Fj(AFE00000): STR LNK, SP, 0H
0020j(A0E00004): STR R0, SP, 4H
0021j(A1E00008): STR R1, SP, 8H
0022j(A2E0000C): STR R2, SP, CH
0023j(A3E00010): STR R3, SP, 10H
IF im < 0 THENk INC(op, V) ENDl ;
0024k(80E00010): LDR R0, SP, 10H
0025k(40090000): SUB R0, R0, 0H
0026k(ED000003): BGE 3 [002AH]
0027l(80E00004): LDR R0, SP, 4H
0028l(40081000): ADD R0, R0, 1000H
0029l(A0E00004): STR R0, SP, 4H
code[pc]m := (((a+40H)n * 10H +o b)p * 10H +q op)r * 10000H +s (im MOD 10000H)t;u INC(pc)
002Am .FIXUP D
002Am(8D000024): LDR SB, MT, MOD0 [ORG]
002Bm(80D00018): LDR R0, SB, 18H [data]
002Cm(41091F40): SUB R1, R0, 1F40H
002Dm(DA09A21C): BLCC MT [trap=1, pos=2466]
002Em(40010002): LSL R0, R0, 2H
002Fm(00D80000): ADD R0, SB, R0
0030n(81E00008): LDR R1, SP, 8H
0031n(41180040): ADD R1, R1, 40H
0032o(41110004): LSL R1, R1, 4H
0033p(82E0000C): LDR R2, SP, CH
0034p(01180002): ADD R1, R1, R2
0035q(41110004): LSL R1, R1, 4H
0036r(82E00004): LDR R2, SP, 4H
0037r(01180002): ADD R1, R1, R2
0038s(41110010): LSL R1, R1, 10H
0039t(82E00010): LDR R2, SP, 10H
003At(4224FFFF): AND R2, R2, FFFFFFFFH
003Bu(01180002): ADD R1, R1, R2
003Cu(A1000064): STR R1, R0, 64H
ENDv Put1;
003Dv(40D80018): ADD R0, SB, 18H
003Ev(81000000): LDR R1, R0, 0H
003Fv(41180001): ADD R1, R1, 1H
0040v(A1000000): STR R1, R0, 0H
0041v(8FE00000): LDR LNK, SP, 0H
0042v(4EE80014): ADD SP, SP, 14H
0043v(C700000F): B LNK
PROCEDURE Put1a(op, a, b, im: LONGINT);
BEGINw (*same as Put1, but with range test -10000H <= im < 10000H*)
0044w(4EE90014): SUB SP, SP, 14H
0045w(AFE00000): STR LNK, SP, 0H
0046w(A0E00004): STR R0, SP, 4H
0047w(A1E00008): STR R1, SP, 8H
0048w(A2E0000C): STR R2, SP, CH
0049w(A3E00010): STR R3, SP, 10H
IF (im >= -10000H)x & (yim <= 0FFFFH)z THENa Put1(op,b a,c b,d im)e
004Ax(80E00010): LDR R0, SP, 10H
004Bx(50090000): SUB R0, R0, 0H
004Cy(E5000009): BLT 9 [0056H]
004Dz(80E00010): LDR R0, SP, 10H
004Ez(4009FFFF): SUB R0, R0, FFFFFFFFH
004Fa(EE000006): BGT 6 [0056H]
0050b(80E00004): LDR R0, SP, 4H
0051c(81E00008): LDR R1, SP, 8H
0052d(82E0000C): LDR R2, SP, CH
0053e(83E00010): LDR R3, SP, 10H
ELSEf Put1g(Mov+U,h RH,i 0,j im DIV 10000H)k;l
0054f(F7FFFFC9): BL -55 [001EH]
0055g(E7000018): B 24 [006EH]
0056h(40002000): MOV R0, R0, 2000H
0057i .FIXUP D
0057i(8D00002D): LDR SB, MT, MOD0 [ORG]
0058i(81D0002C): LDR R1, SB, 2CH [data]
0059j(42000000): MOV R2, R0, 0H
005Ak(83E00010): LDR R3, SP, 10H
005Bk(43320010): ASR R3, R3, 10H
005Cl(F7FFFFC1): BL -63 [001EH]
IF im MOD 10000H #m 0 THENn Put1(Ior,o RH,p RH,q im MOD 10000H)r ENDs ;
005Dm(80E00010): LDR R0, SP, 10H
005Em(4004FFFF): AND R0, R0, FFFFFFFFH
005Fn(40090000): SUB R0, R0, 0H
0060n(E1000007): BEQ 7 [0068H]
0061o(40000006): MOV R0, R0, 6H
0062p .FIXUP D
0062p(8D00000B): LDR SB, MT, MOD0 [ORG]
0063p(81D0002C): LDR R1, SB, 2CH [data]
0064q(82D0002C): LDR R2, SB, 2CH
0065r(83E00010): LDR R3, SP, 10H
0066r(4334FFFF): AND R3, R3, FFFFFFFFH
0067s(F7FFFFB6): BL -74 [001EH]
Put0(op,t a,u b,v RH)w
0068t(80E00004): LDR R0, SP, 4H
0069u(81E00008): LDR R1, SP, 8H
006Av(82E0000C): LDR R2, SP, CH
006Bw .FIXUP D
006Bw(8D000009): LDR SB, MT, MOD0 [ORG]
006Cw(83D0002C): LDR R3, SB, 2CH [data]
ENDx
006Dx(F7FFFF92): BL -110 [0000H]
ENDy Put1a;
006Ey(8FE00000): LDR LNK, SP, 0H
006Fy(4EE80014): ADD SP, SP, 14H
0070y(C700000F): B LNK
PROCEDURE Put2(op, a, b, off: LONGINT);
BEGINz (*emit load/store instruction*)
0071z(4EE90014): SUB SP, SP, 14H
0072z(AFE00000): STR LNK, SP, 0H
0073z(A0E00004): STR R0, SP, 4H
0074z(A1E00008): STR R1, SP, 8H
0075z(A2E0000C): STR R2, SP, CH
0076z(A3E00010): STR R3, SP, 10H
code[pc]a := ((op * 10H +b a)c * 10H +d b)e * 100000H +f (off MOD 100000H)g;h INC(pc)
0077a .FIXUP D
0077a(8D00000C): LDR SB, MT, MOD0 [ORG]
0078a(80D00018): LDR R0, SB, 18H [data]
0079a(41091F40): SUB R1, R0, 1F40H
007Aa(DA0BA81C): BLCC MT [trap=1, pos=2984]
007Ba(40010002): LSL R0, R0, 2H
007Ca(00D80000): ADD R0, SB, R0
007Db(81E00004): LDR R1, SP, 4H
007Eb(41110004): LSL R1, R1, 4H
007Fc(82E00008): LDR R2, SP, 8H
0080c(01180002): ADD R1, R1, R2
0081d(41110004): LSL R1, R1, 4H
0082e(82E0000C): LDR R2, SP, CH
0083e(01180002): ADD R1, R1, R2
0084f(41110014): LSL R1, R1, 14H
0085g(82E00010): LDR R2, SP, 10H
0086g(4221000C): LSL R2, R2, CH
0087g(4223000C): ROR R2, R2, CH
0088h(01180002): ADD R1, R1, R2
0089h(A1000064): STR R1, R0, 64H
ENDi Put2;
008Ai(40D80018): ADD R0, SB, 18H
008Bi(81000000): LDR R1, R0, 0H
008Ci(41180001): ADD R1, R1, 1H
008Di(A1000000): STR R1, R0, 0H
008Ei(8FE00000): LDR LNK, SP, 0H
008Fi(4EE80014): ADD SP, SP, 14H
0090i(C700000F): B LNK
PROCEDURE Put3(op, cond, off: LONGINT);
BEGINj (*emit branch instruction*)
0091j(4EE90010): SUB SP, SP, 10H
0092j(AFE00000): STR LNK, SP, 0H
0093j(A0E00004): STR R0, SP, 4H
0094j(A1E00008): STR R1, SP, 8H
0095j(A2E0000C): STR R2, SP, CH
code[pc]k := ((op+12)l * 10H +m cond)n * 1000000H +o (off MOD 1000000H)p;q INC(pc)
0096k .FIXUP D
0096k(8D00001F): LDR SB, MT, MOD0 [ORG]
0097k(80D00018): LDR R0, SB, 18H [data]
0098k(41091F40): SUB R1, R0, 1F40H
0099k(DA0C551C): BLCC MT [trap=1, pos=3157]
009Ak(40010002): LSL R0, R0, 2H
009Bk(00D80000): ADD R0, SB, R0
009Cl(81E00004): LDR R1, SP, 4H
009Dl(4118000C): ADD R1, R1, CH
009Em(41110004): LSL R1, R1, 4H
009Fn(82E00008): LDR R2, SP, 8H
00A0n(01180002): ADD R1, R1, R2
00A1o(41110018): LSL R1, R1, 18H
00A2p(82E0000C): LDR R2, SP, CH
00A3p(42210008): LSL R2, R2, 8H
00A4p(42230008): ROR R2, R2, 8H
00A5q(01180002): ADD R1, R1, R2
00A6q(A1000064): STR R1, R0, 64H
ENDr Put3;
00A7r(40D80018): ADD R0, SB, 18H
00A8r(81000000): LDR R1, R0, 0H
00A9r(41180001): ADD R1, R1, 1H
00AAr(A1000000): STR R1, R0, 0H
00ABr(8FE00000): LDR LNK, SP, 0H
00ACr(4EE80010): ADD SP, SP, 10H
00ADr(C700000F): B LNK
PROCEDURE incR;
BEGINs
00AEs(4EE90004): SUB SP, SP, 4H
00AFs(AFE00000): STR LNK, SP, 0H
IF RH < MT-1 THENt INC(RH) ELSEu ORSv.Mark("register stack overflow")w ENDx
00B0t .FIXUP D
00B0t(8D00001A): LDR SB, MT, MOD0 [ORG]
00B1t(80D0002C): LDR R0, SB, 2CH [data]
00B2t(4009000B): SUB R0, R0, BH
00B3t(ED000006): BGE 6 [00BAH]
00B4u .FIXUP D
00B4u(8D000004): LDR SB, MT, MOD0 [ORG]
00B5u(40D8002C): ADD R0, SB, 2CH [data]
00B6u(81000000): LDR R1, R0, 0H
00B7u(41180001): ADD R1, R1, 1H
00B8u(A1000000): STR R1, R0, 0H
00B9v(E7000004): B 4 [00BEH]
00BAw .FIXUP D
00BAw(8D000006): LDR SB, MT, MOD0 [ORG]
00BBw(40D888A4): ADD R0, SB, FFFF88A4H [data]
00BCw(41000018): MOV R1, R0, 18H
00BDx .FIXUP P
00BDx(F72090BD): BL MOD2 [ORS] PROC9
ENDy incR;
00BEy(8FE00000): LDR LNK, SP, 0H
00BFy(4EE80004): ADD SP, SP, 4H
00C0y(C700000F): B LNK
PROCEDURE CheckRegs*;
BEGINz
00C1z .PROC 3
00C1z .COMMAND CheckRegs
00C1z(4EE90004): SUB SP, SP, 4H
00C2z(AFE00000): STR LNK, SP, 0H
IF RH # 0 THENa ORS.Mark("Reg Stack")b;c RH := 0 ENDd ;
00C3a .FIXUP D
00C3a(8D000009): LDR SB, MT, MOD0 [ORG]
00C4a(80D0002C): LDR R0, SB, 2CH [data]
00C5a(E1000007): BEQ 7 [00CDH]
00C6b .FIXUP D
00C6b(8D000003): LDR SB, MT, MOD0 [ORG]
00C7b(40D888BC): ADD R0, SB, FFFF88BCH [data]
00C8b(4100000A): MOV R1, R0, AH
00C9c .FIXUP P
00C9c(F720900C): BL MOD2 [ORS] PROC9
00CAd(40000000): MOV R0, R0, 0H
00CBd .FIXUP D
00CBd(8D000005): LDR SB, MT, MOD0 [ORG]
00CCd(A0D0002C): STR R0, SB, 2CH [data]
IF pc >= maxCode - 40 THENe ORS.Mark("program too long")f ENDg
00CDe .FIXUP D
00CDe(8D000002): LDR SB, MT, MOD0 [ORG]
00CEe(80D00018): LDR R0, SB, 18H [data]
00CFe(40091F18): SUB R0, R0, 1F18H
00D0e(E5000004): BLT 4 [00D5H]
00D1f .FIXUP D
00D1f(8D000004): LDR SB, MT, MOD0 [ORG]
00D2f(40D888C8): ADD R0, SB, FFFF88C8H [data]
00D3f(41000011): MOV R1, R0, 11H
00D4g .FIXUP P
00D4g(F720900B): BL MOD2 [ORS] PROC9
ENDh CheckRegs;
00D5h(8FE00000): LDR LNK, SP, 0H
00D6h(4EE80004): ADD SP, SP, 4H
00D7h(C700000F): B LNK
PROCEDURE SetCC(VAR x: Item; n: LONGINT);
BEGINi x.mode := Cond;j x.a := 0;k x.b := 0;l x.r := n
00D8i(4EE90010): SUB SP, SP, 10H
00D9i(AFE00000): STR LNK, SP, 0H
00DAi(A0E00004): STR R0, SP, 4H
00DBi(A1E00008): STR R1, SP, 8H
00DCi(A2E0000C): STR R2, SP, CH
00DDj(4000000C): MOV R0, R0, CH
00DEj(81E00004): LDR R1, SP, 4H
00DFj(A0100000): STR R0, R1, 0H
00E0k(40000000): MOV R0, R0, 0H
00E1k(81E00004): LDR R1, SP, 4H
00E2k(A0100008): STR R0, R1, 8H
00E3l(40000000): MOV R0, R0, 0H
00E4l(81E00004): LDR R1, SP, 4H
00E5l(A010000C): STR R0, R1, CH
ENDm SetCC;
00E6m(80E0000C): LDR R0, SP, CH
00E7m(81E00004): LDR R1, SP, 4H
00E8m(A0100010): STR R0, R1, 10H
00E9m(8FE00000): LDR LNK, SP, 0H
00EAm(4EE80010): ADD SP, SP, 10H
00EBm(C700000F): B LNK
PROCEDURE Trap(cond, num: LONGINT);
BEGINn Put3(BLR,o cond,p ORS.Pos()q*r100H +s num*10H +t MT)u
00ECn(4EE9000C): SUB SP, SP, CH
00EDn(AFE00000): STR LNK, SP, 0H
00EEn(A0E00004): STR R0, SP, 4H
00EFn(A1E00008): STR R1, SP, 8H
00F0o(40000001): MOV R0, R0, 1H
00F1p(81E00004): LDR R1, SP, 4H
00F2q(4EE90008): SUB SP, SP, 8H
00F3q(A0E00004): STR R0, SP, 4H
00F4q(A1E00000): STR R1, SP, 0H
00F5r .FIXUP P
00F5r(F7208021): BL MOD2 [ORS] PROC8
00F6r(02000000): MOV R2, R0, R0
00F7r(81E00000): LDR R1, SP, 0H
00F8r(80E00004): LDR R0, SP, 4H
00F9r(4EE80008): ADD SP, SP, 8H
00FAs(42210008): LSL R2, R2, 8H
00FBt(83E00008): LDR R3, SP, 8H
00FCt(43310004): LSL R3, R3, 4H
00FDt(02280003): ADD R2, R2, R3
00FEu(4228000C): ADD R2, R2, CH
ENDv Trap;
00FFv(F7FFFF91): BL -111 [0091H]
0100v(8FE00000): LDR LNK, SP, 0H
0101v(4EE8000C): ADD SP, SP, CH
0102v(C700000F): B LNK
(*handling of forward reference, fixups of branch addresses and constant tables*)
PROCEDURE negated(cond: LONGINT): LONGINT;
BEGINw
0103w(4EE90008): SUB SP, SP, 8H
0104w(AFE00000): STR LNK, SP, 0H
0105w(A0E00004): STR R0, SP, 4H
IF cond < 8 THENx cond := cond+8 ELSEy condz := cond-8 ENDa ;
0106x(80E00004): LDR R0, SP, 4H
0107x(40090008): SUB R0, R0, 8H
0108x(ED000004): BGE 4 [010DH]
0109y(80E00004): LDR R0, SP, 4H
010Ay(40080008): ADD R0, R0, 8H
010By(A0E00004): STR R0, SP, 4H
010Cz(E7000003): B 3 [0110H]
010Da(80E00004): LDR R0, SP, 4H
010Ea(40090008): SUB R0, R0, 8H
010Fa(A0E00004): STR R0, SP, 4H
RETURN cond
ENDb negated;
0110b(80E00004): LDR R0, SP, 4H
0111b(8FE00000): LDR LNK, SP, 0H
0112b(4EE80008): ADD SP, SP, 8H
0113b(C700000F): B LNK
PROCEDURE invalSB;
BEGINc curSB := 1
0114c(4EE90004): SUB SP, SP, 4H
0115c(AFE00000): STR LNK, SP, 0H
ENDd invalSB;
0116d(40000001): MOV R0, R0, 1H
0117d .FIXUP D
0117d(8D000046): LDR SB, MT, MOD0 [ORG]
0118d(A0D00030): STR R0, SB, 30H [data]
0119d(8FE00000): LDR LNK, SP, 0H
011Ad(4EE80004): ADD SP, SP, 4H
011Bd(C700000F): B LNK
PROCEDURE fix(at, with: LONGINT);
BEGINe code[at]f := code[at]g DIV C24 *h C24 +i (with MOD C24)j
011Ce(4EE9000C): SUB SP, SP, CH
011De(AFE00000): STR LNK, SP, 0H
011Ee(A0E00004): STR R0, SP, 4H
011Fe(A1E00008): STR R1, SP, 8H
0120f(80E00004): LDR R0, SP, 4H
0121f(41091F40): SUB R1, R0, 1F40H
0122f(DA0FEF1C): BLCC MT [trap=1, pos=4079]
0123f(40010002): LSL R0, R0, 2H
0124f .FIXUP D
0124f(8D00000D): LDR SB, MT, MOD0 [ORG]
0125f(00D80000): ADD R0, SB, R0 [global array]
0126g(81E00004): LDR R1, SP, 4H
0127g(42191F40): SUB R2, R1, 1F40H
0128g(DA0FFB1C): BLCC MT [trap=1, pos=4091]
0129g(41110002): LSL R1, R1, 2H
012Ag(01D80001): ADD R1, SB, R1
012Bh(81100064): LDR R1, R1, 64H
012Ch(41120018): ASR R1, R1, 18H
012Di(41110018): LSL R1, R1, 18H
012Ej(82E00008): LDR R2, SP, 8H
012Fj(42210008): LSL R2, R2, 8H
0130j(42230008): ROR R2, R2, 8H
ENDk fix;
0131k(01180002): ADD R1, R1, R2
0132k(A1000064): STR R1, R0, 64H
0133k(8FE00000): LDR LNK, SP, 0H
0134k(4EE8000C): ADD SP, SP, CH
0135k(C700000F): B LNK
PROCEDURE FixLink*(L: LONGINT);
VAR L1: LONGINT;
BEGINl invalSB;m
0136l .PROC 4
0136l(4EE9000C): SUB SP, SP, CH
0137l(AFE00000): STR LNK, SP, 0H
0138l(A0E00004): STR R0, SP, 4H
0139m(F7FFFFDA): BL -38 [0114H]
WHILE L # 0 DOn L1 := code[L]o MOD 40000H;p fix(L,q pc-L-r1)s;t L := L1 ENDu
013An(80E00004): LDR R0, SP, 4H
013Bn(E1000013): BEQ 19 [014FH]
013Co(80E00004): LDR R0, SP, 4H
013Do(41091F40): SUB R1, R0, 1F40H
013Eo(DA108F1C): BLCC MT [trap=1, pos=4239]
013Fo(40010002): LSL R0, R0, 2H
0140o .FIXUP D
0140o(8D00001C): LDR SB, MT, MOD0 [ORG]
0141o(00D80000): ADD R0, SB, R0 [global array]
0142p(80000064): LDR R0, R0, 64H
0143p(4001000E): LSL R0, R0, EH
0144p(4003000E): ROR R0, R0, EH
0145p(A0E00008): STR R0, SP, 8H
0146q(80E00004): LDR R0, SP, 4H
0147r(81D00018): LDR R1, SB, 18H
0148r(82E00004): LDR R2, SP, 4H
0149r(01190002): SUB R1, R1, R2
014As(41190001): SUB R1, R1, 1H
014Bt(F7FFFFD0): BL -48 [011CH]
014Cu(80E00008): LDR R0, SP, 8H
014Du(A0E00004): STR R0, SP, 4H
014Eu(E7FFFFEB): B -21 [013AH]
ENDv FixLink;
014Fv(8FE00000): LDR LNK, SP, 0H
0150v(4EE8000C): ADD SP, SP, CH
0151v(C700000F): B LNK
PROCEDURE FixLinkWith(L0, dst: LONGINT);
VAR L1: LONGINT;
BEGINw
0152w(4EE90010): SUB SP, SP, 10H
0153w(AFE00000): STR LNK, SP, 0H
0154w(A0E00004): STR R0, SP, 4H
0155w(A1E00008): STR R1, SP, 8H
WHILE L0 # 0 DOx
0156x(80E00004): LDR R0, SP, 4H
0157x(E1000022): BEQ 34 [017AH]
L1 := code[L0]y MOD C24;z
0158y(80E00004): LDR R0, SP, 4H
0159y(41091F40): SUB R1, R0, 1F40H
015Ay(DA11381C): BLCC MT [trap=1, pos=4408]
015By(40010002): LSL R0, R0, 2H
015Cy .FIXUP D
015Cy(8D00001C): LDR SB, MT, MOD0 [ORG]
015Dy(00D80000): ADD R0, SB, R0 [global array]
015Ez(80000064): LDR R0, R0, 64H
015Fz(40010008): LSL R0, R0, 8H
0160z(40030008): ROR R0, R0, 8H
0161z(A0E0000C): STR R0, SP, CH
code[L0]a := code[L0]b DIV C24 *c C24 +d ((dst - L0 -e 1)f MOD C24)g;h L0 := L1
0162a(80E00004): LDR R0, SP, 4H
0163a(41091F40): SUB R1, R0, 1F40H
0164a(DA11501C): BLCC MT [trap=1, pos=4432]
0165a(40010002): LSL R0, R0, 2H
0166a(00D80000): ADD R0, SB, R0
0167b(81E00004): LDR R1, SP, 4H
0168b(42191F40): SUB R2, R1, 1F40H
0169b(DA115C1C): BLCC MT [trap=1, pos=4444]
016Ab(41110002): LSL R1, R1, 2H
016Bb(01D80001): ADD R1, SB, R1
016Cc(81100064): LDR R1, R1, 64H
016Dc(41120018): ASR R1, R1, 18H
016Ed(41110018): LSL R1, R1, 18H
016Fe(82E00008): LDR R2, SP, 8H
0170e(83E00004): LDR R3, SP, 4H
0171e(02290003): SUB R2, R2, R3
0172f(42290001): SUB R2, R2, 1H
0173g(42210008): LSL R2, R2, 8H
0174g(42230008): ROR R2, R2, 8H
0175h(01180002): ADD R1, R1, R2
0176h(A1000064): STR R1, R0, 64H
ENDi
0177i(80E0000C): LDR R0, SP, CH
0178i(A0E00004): STR R0, SP, 4H
0179i(E7FFFFDC): B -36 [0156H]
ENDj FixLinkWith;
017Aj(8FE00000): LDR LNK, SP, 0H
017Bj(4EE80010): ADD SP, SP, 10H
017Cj(C700000F): B LNK
PROCEDURE merged(L0, L1: LONGINT): LONGINT;
VAR L2, L3: LONGINT;
BEGINk
017Dk(4EE90014): SUB SP, SP, 14H
017Ek(AFE00000): STR LNK, SP, 0H
017Fk(A0E00004): STR R0, SP, 4H
0180k(A1E00008): STR R1, SP, 8H
IF L0 # 0 THENl L3 := L0;m
0181l(80E00004): LDR R0, SP, 4H
0182l(E1000021): BEQ 33 [01A4H]
0183m(80E00004): LDR R0, SP, 4H
0184m(A0E00010): STR R0, SP, 10H
REPEAT L2 := L3;n L3 := code[L2]o MOD 40000H UNTILp L3 = 0;q
0185n(80E00010): LDR R0, SP, 10H
0186n(A0E0000C): STR R0, SP, CH
0187o(80E0000C): LDR R0, SP, CH
0188o(41091F40): SUB R1, R0, 1F40H
0189o(DA123E1C): BLCC MT [trap=1, pos=4670]
018Ao(40010002): LSL R0, R0, 2H
018Bo .FIXUP D
018Bo(8D00002F): LDR SB, MT, MOD0 [ORG]
018Co(00D80000): ADD R0, SB, R0 [global array]
018Dp(80000064): LDR R0, R0, 64H
018Ep(4001000E): LSL R0, R0, EH
018Fp(4003000E): ROR R0, R0, EH
0190p(A0E00010): STR R0, SP, 10H
0191q(80E00010): LDR R0, SP, 10H
0192q(E9FFFFF2): BNE -14 [0185H]
code[L2]r := code[L2]s + L1;t L1 := L0
0193r(80E0000C): LDR R0, SP, CH
0194r(41091F40): SUB R1, R0, 1F40H
0195r(DA12661C): BLCC MT [trap=1, pos=4710]
0196r(40010002): LSL R0, R0, 2H
0197r .FIXUP D
0197r(8D00000C): LDR SB, MT, MOD0 [ORG]
0198r(00D80000): ADD R0, SB, R0 [global array]
0199s(81E0000C): LDR R1, SP, CH
019As(42191F40): SUB R2, R1, 1F40H
019Bs(DA12721C): BLCC MT [trap=1, pos=4722]
019Cs(41110002): LSL R1, R1, 2H
019Ds(01D80001): ADD R1, SB, R1
019Et(81100064): LDR R1, R1, 64H
019Ft(82E00008): LDR R2, SP, 8H
01A0t(01180002): ADD R1, R1, R2
01A1t(A1000064): STR R1, R0, 64H
ENDu ;
01A2u(80E00004): LDR R0, SP, 4H
01A3u(A0E00008): STR R0, SP, 8H
RETURN L1
ENDv merged;
01A4v(80E00008): LDR R0, SP, 8H
01A5v(8FE00000): LDR LNK, SP, 0H
01A6v(4EE80014): ADD SP, SP, 14H
01A7v(C700000F): B LNK
(* loading of operands and addresses into registers *)
PROCEDURE GetSB(base: LONGINT);
BEGINw
01A8w(4EE90008): SUB SP, SP, 8H
01A9w(AFE00000): STR LNK, SP, 0H
01AAw(A0E00004): STR R0, SP, 4H
IF (version # 0)x & (y(base # curSB)z OR (abase # 0)b) THENc
01ABx .FIXUP D
01ABx(8D000014): LDR SB, MT, MOD0 [ORG]
01ACx(80D00048): LDR R0, SB, 48H [data]
01ADy(E1000017): BEQ 23 [01C5H]
01AEz(80E00004): LDR R0, SP, 4H
01AFz .FIXUP D
01AFz(8D000004): LDR SB, MT, MOD0 [ORG]
01B0z(81D00030): LDR R1, SB, 30H [data]
01B1z(00090001): SUB R0, R0, R1
01B2a(E9000002): BNE 2 [01B5H]
01B3b(80E00004): LDR R0, SP, 4H
01B4c(E1000010): BEQ 16 [01C5H]
Put2(Ldr,d SB,e -base,f pc-fixorgD)g;h fixorgD := pc-1;i curSB := base
01B5d(40000008): MOV R0, R0, 8H
01B6e(4100000D): MOV R1, R0, DH
01B7f(82E00004): LDR R2, SP, 4H
01B8f(43000000): MOV R3, R0, 0H
01B9f(02390002): SUB R2, R3, R2
01BAg .FIXUP D
01BAg(8D00000B): LDR SB, MT, MOD0 [ORG]
01BBg(83D00018): LDR R3, SB, 18H [data]
01BCg(84D0003C): LDR R4, SB, 3CH
01BDg(03390004): SUB R3, R3, R4
01BEh(F7FFFEB2): BL -334 [0071H]
01BFi .FIXUP D
01BFi(8D000005): LDR SB, MT, MOD0 [ORG]
01C0i(80D00018): LDR R0, SB, 18H [data]
01C1i(40090001): SUB R0, R0, 1H
01C2i(A0D0003C): STR R0, SB, 3CH
ENDj
01C3j(80E00004): LDR R0, SP, 4H
01C4j(A0D00030): STR R0, SB, 30H
ENDk GetSB;
01C5k(8FE00000): LDR LNK, SP, 0H
01C6k(4EE80008): ADD SP, SP, 8H
01C7k(C700000F): B LNK
PROCEDURE NilCheck;
BEGINl IF check THENm Trap(EQ,n 4)o ENDp
01C8l(4EE90004): SUB SP, SP, 4H
01C9l(AFE00000): STR LNK, SP, 0H
01CAm .FIXUP D
01CAm(8D00000B): LDR SB, MT, MOD0 [ORG]
01CBm(90D00044): LDR R0, SB, 44H [data]
01CCm(E1000003): BEQ 3 [01D0H]
01CDn(40000001): MOV R0, R0, 1H
01CEo(41000004): MOV R1, R0, 4H
01CFp(F7FFFF1C): BL -228 [00ECH]
ENDq NilCheck;
01D0q(8FE00000): LDR LNK, SP, 0H
01D1q(4EE80004): ADD SP, SP, 4H
01D2q(C700000F): B LNK
PROCEDURE load(VAR x: Item);
VAR op: LONGINT;
BEGINr
01D3r(4EE90010): SUB SP, SP, 10H
01D4r(AFE00000): STR LNK, SP, 0H
01D5r(A0E00004): STR R0, SP, 4H
01D6r(A1E00008): STR R1, SP, 8H
IF x.type.sizes = 1 THENt op := Ldr+1 ELSEu opv := Ldr ENDw ;
01D7s(80E00004): LDR R0, SP, 4H
01D8s(80000004): LDR R0, R0, 4H
01D9s(D114404C): BLEQ MT [trap=4, pos=5184]
01DAt(80000020): LDR R0, R0, 20H
01DBt(40090001): SUB R0, R0, 1H
01DCt(E9000003): BNE 3 [01E0H]
01DDu(40000009): MOV R0, R0, 9H
01DEu(A0E0000C): STR R0, SP, CH
01DFv(E7000002): B 2 [01E2H]
01E0w(40000008): MOV R0, R0, 8H
01E1w(A0E0000C): STR R0, SP, CH
IF x.mode # Reg THENx
01E2x(80E00004): LDR R0, SP, 4H
01E3x(80000000): LDR R0, R0, 0H
01E4x(4009000A): SUB R0, R0, AH
01E5x(E10000D3): BEQ 211 [02B9H]
IF x.mode = ORB.Const THENy
01E6y(80E00004): LDR R0, SP, 4H
01E7y(80000000): LDR R0, R0, 0H
01E8y(40090001): SUB R0, R0, 1H
01E9y(E9000059): BNE 89 [0243H]
IF x.type.formz = ORB.Proc THENa
01EAz(80E00004): LDR R0, SP, 4H
01EBz(80000004): LDR R0, R0, 4H
01ECz(D114BB4C): BLEQ MT [trap=4, pos=5307]
01EDa(80000000): LDR R0, R0, 0H
01EEa(4009000A): SUB R0, R0, AH
01EFa(E9000027): BNE 39 [0217H]
IF x.r > 0 THENb ORS.Mark("not allowed")c
01F0b(80E00004): LDR R0, SP, 4H
01F1b(80000010): LDR R0, R0, 10H
01F2b(40090000): SUB R0, R0, 0H
01F3b(E6000005): BLE 5 [01F9H]
01F4c .FIXUP D
01F4c(8D00002A): LDR SB, MT, MOD0 [ORG]
01F5c(40D888DC): ADD R0, SB, FFFF88DCH [data]
01F6c(4100000C): MOV R1, R0, CH
ELSIFd xe.r = 0 THENf Put3(BL,g 7,h 0)i;j Put1a(Sub,k RH,l LNK,m pc*4 -n x.a)o
01F7d .FIXUP P
01F7d(F7209102): BL MOD2 [ORS] PROC9
01F8e(E700001D): B 29 [0216H]
01F9f(80E00004): LDR R0, SP, 4H
01FAf(80000010): LDR R0, R0, 10H
01FBf(E900000F): BNE 15 [020BH]
01FCg(40000003): MOV R0, R0, 3H
01FDh(41000007): MOV R1, R0, 7H
01FEi(42000000): MOV R2, R0, 0H
01FFj(F7FFFE91): BL -367 [0091H]
0200k(40000009): MOV R0, R0, 9H
0201l .FIXUP D
0201l(8D00000D): LDR SB, MT, MOD0 [ORG]
0202l(81D0002C): LDR R1, SB, 2CH [data]
0203m(4200000F): MOV R2, R0, FH
0204n(83D00018): LDR R3, SB, 18H
0205n(43310002): LSL R3, R3, 2H
0206o(84E00004): LDR R4, SP, 4H
0207o(84400008): LDR R4, R4, 8H
0208o(03390004): SUB R3, R3, R4
ELSEp GetSBq(x.r)r;s Put1(Add,t RH,u SB,v x.a + 100H)w (*mark as progbase-relative*)
0209p(F7FFFE3A): BL -454 [0044H]
020Aq(E700000B): B 11 [0216H]
020Br(80E00004): LDR R0, SP, 4H
020Cr(80000010): LDR R0, R0, 10H
020Ds(F7FFFF9A): BL -102 [01A8H]
020Et(40000008): MOV R0, R0, 8H
020Fu .FIXUP D
020Fu(8D00000E): LDR SB, MT, MOD0 [ORG]
0210u(81D0002C): LDR R1, SB, 2CH [data]
0211v(4200000D): MOV R2, R0, DH
0212w(83E00004): LDR R3, SP, 4H
0213w(83300008): LDR R3, R3, 8H
0214w(43380100): ADD R3, R3, 100H
ENDx
0215x(F7FFFE08): BL -504 [001EH]
ELSIF (yx.a <= 0FFFFH)z & (ax.a >= -10000H)b THENc Put1(Mov,d RH,e 0,f x.a)g
0216y(E7000026): B 38 [023DH]
0217z(80E00004): LDR R0, SP, 4H
0218z(80000008): LDR R0, R0, 8H
0219z(4009FFFF): SUB R0, R0, FFFFFFFFH
021Aa(EE00000C): BGT 12 [0227H]
021Bb(80E00004): LDR R0, SP, 4H
021Cb(80000008): LDR R0, R0, 8H
021Db(50090000): SUB R0, R0, 0H
021Ec(E5000008): BLT 8 [0227H]
021Fd(40000000): MOV R0, R0, 0H
0220e .FIXUP D
0220e(8D000011): LDR SB, MT, MOD0 [ORG]
0221e(81D0002C): LDR R1, SB, 2CH [data]
0222f(42000000): MOV R2, R0, 0H
0223g(83E00004): LDR R3, SP, 4H
0224g(83300008): LDR R3, R3, 8H
ELSEh Put1i(Mov+U,j RH,k 0,l x.a DIV 10000H MODm 10000H)n;o
0225h(F7FFFDF8): BL -520 [001EH]
0226i(E7000016): B 22 [023DH]
0227j(40002000): MOV R0, R0, 2000H
0228k .FIXUP D
0228k(8D000008): LDR SB, MT, MOD0 [ORG]
0229k(81D0002C): LDR R1, SB, 2CH [data]
022Al(42000000): MOV R2, R0, 0H
022Bm(83E00004): LDR R3, SP, 4H
022Cm(83300008): LDR R3, R3, 8H
022Dm(43320010): ASR R3, R3, 10H
022En(4334FFFF): AND R3, R3, FFFFFFFFH
022Fo(F7FFFDEE): BL -530 [001EH]
IF x.a MOD 10000H #p 0 THENq Put1(Ior,r RH,s RH,t x.a MOD 10000H)u ENDv
0230p(80E00004): LDR R0, SP, 4H
0231p(80000008): LDR R0, R0, 8H
0232p(4004FFFF): AND R0, R0, FFFFFFFFH
0233q(40090000): SUB R0, R0, 0H
0234q(E1000008): BEQ 8 [023DH]
0235r(40000006): MOV R0, R0, 6H
0236s .FIXUP D
0236s(8D00000E): LDR SB, MT, MOD0 [ORG]
0237s(81D0002C): LDR R1, SB, 2CH [data]
0238t(82D0002C): LDR R2, SB, 2CH
0239u(83E00004): LDR R3, SP, 4H
023Au(83300008): LDR R3, R3, 8H
023Bu(4334FFFF): AND R3, R3, FFFFFFFFH
023Cv(F7FFFDE1): BL -543 [001EH]
END ;
x.r := RH;w incR
023Dw .FIXUP D
023Dw(8D000007): LDR SB, MT, MOD0 [ORG]
023Ew(80D0002C): LDR R0, SB, 2CH [data]
023Fw(81E00004): LDR R1, SP, 4H
0240w(A0100010): STR R0, R1, 10H
ELSIFx xy.mode = ORB.Var THENz
0241x(F7FFFE6C): BL -404 [00AEH]
0242y(E7000073): B 115 [02B6H]
0243z(80E00004): LDR R0, SP, 4H
0244z(80000000): LDR R0, R0, 0H
0245z(40090002): SUB R0, R0, 2H
0246z(E900001E): BNE 30 [0265H]
IF x.r > 0 THENa (*local*) Put2(op,b RH,c SP,d x.a + frame)e
0247a(80E00004): LDR R0, SP, 4H
0248a(80000010): LDR R0, R0, 10H
0249a(40090000): SUB R0, R0, 0H
024Aa(E600000A): BLE 10 [0255H]
024Bb(80E0000C): LDR R0, SP, CH
024Cc .FIXUP D
024Cc(8D00000F): LDR SB, MT, MOD0 [ORG]
024Dc(81D0002C): LDR R1, SB, 2CH [data]
024Ed(4200000E): MOV R2, R0, EH
024Fe(83E00004): LDR R3, SP, 4H
0250e(83300008): LDR R3, R3, 8H
0251e(84D00034): LDR R4, SB, 34H
0252e(03380004): ADD R3, R3, R4
ELSEf GetSBg(x.r)h;i Put2(op,j RH,k SB,l x.a)m
0253f(F7FFFE1D): BL -483 [0071H]
0254g(E700000A): B 10 [025FH]
0255h(80E00004): LDR R0, SP, 4H
0256h(80000010): LDR R0, R0, 10H
0257i(F7FFFF50): BL -176 [01A8H]
0258j(80E0000C): LDR R0, SP, CH
0259k .FIXUP D
0259k(8D00000D): LDR SB, MT, MOD0 [ORG]
025Ak(81D0002C): LDR R1, SB, 2CH [data]
025Bl(4200000D): MOV R2, R0, DH
025Cm(83E00004): LDR R3, SP, 4H
025Dm(83300008): LDR R3, R3, 8H
ENDn ;
025En(F7FFFE12): BL -494 [0071H]
x.r := RH;o incR
025Fo .FIXUP D
025Fo(8D000006): LDR SB, MT, MOD0 [ORG]
0260o(80D0002C): LDR R0, SB, 2CH [data]
0261o(81E00004): LDR R1, SP, 4H
0262o(A0100010): STR R0, R1, 10H
ELSIFp xq.mode = ORB.Par THENr Put2(Ldr,s RH,t SP,u x.a + frame)v;w Put2(op,x RH,y RH,z x.b)a;b x.r := RH;c incR
0263p(F7FFFE4A): BL -438 [00AEH]
0264q(E7000051): B 81 [02B6H]
0265r(80E00004): LDR R0, SP, 4H
0266r(80000000): LDR R0, R0, 0H
0267r(40090003): SUB R0, R0, 3H
0268r(E9000016): BNE 22 [027FH]
0269s(40000008): MOV R0, R0, 8H
026At .FIXUP D
026At(8D00000B): LDR SB, MT, MOD0 [ORG]
026Bt(81D0002C): LDR R1, SB, 2CH [data]
026Cu(4200000E): MOV R2, R0, EH
026Dv(83E00004): LDR R3, SP, 4H
026Ev(83300008): LDR R3, R3, 8H
026Fv(84D00034): LDR R4, SB, 34H
0270v(03380004): ADD R3, R3, R4
0271w(F7FFFDFF): BL -513 [0071H]
0272x(80E0000C): LDR R0, SP, CH
0273y .FIXUP D
0273y(8D000009): LDR SB, MT, MOD0 [ORG]
0274y(81D0002C): LDR R1, SB, 2CH [data]
0275z(82D0002C): LDR R2, SB, 2CH
0276a(83E00004): LDR R3, SP, 4H
0277a(8330000C): LDR R3, R3, CH
0278b(F7FFFDF8): BL -520 [0071H]
0279c .FIXUP D
0279c(8D000006): LDR SB, MT, MOD0 [ORG]
027Ac(80D0002C): LDR R0, SB, 2CH [data]
027Bc(81E00004): LDR R1, SP, 4H
027Cc(A0100010): STR R0, R1, 10H
ELSIFd xe.mode = RegI THENf Put2(op,g x.r,h x.r,i x.a)j
027Dd(F7FFFE30): BL -464 [00AEH]
027Ee(E7000037): B 55 [02B6H]
027Ff(80E00004): LDR R0, SP, 4H
0280f(80000000): LDR R0, R0, 0H
0281f(4009000B): SUB R0, R0, BH
0282f(E9000009): BNE 9 [028CH]
0283g(80E0000C): LDR R0, SP, CH
0284h(81E00004): LDR R1, SP, 4H
0285h(81100010): LDR R1, R1, 10H
0286i(82E00004): LDR R2, SP, 4H
0287i(82200010): LDR R2, R2, 10H
0288j(83E00004): LDR R3, SP, 4H
0289j(83300008): LDR R3, R3, 8H
ELSIFk xl.mode = Cond THENm
028Ak(F7FFFDE6): BL -538 [0071H]
028Bl(E700002A): B 42 [02B6H]
028Cm(80E00004): LDR R0, SP, 4H
028Dm(80000000): LDR R0, R0, 0H
028Em(4009000C): SUB R0, R0, CH
028Fm(E9000026): BNE 38 [02B6H]
Put3(BC,n negated(xo.r)p,q 2)r;s
0290n(40000002): MOV R0, R0, 2H
0291o(4EE90004): SUB SP, SP, 4H
0292o(A0E00000): STR R0, SP, 0H
0293p(80E00008): LDR R0, SP, 8H
0294p(80000010): LDR R0, R0, 10H
0295q(F7FFFE6D): BL -403 [0103H]
0296q(01000000): MOV R1, R0, R0
0297q(80E00000): LDR R0, SP, 0H
0298q(4EE80004): ADD SP, SP, 4H
0299r(42000002): MOV R2, R0, 2H
029As(F7FFFDF6): BL -522 [0091H]
FixLink(x.b)t;u Put1(Mov,v RH,w 0,x 1)y;z Put3(BC,a 7,b 1)c;d
029Bt(80E00004): LDR R0, SP, 4H
029Ct(8000000C): LDR R0, R0, CH
029Du(F7FFFE98): BL -360 [0136H]
029Ev(40000000): MOV R0, R0, 0H
029Fw .FIXUP D
029Fw(8D000026): LDR SB, MT, MOD0 [ORG]
02A0w(81D0002C): LDR R1, SB, 2CH [data]
02A1x(42000000): MOV R2, R0, 0H
02A2y(43000001): MOV R3, R0, 1H
02A3z(F7FFFD7A): BL -646 [001EH]
02A4a(40000002): MOV R0, R0, 2H
02A5b(41000007): MOV R1, R0, 7H
02A6c(42000001): MOV R2, R0, 1H
02A7d(F7FFFDE9): BL -535 [0091H]
FixLink(x.a)e;f Put1(Mov,g RH,h 0,i 0)j;k x.r := RH;l incR
02A8e(80E00004): LDR R0, SP, 4H
02A9e(80000008): LDR R0, R0, 8H
02AAf(F7FFFE8B): BL -373 [0136H]
02ABg(40000000): MOV R0, R0, 0H
02ACh .FIXUP D
02ACh(8D00000D): LDR SB, MT, MOD0 [ORG]
02ADh(81D0002C): LDR R1, SB, 2CH [data]
02AEi(42000000): MOV R2, R0, 0H
02AFj(43000000): MOV R3, R0, 0H
02B0k(F7FFFD6D): BL -659 [001EH]
02B1l .FIXUP D
02B1l(8D000005): LDR SB, MT, MOD0 [ORG]
02B2l(80D0002C): LDR R0, SB, 2CH [data]
02B3l(81E00004): LDR R1, SP, 4H
02B4l(A0100010): STR R0, R1, 10H
ENDm ;
02B5m(F7FFFDF8): BL -520 [00AEH]
x.mode := Reg
ENDn
02B6n(4000000A): MOV R0, R0, AH
02B7n(81E00004): LDR R1, SP, 4H
02B8n(A0100000): STR R0, R1, 0H
ENDo load;
02B9o(8FE00000): LDR LNK, SP, 0H
02BAo(4EE80010): ADD SP, SP, 10H
02BBo(C700000F): B LNK
PROCEDURE loadAdr(VAR x: Item);
BEGINp
02BCp(4EE9000C): SUB SP, SP, CH
02BDp(AFE00000): STR LNK, SP, 0H
02BEp(A0E00004): STR R0, SP, 4H
02BFp(A1E00008): STR R1, SP, 8H
IF x.mode = ORB.Var THENq
02C0q(80E00004): LDR R0, SP, 4H
02C1q(80000000): LDR R0, R0, 0H
02C2q(40090002): SUB R0, R0, 2H
02C3q(E900001E): BNE 30 [02E2H]
IF x.r > 0 THENr (*local*) Put1a(Add,s RH,t SP,u x.a + frame)v
02C4r(80E00004): LDR R0, SP, 4H
02C5r(80000010): LDR R0, R0, 10H
02C6r(40090000): SUB R0, R0, 0H
02C7r(E600000A): BLE 10 [02D2H]
02C8s(40000008): MOV R0, R0, 8H
02C9t .FIXUP D
02C9t(8D000018): LDR SB, MT, MOD0 [ORG]
02CAt(81D0002C): LDR R1, SB, 2CH [data]
02CBu(4200000E): MOV R2, R0, EH
02CCv(83E00004): LDR R3, SP, 4H
02CDv(83300008): LDR R3, R3, 8H
02CEv(84D00034): LDR R4, SB, 34H
02CFv(03380004): ADD R3, R3, R4
ELSEw GetSBx(x.r)y;z Put1a(Add,a RH,b SB,c x.a)d
02D0w(F7FFFD73): BL -653 [0044H]
02D1x(E700000A): B 10 [02DCH]
02D2y(80E00004): LDR R0, SP, 4H
02D3y(80000010): LDR R0, R0, 10H
02D4z(F7FFFED3): BL -301 [01A8H]
02D5a(40000008): MOV R0, R0, 8H
02D6b .FIXUP D
02D6b(8D00000D): LDR SB, MT, MOD0 [ORG]
02D7b(81D0002C): LDR R1, SB, 2CH [data]
02D8c(4200000D): MOV R2, R0, DH
02D9d(83E00004): LDR R3, SP, 4H
02DAd(83300008): LDR R3, R3, 8H
ENDe ;
02DBe(F7FFFD68): BL -664 [0044H]
x.r := RH;f incR
02DCf .FIXUP D
02DCf(8D000006): LDR SB, MT, MOD0 [ORG]
02DDf(80D0002C): LDR R0, SB, 2CH [data]
02DEf(81E00004): LDR R1, SP, 4H
02DFf(A0100010): STR R0, R1, 10H
ELSIFg xh.mode = ORB.Par THENi Put2(Ldr,j RH,k SP,l x.a + frame)m;n
02E0g(F7FFFDCD): BL -563 [00AEH]
02E1h(E7000031): B 49 [0313H]
02E2i(80E00004): LDR R0, SP, 4H
02E3i(80000000): LDR R0, R0, 0H
02E4i(40090003): SUB R0, R0, 3H
02E5i(E9000019): BNE 25 [02FFH]
02E6j(40000008): MOV R0, R0, 8H
02E7k .FIXUP D
02E7k(8D00000B): LDR SB, MT, MOD0 [ORG]
02E8k(81D0002C): LDR R1, SB, 2CH [data]
02E9l(4200000E): MOV R2, R0, EH
02EAm(83E00004): LDR R3, SP, 4H
02EBm(83300008): LDR R3, R3, 8H
02ECm(84D00034): LDR R4, SB, 34H
02EDm(03380004): ADD R3, R3, R4
02EEn(F7FFFD82): BL -638 [0071H]
IF x.b # 0 THENo Put1a(Add,p RH,q RH,r x.b)s ENDt ;
02EFo(80E00004): LDR R0, SP, 4H
02F0o(8000000C): LDR R0, R0, CH
02F1o(E1000007): BEQ 7 [02F9H]
02F2p(40000008): MOV R0, R0, 8H
02F3q .FIXUP D
02F3q(8D00000C): LDR SB, MT, MOD0 [ORG]
02F4q(81D0002C): LDR R1, SB, 2CH [data]
02F5r(82D0002C): LDR R2, SB, 2CH
02F6s(83E00004): LDR R3, SP, 4H
02F7s(8330000C): LDR R3, R3, CH
02F8t(F7FFFD4B): BL -693 [0044H]
x.r := RH;u incR
02F9u .FIXUP D
02F9u(8D000006): LDR SB, MT, MOD0 [ORG]
02FAu(80D0002C): LDR R0, SB, 2CH [data]
02FBu(81E00004): LDR R1, SP, 4H
02FCu(A0100010): STR R0, R1, 10H
ELSIFv xw.mode = RegI THENx
02FDv(F7FFFDB0): BL -592 [00AEH]
02FEw(E7000014): B 20 [0313H]
02FFx(80E00004): LDR R0, SP, 4H
0300x(80000000): LDR R0, R0, 0H
0301x(4009000B): SUB R0, R0, BH
0302x(E900000C): BNE 12 [030FH]
IF x.a # 0 THENy Put1a(Add,z x.r,a x.r,b x.a)c ENDd
0303y(80E00004): LDR R0, SP, 4H
0304y(80000008): LDR R0, R0, 8H
0305y(E1000008): BEQ 8 [030EH]
0306z(40000008): MOV R0, R0, 8H
0307a(81E00004): LDR R1, SP, 4H
0308a(81100010): LDR R1, R1, 10H
0309b(82E00004): LDR R2, SP, 4H
030Ab(82200010): LDR R2, R2, 10H
030Bc(83E00004): LDR R3, SP, 4H
030Cc(83300008): LDR R3, R3, 8H
030Dd(F7FFFD36): BL -714 [0044H]
ELSE ORSe.Mark("address error")f
030Ee(E7000004): B 4 [0313H]
030Ff .FIXUP D
030Ff(8D000016): LDR SB, MT, MOD0 [ORG]
0310f(40D888E8): ADD R0, SB, FFFF88E8H [data]
0311f(4100000E): MOV R1, R0, EH
ENDg ;
0312g .FIXUP P
0312g(F720911B): BL MOD2 [ORS] PROC9
x.mode := Reg
ENDh loadAdr;
0313h(4000000A): MOV R0, R0, AH
0314h(81E00004): LDR R1, SP, 4H
0315h(A0100000): STR R0, R1, 0H
0316h(8FE00000): LDR LNK, SP, 0H
0317h(4EE8000C): ADD SP, SP, CH
0318h(C700000F): B LNK
PROCEDURE loadCond(VAR x: Item);
BEGINi
0319i(4EE9000C): SUB SP, SP, CH
031Ai(AFE00000): STR LNK, SP, 0H
031Bi(A0E00004): STR R0, SP, 4H
031Ci(A1E00008): STR R1, SP, 8H
IF x.type.formj = ORB.Bool THENk
031Dj(80E00004): LDR R0, SP, 4H
031Ej(80000004): LDR R0, R0, 4H
031Fj(D11B2C4C): BLEQ MT [trap=4, pos=6956]
0320k(80000000): LDR R0, R0, 0H
0321k(40090002): SUB R0, R0, 2H
0322k(E9000033): BNE 51 [0356H]
IF x.mode = ORB.Const THENl x.r := 15 - x.a*8
0323l(80E00004): LDR R0, SP, 4H
0324l(80000000): LDR R0, R0, 0H
0325l(40090001): SUB R0, R0, 1H
0326l(E9000008): BNE 8 [032FH]
ELSEm loadn(x)o;p
0327m(80E00004): LDR R0, SP, 4H
0328m(80000008): LDR R0, R0, 8H
0329m(40010003): LSL R0, R0, 3H
032Am(4100000F): MOV R1, R0, FH
032Bm(00190000): SUB R0, R1, R0
032Cm(81E00004): LDR R1, SP, 4H
032Dm(A0100010): STR R0, R1, 10H
032En(E700001D): B 29 [034CH]
032Fo(80E00004): LDR R0, SP, 4H
0330o(81E00008): LDR R1, SP, 8H
0331p(F7FFFEA1): BL -351 [01D3H]
IF code[pc-1]q DIV 40000000H #r -2 THENs Put1(Cmp,t x.r,u x.r,v 0)w ENDx ;
0332q .FIXUP D
0332q(8D000023): LDR SB, MT, MOD0 [ORG]
0333q(80D00018): LDR R0, SB, 18H [data]
0334q(40090001): SUB R0, R0, 1H
0335q(41091F40): SUB R1, R0, 1F40H
0336q(DA1B991C): BLCC MT [trap=1, pos=7065]
0337q(40010002): LSL R0, R0, 2H
0338q(00D80000): ADD R0, SB, R0
0339r(80000064): LDR R0, R0, 64H
033Ar(4002001E): ASR R0, R0, 1EH
033Bs(5009FFFE): SUB R0, R0, FFFFFFFEH
033Cs(E1000007): BEQ 7 [0344H]
033Dt(40000009): MOV R0, R0, 9H
033Eu(81E00004): LDR R1, SP, 4H
033Fu(81100010): LDR R1, R1, 10H
0340v(82E00004): LDR R2, SP, 4H
0341v(82200010): LDR R2, R2, 10H
0342w(43000000): MOV R3, R0, 0H
0343x(F7FFFCDA): BL -806 [001EH]
x.r := NE;y DEC(RH)
0344y(40000009): MOV R0, R0, 9H
0345y(81E00004): LDR R1, SP, 4H
0346y(A0100010): STR R0, R1, 10H
ENDz ;
0347z .FIXUP D
0347z(8D000015): LDR SB, MT, MOD0 [ORG]
0348z(40D8002C): ADD R0, SB, 2CH [data]
0349z(81000000): LDR R1, R0, 0H
034Az(41190001): SUB R1, R1, 1H
034Bz(A1000000): STR R1, R0, 0H
x.mode := Cond;a x.a := 0;b x.b := 0
034Ca(4000000C): MOV R0, R0, CH
034Da(81E00004): LDR R1, SP, 4H
034Ea(A0100000): STR R0, R1, 0H
034Fb(40000000): MOV R0, R0, 0H
0350b(81E00004): LDR R1, SP, 4H
0351b(A0100008): STR R0, R1, 8H
ELSEc ORSd.Mark("not Boolean?")e
0352c(40000000): MOV R0, R0, 0H
0353c(81E00004): LDR R1, SP, 4H
0354c(A010000C): STR R0, R1, CH
0355d(E7000004): B 4 [035AH]
0356e .FIXUP D
0356e(8D00000F): LDR SB, MT, MOD0 [ORG]
0357e(40D888F8): ADD R0, SB, FFFF88F8H [data]
0358e(4100000D): MOV R1, R0, DH
ENDf
0359f .FIXUP P
0359f(F7209047): BL MOD2 [ORS] PROC9
ENDg loadCond;
035Ag(8FE00000): LDR LNK, SP, 0H
035Bg(4EE8000C): ADD SP, SP, CH
035Cg(C700000F): B LNK
PROCEDURE loadTypTagAdr(T: ORB.Type);
VAR x: Item;
BEGINh x.mode := ORB.Var;i x.a := T.lenj;k x.r := -T.mnol;m loadAdr(x)n
035Dh(4EE90020): SUB SP, SP, 20H
035Eh(AFE00000): STR LNK, SP, 0H
035Fh(A0E00004): STR R0, SP, 4H
0360i(40000002): MOV R0, R0, 2H
0361i(A0E00008): STR R0, SP, 8H
0362j(80E00004): LDR R0, SP, 4H
0363j(D11CBA4C): BLEQ MT [trap=4, pos=7354]
0364k(80000010): LDR R0, R0, 10H
0365k(A0E00010): STR R0, SP, 10H
0366l(80E00004): LDR R0, SP, 4H
0367l(D11CC94C): BLEQ MT [trap=4, pos=7369]
0368m(80000008): LDR R0, R0, 8H
0369m(41000000): MOV R1, R0, 0H
036Am(00190000): SUB R0, R1, R0
036Bm(A0E00018): STR R0, SP, 18H
036Cn(40E80008): ADD R0, SP, 8H
036Dn .FIXUP D
036Dn(8D000017): LDR SB, MT, MOD0 [ORG]
036En(41D80000): ADD R1, SB, 0H [data]
ENDo loadTypTagAdr;
036Fo(F7FFFF4C): BL -180 [02BCH]
0370o(8FE00000): LDR LNK, SP, 0H
0371o(4EE80020): ADD SP, SP, 20H
0372o(C700000F): B LNK
PROCEDURE loadStringAdr(VAR x: Item);
BEGINp GetSB(0)q;r Put1a(Add,s RH,t SB,u varsize+x.a)v;w x.mode := Reg;x x.r := RH;y incR
0373p(4EE9000C): SUB SP, SP, CH
0374p(AFE00000): STR LNK, SP, 0H
0375p(A0E00004): STR R0, SP, 4H
0376p(A1E00008): STR R1, SP, 8H
0377q(40000000): MOV R0, R0, 0H
0378r(F7FFFE2F): BL -465 [01A8H]
0379s(40000008): MOV R0, R0, 8H
037At .FIXUP D
037At(8D00000D): LDR SB, MT, MOD0 [ORG]
037Bt(81D0002C): LDR R1, SB, 2CH [data]
037Cu(4200000D): MOV R2, R0, DH
037Dv(83D0001C): LDR R3, SB, 1CH
037Ev(84E00004): LDR R4, SP, 4H
037Fv(84400008): LDR R4, R4, 8H
0380v(03380004): ADD R3, R3, R4
0381w(F7FFFCC2): BL -830 [0044H]
0382x(4000000A): MOV R0, R0, AH
0383x(81E00004): LDR R1, SP, 4H
0384x(A0100000): STR R0, R1, 0H
0385y .FIXUP D
0385y(8D00000B): LDR SB, MT, MOD0 [ORG]
0386y(80D0002C): LDR R0, SB, 2CH [data]
0387y(81E00004): LDR R1, SP, 4H
0388y(A0100010): STR R0, R1, 10H
ENDz loadStringAdr;
0389z(F7FFFD24): BL -732 [00AEH]
038Az(8FE00000): LDR LNK, SP, 0H
038Bz(4EE8000C): ADD SP, SP, CH
038Cz(C700000F): B LNK
(* Items: Conversion from constants or from Objects on the Heap to Items on the Stack*)
PROCEDURE MakeConstItem*(VAR x: Item; typ: ORB.Type; val: LONGINT);
BEGINa x.mode := ORB.Const;b x.type := typ;c x.a := val
038Da .PROC 5
038Da(4EE90014): SUB SP, SP, 14H
038Ea(AFE00000): STR LNK, SP, 0H
038Fa(A0E00004): STR R0, SP, 4H
0390a(A1E00008): STR R1, SP, 8H
0391a(A2E0000C): STR R2, SP, CH
0392a(A3E00010): STR R3, SP, 10H
0393b(40000001): MOV R0, R0, 1H
0394b(81E00004): LDR R1, SP, 4H
0395b(A0100000): STR R0, R1, 0H
0396c(80E0000C): LDR R0, SP, CH
0397c(81E00004): LDR R1, SP, 4H
0398c(A0100004): STR R0, R1, 4H
ENDd MakeConstItem;
0399d(80E00010): LDR R0, SP, 10H
039Ad(81E00004): LDR R1, SP, 4H
039Bd(A0100008): STR R0, R1, 8H
039Cd(8FE00000): LDR LNK, SP, 0H
039Dd(4EE80014): ADD SP, SP, 14H
039Ed(C700000F): B LNK
PROCEDURE MakeRealItem*(VAR x: Item; val: REAL);
BEGINe x.mode := ORB.Const;f x.type := ORB.realType;g x.a := SYSTEM.VAL(LONGINT, val)
039Fe .PROC 6
039Fe(4EE90010): SUB SP, SP, 10H
03A0e(AFE00000): STR LNK, SP, 0H
03A1e(A0E00004): STR R0, SP, 4H
03A2e(A1E00008): STR R1, SP, 8H
03A3e(A2E0000C): STR R2, SP, CH
03A4f(40000001): MOV R0, R0, 1H
03A5f(81E00004): LDR R1, SP, 4H
03A6f(A0100000): STR R0, R1, 0H
03A7g .FIXUP D
03A7g(8D400022): LDR SB, MT, MOD4 [ORB]
03A8g(80D0000A): LDR R0, SB, VAR10
03A9g(81E00004): LDR R1, SP, 4H
03AAg(A0100004): STR R0, R1, 4H
ENDh MakeRealItem;
03ABh(80E0000C): LDR R0, SP, CH
03ACh(81E00004): LDR R1, SP, 4H
03ADh(A0100008): STR R0, R1, 8H
03AEh(8FE00000): LDR LNK, SP, 0H
03AFh(4EE80010): ADD SP, SP, 10H
03B0h(C700000F): B LNK
PROCEDURE MakeStringItem*(VAR x: Item; len: LONGINT); (*copies string from ORS-buffer to ORG-string array*)
VAR i: LONGINT;
BEGINi x.mode := ORB.Const;j x.type := ORB.strType;k x.a := strx;l x.b := len;m i := 0;n
03B1i .PROC 7
03B1i(4EE90014): SUB SP, SP, 14H
03B2i(AFE00000): STR LNK, SP, 0H
03B3i(A0E00004): STR R0, SP, 4H
03B4i(A1E00008): STR R1, SP, 8H
03B5i(A2E0000C): STR R2, SP, CH
03B6j(40000001): MOV R0, R0, 1H
03B7j(81E00004): LDR R1, SP, 4H
03B8j(A0100000): STR R0, R1, 0H
03B9k .FIXUP D
03B9k(8D400012): LDR SB, MT, MOD4 [ORB]
03BAk(80D0000E): LDR R0, SB, VAR14
03BBk(81E00004): LDR R1, SP, 4H
03BCk(A0100004): STR R0, R1, 4H
03BDl .FIXUP D
03BDl(8D000004): LDR SB, MT, MOD0 [ORG]
03BEl(80D00024): LDR R0, SB, 24H [data]
03BFl(81E00004): LDR R1, SP, 4H
03C0l(A0100008): STR R0, R1, 8H
03C1m(80E0000C): LDR R0, SP, CH
03C2m(81E00004): LDR R1, SP, 4H
03C3m(A010000C): STR R0, R1, CH
03C4n(40000000): MOV R0, R0, 0H
03C5n(A0E00010): STR R0, SP, 10H
IF strx + len +o 4 <p maxStrx THENq
03C6o(80D00024): LDR R0, SB, 24H
03C7o(81E0000C): LDR R1, SP, CH
03C8o(00080001): ADD R0, R0, R1
03C9p(40080004): ADD R0, R0, 4H
03CAq(40090960): SUB R0, R0, 960H
03CBq(ED00002E): BGE 46 [03FAH]
WHILE len > 0 DOr str[strx]s := ORS.str[i]t;u INC(strx);v INC(i);w DEC(len) ENDx ;
03CCr(80E0000C): LDR R0, SP, CH
03CDr(40090000): SUB R0, R0, 0H
03CEr(E6000019): BLE 25 [03E8H]
03CFs .FIXUP D
03CFs(8D000012): LDR SB, MT, MOD0 [ORG]
03D0s(80D00024): LDR R0, SB, 24H [data]
03D1s(41090960): SUB R1, R0, 960H
03D2s(DA20231C): BLCC MT [trap=1, pos=8227]
03D3s(00D80000): ADD R0, SB, R0
03D4t(81E00010): LDR R1, SP, 10H
03D5t(42190100): SUB R2, R1, 100H
03D6t(DA20311C): BLCC MT [trap=1, pos=8241]
03D7t .FIXUP D
03D7t(8D200008): LDR SB, MT, MOD2 [ORS]
03D8t(42D80005): ADD R2, SB, VAR5
03D9t(01280001): ADD R1, R2, R1
03DAu(91100000): LDR R1, R1, 0H
03DBu(B1007F44): STR R1, R0, 7F44H
03DCv .FIXUP D
03DCv(8D000005): LDR SB, MT, MOD0 [ORG]
03DDv(40D80024): ADD R0, SB, 24H [data]
03DEv(81000000): LDR R1, R0, 0H
03DFv(41180001): ADD R1, R1, 1H
03E0v(A1000000): STR R1, R0, 0H
03E1w(80E00010): LDR R0, SP, 10H
03E2w(40080001): ADD R0, R0, 1H
03E3w(A0E00010): STR R0, SP, 10H
03E4x(80E0000C): LDR R0, SP, CH
03E5x(40090001): SUB R0, R0, 1H
03E6x(A0E0000C): STR R0, SP, CH
03E7x(E7FFFFE4): B -28 [03CCH]
WHILE strx MOD 4 #y 0 DOz str[strx]a := 0X;b INC(strx) ENDc
03E8y .FIXUP D
03E8y(8D00000C): LDR SB, MT, MOD0 [ORG]
03E9y(80D00024): LDR R0, SB, 24H [data]
03EAy(40040003): AND R0, R0, 3H
03EBz(40090000): SUB R0, R0, 0H
03ECz(E100000C): BEQ 12 [03F9H]
03EDa .FIXUP D
03EDa(8D000005): LDR SB, MT, MOD0 [ORG]
03EEa(80D00024): LDR R0, SB, 24H [data]
03EFa(41090960): SUB R1, R0, 960H
03F0a(DA207C1C): BLCC MT [trap=1, pos=8316]
03F1a(00D80000): ADD R0, SB, R0
03F2b(41000000): MOV R1, R0, 0H
03F3b(B1007F44): STR R1, R0, 7F44H
03F4c(40D80024): ADD R0, SB, 24H
03F5c(81000000): LDR R1, R0, 0H
03F6c(41180001): ADD R1, R1, 1H
03F7c(A1000000): STR R1, R0, 0H
03F8c(E7FFFFEF): B -17 [03E8H]
ELSE ORSd.Mark("too many strings")e
03F9d(E7000004): B 4 [03FEH]
03FAe .FIXUP D
03FAe(8D00000D): LDR SB, MT, MOD0 [ORG]
03FBe(40D88908): ADD R0, SB, FFFF8908H [data]
03FCe(41000011): MOV R1, R0, 11H
ENDf
03FDf .FIXUP P
03FDf(F72090A4): BL MOD2 [ORS] PROC9
ENDg MakeStringItem;
03FEg(8FE00000): LDR LNK, SP, 0H
03FFg(4EE80014): ADD SP, SP, 14H
0400g(C700000F): B LNK
PROCEDURE MakeItem*(VAR x: Item; y: ORB.Object; curlev: LONGINT);
BEGINh x.mode := y.classi;j x.type := y.typek;l x.a := y.valm;n x.rdo := y.rdoo;p
0401h .PROC 8
0401h(4EE90014): SUB SP, SP, 14H
0402h(AFE00000): STR LNK, SP, 0H
0403h(A0E00004): STR R0, SP, 4H
0404h(A1E00008): STR R1, SP, 8H
0405h(A2E0000C): STR R2, SP, CH
0406h(A3E00010): STR R3, SP, 10H
0407i(80E0000C): LDR R0, SP, CH
0408i(D121344C): BLEQ MT [trap=4, pos=8500]
0409j(90000000): LDR R0, R0, 0H
040Aj(81E00004): LDR R1, SP, 4H
040Bj(A0100000): STR R0, R1, 0H
040Ck(80E0000C): LDR R0, SP, CH
040Dk(D121464C): BLEQ MT [trap=4, pos=8518]
040El(80000010): LDR R0, R0, 10H
040Fl(81E00004): LDR R1, SP, 4H
0410l(A0100004): STR R0, R1, 4H
0411m(80E0000C): LDR R0, SP, CH
0412m(D121544C): BLEQ MT [trap=4, pos=8532]
0413n(80000034): LDR R0, R0, 34H
0414n(81E00004): LDR R1, SP, 4H
0415n(A0100008): STR R0, R1, 8H
0416o(80E0000C): LDR R0, SP, CH
0417o(D121644C): BLEQ MT [trap=4, pos=8548]
0418p(90000003): LDR R0, R0, 3H
0419p(81E00004): LDR R1, SP, 4H
041Ap(B0100014): STR R0, R1, 14H
IF y.classq = ORB.Par THENr x.b := 0
041Bq(80E0000C): LDR R0, SP, CH
041Cq(D121744C): BLEQ MT [trap=4, pos=8564]
041Dr(90000000): LDR R0, R0, 0H
041Er(40090003): SUB R0, R0, 3H
041Fr(E9000004): BNE 4 [0424H]
ELSIFs yt.classu = ORB.Typ THENv x.a := y.typew.lenx;y x.r := -y.levz
0420s(40000000): MOV R0, R0, 0H
0421s(81E00004): LDR R1, SP, 4H
0422s(A010000C): STR R0, R1, CH
0423t(E700002B): B 43 [044FH]
0424u(80E0000C): LDR R0, SP, CH
0425u(D1219E4C): BLEQ MT [trap=4, pos=8606]
0426v(90000000): LDR R0, R0, 0H
0427v(40090005): SUB R0, R0, 5H
0428v(E900000F): BNE 15 [0438H]
0429w(80E0000C): LDR R0, SP, CH
042Aw(D121BB4C): BLEQ MT [trap=4, pos=8635]
042Bx(80000010): LDR R0, R0, 10H
042Cx(D121BF4C): BLEQ MT [trap=4, pos=8639]
042Dy(80000010): LDR R0, R0, 10H
042Ey(81E00004): LDR R1, SP, 4H
042Fy(A0100008): STR R0, R1, 8H
0430z(80E0000C): LDR R0, SP, CH
0431z(D121CE4C): BLEQ MT [trap=4, pos=8654]
ELSIFa (by.classc = ORB.Const)d & (ey.typef.formg = ORB.String)h THENi x.b := y.levj (*len*)
0432a(80000004): LDR R0, R0, 4H
0433a(41000000): MOV R1, R0, 0H
0434a(00190000): SUB R0, R1, R0
0435a(81E00004): LDR R1, SP, 4H
0436a(A0100010): STR R0, R1, 10H
0437b(E7000017): B 23 [044FH]
0438c(80E0000C): LDR R0, SP, CH
0439c(D121E14C): BLEQ MT [trap=4, pos=8673]
043Ad(90000000): LDR R0, R0, 0H
043Bd(40090001): SUB R0, R0, 1H
043Ce(E900000D): BNE 13 [044AH]
043Df(80E0000C): LDR R0, SP, CH
043Ef(D121F84C): BLEQ MT [trap=4, pos=8696]
043Fg(80000010): LDR R0, R0, 10H
0440g(D121FD4C): BLEQ MT [trap=4, pos=8701]
0441h(80000000): LDR R0, R0, 0H
0442h(4009000B): SUB R0, R0, BH
0443i(E9000006): BNE 6 [044AH]
0444j(80E0000C): LDR R0, SP, CH
0445j(D1221D4C): BLEQ MT [trap=4, pos=8733]
ELSEk xl.r := y.levm
0446k(80000004): LDR R0, R0, 4H
0447k(81E00004): LDR R1, SP, 4H
0448k(A010000C): STR R0, R1, CH
0449l(E7000005): B 5 [044FH]
044Am(80E0000C): LDR R0, SP, CH
044Bm(D1223C4C): BLEQ MT [trap=4, pos=8764]
ENDn ;
044Cn(80000004): LDR R0, R0, 4H
044Dn(81E00004): LDR R1, SP, 4H
044En(A0100010): STR R0, R1, 10H
IF (y.levo > 0)p & (qy.levr # curlev)s & (ty.classu # ORB.Const)v THENw ORS.Mark("level error, not accessible")x ENDy
044Fo(80E0000C): LDR R0, SP, CH
0450o(D122544C): BLEQ MT [trap=4, pos=8788]
0451p(80000004): LDR R0, R0, 4H
0452p(40090000): SUB R0, R0, 0H
0453q(E600000F): BLE 15 [0463H]
0454r(80E0000C): LDR R0, SP, CH
0455r(D122624C): BLEQ MT [trap=4, pos=8802]
0456s(80000004): LDR R0, R0, 4H
0457s(81E00010): LDR R1, SP, 10H
0458s(00090001): SUB R0, R0, R1
0459t(E1000009): BEQ 9 [0463H]
045Au(80E0000C): LDR R0, SP, CH
045Bu(D122774C): BLEQ MT [trap=4, pos=8823]
045Cv(90000000): LDR R0, R0, 0H
045Dv(40090001): SUB R0, R0, 1H
045Ew(E1000004): BEQ 4 [0463H]
045Fx .FIXUP D
045Fx(8D000065): LDR SB, MT, MOD0 [ORG]
0460x(40D8891C): ADD R0, SB, FFFF891CH [data]
0461x(4100001C): MOV R1, R0, 1CH
0462y .FIXUP P
0462y(F7209065): BL MOD2 [ORS] PROC9
ENDz MakeItem;
0463z(8FE00000): LDR LNK, SP, 0H
0464z(4EE80014): ADD SP, SP, 14H
0465z(C700000F): B LNK
(* Code generation for Selectors, Variables, Constants *)
PROCEDURE Field*(VAR x: Item; y: ORB.Object); (* x := x.y *)
BEGINa;
0466a .PROC 9
0466a(4EE90010): SUB SP, SP, 10H
0467a(AFE00000): STR LNK, SP, 0H
0468a(A0E00004): STR R0, SP, 4H
0469a(A1E00008): STR R1, SP, 8H
046Aa(A2E0000C): STR R2, SP, CH
IF x.mode = ORB.Var THENb
046Bb(80E00004): LDR R0, SP, 4H
046Cb(80000000): LDR R0, R0, 0H
046Db(40090002): SUB R0, R0, 2H
046Eb(E9000019): BNE 25 [0488H]
IF x.r >= 0 THENc x.a := x.a + y.vald
046Fc(80E00004): LDR R0, SP, 4H
0470c(80000010): LDR R0, R0, 10H
0471c(40090000): SUB R0, R0, 0H
0472c(E5000009): BLT 9 [047CH]
0473d(80E0000C): LDR R0, SP, CH
0474d(D123944C): BLEQ MT [trap=4, pos=9108]
ELSEe loadAdrf(x)g;h x.mode := RegI;i x.a := y.valj
0475e(81E00004): LDR R1, SP, 4H
0476e(81100008): LDR R1, R1, 8H
0477e(80000034): LDR R0, R0, 34H
0478e(00180000): ADD R0, R1, R0
0479e(81E00004): LDR R1, SP, 4H
047Ae(A0100008): STR R0, R1, 8H
047Bf(E700000B): B 11 [0487H]
047Cg(80E00004): LDR R0, SP, 4H
047Dg(81E00008): LDR R1, SP, 8H
047Eh(F7FFFE3D): BL -451 [02BCH]
047Fi(4000000B): MOV R0, R0, BH
0480i(81E00004): LDR R1, SP, 4H
0481i(A0100000): STR R0, R1, 0H
0482j(80E0000C): LDR R0, SP, CH
0483j(D123C84C): BLEQ MT [trap=4, pos=9160]
ENDk
0484k(80000034): LDR R0, R0, 34H
0485k(81E00004): LDR R1, SP, 4H
0486k(A0100008): STR R0, R1, 8H
ELSIF xl.mode = RegI THENm x.a := x.a + y.valn
0487l(E7000019): B 25 [04A1H]
0488m(80E00004): LDR R0, SP, 4H
0489m(80000000): LDR R0, R0, 0H
048Am(4009000B): SUB R0, R0, BH
048Bm(E9000009): BNE 9 [0495H]
048Cn(80E0000C): LDR R0, SP, CH
048Dn(D124024C): BLEQ MT [trap=4, pos=9218]
ELSIFo xp.mode = ORB.Par THENq x.b := x.b + y.valr
048Eo(81E00004): LDR R1, SP, 4H
048Fo(81100008): LDR R1, R1, 8H
0490o(80000034): LDR R0, R0, 34H
0491o(00180000): ADD R0, R1, R0
0492o(81E00004): LDR R1, SP, 4H
0493o(A0100008): STR R0, R1, 8H
0494p(E700000C): B 12 [04A1H]
0495q(80E00004): LDR R0, SP, 4H
0496q(80000000): LDR R0, R0, 0H
0497q(40090003): SUB R0, R0, 3H
0498q(E9000008): BNE 8 [04A1H]
0499r(80E0000C): LDR R0, SP, CH
049Ar(D124354C): BLEQ MT [trap=4, pos=9269]
ENDs
049Bs(81E00004): LDR R1, SP, 4H
049Cs(8110000C): LDR R1, R1, CH
049Ds(80000034): LDR R0, R0, 34H
049Es(00180000): ADD R0, R1, R0
049Fs(81E00004): LDR R1, SP, 4H
04A0s(A010000C): STR R0, R1, CH
ENDt Field;
04A1t(8FE00000): LDR LNK, SP, 0H
04A2t(4EE80010): ADD SP, SP, 10H
04A3t(C700000F): B LNK
PROCEDURE Index*(VAR x, y: Item); (* x := x[y] *)
VAR s, lim: LONGINT;
BEGINu s := x.type.basev.sizew;x lim := x.type.leny;z
04A4u .PROC 10
04A4u(4EE9001C): SUB SP, SP, 1CH
04A5u(AFE00000): STR LNK, SP, 0H
04A6u(A0E00004): STR R0, SP, 4H
04A7u(A1E00008): STR R1, SP, 8H
04A8u(A2E0000C): STR R2, SP, CH
04A9u(A3E00010): STR R3, SP, 10H
04AAv(80E00004): LDR R0, SP, 4H
04ABv(80000004): LDR R0, R0, 4H
04ACv(D124B34C): BLEQ MT [trap=4, pos=9395]
04ADw(8000001C): LDR R0, R0, 1CH
04AEw(D124B84C): BLEQ MT [trap=4, pos=9400]
04AFx(80000020): LDR R0, R0, 20H
04B0x(A0E00014): STR R0, SP, 14H
04B1y(80E00004): LDR R0, SP, 4H
04B2y(80000004): LDR R0, R0, 4H
04B3y(D124CB4C): BLEQ MT [trap=4, pos=9419]
04B4z(80000010): LDR R0, R0, 10H
04B5z(A0E00018): STR R0, SP, 18H
IF (y.mode = ORB.Const)a & (blim >= 0)c THENd
04B6a(80E0000C): LDR R0, SP, CH
04B7a(80000000): LDR R0, R0, 0H
04B8a(40090001): SUB R0, R0, 1H
04B9b(E900002E): BNE 46 [04E8H]
04BAc(80E00018): LDR R0, SP, 18H
04BBc(40090000): SUB R0, R0, 0H
04BCd(E500002B): BLT 43 [04E8H]
IF (y.a < 0)e OR (fy.a >= lim)g THENh ORS.Mark("bad index")i ENDj ;
04BDe(80E0000C): LDR R0, SP, CH
04BEe(80000008): LDR R0, R0, 8H
04BFe(40090000): SUB R0, R0, 0H
04C0f(E5000005): BLT 5 [04C6H]
04C1g(80E0000C): LDR R0, SP, CH
04C2g(80000008): LDR R0, R0, 8H
04C3g(81E00018): LDR R1, SP, 18H
04C4g(00090001): SUB R0, R0, R1
04C5h(E5000004): BLT 4 [04CAH]
04C6i .FIXUP D
04C6i(8D000067): LDR SB, MT, MOD0 [ORG]
04C7i(40D88938): ADD R0, SB, FFFF8938H [data]
04C8i(4100000A): MOV R1, R0, AH
04C9j .FIXUP P
04C9j(F7209067): BL MOD2 [ORS] PROC9
IF x.mode IN {ORB.Var, RegI} THENk x.a := y.a * s +l x.a
04CAk(40000804): MOV R0, R0, 804H
04CBk(81E00004): LDR R1, SP, 4H
04CCk(81100000): LDR R1, R1, 0H
04CDk(41180001): ADD R1, R1, 1H
04CEk(00030001): ROR R0, R0, R1
04CFk(E800000A): BPL 10 [04DAH]
04D0l(80E0000C): LDR R0, SP, CH
04D1l(80000008): LDR R0, R0, 8H
04D2l(81E00014): LDR R1, SP, 14H
04D3l(000A0001): MUL R0, R0, R1
ELSIFm xn.mode = ORB.Par THENo x.b := y.a * s +p x.b
04D4m(81E00004): LDR R1, SP, 4H
04D5m(81100008): LDR R1, R1, 8H
04D6m(00080001): ADD R0, R0, R1
04D7m(81E00004): LDR R1, SP, 4H
04D8m(A0100008): STR R0, R1, 8H
04D9n(E700000D): B 13 [04E7H]
04DAo(80E00004): LDR R0, SP, 4H
04DBo(80000000): LDR R0, R0, 0H
04DCo(40090003): SUB R0, R0, 3H
04DDo(E9000009): BNE 9 [04E7H]
04DEp(80E0000C): LDR R0, SP, CH
04DFp(80000008): LDR R0, R0, 8H
04E0p(81E00014): LDR R1, SP, 14H
04E1p(000A0001): MUL R0, R0, R1
ENDq
04E2q(81E00004): LDR R1, SP, 4H
04E3q(8110000C): LDR R1, R1, CH
04E4q(00080001): ADD R0, R0, R1
04E5q(81E00004): LDR R1, SP, 4H
04E6q(A010000C): STR R0, R1, CH
ELSE loadr(y)s;t
04E7r(E70000B6): B 182 [059EH]
04E8s(80E0000C): LDR R0, SP, CH
04E9s(81E00010): LDR R1, SP, 10H
04EAt(F7FFFCE8): BL -792 [01D3H]
IF check THENu (*check array bounds*)
04EBu .FIXUP D
04EBu(8D000025): LDR SB, MT, MOD0 [ORG]
04ECu(90D00044): LDR R0, SB, 44H [data]
04EDu(E100002A): BEQ 42 [0518H]
IF lim >= 0 THENv Put1a(Cmp,w RH,x y.r,y lim)z
04EEv(80E00018): LDR R0, SP, 18H
04EFv(40090000): SUB R0, R0, 0H
04F0v(E5000008): BLT 8 [04F9H]
04F1w(40000009): MOV R0, R0, 9H
04F2x .FIXUP D
04F2x(8D000007): LDR SB, MT, MOD0 [ORG]
04F3x(81D0002C): LDR R1, SB, 2CH [data]
04F4y(82E0000C): LDR R2, SP, CH
04F5y(82200010): LDR R2, R2, 10H
04F6z(83E00018): LDR R3, SP, 18H
ELSEa (*open array*)
04F7a(F7FFFB4C): BL -1204 [0044H]
IFb x.mode IN {ORB.Var, ORB.Par} THENc Put2(Ldr,d RH,e SP,f x.a+4+gframe)h;i Put0(Cmp,j RH,k y.r,l RH)m
04F8b(E700001C): B 28 [0515H]
04F9c(4000000C): MOV R0, R0, CH
04FAc(81E00004): LDR R1, SP, 4H
04FBc(81100000): LDR R1, R1, 0H
04FCc(41180001): ADD R1, R1, 1H
04FDc(00030001): ROR R0, R0, R1
04FEc(E8000012): BPL 18 [0511H]
04FFd(40000008): MOV R0, R0, 8H
0500e .FIXUP D
0500e(8D00000E): LDR SB, MT, MOD0 [ORG]
0501e(81D0002C): LDR R1, SB, 2CH [data]
0502f(4200000E): MOV R2, R0, EH
0503g(83E00004): LDR R3, SP, 4H
0504g(83300008): LDR R3, R3, 8H
0505g(43380004): ADD R3, R3, 4H
0506h(84D00034): LDR R4, SB, 34H
0507h(03380004): ADD R3, R3, R4
0508i(F7FFFB68): BL -1176 [0071H]
0509j(40000009): MOV R0, R0, 9H
050Ak .FIXUP D
050Ak(8D00000A): LDR SB, MT, MOD0 [ORG]
050Bk(81D0002C): LDR R1, SB, 2CH [data]
050Cl(82E0000C): LDR R2, SP, CH
050Dl(82200010): LDR R2, R2, 10H
050Em(83D0002C): LDR R3, SB, 2CH
ELSEn ORSo.Mark("error in Index")p
050Fn(F7FFFAF0): BL -1296 [0000H]
0510o(E7000004): B 4 [0515H]
0511p .FIXUP D
0511p(8D000007): LDR SB, MT, MOD0 [ORG]
0512p(40D88944): ADD R0, SB, FFFF8944H [data]
0513p(4100000F): MOV R1, R0, FH
ENDq
0514q .FIXUP P
0514q(F720904B): BL MOD2 [ORS] PROC9
END ;
Trap(10,r 1)s (*BCC*)
0515r(4000000A): MOV R0, R0, AH
0516s(41000001): MOV R1, R0, 1H
ENDt ;
0517t(F7FFFBD4): BL -1068 [00ECH]
IF s = 4 THENu Put1(Lsl,v y.r,w y.r,x 2)y ELSIFz sa > 1 THENb Put1a(Mul,c y.r,d y.r,e s)f ENDg ;
0518u(80E00014): LDR R0, SP, 14H
0519u(40090004): SUB R0, R0, 4H
051Au(E9000008): BNE 8 [0523H]
051Bv(40000001): MOV R0, R0, 1H
051Cw(81E0000C): LDR R1, SP, CH
051Dw(81100010): LDR R1, R1, 10H
051Ex(82E0000C): LDR R2, SP, CH
051Fx(82200010): LDR R2, R2, 10H
0520y(43000002): MOV R3, R0, 2H
0521z(F7FFFAFC): BL -1284 [001EH]
0522a(E700000A): B 10 [052DH]
0523b(80E00014): LDR R0, SP, 14H
0524b(40090001): SUB R0, R0, 1H
0525b(E6000007): BLE 7 [052DH]
0526c(4000000A): MOV R0, R0, AH
0527d(81E0000C): LDR R1, SP, CH
0528d(81100010): LDR R1, R1, 10H
0529e(82E0000C): LDR R2, SP, CH
052Ae(82200010): LDR R2, R2, 10H
052Bf(83E00014): LDR R3, SP, 14H
052Cg(F7FFFB17): BL -1257 [0044H]
IF x.mode = ORB.Var THENh
052Dh(80E00004): LDR R0, SP, 4H
052Eh(80000000): LDR R0, R0, 0H
052Fh(40090002): SUB R0, R0, 2H
0530h(E900003B): BNE 59 [056CH]
IF x.r > 0 THENi Put0(Add,j y.r,k SP,l y.r)m;n INC(x.a, frame)
0531i(80E00004): LDR R0, SP, 4H
0532i(80000010): LDR R0, R0, 10H
0533i(40090000): SUB R0, R0, 0H
0534i(E600000F): BLE 15 [0544H]
0535j(40000008): MOV R0, R0, 8H
0536k(81E0000C): LDR R1, SP, CH
0537k(81100010): LDR R1, R1, 10H
0538l(4200000E): MOV R2, R0, EH
0539m(83E0000C): LDR R3, SP, CH
053Am(83300010): LDR R3, R3, 10H
053Bn(F7FFFAC4): BL -1340 [0000H]
ELSEo GetSBp(x.r)q;r
053Co(80E00004): LDR R0, SP, 4H
053Do(40080008): ADD R0, R0, 8H
053Eo(81000000): LDR R1, R0, 0H
053Fo .FIXUP D
053Fo(8D00002E): LDR SB, MT, MOD0 [ORG]
0540o(82D00034): LDR R2, SB, 34H [data]
0541o(01180002): ADD R1, R1, R2
0542o(A1000000): STR R1, R0, 0H
0543p(E7000020): B 32 [0564H]
0544q(80E00004): LDR R0, SP, 4H
0545q(80000010): LDR R0, R0, 10H
0546r(F7FFFC61): BL -927 [01A8H]
IF x.r = 0 THENs Put0(Add,t y.r,u SB,v y.r)w
0547s(80E00004): LDR R0, SP, 4H
0548s(80000010): LDR R0, R0, 10H
0549s(E9000008): BNE 8 [0552H]
054At(40000008): MOV R0, R0, 8H
054Bu(81E0000C): LDR R1, SP, CH
054Cu(81100010): LDR R1, R1, 10H
054Dv(4200000D): MOV R2, R0, DH
054Ew(83E0000C): LDR R3, SP, CH
054Fw(83300010): LDR R3, R3, 10H
ELSEx Put1ay(Add,z RH,a SB,b x.a)c;d Put0(Add,e y.r,f RH,g y.r)h;i x.a := 0
0550x(F7FFFAAF): BL -1361 [0000H]
0551y(E7000012): B 18 [0564H]
0552z(40000008): MOV R0, R0, 8H
0553a .FIXUP D
0553a(8D000014): LDR SB, MT, MOD0 [ORG]
0554a(81D0002C): LDR R1, SB, 2CH [data]
0555b(4200000D): MOV R2, R0, DH
0556c(83E00004): LDR R3, SP, 4H
0557c(83300008): LDR R3, R3, 8H
0558d(F7FFFAEB): BL -1301 [0044H]
0559e(40000008): MOV R0, R0, 8H
055Af(81E0000C): LDR R1, SP, CH
055Bf(81100010): LDR R1, R1, 10H
055Cg .FIXUP D
055Cg(8D000009): LDR SB, MT, MOD0 [ORG]
055Dg(82D0002C): LDR R2, SB, 2CH [data]
055Eh(83E0000C): LDR R3, SP, CH
055Fh(83300010): LDR R3, R3, 10H
0560i(F7FFFA9F): BL -1377 [0000H]
ENDj
0561j(40000000): MOV R0, R0, 0H
0562j(81E00004): LDR R1, SP, 4H
0563j(A0100008): STR R0, R1, 8H
END ;
x.r := y.r;k x.mode := RegI
0564k(80E0000C): LDR R0, SP, CH
0565k(80000010): LDR R0, R0, 10H
0566k(81E00004): LDR R1, SP, 4H
0567k(A0100010): STR R0, R1, 10H
ELSIFl xm.mode = ORB.Par THENn
0568l(4000000B): MOV R0, R0, BH
0569l(81E00004): LDR R1, SP, 4H
056Al(A0100000): STR R0, R1, 0H
056Bm(E7000032): B 50 [059EH]
056Cn(80E00004): LDR R0, SP, 4H
056Dn(80000000): LDR R0, R0, 0H
056En(40090003): SUB R0, R0, 3H
056Fn(E900001D): BNE 29 [058DH]
Put2(Ldr,o RH,p SP,q x.a + frame)r;s
0570o(40000008): MOV R0, R0, 8H
0571p .FIXUP D
0571p(8D000015): LDR SB, MT, MOD0 [ORG]
0572p(81D0002C): LDR R1, SB, 2CH [data]
0573q(4200000E): MOV R2, R0, EH
0574r(83E00004): LDR R3, SP, 4H
0575r(83300008): LDR R3, R3, 8H
0576r(84D00034): LDR R4, SB, 34H
0577r(03380004): ADD R3, R3, R4
0578s(F7FFFAF8): BL -1288 [0071H]
Put0(Add,t y.r,u RH,v y.r)w;x x.mode := RegI;y x.r := y.r;z x.a := x.b
0579t(40000008): MOV R0, R0, 8H
057Au(81E0000C): LDR R1, SP, CH
057Bu(81100010): LDR R1, R1, 10H
057Cv .FIXUP D
057Cv(8D00000B): LDR SB, MT, MOD0 [ORG]
057Dv(82D0002C): LDR R2, SB, 2CH [data]
057Ew(83E0000C): LDR R3, SP, CH
057Fw(83300010): LDR R3, R3, 10H
0580x(F7FFFA7F): BL -1409 [0000H]
0581y(4000000B): MOV R0, R0, BH
0582y(81E00004): LDR R1, SP, 4H
0583y(A0100000): STR R0, R1, 0H
0584z(80E0000C): LDR R0, SP, CH
0585z(80000010): LDR R0, R0, 10H
0586z(81E00004): LDR R1, SP, 4H
0587z(A0100010): STR R0, R1, 10H
ELSIFa xb.mode = RegI THENc Put0(Add,d x.r,e x.r,f y.r)g;h DEC(RH)
0588a(80E00004): LDR R0, SP, 4H
0589a(8000000C): LDR R0, R0, CH
058Aa(81E00004): LDR R1, SP, 4H
058Ba(A0100008): STR R0, R1, 8H
058Cb(E7000011): B 17 [059EH]
058Dc(80E00004): LDR R0, SP, 4H
058Ec(80000000): LDR R0, R0, 0H
058Fc(4009000B): SUB R0, R0, BH
0590c(E900000D): BNE 13 [059EH]
0591d(40000008): MOV R0, R0, 8H
0592e(81E00004): LDR R1, SP, 4H
0593e(81100010): LDR R1, R1, 10H
0594f(82E00004): LDR R2, SP, 4H
0595f(82200010): LDR R2, R2, 10H
0596g(83E0000C): LDR R3, SP, CH
0597g(83300010): LDR R3, R3, 10H
0598h(F7FFFA67): BL -1433 [0000H]
ENDi
0599i .FIXUP D
0599i(8D00001D): LDR SB, MT, MOD0 [ORG]
059Ai(40D8002C): ADD R0, SB, 2CH [data]
059Bi(81000000): LDR R1, R0, 0H
059Ci(41190001): SUB R1, R1, 1H
059Di(A1000000): STR R1, R0, 0H
END
ENDj Index;
059Ej(8FE00000): LDR LNK, SP, 0H
059Fj(4EE8001C): ADD SP, SP, 1CH
05A0j(C700000F): B LNK
PROCEDURE DeRef*(VAR x: Item);
BEGINk
05A1k .PROC 11
05A1k(4EE9000C): SUB SP, SP, CH
05A2k(AFE00000): STR LNK, SP, 0H
05A3k(A0E00004): STR R0, SP, 4H
05A4k(A1E00008): STR R1, SP, 8H
IF x.mode = ORB.Var THENl
05A5l(80E00004): LDR R0, SP, 4H
05A6l(80000000): LDR R0, R0, 0H
05A7l(40090002): SUB R0, R0, 2H
05A8l(E900001F): BNE 31 [05C8H]
IF x.r > 0 THENm (*local*) Put2(Ldr,n RH,o SP,p x.a + frame)q ELSEr GetSBs(x.r)t;u Put2(Ldr,v RH,w SB,x x.a)y ENDz ;
05A9m(80E00004): LDR R0, SP, 4H
05AAm(80000010): LDR R0, R0, 10H
05ABm(40090000): SUB R0, R0, 0H
05ACm(E600000A): BLE 10 [05B7H]
05ADn(40000008): MOV R0, R0, 8H
05AEo .FIXUP D
05AEo(8D000015): LDR SB, MT, MOD0 [ORG]
05AFo(81D0002C): LDR R1, SB, 2CH [data]
05B0p(4200000E): MOV R2, R0, EH
05B1q(83E00004): LDR R3, SP, 4H
05B2q(83300008): LDR R3, R3, 8H
05B3q(84D00034): LDR R4, SB, 34H
05B4q(03380004): ADD R3, R3, R4
05B5r(F7FFFABB): BL -1349 [0071H]
05B6s(E700000A): B 10 [05C1H]
05B7t(80E00004): LDR R0, SP, 4H
05B8t(80000010): LDR R0, R0, 10H
05B9u(F7FFFBEE): BL -1042 [01A8H]
05BAv(40000008): MOV R0, R0, 8H
05BBw .FIXUP D
05BBw(8D00000D): LDR SB, MT, MOD0 [ORG]
05BCw(81D0002C): LDR R1, SB, 2CH [data]
05BDx(4200000D): MOV R2, R0, DH
05BEy(83E00004): LDR R3, SP, 4H
05BFy(83300008): LDR R3, R3, 8H
05C0z(F7FFFAB0): BL -1360 [0071H]
NilCheck;a x.r := RH;b incR
05C1a(F7FFFC06): BL -1018 [01C8H]
05C2b .FIXUP D
05C2b(8D000007): LDR SB, MT, MOD0 [ORG]
05C3b(80D0002C): LDR R0, SB, 2CH [data]
05C4b(81E00004): LDR R1, SP, 4H
05C5b(A0100010): STR R0, R1, 10H
ELSIFc xd.mode = ORB.Par THENe
05C6c(F7FFFAE7): BL -1305 [00AEH]
05C7d(E7000031): B 49 [05F9H]
05C8e(80E00004): LDR R0, SP, 4H
05C9e(80000000): LDR R0, R0, 0H
05CAe(40090003): SUB R0, R0, 3H
05CBe(E9000017): BNE 23 [05E3H]
Put2(Ldr,f RH,g SP,h x.a + frame)i;j Put2(Ldr,k RH,l RH,m x.b)n;o NilCheck;p x.r := RH;q incR
05CCf(40000008): MOV R0, R0, 8H
05CDg .FIXUP D
05CDg(8D00000B): LDR SB, MT, MOD0 [ORG]
05CEg(81D0002C): LDR R1, SB, 2CH [data]
05CFh(4200000E): MOV R2, R0, EH
05D0i(83E00004): LDR R3, SP, 4H
05D1i(83300008): LDR R3, R3, 8H
05D2i(84D00034): LDR R4, SB, 34H
05D3i(03380004): ADD R3, R3, R4
05D4j(F7FFFA9C): BL -1380 [0071H]
05D5k(40000008): MOV R0, R0, 8H
05D6l .FIXUP D
05D6l(8D000009): LDR SB, MT, MOD0 [ORG]
05D7l(81D0002C): LDR R1, SB, 2CH [data]
05D8m(82D0002C): LDR R2, SB, 2CH
05D9n(83E00004): LDR R3, SP, 4H
05DAn(8330000C): LDR R3, R3, CH
05DBo(F7FFFA95): BL -1387 [0071H]
05DCp(F7FFFBEB): BL -1045 [01C8H]
05DDq .FIXUP D
05DDq(8D000007): LDR SB, MT, MOD0 [ORG]
05DEq(80D0002C): LDR R0, SB, 2CH [data]
05DFq(81E00004): LDR R1, SP, 4H
05E0q(A0100010): STR R0, R1, 10H
ELSIFr xs.mode = RegI THENt Put2(Ldr,u x.r,v x.r,w x.a)x;y NilCheck
05E1r(F7FFFACC): BL -1332 [00AEH]
05E2s(E7000016): B 22 [05F9H]
05E3t(80E00004): LDR R0, SP, 4H
05E4t(80000000): LDR R0, R0, 0H
05E5t(4009000B): SUB R0, R0, BH
05E6t(E900000A): BNE 10 [05F1H]
05E7u(40000008): MOV R0, R0, 8H
05E8v(81E00004): LDR R1, SP, 4H
05E9v(81100010): LDR R1, R1, 10H
05EAw(82E00004): LDR R2, SP, 4H
05EBw(82200010): LDR R2, R2, 10H
05ECx(83E00004): LDR R3, SP, 4H
05EDx(83300008): LDR R3, R3, 8H
05EEy(F7FFFA82): BL -1406 [0071H]
ELSIFz xa.mode # Reg THENb ORS.Mark("bad mode in DeRef")c
05EFz(F7FFFBD8): BL -1064 [01C8H]
05F0a(E7000008): B 8 [05F9H]
05F1b(80E00004): LDR R0, SP, 4H
05F2b(80000000): LDR R0, R0, 0H
05F3b(4009000A): SUB R0, R0, AH
05F4b(E1000004): BEQ 4 [05F9H]
05F5c .FIXUP D
05F5c(8D000018): LDR SB, MT, MOD0 [ORG]
05F6c(40D88954): ADD R0, SB, FFFF8954H [data]
05F7c(41000012): MOV R1, R0, 12H
ENDd ;
05F8d .FIXUP P
05F8d(F72090E4): BL MOD2 [ORS] PROC9
x.mode := RegI;e x.a := 0;f x.b := 0
05F9e(4000000B): MOV R0, R0, BH
05FAe(81E00004): LDR R1, SP, 4H
05FBe(A0100000): STR R0, R1, 0H
05FCf(40000000): MOV R0, R0, 0H
05FDf(81E00004): LDR R1, SP, 4H
05FEf(A0100008): STR R0, R1, 8H
ENDg DeRef;
05FFg(40000000): MOV R0, R0, 0H
0600g(81E00004): LDR R1, SP, 4H
0601g(A010000C): STR R0, R1, CH
0602g(8FE00000): LDR LNK, SP, 0H
0603g(4EE8000C): ADD SP, SP, CH
0604g(C700000F): B LNK
PROCEDURE Q(T: ORB.Type; VAR dcw: LONGINT);
BEGINh (*one entry of type descriptor extension table*)
0605h(4EE9000C): SUB SP, SP, CH
0606h(AFE00000): STR LNK, SP, 0H
0607h(A0E00004): STR R0, SP, 4H
0608h(A1E00008): STR R1, SP, 8H
IF T.basei # NIL THENj
0609i(80E00004): LDR R0, SP, 4H
060Ai(D12C174C): BLEQ MT [trap=4, pos=11287]
060Bj(8000001C): LDR R0, R0, 1CH
060Cj(E1000022): BEQ 34 [062FH]
Q(T.basek,l dcw)m;n data[dcw]o := (T.mnop*1000H +q T.lenr)s * 1000H +t dcw -u fixorgT;v
060Dk(80E00004): LDR R0, SP, 4H
060Ek(D12C314C): BLEQ MT [trap=4, pos=11313]
060Fl(8000001C): LDR R0, R0, 1CH
0610m(81E00008): LDR R1, SP, 8H
0611n(F7FFFFF3): BL -13 [0605H]
0612o(80E00008): LDR R0, SP, 8H
0613o(80000000): LDR R0, R0, 0H
0614o(41090078): SUB R1, R0, 78H
0615o(DA2C421C): BLCC MT [trap=1, pos=11330]
0616o(40010002): LSL R0, R0, 2H
0617o .FIXUP D
0617o(8D000022): LDR SB, MT, MOD0 [ORG]
0618o(00D80000): ADD R0, SB, R0 [global array]
0619p(81E00004): LDR R1, SP, 4H
061Ap(D12C4C4C): BLEQ MT [trap=4, pos=11340]
061Bq(81100008): LDR R1, R1, 8H
061Cq(4111000C): LSL R1, R1, CH
061Dr(82E00004): LDR R2, SP, 4H
061Er(D12C5A4C): BLEQ MT [trap=4, pos=11354]
061Fs(82200010): LDR R2, R2, 10H
0620s(01180002): ADD R1, R1, R2
0621t(4111000C): LSL R1, R1, CH
0622u(82E00008): LDR R2, SP, 8H
0623u(82200000): LDR R2, R2, 0H
0624u(01180002): ADD R1, R1, R2
0625v(82D00040): LDR R2, SB, 40H
0626v(01190002): SUB R1, R1, R2
0627v(A1007D64): STR R1, R0, 7D64H
fixorgT := dcw;w INC(dcw)
0628w(80E00008): LDR R0, SP, 8H
0629w(80000000): LDR R0, R0, 0H
062Aw(A0D00040): STR R0, SB, 40H
ENDx
062Bx(80E00008): LDR R0, SP, 8H
062Cx(81000000): LDR R1, R0, 0H
062Dx(41180001): ADD R1, R1, 1H
062Ex(A1000000): STR R1, R0, 0H
ENDy Q;
062Fy(8FE00000): LDR LNK, SP, 0H
0630y(4EE8000C): ADD SP, SP, CH
0631y(C700000F): B LNK
PROCEDURE FindPtrFlds(typ: ORB.Type; off: LONGINT; VAR dcw: LONGINT);
VAR fld: ORB.Object; i, s: LONGINT;
BEGINz
0632z(4EE9001C): SUB SP, SP, 1CH
0633z(AFE00000): STR LNK, SP, 0H
0634z(A0E00004): STR R0, SP, 4H
0635z(A1E00008): STR R1, SP, 8H
0636z(A2E0000C): STR R2, SP, CH
IF (typ.forma = ORB.Pointer)b OR (ctyp.formd = ORB.NilTyp)e THENf data[dcw]g := off;h INC(dcw)
0637a(80E00004): LDR R0, SP, 4H
0638a(D12D2E4C): BLEQ MT [trap=4, pos=11566]
0639b(80000000): LDR R0, R0, 0H
063Ab(40090007): SUB R0, R0, 7H
063Bc(E1000005): BEQ 5 [0641H]
063Cd(80E00004): LDR R0, SP, 4H
063Dd(D12D4A4C): BLEQ MT [trap=4, pos=11594]
063Ee(80000000): LDR R0, R0, 0H
063Fe(40090008): SUB R0, R0, 8H
0640f(E900000E): BNE 14 [064FH]
0641g(80E0000C): LDR R0, SP, CH
0642g(80000000): LDR R0, R0, 0H
0643g(41090078): SUB R1, R0, 78H
0644g(DA2D671C): BLCC MT [trap=1, pos=11623]
0645g(40010002): LSL R0, R0, 2H
0646g .FIXUP D
0646g(8D00002F): LDR SB, MT, MOD0 [ORG]
0647g(00D80000): ADD R0, SB, R0 [global array]
0648h(81E00008): LDR R1, SP, 8H
0649h(A1007D64): STR R1, R0, 7D64H
ELSIFi typj.formk = ORB.Record THENl
064Ai(80E0000C): LDR R0, SP, CH
064Bi(81000000): LDR R1, R0, 0H
064Ci(41180001): ADD R1, R1, 1H
064Di(A1000000): STR R1, R0, 0H
064Ej(E700003B): B 59 [068AH]
064Fk(80E00004): LDR R0, SP, 4H
0650k(D12D8B4C): BLEQ MT [trap=4, pos=11659]
0651l(80000000): LDR R0, R0, 0H
0652l(4009000D): SUB R0, R0, DH
0653l(E9000016): BNE 22 [066AH]
fld := typ.dscm;n
0654m(80E00004): LDR R0, SP, 4H
0655m(D12DB24C): BLEQ MT [trap=4, pos=11698]
0656n(80000014): LDR R0, R0, 14H
0657n(A0E00010): STR R0, SP, 10H
WHILE fld # NIL DOo FindPtrFlds(fld.typep,q fld.valr + off,s dcw)t;u fld := fld.nextv ENDw
0658o(80E00010): LDR R0, SP, 10H
0659o(E100000F): BEQ 15 [0669H]
065Ap(80E00010): LDR R0, SP, 10H
065Bp(D12DE14C): BLEQ MT [trap=4, pos=11745]
065Cq(80000010): LDR R0, R0, 10H
065Dr(81E00010): LDR R1, SP, 10H
065Er(D12DEA4C): BLEQ MT [trap=4, pos=11754]
065Fs(81100034): LDR R1, R1, 34H
0660s(82E00008): LDR R2, SP, 8H
0661s(01180002): ADD R1, R1, R2
0662t(82E0000C): LDR R2, SP, CH
0663u(F7FFFFCE): BL -50 [0632H]
0664v(80E00010): LDR R0, SP, 10H
0665v(D12E074C): BLEQ MT [trap=4, pos=11783]
0666w(80000008): LDR R0, R0, 8H
0667w(A0E00010): STR R0, SP, 10H
0668w(E7FFFFEF): B -17 [0658H]
ELSIF typx.formy = ORB.Array THENz
0669x(E7000020): B 32 [068AH]
066Ay(80E00004): LDR R0, SP, 4H
066By(D12E1E4C): BLEQ MT [trap=4, pos=11806]
066Cz(80000000): LDR R0, R0, 0H
066Dz(4009000C): SUB R0, R0, CH
066Ez(E900001B): BNE 27 [068AH]
s := typ.basea.sizeb;c
066Fa(80E00004): LDR R0, SP, 4H
0670a(D12E434C): BLEQ MT [trap=4, pos=11843]
0671b(8000001C): LDR R0, R0, 1CH
0672b(D12E484C): BLEQ MT [trap=4, pos=11848]
0673c(80000020): LDR R0, R0, 20H
0674c(A0E00018): STR R0, SP, 18H
FOR i := 0 TOd typ.lene-1 DOf FindPtrFldsg(typ.baseh,i i*s +j off,k dcw)l ENDm
0675d(40000000): MOV R0, R0, 0H
0676e(81E00004): LDR R1, SP, 4H
0677e(D12E654C): BLEQ MT [trap=4, pos=11877]
0678f(81100010): LDR R1, R1, 10H
0679f(41190001): SUB R1, R1, 1H
067Ag(01090001): SUB R1, R0, R1
067Bg(EE00000E): BGT 14 [068AH]
067Cg(A0E00014): STR R0, SP, 14H
067Dh(80E00004): LDR R0, SP, 4H
067Eh(D12E7F4C): BLEQ MT [trap=4, pos=11903]
067Fi(8000001C): LDR R0, R0, 1CH
0680j(81E00014): LDR R1, SP, 14H
0681j(82E00018): LDR R2, SP, 18H
0682j(011A0002): MUL R1, R1, R2
0683k(82E00008): LDR R2, SP, 8H
0684k(01180002): ADD R1, R1, R2
0685l(82E0000C): LDR R2, SP, CH
0686m(F7FFFFAB): BL -85 [0632H]
ENDn
0687n(80E00014): LDR R0, SP, 14H
0688n(40080001): ADD R0, R0, 1H
0689n(E7FFFFEC): B -20 [0676H]
ENDo FindPtrFlds;
068Ao(8FE00000): LDR LNK, SP, 0H
068Bo(4EE8001C): ADD SP, SP, 1CH
068Co(C700000F): B LNK
PROCEDURE BuildTD*(T: ORB.Type; VAR dc: LONGINT);
VAR dcw, k, s: LONGINT; (*dcw = word address*)
BEGINp dcw := dc DIV 4;q s := T.sizer;s (*convert size for heap allocation*)
068Dp .PROC 12
068Dp(4EE90018): SUB SP, SP, 18H
068Ep(AFE00000): STR LNK, SP, 0H
068Fp(A0E00004): STR R0, SP, 4H
0690p(A1E00008): STR R1, SP, 8H
0691q(80E00008): LDR R0, SP, 8H
0692q(80000000): LDR R0, R0, 0H
0693q(40020002): ASR R0, R0, 2H
0694q(A0E0000C): STR R0, SP, CH
0695r(80E00004): LDR R0, SP, 4H
0696r(D12F3D4C): BLEQ MT [trap=4, pos=12093]
0697s(80000020): LDR R0, R0, 20H
0698s(A0E00014): STR R0, SP, 14H
IF s <= 24 THENt s := 32 ELSIFu sv <= 56 THENw s := 64 ELSIFx sy <= 120 THENz s := 128
0699t(80E00014): LDR R0, SP, 14H
069At(40090018): SUB R0, R0, 18H
069Bt(EE000003): BGT 3 [069FH]
069Cu(40000020): MOV R0, R0, 20H
069Du(A0E00014): STR R0, SP, 14H
069Ev(E7000011): B 17 [06B0H]
069Fw(80E00014): LDR R0, SP, 14H
06A0w(40090038): SUB R0, R0, 38H
06A1w(EE000003): BGT 3 [06A5H]
06A2x(40000040): MOV R0, R0, 40H
06A3x(A0E00014): STR R0, SP, 14H
06A4y(E700000B): B 11 [06B0H]
06A5z(80E00014): LDR R0, SP, 14H
06A6z(40090078): SUB R0, R0, 78H
06A7z(EE000003): BGT 3 [06ABH]
ELSEa sb := (s+263)c DIV 256 *d 256
06A8a(40000080): MOV R0, R0, 80H
06A9a(A0E00014): STR R0, SP, 14H
06AAb(E7000005): B 5 [06B0H]
06ABc(80E00014): LDR R0, SP, 14H
06ACc(40080107): ADD R0, R0, 107H
06ADd(40020008): ASR R0, R0, 8H
ENDe ;
06AEe(40010008): LSL R0, R0, 8H
06AFe(A0E00014): STR R0, SP, 14H
T.lenf := dc;g data[dcw]h := s;i INC(dcw);j (*len used as address*)
06B0f(80E00004): LDR R0, SP, 4H
06B1f(D12FEF4C): BLEQ MT [trap=4, pos=12271]
06B2g(81E00008): LDR R1, SP, 8H
06B3g(81100000): LDR R1, R1, 0H
06B4g(A1000010): STR R1, R0, 10H
06B5h(80E0000C): LDR R0, SP, CH
06B6h(41090078): SUB R1, R0, 78H
06B7h(DA30001C): BLCC MT [trap=1, pos=12288]
06B8h(40010002): LSL R0, R0, 2H
06B9h .FIXUP D
06B9h(8D000073): LDR SB, MT, MOD0 [ORG]
06BAh(00D80000): ADD R0, SB, R0 [global array]
06BBi(81E00014): LDR R1, SP, 14H
06BCi(A1007D64): STR R1, R0, 7D64H
06BDj(80E0000C): LDR R0, SP, CH
06BEj(40080001): ADD R0, R0, 1H
06BFj(A0E0000C): STR R0, SP, CH
k := T.nofpark;l (*extension level!*)
06C0k(80E00004): LDR R0, SP, 4H
06C1k(D1303B4C): BLEQ MT [trap=4, pos=12347]
06C2l(8000000C): LDR R0, R0, CH
06C3l(A0E00010): STR R0, SP, 10H
IF k > 3 THENm ORS.Mark("ext level too large")n
06C4m(80E00010): LDR R0, SP, 10H
06C5m(40090003): SUB R0, R0, 3H
06C6m(E6000005): BLE 5 [06CCH]
06C7n .FIXUP D
06C7n(8D00000E): LDR SB, MT, MOD0 [ORG]
06C8n(40D88968): ADD R0, SB, FFFF8968H [data]
06C9n(41000014): MOV R1, R0, 14H
ELSEo Qp(T,q dcw)r;s
06CAo .FIXUP P
06CAo(F72090D2): BL MOD2 [ORS] PROC9
06CBp(E7000015): B 21 [06E1H]
06CCq(80E00004): LDR R0, SP, 4H
06CDr(41E8000C): ADD R1, SP, CH
06CEs(F7FFFF36): BL -202 [0605H]
WHILE k < 3 DOt data[dcw]u := -1;v INC(dcw);w INC(k) ENDx
06CFt(80E00010): LDR R0, SP, 10H
06D0t(40090003): SUB R0, R0, 3H
06D1t(ED00000F): BGE 15 [06E1H]
06D2u(80E0000C): LDR R0, SP, CH
06D3u(41090078): SUB R1, R0, 78H
06D4u(DA30B81C): BLCC MT [trap=1, pos=12472]
06D5u(40010002): LSL R0, R0, 2H
06D6u .FIXUP D
06D6u(8D00000F): LDR SB, MT, MOD0 [ORG]
06D7u(00D80000): ADD R0, SB, R0 [global array]
06D8v(5100FFFF): MOV R1, R0, FFFFFFFFH
06D9v(A1007D64): STR R1, R0, 7D64H
06DAw(80E0000C): LDR R0, SP, CH
06DBw(40080001): ADD R0, R0, 1H
06DCw(A0E0000C): STR R0, SP, CH
06DDx(80E00010): LDR R0, SP, 10H
06DEx(40080001): ADD R0, R0, 1H
06DFx(A0E00010): STR R0, SP, 10H
06E0x(E7FFFFEE): B -18 [06CFH]
END ;
FindPtrFlds(T,y 0,z dcw)a;b data[dcw]c := -1;d INC(dcw);e tdx := dcw;f dc := dcw*4;g
06E1y(80E00004): LDR R0, SP, 4H
06E2z(41000000): MOV R1, R0, 0H
06E3a(42E8000C): ADD R2, SP, CH
06E4b(F7FFFF4D): BL -179 [0632H]
06E5c(80E0000C): LDR R0, SP, CH
06E6c(41090078): SUB R1, R0, 78H
06E7c(DA31041C): BLCC MT [trap=1, pos=12548]
06E8c(40010002): LSL R0, R0, 2H
06E9c .FIXUP D
06E9c(8D000013): LDR SB, MT, MOD0 [ORG]
06EAc(00D80000): ADD R0, SB, R0 [global array]
06EBd(5100FFFF): MOV R1, R0, FFFFFFFFH
06ECd(A1007D64): STR R1, R0, 7D64H
06EDe(80E0000C): LDR R0, SP, CH
06EEe(40080001): ADD R0, R0, 1H
06EFe(A0E0000C): STR R0, SP, CH
06F0f(80E0000C): LDR R0, SP, CH
06F1f(A0D00020): STR R0, SB, 20H
06F2g(80E0000C): LDR R0, SP, CH
06F3g(40010002): LSL R0, R0, 2H
06F4g(81E00008): LDR R1, SP, 8H
06F5g(A0100000): STR R0, R1, 0H
IF tdx >= maxTD THENh ORS.Mark("too many record types")i;j tdx := 0 ENDk
06F6h(80D00020): LDR R0, SB, 20H
06F7h(40090078): SUB R0, R0, 78H
06F8h(E5000007): BLT 7 [0700H]
06F9i .FIXUP D
06F9i(8D000010): LDR SB, MT, MOD0 [ORG]
06FAi(40D8897C): ADD R0, SB, FFFF897CH [data]
06FBi(41000016): MOV R1, R0, 16H
06FCj .FIXUP P
06FCj(F7209032): BL MOD2 [ORS] PROC9
06FDk(40000000): MOV R0, R0, 0H
06FEk .FIXUP D
06FEk(8D000005): LDR SB, MT, MOD0 [ORG]
06FFk(A0D00020): STR R0, SB, 20H [data]
ENDl BuildTD;
0700l(8FE00000): LDR LNK, SP, 0H
0701l(4EE80018): ADD SP, SP, 18H
0702l(C700000F): B LNK
PROCEDURE TypeTest*(VAR x: Item; T: ORB.Type; varpar, isguard: BOOLEAN);
VAR pc0: LONGINT;
BEGINm (*fetch tag into RH*)
0703m .PROC 13
0703m(4EE9001C): SUB SP, SP, 1CH
0704m(AFE00000): STR LNK, SP, 0H
0705m(A0E00004): STR R0, SP, 4H
0706m(A1E00008): STR R1, SP, 8H
0707m(A2E0000C): STR R2, SP, CH
0708m(A3E00010): STR R3, SP, 10H
0709m(A4E00014): STR R4, SP, 14H
IF varpar THENn Put2(Ldr,o RH,p SP,q x.a+4+rframe)s
070An(90E00010): LDR R0, SP, 10H
070Bn(E100000B): BEQ 11 [0717H]
070Co(40000008): MOV R0, R0, 8H
070Dp .FIXUP D
070Dp(8D00000F): LDR SB, MT, MOD0 [ORG]
070Ep(81D0002C): LDR R1, SB, 2CH [data]
070Fq(4200000E): MOV R2, R0, EH
0710r(83E00004): LDR R3, SP, 4H
0711r(83300008): LDR R3, R3, 8H
0712r(43380004): ADD R3, R3, 4H
0713s(84D00034): LDR R4, SB, 34H
0714s(03380004): ADD R3, R3, R4
ELSEt loadu(x)v;w
0715t(F7FFF95B): BL -1701 [0071H]
0716u(E7000011): B 17 [0728H]
0717v(80E00004): LDR R0, SP, 4H
0718v(81E00008): LDR R1, SP, 8H
0719w(F7FFFAB9): BL -1351 [01D3H]
pc0 := pc;x Put3(BC,y EQ,z 0)a;b (*NIL belongs to every pointer type*)
071Ax .FIXUP D
071Ax(8D00000D): LDR SB, MT, MOD0 [ORG]
071Bx(80D00018): LDR R0, SB, 18H [data]
071Cx(A0E00018): STR R0, SP, 18H
071Dy(40000002): MOV R0, R0, 2H
071Ez(41000001): MOV R1, R0, 1H
071Fa(42000000): MOV R2, R0, 0H
0720b(F7FFF970): BL -1680 [0091H]
Put2(Ldr,c RH,d x.r,e -8)f
0721c(40000008): MOV R0, R0, 8H
0722d .FIXUP D
0722d(8D000008): LDR SB, MT, MOD0 [ORG]
0723d(81D0002C): LDR R1, SB, 2CH [data]
0724e(82E00004): LDR R2, SP, 4H
0725e(82200010): LDR R2, R2, 10H
0726f(5300FFF8): MOV R3, R0, FFFFFFF8H
ENDg ;
0727g(F7FFF949): BL -1719 [0071H]
Put2(Ldr,h RH,i RH,j T.nofpark*4)l;m incR;n
0728h(40000008): MOV R0, R0, 8H
0729i .FIXUP D
0729i(8D000007): LDR SB, MT, MOD0 [ORG]
072Ai(81D0002C): LDR R1, SB, 2CH [data]
072Bj(82D0002C): LDR R2, SB, 2CH
072Ck(83E0000C): LDR R3, SP, CH
072Dk(D132D94C): BLEQ MT [trap=4, pos=13017]
072El(8330000C): LDR R3, R3, CH
072Fl(43310002): LSL R3, R3, 2H
0730m(F7FFF940): BL -1728 [0071H]
0731n(F7FFF97C): BL -1668 [00AEH]
loadTypTagAdr(T)o;p (*tag of T*)
0732o(80E0000C): LDR R0, SP, CH
0733p(F7FFFC29): BL -983 [035DH]
Put0(Cmp,q RH-1,r RH-1,s RH-2)t;u DEC(RH, 2);v
0734q(40000009): MOV R0, R0, 9H
0735r .FIXUP D
0735r(8D00000C): LDR SB, MT, MOD0 [ORG]
0736r(81D0002C): LDR R1, SB, 2CH [data]
0737r(41190001): SUB R1, R1, 1H
0738s(82D0002C): LDR R2, SB, 2CH
0739s(42290001): SUB R2, R2, 1H
073At(83D0002C): LDR R3, SB, 2CH
073Bt(43390002): SUB R3, R3, 2H
073Cu(F7FFF8C3): BL -1853 [0000H]
073Dv .FIXUP D
073Dv(8D000008): LDR SB, MT, MOD0 [ORG]
073Ev(40D8002C): ADD R0, SB, 2CH [data]
073Fv(81000000): LDR R1, R0, 0H
0740v(41190002): SUB R1, R1, 2H
0741v(A1000000): STR R1, R0, 0H
IF ~varpar THENw fix(pc0,x pc - pc0 -y 1)z ENDa ;
0742w(90E00010): LDR R0, SP, 10H
0743w(E9000007): BNE 7 [074BH]
0744x(80E00018): LDR R0, SP, 18H
0745y .FIXUP D
0745y(8D000008): LDR SB, MT, MOD0 [ORG]
0746y(81D00018): LDR R1, SB, 18H [data]
0747y(82E00018): LDR R2, SP, 18H
0748y(01190002): SUB R1, R1, R2
0749z(41190001): SUB R1, R1, 1H
074Aa(F7FFF9D1): BL -1583 [011CH]
IF isguard THENb
074Bb(90E00014): LDR R0, SP, 14H
074Cb(E1000007): BEQ 7 [0754H]
IF check THENc Trap(NE,d 2)e ENDf
074Dc .FIXUP D
074Dc(8D000008): LDR SB, MT, MOD0 [ORG]
074Ec(90D00044): LDR R0, SB, 44H [data]
074Fc(E1000003): BEQ 3 [0753H]
0750d(40000009): MOV R0, R0, 9H
0751e(41000002): MOV R1, R0, 2H
0752f(F7FFF999): BL -1639 [00ECH]
ELSE SetCCg(x,h EQ)i;j
0753g(E700000B): B 11 [075FH]
0754h(80E00004): LDR R0, SP, 4H
0755h(81E00008): LDR R1, SP, 8H
0756i(42000001): MOV R2, R0, 1H
0757j(F7FFF980): BL -1664 [00D8H]
IF ~varpar THENk DEC(RH) ENDl
0758k(90E00010): LDR R0, SP, 10H
0759k(E9000005): BNE 5 [075FH]
075Al .FIXUP D
075Al(8D00000D): LDR SB, MT, MOD0 [ORG]
075Bl(40D8002C): ADD R0, SB, 2CH [data]
075Cl(81000000): LDR R1, R0, 0H
075Dl(41190001): SUB R1, R1, 1H
075El(A1000000): STR R1, R0, 0H
END
ENDm TypeTest;
075Fm(8FE00000): LDR LNK, SP, 0H
0760m(4EE8001C): ADD SP, SP, 1CH
0761m(C700000F): B LNK
(* Code generation for Boolean operators *)
PROCEDURE Not*(VAR x: Item); (* x := ~x *)
VAR t: LONGINT;
BEGINn
0762n .PROC 14
0762n(4EE90010): SUB SP, SP, 10H
0763n(AFE00000): STR LNK, SP, 0H
0764n(A0E00004): STR R0, SP, 4H
0765n(A1E00008): STR R1, SP, 8H
IF x.mode # Cond THENo loadCond(x)p ENDq ;
0766o(80E00004): LDR R0, SP, 4H
0767o(80000000): LDR R0, R0, 0H
0768o(4009000C): SUB R0, R0, CH
0769o(E1000003): BEQ 3 [076DH]
076Ap(80E00004): LDR R0, SP, 4H
076Bp(81E00008): LDR R1, SP, 8H
076Cq(F7FFFBAC): BL -1108 [0319H]
x.r := negated(x.r)r;s t := x.a;t x.a := x.b;u x.b := t
076Dr(80E00004): LDR R0, SP, 4H
076Er(80000010): LDR R0, R0, 10H
076Fs(F7FFF993): BL -1645 [0103H]
0770s(81E00004): LDR R1, SP, 4H
0771s(A0100010): STR R0, R1, 10H
0772t(80E00004): LDR R0, SP, 4H
0773t(80000008): LDR R0, R0, 8H
0774t(A0E0000C): STR R0, SP, CH
0775u(80E00004): LDR R0, SP, 4H
0776u(8000000C): LDR R0, R0, CH
0777u(81E00004): LDR R1, SP, 4H
0778u(A0100008): STR R0, R1, 8H
ENDv Not;
0779v(80E0000C): LDR R0, SP, CH
077Av(81E00004): LDR R1, SP, 4H
077Bv(A010000C): STR R0, R1, CH
077Cv(8FE00000): LDR LNK, SP, 0H
077Dv(4EE80010): ADD SP, SP, 10H
077Ev(C700000F): B LNK
PROCEDURE And1*(VAR x: Item); (* x := x & *)
BEGINw
077Fw .PROC 15
077Fw(4EE9000C): SUB SP, SP, CH
0780w(AFE00000): STR LNK, SP, 0H
0781w(A0E00004): STR R0, SP, 4H
0782w(A1E00008): STR R1, SP, 8H
IF x.mode # Cond THENx loadCond(x)y ENDz ;
0783x(80E00004): LDR R0, SP, 4H
0784x(80000000): LDR R0, R0, 0H
0785x(4009000C): SUB R0, R0, CH
0786x(E1000003): BEQ 3 [078AH]
0787y(80E00004): LDR R0, SP, 4H
0788y(81E00008): LDR R1, SP, 8H
0789z(F7FFFB8F): BL -1137 [0319H]
Put3(BC,a negated(xb.r)c,d x.a)e;f x.a := pc-1;g FixLink(x.b)h;i x.b := 0
078Aa(40000002): MOV R0, R0, 2H
078Bb(4EE90004): SUB SP, SP, 4H
078Cb(A0E00000): STR R0, SP, 0H
078Dc(80E00008): LDR R0, SP, 8H
078Ec(80000010): LDR R0, R0, 10H
078Fd(F7FFF973): BL -1677 [0103H]
0790d(01000000): MOV R1, R0, R0
0791d(80E00000): LDR R0, SP, 0H
0792d(4EE80004): ADD SP, SP, 4H
0793e(82E00004): LDR R2, SP, 4H
0794e(82200008): LDR R2, R2, 8H
0795f(F7FFF8FB): BL -1797 [0091H]
0796g .FIXUP D
0796g(8D00003C): LDR SB, MT, MOD0 [ORG]
0797g(80D00018): LDR R0, SB, 18H [data]
0798g(40090001): SUB R0, R0, 1H
0799g(81E00004): LDR R1, SP, 4H
079Ag(A0100008): STR R0, R1, 8H
079Bh(80E00004): LDR R0, SP, 4H
079Ch(8000000C): LDR R0, R0, CH
079Di(F7FFF998): BL -1640 [0136H]
ENDj And1;
079Ej(40000000): MOV R0, R0, 0H
079Fj(81E00004): LDR R1, SP, 4H
07A0j(A010000C): STR R0, R1, CH
07A1j(8FE00000): LDR LNK, SP, 0H
07A2j(4EE8000C): ADD SP, SP, CH
07A3j(C700000F): B LNK
PROCEDURE And2*(VAR x, y: Item);
BEGINk
07A4k .PROC 16
07A4k(4EE90014): SUB SP, SP, 14H
07A5k(AFE00000): STR LNK, SP, 0H
07A6k(A0E00004): STR R0, SP, 4H
07A7k(A1E00008): STR R1, SP, 8H
07A8k(A2E0000C): STR R2, SP, CH
07A9k(A3E00010): STR R3, SP, 10H
IF y.mode # Cond THENl loadCond(y)m ENDn ;
07AAl(80E0000C): LDR R0, SP, CH
07ABl(80000000): LDR R0, R0, 0H
07ACl(4009000C): SUB R0, R0, CH
07ADl(E1000003): BEQ 3 [07B1H]
07AEm(80E0000C): LDR R0, SP, CH
07AFm(81E00010): LDR R1, SP, 10H
07B0n(F7FFFB68): BL -1176 [0319H]
x.a := merged(y.a,o x.a)p;q x.b := y.b;r x.r := y.r
07B1o(80E0000C): LDR R0, SP, CH
07B2o(80000008): LDR R0, R0, 8H
07B3p(81E00004): LDR R1, SP, 4H
07B4p(81100008): LDR R1, R1, 8H
07B5q(F7FFF9C7): BL -1593 [017DH]
07B6q(81E00004): LDR R1, SP, 4H
07B7q(A0100008): STR R0, R1, 8H
07B8r(80E0000C): LDR R0, SP, CH
07B9r(8000000C): LDR R0, R0, CH
07BAr(81E00004): LDR R1, SP, 4H
07BBr(A010000C): STR R0, R1, CH
ENDs And2;
07BCs(80E0000C): LDR R0, SP, CH
07BDs(80000010): LDR R0, R0, 10H
07BEs(81E00004): LDR R1, SP, 4H
07BFs(A0100010): STR R0, R1, 10H
07C0s(8FE00000): LDR LNK, SP, 0H
07C1s(4EE80014): ADD SP, SP, 14H
07C2s(C700000F): B LNK
PROCEDURE Or1*(VAR x: Item); (* x := x OR *)
BEGINt
07C3t .PROC 17
07C3t(4EE9000C): SUB SP, SP, CH
07C4t(AFE00000): STR LNK, SP, 0H
07C5t(A0E00004): STR R0, SP, 4H
07C6t(A1E00008): STR R1, SP, 8H
IF x.mode # Cond THENu loadCond(x)v ENDw ;
07C7u(80E00004): LDR R0, SP, 4H
07C8u(80000000): LDR R0, R0, 0H
07C9u(4009000C): SUB R0, R0, CH
07CAu(E1000003): BEQ 3 [07CEH]
07CBv(80E00004): LDR R0, SP, 4H
07CCv(81E00008): LDR R1, SP, 8H
07CDw(F7FFFB4B): BL -1205 [0319H]
Put3(BC,x x.r,y x.b)z;a x.b := pc-1;b FixLink(x.a)c;d x.a := 0
07CEx(40000002): MOV R0, R0, 2H
07CFy(81E00004): LDR R1, SP, 4H
07D0y(81100010): LDR R1, R1, 10H
07D1z(82E00004): LDR R2, SP, 4H
07D2z(8220000C): LDR R2, R2, CH
07D3a(F7FFF8BD): BL -1859 [0091H]
07D4b .FIXUP D
07D4b(8D00003E): LDR SB, MT, MOD0 [ORG]
07D5b(80D00018): LDR R0, SB, 18H [data]
07D6b(40090001): SUB R0, R0, 1H
07D7b(81E00004): LDR R1, SP, 4H
07D8b(A010000C): STR R0, R1, CH
07D9c(80E00004): LDR R0, SP, 4H
07DAc(80000008): LDR R0, R0, 8H
07DBd(F7FFF95A): BL -1702 [0136H]
ENDe Or1;
07DCe(40000000): MOV R0, R0, 0H
07DDe(81E00004): LDR R1, SP, 4H
07DEe(A0100008): STR R0, R1, 8H
07DFe(8FE00000): LDR LNK, SP, 0H
07E0e(4EE8000C): ADD SP, SP, CH
07E1e(C700000F): B LNK
PROCEDURE Or2*(VAR x, y: Item);
BEGINf
07E2f .PROC 18
07E2f(4EE90014): SUB SP, SP, 14H
07E3f(AFE00000): STR LNK, SP, 0H
07E4f(A0E00004): STR R0, SP, 4H
07E5f(A1E00008): STR R1, SP, 8H
07E6f(A2E0000C): STR R2, SP, CH
07E7f(A3E00010): STR R3, SP, 10H
IF y.mode # Cond THENg loadCond(y)h ENDi ;
07E8g(80E0000C): LDR R0, SP, CH
07E9g(80000000): LDR R0, R0, 0H
07EAg(4009000C): SUB R0, R0, CH
07EBg(E1000003): BEQ 3 [07EFH]
07ECh(80E0000C): LDR R0, SP, CH
07EDh(81E00010): LDR R1, SP, 10H
07EEi(F7FFFB2A): BL -1238 [0319H]
x.a := y.a;j x.b := merged(y.b,k x.b)l;m x.r := y.r
07EFj(80E0000C): LDR R0, SP, CH
07F0j(80000008): LDR R0, R0, 8H
07F1j(81E00004): LDR R1, SP, 4H
07F2j(A0100008): STR R0, R1, 8H
07F3k(80E0000C): LDR R0, SP, CH
07F4k(8000000C): LDR R0, R0, CH
07F5l(81E00004): LDR R1, SP, 4H
07F6l(8110000C): LDR R1, R1, CH
07F7m(F7FFF985): BL -1659 [017DH]
07F8m(81E00004): LDR R1, SP, 4H
07F9m(A010000C): STR R0, R1, CH
ENDn Or2;
07FAn(80E0000C): LDR R0, SP, CH
07FBn(80000010): LDR R0, R0, 10H
07FCn(81E00004): LDR R1, SP, 4H
07FDn(A0100010): STR R0, R1, 10H
07FEn(8FE00000): LDR LNK, SP, 0H
07FFn(4EE80014): ADD SP, SP, 14H
0800n(C700000F): B LNK
(* Code generation for arithmetic operators *)
PROCEDURE Neg*(VAR x: Item); (* x := -x *)
BEGINo
0801o .PROC 19
0801o(4EE9000C): SUB SP, SP, CH
0802o(AFE00000): STR LNK, SP, 0H
0803o(A0E00004): STR R0, SP, 4H
0804o(A1E00008): STR R1, SP, 8H
IF x.type.formp = ORB.Int THENq
0805p(80E00004): LDR R0, SP, 4H
0806p(80000004): LDR R0, R0, 4H
0807p(D137E84C): BLEQ MT [trap=4, pos=14312]
0808q(80000000): LDR R0, R0, 0H
0809q(40090004): SUB R0, R0, 4H
080Aq(E900001D): BNE 29 [0828H]
IF x.mode = ORB.Const THENr x.a := -x.a
080Br(80E00004): LDR R0, SP, 4H
080Cr(80000000): LDR R0, R0, 0H
080Dr(40090001): SUB R0, R0, 1H
080Er(E9000007): BNE 7 [0816H]
ELSEs loadt(x)u;v Put1(Mov,w RH,x 0,y 0)z;a Put0(Sub,b x.r,c RH,d x.r)e
080Fs(80E00004): LDR R0, SP, 4H
0810s(80000008): LDR R0, R0, 8H
0811s(41000000): MOV R1, R0, 0H
0812s(00190000): SUB R0, R1, R0
0813s(81E00004): LDR R1, SP, 4H
0814s(A0100008): STR R0, R1, 8H
0815t(E7000011): B 17 [0827H]
0816u(80E00004): LDR R0, SP, 4H
0817u(81E00008): LDR R1, SP, 8H
0818v(F7FFF9BA): BL -1606 [01D3H]
0819w(40000000): MOV R0, R0, 0H
081Ax .FIXUP D
081Ax(8D000046): LDR SB, MT, MOD0 [ORG]
081Bx(81D0002C): LDR R1, SB, 2CH [data]
081Cy(42000000): MOV R2, R0, 0H
081Dz(43000000): MOV R3, R0, 0H
081Ea(F7FFF7FF): BL -2049 [001EH]
081Fb(40000009): MOV R0, R0, 9H
0820c(81E00004): LDR R1, SP, 4H
0821c(81100010): LDR R1, R1, 10H
0822d .FIXUP D
0822d(8D000008): LDR SB, MT, MOD0 [ORG]
0823d(82D0002C): LDR R2, SB, 2CH [data]
0824e(83E00004): LDR R3, SP, 4H
0825e(83300010): LDR R3, R3, 10H
ENDf
0826f(F7FFF7D9): BL -2087 [0000H]
ELSIF xg.type.formh = ORB.Real THENi
0827g(E700003B): B 59 [0863H]
0828h(80E00004): LDR R0, SP, 4H
0829h(80000004): LDR R0, R0, 4H
082Ah(D138854C): BLEQ MT [trap=4, pos=14469]
082Bi(80000000): LDR R0, R0, 0H
082Ci(40090005): SUB R0, R0, 5H
082Di(E900001F): BNE 31 [084DH]
IF x.mode = ORB.Const THENj x.a := x.a + 7FFFFFFFH +k 1
082Ej(80E00004): LDR R0, SP, 4H
082Fj(80000000): LDR R0, R0, 0H
0830j(40090001): SUB R0, R0, 1H
0831j(E9000009): BNE 9 [083BH]
0832k(80E00004): LDR R0, SP, 4H
0833k(80000008): LDR R0, R0, 8H
0834k(61007FFF): MOV' R1, R0, 7FFFH
0835k(4116FFFF): IOR R1, R1, FFFFFFFFH
0836k(00080001): ADD R0, R0, R1
ELSEl loadm(x)n;o Put1(Mov,p RH,q 0,r 0)s;t Put0(Fsb,u x.r,v RH,w x.r)x
0837l(40080001): ADD R0, R0, 1H
0838l(81E00004): LDR R1, SP, 4H
0839l(A0100008): STR R0, R1, 8H
083Am(E7000011): B 17 [084CH]
083Bn(80E00004): LDR R0, SP, 4H
083Cn(81E00008): LDR R1, SP, 8H
083Do(F7FFF995): BL -1643 [01D3H]
083Ep(40000000): MOV R0, R0, 0H
083Fq .FIXUP D
083Fq(8D00001D): LDR SB, MT, MOD0 [ORG]
0840q(81D0002C): LDR R1, SB, 2CH [data]
0841r(42000000): MOV R2, R0, 0H
0842s(43000000): MOV R3, R0, 0H
0843t(F7FFF7DA): BL -2086 [001EH]
0844u(4000000D): MOV R0, R0, DH
0845v(81E00004): LDR R1, SP, 4H
0846v(81100010): LDR R1, R1, 10H
0847w .FIXUP D
0847w(8D000008): LDR SB, MT, MOD0 [ORG]
0848w(82D0002C): LDR R2, SB, 2CH [data]
0849x(83E00004): LDR R3, SP, 4H
084Ax(83300010): LDR R3, R3, 10H
ENDy
084By(F7FFF7B4): BL -2124 [0000H]
ELSE (*form = Set*)
IFz x.mode = ORB.Const THENa x.a := -x.a-b1
084Cz(E7000016): B 22 [0863H]
084Da(80E00004): LDR R0, SP, 4H
084Ea(80000000): LDR R0, R0, 0H
084Fa(40090001): SUB R0, R0, 1H
0850a(E9000008): BNE 8 [0859H]
0851b(80E00004): LDR R0, SP, 4H
0852b(80000008): LDR R0, R0, 8H
0853b(41000000): MOV R1, R0, 0H
0854b(00190000): SUB R0, R1, R0
ELSEc loadd(x)e;f Put1(Xor,g x.r,h x.r,i -1)j
0855c(40090001): SUB R0, R0, 1H
0856c(81E00004): LDR R1, SP, 4H
0857c(A0100008): STR R0, R1, 8H
0858d(E700000A): B 10 [0863H]
0859e(80E00004): LDR R0, SP, 4H
085Ae(81E00008): LDR R1, SP, 8H
085Bf(F7FFF977): BL -1673 [01D3H]
085Cg(40000007): MOV R0, R0, 7H
085Dh(81E00004): LDR R1, SP, 4H
085Eh(81100010): LDR R1, R1, 10H
085Fi(82E00004): LDR R2, SP, 4H
0860i(82200010): LDR R2, R2, 10H
0861j(5300FFFF): MOV R3, R0, FFFFFFFFH
ENDk
0862k(F7FFF7BB): BL -2117 [001EH]
END
ENDl Neg;
0863l(8FE00000): LDR LNK, SP, 0H
0864l(4EE8000C): ADD SP, SP, CH
0865l(C700000F): B LNK
PROCEDURE AddOp*(op: LONGINT; VAR x, y: Item); (* x := x +- y *)
BEGINm
0866m .PROC 20
0866m(4EE90018): SUB SP, SP, 18H
0867m(AFE00000): STR LNK, SP, 0H
0868m(A0E00004): STR R0, SP, 4H
0869m(A1E00008): STR R1, SP, 8H
086Am(A2E0000C): STR R2, SP, CH
086Bm(A3E00010): STR R3, SP, 10H
086Cm(A4E00014): STR R4, SP, 14H
IF op = ORS.plus THENn
086Dn(80E00004): LDR R0, SP, 4H
086En(40090006): SUB R0, R0, 6H
086Fn(E900003C): BNE 60 [08ACH]
IF (x.mode = ORB.Const)o & (py.mode = ORB.Const)q THENr x.a := x.a + y.a
0870o(80E00008): LDR R0, SP, 8H
0871o(80000000): LDR R0, R0, 0H
0872o(40090001): SUB R0, R0, 1H
0873p(E900000C): BNE 12 [0880H]
0874q(80E00010): LDR R0, SP, 10H
0875q(80000000): LDR R0, R0, 0H
0876q(40090001): SUB R0, R0, 1H
0877r(E9000008): BNE 8 [0880H]
ELSIFs yt.mode = ORB.Const THENu load(x)v;w
0878s(80E00008): LDR R0, SP, 8H
0879s(80000008): LDR R0, R0, 8H
087As(81E00010): LDR R1, SP, 10H
087Bs(81100008): LDR R1, R1, 8H
087Cs(00080001): ADD R0, R0, R1
087Ds(81E00008): LDR R1, SP, 8H
087Es(A0100008): STR R0, R1, 8H
087Ft(E700002B): B 43 [08ABH]
0880u(80E00010): LDR R0, SP, 10H
0881u(80000000): LDR R0, R0, 0H
0882u(40090001): SUB R0, R0, 1H
0883u(E900000F): BNE 15 [0893H]
0884v(80E00008): LDR R0, SP, 8H
0885v(81E0000C): LDR R1, SP, CH
0886w(F7FFF94C): BL -1716 [01D3H]
IF y.a # 0 THENx Put1a(Add,y x.r,z x.r,a y.a)b ENDc
0887x(80E00010): LDR R0, SP, 10H
0888x(80000008): LDR R0, R0, 8H
0889x(E1000008): BEQ 8 [0892H]
088Ay(40000008): MOV R0, R0, 8H
088Bz(81E00008): LDR R1, SP, 8H
088Cz(81100010): LDR R1, R1, 10H
088Da(82E00008): LDR R2, SP, 8H
088Ea(82200010): LDR R2, R2, 10H
088Fb(83E00010): LDR R3, SP, 10H
0890b(83300008): LDR R3, R3, 8H
0891c(F7FFF7B2): BL -2126 [0044H]
ELSE loadd(x)e;f load(y)g;h Put0(Add,i RH-2,j x.r,k y.r)l;m DEC(RH);n x.r := RH-1
0892d(E7000018): B 24 [08ABH]
0893e(80E00008): LDR R0, SP, 8H
0894e(81E0000C): LDR R1, SP, CH
0895f(F7FFF93D): BL -1731 [01D3H]
0896g(80E00010): LDR R0, SP, 10H
0897g(81E00014): LDR R1, SP, 14H
0898h(F7FFF93A): BL -1734 [01D3H]
0899i(40000008): MOV R0, R0, 8H
089Aj .FIXUP D
089Aj(8D000053): LDR SB, MT, MOD0 [ORG]
089Bj(81D0002C): LDR R1, SB, 2CH [data]
089Cj(41190002): SUB R1, R1, 2H
089Dk(82E00008): LDR R2, SP, 8H
089Ek(82200010): LDR R2, R2, 10H
089Fl(83E00010): LDR R3, SP, 10H
08A0l(83300010): LDR R3, R3, 10H
08A1m(F7FFF75E): BL -2210 [0000H]
08A2n .FIXUP D
08A2n(8D000008): LDR SB, MT, MOD0 [ORG]
08A3n(40D8002C): ADD R0, SB, 2CH [data]
08A4n(81000000): LDR R1, R0, 0H
08A5n(41190001): SUB R1, R1, 1H
08A6n(A1000000): STR R1, R0, 0H
ENDo
08A7o(80D0002C): LDR R0, SB, 2CH
08A8o(40090001): SUB R0, R0, 1H
08A9o(81E00008): LDR R1, SP, 8H
08AAo(A0100010): STR R0, R1, 10H
ELSE (*op = ORS.minus*)
IFp (x.mode = ORB.Const)q & (ry.mode = ORB.Const)s THENt x.a := x.a - y.a
08ABp(E700003B): B 59 [08E7H]
08ACq(80E00008): LDR R0, SP, 8H
08ADq(80000000): LDR R0, R0, 0H
08AEq(40090001): SUB R0, R0, 1H
08AFr(E900000C): BNE 12 [08BCH]
08B0s(80E00010): LDR R0, SP, 10H
08B1s(80000000): LDR R0, R0, 0H
08B2s(40090001): SUB R0, R0, 1H
08B3t(E9000008): BNE 8 [08BCH]
ELSIFu yv.mode = ORB.Const THENw load(x)x;y
08B4u(80E00008): LDR R0, SP, 8H
08B5u(80000008): LDR R0, R0, 8H
08B6u(81E00010): LDR R1, SP, 10H
08B7u(81100008): LDR R1, R1, 8H
08B8u(00090001): SUB R0, R0, R1
08B9u(81E00008): LDR R1, SP, 8H
08BAu(A0100008): STR R0, R1, 8H
08BBv(E700002B): B 43 [08E7H]
08BCw(80E00010): LDR R0, SP, 10H
08BDw(80000000): LDR R0, R0, 0H
08BEw(40090001): SUB R0, R0, 1H
08BFw(E900000F): BNE 15 [08CFH]
08C0x(80E00008): LDR R0, SP, 8H
08C1x(81E0000C): LDR R1, SP, CH
08C2y(F7FFF910): BL -1776 [01D3H]
IF y.a # 0 THENz Put1a(Sub,a x.r,b x.r,c y.a)d ENDe
08C3z(80E00010): LDR R0, SP, 10H
08C4z(80000008): LDR R0, R0, 8H
08C5z(E1000008): BEQ 8 [08CEH]
08C6a(40000009): MOV R0, R0, 9H
08C7b(81E00008): LDR R1, SP, 8H
08C8b(81100010): LDR R1, R1, 10H
08C9c(82E00008): LDR R2, SP, 8H
08CAc(82200010): LDR R2, R2, 10H
08CBd(83E00010): LDR R3, SP, 10H
08CCd(83300008): LDR R3, R3, 8H
08CDe(F7FFF776): BL -2186 [0044H]
ELSE loadf(x)g;h load(y)i;j Put0(Sub,k RH-2,l x.r,m y.r)n;o DEC(RH);p x.r := RH-1
08CEf(E7000018): B 24 [08E7H]
08CFg(80E00008): LDR R0, SP, 8H
08D0g(81E0000C): LDR R1, SP, CH
08D1h(F7FFF901): BL -1791 [01D3H]
08D2i(80E00010): LDR R0, SP, 10H
08D3i(81E00014): LDR R1, SP, 14H
08D4j(F7FFF8FE): BL -1794 [01D3H]
08D5k(40000009): MOV R0, R0, 9H
08D6l .FIXUP D
08D6l(8D000034): LDR SB, MT, MOD0 [ORG]
08D7l(81D0002C): LDR R1, SB, 2CH [data]
08D8l(41190002): SUB R1, R1, 2H
08D9m(82E00008): LDR R2, SP, 8H
08DAm(82200010): LDR R2, R2, 10H
08DBn(83E00010): LDR R3, SP, 10H
08DCn(83300010): LDR R3, R3, 10H
08DDo(F7FFF722): BL -2270 [0000H]
08DEp .FIXUP D
08DEp(8D000008): LDR SB, MT, MOD0 [ORG]
08DFp(40D8002C): ADD R0, SB, 2CH [data]
08E0p(81000000): LDR R1, R0, 0H
08E1p(41190001): SUB R1, R1, 1H
08E2p(A1000000): STR R1, R0, 0H
ENDq
08E3q(80D0002C): LDR R0, SB, 2CH
08E4q(40090001): SUB R0, R0, 1H
08E5q(81E00008): LDR R1, SP, 8H
08E6q(A0100010): STR R0, R1, 10H
END
ENDr AddOp;
08E7r(8FE00000): LDR LNK, SP, 0H
08E8r(4EE80018): ADD SP, SP, 18H
08E9r(C700000F): B LNK
PROCEDURE log2(m: LONGINT; VAR e: LONGINT): LONGINT;
BEGINs e := 0;t
08EAs(4EE9000C): SUB SP, SP, CH
08EBs(AFE00000): STR LNK, SP, 0H
08ECs(A0E00004): STR R0, SP, 4H
08EDs(A1E00008): STR R1, SP, 8H
08EEt(40000000): MOV R0, R0, 0H
08EFt(81E00008): LDR R1, SP, 8H
08F0t(A0100000): STR R0, R1, 0H
WHILE ~ODD(m) DOu m := m DIV 2;v INC(e) ENDw ;
08F1u(80E00004): LDR R0, SP, 4H
08F2u(40040001): AND R0, R0, 1H
08F3u(E9000008): BNE 8 [08FCH]
08F4v(80E00004): LDR R0, SP, 4H
08F5v(40020001): ASR R0, R0, 1H
08F6v(A0E00004): STR R0, SP, 4H
08F7w(80E00008): LDR R0, SP, 8H
08F8w(81000000): LDR R1, R0, 0H
08F9w(41180001): ADD R1, R1, 1H
08FAw(A1000000): STR R1, R0, 0H
08FBw(E7FFFFF5): B -11 [08F1H]
RETURN m
ENDx log2;
08FCx(80E00004): LDR R0, SP, 4H
08FDx(8FE00000): LDR LNK, SP, 0H
08FEx(4EE8000C): ADD SP, SP, CH
08FFx(C700000F): B LNK
PROCEDURE MulOp*(VAR x, y: Item); (* x := x * y *)
VAR e: LONGINT;
BEGINy
0900y .PROC 21
0900y(4EE90018): SUB SP, SP, 18H
0901y(AFE00000): STR LNK, SP, 0H
0902y(A0E00004): STR R0, SP, 4H
0903y(A1E00008): STR R1, SP, 8H
0904y(A2E0000C): STR R2, SP, CH
0905y(A3E00010): STR R3, SP, 10H
IF (x.mode = ORB.Const)z & (ay.mode = ORB.Const)b THENc x.a := x.a * y.a
0906z(80E00004): LDR R0, SP, 4H
0907z(80000000): LDR R0, R0, 0H
0908z(40090001): SUB R0, R0, 1H
0909a(E900000C): BNE 12 [0916H]
090Ab(80E0000C): LDR R0, SP, CH
090Bb(80000000): LDR R0, R0, 0H
090Cb(40090001): SUB R0, R0, 1H
090Dc(E9000008): BNE 8 [0916H]
ELSIFd (ey.mode = ORB.Const)f & (gy.a >= 2)h & (ilog2(y.a,j e)k =l 1)m THENn load(x)o;p Put1(Lsl,q x.r,r x.r,s e)t
090Ed(80E00004): LDR R0, SP, 4H
090Fd(80000008): LDR R0, R0, 8H
0910d(81E0000C): LDR R1, SP, CH
0911d(81100008): LDR R1, R1, 8H
0912d(000A0001): MUL R0, R0, R1
0913d(81E00004): LDR R1, SP, 4H
0914d(A0100008): STR R0, R1, 8H
0915e(E7000078): B 120 [098EH]
0916f(80E0000C): LDR R0, SP, CH
0917f(80000000): LDR R0, R0, 0H
0918f(40090001): SUB R0, R0, 1H
0919g(E9000015): BNE 21 [092FH]
091Ah(80E0000C): LDR R0, SP, CH
091Bh(80000008): LDR R0, R0, 8H
091Ch(40090002): SUB R0, R0, 2H
091Di(E5000011): BLT 17 [092FH]
091Ej(80E0000C): LDR R0, SP, CH
091Fj(80000008): LDR R0, R0, 8H
0920k(41E80014): ADD R1, SP, 14H
0921l(F7FFFFC8): BL -56 [08EAH]
0922m(40090001): SUB R0, R0, 1H
0923n(E900000B): BNE 11 [092FH]
0924o(80E00004): LDR R0, SP, 4H
0925o(81E00008): LDR R1, SP, 8H
0926p(F7FFF8AC): BL -1876 [01D3H]
0927q(40000001): MOV R0, R0, 1H
0928r(81E00004): LDR R1, SP, 4H
0929r(81100010): LDR R1, R1, 10H
092As(82E00004): LDR R2, SP, 4H
092Bs(82200010): LDR R2, R2, 10H
092Ct(83E00014): LDR R3, SP, 14H
ELSIFu yv.mode = ORB.Const THENw load(x)x;y Put1a(Mul,z x.r,a x.r,b y.a)c
092Du(F7FFF6F0): BL -2320 [001EH]
092Ev(E700005F): B 95 [098EH]
092Fw(80E0000C): LDR R0, SP, CH
0930w(80000000): LDR R0, R0, 0H
0931w(40090001): SUB R0, R0, 1H
0932w(E900000C): BNE 12 [093FH]
0933x(80E00004): LDR R0, SP, 4H
0934x(81E00008): LDR R1, SP, 8H
0935y(F7FFF89D): BL -1891 [01D3H]
0936z(4000000A): MOV R0, R0, AH
0937a(81E00004): LDR R1, SP, 4H
0938a(81100010): LDR R1, R1, 10H
0939b(82E00004): LDR R2, SP, 4H
093Ab(82200010): LDR R2, R2, 10H
093Bc(83E0000C): LDR R3, SP, CH
093Cc(83300008): LDR R3, R3, 8H
ELSIFd (ex.mode = ORB.Const)f & (gx.a >= 2)h & (ilog2(x.a,j e)k =l 1)m THENn load(y)o;p Put1(Lsl,q y.r,r y.r,s e)t;u x.mode := Reg;v x.r := y.r
093Dd(F7FFF706): BL -2298 [0044H]
093Ee(E700004F): B 79 [098EH]
093Ff(80E00004): LDR R0, SP, 4H
0940f(80000000): LDR R0, R0, 0H
0941f(40090001): SUB R0, R0, 1H
0942g(E900001C): BNE 28 [095FH]
0943h(80E00004): LDR R0, SP, 4H
0944h(80000008): LDR R0, R0, 8H
0945h(40090002): SUB R0, R0, 2H
0946i(E5000018): BLT 24 [095FH]
0947j(80E00004): LDR R0, SP, 4H
0948j(80000008): LDR R0, R0, 8H
0949k(41E80014): ADD R1, SP, 14H
094Al(F7FFFF9F): BL -97 [08EAH]
094Bm(40090001): SUB R0, R0, 1H
094Cn(E9000012): BNE 18 [095FH]
094Do(80E0000C): LDR R0, SP, CH
094Eo(81E00010): LDR R1, SP, 10H
094Fp(F7FFF883): BL -1917 [01D3H]
0950q(40000001): MOV R0, R0, 1H
0951r(81E0000C): LDR R1, SP, CH
0952r(81100010): LDR R1, R1, 10H
0953s(82E0000C): LDR R2, SP, CH
0954s(82200010): LDR R2, R2, 10H
0955t(83E00014): LDR R3, SP, 14H
0956u(F7FFF6C7): BL -2361 [001EH]
0957v(4000000A): MOV R0, R0, AH
0958v(81E00004): LDR R1, SP, 4H
0959v(A0100000): STR R0, R1, 0H
ELSIFw xx.mode = ORB.Const THENy load(y)z;a Put1a(Mul,b y.r,c y.r,d x.a)e;f x.mode := Reg;g x.r := y.r
095Aw(80E0000C): LDR R0, SP, CH
095Bw(80000010): LDR R0, R0, 10H
095Cw(81E00004): LDR R1, SP, 4H
095Dw(A0100010): STR R0, R1, 10H
095Ex(E700002F): B 47 [098EH]
095Fy(80E00004): LDR R0, SP, 4H
0960y(80000000): LDR R0, R0, 0H
0961y(40090001): SUB R0, R0, 1H
0962y(E9000013): BNE 19 [0976H]
0963z(80E0000C): LDR R0, SP, CH
0964z(81E00010): LDR R1, SP, 10H
0965a(F7FFF86D): BL -1939 [01D3H]
0966b(4000000A): MOV R0, R0, AH
0967c(81E0000C): LDR R1, SP, CH
0968c(81100010): LDR R1, R1, 10H
0969d(82E0000C): LDR R2, SP, CH
096Ad(82200010): LDR R2, R2, 10H
096Be(83E00004): LDR R3, SP, 4H
096Ce(83300008): LDR R3, R3, 8H
096Df(F7FFF6D6): BL -2346 [0044H]
096Eg(4000000A): MOV R0, R0, AH
096Fg(81E00004): LDR R1, SP, 4H
0970g(A0100000): STR R0, R1, 0H
ELSEh loadi(x)j;k load(y)l;m Put0(Mul,n RH-2,o x.r,p y.r)q;r DEC(RH);s x.r := RH-1
0971h(80E0000C): LDR R0, SP, CH
0972h(80000010): LDR R0, R0, 10H
0973h(81E00004): LDR R1, SP, 4H
0974h(A0100010): STR R0, R1, 10H
0975i(E7000018): B 24 [098EH]
0976j(80E00004): LDR R0, SP, 4H
0977j(81E00008): LDR R1, SP, 8H
0978k(F7FFF85A): BL -1958 [01D3H]
0979l(80E0000C): LDR R0, SP, CH
097Al(81E00010): LDR R1, SP, 10H
097Bm(F7FFF857): BL -1961 [01D3H]
097Cn(4000000A): MOV R0, R0, AH
097Do .FIXUP D
097Do(8D00009F): LDR SB, MT, MOD0 [ORG]
097Eo(81D0002C): LDR R1, SB, 2CH [data]
097Fo(41190002): SUB R1, R1, 2H
0980p(82E00004): LDR R2, SP, 4H
0981p(82200010): LDR R2, R2, 10H
0982q(83E0000C): LDR R3, SP, CH
0983q(83300010): LDR R3, R3, 10H
0984r(F7FFF67B): BL -2437 [0000H]
0985s .FIXUP D
0985s(8D000008): LDR SB, MT, MOD0 [ORG]
0986s(40D8002C): ADD R0, SB, 2CH [data]
0987s(81000000): LDR R1, R0, 0H
0988s(41190001): SUB R1, R1, 1H
0989s(A1000000): STR R1, R0, 0H
ENDt
098At(80D0002C): LDR R0, SB, 2CH
098Bt(40090001): SUB R0, R0, 1H
098Ct(81E00004): LDR R1, SP, 4H
098Dt(A0100010): STR R0, R1, 10H
ENDu MulOp;
098Eu(8FE00000): LDR LNK, SP, 0H
098Fu(4EE80018): ADD SP, SP, 18H
0990u(C700000F): B LNK
PROCEDURE DivOp*(op: LONGINT; VAR x, y: Item); (* x := x op y *)
VAR e: LONGINT;
BEGINv
0991v .PROC 22
0991v(4EE9001C): SUB SP, SP, 1CH
0992v(AFE00000): STR LNK, SP, 0H
0993v(A0E00004): STR R0, SP, 4H
0994v(A1E00008): STR R1, SP, 8H
0995v(A2E0000C): STR R2, SP, CH
0996v(A3E00010): STR R3, SP, 10H
0997v(A4E00014): STR R4, SP, 14H
IF op = ORS.div THENw
0998w(80E00004): LDR R0, SP, 4H
0999w(40090003): SUB R0, R0, 3H
099Aw(E900006B): BNE 107 [0A06H]
IF (x.mode = ORB.Const)x & (yy.mode = ORB.Const)z THENa
099Bx(80E00008): LDR R0, SP, 8H
099Cx(80000000): LDR R0, R0, 0H
099Dx(40090001): SUB R0, R0, 1H
099Ey(E9000016): BNE 22 [09B5H]
099Fz(80E00010): LDR R0, SP, 10H
09A0z(80000000): LDR R0, R0, 0H
09A1z(40090001): SUB R0, R0, 1H
09A2a(E9000012): BNE 18 [09B5H]
IF y.a > 0 THENb x.a := x.a DIV y.a ELSEc ORSd.Mark("bad divisor")e ENDf
09A3b(80E00010): LDR R0, SP, 10H
09A4b(80000008): LDR R0, R0, 8H
09A5b(40090000): SUB R0, R0, 0H
09A6b(E6000009): BLE 9 [09B0H]
09A7c(80E00010): LDR R0, SP, 10H
09A8c(80000008): LDR R0, R0, 8H
09A9c(D640516C): BLLE MT [trap=6, pos=16465]
09AAc(81E00008): LDR R1, SP, 8H
09ABc(81100008): LDR R1, R1, 8H
09ACc(001B0000): DIV R0, R1, R0
09ADc(81E00008): LDR R1, SP, 8H
09AEc(A0100008): STR R0, R1, 8H
09AFd(E7000004): B 4 [09B4H]
09B0e .FIXUP D
09B0e(8D00002B): LDR SB, MT, MOD0 [ORG]
09B1e(40D88994): ADD R0, SB, FFFF8994H [data]
09B2e(4100000C): MOV R1, R0, CH
09B3f .FIXUP P
09B3f(F72092B7): BL MOD2 [ORS] PROC9
ELSIF (gy.mode = ORB.Const)h & (iy.a >= 2)j & (klog2(y.a,l e)m =n 1)o THENp load(x)q;r Put1(Asr,s x.r,t x.r,u e)v
09B4g(E7000050): B 80 [0A05H]
09B5h(80E00010): LDR R0, SP, 10H
09B6h(80000000): LDR R0, R0, 0H
09B7h(40090001): SUB R0, R0, 1H
09B8i(E9000015): BNE 21 [09CEH]
09B9j(80E00010): LDR R0, SP, 10H
09BAj(80000008): LDR R0, R0, 8H
09BBj(40090002): SUB R0, R0, 2H
09BCk(E5000011): BLT 17 [09CEH]
09BDl(80E00010): LDR R0, SP, 10H
09BEl(80000008): LDR R0, R0, 8H
09BFm(41E80018): ADD R1, SP, 18H
09C0n(F7FFFF29): BL -215 [08EAH]
09C1o(40090001): SUB R0, R0, 1H
09C2p(E900000B): BNE 11 [09CEH]
09C3q(80E00008): LDR R0, SP, 8H
09C4q(81E0000C): LDR R1, SP, CH
09C5r(F7FFF80D): BL -2035 [01D3H]
09C6s(40000002): MOV R0, R0, 2H
09C7t(81E00008): LDR R1, SP, 8H
09C8t(81100010): LDR R1, R1, 10H
09C9u(82E00008): LDR R2, SP, 8H
09CAu(82200010): LDR R2, R2, 10H
09CBv(83E00018): LDR R3, SP, 18H
ELSIFw yx.mode = ORB.Const THENy
09CCw(F7FFF651): BL -2479 [001EH]
09CDx(E7000037): B 55 [0A05H]
09CEy(80E00010): LDR R0, SP, 10H
09CFy(80000000): LDR R0, R0, 0H
09D0y(40090001): SUB R0, R0, 1H
09D1y(E9000015): BNE 21 [09E7H]
IF y.a > 0 THENz load(x)a;b Put1a(Div,c x.r,d x.r,e y.a)f ELSEg ORSh.Mark("bad divisor")i ENDj
09D2z(80E00010): LDR R0, SP, 10H
09D3z(80000008): LDR R0, R0, 8H
09D4z(40090000): SUB R0, R0, 0H
09D5z(E600000C): BLE 12 [09E2H]
09D6a(80E00008): LDR R0, SP, 8H
09D7a(81E0000C): LDR R1, SP, CH
09D8b(F7FFF7FA): BL -2054 [01D3H]
09D9c(4000000B): MOV R0, R0, BH
09DAd(81E00008): LDR R1, SP, 8H
09DBd(81100010): LDR R1, R1, 10H
09DCe(82E00008): LDR R2, SP, 8H
09DDe(82200010): LDR R2, R2, 10H
09DEf(83E00010): LDR R3, SP, 10H
09DFf(83300008): LDR R3, R3, 8H
09E0g(F7FFF663): BL -2461 [0044H]
09E1h(E7000004): B 4 [09E6H]
09E2i .FIXUP D
09E2i(8D000032): LDR SB, MT, MOD0 [ORG]
09E3i(40D889A0): ADD R0, SB, FFFF89A0H [data]
09E4i(4100000C): MOV R1, R0, CH
09E5j .FIXUP P
09E5j(F7209032): BL MOD2 [ORS] PROC9
ELSE loadk(y)l;m
09E6k(E700001E): B 30 [0A05H]
09E7l(80E00010): LDR R0, SP, 10H
09E8l(81E00014): LDR R1, SP, 14H
09E9m(F7FFF7E9): BL -2071 [01D3H]
IF check THENn Trap(LE,o 6)p ENDq ;
09EAn .FIXUP D
09EAn(8D000008): LDR SB, MT, MOD0 [ORG]
09EBn(90D00044): LDR R0, SB, 44H [data]
09ECn(E1000003): BEQ 3 [09F0H]
09EDo(40000006): MOV R0, R0, 6H
09EEp(41000006): MOV R1, R0, 6H
09EFq(F7FFF6FC): BL -2308 [00ECH]
load(x)r;s Put0(Div,t RH-2,u x.r,v y.r)w;x DEC(RH);y x.r := RH-1
09F0r(80E00008): LDR R0, SP, 8H
09F1r(81E0000C): LDR R1, SP, CH
09F2s(F7FFF7E0): BL -2080 [01D3H]
09F3t(4000000B): MOV R0, R0, BH
09F4u .FIXUP D
09F4u(8D00000A): LDR SB, MT, MOD0 [ORG]
09F5u(81D0002C): LDR R1, SB, 2CH [data]
09F6u(41190002): SUB R1, R1, 2H
09F7v(82E00008): LDR R2, SP, 8H
09F8v(82200010): LDR R2, R2, 10H
09F9w(83E00010): LDR R3, SP, 10H
09FAw(83300010): LDR R3, R3, 10H
09FBx(F7FFF604): BL -2556 [0000H]
09FCy .FIXUP D
09FCy(8D000008): LDR SB, MT, MOD0 [ORG]
09FDy(40D8002C): ADD R0, SB, 2CH [data]
09FEy(81000000): LDR R1, R0, 0H
09FFy(41190001): SUB R1, R1, 1H
0A00y(A1000000): STR R1, R0, 0H
ENDz
0A01z(80D0002C): LDR R0, SB, 2CH
0A02z(40090001): SUB R0, R0, 1H
0A03z(81E00008): LDR R1, SP, 8H
0A04z(A0100010): STR R0, R1, 10H
ELSE (*op = ORS.mod*)
IFa (x.mode = ORB.Const)b & (cy.mode = ORB.Const)d THENe
0A05a(E7000090): B 144 [0A96H]
0A06b(80E00008): LDR R0, SP, 8H
0A07b(80000000): LDR R0, R0, 0H
0A08b(40090001): SUB R0, R0, 1H
0A09c(E9000017): BNE 23 [0A21H]
0A0Ad(80E00010): LDR R0, SP, 10H
0A0Bd(80000000): LDR R0, R0, 0H
0A0Cd(40090001): SUB R0, R0, 1H
0A0De(E9000013): BNE 19 [0A21H]
IF y.a > 0 THENf x.a := x.a MOD y.a ELSEg ORSh.Mark("bad modulus")i ENDj
0A0Ef(80E00010): LDR R0, SP, 10H
0A0Ff(80000008): LDR R0, R0, 8H
0A10f(40090000): SUB R0, R0, 0H
0A11f(E600000A): BLE 10 [0A1CH]
0A12g(80E00010): LDR R0, SP, 10H
0A13g(80000008): LDR R0, R0, 8H
0A14g(D642606C): BLLE MT [trap=6, pos=16992]
0A15g(81E00008): LDR R1, SP, 8H
0A16g(81100008): LDR R1, R1, 8H
0A17g(001B0000): DIV R0, R1, R0
0A18g(20000000): MOV' R0, R0, R0
0A19g(81E00008): LDR R1, SP, 8H
0A1Ag(A0100008): STR R0, R1, 8H
0A1Bh(E7000004): B 4 [0A20H]
0A1Ci .FIXUP D
0A1Ci(8D000020): LDR SB, MT, MOD0 [ORG]
0A1Di(40D889AC): ADD R0, SB, FFFF89ACH [data]
0A1Ei(4100000C): MOV R1, R0, CH
0A1Fj .FIXUP P
0A1Fj(F720903A): BL MOD2 [ORS] PROC9
ELSIF (ky.mode = ORB.Const)l & (my.a >= 2)n & (olog2(y.a,p e)q =r 1)s THENt load(x)u;v
0A20k(E7000075): B 117 [0A96H]
0A21l(80E00010): LDR R0, SP, 10H
0A22l(80000000): LDR R0, R0, 0H
0A23l(40090001): SUB R0, R0, 1H
0A24m(E900002D): BNE 45 [0A52H]
0A25n(80E00010): LDR R0, SP, 10H
0A26n(80000008): LDR R0, R0, 8H
0A27n(40090002): SUB R0, R0, 2H
0A28o(E5000029): BLT 41 [0A52H]
0A29p(80E00010): LDR R0, SP, 10H
0A2Ap(80000008): LDR R0, R0, 8H
0A2Bq(41E80018): ADD R1, SP, 18H
0A2Cr(F7FFFEBD): BL -323 [08EAH]
0A2Ds(40090001): SUB R0, R0, 1H
0A2Et(E9000023): BNE 35 [0A52H]
0A2Fu(80E00008): LDR R0, SP, 8H
0A30u(81E0000C): LDR R1, SP, CH
0A31v(F7FFF7A1): BL -2143 [01D3H]
IF e <= 16 THENw Put1(And,x x.r,y x.r,z y.a-1)a ELSEb Put1c(Lsl,d x.r,e x.r,f 32-e)g;h Put1(Ror,i x.r,j x.r,k 32-e)l ENDm
0A32w(80E00018): LDR R0, SP, 18H
0A33w(40090010): SUB R0, R0, 10H
0A34w(EE00000A): BGT 10 [0A3FH]
0A35x(40000004): MOV R0, R0, 4H
0A36y(81E00008): LDR R1, SP, 8H
0A37y(81100010): LDR R1, R1, 10H
0A38z(82E00008): LDR R2, SP, 8H
0A39z(82200010): LDR R2, R2, 10H
0A3Aa(83E00010): LDR R3, SP, 10H
0A3Ba(83300008): LDR R3, R3, 8H
0A3Ca(43390001): SUB R3, R3, 1H
0A3Db(F7FFF5E0): BL -2592 [001EH]
0A3Ec(E7000012): B 18 [0A51H]
0A3Fd(40000001): MOV R0, R0, 1H
0A40e(81E00008): LDR R1, SP, 8H
0A41e(81100010): LDR R1, R1, 10H
0A42f(82E00008): LDR R2, SP, 8H
0A43f(82200010): LDR R2, R2, 10H
0A44g(43000020): MOV R3, R0, 20H
0A45g(84E00018): LDR R4, SP, 18H
0A46g(03390004): SUB R3, R3, R4
0A47h(F7FFF5D6): BL -2602 [001EH]
0A48i(40000003): MOV R0, R0, 3H
0A49j(81E00008): LDR R1, SP, 8H
0A4Aj(81100010): LDR R1, R1, 10H
0A4Bk(82E00008): LDR R2, SP, 8H
0A4Ck(82200010): LDR R2, R2, 10H
0A4Dl(43000020): MOV R3, R0, 20H
0A4El(84E00018): LDR R4, SP, 18H
0A4Fl(03390004): SUB R3, R3, R4
0A50m(F7FFF5CD): BL -2611 [001EH]
ELSIF yn.mode = ORB.Const THENo
0A51n(E7000044): B 68 [0A96H]
0A52o(80E00010): LDR R0, SP, 10H
0A53o(80000000): LDR R0, R0, 0H
0A54o(40090001): SUB R0, R0, 1H
0A55o(E900001B): BNE 27 [0A71H]
IF y.a > 0 THENp load(x)q;r Put1a(Div,s x.r,t x.r,u y.a)v;w Put0(Mov+U,x x.r,y 0,z 0)a ELSEb ORSc.Mark("bad modulus")d ENDe
0A56p(80E00010): LDR R0, SP, 10H
0A57p(80000008): LDR R0, R0, 8H
0A58p(40090000): SUB R0, R0, 0H
0A59p(E6000012): BLE 18 [0A6CH]
0A5Aq(80E00008): LDR R0, SP, 8H
0A5Bq(81E0000C): LDR R1, SP, CH
0A5Cr(F7FFF776): BL -2186 [01D3H]
0A5Ds(4000000B): MOV R0, R0, BH
0A5Et(81E00008): LDR R1, SP, 8H
0A5Ft(81100010): LDR R1, R1, 10H
0A60u(82E00008): LDR R2, SP, 8H
0A61u(82200010): LDR R2, R2, 10H
0A62v(83E00010): LDR R3, SP, 10H
0A63v(83300008): LDR R3, R3, 8H
0A64w(F7FFF5DF): BL -2593 [0044H]
0A65x(40002000): MOV R0, R0, 2000H
0A66y(81E00008): LDR R1, SP, 8H
0A67y(81100010): LDR R1, R1, 10H
0A68z(42000000): MOV R2, R0, 0H
0A69a(43000000): MOV R3, R0, 0H
0A6Ab(F7FFF595): BL -2667 [0000H]
0A6Bc(E7000004): B 4 [0A70H]
0A6Cd .FIXUP D
0A6Cd(8D000050): LDR SB, MT, MOD0 [ORG]
0A6Dd(40D889B8): ADD R0, SB, FFFF89B8H [data]
0A6Ed(4100000C): MOV R1, R0, CH
0A6Fe .FIXUP P
0A6Fe(F7209050): BL MOD2 [ORS] PROC9
ELSE loadf(y)g;h
0A70f(E7000025): B 37 [0A96H]
0A71g(80E00010): LDR R0, SP, 10H
0A72g(81E00014): LDR R1, SP, 14H
0A73h(F7FFF75F): BL -2209 [01D3H]
IF check THENi Trap(LE,j 6)k ENDl ;
0A74i .FIXUP D
0A74i(8D000008): LDR SB, MT, MOD0 [ORG]
0A75i(90D00044): LDR R0, SB, 44H [data]
0A76i(E1000003): BEQ 3 [0A7AH]
0A77j(40000006): MOV R0, R0, 6H
0A78k(41000006): MOV R1, R0, 6H
0A79l(F7FFF672): BL -2446 [00ECH]
load(x)m;n Put0(Div,o RH-2,p x.r,q y.r)r;s Put0(Mov+U,t RH-2,u 0,v 0)w;x DEC(RH);y x.r := RH-1
0A7Am(80E00008): LDR R0, SP, 8H
0A7Bm(81E0000C): LDR R1, SP, CH
0A7Cn(F7FFF756): BL -2218 [01D3H]
0A7Do(4000000B): MOV R0, R0, BH
0A7Ep .FIXUP D
0A7Ep(8D00000A): LDR SB, MT, MOD0 [ORG]
0A7Fp(81D0002C): LDR R1, SB, 2CH [data]
0A80p(41190002): SUB R1, R1, 2H
0A81q(82E00008): LDR R2, SP, 8H
0A82q(82200010): LDR R2, R2, 10H
0A83r(83E00010): LDR R3, SP, 10H
0A84r(83300010): LDR R3, R3, 10H
0A85s(F7FFF57A): BL -2694 [0000H]
0A86t(40002000): MOV R0, R0, 2000H
0A87u .FIXUP D
0A87u(8D000009): LDR SB, MT, MOD0 [ORG]
0A88u(81D0002C): LDR R1, SB, 2CH [data]
0A89u(41190002): SUB R1, R1, 2H
0A8Av(42000000): MOV R2, R0, 0H
0A8Bw(43000000): MOV R3, R0, 0H
0A8Cx(F7FFF573): BL -2701 [0000H]
0A8Dy .FIXUP D
0A8Dy(8D000006): LDR SB, MT, MOD0 [ORG]
0A8Ey(40D8002C): ADD R0, SB, 2CH [data]
0A8Fy(81000000): LDR R1, R0, 0H
0A90y(41190001): SUB R1, R1, 1H
0A91y(A1000000): STR R1, R0, 0H
ENDz
0A92z(80D0002C): LDR R0, SB, 2CH
0A93z(40090001): SUB R0, R0, 1H
0A94z(81E00008): LDR R1, SP, 8H
0A95z(A0100010): STR R0, R1, 10H
END
ENDa DivOp;
0A96a(8FE00000): LDR LNK, SP, 0H
0A97a(4EE8001C): ADD SP, SP, 1CH
0A98a(C700000F): B LNK
(* Code generation for REAL operators *)
PROCEDURE RealOp*(op: INTEGER; VAR x, y: Item); (* x := x op y *)
BEGINb load(x)c;d load(y)e;f
0A99b .PROC 23
0A99b(4EE90018): SUB SP, SP, 18H
0A9Ab(AFE00000): STR LNK, SP, 0H
0A9Bb(A0E00004): STR R0, SP, 4H
0A9Cb(A1E00008): STR R1, SP, 8H
0A9Db(A2E0000C): STR R2, SP, CH
0A9Eb(A3E00010): STR R3, SP, 10H
0A9Fb(A4E00014): STR R4, SP, 14H
0AA0c(80E00008): LDR R0, SP, 8H
0AA1c(81E0000C): LDR R1, SP, CH
0AA2d(F7FFF730): BL -2256 [01D3H]
0AA3e(80E00010): LDR R0, SP, 10H
0AA4e(81E00014): LDR R1, SP, 14H
0AA5f(F7FFF72D): BL -2259 [01D3H]
IF op = ORS.plus THENg Put0(Fad,h RH-2,i x.r,j y.r)k
0AA6g(80E00004): LDR R0, SP, 4H
0AA7g(40090006): SUB R0, R0, 6H
0AA8g(E900000A): BNE 10 [0AB3H]
0AA9h(4000000C): MOV R0, R0, CH
0AAAi .FIXUP D
0AAAi(8D00001D): LDR SB, MT, MOD0 [ORG]
0AABi(81D0002C): LDR R1, SB, 2CH [data]
0AACi(41190002): SUB R1, R1, 2H
0AADj(82E00008): LDR R2, SP, 8H
0AAEj(82200010): LDR R2, R2, 10H
0AAFk(83E00010): LDR R3, SP, 10H
0AB0k(83300010): LDR R3, R3, 10H
ELSIFl opm = ORS.minus THENn Put0(Fsb,o RH-2,p x.r,q y.r)r
0AB1l(F7FFF54E): BL -2738 [0000H]
0AB2m(E7000026): B 38 [0AD9H]
0AB3n(80E00004): LDR R0, SP, 4H
0AB4n(40090007): SUB R0, R0, 7H
0AB5n(E900000A): BNE 10 [0AC0H]
0AB6o(4000000D): MOV R0, R0, DH
0AB7p .FIXUP D
0AB7p(8D00000D): LDR SB, MT, MOD0 [ORG]
0AB8p(81D0002C): LDR R1, SB, 2CH [data]
0AB9p(41190002): SUB R1, R1, 2H
0ABAq(82E00008): LDR R2, SP, 8H
0ABBq(82200010): LDR R2, R2, 10H
0ABCr(83E00010): LDR R3, SP, 10H
0ABDr(83300010): LDR R3, R3, 10H
ELSIFs opt = ORS.times THENu Put0(Fml,v RH-2,w x.r,x y.r)y
0ABEs(F7FFF541): BL -2751 [0000H]
0ABFt(E7000019): B 25 [0AD9H]
0AC0u(80E00004): LDR R0, SP, 4H
0AC1u(40090001): SUB R0, R0, 1H
0AC2u(E900000A): BNE 10 [0ACDH]
0AC3v(4000000E): MOV R0, R0, EH
0AC4w .FIXUP D
0AC4w(8D00000D): LDR SB, MT, MOD0 [ORG]
0AC5w(81D0002C): LDR R1, SB, 2CH [data]
0AC6w(41190002): SUB R1, R1, 2H
0AC7x(82E00008): LDR R2, SP, 8H
0AC8x(82200010): LDR R2, R2, 10H
0AC9y(83E00010): LDR R3, SP, 10H
0ACAy(83300010): LDR R3, R3, 10H
ELSIFz opa = ORS.rdiv THENb Put0(Fdv,c RH-2,d x.r,e y.r)f
0ACBz(F7FFF534): BL -2764 [0000H]
0ACCa(E700000C): B 12 [0AD9H]
0ACDb(80E00004): LDR R0, SP, 4H
0ACEb(40090002): SUB R0, R0, 2H
0ACFb(E9000009): BNE 9 [0AD9H]
0AD0c(4000000F): MOV R0, R0, FH
0AD1d .FIXUP D
0AD1d(8D00000D): LDR SB, MT, MOD0 [ORG]
0AD2d(81D0002C): LDR R1, SB, 2CH [data]
0AD3d(41190002): SUB R1, R1, 2H
0AD4e(82E00008): LDR R2, SP, 8H
0AD5e(82200010): LDR R2, R2, 10H
0AD6f(83E00010): LDR R3, SP, 10H
0AD7f(83300010): LDR R3, R3, 10H
ENDg ;
0AD8g(F7FFF527): BL -2777 [0000H]
DEC(RH);h x.r := RH-1
0AD9h .FIXUP D
0AD9h(8D000008): LDR SB, MT, MOD0 [ORG]
0ADAh(40D8002C): ADD R0, SB, 2CH [data]
0ADBh(81000000): LDR R1, R0, 0H
0ADCh(41190001): SUB R1, R1, 1H
0ADDh(A1000000): STR R1, R0, 0H
ENDi RealOp;
0ADEi(80D0002C): LDR R0, SB, 2CH
0ADFi(40090001): SUB R0, R0, 1H
0AE0i(81E00008): LDR R1, SP, 8H
0AE1i(A0100010): STR R0, R1, 10H
0AE2i(8FE00000): LDR LNK, SP, 0H
0AE3i(4EE80018): ADD SP, SP, 18H
0AE4i(C700000F): B LNK
(* Code generation for set operators *)
PROCEDURE Singleton*(VAR x: Item); (* x := {x} *)
BEGINj
0AE5j .PROC 24
0AE5j(4EE9000C): SUB SP, SP, CH
0AE6j(AFE00000): STR LNK, SP, 0H
0AE7j(A0E00004): STR R0, SP, 4H
0AE8j(A1E00008): STR R1, SP, 8H
IF x.mode = ORB.Const THENk x.a := LSL(1, x.a)
0AE9k(80E00004): LDR R0, SP, 4H
0AEAk(80000000): LDR R0, R0, 0H
0AEBk(40090001): SUB R0, R0, 1H
0AECk(E9000007): BNE 7 [0AF4H]
ELSEl loadm(x)n;o Put1(Mov,p RH,q 0,r 1)s;t Put0(Lsl,u x.r,v RH,w x.r)x
0AEDl(40000001): MOV R0, R0, 1H
0AEEl(81E00004): LDR R1, SP, 4H
0AEFl(81100008): LDR R1, R1, 8H
0AF0l(00010001): LSL R0, R0, R1
0AF1l(81E00004): LDR R1, SP, 4H
0AF2l(A0100008): STR R0, R1, 8H
0AF3m(E7000011): B 17 [0B05H]
0AF4n(80E00004): LDR R0, SP, 4H
0AF5n(81E00008): LDR R1, SP, 8H
0AF6o(F7FFF6DC): BL -2340 [01D3H]
0AF7p(40000000): MOV R0, R0, 0H
0AF8q .FIXUP D
0AF8q(8D00001F): LDR SB, MT, MOD0 [ORG]
0AF9q(81D0002C): LDR R1, SB, 2CH [data]
0AFAr(42000000): MOV R2, R0, 0H
0AFBs(43000001): MOV R3, R0, 1H
0AFCt(F7FFF521): BL -2783 [001EH]
0AFDu(40000001): MOV R0, R0, 1H
0AFEv(81E00004): LDR R1, SP, 4H
0AFFv(81100010): LDR R1, R1, 10H
0B00w .FIXUP D
0B00w(8D000008): LDR SB, MT, MOD0 [ORG]
0B01w(82D0002C): LDR R2, SB, 2CH [data]
0B02x(83E00004): LDR R3, SP, 4H
0B03x(83300010): LDR R3, R3, 10H
ENDy
0B04y(F7FFF4FB): BL -2821 [0000H]
ENDz Singleton;
0B05z(8FE00000): LDR LNK, SP, 0H
0B06z(4EE8000C): ADD SP, SP, CH
0B07z(C700000F): B LNK
PROCEDURE Set*(VAR x, y: Item); (* x := {x .. y} *)
BEGINa
0B08a .PROC 25
0B08a(4EE90014): SUB SP, SP, 14H
0B09a(AFE00000): STR LNK, SP, 0H
0B0Aa(A0E00004): STR R0, SP, 4H
0B0Ba(A1E00008): STR R1, SP, 8H
0B0Ca(A2E0000C): STR R2, SP, CH
0B0Da(A3E00010): STR R3, SP, 10H
IF (x.mode = ORB.Const)b & (c y.mode = ORB.Const)d THENe
0B0Eb(80E00004): LDR R0, SP, 4H
0B0Fb(80000000): LDR R0, R0, 0H
0B10b(40090001): SUB R0, R0, 1H
0B11c(E900001A): BNE 26 [0B2CH]
0B12d(80E0000C): LDR R0, SP, CH
0B13d(80000000): LDR R0, R0, 0H
0B14d(40090001): SUB R0, R0, 1H
0B15e(E9000016): BNE 22 [0B2CH]
IF x.a <= y.a THENf x.a := LSL(2, y.a) -g LSL(1, x.a) ELSEh xi.a := 0 ENDj
0B16f(80E00004): LDR R0, SP, 4H
0B17f(80000008): LDR R0, R0, 8H
0B18f(81E0000C): LDR R1, SP, CH
0B19f(81100008): LDR R1, R1, 8H
0B1Af(00090001): SUB R0, R0, R1
0B1Bf(EE00000C): BGT 12 [0B28H]
0B1Cg(40000002): MOV R0, R0, 2H
0B1Dg(81E0000C): LDR R1, SP, CH
0B1Eg(81100008): LDR R1, R1, 8H
0B1Fg(00010001): LSL R0, R0, R1
0B20h(41000001): MOV R1, R0, 1H
0B21h(82E00004): LDR R2, SP, 4H
0B22h(82200008): LDR R2, R2, 8H
0B23h(01110002): LSL R1, R1, R2
0B24h(00090001): SUB R0, R0, R1
0B25h(81E00004): LDR R1, SP, 4H
0B26h(A0100008): STR R0, R1, 8H
0B27i(E7000003): B 3 [0B2BH]
0B28j(40000000): MOV R0, R0, 0H
0B29j(81E00004): LDR R1, SP, 4H
0B2Aj(A0100008): STR R0, R1, 8H
ELSE
IFk (x.mode = ORB.Const)l & (mx.a <= 16)n THENo x.a := LSL(-1, x.a)
0B2Bk(E7000078): B 120 [0BA4H]
0B2Cl(80E00004): LDR R0, SP, 4H
0B2Dl(80000000): LDR R0, R0, 0H
0B2El(40090001): SUB R0, R0, 1H
0B2Fm(E900000B): BNE 11 [0B3BH]
0B30n(80E00004): LDR R0, SP, 4H
0B31n(80000008): LDR R0, R0, 8H
0B32n(40090010): SUB R0, R0, 10H
0B33o(EE000007): BGT 7 [0B3BH]
ELSEp loadq(x)r;s Put1(Mov,t RH,u 0,v -1)w;x Put0(Lsl,y x.r,z RH,a x.r)b
0B34p(5000FFFF): MOV R0, R0, FFFFFFFFH
0B35p(81E00004): LDR R1, SP, 4H
0B36p(81100008): LDR R1, R1, 8H
0B37p(00010001): LSL R0, R0, R1
0B38p(81E00004): LDR R1, SP, 4H
0B39p(A0100008): STR R0, R1, 8H
0B3Aq(E7000011): B 17 [0B4CH]
0B3Br(80E00004): LDR R0, SP, 4H
0B3Cr(81E00008): LDR R1, SP, 8H
0B3Ds(F7FFF695): BL -2411 [01D3H]
0B3Et(40000000): MOV R0, R0, 0H
0B3Fu .FIXUP D
0B3Fu(8D00003F): LDR SB, MT, MOD0 [ORG]
0B40u(81D0002C): LDR R1, SB, 2CH [data]
0B41v(42000000): MOV R2, R0, 0H
0B42w(5300FFFF): MOV R3, R0, FFFFFFFFH
0B43x(F7FFF4DA): BL -2854 [001EH]
0B44y(40000001): MOV R0, R0, 1H
0B45z(81E00004): LDR R1, SP, 4H
0B46z(81100010): LDR R1, R1, 10H
0B47a .FIXUP D
0B47a(8D000008): LDR SB, MT, MOD0 [ORG]
0B48a(82D0002C): LDR R2, SB, 2CH [data]
0B49b(83E00004): LDR R3, SP, 4H
0B4Ab(83300010): LDR R3, R3, 10H
ENDc ;
0B4Bc(F7FFF4B4): BL -2892 [0000H]
IF (y.mode = ORB.Const)d & (ey.a < 16)f THENg Put1(Mov,h RH,i 0,j LSL(-2, y.a))k;l y.mode := Reg;m y.r := RH;n incR
0B4Cd(80E0000C): LDR R0, SP, CH
0B4Dd(80000000): LDR R0, R0, 0H
0B4Ed(40090001): SUB R0, R0, 1H
0B4Fe(E9000016): BNE 22 [0B66H]
0B50f(80E0000C): LDR R0, SP, CH
0B51f(80000008): LDR R0, R0, 8H
0B52f(40090010): SUB R0, R0, 10H
0B53g(ED000012): BGE 18 [0B66H]
0B54h(40000000): MOV R0, R0, 0H
0B55i .FIXUP D
0B55i(8D00000E): LDR SB, MT, MOD0 [ORG]
0B56i(81D0002C): LDR R1, SB, 2CH [data]
0B57j(42000000): MOV R2, R0, 0H
0B58k(5300FFFE): MOV R3, R0, FFFFFFFEH
0B59k(84E0000C): LDR R4, SP, CH
0B5Ak(84400008): LDR R4, R4, 8H
0B5Bk(03310004): LSL R3, R3, R4
0B5Cl(F7FFF4C1): BL -2879 [001EH]
0B5Dm(4000000A): MOV R0, R0, AH
0B5Em(81E0000C): LDR R1, SP, CH
0B5Fm(A0100000): STR R0, R1, 0H
0B60n .FIXUP D
0B60n(8D00000B): LDR SB, MT, MOD0 [ORG]
0B61n(80D0002C): LDR R0, SB, 2CH [data]
0B62n(81E0000C): LDR R1, SP, CH
0B63n(A0100010): STR R0, R1, 10H
ELSEo loadp(y)q;r Put1(Mov,s RH,t 0,u -2)v;w Put0(Lsl,x y.r,y RH,z y.r)a
0B64o(F7FFF549): BL -2743 [00AEH]
0B65p(E7000011): B 17 [0B77H]
0B66q(80E0000C): LDR R0, SP, CH
0B67q(81E00010): LDR R1, SP, 10H
0B68r(F7FFF66A): BL -2454 [01D3H]
0B69s(40000000): MOV R0, R0, 0H
0B6At .FIXUP D
0B6At(8D00000A): LDR SB, MT, MOD0 [ORG]
0B6Bt(81D0002C): LDR R1, SB, 2CH [data]
0B6Cu(42000000): MOV R2, R0, 0H
0B6Dv(5300FFFE): MOV R3, R0, FFFFFFFEH
0B6Ew(F7FFF4AF): BL -2897 [001EH]
0B6Fx(40000001): MOV R0, R0, 1H
0B70y(81E0000C): LDR R1, SP, CH
0B71y(81100010): LDR R1, R1, 10H
0B72z .FIXUP D
0B72z(8D000008): LDR SB, MT, MOD0 [ORG]
0B73z(82D0002C): LDR R2, SB, 2CH [data]
0B74a(83E0000C): LDR R3, SP, CH
0B75a(83300010): LDR R3, R3, 10H
ENDb ;
0B76b(F7FFF489): BL -2935 [0000H]
IF x.mode = ORB.Const THENc
0B77c(80E00004): LDR R0, SP, 4H
0B78c(80000000): LDR R0, R0, 0H
0B79c(40090001): SUB R0, R0, 1H
0B7Ac(E900001C): BNE 28 [0B97H]
IF x.a # 0 THENd Put1(Xor,e y.r,f y.r,g -1)h;i Put1a(And,j RH-1,k y.r,l x.a)m ENDn ;
0B7Bd(80E00004): LDR R0, SP, 4H
0B7Cd(80000008): LDR R0, R0, 8H
0B7Dd(E1000010): BEQ 16 [0B8EH]
0B7Ee(40000007): MOV R0, R0, 7H
0B7Ff(81E0000C): LDR R1, SP, CH
0B80f(81100010): LDR R1, R1, 10H
0B81g(82E0000C): LDR R2, SP, CH
0B82g(82200010): LDR R2, R2, 10H
0B83h(5300FFFF): MOV R3, R0, FFFFFFFFH
0B84i(F7FFF499): BL -2919 [001EH]
0B85j(40000004): MOV R0, R0, 4H
0B86k .FIXUP D
0B86k(8D000014): LDR SB, MT, MOD0 [ORG]
0B87k(81D0002C): LDR R1, SB, 2CH [data]
0B88k(41190001): SUB R1, R1, 1H
0B89l(82E0000C): LDR R2, SP, CH
0B8Al(82200010): LDR R2, R2, 10H
0B8Bm(83E00004): LDR R3, SP, 4H
0B8Cm(83300008): LDR R3, R3, 8H
0B8Dn(F7FFF4B6): BL -2890 [0044H]
x.mode := Reg;o x.r := RH-1
0B8Eo(4000000A): MOV R0, R0, AH
0B8Fo(81E00004): LDR R1, SP, 4H
0B90o(A0100000): STR R0, R1, 0H
ELSEp DECq(RH);r Put0(Ann,s RH-1,t x.r,u y.r)v
0B91p .FIXUP D
0B91p(8D00000B): LDR SB, MT, MOD0 [ORG]
0B92p(80D0002C): LDR R0, SB, 2CH [data]
0B93p(40090001): SUB R0, R0, 1H
0B94p(81E00004): LDR R1, SP, 4H
0B95p(A0100010): STR R0, R1, 10H
0B96q(E700000D): B 13 [0BA4H]
0B97r .FIXUP D
0B97r(8D000006): LDR SB, MT, MOD0 [ORG]
0B98r(40D8002C): ADD R0, SB, 2CH [data]
0B99r(81000000): LDR R1, R0, 0H
0B9Ar(41190001): SUB R1, R1, 1H
0B9Br(A1000000): STR R1, R0, 0H
0B9Cs(40000005): MOV R0, R0, 5H
0B9Dt(81D0002C): LDR R1, SB, 2CH
0B9Et(41190001): SUB R1, R1, 1H
0B9Fu(82E00004): LDR R2, SP, 4H
0BA0u(82200010): LDR R2, R2, 10H
0BA1v(83E0000C): LDR R3, SP, CH
0BA2v(83300010): LDR R3, R3, 10H
ENDw
0BA3w(F7FFF45C): BL -2980 [0000H]
END
ENDx Set;
0BA4x(8FE00000): LDR LNK, SP, 0H
0BA5x(4EE80014): ADD SP, SP, 14H
0BA6x(C700000F): B LNK
PROCEDURE In*(VAR x, y: Item); (* x := x IN y *)
BEGINy load(y)z;a
0BA7y .PROC 26
0BA7y(4EE90014): SUB SP, SP, 14H
0BA8y(AFE00000): STR LNK, SP, 0H
0BA9y(A0E00004): STR R0, SP, 4H
0BAAy(A1E00008): STR R1, SP, 8H
0BABy(A2E0000C): STR R2, SP, CH
0BACy(A3E00010): STR R3, SP, 10H
0BADz(80E0000C): LDR R0, SP, CH
0BAEz(81E00010): LDR R1, SP, 10H
0BAFa(F7FFF623): BL -2525 [01D3H]
IF x.mode = ORB.Const THENb Put1(Ror,c y.r,d y.r,e (x.a + 1)f MOD 20H)g;h DEC(RH)
0BB0b(80E00004): LDR R0, SP, 4H
0BB1b(80000000): LDR R0, R0, 0H
0BB2b(40090001): SUB R0, R0, 1H
0BB3b(E9000010): BNE 16 [0BC4H]
0BB4c(40000003): MOV R0, R0, 3H
0BB5d(81E0000C): LDR R1, SP, CH
0BB6d(81100010): LDR R1, R1, 10H
0BB7e(82E0000C): LDR R2, SP, CH
0BB8e(82200010): LDR R2, R2, 10H
0BB9f(83E00004): LDR R3, SP, 4H
0BBAf(83300008): LDR R3, R3, 8H
0BBBf(43380001): ADD R3, R3, 1H
0BBCg(4334001F): AND R3, R3, 1FH
0BBDh(F7FFF460): BL -2976 [001EH]
ELSEi loadj(x)k;l Put1(Add,m x.r,n x.r,o 1)p;q Put0(Ror,r y.r,s y.r,t x.r)u;v DEC(RH, 2)
0BBEi .FIXUP D
0BBEi(8D000027): LDR SB, MT, MOD0 [ORG]
0BBFi(40D8002C): ADD R0, SB, 2CH [data]
0BC0i(81000000): LDR R1, R0, 0H
0BC1i(41190001): SUB R1, R1, 1H
0BC2i(A1000000): STR R1, R0, 0H
0BC3j(E7000017): B 23 [0BDBH]
0BC4k(80E00004): LDR R0, SP, 4H
0BC5k(81E00008): LDR R1, SP, 8H
0BC6l(F7FFF60C): BL -2548 [01D3H]
0BC7m(40000008): MOV R0, R0, 8H
0BC8n(81E00004): LDR R1, SP, 4H
0BC9n(81100010): LDR R1, R1, 10H
0BCAo(82E00004): LDR R2, SP, 4H
0BCBo(82200010): LDR R2, R2, 10H
0BCCp(43000001): MOV R3, R0, 1H
0BCDq(F7FFF450): BL -2992 [001EH]
0BCEr(40000003): MOV R0, R0, 3H
0BCFs(81E0000C): LDR R1, SP, CH
0BD0s(81100010): LDR R1, R1, 10H
0BD1t(82E0000C): LDR R2, SP, CH
0BD2t(82200010): LDR R2, R2, 10H
0BD3u(83E00004): LDR R3, SP, 4H
0BD4u(83300010): LDR R3, R3, 10H
0BD5v(F7FFF42A): BL -3030 [0000H]
ENDw ;
0BD6w .FIXUP D
0BD6w(8D000018): LDR SB, MT, MOD0 [ORG]
0BD7w(40D8002C): ADD R0, SB, 2CH [data]
0BD8w(81000000): LDR R1, R0, 0H
0BD9w(41190002): SUB R1, R1, 2H
0BDAw(A1000000): STR R1, R0, 0H
SetCC(x,x MI)y
0BDBx(80E00004): LDR R0, SP, 4H
0BDCx(81E00008): LDR R1, SP, 8H
0BDDy(42000000): MOV R2, R0, 0H
ENDz In;
0BDEz(F7FFF4F9): BL -2823 [00D8H]
0BDFz(8FE00000): LDR LNK, SP, 0H
0BE0z(4EE80014): ADD SP, SP, 14H
0BE1z(C700000F): B LNK
PROCEDURE SetOp*(op: LONGINT; VAR x, y: Item); (* x := x op y *)
VAR xset, yset: SET; (*x.type.form = Set*)
BEGINa
0BE2a .PROC 27
0BE2a(4EE90020): SUB SP, SP, 20H
0BE3a(AFE00000): STR LNK, SP, 0H
0BE4a(A0E00004): STR R0, SP, 4H
0BE5a(A1E00008): STR R1, SP, 8H
0BE6a(A2E0000C): STR R2, SP, CH
0BE7a(A3E00010): STR R3, SP, 10H
0BE8a(A4E00014): STR R4, SP, 14H
IF (x.mode = ORB.Const)b & (cy.mode = ORB.Const)d THENe
0BE9b(80E00008): LDR R0, SP, 8H
0BEAb(80000000): LDR R0, R0, 0H
0BEBb(40090001): SUB R0, R0, 1H
0BECc(E900002D): BNE 45 [0C1AH]
0BEDd(80E00010): LDR R0, SP, 10H
0BEEd(80000000): LDR R0, R0, 0H
0BEFd(40090001): SUB R0, R0, 1H
0BF0e(E9000029): BNE 41 [0C1AH]
xset := SYSTEM.VAL(SET, x.a);f yset := SYSTEM.VAL(SET, y.a);g
0BF1f(80E00008): LDR R0, SP, 8H
0BF2f(80000008): LDR R0, R0, 8H
0BF3f(A0E00018): STR R0, SP, 18H
0BF4g(80E00010): LDR R0, SP, 10H
0BF5g(80000008): LDR R0, R0, 8H
0BF6g(A0E0001C): STR R0, SP, 1CH
IF op = ORS.plus THENh xset := xset + yset
0BF7h(80E00004): LDR R0, SP, 4H
0BF8h(40090006): SUB R0, R0, 6H
0BF9h(E9000005): BNE 5 [0BFFH]
ELSIFi opj = ORS.minus THENk xset := xset - yset
0BFAi(80E00018): LDR R0, SP, 18H
0BFBi(81E0001C): LDR R1, SP, 1CH
0BFCi(00060001): IOR R0, R0, R1
0BFDi(A0E00018): STR R0, SP, 18H
0BFEj(E7000017): B 23 [0C16H]
0BFFk(80E00004): LDR R0, SP, 4H
0C00k(40090007): SUB R0, R0, 7H
0C01k(E9000005): BNE 5 [0C07H]
ELSIFl opm = ORS.times THENn xset := xset * yset
0C02l(80E00018): LDR R0, SP, 18H
0C03l(81E0001C): LDR R1, SP, 1CH
0C04l(00050001): ANN R0, R0, R1
0C05l(A0E00018): STR R0, SP, 18H
0C06m(E700000F): B 15 [0C16H]
0C07n(80E00004): LDR R0, SP, 4H
0C08n(40090001): SUB R0, R0, 1H
0C09n(E9000005): BNE 5 [0C0FH]
ELSIFo opp = ORS.rdiv THENq xset := xset / yset
0C0Ao(80E00018): LDR R0, SP, 18H
0C0Bo(81E0001C): LDR R1, SP, 1CH
0C0Co(00040001): AND R0, R0, R1
0C0Do(A0E00018): STR R0, SP, 18H
0C0Ep(E7000007): B 7 [0C16H]
0C0Fq(80E00004): LDR R0, SP, 4H
0C10q(40090002): SUB R0, R0, 2H
0C11q(E9000004): BNE 4 [0C16H]
ENDr ;
0C12r(80E00018): LDR R0, SP, 18H
0C13r(81E0001C): LDR R1, SP, 1CH
0C14r(00070001): XOR R0, R0, R1
0C15r(A0E00018): STR R0, SP, 18H
x.a := SYSTEM.VAL(LONGINT, xset)
ELSIFs yt.mode = ORB.Const THENu
0C16s(80E00018): LDR R0, SP, 18H
0C17s(81E00008): LDR R1, SP, 8H
0C18s(A0100008): STR R0, R1, 8H
0C19t(E7000079): B 121 [0C93H]
0C1Au(80E00010): LDR R0, SP, 10H
0C1Bu(80000000): LDR R0, R0, 0H
0C1Cu(40090001): SUB R0, R0, 1H
0C1Du(E9000033): BNE 51 [0C51H]
load(x)v;w
0C1Ev(80E00008): LDR R0, SP, 8H
0C1Fv(81E0000C): LDR R1, SP, CH
0C20w(F7FFF5B2): BL -2638 [01D3H]
IF op = ORS.plus THENx Put1a(Ior,y x.r,z x.r,a y.a)b
0C21x(80E00004): LDR R0, SP, 4H
0C22x(40090006): SUB R0, R0, 6H
0C23x(E9000009): BNE 9 [0C2DH]
0C24y(40000006): MOV R0, R0, 6H
0C25z(81E00008): LDR R1, SP, 8H
0C26z(81100010): LDR R1, R1, 10H
0C27a(82E00008): LDR R2, SP, 8H
0C28a(82200010): LDR R2, R2, 10H
0C29b(83E00010): LDR R3, SP, 10H
0C2Ab(83300008): LDR R3, R3, 8H
ELSIFc opd = ORS.minus THENe Put1a(Ann,f x.r,g x.r,h y.a)i
0C2Bc(F7FFF418): BL -3048 [0044H]
0C2Cd(E7000023): B 35 [0C50H]
0C2De(80E00004): LDR R0, SP, 4H
0C2Ee(40090007): SUB R0, R0, 7H
0C2Fe(E9000009): BNE 9 [0C39H]
0C30f(40000005): MOV R0, R0, 5H
0C31g(81E00008): LDR R1, SP, 8H
0C32g(81100010): LDR R1, R1, 10H
0C33h(82E00008): LDR R2, SP, 8H
0C34h(82200010): LDR R2, R2, 10H
0C35i(83E00010): LDR R3, SP, 10H
0C36i(83300008): LDR R3, R3, 8H
ELSIFj opk = ORS.times THENl Put1a(And,m x.r,n x.r,o y.a)p
0C37j(F7FFF40C): BL -3060 [0044H]
0C38k(E7000017): B 23 [0C50H]
0C39l(80E00004): LDR R0, SP, 4H
0C3Al(40090001): SUB R0, R0, 1H
0C3Bl(E9000009): BNE 9 [0C45H]
0C3Cm(40000004): MOV R0, R0, 4H
0C3Dn(81E00008): LDR R1, SP, 8H
0C3En(81100010): LDR R1, R1, 10H
0C3Fo(82E00008): LDR R2, SP, 8H
0C40o(82200010): LDR R2, R2, 10H
0C41p(83E00010): LDR R3, SP, 10H
0C42p(83300008): LDR R3, R3, 8H
ELSIFq opr = ORS.rdiv THENs Put1a(Xor,t x.r,u x.r,v y.a)w
0C43q(F7FFF400): BL -3072 [0044H]
0C44r(E700000B): B 11 [0C50H]
0C45s(80E00004): LDR R0, SP, 4H
0C46s(40090002): SUB R0, R0, 2H
0C47s(E9000008): BNE 8 [0C50H]
0C48t(40000007): MOV R0, R0, 7H
0C49u(81E00008): LDR R1, SP, 8H
0C4Au(81100010): LDR R1, R1, 10H
0C4Bv(82E00008): LDR R2, SP, 8H
0C4Cv(82200010): LDR R2, R2, 10H
0C4Dw(83E00010): LDR R3, SP, 10H
0C4Ew(83300008): LDR R3, R3, 8H
ENDx ;
0C4Fx(F7FFF3F4): BL -3084 [0044H]
ELSE loady(x)z;a load(y)b;c
0C50y(E7000042): B 66 [0C93H]
0C51z(80E00008): LDR R0, SP, 8H
0C52z(81E0000C): LDR R1, SP, CH
0C53a(F7FFF57F): BL -2689 [01D3H]
0C54b(80E00010): LDR R0, SP, 10H
0C55b(81E00014): LDR R1, SP, 14H
0C56c(F7FFF57C): BL -2692 [01D3H]
IF op = ORS.plus THENd Put0(Ior,e RH-2,f x.r,g y.r)h
0C57d(80E00004): LDR R0, SP, 4H
0C58d(40090006): SUB R0, R0, 6H
0C59d(E900000A): BNE 10 [0C64H]
0C5Ae(40000006): MOV R0, R0, 6H
0C5Bf .FIXUP D
0C5Bf(8D000085): LDR SB, MT, MOD0 [ORG]
0C5Cf(81D0002C): LDR R1, SB, 2CH [data]
0C5Df(41190002): SUB R1, R1, 2H
0C5Eg(82E00008): LDR R2, SP, 8H
0C5Fg(82200010): LDR R2, R2, 10H
0C60h(83E00010): LDR R3, SP, 10H
0C61h(83300010): LDR R3, R3, 10H
ELSIFi opj = ORS.minus THENk Put0(Ann,l RH-2,m x.r,n y.r)o
0C62i(F7FFF39D): BL -3171 [0000H]
0C63j(E7000026): B 38 [0C8AH]
0C64k(80E00004): LDR R0, SP, 4H
0C65k(40090007): SUB R0, R0, 7H
0C66k(E900000A): BNE 10 [0C71H]
0C67l(40000005): MOV R0, R0, 5H
0C68m .FIXUP D
0C68m(8D00000D): LDR SB, MT, MOD0 [ORG]
0C69m(81D0002C): LDR R1, SB, 2CH [data]
0C6Am(41190002): SUB R1, R1, 2H
0C6Bn(82E00008): LDR R2, SP, 8H
0C6Cn(82200010): LDR R2, R2, 10H
0C6Do(83E00010): LDR R3, SP, 10H
0C6Eo(83300010): LDR R3, R3, 10H
ELSIFp opq = ORS.times THENr Put0(And,s RH-2,t x.r,u y.r)v
0C6Fp(F7FFF390): BL -3184 [0000H]
0C70q(E7000019): B 25 [0C8AH]
0C71r(80E00004): LDR R0, SP, 4H
0C72r(40090001): SUB R0, R0, 1H
0C73r(E900000A): BNE 10 [0C7EH]
0C74s(40000004): MOV R0, R0, 4H
0C75t .FIXUP D
0C75t(8D00000D): LDR SB, MT, MOD0 [ORG]
0C76t(81D0002C): LDR R1, SB, 2CH [data]
0C77t(41190002): SUB R1, R1, 2H
0C78u(82E00008): LDR R2, SP, 8H
0C79u(82200010): LDR R2, R2, 10H
0C7Av(83E00010): LDR R3, SP, 10H
0C7Bv(83300010): LDR R3, R3, 10H
ELSIFw opx = ORS.rdiv THENy Put0(Xor,z RH-2,a x.r,b y.r)c
0C7Cw(F7FFF383): BL -3197 [0000H]
0C7Dx(E700000C): B 12 [0C8AH]
0C7Ey(80E00004): LDR R0, SP, 4H
0C7Fy(40090002): SUB R0, R0, 2H
0C80y(E9000009): BNE 9 [0C8AH]
0C81z(40000007): MOV R0, R0, 7H
0C82a .FIXUP D
0C82a(8D00000D): LDR SB, MT, MOD0 [ORG]
0C83a(81D0002C): LDR R1, SB, 2CH [data]
0C84a(41190002): SUB R1, R1, 2H
0C85b(82E00008): LDR R2, SP, 8H
0C86b(82200010): LDR R2, R2, 10H
0C87c(83E00010): LDR R3, SP, 10H
0C88c(83300010): LDR R3, R3, 10H
ENDd ;
0C89d(F7FFF376): BL -3210 [0000H]
DEC(RH);e x.r := RH-1
0C8Ae .FIXUP D
0C8Ae(8D000008): LDR SB, MT, MOD0 [ORG]
0C8Be(40D8002C): ADD R0, SB, 2CH [data]
0C8Ce(81000000): LDR R1, R0, 0H
0C8De(41190001): SUB R1, R1, 1H
0C8Ee(A1000000): STR R1, R0, 0H
ENDf
0C8Ff(80D0002C): LDR R0, SB, 2CH
0C90f(40090001): SUB R0, R0, 1H
0C91f(81E00008): LDR R1, SP, 8H
0C92f(A0100010): STR R0, R1, 10H
ENDg SetOp;
0C93g(8FE00000): LDR LNK, SP, 0H
0C94g(4EE80020): ADD SP, SP, 20H
0C95g(C700000F): B LNK
(* Code generation for relations *)
PROCEDURE IntRelation*(op: INTEGER; VAR x, y: Item); (* x := x < y *)
BEGINh
0C96h .PROC 28
0C96h(4EE90018): SUB SP, SP, 18H
0C97h(AFE00000): STR LNK, SP, 0H
0C98h(A0E00004): STR R0, SP, 4H
0C99h(A1E00008): STR R1, SP, 8H
0C9Ah(A2E0000C): STR R2, SP, CH
0C9Bh(A3E00010): STR R3, SP, 10H
0C9Ch(A4E00014): STR R4, SP, 14H
IF (y.mode = ORB.Const)i & (jy.type.formk # ORB.Proc)l THENm
0C9Di(80E00010): LDR R0, SP, 10H
0C9Ei(80000000): LDR R0, R0, 0H
0C9Fi(40090001): SUB R0, R0, 1H
0CA0j(E900002A): BNE 42 [0CCBH]
0CA1k(80E00010): LDR R0, SP, 10H
0CA2k(80000004): LDR R0, R0, 4H
0CA3k(D150164C): BLEQ MT [trap=4, pos=20502]
0CA4l(80000000): LDR R0, R0, 0H
0CA5l(4009000A): SUB R0, R0, AH
0CA6m(E1000024): BEQ 36 [0CCBH]
load(x)n;o
0CA7n(80E00008): LDR R0, SP, 8H
0CA8n(81E0000C): LDR R1, SP, CH
0CA9o(F7FFF529): BL -2775 [01D3H]
IF (y.a # 0)p OR ~q(op IN {ORS.eql, ORS.neq})r OR (scode[pc-1]t DIV 40000000H #u -2)v THENw Put1a(Cmp,x x.r,y x.r,z y.a)a ENDb ;
0CAAp(80E00010): LDR R0, SP, 10H
0CABp(80000008): LDR R0, R0, 8H
0CACq(E9000010): BNE 16 [0CBDH]
0CADr(40000600): MOV R0, R0, 600H
0CAEr(81E00004): LDR R1, SP, 4H
0CAFr(41180001): ADD R1, R1, 1H
0CB0r(00030001): ROR R0, R0, R1
0CB1s(E800000B): BPL 11 [0CBDH]
0CB2t .FIXUP D
0CB2t(8D000028): LDR SB, MT, MOD0 [ORG]
0CB3t(80D00018): LDR R0, SB, 18H [data]
0CB4t(40090001): SUB R0, R0, 1H
0CB5t(41091F40): SUB R1, R0, 1F40H
0CB6t(DA50771C): BLCC MT [trap=1, pos=20599]
0CB7t(40010002): LSL R0, R0, 2H
0CB8t(00D80000): ADD R0, SB, R0
0CB9u(80000064): LDR R0, R0, 64H
0CBAu(4002001E): ASR R0, R0, 1EH
0CBBv(5009FFFE): SUB R0, R0, FFFFFFFEH
0CBCw(E1000008): BEQ 8 [0CC5H]
0CBDx(40000009): MOV R0, R0, 9H
0CBEy(81E00008): LDR R1, SP, 8H
0CBFy(81100010): LDR R1, R1, 10H
0CC0z(82E00008): LDR R2, SP, 8H
0CC1z(82200010): LDR R2, R2, 10H
0CC2a(83E00010): LDR R3, SP, 10H
0CC3a(83300008): LDR R3, R3, 8H
0CC4b(F7FFF37F): BL -3201 [0044H]
DEC(RH)
ELSEc
0CC5c .FIXUP D
0CC5c(8D000013): LDR SB, MT, MOD0 [ORG]
0CC6c(40D8002C): ADD R0, SB, 2CH [data]
0CC7c(81000000): LDR R1, R0, 0H
0CC8c(41190001): SUB R1, R1, 1H
0CC9c(A1000000): STR R1, R0, 0H
IFd (x.mode = Cond)e OR (fy.mode = Cond)g THENh ORS.Mark("not implemented")i ENDj ;
0CCAd(E700001F): B 31 [0CEAH]
0CCBe(80E00008): LDR R0, SP, 8H
0CCCe(80000000): LDR R0, R0, 0H
0CCDe(4009000C): SUB R0, R0, CH
0CCEf(E1000004): BEQ 4 [0CD3H]
0CCFg(80E00010): LDR R0, SP, 10H
0CD0g(80000000): LDR R0, R0, 0H
0CD1g(4009000C): SUB R0, R0, CH
0CD2h(E9000004): BNE 4 [0CD7H]
0CD3i .FIXUP D
0CD3i(8D00000E): LDR SB, MT, MOD0 [ORG]
0CD4i(40D889C4): ADD R0, SB, FFFF89C4H [data]
0CD5i(41000010): MOV R1, R0, 10H
0CD6j .FIXUP P
0CD6j(F7209267): BL MOD2 [ORS] PROC9
load(x)k;l load(y)m;n Put0(Cmp,o x.r,p x.r,q y.r)r;s DEC(RH, 2)
0CD7k(80E00008): LDR R0, SP, 8H
0CD8k(81E0000C): LDR R1, SP, CH
0CD9l(F7FFF4F9): BL -2823 [01D3H]
0CDAm(80E00010): LDR R0, SP, 10H
0CDBm(81E00014): LDR R1, SP, 14H
0CDCn(F7FFF4F6): BL -2826 [01D3H]
0CDDo(40000009): MOV R0, R0, 9H
0CDEp(81E00008): LDR R1, SP, 8H
0CDFp(81100010): LDR R1, R1, 10H
0CE0q(82E00008): LDR R2, SP, 8H
0CE1q(82200010): LDR R2, R2, 10H
0CE2r(83E00010): LDR R3, SP, 10H
0CE3r(83300010): LDR R3, R3, 10H
0CE4s(F7FFF31B): BL -3301 [0000H]
ENDt ;
0CE5t .FIXUP D
0CE5t(8D000012): LDR SB, MT, MOD0 [ORG]
0CE6t(40D8002C): ADD R0, SB, 2CH [data]
0CE7t(81000000): LDR R1, R0, 0H
0CE8t(41190002): SUB R1, R1, 2H
0CE9t(A1000000): STR R1, R0, 0H
SetCC(x,u relmap[op - ORS.eql]v)w
0CEAu(80E00008): LDR R0, SP, 8H
0CEBu(81E0000C): LDR R1, SP, CH
0CECv(82E00004): LDR R2, SP, 4H
0CEDv(42290009): SUB R2, R2, 9H
0CEEv(43290006): SUB R3, R2, 6H
0CEFv(DA51831C): BLCC MT [trap=1, pos=20867]
0CF0v(42210002): LSL R2, R2, 2H
0CF1v .FIXUP D
0CF1v(8D00000C): LDR SB, MT, MOD0 [ORG]
0CF2v(02D80002): ADD R2, SB, R2 [global array]
0CF3w(8220004C): LDR R2, R2, 4CH
ENDx IntRelation;
0CF4x(F7FFF3E3): BL -3101 [00D8H]
0CF5x(8FE00000): LDR LNK, SP, 0H
0CF6x(4EE80018): ADD SP, SP, 18H
0CF7x(C700000F): B LNK
PROCEDURE RealRelation*(op: INTEGER; VAR x, y: Item); (* x := x < y *)
BEGINy load(x)z;a
0CF8y .PROC 29
0CF8y(4EE90018): SUB SP, SP, 18H
0CF9y(AFE00000): STR LNK, SP, 0H
0CFAy(A0E00004): STR R0, SP, 4H
0CFBy(A1E00008): STR R1, SP, 8H
0CFCy(A2E0000C): STR R2, SP, CH
0CFDy(A3E00010): STR R3, SP, 10H
0CFEy(A4E00014): STR R4, SP, 14H
0CFFz(80E00008): LDR R0, SP, 8H
0D00z(81E0000C): LDR R1, SP, CH
0D01a(F7FFF4D1): BL -2863 [01D3H]
IF (y.mode = ORB.Const)b & (cy.a = 0)d THENe DEC(RH)
0D02b(80E00010): LDR R0, SP, 10H
0D03b(80000000): LDR R0, R0, 0H
0D04b(40090001): SUB R0, R0, 1H
0D05c(E9000009): BNE 9 [0D0FH]
0D06d(80E00010): LDR R0, SP, 10H
0D07d(80000008): LDR R0, R0, 8H
0D08e(E9000006): BNE 6 [0D0FH]
ELSEf loadg(y)h;i Put0(Fsb,j x.r,k x.r,l y.r)m;n DEC(RH, 2)
0D09f .FIXUP D
0D09f(8D000018): LDR SB, MT, MOD0 [ORG]
0D0Af(40D8002C): ADD R0, SB, 2CH [data]
0D0Bf(81000000): LDR R1, R0, 0H
0D0Cf(41190001): SUB R1, R1, 1H
0D0Df(A1000000): STR R1, R0, 0H
0D0Eg(E7000010): B 16 [0D1FH]
0D0Fh(80E00010): LDR R0, SP, 10H
0D10h(81E00014): LDR R1, SP, 14H
0D11i(F7FFF4C1): BL -2879 [01D3H]
0D12j(4000000D): MOV R0, R0, DH
0D13k(81E00008): LDR R1, SP, 8H
0D14k(81100010): LDR R1, R1, 10H
0D15l(82E00008): LDR R2, SP, 8H
0D16l(82200010): LDR R2, R2, 10H
0D17m(83E00010): LDR R3, SP, 10H
0D18m(83300010): LDR R3, R3, 10H
0D19n(F7FFF2E6): BL -3354 [0000H]
ENDo ;
0D1Ao .FIXUP D
0D1Ao(8D000011): LDR SB, MT, MOD0 [ORG]
0D1Bo(40D8002C): ADD R0, SB, 2CH [data]
0D1Co(81000000): LDR R1, R0, 0H
0D1Do(41190002): SUB R1, R1, 2H
0D1Eo(A1000000): STR R1, R0, 0H
SetCC(x,p relmap[op - ORS.eql]q)r
0D1Fp(80E00008): LDR R0, SP, 8H
0D20p(81E0000C): LDR R1, SP, CH
0D21q(82E00004): LDR R2, SP, 4H
0D22q(42290009): SUB R2, R2, 9H
0D23q(43290006): SUB R3, R2, 6H
0D24q(DA528C1C): BLCC MT [trap=1, pos=21132]
0D25q(42210002): LSL R2, R2, 2H
0D26q .FIXUP D
0D26q(8D00000C): LDR SB, MT, MOD0 [ORG]
0D27q(02D80002): ADD R2, SB, R2 [global array]
0D28r(8220004C): LDR R2, R2, 4CH
ENDs RealRelation;
0D29s(F7FFF3AE): BL -3154 [00D8H]
0D2As(8FE00000): LDR LNK, SP, 0H
0D2Bs(4EE80018): ADD SP, SP, 18H
0D2Cs(C700000F): B LNK
PROCEDURE StringRelation*(op: INTEGER; VAR x, y: Item); (* x := x < y *)
(*x, y are char arrays or strings*)
BEGINt
0D2Dt .PROC 30
0D2Dt(4EE90018): SUB SP, SP, 18H
0D2Et(AFE00000): STR LNK, SP, 0H
0D2Ft(A0E00004): STR R0, SP, 4H
0D30t(A1E00008): STR R1, SP, 8H
0D31t(A2E0000C): STR R2, SP, CH
0D32t(A3E00010): STR R3, SP, 10H
0D33t(A4E00014): STR R4, SP, 14H
IF x.type.formu = ORB.String THENv loadStringAdr(x)w ELSEx loadAdry(x)z ENDa ;
0D34u(80E00008): LDR R0, SP, 8H
0D35u(80000004): LDR R0, R0, 4H
0D36u(D153324C): BLEQ MT [trap=4, pos=21298]
0D37v(80000000): LDR R0, R0, 0H
0D38v(4009000B): SUB R0, R0, BH
0D39v(E9000004): BNE 4 [0D3EH]
0D3Aw(80E00008): LDR R0, SP, 8H
0D3Bw(81E0000C): LDR R1, SP, CH
0D3Cx(F7FFF636): BL -2506 [0373H]
0D3Dy(E7000003): B 3 [0D41H]
0D3Ez(80E00008): LDR R0, SP, 8H
0D3Fz(81E0000C): LDR R1, SP, CH
0D40a(F7FFF57B): BL -2693 [02BCH]
IF y.type.formb = ORB.String THENc loadStringAdr(y)d ELSEe loadAdrf(y)g ENDh ;
0D41b(80E00010): LDR R0, SP, 10H
0D42b(80000004): LDR R0, R0, 4H
0D43b(D1537E4C): BLEQ MT [trap=4, pos=21374]
0D44c(80000000): LDR R0, R0, 0H
0D45c(4009000B): SUB R0, R0, BH
0D46c(E9000004): BNE 4 [0D4BH]
0D47d(80E00010): LDR R0, SP, 10H
0D48d(81E00014): LDR R1, SP, 14H
0D49e(F7FFF629): BL -2519 [0373H]
0D4Af(E7000003): B 3 [0D4EH]
0D4Bg(80E00010): LDR R0, SP, 10H
0D4Cg(81E00014): LDR R1, SP, 14H
0D4Dh(F7FFF56E): BL -2706 [02BCH]
Put2(Ldr+1,i RH,j x.r,k 0)l;m Put1(Add,n x.r,o x.r,p 1)q;r
0D4Ei(40000009): MOV R0, R0, 9H
0D4Fj .FIXUP D
0D4Fj(8D000029): LDR SB, MT, MOD0 [ORG]
0D50j(81D0002C): LDR R1, SB, 2CH [data]
0D51k(82E00008): LDR R2, SP, 8H
0D52k(82200010): LDR R2, R2, 10H
0D53l(43000000): MOV R3, R0, 0H
0D54m(F7FFF31C): BL -3300 [0071H]
0D55n(40000008): MOV R0, R0, 8H
0D56o(81E00008): LDR R1, SP, 8H
0D57o(81100010): LDR R1, R1, 10H
0D58p(82E00008): LDR R2, SP, 8H
0D59p(82200010): LDR R2, R2, 10H
0D5Aq(43000001): MOV R3, R0, 1H
0D5Br(F7FFF2C2): BL -3390 [001EH]
Put2(Ldr+1,s RH+1,t y.r,u 0)v;w Put1(Add,x y.r,y y.r,z 1)a;b
0D5Cs(40000009): MOV R0, R0, 9H
0D5Dt .FIXUP D
0D5Dt(8D00000E): LDR SB, MT, MOD0 [ORG]
0D5Et(81D0002C): LDR R1, SB, 2CH [data]
0D5Ft(41180001): ADD R1, R1, 1H
0D60u(82E00010): LDR R2, SP, 10H
0D61u(82200010): LDR R2, R2, 10H
0D62v(43000000): MOV R3, R0, 0H
0D63w(F7FFF30D): BL -3315 [0071H]
0D64x(40000008): MOV R0, R0, 8H
0D65y(81E00010): LDR R1, SP, 10H
0D66y(81100010): LDR R1, R1, 10H
0D67z(82E00010): LDR R2, SP, 10H
0D68z(82200010): LDR R2, R2, 10H
0D69a(43000001): MOV R3, R0, 1H
0D6Ab(F7FFF2B3): BL -3405 [001EH]
Put0(Cmp,c RH+2,d RH,e RH+1)f;g Put3(BC,h NE,i 2)j;k
0D6Bc(40000009): MOV R0, R0, 9H
0D6Cd .FIXUP D
0D6Cd(8D00000F): LDR SB, MT, MOD0 [ORG]
0D6Dd(81D0002C): LDR R1, SB, 2CH [data]
0D6Ed(41180002): ADD R1, R1, 2H
0D6Fe(82D0002C): LDR R2, SB, 2CH
0D70f(83D0002C): LDR R3, SB, 2CH
0D71f(43380001): ADD R3, R3, 1H
0D72g(F7FFF28D): BL -3443 [0000H]
0D73h(40000002): MOV R0, R0, 2H
0D74i(41000009): MOV R1, R0, 9H
0D75j(42000002): MOV R2, R0, 2H
0D76k(F7FFF31A): BL -3302 [0091H]
Put1(Cmp,l RH+2,m RH,n 0)o;p Put3(BC,q NE,r -8)s;t
0D77l(40000009): MOV R0, R0, 9H
0D78m .FIXUP D
0D78m(8D00000C): LDR SB, MT, MOD0 [ORG]
0D79m(81D0002C): LDR R1, SB, 2CH [data]
0D7Am(41180002): ADD R1, R1, 2H
0D7Bn(82D0002C): LDR R2, SB, 2CH
0D7Co(43000000): MOV R3, R0, 0H
0D7Dp(F7FFF2A0): BL -3424 [001EH]
0D7Eq(40000002): MOV R0, R0, 2H
0D7Fr(41000009): MOV R1, R0, 9H
0D80s(5200FFF8): MOV R2, R0, FFFFFFF8H
0D81t(F7FFF30F): BL -3313 [0091H]
DEC(RH, 2);u SetCC(x,v relmap[op - ORS.eql]w)x
0D82u .FIXUP D
0D82u(8D00000A): LDR SB, MT, MOD0 [ORG]
0D83u(40D8002C): ADD R0, SB, 2CH [data]
0D84u(81000000): LDR R1, R0, 0H
0D85u(41190002): SUB R1, R1, 2H
0D86u(A1000000): STR R1, R0, 0H
0D87v(80E00008): LDR R0, SP, 8H
0D88v(81E0000C): LDR R1, SP, CH
0D89w(82E00004): LDR R2, SP, 4H
0D8Aw(42290009): SUB R2, R2, 9H
0D8Bw(43290006): SUB R3, R2, 6H
0D8Cw(DA54AF1C): BLCC MT [trap=1, pos=21679]
0D8Dw(42210002): LSL R2, R2, 2H
0D8Ew(02D80002): ADD R2, SB, R2
0D8Fx(8220004C): LDR R2, R2, 4CH
ENDy StringRelation;
0D90y(F7FFF347): BL -3257 [00D8H]
0D91y(8FE00000): LDR LNK, SP, 0H
0D92y(4EE80018): ADD SP, SP, 18H
0D93y(C700000F): B LNK
(* Code generation of Assignments *)
PROCEDURE StrToChar*(VAR x: Item);
BEGINz x.type := ORB.charType;a DEC(strx, 4);b x.a := ORD(str[x.a]c)
0D94z .PROC 31
0D94z(4EE9000C): SUB SP, SP, CH
0D95z(AFE00000): STR LNK, SP, 0H
0D96z(A0E00004): STR R0, SP, 4H
0D97z(A1E00008): STR R1, SP, 8H
0D98a .FIXUP D
0D98a(8D400016): LDR SB, MT, MOD4 [ORB]
0D99a(80D00008): LDR R0, SB, VAR8
0D9Aa(81E00004): LDR R1, SP, 4H
0D9Ba(A0100004): STR R0, R1, 4H
0D9Cb .FIXUP D
0D9Cb(8D000004): LDR SB, MT, MOD0 [ORG]
0D9Db(40D80024): ADD R0, SB, 24H [data]
0D9Eb(81000000): LDR R1, R0, 0H
0D9Fb(41190004): SUB R1, R1, 4H
0DA0b(A1000000): STR R1, R0, 0H
0DA1c(80E00004): LDR R0, SP, 4H
0DA2c(80000008): LDR R0, R0, 8H
0DA3c(41090960): SUB R1, R0, 960H
0DA4c(DA55561C): BLCC MT [trap=1, pos=21846]
0DA5c(00D80000): ADD R0, SB, R0
ENDd StrToChar;
0DA6d(90007F44): LDR R0, R0, 7F44H
0DA7d(81E00004): LDR R1, SP, 4H
0DA8d(A0100008): STR R0, R1, 8H
0DA9d(8FE00000): LDR LNK, SP, 0H
0DAAd(4EE8000C): ADD SP, SP, CH
0DABd(C700000F): B LNK
PROCEDURE Store*(VAR x, y: Item); (* x := y *)
VAR op: LONGINT;
BEGINe load(y)f;g
0DACe .PROC 32
0DACe(4EE90018): SUB SP, SP, 18H
0DADe(AFE00000): STR LNK, SP, 0H
0DAEe(A0E00004): STR R0, SP, 4H
0DAFe(A1E00008): STR R1, SP, 8H
0DB0e(A2E0000C): STR R2, SP, CH
0DB1e(A3E00010): STR R3, SP, 10H
0DB2f(80E0000C): LDR R0, SP, CH
0DB3f(81E00010): LDR R1, SP, 10H
0DB4g(F7FFF41E): BL -3042 [01D3H]
IF x.type.sizeh = 1 THENi op := Str+1 ELSEj opk := Str ENDl ;
0DB5h(80E00004): LDR R0, SP, 4H
0DB6h(80000004): LDR R0, R0, 4H
0DB7h(D155D44C): BLEQ MT [trap=4, pos=21972]
0DB8i(80000020): LDR R0, R0, 20H
0DB9i(40090001): SUB R0, R0, 1H
0DBAi(E9000003): BNE 3 [0DBEH]
0DBBj(4000000B): MOV R0, R0, BH
0DBCj(A0E00014): STR R0, SP, 14H
0DBDk(E7000002): B 2 [0DC0H]
0DBEl(4000000A): MOV R0, R0, AH
0DBFl(A0E00014): STR R0, SP, 14H
IF x.mode = ORB.Var THENm
0DC0m(80E00004): LDR R0, SP, 4H
0DC1m(80000000): LDR R0, R0, 0H
0DC2m(40090002): SUB R0, R0, 2H
0DC3m(E900001A): BNE 26 [0DDEH]
IF x.r > 0 THENn (*local*) Put2(op,o y.r,p SP,q x.a + frame)r
0DC4n(80E00004): LDR R0, SP, 4H
0DC5n(80000010): LDR R0, R0, 10H
0DC6n(40090000): SUB R0, R0, 0H
0DC7n(E600000B): BLE 11 [0DD3H]
0DC8o(80E00014): LDR R0, SP, 14H
0DC9p(81E0000C): LDR R1, SP, CH
0DCAp(81100010): LDR R1, R1, 10H
0DCBq(4200000E): MOV R2, R0, EH
0DCCr(83E00004): LDR R3, SP, 4H
0DCDr(83300008): LDR R3, R3, 8H
0DCEr .FIXUP D
0DCEr(8D000032): LDR SB, MT, MOD0 [ORG]
0DCFr(84D00034): LDR R4, SB, 34H [data]
0DD0r(03380004): ADD R3, R3, R4
ELSEs GetSBt(x.r)u;v Put2(op,w y.r,x SB,y x.a)z
0DD1s(F7FFF29F): BL -3425 [0071H]
0DD2t(E700000A): B 10 [0DDDH]
0DD3u(80E00004): LDR R0, SP, 4H
0DD4u(80000010): LDR R0, R0, 10H
0DD5v(F7FFF3D2): BL -3118 [01A8H]
0DD6w(80E00014): LDR R0, SP, 14H
0DD7x(81E0000C): LDR R1, SP, CH
0DD8x(81100010): LDR R1, R1, 10H
0DD9y(4200000D): MOV R2, R0, DH
0DDAz(83E00004): LDR R3, SP, 4H
0DDBz(83300008): LDR R3, R3, 8H
ENDa
0DDCa(F7FFF294): BL -3436 [0071H]
ELSIF xb.mode = ORB.Par THENc Put2(Ldr,d RH,e SP,f x.a + frame)g;h Put2(op,i y.r,j RH,k x.b)l;m
0DDDb(E700002C): B 44 [0E0AH]
0DDEc(80E00004): LDR R0, SP, 4H
0DDFc(80000000): LDR R0, R0, 0H
0DE0c(40090003): SUB R0, R0, 3H
0DE1c(E9000012): BNE 18 [0DF4H]
0DE2d(40000008): MOV R0, R0, 8H
0DE3e .FIXUP D
0DE3e(8D000015): LDR SB, MT, MOD0 [ORG]
0DE4e(81D0002C): LDR R1, SB, 2CH [data]
0DE5f(4200000E): MOV R2, R0, EH
0DE6g(83E00004): LDR R3, SP, 4H
0DE7g(83300008): LDR R3, R3, 8H
0DE8g(84D00034): LDR R4, SB, 34H
0DE9g(03380004): ADD R3, R3, R4
0DEAh(F7FFF286): BL -3450 [0071H]
0DEBi(80E00014): LDR R0, SP, 14H
0DECj(81E0000C): LDR R1, SP, CH
0DEDj(81100010): LDR R1, R1, 10H
0DEEk .FIXUP D
0DEEk(8D00000B): LDR SB, MT, MOD0 [ORG]
0DEFk(82D0002C): LDR R2, SB, 2CH [data]
0DF0l(83E00004): LDR R3, SP, 4H
0DF1l(8330000C): LDR R3, R3, CH
0DF2m(F7FFF27E): BL -3458 [0071H]
ELSIF xn.mode = RegI THENo Put2(op,p y.r,q x.r,r x.a)s;t DEC(RH);u
0DF3n(E7000016): B 22 [0E0AH]
0DF4o(80E00004): LDR R0, SP, 4H
0DF5o(80000000): LDR R0, R0, 0H
0DF6o(4009000B): SUB R0, R0, BH
0DF7o(E900000E): BNE 14 [0E06H]
0DF8p(80E00014): LDR R0, SP, 14H
0DF9q(81E0000C): LDR R1, SP, CH
0DFAq(81100010): LDR R1, R1, 10H
0DFBr(82E00004): LDR R2, SP, 4H
0DFCr(82200010): LDR R2, R2, 10H
0DFDs(83E00004): LDR R3, SP, 4H
0DFEs(83300008): LDR R3, R3, 8H
0DFFt(F7FFF271): BL -3471 [0071H]
0E00u .FIXUP D
0E00u(8D000012): LDR SB, MT, MOD0 [ORG]
0E01u(40D8002C): ADD R0, SB, 2CH [data]
0E02u(81000000): LDR R1, R0, 0H
0E03u(41190001): SUB R1, R1, 1H
0E04u(A1000000): STR R1, R0, 0H
ELSE ORSv.Mark("bad mode in Store")w
0E05v(E7000004): B 4 [0E0AH]
0E06w .FIXUP D
0E06w(8D000006): LDR SB, MT, MOD0 [ORG]
0E07w(40D889D4): ADD R0, SB, FFFF89D4H [data]
0E08w(41000012): MOV R1, R0, 12H
ENDx ;
0E09x .FIXUP P
0E09x(F7209133): BL MOD2 [ORS] PROC9
DEC(RH)
ENDy Store;
0E0Ay .FIXUP D
0E0Ay(8D000004): LDR SB, MT, MOD0 [ORG]
0E0By(40D8002C): ADD R0, SB, 2CH [data]
0E0Cy(81000000): LDR R1, R0, 0H
0E0Dy(41190001): SUB R1, R1, 1H
0E0Ey(A1000000): STR R1, R0, 0H
0E0Fy(8FE00000): LDR LNK, SP, 0H
0E10y(4EE80018): ADD SP, SP, 18H
0E11y(C700000F): B LNK
PROCEDURE StoreStruct*(VAR x, y: Item); (* x := y, frame = 0 *)
VAR s, pc0: LONGINT;
BEGINz
0E12z .PROC 33
0E12z(4EE9001C): SUB SP, SP, 1CH
0E13z(AFE00000): STR LNK, SP, 0H
0E14z(A0E00004): STR R0, SP, 4H
0E15z(A1E00008): STR R1, SP, 8H
0E16z(A2E0000C): STR R2, SP, CH
0E17z(A3E00010): STR R3, SP, 10H
IF y.type.sizea # 0 THENb
0E18a(80E0000C): LDR R0, SP, CH
0E19a(80000004): LDR R0, R0, 4H
0E1Aa(D157EA4C): BLEQ MT [trap=4, pos=22506]
0E1Bb(80000020): LDR R0, R0, 20H
0E1Cb(E10000C2): BEQ 194 [0EDFH]
loadAdr(x)c;d loadAdr(y)e;f
0E1Dc(80E00004): LDR R0, SP, 4H
0E1Ec(81E00008): LDR R1, SP, 8H
0E1Fd(F7FFF49C): BL -2916 [02BCH]
0E20e(80E0000C): LDR R0, SP, CH
0E21e(81E00010): LDR R1, SP, 10H
0E22f(F7FFF499): BL -2919 [02BCH]
IF (x.type.formg = ORB.Array)h & (ix.type.lenj > 0)k THENl
0E23g(80E00004): LDR R0, SP, 4H
0E24g(80000004): LDR R0, R0, 4H
0E25g(D158274C): BLEQ MT [trap=4, pos=22567]
0E26h(80000000): LDR R0, R0, 0H
0E27h(4009000C): SUB R0, R0, CH
0E28i(E9000079): BNE 121 [0EA2H]
0E29j(80E00004): LDR R0, SP, 4H
0E2Aj(80000004): LDR R0, R0, 4H
0E2Bj(D158434C): BLEQ MT [trap=4, pos=22595]
0E2Ck(80000010): LDR R0, R0, 10H
0E2Dk(40090000): SUB R0, R0, 0H
0E2El(E6000073): BLE 115 [0EA2H]
IF y.type.lenm >= 0 THENn
0E2Fm(80E0000C): LDR R0, SP, CH
0E30m(80000004): LDR R0, R0, 4H
0E31m(D158634C): BLEQ MT [trap=4, pos=22627]
0E32n(80000010): LDR R0, R0, 10H
0E33n(40090000): SUB R0, R0, 0H
0E34n(E500001B): BLT 27 [0E50H]
IF x.type.sizeo = y.type.sizep THENq Put1a(Mov,r RH,s 0,t (y.type.sizeu+3)v DIV 4)w
0E35o(80E00004): LDR R0, SP, 4H
0E36o(80000004): LDR R0, R0, 4H
0E37o(D158874C): BLEQ MT [trap=4, pos=22663]
0E38p(81E0000C): LDR R1, SP, CH
0E39p(81100004): LDR R1, R1, 4H
0E3Ap(D158954C): BLEQ MT [trap=4, pos=22677]
0E3Bq(80000020): LDR R0, R0, 20H
0E3Cq(81100020): LDR R1, R1, 20H
0E3Dq(00090001): SUB R0, R0, R1
0E3Eq(E900000C): BNE 12 [0E4BH]
0E3Fr(40000000): MOV R0, R0, 0H
0E40s .FIXUP D
0E40s(8D000036): LDR SB, MT, MOD0 [ORG]
0E41s(81D0002C): LDR R1, SB, 2CH [data]
0E42t(42000000): MOV R2, R0, 0H
0E43u(83E0000C): LDR R3, SP, CH
0E44u(83300004): LDR R3, R3, 4H
0E45u(D158B94C): BLEQ MT [trap=4, pos=22713]
0E46v(83300020): LDR R3, R3, 20H
0E47v(43380003): ADD R3, R3, 3H
0E48w(43320002): ASR R3, R3, 2H
ELSEx ORSy.Mark("different length/size, not implemented")z
0E49x(F7FFF1FA): BL -3590 [0044H]
0E4Ay(E7000004): B 4 [0E4FH]
0E4Bz .FIXUP D
0E4Bz(8D00000B): LDR SB, MT, MOD0 [ORG]
0E4Cz(40D889E8): ADD R0, SB, FFFF89E8H [data]
0E4Dz(41000027): MOV R1, R0, 27H
ENDa
0E4Ea .FIXUP P
0E4Ea(F7209045): BL MOD2 [ORS] PROC9
ELSE (*y open array*) Put2b(Ldr,c RH,d SP,e y.a+4)f;g s := y.type.baseh.sizei;j (*element size*)
0E4Fb(E7000051): B 81 [0EA1H]
0E50c(40000008): MOV R0, R0, 8H
0E51d .FIXUP D
0E51d(8D000006): LDR SB, MT, MOD0 [ORG]
0E52d(81D0002C): LDR R1, SB, 2CH [data]
0E53e(4200000E): MOV R2, R0, EH
0E54f(83E0000C): LDR R3, SP, CH
0E55f(83300008): LDR R3, R3, 8H
0E56f(43380004): ADD R3, R3, 4H
0E57g(F7FFF219): BL -3559 [0071H]
0E58h(80E0000C): LDR R0, SP, CH
0E59h(80000004): LDR R0, R0, 4H
0E5Ah(D1595D4C): BLEQ MT [trap=4, pos=22877]
0E5Bi(8000001C): LDR R0, R0, 1CH
0E5Ci(D159624C): BLEQ MT [trap=4, pos=22882]
0E5Dj(80000020): LDR R0, R0, 20H
0E5Ej(A0E00014): STR R0, SP, 14H
pc0 := pc;k Put3(BC,l EQ,m 0)n;o
0E5Fk .FIXUP D
0E5Fk(8D00000E): LDR SB, MT, MOD0 [ORG]
0E60k(80D00018): LDR R0, SB, 18H [data]
0E61k(A0E00018): STR R0, SP, 18H
0E62l(40000002): MOV R0, R0, 2H
0E63m(41000001): MOV R1, R0, 1H
0E64n(42000000): MOV R2, R0, 0H
0E65o(F7FFF22B): BL -3541 [0091H]
IF s = 1 THENp Put1(Add,q RH,r RH,s 3)t;u Put1(Asr,v RH,w RH,x 2)y
0E66p(80E00014): LDR R0, SP, 14H
0E67p(40090001): SUB R0, R0, 1H
0E68p(E900000D): BNE 13 [0E76H]
0E69q(40000008): MOV R0, R0, 8H
0E6Ar .FIXUP D
0E6Ar(8D00000B): LDR SB, MT, MOD0 [ORG]
0E6Br(81D0002C): LDR R1, SB, 2CH [data]
0E6Cs(82D0002C): LDR R2, SB, 2CH
0E6Dt(43000003): MOV R3, R0, 3H
0E6Eu(F7FFF1AF): BL -3665 [001EH]
0E6Fv(40000002): MOV R0, R0, 2H
0E70w .FIXUP D
0E70w(8D000006): LDR SB, MT, MOD0 [ORG]
0E71w(81D0002C): LDR R1, SB, 2CH [data]
0E72x(82D0002C): LDR R2, SB, 2CH
0E73y(43000002): MOV R3, R0, 2H
ELSIFz sa # 4 THENb Put1a(Mul,c RH,d RH,e s DIV 4)f
0E74z(F7FFF1A9): BL -3671 [001EH]
0E75a(E700000A): B 10 [0E80H]
0E76b(80E00014): LDR R0, SP, 14H
0E77b(40090004): SUB R0, R0, 4H
0E78b(E1000007): BEQ 7 [0E80H]
0E79c(4000000A): MOV R0, R0, AH
0E7Ad .FIXUP D
0E7Ad(8D00000A): LDR SB, MT, MOD0 [ORG]
0E7Bd(81D0002C): LDR R1, SB, 2CH [data]
0E7Ce(82D0002C): LDR R2, SB, 2CH
0E7Df(83E00014): LDR R3, SP, 14H
0E7Ef(43320002): ASR R3, R3, 2H
ENDg ;
0E7Fg(F7FFF1C4): BL -3644 [0044H]
IF check THENh
0E80h .FIXUP D
0E80h(8D000006): LDR SB, MT, MOD0 [ORG]
0E81h(90D00044): LDR R0, SB, 44H [data]
0E82h(E1000017): BEQ 23 [0E9AH]
Put1a(Mov,i RH+1,j 0,k (x.type.sizel+3)m DIV 4)n;o Put0(Cmp,p RH+1,q RH,r RH+1)s;t Trap(GT,u 3)v
0E83i(40000000): MOV R0, R0, 0H
0E84j .FIXUP D
0E84j(8D000004): LDR SB, MT, MOD0 [ORG]
0E85j(81D0002C): LDR R1, SB, 2CH [data]
0E86j(41180001): ADD R1, R1, 1H
0E87k(42000000): MOV R2, R0, 0H
0E88l(83E00004): LDR R3, SP, 4H
0E89l(83300004): LDR R3, R3, 4H
0E8Al(D15A6A4C): BLEQ MT [trap=4, pos=23146]
0E8Bm(83300020): LDR R3, R3, 20H
0E8Cm(43380003): ADD R3, R3, 3H
0E8Dn(43320002): ASR R3, R3, 2H
0E8Eo(F7FFF1B5): BL -3659 [0044H]
0E8Fp(40000009): MOV R0, R0, 9H
0E90q .FIXUP D
0E90q(8D00000C): LDR SB, MT, MOD0 [ORG]
0E91q(81D0002C): LDR R1, SB, 2CH [data]
0E92q(41180001): ADD R1, R1, 1H
0E93r(82D0002C): LDR R2, SB, 2CH
0E94s(83D0002C): LDR R3, SB, 2CH
0E95s(43380001): ADD R3, R3, 1H
0E96t(F7FFF169): BL -3735 [0000H]
0E97u(4000000E): MOV R0, R0, EH
0E98v(41000003): MOV R1, R0, 3H
ENDw ;
0E99w(F7FFF252): BL -3502 [00ECH]
fix(pc0,x pc + 5 -y pc0)z
0E9Ax(80E00018): LDR R0, SP, 18H
0E9By .FIXUP D
0E9By(8D00000B): LDR SB, MT, MOD0 [ORG]
0E9Cy(81D00018): LDR R1, SB, 18H [data]
0E9Dy(41180005): ADD R1, R1, 5H
0E9Ez(82E00018): LDR R2, SP, 18H
0E9Fz(01190002): SUB R1, R1, R2
ENDa
0EA0a(F7FFF27B): BL -3461 [011CH]
ELSIF xb.type.formc = ORB.Record THENd Put1a(Mov,e RH,f 0,g x.type.sizeh DIV 4)i
0EA1b(E7000015): B 21 [0EB7H]
0EA2c(80E00004): LDR R0, SP, 4H
0EA3c(80000004): LDR R0, R0, 4H
0EA4c(D15AF14C): BLEQ MT [trap=4, pos=23281]
0EA5d(80000000): LDR R0, R0, 0H
0EA6d(4009000D): SUB R0, R0, DH
0EA7d(E900000B): BNE 11 [0EB3H]
0EA8e(40000000): MOV R0, R0, 0H
0EA9f .FIXUP D
0EA9f(8D00000E): LDR SB, MT, MOD0 [ORG]
0EAAf(81D0002C): LDR R1, SB, 2CH [data]
0EABg(42000000): MOV R2, R0, 0H
0EACh(83E00004): LDR R3, SP, 4H
0EADh(83300004): LDR R3, R3, 4H
0EAEh(D15B214C): BLEQ MT [trap=4, pos=23329]
0EAFi(83300020): LDR R3, R3, 20H
0EB0i(43320002): ASR R3, R3, 2H
ELSEj ORSk.Mark("inadmissible assignment")l
0EB1j(F7FFF192): BL -3694 [0044H]
0EB2k(E7000004): B 4 [0EB7H]
0EB3l .FIXUP D
0EB3l(8D00000A): LDR SB, MT, MOD0 [ORG]
0EB4l(40D88A10): ADD R0, SB, FFFF8A10H [data]
0EB5l(41000018): MOV R1, R0, 18H
ENDm ;
0EB6m .FIXUP P
0EB6m(F7209068): BL MOD2 [ORS] PROC9
Put2(Ldr,n RH+1,o y.r,p 0)q;r Put1(Add,s y.r,t y.r,u 4)v;w
0EB7n(40000008): MOV R0, R0, 8H
0EB8o .FIXUP D
0EB8o(8D000005): LDR SB, MT, MOD0 [ORG]
0EB9o(81D0002C): LDR R1, SB, 2CH [data]
0EBAo(41180001): ADD R1, R1, 1H
0EBBp(82E0000C): LDR R2, SP, CH
0EBCp(82200010): LDR R2, R2, 10H
0EBDq(43000000): MOV R3, R0, 0H
0EBEr(F7FFF1B2): BL -3662 [0071H]
0EBFs(40000008): MOV R0, R0, 8H
0EC0t(81E0000C): LDR R1, SP, CH
0EC1t(81100010): LDR R1, R1, 10H
0EC2u(82E0000C): LDR R2, SP, CH
0EC3u(82200010): LDR R2, R2, 10H
0EC4v(43000004): MOV R3, R0, 4H
0EC5w(F7FFF158): BL -3752 [001EH]
Put2(Str,x RH+1,y x.r,z 0)a;b Put1(Add,c x.r,d x.r,e 4)f;g
0EC6x(4000000A): MOV R0, R0, AH
0EC7y .FIXUP D
0EC7y(8D00000F): LDR SB, MT, MOD0 [ORG]
0EC8y(81D0002C): LDR R1, SB, 2CH [data]
0EC9y(41180001): ADD R1, R1, 1H
0ECAz(82E00004): LDR R2, SP, 4H
0ECBz(82200010): LDR R2, R2, 10H
0ECCa(43000000): MOV R3, R0, 0H
0ECDb(F7FFF1A3): BL -3677 [0071H]
0ECEc(40000008): MOV R0, R0, 8H
0ECFd(81E00004): LDR R1, SP, 4H
0ED0d(81100010): LDR R1, R1, 10H
0ED1e(82E00004): LDR R2, SP, 4H
0ED2e(82200010): LDR R2, R2, 10H
0ED3f(43000004): MOV R3, R0, 4H
0ED4g(F7FFF149): BL -3767 [001EH]
Put1(Sub,h RH,i RH,j 1)k;l Put3(BC,m NE,n -6)o
0ED5h(40000009): MOV R0, R0, 9H
0ED6i .FIXUP D
0ED6i(8D00000F): LDR SB, MT, MOD0 [ORG]
0ED7i(81D0002C): LDR R1, SB, 2CH [data]
0ED8j(82D0002C): LDR R2, SB, 2CH
0ED9k(43000001): MOV R3, R0, 1H
0EDAl(F7FFF143): BL -3773 [001EH]
0EDBm(40000002): MOV R0, R0, 2H
0EDCn(41000009): MOV R1, R0, 9H
0EDDo(5200FFFA): MOV R2, R0, FFFFFFFAH
ENDp ;
0EDEp(F7FFF1B2): BL -3662 [0091H]
RH := 0
ENDq StoreStruct;
0EDFq(40000000): MOV R0, R0, 0H
0EE0q .FIXUP D
0EE0q(8D00000A): LDR SB, MT, MOD0 [ORG]
0EE1q(A0D0002C): STR R0, SB, 2CH [data]
0EE2q(8FE00000): LDR LNK, SP, 0H
0EE3q(4EE8001C): ADD SP, SP, 1CH
0EE4q(C700000F): B LNK
PROCEDURE CopyString*(VAR x, y: Item); (* x := y *)
VAR len: LONGINT;
BEGINr loadAdr(x)s;t len := x.type.lenu;v
0EE5r .PROC 34
0EE5r(4EE90018): SUB SP, SP, 18H
0EE6r(AFE00000): STR LNK, SP, 0H
0EE7r(A0E00004): STR R0, SP, 4H
0EE8r(A1E00008): STR R1, SP, 8H
0EE9r(A2E0000C): STR R2, SP, CH
0EEAr(A3E00010): STR R3, SP, 10H
0EEBs(80E00004): LDR R0, SP, 4H
0EECs(81E00008): LDR R1, SP, 8H
0EEDt(F7FFF3CE): BL -3122 [02BCH]
0EEEu(80E00004): LDR R0, SP, 4H
0EEFu(80000004): LDR R0, R0, 4H
0EF0u(D15C9E4C): BLEQ MT [trap=4, pos=23710]
0EF1v(80000010): LDR R0, R0, 10H
0EF2v(A0E00014): STR R0, SP, 14H
IF len >= 0 THENw
0EF3w(80E00014): LDR R0, SP, 14H
0EF4w(40090000): SUB R0, R0, 0H
0EF5w(E500000A): BLT 10 [0F00H]
IF len < y.b THENx ORS.Mark("string too long")y ENDz
0EF6x(80E00014): LDR R0, SP, 14H
0EF7x(81E0000C): LDR R1, SP, CH
0EF8x(8110000C): LDR R1, R1, CH
0EF9x(00090001): SUB R0, R0, R1
0EFAx(ED000004): BGE 4 [0EFFH]
0EFBy .FIXUP D
0EFBy(8D00001B): LDR SB, MT, MOD0 [ORG]
0EFCy(40D88A28): ADD R0, SB, FFFF8A28H [data]
0EFDy(41000010): MOV R1, R0, 10H
0EFEz .FIXUP P
0EFEz(F7209048): BL MOD2 [ORS] PROC9
ELSIF checka THENb Put2(Ldr,c RH,d SP,e x.a+4)f;g (*open array len, frame = 0*)
0EFFa(E7000015): B 21 [0F15H]
0F00b .FIXUP D
0F00b(8D000005): LDR SB, MT, MOD0 [ORG]
0F01b(90D00044): LDR R0, SB, 44H [data]
0F02b(E1000012): BEQ 18 [0F15H]
0F03c(40000008): MOV R0, R0, 8H
0F04d .FIXUP D
0F04d(8D000004): LDR SB, MT, MOD0 [ORG]
0F05d(81D0002C): LDR R1, SB, 2CH [data]
0F06e(4200000E): MOV R2, R0, EH
0F07f(83E00004): LDR R3, SP, 4H
0F08f(83300008): LDR R3, R3, 8H
0F09f(43380004): ADD R3, R3, 4H
0F0Ag(F7FFF166): BL -3738 [0071H]
Put1(Cmp,hRH,i RH,j y.b)k;l Trap(LT,m 3)n
0F0Bh(40000009): MOV R0, R0, 9H
0F0Ci .FIXUP D
0F0Ci(8D000008): LDR SB, MT, MOD0 [ORG]
0F0Di(81D0002C): LDR R1, SB, 2CH [data]
0F0Ej(82D0002C): LDR R2, SB, 2CH
0F0Fk(83E0000C): LDR R3, SP, CH
0F10k(8330000C): LDR R3, R3, CH
0F11l(F7FFF10C): BL -3828 [001EH]
0F12m(40000005): MOV R0, R0, 5H
0F13n(41000003): MOV R1, R0, 3H
ENDo ;
0F14o(F7FFF1D7): BL -3625 [00ECH]
loadStringAdr(y)p;q
0F15p(80E0000C): LDR R0, SP, CH
0F16p(81E00010): LDR R1, SP, 10H
0F17q(F7FFF45B): BL -2981 [0373H]
Put2(Ldr,r RH,s y.r,t 0)u;v Put1(Add,w y.r,x y.r,y 4)z;a
0F18r(40000008): MOV R0, R0, 8H
0F19s .FIXUP D
0F19s(8D00000D): LDR SB, MT, MOD0 [ORG]
0F1As(81D0002C): LDR R1, SB, 2CH [data]
0F1Bt(82E0000C): LDR R2, SP, CH
0F1Ct(82200010): LDR R2, R2, 10H
0F1Du(43000000): MOV R3, R0, 0H
0F1Ev(F7FFF152): BL -3758 [0071H]
0F1Fw(40000008): MOV R0, R0, 8H
0F20x(81E0000C): LDR R1, SP, CH
0F21x(81100010): LDR R1, R1, 10