| 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*) |
0000 | a .PROC 1 |
0000 | a(4EE90014): SUB SP, SP, 14H |
0001 | a(AFE00000): STR LNK, SP, 0H |
0002 | a(A0E00004): STR R0, SP, 4H |
0003 | a(A1E00008): STR R1, SP, 8H |
0004 | a(A2E0000C): STR R2, SP, CH |
0005 | a(A3E00010): STR R3, SP, 10H |
| code[pc]b := ((a*10H +c b)d * 10H +e op)f * 10000H +g c;h INC(pc) |
0006 | b .PROC 2 |
0006 | b .FIXUP D |
0006 | b(8D000006): LDR SB, MT, MOD0 [ORG] |
0007 | b(80D00018): LDR R0, SB, 18H [data] |
0008 | b(41091F40): SUB R1, R0, 1F40H |
0009 | b(DA08CA1C): BLCC MT [trap=1, pos=2250] |
000A | b(40010002): LSL R0, R0, 2H |
000B | b(00D80000): ADD R0, SB, R0 |
000C | c(81E00008): LDR R1, SP, 8H |
000D | c(41110004): LSL R1, R1, 4H |
000E | d(82E0000C): LDR R2, SP, CH |
000F | d(01180002): ADD R1, R1, R2 |
0010 | e(41110004): LSL R1, R1, 4H |
0011 | f(82E00004): LDR R2, SP, 4H |
0012 | f(01180002): ADD R1, R1, R2 |
0013 | g(41110010): LSL R1, R1, 10H |
0014 | h(82E00010): LDR R2, SP, 10H |
0015 | h(01180002): ADD R1, R1, R2 |
0016 | h(A1000064): STR R1, R0, 64H |
| ENDi Put0; |
0017 | i(40D80018): ADD R0, SB, 18H |
0018 | i(81000000): LDR R1, R0, 0H |
0019 | i(41180001): ADD R1, R1, 1H |
001A | i(A1000000): STR R1, R0, 0H |
001B | i(8FE00000): LDR LNK, SP, 0H |
001C | i(4EE80014): ADD SP, SP, 14H |
001D | i(C700000F): B LNK |
| |
| PROCEDURE Put1(op, a, b, im: LONGINT); |
| BEGINj (*emit format-1 instruction, -10000H <= im < 10000H*) |
001E | j(4EE90014): SUB SP, SP, 14H |
001F | j(AFE00000): STR LNK, SP, 0H |
0020 | j(A0E00004): STR R0, SP, 4H |
0021 | j(A1E00008): STR R1, SP, 8H |
0022 | j(A2E0000C): STR R2, SP, CH |
0023 | j(A3E00010): STR R3, SP, 10H |
| IF im < 0 THENk INC(op, V) ENDl ; |
0024 | k(80E00010): LDR R0, SP, 10H |
0025 | k(40090000): SUB R0, R0, 0H |
0026 | k(ED000003): BGE 3 [002AH] |
0027 | l(80E00004): LDR R0, SP, 4H |
0028 | l(40081000): ADD R0, R0, 1000H |
0029 | l(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) |
002A | m .FIXUP D |
002A | m(8D000024): LDR SB, MT, MOD0 [ORG] |
002B | m(80D00018): LDR R0, SB, 18H [data] |
002C | m(41091F40): SUB R1, R0, 1F40H |
002D | m(DA09A21C): BLCC MT [trap=1, pos=2466] |
002E | m(40010002): LSL R0, R0, 2H |
002F | m(00D80000): ADD R0, SB, R0 |
0030 | n(81E00008): LDR R1, SP, 8H |
0031 | n(41180040): ADD R1, R1, 40H |
0032 | o(41110004): LSL R1, R1, 4H |
0033 | p(82E0000C): LDR R2, SP, CH |
0034 | p(01180002): ADD R1, R1, R2 |
0035 | q(41110004): LSL R1, R1, 4H |
0036 | r(82E00004): LDR R2, SP, 4H |
0037 | r(01180002): ADD R1, R1, R2 |
0038 | s(41110010): LSL R1, R1, 10H |
0039 | t(82E00010): LDR R2, SP, 10H |
003A | t(4224FFFF): AND R2, R2, FFFFFFFFH |
003B | u(01180002): ADD R1, R1, R2 |
003C | u(A1000064): STR R1, R0, 64H |
| ENDv Put1; |
003D | v(40D80018): ADD R0, SB, 18H |
003E | v(81000000): LDR R1, R0, 0H |
003F | v(41180001): ADD R1, R1, 1H |
0040 | v(A1000000): STR R1, R0, 0H |
0041 | v(8FE00000): LDR LNK, SP, 0H |
0042 | v(4EE80014): ADD SP, SP, 14H |
0043 | v(C700000F): B LNK |
| |
| PROCEDURE Put1a(op, a, b, im: LONGINT); |
| BEGINw (*same as Put1, but with range test -10000H <= im < 10000H*) |
0044 | w(4EE90014): SUB SP, SP, 14H |
0045 | w(AFE00000): STR LNK, SP, 0H |
0046 | w(A0E00004): STR R0, SP, 4H |
0047 | w(A1E00008): STR R1, SP, 8H |
0048 | w(A2E0000C): STR R2, SP, CH |
0049 | w(A3E00010): STR R3, SP, 10H |
| IF (im >= -10000H)x & (yim <= 0FFFFH)z THENa Put1(op,b a,c b,d im)e |
004A | x(80E00010): LDR R0, SP, 10H |
004B | x(50090000): SUB R0, R0, 0H |
004C | y(E5000009): BLT 9 [0056H] |
004D | z(80E00010): LDR R0, SP, 10H |
004E | z(4009FFFF): SUB R0, R0, FFFFFFFFH |
004F | a(EE000006): BGT 6 [0056H] |
0050 | b(80E00004): LDR R0, SP, 4H |
0051 | c(81E00008): LDR R1, SP, 8H |
0052 | d(82E0000C): LDR R2, SP, CH |
0053 | e(83E00010): LDR R3, SP, 10H |
| ELSEf Put1g(Mov+U,h RH,i 0,j im DIV 10000H)k;l |
0054 | f(F7FFFFC9): BL -55 [001EH] |
0055 | g(E7000018): B 24 [006EH] |
0056 | h(40002000): MOV R0, R0, 2000H |
0057 | i .FIXUP D |
0057 | i(8D00002D): LDR SB, MT, MOD0 [ORG] |
0058 | i(81D0002C): LDR R1, SB, 2CH [data] |
0059 | j(42000000): MOV R2, R0, 0H |
005A | k(83E00010): LDR R3, SP, 10H |
005B | k(43320010): ASR R3, R3, 10H |
005C | l(F7FFFFC1): BL -63 [001EH] |
| IF im MOD 10000H #m 0 THENn Put1(Ior,o RH,p RH,q im MOD 10000H)r ENDs ; |
005D | m(80E00010): LDR R0, SP, 10H |
005E | m(4004FFFF): AND R0, R0, FFFFFFFFH |
005F | n(40090000): SUB R0, R0, 0H |
0060 | n(E1000007): BEQ 7 [0068H] |
0061 | o(40000006): MOV R0, R0, 6H |
0062 | p .FIXUP D |
0062 | p(8D00000B): LDR SB, MT, MOD0 [ORG] |
0063 | p(81D0002C): LDR R1, SB, 2CH [data] |
0064 | q(82D0002C): LDR R2, SB, 2CH |
0065 | r(83E00010): LDR R3, SP, 10H |
0066 | r(4334FFFF): AND R3, R3, FFFFFFFFH |
0067 | s(F7FFFFB6): BL -74 [001EH] |
| Put0(op,t a,u b,v RH)w |
0068 | t(80E00004): LDR R0, SP, 4H |
0069 | u(81E00008): LDR R1, SP, 8H |
006A | v(82E0000C): LDR R2, SP, CH |
006B | w .FIXUP D |
006B | w(8D000009): LDR SB, MT, MOD0 [ORG] |
006C | w(83D0002C): LDR R3, SB, 2CH [data] |
| ENDx |
006D | x(F7FFFF92): BL -110 [0000H] |
| ENDy Put1a; |
006E | y(8FE00000): LDR LNK, SP, 0H |
006F | y(4EE80014): ADD SP, SP, 14H |
0070 | y(C700000F): B LNK |
| |
| PROCEDURE Put2(op, a, b, off: LONGINT); |
| BEGINz (*emit load/store instruction*) |
0071 | z(4EE90014): SUB SP, SP, 14H |
0072 | z(AFE00000): STR LNK, SP, 0H |
0073 | z(A0E00004): STR R0, SP, 4H |
0074 | z(A1E00008): STR R1, SP, 8H |
0075 | z(A2E0000C): STR R2, SP, CH |
0076 | z(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) |
0077 | a .FIXUP D |
0077 | a(8D00000C): LDR SB, MT, MOD0 [ORG] |
0078 | a(80D00018): LDR R0, SB, 18H [data] |
0079 | a(41091F40): SUB R1, R0, 1F40H |
007A | a(DA0BA81C): BLCC MT [trap=1, pos=2984] |
007B | a(40010002): LSL R0, R0, 2H |
007C | a(00D80000): ADD R0, SB, R0 |
007D | b(81E00004): LDR R1, SP, 4H |
007E | b(41110004): LSL R1, R1, 4H |
007F | c(82E00008): LDR R2, SP, 8H |
0080 | c(01180002): ADD R1, R1, R2 |
0081 | d(41110004): LSL R1, R1, 4H |
0082 | e(82E0000C): LDR R2, SP, CH |
0083 | e(01180002): ADD R1, R1, R2 |
0084 | f(41110014): LSL R1, R1, 14H |
0085 | g(82E00010): LDR R2, SP, 10H |
0086 | g(4221000C): LSL R2, R2, CH |
0087 | g(4223000C): ROR R2, R2, CH |
0088 | h(01180002): ADD R1, R1, R2 |
0089 | h(A1000064): STR R1, R0, 64H |
| ENDi Put2; |
008A | i(40D80018): ADD R0, SB, 18H |
008B | i(81000000): LDR R1, R0, 0H |
008C | i(41180001): ADD R1, R1, 1H |
008D | i(A1000000): STR R1, R0, 0H |
008E | i(8FE00000): LDR LNK, SP, 0H |
008F | i(4EE80014): ADD SP, SP, 14H |
0090 | i(C700000F): B LNK |
| |
| PROCEDURE Put3(op, cond, off: LONGINT); |
| BEGINj (*emit branch instruction*) |
0091 | j(4EE90010): SUB SP, SP, 10H |
0092 | j(AFE00000): STR LNK, SP, 0H |
0093 | j(A0E00004): STR R0, SP, 4H |
0094 | j(A1E00008): STR R1, SP, 8H |
0095 | j(A2E0000C): STR R2, SP, CH |
| code[pc]k := ((op+12)l * 10H +m cond)n * 1000000H +o (off MOD 1000000H)p;q INC(pc) |
0096 | k .FIXUP D |
0096 | k(8D00001F): LDR SB, MT, MOD0 [ORG] |
0097 | k(80D00018): LDR R0, SB, 18H [data] |
0098 | k(41091F40): SUB R1, R0, 1F40H |
0099 | k(DA0C551C): BLCC MT [trap=1, pos=3157] |
009A | k(40010002): LSL R0, R0, 2H |
009B | k(00D80000): ADD R0, SB, R0 |
009C | l(81E00004): LDR R1, SP, 4H |
009D | l(4118000C): ADD R1, R1, CH |
009E | m(41110004): LSL R1, R1, 4H |
009F | n(82E00008): LDR R2, SP, 8H |
00A0 | n(01180002): ADD R1, R1, R2 |
00A1 | o(41110018): LSL R1, R1, 18H |
00A2 | p(82E0000C): LDR R2, SP, CH |
00A3 | p(42210008): LSL R2, R2, 8H |
00A4 | p(42230008): ROR R2, R2, 8H |
00A5 | q(01180002): ADD R1, R1, R2 |
00A6 | q(A1000064): STR R1, R0, 64H |
| ENDr Put3; |
00A7 | r(40D80018): ADD R0, SB, 18H |
00A8 | r(81000000): LDR R1, R0, 0H |
00A9 | r(41180001): ADD R1, R1, 1H |
00AA | r(A1000000): STR R1, R0, 0H |
00AB | r(8FE00000): LDR LNK, SP, 0H |
00AC | r(4EE80010): ADD SP, SP, 10H |
00AD | r(C700000F): B LNK |
| |
| PROCEDURE incR; |
| BEGINs |
00AE | s(4EE90004): SUB SP, SP, 4H |
00AF | s(AFE00000): STR LNK, SP, 0H |
| IF RH < MT-1 THENt INC(RH) ELSEu ORSv.Mark("register stack overflow")w ENDx |
00B0 | t .FIXUP D |
00B0 | t(8D00001A): LDR SB, MT, MOD0 [ORG] |
00B1 | t(80D0002C): LDR R0, SB, 2CH [data] |
00B2 | t(4009000B): SUB R0, R0, BH |
00B3 | t(ED000006): BGE 6 [00BAH] |
00B4 | u .FIXUP D |
00B4 | u(8D000004): LDR SB, MT, MOD0 [ORG] |
00B5 | u(40D8002C): ADD R0, SB, 2CH [data] |
00B6 | u(81000000): LDR R1, R0, 0H |
00B7 | u(41180001): ADD R1, R1, 1H |
00B8 | u(A1000000): STR R1, R0, 0H |
00B9 | v(E7000004): B 4 [00BEH] |
00BA | w .FIXUP D |
00BA | w(8D000006): LDR SB, MT, MOD0 [ORG] |
00BB | w(40D888A4): ADD R0, SB, FFFF88A4H [data] |
00BC | w(41000018): MOV R1, R0, 18H |
00BD | x .FIXUP P |
00BD | x(F72090BD): BL MOD2 [ORS] PROC9 |
| ENDy incR; |
00BE | y(8FE00000): LDR LNK, SP, 0H |
00BF | y(4EE80004): ADD SP, SP, 4H |
00C0 | y(C700000F): B LNK |
| |
| PROCEDURE CheckRegs*; |
| BEGINz |
00C1 | z .PROC 3 |
00C1 | z .COMMAND CheckRegs |
00C1 | z(4EE90004): SUB SP, SP, 4H |
00C2 | z(AFE00000): STR LNK, SP, 0H |
| IF RH # 0 THENa ORS.Mark("Reg Stack")b;c RH := 0 ENDd ; |
00C3 | a .FIXUP D |
00C3 | a(8D000009): LDR SB, MT, MOD0 [ORG] |
00C4 | a(80D0002C): LDR R0, SB, 2CH [data] |
00C5 | a(E1000007): BEQ 7 [00CDH] |
00C6 | b .FIXUP D |
00C6 | b(8D000003): LDR SB, MT, MOD0 [ORG] |
00C7 | b(40D888BC): ADD R0, SB, FFFF88BCH [data] |
00C8 | b(4100000A): MOV R1, R0, AH |
00C9 | c .FIXUP P |
00C9 | c(F720900C): BL MOD2 [ORS] PROC9 |
00CA | d(40000000): MOV R0, R0, 0H |
00CB | d .FIXUP D |
00CB | d(8D000005): LDR SB, MT, MOD0 [ORG] |
00CC | d(A0D0002C): STR R0, SB, 2CH [data] |
| IF pc >= maxCode - 40 THENe ORS.Mark("program too long")f ENDg |
00CD | e .FIXUP D |
00CD | e(8D000002): LDR SB, MT, MOD0 [ORG] |
00CE | e(80D00018): LDR R0, SB, 18H [data] |
00CF | e(40091F18): SUB R0, R0, 1F18H |
00D0 | e(E5000004): BLT 4 [00D5H] |
00D1 | f .FIXUP D |
00D1 | f(8D000004): LDR SB, MT, MOD0 [ORG] |
00D2 | f(40D888C8): ADD R0, SB, FFFF88C8H [data] |
00D3 | f(41000011): MOV R1, R0, 11H |
00D4 | g .FIXUP P |
00D4 | g(F720900B): BL MOD2 [ORS] PROC9 |
| ENDh CheckRegs; |
00D5 | h(8FE00000): LDR LNK, SP, 0H |
00D6 | h(4EE80004): ADD SP, SP, 4H |
00D7 | h(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 |
00D8 | i(4EE90010): SUB SP, SP, 10H |
00D9 | i(AFE00000): STR LNK, SP, 0H |
00DA | i(A0E00004): STR R0, SP, 4H |
00DB | i(A1E00008): STR R1, SP, 8H |
00DC | i(A2E0000C): STR R2, SP, CH |
00DD | j(4000000C): MOV R0, R0, CH |
00DE | j(81E00004): LDR R1, SP, 4H |
00DF | j(A0100000): STR R0, R1, 0H |
00E0 | k(40000000): MOV R0, R0, 0H |
00E1 | k(81E00004): LDR R1, SP, 4H |
00E2 | k(A0100008): STR R0, R1, 8H |
00E3 | l(40000000): MOV R0, R0, 0H |
00E4 | l(81E00004): LDR R1, SP, 4H |
00E5 | l(A010000C): STR R0, R1, CH |
| ENDm SetCC; |
00E6 | m(80E0000C): LDR R0, SP, CH |
00E7 | m(81E00004): LDR R1, SP, 4H |
00E8 | m(A0100010): STR R0, R1, 10H |
00E9 | m(8FE00000): LDR LNK, SP, 0H |
00EA | m(4EE80010): ADD SP, SP, 10H |
00EB | m(C700000F): B LNK |
| |
| PROCEDURE Trap(cond, num: LONGINT); |
| BEGINn Put3(BLR,o cond,p ORS.Pos()q*r100H +s num*10H +t MT)u |
00EC | n(4EE9000C): SUB SP, SP, CH |
00ED | n(AFE00000): STR LNK, SP, 0H |
00EE | n(A0E00004): STR R0, SP, 4H |
00EF | n(A1E00008): STR R1, SP, 8H |
00F0 | o(40000001): MOV R0, R0, 1H |
00F1 | p(81E00004): LDR R1, SP, 4H |
00F2 | q(4EE90008): SUB SP, SP, 8H |
00F3 | q(A0E00004): STR R0, SP, 4H |
00F4 | q(A1E00000): STR R1, SP, 0H |
00F5 | r .FIXUP P |
00F5 | r(F7208021): BL MOD2 [ORS] PROC8 |
00F6 | r(02000000): MOV R2, R0, R0 |
00F7 | r(81E00000): LDR R1, SP, 0H |
00F8 | r(80E00004): LDR R0, SP, 4H |
00F9 | r(4EE80008): ADD SP, SP, 8H |
00FA | s(42210008): LSL R2, R2, 8H |
00FB | t(83E00008): LDR R3, SP, 8H |
00FC | t(43310004): LSL R3, R3, 4H |
00FD | t(02280003): ADD R2, R2, R3 |
00FE | u(4228000C): ADD R2, R2, CH |
| ENDv Trap; |
00FF | v(F7FFFF91): BL -111 [0091H] |
0100 | v(8FE00000): LDR LNK, SP, 0H |
0101 | v(4EE8000C): ADD SP, SP, CH |
0102 | v(C700000F): B LNK |
| |
| (*handling of forward reference, fixups of branch addresses and constant tables*) |
| |
| PROCEDURE negated(cond: LONGINT): LONGINT; |
| BEGINw |
0103 | w(4EE90008): SUB SP, SP, 8H |
0104 | w(AFE00000): STR LNK, SP, 0H |
0105 | w(A0E00004): STR R0, SP, 4H |
| IF cond < 8 THENx cond := cond+8 ELSEy condz := cond-8 ENDa ; |
0106 | x(80E00004): LDR R0, SP, 4H |
0107 | x(40090008): SUB R0, R0, 8H |
0108 | x(ED000004): BGE 4 [010DH] |
0109 | y(80E00004): LDR R0, SP, 4H |
010A | y(40080008): ADD R0, R0, 8H |
010B | y(A0E00004): STR R0, SP, 4H |
010C | z(E7000003): B 3 [0110H] |
010D | a(80E00004): LDR R0, SP, 4H |
010E | a(40090008): SUB R0, R0, 8H |
010F | a(A0E00004): STR R0, SP, 4H |
| RETURN cond |
| ENDb negated; |
0110 | b(80E00004): LDR R0, SP, 4H |
0111 | b(8FE00000): LDR LNK, SP, 0H |
0112 | b(4EE80008): ADD SP, SP, 8H |
0113 | b(C700000F): B LNK |
| |
| PROCEDURE invalSB; |
| BEGINc curSB := 1 |
0114 | c(4EE90004): SUB SP, SP, 4H |
0115 | c(AFE00000): STR LNK, SP, 0H |
| ENDd invalSB; |
0116 | d(40000001): MOV R0, R0, 1H |
0117 | d .FIXUP D |
0117 | d(8D000046): LDR SB, MT, MOD0 [ORG] |
0118 | d(A0D00030): STR R0, SB, 30H [data] |
0119 | d(8FE00000): LDR LNK, SP, 0H |
011A | d(4EE80004): ADD SP, SP, 4H |
011B | d(C700000F): B LNK |
| |
| PROCEDURE fix(at, with: LONGINT); |
| BEGINe code[at]f := code[at]g DIV C24 *h C24 +i (with MOD C24)j |
011C | e(4EE9000C): SUB SP, SP, CH |
011D | e(AFE00000): STR LNK, SP, 0H |
011E | e(A0E00004): STR R0, SP, 4H |
011F | e(A1E00008): STR R1, SP, 8H |
0120 | f(80E00004): LDR R0, SP, 4H |
0121 | f(41091F40): SUB R1, R0, 1F40H |
0122 | f(DA0FEF1C): BLCC MT [trap=1, pos=4079] |
0123 | f(40010002): LSL R0, R0, 2H |
0124 | f .FIXUP D |
0124 | f(8D00000D): LDR SB, MT, MOD0 [ORG] |
0125 | f(00D80000): ADD R0, SB, R0 [global array] |
0126 | g(81E00004): LDR R1, SP, 4H |
0127 | g(42191F40): SUB R2, R1, 1F40H |
0128 | g(DA0FFB1C): BLCC MT [trap=1, pos=4091] |
0129 | g(41110002): LSL R1, R1, 2H |
012A | g(01D80001): ADD R1, SB, R1 |
012B | h(81100064): LDR R1, R1, 64H |
012C | h(41120018): ASR R1, R1, 18H |
012D | i(41110018): LSL R1, R1, 18H |
012E | j(82E00008): LDR R2, SP, 8H |
012F | j(42210008): LSL R2, R2, 8H |
0130 | j(42230008): ROR R2, R2, 8H |
| ENDk fix; |
0131 | k(01180002): ADD R1, R1, R2 |
0132 | k(A1000064): STR R1, R0, 64H |
0133 | k(8FE00000): LDR LNK, SP, 0H |
0134 | k(4EE8000C): ADD SP, SP, CH |
0135 | k(C700000F): B LNK |
| |
| PROCEDURE FixLink*(L: LONGINT); |
| VAR L1: LONGINT; |
| BEGINl invalSB;m |
0136 | l .PROC 4 |
0136 | l(4EE9000C): SUB SP, SP, CH |
0137 | l(AFE00000): STR LNK, SP, 0H |
0138 | l(A0E00004): STR R0, SP, 4H |
0139 | m(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 |
013A | n(80E00004): LDR R0, SP, 4H |
013B | n(E1000013): BEQ 19 [014FH] |
013C | o(80E00004): LDR R0, SP, 4H |
013D | o(41091F40): SUB R1, R0, 1F40H |
013E | o(DA108F1C): BLCC MT [trap=1, pos=4239] |
013F | o(40010002): LSL R0, R0, 2H |
0140 | o .FIXUP D |
0140 | o(8D00001C): LDR SB, MT, MOD0 [ORG] |
0141 | o(00D80000): ADD R0, SB, R0 [global array] |
0142 | p(80000064): LDR R0, R0, 64H |
0143 | p(4001000E): LSL R0, R0, EH |
0144 | p(4003000E): ROR R0, R0, EH |
0145 | p(A0E00008): STR R0, SP, 8H |
0146 | q(80E00004): LDR R0, SP, 4H |
0147 | r(81D00018): LDR R1, SB, 18H |
0148 | r(82E00004): LDR R2, SP, 4H |
0149 | r(01190002): SUB R1, R1, R2 |
014A | s(41190001): SUB R1, R1, 1H |
014B | t(F7FFFFD0): BL -48 [011CH] |
014C | u(80E00008): LDR R0, SP, 8H |
014D | u(A0E00004): STR R0, SP, 4H |
014E | u(E7FFFFEB): B -21 [013AH] |
| ENDv FixLink; |
014F | v(8FE00000): LDR LNK, SP, 0H |
0150 | v(4EE8000C): ADD SP, SP, CH |
0151 | v(C700000F): B LNK |
| |
| PROCEDURE FixLinkWith(L0, dst: LONGINT); |
| VAR L1: LONGINT; |
| BEGINw |
0152 | w(4EE90010): SUB SP, SP, 10H |
0153 | w(AFE00000): STR LNK, SP, 0H |
0154 | w(A0E00004): STR R0, SP, 4H |
0155 | w(A1E00008): STR R1, SP, 8H |
| WHILE L0 # 0 DOx |
0156 | x(80E00004): LDR R0, SP, 4H |
0157 | x(E1000022): BEQ 34 [017AH] |
| L1 := code[L0]y MOD C24;z |
0158 | y(80E00004): LDR R0, SP, 4H |
0159 | y(41091F40): SUB R1, R0, 1F40H |
015A | y(DA11381C): BLCC MT [trap=1, pos=4408] |
015B | y(40010002): LSL R0, R0, 2H |
015C | y .FIXUP D |
015C | y(8D00001C): LDR SB, MT, MOD0 [ORG] |
015D | y(00D80000): ADD R0, SB, R0 [global array] |
015E | z(80000064): LDR R0, R0, 64H |
015F | z(40010008): LSL R0, R0, 8H |
0160 | z(40030008): ROR R0, R0, 8H |
0161 | z(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 |
0162 | a(80E00004): LDR R0, SP, 4H |
0163 | a(41091F40): SUB R1, R0, 1F40H |
0164 | a(DA11501C): BLCC MT [trap=1, pos=4432] |
0165 | a(40010002): LSL R0, R0, 2H |
0166 | a(00D80000): ADD R0, SB, R0 |
0167 | b(81E00004): LDR R1, SP, 4H |
0168 | b(42191F40): SUB R2, R1, 1F40H |
0169 | b(DA115C1C): BLCC MT [trap=1, pos=4444] |
016A | b(41110002): LSL R1, R1, 2H |
016B | b(01D80001): ADD R1, SB, R1 |
016C | c(81100064): LDR R1, R1, 64H |
016D | c(41120018): ASR R1, R1, 18H |
016E | d(41110018): LSL R1, R1, 18H |
016F | e(82E00008): LDR R2, SP, 8H |
0170 | e(83E00004): LDR R3, SP, 4H |
0171 | e(02290003): SUB R2, R2, R3 |
0172 | f(42290001): SUB R2, R2, 1H |
0173 | g(42210008): LSL R2, R2, 8H |
0174 | g(42230008): ROR R2, R2, 8H |
0175 | h(01180002): ADD R1, R1, R2 |
0176 | h(A1000064): STR R1, R0, 64H |
| ENDi |
0177 | i(80E0000C): LDR R0, SP, CH |
0178 | i(A0E00004): STR R0, SP, 4H |
0179 | i(E7FFFFDC): B -36 [0156H] |
| ENDj FixLinkWith; |
017A | j(8FE00000): LDR LNK, SP, 0H |
017B | j(4EE80010): ADD SP, SP, 10H |
017C | j(C700000F): B LNK |
| |
| PROCEDURE merged(L0, L1: LONGINT): LONGINT; |
| VAR L2, L3: LONGINT; |
| BEGINk |
017D | k(4EE90014): SUB SP, SP, 14H |
017E | k(AFE00000): STR LNK, SP, 0H |
017F | k(A0E00004): STR R0, SP, 4H |
0180 | k(A1E00008): STR R1, SP, 8H |
| IF L0 # 0 THENl L3 := L0;m |
0181 | l(80E00004): LDR R0, SP, 4H |
0182 | l(E1000021): BEQ 33 [01A4H] |
0183 | m(80E00004): LDR R0, SP, 4H |
0184 | m(A0E00010): STR R0, SP, 10H |
| REPEAT L2 := L3;n L3 := code[L2]o MOD 40000H UNTILp L3 = 0;q |
0185 | n(80E00010): LDR R0, SP, 10H |
0186 | n(A0E0000C): STR R0, SP, CH |
0187 | o(80E0000C): LDR R0, SP, CH |
0188 | o(41091F40): SUB R1, R0, 1F40H |
0189 | o(DA123E1C): BLCC MT [trap=1, pos=4670] |
018A | o(40010002): LSL R0, R0, 2H |
018B | o .FIXUP D |
018B | o(8D00002F): LDR SB, MT, MOD0 [ORG] |
018C | o(00D80000): ADD R0, SB, R0 [global array] |
018D | p(80000064): LDR R0, R0, 64H |
018E | p(4001000E): LSL R0, R0, EH |
018F | p(4003000E): ROR R0, R0, EH |
0190 | p(A0E00010): STR R0, SP, 10H |
0191 | q(80E00010): LDR R0, SP, 10H |
0192 | q(E9FFFFF2): BNE -14 [0185H] |
| code[L2]r := code[L2]s + L1;t L1 := L0 |
0193 | r(80E0000C): LDR R0, SP, CH |
0194 | r(41091F40): SUB R1, R0, 1F40H |
0195 | r(DA12661C): BLCC MT [trap=1, pos=4710] |
0196 | r(40010002): LSL R0, R0, 2H |
0197 | r .FIXUP D |
0197 | r(8D00000C): LDR SB, MT, MOD0 [ORG] |
0198 | r(00D80000): ADD R0, SB, R0 [global array] |
0199 | s(81E0000C): LDR R1, SP, CH |
019A | s(42191F40): SUB R2, R1, 1F40H |
019B | s(DA12721C): BLCC MT [trap=1, pos=4722] |
019C | s(41110002): LSL R1, R1, 2H |
019D | s(01D80001): ADD R1, SB, R1 |
019E | t(81100064): LDR R1, R1, 64H |
019F | t(82E00008): LDR R2, SP, 8H |
01A0 | t(01180002): ADD R1, R1, R2 |
01A1 | t(A1000064): STR R1, R0, 64H |
| ENDu ; |
01A2 | u(80E00004): LDR R0, SP, 4H |
01A3 | u(A0E00008): STR R0, SP, 8H |
| RETURN L1 |
| ENDv merged; |
01A4 | v(80E00008): LDR R0, SP, 8H |
01A5 | v(8FE00000): LDR LNK, SP, 0H |
01A6 | v(4EE80014): ADD SP, SP, 14H |
01A7 | v(C700000F): B LNK |
| |
| (* loading of operands and addresses into registers *) |
| |
| PROCEDURE GetSB(base: LONGINT); |
| BEGINw |
01A8 | w(4EE90008): SUB SP, SP, 8H |
01A9 | w(AFE00000): STR LNK, SP, 0H |
01AA | w(A0E00004): STR R0, SP, 4H |
| IF (version # 0)x & (y(base # curSB)z OR (abase # 0)b) THENc |
01AB | x .FIXUP D |
01AB | x(8D000014): LDR SB, MT, MOD0 [ORG] |
01AC | x(80D00048): LDR R0, SB, 48H [data] |
01AD | y(E1000017): BEQ 23 [01C5H] |
01AE | z(80E00004): LDR R0, SP, 4H |
01AF | z .FIXUP D |
01AF | z(8D000004): LDR SB, MT, MOD0 [ORG] |
01B0 | z(81D00030): LDR R1, SB, 30H [data] |
01B1 | z(00090001): SUB R0, R0, R1 |
01B2 | a(E9000002): BNE 2 [01B5H] |
01B3 | b(80E00004): LDR R0, SP, 4H |
01B4 | c(E1000010): BEQ 16 [01C5H] |
| Put2(Ldr,d SB,e -base,f pc-fixorgD)g;h fixorgD := pc-1;i curSB := base |
01B5 | d(40000008): MOV R0, R0, 8H |
01B6 | e(4100000D): MOV R1, R0, DH |
01B7 | f(82E00004): LDR R2, SP, 4H |
01B8 | f(43000000): MOV R3, R0, 0H |
01B9 | f(02390002): SUB R2, R3, R2 |
01BA | g .FIXUP D |
01BA | g(8D00000B): LDR SB, MT, MOD0 [ORG] |
01BB | g(83D00018): LDR R3, SB, 18H [data] |
01BC | g(84D0003C): LDR R4, SB, 3CH |
01BD | g(03390004): SUB R3, R3, R4 |
01BE | h(F7FFFEB2): BL -334 [0071H] |
01BF | i .FIXUP D |
01BF | i(8D000005): LDR SB, MT, MOD0 [ORG] |
01C0 | i(80D00018): LDR R0, SB, 18H [data] |
01C1 | i(40090001): SUB R0, R0, 1H |
01C2 | i(A0D0003C): STR R0, SB, 3CH |
| ENDj |
01C3 | j(80E00004): LDR R0, SP, 4H |
01C4 | j(A0D00030): STR R0, SB, 30H |
| ENDk GetSB; |
01C5 | k(8FE00000): LDR LNK, SP, 0H |
01C6 | k(4EE80008): ADD SP, SP, 8H |
01C7 | k(C700000F): B LNK |
| |
| PROCEDURE NilCheck; |
| BEGINl IF check THENm Trap(EQ,n 4)o ENDp |
01C8 | l(4EE90004): SUB SP, SP, 4H |
01C9 | l(AFE00000): STR LNK, SP, 0H |
01CA | m .FIXUP D |
01CA | m(8D00000B): LDR SB, MT, MOD0 [ORG] |
01CB | m(90D00044): LDR R0, SB, 44H [data] |
01CC | m(E1000003): BEQ 3 [01D0H] |
01CD | n(40000001): MOV R0, R0, 1H |
01CE | o(41000004): MOV R1, R0, 4H |
01CF | p(F7FFFF1C): BL -228 [00ECH] |
| ENDq NilCheck; |
01D0 | q(8FE00000): LDR LNK, SP, 0H |
01D1 | q(4EE80004): ADD SP, SP, 4H |
01D2 | q(C700000F): B LNK |
| |
| PROCEDURE load(VAR x: Item); |
| VAR op: LONGINT; |
| BEGINr |
01D3 | r(4EE90010): SUB SP, SP, 10H |
01D4 | r(AFE00000): STR LNK, SP, 0H |
01D5 | r(A0E00004): STR R0, SP, 4H |
01D6 | r(A1E00008): STR R1, SP, 8H |
| IF x.type.sizes = 1 THENt op := Ldr+1 ELSEu opv := Ldr ENDw ; |
01D7 | s(80E00004): LDR R0, SP, 4H |
01D8 | s(80000004): LDR R0, R0, 4H |
01D9 | s(D114404C): BLEQ MT [trap=4, pos=5184] |
01DA | t(80000020): LDR R0, R0, 20H |
01DB | t(40090001): SUB R0, R0, 1H |
01DC | t(E9000003): BNE 3 [01E0H] |
01DD | u(40000009): MOV R0, R0, 9H |
01DE | u(A0E0000C): STR R0, SP, CH |
01DF | v(E7000002): B 2 [01E2H] |
01E0 | w(40000008): MOV R0, R0, 8H |
01E1 | w(A0E0000C): STR R0, SP, CH |
| IF x.mode # Reg THENx |
01E2 | x(80E00004): LDR R0, SP, 4H |
01E3 | x(80000000): LDR R0, R0, 0H |
01E4 | x(4009000A): SUB R0, R0, AH |
01E5 | x(E10000D3): BEQ 211 [02B9H] |
| IF x.mode = ORB.Const THENy |
01E6 | y(80E00004): LDR R0, SP, 4H |
01E7 | y(80000000): LDR R0, R0, 0H |
01E8 | y(40090001): SUB R0, R0, 1H |
01E9 | y(E9000059): BNE 89 [0243H] |
| IF x.type.formz = ORB.Proc THENa |
01EA | z(80E00004): LDR R0, SP, 4H |
01EB | z(80000004): LDR R0, R0, 4H |
01EC | z(D114BB4C): BLEQ MT [trap=4, pos=5307] |
01ED | a(80000000): LDR R0, R0, 0H |
01EE | a(4009000A): SUB R0, R0, AH |
01EF | a(E9000027): BNE 39 [0217H] |
| IF x.r > 0 THENb ORS.Mark("not allowed")c |
01F0 | b(80E00004): LDR R0, SP, 4H |
01F1 | b(80000010): LDR R0, R0, 10H |
01F2 | b(40090000): SUB R0, R0, 0H |
01F3 | b(E6000005): BLE 5 [01F9H] |
01F4 | c .FIXUP D |
01F4 | c(8D00002A): LDR SB, MT, MOD0 [ORG] |
01F5 | c(40D888DC): ADD R0, SB, FFFF88DCH [data] |
01F6 | c(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 |
01F7 | d .FIXUP P |
01F7 | d(F7209102): BL MOD2 [ORS] PROC9 |
01F8 | e(E700001D): B 29 [0216H] |
01F9 | f(80E00004): LDR R0, SP, 4H |
01FA | f(80000010): LDR R0, R0, 10H |
01FB | f(E900000F): BNE 15 [020BH] |
01FC | g(40000003): MOV R0, R0, 3H |
01FD | h(41000007): MOV R1, R0, 7H |
01FE | i(42000000): MOV R2, R0, 0H |
01FF | j(F7FFFE91): BL -367 [0091H] |
0200 | k(40000009): MOV R0, R0, 9H |
0201 | l .FIXUP D |
0201 | l(8D00000D): LDR SB, MT, MOD0 [ORG] |
0202 | l(81D0002C): LDR R1, SB, 2CH [data] |
0203 | m(4200000F): MOV R2, R0, FH |
0204 | n(83D00018): LDR R3, SB, 18H |
0205 | n(43310002): LSL R3, R3, 2H |
0206 | o(84E00004): LDR R4, SP, 4H |
0207 | o(84400008): LDR R4, R4, 8H |
0208 | o(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*) |
0209 | p(F7FFFE3A): BL -454 [0044H] |
020A | q(E700000B): B 11 [0216H] |
020B | r(80E00004): LDR R0, SP, 4H |
020C | r(80000010): LDR R0, R0, 10H |
020D | s(F7FFFF9A): BL -102 [01A8H] |
020E | t(40000008): MOV R0, R0, 8H |
020F | u .FIXUP D |
020F | u(8D00000E): LDR SB, MT, MOD0 [ORG] |
0210 | u(81D0002C): LDR R1, SB, 2CH [data] |
0211 | v(4200000D): MOV R2, R0, DH |
0212 | w(83E00004): LDR R3, SP, 4H |
0213 | w(83300008): LDR R3, R3, 8H |
0214 | w(43380100): ADD R3, R3, 100H |
| ENDx |
0215 | x(F7FFFE08): BL -504 [001EH] |
| ELSIF (yx.a <= 0FFFFH)z & (ax.a >= -10000H)b THENc Put1(Mov,d RH,e 0,f x.a)g |
0216 | y(E7000026): B 38 [023DH] |
0217 | z(80E00004): LDR R0, SP, 4H |
0218 | z(80000008): LDR R0, R0, 8H |
0219 | z(4009FFFF): SUB R0, R0, FFFFFFFFH |
021A | a(EE00000C): BGT 12 [0227H] |
021B | b(80E00004): LDR R0, SP, 4H |
021C | b(80000008): LDR R0, R0, 8H |
021D | b(50090000): SUB R0, R0, 0H |
021E | c(E5000008): BLT 8 [0227H] |
021F | d(40000000): MOV R0, R0, 0H |
0220 | e .FIXUP D |
0220 | e(8D000011): LDR SB, MT, MOD0 [ORG] |
0221 | e(81D0002C): LDR R1, SB, 2CH [data] |
0222 | f(42000000): MOV R2, R0, 0H |
0223 | g(83E00004): LDR R3, SP, 4H |
0224 | g(83300008): LDR R3, R3, 8H |
| ELSEh Put1i(Mov+U,j RH,k 0,l x.a DIV 10000H MODm 10000H)n;o |
0225 | h(F7FFFDF8): BL -520 [001EH] |
0226 | i(E7000016): B 22 [023DH] |
0227 | j(40002000): MOV R0, R0, 2000H |
0228 | k .FIXUP D |
0228 | k(8D000008): LDR SB, MT, MOD0 [ORG] |
0229 | k(81D0002C): LDR R1, SB, 2CH [data] |
022A | l(42000000): MOV R2, R0, 0H |
022B | m(83E00004): LDR R3, SP, 4H |
022C | m(83300008): LDR R3, R3, 8H |
022D | m(43320010): ASR R3, R3, 10H |
022E | n(4334FFFF): AND R3, R3, FFFFFFFFH |
022F | o(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 |
0230 | p(80E00004): LDR R0, SP, 4H |
0231 | p(80000008): LDR R0, R0, 8H |
0232 | p(4004FFFF): AND R0, R0, FFFFFFFFH |
0233 | q(40090000): SUB R0, R0, 0H |
0234 | q(E1000008): BEQ 8 [023DH] |
0235 | r(40000006): MOV R0, R0, 6H |
0236 | s .FIXUP D |
0236 | s(8D00000E): LDR SB, MT, MOD0 [ORG] |
0237 | s(81D0002C): LDR R1, SB, 2CH [data] |
0238 | t(82D0002C): LDR R2, SB, 2CH |
0239 | u(83E00004): LDR R3, SP, 4H |
023A | u(83300008): LDR R3, R3, 8H |
023B | u(4334FFFF): AND R3, R3, FFFFFFFFH |
023C | v(F7FFFDE1): BL -543 [001EH] |
| END ; |
| x.r := RH;w incR |
023D | w .FIXUP D |
023D | w(8D000007): LDR SB, MT, MOD0 [ORG] |
023E | w(80D0002C): LDR R0, SB, 2CH [data] |
023F | w(81E00004): LDR R1, SP, 4H |
0240 | w(A0100010): STR R0, R1, 10H |
| ELSIFx xy.mode = ORB.Var THENz |
0241 | x(F7FFFE6C): BL -404 [00AEH] |
0242 | y(E7000073): B 115 [02B6H] |
0243 | z(80E00004): LDR R0, SP, 4H |
0244 | z(80000000): LDR R0, R0, 0H |
0245 | z(40090002): SUB R0, R0, 2H |
0246 | z(E900001E): BNE 30 [0265H] |
| IF x.r > 0 THENa (*local*) Put2(op,b RH,c SP,d x.a + frame)e |
0247 | a(80E00004): LDR R0, SP, 4H |
0248 | a(80000010): LDR R0, R0, 10H |
0249 | a(40090000): SUB R0, R0, 0H |
024A | a(E600000A): BLE 10 [0255H] |
024B | b(80E0000C): LDR R0, SP, CH |
024C | c .FIXUP D |
024C | c(8D00000F): LDR SB, MT, MOD0 [ORG] |
024D | c(81D0002C): LDR R1, SB, 2CH [data] |
024E | d(4200000E): MOV R2, R0, EH |
024F | e(83E00004): LDR R3, SP, 4H |
0250 | e(83300008): LDR R3, R3, 8H |
0251 | e(84D00034): LDR R4, SB, 34H |
0252 | e(03380004): ADD R3, R3, R4 |
| ELSEf GetSBg(x.r)h;i Put2(op,j RH,k SB,l x.a)m |
0253 | f(F7FFFE1D): BL -483 [0071H] |
0254 | g(E700000A): B 10 [025FH] |
0255 | h(80E00004): LDR R0, SP, 4H |
0256 | h(80000010): LDR R0, R0, 10H |
0257 | i(F7FFFF50): BL -176 [01A8H] |
0258 | j(80E0000C): LDR R0, SP, CH |
0259 | k .FIXUP D |
0259 | k(8D00000D): LDR SB, MT, MOD0 [ORG] |
025A | k(81D0002C): LDR R1, SB, 2CH [data] |
025B | l(4200000D): MOV R2, R0, DH |
025C | m(83E00004): LDR R3, SP, 4H |
025D | m(83300008): LDR R3, R3, 8H |
| ENDn ; |
025E | n(F7FFFE12): BL -494 [0071H] |
| x.r := RH;o incR |
025F | o .FIXUP D |
025F | o(8D000006): LDR SB, MT, MOD0 [ORG] |
0260 | o(80D0002C): LDR R0, SB, 2CH [data] |
0261 | o(81E00004): LDR R1, SP, 4H |
0262 | o(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 |
0263 | p(F7FFFE4A): BL -438 [00AEH] |
0264 | q(E7000051): B 81 [02B6H] |
0265 | r(80E00004): LDR R0, SP, 4H |
0266 | r(80000000): LDR R0, R0, 0H |
0267 | r(40090003): SUB R0, R0, 3H |
0268 | r(E9000016): BNE 22 [027FH] |
0269 | s(40000008): MOV R0, R0, 8H |
026A | t .FIXUP D |
026A | t(8D00000B): LDR SB, MT, MOD0 [ORG] |
026B | t(81D0002C): LDR R1, SB, 2CH [data] |
026C | u(4200000E): MOV R2, R0, EH |
026D | v(83E00004): LDR R3, SP, 4H |
026E | v(83300008): LDR R3, R3, 8H |
026F | v(84D00034): LDR R4, SB, 34H |
0270 | v(03380004): ADD R3, R3, R4 |
0271 | w(F7FFFDFF): BL -513 [0071H] |
0272 | x(80E0000C): LDR R0, SP, CH |
0273 | y .FIXUP D |
0273 | y(8D000009): LDR SB, MT, MOD0 [ORG] |
0274 | y(81D0002C): LDR R1, SB, 2CH [data] |
0275 | z(82D0002C): LDR R2, SB, 2CH |
0276 | a(83E00004): LDR R3, SP, 4H |
0277 | a(8330000C): LDR R3, R3, CH |
0278 | b(F7FFFDF8): BL -520 [0071H] |
0279 | c .FIXUP D |
0279 | c(8D000006): LDR SB, MT, MOD0 [ORG] |
027A | c(80D0002C): LDR R0, SB, 2CH [data] |
027B | c(81E00004): LDR R1, SP, 4H |
027C | c(A0100010): STR R0, R1, 10H |
| ELSIFd xe.mode = RegI THENf Put2(op,g x.r,h x.r,i x.a)j |
027D | d(F7FFFE30): BL -464 [00AEH] |
027E | e(E7000037): B 55 [02B6H] |
027F | f(80E00004): LDR R0, SP, 4H |
0280 | f(80000000): LDR R0, R0, 0H |
0281 | f(4009000B): SUB R0, R0, BH |
0282 | f(E9000009): BNE 9 [028CH] |
0283 | g(80E0000C): LDR R0, SP, CH |
0284 | h(81E00004): LDR R1, SP, 4H |
0285 | h(81100010): LDR R1, R1, 10H |
0286 | i(82E00004): LDR R2, SP, 4H |
0287 | i(82200010): LDR R2, R2, 10H |
0288 | j(83E00004): LDR R3, SP, 4H |
0289 | j(83300008): LDR R3, R3, 8H |
| ELSIFk xl.mode = Cond THENm |
028A | k(F7FFFDE6): BL -538 [0071H] |
028B | l(E700002A): B 42 [02B6H] |
028C | m(80E00004): LDR R0, SP, 4H |
028D | m(80000000): LDR R0, R0, 0H |
028E | m(4009000C): SUB R0, R0, CH |
028F | m(E9000026): BNE 38 [02B6H] |
| Put3(BC,n negated(xo.r)p,q 2)r;s |
0290 | n(40000002): MOV R0, R0, 2H |
0291 | o(4EE90004): SUB SP, SP, 4H |
0292 | o(A0E00000): STR R0, SP, 0H |
0293 | p(80E00008): LDR R0, SP, 8H |
0294 | p(80000010): LDR R0, R0, 10H |
0295 | q(F7FFFE6D): BL -403 [0103H] |
0296 | q(01000000): MOV R1, R0, R0 |
0297 | q(80E00000): LDR R0, SP, 0H |
0298 | q(4EE80004): ADD SP, SP, 4H |
0299 | r(42000002): MOV R2, R0, 2H |
029A | s(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 |
029B | t(80E00004): LDR R0, SP, 4H |
029C | t(8000000C): LDR R0, R0, CH |
029D | u(F7FFFE98): BL -360 [0136H] |
029E | v(40000000): MOV R0, R0, 0H |
029F | w .FIXUP D |
029F | w(8D000026): LDR SB, MT, MOD0 [ORG] |
02A0 | w(81D0002C): LDR R1, SB, 2CH [data] |
02A1 | x(42000000): MOV R2, R0, 0H |
02A2 | y(43000001): MOV R3, R0, 1H |
02A3 | z(F7FFFD7A): BL -646 [001EH] |
02A4 | a(40000002): MOV R0, R0, 2H |
02A5 | b(41000007): MOV R1, R0, 7H |
02A6 | c(42000001): MOV R2, R0, 1H |
02A7 | d(F7FFFDE9): BL -535 [0091H] |
| FixLink(x.a)e;f Put1(Mov,g RH,h 0,i 0)j;k x.r := RH;l incR |
02A8 | e(80E00004): LDR R0, SP, 4H |
02A9 | e(80000008): LDR R0, R0, 8H |
02AA | f(F7FFFE8B): BL -373 [0136H] |
02AB | g(40000000): MOV R0, R0, 0H |
02AC | h .FIXUP D |
02AC | h(8D00000D): LDR SB, MT, MOD0 [ORG] |
02AD | h(81D0002C): LDR R1, SB, 2CH [data] |
02AE | i(42000000): MOV R2, R0, 0H |
02AF | j(43000000): MOV R3, R0, 0H |
02B0 | k(F7FFFD6D): BL -659 [001EH] |
02B1 | l .FIXUP D |
02B1 | l(8D000005): LDR SB, MT, MOD0 [ORG] |
02B2 | l(80D0002C): LDR R0, SB, 2CH [data] |
02B3 | l(81E00004): LDR R1, SP, 4H |
02B4 | l(A0100010): STR R0, R1, 10H |
| ENDm ; |
02B5 | m(F7FFFDF8): BL -520 [00AEH] |
| x.mode := Reg |
| ENDn |
02B6 | n(4000000A): MOV R0, R0, AH |
02B7 | n(81E00004): LDR R1, SP, 4H |
02B8 | n(A0100000): STR R0, R1, 0H |
| ENDo load; |
02B9 | o(8FE00000): LDR LNK, SP, 0H |
02BA | o(4EE80010): ADD SP, SP, 10H |
02BB | o(C700000F): B LNK |
| |
| PROCEDURE loadAdr(VAR x: Item); |
| BEGINp |
02BC | p(4EE9000C): SUB SP, SP, CH |
02BD | p(AFE00000): STR LNK, SP, 0H |
02BE | p(A0E00004): STR R0, SP, 4H |
02BF | p(A1E00008): STR R1, SP, 8H |
| IF x.mode = ORB.Var THENq |
02C0 | q(80E00004): LDR R0, SP, 4H |
02C1 | q(80000000): LDR R0, R0, 0H |
02C2 | q(40090002): SUB R0, R0, 2H |
02C3 | q(E900001E): BNE 30 [02E2H] |
| IF x.r > 0 THENr (*local*) Put1a(Add,s RH,t SP,u x.a + frame)v |
02C4 | r(80E00004): LDR R0, SP, 4H |
02C5 | r(80000010): LDR R0, R0, 10H |
02C6 | r(40090000): SUB R0, R0, 0H |
02C7 | r(E600000A): BLE 10 [02D2H] |
02C8 | s(40000008): MOV R0, R0, 8H |
02C9 | t .FIXUP D |
02C9 | t(8D000018): LDR SB, MT, MOD0 [ORG] |
02CA | t(81D0002C): LDR R1, SB, 2CH [data] |
02CB | u(4200000E): MOV R2, R0, EH |
02CC | v(83E00004): LDR R3, SP, 4H |
02CD | v(83300008): LDR R3, R3, 8H |
02CE | v(84D00034): LDR R4, SB, 34H |
02CF | v(03380004): ADD R3, R3, R4 |
| ELSEw GetSBx(x.r)y;z Put1a(Add,a RH,b SB,c x.a)d |
02D0 | w(F7FFFD73): BL -653 [0044H] |
02D1 | x(E700000A): B 10 [02DCH] |
02D2 | y(80E00004): LDR R0, SP, 4H |
02D3 | y(80000010): LDR R0, R0, 10H |
02D4 | z(F7FFFED3): BL -301 [01A8H] |
02D5 | a(40000008): MOV R0, R0, 8H |
02D6 | b .FIXUP D |
02D6 | b(8D00000D): LDR SB, MT, MOD0 [ORG] |
02D7 | b(81D0002C): LDR R1, SB, 2CH [data] |
02D8 | c(4200000D): MOV R2, R0, DH |
02D9 | d(83E00004): LDR R3, SP, 4H |
02DA | d(83300008): LDR R3, R3, 8H |
| ENDe ; |
02DB | e(F7FFFD68): BL -664 [0044H] |
| x.r := RH;f incR |
02DC | f .FIXUP D |
02DC | f(8D000006): LDR SB, MT, MOD0 [ORG] |
02DD | f(80D0002C): LDR R0, SB, 2CH [data] |
02DE | f(81E00004): LDR R1, SP, 4H |
02DF | f(A0100010): STR R0, R1, 10H |
| ELSIFg xh.mode = ORB.Par THENi Put2(Ldr,j RH,k SP,l x.a + frame)m;n |
02E0 | g(F7FFFDCD): BL -563 [00AEH] |
02E1 | h(E7000031): B 49 [0313H] |
02E2 | i(80E00004): LDR R0, SP, 4H |
02E3 | i(80000000): LDR R0, R0, 0H |
02E4 | i(40090003): SUB R0, R0, 3H |
02E5 | i(E9000019): BNE 25 [02FFH] |
02E6 | j(40000008): MOV R0, R0, 8H |
02E7 | k .FIXUP D |
02E7 | k(8D00000B): LDR SB, MT, MOD0 [ORG] |
02E8 | k(81D0002C): LDR R1, SB, 2CH [data] |
02E9 | l(4200000E): MOV R2, R0, EH |
02EA | m(83E00004): LDR R3, SP, 4H |
02EB | m(83300008): LDR R3, R3, 8H |
02EC | m(84D00034): LDR R4, SB, 34H |
02ED | m(03380004): ADD R3, R3, R4 |
02EE | n(F7FFFD82): BL -638 [0071H] |
| IF x.b # 0 THENo Put1a(Add,p RH,q RH,r x.b)s ENDt ; |
02EF | o(80E00004): LDR R0, SP, 4H |
02F0 | o(8000000C): LDR R0, R0, CH |
02F1 | o(E1000007): BEQ 7 [02F9H] |
02F2 | p(40000008): MOV R0, R0, 8H |
02F3 | q .FIXUP D |
02F3 | q(8D00000C): LDR SB, MT, MOD0 [ORG] |
02F4 | q(81D0002C): LDR R1, SB, 2CH [data] |
02F5 | r(82D0002C): LDR R2, SB, 2CH |
02F6 | s(83E00004): LDR R3, SP, 4H |
02F7 | s(8330000C): LDR R3, R3, CH |
02F8 | t(F7FFFD4B): BL -693 [0044H] |
| x.r := RH;u incR |
02F9 | u .FIXUP D |
02F9 | u(8D000006): LDR SB, MT, MOD0 [ORG] |
02FA | u(80D0002C): LDR R0, SB, 2CH [data] |
02FB | u(81E00004): LDR R1, SP, 4H |
02FC | u(A0100010): STR R0, R1, 10H |
| ELSIFv xw.mode = RegI THENx |
02FD | v(F7FFFDB0): BL -592 [00AEH] |
02FE | w(E7000014): B 20 [0313H] |
02FF | x(80E00004): LDR R0, SP, 4H |
0300 | x(80000000): LDR R0, R0, 0H |
0301 | x(4009000B): SUB R0, R0, BH |
0302 | x(E900000C): BNE 12 [030FH] |
| IF x.a # 0 THENy Put1a(Add,z x.r,a x.r,b x.a)c ENDd |
0303 | y(80E00004): LDR R0, SP, 4H |
0304 | y(80000008): LDR R0, R0, 8H |
0305 | y(E1000008): BEQ 8 [030EH] |
0306 | z(40000008): MOV R0, R0, 8H |
0307 | a(81E00004): LDR R1, SP, 4H |
0308 | a(81100010): LDR R1, R1, 10H |
0309 | b(82E00004): LDR R2, SP, 4H |
030A | b(82200010): LDR R2, R2, 10H |
030B | c(83E00004): LDR R3, SP, 4H |
030C | c(83300008): LDR R3, R3, 8H |
030D | d(F7FFFD36): BL -714 [0044H] |
| ELSE ORSe.Mark("address error")f |
030E | e(E7000004): B 4 [0313H] |
030F | f .FIXUP D |
030F | f(8D000016): LDR SB, MT, MOD0 [ORG] |
0310 | f(40D888E8): ADD R0, SB, FFFF88E8H [data] |
0311 | f(4100000E): MOV R1, R0, EH |
| ENDg ; |
0312 | g .FIXUP P |
0312 | g(F720911B): BL MOD2 [ORS] PROC9 |
| x.mode := Reg |
| ENDh loadAdr; |
0313 | h(4000000A): MOV R0, R0, AH |
0314 | h(81E00004): LDR R1, SP, 4H |
0315 | h(A0100000): STR R0, R1, 0H |
0316 | h(8FE00000): LDR LNK, SP, 0H |
0317 | h(4EE8000C): ADD SP, SP, CH |
0318 | h(C700000F): B LNK |
| |
| PROCEDURE loadCond(VAR x: Item); |
| BEGINi |
0319 | i(4EE9000C): SUB SP, SP, CH |
031A | i(AFE00000): STR LNK, SP, 0H |
031B | i(A0E00004): STR R0, SP, 4H |
031C | i(A1E00008): STR R1, SP, 8H |
| IF x.type.formj = ORB.Bool THENk |
031D | j(80E00004): LDR R0, SP, 4H |
031E | j(80000004): LDR R0, R0, 4H |
031F | j(D11B2C4C): BLEQ MT [trap=4, pos=6956] |
0320 | k(80000000): LDR R0, R0, 0H |
0321 | k(40090002): SUB R0, R0, 2H |
0322 | k(E9000033): BNE 51 [0356H] |
| IF x.mode = ORB.Const THENl x.r := 15 - x.a*8 |
0323 | l(80E00004): LDR R0, SP, 4H |
0324 | l(80000000): LDR R0, R0, 0H |
0325 | l(40090001): SUB R0, R0, 1H |
0326 | l(E9000008): BNE 8 [032FH] |
| ELSEm loadn(x)o;p |
0327 | m(80E00004): LDR R0, SP, 4H |
0328 | m(80000008): LDR R0, R0, 8H |
0329 | m(40010003): LSL R0, R0, 3H |
032A | m(4100000F): MOV R1, R0, FH |
032B | m(00190000): SUB R0, R1, R0 |
032C | m(81E00004): LDR R1, SP, 4H |
032D | m(A0100010): STR R0, R1, 10H |
032E | n(E700001D): B 29 [034CH] |
032F | o(80E00004): LDR R0, SP, 4H |
0330 | o(81E00008): LDR R1, SP, 8H |
0331 | p(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 ; |
0332 | q .FIXUP D |
0332 | q(8D000023): LDR SB, MT, MOD0 [ORG] |
0333 | q(80D00018): LDR R0, SB, 18H [data] |
0334 | q(40090001): SUB R0, R0, 1H |
0335 | q(41091F40): SUB R1, R0, 1F40H |
0336 | q(DA1B991C): BLCC MT [trap=1, pos=7065] |
0337 | q(40010002): LSL R0, R0, 2H |
0338 | q(00D80000): ADD R0, SB, R0 |
0339 | r(80000064): LDR R0, R0, 64H |
033A | r(4002001E): ASR R0, R0, 1EH |
033B | s(5009FFFE): SUB R0, R0, FFFFFFFEH |
033C | s(E1000007): BEQ 7 [0344H] |
033D | t(40000009): MOV R0, R0, 9H |
033E | u(81E00004): LDR R1, SP, 4H |
033F | u(81100010): LDR R1, R1, 10H |
0340 | v(82E00004): LDR R2, SP, 4H |
0341 | v(82200010): LDR R2, R2, 10H |
0342 | w(43000000): MOV R3, R0, 0H |
0343 | x(F7FFFCDA): BL -806 [001EH] |
| x.r := NE;y DEC(RH) |
0344 | y(40000009): MOV R0, R0, 9H |
0345 | y(81E00004): LDR R1, SP, 4H |
0346 | y(A0100010): STR R0, R1, 10H |
| ENDz ; |
0347 | z .FIXUP D |
0347 | z(8D000015): LDR SB, MT, MOD0 [ORG] |
0348 | z(40D8002C): ADD R0, SB, 2CH [data] |
0349 | z(81000000): LDR R1, R0, 0H |
034A | z(41190001): SUB R1, R1, 1H |
034B | z(A1000000): STR R1, R0, 0H |
| x.mode := Cond;a x.a := 0;b x.b := 0 |
034C | a(4000000C): MOV R0, R0, CH |
034D | a(81E00004): LDR R1, SP, 4H |
034E | a(A0100000): STR R0, R1, 0H |
034F | b(40000000): MOV R0, R0, 0H |
0350 | b(81E00004): LDR R1, SP, 4H |
0351 | b(A0100008): STR R0, R1, 8H |
| ELSEc ORSd.Mark("not Boolean?")e |
0352 | c(40000000): MOV R0, R0, 0H |
0353 | c(81E00004): LDR R1, SP, 4H |
0354 | c(A010000C): STR R0, R1, CH |
0355 | d(E7000004): B 4 [035AH] |
0356 | e .FIXUP D |
0356 | e(8D00000F): LDR SB, MT, MOD0 [ORG] |
0357 | e(40D888F8): ADD R0, SB, FFFF88F8H [data] |
0358 | e(4100000D): MOV R1, R0, DH |
| ENDf |
0359 | f .FIXUP P |
0359 | f(F7209047): BL MOD2 [ORS] PROC9 |
| ENDg loadCond; |
035A | g(8FE00000): LDR LNK, SP, 0H |
035B | g(4EE8000C): ADD SP, SP, CH |
035C | g(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 |
035D | h(4EE90020): SUB SP, SP, 20H |
035E | h(AFE00000): STR LNK, SP, 0H |
035F | h(A0E00004): STR R0, SP, 4H |
0360 | i(40000002): MOV R0, R0, 2H |
0361 | i(A0E00008): STR R0, SP, 8H |
0362 | j(80E00004): LDR R0, SP, 4H |
0363 | j(D11CBA4C): BLEQ MT [trap=4, pos=7354] |
0364 | k(80000010): LDR R0, R0, 10H |
0365 | k(A0E00010): STR R0, SP, 10H |
0366 | l(80E00004): LDR R0, SP, 4H |
0367 | l(D11CC94C): BLEQ MT [trap=4, pos=7369] |
0368 | m(80000008): LDR R0, R0, 8H |
0369 | m(41000000): MOV R1, R0, 0H |
036A | m(00190000): SUB R0, R1, R0 |
036B | m(A0E00018): STR R0, SP, 18H |
036C | n(40E80008): ADD R0, SP, 8H |
036D | n .FIXUP D |
036D | n(8D000017): LDR SB, MT, MOD0 [ORG] |
036E | n(41D80000): ADD R1, SB, 0H [data] |
| ENDo loadTypTagAdr; |
036F | o(F7FFFF4C): BL -180 [02BCH] |
0370 | o(8FE00000): LDR LNK, SP, 0H |
0371 | o(4EE80020): ADD SP, SP, 20H |
0372 | o(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 |
0373 | p(4EE9000C): SUB SP, SP, CH |
0374 | p(AFE00000): STR LNK, SP, 0H |
0375 | p(A0E00004): STR R0, SP, 4H |
0376 | p(A1E00008): STR R1, SP, 8H |
0377 | q(40000000): MOV R0, R0, 0H |
0378 | r(F7FFFE2F): BL -465 [01A8H] |
0379 | s(40000008): MOV R0, R0, 8H |
037A | t .FIXUP D |
037A | t(8D00000D): LDR SB, MT, MOD0 [ORG] |
037B | t(81D0002C): LDR R1, SB, 2CH [data] |
037C | u(4200000D): MOV R2, R0, DH |
037D | v(83D0001C): LDR R3, SB, 1CH |
037E | v(84E00004): LDR R4, SP, 4H |
037F | v(84400008): LDR R4, R4, 8H |
0380 | v(03380004): ADD R3, R3, R4 |
0381 | w(F7FFFCC2): BL -830 [0044H] |
0382 | x(4000000A): MOV R0, R0, AH |
0383 | x(81E00004): LDR R1, SP, 4H |
0384 | x(A0100000): STR R0, R1, 0H |
0385 | y .FIXUP D |
0385 | y(8D00000B): LDR SB, MT, MOD0 [ORG] |
0386 | y(80D0002C): LDR R0, SB, 2CH [data] |
0387 | y(81E00004): LDR R1, SP, 4H |
0388 | y(A0100010): STR R0, R1, 10H |
| ENDz loadStringAdr; |
0389 | z(F7FFFD24): BL -732 [00AEH] |
038A | z(8FE00000): LDR LNK, SP, 0H |
038B | z(4EE8000C): ADD SP, SP, CH |
038C | z(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 |
038D | a .PROC 5 |
038D | a(4EE90014): SUB SP, SP, 14H |
038E | a(AFE00000): STR LNK, SP, 0H |
038F | a(A0E00004): STR R0, SP, 4H |
0390 | a(A1E00008): STR R1, SP, 8H |
0391 | a(A2E0000C): STR R2, SP, CH |
0392 | a(A3E00010): STR R3, SP, 10H |
0393 | b(40000001): MOV R0, R0, 1H |
0394 | b(81E00004): LDR R1, SP, 4H |
0395 | b(A0100000): STR R0, R1, 0H |
0396 | c(80E0000C): LDR R0, SP, CH |
0397 | c(81E00004): LDR R1, SP, 4H |
0398 | c(A0100004): STR R0, R1, 4H |
| ENDd MakeConstItem; |
0399 | d(80E00010): LDR R0, SP, 10H |
039A | d(81E00004): LDR R1, SP, 4H |
039B | d(A0100008): STR R0, R1, 8H |
039C | d(8FE00000): LDR LNK, SP, 0H |
039D | d(4EE80014): ADD SP, SP, 14H |
039E | d(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) |
039F | e .PROC 6 |
039F | e(4EE90010): SUB SP, SP, 10H |
03A0 | e(AFE00000): STR LNK, SP, 0H |
03A1 | e(A0E00004): STR R0, SP, 4H |
03A2 | e(A1E00008): STR R1, SP, 8H |
03A3 | e(A2E0000C): STR R2, SP, CH |
03A4 | f(40000001): MOV R0, R0, 1H |
03A5 | f(81E00004): LDR R1, SP, 4H |
03A6 | f(A0100000): STR R0, R1, 0H |
03A7 | g .FIXUP D |
03A7 | g(8D400022): LDR SB, MT, MOD4 [ORB] |
03A8 | g(80D0000A): LDR R0, SB, VAR10 |
03A9 | g(81E00004): LDR R1, SP, 4H |
03AA | g(A0100004): STR R0, R1, 4H |
| ENDh MakeRealItem; |
03AB | h(80E0000C): LDR R0, SP, CH |
03AC | h(81E00004): LDR R1, SP, 4H |
03AD | h(A0100008): STR R0, R1, 8H |
03AE | h(8FE00000): LDR LNK, SP, 0H |
03AF | h(4EE80010): ADD SP, SP, 10H |
03B0 | h(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 |
03B1 | i .PROC 7 |
03B1 | i(4EE90014): SUB SP, SP, 14H |
03B2 | i(AFE00000): STR LNK, SP, 0H |
03B3 | i(A0E00004): STR R0, SP, 4H |
03B4 | i(A1E00008): STR R1, SP, 8H |
03B5 | i(A2E0000C): STR R2, SP, CH |
03B6 | j(40000001): MOV R0, R0, 1H |
03B7 | j(81E00004): LDR R1, SP, 4H |
03B8 | j(A0100000): STR R0, R1, 0H |
03B9 | k .FIXUP D |
03B9 | k(8D400012): LDR SB, MT, MOD4 [ORB] |
03BA | k(80D0000E): LDR R0, SB, VAR14 |
03BB | k(81E00004): LDR R1, SP, 4H |
03BC | k(A0100004): STR R0, R1, 4H |
03BD | l .FIXUP D |
03BD | l(8D000004): LDR SB, MT, MOD0 [ORG] |
03BE | l(80D00024): LDR R0, SB, 24H [data] |
03BF | l(81E00004): LDR R1, SP, 4H |
03C0 | l(A0100008): STR R0, R1, 8H |
03C1 | m(80E0000C): LDR R0, SP, CH |
03C2 | m(81E00004): LDR R1, SP, 4H |
03C3 | m(A010000C): STR R0, R1, CH |
03C4 | n(40000000): MOV R0, R0, 0H |
03C5 | n(A0E00010): STR R0, SP, 10H |
| IF strx + len +o 4 <p maxStrx THENq |
03C6 | o(80D00024): LDR R0, SB, 24H |
03C7 | o(81E0000C): LDR R1, SP, CH |
03C8 | o(00080001): ADD R0, R0, R1 |
03C9 | p(40080004): ADD R0, R0, 4H |
03CA | q(40090960): SUB R0, R0, 960H |
03CB | q(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 ; |
03CC | r(80E0000C): LDR R0, SP, CH |
03CD | r(40090000): SUB R0, R0, 0H |
03CE | r(E6000019): BLE 25 [03E8H] |
03CF | s .FIXUP D |
03CF | s(8D000012): LDR SB, MT, MOD0 [ORG] |
03D0 | s(80D00024): LDR R0, SB, 24H [data] |
03D1 | s(41090960): SUB R1, R0, 960H |
03D2 | s(DA20231C): BLCC MT [trap=1, pos=8227] |
03D3 | s(00D80000): ADD R0, SB, R0 |
03D4 | t(81E00010): LDR R1, SP, 10H |
03D5 | t(42190100): SUB R2, R1, 100H |
03D6 | t(DA20311C): BLCC MT [trap=1, pos=8241] |
03D7 | t .FIXUP D |
03D7 | t(8D200008): LDR SB, MT, MOD2 [ORS] |
03D8 | t(42D80005): ADD R2, SB, VAR5 |
03D9 | t(01280001): ADD R1, R2, R1 |
03DA | u(91100000): LDR R1, R1, 0H |
03DB | u(B1007F44): STR R1, R0, 7F44H |
03DC | v .FIXUP D |
03DC | v(8D000005): LDR SB, MT, MOD0 [ORG] |
03DD | v(40D80024): ADD R0, SB, 24H [data] |
03DE | v(81000000): LDR R1, R0, 0H |
03DF | v(41180001): ADD R1, R1, 1H |
03E0 | v(A1000000): STR R1, R0, 0H |
03E1 | w(80E00010): LDR R0, SP, 10H |
03E2 | w(40080001): ADD R0, R0, 1H |
03E3 | w(A0E00010): STR R0, SP, 10H |
03E4 | x(80E0000C): LDR R0, SP, CH |
03E5 | x(40090001): SUB R0, R0, 1H |
03E6 | x(A0E0000C): STR R0, SP, CH |
03E7 | x(E7FFFFE4): B -28 [03CCH] |
| WHILE strx MOD 4 #y 0 DOz str[strx]a := 0X;b INC(strx) ENDc |
03E8 | y .FIXUP D |
03E8 | y(8D00000C): LDR SB, MT, MOD0 [ORG] |
03E9 | y(80D00024): LDR R0, SB, 24H [data] |
03EA | y(40040003): AND R0, R0, 3H |
03EB | z(40090000): SUB R0, R0, 0H |
03EC | z(E100000C): BEQ 12 [03F9H] |
03ED | a .FIXUP D |
03ED | a(8D000005): LDR SB, MT, MOD0 [ORG] |
03EE | a(80D00024): LDR R0, SB, 24H [data] |
03EF | a(41090960): SUB R1, R0, 960H |
03F0 | a(DA207C1C): BLCC MT [trap=1, pos=8316] |
03F1 | a(00D80000): ADD R0, SB, R0 |
03F2 | b(41000000): MOV R1, R0, 0H |
03F3 | b(B1007F44): STR R1, R0, 7F44H |
03F4 | c(40D80024): ADD R0, SB, 24H |
03F5 | c(81000000): LDR R1, R0, 0H |
03F6 | c(41180001): ADD R1, R1, 1H |
03F7 | c(A1000000): STR R1, R0, 0H |
03F8 | c(E7FFFFEF): B -17 [03E8H] |
| ELSE ORSd.Mark("too many strings")e |
03F9 | d(E7000004): B 4 [03FEH] |
03FA | e .FIXUP D |
03FA | e(8D00000D): LDR SB, MT, MOD0 [ORG] |
03FB | e(40D88908): ADD R0, SB, FFFF8908H [data] |
03FC | e(41000011): MOV R1, R0, 11H |
| ENDf |
03FD | f .FIXUP P |
03FD | f(F72090A4): BL MOD2 [ORS] PROC9 |
| ENDg MakeStringItem; |
03FE | g(8FE00000): LDR LNK, SP, 0H |
03FF | g(4EE80014): ADD SP, SP, 14H |
0400 | g(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 |
0401 | h .PROC 8 |
0401 | h(4EE90014): SUB SP, SP, 14H |
0402 | h(AFE00000): STR LNK, SP, 0H |
0403 | h(A0E00004): STR R0, SP, 4H |
0404 | h(A1E00008): STR R1, SP, 8H |
0405 | h(A2E0000C): STR R2, SP, CH |
0406 | h(A3E00010): STR R3, SP, 10H |
0407 | i(80E0000C): LDR R0, SP, CH |
0408 | i(D121344C): BLEQ MT [trap=4, pos=8500] |
0409 | j(90000000): LDR R0, R0, 0H |
040A | j(81E00004): LDR R1, SP, 4H |
040B | j(A0100000): STR R0, R1, 0H |
040C | k(80E0000C): LDR R0, SP, CH |
040D | k(D121464C): BLEQ MT [trap=4, pos=8518] |
040E | l(80000010): LDR R0, R0, 10H |
040F | l(81E00004): LDR R1, SP, 4H |
0410 | l(A0100004): STR R0, R1, 4H |
0411 | m(80E0000C): LDR R0, SP, CH |
0412 | m(D121544C): BLEQ MT [trap=4, pos=8532] |
0413 | n(80000034): LDR R0, R0, 34H |
0414 | n(81E00004): LDR R1, SP, 4H |
0415 | n(A0100008): STR R0, R1, 8H |
0416 | o(80E0000C): LDR R0, SP, CH |
0417 | o(D121644C): BLEQ MT [trap=4, pos=8548] |
0418 | p(90000003): LDR R0, R0, 3H |
0419 | p(81E00004): LDR R1, SP, 4H |
041A | p(B0100014): STR R0, R1, 14H |
| IF y.classq = ORB.Par THENr x.b := 0 |
041B | q(80E0000C): LDR R0, SP, CH |
041C | q(D121744C): BLEQ MT [trap=4, pos=8564] |
041D | r(90000000): LDR R0, R0, 0H |
041E | r(40090003): SUB R0, R0, 3H |
041F | r(E9000004): BNE 4 [0424H] |
| ELSIFs yt.classu = ORB.Typ THENv x.a := y.typew.lenx;y x.r := -y.levz |
0420 | s(40000000): MOV R0, R0, 0H |
0421 | s(81E00004): LDR R1, SP, 4H |
0422 | s(A010000C): STR R0, R1, CH |
0423 | t(E700002B): B 43 [044FH] |
0424 | u(80E0000C): LDR R0, SP, CH |
0425 | u(D1219E4C): BLEQ MT [trap=4, pos=8606] |
0426 | v(90000000): LDR R0, R0, 0H |
0427 | v(40090005): SUB R0, R0, 5H |
0428 | v(E900000F): BNE 15 [0438H] |
0429 | w(80E0000C): LDR R0, SP, CH |
042A | w(D121BB4C): BLEQ MT [trap=4, pos=8635] |
042B | x(80000010): LDR R0, R0, 10H |
042C | x(D121BF4C): BLEQ MT [trap=4, pos=8639] |
042D | y(80000010): LDR R0, R0, 10H |
042E | y(81E00004): LDR R1, SP, 4H |
042F | y(A0100008): STR R0, R1, 8H |
0430 | z(80E0000C): LDR R0, SP, CH |
0431 | z(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*) |
0432 | a(80000004): LDR R0, R0, 4H |
0433 | a(41000000): MOV R1, R0, 0H |
0434 | a(00190000): SUB R0, R1, R0 |
0435 | a(81E00004): LDR R1, SP, 4H |
0436 | a(A0100010): STR R0, R1, 10H |
0437 | b(E7000017): B 23 [044FH] |
0438 | c(80E0000C): LDR R0, SP, CH |
0439 | c(D121E14C): BLEQ MT [trap=4, pos=8673] |
043A | d(90000000): LDR R0, R0, 0H |
043B | d(40090001): SUB R0, R0, 1H |
043C | e(E900000D): BNE 13 [044AH] |
043D | f(80E0000C): LDR R0, SP, CH |
043E | f(D121F84C): BLEQ MT [trap=4, pos=8696] |
043F | g(80000010): LDR R0, R0, 10H |
0440 | g(D121FD4C): BLEQ MT [trap=4, pos=8701] |
0441 | h(80000000): LDR R0, R0, 0H |
0442 | h(4009000B): SUB R0, R0, BH |
0443 | i(E9000006): BNE 6 [044AH] |
0444 | j(80E0000C): LDR R0, SP, CH |
0445 | j(D1221D4C): BLEQ MT [trap=4, pos=8733] |
| ELSEk xl.r := y.levm |
0446 | k(80000004): LDR R0, R0, 4H |
0447 | k(81E00004): LDR R1, SP, 4H |
0448 | k(A010000C): STR R0, R1, CH |
0449 | l(E7000005): B 5 [044FH] |
044A | m(80E0000C): LDR R0, SP, CH |
044B | m(D1223C4C): BLEQ MT [trap=4, pos=8764] |
| ENDn ; |
044C | n(80000004): LDR R0, R0, 4H |
044D | n(81E00004): LDR R1, SP, 4H |
044E | n(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 |
044F | o(80E0000C): LDR R0, SP, CH |
0450 | o(D122544C): BLEQ MT [trap=4, pos=8788] |
0451 | p(80000004): LDR R0, R0, 4H |
0452 | p(40090000): SUB R0, R0, 0H |
0453 | q(E600000F): BLE 15 [0463H] |
0454 | r(80E0000C): LDR R0, SP, CH |
0455 | r(D122624C): BLEQ MT [trap=4, pos=8802] |
0456 | s(80000004): LDR R0, R0, 4H |
0457 | s(81E00010): LDR R1, SP, 10H |
0458 | s(00090001): SUB R0, R0, R1 |
0459 | t(E1000009): BEQ 9 [0463H] |
045A | u(80E0000C): LDR R0, SP, CH |
045B | u(D122774C): BLEQ MT [trap=4, pos=8823] |
045C | v(90000000): LDR R0, R0, 0H |
045D | v(40090001): SUB R0, R0, 1H |
045E | w(E1000004): BEQ 4 [0463H] |
045F | x .FIXUP D |
045F | x(8D000065): LDR SB, MT, MOD0 [ORG] |
0460 | x(40D8891C): ADD R0, SB, FFFF891CH [data] |
0461 | x(4100001C): MOV R1, R0, 1CH |
0462 | y .FIXUP P |
0462 | y(F7209065): BL MOD2 [ORS] PROC9 |
| ENDz MakeItem; |
0463 | z(8FE00000): LDR LNK, SP, 0H |
0464 | z(4EE80014): ADD SP, SP, 14H |
0465 | z(C700000F): B LNK |
| |
| (* Code generation for Selectors, Variables, Constants *) |
| |
| PROCEDURE Field*(VAR x: Item; y: ORB.Object); (* x := x.y *) |
| BEGINa; |
0466 | a .PROC 9 |
0466 | a(4EE90010): SUB SP, SP, 10H |
0467 | a(AFE00000): STR LNK, SP, 0H |
0468 | a(A0E00004): STR R0, SP, 4H |
0469 | a(A1E00008): STR R1, SP, 8H |
046A | a(A2E0000C): STR R2, SP, CH |
| IF x.mode = ORB.Var THENb |
046B | b(80E00004): LDR R0, SP, 4H |
046C | b(80000000): LDR R0, R0, 0H |
046D | b(40090002): SUB R0, R0, 2H |
046E | b(E9000019): BNE 25 [0488H] |
| IF x.r >= 0 THENc x.a := x.a + y.vald |
046F | c(80E00004): LDR R0, SP, 4H |
0470 | c(80000010): LDR R0, R0, 10H |
0471 | c(40090000): SUB R0, R0, 0H |
0472 | c(E5000009): BLT 9 [047CH] |
0473 | d(80E0000C): LDR R0, SP, CH |
0474 | d(D123944C): BLEQ MT [trap=4, pos=9108] |
| ELSEe loadAdrf(x)g;h x.mode := RegI;i x.a := y.valj |
0475 | e(81E00004): LDR R1, SP, 4H |
0476 | e(81100008): LDR R1, R1, 8H |
0477 | e(80000034): LDR R0, R0, 34H |
0478 | e(00180000): ADD R0, R1, R0 |
0479 | e(81E00004): LDR R1, SP, 4H |
047A | e(A0100008): STR R0, R1, 8H |
047B | f(E700000B): B 11 [0487H] |
047C | g(80E00004): LDR R0, SP, 4H |
047D | g(81E00008): LDR R1, SP, 8H |
047E | h(F7FFFE3D): BL -451 [02BCH] |
047F | i(4000000B): MOV R0, R0, BH |
0480 | i(81E00004): LDR R1, SP, 4H |
0481 | i(A0100000): STR R0, R1, 0H |
0482 | j(80E0000C): LDR R0, SP, CH |
0483 | j(D123C84C): BLEQ MT [trap=4, pos=9160] |
| ENDk |
0484 | k(80000034): LDR R0, R0, 34H |
0485 | k(81E00004): LDR R1, SP, 4H |
0486 | k(A0100008): STR R0, R1, 8H |
| ELSIF xl.mode = RegI THENm x.a := x.a + y.valn |
0487 | l(E7000019): B 25 [04A1H] |
0488 | m(80E00004): LDR R0, SP, 4H |
0489 | m(80000000): LDR R0, R0, 0H |
048A | m(4009000B): SUB R0, R0, BH |
048B | m(E9000009): BNE 9 [0495H] |
048C | n(80E0000C): LDR R0, SP, CH |
048D | n(D124024C): BLEQ MT [trap=4, pos=9218] |
| ELSIFo xp.mode = ORB.Par THENq x.b := x.b + y.valr |
048E | o(81E00004): LDR R1, SP, 4H |
048F | o(81100008): LDR R1, R1, 8H |
0490 | o(80000034): LDR R0, R0, 34H |
0491 | o(00180000): ADD R0, R1, R0 |
0492 | o(81E00004): LDR R1, SP, 4H |
0493 | o(A0100008): STR R0, R1, 8H |
0494 | p(E700000C): B 12 [04A1H] |
0495 | q(80E00004): LDR R0, SP, 4H |
0496 | q(80000000): LDR R0, R0, 0H |
0497 | q(40090003): SUB R0, R0, 3H |
0498 | q(E9000008): BNE 8 [04A1H] |
0499 | r(80E0000C): LDR R0, SP, CH |
049A | r(D124354C): BLEQ MT [trap=4, pos=9269] |
| ENDs |
049B | s(81E00004): LDR R1, SP, 4H |
049C | s(8110000C): LDR R1, R1, CH |
049D | s(80000034): LDR R0, R0, 34H |
049E | s(00180000): ADD R0, R1, R0 |
049F | s(81E00004): LDR R1, SP, 4H |
04A0 | s(A010000C): STR R0, R1, CH |
| ENDt Field; |
04A1 | t(8FE00000): LDR LNK, SP, 0H |
04A2 | t(4EE80010): ADD SP, SP, 10H |
04A3 | t(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 |
04A4 | u .PROC 10 |
04A4 | u(4EE9001C): SUB SP, SP, 1CH |
04A5 | u(AFE00000): STR LNK, SP, 0H |
04A6 | u(A0E00004): STR R0, SP, 4H |
04A7 | u(A1E00008): STR R1, SP, 8H |
04A8 | u(A2E0000C): STR R2, SP, CH |
04A9 | u(A3E00010): STR R3, SP, 10H |
04AA | v(80E00004): LDR R0, SP, 4H |
04AB | v(80000004): LDR R0, R0, 4H |
04AC | v(D124B34C): BLEQ MT [trap=4, pos=9395] |
04AD | w(8000001C): LDR R0, R0, 1CH |
04AE | w(D124B84C): BLEQ MT [trap=4, pos=9400] |
04AF | x(80000020): LDR R0, R0, 20H |
04B0 | x(A0E00014): STR R0, SP, 14H |
04B1 | y(80E00004): LDR R0, SP, 4H |
04B2 | y(80000004): LDR R0, R0, 4H |
04B3 | y(D124CB4C): BLEQ MT [trap=4, pos=9419] |
04B4 | z(80000010): LDR R0, R0, 10H |
04B5 | z(A0E00018): STR R0, SP, 18H |
| IF (y.mode = ORB.Const)a & (blim >= 0)c THENd |
04B6 | a(80E0000C): LDR R0, SP, CH |
04B7 | a(80000000): LDR R0, R0, 0H |
04B8 | a(40090001): SUB R0, R0, 1H |
04B9 | b(E900002E): BNE 46 [04E8H] |
04BA | c(80E00018): LDR R0, SP, 18H |
04BB | c(40090000): SUB R0, R0, 0H |
04BC | d(E500002B): BLT 43 [04E8H] |
| IF (y.a < 0)e OR (fy.a >= lim)g THENh ORS.Mark("bad index")i ENDj ; |
04BD | e(80E0000C): LDR R0, SP, CH |
04BE | e(80000008): LDR R0, R0, 8H |
04BF | e(40090000): SUB R0, R0, 0H |
04C0 | f(E5000005): BLT 5 [04C6H] |
04C1 | g(80E0000C): LDR R0, SP, CH |
04C2 | g(80000008): LDR R0, R0, 8H |
04C3 | g(81E00018): LDR R1, SP, 18H |
04C4 | g(00090001): SUB R0, R0, R1 |
04C5 | h(E5000004): BLT 4 [04CAH] |
04C6 | i .FIXUP D |
04C6 | i(8D000067): LDR SB, MT, MOD0 [ORG] |
04C7 | i(40D88938): ADD R0, SB, FFFF8938H [data] |
04C8 | i(4100000A): MOV R1, R0, AH |
04C9 | j .FIXUP P |
04C9 | j(F7209067): BL MOD2 [ORS] PROC9 |
| IF x.mode IN {ORB.Var, RegI} THENk x.a := y.a * s +l x.a |
04CA | k(40000804): MOV R0, R0, 804H |
04CB | k(81E00004): LDR R1, SP, 4H |
04CC | k(81100000): LDR R1, R1, 0H |
04CD | k(41180001): ADD R1, R1, 1H |
04CE | k(00030001): ROR R0, R0, R1 |
04CF | k(E800000A): BPL 10 [04DAH] |
04D0 | l(80E0000C): LDR R0, SP, CH |
04D1 | l(80000008): LDR R0, R0, 8H |
04D2 | l(81E00014): LDR R1, SP, 14H |
04D3 | l(000A0001): MUL R0, R0, R1 |
| ELSIFm xn.mode = ORB.Par THENo x.b := y.a * s +p x.b |
04D4 | m(81E00004): LDR R1, SP, 4H |
04D5 | m(81100008): LDR R1, R1, 8H |
04D6 | m(00080001): ADD R0, R0, R1 |
04D7 | m(81E00004): LDR R1, SP, 4H |
04D8 | m(A0100008): STR R0, R1, 8H |
04D9 | n(E700000D): B 13 [04E7H] |
04DA | o(80E00004): LDR R0, SP, 4H |
04DB | o(80000000): LDR R0, R0, 0H |
04DC | o(40090003): SUB R0, R0, 3H |
04DD | o(E9000009): BNE 9 [04E7H] |
04DE | p(80E0000C): LDR R0, SP, CH |
04DF | p(80000008): LDR R0, R0, 8H |
04E0 | p(81E00014): LDR R1, SP, 14H |
04E1 | p(000A0001): MUL R0, R0, R1 |
| ENDq |
04E2 | q(81E00004): LDR R1, SP, 4H |
04E3 | q(8110000C): LDR R1, R1, CH |
04E4 | q(00080001): ADD R0, R0, R1 |
04E5 | q(81E00004): LDR R1, SP, 4H |
04E6 | q(A010000C): STR R0, R1, CH |
| ELSE loadr(y)s;t |
04E7 | r(E70000B6): B 182 [059EH] |
04E8 | s(80E0000C): LDR R0, SP, CH |
04E9 | s(81E00010): LDR R1, SP, 10H |
04EA | t(F7FFFCE8): BL -792 [01D3H] |
| IF check THENu (*check array bounds*) |
04EB | u .FIXUP D |
04EB | u(8D000025): LDR SB, MT, MOD0 [ORG] |
04EC | u(90D00044): LDR R0, SB, 44H [data] |
04ED | u(E100002A): BEQ 42 [0518H] |
| IF lim >= 0 THENv Put1a(Cmp,w RH,x y.r,y lim)z |
04EE | v(80E00018): LDR R0, SP, 18H |
04EF | v(40090000): SUB R0, R0, 0H |
04F0 | v(E5000008): BLT 8 [04F9H] |
04F1 | w(40000009): MOV R0, R0, 9H |
04F2 | x .FIXUP D |
04F2 | x(8D000007): LDR SB, MT, MOD0 [ORG] |
04F3 | x(81D0002C): LDR R1, SB, 2CH [data] |
04F4 | y(82E0000C): LDR R2, SP, CH |
04F5 | y(82200010): LDR R2, R2, 10H |
04F6 | z(83E00018): LDR R3, SP, 18H |
| ELSEa (*open array*) |
04F7 | a(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 |
04F8 | b(E700001C): B 28 [0515H] |
04F9 | c(4000000C): MOV R0, R0, CH |
04FA | c(81E00004): LDR R1, SP, 4H |
04FB | c(81100000): LDR R1, R1, 0H |
04FC | c(41180001): ADD R1, R1, 1H |
04FD | c(00030001): ROR R0, R0, R1 |
04FE | c(E8000012): BPL 18 [0511H] |
04FF | d(40000008): MOV R0, R0, 8H |
0500 | e .FIXUP D |
0500 | e(8D00000E): LDR SB, MT, MOD0 [ORG] |
0501 | e(81D0002C): LDR R1, SB, 2CH [data] |
0502 | f(4200000E): MOV R2, R0, EH |
0503 | g(83E00004): LDR R3, SP, 4H |
0504 | g(83300008): LDR R3, R3, 8H |
0505 | g(43380004): ADD R3, R3, 4H |
0506 | h(84D00034): LDR R4, SB, 34H |
0507 | h(03380004): ADD R3, R3, R4 |
0508 | i(F7FFFB68): BL -1176 [0071H] |
0509 | j(40000009): MOV R0, R0, 9H |
050A | k .FIXUP D |
050A | k(8D00000A): LDR SB, MT, MOD0 [ORG] |
050B | k(81D0002C): LDR R1, SB, 2CH [data] |
050C | l(82E0000C): LDR R2, SP, CH |
050D | l(82200010): LDR R2, R2, 10H |
050E | m(83D0002C): LDR R3, SB, 2CH |
| ELSEn ORSo.Mark("error in Index")p |
050F | n(F7FFFAF0): BL -1296 [0000H] |
0510 | o(E7000004): B 4 [0515H] |
0511 | p .FIXUP D |
0511 | p(8D000007): LDR SB, MT, MOD0 [ORG] |
0512 | p(40D88944): ADD R0, SB, FFFF8944H [data] |
0513 | p(4100000F): MOV R1, R0, FH |
| ENDq |
0514 | q .FIXUP P |
0514 | q(F720904B): BL MOD2 [ORS] PROC9 |
| END ; |
| Trap(10,r 1)s (*BCC*) |
0515 | r(4000000A): MOV R0, R0, AH |
0516 | s(41000001): MOV R1, R0, 1H |
| ENDt ; |
0517 | t(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 ; |
0518 | u(80E00014): LDR R0, SP, 14H |
0519 | u(40090004): SUB R0, R0, 4H |
051A | u(E9000008): BNE 8 [0523H] |
051B | v(40000001): MOV R0, R0, 1H |
051C | w(81E0000C): LDR R1, SP, CH |
051D | w(81100010): LDR R1, R1, 10H |
051E | x(82E0000C): LDR R2, SP, CH |
051F | x(82200010): LDR R2, R2, 10H |
0520 | y(43000002): MOV R3, R0, 2H |
0521 | z(F7FFFAFC): BL -1284 [001EH] |
0522 | a(E700000A): B 10 [052DH] |
0523 | b(80E00014): LDR R0, SP, 14H |
0524 | b(40090001): SUB R0, R0, 1H |
0525 | b(E6000007): BLE 7 [052DH] |
0526 | c(4000000A): MOV R0, R0, AH |
0527 | d(81E0000C): LDR R1, SP, CH |
0528 | d(81100010): LDR R1, R1, 10H |
0529 | e(82E0000C): LDR R2, SP, CH |
052A | e(82200010): LDR R2, R2, 10H |
052B | f(83E00014): LDR R3, SP, 14H |
052C | g(F7FFFB17): BL -1257 [0044H] |
| IF x.mode = ORB.Var THENh |
052D | h(80E00004): LDR R0, SP, 4H |
052E | h(80000000): LDR R0, R0, 0H |
052F | h(40090002): SUB R0, R0, 2H |
0530 | h(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) |
0531 | i(80E00004): LDR R0, SP, 4H |
0532 | i(80000010): LDR R0, R0, 10H |
0533 | i(40090000): SUB R0, R0, 0H |
0534 | i(E600000F): BLE 15 [0544H] |
0535 | j(40000008): MOV R0, R0, 8H |
0536 | k(81E0000C): LDR R1, SP, CH |
0537 | k(81100010): LDR R1, R1, 10H |
0538 | l(4200000E): MOV R2, R0, EH |
0539 | m(83E0000C): LDR R3, SP, CH |
053A | m(83300010): LDR R3, R3, 10H |
053B | n(F7FFFAC4): BL -1340 [0000H] |
| ELSEo GetSBp(x.r)q;r |
053C | o(80E00004): LDR R0, SP, 4H |
053D | o(40080008): ADD R0, R0, 8H |
053E | o(81000000): LDR R1, R0, 0H |
053F | o .FIXUP D |
053F | o(8D00002E): LDR SB, MT, MOD0 [ORG] |
0540 | o(82D00034): LDR R2, SB, 34H [data] |
0541 | o(01180002): ADD R1, R1, R2 |
0542 | o(A1000000): STR R1, R0, 0H |
0543 | p(E7000020): B 32 [0564H] |
0544 | q(80E00004): LDR R0, SP, 4H |
0545 | q(80000010): LDR R0, R0, 10H |
0546 | r(F7FFFC61): BL -927 [01A8H] |
| IF x.r = 0 THENs Put0(Add,t y.r,u SB,v y.r)w |
0547 | s(80E00004): LDR R0, SP, 4H |
0548 | s(80000010): LDR R0, R0, 10H |
0549 | s(E9000008): BNE 8 [0552H] |
054A | t(40000008): MOV R0, R0, 8H |
054B | u(81E0000C): LDR R1, SP, CH |
054C | u(81100010): LDR R1, R1, 10H |
054D | v(4200000D): MOV R2, R0, DH |
054E | w(83E0000C): LDR R3, SP, CH |
054F | w(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 |
0550 | x(F7FFFAAF): BL -1361 [0000H] |
0551 | y(E7000012): B 18 [0564H] |
0552 | z(40000008): MOV R0, R0, 8H |
0553 | a .FIXUP D |
0553 | a(8D000014): LDR SB, MT, MOD0 [ORG] |
0554 | a(81D0002C): LDR R1, SB, 2CH [data] |
0555 | b(4200000D): MOV R2, R0, DH |
0556 | c(83E00004): LDR R3, SP, 4H |
0557 | c(83300008): LDR R3, R3, 8H |
0558 | d(F7FFFAEB): BL -1301 [0044H] |
0559 | e(40000008): MOV R0, R0, 8H |
055A | f(81E0000C): LDR R1, SP, CH |
055B | f(81100010): LDR R1, R1, 10H |
055C | g .FIXUP D |
055C | g(8D000009): LDR SB, MT, MOD0 [ORG] |
055D | g(82D0002C): LDR R2, SB, 2CH [data] |
055E | h(83E0000C): LDR R3, SP, CH |
055F | h(83300010): LDR R3, R3, 10H |
0560 | i(F7FFFA9F): BL -1377 [0000H] |
| ENDj |
0561 | j(40000000): MOV R0, R0, 0H |
0562 | j(81E00004): LDR R1, SP, 4H |
0563 | j(A0100008): STR R0, R1, 8H |
| END ; |
| x.r := y.r;k x.mode := RegI |
0564 | k(80E0000C): LDR R0, SP, CH |
0565 | k(80000010): LDR R0, R0, 10H |
0566 | k(81E00004): LDR R1, SP, 4H |
0567 | k(A0100010): STR R0, R1, 10H |
| ELSIFl xm.mode = ORB.Par THENn |
0568 | l(4000000B): MOV R0, R0, BH |
0569 | l(81E00004): LDR R1, SP, 4H |
056A | l(A0100000): STR R0, R1, 0H |
056B | m(E7000032): B 50 [059EH] |
056C | n(80E00004): LDR R0, SP, 4H |
056D | n(80000000): LDR R0, R0, 0H |
056E | n(40090003): SUB R0, R0, 3H |
056F | n(E900001D): BNE 29 [058DH] |
| Put2(Ldr,o RH,p SP,q x.a + frame)r;s |
0570 | o(40000008): MOV R0, R0, 8H |
0571 | p .FIXUP D |
0571 | p(8D000015): LDR SB, MT, MOD0 [ORG] |
0572 | p(81D0002C): LDR R1, SB, 2CH [data] |
0573 | q(4200000E): MOV R2, R0, EH |
0574 | r(83E00004): LDR R3, SP, 4H |
0575 | r(83300008): LDR R3, R3, 8H |
0576 | r(84D00034): LDR R4, SB, 34H |
0577 | r(03380004): ADD R3, R3, R4 |
0578 | s(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 |
0579 | t(40000008): MOV R0, R0, 8H |
057A | u(81E0000C): LDR R1, SP, CH |
057B | u(81100010): LDR R1, R1, 10H |
057C | v .FIXUP D |
057C | v(8D00000B): LDR SB, MT, MOD0 [ORG] |
057D | v(82D0002C): LDR R2, SB, 2CH [data] |
057E | w(83E0000C): LDR R3, SP, CH |
057F | w(83300010): LDR R3, R3, 10H |
0580 | x(F7FFFA7F): BL -1409 [0000H] |
0581 | y(4000000B): MOV R0, R0, BH |
0582 | y(81E00004): LDR R1, SP, 4H |
0583 | y(A0100000): STR R0, R1, 0H |
0584 | z(80E0000C): LDR R0, SP, CH |
0585 | z(80000010): LDR R0, R0, 10H |
0586 | z(81E00004): LDR R1, SP, 4H |
0587 | z(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) |
0588 | a(80E00004): LDR R0, SP, 4H |
0589 | a(8000000C): LDR R0, R0, CH |
058A | a(81E00004): LDR R1, SP, 4H |
058B | a(A0100008): STR R0, R1, 8H |
058C | b(E7000011): B 17 [059EH] |
058D | c(80E00004): LDR R0, SP, 4H |
058E | c(80000000): LDR R0, R0, 0H |
058F | c(4009000B): SUB R0, R0, BH |
0590 | c(E900000D): BNE 13 [059EH] |
0591 | d(40000008): MOV R0, R0, 8H |
0592 | e(81E00004): LDR R1, SP, 4H |
0593 | e(81100010): LDR R1, R1, 10H |
0594 | f(82E00004): LDR R2, SP, 4H |
0595 | f(82200010): LDR R2, R2, 10H |
0596 | g(83E0000C): LDR R3, SP, CH |
0597 | g(83300010): LDR R3, R3, 10H |
0598 | h(F7FFFA67): BL -1433 [0000H] |
| ENDi |
0599 | i .FIXUP D |
0599 | i(8D00001D): LDR SB, MT, MOD0 [ORG] |
059A | i(40D8002C): ADD R0, SB, 2CH [data] |
059B | i(81000000): LDR R1, R0, 0H |
059C | i(41190001): SUB R1, R1, 1H |
059D | i(A1000000): STR R1, R0, 0H |
| END |
| ENDj Index; |
059E | j(8FE00000): LDR LNK, SP, 0H |
059F | j(4EE8001C): ADD SP, SP, 1CH |
05A0 | j(C700000F): B LNK |
| |
| PROCEDURE DeRef*(VAR x: Item); |
| BEGINk |
05A1 | k .PROC 11 |
05A1 | k(4EE9000C): SUB SP, SP, CH |
05A2 | k(AFE00000): STR LNK, SP, 0H |
05A3 | k(A0E00004): STR R0, SP, 4H |
05A4 | k(A1E00008): STR R1, SP, 8H |
| IF x.mode = ORB.Var THENl |
05A5 | l(80E00004): LDR R0, SP, 4H |
05A6 | l(80000000): LDR R0, R0, 0H |
05A7 | l(40090002): SUB R0, R0, 2H |
05A8 | l(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 ; |
05A9 | m(80E00004): LDR R0, SP, 4H |
05AA | m(80000010): LDR R0, R0, 10H |
05AB | m(40090000): SUB R0, R0, 0H |
05AC | m(E600000A): BLE 10 [05B7H] |
05AD | n(40000008): MOV R0, R0, 8H |
05AE | o .FIXUP D |
05AE | o(8D000015): LDR SB, MT, MOD0 [ORG] |
05AF | o(81D0002C): LDR R1, SB, 2CH [data] |
05B0 | p(4200000E): MOV R2, R0, EH |
05B1 | q(83E00004): LDR R3, SP, 4H |
05B2 | q(83300008): LDR R3, R3, 8H |
05B3 | q(84D00034): LDR R4, SB, 34H |
05B4 | q(03380004): ADD R3, R3, R4 |
05B5 | r(F7FFFABB): BL -1349 [0071H] |
05B6 | s(E700000A): B 10 [05C1H] |
05B7 | t(80E00004): LDR R0, SP, 4H |
05B8 | t(80000010): LDR R0, R0, 10H |
05B9 | u(F7FFFBEE): BL -1042 [01A8H] |
05BA | v(40000008): MOV R0, R0, 8H |
05BB | w .FIXUP D |
05BB | w(8D00000D): LDR SB, MT, MOD0 [ORG] |
05BC | w(81D0002C): LDR R1, SB, 2CH [data] |
05BD | x(4200000D): MOV R2, R0, DH |
05BE | y(83E00004): LDR R3, SP, 4H |
05BF | y(83300008): LDR R3, R3, 8H |
05C0 | z(F7FFFAB0): BL -1360 [0071H] |
| NilCheck;a x.r := RH;b incR |
05C1 | a(F7FFFC06): BL -1018 [01C8H] |
05C2 | b .FIXUP D |
05C2 | b(8D000007): LDR SB, MT, MOD0 [ORG] |
05C3 | b(80D0002C): LDR R0, SB, 2CH [data] |
05C4 | b(81E00004): LDR R1, SP, 4H |
05C5 | b(A0100010): STR R0, R1, 10H |
| ELSIFc xd.mode = ORB.Par THENe |
05C6 | c(F7FFFAE7): BL -1305 [00AEH] |
05C7 | d(E7000031): B 49 [05F9H] |
05C8 | e(80E00004): LDR R0, SP, 4H |
05C9 | e(80000000): LDR R0, R0, 0H |
05CA | e(40090003): SUB R0, R0, 3H |
05CB | e(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 |
05CC | f(40000008): MOV R0, R0, 8H |
05CD | g .FIXUP D |
05CD | g(8D00000B): LDR SB, MT, MOD0 [ORG] |
05CE | g(81D0002C): LDR R1, SB, 2CH [data] |
05CF | h(4200000E): MOV R2, R0, EH |
05D0 | i(83E00004): LDR R3, SP, 4H |
05D1 | i(83300008): LDR R3, R3, 8H |
05D2 | i(84D00034): LDR R4, SB, 34H |
05D3 | i(03380004): ADD R3, R3, R4 |
05D4 | j(F7FFFA9C): BL -1380 [0071H] |
05D5 | k(40000008): MOV R0, R0, 8H |
05D6 | l .FIXUP D |
05D6 | l(8D000009): LDR SB, MT, MOD0 [ORG] |
05D7 | l(81D0002C): LDR R1, SB, 2CH [data] |
05D8 | m(82D0002C): LDR R2, SB, 2CH |
05D9 | n(83E00004): LDR R3, SP, 4H |
05DA | n(8330000C): LDR R3, R3, CH |
05DB | o(F7FFFA95): BL -1387 [0071H] |
05DC | p(F7FFFBEB): BL -1045 [01C8H] |
05DD | q .FIXUP D |
05DD | q(8D000007): LDR SB, MT, MOD0 [ORG] |
05DE | q(80D0002C): LDR R0, SB, 2CH [data] |
05DF | q(81E00004): LDR R1, SP, 4H |
05E0 | q(A0100010): STR R0, R1, 10H |
| ELSIFr xs.mode = RegI THENt Put2(Ldr,u x.r,v x.r,w x.a)x;y NilCheck |
05E1 | r(F7FFFACC): BL -1332 [00AEH] |
05E2 | s(E7000016): B 22 [05F9H] |
05E3 | t(80E00004): LDR R0, SP, 4H |
05E4 | t(80000000): LDR R0, R0, 0H |
05E5 | t(4009000B): SUB R0, R0, BH |
05E6 | t(E900000A): BNE 10 [05F1H] |
05E7 | u(40000008): MOV R0, R0, 8H |
05E8 | v(81E00004): LDR R1, SP, 4H |
05E9 | v(81100010): LDR R1, R1, 10H |
05EA | w(82E00004): LDR R2, SP, 4H |
05EB | w(82200010): LDR R2, R2, 10H |
05EC | x(83E00004): LDR R3, SP, 4H |
05ED | x(83300008): LDR R3, R3, 8H |
05EE | y(F7FFFA82): BL -1406 [0071H] |
| ELSIFz xa.mode # Reg THENb ORS.Mark("bad mode in DeRef")c |
05EF | z(F7FFFBD8): BL -1064 [01C8H] |
05F0 | a(E7000008): B 8 [05F9H] |
05F1 | b(80E00004): LDR R0, SP, 4H |
05F2 | b(80000000): LDR R0, R0, 0H |
05F3 | b(4009000A): SUB R0, R0, AH |
05F4 | b(E1000004): BEQ 4 [05F9H] |
05F5 | c .FIXUP D |
05F5 | c(8D000018): LDR SB, MT, MOD0 [ORG] |
05F6 | c(40D88954): ADD R0, SB, FFFF8954H [data] |
05F7 | c(41000012): MOV R1, R0, 12H |
| ENDd ; |
05F8 | d .FIXUP P |
05F8 | d(F72090E4): BL MOD2 [ORS] PROC9 |
| x.mode := RegI;e x.a := 0;f x.b := 0 |
05F9 | e(4000000B): MOV R0, R0, BH |
05FA | e(81E00004): LDR R1, SP, 4H |
05FB | e(A0100000): STR R0, R1, 0H |
05FC | f(40000000): MOV R0, R0, 0H |
05FD | f(81E00004): LDR R1, SP, 4H |
05FE | f(A0100008): STR R0, R1, 8H |
| ENDg DeRef; |
05FF | g(40000000): MOV R0, R0, 0H |
0600 | g(81E00004): LDR R1, SP, 4H |
0601 | g(A010000C): STR R0, R1, CH |
0602 | g(8FE00000): LDR LNK, SP, 0H |
0603 | g(4EE8000C): ADD SP, SP, CH |
0604 | g(C700000F): B LNK |
| |
| PROCEDURE Q(T: ORB.Type; VAR dcw: LONGINT); |
| BEGINh (*one entry of type descriptor extension table*) |
0605 | h(4EE9000C): SUB SP, SP, CH |
0606 | h(AFE00000): STR LNK, SP, 0H |
0607 | h(A0E00004): STR R0, SP, 4H |
0608 | h(A1E00008): STR R1, SP, 8H |
| IF T.basei # NIL THENj |
0609 | i(80E00004): LDR R0, SP, 4H |
060A | i(D12C174C): BLEQ MT [trap=4, pos=11287] |
060B | j(8000001C): LDR R0, R0, 1CH |
060C | j(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 |
060D | k(80E00004): LDR R0, SP, 4H |
060E | k(D12C314C): BLEQ MT [trap=4, pos=11313] |
060F | l(8000001C): LDR R0, R0, 1CH |
0610 | m(81E00008): LDR R1, SP, 8H |
0611 | n(F7FFFFF3): BL -13 [0605H] |
0612 | o(80E00008): LDR R0, SP, 8H |
0613 | o(80000000): LDR R0, R0, 0H |
0614 | o(41090078): SUB R1, R0, 78H |
0615 | o(DA2C421C): BLCC MT [trap=1, pos=11330] |
0616 | o(40010002): LSL R0, R0, 2H |
0617 | o .FIXUP D |
0617 | o(8D000022): LDR SB, MT, MOD0 [ORG] |
0618 | o(00D80000): ADD R0, SB, R0 [global array] |
0619 | p(81E00004): LDR R1, SP, 4H |
061A | p(D12C4C4C): BLEQ MT [trap=4, pos=11340] |
061B | q(81100008): LDR R1, R1, 8H |
061C | q(4111000C): LSL R1, R1, CH |
061D | r(82E00004): LDR R2, SP, 4H |
061E | r(D12C5A4C): BLEQ MT [trap=4, pos=11354] |
061F | s(82200010): LDR R2, R2, 10H |
0620 | s(01180002): ADD R1, R1, R2 |
0621 | t(4111000C): LSL R1, R1, CH |
0622 | u(82E00008): LDR R2, SP, 8H |
0623 | u(82200000): LDR R2, R2, 0H |
0624 | u(01180002): ADD R1, R1, R2 |
0625 | v(82D00040): LDR R2, SB, 40H |
0626 | v(01190002): SUB R1, R1, R2 |
0627 | v(A1007D64): STR R1, R0, 7D64H |
| fixorgT := dcw;w INC(dcw) |
0628 | w(80E00008): LDR R0, SP, 8H |
0629 | w(80000000): LDR R0, R0, 0H |
062A | w(A0D00040): STR R0, SB, 40H |
| ENDx |
062B | x(80E00008): LDR R0, SP, 8H |
062C | x(81000000): LDR R1, R0, 0H |
062D | x(41180001): ADD R1, R1, 1H |
062E | x(A1000000): STR R1, R0, 0H |
| ENDy Q; |
062F | y(8FE00000): LDR LNK, SP, 0H |
0630 | y(4EE8000C): ADD SP, SP, CH |
0631 | y(C700000F): B LNK |
| |
| PROCEDURE FindPtrFlds(typ: ORB.Type; off: LONGINT; VAR dcw: LONGINT); |
| VAR fld: ORB.Object; i, s: LONGINT; |
| BEGINz |
0632 | z(4EE9001C): SUB SP, SP, 1CH |
0633 | z(AFE00000): STR LNK, SP, 0H |
0634 | z(A0E00004): STR R0, SP, 4H |
0635 | z(A1E00008): STR R1, SP, 8H |
0636 | z(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) |
0637 | a(80E00004): LDR R0, SP, 4H |
0638 | a(D12D2E4C): BLEQ MT [trap=4, pos=11566] |
0639 | b(80000000): LDR R0, R0, 0H |
063A | b(40090007): SUB R0, R0, 7H |
063B | c(E1000005): BEQ 5 [0641H] |
063C | d(80E00004): LDR R0, SP, 4H |
063D | d(D12D4A4C): BLEQ MT [trap=4, pos=11594] |
063E | e(80000000): LDR R0, R0, 0H |
063F | e(40090008): SUB R0, R0, 8H |
0640 | f(E900000E): BNE 14 [064FH] |
0641 | g(80E0000C): LDR R0, SP, CH |
0642 | g(80000000): LDR R0, R0, 0H |
0643 | g(41090078): SUB R1, R0, 78H |
0644 | g(DA2D671C): BLCC MT [trap=1, pos=11623] |
0645 | g(40010002): LSL R0, R0, 2H |
0646 | g .FIXUP D |
0646 | g(8D00002F): LDR SB, MT, MOD0 [ORG] |
0647 | g(00D80000): ADD R0, SB, R0 [global array] |
0648 | h(81E00008): LDR R1, SP, 8H |
0649 | h(A1007D64): STR R1, R0, 7D64H |
| ELSIFi typj.formk = ORB.Record THENl |
064A | i(80E0000C): LDR R0, SP, CH |
064B | i(81000000): LDR R1, R0, 0H |
064C | i(41180001): ADD R1, R1, 1H |
064D | i(A1000000): STR R1, R0, 0H |
064E | j(E700003B): B 59 [068AH] |
064F | k(80E00004): LDR R0, SP, 4H |
0650 | k(D12D8B4C): BLEQ MT [trap=4, pos=11659] |
0651 | l(80000000): LDR R0, R0, 0H |
0652 | l(4009000D): SUB R0, R0, DH |
0653 | l(E9000016): BNE 22 [066AH] |
| fld := typ.dscm;n |
0654 | m(80E00004): LDR R0, SP, 4H |
0655 | m(D12DB24C): BLEQ MT [trap=4, pos=11698] |
0656 | n(80000014): LDR R0, R0, 14H |
0657 | n(A0E00010): STR R0, SP, 10H |
| WHILE fld # NIL DOo FindPtrFlds(fld.typep,q fld.valr + off,s dcw)t;u fld := fld.nextv ENDw |
0658 | o(80E00010): LDR R0, SP, 10H |
0659 | o(E100000F): BEQ 15 [0669H] |
065A | p(80E00010): LDR R0, SP, 10H |
065B | p(D12DE14C): BLEQ MT [trap=4, pos=11745] |
065C | q(80000010): LDR R0, R0, 10H |
065D | r(81E00010): LDR R1, SP, 10H |
065E | r(D12DEA4C): BLEQ MT [trap=4, pos=11754] |
065F | s(81100034): LDR R1, R1, 34H |
0660 | s(82E00008): LDR R2, SP, 8H |
0661 | s(01180002): ADD R1, R1, R2 |
0662 | t(82E0000C): LDR R2, SP, CH |
0663 | u(F7FFFFCE): BL -50 [0632H] |
0664 | v(80E00010): LDR R0, SP, 10H |
0665 | v(D12E074C): BLEQ MT [trap=4, pos=11783] |
0666 | w(80000008): LDR R0, R0, 8H |
0667 | w(A0E00010): STR R0, SP, 10H |
0668 | w(E7FFFFEF): B -17 [0658H] |
| ELSIF typx.formy = ORB.Array THENz |
0669 | x(E7000020): B 32 [068AH] |
066A | y(80E00004): LDR R0, SP, 4H |
066B | y(D12E1E4C): BLEQ MT [trap=4, pos=11806] |
066C | z(80000000): LDR R0, R0, 0H |
066D | z(4009000C): SUB R0, R0, CH |
066E | z(E900001B): BNE 27 [068AH] |
| s := typ.basea.sizeb;c |
066F | a(80E00004): LDR R0, SP, 4H |
0670 | a(D12E434C): BLEQ MT [trap=4, pos=11843] |
0671 | b(8000001C): LDR R0, R0, 1CH |
0672 | b(D12E484C): BLEQ MT [trap=4, pos=11848] |
0673 | c(80000020): LDR R0, R0, 20H |
0674 | c(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 |
0675 | d(40000000): MOV R0, R0, 0H |
0676 | e(81E00004): LDR R1, SP, 4H |
0677 | e(D12E654C): BLEQ MT [trap=4, pos=11877] |
0678 | f(81100010): LDR R1, R1, 10H |
0679 | f(41190001): SUB R1, R1, 1H |
067A | g(01090001): SUB R1, R0, R1 |
067B | g(EE00000E): BGT 14 [068AH] |
067C | g(A0E00014): STR R0, SP, 14H |
067D | h(80E00004): LDR R0, SP, 4H |
067E | h(D12E7F4C): BLEQ MT [trap=4, pos=11903] |
067F | i(8000001C): LDR R0, R0, 1CH |
0680 | j(81E00014): LDR R1, SP, 14H |
0681 | j(82E00018): LDR R2, SP, 18H |
0682 | j(011A0002): MUL R1, R1, R2 |
0683 | k(82E00008): LDR R2, SP, 8H |
0684 | k(01180002): ADD R1, R1, R2 |
0685 | l(82E0000C): LDR R2, SP, CH |
0686 | m(F7FFFFAB): BL -85 [0632H] |
| ENDn |
0687 | n(80E00014): LDR R0, SP, 14H |
0688 | n(40080001): ADD R0, R0, 1H |
0689 | n(E7FFFFEC): B -20 [0676H] |
| ENDo FindPtrFlds; |
068A | o(8FE00000): LDR LNK, SP, 0H |
068B | o(4EE8001C): ADD SP, SP, 1CH |
068C | o(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*) |
068D | p .PROC 12 |
068D | p(4EE90018): SUB SP, SP, 18H |
068E | p(AFE00000): STR LNK, SP, 0H |
068F | p(A0E00004): STR R0, SP, 4H |
0690 | p(A1E00008): STR R1, SP, 8H |
0691 | q(80E00008): LDR R0, SP, 8H |
0692 | q(80000000): LDR R0, R0, 0H |
0693 | q(40020002): ASR R0, R0, 2H |
0694 | q(A0E0000C): STR R0, SP, CH |
0695 | r(80E00004): LDR R0, SP, 4H |
0696 | r(D12F3D4C): BLEQ MT [trap=4, pos=12093] |
0697 | s(80000020): LDR R0, R0, 20H |
0698 | s(A0E00014): STR R0, SP, 14H |
| IF s <= 24 THENt s := 32 ELSIFu sv <= 56 THENw s := 64 ELSIFx sy <= 120 THENz s := 128 |
0699 | t(80E00014): LDR R0, SP, 14H |
069A | t(40090018): SUB R0, R0, 18H |
069B | t(EE000003): BGT 3 [069FH] |
069C | u(40000020): MOV R0, R0, 20H |
069D | u(A0E00014): STR R0, SP, 14H |
069E | v(E7000011): B 17 [06B0H] |
069F | w(80E00014): LDR R0, SP, 14H |
06A0 | w(40090038): SUB R0, R0, 38H |
06A1 | w(EE000003): BGT 3 [06A5H] |
06A2 | x(40000040): MOV R0, R0, 40H |
06A3 | x(A0E00014): STR R0, SP, 14H |
06A4 | y(E700000B): B 11 [06B0H] |
06A5 | z(80E00014): LDR R0, SP, 14H |
06A6 | z(40090078): SUB R0, R0, 78H |
06A7 | z(EE000003): BGT 3 [06ABH] |
| ELSEa sb := (s+263)c DIV 256 *d 256 |
06A8 | a(40000080): MOV R0, R0, 80H |
06A9 | a(A0E00014): STR R0, SP, 14H |
06AA | b(E7000005): B 5 [06B0H] |
06AB | c(80E00014): LDR R0, SP, 14H |
06AC | c(40080107): ADD R0, R0, 107H |
06AD | d(40020008): ASR R0, R0, 8H |
| ENDe ; |
06AE | e(40010008): LSL R0, R0, 8H |
06AF | e(A0E00014): STR R0, SP, 14H |
| T.lenf := dc;g data[dcw]h := s;i INC(dcw);j (*len used as address*) |
06B0 | f(80E00004): LDR R0, SP, 4H |
06B1 | f(D12FEF4C): BLEQ MT [trap=4, pos=12271] |
06B2 | g(81E00008): LDR R1, SP, 8H |
06B3 | g(81100000): LDR R1, R1, 0H |
06B4 | g(A1000010): STR R1, R0, 10H |
06B5 | h(80E0000C): LDR R0, SP, CH |
06B6 | h(41090078): SUB R1, R0, 78H |
06B7 | h(DA30001C): BLCC MT [trap=1, pos=12288] |
06B8 | h(40010002): LSL R0, R0, 2H |
06B9 | h .FIXUP D |
06B9 | h(8D000073): LDR SB, MT, MOD0 [ORG] |
06BA | h(00D80000): ADD R0, SB, R0 [global array] |
06BB | i(81E00014): LDR R1, SP, 14H |
06BC | i(A1007D64): STR R1, R0, 7D64H |
06BD | j(80E0000C): LDR R0, SP, CH |
06BE | j(40080001): ADD R0, R0, 1H |
06BF | j(A0E0000C): STR R0, SP, CH |
| k := T.nofpark;l (*extension level!*) |
06C0 | k(80E00004): LDR R0, SP, 4H |
06C1 | k(D1303B4C): BLEQ MT [trap=4, pos=12347] |
06C2 | l(8000000C): LDR R0, R0, CH |
06C3 | l(A0E00010): STR R0, SP, 10H |
| IF k > 3 THENm ORS.Mark("ext level too large")n |
06C4 | m(80E00010): LDR R0, SP, 10H |
06C5 | m(40090003): SUB R0, R0, 3H |
06C6 | m(E6000005): BLE 5 [06CCH] |
06C7 | n .FIXUP D |
06C7 | n(8D00000E): LDR SB, MT, MOD0 [ORG] |
06C8 | n(40D88968): ADD R0, SB, FFFF8968H [data] |
06C9 | n(41000014): MOV R1, R0, 14H |
| ELSEo Qp(T,q dcw)r;s |
06CA | o .FIXUP P |
06CA | o(F72090D2): BL MOD2 [ORS] PROC9 |
06CB | p(E7000015): B 21 [06E1H] |
06CC | q(80E00004): LDR R0, SP, 4H |
06CD | r(41E8000C): ADD R1, SP, CH |
06CE | s(F7FFFF36): BL -202 [0605H] |
| WHILE k < 3 DOt data[dcw]u := -1;v INC(dcw);w INC(k) ENDx |
06CF | t(80E00010): LDR R0, SP, 10H |
06D0 | t(40090003): SUB R0, R0, 3H |
06D1 | t(ED00000F): BGE 15 [06E1H] |
06D2 | u(80E0000C): LDR R0, SP, CH |
06D3 | u(41090078): SUB R1, R0, 78H |
06D4 | u(DA30B81C): BLCC MT [trap=1, pos=12472] |
06D5 | u(40010002): LSL R0, R0, 2H |
06D6 | u .FIXUP D |
06D6 | u(8D00000F): LDR SB, MT, MOD0 [ORG] |
06D7 | u(00D80000): ADD R0, SB, R0 [global array] |
06D8 | v(5100FFFF): MOV R1, R0, FFFFFFFFH |
06D9 | v(A1007D64): STR R1, R0, 7D64H |
06DA | w(80E0000C): LDR R0, SP, CH |
06DB | w(40080001): ADD R0, R0, 1H |
06DC | w(A0E0000C): STR R0, SP, CH |
06DD | x(80E00010): LDR R0, SP, 10H |
06DE | x(40080001): ADD R0, R0, 1H |
06DF | x(A0E00010): STR R0, SP, 10H |
06E0 | x(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 |
06E1 | y(80E00004): LDR R0, SP, 4H |
06E2 | z(41000000): MOV R1, R0, 0H |
06E3 | a(42E8000C): ADD R2, SP, CH |
06E4 | b(F7FFFF4D): BL -179 [0632H] |
06E5 | c(80E0000C): LDR R0, SP, CH |
06E6 | c(41090078): SUB R1, R0, 78H |
06E7 | c(DA31041C): BLCC MT [trap=1, pos=12548] |
06E8 | c(40010002): LSL R0, R0, 2H |
06E9 | c .FIXUP D |
06E9 | c(8D000013): LDR SB, MT, MOD0 [ORG] |
06EA | c(00D80000): ADD R0, SB, R0 [global array] |
06EB | d(5100FFFF): MOV R1, R0, FFFFFFFFH |
06EC | d(A1007D64): STR R1, R0, 7D64H |
06ED | e(80E0000C): LDR R0, SP, CH |
06EE | e(40080001): ADD R0, R0, 1H |
06EF | e(A0E0000C): STR R0, SP, CH |
06F0 | f(80E0000C): LDR R0, SP, CH |
06F1 | f(A0D00020): STR R0, SB, 20H |
06F2 | g(80E0000C): LDR R0, SP, CH |
06F3 | g(40010002): LSL R0, R0, 2H |
06F4 | g(81E00008): LDR R1, SP, 8H |
06F5 | g(A0100000): STR R0, R1, 0H |
| IF tdx >= maxTD THENh ORS.Mark("too many record types")i;j tdx := 0 ENDk |
06F6 | h(80D00020): LDR R0, SB, 20H |
06F7 | h(40090078): SUB R0, R0, 78H |
06F8 | h(E5000007): BLT 7 [0700H] |
06F9 | i .FIXUP D |
06F9 | i(8D000010): LDR SB, MT, MOD0 [ORG] |
06FA | i(40D8897C): ADD R0, SB, FFFF897CH [data] |
06FB | i(41000016): MOV R1, R0, 16H |
06FC | j .FIXUP P |
06FC | j(F7209032): BL MOD2 [ORS] PROC9 |
06FD | k(40000000): MOV R0, R0, 0H |
06FE | k .FIXUP D |
06FE | k(8D000005): LDR SB, MT, MOD0 [ORG] |
06FF | k(A0D00020): STR R0, SB, 20H [data] |
| ENDl BuildTD; |
0700 | l(8FE00000): LDR LNK, SP, 0H |
0701 | l(4EE80018): ADD SP, SP, 18H |
0702 | l(C700000F): B LNK |
| |
| PROCEDURE TypeTest*(VAR x: Item; T: ORB.Type; varpar, isguard: BOOLEAN); |
| VAR pc0: LONGINT; |
| BEGINm (*fetch tag into RH*) |
0703 | m .PROC 13 |
0703 | m(4EE9001C): SUB SP, SP, 1CH |
0704 | m(AFE00000): STR LNK, SP, 0H |
0705 | m(A0E00004): STR R0, SP, 4H |
0706 | m(A1E00008): STR R1, SP, 8H |
0707 | m(A2E0000C): STR R2, SP, CH |
0708 | m(A3E00010): STR R3, SP, 10H |
0709 | m(A4E00014): STR R4, SP, 14H |
| IF varpar THENn Put2(Ldr,o RH,p SP,q x.a+4+rframe)s |
070A | n(90E00010): LDR R0, SP, 10H |
070B | n(E100000B): BEQ 11 [0717H] |
070C | o(40000008): MOV R0, R0, 8H |
070D | p .FIXUP D |
070D | p(8D00000F): LDR SB, MT, MOD0 [ORG] |
070E | p(81D0002C): LDR R1, SB, 2CH [data] |
070F | q(4200000E): MOV R2, R0, EH |
0710 | r(83E00004): LDR R3, SP, 4H |
0711 | r(83300008): LDR R3, R3, 8H |
0712 | r(43380004): ADD R3, R3, 4H |
0713 | s(84D00034): LDR R4, SB, 34H |
0714 | s(03380004): ADD R3, R3, R4 |
| ELSEt loadu(x)v;w |
0715 | t(F7FFF95B): BL -1701 [0071H] |
0716 | u(E7000011): B 17 [0728H] |
0717 | v(80E00004): LDR R0, SP, 4H |
0718 | v(81E00008): LDR R1, SP, 8H |
0719 | w(F7FFFAB9): BL -1351 [01D3H] |
| pc0 := pc;x Put3(BC,y EQ,z 0)a;b (*NIL belongs to every pointer type*) |
071A | x .FIXUP D |
071A | x(8D00000D): LDR SB, MT, MOD0 [ORG] |
071B | x(80D00018): LDR R0, SB, 18H [data] |
071C | x(A0E00018): STR R0, SP, 18H |
071D | y(40000002): MOV R0, R0, 2H |
071E | z(41000001): MOV R1, R0, 1H |
071F | a(42000000): MOV R2, R0, 0H |
0720 | b(F7FFF970): BL -1680 [0091H] |
| Put2(Ldr,c RH,d x.r,e -8)f |
0721 | c(40000008): MOV R0, R0, 8H |
0722 | d .FIXUP D |
0722 | d(8D000008): LDR SB, MT, MOD0 [ORG] |
0723 | d(81D0002C): LDR R1, SB, 2CH [data] |
0724 | e(82E00004): LDR R2, SP, 4H |
0725 | e(82200010): LDR R2, R2, 10H |
0726 | f(5300FFF8): MOV R3, R0, FFFFFFF8H |
| ENDg ; |
0727 | g(F7FFF949): BL -1719 [0071H] |
| Put2(Ldr,h RH,i RH,j T.nofpark*4)l;m incR;n |
0728 | h(40000008): MOV R0, R0, 8H |
0729 | i .FIXUP D |
0729 | i(8D000007): LDR SB, MT, MOD0 [ORG] |
072A | i(81D0002C): LDR R1, SB, 2CH [data] |
072B | j(82D0002C): LDR R2, SB, 2CH |
072C | k(83E0000C): LDR R3, SP, CH |
072D | k(D132D94C): BLEQ MT [trap=4, pos=13017] |
072E | l(8330000C): LDR R3, R3, CH |
072F | l(43310002): LSL R3, R3, 2H |
0730 | m(F7FFF940): BL -1728 [0071H] |
0731 | n(F7FFF97C): BL -1668 [00AEH] |
| loadTypTagAdr(T)o;p (*tag of T*) |
0732 | o(80E0000C): LDR R0, SP, CH |
0733 | p(F7FFFC29): BL -983 [035DH] |
| Put0(Cmp,q RH-1,r RH-1,s RH-2)t;u DEC(RH, 2);v |
0734 | q(40000009): MOV R0, R0, 9H |
0735 | r .FIXUP D |
0735 | r(8D00000C): LDR SB, MT, MOD0 [ORG] |
0736 | r(81D0002C): LDR R1, SB, 2CH [data] |
0737 | r(41190001): SUB R1, R1, 1H |
0738 | s(82D0002C): LDR R2, SB, 2CH |
0739 | s(42290001): SUB R2, R2, 1H |
073A | t(83D0002C): LDR R3, SB, 2CH |
073B | t(43390002): SUB R3, R3, 2H |
073C | u(F7FFF8C3): BL -1853 [0000H] |
073D | v .FIXUP D |
073D | v(8D000008): LDR SB, MT, MOD0 [ORG] |
073E | v(40D8002C): ADD R0, SB, 2CH [data] |
073F | v(81000000): LDR R1, R0, 0H |
0740 | v(41190002): SUB R1, R1, 2H |
0741 | v(A1000000): STR R1, R0, 0H |
| IF ~varpar THENw fix(pc0,x pc - pc0 -y 1)z ENDa ; |
0742 | w(90E00010): LDR R0, SP, 10H |
0743 | w(E9000007): BNE 7 [074BH] |
0744 | x(80E00018): LDR R0, SP, 18H |
0745 | y .FIXUP D |
0745 | y(8D000008): LDR SB, MT, MOD0 [ORG] |
0746 | y(81D00018): LDR R1, SB, 18H [data] |
0747 | y(82E00018): LDR R2, SP, 18H |
0748 | y(01190002): SUB R1, R1, R2 |
0749 | z(41190001): SUB R1, R1, 1H |
074A | a(F7FFF9D1): BL -1583 [011CH] |
| IF isguard THENb |
074B | b(90E00014): LDR R0, SP, 14H |
074C | b(E1000007): BEQ 7 [0754H] |
| IF check THENc Trap(NE,d 2)e ENDf |
074D | c .FIXUP D |
074D | c(8D000008): LDR SB, MT, MOD0 [ORG] |
074E | c(90D00044): LDR R0, SB, 44H [data] |
074F | c(E1000003): BEQ 3 [0753H] |
0750 | d(40000009): MOV R0, R0, 9H |
0751 | e(41000002): MOV R1, R0, 2H |
0752 | f(F7FFF999): BL -1639 [00ECH] |
| ELSE SetCCg(x,h EQ)i;j |
0753 | g(E700000B): B 11 [075FH] |
0754 | h(80E00004): LDR R0, SP, 4H |
0755 | h(81E00008): LDR R1, SP, 8H |
0756 | i(42000001): MOV R2, R0, 1H |
0757 | j(F7FFF980): BL -1664 [00D8H] |
| IF ~varpar THENk DEC(RH) ENDl |
0758 | k(90E00010): LDR R0, SP, 10H |
0759 | k(E9000005): BNE 5 [075FH] |
075A | l .FIXUP D |
075A | l(8D00000D): LDR SB, MT, MOD0 [ORG] |
075B | l(40D8002C): ADD R0, SB, 2CH [data] |
075C | l(81000000): LDR R1, R0, 0H |
075D | l(41190001): SUB R1, R1, 1H |
075E | l(A1000000): STR R1, R0, 0H |
| END |
| ENDm TypeTest; |
075F | m(8FE00000): LDR LNK, SP, 0H |
0760 | m(4EE8001C): ADD SP, SP, 1CH |
0761 | m(C700000F): B LNK |
| |
| (* Code generation for Boolean operators *) |
| |
| PROCEDURE Not*(VAR x: Item); (* x := ~x *) |
| VAR t: LONGINT; |
| BEGINn |
0762 | n .PROC 14 |
0762 | n(4EE90010): SUB SP, SP, 10H |
0763 | n(AFE00000): STR LNK, SP, 0H |
0764 | n(A0E00004): STR R0, SP, 4H |
0765 | n(A1E00008): STR R1, SP, 8H |
| IF x.mode # Cond THENo loadCond(x)p ENDq ; |
0766 | o(80E00004): LDR R0, SP, 4H |
0767 | o(80000000): LDR R0, R0, 0H |
0768 | o(4009000C): SUB R0, R0, CH |
0769 | o(E1000003): BEQ 3 [076DH] |
076A | p(80E00004): LDR R0, SP, 4H |
076B | p(81E00008): LDR R1, SP, 8H |
076C | q(F7FFFBAC): BL -1108 [0319H] |
| x.r := negated(x.r)r;s t := x.a;t x.a := x.b;u x.b := t |
076D | r(80E00004): LDR R0, SP, 4H |
076E | r(80000010): LDR R0, R0, 10H |
076F | s(F7FFF993): BL -1645 [0103H] |
0770 | s(81E00004): LDR R1, SP, 4H |
0771 | s(A0100010): STR R0, R1, 10H |
0772 | t(80E00004): LDR R0, SP, 4H |
0773 | t(80000008): LDR R0, R0, 8H |
0774 | t(A0E0000C): STR R0, SP, CH |
0775 | u(80E00004): LDR R0, SP, 4H |
0776 | u(8000000C): LDR R0, R0, CH |
0777 | u(81E00004): LDR R1, SP, 4H |
0778 | u(A0100008): STR R0, R1, 8H |
| ENDv Not; |
0779 | v(80E0000C): LDR R0, SP, CH |
077A | v(81E00004): LDR R1, SP, 4H |
077B | v(A010000C): STR R0, R1, CH |
077C | v(8FE00000): LDR LNK, SP, 0H |
077D | v(4EE80010): ADD SP, SP, 10H |
077E | v(C700000F): B LNK |
| |
| PROCEDURE And1*(VAR x: Item); (* x := x & *) |
| BEGINw |
077F | w .PROC 15 |
077F | w(4EE9000C): SUB SP, SP, CH |
0780 | w(AFE00000): STR LNK, SP, 0H |
0781 | w(A0E00004): STR R0, SP, 4H |
0782 | w(A1E00008): STR R1, SP, 8H |
| IF x.mode # Cond THENx loadCond(x)y ENDz ; |
0783 | x(80E00004): LDR R0, SP, 4H |
0784 | x(80000000): LDR R0, R0, 0H |
0785 | x(4009000C): SUB R0, R0, CH |
0786 | x(E1000003): BEQ 3 [078AH] |
0787 | y(80E00004): LDR R0, SP, 4H |
0788 | y(81E00008): LDR R1, SP, 8H |
0789 | z(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 |
078A | a(40000002): MOV R0, R0, 2H |
078B | b(4EE90004): SUB SP, SP, 4H |
078C | b(A0E00000): STR R0, SP, 0H |
078D | c(80E00008): LDR R0, SP, 8H |
078E | c(80000010): LDR R0, R0, 10H |
078F | d(F7FFF973): BL -1677 [0103H] |
0790 | d(01000000): MOV R1, R0, R0 |
0791 | d(80E00000): LDR R0, SP, 0H |
0792 | d(4EE80004): ADD SP, SP, 4H |
0793 | e(82E00004): LDR R2, SP, 4H |
0794 | e(82200008): LDR R2, R2, 8H |
0795 | f(F7FFF8FB): BL -1797 [0091H] |
0796 | g .FIXUP D |
0796 | g(8D00003C): LDR SB, MT, MOD0 [ORG] |
0797 | g(80D00018): LDR R0, SB, 18H [data] |
0798 | g(40090001): SUB R0, R0, 1H |
0799 | g(81E00004): LDR R1, SP, 4H |
079A | g(A0100008): STR R0, R1, 8H |
079B | h(80E00004): LDR R0, SP, 4H |
079C | h(8000000C): LDR R0, R0, CH |
079D | i(F7FFF998): BL -1640 [0136H] |
| ENDj And1; |
079E | j(40000000): MOV R0, R0, 0H |
079F | j(81E00004): LDR R1, SP, 4H |
07A0 | j(A010000C): STR R0, R1, CH |
07A1 | j(8FE00000): LDR LNK, SP, 0H |
07A2 | j(4EE8000C): ADD SP, SP, CH |
07A3 | j(C700000F): B LNK |
| |
| PROCEDURE And2*(VAR x, y: Item); |
| BEGINk |
07A4 | k .PROC 16 |
07A4 | k(4EE90014): SUB SP, SP, 14H |
07A5 | k(AFE00000): STR LNK, SP, 0H |
07A6 | k(A0E00004): STR R0, SP, 4H |
07A7 | k(A1E00008): STR R1, SP, 8H |
07A8 | k(A2E0000C): STR R2, SP, CH |
07A9 | k(A3E00010): STR R3, SP, 10H |
| IF y.mode # Cond THENl loadCond(y)m ENDn ; |
07AA | l(80E0000C): LDR R0, SP, CH |
07AB | l(80000000): LDR R0, R0, 0H |
07AC | l(4009000C): SUB R0, R0, CH |
07AD | l(E1000003): BEQ 3 [07B1H] |
07AE | m(80E0000C): LDR R0, SP, CH |
07AF | m(81E00010): LDR R1, SP, 10H |
07B0 | n(F7FFFB68): BL -1176 [0319H] |
| x.a := merged(y.a,o x.a)p;q x.b := y.b;r x.r := y.r |
07B1 | o(80E0000C): LDR R0, SP, CH |
07B2 | o(80000008): LDR R0, R0, 8H |
07B3 | p(81E00004): LDR R1, SP, 4H |
07B4 | p(81100008): LDR R1, R1, 8H |
07B5 | q(F7FFF9C7): BL -1593 [017DH] |
07B6 | q(81E00004): LDR R1, SP, 4H |
07B7 | q(A0100008): STR R0, R1, 8H |
07B8 | r(80E0000C): LDR R0, SP, CH |
07B9 | r(8000000C): LDR R0, R0, CH |
07BA | r(81E00004): LDR R1, SP, 4H |
07BB | r(A010000C): STR R0, R1, CH |
| ENDs And2; |
07BC | s(80E0000C): LDR R0, SP, CH |
07BD | s(80000010): LDR R0, R0, 10H |
07BE | s(81E00004): LDR R1, SP, 4H |
07BF | s(A0100010): STR R0, R1, 10H |
07C0 | s(8FE00000): LDR LNK, SP, 0H |
07C1 | s(4EE80014): ADD SP, SP, 14H |
07C2 | s(C700000F): B LNK |
| |
| PROCEDURE Or1*(VAR x: Item); (* x := x OR *) |
| BEGINt |
07C3 | t .PROC 17 |
07C3 | t(4EE9000C): SUB SP, SP, CH |
07C4 | t(AFE00000): STR LNK, SP, 0H |
07C5 | t(A0E00004): STR R0, SP, 4H |
07C6 | t(A1E00008): STR R1, SP, 8H |
| IF x.mode # Cond THENu loadCond(x)v ENDw ; |
07C7 | u(80E00004): LDR R0, SP, 4H |
07C8 | u(80000000): LDR R0, R0, 0H |
07C9 | u(4009000C): SUB R0, R0, CH |
07CA | u(E1000003): BEQ 3 [07CEH] |
07CB | v(80E00004): LDR R0, SP, 4H |
07CC | v(81E00008): LDR R1, SP, 8H |
07CD | w(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 |
07CE | x(40000002): MOV R0, R0, 2H |
07CF | y(81E00004): LDR R1, SP, 4H |
07D0 | y(81100010): LDR R1, R1, 10H |
07D1 | z(82E00004): LDR R2, SP, 4H |
07D2 | z(8220000C): LDR R2, R2, CH |
07D3 | a(F7FFF8BD): BL -1859 [0091H] |
07D4 | b .FIXUP D |
07D4 | b(8D00003E): LDR SB, MT, MOD0 [ORG] |
07D5 | b(80D00018): LDR R0, SB, 18H [data] |
07D6 | b(40090001): SUB R0, R0, 1H |
07D7 | b(81E00004): LDR R1, SP, 4H |
07D8 | b(A010000C): STR R0, R1, CH |
07D9 | c(80E00004): LDR R0, SP, 4H |
07DA | c(80000008): LDR R0, R0, 8H |
07DB | d(F7FFF95A): BL -1702 [0136H] |
| ENDe Or1; |
07DC | e(40000000): MOV R0, R0, 0H |
07DD | e(81E00004): LDR R1, SP, 4H |
07DE | e(A0100008): STR R0, R1, 8H |
07DF | e(8FE00000): LDR LNK, SP, 0H |
07E0 | e(4EE8000C): ADD SP, SP, CH |
07E1 | e(C700000F): B LNK |
| |
| PROCEDURE Or2*(VAR x, y: Item); |
| BEGINf |
07E2 | f .PROC 18 |
07E2 | f(4EE90014): SUB SP, SP, 14H |
07E3 | f(AFE00000): STR LNK, SP, 0H |
07E4 | f(A0E00004): STR R0, SP, 4H |
07E5 | f(A1E00008): STR R1, SP, 8H |
07E6 | f(A2E0000C): STR R2, SP, CH |
07E7 | f(A3E00010): STR R3, SP, 10H |
| IF y.mode # Cond THENg loadCond(y)h ENDi ; |
07E8 | g(80E0000C): LDR R0, SP, CH |
07E9 | g(80000000): LDR R0, R0, 0H |
07EA | g(4009000C): SUB R0, R0, CH |
07EB | g(E1000003): BEQ 3 [07EFH] |
07EC | h(80E0000C): LDR R0, SP, CH |
07ED | h(81E00010): LDR R1, SP, 10H |
07EE | i(F7FFFB2A): BL -1238 [0319H] |
| x.a := y.a;j x.b := merged(y.b,k x.b)l;m x.r := y.r |
07EF | j(80E0000C): LDR R0, SP, CH |
07F0 | j(80000008): LDR R0, R0, 8H |
07F1 | j(81E00004): LDR R1, SP, 4H |
07F2 | j(A0100008): STR R0, R1, 8H |
07F3 | k(80E0000C): LDR R0, SP, CH |
07F4 | k(8000000C): LDR R0, R0, CH |
07F5 | l(81E00004): LDR R1, SP, 4H |
07F6 | l(8110000C): LDR R1, R1, CH |
07F7 | m(F7FFF985): BL -1659 [017DH] |
07F8 | m(81E00004): LDR R1, SP, 4H |
07F9 | m(A010000C): STR R0, R1, CH |
| ENDn Or2; |
07FA | n(80E0000C): LDR R0, SP, CH |
07FB | n(80000010): LDR R0, R0, 10H |
07FC | n(81E00004): LDR R1, SP, 4H |
07FD | n(A0100010): STR R0, R1, 10H |
07FE | n(8FE00000): LDR LNK, SP, 0H |
07FF | n(4EE80014): ADD SP, SP, 14H |
0800 | n(C700000F): B LNK |
| |
| (* Code generation for arithmetic operators *) |
| |
| PROCEDURE Neg*(VAR x: Item); (* x := -x *) |
| BEGINo |
0801 | o .PROC 19 |
0801 | o(4EE9000C): SUB SP, SP, CH |
0802 | o(AFE00000): STR LNK, SP, 0H |
0803 | o(A0E00004): STR R0, SP, 4H |
0804 | o(A1E00008): STR R1, SP, 8H |
| IF x.type.formp = ORB.Int THENq |
0805 | p(80E00004): LDR R0, SP, 4H |
0806 | p(80000004): LDR R0, R0, 4H |
0807 | p(D137E84C): BLEQ MT [trap=4, pos=14312] |
0808 | q(80000000): LDR R0, R0, 0H |
0809 | q(40090004): SUB R0, R0, 4H |
080A | q(E900001D): BNE 29 [0828H] |
| IF x.mode = ORB.Const THENr x.a := -x.a |
080B | r(80E00004): LDR R0, SP, 4H |
080C | r(80000000): LDR R0, R0, 0H |
080D | r(40090001): SUB R0, R0, 1H |
080E | r(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 |
080F | s(80E00004): LDR R0, SP, 4H |
0810 | s(80000008): LDR R0, R0, 8H |
0811 | s(41000000): MOV R1, R0, 0H |
0812 | s(00190000): SUB R0, R1, R0 |
0813 | s(81E00004): LDR R1, SP, 4H |
0814 | s(A0100008): STR R0, R1, 8H |
0815 | t(E7000011): B 17 [0827H] |
0816 | u(80E00004): LDR R0, SP, 4H |
0817 | u(81E00008): LDR R1, SP, 8H |
0818 | v(F7FFF9BA): BL -1606 [01D3H] |
0819 | w(40000000): MOV R0, R0, 0H |
081A | x .FIXUP D |
081A | x(8D000046): LDR SB, MT, MOD0 [ORG] |
081B | x(81D0002C): LDR R1, SB, 2CH [data] |
081C | y(42000000): MOV R2, R0, 0H |
081D | z(43000000): MOV R3, R0, 0H |
081E | a(F7FFF7FF): BL -2049 [001EH] |
081F | b(40000009): MOV R0, R0, 9H |
0820 | c(81E00004): LDR R1, SP, 4H |
0821 | c(81100010): LDR R1, R1, 10H |
0822 | d .FIXUP D |
0822 | d(8D000008): LDR SB, MT, MOD0 [ORG] |
0823 | d(82D0002C): LDR R2, SB, 2CH [data] |
0824 | e(83E00004): LDR R3, SP, 4H |
0825 | e(83300010): LDR R3, R3, 10H |
| ENDf |
0826 | f(F7FFF7D9): BL -2087 [0000H] |
| ELSIF xg.type.formh = ORB.Real THENi |
0827 | g(E700003B): B 59 [0863H] |
0828 | h(80E00004): LDR R0, SP, 4H |
0829 | h(80000004): LDR R0, R0, 4H |
082A | h(D138854C): BLEQ MT [trap=4, pos=14469] |
082B | i(80000000): LDR R0, R0, 0H |
082C | i(40090005): SUB R0, R0, 5H |
082D | i(E900001F): BNE 31 [084DH] |
| IF x.mode = ORB.Const THENj x.a := x.a + 7FFFFFFFH +k 1 |
082E | j(80E00004): LDR R0, SP, 4H |
082F | j(80000000): LDR R0, R0, 0H |
0830 | j(40090001): SUB R0, R0, 1H |
0831 | j(E9000009): BNE 9 [083BH] |
0832 | k(80E00004): LDR R0, SP, 4H |
0833 | k(80000008): LDR R0, R0, 8H |
0834 | k(61007FFF): MOV' R1, R0, 7FFFH |
0835 | k(4116FFFF): IOR R1, R1, FFFFFFFFH |
0836 | k(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 |
0837 | l(40080001): ADD R0, R0, 1H |
0838 | l(81E00004): LDR R1, SP, 4H |
0839 | l(A0100008): STR R0, R1, 8H |
083A | m(E7000011): B 17 [084CH] |
083B | n(80E00004): LDR R0, SP, 4H |
083C | n(81E00008): LDR R1, SP, 8H |
083D | o(F7FFF995): BL -1643 [01D3H] |
083E | p(40000000): MOV R0, R0, 0H |
083F | q .FIXUP D |
083F | q(8D00001D): LDR SB, MT, MOD0 [ORG] |
0840 | q(81D0002C): LDR R1, SB, 2CH [data] |
0841 | r(42000000): MOV R2, R0, 0H |
0842 | s(43000000): MOV R3, R0, 0H |
0843 | t(F7FFF7DA): BL -2086 [001EH] |
0844 | u(4000000D): MOV R0, R0, DH |
0845 | v(81E00004): LDR R1, SP, 4H |
0846 | v(81100010): LDR R1, R1, 10H |
0847 | w .FIXUP D |
0847 | w(8D000008): LDR SB, MT, MOD0 [ORG] |
0848 | w(82D0002C): LDR R2, SB, 2CH [data] |
0849 | x(83E00004): LDR R3, SP, 4H |
084A | x(83300010): LDR R3, R3, 10H |
| ENDy |
084B | y(F7FFF7B4): BL -2124 [0000H] |
| ELSE (*form = Set*) |
| IFz x.mode = ORB.Const THENa x.a := -x.a-b1 |
084C | z(E7000016): B 22 [0863H] |
084D | a(80E00004): LDR R0, SP, 4H |
084E | a(80000000): LDR R0, R0, 0H |
084F | a(40090001): SUB R0, R0, 1H |
0850 | a(E9000008): BNE 8 [0859H] |
0851 | b(80E00004): LDR R0, SP, 4H |
0852 | b(80000008): LDR R0, R0, 8H |
0853 | b(41000000): MOV R1, R0, 0H |
0854 | b(00190000): SUB R0, R1, R0 |
| ELSEc loadd(x)e;f Put1(Xor,g x.r,h x.r,i -1)j |
0855 | c(40090001): SUB R0, R0, 1H |
0856 | c(81E00004): LDR R1, SP, 4H |
0857 | c(A0100008): STR R0, R1, 8H |
0858 | d(E700000A): B 10 [0863H] |
0859 | e(80E00004): LDR R0, SP, 4H |
085A | e(81E00008): LDR R1, SP, 8H |
085B | f(F7FFF977): BL -1673 [01D3H] |
085C | g(40000007): MOV R0, R0, 7H |
085D | h(81E00004): LDR R1, SP, 4H |
085E | h(81100010): LDR R1, R1, 10H |
085F | i(82E00004): LDR R2, SP, 4H |
0860 | i(82200010): LDR R2, R2, 10H |
0861 | j(5300FFFF): MOV R3, R0, FFFFFFFFH |
| ENDk |
0862 | k(F7FFF7BB): BL -2117 [001EH] |
| END |
| ENDl Neg; |
0863 | l(8FE00000): LDR LNK, SP, 0H |
0864 | l(4EE8000C): ADD SP, SP, CH |
0865 | l(C700000F): B LNK |
| |
| PROCEDURE AddOp*(op: LONGINT; VAR x, y: Item); (* x := x +- y *) |
| BEGINm |
0866 | m .PROC 20 |
0866 | m(4EE90018): SUB SP, SP, 18H |
0867 | m(AFE00000): STR LNK, SP, 0H |
0868 | m(A0E00004): STR R0, SP, 4H |
0869 | m(A1E00008): STR R1, SP, 8H |
086A | m(A2E0000C): STR R2, SP, CH |
086B | m(A3E00010): STR R3, SP, 10H |
086C | m(A4E00014): STR R4, SP, 14H |
| IF op = ORS.plus THENn |
086D | n(80E00004): LDR R0, SP, 4H |
086E | n(40090006): SUB R0, R0, 6H |
086F | n(E900003C): BNE 60 [08ACH] |
| IF (x.mode = ORB.Const)o & (py.mode = ORB.Const)q THENr x.a := x.a + y.a |
0870 | o(80E00008): LDR R0, SP, 8H |
0871 | o(80000000): LDR R0, R0, 0H |
0872 | o(40090001): SUB R0, R0, 1H |
0873 | p(E900000C): BNE 12 [0880H] |
0874 | q(80E00010): LDR R0, SP, 10H |
0875 | q(80000000): LDR R0, R0, 0H |
0876 | q(40090001): SUB R0, R0, 1H |
0877 | r(E9000008): BNE 8 [0880H] |
| ELSIFs yt.mode = ORB.Const THENu load(x)v;w |
0878 | s(80E00008): LDR R0, SP, 8H |
0879 | s(80000008): LDR R0, R0, 8H |
087A | s(81E00010): LDR R1, SP, 10H |
087B | s(81100008): LDR R1, R1, 8H |
087C | s(00080001): ADD R0, R0, R1 |
087D | s(81E00008): LDR R1, SP, 8H |
087E | s(A0100008): STR R0, R1, 8H |
087F | t(E700002B): B 43 [08ABH] |
0880 | u(80E00010): LDR R0, SP, 10H |
0881 | u(80000000): LDR R0, R0, 0H |
0882 | u(40090001): SUB R0, R0, 1H |
0883 | u(E900000F): BNE 15 [0893H] |
0884 | v(80E00008): LDR R0, SP, 8H |
0885 | v(81E0000C): LDR R1, SP, CH |
0886 | w(F7FFF94C): BL -1716 [01D3H] |
| IF y.a # 0 THENx Put1a(Add,y x.r,z x.r,a y.a)b ENDc |
0887 | x(80E00010): LDR R0, SP, 10H |
0888 | x(80000008): LDR R0, R0, 8H |
0889 | x(E1000008): BEQ 8 [0892H] |
088A | y(40000008): MOV R0, R0, 8H |
088B | z(81E00008): LDR R1, SP, 8H |
088C | z(81100010): LDR R1, R1, 10H |
088D | a(82E00008): LDR R2, SP, 8H |
088E | a(82200010): LDR R2, R2, 10H |
088F | b(83E00010): LDR R3, SP, 10H |
0890 | b(83300008): LDR R3, R3, 8H |
0891 | c(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 |
0892 | d(E7000018): B 24 [08ABH] |
0893 | e(80E00008): LDR R0, SP, 8H |
0894 | e(81E0000C): LDR R1, SP, CH |
0895 | f(F7FFF93D): BL -1731 [01D3H] |
0896 | g(80E00010): LDR R0, SP, 10H |
0897 | g(81E00014): LDR R1, SP, 14H |
0898 | h(F7FFF93A): BL -1734 [01D3H] |
0899 | i(40000008): MOV R0, R0, 8H |
089A | j .FIXUP D |
089A | j(8D000053): LDR SB, MT, MOD0 [ORG] |
089B | j(81D0002C): LDR R1, SB, 2CH [data] |
089C | j(41190002): SUB R1, R1, 2H |
089D | k(82E00008): LDR R2, SP, 8H |
089E | k(82200010): LDR R2, R2, 10H |
089F | l(83E00010): LDR R3, SP, 10H |
08A0 | l(83300010): LDR R3, R3, 10H |
08A1 | m(F7FFF75E): BL -2210 [0000H] |
08A2 | n .FIXUP D |
08A2 | n(8D000008): LDR SB, MT, MOD0 [ORG] |
08A3 | n(40D8002C): ADD R0, SB, 2CH [data] |
08A4 | n(81000000): LDR R1, R0, 0H |
08A5 | n(41190001): SUB R1, R1, 1H |
08A6 | n(A1000000): STR R1, R0, 0H |
| ENDo |
08A7 | o(80D0002C): LDR R0, SB, 2CH |
08A8 | o(40090001): SUB R0, R0, 1H |
08A9 | o(81E00008): LDR R1, SP, 8H |
08AA | o(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 |
08AB | p(E700003B): B 59 [08E7H] |
08AC | q(80E00008): LDR R0, SP, 8H |
08AD | q(80000000): LDR R0, R0, 0H |
08AE | q(40090001): SUB R0, R0, 1H |
08AF | r(E900000C): BNE 12 [08BCH] |
08B0 | s(80E00010): LDR R0, SP, 10H |
08B1 | s(80000000): LDR R0, R0, 0H |
08B2 | s(40090001): SUB R0, R0, 1H |
08B3 | t(E9000008): BNE 8 [08BCH] |
| ELSIFu yv.mode = ORB.Const THENw load(x)x;y |
08B4 | u(80E00008): LDR R0, SP, 8H |
08B5 | u(80000008): LDR R0, R0, 8H |
08B6 | u(81E00010): LDR R1, SP, 10H |
08B7 | u(81100008): LDR R1, R1, 8H |
08B8 | u(00090001): SUB R0, R0, R1 |
08B9 | u(81E00008): LDR R1, SP, 8H |
08BA | u(A0100008): STR R0, R1, 8H |
08BB | v(E700002B): B 43 [08E7H] |
08BC | w(80E00010): LDR R0, SP, 10H |
08BD | w(80000000): LDR R0, R0, 0H |
08BE | w(40090001): SUB R0, R0, 1H |
08BF | w(E900000F): BNE 15 [08CFH] |
08C0 | x(80E00008): LDR R0, SP, 8H |
08C1 | x(81E0000C): LDR R1, SP, CH |
08C2 | y(F7FFF910): BL -1776 [01D3H] |
| IF y.a # 0 THENz Put1a(Sub,a x.r,b x.r,c y.a)d ENDe |
08C3 | z(80E00010): LDR R0, SP, 10H |
08C4 | z(80000008): LDR R0, R0, 8H |
08C5 | z(E1000008): BEQ 8 [08CEH] |
08C6 | a(40000009): MOV R0, R0, 9H |
08C7 | b(81E00008): LDR R1, SP, 8H |
08C8 | b(81100010): LDR R1, R1, 10H |
08C9 | c(82E00008): LDR R2, SP, 8H |
08CA | c(82200010): LDR R2, R2, 10H |
08CB | d(83E00010): LDR R3, SP, 10H |
08CC | d(83300008): LDR R3, R3, 8H |
08CD | e(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 |
08CE | f(E7000018): B 24 [08E7H] |
08CF | g(80E00008): LDR R0, SP, 8H |
08D0 | g(81E0000C): LDR R1, SP, CH |
08D1 | h(F7FFF901): BL -1791 [01D3H] |
08D2 | i(80E00010): LDR R0, SP, 10H |
08D3 | i(81E00014): LDR R1, SP, 14H |
08D4 | j(F7FFF8FE): BL -1794 [01D3H] |
08D5 | k(40000009): MOV R0, R0, 9H |
08D6 | l .FIXUP D |
08D6 | l(8D000034): LDR SB, MT, MOD0 [ORG] |
08D7 | l(81D0002C): LDR R1, SB, 2CH [data] |
08D8 | l(41190002): SUB R1, R1, 2H |
08D9 | m(82E00008): LDR R2, SP, 8H |
08DA | m(82200010): LDR R2, R2, 10H |
08DB | n(83E00010): LDR R3, SP, 10H |
08DC | n(83300010): LDR R3, R3, 10H |
08DD | o(F7FFF722): BL -2270 [0000H] |
08DE | p .FIXUP D |
08DE | p(8D000008): LDR SB, MT, MOD0 [ORG] |
08DF | p(40D8002C): ADD R0, SB, 2CH [data] |
08E0 | p(81000000): LDR R1, R0, 0H |
08E1 | p(41190001): SUB R1, R1, 1H |
08E2 | p(A1000000): STR R1, R0, 0H |
| ENDq |
08E3 | q(80D0002C): LDR R0, SB, 2CH |
08E4 | q(40090001): SUB R0, R0, 1H |
08E5 | q(81E00008): LDR R1, SP, 8H |
08E6 | q(A0100010): STR R0, R1, 10H |
| END |
| ENDr AddOp; |
08E7 | r(8FE00000): LDR LNK, SP, 0H |
08E8 | r(4EE80018): ADD SP, SP, 18H |
08E9 | r(C700000F): B LNK |
| |
| PROCEDURE log2(m: LONGINT; VAR e: LONGINT): LONGINT; |
| BEGINs e := 0;t |
08EA | s(4EE9000C): SUB SP, SP, CH |
08EB | s(AFE00000): STR LNK, SP, 0H |
08EC | s(A0E00004): STR R0, SP, 4H |
08ED | s(A1E00008): STR R1, SP, 8H |
08EE | t(40000000): MOV R0, R0, 0H |
08EF | t(81E00008): LDR R1, SP, 8H |
08F0 | t(A0100000): STR R0, R1, 0H |
| WHILE ~ODD(m) DOu m := m DIV 2;v INC(e) ENDw ; |
08F1 | u(80E00004): LDR R0, SP, 4H |
08F2 | u(40040001): AND R0, R0, 1H |
08F3 | u(E9000008): BNE 8 [08FCH] |
08F4 | v(80E00004): LDR R0, SP, 4H |
08F5 | v(40020001): ASR R0, R0, 1H |
08F6 | v(A0E00004): STR R0, SP, 4H |
08F7 | w(80E00008): LDR R0, SP, 8H |
08F8 | w(81000000): LDR R1, R0, 0H |
08F9 | w(41180001): ADD R1, R1, 1H |
08FA | w(A1000000): STR R1, R0, 0H |
08FB | w(E7FFFFF5): B -11 [08F1H] |
| RETURN m |
| ENDx log2; |
08FC | x(80E00004): LDR R0, SP, 4H |
08FD | x(8FE00000): LDR LNK, SP, 0H |
08FE | x(4EE8000C): ADD SP, SP, CH |
08FF | x(C700000F): B LNK |
| |
| PROCEDURE MulOp*(VAR x, y: Item); (* x := x * y *) |
| VAR e: LONGINT; |
| BEGINy |
0900 | y .PROC 21 |
0900 | y(4EE90018): SUB SP, SP, 18H |
0901 | y(AFE00000): STR LNK, SP, 0H |
0902 | y(A0E00004): STR R0, SP, 4H |
0903 | y(A1E00008): STR R1, SP, 8H |
0904 | y(A2E0000C): STR R2, SP, CH |
0905 | y(A3E00010): STR R3, SP, 10H |
| IF (x.mode = ORB.Const)z & (ay.mode = ORB.Const)b THENc x.a := x.a * y.a |
0906 | z(80E00004): LDR R0, SP, 4H |
0907 | z(80000000): LDR R0, R0, 0H |
0908 | z(40090001): SUB R0, R0, 1H |
0909 | a(E900000C): BNE 12 [0916H] |
090A | b(80E0000C): LDR R0, SP, CH |
090B | b(80000000): LDR R0, R0, 0H |
090C | b(40090001): SUB R0, R0, 1H |
090D | c(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 |
090E | d(80E00004): LDR R0, SP, 4H |
090F | d(80000008): LDR R0, R0, 8H |
0910 | d(81E0000C): LDR R1, SP, CH |
0911 | d(81100008): LDR R1, R1, 8H |
0912 | d(000A0001): MUL R0, R0, R1 |
0913 | d(81E00004): LDR R1, SP, 4H |
0914 | d(A0100008): STR R0, R1, 8H |
0915 | e(E7000078): B 120 [098EH] |
0916 | f(80E0000C): LDR R0, SP, CH |
0917 | f(80000000): LDR R0, R0, 0H |
0918 | f(40090001): SUB R0, R0, 1H |
0919 | g(E9000015): BNE 21 [092FH] |
091A | h(80E0000C): LDR R0, SP, CH |
091B | h(80000008): LDR R0, R0, 8H |
091C | h(40090002): SUB R0, R0, 2H |
091D | i(E5000011): BLT 17 [092FH] |
091E | j(80E0000C): LDR R0, SP, CH |
091F | j(80000008): LDR R0, R0, 8H |
0920 | k(41E80014): ADD R1, SP, 14H |
0921 | l(F7FFFFC8): BL -56 [08EAH] |
0922 | m(40090001): SUB R0, R0, 1H |
0923 | n(E900000B): BNE 11 [092FH] |
0924 | o(80E00004): LDR R0, SP, 4H |
0925 | o(81E00008): LDR R1, SP, 8H |
0926 | p(F7FFF8AC): BL -1876 [01D3H] |
0927 | q(40000001): MOV R0, R0, 1H |
0928 | r(81E00004): LDR R1, SP, 4H |
0929 | r(81100010): LDR R1, R1, 10H |
092A | s(82E00004): LDR R2, SP, 4H |
092B | s(82200010): LDR R2, R2, 10H |
092C | t(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 |
092D | u(F7FFF6F0): BL -2320 [001EH] |
092E | v(E700005F): B 95 [098EH] |
092F | w(80E0000C): LDR R0, SP, CH |
0930 | w(80000000): LDR R0, R0, 0H |
0931 | w(40090001): SUB R0, R0, 1H |
0932 | w(E900000C): BNE 12 [093FH] |
0933 | x(80E00004): LDR R0, SP, 4H |
0934 | x(81E00008): LDR R1, SP, 8H |
0935 | y(F7FFF89D): BL -1891 [01D3H] |
0936 | z(4000000A): MOV R0, R0, AH |
0937 | a(81E00004): LDR R1, SP, 4H |
0938 | a(81100010): LDR R1, R1, 10H |
0939 | b(82E00004): LDR R2, SP, 4H |
093A | b(82200010): LDR R2, R2, 10H |
093B | c(83E0000C): LDR R3, SP, CH |
093C | c(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 |
093D | d(F7FFF706): BL -2298 [0044H] |
093E | e(E700004F): B 79 [098EH] |
093F | f(80E00004): LDR R0, SP, 4H |
0940 | f(80000000): LDR R0, R0, 0H |
0941 | f(40090001): SUB R0, R0, 1H |
0942 | g(E900001C): BNE 28 [095FH] |
0943 | h(80E00004): LDR R0, SP, 4H |
0944 | h(80000008): LDR R0, R0, 8H |
0945 | h(40090002): SUB R0, R0, 2H |
0946 | i(E5000018): BLT 24 [095FH] |
0947 | j(80E00004): LDR R0, SP, 4H |
0948 | j(80000008): LDR R0, R0, 8H |
0949 | k(41E80014): ADD R1, SP, 14H |
094A | l(F7FFFF9F): BL -97 [08EAH] |
094B | m(40090001): SUB R0, R0, 1H |
094C | n(E9000012): BNE 18 [095FH] |
094D | o(80E0000C): LDR R0, SP, CH |
094E | o(81E00010): LDR R1, SP, 10H |
094F | p(F7FFF883): BL -1917 [01D3H] |
0950 | q(40000001): MOV R0, R0, 1H |
0951 | r(81E0000C): LDR R1, SP, CH |
0952 | r(81100010): LDR R1, R1, 10H |
0953 | s(82E0000C): LDR R2, SP, CH |
0954 | s(82200010): LDR R2, R2, 10H |
0955 | t(83E00014): LDR R3, SP, 14H |
0956 | u(F7FFF6C7): BL -2361 [001EH] |
0957 | v(4000000A): MOV R0, R0, AH |
0958 | v(81E00004): LDR R1, SP, 4H |
0959 | v(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 |
095A | w(80E0000C): LDR R0, SP, CH |
095B | w(80000010): LDR R0, R0, 10H |
095C | w(81E00004): LDR R1, SP, 4H |
095D | w(A0100010): STR R0, R1, 10H |
095E | x(E700002F): B 47 [098EH] |
095F | y(80E00004): LDR R0, SP, 4H |
0960 | y(80000000): LDR R0, R0, 0H |
0961 | y(40090001): SUB R0, R0, 1H |
0962 | y(E9000013): BNE 19 [0976H] |
0963 | z(80E0000C): LDR R0, SP, CH |
0964 | z(81E00010): LDR R1, SP, 10H |
0965 | a(F7FFF86D): BL -1939 [01D3H] |
0966 | b(4000000A): MOV R0, R0, AH |
0967 | c(81E0000C): LDR R1, SP, CH |
0968 | c(81100010): LDR R1, R1, 10H |
0969 | d(82E0000C): LDR R2, SP, CH |
096A | d(82200010): LDR R2, R2, 10H |
096B | e(83E00004): LDR R3, SP, 4H |
096C | e(83300008): LDR R3, R3, 8H |
096D | f(F7FFF6D6): BL -2346 [0044H] |
096E | g(4000000A): MOV R0, R0, AH |
096F | g(81E00004): LDR R1, SP, 4H |
0970 | g(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 |
0971 | h(80E0000C): LDR R0, SP, CH |
0972 | h(80000010): LDR R0, R0, 10H |
0973 | h(81E00004): LDR R1, SP, 4H |
0974 | h(A0100010): STR R0, R1, 10H |
0975 | i(E7000018): B 24 [098EH] |
0976 | j(80E00004): LDR R0, SP, 4H |
0977 | j(81E00008): LDR R1, SP, 8H |
0978 | k(F7FFF85A): BL -1958 [01D3H] |
0979 | l(80E0000C): LDR R0, SP, CH |
097A | l(81E00010): LDR R1, SP, 10H |
097B | m(F7FFF857): BL -1961 [01D3H] |
097C | n(4000000A): MOV R0, R0, AH |
097D | o .FIXUP D |
097D | o(8D00009F): LDR SB, MT, MOD0 [ORG] |
097E | o(81D0002C): LDR R1, SB, 2CH [data] |
097F | o(41190002): SUB R1, R1, 2H |
0980 | p(82E00004): LDR R2, SP, 4H |
0981 | p(82200010): LDR R2, R2, 10H |
0982 | q(83E0000C): LDR R3, SP, CH |
0983 | q(83300010): LDR R3, R3, 10H |
0984 | r(F7FFF67B): BL -2437 [0000H] |
0985 | s .FIXUP D |
0985 | s(8D000008): LDR SB, MT, MOD0 [ORG] |
0986 | s(40D8002C): ADD R0, SB, 2CH [data] |
0987 | s(81000000): LDR R1, R0, 0H |
0988 | s(41190001): SUB R1, R1, 1H |
0989 | s(A1000000): STR R1, R0, 0H |
| ENDt |
098A | t(80D0002C): LDR R0, SB, 2CH |
098B | t(40090001): SUB R0, R0, 1H |
098C | t(81E00004): LDR R1, SP, 4H |
098D | t(A0100010): STR R0, R1, 10H |
| ENDu MulOp; |
098E | u(8FE00000): LDR LNK, SP, 0H |
098F | u(4EE80018): ADD SP, SP, 18H |
0990 | u(C700000F): B LNK |
| |
| PROCEDURE DivOp*(op: LONGINT; VAR x, y: Item); (* x := x op y *) |
| VAR e: LONGINT; |
| BEGINv |
0991 | v .PROC 22 |
0991 | v(4EE9001C): SUB SP, SP, 1CH |
0992 | v(AFE00000): STR LNK, SP, 0H |
0993 | v(A0E00004): STR R0, SP, 4H |
0994 | v(A1E00008): STR R1, SP, 8H |
0995 | v(A2E0000C): STR R2, SP, CH |
0996 | v(A3E00010): STR R3, SP, 10H |
0997 | v(A4E00014): STR R4, SP, 14H |
| IF op = ORS.div THENw |
0998 | w(80E00004): LDR R0, SP, 4H |
0999 | w(40090003): SUB R0, R0, 3H |
099A | w(E900006B): BNE 107 [0A06H] |
| IF (x.mode = ORB.Const)x & (yy.mode = ORB.Const)z THENa |
099B | x(80E00008): LDR R0, SP, 8H |
099C | x(80000000): LDR R0, R0, 0H |
099D | x(40090001): SUB R0, R0, 1H |
099E | y(E9000016): BNE 22 [09B5H] |
099F | z(80E00010): LDR R0, SP, 10H |
09A0 | z(80000000): LDR R0, R0, 0H |
09A1 | z(40090001): SUB R0, R0, 1H |
09A2 | a(E9000012): BNE 18 [09B5H] |
| IF y.a > 0 THENb x.a := x.a DIV y.a ELSEc ORSd.Mark("bad divisor")e ENDf |
09A3 | b(80E00010): LDR R0, SP, 10H |
09A4 | b(80000008): LDR R0, R0, 8H |
09A5 | b(40090000): SUB R0, R0, 0H |
09A6 | b(E6000009): BLE 9 [09B0H] |
09A7 | c(80E00010): LDR R0, SP, 10H |
09A8 | c(80000008): LDR R0, R0, 8H |
09A9 | c(D640516C): BLLE MT [trap=6, pos=16465] |
09AA | c(81E00008): LDR R1, SP, 8H |
09AB | c(81100008): LDR R1, R1, 8H |
09AC | c(001B0000): DIV R0, R1, R0 |
09AD | c(81E00008): LDR R1, SP, 8H |
09AE | c(A0100008): STR R0, R1, 8H |
09AF | d(E7000004): B 4 [09B4H] |
09B0 | e .FIXUP D |
09B0 | e(8D00002B): LDR SB, MT, MOD0 [ORG] |
09B1 | e(40D88994): ADD R0, SB, FFFF8994H [data] |
09B2 | e(4100000C): MOV R1, R0, CH |
09B3 | f .FIXUP P |
09B3 | f(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 |
09B4 | g(E7000050): B 80 [0A05H] |
09B5 | h(80E00010): LDR R0, SP, 10H |
09B6 | h(80000000): LDR R0, R0, 0H |
09B7 | h(40090001): SUB R0, R0, 1H |
09B8 | i(E9000015): BNE 21 [09CEH] |
09B9 | j(80E00010): LDR R0, SP, 10H |
09BA | j(80000008): LDR R0, R0, 8H |
09BB | j(40090002): SUB R0, R0, 2H |
09BC | k(E5000011): BLT 17 [09CEH] |
09BD | l(80E00010): LDR R0, SP, 10H |
09BE | l(80000008): LDR R0, R0, 8H |
09BF | m(41E80018): ADD R1, SP, 18H |
09C0 | n(F7FFFF29): BL -215 [08EAH] |
09C1 | o(40090001): SUB R0, R0, 1H |
09C2 | p(E900000B): BNE 11 [09CEH] |
09C3 | q(80E00008): LDR R0, SP, 8H |
09C4 | q(81E0000C): LDR R1, SP, CH |
09C5 | r(F7FFF80D): BL -2035 [01D3H] |
09C6 | s(40000002): MOV R0, R0, 2H |
09C7 | t(81E00008): LDR R1, SP, 8H |
09C8 | t(81100010): LDR R1, R1, 10H |
09C9 | u(82E00008): LDR R2, SP, 8H |
09CA | u(82200010): LDR R2, R2, 10H |
09CB | v(83E00018): LDR R3, SP, 18H |
| ELSIFw yx.mode = ORB.Const THENy |
09CC | w(F7FFF651): BL -2479 [001EH] |
09CD | x(E7000037): B 55 [0A05H] |
09CE | y(80E00010): LDR R0, SP, 10H |
09CF | y(80000000): LDR R0, R0, 0H |
09D0 | y(40090001): SUB R0, R0, 1H |
09D1 | y(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 |
09D2 | z(80E00010): LDR R0, SP, 10H |
09D3 | z(80000008): LDR R0, R0, 8H |
09D4 | z(40090000): SUB R0, R0, 0H |
09D5 | z(E600000C): BLE 12 [09E2H] |
09D6 | a(80E00008): LDR R0, SP, 8H |
09D7 | a(81E0000C): LDR R1, SP, CH |
09D8 | b(F7FFF7FA): BL -2054 [01D3H] |
09D9 | c(4000000B): MOV R0, R0, BH |
09DA | d(81E00008): LDR R1, SP, 8H |
09DB | d(81100010): LDR R1, R1, 10H |
09DC | e(82E00008): LDR R2, SP, 8H |
09DD | e(82200010): LDR R2, R2, 10H |
09DE | f(83E00010): LDR R3, SP, 10H |
09DF | f(83300008): LDR R3, R3, 8H |
09E0 | g(F7FFF663): BL -2461 [0044H] |
09E1 | h(E7000004): B 4 [09E6H] |
09E2 | i .FIXUP D |
09E2 | i(8D000032): LDR SB, MT, MOD0 [ORG] |
09E3 | i(40D889A0): ADD R0, SB, FFFF89A0H [data] |
09E4 | i(4100000C): MOV R1, R0, CH |
09E5 | j .FIXUP P |
09E5 | j(F7209032): BL MOD2 [ORS] PROC9 |
| ELSE loadk(y)l;m |
09E6 | k(E700001E): B 30 [0A05H] |
09E7 | l(80E00010): LDR R0, SP, 10H |
09E8 | l(81E00014): LDR R1, SP, 14H |
09E9 | m(F7FFF7E9): BL -2071 [01D3H] |
| IF check THENn Trap(LE,o 6)p ENDq ; |
09EA | n .FIXUP D |
09EA | n(8D000008): LDR SB, MT, MOD0 [ORG] |
09EB | n(90D00044): LDR R0, SB, 44H [data] |
09EC | n(E1000003): BEQ 3 [09F0H] |
09ED | o(40000006): MOV R0, R0, 6H |
09EE | p(41000006): MOV R1, R0, 6H |
09EF | q(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 |
09F0 | r(80E00008): LDR R0, SP, 8H |
09F1 | r(81E0000C): LDR R1, SP, CH |
09F2 | s(F7FFF7E0): BL -2080 [01D3H] |
09F3 | t(4000000B): MOV R0, R0, BH |
09F4 | u .FIXUP D |
09F4 | u(8D00000A): LDR SB, MT, MOD0 [ORG] |
09F5 | u(81D0002C): LDR R1, SB, 2CH [data] |
09F6 | u(41190002): SUB R1, R1, 2H |
09F7 | v(82E00008): LDR R2, SP, 8H |
09F8 | v(82200010): LDR R2, R2, 10H |
09F9 | w(83E00010): LDR R3, SP, 10H |
09FA | w(83300010): LDR R3, R3, 10H |
09FB | x(F7FFF604): BL -2556 [0000H] |
09FC | y .FIXUP D |
09FC | y(8D000008): LDR SB, MT, MOD0 [ORG] |
09FD | y(40D8002C): ADD R0, SB, 2CH [data] |
09FE | y(81000000): LDR R1, R0, 0H |
09FF | y(41190001): SUB R1, R1, 1H |
0A00 | y(A1000000): STR R1, R0, 0H |
| ENDz |
0A01 | z(80D0002C): LDR R0, SB, 2CH |
0A02 | z(40090001): SUB R0, R0, 1H |
0A03 | z(81E00008): LDR R1, SP, 8H |
0A04 | z(A0100010): STR R0, R1, 10H |
| ELSE (*op = ORS.mod*) |
| IFa (x.mode = ORB.Const)b & (cy.mode = ORB.Const)d THENe |
0A05 | a(E7000090): B 144 [0A96H] |
0A06 | b(80E00008): LDR R0, SP, 8H |
0A07 | b(80000000): LDR R0, R0, 0H |
0A08 | b(40090001): SUB R0, R0, 1H |
0A09 | c(E9000017): BNE 23 [0A21H] |
0A0A | d(80E00010): LDR R0, SP, 10H |
0A0B | d(80000000): LDR R0, R0, 0H |
0A0C | d(40090001): SUB R0, R0, 1H |
0A0D | e(E9000013): BNE 19 [0A21H] |
| IF y.a > 0 THENf x.a := x.a MOD y.a ELSEg ORSh.Mark("bad modulus")i ENDj |
0A0E | f(80E00010): LDR R0, SP, 10H |
0A0F | f(80000008): LDR R0, R0, 8H |
0A10 | f(40090000): SUB R0, R0, 0H |
0A11 | f(E600000A): BLE 10 [0A1CH] |
0A12 | g(80E00010): LDR R0, SP, 10H |
0A13 | g(80000008): LDR R0, R0, 8H |
0A14 | g(D642606C): BLLE MT [trap=6, pos=16992] |
0A15 | g(81E00008): LDR R1, SP, 8H |
0A16 | g(81100008): LDR R1, R1, 8H |
0A17 | g(001B0000): DIV R0, R1, R0 |
0A18 | g(20000000): MOV' R0, R0, R0 |
0A19 | g(81E00008): LDR R1, SP, 8H |
0A1A | g(A0100008): STR R0, R1, 8H |
0A1B | h(E7000004): B 4 [0A20H] |
0A1C | i .FIXUP D |
0A1C | i(8D000020): LDR SB, MT, MOD0 [ORG] |
0A1D | i(40D889AC): ADD R0, SB, FFFF89ACH [data] |
0A1E | i(4100000C): MOV R1, R0, CH |
0A1F | j .FIXUP P |
0A1F | j(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 |
0A20 | k(E7000075): B 117 [0A96H] |
0A21 | l(80E00010): LDR R0, SP, 10H |
0A22 | l(80000000): LDR R0, R0, 0H |
0A23 | l(40090001): SUB R0, R0, 1H |
0A24 | m(E900002D): BNE 45 [0A52H] |
0A25 | n(80E00010): LDR R0, SP, 10H |
0A26 | n(80000008): LDR R0, R0, 8H |
0A27 | n(40090002): SUB R0, R0, 2H |
0A28 | o(E5000029): BLT 41 [0A52H] |
0A29 | p(80E00010): LDR R0, SP, 10H |
0A2A | p(80000008): LDR R0, R0, 8H |
0A2B | q(41E80018): ADD R1, SP, 18H |
0A2C | r(F7FFFEBD): BL -323 [08EAH] |
0A2D | s(40090001): SUB R0, R0, 1H |
0A2E | t(E9000023): BNE 35 [0A52H] |
0A2F | u(80E00008): LDR R0, SP, 8H |
0A30 | u(81E0000C): LDR R1, SP, CH |
0A31 | v(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 |
0A32 | w(80E00018): LDR R0, SP, 18H |
0A33 | w(40090010): SUB R0, R0, 10H |
0A34 | w(EE00000A): BGT 10 [0A3FH] |
0A35 | x(40000004): MOV R0, R0, 4H |
0A36 | y(81E00008): LDR R1, SP, 8H |
0A37 | y(81100010): LDR R1, R1, 10H |
0A38 | z(82E00008): LDR R2, SP, 8H |
0A39 | z(82200010): LDR R2, R2, 10H |
0A3A | a(83E00010): LDR R3, SP, 10H |
0A3B | a(83300008): LDR R3, R3, 8H |
0A3C | a(43390001): SUB R3, R3, 1H |
0A3D | b(F7FFF5E0): BL -2592 [001EH] |
0A3E | c(E7000012): B 18 [0A51H] |
0A3F | d(40000001): MOV R0, R0, 1H |
0A40 | e(81E00008): LDR R1, SP, 8H |
0A41 | e(81100010): LDR R1, R1, 10H |
0A42 | f(82E00008): LDR R2, SP, 8H |
0A43 | f(82200010): LDR R2, R2, 10H |
0A44 | g(43000020): MOV R3, R0, 20H |
0A45 | g(84E00018): LDR R4, SP, 18H |
0A46 | g(03390004): SUB R3, R3, R4 |
0A47 | h(F7FFF5D6): BL -2602 [001EH] |
0A48 | i(40000003): MOV R0, R0, 3H |
0A49 | j(81E00008): LDR R1, SP, 8H |
0A4A | j(81100010): LDR R1, R1, 10H |
0A4B | k(82E00008): LDR R2, SP, 8H |
0A4C | k(82200010): LDR R2, R2, 10H |
0A4D | l(43000020): MOV R3, R0, 20H |
0A4E | l(84E00018): LDR R4, SP, 18H |
0A4F | l(03390004): SUB R3, R3, R4 |
0A50 | m(F7FFF5CD): BL -2611 [001EH] |
| ELSIF yn.mode = ORB.Const THENo |
0A51 | n(E7000044): B 68 [0A96H] |
0A52 | o(80E00010): LDR R0, SP, 10H |
0A53 | o(80000000): LDR R0, R0, 0H |
0A54 | o(40090001): SUB R0, R0, 1H |
0A55 | o(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 |
0A56 | p(80E00010): LDR R0, SP, 10H |
0A57 | p(80000008): LDR R0, R0, 8H |
0A58 | p(40090000): SUB R0, R0, 0H |
0A59 | p(E6000012): BLE 18 [0A6CH] |
0A5A | q(80E00008): LDR R0, SP, 8H |
0A5B | q(81E0000C): LDR R1, SP, CH |
0A5C | r(F7FFF776): BL -2186 [01D3H] |
0A5D | s(4000000B): MOV R0, R0, BH |
0A5E | t(81E00008): LDR R1, SP, 8H |
0A5F | t(81100010): LDR R1, R1, 10H |
0A60 | u(82E00008): LDR R2, SP, 8H |
0A61 | u(82200010): LDR R2, R2, 10H |
0A62 | v(83E00010): LDR R3, SP, 10H |
0A63 | v(83300008): LDR R3, R3, 8H |
0A64 | w(F7FFF5DF): BL -2593 [0044H] |
0A65 | x(40002000): MOV R0, R0, 2000H |
0A66 | y(81E00008): LDR R1, SP, 8H |
0A67 | y(81100010): LDR R1, R1, 10H |
0A68 | z(42000000): MOV R2, R0, 0H |
0A69 | a(43000000): MOV R3, R0, 0H |
0A6A | b(F7FFF595): BL -2667 [0000H] |
0A6B | c(E7000004): B 4 [0A70H] |
0A6C | d .FIXUP D |
0A6C | d(8D000050): LDR SB, MT, MOD0 [ORG] |
0A6D | d(40D889B8): ADD R0, SB, FFFF89B8H [data] |
0A6E | d(4100000C): MOV R1, R0, CH |
0A6F | e .FIXUP P |
0A6F | e(F7209050): BL MOD2 [ORS] PROC9 |
| ELSE loadf(y)g;h |
0A70 | f(E7000025): B 37 [0A96H] |
0A71 | g(80E00010): LDR R0, SP, 10H |
0A72 | g(81E00014): LDR R1, SP, 14H |
0A73 | h(F7FFF75F): BL -2209 [01D3H] |
| IF check THENi Trap(LE,j 6)k ENDl ; |
0A74 | i .FIXUP D |
0A74 | i(8D000008): LDR SB, MT, MOD0 [ORG] |
0A75 | i(90D00044): LDR R0, SB, 44H [data] |
0A76 | i(E1000003): BEQ 3 [0A7AH] |
0A77 | j(40000006): MOV R0, R0, 6H |
0A78 | k(41000006): MOV R1, R0, 6H |
0A79 | l(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 |
0A7A | m(80E00008): LDR R0, SP, 8H |
0A7B | m(81E0000C): LDR R1, SP, CH |
0A7C | n(F7FFF756): BL -2218 [01D3H] |
0A7D | o(4000000B): MOV R0, R0, BH |
0A7E | p .FIXUP D |
0A7E | p(8D00000A): LDR SB, MT, MOD0 [ORG] |
0A7F | p(81D0002C): LDR R1, SB, 2CH [data] |
0A80 | p(41190002): SUB R1, R1, 2H |
0A81 | q(82E00008): LDR R2, SP, 8H |
0A82 | q(82200010): LDR R2, R2, 10H |
0A83 | r(83E00010): LDR R3, SP, 10H |
0A84 | r(83300010): LDR R3, R3, 10H |
0A85 | s(F7FFF57A): BL -2694 [0000H] |
0A86 | t(40002000): MOV R0, R0, 2000H |
0A87 | u .FIXUP D |
0A87 | u(8D000009): LDR SB, MT, MOD0 [ORG] |
0A88 | u(81D0002C): LDR R1, SB, 2CH [data] |
0A89 | u(41190002): SUB R1, R1, 2H |
0A8A | v(42000000): MOV R2, R0, 0H |
0A8B | w(43000000): MOV R3, R0, 0H |
0A8C | x(F7FFF573): BL -2701 [0000H] |
0A8D | y .FIXUP D |
0A8D | y(8D000006): LDR SB, MT, MOD0 [ORG] |
0A8E | y(40D8002C): ADD R0, SB, 2CH [data] |
0A8F | y(81000000): LDR R1, R0, 0H |
0A90 | y(41190001): SUB R1, R1, 1H |
0A91 | y(A1000000): STR R1, R0, 0H |
| ENDz |
0A92 | z(80D0002C): LDR R0, SB, 2CH |
0A93 | z(40090001): SUB R0, R0, 1H |
0A94 | z(81E00008): LDR R1, SP, 8H |
0A95 | z(A0100010): STR R0, R1, 10H |
| END |
| ENDa DivOp; |
0A96 | a(8FE00000): LDR LNK, SP, 0H |
0A97 | a(4EE8001C): ADD SP, SP, 1CH |
0A98 | a(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 |
0A99 | b .PROC 23 |
0A99 | b(4EE90018): SUB SP, SP, 18H |
0A9A | b(AFE00000): STR LNK, SP, 0H |
0A9B | b(A0E00004): STR R0, SP, 4H |
0A9C | b(A1E00008): STR R1, SP, 8H |
0A9D | b(A2E0000C): STR R2, SP, CH |
0A9E | b(A3E00010): STR R3, SP, 10H |
0A9F | b(A4E00014): STR R4, SP, 14H |
0AA0 | c(80E00008): LDR R0, SP, 8H |
0AA1 | c(81E0000C): LDR R1, SP, CH |
0AA2 | d(F7FFF730): BL -2256 [01D3H] |
0AA3 | e(80E00010): LDR R0, SP, 10H |
0AA4 | e(81E00014): LDR R1, SP, 14H |
0AA5 | f(F7FFF72D): BL -2259 [01D3H] |
| IF op = ORS.plus THENg Put0(Fad,h RH-2,i x.r,j y.r)k |
0AA6 | g(80E00004): LDR R0, SP, 4H |
0AA7 | g(40090006): SUB R0, R0, 6H |
0AA8 | g(E900000A): BNE 10 [0AB3H] |
0AA9 | h(4000000C): MOV R0, R0, CH |
0AAA | i .FIXUP D |
0AAA | i(8D00001D): LDR SB, MT, MOD0 [ORG] |
0AAB | i(81D0002C): LDR R1, SB, 2CH [data] |
0AAC | i(41190002): SUB R1, R1, 2H |
0AAD | j(82E00008): LDR R2, SP, 8H |
0AAE | j(82200010): LDR R2, R2, 10H |
0AAF | k(83E00010): LDR R3, SP, 10H |
0AB0 | k(83300010): LDR R3, R3, 10H |
| ELSIFl opm = ORS.minus THENn Put0(Fsb,o RH-2,p x.r,q y.r)r |
0AB1 | l(F7FFF54E): BL -2738 [0000H] |
0AB2 | m(E7000026): B 38 [0AD9H] |
0AB3 | n(80E00004): LDR R0, SP, 4H |
0AB4 | n(40090007): SUB R0, R0, 7H |
0AB5 | n(E900000A): BNE 10 [0AC0H] |
0AB6 | o(4000000D): MOV R0, R0, DH |
0AB7 | p .FIXUP D |
0AB7 | p(8D00000D): LDR SB, MT, MOD0 [ORG] |
0AB8 | p(81D0002C): LDR R1, SB, 2CH [data] |
0AB9 | p(41190002): SUB R1, R1, 2H |
0ABA | q(82E00008): LDR R2, SP, 8H |
0ABB | q(82200010): LDR R2, R2, 10H |
0ABC | r(83E00010): LDR R3, SP, 10H |
0ABD | r(83300010): LDR R3, R3, 10H |
| ELSIFs opt = ORS.times THENu Put0(Fml,v RH-2,w x.r,x y.r)y |
0ABE | s(F7FFF541): BL -2751 [0000H] |
0ABF | t(E7000019): B 25 [0AD9H] |
0AC0 | u(80E00004): LDR R0, SP, 4H |
0AC1 | u(40090001): SUB R0, R0, 1H |
0AC2 | u(E900000A): BNE 10 [0ACDH] |
0AC3 | v(4000000E): MOV R0, R0, EH |
0AC4 | w .FIXUP D |
0AC4 | w(8D00000D): LDR SB, MT, MOD0 [ORG] |
0AC5 | w(81D0002C): LDR R1, SB, 2CH [data] |
0AC6 | w(41190002): SUB R1, R1, 2H |
0AC7 | x(82E00008): LDR R2, SP, 8H |
0AC8 | x(82200010): LDR R2, R2, 10H |
0AC9 | y(83E00010): LDR R3, SP, 10H |
0ACA | y(83300010): LDR R3, R3, 10H |
| ELSIFz opa = ORS.rdiv THENb Put0(Fdv,c RH-2,d x.r,e y.r)f |
0ACB | z(F7FFF534): BL -2764 [0000H] |
0ACC | a(E700000C): B 12 [0AD9H] |
0ACD | b(80E00004): LDR R0, SP, 4H |
0ACE | b(40090002): SUB R0, R0, 2H |
0ACF | b(E9000009): BNE 9 [0AD9H] |
0AD0 | c(4000000F): MOV R0, R0, FH |
0AD1 | d .FIXUP D |
0AD1 | d(8D00000D): LDR SB, MT, MOD0 [ORG] |
0AD2 | d(81D0002C): LDR R1, SB, 2CH [data] |
0AD3 | d(41190002): SUB R1, R1, 2H |
0AD4 | e(82E00008): LDR R2, SP, 8H |
0AD5 | e(82200010): LDR R2, R2, 10H |
0AD6 | f(83E00010): LDR R3, SP, 10H |
0AD7 | f(83300010): LDR R3, R3, 10H |
| ENDg ; |
0AD8 | g(F7FFF527): BL -2777 [0000H] |
| DEC(RH);h x.r := RH-1 |
0AD9 | h .FIXUP D |
0AD9 | h(8D000008): LDR SB, MT, MOD0 [ORG] |
0ADA | h(40D8002C): ADD R0, SB, 2CH [data] |
0ADB | h(81000000): LDR R1, R0, 0H |
0ADC | h(41190001): SUB R1, R1, 1H |
0ADD | h(A1000000): STR R1, R0, 0H |
| ENDi RealOp; |
0ADE | i(80D0002C): LDR R0, SB, 2CH |
0ADF | i(40090001): SUB R0, R0, 1H |
0AE0 | i(81E00008): LDR R1, SP, 8H |
0AE1 | i(A0100010): STR R0, R1, 10H |
0AE2 | i(8FE00000): LDR LNK, SP, 0H |
0AE3 | i(4EE80018): ADD SP, SP, 18H |
0AE4 | i(C700000F): B LNK |
| |
| (* Code generation for set operators *) |
| |
| PROCEDURE Singleton*(VAR x: Item); (* x := {x} *) |
| BEGINj |
0AE5 | j .PROC 24 |
0AE5 | j(4EE9000C): SUB SP, SP, CH |
0AE6 | j(AFE00000): STR LNK, SP, 0H |
0AE7 | j(A0E00004): STR R0, SP, 4H |
0AE8 | j(A1E00008): STR R1, SP, 8H |
| IF x.mode = ORB.Const THENk x.a := LSL(1, x.a) |
0AE9 | k(80E00004): LDR R0, SP, 4H |
0AEA | k(80000000): LDR R0, R0, 0H |
0AEB | k(40090001): SUB R0, R0, 1H |
0AEC | k(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 |
0AED | l(40000001): MOV R0, R0, 1H |
0AEE | l(81E00004): LDR R1, SP, 4H |
0AEF | l(81100008): LDR R1, R1, 8H |
0AF0 | l(00010001): LSL R0, R0, R1 |
0AF1 | l(81E00004): LDR R1, SP, 4H |
0AF2 | l(A0100008): STR R0, R1, 8H |
0AF3 | m(E7000011): B 17 [0B05H] |
0AF4 | n(80E00004): LDR R0, SP, 4H |
0AF5 | n(81E00008): LDR R1, SP, 8H |
0AF6 | o(F7FFF6DC): BL -2340 [01D3H] |
0AF7 | p(40000000): MOV R0, R0, 0H |
0AF8 | q .FIXUP D |
0AF8 | q(8D00001F): LDR SB, MT, MOD0 [ORG] |
0AF9 | q(81D0002C): LDR R1, SB, 2CH [data] |
0AFA | r(42000000): MOV R2, R0, 0H |
0AFB | s(43000001): MOV R3, R0, 1H |
0AFC | t(F7FFF521): BL -2783 [001EH] |
0AFD | u(40000001): MOV R0, R0, 1H |
0AFE | v(81E00004): LDR R1, SP, 4H |
0AFF | v(81100010): LDR R1, R1, 10H |
0B00 | w .FIXUP D |
0B00 | w(8D000008): LDR SB, MT, MOD0 [ORG] |
0B01 | w(82D0002C): LDR R2, SB, 2CH [data] |
0B02 | x(83E00004): LDR R3, SP, 4H |
0B03 | x(83300010): LDR R3, R3, 10H |
| ENDy |
0B04 | y(F7FFF4FB): BL -2821 [0000H] |
| ENDz Singleton; |
0B05 | z(8FE00000): LDR LNK, SP, 0H |
0B06 | z(4EE8000C): ADD SP, SP, CH |
0B07 | z(C700000F): B LNK |
| |
| PROCEDURE Set*(VAR x, y: Item); (* x := {x .. y} *) |
| BEGINa |
0B08 | a .PROC 25 |
0B08 | a(4EE90014): SUB SP, SP, 14H |
0B09 | a(AFE00000): STR LNK, SP, 0H |
0B0A | a(A0E00004): STR R0, SP, 4H |
0B0B | a(A1E00008): STR R1, SP, 8H |
0B0C | a(A2E0000C): STR R2, SP, CH |
0B0D | a(A3E00010): STR R3, SP, 10H |
| IF (x.mode = ORB.Const)b & (c y.mode = ORB.Const)d THENe |
0B0E | b(80E00004): LDR R0, SP, 4H |
0B0F | b(80000000): LDR R0, R0, 0H |
0B10 | b(40090001): SUB R0, R0, 1H |
0B11 | c(E900001A): BNE 26 [0B2CH] |
0B12 | d(80E0000C): LDR R0, SP, CH |
0B13 | d(80000000): LDR R0, R0, 0H |
0B14 | d(40090001): SUB R0, R0, 1H |
0B15 | e(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 |
0B16 | f(80E00004): LDR R0, SP, 4H |
0B17 | f(80000008): LDR R0, R0, 8H |
0B18 | f(81E0000C): LDR R1, SP, CH |
0B19 | f(81100008): LDR R1, R1, 8H |
0B1A | f(00090001): SUB R0, R0, R1 |
0B1B | f(EE00000C): BGT 12 [0B28H] |
0B1C | g(40000002): MOV R0, R0, 2H |
0B1D | g(81E0000C): LDR R1, SP, CH |
0B1E | g(81100008): LDR R1, R1, 8H |
0B1F | g(00010001): LSL R0, R0, R1 |
0B20 | h(41000001): MOV R1, R0, 1H |
0B21 | h(82E00004): LDR R2, SP, 4H |
0B22 | h(82200008): LDR R2, R2, 8H |
0B23 | h(01110002): LSL R1, R1, R2 |
0B24 | h(00090001): SUB R0, R0, R1 |
0B25 | h(81E00004): LDR R1, SP, 4H |
0B26 | h(A0100008): STR R0, R1, 8H |
0B27 | i(E7000003): B 3 [0B2BH] |
0B28 | j(40000000): MOV R0, R0, 0H |
0B29 | j(81E00004): LDR R1, SP, 4H |
0B2A | j(A0100008): STR R0, R1, 8H |
| ELSE |
| IFk (x.mode = ORB.Const)l & (mx.a <= 16)n THENo x.a := LSL(-1, x.a) |
0B2B | k(E7000078): B 120 [0BA4H] |
0B2C | l(80E00004): LDR R0, SP, 4H |
0B2D | l(80000000): LDR R0, R0, 0H |
0B2E | l(40090001): SUB R0, R0, 1H |
0B2F | m(E900000B): BNE 11 [0B3BH] |
0B30 | n(80E00004): LDR R0, SP, 4H |
0B31 | n(80000008): LDR R0, R0, 8H |
0B32 | n(40090010): SUB R0, R0, 10H |
0B33 | o(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 |
0B34 | p(5000FFFF): MOV R0, R0, FFFFFFFFH |
0B35 | p(81E00004): LDR R1, SP, 4H |
0B36 | p(81100008): LDR R1, R1, 8H |
0B37 | p(00010001): LSL R0, R0, R1 |
0B38 | p(81E00004): LDR R1, SP, 4H |
0B39 | p(A0100008): STR R0, R1, 8H |
0B3A | q(E7000011): B 17 [0B4CH] |
0B3B | r(80E00004): LDR R0, SP, 4H |
0B3C | r(81E00008): LDR R1, SP, 8H |
0B3D | s(F7FFF695): BL -2411 [01D3H] |
0B3E | t(40000000): MOV R0, R0, 0H |
0B3F | u .FIXUP D |
0B3F | u(8D00003F): LDR SB, MT, MOD0 [ORG] |
0B40 | u(81D0002C): LDR R1, SB, 2CH [data] |
0B41 | v(42000000): MOV R2, R0, 0H |
0B42 | w(5300FFFF): MOV R3, R0, FFFFFFFFH |
0B43 | x(F7FFF4DA): BL -2854 [001EH] |
0B44 | y(40000001): MOV R0, R0, 1H |
0B45 | z(81E00004): LDR R1, SP, 4H |
0B46 | z(81100010): LDR R1, R1, 10H |
0B47 | a .FIXUP D |
0B47 | a(8D000008): LDR SB, MT, MOD0 [ORG] |
0B48 | a(82D0002C): LDR R2, SB, 2CH [data] |
0B49 | b(83E00004): LDR R3, SP, 4H |
0B4A | b(83300010): LDR R3, R3, 10H |
| ENDc ; |
0B4B | c(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 |
0B4C | d(80E0000C): LDR R0, SP, CH |
0B4D | d(80000000): LDR R0, R0, 0H |
0B4E | d(40090001): SUB R0, R0, 1H |
0B4F | e(E9000016): BNE 22 [0B66H] |
0B50 | f(80E0000C): LDR R0, SP, CH |
0B51 | f(80000008): LDR R0, R0, 8H |
0B52 | f(40090010): SUB R0, R0, 10H |
0B53 | g(ED000012): BGE 18 [0B66H] |
0B54 | h(40000000): MOV R0, R0, 0H |
0B55 | i .FIXUP D |
0B55 | i(8D00000E): LDR SB, MT, MOD0 [ORG] |
0B56 | i(81D0002C): LDR R1, SB, 2CH [data] |
0B57 | j(42000000): MOV R2, R0, 0H |
0B58 | k(5300FFFE): MOV R3, R0, FFFFFFFEH |
0B59 | k(84E0000C): LDR R4, SP, CH |
0B5A | k(84400008): LDR R4, R4, 8H |
0B5B | k(03310004): LSL R3, R3, R4 |
0B5C | l(F7FFF4C1): BL -2879 [001EH] |
0B5D | m(4000000A): MOV R0, R0, AH |
0B5E | m(81E0000C): LDR R1, SP, CH |
0B5F | m(A0100000): STR R0, R1, 0H |
0B60 | n .FIXUP D |
0B60 | n(8D00000B): LDR SB, MT, MOD0 [ORG] |
0B61 | n(80D0002C): LDR R0, SB, 2CH [data] |
0B62 | n(81E0000C): LDR R1, SP, CH |
0B63 | n(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 |
0B64 | o(F7FFF549): BL -2743 [00AEH] |
0B65 | p(E7000011): B 17 [0B77H] |
0B66 | q(80E0000C): LDR R0, SP, CH |
0B67 | q(81E00010): LDR R1, SP, 10H |
0B68 | r(F7FFF66A): BL -2454 [01D3H] |
0B69 | s(40000000): MOV R0, R0, 0H |
0B6A | t .FIXUP D |
0B6A | t(8D00000A): LDR SB, MT, MOD0 [ORG] |
0B6B | t(81D0002C): LDR R1, SB, 2CH [data] |
0B6C | u(42000000): MOV R2, R0, 0H |
0B6D | v(5300FFFE): MOV R3, R0, FFFFFFFEH |
0B6E | w(F7FFF4AF): BL -2897 [001EH] |
0B6F | x(40000001): MOV R0, R0, 1H |
0B70 | y(81E0000C): LDR R1, SP, CH |
0B71 | y(81100010): LDR R1, R1, 10H |
0B72 | z .FIXUP D |
0B72 | z(8D000008): LDR SB, MT, MOD0 [ORG] |
0B73 | z(82D0002C): LDR R2, SB, 2CH [data] |
0B74 | a(83E0000C): LDR R3, SP, CH |
0B75 | a(83300010): LDR R3, R3, 10H |
| ENDb ; |
0B76 | b(F7FFF489): BL -2935 [0000H] |
| IF x.mode = ORB.Const THENc |
0B77 | c(80E00004): LDR R0, SP, 4H |
0B78 | c(80000000): LDR R0, R0, 0H |
0B79 | c(40090001): SUB R0, R0, 1H |
0B7A | c(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 ; |
0B7B | d(80E00004): LDR R0, SP, 4H |
0B7C | d(80000008): LDR R0, R0, 8H |
0B7D | d(E1000010): BEQ 16 [0B8EH] |
0B7E | e(40000007): MOV R0, R0, 7H |
0B7F | f(81E0000C): LDR R1, SP, CH |
0B80 | f(81100010): LDR R1, R1, 10H |
0B81 | g(82E0000C): LDR R2, SP, CH |
0B82 | g(82200010): LDR R2, R2, 10H |
0B83 | h(5300FFFF): MOV R3, R0, FFFFFFFFH |
0B84 | i(F7FFF499): BL -2919 [001EH] |
0B85 | j(40000004): MOV R0, R0, 4H |
0B86 | k .FIXUP D |
0B86 | k(8D000014): LDR SB, MT, MOD0 [ORG] |
0B87 | k(81D0002C): LDR R1, SB, 2CH [data] |
0B88 | k(41190001): SUB R1, R1, 1H |
0B89 | l(82E0000C): LDR R2, SP, CH |
0B8A | l(82200010): LDR R2, R2, 10H |
0B8B | m(83E00004): LDR R3, SP, 4H |
0B8C | m(83300008): LDR R3, R3, 8H |
0B8D | n(F7FFF4B6): BL -2890 [0044H] |
| x.mode := Reg;o x.r := RH-1 |
0B8E | o(4000000A): MOV R0, R0, AH |
0B8F | o(81E00004): LDR R1, SP, 4H |
0B90 | o(A0100000): STR R0, R1, 0H |
| ELSEp DECq(RH);r Put0(Ann,s RH-1,t x.r,u y.r)v |
0B91 | p .FIXUP D |
0B91 | p(8D00000B): LDR SB, MT, MOD0 [ORG] |
0B92 | p(80D0002C): LDR R0, SB, 2CH [data] |
0B93 | p(40090001): SUB R0, R0, 1H |
0B94 | p(81E00004): LDR R1, SP, 4H |
0B95 | p(A0100010): STR R0, R1, 10H |
0B96 | q(E700000D): B 13 [0BA4H] |
0B97 | r .FIXUP D |
0B97 | r(8D000006): LDR SB, MT, MOD0 [ORG] |
0B98 | r(40D8002C): ADD R0, SB, 2CH [data] |
0B99 | r(81000000): LDR R1, R0, 0H |
0B9A | r(41190001): SUB R1, R1, 1H |
0B9B | r(A1000000): STR R1, R0, 0H |
0B9C | s(40000005): MOV R0, R0, 5H |
0B9D | t(81D0002C): LDR R1, SB, 2CH |
0B9E | t(41190001): SUB R1, R1, 1H |
0B9F | u(82E00004): LDR R2, SP, 4H |
0BA0 | u(82200010): LDR R2, R2, 10H |
0BA1 | v(83E0000C): LDR R3, SP, CH |
0BA2 | v(83300010): LDR R3, R3, 10H |
| ENDw |
0BA3 | w(F7FFF45C): BL -2980 [0000H] |
| END |
| ENDx Set; |
0BA4 | x(8FE00000): LDR LNK, SP, 0H |
0BA5 | x(4EE80014): ADD SP, SP, 14H |
0BA6 | x(C700000F): B LNK |
| |
| PROCEDURE In*(VAR x, y: Item); (* x := x IN y *) |
| BEGINy load(y)z;a |
0BA7 | y .PROC 26 |
0BA7 | y(4EE90014): SUB SP, SP, 14H |
0BA8 | y(AFE00000): STR LNK, SP, 0H |
0BA9 | y(A0E00004): STR R0, SP, 4H |
0BAA | y(A1E00008): STR R1, SP, 8H |
0BAB | y(A2E0000C): STR R2, SP, CH |
0BAC | y(A3E00010): STR R3, SP, 10H |
0BAD | z(80E0000C): LDR R0, SP, CH |
0BAE | z(81E00010): LDR R1, SP, 10H |
0BAF | a(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) |
0BB0 | b(80E00004): LDR R0, SP, 4H |
0BB1 | b(80000000): LDR R0, R0, 0H |
0BB2 | b(40090001): SUB R0, R0, 1H |
0BB3 | b(E9000010): BNE 16 [0BC4H] |
0BB4 | c(40000003): MOV R0, R0, 3H |
0BB5 | d(81E0000C): LDR R1, SP, CH |
0BB6 | d(81100010): LDR R1, R1, 10H |
0BB7 | e(82E0000C): LDR R2, SP, CH |
0BB8 | e(82200010): LDR R2, R2, 10H |
0BB9 | f(83E00004): LDR R3, SP, 4H |
0BBA | f(83300008): LDR R3, R3, 8H |
0BBB | f(43380001): ADD R3, R3, 1H |
0BBC | g(4334001F): AND R3, R3, 1FH |
0BBD | h(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) |
0BBE | i .FIXUP D |
0BBE | i(8D000027): LDR SB, MT, MOD0 [ORG] |
0BBF | i(40D8002C): ADD R0, SB, 2CH [data] |
0BC0 | i(81000000): LDR R1, R0, 0H |
0BC1 | i(41190001): SUB R1, R1, 1H |
0BC2 | i(A1000000): STR R1, R0, 0H |
0BC3 | j(E7000017): B 23 [0BDBH] |
0BC4 | k(80E00004): LDR R0, SP, 4H |
0BC5 | k(81E00008): LDR R1, SP, 8H |
0BC6 | l(F7FFF60C): BL -2548 [01D3H] |
0BC7 | m(40000008): MOV R0, R0, 8H |
0BC8 | n(81E00004): LDR R1, SP, 4H |
0BC9 | n(81100010): LDR R1, R1, 10H |
0BCA | o(82E00004): LDR R2, SP, 4H |
0BCB | o(82200010): LDR R2, R2, 10H |
0BCC | p(43000001): MOV R3, R0, 1H |
0BCD | q(F7FFF450): BL -2992 [001EH] |
0BCE | r(40000003): MOV R0, R0, 3H |
0BCF | s(81E0000C): LDR R1, SP, CH |
0BD0 | s(81100010): LDR R1, R1, 10H |
0BD1 | t(82E0000C): LDR R2, SP, CH |
0BD2 | t(82200010): LDR R2, R2, 10H |
0BD3 | u(83E00004): LDR R3, SP, 4H |
0BD4 | u(83300010): LDR R3, R3, 10H |
0BD5 | v(F7FFF42A): BL -3030 [0000H] |
| ENDw ; |
0BD6 | w .FIXUP D |
0BD6 | w(8D000018): LDR SB, MT, MOD0 [ORG] |
0BD7 | w(40D8002C): ADD R0, SB, 2CH [data] |
0BD8 | w(81000000): LDR R1, R0, 0H |
0BD9 | w(41190002): SUB R1, R1, 2H |
0BDA | w(A1000000): STR R1, R0, 0H |
| SetCC(x,x MI)y |
0BDB | x(80E00004): LDR R0, SP, 4H |
0BDC | x(81E00008): LDR R1, SP, 8H |
0BDD | y(42000000): MOV R2, R0, 0H |
| ENDz In; |
0BDE | z(F7FFF4F9): BL -2823 [00D8H] |
0BDF | z(8FE00000): LDR LNK, SP, 0H |
0BE0 | z(4EE80014): ADD SP, SP, 14H |
0BE1 | z(C700000F): B LNK |
| |
| PROCEDURE SetOp*(op: LONGINT; VAR x, y: Item); (* x := x op y *) |
| VAR xset, yset: SET; (*x.type.form = Set*) |
| BEGINa |
0BE2 | a .PROC 27 |
0BE2 | a(4EE90020): SUB SP, SP, 20H |
0BE3 | a(AFE00000): STR LNK, SP, 0H |
0BE4 | a(A0E00004): STR R0, SP, 4H |
0BE5 | a(A1E00008): STR R1, SP, 8H |
0BE6 | a(A2E0000C): STR R2, SP, CH |
0BE7 | a(A3E00010): STR R3, SP, 10H |
0BE8 | a(A4E00014): STR R4, SP, 14H |
| IF (x.mode = ORB.Const)b & (cy.mode = ORB.Const)d THENe |
0BE9 | b(80E00008): LDR R0, SP, 8H |
0BEA | b(80000000): LDR R0, R0, 0H |
0BEB | b(40090001): SUB R0, R0, 1H |
0BEC | c(E900002D): BNE 45 [0C1AH] |
0BED | d(80E00010): LDR R0, SP, 10H |
0BEE | d(80000000): LDR R0, R0, 0H |
0BEF | d(40090001): SUB R0, R0, 1H |
0BF0 | e(E9000029): BNE 41 [0C1AH] |
| xset := SYSTEM.VAL(SET, x.a);f yset := SYSTEM.VAL(SET, y.a);g |
0BF1 | f(80E00008): LDR R0, SP, 8H |
0BF2 | f(80000008): LDR R0, R0, 8H |
0BF3 | f(A0E00018): STR R0, SP, 18H |
0BF4 | g(80E00010): LDR R0, SP, 10H |
0BF5 | g(80000008): LDR R0, R0, 8H |
0BF6 | g(A0E0001C): STR R0, SP, 1CH |
| IF op = ORS.plus THENh xset := xset + yset |
0BF7 | h(80E00004): LDR R0, SP, 4H |
0BF8 | h(40090006): SUB R0, R0, 6H |
0BF9 | h(E9000005): BNE 5 [0BFFH] |
| ELSIFi opj = ORS.minus THENk xset := xset - yset |
0BFA | i(80E00018): LDR R0, SP, 18H |
0BFB | i(81E0001C): LDR R1, SP, 1CH |
0BFC | i(00060001): IOR R0, R0, R1 |
0BFD | i(A0E00018): STR R0, SP, 18H |
0BFE | j(E7000017): B 23 [0C16H] |
0BFF | k(80E00004): LDR R0, SP, 4H |
0C00 | k(40090007): SUB R0, R0, 7H |
0C01 | k(E9000005): BNE 5 [0C07H] |
| ELSIFl opm = ORS.times THENn xset := xset * yset |
0C02 | l(80E00018): LDR R0, SP, 18H |
0C03 | l(81E0001C): LDR R1, SP, 1CH |
0C04 | l(00050001): ANN R0, R0, R1 |
0C05 | l(A0E00018): STR R0, SP, 18H |
0C06 | m(E700000F): B 15 [0C16H] |
0C07 | n(80E00004): LDR R0, SP, 4H |
0C08 | n(40090001): SUB R0, R0, 1H |
0C09 | n(E9000005): BNE 5 [0C0FH] |
| ELSIFo opp = ORS.rdiv THENq xset := xset / yset |
0C0A | o(80E00018): LDR R0, SP, 18H |
0C0B | o(81E0001C): LDR R1, SP, 1CH |
0C0C | o(00040001): AND R0, R0, R1 |
0C0D | o(A0E00018): STR R0, SP, 18H |
0C0E | p(E7000007): B 7 [0C16H] |
0C0F | q(80E00004): LDR R0, SP, 4H |
0C10 | q(40090002): SUB R0, R0, 2H |
0C11 | q(E9000004): BNE 4 [0C16H] |
| ENDr ; |
0C12 | r(80E00018): LDR R0, SP, 18H |
0C13 | r(81E0001C): LDR R1, SP, 1CH |
0C14 | r(00070001): XOR R0, R0, R1 |
0C15 | r(A0E00018): STR R0, SP, 18H |
| x.a := SYSTEM.VAL(LONGINT, xset) |
| ELSIFs yt.mode = ORB.Const THENu |
0C16 | s(80E00018): LDR R0, SP, 18H |
0C17 | s(81E00008): LDR R1, SP, 8H |
0C18 | s(A0100008): STR R0, R1, 8H |
0C19 | t(E7000079): B 121 [0C93H] |
0C1A | u(80E00010): LDR R0, SP, 10H |
0C1B | u(80000000): LDR R0, R0, 0H |
0C1C | u(40090001): SUB R0, R0, 1H |
0C1D | u(E9000033): BNE 51 [0C51H] |
| load(x)v;w |
0C1E | v(80E00008): LDR R0, SP, 8H |
0C1F | v(81E0000C): LDR R1, SP, CH |
0C20 | w(F7FFF5B2): BL -2638 [01D3H] |
| IF op = ORS.plus THENx Put1a(Ior,y x.r,z x.r,a y.a)b |
0C21 | x(80E00004): LDR R0, SP, 4H |
0C22 | x(40090006): SUB R0, R0, 6H |
0C23 | x(E9000009): BNE 9 [0C2DH] |
0C24 | y(40000006): MOV R0, R0, 6H |
0C25 | z(81E00008): LDR R1, SP, 8H |
0C26 | z(81100010): LDR R1, R1, 10H |
0C27 | a(82E00008): LDR R2, SP, 8H |
0C28 | a(82200010): LDR R2, R2, 10H |
0C29 | b(83E00010): LDR R3, SP, 10H |
0C2A | b(83300008): LDR R3, R3, 8H |
| ELSIFc opd = ORS.minus THENe Put1a(Ann,f x.r,g x.r,h y.a)i |
0C2B | c(F7FFF418): BL -3048 [0044H] |
0C2C | d(E7000023): B 35 [0C50H] |
0C2D | e(80E00004): LDR R0, SP, 4H |
0C2E | e(40090007): SUB R0, R0, 7H |
0C2F | e(E9000009): BNE 9 [0C39H] |
0C30 | f(40000005): MOV R0, R0, 5H |
0C31 | g(81E00008): LDR R1, SP, 8H |
0C32 | g(81100010): LDR R1, R1, 10H |
0C33 | h(82E00008): LDR R2, SP, 8H |
0C34 | h(82200010): LDR R2, R2, 10H |
0C35 | i(83E00010): LDR R3, SP, 10H |
0C36 | i(83300008): LDR R3, R3, 8H |
| ELSIFj opk = ORS.times THENl Put1a(And,m x.r,n x.r,o y.a)p |
0C37 | j(F7FFF40C): BL -3060 [0044H] |
0C38 | k(E7000017): B 23 [0C50H] |
0C39 | l(80E00004): LDR R0, SP, 4H |
0C3A | l(40090001): SUB R0, R0, 1H |
0C3B | l(E9000009): BNE 9 [0C45H] |
0C3C | m(40000004): MOV R0, R0, 4H |
0C3D | n(81E00008): LDR R1, SP, 8H |
0C3E | n(81100010): LDR R1, R1, 10H |
0C3F | o(82E00008): LDR R2, SP, 8H |
0C40 | o(82200010): LDR R2, R2, 10H |
0C41 | p(83E00010): LDR R3, SP, 10H |
0C42 | p(83300008): LDR R3, R3, 8H |
| ELSIFq opr = ORS.rdiv THENs Put1a(Xor,t x.r,u x.r,v y.a)w |
0C43 | q(F7FFF400): BL -3072 [0044H] |
0C44 | r(E700000B): B 11 [0C50H] |
0C45 | s(80E00004): LDR R0, SP, 4H |
0C46 | s(40090002): SUB R0, R0, 2H |
0C47 | s(E9000008): BNE 8 [0C50H] |
0C48 | t(40000007): MOV R0, R0, 7H |
0C49 | u(81E00008): LDR R1, SP, 8H |
0C4A | u(81100010): LDR R1, R1, 10H |
0C4B | v(82E00008): LDR R2, SP, 8H |
0C4C | v(82200010): LDR R2, R2, 10H |
0C4D | w(83E00010): LDR R3, SP, 10H |
0C4E | w(83300008): LDR R3, R3, 8H |
| ENDx ; |
0C4F | x(F7FFF3F4): BL -3084 [0044H] |
| ELSE loady(x)z;a load(y)b;c |
0C50 | y(E7000042): B 66 [0C93H] |
0C51 | z(80E00008): LDR R0, SP, 8H |
0C52 | z(81E0000C): LDR R1, SP, CH |
0C53 | a(F7FFF57F): BL -2689 [01D3H] |
0C54 | b(80E00010): LDR R0, SP, 10H |
0C55 | b(81E00014): LDR R1, SP, 14H |
0C56 | c(F7FFF57C): BL -2692 [01D3H] |
| IF op = ORS.plus THENd Put0(Ior,e RH-2,f x.r,g y.r)h |
0C57 | d(80E00004): LDR R0, SP, 4H |
0C58 | d(40090006): SUB R0, R0, 6H |
0C59 | d(E900000A): BNE 10 [0C64H] |
0C5A | e(40000006): MOV R0, R0, 6H |
0C5B | f .FIXUP D |
0C5B | f(8D000085): LDR SB, MT, MOD0 [ORG] |
0C5C | f(81D0002C): LDR R1, SB, 2CH [data] |
0C5D | f(41190002): SUB R1, R1, 2H |
0C5E | g(82E00008): LDR R2, SP, 8H |
0C5F | g(82200010): LDR R2, R2, 10H |
0C60 | h(83E00010): LDR R3, SP, 10H |
0C61 | h(83300010): LDR R3, R3, 10H |
| ELSIFi opj = ORS.minus THENk Put0(Ann,l RH-2,m x.r,n y.r)o |
0C62 | i(F7FFF39D): BL -3171 [0000H] |
0C63 | j(E7000026): B 38 [0C8AH] |
0C64 | k(80E00004): LDR R0, SP, 4H |
0C65 | k(40090007): SUB R0, R0, 7H |
0C66 | k(E900000A): BNE 10 [0C71H] |
0C67 | l(40000005): MOV R0, R0, 5H |
0C68 | m .FIXUP D |
0C68 | m(8D00000D): LDR SB, MT, MOD0 [ORG] |
0C69 | m(81D0002C): LDR R1, SB, 2CH [data] |
0C6A | m(41190002): SUB R1, R1, 2H |
0C6B | n(82E00008): LDR R2, SP, 8H |
0C6C | n(82200010): LDR R2, R2, 10H |
0C6D | o(83E00010): LDR R3, SP, 10H |
0C6E | o(83300010): LDR R3, R3, 10H |
| ELSIFp opq = ORS.times THENr Put0(And,s RH-2,t x.r,u y.r)v |
0C6F | p(F7FFF390): BL -3184 [0000H] |
0C70 | q(E7000019): B 25 [0C8AH] |
0C71 | r(80E00004): LDR R0, SP, 4H |
0C72 | r(40090001): SUB R0, R0, 1H |
0C73 | r(E900000A): BNE 10 [0C7EH] |
0C74 | s(40000004): MOV R0, R0, 4H |
0C75 | t .FIXUP D |
0C75 | t(8D00000D): LDR SB, MT, MOD0 [ORG] |
0C76 | t(81D0002C): LDR R1, SB, 2CH [data] |
0C77 | t(41190002): SUB R1, R1, 2H |
0C78 | u(82E00008): LDR R2, SP, 8H |
0C79 | u(82200010): LDR R2, R2, 10H |
0C7A | v(83E00010): LDR R3, SP, 10H |
0C7B | v(83300010): LDR R3, R3, 10H |
| ELSIFw opx = ORS.rdiv THENy Put0(Xor,z RH-2,a x.r,b y.r)c |
0C7C | w(F7FFF383): BL -3197 [0000H] |
0C7D | x(E700000C): B 12 [0C8AH] |
0C7E | y(80E00004): LDR R0, SP, 4H |
0C7F | y(40090002): SUB R0, R0, 2H |
0C80 | y(E9000009): BNE 9 [0C8AH] |
0C81 | z(40000007): MOV R0, R0, 7H |
0C82 | a .FIXUP D |
0C82 | a(8D00000D): LDR SB, MT, MOD0 [ORG] |
0C83 | a(81D0002C): LDR R1, SB, 2CH [data] |
0C84 | a(41190002): SUB R1, R1, 2H |
0C85 | b(82E00008): LDR R2, SP, 8H |
0C86 | b(82200010): LDR R2, R2, 10H |
0C87 | c(83E00010): LDR R3, SP, 10H |
0C88 | c(83300010): LDR R3, R3, 10H |
| ENDd ; |
0C89 | d(F7FFF376): BL -3210 [0000H] |
| DEC(RH);e x.r := RH-1 |
0C8A | e .FIXUP D |
0C8A | e(8D000008): LDR SB, MT, MOD0 [ORG] |
0C8B | e(40D8002C): ADD R0, SB, 2CH [data] |
0C8C | e(81000000): LDR R1, R0, 0H |
0C8D | e(41190001): SUB R1, R1, 1H |
0C8E | e(A1000000): STR R1, R0, 0H |
| ENDf |
0C8F | f(80D0002C): LDR R0, SB, 2CH |
0C90 | f(40090001): SUB R0, R0, 1H |
0C91 | f(81E00008): LDR R1, SP, 8H |
0C92 | f(A0100010): STR R0, R1, 10H |
| ENDg SetOp; |
0C93 | g(8FE00000): LDR LNK, SP, 0H |
0C94 | g(4EE80020): ADD SP, SP, 20H |
0C95 | g(C700000F): B LNK |
| |
| (* Code generation for relations *) |
| |
| PROCEDURE IntRelation*(op: INTEGER; VAR x, y: Item); (* x := x < y *) |
| BEGINh |
0C96 | h .PROC 28 |
0C96 | h(4EE90018): SUB SP, SP, 18H |
0C97 | h(AFE00000): STR LNK, SP, 0H |
0C98 | h(A0E00004): STR R0, SP, 4H |
0C99 | h(A1E00008): STR R1, SP, 8H |
0C9A | h(A2E0000C): STR R2, SP, CH |
0C9B | h(A3E00010): STR R3, SP, 10H |
0C9C | h(A4E00014): STR R4, SP, 14H |
| IF (y.mode = ORB.Const)i & (jy.type.formk # ORB.Proc)l THENm |
0C9D | i(80E00010): LDR R0, SP, 10H |
0C9E | i(80000000): LDR R0, R0, 0H |
0C9F | i(40090001): SUB R0, R0, 1H |
0CA0 | j(E900002A): BNE 42 [0CCBH] |
0CA1 | k(80E00010): LDR R0, SP, 10H |
0CA2 | k(80000004): LDR R0, R0, 4H |
0CA3 | k(D150164C): BLEQ MT [trap=4, pos=20502] |
0CA4 | l(80000000): LDR R0, R0, 0H |
0CA5 | l(4009000A): SUB R0, R0, AH |
0CA6 | m(E1000024): BEQ 36 [0CCBH] |
| load(x)n;o |
0CA7 | n(80E00008): LDR R0, SP, 8H |
0CA8 | n(81E0000C): LDR R1, SP, CH |
0CA9 | o(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 ; |
0CAA | p(80E00010): LDR R0, SP, 10H |
0CAB | p(80000008): LDR R0, R0, 8H |
0CAC | q(E9000010): BNE 16 [0CBDH] |
0CAD | r(40000600): MOV R0, R0, 600H |
0CAE | r(81E00004): LDR R1, SP, 4H |
0CAF | r(41180001): ADD R1, R1, 1H |
0CB0 | r(00030001): ROR R0, R0, R1 |
0CB1 | s(E800000B): BPL 11 [0CBDH] |
0CB2 | t .FIXUP D |
0CB2 | t(8D000028): LDR SB, MT, MOD0 [ORG] |
0CB3 | t(80D00018): LDR R0, SB, 18H [data] |
0CB4 | t(40090001): SUB R0, R0, 1H |
0CB5 | t(41091F40): SUB R1, R0, 1F40H |
0CB6 | t(DA50771C): BLCC MT [trap=1, pos=20599] |
0CB7 | t(40010002): LSL R0, R0, 2H |
0CB8 | t(00D80000): ADD R0, SB, R0 |
0CB9 | u(80000064): LDR R0, R0, 64H |
0CBA | u(4002001E): ASR R0, R0, 1EH |
0CBB | v(5009FFFE): SUB R0, R0, FFFFFFFEH |
0CBC | w(E1000008): BEQ 8 [0CC5H] |
0CBD | x(40000009): MOV R0, R0, 9H |
0CBE | y(81E00008): LDR R1, SP, 8H |
0CBF | y(81100010): LDR R1, R1, 10H |
0CC0 | z(82E00008): LDR R2, SP, 8H |
0CC1 | z(82200010): LDR R2, R2, 10H |
0CC2 | a(83E00010): LDR R3, SP, 10H |
0CC3 | a(83300008): LDR R3, R3, 8H |
0CC4 | b(F7FFF37F): BL -3201 [0044H] |
| DEC(RH) |
| ELSEc |
0CC5 | c .FIXUP D |
0CC5 | c(8D000013): LDR SB, MT, MOD0 [ORG] |
0CC6 | c(40D8002C): ADD R0, SB, 2CH [data] |
0CC7 | c(81000000): LDR R1, R0, 0H |
0CC8 | c(41190001): SUB R1, R1, 1H |
0CC9 | c(A1000000): STR R1, R0, 0H |
| IFd (x.mode = Cond)e OR (fy.mode = Cond)g THENh ORS.Mark("not implemented")i ENDj ; |
0CCA | d(E700001F): B 31 [0CEAH] |
0CCB | e(80E00008): LDR R0, SP, 8H |
0CCC | e(80000000): LDR R0, R0, 0H |
0CCD | e(4009000C): SUB R0, R0, CH |
0CCE | f(E1000004): BEQ 4 [0CD3H] |
0CCF | g(80E00010): LDR R0, SP, 10H |
0CD0 | g(80000000): LDR R0, R0, 0H |
0CD1 | g(4009000C): SUB R0, R0, CH |
0CD2 | h(E9000004): BNE 4 [0CD7H] |
0CD3 | i .FIXUP D |
0CD3 | i(8D00000E): LDR SB, MT, MOD0 [ORG] |
0CD4 | i(40D889C4): ADD R0, SB, FFFF89C4H [data] |
0CD5 | i(41000010): MOV R1, R0, 10H |
0CD6 | j .FIXUP P |
0CD6 | j(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) |
0CD7 | k(80E00008): LDR R0, SP, 8H |
0CD8 | k(81E0000C): LDR R1, SP, CH |
0CD9 | l(F7FFF4F9): BL -2823 [01D3H] |
0CDA | m(80E00010): LDR R0, SP, 10H |
0CDB | m(81E00014): LDR R1, SP, 14H |
0CDC | n(F7FFF4F6): BL -2826 [01D3H] |
0CDD | o(40000009): MOV R0, R0, 9H |
0CDE | p(81E00008): LDR R1, SP, 8H |
0CDF | p(81100010): LDR R1, R1, 10H |
0CE0 | q(82E00008): LDR R2, SP, 8H |
0CE1 | q(82200010): LDR R2, R2, 10H |
0CE2 | r(83E00010): LDR R3, SP, 10H |
0CE3 | r(83300010): LDR R3, R3, 10H |
0CE4 | s(F7FFF31B): BL -3301 [0000H] |
| ENDt ; |
0CE5 | t .FIXUP D |
0CE5 | t(8D000012): LDR SB, MT, MOD0 [ORG] |
0CE6 | t(40D8002C): ADD R0, SB, 2CH [data] |
0CE7 | t(81000000): LDR R1, R0, 0H |
0CE8 | t(41190002): SUB R1, R1, 2H |
0CE9 | t(A1000000): STR R1, R0, 0H |
| SetCC(x,u relmap[op - ORS.eql]v)w |
0CEA | u(80E00008): LDR R0, SP, 8H |
0CEB | u(81E0000C): LDR R1, SP, CH |
0CEC | v(82E00004): LDR R2, SP, 4H |
0CED | v(42290009): SUB R2, R2, 9H |
0CEE | v(43290006): SUB R3, R2, 6H |
0CEF | v(DA51831C): BLCC MT [trap=1, pos=20867] |
0CF0 | v(42210002): LSL R2, R2, 2H |
0CF1 | v .FIXUP D |
0CF1 | v(8D00000C): LDR SB, MT, MOD0 [ORG] |
0CF2 | v(02D80002): ADD R2, SB, R2 [global array] |
0CF3 | w(8220004C): LDR R2, R2, 4CH |
| ENDx IntRelation; |
0CF4 | x(F7FFF3E3): BL -3101 [00D8H] |
0CF5 | x(8FE00000): LDR LNK, SP, 0H |
0CF6 | x(4EE80018): ADD SP, SP, 18H |
0CF7 | x(C700000F): B LNK |
| |
| PROCEDURE RealRelation*(op: INTEGER; VAR x, y: Item); (* x := x < y *) |
| BEGINy load(x)z;a |
0CF8 | y .PROC 29 |
0CF8 | y(4EE90018): SUB SP, SP, 18H |
0CF9 | y(AFE00000): STR LNK, SP, 0H |
0CFA | y(A0E00004): STR R0, SP, 4H |
0CFB | y(A1E00008): STR R1, SP, 8H |
0CFC | y(A2E0000C): STR R2, SP, CH |
0CFD | y(A3E00010): STR R3, SP, 10H |
0CFE | y(A4E00014): STR R4, SP, 14H |
0CFF | z(80E00008): LDR R0, SP, 8H |
0D00 | z(81E0000C): LDR R1, SP, CH |
0D01 | a(F7FFF4D1): BL -2863 [01D3H] |
| IF (y.mode = ORB.Const)b & (cy.a = 0)d THENe DEC(RH) |
0D02 | b(80E00010): LDR R0, SP, 10H |
0D03 | b(80000000): LDR R0, R0, 0H |
0D04 | b(40090001): SUB R0, R0, 1H |
0D05 | c(E9000009): BNE 9 [0D0FH] |
0D06 | d(80E00010): LDR R0, SP, 10H |
0D07 | d(80000008): LDR R0, R0, 8H |
0D08 | e(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) |
0D09 | f .FIXUP D |
0D09 | f(8D000018): LDR SB, MT, MOD0 [ORG] |
0D0A | f(40D8002C): ADD R0, SB, 2CH [data] |
0D0B | f(81000000): LDR R1, R0, 0H |
0D0C | f(41190001): SUB R1, R1, 1H |
0D0D | f(A1000000): STR R1, R0, 0H |
0D0E | g(E7000010): B 16 [0D1FH] |
0D0F | h(80E00010): LDR R0, SP, 10H |
0D10 | h(81E00014): LDR R1, SP, 14H |
0D11 | i(F7FFF4C1): BL -2879 [01D3H] |
0D12 | j(4000000D): MOV R0, R0, DH |
0D13 | k(81E00008): LDR R1, SP, 8H |
0D14 | k(81100010): LDR R1, R1, 10H |
0D15 | l(82E00008): LDR R2, SP, 8H |
0D16 | l(82200010): LDR R2, R2, 10H |
0D17 | m(83E00010): LDR R3, SP, 10H |
0D18 | m(83300010): LDR R3, R3, 10H |
0D19 | n(F7FFF2E6): BL -3354 [0000H] |
| ENDo ; |
0D1A | o .FIXUP D |
0D1A | o(8D000011): LDR SB, MT, MOD0 [ORG] |
0D1B | o(40D8002C): ADD R0, SB, 2CH [data] |
0D1C | o(81000000): LDR R1, R0, 0H |
0D1D | o(41190002): SUB R1, R1, 2H |
0D1E | o(A1000000): STR R1, R0, 0H |
| SetCC(x,p relmap[op - ORS.eql]q)r |
0D1F | p(80E00008): LDR R0, SP, 8H |
0D20 | p(81E0000C): LDR R1, SP, CH |
0D21 | q(82E00004): LDR R2, SP, 4H |
0D22 | q(42290009): SUB R2, R2, 9H |
0D23 | q(43290006): SUB R3, R2, 6H |
0D24 | q(DA528C1C): BLCC MT [trap=1, pos=21132] |
0D25 | q(42210002): LSL R2, R2, 2H |
0D26 | q .FIXUP D |
0D26 | q(8D00000C): LDR SB, MT, MOD0 [ORG] |
0D27 | q(02D80002): ADD R2, SB, R2 [global array] |
0D28 | r(8220004C): LDR R2, R2, 4CH |
| ENDs RealRelation; |
0D29 | s(F7FFF3AE): BL -3154 [00D8H] |
0D2A | s(8FE00000): LDR LNK, SP, 0H |
0D2B | s(4EE80018): ADD SP, SP, 18H |
0D2C | s(C700000F): B LNK |
| |
| PROCEDURE StringRelation*(op: INTEGER; VAR x, y: Item); (* x := x < y *) |
| (*x, y are char arrays or strings*) |
| BEGINt |
0D2D | t .PROC 30 |
0D2D | t(4EE90018): SUB SP, SP, 18H |
0D2E | t(AFE00000): STR LNK, SP, 0H |
0D2F | t(A0E00004): STR R0, SP, 4H |
0D30 | t(A1E00008): STR R1, SP, 8H |
0D31 | t(A2E0000C): STR R2, SP, CH |
0D32 | t(A3E00010): STR R3, SP, 10H |
0D33 | t(A4E00014): STR R4, SP, 14H |
| IF x.type.formu = ORB.String THENv loadStringAdr(x)w ELSEx loadAdry(x)z ENDa ; |
0D34 | u(80E00008): LDR R0, SP, 8H |
0D35 | u(80000004): LDR R0, R0, 4H |
0D36 | u(D153324C): BLEQ MT [trap=4, pos=21298] |
0D37 | v(80000000): LDR R0, R0, 0H |
0D38 | v(4009000B): SUB R0, R0, BH |
0D39 | v(E9000004): BNE 4 [0D3EH] |
0D3A | w(80E00008): LDR R0, SP, 8H |
0D3B | w(81E0000C): LDR R1, SP, CH |
0D3C | x(F7FFF636): BL -2506 [0373H] |
0D3D | y(E7000003): B 3 [0D41H] |
0D3E | z(80E00008): LDR R0, SP, 8H |
0D3F | z(81E0000C): LDR R1, SP, CH |
0D40 | a(F7FFF57B): BL -2693 [02BCH] |
| IF y.type.formb = ORB.String THENc loadStringAdr(y)d ELSEe loadAdrf(y)g ENDh ; |
0D41 | b(80E00010): LDR R0, SP, 10H |
0D42 | b(80000004): LDR R0, R0, 4H |
0D43 | b(D1537E4C): BLEQ MT [trap=4, pos=21374] |
0D44 | c(80000000): LDR R0, R0, 0H |
0D45 | c(4009000B): SUB R0, R0, BH |
0D46 | c(E9000004): BNE 4 [0D4BH] |
0D47 | d(80E00010): LDR R0, SP, 10H |
0D48 | d(81E00014): LDR R1, SP, 14H |
0D49 | e(F7FFF629): BL -2519 [0373H] |
0D4A | f(E7000003): B 3 [0D4EH] |
0D4B | g(80E00010): LDR R0, SP, 10H |
0D4C | g(81E00014): LDR R1, SP, 14H |
0D4D | h(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 |
0D4E | i(40000009): MOV R0, R0, 9H |
0D4F | j .FIXUP D |
0D4F | j(8D000029): LDR SB, MT, MOD0 [ORG] |
0D50 | j(81D0002C): LDR R1, SB, 2CH [data] |
0D51 | k(82E00008): LDR R2, SP, 8H |
0D52 | k(82200010): LDR R2, R2, 10H |
0D53 | l(43000000): MOV R3, R0, 0H |
0D54 | m(F7FFF31C): BL -3300 [0071H] |
0D55 | n(40000008): MOV R0, R0, 8H |
0D56 | o(81E00008): LDR R1, SP, 8H |
0D57 | o(81100010): LDR R1, R1, 10H |
0D58 | p(82E00008): LDR R2, SP, 8H |
0D59 | p(82200010): LDR R2, R2, 10H |
0D5A | q(43000001): MOV R3, R0, 1H |
0D5B | r(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 |
0D5C | s(40000009): MOV R0, R0, 9H |
0D5D | t .FIXUP D |
0D5D | t(8D00000E): LDR SB, MT, MOD0 [ORG] |
0D5E | t(81D0002C): LDR R1, SB, 2CH [data] |
0D5F | t(41180001): ADD R1, R1, 1H |
0D60 | u(82E00010): LDR R2, SP, 10H |
0D61 | u(82200010): LDR R2, R2, 10H |
0D62 | v(43000000): MOV R3, R0, 0H |
0D63 | w(F7FFF30D): BL -3315 [0071H] |
0D64 | x(40000008): MOV R0, R0, 8H |
0D65 | y(81E00010): LDR R1, SP, 10H |
0D66 | y(81100010): LDR R1, R1, 10H |
0D67 | z(82E00010): LDR R2, SP, 10H |
0D68 | z(82200010): LDR R2, R2, 10H |
0D69 | a(43000001): MOV R3, R0, 1H |
0D6A | b(F7FFF2B3): BL -3405 [001EH] |
| Put0(Cmp,c RH+2,d RH,e RH+1)f;g Put3(BC,h NE,i 2)j;k |
0D6B | c(40000009): MOV R0, R0, 9H |
0D6C | d .FIXUP D |
0D6C | d(8D00000F): LDR SB, MT, MOD0 [ORG] |
0D6D | d(81D0002C): LDR R1, SB, 2CH [data] |
0D6E | d(41180002): ADD R1, R1, 2H |
0D6F | e(82D0002C): LDR R2, SB, 2CH |
0D70 | f(83D0002C): LDR R3, SB, 2CH |
0D71 | f(43380001): ADD R3, R3, 1H |
0D72 | g(F7FFF28D): BL -3443 [0000H] |
0D73 | h(40000002): MOV R0, R0, 2H |
0D74 | i(41000009): MOV R1, R0, 9H |
0D75 | j(42000002): MOV R2, R0, 2H |
0D76 | k(F7FFF31A): BL -3302 [0091H] |
| Put1(Cmp,l RH+2,m RH,n 0)o;p Put3(BC,q NE,r -8)s;t |
0D77 | l(40000009): MOV R0, R0, 9H |
0D78 | m .FIXUP D |
0D78 | m(8D00000C): LDR SB, MT, MOD0 [ORG] |
0D79 | m(81D0002C): LDR R1, SB, 2CH [data] |
0D7A | m(41180002): ADD R1, R1, 2H |
0D7B | n(82D0002C): LDR R2, SB, 2CH |
0D7C | o(43000000): MOV R3, R0, 0H |
0D7D | p(F7FFF2A0): BL -3424 [001EH] |
0D7E | q(40000002): MOV R0, R0, 2H |
0D7F | r(41000009): MOV R1, R0, 9H |
0D80 | s(5200FFF8): MOV R2, R0, FFFFFFF8H |
0D81 | t(F7FFF30F): BL -3313 [0091H] |
| DEC(RH, 2);u SetCC(x,v relmap[op - ORS.eql]w)x |
0D82 | u .FIXUP D |
0D82 | u(8D00000A): LDR SB, MT, MOD0 [ORG] |
0D83 | u(40D8002C): ADD R0, SB, 2CH [data] |
0D84 | u(81000000): LDR R1, R0, 0H |
0D85 | u(41190002): SUB R1, R1, 2H |
0D86 | u(A1000000): STR R1, R0, 0H |
0D87 | v(80E00008): LDR R0, SP, 8H |
0D88 | v(81E0000C): LDR R1, SP, CH |
0D89 | w(82E00004): LDR R2, SP, 4H |
0D8A | w(42290009): SUB R2, R2, 9H |
0D8B | w(43290006): SUB R3, R2, 6H |
0D8C | w(DA54AF1C): BLCC MT [trap=1, pos=21679] |
0D8D | w(42210002): LSL R2, R2, 2H |
0D8E | w(02D80002): ADD R2, SB, R2 |
0D8F | x(8220004C): LDR R2, R2, 4CH |
| ENDy StringRelation; |
0D90 | y(F7FFF347): BL -3257 [00D8H] |
0D91 | y(8FE00000): LDR LNK, SP, 0H |
0D92 | y(4EE80018): ADD SP, SP, 18H |
0D93 | y(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) |
0D94 | z .PROC 31 |
0D94 | z(4EE9000C): SUB SP, SP, CH |
0D95 | z(AFE00000): STR LNK, SP, 0H |
0D96 | z(A0E00004): STR R0, SP, 4H |
0D97 | z(A1E00008): STR R1, SP, 8H |
0D98 | a .FIXUP D |
0D98 | a(8D400016): LDR SB, MT, MOD4 [ORB] |
0D99 | a(80D00008): LDR R0, SB, VAR8 |
0D9A | a(81E00004): LDR R1, SP, 4H |
0D9B | a(A0100004): STR R0, R1, 4H |
0D9C | b .FIXUP D |
0D9C | b(8D000004): LDR SB, MT, MOD0 [ORG] |
0D9D | b(40D80024): ADD R0, SB, 24H [data] |
0D9E | b(81000000): LDR R1, R0, 0H |
0D9F | b(41190004): SUB R1, R1, 4H |
0DA0 | b(A1000000): STR R1, R0, 0H |
0DA1 | c(80E00004): LDR R0, SP, 4H |
0DA2 | c(80000008): LDR R0, R0, 8H |
0DA3 | c(41090960): SUB R1, R0, 960H |
0DA4 | c(DA55561C): BLCC MT [trap=1, pos=21846] |
0DA5 | c(00D80000): ADD R0, SB, R0 |
| ENDd StrToChar; |
0DA6 | d(90007F44): LDR R0, R0, 7F44H |
0DA7 | d(81E00004): LDR R1, SP, 4H |
0DA8 | d(A0100008): STR R0, R1, 8H |
0DA9 | d(8FE00000): LDR LNK, SP, 0H |
0DAA | d(4EE8000C): ADD SP, SP, CH |
0DAB | d(C700000F): B LNK |
| |
| PROCEDURE Store*(VAR x, y: Item); (* x := y *) |
| VAR op: LONGINT; |
| BEGINe load(y)f;g |
0DAC | e .PROC 32 |
0DAC | e(4EE90018): SUB SP, SP, 18H |
0DAD | e(AFE00000): STR LNK, SP, 0H |
0DAE | e(A0E00004): STR R0, SP, 4H |
0DAF | e(A1E00008): STR R1, SP, 8H |
0DB0 | e(A2E0000C): STR R2, SP, CH |
0DB1 | e(A3E00010): STR R3, SP, 10H |
0DB2 | f(80E0000C): LDR R0, SP, CH |
0DB3 | f(81E00010): LDR R1, SP, 10H |
0DB4 | g(F7FFF41E): BL -3042 [01D3H] |
| IF x.type.sizeh = 1 THENi op := Str+1 ELSEj opk := Str ENDl ; |
0DB5 | h(80E00004): LDR R0, SP, 4H |
0DB6 | h(80000004): LDR R0, R0, 4H |
0DB7 | h(D155D44C): BLEQ MT [trap=4, pos=21972] |
0DB8 | i(80000020): LDR R0, R0, 20H |
0DB9 | i(40090001): SUB R0, R0, 1H |
0DBA | i(E9000003): BNE 3 [0DBEH] |
0DBB | j(4000000B): MOV R0, R0, BH |
0DBC | j(A0E00014): STR R0, SP, 14H |
0DBD | k(E7000002): B 2 [0DC0H] |
0DBE | l(4000000A): MOV R0, R0, AH |
0DBF | l(A0E00014): STR R0, SP, 14H |
| IF x.mode = ORB.Var THENm |
0DC0 | m(80E00004): LDR R0, SP, 4H |
0DC1 | m(80000000): LDR R0, R0, 0H |
0DC2 | m(40090002): SUB R0, R0, 2H |
0DC3 | m(E900001A): BNE 26 [0DDEH] |
| IF x.r > 0 THENn (*local*) Put2(op,o y.r,p SP,q x.a + frame)r |
0DC4 | n(80E00004): LDR R0, SP, 4H |
0DC5 | n(80000010): LDR R0, R0, 10H |
0DC6 | n(40090000): SUB R0, R0, 0H |
0DC7 | n(E600000B): BLE 11 [0DD3H] |
0DC8 | o(80E00014): LDR R0, SP, 14H |
0DC9 | p(81E0000C): LDR R1, SP, CH |
0DCA | p(81100010): LDR R1, R1, 10H |
0DCB | q(4200000E): MOV R2, R0, EH |
0DCC | r(83E00004): LDR R3, SP, 4H |
0DCD | r(83300008): LDR R3, R3, 8H |
0DCE | r .FIXUP D |
0DCE | r(8D000032): LDR SB, MT, MOD0 [ORG] |
0DCF | r(84D00034): LDR R4, SB, 34H [data] |
0DD0 | r(03380004): ADD R3, R3, R4 |
| ELSEs GetSBt(x.r)u;v Put2(op,w y.r,x SB,y x.a)z |
0DD1 | s(F7FFF29F): BL -3425 [0071H] |
0DD2 | t(E700000A): B 10 [0DDDH] |
0DD3 | u(80E00004): LDR R0, SP, 4H |
0DD4 | u(80000010): LDR R0, R0, 10H |
0DD5 | v(F7FFF3D2): BL -3118 [01A8H] |
0DD6 | w(80E00014): LDR R0, SP, 14H |
0DD7 | x(81E0000C): LDR R1, SP, CH |
0DD8 | x(81100010): LDR R1, R1, 10H |
0DD9 | y(4200000D): MOV R2, R0, DH |
0DDA | z(83E00004): LDR R3, SP, 4H |
0DDB | z(83300008): LDR R3, R3, 8H |
| ENDa |
0DDC | a(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 |
0DDD | b(E700002C): B 44 [0E0AH] |
0DDE | c(80E00004): LDR R0, SP, 4H |
0DDF | c(80000000): LDR R0, R0, 0H |
0DE0 | c(40090003): SUB R0, R0, 3H |
0DE1 | c(E9000012): BNE 18 [0DF4H] |
0DE2 | d(40000008): MOV R0, R0, 8H |
0DE3 | e .FIXUP D |
0DE3 | e(8D000015): LDR SB, MT, MOD0 [ORG] |
0DE4 | e(81D0002C): LDR R1, SB, 2CH [data] |
0DE5 | f(4200000E): MOV R2, R0, EH |
0DE6 | g(83E00004): LDR R3, SP, 4H |
0DE7 | g(83300008): LDR R3, R3, 8H |
0DE8 | g(84D00034): LDR R4, SB, 34H |
0DE9 | g(03380004): ADD R3, R3, R4 |
0DEA | h(F7FFF286): BL -3450 [0071H] |
0DEB | i(80E00014): LDR R0, SP, 14H |
0DEC | j(81E0000C): LDR R1, SP, CH |
0DED | j(81100010): LDR R1, R1, 10H |
0DEE | k .FIXUP D |
0DEE | k(8D00000B): LDR SB, MT, MOD0 [ORG] |
0DEF | k(82D0002C): LDR R2, SB, 2CH [data] |
0DF0 | l(83E00004): LDR R3, SP, 4H |
0DF1 | l(8330000C): LDR R3, R3, CH |
0DF2 | m(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 |
0DF3 | n(E7000016): B 22 [0E0AH] |
0DF4 | o(80E00004): LDR R0, SP, 4H |
0DF5 | o(80000000): LDR R0, R0, 0H |
0DF6 | o(4009000B): SUB R0, R0, BH |
0DF7 | o(E900000E): BNE 14 [0E06H] |
0DF8 | p(80E00014): LDR R0, SP, 14H |
0DF9 | q(81E0000C): LDR R1, SP, CH |
0DFA | q(81100010): LDR R1, R1, 10H |
0DFB | r(82E00004): LDR R2, SP, 4H |
0DFC | r(82200010): LDR R2, R2, 10H |
0DFD | s(83E00004): LDR R3, SP, 4H |
0DFE | s(83300008): LDR R3, R3, 8H |
0DFF | t(F7FFF271): BL -3471 [0071H] |
0E00 | u .FIXUP D |
0E00 | u(8D000012): LDR SB, MT, MOD0 [ORG] |
0E01 | u(40D8002C): ADD R0, SB, 2CH [data] |
0E02 | u(81000000): LDR R1, R0, 0H |
0E03 | u(41190001): SUB R1, R1, 1H |
0E04 | u(A1000000): STR R1, R0, 0H |
| ELSE ORSv.Mark("bad mode in Store")w |
0E05 | v(E7000004): B 4 [0E0AH] |
0E06 | w .FIXUP D |
0E06 | w(8D000006): LDR SB, MT, MOD0 [ORG] |
0E07 | w(40D889D4): ADD R0, SB, FFFF89D4H [data] |
0E08 | w(41000012): MOV R1, R0, 12H |
| ENDx ; |
0E09 | x .FIXUP P |
0E09 | x(F7209133): BL MOD2 [ORS] PROC9 |
| DEC(RH) |
| ENDy Store; |
0E0A | y .FIXUP D |
0E0A | y(8D000004): LDR SB, MT, MOD0 [ORG] |
0E0B | y(40D8002C): ADD R0, SB, 2CH [data] |
0E0C | y(81000000): LDR R1, R0, 0H |
0E0D | y(41190001): SUB R1, R1, 1H |
0E0E | y(A1000000): STR R1, R0, 0H |
0E0F | y(8FE00000): LDR LNK, SP, 0H |
0E10 | y(4EE80018): ADD SP, SP, 18H |
0E11 | y(C700000F): B LNK |
| |
| PROCEDURE StoreStruct*(VAR x, y: Item); (* x := y, frame = 0 *) |
| VAR s, pc0: LONGINT; |
| BEGINz |
0E12 | z .PROC 33 |
0E12 | z(4EE9001C): SUB SP, SP, 1CH |
0E13 | z(AFE00000): STR LNK, SP, 0H |
0E14 | z(A0E00004): STR R0, SP, 4H |
0E15 | z(A1E00008): STR R1, SP, 8H |
0E16 | z(A2E0000C): STR R2, SP, CH |
0E17 | z(A3E00010): STR R3, SP, 10H |
| IF y.type.sizea # 0 THENb |
0E18 | a(80E0000C): LDR R0, SP, CH |
0E19 | a(80000004): LDR R0, R0, 4H |
0E1A | a(D157EA4C): BLEQ MT [trap=4, pos=22506] |
0E1B | b(80000020): LDR R0, R0, 20H |
0E1C | b(E10000C2): BEQ 194 [0EDFH] |
| loadAdr(x)c;d loadAdr(y)e;f |
0E1D | c(80E00004): LDR R0, SP, 4H |
0E1E | c(81E00008): LDR R1, SP, 8H |
0E1F | d(F7FFF49C): BL -2916 [02BCH] |
0E20 | e(80E0000C): LDR R0, SP, CH |
0E21 | e(81E00010): LDR R1, SP, 10H |
0E22 | f(F7FFF499): BL -2919 [02BCH] |
| IF (x.type.formg = ORB.Array)h & (ix.type.lenj > 0)k THENl |
0E23 | g(80E00004): LDR R0, SP, 4H |
0E24 | g(80000004): LDR R0, R0, 4H |
0E25 | g(D158274C): BLEQ MT [trap=4, pos=22567] |
0E26 | h(80000000): LDR R0, R0, 0H |
0E27 | h(4009000C): SUB R0, R0, CH |
0E28 | i(E9000079): BNE 121 [0EA2H] |
0E29 | j(80E00004): LDR R0, SP, 4H |
0E2A | j(80000004): LDR R0, R0, 4H |
0E2B | j(D158434C): BLEQ MT [trap=4, pos=22595] |
0E2C | k(80000010): LDR R0, R0, 10H |
0E2D | k(40090000): SUB R0, R0, 0H |
0E2E | l(E6000073): BLE 115 [0EA2H] |
| IF y.type.lenm >= 0 THENn |
0E2F | m(80E0000C): LDR R0, SP, CH |
0E30 | m(80000004): LDR R0, R0, 4H |
0E31 | m(D158634C): BLEQ MT [trap=4, pos=22627] |
0E32 | n(80000010): LDR R0, R0, 10H |
0E33 | n(40090000): SUB R0, R0, 0H |
0E34 | n(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 |
0E35 | o(80E00004): LDR R0, SP, 4H |
0E36 | o(80000004): LDR R0, R0, 4H |
0E37 | o(D158874C): BLEQ MT [trap=4, pos=22663] |
0E38 | p(81E0000C): LDR R1, SP, CH |
0E39 | p(81100004): LDR R1, R1, 4H |
0E3A | p(D158954C): BLEQ MT [trap=4, pos=22677] |
0E3B | q(80000020): LDR R0, R0, 20H |
0E3C | q(81100020): LDR R1, R1, 20H |
0E3D | q(00090001): SUB R0, R0, R1 |
0E3E | q(E900000C): BNE 12 [0E4BH] |
0E3F | r(40000000): MOV R0, R0, 0H |
0E40 | s .FIXUP D |
0E40 | s(8D000036): LDR SB, MT, MOD0 [ORG] |
0E41 | s(81D0002C): LDR R1, SB, 2CH [data] |
0E42 | t(42000000): MOV R2, R0, 0H |
0E43 | u(83E0000C): LDR R3, SP, CH |
0E44 | u(83300004): LDR R3, R3, 4H |
0E45 | u(D158B94C): BLEQ MT [trap=4, pos=22713] |
0E46 | v(83300020): LDR R3, R3, 20H |
0E47 | v(43380003): ADD R3, R3, 3H |
0E48 | w(43320002): ASR R3, R3, 2H |
| ELSEx ORSy.Mark("different length/size, not implemented")z |
0E49 | x(F7FFF1FA): BL -3590 [0044H] |
0E4A | y(E7000004): B 4 [0E4FH] |
0E4B | z .FIXUP D |
0E4B | z(8D00000B): LDR SB, MT, MOD0 [ORG] |
0E4C | z(40D889E8): ADD R0, SB, FFFF89E8H [data] |
0E4D | z(41000027): MOV R1, R0, 27H |
| ENDa |
0E4E | a .FIXUP P |
0E4E | a(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*) |
0E4F | b(E7000051): B 81 [0EA1H] |
0E50 | c(40000008): MOV R0, R0, 8H |
0E51 | d .FIXUP D |
0E51 | d(8D000006): LDR SB, MT, MOD0 [ORG] |
0E52 | d(81D0002C): LDR R1, SB, 2CH [data] |
0E53 | e(4200000E): MOV R2, R0, EH |
0E54 | f(83E0000C): LDR R3, SP, CH |
0E55 | f(83300008): LDR R3, R3, 8H |
0E56 | f(43380004): ADD R3, R3, 4H |
0E57 | g(F7FFF219): BL -3559 [0071H] |
0E58 | h(80E0000C): LDR R0, SP, CH |
0E59 | h(80000004): LDR R0, R0, 4H |
0E5A | h(D1595D4C): BLEQ MT [trap=4, pos=22877] |
0E5B | i(8000001C): LDR R0, R0, 1CH |
0E5C | i(D159624C): BLEQ MT [trap=4, pos=22882] |
0E5D | j(80000020): LDR R0, R0, 20H |
0E5E | j(A0E00014): STR R0, SP, 14H |
| pc0 := pc;k Put3(BC,l EQ,m 0)n;o |
0E5F | k .FIXUP D |
0E5F | k(8D00000E): LDR SB, MT, MOD0 [ORG] |
0E60 | k(80D00018): LDR R0, SB, 18H [data] |
0E61 | k(A0E00018): STR R0, SP, 18H |
0E62 | l(40000002): MOV R0, R0, 2H |
0E63 | m(41000001): MOV R1, R0, 1H |
0E64 | n(42000000): MOV R2, R0, 0H |
0E65 | o(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 |
0E66 | p(80E00014): LDR R0, SP, 14H |
0E67 | p(40090001): SUB R0, R0, 1H |
0E68 | p(E900000D): BNE 13 [0E76H] |
0E69 | q(40000008): MOV R0, R0, 8H |
0E6A | r .FIXUP D |
0E6A | r(8D00000B): LDR SB, MT, MOD0 [ORG] |
0E6B | r(81D0002C): LDR R1, SB, 2CH [data] |
0E6C | s(82D0002C): LDR R2, SB, 2CH |
0E6D | t(43000003): MOV R3, R0, 3H |
0E6E | u(F7FFF1AF): BL -3665 [001EH] |
0E6F | v(40000002): MOV R0, R0, 2H |
0E70 | w .FIXUP D |
0E70 | w(8D000006): LDR SB, MT, MOD0 [ORG] |
0E71 | w(81D0002C): LDR R1, SB, 2CH [data] |
0E72 | x(82D0002C): LDR R2, SB, 2CH |
0E73 | y(43000002): MOV R3, R0, 2H |
| ELSIFz sa # 4 THENb Put1a(Mul,c RH,d RH,e s DIV 4)f |
0E74 | z(F7FFF1A9): BL -3671 [001EH] |
0E75 | a(E700000A): B 10 [0E80H] |
0E76 | b(80E00014): LDR R0, SP, 14H |
0E77 | b(40090004): SUB R0, R0, 4H |
0E78 | b(E1000007): BEQ 7 [0E80H] |
0E79 | c(4000000A): MOV R0, R0, AH |
0E7A | d .FIXUP D |
0E7A | d(8D00000A): LDR SB, MT, MOD0 [ORG] |
0E7B | d(81D0002C): LDR R1, SB, 2CH [data] |
0E7C | e(82D0002C): LDR R2, SB, 2CH |
0E7D | f(83E00014): LDR R3, SP, 14H |
0E7E | f(43320002): ASR R3, R3, 2H |
| ENDg ; |
0E7F | g(F7FFF1C4): BL -3644 [0044H] |
| IF check THENh |
0E80 | h .FIXUP D |
0E80 | h(8D000006): LDR SB, MT, MOD0 [ORG] |
0E81 | h(90D00044): LDR R0, SB, 44H [data] |
0E82 | h(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 |
0E83 | i(40000000): MOV R0, R0, 0H |
0E84 | j .FIXUP D |
0E84 | j(8D000004): LDR SB, MT, MOD0 [ORG] |
0E85 | j(81D0002C): LDR R1, SB, 2CH [data] |
0E86 | j(41180001): ADD R1, R1, 1H |
0E87 | k(42000000): MOV R2, R0, 0H |
0E88 | l(83E00004): LDR R3, SP, 4H |
0E89 | l(83300004): LDR R3, R3, 4H |
0E8A | l(D15A6A4C): BLEQ MT [trap=4, pos=23146] |
0E8B | m(83300020): LDR R3, R3, 20H |
0E8C | m(43380003): ADD R3, R3, 3H |
0E8D | n(43320002): ASR R3, R3, 2H |
0E8E | o(F7FFF1B5): BL -3659 [0044H] |
0E8F | p(40000009): MOV R0, R0, 9H |
0E90 | q .FIXUP D |
0E90 | q(8D00000C): LDR SB, MT, MOD0 [ORG] |
0E91 | q(81D0002C): LDR R1, SB, 2CH [data] |
0E92 | q(41180001): ADD R1, R1, 1H |
0E93 | r(82D0002C): LDR R2, SB, 2CH |
0E94 | s(83D0002C): LDR R3, SB, 2CH |
0E95 | s(43380001): ADD R3, R3, 1H |
0E96 | t(F7FFF169): BL -3735 [0000H] |
0E97 | u(4000000E): MOV R0, R0, EH |
0E98 | v(41000003): MOV R1, R0, 3H |
| ENDw ; |
0E99 | w(F7FFF252): BL -3502 [00ECH] |
| fix(pc0,x pc + 5 -y pc0)z |
0E9A | x(80E00018): LDR R0, SP, 18H |
0E9B | y .FIXUP D |
0E9B | y(8D00000B): LDR SB, MT, MOD0 [ORG] |
0E9C | y(81D00018): LDR R1, SB, 18H [data] |
0E9D | y(41180005): ADD R1, R1, 5H |
0E9E | z(82E00018): LDR R2, SP, 18H |
0E9F | z(01190002): SUB R1, R1, R2 |
| ENDa |
0EA0 | a(F7FFF27B): BL -3461 [011CH] |
| ELSIF xb.type.formc = ORB.Record THENd Put1a(Mov,e RH,f 0,g x.type.sizeh DIV 4)i |
0EA1 | b(E7000015): B 21 [0EB7H] |
0EA2 | c(80E00004): LDR R0, SP, 4H |
0EA3 | c(80000004): LDR R0, R0, 4H |
0EA4 | c(D15AF14C): BLEQ MT [trap=4, pos=23281] |
0EA5 | d(80000000): LDR R0, R0, 0H |
0EA6 | d(4009000D): SUB R0, R0, DH |
0EA7 | d(E900000B): BNE 11 [0EB3H] |
0EA8 | e(40000000): MOV R0, R0, 0H |
0EA9 | f .FIXUP D |
0EA9 | f(8D00000E): LDR SB, MT, MOD0 [ORG] |
0EAA | f(81D0002C): LDR R1, SB, 2CH [data] |
0EAB | g(42000000): MOV R2, R0, 0H |
0EAC | h(83E00004): LDR R3, SP, 4H |
0EAD | h(83300004): LDR R3, R3, 4H |
0EAE | h(D15B214C): BLEQ MT [trap=4, pos=23329] |
0EAF | i(83300020): LDR R3, R3, 20H |
0EB0 | i(43320002): ASR R3, R3, 2H |
| ELSEj ORSk.Mark("inadmissible assignment")l |
0EB1 | j(F7FFF192): BL -3694 [0044H] |
0EB2 | k(E7000004): B 4 [0EB7H] |
0EB3 | l .FIXUP D |
0EB3 | l(8D00000A): LDR SB, MT, MOD0 [ORG] |
0EB4 | l(40D88A10): ADD R0, SB, FFFF8A10H [data] |
0EB5 | l(41000018): MOV R1, R0, 18H |
| ENDm ; |
0EB6 | m .FIXUP P |
0EB6 | m(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 |
0EB7 | n(40000008): MOV R0, R0, 8H |
0EB8 | o .FIXUP D |
0EB8 | o(8D000005): LDR SB, MT, MOD0 [ORG] |
0EB9 | o(81D0002C): LDR R1, SB, 2CH [data] |
0EBA | o(41180001): ADD R1, R1, 1H |
0EBB | p(82E0000C): LDR R2, SP, CH |
0EBC | p(82200010): LDR R2, R2, 10H |
0EBD | q(43000000): MOV R3, R0, 0H |
0EBE | r(F7FFF1B2): BL -3662 [0071H] |
0EBF | s(40000008): MOV R0, R0, 8H |
0EC0 | t(81E0000C): LDR R1, SP, CH |
0EC1 | t(81100010): LDR R1, R1, 10H |
0EC2 | u(82E0000C): LDR R2, SP, CH |
0EC3 | u(82200010): LDR R2, R2, 10H |
0EC4 | v(43000004): MOV R3, R0, 4H |
0EC5 | w(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 |
0EC6 | x(4000000A): MOV R0, R0, AH |
0EC7 | y .FIXUP D |
0EC7 | y(8D00000F): LDR SB, MT, MOD0 [ORG] |
0EC8 | y(81D0002C): LDR R1, SB, 2CH [data] |
0EC9 | y(41180001): ADD R1, R1, 1H |
0ECA | z(82E00004): LDR R2, SP, 4H |
0ECB | z(82200010): LDR R2, R2, 10H |
0ECC | a(43000000): MOV R3, R0, 0H |
0ECD | b(F7FFF1A3): BL -3677 [0071H] |
0ECE | c(40000008): MOV R0, R0, 8H |
0ECF | d(81E00004): LDR R1, SP, 4H |
0ED0 | d(81100010): LDR R1, R1, 10H |
0ED1 | e(82E00004): LDR R2, SP, 4H |
0ED2 | e(82200010): LDR R2, R2, 10H |
0ED3 | f(43000004): MOV R3, R0, 4H |
0ED4 | g(F7FFF149): BL -3767 [001EH] |
| Put1(Sub,h RH,i RH,j 1)k;l Put3(BC,m NE,n -6)o |
0ED5 | h(40000009): MOV R0, R0, 9H |
0ED6 | i .FIXUP D |
0ED6 | i(8D00000F): LDR SB, MT, MOD0 [ORG] |
0ED7 | i(81D0002C): LDR R1, SB, 2CH [data] |
0ED8 | j(82D0002C): LDR R2, SB, 2CH |
0ED9 | k(43000001): MOV R3, R0, 1H |
0EDA | l(F7FFF143): BL -3773 [001EH] |
0EDB | m(40000002): MOV R0, R0, 2H |
0EDC | n(41000009): MOV R1, R0, 9H |
0EDD | o(5200FFFA): MOV R2, R0, FFFFFFFAH |
| ENDp ; |
0EDE | p(F7FFF1B2): BL -3662 [0091H] |
| RH := 0 |
| ENDq StoreStruct; |
0EDF | q(40000000): MOV R0, R0, 0H |
0EE0 | q .FIXUP D |
0EE0 | q(8D00000A): LDR SB, MT, MOD0 [ORG] |
0EE1 | q(A0D0002C): STR R0, SB, 2CH [data] |
0EE2 | q(8FE00000): LDR LNK, SP, 0H |
0EE3 | q(4EE8001C): ADD SP, SP, 1CH |
0EE4 | q(C700000F): B LNK |
| |
| PROCEDURE CopyString*(VAR x, y: Item); (* x := y *) |
| VAR len: LONGINT; |
| BEGINr loadAdr(x)s;t len := x.type.lenu;v |
0EE5 | r .PROC 34 |
0EE5 | r(4EE90018): SUB SP, SP, 18H |
0EE6 | r(AFE00000): STR LNK, SP, 0H |
0EE7 | r(A0E00004): STR R0, SP, 4H |
0EE8 | r(A1E00008): STR R1, SP, 8H |
0EE9 | r(A2E0000C): STR R2, SP, CH |
0EEA | r(A3E00010): STR R3, SP, 10H |
0EEB | s(80E00004): LDR R0, SP, 4H |
0EEC | s(81E00008): LDR R1, SP, 8H |
0EED | t(F7FFF3CE): BL -3122 [02BCH] |
0EEE | u(80E00004): LDR R0, SP, 4H |
0EEF | u(80000004): LDR R0, R0, 4H |
0EF0 | u(D15C9E4C): BLEQ MT [trap=4, pos=23710] |
0EF1 | v(80000010): LDR R0, R0, 10H |
0EF2 | v(A0E00014): STR R0, SP, 14H |
| IF len >= 0 THENw |
0EF3 | w(80E00014): LDR R0, SP, 14H |
0EF4 | w(40090000): SUB R0, R0, 0H |
0EF5 | w(E500000A): BLT 10 [0F00H] |
| IF len < y.b THENx ORS.Mark("string too long")y ENDz |
0EF6 | x(80E00014): LDR R0, SP, 14H |
0EF7 | x(81E0000C): LDR R1, SP, CH |
0EF8 | x(8110000C): LDR R1, R1, CH |
0EF9 | x(00090001): SUB R0, R0, R1 |
0EFA | x(ED000004): BGE 4 [0EFFH] |
0EFB | y .FIXUP D |
0EFB | y(8D00001B): LDR SB, MT, MOD0 [ORG] |
0EFC | y(40D88A28): ADD R0, SB, FFFF8A28H [data] |
0EFD | y(41000010): MOV R1, R0, 10H |
0EFE | z .FIXUP P |
0EFE | z(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*) |
0EFF | a(E7000015): B 21 [0F15H] |
0F00 | b .FIXUP D |
0F00 | b(8D000005): LDR SB, MT, MOD0 [ORG] |
0F01 | b(90D00044): LDR R0, SB, 44H [data] |
0F02 | b(E1000012): BEQ 18 [0F15H] |
0F03 | c(40000008): MOV R0, R0, 8H |
0F04 | d .FIXUP D |
0F04 | d(8D000004): LDR SB, MT, MOD0 [ORG] |
0F05 | d(81D0002C): LDR R1, SB, 2CH [data] |
0F06 | e(4200000E): MOV R2, R0, EH |
0F07 | f(83E00004): LDR R3, SP, 4H |
0F08 | f(83300008): LDR R3, R3, 8H |
0F09 | f(43380004): ADD R3, R3, 4H |
0F0A | g(F7FFF166): BL -3738 [0071H] |
| Put1(Cmp,hRH,i RH,j y.b)k;l Trap(LT,m 3)n |
0F0B | h(40000009): MOV R0, R0, 9H |
0F0C | i .FIXUP D |
0F0C | i(8D000008): LDR SB, MT, MOD0 [ORG] |
0F0D | i(81D0002C): LDR R1, SB, 2CH [data] |
0F0E | j(82D0002C): LDR R2, SB, 2CH |
0F0F | k(83E0000C): LDR R3, SP, CH |
0F10 | k(8330000C): LDR R3, R3, CH |
0F11 | l(F7FFF10C): BL -3828 [001EH] |
0F12 | m(40000005): MOV R0, R0, 5H |
0F13 | n(41000003): MOV R1, R0, 3H |
| ENDo ; |
0F14 | o(F7FFF1D7): BL -3625 [00ECH] |
| loadStringAdr(y)p;q |
0F15 | p(80E0000C): LDR R0, SP, CH |
0F16 | p(81E00010): LDR R1, SP, 10H |
0F17 | q(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 |
0F18 | r(40000008): MOV R0, R0, 8H |
0F19 | s .FIXUP D |
0F19 | s(8D00000D): LDR SB, MT, MOD0 [ORG] |
0F1A | s(81D0002C): LDR R1, SB, 2CH [data] |
0F1B | t(82E0000C): LDR R2, SP, CH |
0F1C | t(82200010): LDR R2, R2, 10H |
0F1D | u(43000000): MOV R3, R0, 0H |
0F1E | v(F7FFF152): BL -3758 [0071H] |
0F1F | w(40000008): MOV R0, R0, 8H |
0F20 | x(81E0000C): LDR R1, SP, CH |
0F21 | x(81100010): LDR R1, R1, 10H |
0F22 | y(82E0000C): LDR R2, SP, CH |
0F23 | y(82200010): LDR R2, R2, 10H |
0F24 | z(43000004): MOV R3, R0, 4H |
0F25 | a(F7FFF0F8): BL -3848 [001EH] |
| Put2(Str,b RH,c x.r,d 0)e;f Put1(Add,g x.r,h x.r,i 4)j;k |
0F26 | b(4000000A): MOV R0, R0, AH |
0F27 | c .FIXUP D |
0F27 | c(8D00000E): LDR SB, MT, MOD0 [ORG] |
0F28 | c(81D0002C): LDR R1, SB, 2CH [data] |
0F29 | d(82E00004): LDR R2, SP, 4H |
0F2A | d(82200010): LDR R2, R2, 10H |
0F2B | e(43000000): MOV R3, R0, 0H |
0F2C | f(F7FFF144): BL -3772 [0071H] |
0F2D | g(40000008): MOV R0, R0, 8H |
0F2E | h(81E00004): LDR R1, SP, 4H |
0F2F | h(81100010): LDR R1, R1, 10H |
0F30 | i(82E00004): LDR R2, SP, 4H |
0F31 | i(82200010): LDR R2, R2, 10H |
0F32 | j(43000004): MOV R3, R0, 4H |
0F33 | k(F7FFF0EA): BL -3862 [001EH] |
| Put1(Asr,l RH,m RH,n 24)o;p Put3(BC,q NE,r -6)s;t RH := 0 |
0F34 | l(40000002): MOV R0, R0, 2H |
0F35 | m .FIXUP D |
0F35 | m(8D00000E): LDR SB, MT, MOD0 [ORG] |
0F36 | m(81D0002C): LDR R1, SB, 2CH [data] |
0F37 | n(82D0002C): LDR R2, SB, 2CH |
0F38 | o(43000018): MOV R3, R0, 18H |
0F39 | p(F7FFF0E4): BL -3868 [001EH] |
0F3A | q(40000002): MOV R0, R0, 2H |
0F3B | r(41000009): MOV R1, R0, 9H |
0F3C | s(5200FFFA): MOV R2, R0, FFFFFFFAH |
0F3D | t(F7FFF153): BL -3757 [0091H] |
| ENDu CopyString; |
0F3E | u(40000000): MOV R0, R0, 0H |
0F3F | u .FIXUP D |
0F3F | u(8D00000A): LDR SB, MT, MOD0 [ORG] |
0F40 | u(A0D0002C): STR R0, SB, 2CH [data] |
0F41 | u(8FE00000): LDR LNK, SP, 0H |
0F42 | u(4EE80018): ADD SP, SP, 18H |
0F43 | u(C700000F): B LNK |
| |
| (* Code generation for parameters *) |
| |
| PROCEDURE OpenArrayParam*(VAR x: Item); |
| BEGINv loadAdr(x)w;x |
0F44 | v .PROC 35 |
0F44 | v(4EE9000C): SUB SP, SP, CH |
0F45 | v(AFE00000): STR LNK, SP, 0H |
0F46 | v(A0E00004): STR R0, SP, 4H |
0F47 | v(A1E00008): STR R1, SP, 8H |
0F48 | w(80E00004): LDR R0, SP, 4H |
0F49 | w(81E00008): LDR R1, SP, 8H |
0F4A | x(F7FFF371): BL -3215 [02BCH] |
| IF x.type.leny >= 0 THENz Put1a(Mov,a RH,b 0,c x.type.lend)e ELSEf Put2g(Ldr,h RH,i SP,j x.a+4+kframe)l ENDm ; |
0F4B | y(80E00004): LDR R0, SP, 4H |
0F4C | y(80000004): LDR R0, R0, 4H |
0F4D | y(D15EAF4C): BLEQ MT [trap=4, pos=24239] |
0F4E | z(80000010): LDR R0, R0, 10H |
0F4F | z(40090000): SUB R0, R0, 0H |
0F50 | z(E500000A): BLT 10 [0F5BH] |
0F51 | a(40000000): MOV R0, R0, 0H |
0F52 | b .FIXUP D |
0F52 | b(8D000013): LDR SB, MT, MOD0 [ORG] |
0F53 | b(81D0002C): LDR R1, SB, 2CH [data] |
0F54 | c(42000000): MOV R2, R0, 0H |
0F55 | d(83E00004): LDR R3, SP, 4H |
0F56 | d(83300004): LDR R3, R3, 4H |
0F57 | d(D15ED64C): BLEQ MT [trap=4, pos=24278] |
0F58 | e(83300010): LDR R3, R3, 10H |
0F59 | f(F7FFF0EA): BL -3862 [0044H] |
0F5A | g(E700000A): B 10 [0F65H] |
0F5B | h(40000008): MOV R0, R0, 8H |
0F5C | i .FIXUP D |
0F5C | i(8D00000A): LDR SB, MT, MOD0 [ORG] |
0F5D | i(81D0002C): LDR R1, SB, 2CH [data] |
0F5E | j(4200000E): MOV R2, R0, EH |
0F5F | k(83E00004): LDR R3, SP, 4H |
0F60 | k(83300008): LDR R3, R3, 8H |
0F61 | k(43380004): ADD R3, R3, 4H |
0F62 | l(84D00034): LDR R4, SB, 34H |
0F63 | l(03380004): ADD R3, R3, R4 |
0F64 | m(F7FFF10C): BL -3828 [0071H] |
| incR |
| ENDn OpenArrayParam; |
0F65 | n(F7FFF148): BL -3768 [00AEH] |
0F66 | n(8FE00000): LDR LNK, SP, 0H |
0F67 | n(4EE8000C): ADD SP, SP, CH |
0F68 | n(C700000F): B LNK |
| |
| PROCEDURE VarParam*(VAR x: Item; ftype: ORB.Type); |
| VAR xmd: INTEGER; |
| BEGINo xmd := x.mode;p loadAdr(x)q;r |
0F69 | o .PROC 36 |
0F69 | o(4EE90014): SUB SP, SP, 14H |
0F6A | o(AFE00000): STR LNK, SP, 0H |
0F6B | o(A0E00004): STR R0, SP, 4H |
0F6C | o(A1E00008): STR R1, SP, 8H |
0F6D | o(A2E0000C): STR R2, SP, CH |
0F6E | p(80E00004): LDR R0, SP, 4H |
0F6F | p(80000000): LDR R0, R0, 0H |
0F70 | p(A0E00010): STR R0, SP, 10H |
0F71 | q(80E00004): LDR R0, SP, 4H |
0F72 | q(81E00008): LDR R1, SP, 8H |
0F73 | r(F7FFF348): BL -3256 [02BCH] |
| IF (ftype.forms = ORB.Array)t & (uftype.lenv < 0)w THENx (*open array*) |
0F74 | s(80E0000C): LDR R0, SP, CH |
0F75 | s(D15FA24C): BLEQ MT [trap=4, pos=24482] |
0F76 | t(80000000): LDR R0, R0, 0H |
0F77 | t(4009000C): SUB R0, R0, CH |
0F78 | u(E9000021): BNE 33 [0F9AH] |
0F79 | v(80E0000C): LDR R0, SP, CH |
0F7A | v(D15FBC4C): BLEQ MT [trap=4, pos=24508] |
0F7B | w(80000010): LDR R0, R0, 10H |
0F7C | w(40090000): SUB R0, R0, 0H |
0F7D | x(ED00001C): BGE 28 [0F9AH] |
| IF x.type.leny >= 0 THENz Put1a(Mov,a RH,b 0,c x.type.lend)e ELSEf Put2g(Ldr,h RH,i SP,j x.a+4+kframe)l ENDm ; |
0F7E | y(80E00004): LDR R0, SP, 4H |
0F7F | y(80000004): LDR R0, R0, 4H |
0F80 | y(D15FE94C): BLEQ MT [trap=4, pos=24553] |
0F81 | z(80000010): LDR R0, R0, 10H |
0F82 | z(40090000): SUB R0, R0, 0H |
0F83 | z(E500000A): BLT 10 [0F8EH] |
0F84 | a(40000000): MOV R0, R0, 0H |
0F85 | b .FIXUP D |
0F85 | b(8D000029): LDR SB, MT, MOD0 [ORG] |
0F86 | b(81D0002C): LDR R1, SB, 2CH [data] |
0F87 | c(42000000): MOV R2, R0, 0H |
0F88 | d(83E00004): LDR R3, SP, 4H |
0F89 | d(83300004): LDR R3, R3, 4H |
0F8A | d(D160104C): BLEQ MT [trap=4, pos=24592] |
0F8B | e(83300010): LDR R3, R3, 10H |
0F8C | f(F7FFF0B7): BL -3913 [0044H] |
0F8D | g(E700000A): B 10 [0F98H] |
0F8E | h(40000008): MOV R0, R0, 8H |
0F8F | i .FIXUP D |
0F8F | i(8D00000A): LDR SB, MT, MOD0 [ORG] |
0F90 | i(81D0002C): LDR R1, SB, 2CH [data] |
0F91 | j(4200000E): MOV R2, R0, EH |
0F92 | k(83E00004): LDR R3, SP, 4H |
0F93 | k(83300008): LDR R3, R3, 8H |
0F94 | k(43380004): ADD R3, R3, 4H |
0F95 | l(84D00034): LDR R4, SB, 34H |
0F96 | l(03380004): ADD R3, R3, R4 |
0F97 | m(F7FFF0D9): BL -3879 [0071H] |
| incR |
| ELSIFn ftypeo.formp = ORB.Record THENq |
0F98 | n(F7FFF115): BL -3819 [00AEH] |
0F99 | o(E7000017): B 23 [0FB1H] |
0F9A | p(80E0000C): LDR R0, SP, CH |
0F9B | p(D1605C4C): BLEQ MT [trap=4, pos=24668] |
0F9C | q(80000000): LDR R0, R0, 0H |
0F9D | q(4009000D): SUB R0, R0, DH |
0F9E | q(E9000012): BNE 18 [0FB1H] |
| IF xmd = ORB.Par THENr Put2(Ldr,s RH,t SP,u x.a+4+vframe)w;x incR ELSEy loadTypTagAdrz(x.type)a ENDb |
0F9F | r(80E00010): LDR R0, SP, 10H |
0FA0 | r(40090003): SUB R0, R0, 3H |
0FA1 | r(E900000C): BNE 12 [0FAEH] |
0FA2 | s(40000008): MOV R0, R0, 8H |
0FA3 | t .FIXUP D |
0FA3 | t(8D000014): LDR SB, MT, MOD0 [ORG] |
0FA4 | t(81D0002C): LDR R1, SB, 2CH [data] |
0FA5 | u(4200000E): MOV R2, R0, EH |
0FA6 | v(83E00004): LDR R3, SP, 4H |
0FA7 | v(83300008): LDR R3, R3, 8H |
0FA8 | v(43380004): ADD R3, R3, 4H |
0FA9 | w(84D00034): LDR R4, SB, 34H |
0FAA | w(03380004): ADD R3, R3, R4 |
0FAB | x(F7FFF0C5): BL -3899 [0071H] |
0FAC | y(F7FFF101): BL -3839 [00AEH] |
0FAD | z(E7000003): B 3 [0FB1H] |
0FAE | a(80E00004): LDR R0, SP, 4H |
0FAF | a(80000004): LDR R0, R0, 4H |
0FB0 | b(F7FFF3AC): BL -3156 [035DH] |
| END |
| ENDc VarParam; |
0FB1 | c(8FE00000): LDR LNK, SP, 0H |
0FB2 | c(4EE80014): ADD SP, SP, 14H |
0FB3 | c(C700000F): B LNK |
| |
| PROCEDURE ValueParam*(VAR x: Item); |
| BEGINd load(x)e |
0FB4 | d .PROC 37 |
0FB4 | d(4EE9000C): SUB SP, SP, CH |
0FB5 | d(AFE00000): STR LNK, SP, 0H |
0FB6 | d(A0E00004): STR R0, SP, 4H |
0FB7 | d(A1E00008): STR R1, SP, 8H |
0FB8 | e(80E00004): LDR R0, SP, 4H |
0FB9 | e(81E00008): LDR R1, SP, 8H |
| ENDf ValueParam; |
0FBA | f(F7FFF218): BL -3560 [01D3H] |
0FBB | f(8FE00000): LDR LNK, SP, 0H |
0FBC | f(4EE8000C): ADD SP, SP, CH |
0FBD | f(C700000F): B LNK |
| |
| PROCEDURE StringParam*(VAR x: Item); |
| BEGINg loadStringAdr(x)h;i Put1(Mov,j RH,k 0,l x.b)m;n incR (*len*) |
0FBE | g .PROC 38 |
0FBE | g(4EE9000C): SUB SP, SP, CH |
0FBF | g(AFE00000): STR LNK, SP, 0H |
0FC0 | g(A0E00004): STR R0, SP, 4H |
0FC1 | g(A1E00008): STR R1, SP, 8H |
0FC2 | h(80E00004): LDR R0, SP, 4H |
0FC3 | h(81E00008): LDR R1, SP, 8H |
0FC4 | i(F7FFF3AE): BL -3154 [0373H] |
0FC5 | j(40000000): MOV R0, R0, 0H |
0FC6 | k .FIXUP D |
0FC6 | k(8D000023): LDR SB, MT, MOD0 [ORG] |
0FC7 | k(81D0002C): LDR R1, SB, 2CH [data] |
0FC8 | l(42000000): MOV R2, R0, 0H |
0FC9 | m(83E00004): LDR R3, SP, 4H |
0FCA | m(8330000C): LDR R3, R3, CH |
0FCB | n(F7FFF052): BL -4014 [001EH] |
| ENDo StringParam; |
0FCC | o(F7FFF0E1): BL -3871 [00AEH] |
0FCD | o(8FE00000): LDR LNK, SP, 0H |
0FCE | o(4EE8000C): ADD SP, SP, CH |
0FCF | o(C700000F): B LNK |
| |
| (*For Statements*) |
| |
| PROCEDURE For0*(VAR x, y: Item); |
| BEGINp load(y)q |
0FD0 | p .PROC 39 |
0FD0 | p(4EE90014): SUB SP, SP, 14H |
0FD1 | p(AFE00000): STR LNK, SP, 0H |
0FD2 | p(A0E00004): STR R0, SP, 4H |
0FD3 | p(A1E00008): STR R1, SP, 8H |
0FD4 | p(A2E0000C): STR R2, SP, CH |
0FD5 | p(A3E00010): STR R3, SP, 10H |
0FD6 | q(80E0000C): LDR R0, SP, CH |
0FD7 | q(81E00010): LDR R1, SP, 10H |
| ENDr For0; |
0FD8 | r(F7FFF1FA): BL -3590 [01D3H] |
0FD9 | r(8FE00000): LDR LNK, SP, 0H |
0FDA | r(4EE80014): ADD SP, SP, 14H |
0FDB | r(C700000F): B LNK |
| |
| PROCEDURE For1*(VAR x, y, z, w: Item; VAR L: LONGINT); |
| BEGINs |
0FDC | s .PROC 40 |
0FDC | s(4EE90028): SUB SP, SP, 28H |
0FDD | s(AFE00000): STR LNK, SP, 0H |
0FDE | s(A0E00004): STR R0, SP, 4H |
0FDF | s(A1E00008): STR R1, SP, 8H |
0FE0 | s(A2E0000C): STR R2, SP, CH |
0FE1 | s(A3E00010): STR R3, SP, 10H |
0FE2 | s(A4E00014): STR R4, SP, 14H |
0FE3 | s(A5E00018): STR R5, SP, 18H |
0FE4 | s(A6E0001C): STR R6, SP, 1CH |
0FE5 | s(A7E00020): STR R7, SP, 20H |
0FE6 | s(A8E00024): STR R8, SP, 24H |
| IF z.mode = ORB.Const THENt Put1a(Cmp,u RH,v y.r,w z.a)x |
0FE7 | t(80E00014): LDR R0, SP, 14H |
0FE8 | t(80000000): LDR R0, R0, 0H |
0FE9 | t(40090001): SUB R0, R0, 1H |
0FEA | t(E9000009): BNE 9 [0FF4H] |
0FEB | u(40000009): MOV R0, R0, 9H |
0FEC | v .FIXUP D |
0FEC | v(8D000026): LDR SB, MT, MOD0 [ORG] |
0FED | v(81D0002C): LDR R1, SB, 2CH [data] |
0FEE | w(82E0000C): LDR R2, SP, CH |
0FEF | w(82200010): LDR R2, R2, 10H |
0FF0 | x(83E00014): LDR R3, SP, 14H |
0FF1 | x(83300008): LDR R3, R3, 8H |
| ELSEy loadz(z)a;b Put0(Cmp,c RH-1,d y.r,e z.r)f;g DEC(RH) |
0FF2 | y(F7FFF051): BL -4015 [0044H] |
0FF3 | z(E7000011): B 17 [1005H] |
0FF4 | a(80E00014): LDR R0, SP, 14H |
0FF5 | a(81E00018): LDR R1, SP, 18H |
0FF6 | b(F7FFF1DC): BL -3620 [01D3H] |
0FF7 | c(40000009): MOV R0, R0, 9H |
0FF8 | d .FIXUP D |
0FF8 | d(8D00000C): LDR SB, MT, MOD0 [ORG] |
0FF9 | d(81D0002C): LDR R1, SB, 2CH [data] |
0FFA | d(41190001): SUB R1, R1, 1H |
0FFB | e(82E0000C): LDR R2, SP, CH |
0FFC | e(82200010): LDR R2, R2, 10H |
0FFD | f(83E00014): LDR R3, SP, 14H |
0FFE | f(83300010): LDR R3, R3, 10H |
0FFF | g(F7FFF000): BL -4096 [0000H] |
| ENDh ; |
1000 | h .FIXUP D |
1000 | h(8D000008): LDR SB, MT, MOD0 [ORG] |
1001 | h(40D8002C): ADD R0, SB, 2CH [data] |
1002 | h(81000000): LDR R1, R0, 0H |
1003 | h(41190001): SUB R1, R1, 1H |
1004 | h(A1000000): STR R1, R0, 0H |
| L := pc;i |
1005 | i .FIXUP D |
1005 | i(8D000005): LDR SB, MT, MOD0 [ORG] |
1006 | i(80D00018): LDR R0, SB, 18H [data] |
1007 | i(81E00024): LDR R1, SP, 24H |
1008 | i(A0100000): STR R0, R1, 0H |
| IF w.a > 0 THENj Put3(BC,k GT,l 0)m |
1009 | j(80E0001C): LDR R0, SP, 1CH |
100A | j(80000008): LDR R0, R0, 8H |
100B | j(40090000): SUB R0, R0, 0H |
100C | j(E6000005): BLE 5 [1012H] |
100D | k(40000002): MOV R0, R0, 2H |
100E | l(4100000E): MOV R1, R0, EH |
100F | m(42000000): MOV R2, R0, 0H |
| ELSIFn wo.a < 0 THENp Put3(BC,q LT,r 0)s |
1010 | n(F7FFF080): BL -3968 [0091H] |
1011 | o(E7000011): B 17 [1023H] |
1012 | p(80E0001C): LDR R0, SP, 1CH |
1013 | p(80000008): LDR R0, R0, 8H |
1014 | p(40090000): SUB R0, R0, 0H |
1015 | p(ED000005): BGE 5 [101BH] |
1016 | q(40000002): MOV R0, R0, 2H |
1017 | r(41000005): MOV R1, R0, 5H |
1018 | s(42000000): MOV R2, R0, 0H |
| ELSEt ORSu.Mark("zero increment")v;w Put3(BC,x MI,y 0)z |
1019 | t(F7FFF077): BL -3977 [0091H] |
101A | u(E7000008): B 8 [1023H] |
101B | v .FIXUP D |
101B | v(8D000016): LDR SB, MT, MOD0 [ORG] |
101C | v(40D88A38): ADD R0, SB, FFFF8A38H [data] |
101D | v(4100000F): MOV R1, R0, FH |
101E | w .FIXUP P |
101E | w(F7209120): BL MOD2 [ORS] PROC9 |
101F | x(40000002): MOV R0, R0, 2H |
1020 | y(41000000): MOV R1, R0, 0H |
1021 | z(42000000): MOV R2, R0, 0H |
| ENDa ; |
1022 | a(F7FFF06E): BL -3986 [0091H] |
| Store(x,b y)c |
1023 | b(80E00004): LDR R0, SP, 4H |
1024 | b(81E00008): LDR R1, SP, 8H |
1025 | c(82E0000C): LDR R2, SP, CH |
1026 | c(83E00010): LDR R3, SP, 10H |
| ENDd For1; |
1027 | d(F7FFFD84): BL -636 [0DACH] |
1028 | d(8FE00000): LDR LNK, SP, 0H |
1029 | d(4EE80028): ADD SP, SP, 28H |
102A | d(C700000F): B LNK |
| |
| PROCEDURE For2*(VAR x, y, w: Item); |
| BEGINe load(x)f;g DEC(RH);h Put1a(Add,i x.r,j x.r,k w.a)l |
102B | e .PROC 41 |
102B | e(4EE9001C): SUB SP, SP, 1CH |
102C | e(AFE00000): STR LNK, SP, 0H |
102D | e(A0E00004): STR R0, SP, 4H |
102E | e(A1E00008): STR R1, SP, 8H |
102F | e(A2E0000C): STR R2, SP, CH |
1030 | e(A3E00010): STR R3, SP, 10H |
1031 | e(A4E00014): STR R4, SP, 14H |
1032 | e(A5E00018): STR R5, SP, 18H |
1033 | f(80E00004): LDR R0, SP, 4H |
1034 | f(81E00008): LDR R1, SP, 8H |
1035 | g(F7FFF19D): BL -3683 [01D3H] |
1036 | h .FIXUP D |
1036 | h(8D00001B): LDR SB, MT, MOD0 [ORG] |
1037 | h(40D8002C): ADD R0, SB, 2CH [data] |
1038 | h(81000000): LDR R1, R0, 0H |
1039 | h(41190001): SUB R1, R1, 1H |
103A | h(A1000000): STR R1, R0, 0H |
103B | i(40000008): MOV R0, R0, 8H |
103C | j(81E00004): LDR R1, SP, 4H |
103D | j(81100010): LDR R1, R1, 10H |
103E | k(82E00004): LDR R2, SP, 4H |
103F | k(82200010): LDR R2, R2, 10H |
1040 | l(83E00014): LDR R3, SP, 14H |
1041 | l(83300008): LDR R3, R3, 8H |
| ENDm For2; |
1042 | m(F7FFF001): BL -4095 [0044H] |
1043 | m(8FE00000): LDR LNK, SP, 0H |
1044 | m(4EE8001C): ADD SP, SP, 1CH |
1045 | m(C700000F): B LNK |
| |
| (* Branches, procedure calls, procedure prolog and epilog *) |
| |
| PROCEDURE Here*(): LONGINT; |
| BEGINn invalSB;o RETURN pc |
1046 | n .PROC 42 |
1046 | n(4EE90004): SUB SP, SP, 4H |
1047 | n(AFE00000): STR LNK, SP, 0H |
1048 | o(F7FFF0CB): BL -3893 [0114H] |
| ENDp Here; |
1049 | p .FIXUP D |
1049 | p(8D000013): LDR SB, MT, MOD0 [ORG] |
104A | p(80D00018): LDR R0, SB, 18H [data] |
104B | p(8FE00000): LDR LNK, SP, 0H |
104C | p(4EE80004): ADD SP, SP, 4H |
104D | p(C700000F): B LNK |
| |
| PROCEDURE FJump*(VAR L: LONGINT); |
| BEGINq Put3(BC,r 7,s L)t;u L := pc-1 |
104E | q .PROC 43 |
104E | q(4EE90008): SUB SP, SP, 8H |
104F | q(AFE00000): STR LNK, SP, 0H |
1050 | q(A0E00004): STR R0, SP, 4H |
1051 | r(40000002): MOV R0, R0, 2H |
1052 | s(41000007): MOV R1, R0, 7H |
1053 | t(82E00004): LDR R2, SP, 4H |
1054 | t(82200000): LDR R2, R2, 0H |
1055 | u(F7FFF03B): BL -4037 [0091H] |
| ENDv FJump; |
1056 | v .FIXUP D |
1056 | v(8D00000D): LDR SB, MT, MOD0 [ORG] |
1057 | v(80D00018): LDR R0, SB, 18H [data] |
1058 | v(40090001): SUB R0, R0, 1H |
1059 | v(81E00004): LDR R1, SP, 4H |
105A | v(A0100000): STR R0, R1, 0H |
105B | v(8FE00000): LDR LNK, SP, 0H |
105C | v(4EE80008): ADD SP, SP, 8H |
105D | v(C700000F): B LNK |
| |
| PROCEDURE CFJump*(VAR x: Item); |
| BEGINw |
105E | w .PROC 44 |
105E | w(4EE9000C): SUB SP, SP, CH |
105F | w(AFE00000): STR LNK, SP, 0H |
1060 | w(A0E00004): STR R0, SP, 4H |
1061 | w(A1E00008): STR R1, SP, 8H |
| IF x.mode # Cond THENx loadCond(x)y ENDz ; |
1062 | x(80E00004): LDR R0, SP, 4H |
1063 | x(80000000): LDR R0, R0, 0H |
1064 | x(4009000C): SUB R0, R0, CH |
1065 | x(E1000003): BEQ 3 [1069H] |
1066 | y(80E00004): LDR R0, SP, 4H |
1067 | y(81E00008): LDR R1, SP, 8H |
1068 | z(F7FFF2B0): BL -3408 [0319H] |
| Put3(BC,a negated(xb.r)c,d x.a)e;f FixLink(x.b)g;h x.a := pc-1 |
1069 | a(40000002): MOV R0, R0, 2H |
106A | b(4EE90004): SUB SP, SP, 4H |
106B | b(A0E00000): STR R0, SP, 0H |
106C | c(80E00008): LDR R0, SP, 8H |
106D | c(80000010): LDR R0, R0, 10H |
106E | d(F7FFF094): BL -3948 [0103H] |
106F | d(01000000): MOV R1, R0, R0 |
1070 | d(80E00000): LDR R0, SP, 0H |
1071 | d(4EE80004): ADD SP, SP, 4H |
1072 | e(82E00004): LDR R2, SP, 4H |
1073 | e(82200008): LDR R2, R2, 8H |
1074 | f(F7FFF01C): BL -4068 [0091H] |
1075 | g(80E00004): LDR R0, SP, 4H |
1076 | g(8000000C): LDR R0, R0, CH |
1077 | h(F7FFF0BE): BL -3906 [0136H] |
| ENDi CFJump; |
1078 | i .FIXUP D |
1078 | i(8D000022): LDR SB, MT, MOD0 [ORG] |
1079 | i(80D00018): LDR R0, SB, 18H [data] |
107A | i(40090001): SUB R0, R0, 1H |
107B | i(81E00004): LDR R1, SP, 4H |
107C | i(A0100008): STR R0, R1, 8H |
107D | i(8FE00000): LDR LNK, SP, 0H |
107E | i(4EE8000C): ADD SP, SP, CH |
107F | i(C700000F): B LNK |
| |
| PROCEDURE BJump*(L: LONGINT); |
| BEGINj Put3(BC,k 7,l L-pc-m1)n |
1080 | j .PROC 45 |
1080 | j(4EE90008): SUB SP, SP, 8H |
1081 | j(AFE00000): STR LNK, SP, 0H |
1082 | j(A0E00004): STR R0, SP, 4H |
1083 | k(40000002): MOV R0, R0, 2H |
1084 | l(41000007): MOV R1, R0, 7H |
1085 | m(82E00004): LDR R2, SP, 4H |
1086 | m .FIXUP D |
1086 | m(8D00000E): LDR SB, MT, MOD0 [ORG] |
1087 | m(83D00018): LDR R3, SB, 18H [data] |
1088 | m(02290003): SUB R2, R2, R3 |
1089 | n(42290001): SUB R2, R2, 1H |
| ENDo BJump; |
108A | o(F7FFF006): BL -4090 [0091H] |
108B | o(8FE00000): LDR LNK, SP, 0H |
108C | o(4EE80008): ADD SP, SP, 8H |
108D | o(C700000F): B LNK |
| |
| PROCEDURE CBJump*(VAR x: Item; L: LONGINT); |
| BEGINp |
108E | p .PROC 46 |
108E | p(4EE90010): SUB SP, SP, 10H |
108F | p(AFE00000): STR LNK, SP, 0H |
1090 | p(A0E00004): STR R0, SP, 4H |
1091 | p(A1E00008): STR R1, SP, 8H |
1092 | p(A2E0000C): STR R2, SP, CH |
| IF x.mode # Cond THENq loadCond(x)r ENDs ; |
1093 | q(80E00004): LDR R0, SP, 4H |
1094 | q(80000000): LDR R0, R0, 0H |
1095 | q(4009000C): SUB R0, R0, CH |
1096 | q(E1000003): BEQ 3 [109AH] |
1097 | r(80E00004): LDR R0, SP, 4H |
1098 | r(81E00008): LDR R1, SP, 8H |
1099 | s(F7FFF27F): BL -3457 [0319H] |
| Put3(BC,t negated(xu.r)v,w L-pc-x1)y;z FixLink(x.b)a;b FixLinkWith(x.a,c L)d |
109A | t(40000002): MOV R0, R0, 2H |
109B | u(4EE90004): SUB SP, SP, 4H |
109C | u(A0E00000): STR R0, SP, 0H |
109D | v(80E00008): LDR R0, SP, 8H |
109E | v(80000010): LDR R0, R0, 10H |
109F | w(F7FFF063): BL -3997 [0103H] |
10A0 | w(01000000): MOV R1, R0, R0 |
10A1 | w(80E00000): LDR R0, SP, 0H |
10A2 | w(4EE80004): ADD SP, SP, 4H |
10A3 | x(82E0000C): LDR R2, SP, CH |
10A4 | x .FIXUP D |
10A4 | x(8D00001E): LDR SB, MT, MOD0 [ORG] |
10A5 | x(83D00018): LDR R3, SB, 18H [data] |
10A6 | x(02290003): SUB R2, R2, R3 |
10A7 | y(42290001): SUB R2, R2, 1H |
10A8 | z(F7FFEFE8): BL -4120 [0091H] |
10A9 | a(80E00004): LDR R0, SP, 4H |
10AA | a(8000000C): LDR R0, R0, CH |
10AB | b(F7FFF08A): BL -3958 [0136H] |
10AC | c(80E00004): LDR R0, SP, 4H |
10AD | c(80000008): LDR R0, R0, 8H |
10AE | d(81E0000C): LDR R1, SP, CH |
| ENDe CBJump; |
10AF | e(F7FFF0A2): BL -3934 [0152H] |
10B0 | e(8FE00000): LDR LNK, SP, 0H |
10B1 | e(4EE80010): ADD SP, SP, 10H |
10B2 | e(C700000F): B LNK |
| |
| PROCEDURE Fixup*(VAR x: Item); |
| BEGINf FixLink(x.a)g |
10B3 | f .PROC 47 |
10B3 | f(4EE9000C): SUB SP, SP, CH |
10B4 | f(AFE00000): STR LNK, SP, 0H |
10B5 | f(A0E00004): STR R0, SP, 4H |
10B6 | f(A1E00008): STR R1, SP, 8H |
10B7 | g(80E00004): LDR R0, SP, 4H |
10B8 | g(80000008): LDR R0, R0, 8H |
| ENDh Fixup; |
10B9 | h(F7FFF07C): BL -3972 [0136H] |
10BA | h(8FE00000): LDR LNK, SP, 0H |
10BB | h(4EE8000C): ADD SP, SP, CH |
10BC | h(C700000F): B LNK |
| |
| PROCEDURE SaveRegs(r: LONGINT); (* R[0 .. r-1]*) |
| VAR r0: LONGINT; |
| BEGINi (*r > 0*) r0 := 0;j |
10BD | i(4EE9000C): SUB SP, SP, CH |
10BE | i(AFE00000): STR LNK, SP, 0H |
10BF | i(A0E00004): STR R0, SP, 4H |
10C0 | j(40000000): MOV R0, R0, 0H |
10C1 | j(A0E00008): STR R0, SP, 8H |
| Put1(Sub,k SP,l SP,m r*4)n;o INC(frame, 4*r)p;q |
10C2 | k(40000009): MOV R0, R0, 9H |
10C3 | l(4100000E): MOV R1, R0, EH |
10C4 | m(4200000E): MOV R2, R0, EH |
10C5 | n(83E00004): LDR R3, SP, 4H |
10C6 | n(43310002): LSL R3, R3, 2H |
10C7 | o(F7FFEF56): BL -4266 [001EH] |
10C8 | p(80E00004): LDR R0, SP, 4H |
10C9 | p(40010002): LSL R0, R0, 2H |
10CA | q .FIXUP D |
10CA | q(8D000026): LDR SB, MT, MOD0 [ORG] |
10CB | q(41D80034): ADD R1, SB, 34H [data] |
10CC | q(82100000): LDR R2, R1, 0H |
10CD | q(02280000): ADD R2, R2, R0 |
10CE | q(A2100000): STR R2, R1, 0H |
| REPEAT Put2(Str,r r0,s SP,t (r-r0-u1)v*4)w;x INC(r0) UNTILy r0 = r |
10CF | r(4000000A): MOV R0, R0, AH |
10D0 | s(81E00008): LDR R1, SP, 8H |
10D1 | t(4200000E): MOV R2, R0, EH |
10D2 | u(83E00004): LDR R3, SP, 4H |
10D3 | u(84E00008): LDR R4, SP, 8H |
10D4 | u(03390004): SUB R3, R3, R4 |
10D5 | v(43390001): SUB R3, R3, 1H |
10D6 | w(43310002): LSL R3, R3, 2H |
10D7 | x(F7FFEF99): BL -4199 [0071H] |
10D8 | y(80E00008): LDR R0, SP, 8H |
10D9 | y(40080001): ADD R0, R0, 1H |
10DA | y(A0E00008): STR R0, SP, 8H |
| ENDz SaveRegs; |
10DB | z(80E00008): LDR R0, SP, 8H |
10DC | z(81E00004): LDR R1, SP, 4H |
10DD | z(00090001): SUB R0, R0, R1 |
10DE | z(E9FFFFF0): BNE -16 [10CFH] |
10DF | z(8FE00000): LDR LNK, SP, 0H |
10E0 | z(4EE8000C): ADD SP, SP, CH |
10E1 | z(C700000F): B LNK |
| |
| PROCEDURE RestoreRegs(r: LONGINT); (*R[0 .. r-1]*) |
| VAR r0: LONGINT; |
| BEGINa (*r > 0*) r0 := r;b |
10E2 | a(4EE9000C): SUB SP, SP, CH |
10E3 | a(AFE00000): STR LNK, SP, 0H |
10E4 | a(A0E00004): STR R0, SP, 4H |
10E5 | b(80E00004): LDR R0, SP, 4H |
10E6 | b(A0E00008): STR R0, SP, 8H |
| REPEAT DEC(r0);c Put2(Ldr,d r0,e SP,f (r-r0-g1)h*4)i UNTILj r0 = 0;k |
10E7 | c(80E00008): LDR R0, SP, 8H |
10E8 | c(40090001): SUB R0, R0, 1H |
10E9 | c(A0E00008): STR R0, SP, 8H |
10EA | d(40000008): MOV R0, R0, 8H |
10EB | e(81E00008): LDR R1, SP, 8H |
10EC | f(4200000E): MOV R2, R0, EH |
10ED | g(83E00004): LDR R3, SP, 4H |
10EE | g(84E00008): LDR R4, SP, 8H |
10EF | g(03390004): SUB R3, R3, R4 |
10F0 | h(43390001): SUB R3, R3, 1H |
10F1 | i(43310002): LSL R3, R3, 2H |
10F2 | j(F7FFEF7E): BL -4226 [0071H] |
10F3 | k(80E00008): LDR R0, SP, 8H |
10F4 | k(E9FFFFF2): BNE -14 [10E7H] |
| Put1(Add,l SP,m SP,n r*4)o;p DEC(frame, 4*r)q |
10F5 | l(40000008): MOV R0, R0, 8H |
10F6 | m(4100000E): MOV R1, R0, EH |
10F7 | n(4200000E): MOV R2, R0, EH |
10F8 | o(83E00004): LDR R3, SP, 4H |
10F9 | o(43310002): LSL R3, R3, 2H |
10FA | p(F7FFEF23): BL -4317 [001EH] |
10FB | q(80E00004): LDR R0, SP, 4H |
10FC | q(40010002): LSL R0, R0, 2H |
| ENDr RestoreRegs; |
10FD | r .FIXUP D |
10FD | r(8D000033): LDR SB, MT, MOD0 [ORG] |
10FE | r(41D80034): ADD R1, SB, 34H [data] |
10FF | r(82100000): LDR R2, R1, 0H |
1100 | r(02290000): SUB R2, R2, R0 |
1101 | r(A2100000): STR R2, R1, 0H |
1102 | r(8FE00000): LDR LNK, SP, 0H |
1103 | r(4EE8000C): ADD SP, SP, CH |
1104 | r(C700000F): B LNK |
| |
| PROCEDURE PrepCall*(VAR x: Item; VAR r: LONGINT); |
| BEGINs (*x.type.form = ORB.Proc*) |
1105 | s .PROC 48 |
1105 | s(4EE90010): SUB SP, SP, 10H |
1106 | s(AFE00000): STR LNK, SP, 0H |
1107 | s(A0E00004): STR R0, SP, 4H |
1108 | s(A1E00008): STR R1, SP, 8H |
1109 | s(A2E0000C): STR R2, SP, CH |
| IF x.mode > ORB.Par THENt load(x)u ENDv ; |
110A | t(80E00004): LDR R0, SP, 4H |
110B | t(80000000): LDR R0, R0, 0H |
110C | t(40090003): SUB R0, R0, 3H |
110D | t(E6000003): BLE 3 [1111H] |
110E | u(80E00004): LDR R0, SP, 4H |
110F | u(81E00008): LDR R1, SP, 8H |
1110 | v(F7FFF0C2): BL -3902 [01D3H] |
| r := RH;w |
1111 | w .FIXUP D |
1111 | w(8D000014): LDR SB, MT, MOD0 [ORG] |
1112 | w(80D0002C): LDR R0, SB, 2CH [data] |
1113 | w(81E0000C): LDR R1, SP, CH |
1114 | w(A0100000): STR R0, R1, 0H |
| IF RH > 0 THENx SaveRegs(RH)y;z RH := 0 ENDa |
1115 | x(80D0002C): LDR R0, SB, 2CH |
1116 | x(40090000): SUB R0, R0, 0H |
1117 | x(E6000006): BLE 6 [111EH] |
1118 | y .FIXUP D |
1118 | y(8D000007): LDR SB, MT, MOD0 [ORG] |
1119 | y(80D0002C): LDR R0, SB, 2CH [data] |
111A | z(F7FFFFA2): BL -94 [10BDH] |
111B | a(40000000): MOV R0, R0, 0H |
111C | a .FIXUP D |
111C | a(8D000004): LDR SB, MT, MOD0 [ORG] |
111D | a(A0D0002C): STR R0, SB, 2CH [data] |
| ENDb PrepCall; |
111E | b(8FE00000): LDR LNK, SP, 0H |
111F | b(4EE80010): ADD SP, SP, 10H |
1120 | b(C700000F): B LNK |
| |
| PROCEDURE Call*(VAR x: Item; r: LONGINT); |
| BEGINc (*x.type.form = ORB.Proc*) |
1121 | c .PROC 49 |
1121 | c(4EE90010): SUB SP, SP, 10H |
1122 | c(AFE00000): STR LNK, SP, 0H |
1123 | c(A0E00004): STR R0, SP, 4H |
1124 | c(A1E00008): STR R1, SP, 8H |
1125 | c(A2E0000C): STR R2, SP, CH |
| IF x.mode = ORB.Const THENd |
1126 | d(80E00004): LDR R0, SP, 4H |
1127 | d(80000000): LDR R0, R0, 0H |
1128 | d(40090001): SUB R0, R0, 1H |
1129 | d(E9000030): BNE 48 [115AH] |
| IF x.r >= 0 THENe Put3(BL,f 7,g (x.a DIV 4)h-pc-i1)j |
112A | e(80E00004): LDR R0, SP, 4H |
112B | e(80000010): LDR R0, R0, 10H |
112C | e(40090000): SUB R0, R0, 0H |
112D | e(E500000B): BLT 11 [1139H] |
112E | f(40000003): MOV R0, R0, 3H |
112F | g(41000007): MOV R1, R0, 7H |
1130 | h(82E00004): LDR R2, SP, 4H |
1131 | h(82200008): LDR R2, R2, 8H |
1132 | h(42220002): ASR R2, R2, 2H |
1133 | i .FIXUP D |
1133 | i(8D000017): LDR SB, MT, MOD0 [ORG] |
1134 | i(83D00018): LDR R3, SB, 18H [data] |
1135 | i(02290003): SUB R2, R2, R3 |
1136 | j(42290001): SUB R2, R2, 1H |
| ELSEk (*imported*) |
1137 | k(F7FFEF59): BL -4263 [0091H] |
| IFl pc - fixorgP <m 1000H THENn |
1138 | l(E7000020): B 32 [1159H] |
1139 | m .FIXUP D |
1139 | m(8D000006): LDR SB, MT, MOD0 [ORG] |
113A | m(80D00018): LDR R0, SB, 18H [data] |
113B | m(81D00038): LDR R1, SB, 38H |
113C | m(00090001): SUB R0, R0, R1 |
113D | n(40091000): SUB R0, R0, 1000H |
113E | n(ED000016): BGE 22 [1155H] |
| Put3(BL,o 7,p ((-x.r)q * 100H +r x.a)s * 1000H +t pc-ufixorgP)v;w fixorgP := pc-1 |
113F | o(40000003): MOV R0, R0, 3H |
1140 | p(41000007): MOV R1, R0, 7H |
1141 | q(82E00004): LDR R2, SP, 4H |
1142 | q(82200010): LDR R2, R2, 10H |
1143 | q(43000000): MOV R3, R0, 0H |
1144 | q(02390002): SUB R2, R3, R2 |
1145 | r(42210008): LSL R2, R2, 8H |
1146 | s(83E00004): LDR R3, SP, 4H |
1147 | s(83300008): LDR R3, R3, 8H |
1148 | s(02280003): ADD R2, R2, R3 |
1149 | t(4221000C): LSL R2, R2, CH |
114A | u .FIXUP D |
114A | u(8D000011): LDR SB, MT, MOD0 [ORG] |
114B | u(83D00018): LDR R3, SB, 18H [data] |
114C | u(02280003): ADD R2, R2, R3 |
114D | v(83D00038): LDR R3, SB, 38H |
114E | v(02290003): SUB R2, R2, R3 |
114F | w(F7FFEF41): BL -4287 [0091H] |
| ELSEx ORSy.Mark("fixup impossible")z |
1150 | x .FIXUP D |
1150 | x(8D000006): LDR SB, MT, MOD0 [ORG] |
1151 | x(80D00018): LDR R0, SB, 18H [data] |
1152 | x(40090001): SUB R0, R0, 1H |
1153 | x(A0D00038): STR R0, SB, 38H |
1154 | y(E7000004): B 4 [1159H] |
1155 | z .FIXUP D |
1155 | z(8D000005): LDR SB, MT, MOD0 [ORG] |
1156 | z(40D88A48): ADD R0, SB, FFFF8A48H [data] |
1157 | z(41000011): MOV R1, R0, 11H |
| ENDa |
1158 | a .FIXUP P |
1158 | a(F720913A): BL MOD2 [ORS] PROC9 |
| END |
| ELSE |
| IFb x.mode <= ORB.Par THENc load(x)d;e DEC(RH) |
1159 | b(E700002B): B 43 [1185H] |
115A | c(80E00004): LDR R0, SP, 4H |
115B | c(80000000): LDR R0, R0, 0H |
115C | c(40090003): SUB R0, R0, 3H |
115D | c(EE000009): BGT 9 [1167H] |
115E | d(80E00004): LDR R0, SP, 4H |
115F | d(81E00008): LDR R1, SP, 8H |
1160 | e(F7FFF072): BL -3982 [01D3H] |
| ELSEf Put2g(Ldr,h RH,i SP,j 0)k;l Put1(Add,m SP,n SP,o 4)p;q DEC(r);r DEC(frame, 4) |
1161 | f .FIXUP D |
1161 | f(8D00000C): LDR SB, MT, MOD0 [ORG] |
1162 | f(40D8002C): ADD R0, SB, 2CH [data] |
1163 | f(81000000): LDR R1, R0, 0H |
1164 | f(41190001): SUB R1, R1, 1H |
1165 | f(A1000000): STR R1, R0, 0H |
1166 | g(E7000013): B 19 [117AH] |
1167 | h(40000008): MOV R0, R0, 8H |
1168 | i .FIXUP D |
1168 | i(8D000007): LDR SB, MT, MOD0 [ORG] |
1169 | i(81D0002C): LDR R1, SB, 2CH [data] |
116A | j(4200000E): MOV R2, R0, EH |
116B | k(43000000): MOV R3, R0, 0H |
116C | l(F7FFEF04): BL -4348 [0071H] |
116D | m(40000008): MOV R0, R0, 8H |
116E | n(4100000E): MOV R1, R0, EH |
116F | o(4200000E): MOV R2, R0, EH |
1170 | p(43000004): MOV R3, R0, 4H |
1171 | q(F7FFEEAC): BL -4436 [001EH] |
1172 | r(80E0000C): LDR R0, SP, CH |
1173 | r(40090001): SUB R0, R0, 1H |
1174 | r(A0E0000C): STR R0, SP, CH |
| ENDs ; |
1175 | s .FIXUP D |
1175 | s(8D00000D): LDR SB, MT, MOD0 [ORG] |
1176 | s(40D80034): ADD R0, SB, 34H [data] |
1177 | s(81000000): LDR R1, R0, 0H |
1178 | s(41190004): SUB R1, R1, 4H |
1179 | s(A1000000): STR R1, R0, 0H |
| IF check THENt Trap(EQ,u 5)v ENDw ; |
117A | t .FIXUP D |
117A | t(8D000005): LDR SB, MT, MOD0 [ORG] |
117B | t(90D00044): LDR R0, SB, 44H [data] |
117C | t(E1000003): BEQ 3 [1180H] |
117D | u(40000001): MOV R0, R0, 1H |
117E | v(41000005): MOV R1, R0, 5H |
117F | w(F7FFEF6C): BL -4244 [00ECH] |
| Put3(BLR,x 7,y RH)z |
1180 | x(40000001): MOV R0, R0, 1H |
1181 | y(41000007): MOV R1, R0, 7H |
1182 | z .FIXUP D |
1182 | z(8D000008): LDR SB, MT, MOD0 [ORG] |
1183 | z(82D0002C): LDR R2, SB, 2CH [data] |
| ENDa ; |
1184 | a(F7FFEF0C): BL -4340 [0091H] |
| IF x.type.baseb.formc = ORB.NoTyp THENd (*procedure*) RH := 0 |
1185 | b(80E00004): LDR R0, SP, 4H |
1186 | b(80000004): LDR R0, R0, 4H |
1187 | b(D16B864C): BLEQ MT [trap=4, pos=27526] |
1188 | c(8000001C): LDR R0, R0, 1CH |
1189 | c(D16B8B4C): BLEQ MT [trap=4, pos=27531] |
118A | d(80000000): LDR R0, R0, 0H |
118B | d(40090009): SUB R0, R0, 9H |
118C | d(E9000004): BNE 4 [1191H] |
| ELSEe (*function*) |
118D | e(40000000): MOV R0, R0, 0H |
118E | e .FIXUP D |
118E | e(8D00000C): LDR SB, MT, MOD0 [ORG] |
118F | e(A0D0002C): STR R0, SB, 2CH [data] |
| IFf r > 0 THENg Put0(Mov,h r,i 0,j 0)k;l RestoreRegs(r)m ENDn ; |
1190 | f(E7000014): B 20 [11A5H] |
1191 | g(80E0000C): LDR R0, SP, CH |
1192 | g(40090000): SUB R0, R0, 0H |
1193 | g(E6000007): BLE 7 [119BH] |
1194 | h(40000000): MOV R0, R0, 0H |
1195 | i(81E0000C): LDR R1, SP, CH |
1196 | j(42000000): MOV R2, R0, 0H |
1197 | k(43000000): MOV R3, R0, 0H |
1198 | l(F7FFEE67): BL -4505 [0000H] |
1199 | m(80E0000C): LDR R0, SP, CH |
119A | n(F7FFFF47): BL -185 [10E2H] |
| x.mode := Reg;o x.r := r;p RH := r+1 |
119B | o(4000000A): MOV R0, R0, AH |
119C | o(81E00004): LDR R1, SP, 4H |
119D | o(A0100000): STR R0, R1, 0H |
119E | p(80E0000C): LDR R0, SP, CH |
119F | p(81E00004): LDR R1, SP, 4H |
11A0 | p(A0100010): STR R0, R1, 10H |
| ENDq ; |
11A1 | q(80E0000C): LDR R0, SP, CH |
11A2 | q(40080001): ADD R0, R0, 1H |
11A3 | q .FIXUP D |
11A3 | q(8D000015): LDR SB, MT, MOD0 [ORG] |
11A4 | q(A0D0002C): STR R0, SB, 2CH [data] |
| invalSB |
| ENDr Call; |
11A5 | r(F7FFEF6E): BL -4242 [0114H] |
11A6 | r(8FE00000): LDR LNK, SP, 0H |
11A7 | r(4EE80010): ADD SP, SP, 10H |
11A8 | r(C700000F): B LNK |
| |
| PROCEDURE Enter*(parblksize, locblksize: LONGINT; int: BOOLEAN); |
| VAR a, r: LONGINT; |
| BEGINs invalSB;t frame := 0;u |
11A9 | s .PROC 50 |
11A9 | s(4EE90018): SUB SP, SP, 18H |
11AA | s(AFE00000): STR LNK, SP, 0H |
11AB | s(A0E00004): STR R0, SP, 4H |
11AC | s(A1E00008): STR R1, SP, 8H |
11AD | s(A2E0000C): STR R2, SP, CH |
11AE | t(F7FFEF65): BL -4251 [0114H] |
11AF | u(40000000): MOV R0, R0, 0H |
11B0 | u .FIXUP D |
11B0 | u(8D00000D): LDR SB, MT, MOD0 [ORG] |
11B1 | u(A0D00034): STR R0, SB, 34H [data] |
| IF ~int THENv (*procedure prolog*) |
11B2 | v(90E0000C): LDR R0, SP, CH |
11B3 | v(E9000027): BNE 39 [11DBH] |
| IF locblksize >= 10000H THENw ORS.Mark("too many locals")x ENDy ; |
11B4 | w(80E00008): LDR R0, SP, 8H |
11B5 | w(61000001): MOV' R1, R0, 1H |
11B6 | w(00090001): SUB R0, R0, R1 |
11B7 | w(E5000004): BLT 4 [11BCH] |
11B8 | x .FIXUP D |
11B8 | x(8D000008): LDR SB, MT, MOD0 [ORG] |
11B9 | x(40D88A5C): ADD R0, SB, FFFF8A5CH [data] |
11BA | x(41000010): MOV R1, R0, 10H |
11BB | y .FIXUP P |
11BB | y(F7209063): BL MOD2 [ORS] PROC9 |
| a := 4;z r := 0;a |
11BC | z(40000004): MOV R0, R0, 4H |
11BD | z(A0E00010): STR R0, SP, 10H |
11BE | a(40000000): MOV R0, R0, 0H |
11BF | a(A0E00014): STR R0, SP, 14H |
| Put1(Sub,b SP,c SP,d locblksize)e;f Put2(Str,g LNK,h SP,i 0)j;k |
11C0 | b(40000009): MOV R0, R0, 9H |
11C1 | c(4100000E): MOV R1, R0, EH |
11C2 | d(4200000E): MOV R2, R0, EH |
11C3 | e(83E00008): LDR R3, SP, 8H |
11C4 | f(F7FFEE59): BL -4519 [001EH] |
11C5 | g(4000000A): MOV R0, R0, AH |
11C6 | h(4100000F): MOV R1, R0, FH |
11C7 | i(4200000E): MOV R2, R0, EH |
11C8 | j(43000000): MOV R3, R0, 0H |
11C9 | k(F7FFEEA7): BL -4441 [0071H] |
| WHILE a < parblksize DOl Put2(Str,m r,n SP,o a)p;q INC(r);r INC(a, 4) ENDs |
11CA | l(80E00010): LDR R0, SP, 10H |
11CB | l(81E00004): LDR R1, SP, 4H |
11CC | l(00090001): SUB R0, R0, R1 |
11CD | l(ED00000C): BGE 12 [11DAH] |
11CE | m(4000000A): MOV R0, R0, AH |
11CF | n(81E00014): LDR R1, SP, 14H |
11D0 | o(4200000E): MOV R2, R0, EH |
11D1 | p(83E00010): LDR R3, SP, 10H |
11D2 | q(F7FFEE9E): BL -4450 [0071H] |
11D3 | r(80E00014): LDR R0, SP, 14H |
11D4 | r(40080001): ADD R0, R0, 1H |
11D5 | r(A0E00014): STR R0, SP, 14H |
11D6 | s(80E00010): LDR R0, SP, 10H |
11D7 | s(40080004): ADD R0, R0, 4H |
11D8 | s(A0E00010): STR R0, SP, 10H |
11D9 | s(E7FFFFF0): B -16 [11CAH] |
| ELSE (*interrupt procedure*) |
| IFt locblksize > 0H THENu ORS.Mark("locals not allowed")v ENDw ; |
11DA | t(E700001B): B 27 [11F6H] |
11DB | u(80E00008): LDR R0, SP, 8H |
11DC | u(40090000): SUB R0, R0, 0H |
11DD | u(E6000004): BLE 4 [11E2H] |
11DE | v .FIXUP D |
11DE | v(8D000026): LDR SB, MT, MOD0 [ORG] |
11DF | v(40D88A6C): ADD R0, SB, FFFF8A6CH [data] |
11E0 | v(41000013): MOV R1, R0, 13H |
11E1 | w .FIXUP P |
11E1 | w(F7209026): BL MOD2 [ORS] PROC9 |
| Put1(Sub,x SP,y SP,z 12)a;b Put2(Str,c 0,d SP,e 0)f;g Put2(Str,h 1,i SP,j 4)k;l Put2(Str,m SB,n SP,o 8)p |
11E2 | x(40000009): MOV R0, R0, 9H |
11E3 | y(4100000E): MOV R1, R0, EH |
11E4 | z(4200000E): MOV R2, R0, EH |
11E5 | a(4300000C): MOV R3, R0, CH |
11E6 | b(F7FFEE37): BL -4553 [001EH] |
11E7 | c(4000000A): MOV R0, R0, AH |
11E8 | d(41000000): MOV R1, R0, 0H |
11E9 | e(4200000E): MOV R2, R0, EH |
11EA | f(43000000): MOV R3, R0, 0H |
11EB | g(F7FFEE85): BL -4475 [0071H] |
11EC | h(4000000A): MOV R0, R0, AH |
11ED | i(41000001): MOV R1, R0, 1H |
11EE | j(4200000E): MOV R2, R0, EH |
11EF | k(43000004): MOV R3, R0, 4H |
11F0 | l(F7FFEE80): BL -4480 [0071H] |
11F1 | m(4000000A): MOV R0, R0, AH |
11F2 | n(4100000D): MOV R1, R0, DH |
11F3 | o(4200000E): MOV R2, R0, EH |
11F4 | p(43000008): MOV R3, R0, 8H |
| (*R0, R1, SB saved on stack*) |
| ENDq |
11F5 | q(F7FFEE7B): BL -4485 [0071H] |
| ENDr Enter; |
11F6 | r(8FE00000): LDR LNK, SP, 0H |
11F7 | r(4EE80018): ADD SP, SP, 18H |
11F8 | r(C700000F): B LNK |
| |
| PROCEDURE Return*(form: INTEGER; VAR x: Item; size: LONGINT; int: BOOLEAN); |
| BEGINs |
11F9 | s .PROC 51 |
11F9 | s(4EE90018): SUB SP, SP, 18H |
11FA | s(AFE00000): STR LNK, SP, 0H |
11FB | s(A0E00004): STR R0, SP, 4H |
11FC | s(A1E00008): STR R1, SP, 8H |
11FD | s(A2E0000C): STR R2, SP, CH |
11FE | s(A3E00010): STR R3, SP, 10H |
11FF | s(A4E00014): STR R4, SP, 14H |
| IF form # ORB.NoTyp THENt load(x)u ENDv ; |
1200 | t(80E00004): LDR R0, SP, 4H |
1201 | t(40090009): SUB R0, R0, 9H |
1202 | t(E1000003): BEQ 3 [1206H] |
1203 | u(80E00008): LDR R0, SP, 8H |
1204 | u(81E0000C): LDR R1, SP, CH |
1205 | v(F7FFEFCD): BL -4147 [01D3H] |
| IF ~int THENw (*procedure epilog*) |
1206 | w(90E00014): LDR R0, SP, 14H |
1207 | w(E900000F): BNE 15 [1217H] |
| Put2(Ldr,x LNK,y SP,z 0)a;b Put1(Add,c SP,d SP,e size)f;g Put3(BR,h 7,i LNK)j |
1208 | x(40000008): MOV R0, R0, 8H |
1209 | y(4100000F): MOV R1, R0, FH |
120A | z(4200000E): MOV R2, R0, EH |
120B | a(43000000): MOV R3, R0, 0H |
120C | b(F7FFEE64): BL -4508 [0071H] |
120D | c(40000008): MOV R0, R0, 8H |
120E | d(4100000E): MOV R1, R0, EH |
120F | e(4200000E): MOV R2, R0, EH |
1210 | f(83E00010): LDR R3, SP, 10H |
1211 | g(F7FFEE0C): BL -4596 [001EH] |
1212 | h(40000000): MOV R0, R0, 0H |
1213 | i(41000007): MOV R1, R0, 7H |
1214 | j(4200000F): MOV R2, R0, FH |
| ELSEk (*interrupt return, restore SB, R1, R0*) |
1215 | k(F7FFEE7B): BL -4485 [0091H] |
| Put2l(Ldr,m SB,n SP,o 8)p;q Put2(Ldr,r 1,s SP,t 4)u;v Put2(Ldr,w 0,x SP,y 0)z;a Put1(Add,b SP,c SP,d 12)e;f Put3(BR,g 7,h 10H)i |
1216 | l(E7000018): B 24 [122FH] |
1217 | m(40000008): MOV R0, R0, 8H |
1218 | n(4100000D): MOV R1, R0, DH |
1219 | o(4200000E): MOV R2, R0, EH |
121A | p(43000008): MOV R3, R0, 8H |
121B | q(F7FFEE55): BL -4523 [0071H] |
121C | r(40000008): MOV R0, R0, 8H |
121D | s(41000001): MOV R1, R0, 1H |
121E | t(4200000E): MOV R2, R0, EH |
121F | u(43000004): MOV R3, R0, 4H |
1220 | v(F7FFEE50): BL -4528 [0071H] |
1221 | w(40000008): MOV R0, R0, 8H |
1222 | x(41000000): MOV R1, R0, 0H |
1223 | y(4200000E): MOV R2, R0, EH |
1224 | z(43000000): MOV R3, R0, 0H |
1225 | a(F7FFEE4B): BL -4533 [0071H] |
1226 | b(40000008): MOV R0, R0, 8H |
1227 | c(4100000E): MOV R1, R0, EH |
1228 | d(4200000E): MOV R2, R0, EH |
1229 | e(4300000C): MOV R3, R0, CH |
122A | f(F7FFEDF3): BL -4621 [001EH] |
122B | g(40000000): MOV R0, R0, 0H |
122C | h(41000007): MOV R1, R0, 7H |
122D | i(42000010): MOV R2, R0, 10H |
| ENDj ; |
122E | j(F7FFEE62): BL -4510 [0091H] |
| RH := 0 |
| ENDk Return; |
122F | k(40000000): MOV R0, R0, 0H |
1230 | k .FIXUP D |
1230 | k(8D000052): LDR SB, MT, MOD0 [ORG] |
1231 | k(A0D0002C): STR R0, SB, 2CH [data] |
1232 | k(8FE00000): LDR LNK, SP, 0H |
1233 | k(4EE80018): ADD SP, SP, 18H |
1234 | k(C700000F): B LNK |
| |
| (* In-line code procedures*) |
| |
| PROCEDURE Increment*(upordown: LONGINT; VAR x, y: Item); |
| VAR op, zr, v: LONGINT; |
| BEGINl (*frame = 0*) |
1235 | l .PROC 52 |
1235 | l(4EE90024): SUB SP, SP, 24H |
1236 | l(AFE00000): STR LNK, SP, 0H |
1237 | l(A0E00004): STR R0, SP, 4H |
1238 | l(A1E00008): STR R1, SP, 8H |
1239 | l(A2E0000C): STR R2, SP, CH |
123A | l(A3E00010): STR R3, SP, 10H |
123B | l(A4E00014): STR R4, SP, 14H |
| IF upordown = 0 THENm op := Add ELSEn opo := Sub ENDp ; |
123C | m(80E00004): LDR R0, SP, 4H |
123D | m(E9000003): BNE 3 [1241H] |
123E | n(40000008): MOV R0, R0, 8H |
123F | n(A0E00018): STR R0, SP, 18H |
1240 | o(E7000002): B 2 [1243H] |
1241 | p(40000009): MOV R0, R0, 9H |
1242 | p(A0E00018): STR R0, SP, 18H |
| IF x.type = ORB.byteType THENq v := 1 ELSEr vs := 0 ENDt ; |
1243 | q(80E00008): LDR R0, SP, 8H |
1244 | q(80000004): LDR R0, R0, 4H |
1245 | q .FIXUP D |
1245 | q(8D400015): LDR SB, MT, MOD4 [ORB] |
1246 | q(81D00006): LDR R1, SB, VAR6 |
1247 | q(00090001): SUB R0, R0, R1 |
1248 | q(E9000003): BNE 3 [124CH] |
1249 | r(40000001): MOV R0, R0, 1H |
124A | r(A0E00020): STR R0, SP, 20H |
124B | s(E7000002): B 2 [124EH] |
124C | t(40000000): MOV R0, R0, 0H |
124D | t(A0E00020): STR R0, SP, 20H |
| IF y.type.formu = ORB.NoTyp THENv y.mode := ORB.Const;w y.a := 1 ENDx ; |
124E | u(80E00010): LDR R0, SP, 10H |
124F | u(80000004): LDR R0, R0, 4H |
1250 | u(D1718E4C): BLEQ MT [trap=4, pos=29070] |
1251 | v(80000000): LDR R0, R0, 0H |
1252 | v(40090009): SUB R0, R0, 9H |
1253 | v(E9000006): BNE 6 [125AH] |
1254 | w(40000001): MOV R0, R0, 1H |
1255 | w(81E00010): LDR R1, SP, 10H |
1256 | w(A0100000): STR R0, R1, 0H |
1257 | x(40000001): MOV R0, R0, 1H |
1258 | x(81E00010): LDR R1, SP, 10H |
1259 | x(A0100008): STR R0, R1, 8H |
| IF (x.mode = ORB.Var)y & (zx.r > 0)a THENb |
125A | y(80E00008): LDR R0, SP, 8H |
125B | y(80000000): LDR R0, R0, 0H |
125C | y(40090002): SUB R0, R0, 2H |
125D | z(E9000037): BNE 55 [1295H] |
125E | a(80E00008): LDR R0, SP, 8H |
125F | a(80000010): LDR R0, R0, 10H |
1260 | a(40090000): SUB R0, R0, 0H |
1261 | b(E6000033): BLE 51 [1295H] |
| zr := RH;c Put2(Ldr+v,d zr,e SP,f x.a)g;h incR;i |
1262 | c .FIXUP D |
1262 | c(8D00001D): LDR SB, MT, MOD0 [ORG] |
1263 | c(80D0002C): LDR R0, SB, 2CH [data] |
1264 | c(A0E0001C): STR R0, SP, 1CH |
1265 | d(40000008): MOV R0, R0, 8H |
1266 | d(81E00020): LDR R1, SP, 20H |
1267 | d(00080001): ADD R0, R0, R1 |
1268 | e(81E0001C): LDR R1, SP, 1CH |
1269 | f(4200000E): MOV R2, R0, EH |
126A | g(83E00008): LDR R3, SP, 8H |
126B | g(83300008): LDR R3, R3, 8H |
126C | h(F7FFEE04): BL -4604 [0071H] |
126D | i(F7FFEE40): BL -4544 [00AEH] |
| IF y.mode = ORB.Const THENj Put1a(op,k zr,l zr,m y.a)n ELSEo loadp(y)q;r Put0(op,s zr,t zr,u y.r)v;w DEC(RH) ENDx ; |
126E | j(80E00010): LDR R0, SP, 10H |
126F | j(80000000): LDR R0, R0, 0H |
1270 | j(40090001): SUB R0, R0, 1H |
1271 | j(E9000007): BNE 7 [1279H] |
1272 | k(80E00018): LDR R0, SP, 18H |
1273 | l(81E0001C): LDR R1, SP, 1CH |
1274 | m(82E0001C): LDR R2, SP, 1CH |
1275 | n(83E00010): LDR R3, SP, 10H |
1276 | n(83300008): LDR R3, R3, 8H |
1277 | o(F7FFEDCC): BL -4660 [0044H] |
1278 | p(E700000E): B 14 [1287H] |
1279 | q(80E00010): LDR R0, SP, 10H |
127A | q(81E00014): LDR R1, SP, 14H |
127B | r(F7FFEF57): BL -4265 [01D3H] |
127C | s(80E00018): LDR R0, SP, 18H |
127D | t(81E0001C): LDR R1, SP, 1CH |
127E | u(82E0001C): LDR R2, SP, 1CH |
127F | v(83E00010): LDR R3, SP, 10H |
1280 | v(83300010): LDR R3, R3, 10H |
1281 | w(F7FFED7E): BL -4738 [0000H] |
1282 | x .FIXUP D |
1282 | x(8D000020): LDR SB, MT, MOD0 [ORG] |
1283 | x(40D8002C): ADD R0, SB, 2CH [data] |
1284 | x(81000000): LDR R1, R0, 0H |
1285 | x(41190001): SUB R1, R1, 1H |
1286 | x(A1000000): STR R1, R0, 0H |
| Put2(Str+v,y zr,z SP,a x.a)b;c DEC(RH) |
1287 | y(4000000A): MOV R0, R0, AH |
1288 | y(81E00020): LDR R1, SP, 20H |
1289 | y(00080001): ADD R0, R0, R1 |
128A | z(81E0001C): LDR R1, SP, 1CH |
128B | a(4200000E): MOV R2, R0, EH |
128C | b(83E00008): LDR R3, SP, 8H |
128D | b(83300008): LDR R3, R3, 8H |
128E | c(F7FFEDE2): BL -4638 [0071H] |
| ELSEd loadAdre(x)f;g zr := RH;h Put2(Ldr+v,i RH,j x.r,k 0)l;m incR;n |
128F | d .FIXUP D |
128F | d(8D00000D): LDR SB, MT, MOD0 [ORG] |
1290 | d(40D8002C): ADD R0, SB, 2CH [data] |
1291 | d(81000000): LDR R1, R0, 0H |
1292 | d(41190001): SUB R1, R1, 1H |
1293 | d(A1000000): STR R1, R0, 0H |
1294 | e(E7000035): B 53 [12CAH] |
1295 | f(80E00008): LDR R0, SP, 8H |
1296 | f(81E0000C): LDR R1, SP, CH |
1297 | g(F7FFF024): BL -4060 [02BCH] |
1298 | h .FIXUP D |
1298 | h(8D000009): LDR SB, MT, MOD0 [ORG] |
1299 | h(80D0002C): LDR R0, SB, 2CH [data] |
129A | h(A0E0001C): STR R0, SP, 1CH |
129B | i(40000008): MOV R0, R0, 8H |
129C | i(81E00020): LDR R1, SP, 20H |
129D | i(00080001): ADD R0, R0, R1 |
129E | j(81D0002C): LDR R1, SB, 2CH |
129F | k(82E00008): LDR R2, SP, 8H |
12A0 | k(82200010): LDR R2, R2, 10H |
12A1 | l(43000000): MOV R3, R0, 0H |
12A2 | m(F7FFEDCE): BL -4658 [0071H] |
12A3 | n(F7FFEE0A): BL -4598 [00AEH] |
| IF y.mode = ORB.Const THENo Put1a(op,p zr,q zr,r y.a)s ELSEt loadu(y)v;w Put0(op,x zr,y zr,z y.r)a;b DEC(RH) ENDc ; |
12A4 | o(80E00010): LDR R0, SP, 10H |
12A5 | o(80000000): LDR R0, R0, 0H |
12A6 | o(40090001): SUB R0, R0, 1H |
12A7 | o(E9000007): BNE 7 [12AFH] |
12A8 | p(80E00018): LDR R0, SP, 18H |
12A9 | q(81E0001C): LDR R1, SP, 1CH |
12AA | r(82E0001C): LDR R2, SP, 1CH |
12AB | s(83E00010): LDR R3, SP, 10H |
12AC | s(83300008): LDR R3, R3, 8H |
12AD | t(F7FFED96): BL -4714 [0044H] |
12AE | u(E700000E): B 14 [12BDH] |
12AF | v(80E00010): LDR R0, SP, 10H |
12B0 | v(81E00014): LDR R1, SP, 14H |
12B1 | w(F7FFEF21): BL -4319 [01D3H] |
12B2 | x(80E00018): LDR R0, SP, 18H |
12B3 | y(81E0001C): LDR R1, SP, 1CH |
12B4 | z(82E0001C): LDR R2, SP, 1CH |
12B5 | a(83E00010): LDR R3, SP, 10H |
12B6 | a(83300010): LDR R3, R3, 10H |
12B7 | b(F7FFED48): BL -4792 [0000H] |
12B8 | c .FIXUP D |
12B8 | c(8D000020): LDR SB, MT, MOD0 [ORG] |
12B9 | c(40D8002C): ADD R0, SB, 2CH [data] |
12BA | c(81000000): LDR R1, R0, 0H |
12BB | c(41190001): SUB R1, R1, 1H |
12BC | c(A1000000): STR R1, R0, 0H |
| Put2(Str+v,d zr,e x.r,f 0)g;h DEC(RH, 2) |
12BD | d(4000000A): MOV R0, R0, AH |
12BE | d(81E00020): LDR R1, SP, 20H |
12BF | d(00080001): ADD R0, R0, R1 |
12C0 | e(81E0001C): LDR R1, SP, 1CH |
12C1 | f(82E00008): LDR R2, SP, 8H |
12C2 | f(82200010): LDR R2, R2, 10H |
12C3 | g(43000000): MOV R3, R0, 0H |
12C4 | h(F7FFEDAC): BL -4692 [0071H] |
| ENDi |
12C5 | i .FIXUP D |
12C5 | i(8D00000D): LDR SB, MT, MOD0 [ORG] |
12C6 | i(40D8002C): ADD R0, SB, 2CH [data] |
12C7 | i(81000000): LDR R1, R0, 0H |
12C8 | i(41190002): SUB R1, R1, 2H |
12C9 | i(A1000000): STR R1, R0, 0H |
| ENDj Increment; |
12CA | j(8FE00000): LDR LNK, SP, 0H |
12CB | j(4EE80024): ADD SP, SP, 24H |
12CC | j(C700000F): B LNK |
| |
| PROCEDURE Include*(inorex: LONGINT; VAR x, y: Item); |
| VAR op, zr: LONGINT; |
| BEGINk loadAdr(x)l;m zr := RH;n Put2(Ldr,o RH,p x.r,q 0)r;s incR;t |
12CD | k .PROC 53 |
12CD | k(4EE90020): SUB SP, SP, 20H |
12CE | k(AFE00000): STR LNK, SP, 0H |
12CF | k(A0E00004): STR R0, SP, 4H |
12D0 | k(A1E00008): STR R1, SP, 8H |
12D1 | k(A2E0000C): STR R2, SP, CH |
12D2 | k(A3E00010): STR R3, SP, 10H |
12D3 | k(A4E00014): STR R4, SP, 14H |
12D4 | l(80E00008): LDR R0, SP, 8H |
12D5 | l(81E0000C): LDR R1, SP, CH |
12D6 | m(F7FFEFE5): BL -4123 [02BCH] |
12D7 | n .FIXUP D |
12D7 | n(8D000012): LDR SB, MT, MOD0 [ORG] |
12D8 | n(80D0002C): LDR R0, SB, 2CH [data] |
12D9 | n(A0E0001C): STR R0, SP, 1CH |
12DA | o(40000008): MOV R0, R0, 8H |
12DB | p(81D0002C): LDR R1, SB, 2CH |
12DC | q(82E00008): LDR R2, SP, 8H |
12DD | q(82200010): LDR R2, R2, 10H |
12DE | r(43000000): MOV R3, R0, 0H |
12DF | s(F7FFED91): BL -4719 [0071H] |
12E0 | t(F7FFEDCD): BL -4659 [00AEH] |
| IF inorex = 0 THENu op := Ior ELSEv opw := Ann ENDx ; |
12E1 | u(80E00004): LDR R0, SP, 4H |
12E2 | u(E9000003): BNE 3 [12E6H] |
12E3 | v(40000006): MOV R0, R0, 6H |
12E4 | v(A0E00018): STR R0, SP, 18H |
12E5 | w(E7000002): B 2 [12E8H] |
12E6 | x(40000005): MOV R0, R0, 5H |
12E7 | x(A0E00018): STR R0, SP, 18H |
| IF y.mode = ORB.Const THENy Put1a(op,z zr,a zr,b LSL(1, y.a))c |
12E8 | y(80E00010): LDR R0, SP, 10H |
12E9 | y(80000000): LDR R0, R0, 0H |
12EA | y(40090001): SUB R0, R0, 1H |
12EB | y(E9000009): BNE 9 [12F5H] |
12EC | z(80E00018): LDR R0, SP, 18H |
12ED | a(81E0001C): LDR R1, SP, 1CH |
12EE | b(82E0001C): LDR R2, SP, 1CH |
12EF | c(43000001): MOV R3, R0, 1H |
12F0 | c(84E00010): LDR R4, SP, 10H |
12F1 | c(84400008): LDR R4, R4, 8H |
12F2 | c(03310004): LSL R3, R3, R4 |
| ELSEd loade(y)f;g Put1(Mov,h RH,i 0,j 1)k;l Put0(Lsl,m y.r,n RH,o y.r)p;q Put0(op,r zr,s zr,t y.r)u;v DEC(RH) |
12F3 | d(F7FFED50): BL -4784 [0044H] |
12F4 | e(E700001C): B 28 [1311H] |
12F5 | f(80E00010): LDR R0, SP, 10H |
12F6 | f(81E00014): LDR R1, SP, 14H |
12F7 | g(F7FFEEDB): BL -4389 [01D3H] |
12F8 | h(40000000): MOV R0, R0, 0H |
12F9 | i .FIXUP D |
12F9 | i(8D000022): LDR SB, MT, MOD0 [ORG] |
12FA | i(81D0002C): LDR R1, SB, 2CH [data] |
12FB | j(42000000): MOV R2, R0, 0H |
12FC | k(43000001): MOV R3, R0, 1H |
12FD | l(F7FFED20): BL -4832 [001EH] |
12FE | m(40000001): MOV R0, R0, 1H |
12FF | n(81E00010): LDR R1, SP, 10H |
1300 | n(81100010): LDR R1, R1, 10H |
1301 | o .FIXUP D |
1301 | o(8D000008): LDR SB, MT, MOD0 [ORG] |
1302 | o(82D0002C): LDR R2, SB, 2CH [data] |
1303 | p(83E00010): LDR R3, SP, 10H |
1304 | p(83300010): LDR R3, R3, 10H |
1305 | q(F7FFECFA): BL -4870 [0000H] |
1306 | r(80E00018): LDR R0, SP, 18H |
1307 | s(81E0001C): LDR R1, SP, 1CH |
1308 | t(82E0001C): LDR R2, SP, 1CH |
1309 | u(83E00010): LDR R3, SP, 10H |
130A | u(83300010): LDR R3, R3, 10H |
130B | v(F7FFECF4): BL -4876 [0000H] |
| ENDw ; |
130C | w .FIXUP D |
130C | w(8D00000B): LDR SB, MT, MOD0 [ORG] |
130D | w(40D8002C): ADD R0, SB, 2CH [data] |
130E | w(81000000): LDR R1, R0, 0H |
130F | w(41190001): SUB R1, R1, 1H |
1310 | w(A1000000): STR R1, R0, 0H |
| Put2(Str,x zr,y x.r,z 0)a;b DEC(RH, 2) |
1311 | x(4000000A): MOV R0, R0, AH |
1312 | y(81E0001C): LDR R1, SP, 1CH |
1313 | z(82E00008): LDR R2, SP, 8H |
1314 | z(82200010): LDR R2, R2, 10H |
1315 | a(43000000): MOV R3, R0, 0H |
1316 | b(F7FFED5A): BL -4774 [0071H] |
| ENDc Include; |
1317 | c .FIXUP D |
1317 | c(8D00000B): LDR SB, MT, MOD0 [ORG] |
1318 | c(40D8002C): ADD R0, SB, 2CH [data] |
1319 | c(81000000): LDR R1, R0, 0H |
131A | c(41190002): SUB R1, R1, 2H |
131B | c(A1000000): STR R1, R0, 0H |
131C | c(8FE00000): LDR LNK, SP, 0H |
131D | c(4EE80020): ADD SP, SP, 20H |
131E | c(C700000F): B LNK |
| |
| PROCEDURE Assert*(VAR x: Item); |
| VAR cond: LONGINT; |
| BEGINd |
131F | d .PROC 54 |
131F | d(4EE90010): SUB SP, SP, 10H |
1320 | d(AFE00000): STR LNK, SP, 0H |
1321 | d(A0E00004): STR R0, SP, 4H |
1322 | d(A1E00008): STR R1, SP, 8H |
| IF x.mode # Cond THENe loadCond(x)f ENDg ; |
1323 | e(80E00004): LDR R0, SP, 4H |
1324 | e(80000000): LDR R0, R0, 0H |
1325 | e(4009000C): SUB R0, R0, CH |
1326 | e(E1000003): BEQ 3 [132AH] |
1327 | f(80E00004): LDR R0, SP, 4H |
1328 | f(81E00008): LDR R1, SP, 8H |
1329 | g(F7FFEFEF): BL -4113 [0319H] |
| IF x.a = 0 THENh cond := negated(x.r)i |
132A | h(80E00004): LDR R0, SP, 4H |
132B | h(80000008): LDR R0, R0, 8H |
132C | h(E9000005): BNE 5 [1332H] |
132D | i(80E00004): LDR R0, SP, 4H |
132E | i(80000010): LDR R0, R0, 10H |
| ELSEj Put3k(BC,l x.r,m x.b)n;o FixLink(x.a)p;q x.b := pc-1;r cond := 7 |
132F | j(F7FFEDD3): BL -4653 [0103H] |
1330 | j(A0E0000C): STR R0, SP, CH |
1331 | k(E7000010): B 16 [1342H] |
1332 | l(40000002): MOV R0, R0, 2H |
1333 | m(81E00004): LDR R1, SP, 4H |
1334 | m(81100010): LDR R1, R1, 10H |
1335 | n(82E00004): LDR R2, SP, 4H |
1336 | n(8220000C): LDR R2, R2, CH |
1337 | o(F7FFED59): BL -4775 [0091H] |
1338 | p(80E00004): LDR R0, SP, 4H |
1339 | p(80000008): LDR R0, R0, 8H |
133A | q(F7FFEDFB): BL -4613 [0136H] |
133B | r .FIXUP D |
133B | r(8D000024): LDR SB, MT, MOD0 [ORG] |
133C | r(80D00018): LDR R0, SB, 18H [data] |
133D | r(40090001): SUB R0, R0, 1H |
133E | r(81E00004): LDR R1, SP, 4H |
133F | r(A010000C): STR R0, R1, CH |
| ENDs ; |
1340 | s(40000007): MOV R0, R0, 7H |
1341 | s(A0E0000C): STR R0, SP, CH |
| Trap(cond,t 7)u;v FixLink(x.b)w |
1342 | t(80E0000C): LDR R0, SP, CH |
1343 | u(41000007): MOV R1, R0, 7H |
1344 | v(F7FFEDA7): BL -4697 [00ECH] |
1345 | w(80E00004): LDR R0, SP, 4H |
1346 | w(8000000C): LDR R0, R0, CH |
| ENDx Assert; |
1347 | x(F7FFEDEE): BL -4626 [0136H] |
1348 | x(8FE00000): LDR LNK, SP, 0H |
1349 | x(4EE80010): ADD SP, SP, 10H |
134A | x(C700000F): B LNK |
| |
| PROCEDURE New*(VAR x: Item); |
| BEGINy loadAdr(x)z;a loadTypTagAdr(x.type.baseb)c;d Trap(7,e 0)f;g RH := 0;h invalSB |
134B | y .PROC 55 |
134B | y(4EE9000C): SUB SP, SP, CH |
134C | y(AFE00000): STR LNK, SP, 0H |
134D | y(A0E00004): STR R0, SP, 4H |
134E | y(A1E00008): STR R1, SP, 8H |
134F | z(80E00004): LDR R0, SP, 4H |
1350 | z(81E00008): LDR R1, SP, 8H |
1351 | a(F7FFEF6A): BL -4246 [02BCH] |
1352 | b(80E00004): LDR R0, SP, 4H |
1353 | b(80000004): LDR R0, R0, 4H |
1354 | b(D1769B4C): BLEQ MT [trap=4, pos=30363] |
1355 | c(8000001C): LDR R0, R0, 1CH |
1356 | d(F7FFF006): BL -4090 [035DH] |
1357 | e(40000007): MOV R0, R0, 7H |
1358 | f(41000000): MOV R1, R0, 0H |
1359 | g(F7FFED92): BL -4718 [00ECH] |
135A | h(40000000): MOV R0, R0, 0H |
135B | h .FIXUP D |
135B | h(8D000020): LDR SB, MT, MOD0 [ORG] |
135C | h(A0D0002C): STR R0, SB, 2CH [data] |
| ENDi New; |
135D | i(F7FFEDB6): BL -4682 [0114H] |
135E | i(8FE00000): LDR LNK, SP, 0H |
135F | i(4EE8000C): ADD SP, SP, CH |
1360 | i(C700000F): B LNK |
| |
| PROCEDURE Pack*(VAR x, y: Item); |
| VAR z: Item; |
| BEGINj z := x;k load(x)l;m load(y)n;o |
1361 | j .PROC 56 |
1361 | j(4EE9002C): SUB SP, SP, 2CH |
1362 | j(AFE00000): STR LNK, SP, 0H |
1363 | j(A0E00004): STR R0, SP, 4H |
1364 | j(A1E00008): STR R1, SP, 8H |
1365 | j(A2E0000C): STR R2, SP, CH |
1366 | j(A3E00010): STR R3, SP, 10H |
1367 | k(40E80014): ADD R0, SP, 14H |
1368 | k(81E00004): LDR R1, SP, 4H |
1369 | k(42000006): MOV R2, R0, 6H |
136A | k(83100000): LDR R3, R1, 0H |
136B | k(41180004): ADD R1, R1, 4H |
136C | k(A3000000): STR R3, R0, 0H |
136D | k(40080004): ADD R0, R0, 4H |
136E | k(42290001): SUB R2, R2, 1H |
136F | k(E9FFFFFA): BNE -6 [136AH] |
1370 | l(80E00004): LDR R0, SP, 4H |
1371 | l(81E00008): LDR R1, SP, 8H |
1372 | m(F7FFEE60): BL -4512 [01D3H] |
1373 | n(80E0000C): LDR R0, SP, CH |
1374 | n(81E00010): LDR R1, SP, 10H |
1375 | o(F7FFEE5D): BL -4515 [01D3H] |
| Put1(Lsl,p y.r,q y.r,r 23)s;t Put0(Add,u x.r,v x.r,w y.r)x;y DEC(RH);z Store(z,a x)b |
1376 | p(40000001): MOV R0, R0, 1H |
1377 | q(81E0000C): LDR R1, SP, CH |
1378 | q(81100010): LDR R1, R1, 10H |
1379 | r(82E0000C): LDR R2, SP, CH |
137A | r(82200010): LDR R2, R2, 10H |
137B | s(43000017): MOV R3, R0, 17H |
137C | t(F7FFECA1): BL -4959 [001EH] |
137D | u(40000008): MOV R0, R0, 8H |
137E | v(81E00004): LDR R1, SP, 4H |
137F | v(81100010): LDR R1, R1, 10H |
1380 | w(82E00004): LDR R2, SP, 4H |
1381 | w(82200010): LDR R2, R2, 10H |
1382 | x(83E0000C): LDR R3, SP, CH |
1383 | x(83300010): LDR R3, R3, 10H |
1384 | y(F7FFEC7B): BL -4997 [0000H] |
1385 | z .FIXUP D |
1385 | z(8D00002A): LDR SB, MT, MOD0 [ORG] |
1386 | z(40D8002C): ADD R0, SB, 2CH [data] |
1387 | z(81000000): LDR R1, R0, 0H |
1388 | z(41190001): SUB R1, R1, 1H |
1389 | z(A1000000): STR R1, R0, 0H |
138A | a(40E80014): ADD R0, SP, 14H |
138B | a(41D80000): ADD R1, SB, 0H |
138C | b(82E00004): LDR R2, SP, 4H |
138D | b(83E00008): LDR R3, SP, 8H |
| ENDc Pack; |
138E | c(F7FFFA1D): BL -1507 [0DACH] |
138F | c(8FE00000): LDR LNK, SP, 0H |
1390 | c(4EE8002C): ADD SP, SP, 2CH |
1391 | c(C700000F): B LNK |
| |
| PROCEDURE Unpk*(VAR x, y: Item); |
| VAR z, e0: Item; |
| BEGINd z := x;e load(x)f;g e0.mode := Reg;h e0.r := RH;i e0.type := ORB.intType;j |
1392 | d .PROC 57 |
1392 | d(4EE90044): SUB SP, SP, 44H |
1393 | d(AFE00000): STR LNK, SP, 0H |
1394 | d(A0E00004): STR R0, SP, 4H |
1395 | d(A1E00008): STR R1, SP, 8H |
1396 | d(A2E0000C): STR R2, SP, CH |
1397 | d(A3E00010): STR R3, SP, 10H |
1398 | e(40E80014): ADD R0, SP, 14H |
1399 | e(81E00004): LDR R1, SP, 4H |
139A | e(42000006): MOV R2, R0, 6H |
139B | e(83100000): LDR R3, R1, 0H |
139C | e(41180004): ADD R1, R1, 4H |
139D | e(A3000000): STR R3, R0, 0H |
139E | e(40080004): ADD R0, R0, 4H |
139F | e(42290001): SUB R2, R2, 1H |
13A0 | e(E9FFFFFA): BNE -6 [139BH] |
13A1 | f(80E00004): LDR R0, SP, 4H |
13A2 | f(81E00008): LDR R1, SP, 8H |
13A3 | g(F7FFEE2F): BL -4561 [01D3H] |
13A4 | h(4000000A): MOV R0, R0, AH |
13A5 | h(A0E0002C): STR R0, SP, 2CH |
13A6 | i .FIXUP D |
13A6 | i(8D000021): LDR SB, MT, MOD0 [ORG] |
13A7 | i(80D0002C): LDR R0, SB, 2CH [data] |
13A8 | i(A0E0003C): STR R0, SP, 3CH |
13A9 | j .FIXUP D |
13A9 | j(8D400003): LDR SB, MT, MOD4 [ORB] |
13AA | j(80D00009): LDR R0, SB, VAR9 |
13AB | j(A0E00030): STR R0, SP, 30H |
| Put1(Asr,k RH,l x.r,m 23)n;o Put1(Sub,p RH,q RH,r 127)s;t Store(y,u e0)v;w incR;x |
13AC | k(40000002): MOV R0, R0, 2H |
13AD | l .FIXUP D |
13AD | l(8D000004): LDR SB, MT, MOD0 [ORG] |
13AE | l(81D0002C): LDR R1, SB, 2CH [data] |
13AF | m(82E00004): LDR R2, SP, 4H |
13B0 | m(82200010): LDR R2, R2, 10H |
13B1 | n(43000017): MOV R3, R0, 17H |
13B2 | o(F7FFEC6B): BL -5013 [001EH] |
13B3 | p(40000009): MOV R0, R0, 9H |
13B4 | q .FIXUP D |
13B4 | q(8D000007): LDR SB, MT, MOD0 [ORG] |
13B5 | q(81D0002C): LDR R1, SB, 2CH [data] |
13B6 | r(82D0002C): LDR R2, SB, 2CH |
13B7 | s(4300007F): MOV R3, R0, 7FH |
13B8 | t(F7FFEC65): BL -5019 [001EH] |
13B9 | u(80E0000C): LDR R0, SP, CH |
13BA | u(81E00010): LDR R1, SP, 10H |
13BB | v(42E8002C): ADD R2, SP, 2CH |
13BC | v .FIXUP D |
13BC | v(8D000008): LDR SB, MT, MOD0 [ORG] |
13BD | v(43D80000): ADD R3, SB, 0H [data] |
13BE | w(F7FFF9ED): BL -1555 [0DACH] |
13BF | x(F7FFECEE): BL -4882 [00AEH] |
| Put1(Lsl,y RH,z RH,a 23)b;c Put0(Sub,d x.r,e x.r,f RH)g;h Store(z,i x)j |
13C0 | y(40000001): MOV R0, R0, 1H |
13C1 | z .FIXUP D |
13C1 | z(8D000005): LDR SB, MT, MOD0 [ORG] |
13C2 | z(81D0002C): LDR R1, SB, 2CH [data] |
13C3 | a(82D0002C): LDR R2, SB, 2CH |
13C4 | b(43000017): MOV R3, R0, 17H |
13C5 | c(F7FFEC58): BL -5032 [001EH] |
13C6 | d(40000009): MOV R0, R0, 9H |
13C7 | e(81E00004): LDR R1, SP, 4H |
13C8 | e(81100010): LDR R1, R1, 10H |
13C9 | f(82E00004): LDR R2, SP, 4H |
13CA | f(82200010): LDR R2, R2, 10H |
13CB | g .FIXUP D |
13CB | g(8D00000A): LDR SB, MT, MOD0 [ORG] |
13CC | g(83D0002C): LDR R3, SB, 2CH [data] |
13CD | h(F7FFEC32): BL -5070 [0000H] |
13CE | i(40E80014): ADD R0, SP, 14H |
13CF | i .FIXUP D |
13CF | i(8D000004): LDR SB, MT, MOD0 [ORG] |
13D0 | i(41D80000): ADD R1, SB, 0H [data] |
13D1 | j(82E00004): LDR R2, SP, 4H |
13D2 | j(83E00008): LDR R3, SP, 8H |
| ENDk Unpk; |
13D3 | k(F7FFF9D8): BL -1576 [0DACH] |
13D4 | k(8FE00000): LDR LNK, SP, 0H |
13D5 | k(4EE80044): ADD SP, SP, 44H |
13D6 | k(C700000F): B LNK |
| |
| PROCEDURE Led*(VAR x: Item); |
| BEGINl load(x)m;n Put1(Mov,o RH,p 0,q -60)r;s Put2(Str,t x.r,u RH,v 0)w;x DEC(RH) |
13D7 | l .PROC 58 |
13D7 | l(4EE9000C): SUB SP, SP, CH |
13D8 | l(AFE00000): STR LNK, SP, 0H |
13D9 | l(A0E00004): STR R0, SP, 4H |
13DA | l(A1E00008): STR R1, SP, 8H |
13DB | m(80E00004): LDR R0, SP, 4H |
13DC | m(81E00008): LDR R1, SP, 8H |
13DD | n(F7FFEDF5): BL -4619 [01D3H] |
13DE | o(40000000): MOV R0, R0, 0H |
13DF | p .FIXUP D |
13DF | p(8D000010): LDR SB, MT, MOD0 [ORG] |
13E0 | p(81D0002C): LDR R1, SB, 2CH [data] |
13E1 | q(42000000): MOV R2, R0, 0H |
13E2 | r(5300FFC4): MOV R3, R0, FFFFFFC4H |
13E3 | s(F7FFEC3A): BL -5062 [001EH] |
13E4 | t(4000000A): MOV R0, R0, AH |
13E5 | u(81E00004): LDR R1, SP, 4H |
13E6 | u(81100010): LDR R1, R1, 10H |
13E7 | v .FIXUP D |
13E7 | v(8D000008): LDR SB, MT, MOD0 [ORG] |
13E8 | v(82D0002C): LDR R2, SB, 2CH [data] |
13E9 | w(43000000): MOV R3, R0, 0H |
13EA | x(F7FFEC86): BL -4986 [0071H] |
| ENDy Led; |
13EB | y .FIXUP D |
13EB | y(8D000004): LDR SB, MT, MOD0 [ORG] |
13EC | y(40D8002C): ADD R0, SB, 2CH [data] |
13ED | y(81000000): LDR R1, R0, 0H |
13EE | y(41190001): SUB R1, R1, 1H |
13EF | y(A1000000): STR R1, R0, 0H |
13F0 | y(8FE00000): LDR LNK, SP, 0H |
13F1 | y(4EE8000C): ADD SP, SP, CH |
13F2 | y(C700000F): B LNK |
| |
| PROCEDURE Get*(VAR x, y: Item); |
| BEGINz load(x)a;b x.type := y.type;c x.mode := RegI;d x.a := 0;e Store(y,f x)g |
13F3 | z .PROC 59 |
13F3 | z(4EE90014): SUB SP, SP, 14H |
13F4 | z(AFE00000): STR LNK, SP, 0H |
13F5 | z(A0E00004): STR R0, SP, 4H |
13F6 | z(A1E00008): STR R1, SP, 8H |
13F7 | z(A2E0000C): STR R2, SP, CH |
13F8 | z(A3E00010): STR R3, SP, 10H |
13F9 | a(80E00004): LDR R0, SP, 4H |
13FA | a(81E00008): LDR R1, SP, 8H |
13FB | b(F7FFEDD7): BL -4649 [01D3H] |
13FC | c(80E0000C): LDR R0, SP, CH |
13FD | c(80000004): LDR R0, R0, 4H |
13FE | c(81E00004): LDR R1, SP, 4H |
13FF | c(A0100004): STR R0, R1, 4H |
1400 | d(4000000B): MOV R0, R0, BH |
1401 | d(81E00004): LDR R1, SP, 4H |
1402 | d(A0100000): STR R0, R1, 0H |
1403 | e(40000000): MOV R0, R0, 0H |
1404 | e(81E00004): LDR R1, SP, 4H |
1405 | e(A0100008): STR R0, R1, 8H |
1406 | f(80E0000C): LDR R0, SP, CH |
1407 | f(81E00010): LDR R1, SP, 10H |
1408 | g(82E00004): LDR R2, SP, 4H |
1409 | g(83E00008): LDR R3, SP, 8H |
| ENDh Get; |
140A | h(F7FFF9A1): BL -1631 [0DACH] |
140B | h(8FE00000): LDR LNK, SP, 0H |
140C | h(4EE80014): ADD SP, SP, 14H |
140D | h(C700000F): B LNK |
| |
| PROCEDURE Put*(VAR x, y: Item); |
| BEGINi load(x)j;k x.type := y.type;l x.mode := RegI;m x.a := 0;n Store(x,o y)p |
140E | i .PROC 60 |
140E | i(4EE90014): SUB SP, SP, 14H |
140F | i(AFE00000): STR LNK, SP, 0H |
1410 | i(A0E00004): STR R0, SP, 4H |
1411 | i(A1E00008): STR R1, SP, 8H |
1412 | i(A2E0000C): STR R2, SP, CH |
1413 | i(A3E00010): STR R3, SP, 10H |
1414 | j(80E00004): LDR R0, SP, 4H |
1415 | j(81E00008): LDR R1, SP, 8H |
1416 | k(F7FFEDBC): BL -4676 [01D3H] |
1417 | l(80E0000C): LDR R0, SP, CH |
1418 | l(80000004): LDR R0, R0, 4H |
1419 | l(81E00004): LDR R1, SP, 4H |
141A | l(A0100004): STR R0, R1, 4H |
141B | m(4000000B): MOV R0, R0, BH |
141C | m(81E00004): LDR R1, SP, 4H |
141D | m(A0100000): STR R0, R1, 0H |
141E | n(40000000): MOV R0, R0, 0H |
141F | n(81E00004): LDR R1, SP, 4H |
1420 | n(A0100008): STR R0, R1, 8H |
1421 | o(80E00004): LDR R0, SP, 4H |
1422 | o(81E00008): LDR R1, SP, 8H |
1423 | p(82E0000C): LDR R2, SP, CH |
1424 | p(83E00010): LDR R3, SP, 10H |
| ENDq Put; |
1425 | q(F7FFF986): BL -1658 [0DACH] |
1426 | q(8FE00000): LDR LNK, SP, 0H |
1427 | q(4EE80014): ADD SP, SP, 14H |
1428 | q(C700000F): B LNK |
| |
| PROCEDURE Copy*(VAR x, y, z: Item); |
| BEGINr load(x)s;t load(y)u;v |
1429 | r .PROC 61 |
1429 | r(4EE9001C): SUB SP, SP, 1CH |
142A | r(AFE00000): STR LNK, SP, 0H |
142B | r(A0E00004): STR R0, SP, 4H |
142C | r(A1E00008): STR R1, SP, 8H |
142D | r(A2E0000C): STR R2, SP, CH |
142E | r(A3E00010): STR R3, SP, 10H |
142F | r(A4E00014): STR R4, SP, 14H |
1430 | r(A5E00018): STR R5, SP, 18H |
1431 | s(80E00004): LDR R0, SP, 4H |
1432 | s(81E00008): LDR R1, SP, 8H |
1433 | t(F7FFED9F): BL -4705 [01D3H] |
1434 | u(80E0000C): LDR R0, SP, CH |
1435 | u(81E00010): LDR R1, SP, 10H |
1436 | v(F7FFED9C): BL -4708 [01D3H] |
| IF z.mode = ORB.Const THENw |
1437 | w(80E00014): LDR R0, SP, 14H |
1438 | w(80000000): LDR R0, R0, 0H |
1439 | w(40090001): SUB R0, R0, 1H |
143A | w(E900000D): BNE 13 [1448H] |
| IF z.a > 0 THENx load(z)y ELSEz ORSa.Mark("bad count")b ENDc |
143B | x(80E00014): LDR R0, SP, 14H |
143C | x(80000008): LDR R0, R0, 8H |
143D | x(40090000): SUB R0, R0, 0H |
143E | x(E6000004): BLE 4 [1443H] |
143F | y(80E00014): LDR R0, SP, 14H |
1440 | y(81E00018): LDR R1, SP, 18H |
1441 | z(F7FFED91): BL -4719 [01D3H] |
1442 | a(E7000004): B 4 [1447H] |
1443 | b .FIXUP D |
1443 | b(8D000058): LDR SB, MT, MOD0 [ORG] |
1444 | b(40D88A80): ADD R0, SB, FFFF8A80H [data] |
1445 | b(4100000A): MOV R1, R0, AH |
1446 | c .FIXUP P |
1446 | c(F7209265): BL MOD2 [ORS] PROC9 |
| ELSE loadd(z)e;f |
1447 | d(E700000D): B 13 [1455H] |
1448 | e(80E00014): LDR R0, SP, 14H |
1449 | e(81E00018): LDR R1, SP, 18H |
144A | f(F7FFED88): BL -4728 [01D3H] |
| IF check THENg Trap(LT,h 3)i ENDj ; |
144B | g .FIXUP D |
144B | g(8D000008): LDR SB, MT, MOD0 [ORG] |
144C | g(90D00044): LDR R0, SB, 44H [data] |
144D | g(E1000003): BEQ 3 [1451H] |
144E | h(40000005): MOV R0, R0, 5H |
144F | i(41000003): MOV R1, R0, 3H |
1450 | j(F7FFEC9B): BL -4965 [00ECH] |
| Put3(BC,k EQ,l 6)m |
1451 | k(40000002): MOV R0, R0, 2H |
1452 | l(41000001): MOV R1, R0, 1H |
1453 | m(42000006): MOV R2, R0, 6H |
| ENDn ; |
1454 | n(F7FFEC3C): BL -5060 [0091H] |
| Put2(Ldr,o RH,p x.r,q 0)r;s Put1(Add,t x.r,u x.r,v 4)w;x |
1455 | o(40000008): MOV R0, R0, 8H |
1456 | p .FIXUP D |
1456 | p(8D00000B): LDR SB, MT, MOD0 [ORG] |
1457 | p(81D0002C): LDR R1, SB, 2CH [data] |
1458 | q(82E00004): LDR R2, SP, 4H |
1459 | q(82200010): LDR R2, R2, 10H |
145A | r(43000000): MOV R3, R0, 0H |
145B | s(F7FFEC15): BL -5099 [0071H] |
145C | t(40000008): MOV R0, R0, 8H |
145D | u(81E00004): LDR R1, SP, 4H |
145E | u(81100010): LDR R1, R1, 10H |
145F | v(82E00004): LDR R2, SP, 4H |
1460 | v(82200010): LDR R2, R2, 10H |
1461 | w(43000004): MOV R3, R0, 4H |
1462 | x(F7FFEBBB): BL -5189 [001EH] |
| Put2(Str,y RH,z y.r,a 0)b;c Put1(Add,d y.r,e y.r,f 4)g;h |
1463 | y(4000000A): MOV R0, R0, AH |
1464 | z .FIXUP D |
1464 | z(8D00000E): LDR SB, MT, MOD0 [ORG] |
1465 | z(81D0002C): LDR R1, SB, 2CH [data] |
1466 | a(82E0000C): LDR R2, SP, CH |
1467 | a(82200010): LDR R2, R2, 10H |
1468 | b(43000000): MOV R3, R0, 0H |
1469 | c(F7FFEC07): BL -5113 [0071H] |
146A | d(40000008): MOV R0, R0, 8H |
146B | e(81E0000C): LDR R1, SP, CH |
146C | e(81100010): LDR R1, R1, 10H |
146D | f(82E0000C): LDR R2, SP, CH |
146E | f(82200010): LDR R2, R2, 10H |
146F | g(43000004): MOV R3, R0, 4H |
1470 | h(F7FFEBAD): BL -5203 [001EH] |
| Put1(Sub,i z.r,j z.r,k 1)l;m Put3(BC,n NE,o -6)p;q DEC(RH, 3) |
1471 | i(40000009): MOV R0, R0, 9H |
1472 | j(81E00014): LDR R1, SP, 14H |
1473 | j(81100010): LDR R1, R1, 10H |
1474 | k(82E00014): LDR R2, SP, 14H |
1475 | k(82200010): LDR R2, R2, 10H |
1476 | l(43000001): MOV R3, R0, 1H |
1477 | m(F7FFEBA6): BL -5210 [001EH] |
1478 | n(40000002): MOV R0, R0, 2H |
1479 | o(41000009): MOV R1, R0, 9H |
147A | p(5200FFFA): MOV R2, R0, FFFFFFFAH |
147B | q(F7FFEC15): BL -5099 [0091H] |
| ENDr Copy; |
147C | r .FIXUP D |
147C | r(8D000018): LDR SB, MT, MOD0 [ORG] |
147D | r(40D8002C): ADD R0, SB, 2CH [data] |
147E | r(81000000): LDR R1, R0, 0H |
147F | r(41190003): SUB R1, R1, 3H |
1480 | r(A1000000): STR R1, R0, 0H |
1481 | r(8FE00000): LDR LNK, SP, 0H |
1482 | r(4EE8001C): ADD SP, SP, 1CH |
1483 | r(C700000F): B LNK |
| |
| PROCEDURE LDPSR*(VAR x: Item); |
| BEGINs (*x.mode = Const*) Put3(0,t 15,u x.a + 20H)v |
1484 | s .PROC 62 |
1484 | s(4EE9000C): SUB SP, SP, CH |
1485 | s(AFE00000): STR LNK, SP, 0H |
1486 | s(A0E00004): STR R0, SP, 4H |
1487 | s(A1E00008): STR R1, SP, 8H |
1488 | t(40000000): MOV R0, R0, 0H |
1489 | u(4100000F): MOV R1, R0, FH |
148A | v(82E00004): LDR R2, SP, 4H |
148B | v(82200008): LDR R2, R2, 8H |
148C | v(42280020): ADD R2, R2, 20H |
| ENDw LDPSR; |
148D | w(F7FFEC03): BL -5117 [0091H] |
148E | w(8FE00000): LDR LNK, SP, 0H |
148F | w(4EE8000C): ADD SP, SP, CH |
1490 | w(C700000F): B LNK |
| |
| PROCEDURE LDREG*(VAR x, y: Item); |
| BEGINx |
1491 | x .PROC 63 |
1491 | x(4EE90014): SUB SP, SP, 14H |
1492 | x(AFE00000): STR LNK, SP, 0H |
1493 | x(A0E00004): STR R0, SP, 4H |
1494 | x(A1E00008): STR R1, SP, 8H |
1495 | x(A2E0000C): STR R2, SP, CH |
1496 | x(A3E00010): STR R3, SP, 10H |
| IF y.mode = ORB.Const THENy Put1a(Mov,z x.a,a 0,b y.a)c |
1497 | y(80E0000C): LDR R0, SP, CH |
1498 | y(80000000): LDR R0, R0, 0H |
1499 | y(40090001): SUB R0, R0, 1H |
149A | y(E9000008): BNE 8 [14A3H] |
149B | z(40000000): MOV R0, R0, 0H |
149C | a(81E00004): LDR R1, SP, 4H |
149D | a(81100008): LDR R1, R1, 8H |
149E | b(42000000): MOV R2, R0, 0H |
149F | c(83E0000C): LDR R3, SP, CH |
14A0 | c(83300008): LDR R3, R3, 8H |
| ELSEd loade(y)f;g Put0(Mov,h x.a,i 0,j y.r)k;l DEC(RH) |
14A1 | d(F7FFEBA2): BL -5214 [0044H] |
14A2 | e(E700000F): B 15 [14B2H] |
14A3 | f(80E0000C): LDR R0, SP, CH |
14A4 | f(81E00010): LDR R1, SP, 10H |
14A5 | g(F7FFED2D): BL -4819 [01D3H] |
14A6 | h(40000000): MOV R0, R0, 0H |
14A7 | i(81E00004): LDR R1, SP, 4H |
14A8 | i(81100008): LDR R1, R1, 8H |
14A9 | j(42000000): MOV R2, R0, 0H |
14AA | k(83E0000C): LDR R3, SP, CH |
14AB | k(83300010): LDR R3, R3, 10H |
14AC | l(F7FFEB53): BL -5293 [0000H] |
| ENDm |
14AD | m .FIXUP D |
14AD | m(8D000031): LDR SB, MT, MOD0 [ORG] |
14AE | m(40D8002C): ADD R0, SB, 2CH [data] |
14AF | m(81000000): LDR R1, R0, 0H |
14B0 | m(41190001): SUB R1, R1, 1H |
14B1 | m(A1000000): STR R1, R0, 0H |
| ENDn LDREG; |
14B2 | n(8FE00000): LDR LNK, SP, 0H |
14B3 | n(4EE80014): ADD SP, SP, 14H |
14B4 | n(C700000F): B LNK |
| |
| (*In-line code functions*) |
| |
| PROCEDURE Abs*(VAR x: Item); |
| BEGINo |
14B5 | o .PROC 64 |
14B5 | o(4EE9000C): SUB SP, SP, CH |
14B6 | o(AFE00000): STR LNK, SP, 0H |
14B7 | o(A0E00004): STR R0, SP, 4H |
14B8 | o(A1E00008): STR R1, SP, 8H |
| IF x.mode = ORB.Const THENp x.a := ABS(x.a) |
14B9 | p(80E00004): LDR R0, SP, 4H |
14BA | p(80000000): LDR R0, R0, 0H |
14BB | p(40090001): SUB R0, R0, 1H |
14BC | p(E9000009): BNE 9 [14C6H] |
| ELSEq loadr(x)s;t |
14BD | q(80E00004): LDR R0, SP, 4H |
14BE | q(80000008): LDR R0, R0, 8H |
14BF | q(40090000): SUB R0, R0, 0H |
14C0 | q(ED000002): BGE 2 [14C3H] |
14C1 | q(41000000): MOV R1, R0, 0H |
14C2 | q(00190000): SUB R0, R1, R0 |
14C3 | q(81E00004): LDR R1, SP, 4H |
14C4 | q(A0100008): STR R0, R1, 8H |
14C5 | r(E7000031): B 49 [14F7H] |
14C6 | s(80E00004): LDR R0, SP, 4H |
14C7 | s(81E00008): LDR R1, SP, 8H |
14C8 | t(F7FFED0A): BL -4854 [01D3H] |
| IF x.type.formu = ORB.Real THENv Put1(Lsl,w x.r,x x.r,y 1)z;a Put1(Ror,b x.r,c x.r,d 1)e |
14C9 | u(80E00004): LDR R0, SP, 4H |
14CA | u(80000004): LDR R0, R0, 4H |
14CB | u(D17D384C): BLEQ MT [trap=4, pos=32056] |
14CC | v(80000000): LDR R0, R0, 0H |
14CD | v(40090005): SUB R0, R0, 5H |
14CE | v(E900000F): BNE 15 [14DEH] |
14CF | w(40000001): MOV R0, R0, 1H |
14D0 | x(81E00004): LDR R1, SP, 4H |
14D1 | x(81100010): LDR R1, R1, 10H |
14D2 | y(82E00004): LDR R2, SP, 4H |
14D3 | y(82200010): LDR R2, R2, 10H |
14D4 | z(43000001): MOV R3, R0, 1H |
14D5 | a(F7FFEB48): BL -5304 [001EH] |
14D6 | b(40000003): MOV R0, R0, 3H |
14D7 | c(81E00004): LDR R1, SP, 4H |
14D8 | c(81100010): LDR R1, R1, 10H |
14D9 | d(82E00004): LDR R2, SP, 4H |
14DA | d(82200010): LDR R2, R2, 10H |
14DB | e(43000001): MOV R3, R0, 1H |
| ELSEf Put1g(Cmp,h x.r,i x.r,j 0)k;l Put3(BC,m GE,n 2)o;p Put1(Mov,q RH,r 0,s 0)t;u Put0(Sub,v x.r,w RH,x x.r)y |
14DC | f(F7FFEB41): BL -5311 [001EH] |
14DD | g(E7000019): B 25 [14F7H] |
14DE | h(40000009): MOV R0, R0, 9H |
14DF | i(81E00004): LDR R1, SP, 4H |
14E0 | i(81100010): LDR R1, R1, 10H |
14E1 | j(82E00004): LDR R2, SP, 4H |
14E2 | j(82200010): LDR R2, R2, 10H |
14E3 | k(43000000): MOV R3, R0, 0H |
14E4 | l(F7FFEB39): BL -5319 [001EH] |
14E5 | m(40000002): MOV R0, R0, 2H |
14E6 | n(4100000D): MOV R1, R0, DH |
14E7 | o(42000002): MOV R2, R0, 2H |
14E8 | p(F7FFEBA8): BL -5208 [0091H] |
14E9 | q(40000000): MOV R0, R0, 0H |
14EA | r .FIXUP D |
14EA | r(8D00003D): LDR SB, MT, MOD0 [ORG] |
14EB | r(81D0002C): LDR R1, SB, 2CH [data] |
14EC | s(42000000): MOV R2, R0, 0H |
14ED | t(43000000): MOV R3, R0, 0H |
14EE | u(F7FFEB2F): BL -5329 [001EH] |
14EF | v(40000009): MOV R0, R0, 9H |
14F0 | w(81E00004): LDR R1, SP, 4H |
14F1 | w(81100010): LDR R1, R1, 10H |
14F2 | x .FIXUP D |
14F2 | x(8D000008): LDR SB, MT, MOD0 [ORG] |
14F3 | x(82D0002C): LDR R2, SB, 2CH [data] |
14F4 | y(83E00004): LDR R3, SP, 4H |
14F5 | y(83300010): LDR R3, R3, 10H |
| ENDz |
14F6 | z(F7FFEB09): BL -5367 [0000H] |
| END |
| ENDa Abs; |
14F7 | a(8FE00000): LDR LNK, SP, 0H |
14F8 | a(4EE8000C): ADD SP, SP, CH |
14F9 | a(C700000F): B LNK |
| |
| PROCEDURE Odd*(VAR x: Item); |
| BEGINb load(x)c;d Put1(And,e x.r,f x.r,g 1)h;i SetCC(x,j NE)k;l DEC(RH) |
14FA | b .PROC 65 |
14FA | b(4EE9000C): SUB SP, SP, CH |
14FB | b(AFE00000): STR LNK, SP, 0H |
14FC | b(A0E00004): STR R0, SP, 4H |
14FD | b(A1E00008): STR R1, SP, 8H |
14FE | c(80E00004): LDR R0, SP, 4H |
14FF | c(81E00008): LDR R1, SP, 8H |
1500 | d(F7FFECD2): BL -4910 [01D3H] |
1501 | e(40000004): MOV R0, R0, 4H |
1502 | f(81E00004): LDR R1, SP, 4H |
1503 | f(81100010): LDR R1, R1, 10H |
1504 | g(82E00004): LDR R2, SP, 4H |
1505 | g(82200010): LDR R2, R2, 10H |
1506 | h(43000001): MOV R3, R0, 1H |
1507 | i(F7FFEB16): BL -5354 [001EH] |
1508 | j(80E00004): LDR R0, SP, 4H |
1509 | j(81E00008): LDR R1, SP, 8H |
150A | k(42000009): MOV R2, R0, 9H |
150B | l(F7FFEBCC): BL -5172 [00D8H] |
| ENDm Odd; |
150C | m .FIXUP D |
150C | m(8D00001A): LDR SB, MT, MOD0 [ORG] |
150D | m(40D8002C): ADD R0, SB, 2CH [data] |
150E | m(81000000): LDR R1, R0, 0H |
150F | m(41190001): SUB R1, R1, 1H |
1510 | m(A1000000): STR R1, R0, 0H |
1511 | m(8FE00000): LDR LNK, SP, 0H |
1512 | m(4EE8000C): ADD SP, SP, CH |
1513 | m(C700000F): B LNK |
| |
| PROCEDURE Floor*(VAR x: Item); |
| BEGINn load(x)o;p Put1(Mov+U,q RH,r 0,s 4B00H)t;u Put0(Fad+V,v x.r,w x.r,x RH)y |
1514 | n .PROC 66 |
1514 | n(4EE9000C): SUB SP, SP, CH |
1515 | n(AFE00000): STR LNK, SP, 0H |
1516 | n(A0E00004): STR R0, SP, 4H |
1517 | n(A1E00008): STR R1, SP, 8H |
1518 | o(80E00004): LDR R0, SP, 4H |
1519 | o(81E00008): LDR R1, SP, 8H |
151A | p(F7FFECB8): BL -4936 [01D3H] |
151B | q(40002000): MOV R0, R0, 2000H |
151C | r .FIXUP D |
151C | r(8D000010): LDR SB, MT, MOD0 [ORG] |
151D | r(81D0002C): LDR R1, SB, 2CH [data] |
151E | s(42000000): MOV R2, R0, 0H |
151F | t(43004B00): MOV R3, R0, 4B00H |
1520 | u(F7FFEAFD): BL -5379 [001EH] |
1521 | v(4000100C): MOV R0, R0, 100CH |
1522 | w(81E00004): LDR R1, SP, 4H |
1523 | w(81100010): LDR R1, R1, 10H |
1524 | x(82E00004): LDR R2, SP, 4H |
1525 | x(82200010): LDR R2, R2, 10H |
1526 | y .FIXUP D |
1526 | y(8D00000A): LDR SB, MT, MOD0 [ORG] |
1527 | y(83D0002C): LDR R3, SB, 2CH [data] |
| ENDz Floor; |
1528 | z(F7FFEAD7): BL -5417 [0000H] |
1529 | z(8FE00000): LDR LNK, SP, 0H |
152A | z(4EE8000C): ADD SP, SP, CH |
152B | z(C700000F): B LNK |
| |
| PROCEDURE Float*(VAR x: Item); |
| BEGINa load(x)b;c Put1(Mov+U,d RH,e 0,f 4B00H)g;h Put0(Fad+U,i x.r,j x.r,k RH)l |
152C | a .PROC 67 |
152C | a(4EE9000C): SUB SP, SP, CH |
152D | a(AFE00000): STR LNK, SP, 0H |
152E | a(A0E00004): STR R0, SP, 4H |
152F | a(A1E00008): STR R1, SP, 8H |
1530 | b(80E00004): LDR R0, SP, 4H |
1531 | b(81E00008): LDR R1, SP, 8H |
1532 | c(F7FFECA0): BL -4960 [01D3H] |
1533 | d(40002000): MOV R0, R0, 2000H |
1534 | e .FIXUP D |
1534 | e(8D00000E): LDR SB, MT, MOD0 [ORG] |
1535 | e(81D0002C): LDR R1, SB, 2CH [data] |
1536 | f(42000000): MOV R2, R0, 0H |
1537 | g(43004B00): MOV R3, R0, 4B00H |
1538 | h(F7FFEAE5): BL -5403 [001EH] |
1539 | i(4000200C): MOV R0, R0, 200CH |
153A | j(81E00004): LDR R1, SP, 4H |
153B | j(81100010): LDR R1, R1, 10H |
153C | k(82E00004): LDR R2, SP, 4H |
153D | k(82200010): LDR R2, R2, 10H |
153E | l .FIXUP D |
153E | l(8D00000A): LDR SB, MT, MOD0 [ORG] |
153F | l(83D0002C): LDR R3, SB, 2CH [data] |
| ENDm Float; |
1540 | m(F7FFEABF): BL -5441 [0000H] |
1541 | m(8FE00000): LDR LNK, SP, 0H |
1542 | m(4EE8000C): ADD SP, SP, CH |
1543 | m(C700000F): B LNK |
| |
| PROCEDURE Ord*(VAR x: Item); |
| BEGINn |
1544 | n .PROC 68 |
1544 | n(4EE9000C): SUB SP, SP, CH |
1545 | n(AFE00000): STR LNK, SP, 0H |
1546 | n(A0E00004): STR R0, SP, 4H |
1547 | n(A1E00008): STR R1, SP, 8H |
| IF x.mode IN {ORB.Var, ORB.Par, RegI, Cond} THENo load(x)p ENDq |
1548 | o(4000180C): MOV R0, R0, 180CH |
1549 | o(81E00004): LDR R1, SP, 4H |
154A | o(81100000): LDR R1, R1, 0H |
154B | o(41180001): ADD R1, R1, 1H |
154C | o(00030001): ROR R0, R0, R1 |
154D | o(E8000003): BPL 3 [1551H] |
154E | p(80E00004): LDR R0, SP, 4H |
154F | p(81E00008): LDR R1, SP, 8H |
1550 | q(F7FFEC82): BL -4990 [01D3H] |
| ENDr Ord; |
1551 | r(8FE00000): LDR LNK, SP, 0H |
1552 | r(4EE8000C): ADD SP, SP, CH |
1553 | r(C700000F): B LNK |
| |
| PROCEDURE Len*(VAR x: Item); |
| BEGINs |
1554 | s .PROC 69 |
1554 | s(4EE9000C): SUB SP, SP, CH |
1555 | s(AFE00000): STR LNK, SP, 0H |
1556 | s(A0E00004): STR R0, SP, 4H |
1557 | s(A1E00008): STR R1, SP, 8H |
| IF x.type.lent >= 0 THENu |
1558 | t(80E00004): LDR R0, SP, 4H |
1559 | t(80000004): LDR R0, R0, 4H |
155A | t(D17FF84C): BLEQ MT [trap=4, pos=32760] |
155B | u(80000010): LDR R0, R0, 10H |
155C | u(40090000): SUB R0, R0, 0H |
155D | u(E5000013): BLT 19 [1571H] |
| IF x.mode = RegI THENv DEC(RH) ENDw ; |
155E | v(80E00004): LDR R0, SP, 4H |
155F | v(80000000): LDR R0, R0, 0H |
1560 | v(4009000B): SUB R0, R0, BH |
1561 | v(E9000005): BNE 5 [1567H] |
1562 | w .FIXUP D |
1562 | w(8D000024): LDR SB, MT, MOD0 [ORG] |
1563 | w(40D8002C): ADD R0, SB, 2CH [data] |
1564 | w(81000000): LDR R1, R0, 0H |
1565 | w(41190001): SUB R1, R1, 1H |
1566 | w(A1000000): STR R1, R0, 0H |
| x.mode := ORB.Const;x x.a := x.type.leny |
1567 | x(40000001): MOV R0, R0, 1H |
1568 | x(81E00004): LDR R1, SP, 4H |
1569 | x(A0100000): STR R0, R1, 0H |
156A | y(80E00004): LDR R0, SP, 4H |
156B | y(80000004): LDR R0, R0, 4H |
156C | y(D180594C): BLEQ MT [trap=4, pos=32857] |
| ELSEz (*open array*) Put2a(Ldr,b RH,c SP,d x.a + 4 +e frame)f;g x.mode := Reg;h x.r := RH;i incR |
156D | z(80000010): LDR R0, R0, 10H |
156E | z(81E00004): LDR R1, SP, 4H |
156F | z(A0100008): STR R0, R1, 8H |
1570 | a(E7000012): B 18 [1583H] |
1571 | b(40000008): MOV R0, R0, 8H |
1572 | c .FIXUP D |
1572 | c(8D000010): LDR SB, MT, MOD0 [ORG] |
1573 | c(81D0002C): LDR R1, SB, 2CH [data] |
1574 | d(4200000E): MOV R2, R0, EH |
1575 | e(83E00004): LDR R3, SP, 4H |
1576 | e(83300008): LDR R3, R3, 8H |
1577 | e(43380004): ADD R3, R3, 4H |
1578 | f(84D00034): LDR R4, SB, 34H |
1579 | f(03380004): ADD R3, R3, R4 |
157A | g(F7FFEAF6): BL -5386 [0071H] |
157B | h(4000000A): MOV R0, R0, AH |
157C | h(81E00004): LDR R1, SP, 4H |
157D | h(A0100000): STR R0, R1, 0H |
157E | i .FIXUP D |
157E | i(8D00000C): LDR SB, MT, MOD0 [ORG] |
157F | i(80D0002C): LDR R0, SB, 2CH [data] |
1580 | i(81E00004): LDR R1, SP, 4H |
1581 | i(A0100010): STR R0, R1, 10H |
| ENDj |
1582 | j(F7FFEB2B): BL -5333 [00AEH] |
| ENDk Len; |
1583 | k(8FE00000): LDR LNK, SP, 0H |
1584 | k(4EE8000C): ADD SP, SP, CH |
1585 | k(C700000F): B LNK |
| |
| PROCEDURE Shift*(fct: LONGINT; VAR x, y: Item); |
| VAR op: LONGINT; |
| BEGINl load(x)m;n |
1586 | l .PROC 70 |
1586 | l(4EE9001C): SUB SP, SP, 1CH |
1587 | l(AFE00000): STR LNK, SP, 0H |
1588 | l(A0E00004): STR R0, SP, 4H |
1589 | l(A1E00008): STR R1, SP, 8H |
158A | l(A2E0000C): STR R2, SP, CH |
158B | l(A3E00010): STR R3, SP, 10H |
158C | l(A4E00014): STR R4, SP, 14H |
158D | m(80E00008): LDR R0, SP, 8H |
158E | m(81E0000C): LDR R1, SP, CH |
158F | n(F7FFEC43): BL -5053 [01D3H] |
| IF fct = 0 THENo op := Lsl ELSIFp fctq = 1 THENr op := Asr ELSEs opt := Ror ENDu ; |
1590 | o(80E00004): LDR R0, SP, 4H |
1591 | o(E9000003): BNE 3 [1595H] |
1592 | p(40000001): MOV R0, R0, 1H |
1593 | p(A0E00018): STR R0, SP, 18H |
1594 | q(E7000008): B 8 [159DH] |
1595 | r(80E00004): LDR R0, SP, 4H |
1596 | r(40090001): SUB R0, R0, 1H |
1597 | r(E9000003): BNE 3 [159BH] |
1598 | s(40000002): MOV R0, R0, 2H |
1599 | s(A0E00018): STR R0, SP, 18H |
159A | t(E7000002): B 2 [159DH] |
159B | u(40000003): MOV R0, R0, 3H |
159C | u(A0E00018): STR R0, SP, 18H |
| IF y.mode = ORB.Const THENv Put1(op,w x.r,x x.r,y y.a MOD 20H)z |
159D | v(80E00010): LDR R0, SP, 10H |
159E | v(80000000): LDR R0, R0, 0H |
159F | v(40090001): SUB R0, R0, 1H |
15A0 | v(E900000A): BNE 10 [15ABH] |
15A1 | w(80E00018): LDR R0, SP, 18H |
15A2 | x(81E00008): LDR R1, SP, 8H |
15A3 | x(81100010): LDR R1, R1, 10H |
15A4 | y(82E00008): LDR R2, SP, 8H |
15A5 | y(82200010): LDR R2, R2, 10H |
15A6 | z(83E00010): LDR R3, SP, 10H |
15A7 | z(83300008): LDR R3, R3, 8H |
15A8 | z(4334001F): AND R3, R3, 1FH |
| ELSEa loadb(y)c;d Put0(op,e RH-2,f x.r,g y.r)h;i DEC(RH);j x.r := RH-1 |
15A9 | a(F7FFEA74): BL -5516 [001EH] |
15AA | b(E7000015): B 21 [15C0H] |
15AB | c(80E00010): LDR R0, SP, 10H |
15AC | c(81E00014): LDR R1, SP, 14H |
15AD | d(F7FFEC25): BL -5083 [01D3H] |
15AE | e(80E00018): LDR R0, SP, 18H |
15AF | f .FIXUP D |
15AF | f(8D000031): LDR SB, MT, MOD0 [ORG] |
15B0 | f(81D0002C): LDR R1, SB, 2CH [data] |
15B1 | f(41190002): SUB R1, R1, 2H |
15B2 | g(82E00008): LDR R2, SP, 8H |
15B3 | g(82200010): LDR R2, R2, 10H |
15B4 | h(83E00010): LDR R3, SP, 10H |
15B5 | h(83300010): LDR R3, R3, 10H |
15B6 | i(F7FFEA49): BL -5559 [0000H] |
15B7 | j .FIXUP D |
15B7 | j(8D000008): LDR SB, MT, MOD0 [ORG] |
15B8 | j(40D8002C): ADD R0, SB, 2CH [data] |
15B9 | j(81000000): LDR R1, R0, 0H |
15BA | j(41190001): SUB R1, R1, 1H |
15BB | j(A1000000): STR R1, R0, 0H |
| ENDk |
15BC | k(80D0002C): LDR R0, SB, 2CH |
15BD | k(40090001): SUB R0, R0, 1H |
15BE | k(81E00008): LDR R1, SP, 8H |
15BF | k(A0100010): STR R0, R1, 10H |
| ENDl Shift; |
15C0 | l(8FE00000): LDR LNK, SP, 0H |
15C1 | l(4EE8001C): ADD SP, SP, 1CH |
15C2 | l(C700000F): B LNK |
| |
| PROCEDURE ADC*(VAR x, y: Item); |
| BEGINm load(x)n;o load(y)p;q Put0(Add+2000H,r x.r,s x.r,t y.r)u;v DEC(RH) |
15C3 | m .PROC 71 |
15C3 | m(4EE90014): SUB SP, SP, 14H |
15C4 | m(AFE00000): STR LNK, SP, 0H |
15C5 | m(A0E00004): STR R0, SP, 4H |
15C6 | m(A1E00008): STR R1, SP, 8H |
15C7 | m(A2E0000C): STR R2, SP, CH |
15C8 | m(A3E00010): STR R3, SP, 10H |
15C9 | n(80E00004): LDR R0, SP, 4H |
15CA | n(81E00008): LDR R1, SP, 8H |
15CB | o(F7FFEC07): BL -5113 [01D3H] |
15CC | p(80E0000C): LDR R0, SP, CH |
15CD | p(81E00010): LDR R1, SP, 10H |
15CE | q(F7FFEC04): BL -5116 [01D3H] |
15CF | r(40002008): MOV R0, R0, 2008H |
15D0 | s(81E00004): LDR R1, SP, 4H |
15D1 | s(81100010): LDR R1, R1, 10H |
15D2 | t(82E00004): LDR R2, SP, 4H |
15D3 | t(82200010): LDR R2, R2, 10H |
15D4 | u(83E0000C): LDR R3, SP, CH |
15D5 | u(83300010): LDR R3, R3, 10H |
15D6 | v(F7FFEA29): BL -5591 [0000H] |
| ENDw ADC; |
15D7 | w .FIXUP D |
15D7 | w(8D000020): LDR SB, MT, MOD0 [ORG] |
15D8 | w(40D8002C): ADD R0, SB, 2CH [data] |
15D9 | w(81000000): LDR R1, R0, 0H |
15DA | w(41190001): SUB R1, R1, 1H |
15DB | w(A1000000): STR R1, R0, 0H |
15DC | w(8FE00000): LDR LNK, SP, 0H |
15DD | w(4EE80014): ADD SP, SP, 14H |
15DE | w(C700000F): B LNK |
| |
| PROCEDURE SBC*(VAR x, y: Item); |
| BEGINx load(x)y;z load(y)a;b Put0(Sub+2000H,c x.r,d x.r,e y.r)f;g DEC(RH) |
15DF | x .PROC 72 |
15DF | x(4EE90014): SUB SP, SP, 14H |
15E0 | x(AFE00000): STR LNK, SP, 0H |
15E1 | x(A0E00004): STR R0, SP, 4H |
15E2 | x(A1E00008): STR R1, SP, 8H |
15E3 | x(A2E0000C): STR R2, SP, CH |
15E4 | x(A3E00010): STR R3, SP, 10H |
15E5 | y(80E00004): LDR R0, SP, 4H |
15E6 | y(81E00008): LDR R1, SP, 8H |
15E7 | z(F7FFEBEB): BL -5141 [01D3H] |
15E8 | a(80E0000C): LDR R0, SP, CH |
15E9 | a(81E00010): LDR R1, SP, 10H |
15EA | b(F7FFEBE8): BL -5144 [01D3H] |
15EB | c(40002009): MOV R0, R0, 2009H |
15EC | d(81E00004): LDR R1, SP, 4H |
15ED | d(81100010): LDR R1, R1, 10H |
15EE | e(82E00004): LDR R2, SP, 4H |
15EF | e(82200010): LDR R2, R2, 10H |
15F0 | f(83E0000C): LDR R3, SP, CH |
15F1 | f(83300010): LDR R3, R3, 10H |
15F2 | g(F7FFEA0D): BL -5619 [0000H] |
| ENDh SBC; |
15F3 | h .FIXUP D |
15F3 | h(8D00001C): LDR SB, MT, MOD0 [ORG] |
15F4 | h(40D8002C): ADD R0, SB, 2CH [data] |
15F5 | h(81000000): LDR R1, R0, 0H |
15F6 | h(41190001): SUB R1, R1, 1H |
15F7 | h(A1000000): STR R1, R0, 0H |
15F8 | h(8FE00000): LDR LNK, SP, 0H |
15F9 | h(4EE80014): ADD SP, SP, 14H |
15FA | h(C700000F): B LNK |
| |
| PROCEDURE UML*(VAR x, y: Item); |
| BEGINi load(x)j;k load(y)l;m Put0(Mul+2000H,n x.r,o x.r,p y.r)q;r DEC(RH) |
15FB | i .PROC 73 |
15FB | i(4EE90014): SUB SP, SP, 14H |
15FC | i(AFE00000): STR LNK, SP, 0H |
15FD | i(A0E00004): STR R0, SP, 4H |
15FE | i(A1E00008): STR R1, SP, 8H |
15FF | i(A2E0000C): STR R2, SP, CH |
1600 | i(A3E00010): STR R3, SP, 10H |
1601 | j(80E00004): LDR R0, SP, 4H |
1602 | j(81E00008): LDR R1, SP, 8H |
1603 | k(F7FFEBCF): BL -5169 [01D3H] |
1604 | l(80E0000C): LDR R0, SP, CH |
1605 | l(81E00010): LDR R1, SP, 10H |
1606 | m(F7FFEBCC): BL -5172 [01D3H] |
1607 | n(4000200A): MOV R0, R0, 200AH |
1608 | o(81E00004): LDR R1, SP, 4H |
1609 | o(81100010): LDR R1, R1, 10H |
160A | p(82E00004): LDR R2, SP, 4H |
160B | p(82200010): LDR R2, R2, 10H |
160C | q(83E0000C): LDR R3, SP, CH |
160D | q(83300010): LDR R3, R3, 10H |
160E | r(F7FFE9F1): BL -5647 [0000H] |
| ENDs UML; |
160F | s .FIXUP D |
160F | s(8D00001C): LDR SB, MT, MOD0 [ORG] |
1610 | s(40D8002C): ADD R0, SB, 2CH [data] |
1611 | s(81000000): LDR R1, R0, 0H |
1612 | s(41190001): SUB R1, R1, 1H |
1613 | s(A1000000): STR R1, R0, 0H |
1614 | s(8FE00000): LDR LNK, SP, 0H |
1615 | s(4EE80014): ADD SP, SP, 14H |
1616 | s(C700000F): B LNK |
| |
| PROCEDURE Bit*(VAR x, y: Item); |
| BEGINt load(x)u;v Put2(Ldr,w x.r,x x.r,y 0)z;a |
1617 | t .PROC 74 |
1617 | t(4EE90014): SUB SP, SP, 14H |
1618 | t(AFE00000): STR LNK, SP, 0H |
1619 | t(A0E00004): STR R0, SP, 4H |
161A | t(A1E00008): STR R1, SP, 8H |
161B | t(A2E0000C): STR R2, SP, CH |
161C | t(A3E00010): STR R3, SP, 10H |
161D | u(80E00004): LDR R0, SP, 4H |
161E | u(81E00008): LDR R1, SP, 8H |
161F | v(F7FFEBB3): BL -5197 [01D3H] |
1620 | w(40000008): MOV R0, R0, 8H |
1621 | x(81E00004): LDR R1, SP, 4H |
1622 | x(81100010): LDR R1, R1, 10H |
1623 | y(82E00004): LDR R2, SP, 4H |
1624 | y(82200010): LDR R2, R2, 10H |
1625 | z(43000000): MOV R3, R0, 0H |
1626 | a(F7FFEA4A): BL -5558 [0071H] |
| IF y.mode = ORB.Const THENb Put1(Ror,c x.r,d x.r,e y.a+1)f;g DEC(RH) |
1627 | b(80E0000C): LDR R0, SP, CH |
1628 | b(80000000): LDR R0, R0, 0H |
1629 | b(40090001): SUB R0, R0, 1H |
162A | b(E900000F): BNE 15 [163AH] |
162B | c(40000003): MOV R0, R0, 3H |
162C | d(81E00004): LDR R1, SP, 4H |
162D | d(81100010): LDR R1, R1, 10H |
162E | e(82E00004): LDR R2, SP, 4H |
162F | e(82200010): LDR R2, R2, 10H |
1630 | f(83E0000C): LDR R3, SP, CH |
1631 | f(83300008): LDR R3, R3, 8H |
1632 | f(43380001): ADD R3, R3, 1H |
1633 | g(F7FFE9EA): BL -5654 [001EH] |
| ELSEh loadi(y)j;k Put1(Add,l y.r,m y.r,n 1)o;p Put0(Ror,q x.r,r x.r,s y.r)t;u DEC(RH, 2) |
1634 | h .FIXUP D |
1634 | h(8D000025): LDR SB, MT, MOD0 [ORG] |
1635 | h(40D8002C): ADD R0, SB, 2CH [data] |
1636 | h(81000000): LDR R1, R0, 0H |
1637 | h(41190001): SUB R1, R1, 1H |
1638 | h(A1000000): STR R1, R0, 0H |
1639 | i(E7000017): B 23 [1651H] |
163A | j(80E0000C): LDR R0, SP, CH |
163B | j(81E00010): LDR R1, SP, 10H |
163C | k(F7FFEB96): BL -5226 [01D3H] |
163D | l(40000008): MOV R0, R0, 8H |
163E | m(81E0000C): LDR R1, SP, CH |
163F | m(81100010): LDR R1, R1, 10H |
1640 | n(82E0000C): LDR R2, SP, CH |
1641 | n(82200010): LDR R2, R2, 10H |
1642 | o(43000001): MOV R3, R0, 1H |
1643 | p(F7FFE9DA): BL -5670 [001EH] |
1644 | q(40000003): MOV R0, R0, 3H |
1645 | r(81E00004): LDR R1, SP, 4H |
1646 | r(81100010): LDR R1, R1, 10H |
1647 | s(82E00004): LDR R2, SP, 4H |
1648 | s(82200010): LDR R2, R2, 10H |
1649 | t(83E0000C): LDR R3, SP, CH |
164A | t(83300010): LDR R3, R3, 10H |
164B | u(F7FFE9B4): BL -5708 [0000H] |
| ENDv ; |
164C | v .FIXUP D |
164C | v(8D000018): LDR SB, MT, MOD0 [ORG] |
164D | v(40D8002C): ADD R0, SB, 2CH [data] |
164E | v(81000000): LDR R1, R0, 0H |
164F | v(41190002): SUB R1, R1, 2H |
1650 | v(A1000000): STR R1, R0, 0H |
| SetCC(x,w MI)x |
1651 | w(80E00004): LDR R0, SP, 4H |
1652 | w(81E00008): LDR R1, SP, 8H |
1653 | x(42000000): MOV R2, R0, 0H |
| ENDy Bit; |
1654 | y(F7FFEA83): BL -5501 [00D8H] |
1655 | y(8FE00000): LDR LNK, SP, 0H |
1656 | y(4EE80014): ADD SP, SP, 14H |
1657 | y(C700000F): B LNK |
| |
| PROCEDURE Register*(VAR x: Item); |
| BEGINz (*x.mode = Const*) |
1658 | z .PROC 75 |
1658 | z(4EE9000C): SUB SP, SP, CH |
1659 | z(AFE00000): STR LNK, SP, 0H |
165A | z(A0E00004): STR R0, SP, 4H |
165B | z(A1E00008): STR R1, SP, 8H |
| Put0(Mov,a RH,b 0,c x.a MOD 10H)d;e x.mode := Reg;f x.r := RH;g incR |
165C | a(40000000): MOV R0, R0, 0H |
165D | b .FIXUP D |
165D | b(8D000011): LDR SB, MT, MOD0 [ORG] |
165E | b(81D0002C): LDR R1, SB, 2CH [data] |
165F | c(42000000): MOV R2, R0, 0H |
1660 | d(83E00004): LDR R3, SP, 4H |
1661 | d(83300008): LDR R3, R3, 8H |
1662 | d(4334000F): AND R3, R3, FH |
1663 | e(F7FFE99C): BL -5732 [0000H] |
1664 | f(4000000A): MOV R0, R0, AH |
1665 | f(81E00004): LDR R1, SP, 4H |
1666 | f(A0100000): STR R0, R1, 0H |
1667 | g .FIXUP D |
1667 | g(8D00000A): LDR SB, MT, MOD0 [ORG] |
1668 | g(80D0002C): LDR R0, SB, 2CH [data] |
1669 | g(81E00004): LDR R1, SP, 4H |
166A | g(A0100010): STR R0, R1, 10H |
| ENDh Register; |
166B | h(F7FFEA42): BL -5566 [00AEH] |
166C | h(8FE00000): LDR LNK, SP, 0H |
166D | h(4EE8000C): ADD SP, SP, CH |
166E | h(C700000F): B LNK |
| |
| PROCEDURE H*(VAR x: Item); |
| BEGINi (*x.mode = Const*) |
166F | i .PROC 76 |
166F | i(4EE9000C): SUB SP, SP, CH |
1670 | i(AFE00000): STR LNK, SP, 0H |
1671 | i(A0E00004): STR R0, SP, 4H |
1672 | i(A1E00008): STR R1, SP, 8H |
| Put0(Mov + U + x.a MOD 2 *j V,k RH,l 0,m 0)n;o x.mode := Reg;p x.r := RH;q incR |
1673 | j(80E00004): LDR R0, SP, 4H |
1674 | j(80000008): LDR R0, R0, 8H |
1675 | j(40040001): AND R0, R0, 1H |
1676 | k(4001000C): LSL R0, R0, CH |
1677 | k(41002000): MOV R1, R0, 2000H |
1678 | k(00180000): ADD R0, R1, R0 |
1679 | l .FIXUP D |
1679 | l(8D000012): LDR SB, MT, MOD0 [ORG] |
167A | l(81D0002C): LDR R1, SB, 2CH [data] |
167B | m(42000000): MOV R2, R0, 0H |
167C | n(43000000): MOV R3, R0, 0H |
167D | o(F7FFE982): BL -5758 [0000H] |
167E | p(4000000A): MOV R0, R0, AH |
167F | p(81E00004): LDR R1, SP, 4H |
1680 | p(A0100000): STR R0, R1, 0H |
1681 | q .FIXUP D |
1681 | q(8D000008): LDR SB, MT, MOD0 [ORG] |
1682 | q(80D0002C): LDR R0, SB, 2CH [data] |
1683 | q(81E00004): LDR R1, SP, 4H |
1684 | q(A0100010): STR R0, R1, 10H |
| ENDr H; |
1685 | r(F7FFEA28): BL -5592 [00AEH] |
1686 | r(8FE00000): LDR LNK, SP, 0H |
1687 | r(4EE8000C): ADD SP, SP, CH |
1688 | r(C700000F): B LNK |
| |
| PROCEDURE Adr*(VAR x: Item); |
| BEGINs |
1689 | s .PROC 77 |
1689 | s(4EE9000C): SUB SP, SP, CH |
168A | s(AFE00000): STR LNK, SP, 0H |
168B | s(A0E00004): STR R0, SP, 4H |
168C | s(A1E00008): STR R1, SP, 8H |
| IF x.mode IN {ORB.Var, ORB.Par, RegI} THENt loadAdr(x)u |
168D | t(4000080C): MOV R0, R0, 80CH |
168E | t(81E00004): LDR R1, SP, 4H |
168F | t(81100000): LDR R1, R1, 0H |
1690 | t(41180001): ADD R1, R1, 1H |
1691 | t(00030001): ROR R0, R0, R1 |
1692 | t(E8000004): BPL 4 [1697H] |
1693 | u(80E00004): LDR R0, SP, 4H |
1694 | u(81E00008): LDR R1, SP, 8H |
| ELSIFv (wx.mode = ORB.Const)x & (yx.type.formz = ORB.Proc)a THENb load(x)c |
1695 | v(F7FFEC26): BL -5082 [02BCH] |
1696 | w(E7000020): B 32 [16B7H] |
1697 | x(80E00004): LDR R0, SP, 4H |
1698 | x(80000000): LDR R0, R0, 0H |
1699 | x(40090001): SUB R0, R0, 1H |
169A | y(E900000A): BNE 10 [16A5H] |
169B | z(80E00004): LDR R0, SP, 4H |
169C | z(80000004): LDR R0, R0, 4H |
169D | z(D1860B4C): BLEQ MT [trap=4, pos=34315] |
169E | a(80000000): LDR R0, R0, 0H |
169F | a(4009000A): SUB R0, R0, AH |
16A0 | b(E9000004): BNE 4 [16A5H] |
16A1 | c(80E00004): LDR R0, SP, 4H |
16A2 | c(81E00008): LDR R1, SP, 8H |
| ELSIFd (ex.mode = ORB.Const)f & (gx.type.formh = ORB.String)i THENj loadStringAdr(x)k |
16A3 | d(F7FFEB2F): BL -5329 [01D3H] |
16A4 | e(E7000012): B 18 [16B7H] |
16A5 | f(80E00004): LDR R0, SP, 4H |
16A6 | f(80000000): LDR R0, R0, 0H |
16A7 | f(40090001): SUB R0, R0, 1H |
16A8 | g(E900000A): BNE 10 [16B3H] |
16A9 | h(80E00004): LDR R0, SP, 4H |
16AA | h(80000004): LDR R0, R0, 4H |
16AB | h(D186524C): BLEQ MT [trap=4, pos=34386] |
16AC | i(80000000): LDR R0, R0, 0H |
16AD | i(4009000B): SUB R0, R0, BH |
16AE | j(E9000004): BNE 4 [16B3H] |
16AF | k(80E00004): LDR R0, SP, 4H |
16B0 | k(81E00008): LDR R1, SP, 8H |
| ELSEl ORSm.Mark("not addressable")n |
16B1 | l(F7FFECC1): BL -4927 [0373H] |
16B2 | m(E7000004): B 4 [16B7H] |
16B3 | n .FIXUP D |
16B3 | n(8D000032): LDR SB, MT, MOD0 [ORG] |
16B4 | n(40D88A8C): ADD R0, SB, FFFF8A8CH [data] |
16B5 | n(41000010): MOV R1, R0, 10H |
| ENDo |
16B6 | o .FIXUP P |
16B6 | o(F7209270): BL MOD2 [ORS] PROC9 |
| ENDp Adr; |
16B7 | p(8FE00000): LDR LNK, SP, 0H |
16B8 | p(4EE8000C): ADD SP, SP, CH |
16B9 | p(C700000F): B LNK |
| |
| PROCEDURE Condition*(VAR x: Item); |
| BEGINq (*x.mode = Const*) SetCC(x,r x.a)s |
16BA | q .PROC 78 |
16BA | q(4EE9000C): SUB SP, SP, CH |
16BB | q(AFE00000): STR LNK, SP, 0H |
16BC | q(A0E00004): STR R0, SP, 4H |
16BD | q(A1E00008): STR R1, SP, 8H |
16BE | r(80E00004): LDR R0, SP, 4H |
16BF | r(81E00008): LDR R1, SP, 8H |
16C0 | s(82E00004): LDR R2, SP, 4H |
16C1 | s(82200008): LDR R2, R2, 8H |
| ENDt Condition; |
16C2 | t(F7FFEA15): BL -5611 [00D8H] |
16C3 | t(8FE00000): LDR LNK, SP, 0H |
16C4 | t(4EE8000C): ADD SP, SP, CH |
16C5 | t(C700000F): B LNK |
| |
| PROCEDURE Open*(v: INTEGER); |
| BEGINu pc := 0;v tdx := 0;w strx := 0;x RH := 0;y fixorgP := 0;z fixorgD := 0;a fixorgT := 0;b check := v # 0;c version := v;d |
16C6 | u .PROC 79 |
16C6 | u(4EE90008): SUB SP, SP, 8H |
16C7 | u(AFE00000): STR LNK, SP, 0H |
16C8 | u(A0E00004): STR R0, SP, 4H |
16C9 | v(40000000): MOV R0, R0, 0H |
16CA | v .FIXUP D |
16CA | v(8D000017): LDR SB, MT, MOD0 [ORG] |
16CB | v(A0D00018): STR R0, SB, 18H [data] |
16CC | w(40000000): MOV R0, R0, 0H |
16CD | w(A0D00020): STR R0, SB, 20H |
16CE | x(40000000): MOV R0, R0, 0H |
16CF | x(A0D00024): STR R0, SB, 24H |
16D0 | y(40000000): MOV R0, R0, 0H |
16D1 | y(A0D0002C): STR R0, SB, 2CH |
16D2 | z(40000000): MOV R0, R0, 0H |
16D3 | z(A0D00038): STR R0, SB, 38H |
16D4 | a(40000000): MOV R0, R0, 0H |
16D5 | a(A0D0003C): STR R0, SB, 3CH |
16D6 | b(40000000): MOV R0, R0, 0H |
16D7 | b(A0D00040): STR R0, SB, 40H |
16D8 | c(80E00004): LDR R0, SP, 4H |
16D9 | c(E1000002): BEQ 2 [16DCH] |
16DA | c(40000001): MOV R0, R0, 1H |
16DB | c(E7000001): B 1 [16DDH] |
16DC | c(40000000): MOV R0, R0, 0H |
16DD | c .FIXUP D |
16DD | c(8D000013): LDR SB, MT, MOD0 [ORG] |
16DE | c(B0D00044): STR R0, SB, 44H [data] |
16DF | d(80E00004): LDR R0, SP, 4H |
16E0 | d(A0D00048): STR R0, SB, 48H |
| IF v = 0 THENe pc := 1;f |
16E1 | e(80E00004): LDR R0, SP, 4H |
16E2 | e(E9000012): BNE 18 [16F5H] |
16E3 | f(40000001): MOV R0, R0, 1H |
16E4 | f .FIXUP D |
16E4 | f(8D000007): LDR SB, MT, MOD0 [ORG] |
16E5 | f(A0D00018): STR R0, SB, 18H [data] |
| REPEAT code[pc]g := 0;h INC(pc) UNTILi pc = 8 |
16E6 | g .FIXUP D |
16E6 | g(8D000002): LDR SB, MT, MOD0 [ORG] |
16E7 | g(80D00018): LDR R0, SB, 18H [data] |
16E8 | g(41091F40): SUB R1, R0, 1F40H |
16E9 | g(DA87D61C): BLCC MT [trap=1, pos=34774] |
16EA | g(40010002): LSL R0, R0, 2H |
16EB | g(00D80000): ADD R0, SB, R0 |
16EC | h(41000000): MOV R1, R0, 0H |
16ED | h(A1000064): STR R1, R0, 64H |
16EE | i(40D80018): ADD R0, SB, 18H |
16EF | i(81000000): LDR R1, R0, 0H |
16F0 | i(41180001): ADD R1, R1, 1H |
16F1 | i(A1000000): STR R1, R0, 0H |
| ENDj |
16F2 | j(80D00018): LDR R0, SB, 18H |
16F3 | j(40090008): SUB R0, R0, 8H |
16F4 | j(E9FFFFF1): BNE -15 [16E6H] |
| ENDk Open; |
16F5 | k(8FE00000): LDR LNK, SP, 0H |
16F6 | k(4EE80008): ADD SP, SP, 8H |
16F7 | k(C700000F): B LNK |
| |
| PROCEDURE SetDataSize*(dc: LONGINT); |
| BEGINl varsize := dc |
16F8 | l .PROC 80 |
16F8 | l(4EE90008): SUB SP, SP, 8H |
16F9 | l(AFE00000): STR LNK, SP, 0H |
16FA | l(A0E00004): STR R0, SP, 4H |
| ENDm SetDataSize; |
16FB | m(80E00004): LDR R0, SP, 4H |
16FC | m .FIXUP D |
16FC | m(8D000016): LDR SB, MT, MOD0 [ORG] |
16FD | m(A0D0001C): STR R0, SB, 1CH [data] |
16FE | m(8FE00000): LDR LNK, SP, 0H |
16FF | m(4EE80008): ADD SP, SP, 8H |
1700 | m(C700000F): B LNK |
| |
| PROCEDURE Header*; |
| BEGINn entry := pc*4;o |
1701 | n .PROC 81 |
1701 | n .COMMAND Header |
1701 | n(4EE90004): SUB SP, SP, 4H |
1702 | n(AFE00000): STR LNK, SP, 0H |
1703 | o .FIXUP D |
1703 | o(8D000007): LDR SB, MT, MOD0 [ORG] |
1704 | o(80D00018): LDR R0, SB, 18H [data] |
1705 | o(40010002): LSL R0, R0, 2H |
1706 | o(A0D00028): STR R0, SB, 28H |
| IF version = 0 THENp code[0] := 0E7000000H-1 + pc;q Put1a(Mov,r SB,s 0,t VarOrg0)u;v Put1a(Mov,w SP,x 0,y StkOrg0)z (*RISC-0*) |
1707 | p(80D00048): LDR R0, SB, 48H |
1708 | p(E9000011): BNE 17 [171AH] |
1709 | q(6000E6FF): MOV' R0, R0, FFFFE6FFH |
170A | q(4006FFFF): IOR R0, R0, FFFFFFFFH |
170B | q .FIXUP D |
170B | q(8D000008): LDR SB, MT, MOD0 [ORG] |
170C | q(81D00018): LDR R1, SB, 18H [data] |
170D | q(00080001): ADD R0, R0, R1 |
170E | q(A0D00064): STR R0, SB, 64H |
170F | r(40000000): MOV R0, R0, 0H |
1710 | s(4100000D): MOV R1, R0, DH |
1711 | t(42000000): MOV R2, R0, 0H |
1712 | u(43000000): MOV R3, R0, 0H |
1713 | v(F7FFE930): BL -5840 [0044H] |
1714 | w(40000000): MOV R0, R0, 0H |
1715 | x(4100000E): MOV R1, R0, EH |
1716 | y(42000000): MOV R2, R0, 0H |
1717 | z(5300FFC0): MOV R3, R0, FFFFFFC0H |
| ELSEa Put1b(Sub,c SP,d SP,e 4)f;g Put2(Str,h LNK,i SP,j 0)k;l invalSB |
1718 | a(F7FFE92B): BL -5845 [0044H] |
1719 | b(E700000B): B 11 [1725H] |
171A | c(40000009): MOV R0, R0, 9H |
171B | d(4100000E): MOV R1, R0, EH |
171C | e(4200000E): MOV R2, R0, EH |
171D | f(43000004): MOV R3, R0, 4H |
171E | g(F7FFE8FF): BL -5889 [001EH] |
171F | h(4000000A): MOV R0, R0, AH |
1720 | i(4100000F): MOV R1, R0, FH |
1721 | j(4200000E): MOV R2, R0, EH |
1722 | k(43000000): MOV R3, R0, 0H |
1723 | l(F7FFE94D): BL -5811 [0071H] |
| ENDm |
1724 | m(F7FFE9EF): BL -5649 [0114H] |
| ENDn Header; |
1725 | n(8FE00000): LDR LNK, SP, 0H |
1726 | n(4EE80004): ADD SP, SP, 4H |
1727 | n(C700000F): B LNK |
| |
| PROCEDURE NofPtrs(typ: ORB.Type): LONGINT; |
| VAR fld: ORB.Object; n: LONGINT; |
| BEGINo |
1728 | o(4EE90010): SUB SP, SP, 10H |
1729 | o(AFE00000): STR LNK, SP, 0H |
172A | o(A0E00004): STR R0, SP, 4H |
| IF (typ.formp = ORB.Pointer)q OR (rtyp.forms = ORB.NilTyp)t THENu n := 1 |
172B | p(80E00004): LDR R0, SP, 4H |
172C | p(D189BC4C): BLEQ MT [trap=4, pos=35260] |
172D | q(80000000): LDR R0, R0, 0H |
172E | q(40090007): SUB R0, R0, 7H |
172F | r(E1000005): BEQ 5 [1735H] |
1730 | s(80E00004): LDR R0, SP, 4H |
1731 | s(D189D84C): BLEQ MT [trap=4, pos=35288] |
1732 | t(80000000): LDR R0, R0, 0H |
1733 | t(40090008): SUB R0, R0, 8H |
1734 | u(E9000003): BNE 3 [1738H] |
| ELSIFv typw.formx = ORB.Record THENy |
1735 | v(40000001): MOV R0, R0, 1H |
1736 | v(A0E0000C): STR R0, SP, CH |
1737 | w(E700002B): B 43 [1763H] |
1738 | x(80E00004): LDR R0, SP, 4H |
1739 | x(D18A054C): BLEQ MT [trap=4, pos=35333] |
173A | y(80000000): LDR R0, R0, 0H |
173B | y(4009000D): SUB R0, R0, DH |
173C | y(E9000015): BNE 21 [1752H] |
| fld := typ.dscz;a n := 0;b |
173D | z(80E00004): LDR R0, SP, 4H |
173E | z(D18A2C4C): BLEQ MT [trap=4, pos=35372] |
173F | a(80000014): LDR R0, R0, 14H |
1740 | a(A0E00008): STR R0, SP, 8H |
1741 | b(40000000): MOV R0, R0, 0H |
1742 | b(A0E0000C): STR R0, SP, CH |
| WHILE fld # NIL DOc n := NofPtrs(fld.typed)e +f n;g fld := fld.nexth ENDi |
1743 | c(80E00008): LDR R0, SP, 8H |
1744 | c(E100000C): BEQ 12 [1751H] |
1745 | d(80E00008): LDR R0, SP, 8H |
1746 | d(D18A644C): BLEQ MT [trap=4, pos=35428] |
1747 | e(80000010): LDR R0, R0, 10H |
1748 | f(F7FFFFDF): BL -33 [1728H] |
1749 | g(81E0000C): LDR R1, SP, CH |
174A | g(00080001): ADD R0, R0, R1 |
174B | g(A0E0000C): STR R0, SP, CH |
174C | h(80E00008): LDR R0, SP, 8H |
174D | h(D18A7A4C): BLEQ MT [trap=4, pos=35450] |
174E | i(80000008): LDR R0, R0, 8H |
174F | i(A0E00008): STR R0, SP, 8H |
1750 | i(E7FFFFF2): B -14 [1743H] |
| ELSIF typj.formk = ORB.Array THENl n := NofPtrs(typ.basem)n *o typ.lenp |
1751 | j(E7000011): B 17 [1763H] |
1752 | k(80E00004): LDR R0, SP, 4H |
1753 | k(D18A914C): BLEQ MT [trap=4, pos=35473] |
1754 | l(80000000): LDR R0, R0, 0H |
1755 | l(4009000C): SUB R0, R0, CH |
1756 | l(E900000A): BNE 10 [1761H] |
1757 | m(80E00004): LDR R0, SP, 4H |
1758 | m(D18AB84C): BLEQ MT [trap=4, pos=35512] |
1759 | n(8000001C): LDR R0, R0, 1CH |
175A | o(F7FFFFCD): BL -51 [1728H] |
175B | p(81E00004): LDR R1, SP, 4H |
175C | p(D18AC34C): BLEQ MT [trap=4, pos=35523] |
| ELSEq nr := 0 |
175D | q(81100010): LDR R1, R1, 10H |
175E | q(000A0001): MUL R0, R0, R1 |
175F | q(A0E0000C): STR R0, SP, CH |
1760 | r(E7000002): B 2 [1763H] |
| ENDs ; |
1761 | s(40000000): MOV R0, R0, 0H |
1762 | s(A0E0000C): STR R0, SP, CH |
| RETURN n |
| ENDt NofPtrs; |
1763 | t(80E0000C): LDR R0, SP, CH |
1764 | t(8FE00000): LDR LNK, SP, 0H |
1765 | t(4EE80010): ADD SP, SP, 10H |
1766 | t(C700000F): B LNK |
| |
| PROCEDURE FindPtrs(VAR R: Files.Rider; typ: ORB.Type; adr: LONGINT); |
| VAR fld: ORB.Object; i, s: LONGINT; |
| BEGINu |
1767 | u(4EE90020): SUB SP, SP, 20H |
1768 | u(AFE00000): STR LNK, SP, 0H |
1769 | u(A0E00004): STR R0, SP, 4H |
176A | u(A1E00008): STR R1, SP, 8H |
176B | u(A2E0000C): STR R2, SP, CH |
176C | u(A3E00010): STR R3, SP, 10H |
| IF (typ.formv = ORB.Pointer)w OR (xtyp.formy = ORB.NilTyp)z THENa Files.WriteInt(R,b adr)c |
176D | v(80E0000C): LDR R0, SP, CH |
176E | v(D18B824C): BLEQ MT [trap=4, pos=35714] |
176F | w(80000000): LDR R0, R0, 0H |
1770 | w(40090007): SUB R0, R0, 7H |
1771 | x(E1000005): BEQ 5 [1777H] |
1772 | y(80E0000C): LDR R0, SP, CH |
1773 | y(D18B9E4C): BLEQ MT [trap=4, pos=35742] |
1774 | z(80000000): LDR R0, R0, 0H |
1775 | z(40090008): SUB R0, R0, 8H |
1776 | a(E9000005): BNE 5 [177CH] |
1777 | b(80E00004): LDR R0, SP, 4H |
1778 | b(81E00008): LDR R1, SP, 8H |
1779 | c(82E00010): LDR R2, SP, 10H |
| ELSIFd type.formf = ORB.Record THENg |
177A | d .FIXUP P |
177A | d(F71190C4): BL MOD1 [Files] PROC25 |
177B | e(E700003D): B 61 [17B9H] |
177C | f(80E0000C): LDR R0, SP, CH |
177D | f(D18BDB4C): BLEQ MT [trap=4, pos=35803] |
177E | g(80000000): LDR R0, R0, 0H |
177F | g(4009000D): SUB R0, R0, DH |
1780 | g(E9000017): BNE 23 [1798H] |
| fld := typ.dsch;i |
1781 | h(80E0000C): LDR R0, SP, CH |
1782 | h(D18C024C): BLEQ MT [trap=4, pos=35842] |
1783 | i(80000014): LDR R0, R0, 14H |
1784 | i(A0E00014): STR R0, SP, 14H |
| WHILE fld # NIL DOj FindPtrs(R,k fld.typel,m fld.valn + adr)o;p fld := fld.nextq ENDr |
1785 | j(80E00014): LDR R0, SP, 14H |
1786 | j(E1000010): BEQ 16 [1797H] |
1787 | k(80E00004): LDR R0, SP, 4H |
1788 | k(81E00008): LDR R1, SP, 8H |
1789 | l(82E00014): LDR R2, SP, 14H |
178A | l(D18C314C): BLEQ MT [trap=4, pos=35889] |
178B | m(82200010): LDR R2, R2, 10H |
178C | n(83E00014): LDR R3, SP, 14H |
178D | n(D18C3A4C): BLEQ MT [trap=4, pos=35898] |
178E | o(83300034): LDR R3, R3, 34H |
178F | o(84E00010): LDR R4, SP, 10H |
1790 | o(03380004): ADD R3, R3, R4 |
1791 | p(F7FFFFD5): BL -43 [1767H] |
1792 | q(80E00014): LDR R0, SP, 14H |
1793 | q(D18C524C): BLEQ MT [trap=4, pos=35922] |
1794 | r(80000008): LDR R0, R0, 8H |
1795 | r(A0E00014): STR R0, SP, 14H |
1796 | r(E7FFFFEE): B -18 [1785H] |
| ELSIF typs.formt = ORB.Array THENu |
1797 | s(E7000021): B 33 [17B9H] |
1798 | t(80E0000C): LDR R0, SP, CH |
1799 | t(D18C694C): BLEQ MT [trap=4, pos=35945] |
179A | u(80000000): LDR R0, R0, 0H |
179B | u(4009000C): SUB R0, R0, CH |
179C | u(E900001C): BNE 28 [17B9H] |
| s := typ.basev.sizew;x |
179D | v(80E0000C): LDR R0, SP, CH |
179E | v(D18C8E4C): BLEQ MT [trap=4, pos=35982] |
179F | w(8000001C): LDR R0, R0, 1CH |
17A0 | w(D18C934C): BLEQ MT [trap=4, pos=35987] |
17A1 | x(80000020): LDR R0, R0, 20H |
17A2 | x(A0E0001C): STR R0, SP, 1CH |
| FOR i := 0 TOy typ.lenz-1 DOa FindPtrsb(R,c typ.based,e i*s +f adr)g ENDh |
17A3 | y(40000000): MOV R0, R0, 0H |
17A4 | z(81E0000C): LDR R1, SP, CH |
17A5 | z(D18CB04C): BLEQ MT [trap=4, pos=36016] |
17A6 | a(81100010): LDR R1, R1, 10H |
17A7 | a(41190001): SUB R1, R1, 1H |
17A8 | b(01090001): SUB R1, R0, R1 |
17A9 | b(EE00000F): BGT 15 [17B9H] |
17AA | b(A0E00018): STR R0, SP, 18H |
17AB | c(80E00004): LDR R0, SP, 4H |
17AC | c(81E00008): LDR R1, SP, 8H |
17AD | d(82E0000C): LDR R2, SP, CH |
17AE | d(D18CCA4C): BLEQ MT [trap=4, pos=36042] |
17AF | e(8220001C): LDR R2, R2, 1CH |
17B0 | f(83E00018): LDR R3, SP, 18H |
17B1 | f(84E0001C): LDR R4, SP, 1CH |
17B2 | f(033A0004): MUL R3, R3, R4 |
17B3 | g(84E00010): LDR R4, SP, 10H |
17B4 | g(03380004): ADD R3, R3, R4 |
17B5 | h(F7FFFFB1): BL -79 [1767H] |
| ENDi |
17B6 | i(80E00018): LDR R0, SP, 18H |
17B7 | i(40080001): ADD R0, R0, 1H |
17B8 | i(E7FFFFEB): B -21 [17A4H] |
| ENDj FindPtrs; |
17B9 | j(8FE00000): LDR LNK, SP, 0H |
17BA | j(4EE80020): ADD SP, SP, 20H |
17BB | j(C700000F): B LNK |
| |
| PROCEDURE Close*(VAR modid: ORS.Ident; key, nofent: LONGINT); |
| VAR obj: ORB.Object; |
| i, comsize, nofimps, nofptrs, size: LONGINT; |
| name: ORS.Ident; |
| F: Files.File; R: Files.Rider; |
| BEGINk (*exit code*) |
17BC | k .PROC 82 |
17BC | k(4EE90064): SUB SP, SP, 64H |
17BD | k(AFE00000): STR LNK, SP, 0H |
17BE | k(A0E00004): STR R0, SP, 4H |
17BF | k(A1E00008): STR R1, SP, 8H |
17C0 | k(A2E0000C): STR R2, SP, CH |
| IF version = 0 THENl Put1(Mov,m 0,n 0,o 0)p;q Put3(BR,r 7,s 0)t (*RISC-0*) |
17C1 | l .FIXUP D |
17C1 | l(8D0000B6): LDR SB, MT, MOD0 [ORG] |
17C2 | l(80D00048): LDR R0, SB, 48H [data] |
17C3 | l(E900000A): BNE 10 [17CEH] |
17C4 | m(40000000): MOV R0, R0, 0H |
17C5 | n(41000000): MOV R1, R0, 0H |
17C6 | o(42000000): MOV R2, R0, 0H |
17C7 | p(43000000): MOV R3, R0, 0H |
17C8 | q(F7FFE855): BL -6059 [001EH] |
17C9 | r(40000000): MOV R0, R0, 0H |
17CA | s(41000007): MOV R1, R0, 7H |
17CB | t(42000000): MOV R2, R0, 0H |
| ELSEu Put2v(Ldr,w LNK,x SP,y 0)z;a Put1(Add,b SP,c SP,d 4)e;f Put3(BR,g 7,h LNK)i |
17CC | u(F7FFE8C4): BL -5948 [0091H] |
17CD | v(E700000E): B 14 [17DCH] |
17CE | w(40000008): MOV R0, R0, 8H |
17CF | x(4100000F): MOV R1, R0, FH |
17D0 | y(4200000E): MOV R2, R0, EH |
17D1 | z(43000000): MOV R3, R0, 0H |
17D2 | a(F7FFE89E): BL -5986 [0071H] |
17D3 | b(40000008): MOV R0, R0, 8H |
17D4 | c(4100000E): MOV R1, R0, EH |
17D5 | d(4200000E): MOV R2, R0, EH |
17D6 | e(43000004): MOV R3, R0, 4H |
17D7 | f(F7FFE846): BL -6074 [001EH] |
17D8 | g(40000000): MOV R0, R0, 0H |
17D9 | h(41000007): MOV R1, R0, 7H |
17DA | i(4200000F): MOV R2, R0, FH |
| ENDj ; |
17DB | j(F7FFE8B5): BL -5963 [0091H] |
| obj := ORB.topScope.nextk;l nofimps := 0;m comsize := 4;n nofptrs := 0;o |
17DC | k .FIXUP D |
17DC | k(8D40001B): LDR SB, MT, MOD4 [ORB] |
17DD | k(80D00004): LDR R0, SB, VAR4 |
17DE | k(D18E874C): BLEQ MT [trap=4, pos=36487] |
17DF | l(80000008): LDR R0, R0, 8H |
17E0 | l(A0E00010): STR R0, SP, 10H |
17E1 | m(40000000): MOV R0, R0, 0H |
17E2 | m(A0E0001C): STR R0, SP, 1CH |
17E3 | n(40000004): MOV R0, R0, 4H |
17E4 | n(A0E00018): STR R0, SP, 18H |
17E5 | o(40000000): MOV R0, R0, 0H |
17E6 | o(A0E00020): STR R0, SP, 20H |
| WHILE obj # NIL DOp |
17E7 | p(80E00010): LDR R0, SP, 10H |
17E8 | p(E1000059): BEQ 89 [1842H] |
| IF (obj.classq = ORB.Mod)r & (sobj.dsct # ORB.system)u THENv INC(nofimps) (*count imports*) |
17E9 | q(80E00010): LDR R0, SP, 10H |
17EA | q(D18EDD4C): BLEQ MT [trap=4, pos=36573] |
17EB | r(90000000): LDR R0, R0, 0H |
17EC | r(40090008): SUB R0, R0, 8H |
17ED | s(E900000B): BNE 11 [17F9H] |
17EE | t(80E00010): LDR R0, SP, 10H |
17EF | t(D18EF34C): BLEQ MT [trap=4, pos=36595] |
17F0 | u(8000000C): LDR R0, R0, CH |
17F1 | u .FIXUP D |
17F1 | u(8D400015): LDR SB, MT, MOD4 [ORB] |
17F2 | u(81D00005): LDR R1, SB, VAR5 |
17F3 | u(00090001): SUB R0, R0, R1 |
17F4 | v(E1000004): BEQ 4 [17F9H] |
| ELSIFw (xobj.exnoy # 0)z & (aobj.classb = ORB.Const)c & (dobj.typee.formf = ORB.Proc)g |
17F5 | w(80E0001C): LDR R0, SP, 1CH |
17F6 | w(40080001): ADD R0, R0, 1H |
17F7 | w(A0E0001C): STR R0, SP, 1CH |
17F8 | x(E7000044): B 68 [183DH] |
17F9 | y(80E00010): LDR R0, SP, 10H |
17FA | y(D18F3B4C): BLEQ MT [trap=4, pos=36667] |
17FB | z(90000001): LDR R0, R0, 1H |
17FC | a(E1000034): BEQ 52 [1831H] |
17FD | b(80E00010): LDR R0, SP, 10H |
17FE | b(D18F4D4C): BLEQ MT [trap=4, pos=36685] |
17FF | c(90000000): LDR R0, R0, 0H |
1800 | c(40090001): SUB R0, R0, 1H |
1801 | d(E900002F): BNE 47 [1831H] |
1802 | e(80E00010): LDR R0, SP, 10H |
1803 | e(D18F664C): BLEQ MT [trap=4, pos=36710] |
1804 | f(80000010): LDR R0, R0, 10H |
1805 | f(D18F6B4C): BLEQ MT [trap=4, pos=36715] |
1806 | g(80000000): LDR R0, R0, 0H |
1807 | g(4009000A): SUB R0, R0, AH |
| & (hobj.typei.nofparj = 0)k & (lobj.typem.basen = ORB.noType)o THENp i := 0;q (*count commands*) |
1808 | h(E9000028): BNE 40 [1831H] |
1809 | i(80E00010): LDR R0, SP, 10H |
180A | i(D18F8D4C): BLEQ MT [trap=4, pos=36749] |
180B | j(80000010): LDR R0, R0, 10H |
180C | j(D18F944C): BLEQ MT [trap=4, pos=36756] |
180D | k(8000000C): LDR R0, R0, CH |
180E | l(E9000022): BNE 34 [1831H] |
180F | m(80E00010): LDR R0, SP, 10H |
1810 | m(D18FA54C): BLEQ MT [trap=4, pos=36773] |
1811 | n(80000010): LDR R0, R0, 10H |
1812 | n(D18FAA4C): BLEQ MT [trap=4, pos=36778] |
1813 | o(8000001C): LDR R0, R0, 1CH |
1814 | o .FIXUP D |
1814 | o(8D400023): LDR SB, MT, MOD4 [ORB] |
1815 | o(81D0000D): LDR R1, SB, VAR13 |
1816 | o(00090001): SUB R0, R0, R1 |
1817 | p(E9000019): BNE 25 [1831H] |
1818 | q(40000000): MOV R0, R0, 0H |
1819 | q(A0E00014): STR R0, SP, 14H |
| WHILE obj.namer[i]s # 0X DOt INC(i) ENDu ; |
181A | r(80E00010): LDR R0, SP, 10H |
181B | r(D18FEF4C): BLEQ MT [trap=4, pos=36847] |
181C | s(81E00014): LDR R1, SP, 14H |
181D | s(42190020): SUB R2, R1, 20H |
181E | s(DA8FF21C): BLCC MT [trap=1, pos=36850] |
181F | s(00080001): ADD R0, R0, R1 |
1820 | t(90000014): LDR R0, R0, 14H |
1821 | t(E1000004): BEQ 4 [1826H] |
1822 | u(80E00014): LDR R0, SP, 14H |
1823 | u(40080001): ADD R0, R0, 1H |
1824 | u(A0E00014): STR R0, SP, 14H |
1825 | u(E7FFFFF4): B -12 [181AH] |
| i := (i+4)v DIV 4 *w 4;x INC(comsize, i+4)y |
1826 | v(80E00014): LDR R0, SP, 14H |
1827 | v(40080004): ADD R0, R0, 4H |
1828 | w(40020002): ASR R0, R0, 2H |
1829 | x(40010002): LSL R0, R0, 2H |
182A | x(A0E00014): STR R0, SP, 14H |
182B | y(80E00014): LDR R0, SP, 14H |
182C | y(40080004): ADD R0, R0, 4H |
| ELSIFz obja.classb = ORB.Var THENc INC(nofptrs, NofPtrs(obj.typed)e)f (*count pointers*) |
182D | z(81E00018): LDR R1, SP, 18H |
182E | z(01180000): ADD R1, R1, R0 |
182F | z(A1E00018): STR R1, SP, 18H |
1830 | a(E700000C): B 12 [183DH] |
1831 | b(80E00010): LDR R0, SP, 10H |
1832 | b(D1904D4C): BLEQ MT [trap=4, pos=36941] |
1833 | c(90000000): LDR R0, R0, 0H |
1834 | c(40090002): SUB R0, R0, 2H |
1835 | c(E9000007): BNE 7 [183DH] |
1836 | d(80E00010): LDR R0, SP, 10H |
1837 | d(D1907A4C): BLEQ MT [trap=4, pos=36986] |
1838 | e(80000010): LDR R0, R0, 10H |
1839 | f(F7FFFEEE): BL -274 [1728H] |
| ENDg ; |
183A | g(81E00020): LDR R1, SP, 20H |
183B | g(01180000): ADD R1, R1, R0 |
183C | g(A1E00020): STR R1, SP, 20H |
| obj := obj.nexth |
183D | h(80E00010): LDR R0, SP, 10H |
183E | h(D190B24C): BLEQ MT [trap=4, pos=37042] |
| ENDi ; |
183F | i(80000008): LDR R0, R0, 8H |
1840 | i(A0E00010): STR R0, SP, 10H |
1841 | i(E7FFFFA5): B -91 [17E7H] |
| size := varsize + strx +j comsize +k (pc + nofimps +l nofent +m nofptrs +n 1)o*4;p (*varsize includes type descriptors*) |
1842 | j .FIXUP D |
1842 | j(8D00002E): LDR SB, MT, MOD0 [ORG] |
1843 | j(80D0001C): LDR R0, SB, 1CH [data] |
1844 | j(81D00024): LDR R1, SB, 24H |
1845 | j(00080001): ADD R0, R0, R1 |
1846 | k(81E00018): LDR R1, SP, 18H |
1847 | k(00080001): ADD R0, R0, R1 |
1848 | l(81D00018): LDR R1, SB, 18H |
1849 | l(82E0001C): LDR R2, SP, 1CH |
184A | l(01180002): ADD R1, R1, R2 |
184B | m(82E0000C): LDR R2, SP, CH |
184C | m(01180002): ADD R1, R1, R2 |
184D | n(82E00020): LDR R2, SP, 20H |
184E | n(01180002): ADD R1, R1, R2 |
184F | o(41180001): ADD R1, R1, 1H |
1850 | p(41110002): LSL R1, R1, 2H |
1851 | p(00080001): ADD R0, R0, R1 |
1852 | p(A0E00024): STR R0, SP, 24H |
| |
| ORB.MakeFileName(name,q modid,r ".rsc")s;t (*write code file*) |
1853 | q(40E80028): ADD R0, SP, 28H |
1854 | r(81E00004): LDR R1, SP, 4H |
1855 | r(42000020): MOV R2, R0, 20H |
1856 | s(43D88A9C): ADD R3, SB, FFFF8A9CH |
1857 | s(44000005): MOV R4, R0, 5H |
1858 | t .FIXUP P |
1858 | t(F74150DE): BL MOD4 [ORB] PROC21 |
| F := Files.New(name)u;v Files.Set(R,w F,x 0)y;z Files.WriteString(R,a modid)b;c Files.WriteInt(R,d key)e;f Files.WriteByte(R,g version)h;i |
1859 | u(40E80028): ADD R0, SP, 28H |
185A | u(41000020): MOV R1, R0, 20H |
185B | v .FIXUP P |
185B | v(F7103003): BL MOD1 [Files] PROC3 |
185C | v(A0E00048): STR R0, SP, 48H |
185D | w(40E8004C): ADD R0, SP, 4CH |
185E | w .FIXUP D |
185E | w(8D10001C): LDR SB, MT, MOD1 [Files] |
185F | w(41D80001): ADD R1, SB, VAR1 |
1860 | x(82E00048): LDR R2, SP, 48H |
1861 | y(43000000): MOV R3, R0, 0H |
1862 | z .FIXUP P |
1862 | z(F710B007): BL MOD1 [Files] PROC11 |
1863 | a(40E8004C): ADD R0, SP, 4CH |
1864 | a .FIXUP D |
1864 | a(8D100006): LDR SB, MT, MOD1 [Files] |
1865 | a(41D80001): ADD R1, SB, VAR1 |
1866 | b(82E00004): LDR R2, SP, 4H |
1867 | b(43000020): MOV R3, R0, 20H |
1868 | c .FIXUP P |
1868 | c(F711C006): BL MOD1 [Files] PROC28 |
1869 | d(40E8004C): ADD R0, SP, 4CH |
186A | d .FIXUP D |
186A | d(8D100006): LDR SB, MT, MOD1 [Files] |
186B | d(41D80001): ADD R1, SB, VAR1 |
186C | e(82E00008): LDR R2, SP, 8H |
186D | f .FIXUP P |
186D | f(F7119005): BL MOD1 [Files] PROC25 |
186E | g(40E8004C): ADD R0, SP, 4CH |
186F | g .FIXUP D |
186F | g(8D100005): LDR SB, MT, MOD1 [Files] |
1870 | g(41D80001): ADD R1, SB, VAR1 |
1871 | h .FIXUP D |
1871 | h(8D000002): LDR SB, MT, MOD0 [ORG] |
1872 | h(82D00048): LDR R2, SB, 48H [data] |
1873 | i .FIXUP P |
1873 | i(F7116006): BL MOD1 [Files] PROC22 |
| Files.WriteInt(R,j size)k;l |
1874 | j(40E8004C): ADD R0, SP, 4CH |
1875 | j .FIXUP D |
1875 | j(8D100004): LDR SB, MT, MOD1 [Files] |
1876 | j(41D80001): ADD R1, SB, VAR1 |
1877 | k(82E00024): LDR R2, SP, 24H |
1878 | l .FIXUP P |
1878 | l(F7119005): BL MOD1 [Files] PROC25 |
| obj := ORB.topScope.nextm;n |
1879 | m .FIXUP D |
1879 | m(8D400004): LDR SB, MT, MOD4 [ORB] |
187A | m(80D00004): LDR R0, SB, VAR4 |
187B | m(D1922D4C): BLEQ MT [trap=4, pos=37421] |
187C | n(80000008): LDR R0, R0, 8H |
187D | n(A0E00010): STR R0, SP, 10H |
| WHILE (obj # NIL)o & (pobj.classq = ORB.Mod)r DOs (*imports*) |
187E | o(80E00010): LDR R0, SP, 10H |
187F | p(E1000026): BEQ 38 [18A6H] |
1880 | q(80E00010): LDR R0, SP, 10H |
1881 | q(D192514C): BLEQ MT [trap=4, pos=37457] |
1882 | r(90000000): LDR R0, R0, 0H |
1883 | r(40090008): SUB R0, R0, 8H |
1884 | s(E9000021): BNE 33 [18A6H] |
| IF obj.dsct # ORB.system THENu Files.WriteString(R,v obj(ORB.Module)w.orgname)x;y Files.WriteInt(R,z obj.vala)b ENDc ; |
1885 | t(80E00010): LDR R0, SP, 10H |
1886 | t(D1927D4C): BLEQ MT [trap=4, pos=37501] |
1887 | u(8000000C): LDR R0, R0, CH |
1888 | u .FIXUP D |
1888 | u(8D40000F): LDR SB, MT, MOD4 [ORB] |
1889 | u(81D00005): LDR R1, SB, VAR5 |
188A | u(00090001): SUB R0, R0, R1 |
188B | u(E1000015): BEQ 21 [18A1H] |
188C | v(40E8004C): ADD R0, SP, 4CH |
188D | v .FIXUP D |
188D | v(8D100005): LDR SB, MT, MOD1 [Files] |
188E | v(41D80001): ADD R1, SB, VAR1 |
188F | w(82E00010): LDR R2, SP, 10H |
1890 | w(E1000005): BEQ 5 [1896H] |
1891 | w(832FFFF8): LDR R3, R2, FFFFFFF8H |
1892 | w(83300004): LDR R3, R3, 4H |
1893 | w .FIXUP D |
1893 | w(8D400006): LDR SB, MT, MOD4 [ORB] |
1894 | w(44D80002): ADD R4, SB, VAR2 |
1895 | w(04490003): SUB R4, R4, R3 |
1896 | w(D992B42C): BLNE MT [trap=2, pos=37556] |
1897 | x(42280038): ADD R2, R2, 38H |
1898 | x(43000020): MOV R3, R0, 20H |
1899 | y .FIXUP P |
1899 | y(F711C021): BL MOD1 [Files] PROC28 |
189A | z(40E8004C): ADD R0, SP, 4CH |
189B | z .FIXUP D |
189B | z(8D100008): LDR SB, MT, MOD1 [Files] |
189C | z(41D80001): ADD R1, SB, VAR1 |
189D | a(82E00010): LDR R2, SP, 10H |
189E | a(D192D84C): BLEQ MT [trap=4, pos=37592] |
189F | b(82200034): LDR R2, R2, 34H |
18A0 | c .FIXUP P |
18A0 | c(F7119007): BL MOD1 [Files] PROC25 |
| obj := obj.nextd |
18A1 | d(80E00010): LDR R0, SP, 10H |
18A2 | d(D192F54C): BLEQ MT [trap=4, pos=37621] |
| ENDe ; |
18A3 | e(80000008): LDR R0, R0, 8H |
18A4 | e(A0E00010): STR R0, SP, 10H |
18A5 | e(E7FFFFD8): B -40 [187EH] |
| Files.Write(R,f 0X)g;h |
18A6 | f(40E8004C): ADD R0, SP, 4CH |
18A7 | f .FIXUP D |
18A7 | f(8D10000C): LDR SB, MT, MOD1 [Files] |
18A8 | f(41D80001): ADD R1, SB, VAR1 |
18A9 | g(42000000): MOV R2, R0, 0H |
18AA | h .FIXUP P |
18AA | h(F711800A): BL MOD1 [Files] PROC24 |
| Files.WriteInt(R,i tdx*4)j;k |
18AB | i(40E8004C): ADD R0, SP, 4CH |
18AC | i .FIXUP D |
18AC | i(8D100005): LDR SB, MT, MOD1 [Files] |
18AD | i(41D80001): ADD R1, SB, VAR1 |
18AE | j .FIXUP D |
18AE | j(8D000002): LDR SB, MT, MOD0 [ORG] |
18AF | j(82D00020): LDR R2, SB, 20H [data] |
18B0 | j(42210002): LSL R2, R2, 2H |
18B1 | k .FIXUP P |
18B1 | k(F7119007): BL MOD1 [Files] PROC25 |
| i := 0;l |
18B2 | l(40000000): MOV R0, R0, 0H |
18B3 | l(A0E00014): STR R0, SP, 14H |
| WHILE i < tdx DOm Files.WriteInt(R,n data[i]o)p;q INC(i) ENDr ; (*type descriptors*) |
18B4 | m(80E00014): LDR R0, SP, 14H |
18B5 | m .FIXUP D |
18B5 | m(8D000007): LDR SB, MT, MOD0 [ORG] |
18B6 | m(81D00020): LDR R1, SB, 20H [data] |
18B7 | m(00090001): SUB R0, R0, R1 |
18B8 | m(ED00000F): BGE 15 [18C8H] |
18B9 | n(40E8004C): ADD R0, SP, 4CH |
18BA | n .FIXUP D |
18BA | n(8D100005): LDR SB, MT, MOD1 [Files] |
18BB | n(41D80001): ADD R1, SB, VAR1 |
18BC | o(82E00014): LDR R2, SP, 14H |
18BD | o(43290078): SUB R3, R2, 78H |
18BE | o(DA93701C): BLCC MT [trap=1, pos=37744] |
18BF | o(42210002): LSL R2, R2, 2H |
18C0 | o .FIXUP D |
18C0 | o(8D000006): LDR SB, MT, MOD0 [ORG] |
18C1 | o(02D80002): ADD R2, SB, R2 [global array] |
18C2 | p(82207D64): LDR R2, R2, 7D64H |
18C3 | q .FIXUP P |
18C3 | q(F7119012): BL MOD1 [Files] PROC25 |
18C4 | r(80E00014): LDR R0, SP, 14H |
18C5 | r(40080001): ADD R0, R0, 1H |
18C6 | r(A0E00014): STR R0, SP, 14H |
18C7 | r(E7FFFFEC): B -20 [18B4H] |
| Files.WriteInt(R,s varsize - tdx*4)t;u (*data*) |
18C8 | s(40E8004C): ADD R0, SP, 4CH |
18C9 | s .FIXUP D |
18C9 | s(8D100009): LDR SB, MT, MOD1 [Files] |
18CA | s(41D80001): ADD R1, SB, VAR1 |
18CB | t .FIXUP D |
18CB | t(8D000002): LDR SB, MT, MOD0 [ORG] |
18CC | t(82D00020): LDR R2, SB, 20H [data] |
18CD | t(42210002): LSL R2, R2, 2H |
18CE | t(83D0001C): LDR R3, SB, 1CH |
18CF | t(02390002): SUB R2, R3, R2 |
18D0 | u .FIXUP P |
18D0 | u(F711900D): BL MOD1 [Files] PROC25 |
| Files.WriteInt(R,v strx)w;x |
18D1 | v(40E8004C): ADD R0, SP, 4CH |
18D2 | v .FIXUP D |
18D2 | v(8D100007): LDR SB, MT, MOD1 [Files] |
18D3 | v(41D80001): ADD R1, SB, VAR1 |
18D4 | w .FIXUP D |
18D4 | w(8D000002): LDR SB, MT, MOD0 [ORG] |
18D5 | w(82D00024): LDR R2, SB, 24H [data] |
18D6 | x .FIXUP P |
18D6 | x(F7119006): BL MOD1 [Files] PROC25 |
| FOR i := 0 TOy strx-1 DOz Filesa.Write(R,b str[i]c)d ENDe ;f (*strings*) |
18D7 | y(40000000): MOV R0, R0, 0H |
18D8 | z .FIXUP D |
18D8 | z(8D000004): LDR SB, MT, MOD0 [ORG] |
18D9 | z(81D00024): LDR R1, SB, 24H [data] |
18DA | z(41190001): SUB R1, R1, 1H |
18DB | a(01090001): SUB R1, R0, R1 |
18DC | a(EE00000E): BGT 14 [18EBH] |
18DD | a(A0E00014): STR R0, SP, 14H |
18DE | b(40E8004C): ADD R0, SP, 4CH |
18DF | b .FIXUP D |
18DF | b(8D100007): LDR SB, MT, MOD1 [Files] |
18E0 | b(41D80001): ADD R1, SB, VAR1 |
18E1 | c(82E00014): LDR R2, SP, 14H |
18E2 | c(43290960): SUB R3, R2, 960H |
18E3 | c(DA94151C): BLCC MT [trap=1, pos=37909] |
18E4 | c .FIXUP D |
18E4 | c(8D000005): LDR SB, MT, MOD0 [ORG] |
18E5 | c(02D80002): ADD R2, SB, R2 [global array] |
18E6 | d(92207F44): LDR R2, R2, 7F44H |
18E7 | e .FIXUP P |
18E7 | e(F7118011): BL MOD1 [Files] PROC24 |
18E8 | f(80E00014): LDR R0, SP, 14H |
18E9 | f(40080001): ADD R0, R0, 1H |
18EA | f(E7FFFFED): B -19 [18D8H] |
| Files.WriteInt(R,g pc)h;i (*code len*) |
18EB | g(40E8004C): ADD R0, SP, 4CH |
18EC | g .FIXUP D |
18EC | g(8D100008): LDR SB, MT, MOD1 [Files] |
18ED | g(41D80001): ADD R1, SB, VAR1 |
18EE | h .FIXUP D |
18EE | h(8D000002): LDR SB, MT, MOD0 [ORG] |
18EF | h(82D00018): LDR R2, SB, 18H [data] |
18F0 | i .FIXUP P |
18F0 | i(F7119009): BL MOD1 [Files] PROC25 |
| FOR i := 0 TOj pc-1 DOk Filesl.WriteInt(R,m code[i]n)o ENDp ;q (*program*) |
18F1 | j(40000000): MOV R0, R0, 0H |
18F2 | k .FIXUP D |
18F2 | k(8D000004): LDR SB, MT, MOD0 [ORG] |
18F3 | k(81D00018): LDR R1, SB, 18H [data] |
18F4 | k(41190001): SUB R1, R1, 1H |
18F5 | l(01090001): SUB R1, R0, R1 |
18F6 | l(EE00000F): BGT 15 [1906H] |
18F7 | l(A0E00014): STR R0, SP, 14H |
18F8 | m(40E8004C): ADD R0, SP, 4CH |
18F9 | m .FIXUP D |
18F9 | m(8D100007): LDR SB, MT, MOD1 [Files] |
18FA | m(41D80001): ADD R1, SB, VAR1 |
18FB | n(82E00014): LDR R2, SP, 14H |
18FC | n(43291F40): SUB R3, R2, 1F40H |
18FD | n(DA94861C): BLCC MT [trap=1, pos=38022] |
18FE | n(42210002): LSL R2, R2, 2H |
18FF | n .FIXUP D |
18FF | n(8D000006): LDR SB, MT, MOD0 [ORG] |
1900 | n(02D80002): ADD R2, SB, R2 [global array] |
1901 | o(82200064): LDR R2, R2, 64H |
1902 | p .FIXUP P |
1902 | p(F7119012): BL MOD1 [Files] PROC25 |
1903 | q(80E00014): LDR R0, SP, 14H |
1904 | q(40080001): ADD R0, R0, 1H |
1905 | q(E7FFFFEC): B -20 [18F2H] |
| obj := ORB.topScope.nextr;s |
1906 | r .FIXUP D |
1906 | r(8D400007): LDR SB, MT, MOD4 [ORB] |
1907 | r(80D00004): LDR R0, SB, VAR4 |
1908 | r(D194B74C): BLEQ MT [trap=4, pos=38071] |
1909 | s(80000008): LDR R0, R0, 8H |
190A | s(A0E00010): STR R0, SP, 10H |
| WHILE obj # NIL DOt (*commands*) |
190B | t(80E00010): LDR R0, SP, 10H |
190C | t(E1000033): BEQ 51 [1940H] |
| IF (obj.exnou # 0)v & (wobj.classx = ORB.Const)y & (zobj.typea.formb = ORB.Proc)c & |
190D | u(80E00010): LDR R0, SP, 10H |
190E | u(D194F04C): BLEQ MT [trap=4, pos=38128] |
190F | v(90000001): LDR R0, R0, 1H |
1910 | w(E100002A): BEQ 42 [193BH] |
1911 | x(80E00010): LDR R0, SP, 10H |
1912 | x(D195024C): BLEQ MT [trap=4, pos=38146] |
1913 | y(90000000): LDR R0, R0, 0H |
1914 | y(40090001): SUB R0, R0, 1H |
1915 | z(E9000025): BNE 37 [193BH] |
1916 | a(80E00010): LDR R0, SP, 10H |
1917 | a(D1951B4C): BLEQ MT [trap=4, pos=38171] |
1918 | b(80000010): LDR R0, R0, 10H |
1919 | b(D195204C): BLEQ MT [trap=4, pos=38176] |
191A | c(80000000): LDR R0, R0, 0H |
191B | c(4009000A): SUB R0, R0, AH |
| (dobj.typee.nofparf = 0)g & (hobj.typei.basej = ORB.noType)k THENl |
191C | d(E900001E): BNE 30 [193BH] |
191D | e(80E00010): LDR R0, SP, 10H |
191E | e(D195424C): BLEQ MT [trap=4, pos=38210] |
191F | f(80000010): LDR R0, R0, 10H |
1920 | f(D195494C): BLEQ MT [trap=4, pos=38217] |
1921 | g(8000000C): LDR R0, R0, CH |
1922 | h(E9000018): BNE 24 [193BH] |
1923 | i(80E00010): LDR R0, SP, 10H |
1924 | i(D1955A4C): BLEQ MT [trap=4, pos=38234] |
1925 | j(80000010): LDR R0, R0, 10H |
1926 | j(D1955F4C): BLEQ MT [trap=4, pos=38239] |
1927 | k(8000001C): LDR R0, R0, 1CH |
1928 | k .FIXUP D |
1928 | k(8D400022): LDR SB, MT, MOD4 [ORB] |
1929 | k(81D0000D): LDR R1, SB, VAR13 |
192A | k(00090001): SUB R0, R0, R1 |
192B | l(E900000F): BNE 15 [193BH] |
| Files.WriteString(R,m obj.namen)o;p Files.WriteInt(R,q obj.valr)s |
192C | m(40E8004C): ADD R0, SP, 4CH |
192D | m .FIXUP D |
192D | m(8D100005): LDR SB, MT, MOD1 [Files] |
192E | m(41D80001): ADD R1, SB, VAR1 |
192F | n(82E00010): LDR R2, SP, 10H |
1930 | n(D195984C): BLEQ MT [trap=4, pos=38296] |
1931 | o(42280014): ADD R2, R2, 14H |
1932 | o(43000020): MOV R3, R0, 20H |
1933 | p .FIXUP P |
1933 | p(F711C031): BL MOD1 [Files] PROC28 |
1934 | q(40E8004C): ADD R0, SP, 4CH |
1935 | q .FIXUP D |
1935 | q(8D100008): LDR SB, MT, MOD1 [Files] |
1936 | q(41D80001): ADD R1, SB, VAR1 |
1937 | r(82E00010): LDR R2, SP, 10H |
1938 | r(D195B44C): BLEQ MT [trap=4, pos=38324] |
1939 | s(82200034): LDR R2, R2, 34H |
| ENDt ; |
193A | t .FIXUP P |
193A | t(F7119007): BL MOD1 [Files] PROC25 |
| obj := obj.nextu |
193B | u(80E00010): LDR R0, SP, 10H |
193C | u(D195D74C): BLEQ MT [trap=4, pos=38359] |
| ENDv ; |
193D | v(80000008): LDR R0, R0, 8H |
193E | v(A0E00010): STR R0, SP, 10H |
193F | v(E7FFFFCB): B -53 [190BH] |
| Files.Write(R,w 0X)x;y |
1940 | w(40E8004C): ADD R0, SP, 4CH |
1941 | w .FIXUP D |
1941 | w(8D10000C): LDR SB, MT, MOD1 [Files] |
1942 | w(41D80001): ADD R1, SB, VAR1 |
1943 | x(42000000): MOV R2, R0, 0H |
1944 | y .FIXUP P |
1944 | y(F711800A): BL MOD1 [Files] PROC24 |
| Files.WriteInt(R,z nofent)a;b Files.WriteInt(R,c entry)d;e |
1945 | z(40E8004C): ADD R0, SP, 4CH |
1946 | z .FIXUP D |
1946 | z(8D100005): LDR SB, MT, MOD1 [Files] |
1947 | z(41D80001): ADD R1, SB, VAR1 |
1948 | a(82E0000C): LDR R2, SP, CH |
1949 | b .FIXUP P |
1949 | b(F7119005): BL MOD1 [Files] PROC25 |
194A | c(40E8004C): ADD R0, SP, 4CH |
194B | c .FIXUP D |
194B | c(8D100005): LDR SB, MT, MOD1 [Files] |
194C | c(41D80001): ADD R1, SB, VAR1 |
194D | d .FIXUP D |
194D | d(8D000002): LDR SB, MT, MOD0 [ORG] |
194E | d(82D00028): LDR R2, SB, 28H [data] |
194F | e .FIXUP P |
194F | e(F7119006): BL MOD1 [Files] PROC25 |
| obj := ORB.topScope.nextf;g |
1950 | f .FIXUP D |
1950 | f(8D400003): LDR SB, MT, MOD4 [ORB] |
1951 | f(80D00004): LDR R0, SB, VAR4 |
1952 | f(D1964F4C): BLEQ MT [trap=4, pos=38479] |
1953 | g(80000008): LDR R0, R0, 8H |
1954 | g(A0E00010): STR R0, SP, 10H |
| WHILE obj # NIL DOh (*entries*) |
1955 | h(80E00010): LDR R0, SP, 10H |
1956 | h(E100005E): BEQ 94 [19B5H] |
| IF obj.exnoi # 0 THENj |
1957 | i(80E00010): LDR R0, SP, 10H |
1958 | i(D196864C): BLEQ MT [trap=4, pos=38534] |
1959 | j(90000001): LDR R0, R0, 1H |
195A | j(E1000055): BEQ 85 [19B0H] |
| IF (obj.classk = ORB.Const)l & (mobj.typen.formo = ORB.Proc)p OR (qobj.classr = ORB.Var)s THENt |
195B | k(80E00010): LDR R0, SP, 10H |
195C | k(D196A54C): BLEQ MT [trap=4, pos=38565] |
195D | l(90000000): LDR R0, R0, 0H |
195E | l(40090001): SUB R0, R0, 1H |
195F | m(E9000007): BNE 7 [1967H] |
1960 | n(80E00010): LDR R0, SP, 10H |
1961 | n(D196BE4C): BLEQ MT [trap=4, pos=38590] |
1962 | o(80000010): LDR R0, R0, 10H |
1963 | o(D196C34C): BLEQ MT [trap=4, pos=38595] |
1964 | p(80000000): LDR R0, R0, 0H |
1965 | p(4009000A): SUB R0, R0, AH |
1966 | q(E1000005): BEQ 5 [196CH] |
1967 | r(80E00010): LDR R0, SP, 10H |
1968 | r(D196DD4C): BLEQ MT [trap=4, pos=38621] |
1969 | s(90000000): LDR R0, R0, 0H |
196A | s(40090002): SUB R0, R0, 2H |
196B | t(E9000008): BNE 8 [1974H] |
| Files.WriteInt(R,u obj.valv)w |
196C | u(40E8004C): ADD R0, SP, 4CH |
196D | u .FIXUP D |
196D | u(8D10001D): LDR SB, MT, MOD1 [Files] |
196E | u(41D80001): ADD R1, SB, VAR1 |
196F | v(82E00010): LDR R2, SP, 10H |
1970 | v(D197114C): BLEQ MT [trap=4, pos=38673] |
1971 | w(82200034): LDR R2, R2, 34H |
| ELSIFx objy.classz = ORB.Typ THENa |
1972 | x .FIXUP P |
1972 | x(F7119023): BL MOD1 [Files] PROC25 |
1973 | y(E700003C): B 60 [19B0H] |
1974 | z(80E00010): LDR R0, SP, 10H |
1975 | z(D1972A4C): BLEQ MT [trap=4, pos=38698] |
1976 | a(90000000): LDR R0, R0, 0H |
1977 | a(40090005): SUB R0, R0, 5H |
1978 | a(E9000037): BNE 55 [19B0H] |
| IF obj.typeb.formc = ORB.Record THENd Files.WriteInt(R,e obj.typef.leng MOD 10000H)h |
1979 | b(80E00010): LDR R0, SP, 10H |
197A | b(D1974F4C): BLEQ MT [trap=4, pos=38735] |
197B | c(80000010): LDR R0, R0, 10H |
197C | c(D197544C): BLEQ MT [trap=4, pos=38740] |
197D | d(80000000): LDR R0, R0, 0H |
197E | d(4009000D): SUB R0, R0, DH |
197F | d(E900000B): BNE 11 [198BH] |
1980 | e(40E8004C): ADD R0, SP, 4CH |
1981 | e .FIXUP D |
1981 | e(8D100014): LDR SB, MT, MOD1 [Files] |
1982 | e(41D80001): ADD R1, SB, VAR1 |
1983 | f(82E00010): LDR R2, SP, 10H |
1984 | f(D197824C): BLEQ MT [trap=4, pos=38786] |
1985 | g(82200010): LDR R2, R2, 10H |
1986 | g(D197864C): BLEQ MT [trap=4, pos=38790] |
1987 | h(82200010): LDR R2, R2, 10H |
1988 | h(4224FFFF): AND R2, R2, FFFFFFFFH |
| ELSIFi (jobj.typek.forml = ORB.Pointer)m & (n(obj.typeo.basep.typobjq = NIL)r OR (sobj.typet.baseu.typobjv.exnow = 0)x) THENy |
1989 | i .FIXUP P |
1989 | i(F7119017): BL MOD1 [Files] PROC25 |
198A | j(E7000025): B 37 [19B0H] |
198B | k(80E00010): LDR R0, SP, 10H |
198C | k(D197AC4C): BLEQ MT [trap=4, pos=38828] |
198D | l(80000010): LDR R0, R0, 10H |
198E | l(D197B14C): BLEQ MT [trap=4, pos=38833] |
198F | m(80000000): LDR R0, R0, 0H |
1990 | m(40090007): SUB R0, R0, 7H |
1991 | n(E900001E): BNE 30 [19B0H] |
1992 | o(80E00010): LDR R0, SP, 10H |
1993 | o(D197CD4C): BLEQ MT [trap=4, pos=38861] |
1994 | p(80000010): LDR R0, R0, 10H |
1995 | p(D197D24C): BLEQ MT [trap=4, pos=38866] |
1996 | q(8000001C): LDR R0, R0, 1CH |
1997 | q(D197D94C): BLEQ MT [trap=4, pos=38873] |
1998 | r(80000018): LDR R0, R0, 18H |
1999 | s(E100000A): BEQ 10 [19A4H] |
199A | t(80E00010): LDR R0, SP, 10H |
199B | t(D197ED4C): BLEQ MT [trap=4, pos=38893] |
199C | u(80000010): LDR R0, R0, 10H |
199D | u(D197F24C): BLEQ MT [trap=4, pos=38898] |
199E | v(8000001C): LDR R0, R0, 1CH |
199F | v(D197F94C): BLEQ MT [trap=4, pos=38905] |
19A0 | w(80000018): LDR R0, R0, 18H |
19A1 | w(D197FE4C): BLEQ MT [trap=4, pos=38910] |
19A2 | x(90000001): LDR R0, R0, 1H |
19A3 | y(E900000C): BNE 12 [19B0H] |
| Files.WriteInt(R,z obj.typea.baseb.lenc MOD 10000H)d |
19A4 | z(40E8004C): ADD R0, SP, 4CH |
19A5 | z .FIXUP D |
19A5 | z(8D100024): LDR SB, MT, MOD1 [Files] |
19A6 | z(41D80001): ADD R1, SB, VAR1 |
19A7 | a(82E00010): LDR R2, SP, 10H |
19A8 | a(D198304C): BLEQ MT [trap=4, pos=38960] |
19A9 | b(82200010): LDR R2, R2, 10H |
19AA | b(D198354C): BLEQ MT [trap=4, pos=38965] |
19AB | c(8220001C): LDR R2, R2, 1CH |
19AC | c(D198394C): BLEQ MT [trap=4, pos=38969] |
19AD | d(82200010): LDR R2, R2, 10H |
19AE | d(4224FFFF): AND R2, R2, FFFFFFFFH |
| ENDe |
19AF | e .FIXUP P |
19AF | e(F7119026): BL MOD1 [Files] PROC25 |
| END |
| END ; |
| obj := obj.nextf |
19B0 | f(80E00010): LDR R0, SP, 10H |
19B1 | f(D198814C): BLEQ MT [trap=4, pos=39041] |
| ENDg ; |
19B2 | g(80000008): LDR R0, R0, 8H |
19B3 | g(A0E00010): STR R0, SP, 10H |
19B4 | g(E7FFFFA0): B -96 [1955H] |
| obj := ORB.topScope.nexth;i |
19B5 | h .FIXUP D |
19B5 | h(8D400010): LDR SB, MT, MOD4 [ORB] |
19B6 | h(80D00004): LDR R0, SB, VAR4 |
19B7 | h(D198A84C): BLEQ MT [trap=4, pos=39080] |
19B8 | i(80000008): LDR R0, R0, 8H |
19B9 | i(A0E00010): STR R0, SP, 10H |
| WHILE obj # NIL DOj (*pointer variables*) |
19BA | j(80E00010): LDR R0, SP, 10H |
19BB | j(E1000014): BEQ 20 [19D0H] |
| IF obj.classk = ORB.Var THENl FindPtrs(R,m obj.typen,o obj.valp)q ENDr ; |
19BC | k(80E00010): LDR R0, SP, 10H |
19BD | k(D198EA4C): BLEQ MT [trap=4, pos=39146] |
19BE | l(90000000): LDR R0, R0, 0H |
19BF | l(40090002): SUB R0, R0, 2H |
19C0 | l(E900000A): BNE 10 [19CBH] |
19C1 | m(40E8004C): ADD R0, SP, 4CH |
19C2 | m .FIXUP D |
19C2 | m(8D10000D): LDR SB, MT, MOD1 [Files] |
19C3 | m(41D80001): ADD R1, SB, VAR1 |
19C4 | n(82E00010): LDR R2, SP, 10H |
19C5 | n(D1990E4C): BLEQ MT [trap=4, pos=39182] |
19C6 | o(82200010): LDR R2, R2, 10H |
19C7 | p(83E00010): LDR R3, SP, 10H |
19C8 | p(D199174C): BLEQ MT [trap=4, pos=39191] |
19C9 | q(83300034): LDR R3, R3, 34H |
19CA | r(F7FFFD9C): BL -612 [1767H] |
| obj := obj.nexts |
19CB | s(80E00010): LDR R0, SP, 10H |
19CC | s(D199344C): BLEQ MT [trap=4, pos=39220] |
| ENDt ; |
19CD | t(80000008): LDR R0, R0, 8H |
19CE | t(A0E00010): STR R0, SP, 10H |
19CF | t(E7FFFFEA): B -22 [19BAH] |
| Files.WriteInt(R,u -1)v;w |
19D0 | u(40E8004C): ADD R0, SP, 4CH |
19D1 | u .FIXUP D |
19D1 | u(8D10000F): LDR SB, MT, MOD1 [Files] |
19D2 | u(41D80001): ADD R1, SB, VAR1 |
19D3 | v(5200FFFF): MOV R2, R0, FFFFFFFFH |
19D4 | w .FIXUP P |
19D4 | w(F7119025): BL MOD1 [Files] PROC25 |
| Files.WriteInt(R,x fixorgP)y;z Files.WriteInt(R,a fixorgD)b;c Files.WriteInt(R,d fixorgT)e;f Files.WriteInt(R,g entry)h;i |
19D5 | x(40E8004C): ADD R0, SP, 4CH |
19D6 | x .FIXUP D |
19D6 | x(8D100005): LDR SB, MT, MOD1 [Files] |
19D7 | x(41D80001): ADD R1, SB, VAR1 |
19D8 | y .FIXUP D |
19D8 | y(8D000002): LDR SB, MT, MOD0 [ORG] |
19D9 | y(82D00038): LDR R2, SB, 38H [data] |
19DA | z .FIXUP P |
19DA | z(F7119006): BL MOD1 [Files] PROC25 |
19DB | a(40E8004C): ADD R0, SP, 4CH |
19DC | a .FIXUP D |
19DC | a(8D100004): LDR SB, MT, MOD1 [Files] |
19DD | a(41D80001): ADD R1, SB, VAR1 |
19DE | b .FIXUP D |
19DE | b(8D000002): LDR SB, MT, MOD0 [ORG] |
19DF | b(82D0003C): LDR R2, SB, 3CH [data] |
19E0 | c .FIXUP P |
19E0 | c(F7119006): BL MOD1 [Files] PROC25 |
19E1 | d(40E8004C): ADD R0, SP, 4CH |
19E2 | d .FIXUP D |
19E2 | d(8D100004): LDR SB, MT, MOD1 [Files] |
19E3 | d(41D80001): ADD R1, SB, VAR1 |
19E4 | e .FIXUP D |
19E4 | e(8D000002): LDR SB, MT, MOD0 [ORG] |
19E5 | e(82D00040): LDR R2, SB, 40H [data] |
19E6 | f .FIXUP P |
19E6 | f(F7119006): BL MOD1 [Files] PROC25 |
19E7 | g(40E8004C): ADD R0, SP, 4CH |
19E8 | g .FIXUP D |
19E8 | g(8D100004): LDR SB, MT, MOD1 [Files] |
19E9 | g(41D80001): ADD R1, SB, VAR1 |
19EA | h .FIXUP D |
19EA | h(8D000002): LDR SB, MT, MOD0 [ORG] |
19EB | h(82D00028): LDR R2, SB, 28H [data] |
19EC | i .FIXUP P |
19EC | i(F7119006): BL MOD1 [Files] PROC25 |
| Files.Write(R,j "O")k;l Files.Register(F)m |
19ED | j(40E8004C): ADD R0, SP, 4CH |
19EE | j .FIXUP D |
19EE | j(8D100004): LDR SB, MT, MOD1 [Files] |
19EF | j(41D80001): ADD R1, SB, VAR1 |
19F0 | k(4200004F): MOV R2, R0, 4FH |
19F1 | l .FIXUP P |
19F1 | l(F7118005): BL MOD1 [Files] PROC24 |
19F2 | m(80E00048): LDR R0, SP, 48H |
| ENDn Close; |
19F3 | n .FIXUP P |
19F3 | n(F7104002): BL MOD1 [Files] PROC4 |
19F4 | n(8FE00000): LDR LNK, SP, 0H |
19F5 | n(4EE80064): ADD SP, SP, 64H |
19F6 | n(C700000F): B LNK |
| |
| BEGINo |
19F7 | o .PROC 0 |
19F7 | o .ENTRYPOINT |
19F7 | o(4EE90004): SUB SP, SP, 4H |
19F8 | o(AFE00000): STR LNK, SP, 0H |
| relmap[0] := 1;p relmap[1] := 9;q relmap[2] := 5;r relmap[3] := 6;s relmap[4] := 14;t relmap[5] := 13 |
19F9 | p(40000001): MOV R0, R0, 1H |
19FA | p .FIXUP D |
19FA | p(8D00000C): LDR SB, MT, MOD0 [ORG] |
19FB | p(A0D0004C): STR R0, SB, 4CH [data] |
19FC | q(40000009): MOV R0, R0, 9H |
19FD | q(A0D00050): STR R0, SB, 50H |
19FE | r(40000005): MOV R0, R0, 5H |
19FF | r(A0D00054): STR R0, SB, 54H |
1A00 | s(40000006): MOV R0, R0, 6H |
1A01 | s(A0D00058): STR R0, SB, 58H |
1A02 | t(4000000E): MOV R0, R0, EH |
1A03 | t(A0D0005C): STR R0, SB, 5CH |
| ENDu ORG.v |
1A04 | u(4000000D): MOV R0, R0, DH |
1A05 | u(A0D00060): STR R0, SB, 60H |
1A06 | v(8FE00000): LDR LNK, SP, 0H |
1A07 | v(4EE80004): ADD SP, SP, 4H |
1A08 | v(C700000F): B LNK |