Used Exports

Kernel: AllocSector GetSector MarkSector PutSector

MODULE FileDir; (*NW 12.1.86 / 23.8.90 / 15.8.2013*)
.IMPORT Kernel (KEY 97E012DD)
(*File Directory is a B-tree with its root page at DirRootAdr.
Each entry contains a file name and the disk address of the file's head sector*)
CONST FnLength* = 32;
SecTabSize* = 64;
ExTabSize* = 12;
SectorSize* = 1024;
IndexSize* = SectorSize DIV 4;
HeaderSize* = 352;
DirRootAdr* = 29;
DirPgSize* = 24;
N = DirPgSize DIV 2;
DirMark* = 9B1EA38DH;
HeaderMark* = 9BA71D86H;
FillerSize = 52;
FileName* = ARRAY FnLength OF CHAR;
SectorTable* = ARRAY SecTabSize OF DiskAdr;
ExtensionTable* = ARRAY ExTabSize OF DiskAdr;
EntryHandler* = PROCEDURE (name: FileName; sec: DiskAdr; VAR continue: BOOLEAN);
FileHeader* =
RECORD (*first page of each file on disk*)
mark*: INTEGER;
name*: FileName;
aleng*, bleng*, date*: INTEGER;
ext*: ExtensionTable;
sec*: SectorTable;
fill: ARRAY SectorSize - HeaderSize OF BYTE;
FileHd* = POINTER TO FileHeader;
IndexSector* = ARRAY IndexSize OF DiskAdr;
DataSector* = ARRAY SectorSize OF BYTE;
DirEntry* = (*B-tree node*)
name*: FileName;
adr*: DiskAdr; (*sec no of file header*)
p*: DiskAdr (*sec no of descendant in directory*)
DirPage* =
p0*: DiskAdr; (*sec no of left descendant in directory*)
fill: ARRAY FillerSize OF BYTE;
e*: ARRAY DirPgSize OF DirEntry
(*Exported procedures: Search, Insert, Delete, Enumerate, Init*)
PROCEDURE Search*(name: FileName; VAR A: DiskAdr);
VAR i, L, R: INTEGER; dadr: DiskAdr;
a: DirPage;
BEGINa dadr := DirRootAdr;b A := 0;c
0000a .PROC 1
0000a .PROC 4
0000a(4EE9041C): SUB SP, SP, 41CH
0001a(AFE00000): STR LNK, SP, 0H
0002a(A0E00004): STR R0, SP, 4H
0003a(A1E00008): STR R1, SP, 8H
0004b(4000001D): MOV R0, R0, 1DH
0005b .PROC 2
0005b(A0E00018): STR R0, SP, 18H
0006c(40000000): MOV R0, R0, 0H
0007c(81E00008): LDR R1, SP, 8H
0008c(A0100000): STR R0, R1, 0H
REPEAT Kernel.GetSector(dadr,d a)e;f ASSERT(a.mark = DirMark)g;h
0009d(80E00018): LDR R0, SP, 18H
000Ae .PROC 3
000Ae(41E8001C): ADD R1, SP, 1CH
000Bf .FIXUP P
000Bf(F710F00B): BL MOD1 [Kernel] PROC15
000Cg(80E0001C): LDR R0, SP, 1CH
000Dg(71009B1E): MOV' R1, R0, FFFF9B1EH
000Eg(4116A38D): IOR R1, R1, FFFFA38DH
000Fg(00090001): SUB R0, R0, R1
0010h(D907B57C): BLNE MT [trap=7, pos=1973]
L := 0;i R := a.m;j (*binary search*)
0011i(40000000): MOV R0, R0, 0H
0012i(A0E00010): STR R0, SP, 10H
0013j(80E00020): LDR R0, SP, 20H
0014j(A0E00014): STR R0, SP, 14H
0015k(80E00010): LDR R0, SP, 10H
0016k(81E00014): LDR R1, SP, 14H
0017k(00090001): SUB R0, R0, R1
0018k(ED00001C): BGE 28 [0035H]
i := (L+R)l DIV 2;m
0019l(80E00010): LDR R0, SP, 10H
001Al(81E00014): LDR R1, SP, 14H
001Bl(00080001): ADD R0, R0, R1
001Cm(40020001): ASR R0, R0, 1H
001Dm(A0E0000C): STR R0, SP, CH
IF name <= a.e[i] THENo R := i ELSEp Lq := i+1 ENDr
001En(80E0000C): LDR R0, SP, CH
001Fn(41090018): SUB R1, R0, 18H
0020n(DA08281C): BLCC MT [trap=1, pos=2088]
0021n(400A0028): MUL R0, R0, 28H
0022n(00E80000): ADD R0, SP, R0
0023o(81E00004): LDR R1, SP, 4H
0024o(4008005C): ADD R0, R0, 5CH
0025o(92100000): LDR R2, R1, 0H
0026o(41180001): ADD R1, R1, 1H
0027o(93000000): LDR R3, R0, 0H
0028o(40080001): ADD R0, R0, 1H
0029o(04290003): SUB R4, R2, R3
002Ao(E9000002): BNE 2 [002DH]
002Bo(44290000): SUB R4, R2, 0H
002Co(E9FFFFF8): BNE -8 [0025H]
002Do(EE000003): BGT 3 [0031H]
002Ep(80E0000C): LDR R0, SP, CH
002Fp(A0E00014): STR R0, SP, 14H
0030q(E7000003): B 3 [0034H]
0031r(80E0000C): LDR R0, SP, CH
0032r(40080001): ADD R0, R0, 1H
0033r(A0E00010): STR R0, SP, 10H
ENDs ;
0034s(E7FFFFE0): B -32 [0015H]
IF (R < a.m)t & (uname = a.e[R] THENx A := a.e[R]y.adr (*found*)
0035t(80E00014): LDR R0, SP, 14H
0036t(81E00020): LDR R1, SP, 20H
0037t(00090001): SUB R0, R0, R1
0038u(ED000019): BGE 25 [0052H]
0039v(80E00014): LDR R0, SP, 14H
003Av(41090018): SUB R1, R0, 18H
003Bv(DA087B1C): BLCC MT [trap=1, pos=2171]
003Cv(400A0028): MUL R0, R0, 28H
003Dv(00E80000): ADD R0, SP, R0
003Ew(81E00004): LDR R1, SP, 4H
003Fw(4008005C): ADD R0, R0, 5CH
0040w(92100000): LDR R2, R1, 0H
0041w(41180001): ADD R1, R1, 1H
0042w(93000000): LDR R3, R0, 0H
0043w(40080001): ADD R0, R0, 1H
0044w(04290003): SUB R4, R2, R3
0045w(E9000002): BNE 2 [0048H]
0046w(44290000): SUB R4, R2, 0H
0047w(E9FFFFF8): BNE -8 [0040H]
0048x(E9000009): BNE 9 [0052H]
0049y(80E00014): LDR R0, SP, 14H
004Ay(41090018): SUB R1, R0, 18H
004By(DA08921C): BLCC MT [trap=1, pos=2194]
004Cy(400A0028): MUL R0, R0, 28H
004Dy(00E80000): ADD R0, SP, R0
ELSIFz Ra = 0 THENb dadr := a.p0
004Ez(8000007C): LDR R0, R0, 7CH
004Fz(81E00008): LDR R1, SP, 8H
0050z(A0100000): STR R0, R1, 0H
0051a(E700000D): B 13 [005FH]
0052b(80E00014): LDR R0, SP, 14H
0053b(E9000003): BNE 3 [0057H]
ELSEc dadrd := a.e[R-1]e.p
0054c(80E00024): LDR R0, SP, 24H
0055c(A0E00018): STR R0, SP, 18H
0056d(E7000008): B 8 [005FH]
0057e(80E00014): LDR R0, SP, 14H
0058e(40090001): SUB R0, R0, 1H
0059e(41090018): SUB R1, R0, 18H
005Ae(DA08E01C): BLCC MT [trap=1, pos=2272]
005Be(400A0028): MUL R0, R0, 28H
005Ce(00E80000): ADD R0, SP, R0
ENDf ;
005Df(80000080): LDR R0, R0, 80H
005Ef(A0E00018): STR R0, SP, 18H
UNTIL (dadr = 0)g OR (hA # 0)i
005Fg(80E00018): LDR R0, SP, 18H
0060h(E1000003): BEQ 3 [0064H]
0061i(80E00008): LDR R0, SP, 8H
0062i(80000000): LDR R0, R0, 0H
ENDj Search;
0063j(E1FFFFA5): BEQ -91 [0009H]
0064j(8FE00000): LDR LNK, SP, 0H
0065j(4EE8041C): ADD SP, SP, 41CH
0066j(C700000F): B LNK
PROCEDURE insert(name: FileName;
dpg0: DiskAdr;
VAR v: DirEntry;
fad: DiskAdr);
(*h = "tree has become higher and v is ascending element"*)
i, j, L, R: INTEGER;
dpg1: DiskAdr;
u: DirEntry;
a: DirPage;
BEGINk (*~h*) Kernel.GetSector(dpg0,l a)m;n ASSERT(a.mark = DirMark)o;p
0067k(4EE9045C): SUB SP, SP, 45CH
0068k(AFE00000): STR LNK, SP, 0H
0069k(A0E00004): STR R0, SP, 4H
006Ak(A1E00008): STR R1, SP, 8H
006Bk(A2E0000C): STR R2, SP, CH
006Ck(A3E00010): STR R3, SP, 10H
006Dk(A4E00014): STR R4, SP, 14H
006Ek(A5E00018): STR R5, SP, 18H
006Fl(80E00008): LDR R0, SP, 8H
0070m(41E8005C): ADD R1, SP, 5CH
0071n .FIXUP P
0071n(F710F066): BL MOD1 [Kernel] PROC15
0072o(80E0005C): LDR R0, SP, 5CH
0073o(71009B1E): MOV' R1, R0, FFFF9B1EH
0074o(4116A38D): IOR R1, R1, FFFFA38DH
0075o(00090001): SUB R0, R0, R1
0076p(D90ABC7C): BLNE MT [trap=7, pos=2748]
L := 0;q R := a.m;r (*binary search*)
0077q(40000000): MOV R0, R0, 0H
0078q(A0E00028): STR R0, SP, 28H
0079r(80E00060): LDR R0, SP, 60H
007Ar(A0E0002C): STR R0, SP, 2CH
007Bs(80E00028): LDR R0, SP, 28H
007Cs(81E0002C): LDR R1, SP, 2CH
007Ds(00090001): SUB R0, R0, R1
007Es(ED00001C): BGE 28 [009BH]
i := (L+R)t DIV 2;u
007Ft(80E00028): LDR R0, SP, 28H
0080t(81E0002C): LDR R1, SP, 2CH
0081t(00080001): ADD R0, R0, R1
0082u(40020001): ASR R0, R0, 1H
0083u(A0E00020): STR R0, SP, 20H
IF name <= a.e[i] THENw R := i ELSEx Ly := i+1 ENDz
0084v(80E00020): LDR R0, SP, 20H
0085v(41090018): SUB R1, R0, 18H
0086v(DA0B271C): BLCC MT [trap=1, pos=2855]
0087v(400A0028): MUL R0, R0, 28H
0088v(00E80000): ADD R0, SP, R0
0089w(81E00004): LDR R1, SP, 4H
008Aw(4008009C): ADD R0, R0, 9CH
008Bw(92100000): LDR R2, R1, 0H
008Cw(41180001): ADD R1, R1, 1H
008Dw(93000000): LDR R3, R0, 0H
008Ew(40080001): ADD R0, R0, 1H
008Fw(04290003): SUB R4, R2, R3
0090w(E9000002): BNE 2 [0093H]
0091w(44290000): SUB R4, R2, 0H
0092w(E9FFFFF8): BNE -8 [008BH]
0093w(EE000003): BGT 3 [0097H]
0094x(80E00020): LDR R0, SP, 20H
0095x(A0E0002C): STR R0, SP, 2CH
0096y(E7000003): B 3 [009AH]
0097z(80E00020): LDR R0, SP, 20H
0098z(40080001): ADD R0, R0, 1H
0099z(A0E00028): STR R0, SP, 28H
ENDa ;
009Aa(E7FFFFE0): B -32 [007BH]
IF (R < a.m)b & (cname = a.e[R] THENf
009Bb(80E0002C): LDR R0, SP, 2CH
009Cb(81E00060): LDR R1, SP, 60H
009Db(00090001): SUB R0, R0, R1
009Ec(ED00001B): BGE 27 [00BAH]
009Fd(80E0002C): LDR R0, SP, 2CH
00A0d(41090018): SUB R1, R0, 18H
00A1d(DA0B761C): BLCC MT [trap=1, pos=2934]
00A2d(400A0028): MUL R0, R0, 28H
00A3d(00E80000): ADD R0, SP, R0
00A4e(81E00004): LDR R1, SP, 4H
00A5e(4008009C): ADD R0, R0, 9CH
00A6e(92100000): LDR R2, R1, 0H
00A7e(41180001): ADD R1, R1, 1H
00A8e(93000000): LDR R3, R0, 0H
00A9e(40080001): ADD R0, R0, 1H
00AAe(04290003): SUB R4, R2, R3
00ABe(E9000002): BNE 2 [00AEH]
00ACe(44290000): SUB R4, R2, 0H
00ADe(E9FFFFF8): BNE -8 [00A6H]
00AEf(E900000B): BNE 11 [00BAH]
a.e[R]g.adr := fad;h Kernel.PutSector(dpg0,i a)j (*replace*)
00AFg(80E0002C): LDR R0, SP, 2CH
00B0g(41090018): SUB R1, R0, 18H
00B1g(DA0B8E1C): BLCC MT [trap=1, pos=2958]
00B2g(400A0028): MUL R0, R0, 28H
00B3g(00E80000): ADD R0, SP, R0
00B4h(81E00018): LDR R1, SP, 18H
00B5h(A10000BC): STR R1, R0, BCH
00B6i(80E00008): LDR R0, SP, 8H
00B7j(41E8005C): ADD R1, SP, 5CH
ELSEk (*not on this page*)
00B8k .FIXUP P
00B8k(F7110047): BL MOD1 [Kernel] PROC16
IFl R = 0 THENm dpg1 := a.p0 ELSEn dpg1o := a.e[R-1]p.p ENDq ;
00B9l(E700014E): B 334 [0208H]
00BAm(80E0002C): LDR R0, SP, 2CH
00BBm(E9000003): BNE 3 [00BFH]
00BCn(80E00064): LDR R0, SP, 64H
00BDn(A0E00030): STR R0, SP, 30H
00BEo(E7000008): B 8 [00C7H]
00BFp(80E0002C): LDR R0, SP, 2CH
00C0p(40090001): SUB R0, R0, 1H
00C1p(41090018): SUB R1, R0, 18H
00C2p(DA0C161C): BLCC MT [trap=1, pos=3094]
00C3p(400A0028): MUL R0, R0, 28H
00C4p(00E80000): ADD R0, SP, R0
00C5q(800000C0): LDR R0, R0, C0H
00C6q(A0E00030): STR R0, SP, 30H
IF dpg1 = 0 THENr (*not in tree, insert*)
00C7r(80E00030): LDR R0, SP, 30H
00C8r(E9000029): BNE 41 [00F2H]
u.adr := fad;s u.p := 0;t h := TRUE;u j := 0;v
00C9s(80E00018): LDR R0, SP, 18H
00CAs(A0E00054): STR R0, SP, 54H
00CBt(40000000): MOV R0, R0, 0H
00CCt(A0E00058): STR R0, SP, 58H
00CDu(40000001): MOV R0, R0, 1H
00CEu(81E0000C): LDR R1, SP, CH
00CFu(B0100000): STR R0, R1, 0H
00D0v(40000000): MOV R0, R0, 0H
00D1v(A0E00024): STR R0, SP, 24H
REPEAT ch := name[j]w;x[j]y := ch;z INC(j)
00D2w(80E00024): LDR R0, SP, 24H
00D3w(41090020): SUB R1, R0, 20H
00D4w(DA0C9D1C): BLCC MT [trap=1, pos=3229]
00D5w(81E00004): LDR R1, SP, 4H
00D6w(00180000): ADD R0, R1, R0
00D7x(90000000): LDR R0, R0, 0H
00D8x(B0E0001C): STR R0, SP, 1CH
00D9y(80E00024): LDR R0, SP, 24H
00DAy(41090020): SUB R1, R0, 20H
00DBy(DA0CA81C): BLCC MT [trap=1, pos=3240]
00DCy(00E80000): ADD R0, SP, R0
00DDz(91E0001C): LDR R1, SP, 1CH
00DEz(B1000034): STR R1, R0, 34H
UNTILa ch = 0X;b
00DFa(80E00024): LDR R0, SP, 24H
00E0a(40080001): ADD R0, R0, 1H
00E1a(A0E00024): STR R0, SP, 24H
00E2b(90E0001C): LDR R0, SP, 1CH
00E3b(E9FFFFEE): BNE -18 [00D2H]
WHILE j < FnLength DOc[j]d := 0X;e INC(j) ENDf ;
00E4c(80E00024): LDR R0, SP, 24H
00E5c(40090020): SUB R0, R0, 20H
00E6c(ED00000A): BGE 10 [00F1H]
00E7d(80E00024): LDR R0, SP, 24H
00E8d(41090020): SUB R1, R0, 20H
00E9d(DA0CF51C): BLCC MT [trap=1, pos=3317]
00EAd(00E80000): ADD R0, SP, R0
00EBe(41000000): MOV R1, R0, 0H
00ECe(B1000034): STR R1, R0, 34H
00EDf(80E00024): LDR R0, SP, 24H
00EEf(40080001): ADD R0, R0, 1H
00EFf(A0E00024): STR R0, SP, 24H
00F0f(E7FFFFF3): B -13 [00E4H]
insertg(name,h dpg1,i h,j u,k fad)l
00F1g(E7000008): B 8 [00FAH]
00F2h(80E00004): LDR R0, SP, 4H
00F3i(81E00030): LDR R1, SP, 30H
00F4j(82E0000C): LDR R2, SP, CH
00F5k(43E80034): ADD R3, SP, 34H
00F6k .FIXUP D
00F6k(8D0000F6): LDR SB, MT, MOD0 [FileDir]
00F7k(44D80014): ADD R4, SB, 14H [data]
00F8l(85E00018): LDR R5, SP, 18H
ENDm ;
00F9m(F7FFFF6D): BL -147 [0067H]
IF h THENn (*insert u to the left of e[R]*)
00FAn(80E0000C): LDR R0, SP, CH
00FBn(90000000): LDR R0, R0, 0H
00FCn(E100010B): BEQ 267 [0208H]
IF a.m < DirPgSize THENo
00FDo(80E00060): LDR R0, SP, 60H
00FEo(40090018): SUB R0, R0, 18H
00FFo(ED000033): BGE 51 [0133H]
h := FALSE;p i := a.m;q
0100p(40000000): MOV R0, R0, 0H
0101p(81E0000C): LDR R1, SP, CH
0102p(B0100000): STR R0, R1, 0H
0103q(80E00060): LDR R0, SP, 60H
0104q(A0E00020): STR R0, SP, 20H
WHILE i > R DOr DEC(i);s a.e[i+1]t := a.e[i]u ENDv ;
0105r(80E00020): LDR R0, SP, 20H
0106r(81E0002C): LDR R1, SP, 2CH
0107r(00090001): SUB R0, R0, R1
0108r(E6000018): BLE 24 [0121H]
0109s(80E00020): LDR R0, SP, 20H
010As(40090001): SUB R0, R0, 1H
010Bs(A0E00020): STR R0, SP, 20H
010Ct(80E00020): LDR R0, SP, 20H
010Dt(40080001): ADD R0, R0, 1H
010Et(41090018): SUB R1, R0, 18H
010Ft(DA0DE11C): BLCC MT [trap=1, pos=3553]
0110t(400A0028): MUL R0, R0, 28H
0111t(00E80000): ADD R0, SP, R0
0112u(81E00020): LDR R1, SP, 20H
0113u(42190018): SUB R2, R1, 18H
0114u(DA0DEB1C): BLCC MT [trap=1, pos=3563]
0115u(411A0028): MUL R1, R1, 28H
0116u(01E80001): ADD R1, SP, R1
0117v(4008009C): ADD R0, R0, 9CH
0118v(4118009C): ADD R1, R1, 9CH
0119v(4200000A): MOV R2, R0, AH
011Av(83100000): LDR R3, R1, 0H
011Bv(41180004): ADD R1, R1, 4H
011Cv(A3000000): STR R3, R0, 0H
011Dv(40080004): ADD R0, R0, 4H
011Ev(42290001): SUB R2, R2, 1H
011Fv(E9FFFFFA): BNE -6 [011AH]
0120v(E7FFFFE4): B -28 [0105H]
a.e[R]w := u;x INC(a.m)
0121w(80E0002C): LDR R0, SP, 2CH
0122w(41090018): SUB R1, R0, 18H
0123w(DA0E021C): BLCC MT [trap=1, pos=3586]
0124w(400A0028): MUL R0, R0, 28H
0125w(00E80000): ADD R0, SP, R0
0126x(4008009C): ADD R0, R0, 9CH
0127x(41E80034): ADD R1, SP, 34H
0128x(4200000A): MOV R2, R0, AH
0129x(83100000): LDR R3, R1, 0H
012Ax(41180004): ADD R1, R1, 4H
012Bx(A3000000): STR R3, R0, 0H
012Cx(40080004): ADD R0, R0, 4H
012Dx(42290001): SUB R2, R2, 1H
012Ex(E9FFFFFA): BNE -6 [0129H]
ELSEy (*split page and assign the middle element to v*)
012Fy(80E00060): LDR R0, SP, 60H
0130y(40080001): ADD R0, R0, 1H
0131y(A0E00060): STR R0, SP, 60H
az.m := N;a a.mark := DirMark;b
0132z(E70000D2): B 210 [0205H]
0133a(4000000C): MOV R0, R0, CH
0134a(A0E00060): STR R0, SP, 60H
0135b(60009B1E): MOV' R0, R0, FFFF9B1EH
0136b(4006A38D): IOR R0, R0, FFFFA38DH
0137b(A0E0005C): STR R0, SP, 5CH
IF R < N THENc (*insert in left half*)
0138c(80E0002C): LDR R0, SP, 2CH
0139c(4009000C): SUB R0, R0, CH
013Ac(ED000059): BGE 89 [0194H]
v := a.e[N-1];d i := N-1;e
013Bd(80E00010): LDR R0, SP, 10H
013Cd(41E80254): ADD R1, SP, 254H
013Dd(4200000A): MOV R2, R0, AH
013Ed(83100000): LDR R3, R1, 0H
013Fd(41180004): ADD R1, R1, 4H
0140d(A3000000): STR R3, R0, 0H
0141d(40080004): ADD R0, R0, 4H
0142d(42290001): SUB R2, R2, 1H
0143d(E9FFFFFA): BNE -6 [013EH]
0144e(4000000B): MOV R0, R0, BH
0145e(A0E00020): STR R0, SP, 20H
WHILE i > R DOf DEC(i);g a.e[i+1]h := a.e[i]i ENDj ;
0146f(80E00020): LDR R0, SP, 20H
0147f(81E0002C): LDR R1, SP, 2CH
0148f(00090001): SUB R0, R0, R1
0149f(E6000018): BLE 24 [0162H]
014Ag(80E00020): LDR R0, SP, 20H
014Bg(40090001): SUB R0, R0, 1H
014Cg(A0E00020): STR R0, SP, 20H
014Dh(80E00020): LDR R0, SP, 20H
014Eh(40080001): ADD R0, R0, 1H
014Fh(41090018): SUB R1, R0, 18H
0150h(DA0EF81C): BLCC MT [trap=1, pos=3832]
0151h(400A0028): MUL R0, R0, 28H
0152h(00E80000): ADD R0, SP, R0
0153i(81E00020): LDR R1, SP, 20H
0154i(42190018): SUB R2, R1, 18H
0155i(DA0F021C): BLCC MT [trap=1, pos=3842]
0156i(411A0028): MUL R1, R1, 28H
0157i(01E80001): ADD R1, SP, R1
0158j(4008009C): ADD R0, R0, 9CH
0159j(4118009C): ADD R1, R1, 9CH
015Aj(4200000A): MOV R2, R0, AH
015Bj(83100000): LDR R3, R1, 0H
015Cj(41180004): ADD R1, R1, 4H
015Dj(A3000000): STR R3, R0, 0H
015Ej(40080004): ADD R0, R0, 4H
015Fj(42290001): SUB R2, R2, 1H
0160j(E9FFFFFA): BNE -6 [015BH]
0161j(E7FFFFE4): B -28 [0146H]
a.e[R]k := u;l Kernel.PutSector(dpg0,m a)n;o
0162k(80E0002C): LDR R0, SP, 2CH
0163k(41090018): SUB R1, R0, 18H
0164k(DA0F1B1C): BLCC MT [trap=1, pos=3867]
0165k(400A0028): MUL R0, R0, 28H
0166k(00E80000): ADD R0, SP, R0
0167l(4008009C): ADD R0, R0, 9CH
0168l(41E80034): ADD R1, SP, 34H
0169l(4200000A): MOV R2, R0, AH
016Al(83100000): LDR R3, R1, 0H
016Bl(41180004): ADD R1, R1, 4H
016Cl(A3000000): STR R3, R0, 0H
016Dl(40080004): ADD R0, R0, 4H
016El(42290001): SUB R2, R2, 1H
016Fl(E9FFFFFA): BNE -6 [016AH]
0170m(80E00008): LDR R0, SP, 8H
0171n(41E8005C): ADD R1, SP, 5CH
0172o .FIXUP P
0172o(F71100BA): BL MOD1 [Kernel] PROC16
Kernel.AllocSector(dpg0,p dpg0)q;r i := 0;s
0173p(80E00008): LDR R0, SP, 8H
0174q(41E80008): ADD R1, SP, 8H
0175r .FIXUP P
0175r(F710E003): BL MOD1 [Kernel] PROC14
0176s(40000000): MOV R0, R0, 0H
0177s(A0E00020): STR R0, SP, 20H
WHILE i < N DOt a.e[i]u := a.e[i+N]v;w INC(i) ENDx
0178t(80E00020): LDR R0, SP, 20H
0179t(4009000C): SUB R0, R0, CH
017At(ED000018): BGE 24 [0193H]
017Bu(80E00020): LDR R0, SP, 20H
017Cu(41090018): SUB R1, R0, 18H
017Du(DA0F921C): BLCC MT [trap=1, pos=3986]
017Eu(400A0028): MUL R0, R0, 28H
017Fu(00E80000): ADD R0, SP, R0
0180v(81E00020): LDR R1, SP, 20H
0181v(4118000C): ADD R1, R1, CH
0182v(42190018): SUB R2, R1, 18H
0183v(DA0F9E1C): BLCC MT [trap=1, pos=3998]
0184v(411A0028): MUL R1, R1, 28H
0185v(01E80001): ADD R1, SP, R1
0186w(4008009C): ADD R0, R0, 9CH
0187w(4118009C): ADD R1, R1, 9CH
0188w(4200000A): MOV R2, R0, AH
0189w(83100000): LDR R3, R1, 0H
018Aw(41180004): ADD R1, R1, 4H
018Bw(A3000000): STR R3, R0, 0H
018Cw(40080004): ADD R0, R0, 4H
018Dw(42290001): SUB R2, R2, 1H
018Ew(E9FFFFFA): BNE -6 [0189H]
018Fx(80E00020): LDR R0, SP, 20H
0190x(40080001): ADD R0, R0, 1H
0191x(A0E00020): STR R0, SP, 20H
0192x(E7FFFFE5): B -27 [0178H]
ELSE (*insert in right half*)
Kernely.PutSector(dpg0,z a)a;b
0193y(E700006B): B 107 [01FFH]
0194z(80E00008): LDR R0, SP, 8H
0195a(41E8005C): ADD R1, SP, 5CH
0196b .FIXUP P
0196b(F7110021): BL MOD1 [Kernel] PROC16
Kernel.AllocSector(dpg0,c dpg0)d;e DEC(R, N);f i := 0;g
0197c(80E00008): LDR R0, SP, 8H
0198d(41E80008): ADD R1, SP, 8H
0199e .FIXUP P
0199e(F710E003): BL MOD1 [Kernel] PROC14
019Af(80E0002C): LDR R0, SP, 2CH
019Bf(4009000C): SUB R0, R0, CH
019Cf(A0E0002C): STR R0, SP, 2CH
019Dg(40000000): MOV R0, R0, 0H
019Eg(A0E00020): STR R0, SP, 20H
IF R = 0 THENh v := u
019Fh(80E0002C): LDR R0, SP, 2CH
01A0h(E900000A): BNE 10 [01ABH]
ELSEi vj := a.e[N];k
01A1i(80E00010): LDR R0, SP, 10H
01A2i(41E80034): ADD R1, SP, 34H
01A3i(4200000A): MOV R2, R0, AH
01A4i(83100000): LDR R3, R1, 0H
01A5i(41180004): ADD R1, R1, 4H
01A6i(A3000000): STR R3, R0, 0H
01A7i(40080004): ADD R0, R0, 4H
01A8i(42290001): SUB R2, R2, 1H
01A9i(E9FFFFFA): BNE -6 [01A4H]
01AAj(E7000038): B 56 [01E3H]
01ABk(80E00010): LDR R0, SP, 10H
01ACk(41E8027C): ADD R1, SP, 27CH
01ADk(4200000A): MOV R2, R0, AH
01AEk(83100000): LDR R3, R1, 0H
01AFk(41180004): ADD R1, R1, 4H
01B0k(A3000000): STR R3, R0, 0H
01B1k(40080004): ADD R0, R0, 4H
01B2k(42290001): SUB R2, R2, 1H
01B3k(E9FFFFFA): BNE -6 [01AEH]
WHILE i < R-1 DOl a.e[i]m := a.e[N+1+i]n;o INC(i) ENDp ;
01B4l(80E0002C): LDR R0, SP, 2CH
01B5l(40090001): SUB R0, R0, 1H
01B6l(81E00020): LDR R1, SP, 20H
01B7l(01190000): SUB R1, R1, R0
01B8l(ED000019): BGE 25 [01D2H]
01B9m(80E00020): LDR R0, SP, 20H
01BAm(41090018): SUB R1, R0, 18H
01BBm(DA109D1C): BLCC MT [trap=1, pos=4253]
01BCm(400A0028): MUL R0, R0, 28H
01BDm(00E80000): ADD R0, SP, R0
01BEn(4100000D): MOV R1, R0, DH
01BFn(82E00020): LDR R2, SP, 20H
01C0n(01180002): ADD R1, R1, R2
01C1n(42190018): SUB R2, R1, 18H
01C2n(DA10AB1C): BLCC MT [trap=1, pos=4267]
01C3n(411A0028): MUL R1, R1, 28H
01C4n(01E80001): ADD R1, SP, R1
01C5o(4008009C): ADD R0, R0, 9CH
01C6o(4118009C): ADD R1, R1, 9CH
01C7o(4200000A): MOV R2, R0, AH
01C8o(83100000): LDR R3, R1, 0H
01C9o(41180004): ADD R1, R1, 4H
01CAo(A3000000): STR R3, R0, 0H
01CBo(40080004): ADD R0, R0, 4H
01CCo(42290001): SUB R2, R2, 1H
01CDo(E9FFFFFA): BNE -6 [01C8H]
01CEp(80E00020): LDR R0, SP, 20H
01CFp(40080001): ADD R0, R0, 1H
01D0p(A0E00020): STR R0, SP, 20H
01D1p(E7FFFFE2): B -30 [01B4H]
a.e[i]q := u;r INC(i)
01D2q(80E00020): LDR R0, SP, 20H
01D3q(41090018): SUB R1, R0, 18H
01D4q(DA10CE1C): BLCC MT [trap=1, pos=4302]
01D5q(400A0028): MUL R0, R0, 28H
01D6q(00E80000): ADD R0, SP, R0
01D7r(4008009C): ADD R0, R0, 9CH
01D8r(41E80034): ADD R1, SP, 34H
01D9r(4200000A): MOV R2, R0, AH
01DAr(83100000): LDR R3, R1, 0H
01DBr(41180004): ADD R1, R1, 4H
01DCr(A3000000): STR R3, R0, 0H
01DDr(40080004): ADD R0, R0, 4H
01DEr(42290001): SUB R2, R2, 1H
01DFr(E9FFFFFA): BNE -6 [01DAH]
ENDs ;
01E0s(80E00020): LDR R0, SP, 20H
01E1s(40080001): ADD R0, R0, 1H
01E2s(A0E00020): STR R0, SP, 20H
WHILE i < N DOt a.e[i]u := a.e[N+i]v;w INC(i) ENDx
01E3t(80E00020): LDR R0, SP, 20H
01E4t(4009000C): SUB R0, R0, CH
01E5t(ED000019): BGE 25 [01FFH]
01E6u(80E00020): LDR R0, SP, 20H
01E7u(41090018): SUB R1, R0, 18H
01E8u(DA110F1C): BLCC MT [trap=1, pos=4367]
01E9u(400A0028): MUL R0, R0, 28H
01EAu(00E80000): ADD R0, SP, R0
01EBv(4100000C): MOV R1, R0, CH
01ECv(82E00020): LDR R2, SP, 20H
01EDv(01180002): ADD R1, R1, R2
01EEv(42190018): SUB R2, R1, 18H
01EFv(DA111B1C): BLCC MT [trap=1, pos=4379]
01F0v(411A0028): MUL R1, R1, 28H
01F1v(01E80001): ADD R1, SP, R1
01F2w(4008009C): ADD R0, R0, 9CH
01F3w(4118009C): ADD R1, R1, 9CH
01F4w(4200000A): MOV R2, R0, AH
01F5w(83100000): LDR R3, R1, 0H
01F6w(41180004): ADD R1, R1, 4H
01F7w(A3000000): STR R3, R0, 0H
01F8w(40080004): ADD R0, R0, 4H
01F9w(42290001): SUB R2, R2, 1H
01FAw(E9FFFFFA): BNE -6 [01F5H]
01FBx(80E00020): LDR R0, SP, 20H
01FCx(40080001): ADD R0, R0, 1H
01FDx(A0E00020): STR R0, SP, 20H
01FEx(E7FFFFE4): B -28 [01E3H]
a.p0 := v.p;y v.p := dpg0
01FFy(80E00010): LDR R0, SP, 10H
0200y(80000024): LDR R0, R0, 24H
0201y(A0E00064): STR R0, SP, 64H
ENDz ;
0202z(80E00008): LDR R0, SP, 8H
0203z(81E00010): LDR R1, SP, 10H
0204z(A0100024): STR R0, R1, 24H
Kernel.PutSector(dpg0,a a)b
0205a(80E00008): LDR R0, SP, 8H
0206b(41E8005C): ADD R1, SP, 5CH
0207c .FIXUP P
0207c(F711006E): BL MOD1 [Kernel] PROC16
ENDd insert;
0208d(8FE00000): LDR LNK, SP, 0H
0209d(4EE8045C): ADD SP, SP, 45CH
020Ad(C700000F): B LNK
PROCEDURE Insert*(name: FileName; fad: DiskAdr);
VAR oldroot: DiskAdr;
h: BOOLEAN; U: DirEntry;
a: DirPage;
020Be .PROC 5
020Be(4EE9043C): SUB SP, SP, 43CH
020Ce(AFE00000): STR LNK, SP, 0H
020De(A0E00004): STR R0, SP, 4H
020Ee(A1E00008): STR R1, SP, 8H
020Ff(40000000): MOV R0, R0, 0H
0210f(B0E00010): STR R0, SP, 10H
insert(name,g DirRootAdr,h h,i U,j fad)k;l
0211g(80E00004): LDR R0, SP, 4H
0212h(4100001D): MOV R1, R0, 1DH
0213i(42E80010): ADD R2, SP, 10H
0214j(43E80014): ADD R3, SP, 14H
0215j .FIXUP D
0215j(8D00011F): LDR SB, MT, MOD0 [FileDir]
0216j(44D80014): ADD R4, SB, 14H [data]
0217k(85E00008): LDR R5, SP, 8H
0218l(F7FFFE4E): BL -434 [0067H]
IF h THENm (*root overflow*)
0219m(90E00010): LDR R0, SP, 10H
021Am(E1000021): BEQ 33 [023CH]
Kernel.GetSector(DirRootAdr,n a)o;p ASSERT(a.mark = DirMark)q;r
021Bn(4000001D): MOV R0, R0, 1DH
021Co(41E8003C): ADD R1, SP, 3CH
021Dp .FIXUP P
021Dp(F710F016): BL MOD1 [Kernel] PROC15
021Eq(80E0003C): LDR R0, SP, 3CH
021Fq(71009B1E): MOV' R1, R0, FFFF9B1EH
0220q(4116A38D): IOR R1, R1, FFFFA38DH
0221q(00090001): SUB R0, R0, R1
0222r(D912C87C): BLNE MT [trap=7, pos=4808]
Kernel.AllocSector(DirRootAdr,s oldroot)t;u Kernel.PutSector(oldroot,v a)w;x
0223s(4000001D): MOV R0, R0, 1DH
0224t(41E8000C): ADD R1, SP, CH
0225u .FIXUP P
0225u(F710E008): BL MOD1 [Kernel] PROC14
0226v(80E0000C): LDR R0, SP, CH
0227w(41E8003C): ADD R1, SP, 3CH
0228x .FIXUP P
0228x(F7110003): BL MOD1 [Kernel] PROC16
a.mark := DirMark;y a.m := 1;z a.p0 := oldroot;a a.e[0] := U;b
0229y(60009B1E): MOV' R0, R0, FFFF9B1EH
022Ay(4006A38D): IOR R0, R0, FFFFA38DH
022By(A0E0003C): STR R0, SP, 3CH
022Cz(40000001): MOV R0, R0, 1H
022Dz(A0E00040): STR R0, SP, 40H
022Ea(80E0000C): LDR R0, SP, CH
022Fa(A0E00044): STR R0, SP, 44H
0230b(40E8007C): ADD R0, SP, 7CH
0231b(41E80014): ADD R1, SP, 14H
0232b(4200000A): MOV R2, R0, AH
0233b(83100000): LDR R3, R1, 0H
0234b(41180004): ADD R1, R1, 4H
0235b(A3000000): STR R3, R0, 0H
0236b(40080004): ADD R0, R0, 4H
0237b(42290001): SUB R2, R2, 1H
0238b(E9FFFFFA): BNE -6 [0233H]
Kernel.PutSector(DirRootAdr,c a)d
0239c(4000001D): MOV R0, R0, 1DH
023Ad(41E8003C): ADD R1, SP, 3CH
023Be .FIXUP P
023Be(F7110013): BL MOD1 [Kernel] PROC16
ENDf Insert;
023Cf(8FE00000): LDR LNK, SP, 0H
023Df(4EE8043C): ADD SP, SP, 43CH
023Ef(C700000F): B LNK
PROCEDURE underflow(VAR c: DirPage; (*ancestor page*)
dpg0: DiskAdr;
s: INTEGER; (*insertion point in c*)
VAR h: BOOLEAN); (*c undersize*)
dpg1: DiskAdr;
a, b: DirPage; (*a := underflowing page, b := neighbouring page*)
BEGINg Kernel.GetSector(dpg0,h a)i;j ASSERT(a.mark = DirMark)k;l
023Fg(4EE90824): SUB SP, SP, 824H
0240g(AFE00000): STR LNK, SP, 0H
0241g(A0E00004): STR R0, SP, 4H
0242g(A1E00008): STR R1, SP, 8H
0243g(A2E0000C): STR R2, SP, CH
0244g(A3E00010): STR R3, SP, 10H
0245g(A4E00014): STR R4, SP, 14H
0246h(80E0000C): LDR R0, SP, CH
0247i(41E80024): ADD R1, SP, 24H
0248j .FIXUP P
0248j(F710F00D): BL MOD1 [Kernel] PROC15
0249k(80E00024): LDR R0, SP, 24H
024Ak(71009B1E): MOV' R1, R0, FFFF9B1EH
024Bk(4116A38D): IOR R1, R1, FFFFA38DH
024Ck(00090001): SUB R0, R0, R1
024Dl(D915207C): BLNE MT [trap=7, pos=5408]
(*h & a.m = N-1 & dpg0 = c.e[s-1].p*)
IF s < c.m THENm (*b := page to the right of a*)
024Em(80E00010): LDR R0, SP, 10H
024Fm(81E00004): LDR R1, SP, 4H
0250m(81100004): LDR R1, R1, 4H
0251m(00090001): SUB R0, R0, R1
0252m(ED0000EC): BGE 236 [033FH]
dpg1 := c.e[s]n.p;o Kernel.GetSector(dpg1,p b)q;r ASSERT(b.mark = DirMark)s;t
0253n(80E00010): LDR R0, SP, 10H
0254n(41090018): SUB R1, R0, 18H
0255n(DA15931C): BLCC MT [trap=1, pos=5523]
0256n(400A0028): MUL R0, R0, 28H
0257n(81E00004): LDR R1, SP, 4H
0258n(00180000): ADD R0, R1, R0
0259o(80000064): LDR R0, R0, 64H
025Ao(A0E00020): STR R0, SP, 20H
025Bp(80E00020): LDR R0, SP, 20H
025Cq(41E80424): ADD R1, SP, 424H
025Dr .FIXUP P
025Dr(F710F015): BL MOD1 [Kernel] PROC15
025Es(80E00424): LDR R0, SP, 424H
025Fs(71009B1E): MOV' R1, R0, FFFF9B1EH
0260s(4116A38D): IOR R1, R1, FFFFA38DH
0261s(00090001): SUB R0, R0, R1
0262t(D915CB7C): BLNE MT [trap=7, pos=5579]
k := (b.m-N+u1)v DIV 2;w (*k = no. of items available on page b*)
0263u(80E00428): LDR R0, SP, 428H
0264u(4009000C): SUB R0, R0, CH
0265v(40080001): ADD R0, R0, 1H
0266w(40020001): ASR R0, R0, 1H
0267w(A0E0001C): STR R0, SP, 1CH
a.e[N-1] := c.e[s]x;y a.e[N-1].p := b.p0;z
0268x(80E00010): LDR R0, SP, 10H
0269x(41090018): SUB R1, R0, 18H
026Ax(DA16291C): BLCC MT [trap=1, pos=5673]
026Bx(400A0028): MUL R0, R0, 28H
026Cx(81E00004): LDR R1, SP, 4H
026Dx(00180000): ADD R0, R1, R0
026Ey(41E8021C): ADD R1, SP, 21CH
026Fy(40080040): ADD R0, R0, 40H
0270y(4200000A): MOV R2, R0, AH
0271y(83000000): LDR R3, R0, 0H
0272y(40080004): ADD R0, R0, 4H
0273y(A3100000): STR R3, R1, 0H
0274y(41180004): ADD R1, R1, 4H
0275y(42290001): SUB R2, R2, 1H
0276y(E9FFFFFA): BNE -6 [0271H]
0277z(80E0042C): LDR R0, SP, 42CH
0278z(A0E00240): STR R0, SP, 240H
IF k > 0 THENa
0279a(80E0001C): LDR R0, SP, 1CH
027Aa(40090000): SUB R0, R0, 0H
027Ba(E6000071): BLE 113 [02EDH]
(*move k-1 items from b to a, one to c*) i := 0;b
027Cb(40000000): MOV R0, R0, 0H
027Db(A0E00018): STR R0, SP, 18H
WHILE i < k-1 DOc a.e[i+N]d := b.e[i]e;f INC(i) ENDg ;
027Ec(80E0001C): LDR R0, SP, 1CH
027Fc(40090001): SUB R0, R0, 1H
0280c(81E00018): LDR R1, SP, 18H
0281c(01190000): SUB R1, R1, R0
0282c(ED000018): BGE 24 [029BH]
0283d(80E00018): LDR R0, SP, 18H
0284d(4008000C): ADD R0, R0, CH
0285d(41090018): SUB R1, R0, 18H
0286d(DA16AD1C): BLCC MT [trap=1, pos=5805]
0287d(400A0028): MUL R0, R0, 28H
0288d(00E80000): ADD R0, SP, R0
0289e(81E00018): LDR R1, SP, 18H
028Ae(42190018): SUB R2, R1, 18H
028Be(DA16B71C): BLCC MT [trap=1, pos=5815]
028Ce(411A0028): MUL R1, R1, 28H
028De(01E80001): ADD R1, SP, R1
028Ef(40080064): ADD R0, R0, 64H
028Ff(41180464): ADD R1, R1, 464H
0290f(4200000A): MOV R2, R0, AH
0291f(83100000): LDR R3, R1, 0H
0292f(41180004): ADD R1, R1, 4H
0293f(A3000000): STR R3, R0, 0H
0294f(40080004): ADD R0, R0, 4H
0295f(42290001): SUB R2, R2, 1H
0296f(E9FFFFFA): BNE -6 [0291H]
0297g(80E00018): LDR R0, SP, 18H
0298g(40080001): ADD R0, R0, 1H
0299g(A0E00018): STR R0, SP, 18H
029Ag(E7FFFFE3): B -29 [027EH]
c.e[s]h := b.e[i]i;j b.p0 := c.e[s]k.p;l
029Bh(80E00010): LDR R0, SP, 10H
029Ch(41090018): SUB R1, R0, 18H
029Dh(DA16D41C): BLCC MT [trap=1, pos=5844]
029Eh(400A0028): MUL R0, R0, 28H
029Fh(81E00004): LDR R1, SP, 4H
02A0h(00180000): ADD R0, R1, R0
02A1i(81E00018): LDR R1, SP, 18H
02A2i(42190018): SUB R2, R1, 18H
02A3i(DA16DE1C): BLCC MT [trap=1, pos=5854]
02A4i(411A0028): MUL R1, R1, 28H
02A5i(01E80001): ADD R1, SP, R1
02A6j(40080040): ADD R0, R0, 40H
02A7j(41180464): ADD R1, R1, 464H
02A8j(4200000A): MOV R2, R0, AH
02A9j(83100000): LDR R3, R1, 0H
02AAj(41180004): ADD R1, R1, 4H
02ABj(A3000000): STR R3, R0, 0H
02ACj(40080004): ADD R0, R0, 4H
02ADj(42290001): SUB R2, R2, 1H
02AEj(E9FFFFFA): BNE -6 [02A9H]
02AFk(80E00010): LDR R0, SP, 10H
02B0k(41090018): SUB R1, R0, 18H
02B1k(DA16EE1C): BLCC MT [trap=1, pos=5870]
02B2k(400A0028): MUL R0, R0, 28H
02B3k(81E00004): LDR R1, SP, 4H
02B4k(00180000): ADD R0, R1, R0
02B5l(80000064): LDR R0, R0, 64H
02B6l(A0E0042C): STR R0, SP, 42CH
c.e[s]m.p := dpg1;n b.m := b.m - k;o i := 0;p
02B7m(80E00010): LDR R0, SP, 10H
02B8m(41090018): SUB R1, R0, 18H
02B9m(DA17001C): BLCC MT [trap=1, pos=5888]
02BAm(400A0028): MUL R0, R0, 28H
02BBm(81E00004): LDR R1, SP, 4H
02BCm(00180000): ADD R0, R1, R0
02BDn(81E00020): LDR R1, SP, 20H
02BEn(A1000064): STR R1, R0, 64H
02BFo(80E00428): LDR R0, SP, 428H
02C0o(81E0001C): LDR R1, SP, 1CH
02C1o(00090001): SUB R0, R0, R1
02C2o(A0E00428): STR R0, SP, 428H
02C3p(40000000): MOV R0, R0, 0H
02C4p(A0E00018): STR R0, SP, 18H
WHILE i < b.m DOq b.e[i]r := b.e[i+k]s;t INC(i) ENDu ;
02C5q(80E00018): LDR R0, SP, 18H
02C6q(81E00428): LDR R1, SP, 428H
02C7q(00090001): SUB R0, R0, R1
02C8q(ED000019): BGE 25 [02E2H]
02C9r(80E00018): LDR R0, SP, 18H
02CAr(41090018): SUB R1, R0, 18H
02CBr(DA17431C): BLCC MT [trap=1, pos=5955]
02CCr(400A0028): MUL R0, R0, 28H
02CDr(00E80000): ADD R0, SP, R0
02CEs(81E00018): LDR R1, SP, 18H
02CFs(82E0001C): LDR R2, SP, 1CH
02D0s(01180002): ADD R1, R1, R2
02D1s(42190018): SUB R2, R1, 18H
02D2s(DA174F1C): BLCC MT [trap=1, pos=5967]
02D3s(411A0028): MUL R1, R1, 28H
02D4s(01E80001): ADD R1, SP, R1
02D5t(40080464): ADD R0, R0, 464H
02D6t(41180464): ADD R1, R1, 464H
02D7t(4200000A): MOV R2, R0, AH
02D8t(83100000): LDR R3, R1, 0H
02D9t(41180004): ADD R1, R1, 4H
02DAt(A3000000): STR R3, R0, 0H
02DBt(40080004): ADD R0, R0, 4H
02DCt(42290001): SUB R2, R2, 1H
02DDt(E9FFFFFA): BNE -6 [02D8H]
02DEu(80E00018): LDR R0, SP, 18H
02DFu(40080001): ADD R0, R0, 1H
02E0u(A0E00018): STR R0, SP, 18H
02E1u(E7FFFFE3): B -29 [02C5H]
Kernel.PutSector(dpg1,v b)w;x a.m := N-1+k;y h := FALSE
02E2v(80E00020): LDR R0, SP, 20H
02E3w(41E80424): ADD R1, SP, 424H
02E4x .FIXUP P
02E4x(F7110087): BL MOD1 [Kernel] PROC16
02E5y(4000000B): MOV R0, R0, BH
02E6y(81E0001C): LDR R1, SP, 1CH
02E7y(00080001): ADD R0, R0, R1
02E8y(A0E00028): STR R0, SP, 28H
ELSEz (*merge pages a and b, discard b*) ia := 0;b
02E9z(40000000): MOV R0, R0, 0H
02EAz(81E00014): LDR R1, SP, 14H
02EBz(B0100000): STR R0, R1, 0H
02ECa(E700004E): B 78 [033BH]
02EDb(40000000): MOV R0, R0, 0H
02EEb(A0E00018): STR R0, SP, 18H
WHILE i < N DOc a.e[i+N]d := b.e[i]e;f INC(i) ENDg ;
02EFc(80E00018): LDR R0, SP, 18H
02F0c(4009000C): SUB R0, R0, CH
02F1c(ED000018): BGE 24 [030AH]
02F2d(80E00018): LDR R0, SP, 18H
02F3d(4008000C): ADD R0, R0, CH
02F4d(41090018): SUB R1, R0, 18H
02F5d(DA17EF1C): BLCC MT [trap=1, pos=6127]
02F6d(400A0028): MUL R0, R0, 28H
02F7d(00E80000): ADD R0, SP, R0
02F8e(81E00018): LDR R1, SP, 18H
02F9e(42190018): SUB R2, R1, 18H
02FAe(DA17F91C): BLCC MT [trap=1, pos=6137]
02FBe(411A0028): MUL R1, R1, 28H
02FCe(01E80001): ADD R1, SP, R1
02FDf(40080064): ADD R0, R0, 64H
02FEf(41180464): ADD R1, R1, 464H
02FFf(4200000A): MOV R2, R0, AH
0300f(83100000): LDR R3, R1, 0H
0301f(41180004): ADD R1, R1, 4H
0302f(A3000000): STR R3, R0, 0H
0303f(40080004): ADD R0, R0, 4H
0304f(42290001): SUB R2, R2, 1H
0305f(E9FFFFFA): BNE -6 [0300H]
0306g(80E00018): LDR R0, SP, 18H
0307g(40080001): ADD R0, R0, 1H
0308g(A0E00018): STR R0, SP, 18H
0309g(E7FFFFE5): B -27 [02EFH]
i := s;h DEC(c.m);i
030Ah(80E00010): LDR R0, SP, 10H
030Bh(A0E00018): STR R0, SP, 18H
030Ci(80E00004): LDR R0, SP, 4H
030Di(40080004): ADD R0, R0, 4H
030Ei(81000000): LDR R1, R0, 0H
030Fi(41190001): SUB R1, R1, 1H
0310i(A1000000): STR R1, R0, 0H
WHILE i < c.m DOj c.e[i]k := c.e[i+1]l;m INC(i) ENDn ;
0311j(80E00018): LDR R0, SP, 18H
0312j(81E00004): LDR R1, SP, 4H
0313j(81100004): LDR R1, R1, 4H
0314j(00090001): SUB R0, R0, R1
0315j(ED00001A): BGE 26 [0330H]
0316k(80E00018): LDR R0, SP, 18H
0317k(41090018): SUB R1, R0, 18H
0318k(DA18411C): BLCC MT [trap=1, pos=6209]
0319k(400A0028): MUL R0, R0, 28H
031Ak(81E00004): LDR R1, SP, 4H
031Bk(00180000): ADD R0, R1, R0
031Cl(81E00018): LDR R1, SP, 18H
031Dl(41180001): ADD R1, R1, 1H
031El(42190018): SUB R2, R1, 18H
031Fl(DA184D1C): BLCC MT [trap=1, pos=6221]
0320l(411A0028): MUL R1, R1, 28H
0321l(82E00004): LDR R2, SP, 4H
0322l(01280001): ADD R1, R2, R1
0323m(40080040): ADD R0, R0, 40H
0324m(41180040): ADD R1, R1, 40H
0325m(4200000A): MOV R2, R0, AH
0326m(83100000): LDR R3, R1, 0H
0327m(41180004): ADD R1, R1, 4H
0328m(A3000000): STR R3, R0, 0H
0329m(40080004): ADD R0, R0, 4H
032Am(42290001): SUB R2, R2, 1H
032Bm(E9FFFFFA): BNE -6 [0326H]
032Cn(80E00018): LDR R0, SP, 18H
032Dn(40080001): ADD R0, R0, 1H
032En(A0E00018): STR R0, SP, 18H
032Fn(E7FFFFE1): B -31 [0311H]
a.m := 2*N;o h := c.m < N
0330o(40000018): MOV R0, R0, 18H
0331o(A0E00028): STR R0, SP, 28H
ENDp ;
0332p(80E00004): LDR R0, SP, 4H
0333p(80000004): LDR R0, R0, 4H
0334p(4009000C): SUB R0, R0, CH
0335p(ED000002): BGE 2 [0338H]
0336p(40000001): MOV R0, R0, 1H
0337p(E7000001): B 1 [0339H]
0338p(40000000): MOV R0, R0, 0H
0339p(81E00014): LDR R1, SP, 14H
033Ap(B0100000): STR R0, R1, 0H
Kernel.PutSector(dpg0,q a)r
033Bq(80E0000C): LDR R0, SP, CH
033Cr(41E80024): ADD R1, SP, 24H
ELSEs (*b := page to the left of a*) DECt(s);u
033Ds .FIXUP P
033Ds(F7110059): BL MOD1 [Kernel] PROC16
033Et(E70000F6): B 246 [0435H]
033Fu(80E00010): LDR R0, SP, 10H
0340u(40090001): SUB R0, R0, 1H
0341u(A0E00010): STR R0, SP, 10H
IF s = 0 THENv dpg1 := c.p0 ELSEw dpg1x := c.e[s-1]y.p ENDz ;
0342v(80E00010): LDR R0, SP, 10H
0343v(E9000004): BNE 4 [0348H]
0344w(80E00004): LDR R0, SP, 4H
0345w(80000008): LDR R0, R0, 8H
0346w(A0E00020): STR R0, SP, 20H
0347x(E7000009): B 9 [0351H]
0348y(80E00010): LDR R0, SP, 10H
0349y(40090001): SUB R0, R0, 1H
034Ay(41090018): SUB R1, R0, 18H
034By(DA190F1C): BLCC MT [trap=1, pos=6415]
034Cy(400A0028): MUL R0, R0, 28H
034Dy(81E00004): LDR R1, SP, 4H
034Ey(00180000): ADD R0, R1, R0
034Fz(80000064): LDR R0, R0, 64H
0350z(A0E00020): STR R0, SP, 20H
Kernel.GetSector(dpg1,a b)b;c ASSERT(b.mark = DirMark)d;e
0351a(80E00020): LDR R0, SP, 20H
0352b(41E80424): ADD R1, SP, 424H
0353c .FIXUP P
0353c(F710F016): BL MOD1 [Kernel] PROC15
0354d(80E00424): LDR R0, SP, 424H
0355d(71009B1E): MOV' R1, R0, FFFF9B1EH
0356d(4116A38D): IOR R1, R1, FFFFA38DH
0357d(00090001): SUB R0, R0, R1
0358e(D919527C): BLNE MT [trap=7, pos=6482]
k := (b.m-N+f1)g DIV 2;h (*k = no. of items available on page b*)
0359f(80E00428): LDR R0, SP, 428H
035Af(4009000C): SUB R0, R0, CH
035Bg(40080001): ADD R0, R0, 1H
035Ch(40020001): ASR R0, R0, 1H
035Dh(A0E0001C): STR R0, SP, 1CH
IF k > 0 THENi
035Ei(80E0001C): LDR R0, SP, 1CH
035Fi(40090000): SUB R0, R0, 0H
0360i(E600008C): BLE 140 [03EDH]
i := N-1;j
0361j(4000000B): MOV R0, R0, BH
0362j(A0E00018): STR R0, SP, 18H
WHILE i > 0 DOk DEC(i);l a.e[i+k]m := a.e[i]n ENDo ;
0363k(80E00018): LDR R0, SP, 18H
0364k(40090000): SUB R0, R0, 0H
0365k(E6000019): BLE 25 [037FH]
0366l(80E00018): LDR R0, SP, 18H
0367l(40090001): SUB R0, R0, 1H
0368l(A0E00018): STR R0, SP, 18H
0369m(80E00018): LDR R0, SP, 18H
036Am(81E0001C): LDR R1, SP, 1CH
036Bm(00080001): ADD R0, R0, R1
036Cm(41090018): SUB R1, R0, 18H
036Dm(DA19E51C): BLCC MT [trap=1, pos=6629]
036Em(400A0028): MUL R0, R0, 28H
036Fm(00E80000): ADD R0, SP, R0
0370n(81E00018): LDR R1, SP, 18H
0371n(42190018): SUB R2, R1, 18H
0372n(DA19EF1C): BLCC MT [trap=1, pos=6639]
0373n(411A0028): MUL R1, R1, 28H
0374n(01E80001): ADD R1, SP, R1
0375o(40080064): ADD R0, R0, 64H
0376o(41180064): ADD R1, R1, 64H
0377o(4200000A): MOV R2, R0, AH
0378o(83100000): LDR R3, R1, 0H
0379o(41180004): ADD R1, R1, 4H
037Ao(A3000000): STR R3, R0, 0H
037Bo(40080004): ADD R0, R0, 4H
037Co(42290001): SUB R2, R2, 1H
037Do(E9FFFFFA): BNE -6 [0378H]
037Eo(E7FFFFE4): B -28 [0363H]
i := k-1;p a.e[i]q := c.e[s]r;s a.e[i]t.p := a.p0;u
037Fp(80E0001C): LDR R0, SP, 1CH
0380p(40090001): SUB R0, R0, 1H
0381p(A0E00018): STR R0, SP, 18H
0382q(80E00018): LDR R0, SP, 18H
0383q(41090018): SUB R1, R0, 18H
0384q(DA1A0E1C): BLCC MT [trap=1, pos=6670]
0385q(400A0028): MUL R0, R0, 28H
0386q(00E80000): ADD R0, SP, R0
0387r(81E00010): LDR R1, SP, 10H
0388r(42190018): SUB R2, R1, 18H
0389r(DA1A181C): BLCC MT [trap=1, pos=6680]
038Ar(411A0028): MUL R1, R1, 28H
038Br(82E00004): LDR R2, SP, 4H
038Cr(01280001): ADD R1, R2, R1
038Ds(40080064): ADD R0, R0, 64H
038Es(41180040): ADD R1, R1, 40H
038Fs(4200000A): MOV R2, R0, AH
0390s(83100000): LDR R3, R1, 0H
0391s(41180004): ADD R1, R1, 4H
0392s(A3000000): STR R3, R0, 0H
0393s(40080004): ADD R0, R0, 4H
0394s(42290001): SUB R2, R2, 1H
0395s(E9FFFFFA): BNE -6 [0390H]
0396t(80E00018): LDR R0, SP, 18H
0397t(41090018): SUB R1, R0, 18H
0398t(DA1A201C): BLCC MT [trap=1, pos=6688]
0399t(400A0028): MUL R0, R0, 28H
039At(00E80000): ADD R0, SP, R0
039Bu(81E0002C): LDR R1, SP, 2CH
039Cu(A1000088): STR R1, R0, 88H
(*move k-1 items from b to a, one to c*) b.m := b.m - k;v
039Dv(80E00428): LDR R0, SP, 428H
039Ev(81E0001C): LDR R1, SP, 1CH
039Fv(00090001): SUB R0, R0, R1
03A0v(A0E00428): STR R0, SP, 428H
WHILE i > 0 DOw DEC(i);x a.e[i]y := b.e[i+b.m+z1]a ENDb ;
03A1w(80E00018): LDR R0, SP, 18H
03A2w(40090000): SUB R0, R0, 0H
03A3w(E600001A): BLE 26 [03BEH]
03A4x(80E00018): LDR R0, SP, 18H
03A5x(40090001): SUB R0, R0, 1H
03A6x(A0E00018): STR R0, SP, 18H
03A7y(80E00018): LDR R0, SP, 18H
03A8y(41090018): SUB R1, R0, 18H
03A9y(DA1A921C): BLCC MT [trap=1, pos=6802]
03AAy(400A0028): MUL R0, R0, 28H
03ABy(00E80000): ADD R0, SP, R0
03ACz(81E00018): LDR R1, SP, 18H
03ADz(82E00428): LDR R2, SP, 428H
03AEz(01180002): ADD R1, R1, R2
03AFa(41180001): ADD R1, R1, 1H
03B0a(42190018): SUB R2, R1, 18H
03B1a(DA1AA21C): BLCC MT [trap=1, pos=6818]
03B2a(411A0028): MUL R1, R1, 28H
03B3a(01E80001): ADD R1, SP, R1
03B4b(40080064): ADD R0, R0, 64H
03B5b(41180464): ADD R1, R1, 464H
03B6b(4200000A): MOV R2, R0, AH
03B7b(83100000): LDR R3, R1, 0H
03B8b(41180004): ADD R1, R1, 4H
03B9b(A3000000): STR R3, R0, 0H
03BAb(40080004): ADD R0, R0, 4H
03BBb(42290001): SUB R2, R2, 1H
03BCb(E9FFFFFA): BNE -6 [03B7H]
03BDb(E7FFFFE3): B -29 [03A1H]
c.e[s]c := b.e[b.m]d;e a.p0 := c.e[s]f.p;g
03BEc(80E00010): LDR R0, SP, 10H
03BFc(41090018): SUB R1, R0, 18H
03C0c(DA1AB71C): BLCC MT [trap=1, pos=6839]
03C1c(400A0028): MUL R0, R0, 28H
03C2c(81E00004): LDR R1, SP, 4H
03C3c(00180000): ADD R0, R1, R0
03C4d(81E00428): LDR R1, SP, 428H
03C5d(42190018): SUB R2, R1, 18H
03C6d(DA1AC31C): BLCC MT [trap=1, pos=6851]
03C7d(411A0028): MUL R1, R1, 28H
03C8d(01E80001): ADD R1, SP, R1
03C9e(40080040): ADD R0, R0, 40H
03CAe(41180464): ADD R1, R1, 464H
03CBe(4200000A): MOV R2, R0, AH
03CCe(83100000): LDR R3, R1, 0H
03CDe(41180004): ADD R1, R1, 4H
03CEe(A3000000): STR R3, R0, 0H
03CFe(40080004): ADD R0, R0, 4H
03D0e(42290001): SUB R2, R2, 1H
03D1e(E9FFFFFA): BNE -6 [03CCH]
03D2f(80E00010): LDR R0, SP, 10H
03D3f(41090018): SUB R1, R0, 18H
03D4f(DA1AD31C): BLCC MT [trap=1, pos=6867]
03D5f(400A0028): MUL R0, R0, 28H
03D6f(81E00004): LDR R1, SP, 4H
03D7f(00180000): ADD R0, R1, R0
03D8g(80000064): LDR R0, R0, 64H
03D9g(A0E0002C): STR R0, SP, 2CH
c.e[s]h.p := dpg0;i a.m := N-1+k;j h := FALSE;k
03DAh(80E00010): LDR R0, SP, 10H
03DBh(41090018): SUB R1, R0, 18H
03DCh(DA1AE51C): BLCC MT [trap=1, pos=6885]
03DDh(400A0028): MUL R0, R0, 28H
03DEh(81E00004): LDR R1, SP, 4H
03DFh(00180000): ADD R0, R1, R0
03E0i(81E0000C): LDR R1, SP, CH
03E1i(A1000064): STR R1, R0, 64H
03E2j(4000000B): MOV R0, R0, BH
03E3j(81E0001C): LDR R1, SP, 1CH
03E4j(00080001): ADD R0, R0, R1
03E5j(A0E00028): STR R0, SP, 28H
03E6k(40000000): MOV R0, R0, 0H
03E7k(81E00014): LDR R1, SP, 14H
03E8k(B0100000): STR R0, R1, 0H
Kernel.PutSector(dpg0,l a)m
03E9l(80E0000C): LDR R0, SP, CH
03EAm(41E80024): ADD R1, SP, 24H
ELSEn (*merge pages a and b, discard a*)
03EBn(F7110098): BL MOD1 [Kernel] PROC16
co.e[s]p.p := a.p0;q b.e[N] := c.e[s]r;s i := 0;t
03ECo(E7000045): B 69 [0432H]
03EDp(80E00010): LDR R0, SP, 10H
03EEp(41090018): SUB R1, R0, 18H
03EFp(DA1B691C): BLCC MT [trap=1, pos=7017]
03F0p(400A0028): MUL R0, R0, 28H
03F1p(81E00004): LDR R1, SP, 4H
03F2p(00180000): ADD R0, R1, R0
03F3q(81E0002C): LDR R1, SP, 2CH
03F4q(A1000064): STR R1, R0, 64H
03F5r(80E00010): LDR R0, SP, 10H
03F6r(41090018): SUB R1, R0, 18H
03F7r(DA1B851C): BLCC MT [trap=1, pos=7045]
03F8r(400A0028): MUL R0, R0, 28H
03F9r(81E00004): LDR R1, SP, 4H
03FAr(00180000): ADD R0, R1, R0
03FBs(41E80644): ADD R1, SP, 644H
03FCs(40080040): ADD R0, R0, 40H
03FDs(4200000A): MOV R2, R0, AH
03FEs(83000000): LDR R3, R0, 0H
03FFs(40080004): ADD R0, R0, 4H
0400s(A3100000): STR R3, R1, 0H
0401s(41180004): ADD R1, R1, 4H
0402s(42290001): SUB R2, R2, 1H
0403s(E9FFFFFA): BNE -6 [03FEH]
0404t(40000000): MOV R0, R0, 0H
0405t(A0E00018): STR R0, SP, 18H
WHILE i < N-1 DOu b.e[i+N+v1]w := a.e[i]x;y INC(i) ENDz ;
0406u(80E00018): LDR R0, SP, 18H
0407u(4009000B): SUB R0, R0, BH
0408u(ED000019): BGE 25 [0422H]
0409v(80E00018): LDR R0, SP, 18H
040Av(4008000C): ADD R0, R0, CH
040Bw(40080001): ADD R0, R0, 1H
040Cw(41090018): SUB R1, R0, 18H
040Dw(DA1BB21C): BLCC MT [trap=1, pos=7090]
040Ew(400A0028): MUL R0, R0, 28H
040Fw(00E80000): ADD R0, SP, R0
0410x(81E00018): LDR R1, SP, 18H
0411x(42190018): SUB R2, R1, 18H
0412x(DA1BBC1C): BLCC MT [trap=1, pos=7100]
0413x(411A0028): MUL R1, R1, 28H
0414x(01E80001): ADD R1, SP, R1
0415y(40080464): ADD R0, R0, 464H
0416y(41180064): ADD R1, R1, 64H
0417y(4200000A): MOV R2, R0, AH
0418y(83100000): LDR R3, R1, 0H
0419y(41180004): ADD R1, R1, 4H
041Ay(A3000000): STR R3, R0, 0H
041By(40080004): ADD R0, R0, 4H
041Cy(42290001): SUB R2, R2, 1H
041Dy(E9FFFFFA): BNE -6 [0418H]
041Ez(80E00018): LDR R0, SP, 18H
041Fz(40080001): ADD R0, R0, 1H
0420z(A0E00018): STR R0, SP, 18H
0421z(E7FFFFE4): B -28 [0406H]
b.m := 2*N;a DEC(c.m);b h := c.m < N
0422a(40000018): MOV R0, R0, 18H
0423a(A0E00428): STR R0, SP, 428H
0424b(80E00004): LDR R0, SP, 4H
0425b(40080004): ADD R0, R0, 4H
0426b(81000000): LDR R1, R0, 0H
0427b(41190001): SUB R1, R1, 1H
0428b(A1000000): STR R1, R0, 0H
ENDc ;
0429c(80E00004): LDR R0, SP, 4H
042Ac(80000004): LDR R0, R0, 4H
042Bc(4009000C): SUB R0, R0, CH
042Cc(ED000002): BGE 2 [042FH]
042Dc(40000001): MOV R0, R0, 1H
042Ec(E7000001): B 1 [0430H]
042Fc(40000000): MOV R0, R0, 0H
0430c(81E00014): LDR R1, SP, 14H
0431c(B0100000): STR R0, R1, 0H
Kernel.PutSector(dpg1,d b)e
0432d(80E00020): LDR R0, SP, 20H
0433e(41E80424): ADD R1, SP, 424H
0434f .FIXUP P
0434f(F7110049): BL MOD1 [Kernel] PROC16
ENDg underflow;
0435g(8FE00000): LDR LNK, SP, 0H
0436g(4EE80824): ADD SP, SP, 824H
0437g(C700000F): B LNK
PROCEDURE delete(name: FileName;
dpg0: DiskAdr;
VAR fad: DiskAdr);
(*search and delete entry with key name; if a page underflow arises,
balance with adjacent page or merge; h := "page dpg0 is undersize"*)
dpg1: DiskAdr;
a: DirPage;
PROCEDUREh del(VAR a: DirPage; R: INTEGER; dpg1: DiskAdr; VAR h: BOOLEAN);
0438h(E7000061): B 97 [049AH]
VAR dpg2: DiskAdr; (*global: a, R*)
b: DirPage;
BEGINi Kernel.GetSector(dpg1,j b)k;l ASSERT(b.mark = DirMark)m;n dpg2 := b.e[b.m-1]o.p;p
0439i(4EE9041C): SUB SP, SP, 41CH
043Ai(AFE00000): STR LNK, SP, 0H
043Bi(A0E00004): STR R0, SP, 4H
043Ci(A1E00008): STR R1, SP, 8H
043Di(A2E0000C): STR R2, SP, CH
043Ei(A3E00010): STR R3, SP, 10H
043Fi(A4E00014): STR R4, SP, 14H
0440j(80E00010): LDR R0, SP, 10H
0441k(41E8001C): ADD R1, SP, 1CH
0442l .FIXUP P
0442l(F710F00E): BL MOD1 [Kernel] PROC15
0443m(80E0001C): LDR R0, SP, 1CH
0444m(71009B1E): MOV' R1, R0, FFFF9B1EH
0445m(4116A38D): IOR R1, R1, FFFFA38DH
0446m(00090001): SUB R0, R0, R1
0447n(D91E6A7C): BLNE MT [trap=7, pos=7786]
0448o(80E00020): LDR R0, SP, 20H
0449o(40090001): SUB R0, R0, 1H
044Ao(41090018): SUB R1, R0, 18H
044Bo(DA1E7D1C): BLCC MT [trap=1, pos=7805]
044Co(400A0028): MUL R0, R0, 28H
044Do(00E80000): ADD R0, SP, R0
044Ep(80000080): LDR R0, R0, 80H
044Fp(A0E00018): STR R0, SP, 18H
IF dpg2 # 0 THENq del(a,r R,s dpg2,t h)u;v
0450q(80E00018): LDR R0, SP, 18H
0451q(E1000014): BEQ 20 [0466H]
0452r(80E00004): LDR R0, SP, 4H
0453r(81E00008): LDR R1, SP, 8H
0454s(82E0000C): LDR R2, SP, CH
0455t(83E00018): LDR R3, SP, 18H
0456u(84E00014): LDR R4, SP, 14H
0457v(F7FFFFE1): BL -31 [0439H]
IF h THENw underflow(b,x dpg2,y b.m,z h)a;b Kernel.PutSector(dpg1,c b)d ENDe
0458w(80E00014): LDR R0, SP, 14H
0459w(90000000): LDR R0, R0, 0H
045Aw(E100000A): BEQ 10 [0465H]
045Bx(40E8001C): ADD R0, SP, 1CH
045Cx .FIXUP D
045Cx(8D000247): LDR SB, MT, MOD0 [FileDir]
045Dx(41D80028): ADD R1, SB, 28H [data]
045Ey(82E00018): LDR R2, SP, 18H
045Fz(83E00020): LDR R3, SP, 20H
0460a(84E00014): LDR R4, SP, 14H
0461b(F7FFFDDD): BL -547 [023FH]
0462c(80E00010): LDR R0, SP, 10H
0463d(41E8001C): ADD R1, SP, 1CH
0464e .FIXUP P
0464e(F7110022): BL MOD1 [Kernel] PROC16
bf.e[b.m-1]g.p := a.e[R]h.p;i a.e[R]j := b.e[b.m-1]k;l
0465f(E7000031): B 49 [0497H]
0466g(80E00020): LDR R0, SP, 20H
0467g(40090001): SUB R0, R0, 1H
0468g(41090018): SUB R1, R0, 18H
0469g(DA1F151C): BLCC MT [trap=1, pos=7957]
046Ag(400A0028): MUL R0, R0, 28H
046Bg(00E80000): ADD R0, SP, R0
046Ch(81E0000C): LDR R1, SP, CH
046Dh(42190018): SUB R2, R1, 18H
046Eh(DA1F211C): BLCC MT [trap=1, pos=7969]
046Fh(411A0028): MUL R1, R1, 28H
0470h(82E00004): LDR R2, SP, 4H
0471h(01280001): ADD R1, R2, R1
0472i(81100064): LDR R1, R1, 64H
0473i(A1000080): STR R1, R0, 80H
0474j(80E0000C): LDR R0, SP, CH
0475j(41090018): SUB R1, R0, 18H
0476j(DA1F2B1C): BLCC MT [trap=1, pos=7979]
0477j(400A0028): MUL R0, R0, 28H
0478j(81E00004): LDR R1, SP, 4H
0479j(00180000): ADD R0, R1, R0
047Ak(81E00020): LDR R1, SP, 20H
047Bk(41190001): SUB R1, R1, 1H
047Ck(42190018): SUB R2, R1, 18H
047Dk(DA1F391C): BLCC MT [trap=1, pos=7993]
047Ek(411A0028): MUL R1, R1, 28H
047Fk(01E80001): ADD R1, SP, R1
0480l(40080040): ADD R0, R0, 40H
0481l(4118005C): ADD R1, R1, 5CH
0482l(4200000A): MOV R2, R0, AH
0483l(83100000): LDR R3, R1, 0H
0484l(41180004): ADD R1, R1, 4H
0485l(A3000000): STR R3, R0, 0H
0486l(40080004): ADD R0, R0, 4H
0487l(42290001): SUB R2, R2, 1H
0488l(E9FFFFFA): BNE -6 [0483H]
DEC(b.m);m h := b.m < N;n Kernel.PutSector(dpg1,o b)p
0489m(80E00020): LDR R0, SP, 20H
048Am(40090001): SUB R0, R0, 1H
048Bm(A0E00020): STR R0, SP, 20H
048Cn(80E00020): LDR R0, SP, 20H
048Dn(4009000C): SUB R0, R0, CH
048En(ED000002): BGE 2 [0491H]
048Fn(40000001): MOV R0, R0, 1H
0490n(E7000001): B 1 [0492H]
0491n(40000000): MOV R0, R0, 0H
0492n(81E00014): LDR R1, SP, 14H
0493n(B0100000): STR R0, R1, 0H
0494o(80E00010): LDR R0, SP, 10H
0495p(41E8001C): ADD R1, SP, 1CH
0496q .FIXUP P
0496q(F7110032): BL MOD1 [Kernel] PROC16
ENDr del;
0497r(8FE00000): LDR LNK, SP, 0H
0498r(4EE8041C): ADD SP, SP, 41CH
0499r(C700000F): B LNK
BEGINs (*~h*) Kernel.GetSector(dpg0,t a)u;v ASSERT(a.mark = DirMark)w;x
049As(4EE90424): SUB SP, SP, 424H
049Bs(AFE00000): STR LNK, SP, 0H
049Cs(A0E00004): STR R0, SP, 4H
049Ds(A1E00008): STR R1, SP, 8H
049Es(A2E0000C): STR R2, SP, CH
049Fs(A3E00010): STR R3, SP, 10H
04A0t(80E00008): LDR R0, SP, 8H
04A1u(41E80024): ADD R1, SP, 24H
04A2v .FIXUP P
04A2v(F710F00C): BL MOD1 [Kernel] PROC15
04A3w(80E00024): LDR R0, SP, 24H
04A4w(71009B1E): MOV' R1, R0, FFFF9B1EH
04A5w(4116A38D): IOR R1, R1, FFFFA38DH
04A6w(00090001): SUB R0, R0, R1
04A7x(D91FD07C): BLNE MT [trap=7, pos=8144]
L := 0;y R := a.m;z (*binary search*)
04A8y(40000000): MOV R0, R0, 0H
04A9y(A0E00018): STR R0, SP, 18H
04AAz(80E00028): LDR R0, SP, 28H
04ABz(A0E0001C): STR R0, SP, 1CH
04ACa(80E00018): LDR R0, SP, 18H
04ADa(81E0001C): LDR R1, SP, 1CH
04AEa(00090001): SUB R0, R0, R1
04AFa(ED00001C): BGE 28 [04CCH]
i := (L+R)b DIV 2;c
04B0b(80E00018): LDR R0, SP, 18H
04B1b(81E0001C): LDR R1, SP, 1CH
04B2b(00080001): ADD R0, R0, R1
04B3c(40020001): ASR R0, R0, 1H
04B4c(A0E00014): STR R0, SP, 14H
IF name <= a.e[i] THENe R := i ELSEf Lg := i+1 ENDh
04B5d(80E00014): LDR R0, SP, 14H
04B6d(41090018): SUB R1, R0, 18H
04B7d(DA203B1C): BLCC MT [trap=1, pos=8251]
04B8d(400A0028): MUL R0, R0, 28H
04B9d(00E80000): ADD R0, SP, R0
04BAe(81E00004): LDR R1, SP, 4H
04BBe(40080064): ADD R0, R0, 64H
04BCe(92100000): LDR R2, R1, 0H
04BDe(41180001): ADD R1, R1, 1H
04BEe(93000000): LDR R3, R0, 0H
04BFe(40080001): ADD R0, R0, 1H
04C0e(04290003): SUB R4, R2, R3
04C1e(E9000002): BNE 2 [04C4H]
04C2e(44290000): SUB R4, R2, 0H
04C3e(E9FFFFF8): BNE -8 [04BCH]
04C4e(EE000003): BGT 3 [04C8H]
04C5f(80E00014): LDR R0, SP, 14H
04C6f(A0E0001C): STR R0, SP, 1CH
04C7g(E7000003): B 3 [04CBH]
04C8h(80E00014): LDR R0, SP, 14H
04C9h(40080001): ADD R0, R0, 1H
04CAh(A0E00018): STR R0, SP, 18H
ENDi ;
04CBi(E7FFFFE0): B -32 [04ACH]
IF R = 0 THENj dpg1 := a.p0 ELSEk dpg1l := a.e[R-1]m.p ENDn ;
04CCj(80E0001C): LDR R0, SP, 1CH
04CDj(E9000003): BNE 3 [04D1H]
04CEk(80E0002C): LDR R0, SP, 2CH
04CFk(A0E00020): STR R0, SP, 20H
04D0l(E7000008): B 8 [04D9H]
04D1m(80E0001C): LDR R0, SP, 1CH
04D2m(40090001): SUB R0, R0, 1H
04D3m(41090018): SUB R1, R0, 18H
04D4m(DA209D1C): BLCC MT [trap=1, pos=8349]
04D5m(400A0028): MUL R0, R0, 28H
04D6m(00E80000): ADD R0, SP, R0
04D7n(80000088): LDR R0, R0, 88H
04D8n(A0E00020): STR R0, SP, 20H
IF (R < a.m)o & (pname = a.e[R] THENs
04D9o(80E0001C): LDR R0, SP, 1CH
04DAo(81E00028): LDR R1, SP, 28H
04DBo(00090001): SUB R0, R0, R1
04DCp(ED000059): BGE 89 [0536H]
04DDq(80E0001C): LDR R0, SP, 1CH
04DEq(41090018): SUB R1, R0, 18H
04DFq(DA20C71C): BLCC MT [trap=1, pos=8391]
04E0q(400A0028): MUL R0, R0, 28H
04E1q(00E80000): ADD R0, SP, R0
04E2r(81E00004): LDR R1, SP, 4H
04E3r(40080064): ADD R0, R0, 64H
04E4r(92100000): LDR R2, R1, 0H
04E5r(41180001): ADD R1, R1, 1H
04E6r(93000000): LDR R3, R0, 0H
04E7r(40080001): ADD R0, R0, 1H
04E8r(04290003): SUB R4, R2, R3
04E9r(E9000002): BNE 2 [04ECH]
04EAr(44290000): SUB R4, R2, 0H
04EBr(E9FFFFF8): BNE -8 [04E4H]
04ECs(E9000049): BNE 73 [0536H]
(*found, now delete*) fad := a.e[R]t.adr;u
04EDt(80E0001C): LDR R0, SP, 1CH
04EEt(41090018): SUB R1, R0, 18H
04EFt(DA20FC1C): BLCC MT [trap=1, pos=8444]
04F0t(400A0028): MUL R0, R0, 28H
04F1t(00E80000): ADD R0, SP, R0
04F2u(80000084): LDR R0, R0, 84H
04F3u(81E00010): LDR R1, SP, 10H
04F4u(A0100000): STR R0, R1, 0H
IF dpg1 = 0 THENv (*a is a leaf page*)
04F5v(80E00020): LDR R0, SP, 20H
04F6v(E900002A): BNE 42 [0521H]
DEC(a.m);w h := a.m < N;x i := R;y
04F7w(80E00028): LDR R0, SP, 28H
04F8w(40090001): SUB R0, R0, 1H
04F9w(A0E00028): STR R0, SP, 28H
04FAx(80E00028): LDR R0, SP, 28H
04FBx(4009000C): SUB R0, R0, CH
04FCx(ED000002): BGE 2 [04FFH]
04FDx(40000001): MOV R0, R0, 1H
04FEx(E7000001): B 1 [0500H]
04FFx(40000000): MOV R0, R0, 0H
0500x(81E0000C): LDR R1, SP, CH
0501x(B0100000): STR R0, R1, 0H
0502y(80E0001C): LDR R0, SP, 1CH
0503y(A0E00014): STR R0, SP, 14H
WHILE i < a.m DOz a.e[i]a := a.e[i+1]b;c INC(i) ENDd
0504z(80E00014): LDR R0, SP, 14H
0505z(81E00028): LDR R1, SP, 28H
0506z(00090001): SUB R0, R0, R1
0507z(ED000018): BGE 24 [0520H]
0508a(80E00014): LDR R0, SP, 14H
0509a(41090018): SUB R1, R0, 18H
050Aa(DA21761C): BLCC MT [trap=1, pos=8566]
050Ba(400A0028): MUL R0, R0, 28H
050Ca(00E80000): ADD R0, SP, R0
050Db(81E00014): LDR R1, SP, 14H
050Eb(41180001): ADD R1, R1, 1H
050Fb(42190018): SUB R2, R1, 18H
0510b(DA21821C): BLCC MT [trap=1, pos=8578]
0511b(411A0028): MUL R1, R1, 28H
0512b(01E80001): ADD R1, SP, R1
0513c(40080064): ADD R0, R0, 64H
0514c(41180064): ADD R1, R1, 64H
0515c(4200000A): MOV R2, R0, AH
0516c(83100000): LDR R3, R1, 0H
0517c(41180004): ADD R1, R1, 4H
0518c(A3000000): STR R3, R0, 0H
0519c(40080004): ADD R0, R0, 4H
051Ac(42290001): SUB R2, R2, 1H
051Bc(E9FFFFFA): BNE -6 [0516H]
051Cd(80E00014): LDR R0, SP, 14H
051Dd(40080001): ADD R0, R0, 1H
051Ed(A0E00014): STR R0, SP, 14H
051Fd(E7FFFFE4): B -28 [0504H]
ELSE dele(a,f R,g dpg1,h h)i;j
0520e(E7000011): B 17 [0532H]
0521f(40E80024): ADD R0, SP, 24H
0522f .FIXUP D
0522f(8D0000C6): LDR SB, MT, MOD0 [FileDir]
0523f(41D80028): ADD R1, SB, 28H [data]
0524g(82E0001C): LDR R2, SP, 1CH
0525h(83E00020): LDR R3, SP, 20H
0526i(84E0000C): LDR R4, SP, CH
0527j(F7FFFF11): BL -239 [0439H]
IF h THENk underflow(a,l dpg1,m R,n h)o ENDp
0528k(80E0000C): LDR R0, SP, CH
0529k(90000000): LDR R0, R0, 0H
052Ak(E1000007): BEQ 7 [0532H]
052Bl(40E80024): ADD R0, SP, 24H
052Cl .FIXUP D
052Cl(8D00000A): LDR SB, MT, MOD0 [FileDir]
052Dl(41D80028): ADD R1, SB, 28H [data]
052Em(82E00020): LDR R2, SP, 20H
052Fn(83E0001C): LDR R3, SP, 1CH
0530o(84E0000C): LDR R4, SP, CH
0531p(F7FFFD0D): BL -755 [023FH]
Kernel.PutSector(dpg0,q a)r
0532q(80E00008): LDR R0, SP, 8H
0533r(41E80024): ADD R1, SP, 24H
ELSIFs dpg1t # 0 THENu
0534s .FIXUP P
0534s(F7110092): BL MOD1 [Kernel] PROC16
0535t(E7000018): B 24 [054EH]
0536u(80E00020): LDR R0, SP, 20H
0537u(E1000013): BEQ 19 [054BH]
delete(name,v dpg1,w h,x fad)y;z
0538v(80E00004): LDR R0, SP, 4H
0539w(81E00020): LDR R1, SP, 20H
053Ax(82E0000C): LDR R2, SP, CH
053By(83E00010): LDR R3, SP, 10H
053Cz(F7FFFF5D): BL -163 [049AH]
IF h THENa underflow(a,b dpg1,c R,d h)e;f Kernel.PutSector(dpg0,g a)h ENDi
053Da(80E0000C): LDR R0, SP, CH
053Ea(90000000): LDR R0, R0, 0H
053Fa(E100000A): BEQ 10 [054AH]
0540b(40E80024): ADD R0, SP, 24H
0541b .FIXUP D
0541b(8D000015): LDR SB, MT, MOD0 [FileDir]
0542b(41D80028): ADD R1, SB, 28H [data]
0543c(82E00020): LDR R2, SP, 20H
0544d(83E0001C): LDR R3, SP, 1CH
0545e(84E0000C): LDR R4, SP, CH
0546f(F7FFFCF8): BL -776 [023FH]
0547g(80E00008): LDR R0, SP, 8H
0548h(41E80024): ADD R1, SP, 24H
0549i .FIXUP P
0549i(F7110015): BL MOD1 [Kernel] PROC16
ELSE (*not in tree*) fadj := 0
054Aj(E7000003): B 3 [054EH]
054Bk(40000000): MOV R0, R0, 0H
054Ck(81E00010): LDR R1, SP, 10H
054Dk(A0100000): STR R0, R1, 0H
ENDl delete;
054El(8FE00000): LDR LNK, SP, 0H
054Fl(4EE80424): ADD SP, SP, 424H
0550l(C700000F): B LNK
PROCEDURE Delete*(name: FileName; VAR fad: DiskAdr);
VAR h: BOOLEAN; newroot: DiskAdr;
a: DirPage;
0551m .PROC 6
0551m(4EE90414): SUB SP, SP, 414H
0552m(AFE00000): STR LNK, SP, 0H
0553m(A0E00004): STR R0, SP, 4H
0554m(A1E00008): STR R1, SP, 8H
0555n(40000000): MOV R0, R0, 0H
0556n(B0E0000C): STR R0, SP, CH
delete(name,o DirRootAdr,p h,q fad)r;s
0557o(80E00004): LDR R0, SP, 4H
0558p(4100001D): MOV R1, R0, 1DH
0559q(42E8000C): ADD R2, SP, CH
055Ar(83E00008): LDR R3, SP, 8H
055Bs(F7FFFF3E): BL -194 [049AH]
IF h THENt (*root underflow*)
055Ct(90E0000C): LDR R0, SP, CH
055Dt(E1000019): BEQ 25 [0577H]
Kernel.GetSector(DirRootAdr,u a)v;w ASSERT(a.mark = DirMark)x;y
055Eu(4000001D): MOV R0, R0, 1DH
055Fv(41E80014): ADD R1, SP, 14H
0560w .FIXUP P
0560w(F710F017): BL MOD1 [Kernel] PROC15
0561x(80E00014): LDR R0, SP, 14H
0562x(71009B1E): MOV' R1, R0, FFFF9B1EH
0563x(4116A38D): IOR R1, R1, FFFFA38DH
0564x(00090001): SUB R0, R0, R1
0565y(D923CE7C): BLNE MT [trap=7, pos=9166]
IF (a.m = 0)z & (aa.p0 # 0)b THENc
0566z(80E00018): LDR R0, SP, 18H
0567a(E900000F): BNE 15 [0577H]
0568b(80E0001C): LDR R0, SP, 1CH
0569c(E100000D): BEQ 13 [0577H]
newroot := a.p0;d Kernel.GetSector(newroot,e a)f;g ASSERT(a.mark = DirMark)h;i
056Ad(80E0001C): LDR R0, SP, 1CH
056Bd(A0E00010): STR R0, SP, 10H
056Ce(80E00010): LDR R0, SP, 10H
056Df(41E80014): ADD R1, SP, 14H
056Eg .FIXUP P
056Eg(F710F00E): BL MOD1 [Kernel] PROC15
056Fh(80E00014): LDR R0, SP, 14H
0570h(71009B1E): MOV' R1, R0, FFFF9B1EH
0571h(4116A38D): IOR R1, R1, FFFFA38DH
0572h(00090001): SUB R0, R0, R1
0573i(D924447C): BLNE MT [trap=7, pos=9284]
Kernel.PutSector(DirRootAdr,j a)k (*discard newroot*)
0574j(4000001D): MOV R0, R0, 1DH
0575k(41E80014): ADD R1, SP, 14H
0576l .FIXUP P
0576l(F7110008): BL MOD1 [Kernel] PROC16
ENDm Delete;
0577m(8FE00000): LDR LNK, SP, 0H
0578m(4EE80414): ADD SP, SP, 414H
0579m(C700000F): B LNK
PROCEDURE enumerate(prefix: ARRAY OF CHAR;
dpg: DiskAdr;
proc: EntryHandler;
VAR continue: BOOLEAN);
VAR i, j: INTEGER; pfx, nmx: CHAR;
dpg1: DiskAdr; a: DirPage;
BEGINn Kernel.GetSector(dpg,o a)p;q ASSERT(a.mark = DirMark)r;s i := 0;t
057An(4EE90428): SUB SP, SP, 428H
057Bn(AFE00000): STR LNK, SP, 0H
057Cn(A0E00004): STR R0, SP, 4H
057Dn(A1E00008): STR R1, SP, 8H
057En(A2E0000C): STR R2, SP, CH
057Fn(A3E00010): STR R3, SP, 10H
0580n(A4E00014): STR R4, SP, 14H
0581o(80E0000C): LDR R0, SP, CH
0582p(41E80028): ADD R1, SP, 28H
0583q .FIXUP P
0583q(F710F00D): BL MOD1 [Kernel] PROC15
0584r(80E00028): LDR R0, SP, 28H
0585r(71009B1E): MOV' R1, R0, FFFF9B1EH
0586r(4116A38D): IOR R1, R1, FFFFA38DH
0587r(00090001): SUB R0, R0, R1
0588s(D925E17C): BLNE MT [trap=7, pos=9697]
0589t(40000000): MOV R0, R0, 0H
058At(A0E00018): STR R0, SP, 18H
WHILE (i < a.m)u & continuev DOw
058Bu(80E00018): LDR R0, SP, 18H
058Cu(81E0002C): LDR R1, SP, 2CH
058Du(00090001): SUB R0, R0, R1
058Ev(ED000057): BGE 87 [05E6H]
058Fw(80E00014): LDR R0, SP, 14H
0590w(90000000): LDR R0, R0, 0H
0591w(E1000054): BEQ 84 [05E6H]
j := 0;x
0592x(40000000): MOV R0, R0, 0H
0593x(A0E0001C): STR R0, SP, 1CH
REPEAT pfx := prefix[j]y;z nmx := a.e[i][j]b;c INC(j)
0594y(80E0001C): LDR R0, SP, 1CH
0595y(81E00008): LDR R1, SP, 8H
0596y(01090001): SUB R1, R0, R1
0597y(DA26371C): BLCC MT [trap=1, pos=9783]
0598y(81E00004): LDR R1, SP, 4H
0599y(00180000): ADD R0, R1, R0
059Az(90000000): LDR R0, R0, 0H
059Bz(B0E00020): STR R0, SP, 20H
059Ca(80E00018): LDR R0, SP, 18H
059Da(41090018): SUB R1, R0, 18H
059Ea(DA26461C): BLCC MT [trap=1, pos=9798]
059Fa(400A0028): MUL R0, R0, 28H
05A0a(00E80000): ADD R0, SP, R0
05A1b(81E0001C): LDR R1, SP, 1CH
05A2b(42190020): SUB R2, R1, 20H
05A3b(DA264E1C): BLCC MT [trap=1, pos=9806]
05A4b(00080001): ADD R0, R0, R1
05A5c(90000068): LDR R0, R0, 68H
05A6c(B0E00021): STR R0, SP, 21H
UNTILd (nmx # pfx)e OR (fpfx = 0X)g;h
05A7d(80E0001C): LDR R0, SP, 1CH
05A8d(40080001): ADD R0, R0, 1H
05A9d(A0E0001C): STR R0, SP, 1CH
05AAe(90E00021): LDR R0, SP, 21H
05ABe(91E00020): LDR R1, SP, 20H
05ACe(00090001): SUB R0, R0, R1
05ADf(E9000002): BNE 2 [05B0H]
05AEg(90E00020): LDR R0, SP, 20H
05AFh(E9FFFFE4): BNE -28 [0594H]
IF nmx >= pfx THENi
05B0i(90E00021): LDR R0, SP, 21H
05B1i(91E00020): LDR R1, SP, 20H
05B2i(00090001): SUB R0, R0, R1
05B3i(E500002E): BLT 46 [05E2H]
IF i = 0 THENj dpg1 := a.p0 ELSEk dpg1l := a.e[i-1]m.p ENDn ;
05B4j(80E00018): LDR R0, SP, 18H
05B5j(E9000003): BNE 3 [05B9H]
05B6k(80E00030): LDR R0, SP, 30H
05B7k(A0E00024): STR R0, SP, 24H
05B8l(E7000008): B 8 [05C1H]
05B9m(80E00018): LDR R0, SP, 18H
05BAm(40090001): SUB R0, R0, 1H
05BBm(41090018): SUB R1, R0, 18H
05BCm(DA26CF1C): BLCC MT [trap=1, pos=9935]
05BDm(400A0028): MUL R0, R0, 28H
05BEm(00E80000): ADD R0, SP, R0
05BFn(8000008C): LDR R0, R0, 8CH
05C0n(A0E00024): STR R0, SP, 24H
IF dpg1 # 0 THENo enumerate(prefix,p dpg1,q proc,r continue)s ENDt ;
05C1o(80E00024): LDR R0, SP, 24H
05C2o(E1000006): BEQ 6 [05C9H]
05C3p(80E00004): LDR R0, SP, 4H
05C4p(81E00008): LDR R1, SP, 8H
05C5q(82E00024): LDR R2, SP, 24H
05C6r(83E00010): LDR R3, SP, 10H
05C7s(84E00014): LDR R4, SP, 14H
05C8t(F7FFFFB1): BL -79 [057AH]
IF pfx = 0X THENu
05C9u(90E00020): LDR R0, SP, 20H
05CAu(E9000014): BNE 20 [05DFH]
IF continue THENv proc(a.e[i],x a.e[i]y.adr,z continue)a ENDb
05CBv(80E00014): LDR R0, SP, 14H
05CCv(90000000): LDR R0, R0, 0H
05CDv(E1000010): BEQ 16 [05DEH]
05CEw(80E00018): LDR R0, SP, 18H
05CFw(41090018): SUB R1, R0, 18H
05D0w(DA275E1C): BLCC MT [trap=1, pos=10078]
05D1w(400A0028): MUL R0, R0, 28H
05D2w(00E80000): ADD R0, SP, R0
05D3x(40080068): ADD R0, R0, 68H
05D4y(81E00018): LDR R1, SP, 18H
05D5y(42190018): SUB R2, R1, 18H
05D6y(DA276B1C): BLCC MT [trap=1, pos=10091]
05D7y(411A0028): MUL R1, R1, 28H
05D8y(01E80001): ADD R1, SP, R1
05D9z(81100088): LDR R1, R1, 88H
05DAa(82E00014): LDR R2, SP, 14H
05DBb(83E00010): LDR R3, SP, 10H
05DCb(D1277E5C): BLEQ MT [trap=5, pos=10110]
05DDb(D7000003): BL R3
ELSE continuec := FALSE
05DEc(E7000003): B 3 [05E2H]
05DFd(40000000): MOV R0, R0, 0H
05E0d(81E00014): LDR R1, SP, 14H
05E1d(B0100000): STR R0, R1, 0H
ENDe ;
05E2e(80E00018): LDR R0, SP, 18H
05E3e(40080001): ADD R0, R0, 1H
05E4e(A0E00018): STR R0, SP, 18H
05E5e(E7FFFFA5): B -91 [058BH]
IF continue & (fi > 0)g & (ha.e[i-1]i.p # 0)j THENk
05E6f(80E00014): LDR R0, SP, 14H
05E7f(90000000): LDR R0, R0, 0H
05E8f(E1000017): BEQ 23 [0600H]
05E9g(80E00018): LDR R0, SP, 18H
05EAg(40090000): SUB R0, R0, 0H
05EBh(E6000014): BLE 20 [0600H]
05ECi(80E00018): LDR R0, SP, 18H
05EDi(40090001): SUB R0, R0, 1H
05EEi(41090018): SUB R1, R0, 18H
05EFi(DA27F21C): BLCC MT [trap=1, pos=10226]
05F0i(400A0028): MUL R0, R0, 28H
05F1i(00E80000): ADD R0, SP, R0
05F2j(8000008C): LDR R0, R0, 8CH
05F3k(E100000C): BEQ 12 [0600H]
enumerate(prefix,l a.e[i-1]m.p,n proc,o continue)p
05F4l(80E00004): LDR R0, SP, 4H
05F5l(81E00008): LDR R1, SP, 8H
05F6m(82E00018): LDR R2, SP, 18H
05F7m(42290001): SUB R2, R2, 1H
05F8m(43290018): SUB R3, R2, 18H
05F9m(DA281F1C): BLCC MT [trap=1, pos=10271]
05FAm(422A0028): MUL R2, R2, 28H
05FBm(02E80002): ADD R2, SP, R2
05FCn(8220008C): LDR R2, R2, 8CH
05FDo(83E00010): LDR R3, SP, 10H
05FEp(84E00014): LDR R4, SP, 14H
05FFq(F7FFFF7A): BL -134 [057AH]
ENDr enumerate;
0600r(8FE00000): LDR LNK, SP, 0H
0601r(4EE80428): ADD SP, SP, 428H
0602r(C700000F): B LNK
PROCEDURE Enumerate*(prefix: ARRAY OF CHAR; proc: EntryHandler);
BEGINs b := TRUE;t enumerate(prefix,u DirRootAdr,v proc,w b)x
0603s .PROC 7
0603s(4EE90014): SUB SP, SP, 14H
0604s(AFE00000): STR LNK, SP, 0H
0605s(A0E00004): STR R0, SP, 4H
0606s(A1E00008): STR R1, SP, 8H
0607s(A2E0000C): STR R2, SP, CH
0608t(40000001): MOV R0, R0, 1H
0609t(B0E00010): STR R0, SP, 10H
060Au(80E00004): LDR R0, SP, 4H
060Bu(81E00008): LDR R1, SP, 8H
060Cv(4200001D): MOV R2, R0, 1DH
060Dw(83E0000C): LDR R3, SP, CH
060Ex(44E80010): ADD R4, SP, 10H
ENDy Enumerate;
060Fy(F7FFFF6A): BL -150 [057AH]
0610y(8FE00000): LDR LNK, SP, 0H
0611y(4EE80014): ADD SP, SP, 14H
0612y(C700000F): B LNK
(* ----- initialization ----- *)
A: ARRAY 2000 OF DiskAdr;
0613z(E7000178): B 376 [078CH]
VAR L, R, i, j, n: INTEGER; x: DiskAdr;
hd: FileHeader;
B: IndexSector;
0614a(E700006C): B 108 [0681H]
VAR i, j: INTEGER; x: DiskAdr;
BEGINb j := L;c x := A[j]d;e
0615b(4EE90020): SUB SP, SP, 20H
0616b(AFE00000): STR LNK, SP, 0H
0617b(A0E00004): STR R0, SP, 4H
0618b(A1E00008): STR R1, SP, 8H
0619b(A2E0000C): STR R2, SP, CH
061Ab(A3E00010): STR R3, SP, 10H
061Bc(80E0000C): LDR R0, SP, CH
061Cc(A0E00018): STR R0, SP, 18H
061Dd(80E00018): LDR R0, SP, 18H
061Ed(81E00008): LDR R1, SP, 8H
061Fd(01090001): SUB R1, R0, R1
0620d(DA2A7B1C): BLCC MT [trap=1, pos=10875]
0621d(40010002): LSL R0, R0, 2H
0622d(81E00004): LDR R1, SP, 4H
0623d(00180000): ADD R0, R1, R0
0624e(80000000): LDR R0, R0, 0H
0625e(A0E0001C): STR R0, SP, 1CH
REPEAT i := j;f j := 2*j +g 1;h
0626f(80E00018): LDR R0, SP, 18H
0627f(A0E00014): STR R0, SP, 14H
0628g(80E00018): LDR R0, SP, 18H
0629g(40010001): LSL R0, R0, 1H
062Ah(40080001): ADD R0, R0, 1H
062Bh(A0E00018): STR R0, SP, 18H
IF (j+1 <i R)j & (kA[j]l < A[j+1]m)n THENo INC(j) ENDp ;
062Ci(80E00018): LDR R0, SP, 18H
062Di(40080001): ADD R0, R0, 1H
062Ej(81E00010): LDR R1, SP, 10H
062Fj(00090001): SUB R0, R0, R1
0630k(ED000016): BGE 22 [0647H]
0631l(80E00018): LDR R0, SP, 18H
0632l(81E00008): LDR R1, SP, 8H
0633l(01090001): SUB R1, R0, R1
0634l(DA2AC01C): BLCC MT [trap=1, pos=10944]
0635l(40010002): LSL R0, R0, 2H
0636l(81E00004): LDR R1, SP, 4H
0637l(00180000): ADD R0, R1, R0
0638m(81E00018): LDR R1, SP, 18H
0639m(41180001): ADD R1, R1, 1H
063Am(82E00008): LDR R2, SP, 8H
063Bm(02190002): SUB R2, R1, R2
063Cm(DA2AC91C): BLCC MT [trap=1, pos=10953]
063Dm(41110002): LSL R1, R1, 2H
063Em(82E00004): LDR R2, SP, 4H
063Fm(01280001): ADD R1, R2, R1
0640n(80000000): LDR R0, R0, 0H
0641n(81100000): LDR R1, R1, 0H
0642n(00090001): SUB R0, R0, R1
0643o(ED000003): BGE 3 [0647H]
0644p(80E00018): LDR R0, SP, 18H
0645p(40080001): ADD R0, R0, 1H
0646p(A0E00018): STR R0, SP, 18H
IF (j < R)q & (rx <= A[j]s)t THENu A[i]v := A[j]w ENDx
0647q(80E00018): LDR R0, SP, 18H
0648q(81E00010): LDR R1, SP, 10H
0649q(00090001): SUB R0, R0, R1
064Ar(ED00001B): BGE 27 [0666H]
064Bs(80E00018): LDR R0, SP, 18H
064Cs(81E00008): LDR R1, SP, 8H
064Ds(01090001): SUB R1, R0, R1
064Es(DA2AFE1C): BLCC MT [trap=1, pos=11006]
064Fs(40010002): LSL R0, R0, 2H
0650s(81E00004): LDR R1, SP, 4H
0651s(00180000): ADD R0, R1, R0
0652t(81E0001C): LDR R1, SP, 1CH
0653t(80000000): LDR R0, R0, 0H
0654t(01190000): SUB R1, R1, R0
0655u(EE000010): BGT 16 [0666H]
0656v(80E00014): LDR R0, SP, 14H
0657v(81E00008): LDR R1, SP, 8H
0658v(01090001): SUB R1, R0, R1
0659v(DA2B091C): BLCC MT [trap=1, pos=11017]
065Av(40010002): LSL R0, R0, 2H
065Bv(81E00004): LDR R1, SP, 4H
065Cv(00180000): ADD R0, R1, R0
065Dw(81E00018): LDR R1, SP, 18H
065Ew(82E00008): LDR R2, SP, 8H
065Fw(02190002): SUB R2, R1, R2
0660w(DA2B111C): BLCC MT [trap=1, pos=11025]
0661w(41110002): LSL R1, R1, 2H
0662w(82E00004): LDR R2, SP, 4H
0663w(01280001): ADD R1, R2, R1
0664x(81100000): LDR R1, R1, 0H
0665x(A1000000): STR R1, R0, 0H
UNTIL (j >= R)y OR (zx > A[j]a)b;c
0666y(80E00018): LDR R0, SP, 18H
0667y(81E00010): LDR R1, SP, 10H
0668y(00090001): SUB R0, R0, R1
0669z(ED00000B): BGE 11 [0675H]
066Aa(80E00018): LDR R0, SP, 18H
066Ba(81E00008): LDR R1, SP, 8H
066Ca(01090001): SUB R1, R0, R1
066Da(DA2B391C): BLCC MT [trap=1, pos=11065]
066Ea(40010002): LSL R0, R0, 2H
066Fa(81E00004): LDR R1, SP, 4H
0670a(00180000): ADD R0, R1, R0
0671b(81E0001C): LDR R1, SP, 1CH
0672b(80000000): LDR R0, R0, 0H
0673b(01190000): SUB R1, R1, R0
0674c(E6FFFFB1): BLE -79 [0626H]
A[i]d := x
0675d(80E00014): LDR R0, SP, 14H
0676d(81E00008): LDR R1, SP, 8H
0677d(01090001): SUB R1, R0, R1
0678d(DA2B481C): BLCC MT [trap=1, pos=11080]
0679d(40010002): LSL R0, R0, 2H
067Ad(81E00004): LDR R1, SP, 4H
067Bd(00180000): ADD R0, R1, R0
ENDe sift;
067Ce(81E0001C): LDR R1, SP, 1CH
067De(A1000000): STR R1, R0, 0H
067Ee(8FE00000): LDR LNK, SP, 0H
067Fe(4EE80020): ADD SP, SP, 20H
0680e(C700000F): B LNK
BEGINf L := k DIV 2;g R := k;h (*heapsort*)
0681f(4EE90828): SUB SP, SP, 828H
0682f(AFE00000): STR LNK, SP, 0H
0683f(A0E00004): STR R0, SP, 4H
0684f(A1E00008): STR R1, SP, 8H
0685f(A2E0000C): STR R2, SP, CH
0686g(80E0000C): LDR R0, SP, CH
0687g(40020001): ASR R0, R0, 1H
0688g(A0E00010): STR R0, SP, 10H
0689h(80E0000C): LDR R0, SP, CH
068Ah(A0E00014): STR R0, SP, 14H
WHILE L > 0 DOi DEC(L);j sift(A,k L,l R)m ENDn ;
068Bi(80E00010): LDR R0, SP, 10H
068Ci(40090000): SUB R0, R0, 0H
068Di(E6000009): BLE 9 [0697H]
068Ej(80E00010): LDR R0, SP, 10H
068Fj(40090001): SUB R0, R0, 1H
0690j(A0E00010): STR R0, SP, 10H
0691k(80E00004): LDR R0, SP, 4H
0692k(81E00008): LDR R1, SP, 8H
0693l(82E00010): LDR R2, SP, 10H
0694m(83E00014): LDR R3, SP, 14H
0695n(F7FFFF7F): BL -129 [0615H]
0696n(E7FFFFF4): B -12 [068BH]
0697o(80E00014): LDR R0, SP, 14H
0698o(40090000): SUB R0, R0, 0H
0699o(E600002B): BLE 43 [06C5H]
DEC(R);p x := A[0]q;r A[0]s := A[R]t;u A[R]v := x;w sift(A,x L,y R)z
069Ap(80E00014): LDR R0, SP, 14H
069Bp(40090001): SUB R0, R0, 1H
069Cp(A0E00014): STR R0, SP, 14H
069Dq(40000000): MOV R0, R0, 0H
069Eq(81E00008): LDR R1, SP, 8H
069Fq(01090001): SUB R1, R0, R1
06A0q(DA2BEB1C): BLCC MT [trap=1, pos=11243]
06A1q(40010002): LSL R0, R0, 2H
06A2q(81E00004): LDR R1, SP, 4H
06A3q(00180000): ADD R0, R1, R0
06A4r(80000000): LDR R0, R0, 0H
06A5r(A0E00024): STR R0, SP, 24H
06A6s(40000000): MOV R0, R0, 0H
06A7s(81E00008): LDR R1, SP, 8H
06A8s(01090001): SUB R1, R0, R1
06A9s(DA2BF11C): BLCC MT [trap=1, pos=11249]
06AAs(40010002): LSL R0, R0, 2H
06ABs(81E00004): LDR R1, SP, 4H
06ACs(00180000): ADD R0, R1, R0
06ADt(81E00014): LDR R1, SP, 14H
06AEt(82E00008): LDR R2, SP, 8H
06AFt(02190002): SUB R2, R1, R2
06B0t(DA2BF91C): BLCC MT [trap=1, pos=11257]
06B1t(41110002): LSL R1, R1, 2H
06B2t(82E00004): LDR R2, SP, 4H
06B3t(01280001): ADD R1, R2, R1
06B4u(81100000): LDR R1, R1, 0H
06B5u(A1000000): STR R1, R0, 0H
06B6v(80E00014): LDR R0, SP, 14H
06B7v(81E00008): LDR R1, SP, 8H
06B8v(01090001): SUB R1, R0, R1
06B9v(DA2BFF1C): BLCC MT [trap=1, pos=11263]
06BAv(40010002): LSL R0, R0, 2H
06BBv(81E00004): LDR R1, SP, 4H
06BCv(00180000): ADD R0, R1, R0
06BDw(81E00024): LDR R1, SP, 24H
06BEw(A1000000): STR R1, R0, 0H
06BFx(80E00004): LDR R0, SP, 4H
06C0x(81E00008): LDR R1, SP, 8H
06C1y(82E00010): LDR R2, SP, 10H
06C2z(83E00014): LDR R3, SP, 14H
ENDa ;
06C3a(F7FFFF51): BL -175 [0615H]
06C4a(E7FFFFD2): B -46 [0697H]
06C5b(80E00010): LDR R0, SP, 10H
06C6b(81E0000C): LDR R1, SP, CH
06C7b(00090001): SUB R0, R0, R1
06C8b(ED000069): BGE 105 [0732H]
Kernel.GetSector(A[L]c,d hd)e;f ASSERT(hd.mark = HeaderMark)g;h
06C9c(80E00010): LDR R0, SP, 10H
06CAc(81E00008): LDR R1, SP, 8H
06CBc(01090001): SUB R1, R0, R1
06CCc(DA2C521C): BLCC MT [trap=1, pos=11346]
06CDc(40010002): LSL R0, R0, 2H
06CEc(81E00004): LDR R1, SP, 4H
06CFc(00180000): ADD R0, R1, R0
06D0d(80000000): LDR R0, R0, 0H
06D1e(41E80028): ADD R1, SP, 28H
06D2f .FIXUP P
06D2f(F710F14F): BL MOD1 [Kernel] PROC15
06D3g(80E00028): LDR R0, SP, 28H
06D4g(71009BA7): MOV' R1, R0, FFFF9BA7H
06D5g(41161D86): IOR R1, R1, 1D86H
06D6g(00090001): SUB R0, R0, R1
06D7h(D92C767C): BLNE MT [trap=7, pos=11382]
IF hd.aleng < SecTabSize THENi j := hd.aleng + 1;j
06D8i(80E0004C): LDR R0, SP, 4CH
06D9i(40090040): SUB R0, R0, 40H
06DAi(ED000010): BGE 16 [06EBH]
06DBj(80E0004C): LDR R0, SP, 4CH
06DCj(40080001): ADD R0, R0, 1H
06DDj(A0E0001C): STR R0, SP, 1CH
REPEAT DEC(j);k Kernel.MarkSector(hd.sec[j]l)m UNTILn j = 0
06DEk(80E0001C): LDR R0, SP, 1CH
06DFk(40090001): SUB R0, R0, 1H
06E0k(A0E0001C): STR R0, SP, 1CH
06E1l(80E0001C): LDR R0, SP, 1CH
06E2l(41090040): SUB R1, R0, 40H
06E3l(DA2CE41C): BLCC MT [trap=1, pos=11492]
06E4l(40010002): LSL R0, R0, 2H
06E5l(00E80000): ADD R0, SP, R0
06E6m(80000088): LDR R0, R0, 88H
06E7n .FIXUP P
06E7n(F710C015): BL MOD1 [Kernel] PROC12
ELSEo jp := SecTabSize;q
06E8o(80E0001C): LDR R0, SP, 1CH
06E9o(E9FFFFF4): BNE -12 [06DEH]
06EAp(E7000043): B 67 [072EH]
06EBq(40000040): MOV R0, R0, 40H
06ECq(A0E0001C): STR R0, SP, 1CH
REPEAT DEC(j);r Kernel.MarkSector(hd.sec[j]s)t UNTILu j = 0;v
06EDr(80E0001C): LDR R0, SP, 1CH
06EEr(40090001): SUB R0, R0, 1H
06EFr(A0E0001C): STR R0, SP, 1CH
06F0s(80E0001C): LDR R0, SP, 1CH
06F1s(41090040): SUB R1, R0, 40H
06F2s(DA2D441C): BLCC MT [trap=1, pos=11588]
06F3s(40010002): LSL R0, R0, 2H
06F4s(00E80000): ADD R0, SP, R0
06F5t(80000088): LDR R0, R0, 88H
06F6u .FIXUP P
06F6u(F710C00F): BL MOD1 [Kernel] PROC12
06F7v(80E0001C): LDR R0, SP, 1CH
06F8v(E9FFFFF4): BNE -12 [06EDH]
n := (hd.aleng - SecTabSize)w DIV 256;x i := 0;y
06F9w(80E0004C): LDR R0, SP, 4CH
06FAw(40090040): SUB R0, R0, 40H
06FBx(40020008): ASR R0, R0, 8H
06FCx(A0E00020): STR R0, SP, 20H
06FDy(40000000): MOV R0, R0, 0H
06FEy(A0E00018): STR R0, SP, 18H
WHILE i <= n DOz
06FFz(80E00018): LDR R0, SP, 18H
0700z(81E00020): LDR R1, SP, 20H
0701z(00090001): SUB R0, R0, R1
0702z(EE00002B): BGT 43 [072EH]
0703a(80E00018): LDR R0, SP, 18H
0704a(4109000C): SUB R1, R0, CH
0705a(DA2DCC1C): BLCC MT [trap=1, pos=11724]
0706a(40010002): LSL R0, R0, 2H
0707a(00E80000): ADD R0, SP, R0
0708b(80000058): LDR R0, R0, 58H
0709c .FIXUP P
0709c(F710C013): BL MOD1 [Kernel] PROC12
Kernel.GetSector(hd.ext[i]d,e B)f;g (*index sector*)
070Ad(80E00018): LDR R0, SP, 18H
070Bd(4109000C): SUB R1, R0, CH
070Cd(DA2DF51C): BLCC MT [trap=1, pos=11765]
070Dd(40010002): LSL R0, R0, 2H
070Ed(00E80000): ADD R0, SP, R0
070Fe(80000058): LDR R0, R0, 58H
0710f(41E80428): ADD R1, SP, 428H
0711g .FIXUP P
0711g(F710F008): BL MOD1 [Kernel] PROC15
IF i < n THENh j := 256 ELSEi jj := (hd.aleng - SecTabSize)k MOD 256 +l 1 ENDm ;
0712h(80E00018): LDR R0, SP, 18H
0713h(81E00020): LDR R1, SP, 20H
0714h(00090001): SUB R0, R0, R1
0715h(ED000003): BGE 3 [0719H]
0716i(40000100): MOV R0, R0, 100H
0717i(A0E0001C): STR R0, SP, 1CH
0718j(E7000005): B 5 [071EH]
0719k(80E0004C): LDR R0, SP, 4CH
071Ak(40090040): SUB R0, R0, 40H
071Bl(400400FF): AND R0, R0, FFH
071Cm(40080001): ADD R0, R0, 1H
071Dm(A0E0001C): STR R0, SP, 1CH
REPEAT DEC(j);n Kernel.MarkSector(B[j]o)p UNTILq j = 0;r
071En(80E0001C): LDR R0, SP, 1CH
071Fn(40090001): SUB R0, R0, 1H
0720n(A0E0001C): STR R0, SP, 1CH
0721o(80E0001C): LDR R0, SP, 1CH
0722o(41090100): SUB R1, R0, 100H
0723o(DA2E941C): BLCC MT [trap=1, pos=11924]
0724o(40010002): LSL R0, R0, 2H
0725o(00E80000): ADD R0, SP, R0
0726p(80000428): LDR R0, R0, 428H
0727q .FIXUP P
0727q(F710C016): BL MOD1 [Kernel] PROC12
0728r(80E0001C): LDR R0, SP, 1CH
0729r(E9FFFFF4): BNE -12 [071EH]
072As(80E00018): LDR R0, SP, 18H
072Bs(40080001): ADD R0, R0, 1H
072Cs(A0E00018): STR R0, SP, 18H
072Ds(E7FFFFD1): B -47 [06FFH]
072Et(80E00010): LDR R0, SP, 10H
072Ft(40080001): ADD R0, R0, 1H
0730t(A0E00010): STR R0, SP, 10H
0731t(E7FFFF93): B -109 [06C5H]
ENDu MarkSectors;
0732u(8FE00000): LDR LNK, SP, 0H
0733u(4EE80828): ADD SP, SP, 828H
0734u(C700000F): B LNK
PROCEDURE TraverseDir(VAR A: ARRAY OF DiskAdr; VAR k: INTEGER; dpg: DiskAdr);
VAR i: INTEGER; a: DirPage;
BEGINv Kernel.GetSector(dpg,w a)x;y ASSERT(a.mark = DirMark)z;a Kernel.MarkSector(dpg)b;c i := 0;d
0735v(4EE90418): SUB SP, SP, 418H
0736v(AFE00000): STR LNK, SP, 0H
0737v(A0E00004): STR R0, SP, 4H
0738v(A1E00008): STR R1, SP, 8H
0739v(A2E0000C): STR R2, SP, CH
073Av(A3E00010): STR R3, SP, 10H
073Bw(80E00010): LDR R0, SP, 10H
073Cx(41E80018): ADD R1, SP, 18H
073Dy .FIXUP P
073Dy(F710F016): BL MOD1 [Kernel] PROC15
073Ez(80E00018): LDR R0, SP, 18H
073Fz(71009B1E): MOV' R1, R0, FFFF9B1EH
0740z(4116A38D): IOR R1, R1, FFFFA38DH
0741z(00090001): SUB R0, R0, R1
0742a(D92FB27C): BLNE MT [trap=7, pos=12210]
0743b(80E00010): LDR R0, SP, 10H
0744c .FIXUP P
0744c(F710C007): BL MOD1 [Kernel] PROC12
0745d(40000000): MOV R0, R0, 0H
0746d(A0E00014): STR R0, SP, 14H
WHILE i < a.m DOe
0747e(80E00014): LDR R0, SP, 14H
0748e(81E0001C): LDR R1, SP, 1CH
0749e(00090001): SUB R0, R0, R1
074Ae(ED000023): BGE 35 [076EH]
A[k]f := a.e[i]g.adr;h INC(k);i INC(i);j
074Bf(80E0000C): LDR R0, SP, CH
074Cf(80000000): LDR R0, R0, 0H
074Df(81E00008): LDR R1, SP, 8H
074Ef(01090001): SUB R1, R0, R1
074Ff(DA2FF61C): BLCC MT [trap=1, pos=12278]
0750f(40010002): LSL R0, R0, 2H
0751f(81E00004): LDR R1, SP, 4H
0752f(00180000): ADD R0, R1, R0
0753g(81E00014): LDR R1, SP, 14H
0754g(42190018): SUB R2, R1, 18H
0755g(DA30001C): BLCC MT [trap=1, pos=12288]
0756g(411A0028): MUL R1, R1, 28H
0757g(01E80001): ADD R1, SP, R1
0758h(81100078): LDR R1, R1, 78H
0759h(A1000000): STR R1, R0, 0H
075Ai(80E0000C): LDR R0, SP, CH
075Bi(81000000): LDR R1, R0, 0H
075Ci(41180001): ADD R1, R1, 1H
075Di(A1000000): STR R1, R0, 0H
075Ej(80E00014): LDR R0, SP, 14H
075Fj(40080001): ADD R0, R0, 1H
0760j(A0E00014): STR R0, SP, 14H
IF k = 2000 THENk MarkSectors(A,l k)m;n k := 0 ENDo
0761k(80E0000C): LDR R0, SP, CH
0762k(80000000): LDR R0, R0, 0H
0763k(400907D0): SUB R0, R0, 7D0H
0764k(E9000008): BNE 8 [076DH]
0765l(80E00004): LDR R0, SP, 4H
0766l(81E00008): LDR R1, SP, 8H
0767m(82E0000C): LDR R2, SP, CH
0768m(82200000): LDR R2, R2, 0H
0769n(F7FFFF17): BL -233 [0681H]
076Ao(40000000): MOV R0, R0, 0H
076Bo(81E0000C): LDR R1, SP, CH
076Co(A0100000): STR R0, R1, 0H
ENDp ;
076Dp(E7FFFFD9): B -39 [0747H]
IF a.p0 # 0 THENq
076Eq(80E00020): LDR R0, SP, 20H
076Fq(E1000019): BEQ 25 [0789H]
TraverseDir(A,r k,s a.p0)t;u i := 0;v
0770r(80E00004): LDR R0, SP, 4H
0771r(81E00008): LDR R1, SP, 8H
0772s(82E0000C): LDR R2, SP, CH
0773t(83E00020): LDR R3, SP, 20H
0774u(F7FFFFC0): BL -64 [0735H]
0775v(40000000): MOV R0, R0, 0H
0776v(A0E00014): STR R0, SP, 14H
WHILE i < a.m DOw
0777w(80E00014): LDR R0, SP, 14H
0778w(81E0001C): LDR R1, SP, 1CH
0779w(00090001): SUB R0, R0, R1
077Aw(ED00000E): BGE 14 [0789H]
TraverseDir(A,x k,y a.e[i]z.p)a;b INC(i)
077Bx(80E00004): LDR R0, SP, 4H
077Cx(81E00008): LDR R1, SP, 8H
077Dy(82E0000C): LDR R2, SP, CH
077Ez(83E00014): LDR R3, SP, 14H
077Fz(44390018): SUB R4, R3, 18H
0780z(DA30D41C): BLCC MT [trap=1, pos=12500]
0781z(433A0028): MUL R3, R3, 28H
0782z(03E80003): ADD R3, SP, R3
0783a(8330007C): LDR R3, R3, 7CH
0784b(F7FFFFB0): BL -80 [0735H]
0785c(80E00014): LDR R0, SP, 14H
0786c(40080001): ADD R0, R0, 1H
0787c(A0E00014): STR R0, SP, 14H
0788c(E7FFFFEE): B -18 [0777H]
ENDd TraverseDir;
0789d(8FE00000): LDR LNK, SP, 0H
078Ad(4EE80418): ADD SP, SP, 418H
078Bd(C700000F): B LNK
BEGINe k := 0;f TraverseDir(A,g k,h DirRootAdr)i;j MarkSectors(A,k k)l
078Ce .PROC 8
078Ce .COMMAND Init
078Ce(4EE91F48): SUB SP, SP, 1F48H
078De(AFE00000): STR LNK, SP, 0H
078Ef(40000000): MOV R0, R0, 0H
078Ff(A0E00004): STR R0, SP, 4H
0790g(40E80008): ADD R0, SP, 8H
0791g(410007D0): MOV R1, R0, 7D0H
0792h(42E80004): ADD R2, SP, 4H
0793i(4300001D): MOV R3, R0, 1DH
0794j(F7FFFFA0): BL -96 [0735H]
0795k(40E80008): ADD R0, SP, 8H
0796k(410007D0): MOV R1, R0, 7D0H
0797l(82E00004): LDR R2, SP, 4H
ENDm Init;
0798m(F7FFFEE8): BL -280 [0681H]
0799m(8FE00000): LDR LNK, SP, 0H
079Am(4EE81F48): ADD SP, SP, 1F48H
079Bm(C700000F): B LNK
ENDn FileDir.o
079Cn .PROC 0
079Cn(4EE90004): SUB SP, SP, 4H
079Dn(AFE00000): STR LNK, SP, 0H
079Eo(8FE00000): LDR LNK, SP, 0H
079Fo(4EE80004): ADD SP, SP, 4H
07A0o(C700000F): B LNK