| 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 |