| MODULE Boot; (*Oberon boot linker/loader for RISC; AP 1.9.18 Original Oberon 2013*) |
| | .MODULE Boot (KEY 695C7025, VERSION 1, SIZE 00002F04) |
| | .IMPORT Kernel (KEY 97E012DD) |
| | .IMPORT Files (KEY 73F5D686) |
| | .IMPORT Modules (KEY 41C6A19A) |
| | .IMPORT Texts (KEY 0B9E9984) |
| | .IMPORT Fonts (KEY F4C9F557) |
| | .IMPORT Oberon (KEY A89CCEE2) |
| | .IMPORT Display (KEY 4C08D3EA) |
| | .IMPORT Viewers (KEY 25ABF199) |
| | .TYPEDESC 00000080 FFFFFFFF FFFFFFFF FFFFFFFF 00000020 FFFFFFFF |
| | .DATA 80H |
| | .STRING 98H ".rsc" |
| | .STRING A0H " linking" |
| | .STRING ACH ".bin" |
| | .STRING B4H "Link error: " |
| | .STRING C4H " module not found" |
| | .STRING D8H " bad version" |
| | .STRING E8H " imports " |
| | .STRING F4H " with bad key" |
| | .STRING 104H " corrupted obj file" |
| | .STRING 118H " insufficient space" |
| | .STRING 12CH "Usage: Boot.Link module" |
| | .STRING 144H " loading " |
| | .STRING 150H " onto boot area" |
| | .STRING 160H " not found" |
| | .STRING 16CH "Usage: Boot.Load M.bin" |
| | .STRING 184H " WriteFile " |
| | .STRING 194H " done" |
| | .STRING 19CH " insufficent size" |
| | .STRING 1B0H " imports not allowed" |
| | .STRING 1C8H " input file format error" |
| | .STRING 1E4H " program too long" |
| | .STRING 1F8H " input file not found" |
| | .STRING 210H " size must be positive" |
| | .STRING 228H "Usage: Boot.WriteFile M.rsc outputsize outputfile" |
| | .STRING 25CH " WriteCode " |
| | .STRING 26CH " done" |
| | .STRING 274H " imports not allowed" |
| | .STRING 28CH " input file format error" |
| | .STRING 2A8H " program too long" |
| | .STRING 2BCH " input file not found" |
| | .STRING 2D4H "Usage: Boot.WriteCode M.rsc M.code" |
| | .STRING 2F8H " WriteStream " |
| | .STRING 308H " done" |
| | .STRING 310H " input file empty" |
| | .STRING 324H " input file not found" |
| | .STRING 33CH " destaddr must be >= 0" |
| | .STRING 354H " blocksize must be >= 0" |
| | .STRING 370H "Usage: Boot.WriteStream M.bin M.stream blocksize destaddr" |
| | .STRING 3ACH "OR Boot linker/loader AP 1.9.18" |
| | .POINTER_REFERENCES 18H 70H 74H 94H 88H |
| | .FIXUP T 0H |
| IMPORT SYSTEM, Kernel, Files, Modules, Texts, Oberon; |
| CONST versionkey = 1X; versionkey0 = 0X; MT = 12; DescSize = 80; |
| MemLim = 0E7EF0H; stackOrg = 80000H; maxCode = 8000; CR = 0DX; |
| |
| TYPE (*copied from Modules for use as cross linker/loader*) |
| Module* = POINTER TO ModDesc; |
| Command* = PROCEDURE; |
| ModuleName* = ARRAY 32 OF CHAR; |
| ModDesc* = RECORD |
| name*: ModuleName; |
| next*: Module; |
| key*, num*, size*, refcnt*: INTEGER; |
| data*, code*, imp*, cmd*, ent*, ptr*, unused: INTEGER (*addresses*) |
| END ; |
| |
| VAR root: Module; |
| MTOrg, AllocPtr, Start, limit, res*: INTEGER; |
| importing*, imported*: ModuleName; |
| W: Texts.Writer; |
| |
| PROCEDURE MakeFileName(VAR FName: ARRAY OF CHAR; name, ext: ARRAY OF CHAR); |
| VAR i, j, k: INTEGER; |
| BEGINa i := 0;b j := 0;c k := 0;d |
| 0000 | a .PROC 1 |
| 0000 | a(4EE90028): SUB SP, SP, 28H |
| 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 |
| 0006 | a(A4E00014): STR R4, SP, 14H |
| 0007 | a(A5E00018): STR R5, SP, 18H |
| 0008 | b(40000000): MOV R0, R0, 0H |
| 0009 | b(A0E0001C): STR R0, SP, 1CH |
| 000A | c(40000000): MOV R0, R0, 0H |
| 000B | c .PROC 2 |
| 000B | c(A0E00020): STR R0, SP, 20H |
| 000C | d .PROC 3 |
| 000C | d(40000000): MOV R0, R0, 0H |
| 000D | d(A0E00024): STR R0, SP, 24H |
| WHILE ext[k]e > 0X DOf INC(k) ENDg ; |
| 000E | e(80E00024): LDR R0, SP, 24H |
| 000F | e(81E00018): LDR R1, SP, 18H |
| 0010 | e(01090001): SUB R1, R0, R1 |
| 0011 | e(DA03921C): BLCC MT [trap=1, pos=914] |
| 0012 | e(81E00014): LDR R1, SP, 14H |
| 0013 | e(00180000): ADD R0, R1, R0 |
| 0014 | f .PROC 4 |
| 0014 | f(90000000): LDR R0, R0, 0H |
| 0015 | f(40090000): SUB R0, R0, 0H |
| 0016 | f(E6000004): BLE 4 [001BH] |
| 0017 | g(80E00024): LDR R0, SP, 24H |
| 0018 | g(40080001): ADD R0, R0, 1H |
| 0019 | g(A0E00024): STR R0, SP, 24H |
| 001A | g(E7FFFFF3): B -13 [000EH] |
| WHILE (i < LEN(FName)-hk-i1)j & (kname[i]l > 0X)m DOn FName[i]o := name[i]p;q INC(i) ENDr ; |
| 001B | h(80E00008): LDR R0, SP, 8H |
| 001C | i(81E00024): LDR R1, SP, 24H |
| 001D | i(00090001): SUB R0, R0, R1 |
| 001E | j(40090001): SUB R0, R0, 1H |
| 001F | j(81E0001C): LDR R1, SP, 1CH |
| 0020 | j(01190000): SUB R1, R1, R0 |
| 0021 | k(ED00001B): BGE 27 [003DH] |
| 0022 | l(80E0001C): LDR R0, SP, 1CH |
| 0023 | l(81E00010): LDR R1, SP, 10H |
| 0024 | l(01090001): SUB R1, R0, R1 |
| 0025 | l(DA03D11C): BLCC MT [trap=1, pos=977] |
| 0026 | l(81E0000C): LDR R1, SP, CH |
| 0027 | l(00180000): ADD R0, R1, R0 |
| 0028 | m(90000000): LDR R0, R0, 0H |
| 0029 | m(40090000): SUB R0, R0, 0H |
| 002A | n(E6000012): BLE 18 [003DH] |
| 002B | o(80E0001C): LDR R0, SP, 1CH |
| 002C | o(81E00008): LDR R1, SP, 8H |
| 002D | o(01090001): SUB R1, R0, R1 |
| 002E | o(DA03E31C): BLCC MT [trap=1, pos=995] |
| 002F | o(81E00004): LDR R1, SP, 4H |
| 0030 | o(00180000): ADD R0, R1, R0 |
| 0031 | p(81E0001C): LDR R1, SP, 1CH |
| 0032 | p(82E00010): LDR R2, SP, 10H |
| 0033 | p(02190002): SUB R2, R1, R2 |
| 0034 | p(DA03EE1C): BLCC MT [trap=1, pos=1006] |
| 0035 | p(82E0000C): LDR R2, SP, CH |
| 0036 | p(01280001): ADD R1, R2, R1 |
| 0037 | q(91100000): LDR R1, R1, 0H |
| 0038 | q(B1000000): STR R1, R0, 0H |
| 0039 | r(80E0001C): LDR R0, SP, 1CH |
| 003A | r(40080001): ADD R0, R0, 1H |
| 003B | r(A0E0001C): STR R0, SP, 1CH |
| 003C | r(E7FFFFDE): B -34 [001BH] |
| WHILE (i < LEN(FName)-s1)t & (uj < k)v DOw FName[i]x := ext[j]y;z INC(i);a INC(j) ENDb ; |
| 003D | s(80E00008): LDR R0, SP, 8H |
| 003E | t(40090001): SUB R0, R0, 1H |
| 003F | t(81E0001C): LDR R1, SP, 1CH |
| 0040 | t(01190000): SUB R1, R1, R0 |
| 0041 | u(ED000019): BGE 25 [005BH] |
| 0042 | v(80E00020): LDR R0, SP, 20H |
| 0043 | v(81E00024): LDR R1, SP, 24H |
| 0044 | v(00090001): SUB R0, R0, R1 |
| 0045 | w(ED000015): BGE 21 [005BH] |
| 0046 | x(80E0001C): LDR R0, SP, 1CH |
| 0047 | x(81E00008): LDR R1, SP, 8H |
| 0048 | x(01090001): SUB R1, R0, R1 |
| 0049 | x(DA042F1C): BLCC MT [trap=1, pos=1071] |
| 004A | x(81E00004): LDR R1, SP, 4H |
| 004B | x(00180000): ADD R0, R1, R0 |
| 004C | y(81E00020): LDR R1, SP, 20H |
| 004D | y(82E00018): LDR R2, SP, 18H |
| 004E | y(02190002): SUB R2, R1, R2 |
| 004F | y(DA04391C): BLCC MT [trap=1, pos=1081] |
| 0050 | y(82E00014): LDR R2, SP, 14H |
| 0051 | y(01280001): ADD R1, R2, R1 |
| 0052 | z(91100000): LDR R1, R1, 0H |
| 0053 | z(B1000000): STR R1, R0, 0H |
| 0054 | a(80E0001C): LDR R0, SP, 1CH |
| 0055 | a(40080001): ADD R0, R0, 1H |
| 0056 | a(A0E0001C): STR R0, SP, 1CH |
| 0057 | b(80E00020): LDR R0, SP, 20H |
| 0058 | b(40080001): ADD R0, R0, 1H |
| 0059 | b(A0E00020): STR R0, SP, 20H |
| 005A | b(E7FFFFE2): B -30 [003DH] |
| FName[i]c := 0X |
| 005B | c(80E0001C): LDR R0, SP, 1CH |
| 005C | c(81E00008): LDR R1, SP, 8H |
| 005D | c(01090001): SUB R1, R0, R1 |
| 005E | c(DA045C1C): BLCC MT [trap=1, pos=1116] |
| 005F | c(81E00004): LDR R1, SP, 4H |
| 0060 | c(00180000): ADD R0, R1, R0 |
| ENDd MakeFileName; |
| 0061 | d(41000000): MOV R1, R0, 0H |
| 0062 | d(B1000000): STR R1, R0, 0H |
| 0063 | d(8FE00000): LDR LNK, SP, 0H |
| 0064 | d(4EE80028): ADD SP, SP, 28H |
| 0065 | d(C700000F): B LNK |
| |
| PROCEDURE error(n: INTEGER; name: ARRAY OF CHAR); |
| BEGINe res := n;f importing := name |
| 0066 | e(4EE90010): SUB SP, SP, 10H |
| 0067 | e(AFE00000): STR LNK, SP, 0H |
| 0068 | e(A0E00004): STR R0, SP, 4H |
| 0069 | e(A1E00008): STR R1, SP, 8H |
| 006A | e(A2E0000C): STR R2, SP, CH |
| 006B | f(80E00004): LDR R0, SP, 4H |
| 006C | f .FIXUP D |
| 006C | f(8D00006C): LDR SB, MT, MOD0 [Boot] |
| 006D | f(A0D0002C): STR R0, SB, 2CH [data] |
| ENDg error; |
| 006E | g(40D80030): ADD R0, SB, 30H |
| 006F | g(81E00008): LDR R1, SP, 8H |
| 0070 | g(82E0000C): LDR R2, SP, CH |
| 0071 | g(E100000B): BEQ 11 [007DH] |
| 0072 | g(42280003): ADD R2, R2, 3H |
| 0073 | g(42220002): ASR R2, R2, 2H |
| 0074 | g(43000008): MOV R3, R0, 8H |
| 0075 | g(03290003): SUB R3, R2, R3 |
| 0076 | g(DE04D53C): BLGT MT [trap=3, pos=1237] |
| 0077 | g(83100000): LDR R3, R1, 0H |
| 0078 | g(41180004): ADD R1, R1, 4H |
| 0079 | g(A3000000): STR R3, R0, 0H |
| 007A | g(40080004): ADD R0, R0, 4H |
| 007B | g(42290001): SUB R2, R2, 1H |
| 007C | g(E9FFFFFA): BNE -6 [0077H] |
| 007D | g(8FE00000): LDR LNK, SP, 0H |
| 007E | g(4EE80010): ADD SP, SP, 10H |
| 007F | g(C700000F): B LNK |
| |
| PROCEDURE Check(s: ARRAY OF CHAR); |
| VAR i: INTEGER; ch: CHAR; |
| BEGINh ch := s[0]i;j res := 1;k i := 1;l |
| 0080 | h(4EE90014): SUB SP, SP, 14H |
| 0081 | h(AFE00000): STR LNK, SP, 0H |
| 0082 | h(A0E00004): STR R0, SP, 4H |
| 0083 | h(A1E00008): STR R1, SP, 8H |
| 0084 | i(40000000): MOV R0, R0, 0H |
| 0085 | i(81E00008): LDR R1, SP, 8H |
| 0086 | i(01090001): SUB R1, R0, R1 |
| 0087 | i(DA05331C): BLCC MT [trap=1, pos=1331] |
| 0088 | i(81E00004): LDR R1, SP, 4H |
| 0089 | i(00180000): ADD R0, R1, R0 |
| 008A | j(90000000): LDR R0, R0, 0H |
| 008B | j(B0E00010): STR R0, SP, 10H |
| 008C | k(40000001): MOV R0, R0, 1H |
| 008D | k .FIXUP D |
| 008D | k(8D000021): LDR SB, MT, MOD0 [Boot] |
| 008E | k(A0D0002C): STR R0, SB, 2CH [data] |
| 008F | l(40000001): MOV R0, R0, 1H |
| 0090 | l(A0E0000C): STR R0, SP, CH |
| IF (ch >= "A")m & (nch <= "Z")o OR (pch >= "a")q & (rch <= "z")s THENt |
| 0091 | m(90E00010): LDR R0, SP, 10H |
| 0092 | m(40090041): SUB R0, R0, 41H |
| 0093 | n(E5000003): BLT 3 [0097H] |
| 0094 | o(90E00010): LDR R0, SP, 10H |
| 0095 | o(4009005A): SUB R0, R0, 5AH |
| 0096 | p(E6000006): BLE 6 [009DH] |
| 0097 | q(90E00010): LDR R0, SP, 10H |
| 0098 | q(40090061): SUB R0, R0, 61H |
| 0099 | r(E500002E): BLT 46 [00C8H] |
| 009A | s(90E00010): LDR R0, SP, 10H |
| 009B | s(4009007A): SUB R0, R0, 7AH |
| 009C | t(EE00002B): BGT 43 [00C8H] |
| REPEAT ch := s[i]u;v INC(i) |
| 009D | u(80E0000C): LDR R0, SP, CH |
| 009E | u(81E00008): LDR R1, SP, 8H |
| 009F | u(01090001): SUB R1, R0, R1 |
| 00A0 | u(DA05A11C): BLCC MT [trap=1, pos=1441] |
| 00A1 | u(81E00004): LDR R1, SP, 4H |
| 00A2 | u(00180000): ADD R0, R1, R0 |
| 00A3 | v(90000000): LDR R0, R0, 0H |
| 00A4 | v(B0E00010): STR R0, SP, 10H |
| UNTILw ~((ch >= "0")x & (ych <= "9")z OR (ach >= "A")b & (cch <= "Z")d |
| 00A5 | w(80E0000C): LDR R0, SP, CH |
| 00A6 | w(40080001): ADD R0, R0, 1H |
| 00A7 | w(A0E0000C): STR R0, SP, CH |
| 00A8 | x(90E00010): LDR R0, SP, 10H |
| 00A9 | x(40090030): SUB R0, R0, 30H |
| 00AA | y(E5000003): BLT 3 [00AEH] |
| 00AB | z(90E00010): LDR R0, SP, 10H |
| 00AC | z(40090039): SUB R0, R0, 39H |
| 00AD | a(E600000F): BLE 15 [00BDH] |
| 00AE | b(90E00010): LDR R0, SP, 10H |
| 00AF | b(40090041): SUB R0, R0, 41H |
| 00B0 | c(E5000003): BLT 3 [00B4H] |
| 00B1 | d(90E00010): LDR R0, SP, 10H |
| 00B2 | d(4009005A): SUB R0, R0, 5AH |
| OR (ech >= "a")f & (gch <= "z")h OR (ich = ".")j) OR (ki = 32)l;m |
| 00B3 | e(E6000009): BLE 9 [00BDH] |
| 00B4 | f(90E00010): LDR R0, SP, 10H |
| 00B5 | f(40090061): SUB R0, R0, 61H |
| 00B6 | g(E5000003): BLT 3 [00BAH] |
| 00B7 | h(90E00010): LDR R0, SP, 10H |
| 00B8 | h(4009007A): SUB R0, R0, 7AH |
| 00B9 | i(E6000003): BLE 3 [00BDH] |
| 00BA | j(90E00010): LDR R0, SP, 10H |
| 00BB | j(4009002E): SUB R0, R0, 2EH |
| 00BC | k(E9000003): BNE 3 [00C0H] |
| 00BD | l(80E0000C): LDR R0, SP, CH |
| 00BE | l(40090020): SUB R0, R0, 20H |
| 00BF | m(E9FFFFDD): BNE -35 [009DH] |
| IF (i < 32)n & (och = 0X)p THENq res := 0 ENDr |
| 00C0 | n(80E0000C): LDR R0, SP, CH |
| 00C1 | n(40090020): SUB R0, R0, 20H |
| 00C2 | o(ED000005): BGE 5 [00C8H] |
| 00C3 | p(90E00010): LDR R0, SP, 10H |
| 00C4 | q(E9000003): BNE 3 [00C8H] |
| 00C5 | r(40000000): MOV R0, R0, 0H |
| 00C6 | r .FIXUP D |
| 00C6 | r(8D000039): LDR SB, MT, MOD0 [Boot] |
| 00C7 | r(A0D0002C): STR R0, SB, 2CH [data] |
| END |
| ENDs Check; |
| 00C8 | s(8FE00000): LDR LNK, SP, 0H |
| 00C9 | s(4EE80014): ADD SP, SP, 14H |
| 00CA | s(C700000F): B LNK |
| |
| PROCEDURE Link1(name: ARRAY OF CHAR; VAR newmod: Module); |
| VAR mod, impmod: Module; |
| i, n, key, impkey, mno, nofimps, size: INTEGER; |
| p, u, v, w: INTEGER; (*addresses*) |
| ch: CHAR; |
| body: Command; |
| fixorgP, fixorgD, fixorgT: INTEGER; |
| disp, adr, inst, pno, vno, dest, offset: INTEGER; |
| name1, impname: ModuleName; |
| F: Files.File; R: Files.Rider; |
| import: ARRAY 16 OF Module; |
| BEGINt mod := root;u res := 0;v nofimps := 0;w |
| 00CB | t(4EE90110): SUB SP, SP, 110H |
| 00CC | t(AFE00000): STR LNK, SP, 0H |
| 00CD | t(A0E00004): STR R0, SP, 4H |
| 00CE | t(A1E00008): STR R1, SP, 8H |
| 00CF | t(A2E0000C): STR R2, SP, CH |
| 00D0 | u .FIXUP D |
| 00D0 | u(8D00000A): LDR SB, MT, MOD0 [Boot] |
| 00D1 | u(80D00018): LDR R0, SB, 18H [data] |
| 00D2 | u(A0E00010): STR R0, SP, 10H |
| 00D3 | v(40000000): MOV R0, R0, 0H |
| 00D4 | v(A0D0002C): STR R0, SB, 2CH |
| 00D5 | w(40000000): MOV R0, R0, 0H |
| 00D6 | w(A0E0002C): STR R0, SP, 2CH |
| WHILE (mod # NIL)x & (yname # mod.namez)a DOb mod := mod.nextc ENDd ; |
| 00D7 | x(80E00010): LDR R0, SP, 10H |
| 00D8 | y(E1000011): BEQ 17 [00EAH] |
| 00D9 | z(80E00010): LDR R0, SP, 10H |
| 00DA | z(D108744C): BLEQ MT [trap=4, pos=2164] |
| 00DB | a(81E00004): LDR R1, SP, 4H |
| 00DC | a(92100000): LDR R2, R1, 0H |
| 00DD | a(41180001): ADD R1, R1, 1H |
| 00DE | a(93000000): LDR R3, R0, 0H |
| 00DF | a(40080001): ADD R0, R0, 1H |
| 00E0 | a(04290003): SUB R4, R2, R3 |
| 00E1 | a(E9000002): BNE 2 [00E4H] |
| 00E2 | a(44290000): SUB R4, R2, 0H |
| 00E3 | a(E9FFFFF8): BNE -8 [00DCH] |
| 00E4 | b(E1000005): BEQ 5 [00EAH] |
| 00E5 | c(80E00010): LDR R0, SP, 10H |
| 00E6 | c(D108884C): BLEQ MT [trap=4, pos=2184] |
| 00E7 | d(80000020): LDR R0, R0, 20H |
| 00E8 | d(A0E00010): STR R0, SP, 10H |
| 00E9 | d(E7FFFFED): B -19 [00D7H] |
| IF mod = NIL THENe (*load*) |
| 00EA | e(80E00010): LDR R0, SP, 10H |
| 00EB | e(E9000343): BNE 835 [042FH] |
| Check(name)f;g |
| 00EC | f(80E00004): LDR R0, SP, 4H |
| 00ED | f(81E00008): LDR R1, SP, 8H |
| 00EE | g(F7FFFF91): BL -111 [0080H] |
| IF res = 0 THENh MakeFileName(name1,i name,j ".rsc")k;l F := Files.Old(name1)m ELSEn Fo := NIL ENDp ; |
| 00EF | h .FIXUP D |
| 00EF | h(8D00001F): LDR SB, MT, MOD0 [Boot] |
| 00F0 | h(80D0002C): LDR R0, SB, 2CH [data] |
| 00F1 | h(E900000D): BNE 13 [00FFH] |
| 00F2 | i(40E80074): ADD R0, SP, 74H |
| 00F3 | i(41000020): MOV R1, R0, 20H |
| 00F4 | j(82E00004): LDR R2, SP, 4H |
| 00F5 | j(83E00008): LDR R3, SP, 8H |
| 00F6 | k .FIXUP D |
| 00F6 | k(8D000007): LDR SB, MT, MOD0 [Boot] |
| 00F7 | k(44D80098): ADD R4, SB, 98H [".rsc"] |
| 00F8 | k(45000005): MOV R5, R0, 5H |
| 00F9 | l(F7FFFF06): BL -250 [0000H] |
| 00FA | m(40E80074): ADD R0, SP, 74H |
| 00FB | m(41000020): MOV R1, R0, 20H |
| 00FC | n .FIXUP P |
| 00FC | n(F72020FC): BL MOD2 [Files] PROC2 |
| 00FD | n(A0E000B4): STR R0, SP, B4H |
| 00FE | o(E7000002): B 2 [0101H] |
| 00FF | p(40000000): MOV R0, R0, 0H |
| 0100 | p(A0E000B4): STR R0, SP, B4H |
| IF F # NIL THENq |
| 0101 | q(80E000B4): LDR R0, SP, B4H |
| 0102 | q(E100007D): BEQ 125 [0180H] |
| Files.Set(R,r F,s 0)t;u Files.ReadString(R,v name1)w;x Files.ReadInt(R,y key)z;a Files.Read(R,b ch)c;d |
| 0103 | r(40E800B8): ADD R0, SP, B8H |
| 0104 | r .FIXUP D |
| 0104 | r(8D20000E): LDR SB, MT, MOD2 [Files] |
| 0105 | r(41D80001): ADD R1, SB, VAR1 |
| 0106 | s(82E000B4): LDR R2, SP, B4H |
| 0107 | t(43000000): MOV R3, R0, 0H |
| 0108 | u .FIXUP P |
| 0108 | u(F720B00C): BL MOD2 [Files] PROC11 |
| 0109 | v(40E800B8): ADD R0, SP, B8H |
| 010A | v .FIXUP D |
| 010A | v(8D200006): LDR SB, MT, MOD2 [Files] |
| 010B | v(41D80001): ADD R1, SB, VAR1 |
| 010C | w(42E80074): ADD R2, SP, 74H |
| 010D | w(43000020): MOV R3, R0, 20H |
| 010E | x .FIXUP P |
| 010E | x(F7214006): BL MOD2 [Files] PROC20 |
| 010F | y(40E800B8): ADD R0, SP, B8H |
| 0110 | y .FIXUP D |
| 0110 | y(8D200006): LDR SB, MT, MOD2 [Files] |
| 0111 | y(41D80001): ADD R1, SB, VAR1 |
| 0112 | z(42E80020): ADD R2, SP, 20H |
| 0113 | a .FIXUP P |
| 0113 | a(F7211005): BL MOD2 [Files] PROC17 |
| 0114 | b(40E800B8): ADD R0, SP, B8H |
| 0115 | b .FIXUP D |
| 0115 | b(8D200005): LDR SB, MT, MOD2 [Files] |
| 0116 | b(41D80001): ADD R1, SB, VAR1 |
| 0117 | c(42E80044): ADD R2, SP, 44H |
| 0118 | d .FIXUP P |
| 0118 | d(F7210005): BL MOD2 [Files] PROC16 |
| Files.ReadInt(R,e size)f;g importing := name1;h |
| 0119 | e(40E800B8): ADD R0, SP, B8H |
| 011A | e .FIXUP D |
| 011A | e(8D200005): LDR SB, MT, MOD2 [Files] |
| 011B | e(41D80001): ADD R1, SB, VAR1 |
| 011C | f(42E80030): ADD R2, SP, 30H |
| 011D | g .FIXUP P |
| 011D | g(F7211005): BL MOD2 [Files] PROC17 |
| 011E | h .FIXUP D |
| 011E | h(8D000004): LDR SB, MT, MOD0 [Boot] |
| 011F | h(40D80030): ADD R0, SB, 30H [data] |
| 0120 | h(41E80074): ADD R1, SP, 74H |
| 0121 | h(42000008): MOV R2, R0, 8H |
| 0122 | h(83100000): LDR R3, R1, 0H |
| 0123 | h(41180004): ADD R1, R1, 4H |
| 0124 | h(A3000000): STR R3, R0, 0H |
| 0125 | h(40080004): ADD R0, R0, 4H |
| 0126 | h(42290001): SUB R2, R2, 1H |
| 0127 | h(E9FFFFFA): BNE -6 [0122H] |
| IF (ch = versionkey)i (*regular module*) OR (jch = versionkey0)k (*standalone program*) THENl |
| 0128 | i(90E00044): LDR R0, SP, 44H |
| 0129 | i(40090001): SUB R0, R0, 1H |
| 012A | j(E1000002): BEQ 2 [012DH] |
| 012B | k(90E00044): LDR R0, SP, 44H |
| 012C | l(E900004E): BNE 78 [017BH] |
| Files.ReadString(R,m impname)n;o (*imports*) |
| 012D | m(40E800B8): ADD R0, SP, B8H |
| 012E | m .FIXUP D |
| 012E | m(8D200010): LDR SB, MT, MOD2 [Files] |
| 012F | m(41D80001): ADD R1, SB, VAR1 |
| 0130 | n(42E80094): ADD R2, SP, 94H |
| 0131 | n(43000020): MOV R3, R0, 20H |
| 0132 | o .FIXUP P |
| 0132 | o(F7214015): BL MOD2 [Files] PROC20 |
| WHILE (impname[0] # 0X)p & (qres = 0)r DOs |
| 0133 | p(90E00094): LDR R0, SP, 94H |
| 0134 | q(E1000045): BEQ 69 [017AH] |
| 0135 | r .FIXUP D |
| 0135 | r(8D000007): LDR SB, MT, MOD0 [Boot] |
| 0136 | r(80D0002C): LDR R0, SB, 2CH [data] |
| 0137 | s(E9000042): BNE 66 [017AH] |
| Files.ReadInt(R,t impkey)u;v |
| 0138 | t(40E800B8): ADD R0, SP, B8H |
| 0139 | t .FIXUP D |
| 0139 | t(8D200004): LDR SB, MT, MOD2 [Files] |
| 013A | t(41D80001): ADD R1, SB, VAR1 |
| 013B | u(42E80024): ADD R2, SP, 24H |
| 013C | v .FIXUP P |
| 013C | v(F721100A): BL MOD2 [Files] PROC17 |
| Link1(impname,w impmod)x;y import[nofimps]z := impmod;a |
| 013D | w(40E80094): ADD R0, SP, 94H |
| 013E | w(41000020): MOV R1, R0, 20H |
| 013F | x(42E80014): ADD R2, SP, 14H |
| 0140 | y(F7FFFF8A): BL -118 [00CBH] |
| 0141 | z(80E0002C): LDR R0, SP, 2CH |
| 0142 | z(41090010): SUB R1, R0, 10H |
| 0143 | z(DA0AF21C): BLCC MT [trap=1, pos=2802] |
| 0144 | z(40010002): LSL R0, R0, 2H |
| 0145 | z(00E80000): ADD R0, SP, R0 |
| 0146 | a(81E00014): LDR R1, SP, 14H |
| 0147 | a(A10000D0): STR R1, R0, D0H |
| IF res = 0 THENb importing := name1;c |
| 0148 | b .FIXUP D |
| 0148 | b(8D00000F): LDR SB, MT, MOD0 [Boot] |
| 0149 | b(80D0002C): LDR R0, SB, 2CH [data] |
| 014A | b(E9000028): BNE 40 [0173H] |
| 014B | c .FIXUP D |
| 014B | c(8D000003): LDR SB, MT, MOD0 [Boot] |
| 014C | c(40D80030): ADD R0, SB, 30H [data] |
| 014D | c(41E80074): ADD R1, SP, 74H |
| 014E | c(42000008): MOV R2, R0, 8H |
| 014F | c(83100000): LDR R3, R1, 0H |
| 0150 | c(41180004): ADD R1, R1, 4H |
| 0151 | c(A3000000): STR R3, R0, 0H |
| 0152 | c(40080004): ADD R0, R0, 4H |
| 0153 | c(42290001): SUB R2, R2, 1H |
| 0154 | c(E9FFFFFA): BNE -6 [014FH] |
| IF impmod.keyd = impkey THENe INC(impmod.refcntf);g INC(nofimps) |
| 0155 | d(80E00014): LDR R0, SP, 14H |
| 0156 | d(D10B494C): BLEQ MT [trap=4, pos=2889] |
| 0157 | e(80000024): LDR R0, R0, 24H |
| 0158 | e(81E00024): LDR R1, SP, 24H |
| 0159 | e(00090001): SUB R0, R0, R1 |
| 015A | e(E900000A): BNE 10 [0165H] |
| 015B | f(80E00014): LDR R0, SP, 14H |
| 015C | f(D10B694C): BLEQ MT [trap=4, pos=2921] |
| 015D | g(40080030): ADD R0, R0, 30H |
| 015E | g(81000000): LDR R1, R0, 0H |
| 015F | g(41180001): ADD R1, R1, 1H |
| 0160 | g(A1000000): STR R1, R0, 0H |
| ELSEh errori(3,j name1)k;l imported := impname |
| 0161 | h(80E0002C): LDR R0, SP, 2CH |
| 0162 | h(40080001): ADD R0, R0, 1H |
| 0163 | h(A0E0002C): STR R0, SP, 2CH |
| 0164 | i(E700000E): B 14 [0173H] |
| 0165 | j(40000003): MOV R0, R0, 3H |
| 0166 | k(41E80074): ADD R1, SP, 74H |
| 0167 | k(42000020): MOV R2, R0, 20H |
| 0168 | l(F7FFFEFD): BL -259 [0066H] |
| ENDm |
| 0169 | m .FIXUP D |
| 0169 | m(8D00001E): LDR SB, MT, MOD0 [Boot] |
| 016A | m(40D80050): ADD R0, SB, 50H [data] |
| 016B | m(41E80094): ADD R1, SP, 94H |
| 016C | m(42000008): MOV R2, R0, 8H |
| 016D | m(83100000): LDR R3, R1, 0H |
| 016E | m(41180004): ADD R1, R1, 4H |
| 016F | m(A3000000): STR R3, R0, 0H |
| 0170 | m(40080004): ADD R0, R0, 4H |
| 0171 | m(42290001): SUB R2, R2, 1H |
| 0172 | m(E9FFFFFA): BNE -6 [016DH] |
| END ; |
| Files.ReadString(R,n impname)o |
| 0173 | n(40E800B8): ADD R0, SP, B8H |
| 0174 | n .FIXUP D |
| 0174 | n(8D20000B): LDR SB, MT, MOD2 [Files] |
| 0175 | n(41D80001): ADD R1, SB, VAR1 |
| 0176 | o(42E80094): ADD R2, SP, 94H |
| 0177 | o(43000020): MOV R3, R0, 20H |
| ENDp |
| 0178 | p .FIXUP P |
| 0178 | p(F721403C): BL MOD2 [Files] PROC20 |
| 0179 | p(E7FFFFB9): B -71 [0133H] |
| ELSE errorq(2,r name1)s |
| 017A | q(E7000004): B 4 [017FH] |
| 017B | r(40000002): MOV R0, R0, 2H |
| 017C | s(41E80074): ADD R1, SP, 74H |
| 017D | s(42000020): MOV R2, R0, 20H |
| ENDt |
| 017E | t(F7FFFEE7): BL -281 [0066H] |
| ELSE erroru(1,v name)w |
| 017F | u(E7000004): B 4 [0184H] |
| 0180 | v(40000001): MOV R0, R0, 1H |
| 0181 | w(81E00004): LDR R1, SP, 4H |
| 0182 | w(82E00008): LDR R2, SP, 8H |
| ENDx ; |
| 0183 | x(F7FFFEE2): BL -286 [0066H] |
| IF res = 0 THENy |
| 0184 | y .FIXUP D |
| 0184 | y(8D000010): LDR SB, MT, MOD0 [Boot] |
| 0185 | y(80D0002C): LDR R0, SB, 2CH [data] |
| 0186 | y(E9000037): BNE 55 [01BEH] |
| INC(size, DescSize);z |
| 0187 | z(80E00030): LDR R0, SP, 30H |
| 0188 | z(40080050): ADD R0, R0, 50H |
| 0189 | z(A0E00030): STR R0, SP, 30H |
| IF AllocPtr + size <a limit THENb (*allocate*) |
| 018A | a .FIXUP D |
| 018A | a(8D000006): LDR SB, MT, MOD0 [Boot] |
| 018B | a(80D00020): LDR R0, SB, 20H [data] |
| 018C | a(81E00030): LDR R1, SP, 30H |
| 018D | a(00080001): ADD R0, R0, R1 |
| 018E | b(81D00028): LDR R1, SB, 28H |
| 018F | b(00090001): SUB R0, R0, R1 |
| 0190 | b(ED000029): BGE 41 [01BAH] |
| p := AllocPtr;c mod := SYSTEM.VAL(Module, p);d |
| 0191 | c .FIXUP D |
| 0191 | c(8D000007): LDR SB, MT, MOD0 [Boot] |
| 0192 | c(80D00020): LDR R0, SB, 20H [data] |
| 0193 | c(A0E00034): STR R0, SP, 34H |
| 0194 | d(80E00034): LDR R0, SP, 34H |
| 0195 | d(A0E00010): STR R0, SP, 10H |
| AllocPtr := (p + size +e 31)f DIV 32 *g 32;h mod.sizei := AllocPtr - p;j |
| 0196 | e(80E00034): LDR R0, SP, 34H |
| 0197 | e(81E00030): LDR R1, SP, 30H |
| 0198 | e(00080001): ADD R0, R0, R1 |
| 0199 | f(4008001F): ADD R0, R0, 1FH |
| 019A | g(40020005): ASR R0, R0, 5H |
| 019B | h(40010005): LSL R0, R0, 5H |
| 019C | h(A0D00020): STR R0, SB, 20H |
| 019D | i(80E00010): LDR R0, SP, 10H |
| 019E | i(D10D354C): BLEQ MT [trap=4, pos=3381] |
| 019F | j(81D00020): LDR R1, SB, 20H |
| 01A0 | j(82E00034): LDR R2, SP, 34H |
| 01A1 | j(01190002): SUB R1, R1, R2 |
| 01A2 | j(A100002C): STR R1, R0, 2CH |
| IF root = NIL THENk mod.numl := 1 ELSEm modn.numo := root.nump + 1 ENDq ; |
| 01A3 | k(80D00018): LDR R0, SB, 18H |
| 01A4 | k(E9000005): BNE 5 [01AAH] |
| 01A5 | l(80E00010): LDR R0, SP, 10H |
| 01A6 | l(D10D6B4C): BLEQ MT [trap=4, pos=3435] |
| 01A7 | m(41000001): MOV R1, R0, 1H |
| 01A8 | m(A1000028): STR R1, R0, 28H |
| 01A9 | n(E7000008): B 8 [01B2H] |
| 01AA | o(80E00010): LDR R0, SP, 10H |
| 01AB | o(D10D7D4C): BLEQ MT [trap=4, pos=3453] |
| 01AC | p .FIXUP D |
| 01AC | p(8D00001B): LDR SB, MT, MOD0 [Boot] |
| 01AD | p(81D00018): LDR R1, SB, 18H [data] |
| 01AE | p(D10D894C): BLEQ MT [trap=4, pos=3465] |
| 01AF | q(81100028): LDR R1, R1, 28H |
| 01B0 | q(41180001): ADD R1, R1, 1H |
| 01B1 | q(A1000028): STR R1, R0, 28H |
| mod.nextr := root;s root := mod |
| 01B2 | r(80E00010): LDR R0, SP, 10H |
| 01B3 | r(D10DA64C): BLEQ MT [trap=4, pos=3494] |
| 01B4 | s .FIXUP D |
| 01B4 | s(8D000008): LDR SB, MT, MOD0 [Boot] |
| 01B5 | s(81D00018): LDR R1, SB, 18H [data] |
| 01B6 | s(A1000020): STR R1, R0, 20H |
| ELSEt erroru(7,v name1)w |
| 01B7 | t(80E00010): LDR R0, SP, 10H |
| 01B8 | t(A0D00018): STR R0, SB, 18H |
| 01B9 | u(E7000004): B 4 [01BEH] |
| 01BA | v(40000007): MOV R0, R0, 7H |
| 01BB | w(41E80074): ADD R1, SP, 74H |
| 01BC | w(42000020): MOV R2, R0, 20H |
| ENDx |
| 01BD | x(F7FFFEA8): BL -344 [0066H] |
| END ; |
| IF res = 0 THENy (*read file*) |
| 01BE | y .FIXUP D |
| 01BE | y(8D00000A): LDR SB, MT, MOD0 [Boot] |
| 01BF | y(80D0002C): LDR R0, SB, 2CH [data] |
| 01C0 | y(E9000144): BNE 324 [0305H] |
| INC(p, DescSize);z (*allocate descriptor*) |
| 01C1 | z(80E00034): LDR R0, SP, 34H |
| 01C2 | z(40080050): ADD R0, R0, 50H |
| 01C3 | z(A0E00034): STR R0, SP, 34H |
| mod.namea := name;b mod.keyc := key;d mod.refcnte := 0;f |
| 01C4 | a(80E00010): LDR R0, SP, 10H |
| 01C5 | a(D10E574C): BLEQ MT [trap=4, pos=3671] |
| 01C6 | b(81E00004): LDR R1, SP, 4H |
| 01C7 | b(82E00008): LDR R2, SP, 8H |
| 01C8 | b(E100000B): BEQ 11 [01D4H] |
| 01C9 | b(42280003): ADD R2, R2, 3H |
| 01CA | b(42220002): ASR R2, R2, 2H |
| 01CB | b(43000008): MOV R3, R0, 8H |
| 01CC | b(03290003): SUB R3, R2, R3 |
| 01CD | b(DE0E603C): BLGT MT [trap=3, pos=3680] |
| 01CE | b(83100000): LDR R3, R1, 0H |
| 01CF | b(41180004): ADD R1, R1, 4H |
| 01D0 | b(A3000000): STR R3, R0, 0H |
| 01D1 | b(40080004): ADD R0, R0, 4H |
| 01D2 | b(42290001): SUB R2, R2, 1H |
| 01D3 | b(E9FFFFFA): BNE -6 [01CEH] |
| 01D4 | c(80E00010): LDR R0, SP, 10H |
| 01D5 | c(D10E684C): BLEQ MT [trap=4, pos=3688] |
| 01D6 | d(81E00020): LDR R1, SP, 20H |
| 01D7 | d(A1000024): STR R1, R0, 24H |
| 01D8 | e(80E00010): LDR R0, SP, 10H |
| 01D9 | e(D10E7B4C): BLEQ MT [trap=4, pos=3707] |
| 01DA | f(41000000): MOV R1, R0, 0H |
| 01DB | f(A1000030): STR R1, R0, 30H |
| mod.datag := p;h (*data*) |
| 01DC | g(80E00010): LDR R0, SP, 10H |
| 01DD | g(D10E924C): BLEQ MT [trap=4, pos=3730] |
| 01DE | h(81E00034): LDR R1, SP, 34H |
| 01DF | h(A1000034): STR R1, R0, 34H |
| SYSTEM.PUT(mod.numi * 4 +j MTOrg,k p);l (*module table entry*) |
| 01E0 | i(80E00010): LDR R0, SP, 10H |
| 01E1 | i(D10EBD4C): BLEQ MT [trap=4, pos=3773] |
| 01E2 | j(80000028): LDR R0, R0, 28H |
| 01E3 | j(40010002): LSL R0, R0, 2H |
| 01E4 | k .FIXUP D |
| 01E4 | k(8D000026): LDR SB, MT, MOD0 [Boot] |
| 01E5 | k(81D0001C): LDR R1, SB, 1CH [data] |
| 01E6 | k(00080001): ADD R0, R0, R1 |
| 01E7 | l(81E00034): LDR R1, SP, 34H |
| 01E8 | l(A1000000): STR R1, R0, 0H |
| Files.ReadInt(R,m n)n;o |
| 01E9 | m(40E800B8): ADD R0, SP, B8H |
| 01EA | m .FIXUP D |
| 01EA | m(8D200006): LDR SB, MT, MOD2 [Files] |
| 01EB | m(41D80001): ADD R1, SB, VAR1 |
| 01EC | n(42E8001C): ADD R2, SP, 1CH |
| 01ED | o .FIXUP P |
| 01ED | o(F7211075): BL MOD2 [Files] PROC17 |
| WHILE n > 0 DOp Files.ReadInt(R,q w)r;s SYSTEM.PUT(p, w);t INC(p, 4);u DEC(n, 4) ENDv ; (*type descriptors*) |
| 01EE | p(80E0001C): LDR R0, SP, 1CH |
| 01EF | p(40090000): SUB R0, R0, 0H |
| 01F0 | p(E600000F): BLE 15 [0200H] |
| 01F1 | q(40E800B8): ADD R0, SP, B8H |
| 01F2 | q .FIXUP D |
| 01F2 | q(8D200008): LDR SB, MT, MOD2 [Files] |
| 01F3 | q(41D80001): ADD R1, SB, VAR1 |
| 01F4 | r(42E80040): ADD R2, SP, 40H |
| 01F5 | s .FIXUP P |
| 01F5 | s(F7211008): BL MOD2 [Files] PROC17 |
| 01F6 | t(80E00034): LDR R0, SP, 34H |
| 01F7 | t(81E00040): LDR R1, SP, 40H |
| 01F8 | t(A1000000): STR R1, R0, 0H |
| 01F9 | u(80E00034): LDR R0, SP, 34H |
| 01FA | u(40080004): ADD R0, R0, 4H |
| 01FB | u(A0E00034): STR R0, SP, 34H |
| 01FC | v(80E0001C): LDR R0, SP, 1CH |
| 01FD | v(40090004): SUB R0, R0, 4H |
| 01FE | v(A0E0001C): STR R0, SP, 1CH |
| 01FF | v(E7FFFFEE): B -18 [01EEH] |
| Files.ReadInt(R,w n)x;y |
| 0200 | w(40E800B8): ADD R0, SP, B8H |
| 0201 | w .FIXUP D |
| 0201 | w(8D20000F): LDR SB, MT, MOD2 [Files] |
| 0202 | w(41D80001): ADD R1, SB, VAR1 |
| 0203 | x(42E8001C): ADD R2, SP, 1CH |
| 0204 | y .FIXUP P |
| 0204 | y(F721100F): BL MOD2 [Files] PROC17 |
| WHILE n > 0 DOz SYSTEM.PUT(p, 0);a INC(p, 4);b DEC(n, 4) ENDc ; (*variable space*) |
| 0205 | z(80E0001C): LDR R0, SP, 1CH |
| 0206 | z(40090000): SUB R0, R0, 0H |
| 0207 | z(E600000A): BLE 10 [0212H] |
| 0208 | a(80E00034): LDR R0, SP, 34H |
| 0209 | a(41000000): MOV R1, R0, 0H |
| 020A | a(A1000000): STR R1, R0, 0H |
| 020B | b(80E00034): LDR R0, SP, 34H |
| 020C | b(40080004): ADD R0, R0, 4H |
| 020D | b(A0E00034): STR R0, SP, 34H |
| 020E | c(80E0001C): LDR R0, SP, 1CH |
| 020F | c(40090004): SUB R0, R0, 4H |
| 0210 | c(A0E0001C): STR R0, SP, 1CH |
| 0211 | c(E7FFFFF3): B -13 [0205H] |
| Files.ReadInt(R,d n)e;f |
| 0212 | d(40E800B8): ADD R0, SP, B8H |
| 0213 | d .FIXUP D |
| 0213 | d(8D200012): LDR SB, MT, MOD2 [Files] |
| 0214 | d(41D80001): ADD R1, SB, VAR1 |
| 0215 | e(42E8001C): ADD R2, SP, 1CH |
| 0216 | f .FIXUP P |
| 0216 | f(F7211012): BL MOD2 [Files] PROC17 |
| WHILE n > 0 DOg Files.Read(R,h ch)i;j SYSTEM.PUT(p, ch);k INC(p);l DEC(n) ENDm ; (*strings*) |
| 0217 | g(80E0001C): LDR R0, SP, 1CH |
| 0218 | g(40090000): SUB R0, R0, 0H |
| 0219 | g(E600000F): BLE 15 [0229H] |
| 021A | h(40E800B8): ADD R0, SP, B8H |
| 021B | h .FIXUP D |
| 021B | h(8D200008): LDR SB, MT, MOD2 [Files] |
| 021C | h(41D80001): ADD R1, SB, VAR1 |
| 021D | i(42E80044): ADD R2, SP, 44H |
| 021E | j .FIXUP P |
| 021E | j(F7210008): BL MOD2 [Files] PROC16 |
| 021F | k(80E00034): LDR R0, SP, 34H |
| 0220 | k(91E00044): LDR R1, SP, 44H |
| 0221 | k(B1000000): STR R1, R0, 0H |
| 0222 | l(80E00034): LDR R0, SP, 34H |
| 0223 | l(40080001): ADD R0, R0, 1H |
| 0224 | l(A0E00034): STR R0, SP, 34H |
| 0225 | m(80E0001C): LDR R0, SP, 1CH |
| 0226 | m(40090001): SUB R0, R0, 1H |
| 0227 | m(A0E0001C): STR R0, SP, 1CH |
| 0228 | m(E7FFFFEE): B -18 [0217H] |
| mod.coden := p;o (*program*) |
| 0229 | n(80E00010): LDR R0, SP, 10H |
| 022A | n(D110754C): BLEQ MT [trap=4, pos=4213] |
| 022B | o(81E00034): LDR R1, SP, 34H |
| 022C | o(A1000038): STR R1, R0, 38H |
| Files.ReadInt(R,p n)q;r |
| 022D | p(40E800B8): ADD R0, SP, B8H |
| 022E | p .FIXUP D |
| 022E | p(8D200013): LDR SB, MT, MOD2 [Files] |
| 022F | p(41D80001): ADD R1, SB, VAR1 |
| 0230 | q(42E8001C): ADD R2, SP, 1CH |
| 0231 | r .FIXUP P |
| 0231 | r(F7211013): BL MOD2 [Files] PROC17 |
| WHILE n > 0 DOs Files.ReadInt(R,t w)u;v SYSTEM.PUT(p, w);w INC(p, 4);x DEC(n) ENDy ; (*program code*) |
| 0232 | s(80E0001C): LDR R0, SP, 1CH |
| 0233 | s(40090000): SUB R0, R0, 0H |
| 0234 | s(E600000F): BLE 15 [0244H] |
| 0235 | t(40E800B8): ADD R0, SP, B8H |
| 0236 | t .FIXUP D |
| 0236 | t(8D200008): LDR SB, MT, MOD2 [Files] |
| 0237 | t(41D80001): ADD R1, SB, VAR1 |
| 0238 | u(42E80040): ADD R2, SP, 40H |
| 0239 | v .FIXUP P |
| 0239 | v(F7211008): BL MOD2 [Files] PROC17 |
| 023A | w(80E00034): LDR R0, SP, 34H |
| 023B | w(81E00040): LDR R1, SP, 40H |
| 023C | w(A1000000): STR R1, R0, 0H |
| 023D | x(80E00034): LDR R0, SP, 34H |
| 023E | x(40080004): ADD R0, R0, 4H |
| 023F | x(A0E00034): STR R0, SP, 34H |
| 0240 | y(80E0001C): LDR R0, SP, 1CH |
| 0241 | y(40090001): SUB R0, R0, 1H |
| 0242 | y(A0E0001C): STR R0, SP, 1CH |
| 0243 | y(E7FFFFEE): B -18 [0232H] |
| mod.impz := p;a (*copy imports*) |
| 0244 | z(80E00010): LDR R0, SP, 10H |
| 0245 | z(D1111D4C): BLEQ MT [trap=4, pos=4381] |
| 0246 | a(81E00034): LDR R1, SP, 34H |
| 0247 | a(A100003C): STR R1, R0, 3CH |
| i := 0;b |
| 0248 | b(40000000): MOV R0, R0, 0H |
| 0249 | b(A0E00018): STR R0, SP, 18H |
| WHILE i < nofimps DOc |
| 024A | c(80E00018): LDR R0, SP, 18H |
| 024B | c(81E0002C): LDR R1, SP, 2CH |
| 024C | c(00090001): SUB R0, R0, R1 |
| 024D | c(ED00000F): BGE 15 [025DH] |
| SYSTEM.PUT(p, import[i]d);e INC(p, 4);f INC(i) |
| 024E | d(80E00018): LDR R0, SP, 18H |
| 024F | d(41090010): SUB R1, R0, 10H |
| 0250 | d(DA11841C): BLCC MT [trap=1, pos=4484] |
| 0251 | d(40010002): LSL R0, R0, 2H |
| 0252 | d(00E80000): ADD R0, SP, R0 |
| 0253 | e(81E00034): LDR R1, SP, 34H |
| 0254 | e(800000D0): LDR R0, R0, D0H |
| 0255 | e(A0100000): STR R0, R1, 0H |
| 0256 | f(80E00034): LDR R0, SP, 34H |
| 0257 | f(40080004): ADD R0, R0, 4H |
| 0258 | f(A0E00034): STR R0, SP, 34H |
| ENDg ; |
| 0259 | g(80E00018): LDR R0, SP, 18H |
| 025A | g(40080001): ADD R0, R0, 1H |
| 025B | g(A0E00018): STR R0, SP, 18H |
| 025C | g(E7FFFFED): B -19 [024AH] |
| mod.cmdh := p;i (*commands*) Files.Read(R,j ch)k;l |
| 025D | h(80E00010): LDR R0, SP, 10H |
| 025E | h(D111B64C): BLEQ MT [trap=4, pos=4534] |
| 025F | i(81E00034): LDR R1, SP, 34H |
| 0260 | i(A1000040): STR R1, R0, 40H |
| 0261 | j(40E800B8): ADD R0, SP, B8H |
| 0262 | j .FIXUP D |
| 0262 | j(8D20002C): LDR SB, MT, MOD2 [Files] |
| 0263 | j(41D80001): ADD R1, SB, VAR1 |
| 0264 | k(42E80044): ADD R2, SP, 44H |
| 0265 | l .FIXUP P |
| 0265 | l(F721002C): BL MOD2 [Files] PROC16 |
| WHILE ch # 0X DOm |
| 0266 | m(90E00044): LDR R0, SP, 44H |
| 0267 | m(E1000028): BEQ 40 [0290H] |
| REPEAT SYSTEM.PUT(p, ch);n INC(p);o Files.Read(R,p ch)q UNTILr ch = 0X;s |
| 0268 | n(80E00034): LDR R0, SP, 34H |
| 0269 | n(91E00044): LDR R1, SP, 44H |
| 026A | n(B1000000): STR R1, R0, 0H |
| 026B | o(80E00034): LDR R0, SP, 34H |
| 026C | o(40080001): ADD R0, R0, 1H |
| 026D | o(A0E00034): STR R0, SP, 34H |
| 026E | p(40E800B8): ADD R0, SP, B8H |
| 026F | p .FIXUP D |
| 026F | p(8D20000D): LDR SB, MT, MOD2 [Files] |
| 0270 | p(41D80001): ADD R1, SB, VAR1 |
| 0271 | q(42E80044): ADD R2, SP, 44H |
| 0272 | r .FIXUP P |
| 0272 | r(F721000D): BL MOD2 [Files] PROC16 |
| 0273 | s(90E00044): LDR R0, SP, 44H |
| 0274 | s(E9FFFFF3): BNE -13 [0268H] |
| REPEAT SYSTEM.PUT(p, 0X);t INC(p) UNTILu p MOD 4 =v 0;w |
| 0275 | t(80E00034): LDR R0, SP, 34H |
| 0276 | t(41000000): MOV R1, R0, 0H |
| 0277 | t(B1000000): STR R1, R0, 0H |
| 0278 | u(80E00034): LDR R0, SP, 34H |
| 0279 | u(40080001): ADD R0, R0, 1H |
| 027A | u(A0E00034): STR R0, SP, 34H |
| 027B | v(80E00034): LDR R0, SP, 34H |
| 027C | v(40040003): AND R0, R0, 3H |
| 027D | w(40090000): SUB R0, R0, 0H |
| 027E | w(E9FFFFF6): BNE -10 [0275H] |
| Files.ReadInt(R,x n)y;z SYSTEM.PUT(p, n);a INC(p, 4);b Files.Read(R,c ch)d |
| 027F | x(40E800B8): ADD R0, SP, B8H |
| 0280 | x .FIXUP D |
| 0280 | x(8D200011): LDR SB, MT, MOD2 [Files] |
| 0281 | x(41D80001): ADD R1, SB, VAR1 |
| 0282 | y(42E8001C): ADD R2, SP, 1CH |
| 0283 | z .FIXUP P |
| 0283 | z(F7211011): BL MOD2 [Files] PROC17 |
| 0284 | a(80E00034): LDR R0, SP, 34H |
| 0285 | a(81E0001C): LDR R1, SP, 1CH |
| 0286 | a(A1000000): STR R1, R0, 0H |
| 0287 | b(80E00034): LDR R0, SP, 34H |
| 0288 | b(40080004): ADD R0, R0, 4H |
| 0289 | b(A0E00034): STR R0, SP, 34H |
| 028A | c(40E800B8): ADD R0, SP, B8H |
| 028B | c .FIXUP D |
| 028B | c(8D20000B): LDR SB, MT, MOD2 [Files] |
| 028C | c(41D80001): ADD R1, SB, VAR1 |
| 028D | d(42E80044): ADD R2, SP, 44H |
| ENDe ; |
| 028E | e .FIXUP P |
| 028E | e(F721000B): BL MOD2 [Files] PROC16 |
| 028F | e(E7FFFFD6): B -42 [0266H] |
| REPEAT SYSTEM.PUT(p, 0X);f INC(p) UNTILg p MOD 4 =h 0;i |
| 0290 | f(80E00034): LDR R0, SP, 34H |
| 0291 | f(41000000): MOV R1, R0, 0H |
| 0292 | f(B1000000): STR R1, R0, 0H |
| 0293 | g(80E00034): LDR R0, SP, 34H |
| 0294 | g(40080001): ADD R0, R0, 1H |
| 0295 | g(A0E00034): STR R0, SP, 34H |
| 0296 | h(80E00034): LDR R0, SP, 34H |
| 0297 | h(40040003): AND R0, R0, 3H |
| 0298 | i(40090000): SUB R0, R0, 0H |
| 0299 | i(E9FFFFF6): BNE -10 [0290H] |
| mod.entj := p;k (*entries*) |
| 029A | j(80E00010): LDR R0, SP, 10H |
| 029B | j(D113294C): BLEQ MT [trap=4, pos=4905] |
| 029C | k(81E00034): LDR R1, SP, 34H |
| 029D | k(A1000044): STR R1, R0, 44H |
| Files.ReadInt(R,l n)m;n |
| 029E | l(40E800B8): ADD R0, SP, B8H |
| 029F | l .FIXUP D |
| 029F | l(8D200014): LDR SB, MT, MOD2 [Files] |
| 02A0 | l(41D80001): ADD R1, SB, VAR1 |
| 02A1 | m(42E8001C): ADD R2, SP, 1CH |
| 02A2 | n .FIXUP P |
| 02A2 | n(F7211014): BL MOD2 [Files] PROC17 |
| WHILE n > 0 DOo Files.ReadInt(R,p w)q;r SYSTEM.PUT(p, w);s INC(p, 4);t DEC(n) ENDu ; |
| 02A3 | o(80E0001C): LDR R0, SP, 1CH |
| 02A4 | o(40090000): SUB R0, R0, 0H |
| 02A5 | o(E600000F): BLE 15 [02B5H] |
| 02A6 | p(40E800B8): ADD R0, SP, B8H |
| 02A7 | p .FIXUP D |
| 02A7 | p(8D200008): LDR SB, MT, MOD2 [Files] |
| 02A8 | p(41D80001): ADD R1, SB, VAR1 |
| 02A9 | q(42E80040): ADD R2, SP, 40H |
| 02AA | r .FIXUP P |
| 02AA | r(F7211008): BL MOD2 [Files] PROC17 |
| 02AB | s(80E00034): LDR R0, SP, 34H |
| 02AC | s(81E00040): LDR R1, SP, 40H |
| 02AD | s(A1000000): STR R1, R0, 0H |
| 02AE | t(80E00034): LDR R0, SP, 34H |
| 02AF | t(40080004): ADD R0, R0, 4H |
| 02B0 | t(A0E00034): STR R0, SP, 34H |
| 02B1 | u(80E0001C): LDR R0, SP, 1CH |
| 02B2 | u(40090001): SUB R0, R0, 1H |
| 02B3 | u(A0E0001C): STR R0, SP, 1CH |
| 02B4 | u(E7FFFFEE): B -18 [02A3H] |
| mod.ptrv := p;w (*pointer references*) |
| 02B5 | v(80E00010): LDR R0, SP, 10H |
| 02B6 | v(D113BF4C): BLEQ MT [trap=4, pos=5055] |
| 02B7 | w(81E00034): LDR R1, SP, 34H |
| 02B8 | w(A1000048): STR R1, R0, 48H |
| Files.ReadInt(R,x w)y;z |
| 02B9 | x(40E800B8): ADD R0, SP, B8H |
| 02BA | x .FIXUP D |
| 02BA | x(8D200013): LDR SB, MT, MOD2 [Files] |
| 02BB | x(41D80001): ADD R1, SB, VAR1 |
| 02BC | y(42E80040): ADD R2, SP, 40H |
| 02BD | z .FIXUP P |
| 02BD | z(F7211013): BL MOD2 [Files] PROC17 |
| WHILE w >= 0 DOa SYSTEM.PUT(p, mod.datab + w -c Start)d;e INC(p, 4);f Files.ReadInt(R,g w)h ENDi ; |
| 02BE | a(80E00040): LDR R0, SP, 40H |
| 02BF | a(40090000): SUB R0, R0, 0H |
| 02C0 | a(E5000013): BLT 19 [02D4H] |
| 02C1 | b(80E00010): LDR R0, SP, 10H |
| 02C2 | b(D114294C): BLEQ MT [trap=4, pos=5161] |
| 02C3 | c(80000034): LDR R0, R0, 34H |
| 02C4 | c(81E00040): LDR R1, SP, 40H |
| 02C5 | c(00080001): ADD R0, R0, R1 |
| 02C6 | d .FIXUP D |
| 02C6 | d(8D00000C): LDR SB, MT, MOD0 [Boot] |
| 02C7 | d(81D00024): LDR R1, SB, 24H [data] |
| 02C8 | d(00090001): SUB R0, R0, R1 |
| 02C9 | e(81E00034): LDR R1, SP, 34H |
| 02CA | e(A0100000): STR R0, R1, 0H |
| 02CB | f(80E00034): LDR R0, SP, 34H |
| 02CC | f(40080004): ADD R0, R0, 4H |
| 02CD | f(A0E00034): STR R0, SP, 34H |
| 02CE | g(40E800B8): ADD R0, SP, B8H |
| 02CF | g .FIXUP D |
| 02CF | g(8D200009): LDR SB, MT, MOD2 [Files] |
| 02D0 | g(41D80001): ADD R1, SB, VAR1 |
| 02D1 | h(42E80040): ADD R2, SP, 40H |
| 02D2 | i .FIXUP P |
| 02D2 | i(F7211015): BL MOD2 [Files] PROC17 |
| 02D3 | i(E7FFFFEA): B -22 [02BEH] |
| SYSTEM.PUT(p, 0);j INC(p, 4);k |
| 02D4 | j(80E00034): LDR R0, SP, 34H |
| 02D5 | j(41000000): MOV R1, R0, 0H |
| 02D6 | j(A1000000): STR R1, R0, 0H |
| 02D7 | k(80E00034): LDR R0, SP, 34H |
| 02D8 | k(40080004): ADD R0, R0, 4H |
| 02D9 | k(A0E00034): STR R0, SP, 34H |
| Files.ReadInt(R,l fixorgP)m;n Files.ReadInt(R,o fixorgD)p;q Files.ReadInt(R,r fixorgT)s;t |
| 02DA | l(40E800B8): ADD R0, SP, B8H |
| 02DB | l .FIXUP D |
| 02DB | l(8D20000C): LDR SB, MT, MOD2 [Files] |
| 02DC | l(41D80001): ADD R1, SB, VAR1 |
| 02DD | m(42E8004C): ADD R2, SP, 4CH |
| 02DE | n .FIXUP P |
| 02DE | n(F721100C): BL MOD2 [Files] PROC17 |
| 02DF | o(40E800B8): ADD R0, SP, B8H |
| 02E0 | o .FIXUP D |
| 02E0 | o(8D200005): LDR SB, MT, MOD2 [Files] |
| 02E1 | o(41D80001): ADD R1, SB, VAR1 |
| 02E2 | p(42E80050): ADD R2, SP, 50H |
| 02E3 | q .FIXUP P |
| 02E3 | q(F7211005): BL MOD2 [Files] PROC17 |
| 02E4 | r(40E800B8): ADD R0, SP, B8H |
| 02E5 | r .FIXUP D |
| 02E5 | r(8D200005): LDR SB, MT, MOD2 [Files] |
| 02E6 | r(41D80001): ADD R1, SB, VAR1 |
| 02E7 | s(42E80054): ADD R2, SP, 54H |
| 02E8 | t .FIXUP P |
| 02E8 | t(F7211005): BL MOD2 [Files] PROC17 |
| Files.ReadInt(R,u w)v;w body := SYSTEM.VAL(Command, mod.codex + w -y Start)z;a |
| 02E9 | u(40E800B8): ADD R0, SP, B8H |
| 02EA | u .FIXUP D |
| 02EA | u(8D200005): LDR SB, MT, MOD2 [Files] |
| 02EB | u(41D80001): ADD R1, SB, VAR1 |
| 02EC | v(42E80040): ADD R2, SP, 40H |
| 02ED | w .FIXUP P |
| 02ED | w(F7211005): BL MOD2 [Files] PROC17 |
| 02EE | x(80E00010): LDR R0, SP, 10H |
| 02EF | x(D1151C4C): BLEQ MT [trap=4, pos=5404] |
| 02F0 | y(80000038): LDR R0, R0, 38H |
| 02F1 | y(81E00040): LDR R1, SP, 40H |
| 02F2 | y(00080001): ADD R0, R0, R1 |
| 02F3 | z .FIXUP D |
| 02F3 | z(8D000009): LDR SB, MT, MOD0 [Boot] |
| 02F4 | z(81D00024): LDR R1, SB, 24H [data] |
| 02F5 | z(00090001): SUB R0, R0, R1 |
| 02F6 | a(A0E00048): STR R0, SP, 48H |
| Files.Read(R,b ch)c;d |
| 02F7 | b(40E800B8): ADD R0, SP, B8H |
| 02F8 | b .FIXUP D |
| 02F8 | b(8D200005): LDR SB, MT, MOD2 [Files] |
| 02F9 | b(41D80001): ADD R1, SB, VAR1 |
| 02FA | c(42E80044): ADD R2, SP, 44H |
| 02FB | d .FIXUP P |
| 02FB | d(F721000E): BL MOD2 [Files] PROC16 |
| IF ch # "O" THENe (*corrupted file*) mod := NIL;f error(4,g name)h ENDi |
| 02FC | e(90E00044): LDR R0, SP, 44H |
| 02FD | e(4009004F): SUB R0, R0, 4FH |
| 02FE | e(E1000006): BEQ 6 [0305H] |
| 02FF | f(40000000): MOV R0, R0, 0H |
| 0300 | f(A0E00010): STR R0, SP, 10H |
| 0301 | g(40000004): MOV R0, R0, 4H |
| 0302 | h(81E00004): LDR R1, SP, 4H |
| 0303 | h(82E00008): LDR R2, SP, 8H |
| 0304 | i(F7FFFD61): BL -671 [0066H] |
| END ; |
| IF res = 0 THENj (*fixup of BL*) |
| 0305 | j .FIXUP D |
| 0305 | j(8D00000D): LDR SB, MT, MOD0 [Boot] |
| 0306 | j(80D0002C): LDR R0, SB, 2CH [data] |
| 0307 | j(E9000101): BNE 257 [0409H] |
| adr := mod.codek + fixorgP*4;l |
| 0308 | k(80E00010): LDR R0, SP, 10H |
| 0309 | k(D115DB4C): BLEQ MT [trap=4, pos=5595] |
| 030A | l(81E0004C): LDR R1, SP, 4CH |
| 030B | l(41110002): LSL R1, R1, 2H |
| 030C | l(80000038): LDR R0, R0, 38H |
| 030D | l(00080001): ADD R0, R0, R1 |
| 030E | l(A0E0005C): STR R0, SP, 5CH |
| WHILE adr # mod.codem DOn |
| 030F | m(80E00010): LDR R0, SP, 10H |
| 0310 | m(D116054C): BLEQ MT [trap=4, pos=5637] |
| 0311 | n(81E0005C): LDR R1, SP, 5CH |
| 0312 | n(80000038): LDR R0, R0, 38H |
| 0313 | n(01190000): SUB R1, R1, R0 |
| 0314 | n(E100003D): BEQ 61 [0352H] |
| SYSTEM.GET(adr, inst);o |
| 0315 | o(80E0005C): LDR R0, SP, 5CH |
| 0316 | o(80000000): LDR R0, R0, 0H |
| 0317 | o(A0E00060): STR R0, SP, 60H |
| mno := inst DIV 100000H MODp 10H;q |
| 0318 | p(80E00060): LDR R0, SP, 60H |
| 0319 | p(40020014): ASR R0, R0, 14H |
| 031A | q(4004000F): AND R0, R0, FH |
| 031B | q(A0E00028): STR R0, SP, 28H |
| pno := inst DIV 1000H MODr 100H;s |
| 031C | r(80E00060): LDR R0, SP, 60H |
| 031D | r(4002000C): ASR R0, R0, CH |
| 031E | s(400400FF): AND R0, R0, FFH |
| 031F | s(A0E00064): STR R0, SP, 64H |
| disp := inst MOD 1000H;t |
| 0320 | t(80E00060): LDR R0, SP, 60H |
| 0321 | t(40040FFF): AND R0, R0, FFFH |
| 0322 | t(A0E00058): STR R0, SP, 58H |
| SYSTEM.GET(mod.impu + (mno-1)v*4,w impmod);x |
| 0323 | u(80E00010): LDR R0, SP, 10H |
| 0324 | u(D116BD4C): BLEQ MT [trap=4, pos=5821] |
| 0325 | v(81E00028): LDR R1, SP, 28H |
| 0326 | v(41190001): SUB R1, R1, 1H |
| 0327 | w(41110002): LSL R1, R1, 2H |
| 0328 | w(8000003C): LDR R0, R0, 3CH |
| 0329 | w(00080001): ADD R0, R0, R1 |
| 032A | x(80000000): LDR R0, R0, 0H |
| 032B | x(A0E00014): STR R0, SP, 14H |
| SYSTEM.GET(impmod.enty + pno*4,z dest);a dest := dest + impmod.codeb -c Start;d |
| 032C | y(80E00014): LDR R0, SP, 14H |
| 032D | y(D116F34C): BLEQ MT [trap=4, pos=5875] |
| 032E | z(81E00064): LDR R1, SP, 64H |
| 032F | z(41110002): LSL R1, R1, 2H |
| 0330 | z(80000044): LDR R0, R0, 44H |
| 0331 | z(00080001): ADD R0, R0, R1 |
| 0332 | a(80000000): LDR R0, R0, 0H |
| 0333 | a(A0E0006C): STR R0, SP, 6CH |
| 0334 | b(80E00014): LDR R0, SP, 14H |
| 0335 | b(D1171E4C): BLEQ MT [trap=4, pos=5918] |
| 0336 | c(81E0006C): LDR R1, SP, 6CH |
| 0337 | c(80000038): LDR R0, R0, 38H |
| 0338 | c(00180000): ADD R0, R1, R0 |
| 0339 | d .FIXUP D |
| 0339 | d(8D000034): LDR SB, MT, MOD0 [Boot] |
| 033A | d(81D00024): LDR R1, SB, 24H [data] |
| 033B | d(00090001): SUB R0, R0, R1 |
| 033C | d(A0E0006C): STR R0, SP, 6CH |
| offset := (dest - (adr - Start)e -f 4)g DIV 4;h |
| 033D | e(80E0005C): LDR R0, SP, 5CH |
| 033E | e(81D00024): LDR R1, SB, 24H |
| 033F | e(00090001): SUB R0, R0, R1 |
| 0340 | f(81E0006C): LDR R1, SP, 6CH |
| 0341 | f(00190000): SUB R0, R1, R0 |
| 0342 | g(40090004): SUB R0, R0, 4H |
| 0343 | h(40020002): ASR R0, R0, 2H |
| 0344 | h(A0E00070): STR R0, SP, 70H |
| SYSTEM.PUT(adr, (offset MOD 1000000H)i + 0F7000000H)j;k |
| 0345 | i(80E00070): LDR R0, SP, 70H |
| 0346 | i(40010008): LSL R0, R0, 8H |
| 0347 | i(40030008): ROR R0, R0, 8H |
| 0348 | j(7100F700): MOV' R1, R0, FFFFF700H |
| 0349 | j(00080001): ADD R0, R0, R1 |
| 034A | k(81E0005C): LDR R1, SP, 5CH |
| 034B | k(A0100000): STR R0, R1, 0H |
| adr := adr - disp*4 |
| ENDl ; |
| 034C | l(80E00058): LDR R0, SP, 58H |
| 034D | l(40010002): LSL R0, R0, 2H |
| 034E | l(81E0005C): LDR R1, SP, 5CH |
| 034F | l(00190000): SUB R0, R1, R0 |
| 0350 | l(A0E0005C): STR R0, SP, 5CH |
| 0351 | l(E7FFFFBD): B -67 [030FH] |
| (*fixup of LDR/STR/ADD*) |
| adr := mod.codem + fixorgD*4;n |
| 0352 | m(80E00010): LDR R0, SP, 10H |
| 0353 | m(D118014C): BLEQ MT [trap=4, pos=6145] |
| 0354 | n(81E00050): LDR R1, SP, 50H |
| 0355 | n(41110002): LSL R1, R1, 2H |
| 0356 | n(80000038): LDR R0, R0, 38H |
| 0357 | n(00080001): ADD R0, R0, R1 |
| 0358 | n(A0E0005C): STR R0, SP, 5CH |
| WHILE adr # mod.codeo DOp |
| 0359 | o(80E00010): LDR R0, SP, 10H |
| 035A | o(D1182B4C): BLEQ MT [trap=4, pos=6187] |
| 035B | p(81E0005C): LDR R1, SP, 5CH |
| 035C | p(80000038): LDR R0, R0, 38H |
| 035D | p(01190000): SUB R1, R1, R0 |
| 035E | p(E100005B): BEQ 91 [03BAH] |
| SYSTEM.GET(adr, inst);q |
| 035F | q(80E0005C): LDR R0, SP, 5CH |
| 0360 | q(80000000): LDR R0, R0, 0H |
| 0361 | q(A0E00060): STR R0, SP, 60H |
| mno := inst DIV 100000H MODr 10H;s |
| 0362 | r(80E00060): LDR R0, SP, 60H |
| 0363 | r(40020014): ASR R0, R0, 14H |
| 0364 | s(4004000F): AND R0, R0, FH |
| 0365 | s(A0E00028): STR R0, SP, 28H |
| disp := inst MOD 1000H;t |
| 0366 | t(80E00060): LDR R0, SP, 60H |
| 0367 | t(40040FFF): AND R0, R0, FFFH |
| 0368 | t(A0E00058): STR R0, SP, 58H |
| IF mno = 0 THENu (*global*) |
| 0369 | u(80E00028): LDR R0, SP, 28H |
| 036A | u(E900000D): BNE 13 [0378H] |
| SYSTEM.PUT(adr, (inst DIV 1000000H *v 10H +w MT)x * 100000H +y mod.numz * 4)a |
| 036B | v(80E00060): LDR R0, SP, 60H |
| 036C | v(40020018): ASR R0, R0, 18H |
| 036D | w(40010004): LSL R0, R0, 4H |
| 036E | x(4008000C): ADD R0, R0, CH |
| 036F | y(40010014): LSL R0, R0, 14H |
| 0370 | z(81E00010): LDR R1, SP, 10H |
| 0371 | z(D119104C): BLEQ MT [trap=4, pos=6416] |
| 0372 | a(81100028): LDR R1, R1, 28H |
| 0373 | a(41110002): LSL R1, R1, 2H |
| 0374 | a(00080001): ADD R0, R0, R1 |
| ELSEb (*import*) |
| 0375 | b(81E0005C): LDR R1, SP, 5CH |
| 0376 | b(A0100000): STR R0, R1, 0H |
| SYSTEMc.GET(mod.impd + (mno-1)e*4,f impmod);g v := impmod.numh;i |
| 0377 | c(E700003C): B 60 [03B4H] |
| 0378 | d(80E00010): LDR R0, SP, 10H |
| 0379 | d(D1194E4C): BLEQ MT [trap=4, pos=6478] |
| 037A | e(81E00028): LDR R1, SP, 28H |
| 037B | e(41190001): SUB R1, R1, 1H |
| 037C | f(41110002): LSL R1, R1, 2H |
| 037D | f(8000003C): LDR R0, R0, 3CH |
| 037E | f(00080001): ADD R0, R0, R1 |
| 037F | g(80000000): LDR R0, R0, 0H |
| 0380 | g(A0E00014): STR R0, SP, 14H |
| 0381 | h(80E00014): LDR R0, SP, 14H |
| 0382 | h(D119744C): BLEQ MT [trap=4, pos=6516] |
| 0383 | i(80000028): LDR R0, R0, 28H |
| 0384 | i(A0E0003C): STR R0, SP, 3CH |
| SYSTEM.PUT(adr, (inst DIV 1000000H *j 10H +k MT)l * 100000H +m v*4)n;o |
| 0385 | j(80E00060): LDR R0, SP, 60H |
| 0386 | j(40020018): ASR R0, R0, 18H |
| 0387 | k(40010004): LSL R0, R0, 4H |
| 0388 | l(4008000C): ADD R0, R0, CH |
| 0389 | m(40010014): LSL R0, R0, 14H |
| 038A | n(81E0003C): LDR R1, SP, 3CH |
| 038B | n(41110002): LSL R1, R1, 2H |
| 038C | n(00080001): ADD R0, R0, R1 |
| 038D | o(81E0005C): LDR R1, SP, 5CH |
| 038E | o(A0100000): STR R0, R1, 0H |
| SYSTEM.GET(adr+4,p inst);q vno := inst MOD 100H;r |
| 038F | p(80E0005C): LDR R0, SP, 5CH |
| 0390 | p(40080004): ADD R0, R0, 4H |
| 0391 | q(80000000): LDR R0, R0, 0H |
| 0392 | q(A0E00060): STR R0, SP, 60H |
| 0393 | r(80E00060): LDR R0, SP, 60H |
| 0394 | r(400400FF): AND R0, R0, FFH |
| 0395 | r(A0E00068): STR R0, SP, 68H |
| SYSTEM.GET(impmod.ents + vno*4,t offset);u |
| 0396 | s(80E00014): LDR R0, SP, 14H |
| 0397 | s(D11A1F4C): BLEQ MT [trap=4, pos=6687] |
| 0398 | t(81E00068): LDR R1, SP, 68H |
| 0399 | t(41110002): LSL R1, R1, 2H |
| 039A | t(80000044): LDR R0, R0, 44H |
| 039B | t(00080001): ADD R0, R0, R1 |
| 039C | u(80000000): LDR R0, R0, 0H |
| 039D | u(A0E00070): STR R0, SP, 70H |
| IF ODD(inst DIV 100H)v THENw offset := offset + impmod.codex -y impmod.dataz ENDa ; |
| 039E | v(80E00060): LDR R0, SP, 60H |
| 039F | v(40020008): ASR R0, R0, 8H |
| 03A0 | w(40040001): AND R0, R0, 1H |
| 03A1 | w(E100000A): BEQ 10 [03ACH] |
| 03A2 | x(80E00014): LDR R0, SP, 14H |
| 03A3 | x(D11A774C): BLEQ MT [trap=4, pos=6775] |
| 03A4 | y(81E00070): LDR R1, SP, 70H |
| 03A5 | y(80000038): LDR R0, R0, 38H |
| 03A6 | y(00180000): ADD R0, R1, R0 |
| 03A7 | z(81E00014): LDR R1, SP, 14H |
| 03A8 | z(D11A854C): BLEQ MT [trap=4, pos=6789] |
| 03A9 | a(81100034): LDR R1, R1, 34H |
| 03AA | a(00090001): SUB R0, R0, R1 |
| 03AB | a(A0E00070): STR R0, SP, 70H |
| SYSTEM.PUT(adr+4,b inst DIV 10000H *c 10000H +d offset)e |
| 03AC | b(80E0005C): LDR R0, SP, 5CH |
| 03AD | b(40080004): ADD R0, R0, 4H |
| 03AE | c(81E00060): LDR R1, SP, 60H |
| 03AF | c(41120010): ASR R1, R1, 10H |
| 03B0 | d(41110010): LSL R1, R1, 10H |
| 03B1 | e(82E00070): LDR R2, SP, 70H |
| 03B2 | e(01180002): ADD R1, R1, R2 |
| ENDf ; |
| 03B3 | f(A1000000): STR R1, R0, 0H |
| adr := adr - disp*4 |
| ENDg ; |
| 03B4 | g(80E00058): LDR R0, SP, 58H |
| 03B5 | g(40010002): LSL R0, R0, 2H |
| 03B6 | g(81E0005C): LDR R1, SP, 5CH |
| 03B7 | g(00190000): SUB R0, R1, R0 |
| 03B8 | g(A0E0005C): STR R0, SP, 5CH |
| 03B9 | g(E7FFFF9F): B -97 [0359H] |
| (*fixup of type descriptors*) |
| adr := mod.datah + fixorgT*4;i |
| 03BA | h(80E00010): LDR R0, SP, 10H |
| 03BB | h(D11B464C): BLEQ MT [trap=4, pos=6982] |
| 03BC | i(81E00054): LDR R1, SP, 54H |
| 03BD | i(41110002): LSL R1, R1, 2H |
| 03BE | i(80000034): LDR R0, R0, 34H |
| 03BF | i(00080001): ADD R0, R0, R1 |
| 03C0 | i(A0E0005C): STR R0, SP, 5CH |
| WHILE adr # mod.dataj DOk |
| 03C1 | j(80E00010): LDR R0, SP, 10H |
| 03C2 | j(D11B704C): BLEQ MT [trap=4, pos=7024] |
| 03C3 | k(81E0005C): LDR R1, SP, 5CH |
| 03C4 | k(80000034): LDR R0, R0, 34H |
| 03C5 | k(01190000): SUB R1, R1, R0 |
| 03C6 | k(E100003D): BEQ 61 [0404H] |
| SYSTEM.GET(adr, inst);l |
| 03C7 | l(80E0005C): LDR R0, SP, 5CH |
| 03C8 | l(80000000): LDR R0, R0, 0H |
| 03C9 | l(A0E00060): STR R0, SP, 60H |
| mno := inst DIV 1000000H MODm 10H;n |
| 03CA | m(80E00060): LDR R0, SP, 60H |
| 03CB | m(40020018): ASR R0, R0, 18H |
| 03CC | n(4004000F): AND R0, R0, FH |
| 03CD | n(A0E00028): STR R0, SP, 28H |
| vno := inst DIV 1000H MODo 1000H;p |
| 03CE | o(80E00060): LDR R0, SP, 60H |
| 03CF | o(4002000C): ASR R0, R0, CH |
| 03D0 | p(40040FFF): AND R0, R0, FFFH |
| 03D1 | p(A0E00068): STR R0, SP, 68H |
| disp := inst MOD 1000H;q |
| 03D2 | q(80E00060): LDR R0, SP, 60H |
| 03D3 | q(40040FFF): AND R0, R0, FFFH |
| 03D4 | q(A0E00058): STR R0, SP, 58H |
| IF mno = 0 THENr (*global*) inst := mod.datas - Start +t vno |
| 03D5 | r(80E00028): LDR R0, SP, 28H |
| 03D6 | r(E900000A): BNE 10 [03E1H] |
| 03D7 | s(80E00010): LDR R0, SP, 10H |
| 03D8 | s(D11C434C): BLEQ MT [trap=4, pos=7235] |
| 03D9 | t(80000034): LDR R0, R0, 34H |
| 03DA | t .FIXUP D |
| 03DA | t(8D0000A1): LDR SB, MT, MOD0 [Boot] |
| 03DB | t(81D00024): LDR R1, SB, 24H [data] |
| 03DC | t(00090001): SUB R0, R0, R1 |
| ELSEu (*import*) |
| 03DD | u(81E00068): LDR R1, SP, 68H |
| 03DE | u(00080001): ADD R0, R0, R1 |
| 03DF | u(A0E00060): STR R0, SP, 60H |
| SYSTEMv.GET(mod.impw + (mno-1)x*4,y impmod);z |
| 03E0 | v(E700001A): B 26 [03FBH] |
| 03E1 | w(80E00010): LDR R0, SP, 10H |
| 03E2 | w(D11C8A4C): BLEQ MT [trap=4, pos=7306] |
| 03E3 | x(81E00028): LDR R1, SP, 28H |
| 03E4 | x(41190001): SUB R1, R1, 1H |
| 03E5 | y(41110002): LSL R1, R1, 2H |
| 03E6 | y(8000003C): LDR R0, R0, 3CH |
| 03E7 | y(00080001): ADD R0, R0, R1 |
| 03E8 | z(80000000): LDR R0, R0, 0H |
| 03E9 | z(A0E00014): STR R0, SP, 14H |
| SYSTEM.GET(impmod.enta + vno*4,b offset);c |
| 03EA | a(80E00014): LDR R0, SP, 14H |
| 03EB | a(D11CC24C): BLEQ MT [trap=4, pos=7362] |
| 03EC | b(81E00068): LDR R1, SP, 68H |
| 03ED | b(41110002): LSL R1, R1, 2H |
| 03EE | b(80000044): LDR R0, R0, 44H |
| 03EF | b(00080001): ADD R0, R0, R1 |
| 03F0 | c(80000000): LDR R0, R0, 0H |
| 03F1 | c(A0E00070): STR R0, SP, 70H |
| inst := impmod.datad + offset -e Start |
| 03F2 | d(80E00014): LDR R0, SP, 14H |
| 03F3 | d(D11CF44C): BLEQ MT [trap=4, pos=7412] |
| 03F4 | e(80000034): LDR R0, R0, 34H |
| 03F5 | e(81E00070): LDR R1, SP, 70H |
| 03F6 | e(00080001): ADD R0, R0, R1 |
| ENDf ; |
| 03F7 | f .FIXUP D |
| 03F7 | f(8D00001D): LDR SB, MT, MOD0 [Boot] |
| 03F8 | f(81D00024): LDR R1, SB, 24H [data] |
| 03F9 | f(00090001): SUB R0, R0, R1 |
| 03FA | f(A0E00060): STR R0, SP, 60H |
| SYSTEM.PUT(adr, inst);g adr := adr - disp*4 |
| 03FB | g(80E0005C): LDR R0, SP, 5CH |
| 03FC | g(81E00060): LDR R1, SP, 60H |
| 03FD | g(A1000000): STR R1, R0, 0H |
| ENDh ; |
| 03FE | h(80E00058): LDR R0, SP, 58H |
| 03FF | h(40010002): LSL R0, R0, 2H |
| 0400 | h(81E0005C): LDR R1, SP, 5CH |
| 0401 | h(00190000): SUB R0, R1, R0 |
| 0402 | h(A0E0005C): STR R0, SP, 5CH |
| 0403 | h(E7FFFFBD): B -67 [03C1H] |
| SYSTEM.PUT(Start, body) (*module initialization body*) |
| ELSIFi resj = 3 THENk importing := name;l |
| 0404 | i .FIXUP D |
| 0404 | i(8D00000D): LDR SB, MT, MOD0 [Boot] |
| 0405 | i(80D00024): LDR R0, SB, 24H [data] |
| 0406 | i(81E00048): LDR R1, SP, 48H |
| 0407 | i(A1000000): STR R1, R0, 0H |
| 0408 | j(E7000026): B 38 [042FH] |
| 0409 | k .FIXUP D |
| 0409 | k(8D000005): LDR SB, MT, MOD0 [Boot] |
| 040A | k(80D0002C): LDR R0, SB, 2CH [data] |
| 040B | k(40090003): SUB R0, R0, 3H |
| 040C | k(E9000022): BNE 34 [042FH] |
| 040D | l .FIXUP D |
| 040D | l(8D000004): LDR SB, MT, MOD0 [Boot] |
| 040E | l(40D80030): ADD R0, SB, 30H [data] |
| 040F | l(81E00004): LDR R1, SP, 4H |
| 0410 | l(82E00008): LDR R2, SP, 8H |
| 0411 | l(E100000B): BEQ 11 [041DH] |
| 0412 | l(42280003): ADD R2, R2, 3H |
| 0413 | l(42220002): ASR R2, R2, 2H |
| 0414 | l(43000008): MOV R3, R0, 8H |
| 0415 | l(03290003): SUB R3, R2, R3 |
| 0416 | l(DE1DC33C): BLGT MT [trap=3, pos=7619] |
| 0417 | l(83100000): LDR R3, R1, 0H |
| 0418 | l(41180004): ADD R1, R1, 4H |
| 0419 | l(A3000000): STR R3, R0, 0H |
| 041A | l(40080004): ADD R0, R0, 4H |
| 041B | l(42290001): SUB R2, R2, 1H |
| 041C | l(E9FFFFFA): BNE -6 [0417H] |
| WHILE nofimps > 0 DOm DEC(nofimps);n DEC(import[nofimps]o.refcntp) ENDq |
| 041D | m(80E0002C): LDR R0, SP, 2CH |
| 041E | m(40090000): SUB R0, R0, 0H |
| 041F | m(E600000F): BLE 15 [042FH] |
| 0420 | n(80E0002C): LDR R0, SP, 2CH |
| 0421 | n(40090001): SUB R0, R0, 1H |
| 0422 | n(A0E0002C): STR R0, SP, 2CH |
| 0423 | o(80E0002C): LDR R0, SP, 2CH |
| 0424 | o(41090010): SUB R1, R0, 10H |
| 0425 | o(DA1E021C): BLCC MT [trap=1, pos=7682] |
| 0426 | o(40010002): LSL R0, R0, 2H |
| 0427 | o(00E80000): ADD R0, SP, R0 |
| 0428 | p(800000D0): LDR R0, R0, D0H |
| 0429 | p(D11E094C): BLEQ MT [trap=4, pos=7689] |
| 042A | q(40080030): ADD R0, R0, 30H |
| 042B | q(81000000): LDR R1, R0, 0H |
| 042C | q(41190001): SUB R1, R1, 1H |
| 042D | q(A1000000): STR R1, R0, 0H |
| 042E | q(E7FFFFEE): B -18 [041DH] |
| END |
| END ; |
| newmod := mod |
| ENDr Link1; |
| 042F | r(80E00010): LDR R0, SP, 10H |
| 0430 | r(81E0000C): LDR R1, SP, CH |
| 0431 | r(A0100000): STR R0, R1, 0H |
| 0432 | r(8FE00000): LDR LNK, SP, 0H |
| 0433 | r(4EE80110): ADD SP, SP, 110H |
| 0434 | r(C700000F): B LNK |
| |
| PROCEDURE Link*; (*link object files together and create a single boot file F.bin from them*) |
| VAR i, x: INTEGER; |
| F: Files.File; R: Files.Rider; |
| S: Texts.Scanner; |
| M, p: Module; |
| name: ModuleName; |
| BEGINs Texts.OpenScanner(S,t Oberon.Par.text,u Oberon.Par.pos)v;w Texts.Scan(S)x;y |
| 0435 | s .PROC 5 |
| 0435 | s .COMMAND Link |
| 0435 | s(4EE900C4): SUB SP, SP, C4H |
| 0436 | s(AFE00000): STR LNK, SP, 0H |
| 0437 | t(40E80028): ADD R0, SP, 28H |
| 0438 | t .FIXUP D |
| 0438 | t(8D40002B): LDR SB, MT, MOD4 [Texts] |
| 0439 | t(41D80003): ADD R1, SB, VAR3 |
| 043A | u .FIXUP D |
| 043A | u(8D600002): LDR SB, MT, MOD6 [Oberon] |
| 043B | u(42D8000E): ADD R2, SB, VAR14 |
| 043C | u(82200008): LDR R2, R2, 8H |
| 043D | v .FIXUP D |
| 043D | v(8D600003): LDR SB, MT, MOD6 [Oberon] |
| 043E | v(43D8000E): ADD R3, SB, VAR14 |
| 043F | v(8330000C): LDR R3, R3, CH |
| 0440 | w .FIXUP P |
| 0440 | w(F7415145): BL MOD4 [Texts] PROC21 |
| 0441 | x(40E80028): ADD R0, SP, 28H |
| 0442 | x .FIXUP D |
| 0442 | x(8D400005): LDR SB, MT, MOD4 [Texts] |
| 0443 | x(41D80003): ADD R1, SB, VAR3 |
| 0444 | y .FIXUP P |
| 0444 | y(F7416004): BL MOD4 [Texts] PROC22 |
| IF (S.class = Texts.Name)z OR (aS.class = Texts.String)b THENc (*name of top module*) |
| 0445 | z(80E00064): LDR R0, SP, 64H |
| 0446 | z(40090001): SUB R0, R0, 1H |
| 0447 | a(E1000003): BEQ 3 [044BH] |
| 0448 | b(80E00064): LDR R0, SP, 64H |
| 0449 | b(40090002): SUB R0, R0, 2H |
| 044A | c(E900015B): BNE 347 [05A6H] |
| root := NIL;d Start := Modules.AllocPtr;e MTOrg := Start + 32;f AllocPtr := Start + 256;g i := Start;h |
| 044B | d(40000000): MOV R0, R0, 0H |
| 044C | d .FIXUP D |
| 044C | d(8D00000A): LDR SB, MT, MOD0 [Boot] |
| 044D | d(A0D00018): STR R0, SB, 18H [data] |
| 044E | e .FIXUP D |
| 044E | e(8D300002): LDR SB, MT, MOD3 [Modules] |
| 044F | e(80D00004): LDR R0, SB, VAR4 |
| 0450 | e .FIXUP D |
| 0450 | e(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0451 | e(A0D00024): STR R0, SB, 24H [data] |
| 0452 | f(80D00024): LDR R0, SB, 24H |
| 0453 | f(40080020): ADD R0, R0, 20H |
| 0454 | f(A0D0001C): STR R0, SB, 1CH |
| 0455 | g(80D00024): LDR R0, SB, 24H |
| 0456 | g(40080100): ADD R0, R0, 100H |
| 0457 | g(A0D00020): STR R0, SB, 20H |
| 0458 | h(80D00024): LDR R0, SB, 24H |
| 0459 | h(A0E00004): STR R0, SP, 4H |
| WHILE i < AllocPtr DOi SYSTEM.PUT(i, 0);j INC(i, 4) ENDk ; |
| 045A | i(80E00004): LDR R0, SP, 4H |
| 045B | i .FIXUP D |
| 045B | i(8D00000B): LDR SB, MT, MOD0 [Boot] |
| 045C | i(81D00020): LDR R1, SB, 20H [data] |
| 045D | i(00090001): SUB R0, R0, R1 |
| 045E | i(ED000007): BGE 7 [0466H] |
| 045F | j(80E00004): LDR R0, SP, 4H |
| 0460 | j(41000000): MOV R1, R0, 0H |
| 0461 | j(A1000000): STR R1, R0, 0H |
| 0462 | k(80E00004): LDR R0, SP, 4H |
| 0463 | k(40080004): ADD R0, R0, 4H |
| 0464 | k(A0E00004): STR R0, SP, 4H |
| 0465 | k(E7FFFFF4): B -12 [045AH] |
| Link1(S.s,l M)m;n |
| 0466 | l(40E8007C): ADD R0, SP, 7CH |
| 0467 | l(41000020): MOV R1, R0, 20H |
| 0468 | m(42E8009C): ADD R2, SP, 9CH |
| 0469 | n(F7FFFC61): BL -927 [00CBH] |
| IF res = 0 THENo p := root;p Texts.WriteString(W,q " linking")r;s |
| 046A | o .FIXUP D |
| 046A | o(8D00000F): LDR SB, MT, MOD0 [Boot] |
| 046B | o(80D0002C): LDR R0, SB, 2CH [data] |
| 046C | o(E90000D8): BNE 216 [0545H] |
| 046D | p .FIXUP D |
| 046D | p(8D000003): LDR SB, MT, MOD0 [Boot] |
| 046E | p(80D00018): LDR R0, SB, 18H [data] |
| 046F | p(A0E000A0): STR R0, SP, A0H |
| 0470 | q(40D80070): ADD R0, SB, 70H |
| 0471 | q .FIXUP D |
| 0471 | q(8D400004): LDR SB, MT, MOD4 [Texts] |
| 0472 | q(41D80005): ADD R1, SB, VAR5 |
| 0473 | r .FIXUP D |
| 0473 | r(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0474 | r(42D800A0): ADD R2, SB, A0H [" linking"] |
| 0475 | r(4300000A): MOV R3, R0, AH |
| 0476 | s .FIXUP P |
| 0476 | s(F741D032): BL MOD4 [Texts] PROC29 |
| WHILE p # NIL DOt (*fixup*) Texts.Write(W,u " ")v;w Texts.WriteString(W,x p.namey)z;a |
| 0477 | t(80E000A0): LDR R0, SP, A0H |
| 0478 | t(E1000075): BEQ 117 [04EEH] |
| 0479 | u .FIXUP D |
| 0479 | u(8D000006): LDR SB, MT, MOD0 [Boot] |
| 047A | u(40D80070): ADD R0, SB, 70H [data] |
| 047B | u .FIXUP D |
| 047B | u(8D400002): LDR SB, MT, MOD4 [Texts] |
| 047C | u(41D80005): ADD R1, SB, VAR5 |
| 047D | v(42000020): MOV R2, R0, 20H |
| 047E | w .FIXUP P |
| 047E | w(F741B008): BL MOD4 [Texts] PROC27 |
| 047F | x .FIXUP D |
| 047F | x(8D000004): LDR SB, MT, MOD0 [Boot] |
| 0480 | x(40D80070): ADD R0, SB, 70H [data] |
| 0481 | x .FIXUP D |
| 0481 | x(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0482 | x(41D80005): ADD R1, SB, VAR5 |
| 0483 | y(82E000A0): LDR R2, SP, A0H |
| 0484 | y(D1211B4C): BLEQ MT [trap=4, pos=8475] |
| 0485 | z(43000020): MOV R3, R0, 20H |
| 0486 | a .FIXUP P |
| 0486 | a(F741D008): BL MOD4 [Texts] PROC29 |
| M := p;b p := p.nextc;d |
| 0487 | b(80E000A0): LDR R0, SP, A0H |
| 0488 | b(A0E0009C): STR R0, SP, 9CH |
| 0489 | c(80E000A0): LDR R0, SP, A0H |
| 048A | c(D1213B4C): BLEQ MT [trap=4, pos=8507] |
| 048B | d(80000020): LDR R0, R0, 20H |
| 048C | d(A0E000A0): STR R0, SP, A0H |
| IF M.nexte # NIL THENf M.nextg := SYSTEM.VAL(Module, SYSTEM.VAL(INTEGER, M.nexth) - Start)i ENDj ; |
| 048D | e(80E0009C): LDR R0, SP, 9CH |
| 048E | e(D121504C): BLEQ MT [trap=4, pos=8528] |
| 048F | f(80000020): LDR R0, R0, 20H |
| 0490 | f(E1000009): BEQ 9 [049AH] |
| 0491 | g(80E0009C): LDR R0, SP, 9CH |
| 0492 | g(D121624C): BLEQ MT [trap=4, pos=8546] |
| 0493 | h(81E0009C): LDR R1, SP, 9CH |
| 0494 | h(D121934C): BLEQ MT [trap=4, pos=8595] |
| 0495 | i(81100020): LDR R1, R1, 20H |
| 0496 | i .FIXUP D |
| 0496 | i(8D000015): LDR SB, MT, MOD0 [Boot] |
| 0497 | i(82D00024): LDR R2, SB, 24H [data] |
| 0498 | i(01190002): SUB R1, R1, R2 |
| 0499 | j(A1000020): STR R1, R0, 20H |
| M.datak := M.datal - Start;m |
| 049A | k(80E0009C): LDR R0, SP, 9CH |
| 049B | k(D121B44C): BLEQ MT [trap=4, pos=8628] |
| 049C | l(81E0009C): LDR R1, SP, 9CH |
| 049D | l(D121BE4C): BLEQ MT [trap=4, pos=8638] |
| 049E | m(81100034): LDR R1, R1, 34H |
| 049F | m .FIXUP D |
| 049F | m(8D000009): LDR SB, MT, MOD0 [Boot] |
| 04A0 | m(82D00024): LDR R2, SB, 24H [data] |
| 04A1 | m(01190002): SUB R1, R1, R2 |
| 04A2 | m(A1000034): STR R1, R0, 34H |
| SYSTEM.PUT(M.numn * 4 +o MTOrg,p M.dataq);r (*module table entry*) |
| 04A3 | n(80E0009C): LDR R0, SP, 9CH |
| 04A4 | n(D121E24C): BLEQ MT [trap=4, pos=8674] |
| 04A5 | o(80000028): LDR R0, R0, 28H |
| 04A6 | o(40010002): LSL R0, R0, 2H |
| 04A7 | p(81D0001C): LDR R1, SB, 1CH |
| 04A8 | p(00080001): ADD R0, R0, R1 |
| 04A9 | q(81E0009C): LDR R1, SP, 9CH |
| 04AA | q(D121F64C): BLEQ MT [trap=4, pos=8694] |
| 04AB | r(81100034): LDR R1, R1, 34H |
| 04AC | r(A1000000): STR R1, R0, 0H |
| M.codes := M.codet - Start;u |
| 04AD | s(80E0009C): LDR R0, SP, 9CH |
| 04AE | s(D122204C): BLEQ MT [trap=4, pos=8736] |
| 04AF | t(81E0009C): LDR R1, SP, 9CH |
| 04B0 | t(D1222A4C): BLEQ MT [trap=4, pos=8746] |
| 04B1 | u(81100038): LDR R1, R1, 38H |
| 04B2 | u(82D00024): LDR R2, SB, 24H |
| 04B3 | u(01190002): SUB R1, R1, R2 |
| 04B4 | u(A1000038): STR R1, R0, 38H |
| i := M.impv;w |
| 04B5 | v(80E0009C): LDR R0, SP, 9CH |
| 04B6 | v(D122484C): BLEQ MT [trap=4, pos=8776] |
| 04B7 | w(8000003C): LDR R0, R0, 3CH |
| 04B8 | w(A0E00004): STR R0, SP, 4H |
| WHILE i < M.cmdx DOy SYSTEM.GET(i, x);z SYSTEM.PUT(i, x - Start)a;b INC(i, 4) ENDc ; |
| 04B9 | x(80E0009C): LDR R0, SP, 9CH |
| 04BA | x(D122634C): BLEQ MT [trap=4, pos=8803] |
| 04BB | y(81E00004): LDR R1, SP, 4H |
| 04BC | y(80000040): LDR R0, R0, 40H |
| 04BD | y(01190000): SUB R1, R1, R0 |
| 04BE | y(ED00000D): BGE 13 [04CCH] |
| 04BF | z(80E00004): LDR R0, SP, 4H |
| 04C0 | z(80000000): LDR R0, R0, 0H |
| 04C1 | z(A0E00008): STR R0, SP, 8H |
| 04C2 | a(80E00008): LDR R0, SP, 8H |
| 04C3 | a .FIXUP D |
| 04C3 | a(8D000024): LDR SB, MT, MOD0 [Boot] |
| 04C4 | a(81D00024): LDR R1, SB, 24H [data] |
| 04C5 | a(00090001): SUB R0, R0, R1 |
| 04C6 | b(81E00004): LDR R1, SP, 4H |
| 04C7 | b(A0100000): STR R0, R1, 0H |
| 04C8 | c(80E00004): LDR R0, SP, 4H |
| 04C9 | c(40080004): ADD R0, R0, 4H |
| 04CA | c(A0E00004): STR R0, SP, 4H |
| 04CB | c(E7FFFFED): B -19 [04B9H] |
| M.impd := M.impe - Start;f |
| 04CC | d(80E0009C): LDR R0, SP, 9CH |
| 04CD | d(D122B24C): BLEQ MT [trap=4, pos=8882] |
| 04CE | e(81E0009C): LDR R1, SP, 9CH |
| 04CF | e(D122BB4C): BLEQ MT [trap=4, pos=8891] |
| 04D0 | f(8110003C): LDR R1, R1, 3CH |
| 04D1 | f .FIXUP D |
| 04D1 | f(8D00000E): LDR SB, MT, MOD0 [Boot] |
| 04D2 | f(82D00024): LDR R2, SB, 24H [data] |
| 04D3 | f(01190002): SUB R1, R1, R2 |
| 04D4 | f(A100003C): STR R1, R0, 3CH |
| M.cmdg := M.cmdh - Start;i |
| 04D5 | g(80E0009C): LDR R0, SP, 9CH |
| 04D6 | g(D122D44C): BLEQ MT [trap=4, pos=8916] |
| 04D7 | h(81E0009C): LDR R1, SP, 9CH |
| 04D8 | h(D122DD4C): BLEQ MT [trap=4, pos=8925] |
| 04D9 | i(81100040): LDR R1, R1, 40H |
| 04DA | i(82D00024): LDR R2, SB, 24H |
| 04DB | i(01190002): SUB R1, R1, R2 |
| 04DC | i(A1000040): STR R1, R0, 40H |
| M.entj := M.entk - Start;l |
| 04DD | j(80E0009C): LDR R0, SP, 9CH |
| 04DE | j(D122F64C): BLEQ MT [trap=4, pos=8950] |
| 04DF | k(81E0009C): LDR R1, SP, 9CH |
| 04E0 | k(D122FF4C): BLEQ MT [trap=4, pos=8959] |
| 04E1 | l(81100044): LDR R1, R1, 44H |
| 04E2 | l(82D00024): LDR R2, SB, 24H |
| 04E3 | l(01190002): SUB R1, R1, R2 |
| 04E4 | l(A1000044): STR R1, R0, 44H |
| M.ptrm := M.ptrn - Start |
| 04E5 | m(80E0009C): LDR R0, SP, 9CH |
| 04E6 | m(D123184C): BLEQ MT [trap=4, pos=8984] |
| 04E7 | n(81E0009C): LDR R1, SP, 9CH |
| 04E8 | n(D123214C): BLEQ MT [trap=4, pos=8993] |
| ENDo ; |
| 04E9 | o(81100048): LDR R1, R1, 48H |
| 04EA | o(82D00024): LDR R2, SB, 24H |
| 04EB | o(01190002): SUB R1, R1, R2 |
| 04EC | o(A1000048): STR R1, R0, 48H |
| 04ED | o(E7FFFF89): B -119 [0477H] |
| SYSTEM.GET(Start, x);p |
| 04EE | p .FIXUP D |
| 04EE | p(8D00001D): LDR SB, MT, MOD0 [Boot] |
| 04EF | p(80D00024): LDR R0, SB, 24H [data] |
| 04F0 | p(80000000): LDR R0, R0, 0H |
| 04F1 | p(A0E00008): STR R0, SP, 8H |
| SYSTEM.PUT(Start, 0E7H * 1000000H + (x DIV 4)q -r 1)s;t (*branch instruction to the initialization body of the top module*) |
| 04F2 | q(80E00008): LDR R0, SP, 8H |
| 04F3 | q(40020002): ASR R0, R0, 2H |
| 04F4 | r(6100E700): MOV' R1, R0, FFFFE700H |
| 04F5 | r(00180000): ADD R0, R1, R0 |
| 04F6 | s(40090001): SUB R0, R0, 1H |
| 04F7 | t(81D00024): LDR R1, SB, 24H |
| 04F8 | t(A0100000): STR R0, R1, 0H |
| SYSTEM.PUT(Start + 12,u MemLim);v (*limit of available memory / MemLim*) |
| 04F9 | u(80D00024): LDR R0, SB, 24H |
| 04FA | u(4008000C): ADD R0, R0, CH |
| 04FB | v(6100000E): MOV' R1, R0, EH |
| 04FC | v(41167EF0): IOR R1, R1, 7EF0H |
| 04FD | v(A1000000): STR R1, R0, 0H |
| SYSTEM.PUT(Start + 16,w AllocPtr - Start)x;y (*address of the end of the module space loaded / AllocPtr*) |
| 04FE | w(80D00024): LDR R0, SB, 24H |
| 04FF | w(40080010): ADD R0, R0, 10H |
| 0500 | x(81D00020): LDR R1, SB, 20H |
| 0501 | x(82D00024): LDR R2, SB, 24H |
| 0502 | x(01190002): SUB R1, R1, R2 |
| 0503 | y(A1000000): STR R1, R0, 0H |
| SYSTEM.PUT(Start + 20,z SYSTEM.VAL(INTEGER, root) - Start)a;b (*current root of the links of loaded modules / root*) |
| 0504 | z(80D00024): LDR R0, SB, 24H |
| 0505 | z(40080014): ADD R0, R0, 14H |
| 0506 | a(81D00018): LDR R1, SB, 18H |
| 0507 | a(82D00024): LDR R2, SB, 24H |
| 0508 | a(01190002): SUB R1, R1, R2 |
| 0509 | b(A1000000): STR R1, R0, 0H |
| SYSTEM.PUT(Start + 24,c stackOrg);d (*current limit of the module area / stackOrg = heapOrg*) |
| 050A | c(80D00024): LDR R0, SB, 24H |
| 050B | c(40080018): ADD R0, R0, 18H |
| 050C | d(61000008): MOV' R1, R0, 8H |
| 050D | d(A1000000): STR R1, R0, 0H |
| SYSTEM.PUT(Start + 252,e 12345678H);f (*fingerprint*) |
| 050E | e(80D00024): LDR R0, SB, 24H |
| 050F | e(400800FC): ADD R0, R0, FCH |
| 0510 | f(61001234): MOV' R1, R0, 1234H |
| 0511 | f(41165678): IOR R1, R1, 5678H |
| 0512 | f(A1000000): STR R1, R0, 0H |
| MakeFileName(name,g S.s,h ".bin")i;j F := Files.New(name)k;l Files.Set(R,m F,n 0)o;p i := Start;q |
| 0513 | g(40E800A4): ADD R0, SP, A4H |
| 0514 | g(41000020): MOV R1, R0, 20H |
| 0515 | h(42E8007C): ADD R2, SP, 7CH |
| 0516 | h(43000020): MOV R3, R0, 20H |
| 0517 | i(44D800AC): ADD R4, SB, ACH |
| 0518 | i(45000005): MOV R5, R0, 5H |
| 0519 | j(F7FFFAE6): BL -1306 [0000H] |
| 051A | k(40E800A4): ADD R0, SP, A4H |
| 051B | k(41000020): MOV R1, R0, 20H |
| 051C | l .FIXUP P |
| 051C | l(F7203096): BL MOD2 [Files] PROC3 |
| 051D | l(A0E0000C): STR R0, SP, CH |
| 051E | m(40E80010): ADD R0, SP, 10H |
| 051F | m .FIXUP D |
| 051F | m(8D200031): LDR SB, MT, MOD2 [Files] |
| 0520 | m(41D80001): ADD R1, SB, VAR1 |
| 0521 | n(82E0000C): LDR R2, SP, CH |
| 0522 | o(43000000): MOV R3, R0, 0H |
| 0523 | p .FIXUP P |
| 0523 | p(F720B007): BL MOD2 [Files] PROC11 |
| 0524 | q .FIXUP D |
| 0524 | q(8D000005): LDR SB, MT, MOD0 [Boot] |
| 0525 | q(80D00024): LDR R0, SB, 24H [data] |
| 0526 | q(A0E00004): STR R0, SP, 4H |
| WHILE i < AllocPtr DOr SYSTEM.GET(i, x);s Files.WriteInt(R,t x)u;v INC(i, 4) ENDw ; |
| 0527 | r(80E00004): LDR R0, SP, 4H |
| 0528 | r .FIXUP D |
| 0528 | r(8D000004): LDR SB, MT, MOD0 [Boot] |
| 0529 | r(81D00020): LDR R1, SB, 20H [data] |
| 052A | r(00090001): SUB R0, R0, R1 |
| 052B | r(ED00000C): BGE 12 [0538H] |
| 052C | s(80E00004): LDR R0, SP, 4H |
| 052D | s(80000000): LDR R0, R0, 0H |
| 052E | s(A0E00008): STR R0, SP, 8H |
| 052F | t(40E80010): ADD R0, SP, 10H |
| 0530 | t .FIXUP D |
| 0530 | t(8D200008): LDR SB, MT, MOD2 [Files] |
| 0531 | t(41D80001): ADD R1, SB, VAR1 |
| 0532 | u(82E00008): LDR R2, SP, 8H |
| 0533 | v .FIXUP P |
| 0533 | v(F7219010): BL MOD2 [Files] PROC25 |
| 0534 | w(80E00004): LDR R0, SP, 4H |
| 0535 | w(40080004): ADD R0, R0, 4H |
| 0536 | w(A0E00004): STR R0, SP, 4H |
| 0537 | w(E7FFFFEF): B -17 [0527H] |
| Texts.WriteInt(W,x AllocPtr - Start,y 7)z;a Files.Register(F)b |
| 0538 | x .FIXUP D |
| 0538 | x(8D000008): LDR SB, MT, MOD0 [Boot] |
| 0539 | x(40D80070): ADD R0, SB, 70H [data] |
| 053A | x .FIXUP D |
| 053A | x(8D400002): LDR SB, MT, MOD4 [Texts] |
| 053B | x(41D80005): ADD R1, SB, VAR5 |
| 053C | y .FIXUP D |
| 053C | y(8D000002): LDR SB, MT, MOD0 [Boot] |
| 053D | y(82D00020): LDR R2, SB, 20H [data] |
| 053E | y(83D00024): LDR R3, SB, 24H |
| 053F | y(02290003): SUB R2, R2, R3 |
| 0540 | z(43000007): MOV R3, R0, 7H |
| 0541 | a .FIXUP P |
| 0541 | a(F741E00E): BL MOD4 [Texts] PROC30 |
| 0542 | b(80E0000C): LDR R0, SP, CH |
| ELSEc Textsd.WriteString(W,e "Link error: ")f;g Texts.WriteString(W,h importing)i;j |
| 0543 | c .FIXUP P |
| 0543 | c(F7204002): BL MOD2 [Files] PROC4 |
| 0544 | d(E7000060): B 96 [05A5H] |
| 0545 | e .FIXUP D |
| 0545 | e(8D000009): LDR SB, MT, MOD0 [Boot] |
| 0546 | e(40D80070): ADD R0, SB, 70H [data] |
| 0547 | e .FIXUP D |
| 0547 | e(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0548 | e(41D80005): ADD R1, SB, VAR5 |
| 0549 | f .FIXUP D |
| 0549 | f(8D000002): LDR SB, MT, MOD0 [Boot] |
| 054A | f(42D800B4): ADD R2, SB, B4H ["Link error: "] |
| 054B | f(4300000E): MOV R3, R0, EH |
| 054C | g .FIXUP P |
| 054C | g(F741D009): BL MOD4 [Texts] PROC29 |
| 054D | h .FIXUP D |
| 054D | h(8D000004): LDR SB, MT, MOD0 [Boot] |
| 054E | h(40D80070): ADD R0, SB, 70H [data] |
| 054F | h .FIXUP D |
| 054F | h(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0550 | h(41D80005): ADD R1, SB, VAR5 |
| 0551 | i .FIXUP D |
| 0551 | i(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0552 | i(42D80030): ADD R2, SB, 30H [data] |
| 0553 | i(43000020): MOV R3, R0, 20H |
| 0554 | j .FIXUP P |
| 0554 | j(F741D008): BL MOD4 [Texts] PROC29 |
| IF res = 1 THENk Texts.WriteString(W,l " module not found")m |
| 0555 | k .FIXUP D |
| 0555 | k(8D000004): LDR SB, MT, MOD0 [Boot] |
| 0556 | k(80D0002C): LDR R0, SB, 2CH [data] |
| 0557 | k(40090001): SUB R0, R0, 1H |
| 0558 | k(E9000009): BNE 9 [0562H] |
| 0559 | l .FIXUP D |
| 0559 | l(8D000004): LDR SB, MT, MOD0 [Boot] |
| 055A | l(40D80070): ADD R0, SB, 70H [data] |
| 055B | l .FIXUP D |
| 055B | l(8D400002): LDR SB, MT, MOD4 [Texts] |
| 055C | l(41D80005): ADD R1, SB, VAR5 |
| 055D | m .FIXUP D |
| 055D | m(8D000002): LDR SB, MT, MOD0 [Boot] |
| 055E | m(42D800C4): ADD R2, SB, C4H [" module not found"] |
| 055F | m(43000012): MOV R3, R0, 12H |
| ELSIFn reso = 2 THENp Texts.WriteString(W,q " bad version")r |
| 0560 | n .FIXUP P |
| 0560 | n(F741D00C): BL MOD4 [Texts] PROC29 |
| 0561 | o(E7000043): B 67 [05A5H] |
| 0562 | p .FIXUP D |
| 0562 | p(8D000005): LDR SB, MT, MOD0 [Boot] |
| 0563 | p(80D0002C): LDR R0, SB, 2CH [data] |
| 0564 | p(40090002): SUB R0, R0, 2H |
| 0565 | p(E9000009): BNE 9 [056FH] |
| 0566 | q .FIXUP D |
| 0566 | q(8D000004): LDR SB, MT, MOD0 [Boot] |
| 0567 | q(40D80070): ADD R0, SB, 70H [data] |
| 0568 | q .FIXUP D |
| 0568 | q(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0569 | q(41D80005): ADD R1, SB, VAR5 |
| 056A | r .FIXUP D |
| 056A | r(8D000002): LDR SB, MT, MOD0 [Boot] |
| 056B | r(42D800D8): ADD R2, SB, D8H [" bad version"] |
| 056C | r(4300000D): MOV R3, R0, DH |
| ELSIFs rest = 3 THENu Texts.WriteString(W,v " imports ")w;x |
| 056D | s .FIXUP P |
| 056D | s(F741D00D): BL MOD4 [Texts] PROC29 |
| 056E | t(E7000036): B 54 [05A5H] |
| 056F | u .FIXUP D |
| 056F | u(8D000005): LDR SB, MT, MOD0 [Boot] |
| 0570 | u(80D0002C): LDR R0, SB, 2CH [data] |
| 0571 | u(40090003): SUB R0, R0, 3H |
| 0572 | u(E9000019): BNE 25 [058CH] |
| 0573 | v .FIXUP D |
| 0573 | v(8D000004): LDR SB, MT, MOD0 [Boot] |
| 0574 | v(40D80070): ADD R0, SB, 70H [data] |
| 0575 | v .FIXUP D |
| 0575 | v(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0576 | v(41D80005): ADD R1, SB, VAR5 |
| 0577 | w .FIXUP D |
| 0577 | w(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0578 | w(42D800E8): ADD R2, SB, E8H [" imports "] |
| 0579 | w(4300000A): MOV R3, R0, AH |
| 057A | x .FIXUP P |
| 057A | x(F741D00D): BL MOD4 [Texts] PROC29 |
| Texts.WriteString(W,y imported)z;a Texts.WriteString(W,b " with bad key")c |
| 057B | y .FIXUP D |
| 057B | y(8D000004): LDR SB, MT, MOD0 [Boot] |
| 057C | y(40D80070): ADD R0, SB, 70H [data] |
| 057D | y .FIXUP D |
| 057D | y(8D400002): LDR SB, MT, MOD4 [Texts] |
| 057E | y(41D80005): ADD R1, SB, VAR5 |
| 057F | z .FIXUP D |
| 057F | z(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0580 | z(42D80050): ADD R2, SB, 50H [data] |
| 0581 | z(43000020): MOV R3, R0, 20H |
| 0582 | a .FIXUP P |
| 0582 | a(F741D008): BL MOD4 [Texts] PROC29 |
| 0583 | b .FIXUP D |
| 0583 | b(8D000004): LDR SB, MT, MOD0 [Boot] |
| 0584 | b(40D80070): ADD R0, SB, 70H [data] |
| 0585 | b .FIXUP D |
| 0585 | b(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0586 | b(41D80005): ADD R1, SB, VAR5 |
| 0587 | c .FIXUP D |
| 0587 | c(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0588 | c(42D800F4): ADD R2, SB, F4H [" with bad key"] |
| 0589 | c(4300000E): MOV R3, R0, EH |
| ELSIFd rese = 4 THENf Texts.WriteString(W,g " corrupted obj file")h |
| 058A | d .FIXUP P |
| 058A | d(F741D008): BL MOD4 [Texts] PROC29 |
| 058B | e(E7000019): B 25 [05A5H] |
| 058C | f .FIXUP D |
| 058C | f(8D000005): LDR SB, MT, MOD0 [Boot] |
| 058D | f(80D0002C): LDR R0, SB, 2CH [data] |
| 058E | f(40090004): SUB R0, R0, 4H |
| 058F | f(E9000009): BNE 9 [0599H] |
| 0590 | g .FIXUP D |
| 0590 | g(8D000004): LDR SB, MT, MOD0 [Boot] |
| 0591 | g(40D80070): ADD R0, SB, 70H [data] |
| 0592 | g .FIXUP D |
| 0592 | g(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0593 | g(41D80005): ADD R1, SB, VAR5 |
| 0594 | h .FIXUP D |
| 0594 | h(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0595 | h(42D80104): ADD R2, SB, 104H [" corrupted obj file"] |
| 0596 | h(43000014): MOV R3, R0, 14H |
| ELSIFi resj = 7 THENk Texts.WriteString(W,l " insufficient space")m |
| 0597 | i .FIXUP P |
| 0597 | i(F741D00D): BL MOD4 [Texts] PROC29 |
| 0598 | j(E700000C): B 12 [05A5H] |
| 0599 | k .FIXUP D |
| 0599 | k(8D000005): LDR SB, MT, MOD0 [Boot] |
| 059A | k(80D0002C): LDR R0, SB, 2CH [data] |
| 059B | k(40090007): SUB R0, R0, 7H |
| 059C | k(E9000008): BNE 8 [05A5H] |
| 059D | l .FIXUP D |
| 059D | l(8D000004): LDR SB, MT, MOD0 [Boot] |
| 059E | l(40D80070): ADD R0, SB, 70H [data] |
| 059F | l .FIXUP D |
| 059F | l(8D400002): LDR SB, MT, MOD4 [Texts] |
| 05A0 | l(41D80005): ADD R1, SB, VAR5 |
| 05A1 | m .FIXUP D |
| 05A1 | m(8D000002): LDR SB, MT, MOD0 [Boot] |
| 05A2 | m(42D80118): ADD R2, SB, 118H [" insufficient space"] |
| 05A3 | m(43000014): MOV R3, R0, 14H |
| ENDn |
| 05A4 | n .FIXUP P |
| 05A4 | n(F741D00D): BL MOD4 [Texts] PROC29 |
| END |
| ELSE Textso.WriteString(W,p "Usage: Boot.Link module")q |
| 05A5 | o(E7000008): B 8 [05AEH] |
| 05A6 | p .FIXUP D |
| 05A6 | p(8D000005): LDR SB, MT, MOD0 [Boot] |
| 05A7 | p(40D80070): ADD R0, SB, 70H [data] |
| 05A8 | p .FIXUP D |
| 05A8 | p(8D400002): LDR SB, MT, MOD4 [Texts] |
| 05A9 | p(41D80005): ADD R1, SB, VAR5 |
| 05AA | q .FIXUP D |
| 05AA | q(8D000002): LDR SB, MT, MOD0 [Boot] |
| 05AB | q(42D8012C): ADD R2, SB, 12CH ["Usage: Boot.Link module"] |
| 05AC | q(43000018): MOV R3, R0, 18H |
| ENDr ; |
| 05AD | r .FIXUP P |
| 05AD | r(F741D009): BL MOD4 [Texts] PROC29 |
| Texts.WriteLn(W)s;t Texts.Append(Oberon.Log,u W.buf)v |
| 05AE | s .FIXUP D |
| 05AE | s(8D000004): LDR SB, MT, MOD0 [Boot] |
| 05AF | s(40D80070): ADD R0, SB, 70H [data] |
| 05B0 | s .FIXUP D |
| 05B0 | s(8D400002): LDR SB, MT, MOD4 [Texts] |
| 05B1 | s(41D80005): ADD R1, SB, VAR5 |
| 05B2 | t .FIXUP P |
| 05B2 | t(F741C005): BL MOD4 [Texts] PROC28 |
| 05B3 | u .FIXUP D |
| 05B3 | u(8D600003): LDR SB, MT, MOD6 [Oberon] |
| 05B4 | u(80D0000D): LDR R0, SB, VAR13 |
| 05B5 | v .FIXUP D |
| 05B5 | v(8D000002): LDR SB, MT, MOD0 [Boot] |
| 05B6 | v(81D00070): LDR R1, SB, 70H [data] |
| ENDw Link; |
| 05B7 | w .FIXUP P |
| 05B7 | w(F740E005): BL MOD4 [Texts] PROC14 |
| 05B8 | w(8FE00000): LDR LNK, SP, 0H |
| 05B9 | w(4EE800C4): ADD SP, SP, C4H |
| 05BA | w(C700000F): B LNK |
| |
| PROCEDURE Load*; (*load prelinked boot file F.bin onto the boot area of the local disk, starting at sector 2*) |
| VAR i, secno: LONGINT; b: BYTE; |
| F: Files.File; R: Files.Rider; |
| S: Texts.Scanner; |
| buf: ARRAY Kernel.SectorLength OF BYTE; |
| BEGINx Texts.OpenScanner(S,y Oberon.Par.text,z Oberon.Par.pos)a;b Texts.Scan(S)c;d |
| 05BB | x .PROC 6 |
| 05BB | x .COMMAND Load |
| 05BB | x(4EE904A0): SUB SP, SP, 4A0H |
| 05BC | x(AFE00000): STR LNK, SP, 0H |
| 05BD | y(40E8002C): ADD R0, SP, 2CH |
| 05BE | y .FIXUP D |
| 05BE | y(8D400009): LDR SB, MT, MOD4 [Texts] |
| 05BF | y(41D80003): ADD R1, SB, VAR3 |
| 05C0 | z .FIXUP D |
| 05C0 | z(8D600002): LDR SB, MT, MOD6 [Oberon] |
| 05C1 | z(42D8000E): ADD R2, SB, VAR14 |
| 05C2 | z(82200008): LDR R2, R2, 8H |
| 05C3 | a .FIXUP D |
| 05C3 | a(8D600003): LDR SB, MT, MOD6 [Oberon] |
| 05C4 | a(43D8000E): ADD R3, SB, VAR14 |
| 05C5 | a(8330000C): LDR R3, R3, CH |
| 05C6 | b .FIXUP P |
| 05C6 | b(F741500F): BL MOD4 [Texts] PROC21 |
| 05C7 | c(40E8002C): ADD R0, SP, 2CH |
| 05C8 | c .FIXUP D |
| 05C8 | c(8D400005): LDR SB, MT, MOD4 [Texts] |
| 05C9 | c(41D80003): ADD R1, SB, VAR3 |
| 05CA | d .FIXUP P |
| 05CA | d(F7416004): BL MOD4 [Texts] PROC22 |
| IF (S.class = Texts.Name)e OR (fS.class = Texts.String)g THENh (*input file name*) |
| 05CB | e(80E00068): LDR R0, SP, 68H |
| 05CC | e(40090001): SUB R0, R0, 1H |
| 05CD | f(E1000003): BEQ 3 [05D1H] |
| 05CE | g(80E00068): LDR R0, SP, 68H |
| 05CF | g(40090002): SUB R0, R0, 2H |
| 05D0 | h(E9000076): BNE 118 [0647H] |
| Texts.WriteString(W,i " loading ")j;k Texts.WriteString(W,l S.s)m;n F := Files.Old(S.s)o;p |
| 05D1 | i .FIXUP D |
| 05D1 | i(8D000009): LDR SB, MT, MOD0 [Boot] |
| 05D2 | i(40D80070): ADD R0, SB, 70H [data] |
| 05D3 | i .FIXUP D |
| 05D3 | i(8D400002): LDR SB, MT, MOD4 [Texts] |
| 05D4 | i(41D80005): ADD R1, SB, VAR5 |
| 05D5 | j .FIXUP D |
| 05D5 | j(8D000002): LDR SB, MT, MOD0 [Boot] |
| 05D6 | j(42D80144): ADD R2, SB, 144H [" loading "] |
| 05D7 | j(4300000B): MOV R3, R0, BH |
| 05D8 | k .FIXUP P |
| 05D8 | k(F741D00E): BL MOD4 [Texts] PROC29 |
| 05D9 | l .FIXUP D |
| 05D9 | l(8D000004): LDR SB, MT, MOD0 [Boot] |
| 05DA | l(40D80070): ADD R0, SB, 70H [data] |
| 05DB | l .FIXUP D |
| 05DB | l(8D400002): LDR SB, MT, MOD4 [Texts] |
| 05DC | l(41D80005): ADD R1, SB, VAR5 |
| 05DD | m(42E80080): ADD R2, SP, 80H |
| 05DE | m(43000020): MOV R3, R0, 20H |
| 05DF | n .FIXUP P |
| 05DF | n(F741D007): BL MOD4 [Texts] PROC29 |
| 05E0 | o(40E80080): ADD R0, SP, 80H |
| 05E1 | o(41000020): MOV R1, R0, 20H |
| 05E2 | p .FIXUP P |
| 05E2 | p(F7202003): BL MOD2 [Files] PROC2 |
| 05E3 | p(A0E00010): STR R0, SP, 10H |
| IF F # NIL THENq Texts.WriteString(W,r " onto boot area")s;t Texts.WriteInt(W,u Files.Length(Fv)w,x 7)y;z |
| 05E4 | q(80E00010): LDR R0, SP, 10H |
| 05E5 | q(E1000058): BEQ 88 [063EH] |
| 05E6 | r .FIXUP D |
| 05E6 | r(8D00000B): LDR SB, MT, MOD0 [Boot] |
| 05E7 | r(40D80070): ADD R0, SB, 70H [data] |
| 05E8 | r .FIXUP D |
| 05E8 | r(8D400002): LDR SB, MT, MOD4 [Texts] |
| 05E9 | r(41D80005): ADD R1, SB, VAR5 |
| 05EA | s .FIXUP D |
| 05EA | s(8D000002): LDR SB, MT, MOD0 [Boot] |
| 05EB | s(42D80150): ADD R2, SB, 150H [" onto boot area"] |
| 05EC | s(43000010): MOV R3, R0, 10H |
| 05ED | t .FIXUP P |
| 05ED | t(F741D00B): BL MOD4 [Texts] PROC29 |
| 05EE | u .FIXUP D |
| 05EE | u(8D000004): LDR SB, MT, MOD0 [Boot] |
| 05EF | u(40D80070): ADD R0, SB, 70H [data] |
| 05F0 | u .FIXUP D |
| 05F0 | u(8D400002): LDR SB, MT, MOD4 [Texts] |
| 05F1 | u(41D80005): ADD R1, SB, VAR5 |
| 05F2 | v(4EE90008): SUB SP, SP, 8H |
| 05F3 | v(A0E00004): STR R0, SP, 4H |
| 05F4 | v(A1E00000): STR R1, SP, 0H |
| 05F5 | w(80E00018): LDR R0, SP, 18H |
| 05F6 | x .FIXUP P |
| 05F6 | x(F7209009): BL MOD2 [Files] PROC9 |
| 05F7 | x(02000000): MOV R2, R0, R0 |
| 05F8 | x(81E00000): LDR R1, SP, 0H |
| 05F9 | x(80E00004): LDR R0, SP, 4H |
| 05FA | x(4EE80008): ADD SP, SP, 8H |
| 05FB | y(43000007): MOV R3, R0, 7H |
| 05FC | z .FIXUP P |
| 05FC | z(F741E006): BL MOD4 [Texts] PROC30 |
| secno := 2;a i := 0;b Files.Set(R,c F,d 0)e;f Files.ReadByte(R,g b)h;i |
| 05FD | a(40000002): MOV R0, R0, 2H |
| 05FE | a(A0E00008): STR R0, SP, 8H |
| 05FF | b(40000000): MOV R0, R0, 0H |
| 0600 | b(A0E00004): STR R0, SP, 4H |
| 0601 | c(40E80014): ADD R0, SP, 14H |
| 0602 | c .FIXUP D |
| 0602 | c(8D200012): LDR SB, MT, MOD2 [Files] |
| 0603 | c(41D80001): ADD R1, SB, VAR1 |
| 0604 | d(82E00010): LDR R2, SP, 10H |
| 0605 | e(43000000): MOV R3, R0, 0H |
| 0606 | f .FIXUP P |
| 0606 | f(F720B00A): BL MOD2 [Files] PROC11 |
| 0607 | g(40E80014): ADD R0, SP, 14H |
| 0608 | g .FIXUP D |
| 0608 | g(8D200006): LDR SB, MT, MOD2 [Files] |
| 0609 | g(41D80001): ADD R1, SB, VAR1 |
| 060A | h(42E8000C): ADD R2, SP, CH |
| 060B | i .FIXUP P |
| 060B | i(F720E005): BL MOD2 [Files] PROC14 |
| WHILE ~R.eof DOj buf[i]k := b;l INC(i);m |
| 060C | j(90E00014): LDR R0, SP, 14H |
| 060D | j(E900001B): BNE 27 [0629H] |
| 060E | k(80E00004): LDR R0, SP, 4H |
| 060F | k(41090400): SUB R1, R0, 400H |
| 0610 | k(DA2BF81C): BLCC MT [trap=1, pos=11256] |
| 0611 | k(00E80000): ADD R0, SP, R0 |
| 0612 | l(91E0000C): LDR R1, SP, CH |
| 0613 | l(B10000A0): STR R1, R0, A0H |
| 0614 | m(80E00004): LDR R0, SP, 4H |
| 0615 | m(40080001): ADD R0, R0, 1H |
| 0616 | m(A0E00004): STR R0, SP, 4H |
| IF i = Kernel.SectorLength THENn Kernel.PutSector(secno*29,o buf)p;q INC(secno);r i := 0 ENDs ; |
| 0617 | n(80E00004): LDR R0, SP, 4H |
| 0618 | n(40090400): SUB R0, R0, 400H |
| 0619 | n(E9000009): BNE 9 [0623H] |
| 061A | o(80E00008): LDR R0, SP, 8H |
| 061B | o(400A001D): MUL R0, R0, 1DH |
| 061C | p(41E800A0): ADD R1, SP, A0H |
| 061D | q .FIXUP P |
| 061D | q(F7110012): BL MOD1 [Kernel] PROC16 |
| 061E | r(80E00008): LDR R0, SP, 8H |
| 061F | r(40080001): ADD R0, R0, 1H |
| 0620 | r(A0E00008): STR R0, SP, 8H |
| 0621 | s(40000000): MOV R0, R0, 0H |
| 0622 | s(A0E00004): STR R0, SP, 4H |
| Files.ReadByte(R,t b)u |
| 0623 | t(40E80014): ADD R0, SP, 14H |
| 0624 | t .FIXUP D |
| 0624 | t(8D20001C): LDR SB, MT, MOD2 [Files] |
| 0625 | t(41D80001): ADD R1, SB, VAR1 |
| 0626 | u(42E8000C): ADD R2, SP, CH |
| ENDv ; |
| 0627 | v .FIXUP P |
| 0627 | v(F720E00A): BL MOD2 [Files] PROC14 |
| 0628 | v(E7FFFFE3): B -29 [060CH] |
| IF i > 0 THENw |
| 0629 | w(80E00004): LDR R0, SP, 4H |
| 062A | w(40090000): SUB R0, R0, 0H |
| 062B | w(E6000011): BLE 17 [063DH] |
| WHILE i < Kernel.SectorLength DOx buf[i]y := 0;z INC(i) ENDa ; |
| 062C | x(80E00004): LDR R0, SP, 4H |
| 062D | x(40090400): SUB R0, R0, 400H |
| 062E | x(ED00000A): BGE 10 [0639H] |
| 062F | y(80E00004): LDR R0, SP, 4H |
| 0630 | y(41090400): SUB R1, R0, 400H |
| 0631 | y(DA2CDF1C): BLCC MT [trap=1, pos=11487] |
| 0632 | y(00E80000): ADD R0, SP, R0 |
| 0633 | z(41000000): MOV R1, R0, 0H |
| 0634 | z(B10000A0): STR R1, R0, A0H |
| 0635 | a(80E00004): LDR R0, SP, 4H |
| 0636 | a(40080001): ADD R0, R0, 1H |
| 0637 | a(A0E00004): STR R0, SP, 4H |
| 0638 | a(E7FFFFF3): B -13 [062CH] |
| Kernel.PutSector(secno*29,b buf)c |
| 0639 | b(80E00008): LDR R0, SP, 8H |
| 063A | b(400A001D): MUL R0, R0, 1DH |
| 063B | c(41E800A0): ADD R1, SP, A0H |
| ENDd |
| 063C | d .FIXUP P |
| 063C | d(F7110015): BL MOD1 [Kernel] PROC16 |
| ELSE Textse.WriteString(W,f " not found")g |
| 063D | e(E7000008): B 8 [0646H] |
| 063E | f .FIXUP D |
| 063E | f(8D00001A): LDR SB, MT, MOD0 [Boot] |
| 063F | f(40D80070): ADD R0, SB, 70H [data] |
| 0640 | f .FIXUP D |
| 0640 | f(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0641 | f(41D80005): ADD R1, SB, VAR5 |
| 0642 | g .FIXUP D |
| 0642 | g(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0643 | g(42D80160): ADD R2, SB, 160H [" not found"] |
| 0644 | g(4300000B): MOV R3, R0, BH |
| ENDh |
| 0645 | h .FIXUP P |
| 0645 | h(F741D009): BL MOD4 [Texts] PROC29 |
| ELSE Textsi.WriteString(W,j "Usage: Boot.Load M.bin")k |
| 0646 | i(E7000008): B 8 [064FH] |
| 0647 | j .FIXUP D |
| 0647 | j(8D000005): LDR SB, MT, MOD0 [Boot] |
| 0648 | j(40D80070): ADD R0, SB, 70H [data] |
| 0649 | j .FIXUP D |
| 0649 | j(8D400002): LDR SB, MT, MOD4 [Texts] |
| 064A | j(41D80005): ADD R1, SB, VAR5 |
| 064B | k .FIXUP D |
| 064B | k(8D000002): LDR SB, MT, MOD0 [Boot] |
| 064C | k(42D8016C): ADD R2, SB, 16CH ["Usage: Boot.Load M.bin"] |
| 064D | k(43000017): MOV R3, R0, 17H |
| ENDl ; |
| 064E | l .FIXUP P |
| 064E | l(F741D009): BL MOD4 [Texts] PROC29 |
| Texts.WriteLn(W)m;n Texts.Append(Oberon.Log,o W.buf)p |
| 064F | m .FIXUP D |
| 064F | m(8D000004): LDR SB, MT, MOD0 [Boot] |
| 0650 | m(40D80070): ADD R0, SB, 70H [data] |
| 0651 | m .FIXUP D |
| 0651 | m(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0652 | m(41D80005): ADD R1, SB, VAR5 |
| 0653 | n .FIXUP P |
| 0653 | n(F741C005): BL MOD4 [Texts] PROC28 |
| 0654 | o .FIXUP D |
| 0654 | o(8D600003): LDR SB, MT, MOD6 [Oberon] |
| 0655 | o(80D0000D): LDR R0, SB, VAR13 |
| 0656 | p .FIXUP D |
| 0656 | p(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0657 | p(81D00070): LDR R1, SB, 70H [data] |
| ENDq Load; |
| 0658 | q .FIXUP P |
| 0658 | q(F740E005): BL MOD4 [Texts] PROC14 |
| 0659 | q(8FE00000): LDR LNK, SP, 0H |
| 065A | q(4EE804A0): ADD SP, SP, 4A0H |
| 065B | q(C700000F): B LNK |
| |
| PROCEDURE ReadCode(VAR R: Files.Rider; VAR code: ARRAY OF LONGINT; VAR size, start, nofimps, res: INTEGER); |
| VAR n, data: INTEGER; ch: CHAR; b: BYTE; (*size in words, start in bytes*) |
| name: ARRAY 32 OF CHAR; |
| BEGINr Files.ReadString(R,s name)t;u Files.ReadInt(R,v data)w;x (*key*) |
| 065C | r(4EE90050): SUB SP, SP, 50H |
| 065D | r(AFE00000): STR LNK, SP, 0H |
| 065E | r(A0E00004): STR R0, SP, 4H |
| 065F | r(A1E00008): STR R1, SP, 8H |
| 0660 | r(A2E0000C): STR R2, SP, CH |
| 0661 | r(A3E00010): STR R3, SP, 10H |
| 0662 | r(A4E00014): STR R4, SP, 14H |
| 0663 | r(A5E00018): STR R5, SP, 18H |
| 0664 | r(A6E0001C): STR R6, SP, 1CH |
| 0665 | r(A7E00020): STR R7, SP, 20H |
| 0666 | s(80E00004): LDR R0, SP, 4H |
| 0667 | s(81E00008): LDR R1, SP, 8H |
| 0668 | t(42E80030): ADD R2, SP, 30H |
| 0669 | t(43000020): MOV R3, R0, 20H |
| 066A | u .FIXUP P |
| 066A | u(F7214012): BL MOD2 [Files] PROC20 |
| 066B | v(80E00004): LDR R0, SP, 4H |
| 066C | v(81E00008): LDR R1, SP, 8H |
| 066D | w(42E80028): ADD R2, SP, 28H |
| 066E | x .FIXUP P |
| 066E | x(F7211004): BL MOD2 [Files] PROC17 |
| Files.ReadByte(R,y b)z;a (*version*) Files.ReadInt(R,b data)c;d (*size*) |
| 066F | y(80E00004): LDR R0, SP, 4H |
| 0670 | y(81E00008): LDR R1, SP, 8H |
| 0671 | z(42E8002D): ADD R2, SP, 2DH |
| 0672 | a .FIXUP P |
| 0672 | a(F720E004): BL MOD2 [Files] PROC14 |
| 0673 | b(80E00004): LDR R0, SP, 4H |
| 0674 | b(81E00008): LDR R1, SP, 8H |
| 0675 | c(42E80028): ADD R2, SP, 28H |
| 0676 | d .FIXUP P |
| 0676 | d(F7211004): BL MOD2 [Files] PROC17 |
| Files.ReadString(R,e name)f;g (*imports*) nofimps := 0;h |
| 0677 | e(80E00004): LDR R0, SP, 4H |
| 0678 | e(81E00008): LDR R1, SP, 8H |
| 0679 | f(42E80030): ADD R2, SP, 30H |
| 067A | f(43000020): MOV R3, R0, 20H |
| 067B | g .FIXUP P |
| 067B | g(F7214005): BL MOD2 [Files] PROC20 |
| 067C | h(40000000): MOV R0, R0, 0H |
| 067D | h(81E0001C): LDR R1, SP, 1CH |
| 067E | h(A0100000): STR R0, R1, 0H |
| WHILE name[0] # 0X DOi INC(nofimps);j Files.ReadInt(R,k data)l;m (*key*) Files.ReadString(R,n name)o ENDp ; |
| 067F | i(90E00030): LDR R0, SP, 30H |
| 0680 | i(E100000E): BEQ 14 [068FH] |
| 0681 | j(80E0001C): LDR R0, SP, 1CH |
| 0682 | j(81000000): LDR R1, R0, 0H |
| 0683 | j(41180001): ADD R1, R1, 1H |
| 0684 | j(A1000000): STR R1, R0, 0H |
| 0685 | k(80E00004): LDR R0, SP, 4H |
| 0686 | k(81E00008): LDR R1, SP, 8H |
| 0687 | l(42E80028): ADD R2, SP, 28H |
| 0688 | m .FIXUP P |
| 0688 | m(F721100D): BL MOD2 [Files] PROC17 |
| 0689 | n(80E00004): LDR R0, SP, 4H |
| 068A | n(81E00008): LDR R1, SP, 8H |
| 068B | o(42E80030): ADD R2, SP, 30H |
| 068C | o(43000020): MOV R3, R0, 20H |
| 068D | p .FIXUP P |
| 068D | p(F7214005): BL MOD2 [Files] PROC20 |
| 068E | p(E7FFFFF0): B -16 [067FH] |
| Files.ReadInt(R,q n)r;s |
| 068F | q(80E00004): LDR R0, SP, 4H |
| 0690 | q(81E00008): LDR R1, SP, 8H |
| 0691 | r(42E80024): ADD R2, SP, 24H |
| 0692 | s .FIXUP P |
| 0692 | s(F7211005): BL MOD2 [Files] PROC17 |
| WHILE n > 0 DOt Files.ReadInt(R,u data)v;w DEC(n, 4) ENDx ; (*type descriptors*) |
| 0693 | t(80E00024): LDR R0, SP, 24H |
| 0694 | t(40090000): SUB R0, R0, 0H |
| 0695 | t(E6000008): BLE 8 [069EH] |
| 0696 | u(80E00004): LDR R0, SP, 4H |
| 0697 | u(81E00008): LDR R1, SP, 8H |
| 0698 | v(42E80028): ADD R2, SP, 28H |
| 0699 | w .FIXUP P |
| 0699 | w(F7211007): BL MOD2 [Files] PROC17 |
| 069A | x(80E00024): LDR R0, SP, 24H |
| 069B | x(40090004): SUB R0, R0, 4H |
| 069C | x(A0E00024): STR R0, SP, 24H |
| 069D | x(E7FFFFF5): B -11 [0693H] |
| Files.ReadInt(R,y n)z;a (*variable space*) |
| 069E | y(80E00004): LDR R0, SP, 4H |
| 069F | y(81E00008): LDR R1, SP, 8H |
| 06A0 | z(42E80024): ADD R2, SP, 24H |
| 06A1 | a .FIXUP P |
| 06A1 | a(F7211008): BL MOD2 [Files] PROC17 |
| Files.ReadInt(R,b n)c;d |
| 06A2 | b(80E00004): LDR R0, SP, 4H |
| 06A3 | b(81E00008): LDR R1, SP, 8H |
| 06A4 | c(42E80024): ADD R2, SP, 24H |
| 06A5 | d .FIXUP P |
| 06A5 | d(F7211004): BL MOD2 [Files] PROC17 |
| WHILE n > 0 DOe Files.Read(R,f ch)g;h DEC(n) ENDi ; (*strings*) |
| 06A6 | e(80E00024): LDR R0, SP, 24H |
| 06A7 | e(40090000): SUB R0, R0, 0H |
| 06A8 | e(E6000008): BLE 8 [06B1H] |
| 06A9 | f(80E00004): LDR R0, SP, 4H |
| 06AA | f(81E00008): LDR R1, SP, 8H |
| 06AB | g(42E8002C): ADD R2, SP, 2CH |
| 06AC | h .FIXUP P |
| 06AC | h(F7210007): BL MOD2 [Files] PROC16 |
| 06AD | i(80E00024): LDR R0, SP, 24H |
| 06AE | i(40090001): SUB R0, R0, 1H |
| 06AF | i(A0E00024): STR R0, SP, 24H |
| 06B0 | i(E7FFFFF5): B -11 [06A6H] |
| Files.ReadInt(R,j size)k;l |
| 06B1 | j(80E00004): LDR R0, SP, 4H |
| 06B2 | j(81E00008): LDR R1, SP, 8H |
| 06B3 | k(82E00014): LDR R2, SP, 14H |
| 06B4 | l .FIXUP P |
| 06B4 | l(F7211008): BL MOD2 [Files] PROC17 |
| IF size > LEN(code) THENm (*program too long*) res := 2 |
| 06B5 | m(80E00010): LDR R0, SP, 10H |
| 06B6 | m(81E00014): LDR R1, SP, 14H |
| 06B7 | m(81100000): LDR R1, R1, 0H |
| 06B8 | m(01190000): SUB R1, R1, R0 |
| 06B9 | m(E6000004): BLE 4 [06BEH] |
| ELSEn no := 0;p |
| 06BA | n(40000002): MOV R0, R0, 2H |
| 06BB | n(81E00020): LDR R1, SP, 20H |
| 06BC | n(A0100000): STR R0, R1, 0H |
| 06BD | o(E7000062): B 98 [0720H] |
| 06BE | p(40000000): MOV R0, R0, 0H |
| 06BF | p(A0E00024): STR R0, SP, 24H |
| WHILE n < size DOq Files.ReadInt(R,r data)s;t code[n]u := data;v INC(n) ENDw ; (*code*) |
| 06C0 | q(80E00024): LDR R0, SP, 24H |
| 06C1 | q(81E00014): LDR R1, SP, 14H |
| 06C2 | q(81100000): LDR R1, R1, 0H |
| 06C3 | q(00090001): SUB R0, R0, R1 |
| 06C4 | q(ED000011): BGE 17 [06D6H] |
| 06C5 | r(80E00004): LDR R0, SP, 4H |
| 06C6 | r(81E00008): LDR R1, SP, 8H |
| 06C7 | s(42E80028): ADD R2, SP, 28H |
| 06C8 | t .FIXUP P |
| 06C8 | t(F7211014): BL MOD2 [Files] PROC17 |
| 06C9 | u(80E00024): LDR R0, SP, 24H |
| 06CA | u(81E00010): LDR R1, SP, 10H |
| 06CB | u(01090001): SUB R1, R0, R1 |
| 06CC | u(DA31861C): BLCC MT [trap=1, pos=12678] |
| 06CD | u(40010002): LSL R0, R0, 2H |
| 06CE | u(81E0000C): LDR R1, SP, CH |
| 06CF | u(00180000): ADD R0, R1, R0 |
| 06D0 | v(81E00028): LDR R1, SP, 28H |
| 06D1 | v(A1000000): STR R1, R0, 0H |
| 06D2 | w(80E00024): LDR R0, SP, 24H |
| 06D3 | w(40080001): ADD R0, R0, 1H |
| 06D4 | w(A0E00024): STR R0, SP, 24H |
| 06D5 | w(E7FFFFEA): B -22 [06C0H] |
| Files.ReadString(R,x name)y;z |
| 06D6 | x(80E00004): LDR R0, SP, 4H |
| 06D7 | x(81E00008): LDR R1, SP, 8H |
| 06D8 | y(42E80030): ADD R2, SP, 30H |
| 06D9 | y(43000020): MOV R3, R0, 20H |
| 06DA | z .FIXUP P |
| 06DA | z(F7214012): BL MOD2 [Files] PROC20 |
| WHILE name[0] # 0X DOa Files.ReadInt(R,b data)c;d Files.ReadString(R,e name)f ENDg ; (*commands*) |
| 06DB | a(90E00030): LDR R0, SP, 30H |
| 06DC | a(E100000A): BEQ 10 [06E7H] |
| 06DD | b(80E00004): LDR R0, SP, 4H |
| 06DE | b(81E00008): LDR R1, SP, 8H |
| 06DF | c(42E80028): ADD R2, SP, 28H |
| 06E0 | d .FIXUP P |
| 06E0 | d(F7211006): BL MOD2 [Files] PROC17 |
| 06E1 | e(80E00004): LDR R0, SP, 4H |
| 06E2 | e(81E00008): LDR R1, SP, 8H |
| 06E3 | f(42E80030): ADD R2, SP, 30H |
| 06E4 | f(43000020): MOV R3, R0, 20H |
| 06E5 | g .FIXUP P |
| 06E5 | g(F7214005): BL MOD2 [Files] PROC20 |
| 06E6 | g(E7FFFFF4): B -12 [06DBH] |
| Files.ReadInt(R,h n)i;j |
| 06E7 | h(80E00004): LDR R0, SP, 4H |
| 06E8 | h(81E00008): LDR R1, SP, 8H |
| 06E9 | i(42E80024): ADD R2, SP, 24H |
| 06EA | j .FIXUP P |
| 06EA | j(F7211005): BL MOD2 [Files] PROC17 |
| WHILE n > 0 DOk Files.ReadInt(R,l data)m;n DEC(n) ENDo ; (*entries*) |
| 06EB | k(80E00024): LDR R0, SP, 24H |
| 06EC | k(40090000): SUB R0, R0, 0H |
| 06ED | k(E6000008): BLE 8 [06F6H] |
| 06EE | l(80E00004): LDR R0, SP, 4H |
| 06EF | l(81E00008): LDR R1, SP, 8H |
| 06F0 | m(42E80028): ADD R2, SP, 28H |
| 06F1 | n .FIXUP P |
| 06F1 | n(F7211007): BL MOD2 [Files] PROC17 |
| 06F2 | o(80E00024): LDR R0, SP, 24H |
| 06F3 | o(40090001): SUB R0, R0, 1H |
| 06F4 | o(A0E00024): STR R0, SP, 24H |
| 06F5 | o(E7FFFFF5): B -11 [06EBH] |
| Files.ReadInt(R,p data)q;r |
| 06F6 | p(80E00004): LDR R0, SP, 4H |
| 06F7 | p(81E00008): LDR R1, SP, 8H |
| 06F8 | q(42E80028): ADD R2, SP, 28H |
| 06F9 | r .FIXUP P |
| 06F9 | r(F7211008): BL MOD2 [Files] PROC17 |
| WHILE data >= 0 DOs Files.ReadInt(R,t data)u ENDv ; (*pointer references*) |
| 06FA | s(80E00028): LDR R0, SP, 28H |
| 06FB | s(40090000): SUB R0, R0, 0H |
| 06FC | s(E5000005): BLT 5 [0702H] |
| 06FD | t(80E00004): LDR R0, SP, 4H |
| 06FE | t(81E00008): LDR R1, SP, 8H |
| 06FF | u(42E80028): ADD R2, SP, 28H |
| 0700 | v .FIXUP P |
| 0700 | v(F7211007): BL MOD2 [Files] PROC17 |
| 0701 | v(E7FFFFF8): B -8 [06FAH] |
| Files.ReadInt(R,w data)x;y (*fixorgP*) Files.ReadInt(R,z data)a;b (*fixorgD*) |
| 0702 | w(80E00004): LDR R0, SP, 4H |
| 0703 | w(81E00008): LDR R1, SP, 8H |
| 0704 | x(42E80028): ADD R2, SP, 28H |
| 0705 | y .FIXUP P |
| 0705 | y(F7211005): BL MOD2 [Files] PROC17 |
| 0706 | z(80E00004): LDR R0, SP, 4H |
| 0707 | z(81E00008): LDR R1, SP, 8H |
| 0708 | a(42E80028): ADD R2, SP, 28H |
| 0709 | b .FIXUP P |
| 0709 | b(F7211004): BL MOD2 [Files] PROC17 |
| Files.ReadInt(R,c data)d;e (*fixorgT*) Files.ReadInt(R,f start)g;h (*entry*) |
| 070A | c(80E00004): LDR R0, SP, 4H |
| 070B | c(81E00008): LDR R1, SP, 8H |
| 070C | d(42E80028): ADD R2, SP, 28H |
| 070D | e .FIXUP P |
| 070D | e(F7211004): BL MOD2 [Files] PROC17 |
| 070E | f(80E00004): LDR R0, SP, 4H |
| 070F | f(81E00008): LDR R1, SP, 8H |
| 0710 | g(82E00018): LDR R2, SP, 18H |
| 0711 | h .FIXUP P |
| 0711 | h(F7211004): BL MOD2 [Files] PROC17 |
| Files.Read(R,i ch)j;k |
| 0712 | i(80E00004): LDR R0, SP, 4H |
| 0713 | i(81E00008): LDR R1, SP, 8H |
| 0714 | j(42E8002C): ADD R2, SP, 2CH |
| 0715 | k .FIXUP P |
| 0715 | k(F7210004): BL MOD2 [Files] PROC16 |
| IF ch # "O" THENl (*corrupted file*) res := 1 ELSEm resn := 0 ENDo |
| 0716 | l(90E0002C): LDR R0, SP, 2CH |
| 0717 | l(4009004F): SUB R0, R0, 4FH |
| 0718 | l(E1000004): BEQ 4 [071DH] |
| 0719 | m(40000001): MOV R0, R0, 1H |
| 071A | m(81E00020): LDR R1, SP, 20H |
| 071B | m(A0100000): STR R0, R1, 0H |
| 071C | n(E7000003): B 3 [0720H] |
| 071D | o(40000000): MOV R0, R0, 0H |
| 071E | o(81E00020): LDR R1, SP, 20H |
| 071F | o(A0100000): STR R0, R1, 0H |
| END |
| ENDp ReadCode; |
| 0720 | p(8FE00000): LDR LNK, SP, 0H |
| 0721 | p(4EE80050): ADD SP, SP, 50H |
| 0722 | p(C700000F): B LNK |
| |
| PROCEDURE WriteHex(VAR R: Files.Rider; x: LONGINT); (*write a 4 byte LONGINT in 8 digit hex format*) |
| VAR i: INTEGER; y: LONGINT; |
| a: ARRAY 10 OF CHAR; |
| BEGINq i := 0;r |
| 0723 | q(4EE90024): SUB SP, SP, 24H |
| 0724 | q(AFE00000): STR LNK, SP, 0H |
| 0725 | q(A0E00004): STR R0, SP, 4H |
| 0726 | q(A1E00008): STR R1, SP, 8H |
| 0727 | q(A2E0000C): STR R2, SP, CH |
| 0728 | r(40000000): MOV R0, R0, 0H |
| 0729 | r(A0E00010): STR R0, SP, 10H |
| REPEAT y := x MOD 10H;s |
| 072A | s(80E0000C): LDR R0, SP, CH |
| 072B | s(4004000F): AND R0, R0, FH |
| 072C | s(A0E00014): STR R0, SP, 14H |
| IF y < 10 THENt a[i]u := CHR(y + 30H)v ELSEw ax[i]y := CHR(y + 37H)z ENDa ; |
| 072D | t(80E00014): LDR R0, SP, 14H |
| 072E | t(4009000A): SUB R0, R0, AH |
| 072F | t(ED000008): BGE 8 [0738H] |
| 0730 | u(80E00010): LDR R0, SP, 10H |
| 0731 | u(4109000A): SUB R1, R0, AH |
| 0732 | u(DA34EC1C): BLCC MT [trap=1, pos=13548] |
| 0733 | u(00E80000): ADD R0, SP, R0 |
| 0734 | v(81E00014): LDR R1, SP, 14H |
| 0735 | v(41180030): ADD R1, R1, 30H |
| 0736 | w(B1000018): STR R1, R0, 18H |
| 0737 | x(E7000007): B 7 [073FH] |
| 0738 | y(80E00010): LDR R0, SP, 10H |
| 0739 | y(4109000A): SUB R1, R0, AH |
| 073A | y(DA35061C): BLCC MT [trap=1, pos=13574] |
| 073B | y(00E80000): ADD R0, SP, R0 |
| 073C | z(81E00014): LDR R1, SP, 14H |
| 073D | z(41180037): ADD R1, R1, 37H |
| 073E | a(B1000018): STR R1, R0, 18H |
| x := x DIV 10H;b INC(i) |
| 073F | b(80E0000C): LDR R0, SP, CH |
| 0740 | b(40020004): ASR R0, R0, 4H |
| 0741 | b(A0E0000C): STR R0, SP, CH |
| UNTILc i = 8;d |
| 0742 | c(80E00010): LDR R0, SP, 10H |
| 0743 | c(40080001): ADD R0, R0, 1H |
| 0744 | c(A0E00010): STR R0, SP, 10H |
| 0745 | d(80E00010): LDR R0, SP, 10H |
| 0746 | d(40090008): SUB R0, R0, 8H |
| 0747 | d(E9FFFFE2): BNE -30 [072AH] |
| REPEAT DEC(i);e Files.Write(R,f a[i]g)h UNTILi i = 0 |
| 0748 | e(80E00010): LDR R0, SP, 10H |
| 0749 | e(40090001): SUB R0, R0, 1H |
| 074A | e(A0E00010): STR R0, SP, 10H |
| 074B | f(80E00004): LDR R0, SP, 4H |
| 074C | f(81E00008): LDR R1, SP, 8H |
| 074D | g(82E00010): LDR R2, SP, 10H |
| 074E | g(4329000A): SUB R3, R2, AH |
| 074F | g(DA35711C): BLCC MT [trap=1, pos=13681] |
| 0750 | g(02E80002): ADD R2, SP, R2 |
| 0751 | h(92200018): LDR R2, R2, 18H |
| 0752 | i .FIXUP P |
| 0752 | i(F721803D): BL MOD2 [Files] PROC24 |
| ENDj WriteHex; |
| 0753 | j(80E00010): LDR R0, SP, 10H |
| 0754 | j(E9FFFFF3): BNE -13 [0748H] |
| 0755 | j(8FE00000): LDR LNK, SP, 0H |
| 0756 | j(4EE80024): ADD SP, SP, 24H |
| 0757 | j(C700000F): B LNK |
| |
| PROCEDURE WriteFile*; (*write code section of M.rsc in PROM format with specified size to output file*) |
| VAR if, of: Files.File; ir, or: Files.Rider; |
| code: ARRAY maxCode OF LONGINT; |
| i, len, size, start, nofimps, res: INTEGER; |
| name: ARRAY 32 OF CHAR; |
| S: Texts.Scanner; |
| BEGINk Texts.OpenScanner(S,l Oberon.Par.text,m Oberon.Par.pos)n;o Texts.Scan(S)p;q res := -1;r |
| 0758 | k .PROC 7 |
| 0758 | k .COMMAND WriteFile |
| 0758 | k(4EE97DE8): SUB SP, SP, 7DE8H |
| 0759 | k(AFE00000): STR LNK, SP, 0H |
| 075A | l(40E87D74): ADD R0, SP, 7D74H |
| 075B | l .FIXUP D |
| 075B | l(8D400105): LDR SB, MT, MOD4 [Texts] |
| 075C | l(41D80003): ADD R1, SB, VAR3 |
| 075D | m .FIXUP D |
| 075D | m(8D600002): LDR SB, MT, MOD6 [Oberon] |
| 075E | m(42D8000E): ADD R2, SB, VAR14 |
| 075F | m(82200008): LDR R2, R2, 8H |
| 0760 | n .FIXUP D |
| 0760 | n(8D600003): LDR SB, MT, MOD6 [Oberon] |
| 0761 | n(43D8000E): ADD R3, SB, VAR14 |
| 0762 | n(8330000C): LDR R3, R3, CH |
| 0763 | o .FIXUP P |
| 0763 | o(F7415011): BL MOD4 [Texts] PROC21 |
| 0764 | p(40E87D74): ADD R0, SP, 7D74H |
| 0765 | p .FIXUP D |
| 0765 | p(8D400005): LDR SB, MT, MOD4 [Texts] |
| 0766 | p(41D80003): ADD R1, SB, VAR3 |
| 0767 | q .FIXUP P |
| 0767 | q(F7416004): BL MOD4 [Texts] PROC22 |
| 0768 | r(5000FFFF): MOV R0, R0, FFFFFFFFH |
| 0769 | r(A0E07D50): STR R0, SP, 7D50H |
| IF (S.class = Texts.Name)s OR (tS.class = Texts.String)u THENv name := S.s;w Texts.Scan(S)x;y |
| 076A | s(80E07DB0): LDR R0, SP, 7DB0H |
| 076B | s(40090001): SUB R0, R0, 1H |
| 076C | t(E1000003): BEQ 3 [0770H] |
| 076D | u(80E07DB0): LDR R0, SP, 7DB0H |
| 076E | u(40090002): SUB R0, R0, 2H |
| 076F | v(E90000DF): BNE 223 [084FH] |
| 0770 | w(40E87D54): ADD R0, SP, 7D54H |
| 0771 | w(41E87DC8): ADD R1, SP, 7DC8H |
| 0772 | w(42000008): MOV R2, R0, 8H |
| 0773 | w(83100000): LDR R3, R1, 0H |
| 0774 | w(41180004): ADD R1, R1, 4H |
| 0775 | w(A3000000): STR R3, R0, 0H |
| 0776 | w(40080004): ADD R0, R0, 4H |
| 0777 | w(42290001): SUB R2, R2, 1H |
| 0778 | w(E9FFFFFA): BNE -6 [0773H] |
| 0779 | x(40E87D74): ADD R0, SP, 7D74H |
| 077A | x .FIXUP D |
| 077A | x(8D400015): LDR SB, MT, MOD4 [Texts] |
| 077B | x(41D80003): ADD R1, SB, VAR3 |
| 077C | y .FIXUP P |
| 077C | y(F7416015): BL MOD4 [Texts] PROC22 |
| IF S.class = Texts.Int THENz len := S.i;a Texts.Scan(S)b;c |
| 077D | z(80E07DB0): LDR R0, SP, 7DB0H |
| 077E | z(40090003): SUB R0, R0, 3H |
| 077F | z(E90000CF): BNE 207 [084FH] |
| 0780 | a(80E07DB4): LDR R0, SP, 7DB4H |
| 0781 | a(A0E07D40): STR R0, SP, 7D40H |
| 0782 | b(40E87D74): ADD R0, SP, 7D74H |
| 0783 | b .FIXUP D |
| 0783 | b(8D400009): LDR SB, MT, MOD4 [Texts] |
| 0784 | b(41D80003): ADD R1, SB, VAR3 |
| 0785 | c .FIXUP P |
| 0785 | c(F7416009): BL MOD4 [Texts] PROC22 |
| IF (S.class = Texts.Name)d OR (eS.class = Texts.String)f THENg res := 0;h Texts.WriteString(W,i " WriteFile ")j;k |
| 0786 | d(80E07DB0): LDR R0, SP, 7DB0H |
| 0787 | d(40090001): SUB R0, R0, 1H |
| 0788 | e(E1000003): BEQ 3 [078CH] |
| 0789 | f(80E07DB0): LDR R0, SP, 7DB0H |
| 078A | f(40090002): SUB R0, R0, 2H |
| 078B | g(E90000C3): BNE 195 [084FH] |
| 078C | h(40000000): MOV R0, R0, 0H |
| 078D | h(A0E07D50): STR R0, SP, 7D50H |
| 078E | i .FIXUP D |
| 078E | i(8D00000B): LDR SB, MT, MOD0 [Boot] |
| 078F | i(40D80070): ADD R0, SB, 70H [data] |
| 0790 | i .FIXUP D |
| 0790 | i(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0791 | i(41D80005): ADD R1, SB, VAR5 |
| 0792 | j .FIXUP D |
| 0792 | j(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0793 | j(42D80184): ADD R2, SB, 184H [" WriteFile "] |
| 0794 | j(4300000D): MOV R3, R0, DH |
| 0795 | k .FIXUP P |
| 0795 | k(F741D010): BL MOD4 [Texts] PROC29 |
| Texts.WriteString(W,l name)m;n Texts.WriteInt(W,o len,p 5)q;r Texts.Write(W,s " ")t;u Texts.WriteString(W,v S.s)w;x |
| 0796 | l .FIXUP D |
| 0796 | l(8D000004): LDR SB, MT, MOD0 [Boot] |
| 0797 | l(40D80070): ADD R0, SB, 70H [data] |
| 0798 | l .FIXUP D |
| 0798 | l(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0799 | l(41D80005): ADD R1, SB, VAR5 |
| 079A | m(42E87D54): ADD R2, SP, 7D54H |
| 079B | m(43000020): MOV R3, R0, 20H |
| 079C | n .FIXUP P |
| 079C | n(F741D007): BL MOD4 [Texts] PROC29 |
| 079D | o .FIXUP D |
| 079D | o(8D000005): LDR SB, MT, MOD0 [Boot] |
| 079E | o(40D80070): ADD R0, SB, 70H [data] |
| 079F | o .FIXUP D |
| 079F | o(8D400002): LDR SB, MT, MOD4 [Texts] |
| 07A0 | o(41D80005): ADD R1, SB, VAR5 |
| 07A1 | p(82E07D40): LDR R2, SP, 7D40H |
| 07A2 | q(43000005): MOV R3, R0, 5H |
| 07A3 | r .FIXUP P |
| 07A3 | r(F741E007): BL MOD4 [Texts] PROC30 |
| 07A4 | s .FIXUP D |
| 07A4 | s(8D000005): LDR SB, MT, MOD0 [Boot] |
| 07A5 | s(40D80070): ADD R0, SB, 70H [data] |
| 07A6 | s .FIXUP D |
| 07A6 | s(8D400002): LDR SB, MT, MOD4 [Texts] |
| 07A7 | s(41D80005): ADD R1, SB, VAR5 |
| 07A8 | t(42000020): MOV R2, R0, 20H |
| 07A9 | u .FIXUP P |
| 07A9 | u(F741B006): BL MOD4 [Texts] PROC27 |
| 07AA | v .FIXUP D |
| 07AA | v(8D000004): LDR SB, MT, MOD0 [Boot] |
| 07AB | v(40D80070): ADD R0, SB, 70H [data] |
| 07AC | v .FIXUP D |
| 07AC | v(8D400002): LDR SB, MT, MOD4 [Texts] |
| 07AD | v(41D80005): ADD R1, SB, VAR5 |
| 07AE | w(42E87DC8): ADD R2, SP, 7DC8H |
| 07AF | w(43000020): MOV R3, R0, 20H |
| 07B0 | x .FIXUP P |
| 07B0 | x(F741D007): BL MOD4 [Texts] PROC29 |
| IF len > 0 THENy if := Files.Old(name)z;a |
| 07B1 | y(80E07D40): LDR R0, SP, 7D40H |
| 07B2 | y(40090000): SUB R0, R0, 0H |
| 07B3 | y(E6000093): BLE 147 [0847H] |
| 07B4 | z(40E87D54): ADD R0, SP, 7D54H |
| 07B5 | z(41000020): MOV R1, R0, 20H |
| 07B6 | a .FIXUP P |
| 07B6 | a(F7202006): BL MOD2 [Files] PROC2 |
| 07B7 | a(A0E00004): STR R0, SP, 4H |
| IF if # NIL THENb of := Files.New(S.s)c;d |
| 07B8 | b(80E00004): LDR R0, SP, 4H |
| 07B9 | b(E1000084): BEQ 132 [083EH] |
| 07BA | c(40E87DC8): ADD R0, SP, 7DC8H |
| 07BB | c(41000020): MOV R1, R0, 20H |
| 07BC | d .FIXUP P |
| 07BC | d(F7203006): BL MOD2 [Files] PROC3 |
| 07BD | d(A0E00008): STR R0, SP, 8H |
| IF of # NIL THENe Files.Set(ir,f if,g 0)h;i ReadCode(ir,j code,k size,l start,m nofimps,n res)o;p |
| 07BE | e(80E00008): LDR R0, SP, 8H |
| 07BF | e(E100007D): BEQ 125 [083DH] |
| 07C0 | f(40E8000C): ADD R0, SP, CH |
| 07C1 | f .FIXUP D |
| 07C1 | f(8D200015): LDR SB, MT, MOD2 [Files] |
| 07C2 | f(41D80001): ADD R1, SB, VAR1 |
| 07C3 | g(82E00004): LDR R2, SP, 4H |
| 07C4 | h(43000000): MOV R3, R0, 0H |
| 07C5 | i .FIXUP P |
| 07C5 | i(F720B009): BL MOD2 [Files] PROC11 |
| 07C6 | j(40E8000C): ADD R0, SP, CH |
| 07C7 | j .FIXUP D |
| 07C7 | j(8D200006): LDR SB, MT, MOD2 [Files] |
| 07C8 | j(41D80001): ADD R1, SB, VAR1 |
| 07C9 | k(42E8003C): ADD R2, SP, 3CH |
| 07CA | k(43001F40): MOV R3, R0, 1F40H |
| 07CB | l(44E87D44): ADD R4, SP, 7D44H |
| 07CC | m(45E87D48): ADD R5, SP, 7D48H |
| 07CD | n(46E87D4C): ADD R6, SP, 7D4CH |
| 07CE | o(47E87D50): ADD R7, SP, 7D50H |
| 07CF | p(F7FFFE8C): BL -372 [065CH] |
| IF res = 0 THENq |
| 07D0 | q(80E07D50): LDR R0, SP, 7D50H |
| 07D1 | q(E9000054): BNE 84 [0826H] |
| IF nofimps = 0 THENr |
| 07D2 | r(80E07D4C): LDR R0, SP, 7D4CH |
| 07D3 | r(E9000049): BNE 73 [081DH] |
| IF size <= len THENs Files.Set(or,t of,u 0)v;w i := 0;x |
| 07D4 | s(80E07D44): LDR R0, SP, 7D44H |
| 07D5 | s(81E07D40): LDR R1, SP, 7D40H |
| 07D6 | s(00090001): SUB R0, R0, R1 |
| 07D7 | s(EE00003C): BGT 60 [0814H] |
| 07D8 | t(40E80024): ADD R0, SP, 24H |
| 07D9 | t .FIXUP D |
| 07D9 | t(8D200012): LDR SB, MT, MOD2 [Files] |
| 07DA | t(41D80001): ADD R1, SB, VAR1 |
| 07DB | u(82E00008): LDR R2, SP, 8H |
| 07DC | v(43000000): MOV R3, R0, 0H |
| 07DD | w .FIXUP P |
| 07DD | w(F720B018): BL MOD2 [Files] PROC11 |
| 07DE | x(40000000): MOV R0, R0, 0H |
| 07DF | x(A0E07D3C): STR R0, SP, 7D3CH |
| WHILE i < size DOy WriteHex(or,z code[i]a)b;c Files.Write(or,d CR)e;f INC(i) ENDg ; |
| 07E0 | y(80E07D3C): LDR R0, SP, 7D3CH |
| 07E1 | y(81E07D44): LDR R1, SP, 7D44H |
| 07E2 | y(00090001): SUB R0, R0, R1 |
| 07E3 | y(ED000013): BGE 19 [07F7H] |
| 07E4 | z(40E80024): ADD R0, SP, 24H |
| 07E5 | z .FIXUP D |
| 07E5 | z(8D20000C): LDR SB, MT, MOD2 [Files] |
| 07E6 | z(41D80001): ADD R1, SB, VAR1 |
| 07E7 | a(82E07D3C): LDR R2, SP, 7D3CH |
| 07E8 | a(43291F40): SUB R3, R2, 1F40H |
| 07E9 | a(DA3A1E1C): BLCC MT [trap=1, pos=14878] |
| 07EA | a(42210002): LSL R2, R2, 2H |
| 07EB | a(02E80002): ADD R2, SP, R2 |
| 07EC | b(8220003C): LDR R2, R2, 3CH |
| 07ED | c(F7FFFF35): BL -203 [0723H] |
| 07EE | d(40E80024): ADD R0, SP, 24H |
| 07EF | d .FIXUP D |
| 07EF | d(8D20000A): LDR SB, MT, MOD2 [Files] |
| 07F0 | d(41D80001): ADD R1, SB, VAR1 |
| 07F1 | e(4200000D): MOV R2, R0, DH |
| 07F2 | f .FIXUP P |
| 07F2 | f(F7218015): BL MOD2 [Files] PROC24 |
| 07F3 | g(80E07D3C): LDR R0, SP, 7D3CH |
| 07F4 | g(40080001): ADD R0, R0, 1H |
| 07F5 | g(A0E07D3C): STR R0, SP, 7D3CH |
| 07F6 | g(E7FFFFE9): B -23 [07E0H] |
| WHILE i < len DOh WriteHex(or,i 0)j;k Files.Write(or,l CR)m;n INC(i) ENDo ; |
| 07F7 | h(80E07D3C): LDR R0, SP, 7D3CH |
| 07F8 | h(81E07D40): LDR R1, SP, 7D40H |
| 07F9 | h(00090001): SUB R0, R0, R1 |
| 07FA | h(ED00000E): BGE 14 [0809H] |
| 07FB | i(40E80024): ADD R0, SP, 24H |
| 07FC | i .FIXUP D |
| 07FC | i(8D20000D): LDR SB, MT, MOD2 [Files] |
| 07FD | i(41D80001): ADD R1, SB, VAR1 |
| 07FE | j(42000000): MOV R2, R0, 0H |
| 07FF | k(F7FFFF23): BL -221 [0723H] |
| 0800 | l(40E80024): ADD R0, SP, 24H |
| 0801 | l .FIXUP D |
| 0801 | l(8D200005): LDR SB, MT, MOD2 [Files] |
| 0802 | l(41D80001): ADD R1, SB, VAR1 |
| 0803 | m(4200000D): MOV R2, R0, DH |
| 0804 | n .FIXUP P |
| 0804 | n(F7218012): BL MOD2 [Files] PROC24 |
| 0805 | o(80E07D3C): LDR R0, SP, 7D3CH |
| 0806 | o(40080001): ADD R0, R0, 1H |
| 0807 | o(A0E07D3C): STR R0, SP, 7D3CH |
| 0808 | o(E7FFFFEE): B -18 [07F7H] |
| Files.Register(of)p;q Texts.WriteString(W,r " done")s |
| 0809 | p(80E00008): LDR R0, SP, 8H |
| 080A | q .FIXUP P |
| 080A | q(F7204006): BL MOD2 [Files] PROC4 |
| 080B | r .FIXUP D |
| 080B | r(8D00000A): LDR SB, MT, MOD0 [Boot] |
| 080C | r(40D80070): ADD R0, SB, 70H [data] |
| 080D | r .FIXUP D |
| 080D | r(8D400002): LDR SB, MT, MOD4 [Texts] |
| 080E | r(41D80005): ADD R1, SB, VAR5 |
| 080F | s .FIXUP D |
| 080F | s(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0810 | s(42D80194): ADD R2, SB, 194H [" done"] |
| 0811 | s(43000007): MOV R3, R0, 7H |
| ELSEt Textsu.WriteString(W,v " insufficent size")w |
| 0812 | t .FIXUP P |
| 0812 | t(F741D008): BL MOD4 [Texts] PROC29 |
| 0813 | u(E7000008): B 8 [081CH] |
| 0814 | v .FIXUP D |
| 0814 | v(8D000005): LDR SB, MT, MOD0 [Boot] |
| 0815 | v(40D80070): ADD R0, SB, 70H [data] |
| 0816 | v .FIXUP D |
| 0816 | v(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0817 | v(41D80005): ADD R1, SB, VAR5 |
| 0818 | w .FIXUP D |
| 0818 | w(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0819 | w(42D8019C): ADD R2, SB, 19CH [" insufficent size"] |
| 081A | w(43000013): MOV R3, R0, 13H |
| ENDx |
| 081B | x .FIXUP P |
| 081B | x(F741D009): BL MOD4 [Texts] PROC29 |
| ELSE Textsy.WriteString(W,z " imports not allowed")a |
| 081C | y(E7000008): B 8 [0825H] |
| 081D | z .FIXUP D |
| 081D | z(8D000005): LDR SB, MT, MOD0 [Boot] |
| 081E | z(40D80070): ADD R0, SB, 70H [data] |
| 081F | z .FIXUP D |
| 081F | z(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0820 | z(41D80005): ADD R1, SB, VAR5 |
| 0821 | a .FIXUP D |
| 0821 | a(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0822 | a(42D801B0): ADD R2, SB, 1B0H [" imports not allowed"] |
| 0823 | a(43000015): MOV R3, R0, 15H |
| ENDb |
| 0824 | b .FIXUP P |
| 0824 | b(F741D009): BL MOD4 [Texts] PROC29 |
| ELSIF resc = 1 THENd Texts.WriteString(W,e " input file format error")f |
| 0825 | c(E7000017): B 23 [083DH] |
| 0826 | d(80E07D50): LDR R0, SP, 7D50H |
| 0827 | d(40090001): SUB R0, R0, 1H |
| 0828 | d(E9000009): BNE 9 [0832H] |
| 0829 | e .FIXUP D |
| 0829 | e(8D000008): LDR SB, MT, MOD0 [Boot] |
| 082A | e(40D80070): ADD R0, SB, 70H [data] |
| 082B | e .FIXUP D |
| 082B | e(8D400002): LDR SB, MT, MOD4 [Texts] |
| 082C | e(41D80005): ADD R1, SB, VAR5 |
| 082D | f .FIXUP D |
| 082D | f(8D000002): LDR SB, MT, MOD0 [Boot] |
| 082E | f(42D801C8): ADD R2, SB, 1C8H [" input file format error"] |
| 082F | f(4300001A): MOV R3, R0, 1AH |
| ELSIFg resh = 2 THENi Texts.WriteString(W,j " program too long")k |
| 0830 | g .FIXUP P |
| 0830 | g(F741D00C): BL MOD4 [Texts] PROC29 |
| 0831 | h(E700000B): B 11 [083DH] |
| 0832 | i(80E07D50): LDR R0, SP, 7D50H |
| 0833 | i(40090002): SUB R0, R0, 2H |
| 0834 | i(E9000008): BNE 8 [083DH] |
| 0835 | j .FIXUP D |
| 0835 | j(8D000008): LDR SB, MT, MOD0 [Boot] |
| 0836 | j(40D80070): ADD R0, SB, 70H [data] |
| 0837 | j .FIXUP D |
| 0837 | j(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0838 | j(41D80005): ADD R1, SB, VAR5 |
| 0839 | k .FIXUP D |
| 0839 | k(8D000002): LDR SB, MT, MOD0 [Boot] |
| 083A | k(42D801E4): ADD R2, SB, 1E4H [" program too long"] |
| 083B | k(43000013): MOV R3, R0, 13H |
| ENDl |
| 083C | l .FIXUP P |
| 083C | l(F741D00C): BL MOD4 [Texts] PROC29 |
| END |
| ELSE Textsm.WriteString(W,n " input file not found")o |
| 083D | m(E7000008): B 8 [0846H] |
| 083E | n .FIXUP D |
| 083E | n(8D000005): LDR SB, MT, MOD0 [Boot] |
| 083F | n(40D80070): ADD R0, SB, 70H [data] |
| 0840 | n .FIXUP D |
| 0840 | n(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0841 | n(41D80005): ADD R1, SB, VAR5 |
| 0842 | o .FIXUP D |
| 0842 | o(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0843 | o(42D801F8): ADD R2, SB, 1F8H [" input file not found"] |
| 0844 | o(43000017): MOV R3, R0, 17H |
| ENDp |
| 0845 | p .FIXUP P |
| 0845 | p(F741D009): BL MOD4 [Texts] PROC29 |
| ELSE Textsq.WriteString(W,r " size must be positive")s |
| 0846 | q(E7000008): B 8 [084FH] |
| 0847 | r .FIXUP D |
| 0847 | r(8D000005): LDR SB, MT, MOD0 [Boot] |
| 0848 | r(40D80070): ADD R0, SB, 70H [data] |
| 0849 | r .FIXUP D |
| 0849 | r(8D400002): LDR SB, MT, MOD4 [Texts] |
| 084A | r(41D80005): ADD R1, SB, VAR5 |
| 084B | s .FIXUP D |
| 084B | s(8D000002): LDR SB, MT, MOD0 [Boot] |
| 084C | s(42D80210): ADD R2, SB, 210H [" size must be positive"] |
| 084D | s(43000018): MOV R3, R0, 18H |
| ENDt |
| 084E | t .FIXUP P |
| 084E | t(F741D009): BL MOD4 [Texts] PROC29 |
| END |
| END |
| END ; |
| IF res = -1 THENu Texts.WriteString(W,v "Usage: Boot.WriteFile M.rsc outputsize outputfile")w ENDx ; |
| 084F | u(80E07D50): LDR R0, SP, 7D50H |
| 0850 | u(5009FFFF): SUB R0, R0, FFFFFFFFH |
| 0851 | u(E9000008): BNE 8 [085AH] |
| 0852 | v .FIXUP D |
| 0852 | v(8D000007): LDR SB, MT, MOD0 [Boot] |
| 0853 | v(40D80070): ADD R0, SB, 70H [data] |
| 0854 | v .FIXUP D |
| 0854 | v(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0855 | v(41D80005): ADD R1, SB, VAR5 |
| 0856 | w .FIXUP D |
| 0856 | w(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0857 | w(42D80228): ADD R2, SB, 228H ["Usage: Boot.WriteFile M.rsc outputsize outputfile"] |
| 0858 | w(43000032): MOV R3, R0, 32H |
| 0859 | x .FIXUP P |
| 0859 | x(F741D00B): BL MOD4 [Texts] PROC29 |
| Texts.WriteLn(W)y;z Texts.Append(Oberon.Log,a W.buf)b |
| 085A | y .FIXUP D |
| 085A | y(8D000004): LDR SB, MT, MOD0 [Boot] |
| 085B | y(40D80070): ADD R0, SB, 70H [data] |
| 085C | y .FIXUP D |
| 085C | y(8D400002): LDR SB, MT, MOD4 [Texts] |
| 085D | y(41D80005): ADD R1, SB, VAR5 |
| 085E | z .FIXUP P |
| 085E | z(F741C005): BL MOD4 [Texts] PROC28 |
| 085F | a .FIXUP D |
| 085F | a(8D600003): LDR SB, MT, MOD6 [Oberon] |
| 0860 | a(80D0000D): LDR R0, SB, VAR13 |
| 0861 | b .FIXUP D |
| 0861 | b(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0862 | b(81D00070): LDR R1, SB, 70H [data] |
| ENDc WriteFile; |
| 0863 | c .FIXUP P |
| 0863 | c(F740E005): BL MOD4 [Texts] PROC14 |
| 0864 | c(8FE00000): LDR LNK, SP, 0H |
| 0865 | c(4EE87DE8): ADD SP, SP, 7DE8H |
| 0866 | c(C700000F): B LNK |
| |
| PROCEDURE WriteCode*; (*write code section of M.rsc in binary format with prefix (size, adr) to output file*) |
| VAR if, of: Files.File; ir, or: Files.Rider; |
| code: ARRAY maxCode OF LONGINT; |
| i, size, start, nofimps, res: INTEGER; |
| name: ARRAY 32 OF CHAR; |
| S: Texts.Scanner; |
| BEGINd Texts.OpenScanner(S,e Oberon.Par.text,f Oberon.Par.pos)g;h Texts.Scan(S)i;j res := -1;k |
| 0867 | d .PROC 8 |
| 0867 | d .COMMAND WriteCode |
| 0867 | d(4EE97DE4): SUB SP, SP, 7DE4H |
| 0868 | d(AFE00000): STR LNK, SP, 0H |
| 0869 | e(40E87D70): ADD R0, SP, 7D70H |
| 086A | e .FIXUP D |
| 086A | e(8D400009): LDR SB, MT, MOD4 [Texts] |
| 086B | e(41D80003): ADD R1, SB, VAR3 |
| 086C | f .FIXUP D |
| 086C | f(8D600002): LDR SB, MT, MOD6 [Oberon] |
| 086D | f(42D8000E): ADD R2, SB, VAR14 |
| 086E | f(82200008): LDR R2, R2, 8H |
| 086F | g .FIXUP D |
| 086F | g(8D600003): LDR SB, MT, MOD6 [Oberon] |
| 0870 | g(43D8000E): ADD R3, SB, VAR14 |
| 0871 | g(8330000C): LDR R3, R3, CH |
| 0872 | h .FIXUP P |
| 0872 | h(F741500F): BL MOD4 [Texts] PROC21 |
| 0873 | i(40E87D70): ADD R0, SP, 7D70H |
| 0874 | i .FIXUP D |
| 0874 | i(8D400005): LDR SB, MT, MOD4 [Texts] |
| 0875 | i(41D80003): ADD R1, SB, VAR3 |
| 0876 | j .FIXUP P |
| 0876 | j(F7416004): BL MOD4 [Texts] PROC22 |
| 0877 | k(5000FFFF): MOV R0, R0, FFFFFFFFH |
| 0878 | k(A0E07D4C): STR R0, SP, 7D4CH |
| IF (S.class = Texts.Name)l OR (mS.class = Texts.String)n THENo name := S.s;p Texts.Scan(S)q;r |
| 0879 | l(80E07DAC): LDR R0, SP, 7DACH |
| 087A | l(40090001): SUB R0, R0, 1H |
| 087B | m(E1000003): BEQ 3 [087FH] |
| 087C | n(80E07DAC): LDR R0, SP, 7DACH |
| 087D | n(40090002): SUB R0, R0, 2H |
| 087E | o(E90000B9): BNE 185 [0938H] |
| 087F | p(40E87D50): ADD R0, SP, 7D50H |
| 0880 | p(41E87DC4): ADD R1, SP, 7DC4H |
| 0881 | p(42000008): MOV R2, R0, 8H |
| 0882 | p(83100000): LDR R3, R1, 0H |
| 0883 | p(41180004): ADD R1, R1, 4H |
| 0884 | p(A3000000): STR R3, R0, 0H |
| 0885 | p(40080004): ADD R0, R0, 4H |
| 0886 | p(42290001): SUB R2, R2, 1H |
| 0887 | p(E9FFFFFA): BNE -6 [0882H] |
| 0888 | q(40E87D70): ADD R0, SP, 7D70H |
| 0889 | q .FIXUP D |
| 0889 | q(8D400015): LDR SB, MT, MOD4 [Texts] |
| 088A | q(41D80003): ADD R1, SB, VAR3 |
| 088B | r .FIXUP P |
| 088B | r(F7416015): BL MOD4 [Texts] PROC22 |
| IF (S.class = Texts.Name)s OR (tS.class = Texts.String)u THENv res := 0;w Texts.WriteString(W,x " WriteCode ")y;z |
| 088C | s(80E07DAC): LDR R0, SP, 7DACH |
| 088D | s(40090001): SUB R0, R0, 1H |
| 088E | t(E1000003): BEQ 3 [0892H] |
| 088F | u(80E07DAC): LDR R0, SP, 7DACH |
| 0890 | u(40090002): SUB R0, R0, 2H |
| 0891 | v(E90000A6): BNE 166 [0938H] |
| 0892 | w(40000000): MOV R0, R0, 0H |
| 0893 | w(A0E07D4C): STR R0, SP, 7D4CH |
| 0894 | x .FIXUP D |
| 0894 | x(8D00000B): LDR SB, MT, MOD0 [Boot] |
| 0895 | x(40D80070): ADD R0, SB, 70H [data] |
| 0896 | x .FIXUP D |
| 0896 | x(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0897 | x(41D80005): ADD R1, SB, VAR5 |
| 0898 | y .FIXUP D |
| 0898 | y(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0899 | y(42D8025C): ADD R2, SB, 25CH [" WriteCode "] |
| 089A | y(4300000D): MOV R3, R0, DH |
| 089B | z .FIXUP P |
| 089B | z(F741D010): BL MOD4 [Texts] PROC29 |
| Texts.WriteString(W,a name)b;c Texts.Write(W,d " ")e;f Texts.WriteString(W,g S.s)h;i |
| 089C | a .FIXUP D |
| 089C | a(8D000004): LDR SB, MT, MOD0 [Boot] |
| 089D | a(40D80070): ADD R0, SB, 70H [data] |
| 089E | a .FIXUP D |
| 089E | a(8D400002): LDR SB, MT, MOD4 [Texts] |
| 089F | a(41D80005): ADD R1, SB, VAR5 |
| 08A0 | b(42E87D50): ADD R2, SP, 7D50H |
| 08A1 | b(43000020): MOV R3, R0, 20H |
| 08A2 | c .FIXUP P |
| 08A2 | c(F741D007): BL MOD4 [Texts] PROC29 |
| 08A3 | d .FIXUP D |
| 08A3 | d(8D000005): LDR SB, MT, MOD0 [Boot] |
| 08A4 | d(40D80070): ADD R0, SB, 70H [data] |
| 08A5 | d .FIXUP D |
| 08A5 | d(8D400002): LDR SB, MT, MOD4 [Texts] |
| 08A6 | d(41D80005): ADD R1, SB, VAR5 |
| 08A7 | e(42000020): MOV R2, R0, 20H |
| 08A8 | f .FIXUP P |
| 08A8 | f(F741B006): BL MOD4 [Texts] PROC27 |
| 08A9 | g .FIXUP D |
| 08A9 | g(8D000004): LDR SB, MT, MOD0 [Boot] |
| 08AA | g(40D80070): ADD R0, SB, 70H [data] |
| 08AB | g .FIXUP D |
| 08AB | g(8D400002): LDR SB, MT, MOD4 [Texts] |
| 08AC | g(41D80005): ADD R1, SB, VAR5 |
| 08AD | h(42E87DC4): ADD R2, SP, 7DC4H |
| 08AE | h(43000020): MOV R3, R0, 20H |
| 08AF | i .FIXUP P |
| 08AF | i(F741D007): BL MOD4 [Texts] PROC29 |
| if := Files.Old(name)j;k |
| 08B0 | j(40E87D50): ADD R0, SP, 7D50H |
| 08B1 | j(41000020): MOV R1, R0, 20H |
| 08B2 | k .FIXUP P |
| 08B2 | k(F7202003): BL MOD2 [Files] PROC2 |
| 08B3 | k(A0E00004): STR R0, SP, 4H |
| IF if # NIL THENl of := Files.New(S.s)m;n |
| 08B4 | l(80E00004): LDR R0, SP, 4H |
| 08B5 | l(E100007A): BEQ 122 [0930H] |
| 08B6 | m(40E87DC4): ADD R0, SP, 7DC4H |
| 08B7 | m(41000020): MOV R1, R0, 20H |
| 08B8 | n .FIXUP P |
| 08B8 | n(F7203006): BL MOD2 [Files] PROC3 |
| 08B9 | n(A0E00008): STR R0, SP, 8H |
| IF of # NIL THENo Files.Set(ir,p if,q 0)r;s ReadCode(ir,t code,u size,v start,w nofimps,x res)y;z |
| 08BA | o(80E00008): LDR R0, SP, 8H |
| 08BB | o(E1000073): BEQ 115 [092FH] |
| 08BC | p(40E8000C): ADD R0, SP, CH |
| 08BD | p .FIXUP D |
| 08BD | p(8D200012): LDR SB, MT, MOD2 [Files] |
| 08BE | p(41D80001): ADD R1, SB, VAR1 |
| 08BF | q(82E00004): LDR R2, SP, 4H |
| 08C0 | r(43000000): MOV R3, R0, 0H |
| 08C1 | s .FIXUP P |
| 08C1 | s(F720B009): BL MOD2 [Files] PROC11 |
| 08C2 | t(40E8000C): ADD R0, SP, CH |
| 08C3 | t .FIXUP D |
| 08C3 | t(8D200006): LDR SB, MT, MOD2 [Files] |
| 08C4 | t(41D80001): ADD R1, SB, VAR1 |
| 08C5 | u(42E8003C): ADD R2, SP, 3CH |
| 08C6 | u(43001F40): MOV R3, R0, 1F40H |
| 08C7 | v(44E87D40): ADD R4, SP, 7D40H |
| 08C8 | w(45E87D44): ADD R5, SP, 7D44H |
| 08C9 | x(46E87D48): ADD R6, SP, 7D48H |
| 08CA | y(47E87D4C): ADD R7, SP, 7D4CH |
| 08CB | z(F7FFFD90): BL -624 [065CH] |
| IF res = 0 THENa |
| 08CC | a(80E07D4C): LDR R0, SP, 7D4CH |
| 08CD | a(E900004A): BNE 74 [0918H] |
| IF nofimps = 0 THENb Files.Set(or,c of,d 0)e;f i := 0;g |
| 08CE | b(80E07D48): LDR R0, SP, 7D48H |
| 08CF | b(E900003F): BNE 63 [090FH] |
| 08D0 | c(40E80024): ADD R0, SP, 24H |
| 08D1 | c .FIXUP D |
| 08D1 | c(8D20000E): LDR SB, MT, MOD2 [Files] |
| 08D2 | c(41D80001): ADD R1, SB, VAR1 |
| 08D3 | d(82E00008): LDR R2, SP, 8H |
| 08D4 | e(43000000): MOV R3, R0, 0H |
| 08D5 | f .FIXUP P |
| 08D5 | f(F720B014): BL MOD2 [Files] PROC11 |
| 08D6 | g(40000000): MOV R0, R0, 0H |
| 08D7 | g(A0E07D3C): STR R0, SP, 7D3CH |
| Texts.WriteInt(W,h size*4,i 6)j;k Texts.WriteInt(W,l start,m 6)n;o |
| 08D8 | h .FIXUP D |
| 08D8 | h(8D000007): LDR SB, MT, MOD0 [Boot] |
| 08D9 | h(40D80070): ADD R0, SB, 70H [data] |
| 08DA | h .FIXUP D |
| 08DA | h(8D400002): LDR SB, MT, MOD4 [Texts] |
| 08DB | h(41D80005): ADD R1, SB, VAR5 |
| 08DC | i(82E07D40): LDR R2, SP, 7D40H |
| 08DD | i(42210002): LSL R2, R2, 2H |
| 08DE | j(43000006): MOV R3, R0, 6H |
| 08DF | k .FIXUP P |
| 08DF | k(F741E00A): BL MOD4 [Texts] PROC30 |
| 08E0 | l .FIXUP D |
| 08E0 | l(8D000006): LDR SB, MT, MOD0 [Boot] |
| 08E1 | l(40D80070): ADD R0, SB, 70H [data] |
| 08E2 | l .FIXUP D |
| 08E2 | l(8D400002): LDR SB, MT, MOD4 [Texts] |
| 08E3 | l(41D80005): ADD R1, SB, VAR5 |
| 08E4 | m(82E07D44): LDR R2, SP, 7D44H |
| 08E5 | n(43000006): MOV R3, R0, 6H |
| 08E6 | o .FIXUP P |
| 08E6 | o(F741E007): BL MOD4 [Texts] PROC30 |
| Files.WriteInt(or,p size*4)q;r Files.WriteInt(or,s start)t;u (*prefix*) |
| 08E7 | p(40E80024): ADD R0, SP, 24H |
| 08E8 | p .FIXUP D |
| 08E8 | p(8D200006): LDR SB, MT, MOD2 [Files] |
| 08E9 | p(41D80001): ADD R1, SB, VAR1 |
| 08EA | q(82E07D40): LDR R2, SP, 7D40H |
| 08EB | q(42210002): LSL R2, R2, 2H |
| 08EC | r .FIXUP P |
| 08EC | r(F7219006): BL MOD2 [Files] PROC25 |
| 08ED | s(40E80024): ADD R0, SP, 24H |
| 08EE | s .FIXUP D |
| 08EE | s(8D200006): LDR SB, MT, MOD2 [Files] |
| 08EF | s(41D80001): ADD R1, SB, VAR1 |
| 08F0 | t(82E07D44): LDR R2, SP, 7D44H |
| 08F1 | u .FIXUP P |
| 08F1 | u(F7219005): BL MOD2 [Files] PROC25 |
| WHILE i < size DOv Files.WriteInt(or,w code[i]x)y;z INC(i) ENDa ; |
| 08F2 | v(80E07D3C): LDR R0, SP, 7D3CH |
| 08F3 | v(81E07D40): LDR R1, SP, 7D40H |
| 08F4 | v(00090001): SUB R0, R0, R1 |
| 08F5 | v(ED00000E): BGE 14 [0904H] |
| 08F6 | w(40E80024): ADD R0, SP, 24H |
| 08F7 | w .FIXUP D |
| 08F7 | w(8D200009): LDR SB, MT, MOD2 [Files] |
| 08F8 | w(41D80001): ADD R1, SB, VAR1 |
| 08F9 | x(82E07D3C): LDR R2, SP, 7D3CH |
| 08FA | x(43291F40): SUB R3, R2, 1F40H |
| 08FB | x(DA42561C): BLCC MT [trap=1, pos=16982] |
| 08FC | x(42210002): LSL R2, R2, 2H |
| 08FD | x(02E80002): ADD R2, SP, R2 |
| 08FE | y(8220003C): LDR R2, R2, 3CH |
| 08FF | z .FIXUP P |
| 08FF | z(F721900E): BL MOD2 [Files] PROC25 |
| 0900 | a(80E07D3C): LDR R0, SP, 7D3CH |
| 0901 | a(40080001): ADD R0, R0, 1H |
| 0902 | a(A0E07D3C): STR R0, SP, 7D3CH |
| 0903 | a(E7FFFFEE): B -18 [08F2H] |
| Files.Register(of)b;c Texts.WriteString(W,d " done")e |
| 0904 | b(80E00008): LDR R0, SP, 8H |
| 0905 | c .FIXUP P |
| 0905 | c(F7204006): BL MOD2 [Files] PROC4 |
| 0906 | d .FIXUP D |
| 0906 | d(8D00000F): LDR SB, MT, MOD0 [Boot] |
| 0907 | d(40D80070): ADD R0, SB, 70H [data] |
| 0908 | d .FIXUP D |
| 0908 | d(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0909 | d(41D80005): ADD R1, SB, VAR5 |
| 090A | e .FIXUP D |
| 090A | e(8D000002): LDR SB, MT, MOD0 [Boot] |
| 090B | e(42D8026C): ADD R2, SB, 26CH [" done"] |
| 090C | e(43000007): MOV R3, R0, 7H |
| ELSEf Textsg.WriteString(W,h " imports not allowed")i |
| 090D | f .FIXUP P |
| 090D | f(F741D008): BL MOD4 [Texts] PROC29 |
| 090E | g(E7000008): B 8 [0917H] |
| 090F | h .FIXUP D |
| 090F | h(8D000005): LDR SB, MT, MOD0 [Boot] |
| 0910 | h(40D80070): ADD R0, SB, 70H [data] |
| 0911 | h .FIXUP D |
| 0911 | h(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0912 | h(41D80005): ADD R1, SB, VAR5 |
| 0913 | i .FIXUP D |
| 0913 | i(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0914 | i(42D80274): ADD R2, SB, 274H [" imports not allowed"] |
| 0915 | i(43000016): MOV R3, R0, 16H |
| ENDj |
| 0916 | j .FIXUP P |
| 0916 | j(F741D009): BL MOD4 [Texts] PROC29 |
| ELSIF resk = 1 THENl Texts.WriteString(W,m " input file format error")n |
| 0917 | k(E7000017): B 23 [092FH] |
| 0918 | l(80E07D4C): LDR R0, SP, 7D4CH |
| 0919 | l(40090001): SUB R0, R0, 1H |
| 091A | l(E9000009): BNE 9 [0924H] |
| 091B | m .FIXUP D |
| 091B | m(8D000008): LDR SB, MT, MOD0 [Boot] |
| 091C | m(40D80070): ADD R0, SB, 70H [data] |
| 091D | m .FIXUP D |
| 091D | m(8D400002): LDR SB, MT, MOD4 [Texts] |
| 091E | m(41D80005): ADD R1, SB, VAR5 |
| 091F | n .FIXUP D |
| 091F | n(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0920 | n(42D8028C): ADD R2, SB, 28CH [" input file format error"] |
| 0921 | n(4300001A): MOV R3, R0, 1AH |
| ELSIFo resp = 2 THENq Texts.WriteString(W,r " program too long")s |
| 0922 | o .FIXUP P |
| 0922 | o(F741D00C): BL MOD4 [Texts] PROC29 |
| 0923 | p(E700000B): B 11 [092FH] |
| 0924 | q(80E07D4C): LDR R0, SP, 7D4CH |
| 0925 | q(40090002): SUB R0, R0, 2H |
| 0926 | q(E9000008): BNE 8 [092FH] |
| 0927 | r .FIXUP D |
| 0927 | r(8D000008): LDR SB, MT, MOD0 [Boot] |
| 0928 | r(40D80070): ADD R0, SB, 70H [data] |
| 0929 | r .FIXUP D |
| 0929 | r(8D400002): LDR SB, MT, MOD4 [Texts] |
| 092A | r(41D80005): ADD R1, SB, VAR5 |
| 092B | s .FIXUP D |
| 092B | s(8D000002): LDR SB, MT, MOD0 [Boot] |
| 092C | s(42D802A8): ADD R2, SB, 2A8H [" program too long"] |
| 092D | s(43000013): MOV R3, R0, 13H |
| ENDt |
| 092E | t .FIXUP P |
| 092E | t(F741D00C): BL MOD4 [Texts] PROC29 |
| END |
| ELSE Textsu.WriteString(W,v " input file not found")w |
| 092F | u(E7000008): B 8 [0938H] |
| 0930 | v .FIXUP D |
| 0930 | v(8D000005): LDR SB, MT, MOD0 [Boot] |
| 0931 | v(40D80070): ADD R0, SB, 70H [data] |
| 0932 | v .FIXUP D |
| 0932 | v(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0933 | v(41D80005): ADD R1, SB, VAR5 |
| 0934 | w .FIXUP D |
| 0934 | w(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0935 | w(42D802BC): ADD R2, SB, 2BCH [" input file not found"] |
| 0936 | w(43000017): MOV R3, R0, 17H |
| ENDx |
| 0937 | x .FIXUP P |
| 0937 | x(F741D009): BL MOD4 [Texts] PROC29 |
| END |
| END ; |
| IF res = -1 THENy Texts.WriteString(W,z "Usage: Boot.WriteCode M.rsc M.code")a ENDb ; |
| 0938 | y(80E07D4C): LDR R0, SP, 7D4CH |
| 0939 | y(5009FFFF): SUB R0, R0, FFFFFFFFH |
| 093A | y(E9000008): BNE 8 [0943H] |
| 093B | z .FIXUP D |
| 093B | z(8D000007): LDR SB, MT, MOD0 [Boot] |
| 093C | z(40D80070): ADD R0, SB, 70H [data] |
| 093D | z .FIXUP D |
| 093D | z(8D400002): LDR SB, MT, MOD4 [Texts] |
| 093E | z(41D80005): ADD R1, SB, VAR5 |
| 093F | a .FIXUP D |
| 093F | a(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0940 | a(42D802D4): ADD R2, SB, 2D4H ["Usage: Boot.WriteCode M.rsc M.code"] |
| 0941 | a(43000023): MOV R3, R0, 23H |
| 0942 | b .FIXUP P |
| 0942 | b(F741D00B): BL MOD4 [Texts] PROC29 |
| Texts.WriteLn(W)c;d Texts.Append(Oberon.Log,e W.buf)f |
| 0943 | c .FIXUP D |
| 0943 | c(8D000004): LDR SB, MT, MOD0 [Boot] |
| 0944 | c(40D80070): ADD R0, SB, 70H [data] |
| 0945 | c .FIXUP D |
| 0945 | c(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0946 | c(41D80005): ADD R1, SB, VAR5 |
| 0947 | d .FIXUP P |
| 0947 | d(F741C005): BL MOD4 [Texts] PROC28 |
| 0948 | e .FIXUP D |
| 0948 | e(8D600003): LDR SB, MT, MOD6 [Oberon] |
| 0949 | e(80D0000D): LDR R0, SB, VAR13 |
| 094A | f .FIXUP D |
| 094A | f(8D000002): LDR SB, MT, MOD0 [Boot] |
| 094B | f(81D00070): LDR R1, SB, 70H [data] |
| ENDg WriteCode; |
| 094C | g .FIXUP P |
| 094C | g(F740E005): BL MOD4 [Texts] PROC14 |
| 094D | g(8FE00000): LDR LNK, SP, 0H |
| 094E | g(4EE87DE4): ADD SP, SP, 7DE4H |
| 094F | g(C700000F): B LNK |
| |
| PROCEDURE MakeStream(VAR ir, or: Files.Rider; blksize, destadr: INTEGER); |
| VAR i, a: INTEGER; b: BYTE; |
| BEGINh Files.ReadByte(ir,i b)j;k i := 0;l a := destadr;m |
| 0950 | h(4EE90028): SUB SP, SP, 28H |
| 0951 | h(AFE00000): STR LNK, SP, 0H |
| 0952 | h(A0E00004): STR R0, SP, 4H |
| 0953 | h(A1E00008): STR R1, SP, 8H |
| 0954 | h(A2E0000C): STR R2, SP, CH |
| 0955 | h(A3E00010): STR R3, SP, 10H |
| 0956 | h(A4E00014): STR R4, SP, 14H |
| 0957 | h(A5E00018): STR R5, SP, 18H |
| 0958 | i(80E00004): LDR R0, SP, 4H |
| 0959 | i(81E00008): LDR R1, SP, 8H |
| 095A | j(42E80024): ADD R2, SP, 24H |
| 095B | k .FIXUP P |
| 095B | k(F720E00F): BL MOD2 [Files] PROC14 |
| 095C | l(40000000): MOV R0, R0, 0H |
| 095D | l(A0E0001C): STR R0, SP, 1CH |
| 095E | m(80E00018): LDR R0, SP, 18H |
| 095F | m(A0E00020): STR R0, SP, 20H |
| WHILE ~ir.eof DOn |
| 0960 | n(80E00004): LDR R0, SP, 4H |
| 0961 | n(90000000): LDR R0, R0, 0H |
| 0962 | n(E9000021): BNE 33 [0984H] |
| IF i MOD blksize =o 0 THENp i := 0;q |
| 0963 | o(80E00014): LDR R0, SP, 14H |
| 0964 | o(D6457D6C): BLLE MT [trap=6, pos=17789] |
| 0965 | o(81E0001C): LDR R1, SP, 1CH |
| 0966 | o(001B0000): DIV R0, R1, R0 |
| 0967 | o(20000000): MOV' R0, R0, R0 |
| 0968 | p(40090000): SUB R0, R0, 0H |
| 0969 | p(E900000E): BNE 14 [0978H] |
| 096A | q(40000000): MOV R0, R0, 0H |
| 096B | q(A0E0001C): STR R0, SP, 1CH |
| Files.WriteInt(or,r blksize)s;t Files.WriteInt(or,u a)v;w INC(a, blksize) |
| 096C | r(80E0000C): LDR R0, SP, CH |
| 096D | r(81E00010): LDR R1, SP, 10H |
| 096E | s(82E00014): LDR R2, SP, 14H |
| 096F | t .FIXUP P |
| 096F | t(F7219014): BL MOD2 [Files] PROC25 |
| 0970 | u(80E0000C): LDR R0, SP, CH |
| 0971 | u(81E00010): LDR R1, SP, 10H |
| 0972 | v(82E00020): LDR R2, SP, 20H |
| 0973 | w .FIXUP P |
| 0973 | w(F7219004): BL MOD2 [Files] PROC25 |
| ENDx ; |
| 0974 | x(80E00020): LDR R0, SP, 20H |
| 0975 | x(81E00014): LDR R1, SP, 14H |
| 0976 | x(00080001): ADD R0, R0, R1 |
| 0977 | x(A0E00020): STR R0, SP, 20H |
| Files.WriteByte(or,y b)z;a INC(i);b Files.ReadByte(ir,c b)d |
| 0978 | y(80E0000C): LDR R0, SP, CH |
| 0979 | y(81E00010): LDR R1, SP, 10H |
| 097A | z(92E00024): LDR R2, SP, 24H |
| 097B | a .FIXUP P |
| 097B | a(F7216008): BL MOD2 [Files] PROC22 |
| 097C | b(80E0001C): LDR R0, SP, 1CH |
| 097D | b(40080001): ADD R0, R0, 1H |
| 097E | b(A0E0001C): STR R0, SP, 1CH |
| 097F | c(80E00004): LDR R0, SP, 4H |
| 0980 | c(81E00008): LDR R1, SP, 8H |
| 0981 | d(42E80024): ADD R2, SP, 24H |
| ENDe ; |
| 0982 | e .FIXUP P |
| 0982 | e(F720E007): BL MOD2 [Files] PROC14 |
| 0983 | e(E7FFFFDC): B -36 [0960H] |
| WHILE i < blksize DOf Files.WriteByte(or,g 0)h;i INC(i) ENDj ; |
| 0984 | f(80E0001C): LDR R0, SP, 1CH |
| 0985 | f(81E00014): LDR R1, SP, 14H |
| 0986 | f(00090001): SUB R0, R0, R1 |
| 0987 | f(ED000008): BGE 8 [0990H] |
| 0988 | g(80E0000C): LDR R0, SP, CH |
| 0989 | g(81E00010): LDR R1, SP, 10H |
| 098A | h(42000000): MOV R2, R0, 0H |
| 098B | i .FIXUP P |
| 098B | i(F7216009): BL MOD2 [Files] PROC22 |
| 098C | j(80E0001C): LDR R0, SP, 1CH |
| 098D | j(40080001): ADD R0, R0, 1H |
| 098E | j(A0E0001C): STR R0, SP, 1CH |
| 098F | j(E7FFFFF4): B -12 [0984H] |
| Files.WriteInt(or,k 0)l (*size of last block*) |
| 0990 | k(80E0000C): LDR R0, SP, CH |
| 0991 | k(81E00010): LDR R1, SP, 10H |
| 0992 | l(42000000): MOV R2, R0, 0H |
| ENDm MakeStream; |
| 0993 | m .FIXUP P |
| 0993 | m(F7219008): BL MOD2 [Files] PROC25 |
| 0994 | m(8FE00000): LDR LNK, SP, 0H |
| 0995 | m(4EE80028): ADD SP, SP, 28H |
| 0996 | m(C700000F): B LNK |
| |
| PROCEDURE WriteStream*; (*convert boot file to stream format with specified block size and dest adr*) |
| VAR if, of: Files.File; ir, or: Files.Rider; |
| len, blksize, res: INTEGER; |
| name, name1: ARRAY 32 OF CHAR; |
| S: Texts.Scanner; |
| BEGINn Texts.OpenScanner(S,o Oberon.Par.text,p Oberon.Par.pos)q;r Texts.Scan(S)s;t res := -1;u |
| 0997 | n .PROC 9 |
| 0997 | n .COMMAND WriteStream |
| 0997 | n(4EE900FC): SUB SP, SP, FCH |
| 0998 | n(AFE00000): STR LNK, SP, 0H |
| 0999 | o(40E80088): ADD R0, SP, 88H |
| 099A | o .FIXUP D |
| 099A | o(8D400050): LDR SB, MT, MOD4 [Texts] |
| 099B | o(41D80003): ADD R1, SB, VAR3 |
| 099C | p .FIXUP D |
| 099C | p(8D600002): LDR SB, MT, MOD6 [Oberon] |
| 099D | p(42D8000E): ADD R2, SB, VAR14 |
| 099E | p(82200008): LDR R2, R2, 8H |
| 099F | q .FIXUP D |
| 099F | q(8D600003): LDR SB, MT, MOD6 [Oberon] |
| 09A0 | q(43D8000E): ADD R3, SB, VAR14 |
| 09A1 | q(8330000C): LDR R3, R3, CH |
| 09A2 | r .FIXUP P |
| 09A2 | r(F741500F): BL MOD4 [Texts] PROC21 |
| 09A3 | s(40E80088): ADD R0, SP, 88H |
| 09A4 | s .FIXUP D |
| 09A4 | s(8D400005): LDR SB, MT, MOD4 [Texts] |
| 09A5 | s(41D80003): ADD R1, SB, VAR3 |
| 09A6 | t .FIXUP P |
| 09A6 | t(F7416004): BL MOD4 [Texts] PROC22 |
| 09A7 | u(5000FFFF): MOV R0, R0, FFFFFFFFH |
| 09A8 | u(A0E00044): STR R0, SP, 44H |
| IF (S.class = Texts.Name)v OR (wS.class = Texts.String)x THENy name := S.s;z Texts.Scan(S)a;b |
| 09A9 | v(80E000C4): LDR R0, SP, C4H |
| 09AA | v(40090001): SUB R0, R0, 1H |
| 09AB | w(E1000003): BEQ 3 [09AFH] |
| 09AC | x(80E000C4): LDR R0, SP, C4H |
| 09AD | x(40090002): SUB R0, R0, 2H |
| 09AE | y(E90000B7): BNE 183 [0A66H] |
| 09AF | z(40E80048): ADD R0, SP, 48H |
| 09B0 | z(41E800DC): ADD R1, SP, DCH |
| 09B1 | z(42000008): MOV R2, R0, 8H |
| 09B2 | z(83100000): LDR R3, R1, 0H |
| 09B3 | z(41180004): ADD R1, R1, 4H |
| 09B4 | z(A3000000): STR R3, R0, 0H |
| 09B5 | z(40080004): ADD R0, R0, 4H |
| 09B6 | z(42290001): SUB R2, R2, 1H |
| 09B7 | z(E9FFFFFA): BNE -6 [09B2H] |
| 09B8 | a(40E80088): ADD R0, SP, 88H |
| 09B9 | a .FIXUP D |
| 09B9 | a(8D400015): LDR SB, MT, MOD4 [Texts] |
| 09BA | a(41D80003): ADD R1, SB, VAR3 |
| 09BB | b .FIXUP P |
| 09BB | b(F7416015): BL MOD4 [Texts] PROC22 |
| IF (S.class = Texts.Name)c OR (dS.class = Texts.String)e THENf name1 := S.s;g Texts.Scan(S)h;i |
| 09BC | c(80E000C4): LDR R0, SP, C4H |
| 09BD | c(40090001): SUB R0, R0, 1H |
| 09BE | d(E1000003): BEQ 3 [09C2H] |
| 09BF | e(80E000C4): LDR R0, SP, C4H |
| 09C0 | e(40090002): SUB R0, R0, 2H |
| 09C1 | f(E90000A4): BNE 164 [0A66H] |
| 09C2 | g(40E80068): ADD R0, SP, 68H |
| 09C3 | g(41E800DC): ADD R1, SP, DCH |
| 09C4 | g(42000008): MOV R2, R0, 8H |
| 09C5 | g(83100000): LDR R3, R1, 0H |
| 09C6 | g(41180004): ADD R1, R1, 4H |
| 09C7 | g(A3000000): STR R3, R0, 0H |
| 09C8 | g(40080004): ADD R0, R0, 4H |
| 09C9 | g(42290001): SUB R2, R2, 1H |
| 09CA | g(E9FFFFFA): BNE -6 [09C5H] |
| 09CB | h(40E80088): ADD R0, SP, 88H |
| 09CC | h .FIXUP D |
| 09CC | h(8D400013): LDR SB, MT, MOD4 [Texts] |
| 09CD | h(41D80003): ADD R1, SB, VAR3 |
| 09CE | i .FIXUP P |
| 09CE | i(F7416013): BL MOD4 [Texts] PROC22 |
| IF S.class = Texts.Int THENj blksize := S.i;k Texts.Scan(S)l;m |
| 09CF | j(80E000C4): LDR R0, SP, C4H |
| 09D0 | j(40090003): SUB R0, R0, 3H |
| 09D1 | j(E9000094): BNE 148 [0A66H] |
| 09D2 | k(80E000C8): LDR R0, SP, C8H |
| 09D3 | k(A0E00040): STR R0, SP, 40H |
| 09D4 | l(40E80088): ADD R0, SP, 88H |
| 09D5 | l .FIXUP D |
| 09D5 | l(8D400009): LDR SB, MT, MOD4 [Texts] |
| 09D6 | l(41D80003): ADD R1, SB, VAR3 |
| 09D7 | m .FIXUP P |
| 09D7 | m(F7416009): BL MOD4 [Texts] PROC22 |
| IF S.class = Texts.Int THENn res := 0;o Texts.WriteString(W,p " WriteStream ")q;r |
| 09D8 | n(80E000C4): LDR R0, SP, C4H |
| 09D9 | n(40090003): SUB R0, R0, 3H |
| 09DA | n(E900008B): BNE 139 [0A66H] |
| 09DB | o(40000000): MOV R0, R0, 0H |
| 09DC | o(A0E00044): STR R0, SP, 44H |
| 09DD | p .FIXUP D |
| 09DD | p(8D000008): LDR SB, MT, MOD0 [Boot] |
| 09DE | p(40D80070): ADD R0, SB, 70H [data] |
| 09DF | p .FIXUP D |
| 09DF | p(8D400002): LDR SB, MT, MOD4 [Texts] |
| 09E0 | p(41D80005): ADD R1, SB, VAR5 |
| 09E1 | q .FIXUP D |
| 09E1 | q(8D000002): LDR SB, MT, MOD0 [Boot] |
| 09E2 | q(42D802F8): ADD R2, SB, 2F8H [" WriteStream "] |
| 09E3 | q(4300000F): MOV R3, R0, FH |
| 09E4 | r .FIXUP P |
| 09E4 | r(F741D00D): BL MOD4 [Texts] PROC29 |
| Texts.WriteString(W,s name)t;u Texts.Write(W,v " ")w;x Texts.WriteString(W,y name1)z;a |
| 09E5 | s .FIXUP D |
| 09E5 | s(8D000004): LDR SB, MT, MOD0 [Boot] |
| 09E6 | s(40D80070): ADD R0, SB, 70H [data] |
| 09E7 | s .FIXUP D |
| 09E7 | s(8D400002): LDR SB, MT, MOD4 [Texts] |
| 09E8 | s(41D80005): ADD R1, SB, VAR5 |
| 09E9 | t(42E80048): ADD R2, SP, 48H |
| 09EA | t(43000020): MOV R3, R0, 20H |
| 09EB | u .FIXUP P |
| 09EB | u(F741D007): BL MOD4 [Texts] PROC29 |
| 09EC | v .FIXUP D |
| 09EC | v(8D000005): LDR SB, MT, MOD0 [Boot] |
| 09ED | v(40D80070): ADD R0, SB, 70H [data] |
| 09EE | v .FIXUP D |
| 09EE | v(8D400002): LDR SB, MT, MOD4 [Texts] |
| 09EF | v(41D80005): ADD R1, SB, VAR5 |
| 09F0 | w(42000020): MOV R2, R0, 20H |
| 09F1 | x .FIXUP P |
| 09F1 | x(F741B006): BL MOD4 [Texts] PROC27 |
| 09F2 | y .FIXUP D |
| 09F2 | y(8D000004): LDR SB, MT, MOD0 [Boot] |
| 09F3 | y(40D80070): ADD R0, SB, 70H [data] |
| 09F4 | y .FIXUP D |
| 09F4 | y(8D400002): LDR SB, MT, MOD4 [Texts] |
| 09F5 | y(41D80005): ADD R1, SB, VAR5 |
| 09F6 | z(42E80068): ADD R2, SP, 68H |
| 09F7 | z(43000020): MOV R3, R0, 20H |
| 09F8 | a .FIXUP P |
| 09F8 | a(F741D007): BL MOD4 [Texts] PROC29 |
| Texts.WriteInt(W,b blksize,c 5)d;e Texts.WriteInt(W,f S.i,g 5)h;i |
| 09F9 | b .FIXUP D |
| 09F9 | b(8D000005): LDR SB, MT, MOD0 [Boot] |
| 09FA | b(40D80070): ADD R0, SB, 70H [data] |
| 09FB | b .FIXUP D |
| 09FB | b(8D400002): LDR SB, MT, MOD4 [Texts] |
| 09FC | b(41D80005): ADD R1, SB, VAR5 |
| 09FD | c(82E00040): LDR R2, SP, 40H |
| 09FE | d(43000005): MOV R3, R0, 5H |
| 09FF | e .FIXUP P |
| 09FF | e(F741E007): BL MOD4 [Texts] PROC30 |
| 0A00 | f .FIXUP D |
| 0A00 | f(8D000005): LDR SB, MT, MOD0 [Boot] |
| 0A01 | f(40D80070): ADD R0, SB, 70H [data] |
| 0A02 | f .FIXUP D |
| 0A02 | f(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0A03 | f(41D80005): ADD R1, SB, VAR5 |
| 0A04 | g(82E000C8): LDR R2, SP, C8H |
| 0A05 | h(43000005): MOV R3, R0, 5H |
| 0A06 | i .FIXUP P |
| 0A06 | i(F741E007): BL MOD4 [Texts] PROC30 |
| IF blksize >= 0 THENj |
| 0A07 | j(80E00040): LDR R0, SP, 40H |
| 0A08 | j(40090000): SUB R0, R0, 0H |
| 0A09 | j(E5000054): BLT 84 [0A5EH] |
| IF S.i >= 0 THENk if := Files.Old(name)l;m |
| 0A0A | k(80E000C8): LDR R0, SP, C8H |
| 0A0B | k(40090000): SUB R0, R0, 0H |
| 0A0C | k(E5000048): BLT 72 [0A55H] |
| 0A0D | l(40E80048): ADD R0, SP, 48H |
| 0A0E | l(41000020): MOV R1, R0, 20H |
| 0A0F | m .FIXUP P |
| 0A0F | m(F7202009): BL MOD2 [Files] PROC2 |
| 0A10 | m(A0E00004): STR R0, SP, 4H |
| IF if # NIL THENn len := Files.Length(if)o;p |
| 0A11 | n(80E00004): LDR R0, SP, 4H |
| 0A12 | n(E1000039): BEQ 57 [0A4CH] |
| 0A13 | o(80E00004): LDR R0, SP, 4H |
| 0A14 | p .FIXUP P |
| 0A14 | p(F7209005): BL MOD2 [Files] PROC9 |
| 0A15 | p(A0E0003C): STR R0, SP, 3CH |
| IF len > 0 THENq of := Files.New(name1)r;s |
| 0A16 | q(80E0003C): LDR R0, SP, 3CH |
| 0A17 | q(40090000): SUB R0, R0, 0H |
| 0A18 | q(E600002A): BLE 42 [0A43H] |
| 0A19 | r(40E80068): ADD R0, SP, 68H |
| 0A1A | r(41000020): MOV R1, R0, 20H |
| 0A1B | s .FIXUP P |
| 0A1B | s(F7203007): BL MOD2 [Files] PROC3 |
| 0A1C | s(A0E00008): STR R0, SP, 8H |
| IF of # NIL THENt |
| 0A1D | t(80E00008): LDR R0, SP, 8H |
| 0A1E | t(E1000023): BEQ 35 [0A42H] |
| IF blksize = 0 THENu blksize := len ENDv ; |
| 0A1F | u(80E00040): LDR R0, SP, 40H |
| 0A20 | u(E9000002): BNE 2 [0A23H] |
| 0A21 | v(80E0003C): LDR R0, SP, 3CH |
| 0A22 | v(A0E00040): STR R0, SP, 40H |
| Files.Set(ir,w if,x 0)y;z Files.Set(or,a of,b 0)c;d MakeStream(ir,e or,f blksize,g S.i)h;i |
| 0A23 | w(40E8000C): ADD R0, SP, CH |
| 0A24 | w .FIXUP D |
| 0A24 | w(8D200022): LDR SB, MT, MOD2 [Files] |
| 0A25 | w(41D80001): ADD R1, SB, VAR1 |
| 0A26 | x(82E00004): LDR R2, SP, 4H |
| 0A27 | y(43000000): MOV R3, R0, 0H |
| 0A28 | z .FIXUP P |
| 0A28 | z(F720B00D): BL MOD2 [Files] PROC11 |
| 0A29 | a(40E80024): ADD R0, SP, 24H |
| 0A2A | a .FIXUP D |
| 0A2A | a(8D200006): LDR SB, MT, MOD2 [Files] |
| 0A2B | a(41D80001): ADD R1, SB, VAR1 |
| 0A2C | b(82E00008): LDR R2, SP, 8H |
| 0A2D | c(43000000): MOV R3, R0, 0H |
| 0A2E | d .FIXUP P |
| 0A2E | d(F720B006): BL MOD2 [Files] PROC11 |
| 0A2F | e(40E8000C): ADD R0, SP, CH |
| 0A30 | e .FIXUP D |
| 0A30 | e(8D200006): LDR SB, MT, MOD2 [Files] |
| 0A31 | e(41D80001): ADD R1, SB, VAR1 |
| 0A32 | f(42E80024): ADD R2, SP, 24H |
| 0A33 | f .FIXUP D |
| 0A33 | f(8D200003): LDR SB, MT, MOD2 [Files] |
| 0A34 | f(43D80001): ADD R3, SB, VAR1 |
| 0A35 | g(84E00040): LDR R4, SP, 40H |
| 0A36 | h(85E000C8): LDR R5, SP, C8H |
| 0A37 | i(F7FFFF18): BL -232 [0950H] |
| Files.Register(of)j;k Texts.WriteString(W,l " done")m |
| 0A38 | j(80E00008): LDR R0, SP, 8H |
| 0A39 | k .FIXUP P |
| 0A39 | k(F720400B): BL MOD2 [Files] PROC4 |
| 0A3A | l .FIXUP D |
| 0A3A | l(8D000007): LDR SB, MT, MOD0 [Boot] |
| 0A3B | l(40D80070): ADD R0, SB, 70H [data] |
| 0A3C | l .FIXUP D |
| 0A3C | l(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0A3D | l(41D80005): ADD R1, SB, VAR5 |
| 0A3E | m .FIXUP D |
| 0A3E | m(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0A3F | m(42D80308): ADD R2, SB, 308H [" done"] |
| 0A40 | m(43000007): MOV R3, R0, 7H |
| ENDn |
| 0A41 | n .FIXUP P |
| 0A41 | n(F741D008): BL MOD4 [Texts] PROC29 |
| ELSE Textso.WriteString(W,p " input file empty")q |
| 0A42 | o(E7000008): B 8 [0A4BH] |
| 0A43 | p .FIXUP D |
| 0A43 | p(8D000005): LDR SB, MT, MOD0 [Boot] |
| 0A44 | p(40D80070): ADD R0, SB, 70H [data] |
| 0A45 | p .FIXUP D |
| 0A45 | p(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0A46 | p(41D80005): ADD R1, SB, VAR5 |
| 0A47 | q .FIXUP D |
| 0A47 | q(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0A48 | q(42D80310): ADD R2, SB, 310H [" input file empty"] |
| 0A49 | q(43000013): MOV R3, R0, 13H |
| ENDr |
| 0A4A | r .FIXUP P |
| 0A4A | r(F741D009): BL MOD4 [Texts] PROC29 |
| ELSE Textss.WriteString(W,t " input file not found")u |
| 0A4B | s(E7000008): B 8 [0A54H] |
| 0A4C | t .FIXUP D |
| 0A4C | t(8D000005): LDR SB, MT, MOD0 [Boot] |
| 0A4D | t(40D80070): ADD R0, SB, 70H [data] |
| 0A4E | t .FIXUP D |
| 0A4E | t(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0A4F | t(41D80005): ADD R1, SB, VAR5 |
| 0A50 | u .FIXUP D |
| 0A50 | u(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0A51 | u(42D80324): ADD R2, SB, 324H [" input file not found"] |
| 0A52 | u(43000017): MOV R3, R0, 17H |
| ENDv |
| 0A53 | v .FIXUP P |
| 0A53 | v(F741D009): BL MOD4 [Texts] PROC29 |
| ELSE Textsw.WriteString(W,x " destaddr must be >= 0")y |
| 0A54 | w(E7000008): B 8 [0A5DH] |
| 0A55 | x .FIXUP D |
| 0A55 | x(8D000005): LDR SB, MT, MOD0 [Boot] |
| 0A56 | x(40D80070): ADD R0, SB, 70H [data] |
| 0A57 | x .FIXUP D |
| 0A57 | x(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0A58 | x(41D80005): ADD R1, SB, VAR5 |
| 0A59 | y .FIXUP D |
| 0A59 | y(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0A5A | y(42D8033C): ADD R2, SB, 33CH [" destaddr must be >= 0"] |
| 0A5B | y(43000018): MOV R3, R0, 18H |
| ENDz |
| 0A5C | z .FIXUP P |
| 0A5C | z(F741D009): BL MOD4 [Texts] PROC29 |
| ELSE Textsa.WriteString(W,b " blocksize must be >= 0")c |
| 0A5D | a(E7000008): B 8 [0A66H] |
| 0A5E | b .FIXUP D |
| 0A5E | b(8D000005): LDR SB, MT, MOD0 [Boot] |
| 0A5F | b(40D80070): ADD R0, SB, 70H [data] |
| 0A60 | b .FIXUP D |
| 0A60 | b(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0A61 | b(41D80005): ADD R1, SB, VAR5 |
| 0A62 | c .FIXUP D |
| 0A62 | c(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0A63 | c(42D80354): ADD R2, SB, 354H [" blocksize must be >= 0"] |
| 0A64 | c(43000019): MOV R3, R0, 19H |
| ENDd |
| 0A65 | d .FIXUP P |
| 0A65 | d(F741D009): BL MOD4 [Texts] PROC29 |
| END |
| END |
| END |
| END ; |
| IF res = -1 THENe Texts.WriteString(W,f "Usage: Boot.WriteStream M.bin M.stream blocksize destaddr")g ENDh ; |
| 0A66 | e(80E00044): LDR R0, SP, 44H |
| 0A67 | e(5009FFFF): SUB R0, R0, FFFFFFFFH |
| 0A68 | e(E9000008): BNE 8 [0A71H] |
| 0A69 | f .FIXUP D |
| 0A69 | f(8D000007): LDR SB, MT, MOD0 [Boot] |
| 0A6A | f(40D80070): ADD R0, SB, 70H [data] |
| 0A6B | f .FIXUP D |
| 0A6B | f(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0A6C | f(41D80005): ADD R1, SB, VAR5 |
| 0A6D | g .FIXUP D |
| 0A6D | g(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0A6E | g(42D80370): ADD R2, SB, 370H ["Usage: Boot.WriteStream M.bin M.stream blocksize destaddr"] |
| 0A6F | g(4300003A): MOV R3, R0, 3AH |
| 0A70 | h .FIXUP P |
| 0A70 | h(F741D00B): BL MOD4 [Texts] PROC29 |
| Texts.WriteLn(W)i;j Texts.Append(Oberon.Log,k W.buf)l |
| 0A71 | i .FIXUP D |
| 0A71 | i(8D000004): LDR SB, MT, MOD0 [Boot] |
| 0A72 | i(40D80070): ADD R0, SB, 70H [data] |
| 0A73 | i .FIXUP D |
| 0A73 | i(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0A74 | i(41D80005): ADD R1, SB, VAR5 |
| 0A75 | j .FIXUP P |
| 0A75 | j(F741C005): BL MOD4 [Texts] PROC28 |
| 0A76 | k .FIXUP D |
| 0A76 | k(8D600003): LDR SB, MT, MOD6 [Oberon] |
| 0A77 | k(80D0000D): LDR R0, SB, VAR13 |
| 0A78 | l .FIXUP D |
| 0A78 | l(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0A79 | l(81D00070): LDR R1, SB, 70H [data] |
| ENDm WriteStream; |
| 0A7A | m .FIXUP P |
| 0A7A | m(F740E005): BL MOD4 [Texts] PROC14 |
| 0A7B | m(8FE00000): LDR LNK, SP, 0H |
| 0A7C | m(4EE800FC): ADD SP, SP, FCH |
| 0A7D | m(C700000F): B LNK |
| |
| BEGINn Texts.OpenWriter(W)o;p Texts.WriteString(W,q "OR Boot linker/loader AP 1.9.18")r;s |
| 0A7E | n .PROC 0 |
| 0A7E | n .ENTRYPOINT |
| 0A7E | n(4EE90004): SUB SP, SP, 4H |
| 0A7F | n(AFE00000): STR LNK, SP, 0H |
| 0A80 | o .FIXUP D |
| 0A80 | o(8D000008): LDR SB, MT, MOD0 [Boot] |
| 0A81 | o(40D80070): ADD R0, SB, 70H [data] |
| 0A82 | o .FIXUP D |
| 0A82 | o(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0A83 | o(41D80005): ADD R1, SB, VAR5 |
| 0A84 | p .FIXUP P |
| 0A84 | p(F741700A): BL MOD4 [Texts] PROC23 |
| 0A85 | q .FIXUP D |
| 0A85 | q(8D000003): LDR SB, MT, MOD0 [Boot] |
| 0A86 | q(40D80070): ADD R0, SB, 70H [data] |
| 0A87 | q .FIXUP D |
| 0A87 | q(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0A88 | q(41D80005): ADD R1, SB, VAR5 |
| 0A89 | r .FIXUP D |
| 0A89 | r(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0A8A | r(42D803AC): ADD R2, SB, 3ACH ["OR Boot linker/loader AP 1.9.18"] |
| 0A8B | r(43000021): MOV R3, R0, 21H |
| 0A8C | s .FIXUP P |
| 0A8C | s(F741D008): BL MOD4 [Texts] PROC29 |
| Texts.WriteLn(W)t;u Texts.Append(Oberon.Log,v W.buf)w;x limit := Kernel.heapOrg;y DEC(limit, 8000H) |
| 0A8D | t .FIXUP D |
| 0A8D | t(8D000004): LDR SB, MT, MOD0 [Boot] |
| 0A8E | t(40D80070): ADD R0, SB, 70H [data] |
| 0A8F | t .FIXUP D |
| 0A8F | t(8D400002): LDR SB, MT, MOD4 [Texts] |
| 0A90 | t(41D80005): ADD R1, SB, VAR5 |
| 0A91 | u .FIXUP P |
| 0A91 | u(F741C005): BL MOD4 [Texts] PROC28 |
| 0A92 | v .FIXUP D |
| 0A92 | v(8D600003): LDR SB, MT, MOD6 [Oberon] |
| 0A93 | v(80D0000D): LDR R0, SB, VAR13 |
| 0A94 | w .FIXUP D |
| 0A94 | w(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0A95 | w(81D00070): LDR R1, SB, 70H [data] |
| 0A96 | x .FIXUP P |
| 0A96 | x(F740E005): BL MOD4 [Texts] PROC14 |
| 0A97 | y .FIXUP D |
| 0A97 | y(8D100003): LDR SB, MT, MOD1 [Kernel] |
| 0A98 | y(80D00003): LDR R0, SB, VAR3 |
| 0A99 | y .FIXUP D |
| 0A99 | y(8D000002): LDR SB, MT, MOD0 [Boot] |
| 0A9A | y(A0D00028): STR R0, SB, 28H [data] |
| ENDz Boot.a |
| 0A9B | z(40D80028): ADD R0, SB, 28H |
| 0A9C | z(81000000): LDR R1, R0, 0H |
| 0A9D | z(41198000): SUB R1, R1, FFFF8000H |
| 0A9E | z(A1000000): STR R1, R0, 0H |
| 0A9F | a(8FE00000): LDR LNK, SP, 0H |
| 0AA0 | a(4EE80004): ADD SP, SP, 4H |
| 0AA1 | a(C700000F): B LNK |