Stars

Used Exports

BUILTINS: INC INTEGER NEW
Display: CopyPattern Frame FrameDesc FrameDesc.H FrameDesc.W FrameDesc.X FrameDesc.Y FrameDesc.dsc FrameDesc.handle FrameDesc.next FrameMsg ReplConst invert star white
MenuViewers: ModifyMsg ModifyMsg.H ModifyMsg.Y New
Oberon: AllocateUserViewer CopyMsg CopyMsg.F DrawMouseArrow InputMsg InputMsg.X InputMsg.Y InputMsg.id Install NewTask Par Par.frame Par.pos Par.text Par.vwr Remove RemoveMarks Task TaskDesc.period track
TextFrames: NewMenu menuH
Texts: Int OpenScanner OpenWriter Scan Scanner Scanner.class Scanner.i Writer
Viewers: Broadcast Close Viewer

MODULE Stars; (*NW 15.1.2013, 15.11.2013*)
.MODULE Stars (KEY 0873A1AD, VERSION 1, SIZE 00000B50)
.IMPORT Display (KEY 4C08D3EA)
.IMPORT Viewers (KEY 25ABF199)
.IMPORT Texts (KEY 0B9E9984)
.IMPORT Fonts (KEY F4C9F557)
.IMPORT Files (KEY 73F5D686)
.IMPORT Oberon (KEY A89CCEE2)
.IMPORT MenuViewers (KEY 245ACC30)
.IMPORT TextFrames (KEY 650813D5)
.TYPEDESC 00000020 FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000100 00014006 FFFFFFFF FFFFFFFF 00000000 00000004 FFFFFFFF 00000020 00030007 FFFFFFFF FFFFFFFF FFFFFFFF 00000020 00044005 FFFFFFFF FFFFFFFF FFFFFFFF
.DATA 2CH
.STRING 84H "Stars"
.STRING 8CH "Stars.Close System.Grow System.Copy Stars.Step Stars.Run Stars.Stop"
.POINTER_REFERENCES 58H 5CH 60H 80H 74H
.FIXUP T 12H
IMPORT SYSTEM, Display, Viewers, Texts, Oberon, MenuViewers, TextFrames;
CONST N = 6; (*nof stars*)
w = 16; (*width of star*)
interval = 200; (*millisec*)
TYPE Frame = POINTER TO FrameDesc;
Pos = RECORD x, y, dx, dy: INTEGER END ;
FrameDesc = RECORD (Display.FrameDesc) s: ARRAY N OF Pos END ;
RestoreMsg = RECORD (Display.FrameMsg) END ;
StepMsg = RECORD (Display.FrameMsg) END ;
VAR T: Oberon.Task;
W: Texts.Writer;
PROCEDURE Draw(x, y: INTEGER);
BEGINa Display.CopyPattern(Display.white,b Display.star,c x,d y,e Display.invert)f
0000a(4EE9000C): SUB SP, SP, CH
0001a(AFE00000): STR LNK, SP, 0H
0002a(A0E00004): STR R0, SP, 4H
0003a(A1E00008): STR R1, SP, 8H
0004b(40000001): MOV R0, R0, 1H
0005c .FIXUP D
0005c(8D100005): LDR SB, MT, MOD1 [Display]
0006c(81D00007): LDR R1, SB, VAR7
0007d(82E00004): LDR R2, SP, 4H
0008e(83E00008): LDR R3, SP, 8H
0009f(44000002): MOV R4, R0, 2H
ENDg Draw;
000Ag .FIXUP P
000Ag(F711000A): BL MOD1 [Display] PROC16
000Bg(8FE00000): LDR LNK, SP, 0H
000Cg(4EE8000C): ADD SP, SP, CH
000Dg(C700000F): B LNK
PROCEDURE Restore(F: Frame);
VAR x0, y0: INTEGER;
BEGINh Oberon.RemoveMarks(F.Xi,j F.Yk,l F.Wm,n F.Ho)p;q
000Eh(4EE90010): SUB SP, SP, 10H
000Fh(AFE00000): STR LNK, SP, 0H
0010h(A0E00004): STR R0, SP, 4H
0011i(80E00004): LDR R0, SP, 4H
0012i(D102CE4C): BLEQ MT [trap=4, pos=718]
0013j(80000008): LDR R0, R0, 8H
0014k(81E00004): LDR R1, SP, 4H
0015k(D102D34C): BLEQ MT [trap=4, pos=723]
0016l(8110000C): LDR R1, R1, CH
0017m(82E00004): LDR R2, SP, 4H
0018m(D102D84C): BLEQ MT [trap=4, pos=728]
0019n(82200010): LDR R2, R2, 10H
001Ao(83E00004): LDR R3, SP, 4H
001Bo(D102DD4C): BLEQ MT [trap=4, pos=733]
001Cp(83300014): LDR R3, R3, 14H
001Dq .FIXUP P
001Dq(F761B013): BL MOD6 [Oberon] PROC27
Display.ReplConst(0,r F.Xs+1,t F.Yu,v F.Ww-1,x F.Hy,z 0)a;b
001Er(40000000): MOV R0, R0, 0H
001Fs(81E00004): LDR R1, SP, 4H
0020s(D102FC4C): BLEQ MT [trap=4, pos=764]
0021t(81100008): LDR R1, R1, 8H
0022t(41180001): ADD R1, R1, 1H
0023u(82E00004): LDR R2, SP, 4H
0024u(D103034C): BLEQ MT [trap=4, pos=771]
0025v(8220000C): LDR R2, R2, CH
0026w(83E00004): LDR R3, SP, 4H
0027w(D103084C): BLEQ MT [trap=4, pos=776]
0028x(83300010): LDR R3, R3, 10H
0029x(43390001): SUB R3, R3, 1H
002Ay(84E00004): LDR R4, SP, 4H
002By(D1030F4C): BLEQ MT [trap=4, pos=783]
002Cz(84400014): LDR R4, R4, 14H
002Da(45000000): MOV R5, R0, 0H
002Eb .FIXUP P
002Eb(F710F011): BL MOD1 [Display] PROC15
x0 := F.Wc DIV 2 +d F.Xe;f y0 := F.Hg DIV 2 +h F.Yi;j
002Fc(80E00004): LDR R0, SP, 4H
0030c(D103224C): BLEQ MT [trap=4, pos=802]
0031d(80000010): LDR R0, R0, 10H
0032d(40020001): ASR R0, R0, 1H
0033e(81E00004): LDR R1, SP, 4H
0034e(D1032E4C): BLEQ MT [trap=4, pos=814]
0035f(81100008): LDR R1, R1, 8H
0036f(00080001): ADD R0, R0, R1
0037f(A0E00008): STR R0, SP, 8H
0038g(80E00004): LDR R0, SP, 4H
0039g(D103394C): BLEQ MT [trap=4, pos=825]
003Ah(80000014): LDR R0, R0, 14H
003Bh(40020001): ASR R0, R0, 1H
003Ci(81E00004): LDR R1, SP, 4H
003Di(D103454C): BLEQ MT [trap=4, pos=837]
003Ej(8110000C): LDR R1, R1, CH
003Fj(00080001): ADD R0, R0, R1
0040j(A0E0000C): STR R0, SP, CH
F.sk[0].x := x0;l F.sm[0].y := y0;n F.so[0].dx := 2;p F.sq[0].dy := 4;r Draw(F.ss[0].x,t F.su[0].y)v;w
0041k(80E00004): LDR R0, SP, 4H
0042k(D1034E4C): BLEQ MT [trap=4, pos=846]
0043l(81E00008): LDR R1, SP, 8H
0044l(A100001C): STR R1, R0, 1CH
0045m(80E00004): LDR R0, SP, 4H
0046m(D1035E4C): BLEQ MT [trap=4, pos=862]
0047n(81E0000C): LDR R1, SP, CH
0048n(A1000020): STR R1, R0, 20H
0049o(80E00004): LDR R0, SP, 4H
004Ao(D1036E4C): BLEQ MT [trap=4, pos=878]
004Bp(41000002): MOV R1, R0, 2H
004Cp(A1000024): STR R1, R0, 24H
004Dq(80E00004): LDR R0, SP, 4H
004Eq(D1037E4C): BLEQ MT [trap=4, pos=894]
004Fr(41000004): MOV R1, R0, 4H
0050r(A1000028): STR R1, R0, 28H
0051s(80E00004): LDR R0, SP, 4H
0052s(D103934C): BLEQ MT [trap=4, pos=915]
0053t(8000001C): LDR R0, R0, 1CH
0054u(81E00004): LDR R1, SP, 4H
0055u(D1039D4C): BLEQ MT [trap=4, pos=925]
0056v(81100020): LDR R1, R1, 20H
0057w(F7FFFFA8): BL -88 [0000H]
F.sx[1].x := x0;y F.sz[1].y := y0;a F.sb[1].dx := 3;c F.sd[1].dy := 9;e Draw(F.sf[1].x,g F.sh[1].y)i;j
0058x(80E00004): LDR R0, SP, 4H
0059x(D103AC4C): BLEQ MT [trap=4, pos=940]
005Ay(81E00008): LDR R1, SP, 8H
005By(A100002C): STR R1, R0, 2CH
005Cz(80E00004): LDR R0, SP, 4H
005Dz(D103BC4C): BLEQ MT [trap=4, pos=956]
005Ea(81E0000C): LDR R1, SP, CH
005Fa(A1000030): STR R1, R0, 30H
0060b(80E00004): LDR R0, SP, 4H
0061b(D103CC4C): BLEQ MT [trap=4, pos=972]
0062c(41000003): MOV R1, R0, 3H
0063c(A1000034): STR R1, R0, 34H
0064d(80E00004): LDR R0, SP, 4H
0065d(D103DC4C): BLEQ MT [trap=4, pos=988]
0066e(41000009): MOV R1, R0, 9H
0067e(A1000038): STR R1, R0, 38H
0068f(80E00004): LDR R0, SP, 4H
0069f(D103F14C): BLEQ MT [trap=4, pos=1009]
006Ag(8000002C): LDR R0, R0, 2CH
006Bh(81E00004): LDR R1, SP, 4H
006Ch(D103FB4C): BLEQ MT [trap=4, pos=1019]
006Di(81100030): LDR R1, R1, 30H
006Ej(F7FFFF91): BL -111 [0000H]
F.sk[2].x := x0;l F.sm[2].y := y0;n F.so[2].dx := -5;p F.sq[2].dy := -2;r Draw(F.ss[2].x,t F.su[2].y)v;w
006Fk(80E00004): LDR R0, SP, 4H
0070k(D1040A4C): BLEQ MT [trap=4, pos=1034]
0071l(81E00008): LDR R1, SP, 8H
0072l(A100003C): STR R1, R0, 3CH
0073m(80E00004): LDR R0, SP, 4H
0074m(D1041A4C): BLEQ MT [trap=4, pos=1050]
0075n(81E0000C): LDR R1, SP, CH
0076n(A1000040): STR R1, R0, 40H
0077o(80E00004): LDR R0, SP, 4H
0078o(D1042A4C): BLEQ MT [trap=4, pos=1066]
0079p(5100FFFB): MOV R1, R0, FFFFFFFBH
007Ap(A1000044): STR R1, R0, 44H
007Bq(80E00004): LDR R0, SP, 4H
007Cq(D1043B4C): BLEQ MT [trap=4, pos=1083]
007Dr(5100FFFE): MOV R1, R0, FFFFFFFEH
007Er(A1000048): STR R1, R0, 48H
007Fs(80E00004): LDR R0, SP, 4H
0080s(D104514C): BLEQ MT [trap=4, pos=1105]
0081t(8000003C): LDR R0, R0, 3CH
0082u(81E00004): LDR R1, SP, 4H
0083u(D1045B4C): BLEQ MT [trap=4, pos=1115]
0084v(81100040): LDR R1, R1, 40H
0085w(F7FFFF7A): BL -134 [0000H]
F.sx[3].x := x0;y F.sz[3].y := y0;a F.sb[3].dx := -10;c F.sd[3].dy := 8;e Draw(F.sf[3].x,g F.sh[3].y)i;j
0086x(80E00004): LDR R0, SP, 4H
0087x(D1046A4C): BLEQ MT [trap=4, pos=1130]
0088y(81E00008): LDR R1, SP, 8H
0089y(A100004C): STR R1, R0, 4CH
008Az(80E00004): LDR R0, SP, 4H
008Bz(D1047A4C): BLEQ MT [trap=4, pos=1146]
008Ca(81E0000C): LDR R1, SP, CH
008Da(A1000050): STR R1, R0, 50H
008Eb(80E00004): LDR R0, SP, 4H
008Fb(D1048A4C): BLEQ MT [trap=4, pos=1162]
0090c(5100FFF6): MOV R1, R0, FFFFFFF6H
0091c(A1000054): STR R1, R0, 54H
0092d(80E00004): LDR R0, SP, 4H
0093d(D1049C4C): BLEQ MT [trap=4, pos=1180]
0094e(41000008): MOV R1, R0, 8H
0095e(A1000058): STR R1, R0, 58H
0096f(80E00004): LDR R0, SP, 4H
0097f(D104B14C): BLEQ MT [trap=4, pos=1201]
0098g(8000004C): LDR R0, R0, 4CH
0099h(81E00004): LDR R1, SP, 4H
009Ah(D104BB4C): BLEQ MT [trap=4, pos=1211]
009Bi(81100050): LDR R1, R1, 50H
009Cj(F7FFFF63): BL -157 [0000H]
F.sk[4].x := x0;l F.sm[4].y := y0;n F.so[4].dx := -7;p F.sq[4].dy := -4;r Draw(F.ss[4].x,t F.su[4].y)v;w
009Dk(80E00004): LDR R0, SP, 4H
009Ek(D104CA4C): BLEQ MT [trap=4, pos=1226]
009Fl(81E00008): LDR R1, SP, 8H
00A0l(A100005C): STR R1, R0, 5CH
00A1m(80E00004): LDR R0, SP, 4H
00A2m(D104DA4C): BLEQ MT [trap=4, pos=1242]
00A3n(81E0000C): LDR R1, SP, CH
00A4n(A1000060): STR R1, R0, 60H
00A5o(80E00004): LDR R0, SP, 4H
00A6o(D104EA4C): BLEQ MT [trap=4, pos=1258]
00A7p(5100FFF9): MOV R1, R0, FFFFFFF9H
00A8p(A1000064): STR R1, R0, 64H
00A9q(80E00004): LDR R0, SP, 4H
00AAq(D104FB4C): BLEQ MT [trap=4, pos=1275]
00ABr(5100FFFC): MOV R1, R0, FFFFFFFCH
00ACr(A1000068): STR R1, R0, 68H
00ADs(80E00004): LDR R0, SP, 4H
00AEs(D105114C): BLEQ MT [trap=4, pos=1297]
00AFt(8000005C): LDR R0, R0, 5CH
00B0u(81E00004): LDR R1, SP, 4H
00B1u(D1051B4C): BLEQ MT [trap=4, pos=1307]
00B2v(81100060): LDR R1, R1, 60H
00B3w(F7FFFF4C): BL -180 [0000H]
F.sx[5].x := x0;y F.sz[5].y := y0;a F.sb[5].dx := 8;c F.sd[5].dy := -10;e Draw(F.sf[5].x,g F.sh[5].y)i
00B4x(80E00004): LDR R0, SP, 4H
00B5x(D1052A4C): BLEQ MT [trap=4, pos=1322]
00B6y(81E00008): LDR R1, SP, 8H
00B7y(A100006C): STR R1, R0, 6CH
00B8z(80E00004): LDR R0, SP, 4H
00B9z(D1053A4C): BLEQ MT [trap=4, pos=1338]
00BAa(81E0000C): LDR R1, SP, CH
00BBa(A1000070): STR R1, R0, 70H
00BCb(80E00004): LDR R0, SP, 4H
00BDb(D1054A4C): BLEQ MT [trap=4, pos=1354]
00BEc(41000008): MOV R1, R0, 8H
00BFc(A1000074): STR R1, R0, 74H
00C0d(80E00004): LDR R0, SP, 4H
00C1d(D1055A4C): BLEQ MT [trap=4, pos=1370]
00C2e(5100FFF6): MOV R1, R0, FFFFFFF6H
00C3e(A1000078): STR R1, R0, 78H
00C4f(80E00004): LDR R0, SP, 4H
00C5f(D105714C): BLEQ MT [trap=4, pos=1393]
00C6g(8000006C): LDR R0, R0, 6CH
00C7h(81E00004): LDR R1, SP, 4H
00C8h(D1057B4C): BLEQ MT [trap=4, pos=1403]
00C9i(81100070): LDR R1, R1, 70H
ENDj Restore;
00CAj(F7FFFF35): BL -203 [0000H]
00CBj(8FE00000): LDR LNK, SP, 0H
00CCj(4EE80010): ADD SP, SP, 10H
00CDj(C700000F): B LNK
PROCEDURE Move(F: Frame; VAR p: Pos);
VAR X1, Y1: INTEGER;
BEGINk X1 := F.Xl + F.Wm -n w;o Y1 := F.Yp + F.Hq -r w;s
00CEk(4EE90018): SUB SP, SP, 18H
00CFk(AFE00000): STR LNK, SP, 0H
00D0k(A0E00004): STR R0, SP, 4H
00D1k(A1E00008): STR R1, SP, 8H
00D2k(A2E0000C): STR R2, SP, CH
00D3l(80E00004): LDR R0, SP, 4H
00D4l(D105E44C): BLEQ MT [trap=4, pos=1508]
00D5m(81E00004): LDR R1, SP, 4H
00D6m(D105EA4C): BLEQ MT [trap=4, pos=1514]
00D7n(80000008): LDR R0, R0, 8H
00D8n(81100010): LDR R1, R1, 10H
00D9n(00080001): ADD R0, R0, R1
00DAo(40090010): SUB R0, R0, 10H
00DBo(A0E00010): STR R0, SP, 10H
00DCp(80E00004): LDR R0, SP, 4H
00DDp(D105F94C): BLEQ MT [trap=4, pos=1529]
00DEq(81E00004): LDR R1, SP, 4H
00DFq(D105FF4C): BLEQ MT [trap=4, pos=1535]
00E0r(8000000C): LDR R0, R0, CH
00E1r(81100014): LDR R1, R1, 14H
00E2r(00080001): ADD R0, R0, R1
00E3s(40090010): SUB R0, R0, 10H
00E4s(A0E00014): STR R0, SP, 14H
Draw(p.x,t p.y)u;v INC(p.x, p.dx);w INC(p.y, p.dy);x
00E5t(80E00008): LDR R0, SP, 8H
00E6t(80000000): LDR R0, R0, 0H
00E7u(81E00008): LDR R1, SP, 8H
00E8u(81100004): LDR R1, R1, 4H
00E9v(F7FFFF16): BL -234 [0000H]
00EAw(80E00008): LDR R0, SP, 8H
00EBw(81000000): LDR R1, R0, 0H
00ECw(82E00008): LDR R2, SP, 8H
00EDw(82200008): LDR R2, R2, 8H
00EEw(01180002): ADD R1, R1, R2
00EFw(A1000000): STR R1, R0, 0H
00F0x(80E00008): LDR R0, SP, 8H
00F1x(40080004): ADD R0, R0, 4H
00F2x(81000000): LDR R1, R0, 0H
00F3x(82E00008): LDR R2, SP, 8H
00F4x(8220000C): LDR R2, R2, CH
00F5x(01180002): ADD R1, R1, R2
00F6x(A1000000): STR R1, R0, 0H
IF p.x < F.Xy THENz p.x := 2*F.Xa -b p.x;c p.dx := -p.dx ELSIFd pe.x >= X1 THENf p.x := 2*X1 -g p.x;h p.dx := -p.dx ENDi ;
00F7y(80E00004): LDR R0, SP, 4H
00F8y(D106494C): BLEQ MT [trap=4, pos=1609]
00F9z(81E00008): LDR R1, SP, 8H
00FAz(81100000): LDR R1, R1, 0H
00FBz(80000008): LDR R0, R0, 8H
00FCz(01190000): SUB R1, R1, R0
00FDz(ED000010): BGE 16 [010EH]
00FEa(80E00004): LDR R0, SP, 4H
00FFa(D1065B4C): BLEQ MT [trap=4, pos=1627]
0100b(80000008): LDR R0, R0, 8H
0101b(40010001): LSL R0, R0, 1H
0102c(81E00008): LDR R1, SP, 8H
0103c(81100000): LDR R1, R1, 0H
0104c(00090001): SUB R0, R0, R1
0105c(81E00008): LDR R1, SP, 8H
0106c(A0100000): STR R0, R1, 0H
0107d(80E00008): LDR R0, SP, 8H
0108d(80000008): LDR R0, R0, 8H
0109d(41000000): MOV R1, R0, 0H
010Ad(00190000): SUB R0, R1, R0
010Bd(81E00008): LDR R1, SP, 8H
010Cd(A0100008): STR R0, R1, 8H
010De(E7000012): B 18 [0120H]
010Ef(80E00008): LDR R0, SP, 8H
010Ff(80000000): LDR R0, R0, 0H
0110f(81E00010): LDR R1, SP, 10H
0111f(00090001): SUB R0, R0, R1
0112f(E500000D): BLT 13 [0120H]
0113g(80E00010): LDR R0, SP, 10H
0114g(40010001): LSL R0, R0, 1H
0115h(81E00008): LDR R1, SP, 8H
0116h(81100000): LDR R1, R1, 0H
0117h(00090001): SUB R0, R0, R1
0118h(81E00008): LDR R1, SP, 8H
0119h(A0100000): STR R0, R1, 0H
011Ai(80E00008): LDR R0, SP, 8H
011Bi(80000008): LDR R0, R0, 8H
011Ci(41000000): MOV R1, R0, 0H
011Di(00190000): SUB R0, R1, R0
011Ei(81E00008): LDR R1, SP, 8H
011Fi(A0100008): STR R0, R1, 8H
IF p.y < F.Yj THENk p.y := 2*F.Yl -m p.y;n p.dy := -p.dy ELSIFo pp.y >= Y1 THENq p.y := 2*Y1 -r p.y;s p.dy := -p.dy ENDt ;
0120j(80E00004): LDR R0, SP, 4H
0121j(D106BD4C): BLEQ MT [trap=4, pos=1725]
0122k(81E00008): LDR R1, SP, 8H
0123k(81100004): LDR R1, R1, 4H
0124k(8000000C): LDR R0, R0, CH
0125k(01190000): SUB R1, R1, R0
0126k(ED000010): BGE 16 [0137H]
0127l(80E00004): LDR R0, SP, 4H
0128l(D106CF4C): BLEQ MT [trap=4, pos=1743]
0129m(8000000C): LDR R0, R0, CH
012Am(40010001): LSL R0, R0, 1H
012Bn(81E00008): LDR R1, SP, 8H
012Cn(81100004): LDR R1, R1, 4H
012Dn(00090001): SUB R0, R0, R1
012En(81E00008): LDR R1, SP, 8H
012Fn(A0100004): STR R0, R1, 4H
0130o(80E00008): LDR R0, SP, 8H
0131o(8000000C): LDR R0, R0, CH
0132o(41000000): MOV R1, R0, 0H
0133o(00190000): SUB R0, R1, R0
0134o(81E00008): LDR R1, SP, 8H
0135o(A010000C): STR R0, R1, CH
0136p(E7000012): B 18 [0149H]
0137q(80E00008): LDR R0, SP, 8H
0138q(80000004): LDR R0, R0, 4H
0139q(81E00014): LDR R1, SP, 14H
013Aq(00090001): SUB R0, R0, R1
013Bq(E500000D): BLT 13 [0149H]
013Cr(80E00014): LDR R0, SP, 14H
013Dr(40010001): LSL R0, R0, 1H
013Es(81E00008): LDR R1, SP, 8H
013Fs(81100004): LDR R1, R1, 4H
0140s(00090001): SUB R0, R0, R1
0141s(81E00008): LDR R1, SP, 8H
0142s(A0100004): STR R0, R1, 4H
0143t(80E00008): LDR R0, SP, 8H
0144t(8000000C): LDR R0, R0, CH
0145t(41000000): MOV R1, R0, 0H
0146t(00190000): SUB R0, R1, R0
0147t(81E00008): LDR R1, SP, 8H
0148t(A010000C): STR R0, R1, CH
Draw(p.x,u p.y)v
0149u(80E00008): LDR R0, SP, 8H
014Au(80000000): LDR R0, R0, 0H
014Bv(81E00008): LDR R1, SP, 8H
014Cv(81100004): LDR R1, R1, 4H
ENDw Move;
014Dw(F7FFFEB2): BL -334 [0000H]
014Ew(8FE00000): LDR LNK, SP, 0H
014Fw(4EE80018): ADD SP, SP, 18H
0150w(C700000F): B LNK
PROCEDURE Steps(F: Frame);
VAR i: INTEGER;
BEGINx i := 0;y
0151x(4EE9000C): SUB SP, SP, CH
0152x(AFE00000): STR LNK, SP, 0H
0153x(A0E00004): STR R0, SP, 4H
0154y(40000000): MOV R0, R0, 0H
0155y(A0E00008): STR R0, SP, 8H
WHILE i < N DOz Move(F,a F.sb[i]c)d;e INC(i) ENDf
0156z(80E00008): LDR R0, SP, 8H
0157z(40090006): SUB R0, R0, 6H
0158z(ED000010): BGE 16 [0169H]
0159a(80E00004): LDR R0, SP, 4H
015Ab(81E00004): LDR R1, SP, 4H
015Bb(D107A24C): BLEQ MT [trap=4, pos=1954]
015Cc(82E00008): LDR R2, SP, 8H
015Dc(43290006): SUB R3, R2, 6H
015Ec(DA07A51C): BLCC MT [trap=1, pos=1957]
015Fc(422A0010): MUL R2, R2, 10H
0160c(01180002): ADD R1, R1, R2
0161d(4118001C): ADD R1, R1, 1CH
0162d .FIXUP D
0162d(8D00015D): LDR SB, MT, MOD0 [Stars]
0163d(42D80000): ADD R2, SB, 0H [data]
0164e(F7FFFF69): BL -151 [00CEH]
0165f(80E00008): LDR R0, SP, 8H
0166f(40080001): ADD R0, R0, 1H
0167f(A0E00008): STR R0, SP, 8H
0168f(E7FFFFED): B -19 [0156H]
ENDg Steps;
0169g(8FE00000): LDR LNK, SP, 0H
016Ag(4EE8000C): ADD SP, SP, CH
016Bg(C700000F): B LNK
PROCEDURE Handle(F: Display.Frame; VAR M: Display.FrameMsg);
VAR F1: Frame;
BEGINh
016Ch(4EE90014): SUB SP, SP, 14H
016Dh(AFE00000): STR LNK, SP, 0H
016Eh(A0E00004): STR R0, SP, 4H
016Fh(A1E00008): STR R1, SP, 8H
0170h(A2E0000C): STR R2, SP, CH
CASE F OF Frame:i
0171i(80E00004): LDR R0, SP, 4H
0172i(E1000005): BEQ 5 [0178H]
0173i(810FFFF8): LDR R1, R0, FFFFFFF8H
0174i(81100004): LDR R1, R1, 4H
0175i .FIXUP D
0175i(8D000013): LDR SB, MT, MOD0 [Stars]
0176i(42D80014): ADD R2, SB, 14H [data]
0177i(02290001): SUB R2, R2, R1
0178i(E900005E): BNE 94 [01D7H]
CASE M OF
Oberon.InputMsg:j
0179j(80E0000C): LDR R0, SP, CH
017Aj(80000004): LDR R0, R0, 4H
017Bj .FIXUP D
017Bj(8D600006): LDR SB, MT, MOD6 [Oberon]
017Cj(41D80003): ADD R1, SB, VAR3
017Dj(01190000): SUB R1, R1, R0
017Ej(E900000A): BNE 10 [0189H]
IF M(Oberon.InputMsg).id = Oberon.track THENk
017Fk(80E00008): LDR R0, SP, 8H
0180k(80000000): LDR R0, R0, 0H
0181k(40090001): SUB R0, R0, 1H
0182k(E9000005): BNE 5 [0188H]
Oberon.DrawMouseArrow(M(Oberon.InputMsg).X,l M(Oberon.InputMsg).Y)m
0183l(80E00008): LDR R0, SP, 8H
0184l(80000008): LDR R0, R0, 8H
0185m(81E00008): LDR R1, SP, 8H
0186m(8110000C): LDR R1, R1, CH
ENDn
0187n .FIXUP P
0187n(F7618159): BL MOD6 [Oberon] PROC24
| StepMsgo:p Steps(F)q
0188o(E700004E): B 78 [01D7H]
0189p(80E0000C): LDR R0, SP, CH
018Ap(80000004): LDR R0, R0, 4H
018Bp .FIXUP D
018Bp(8D000010): LDR SB, MT, MOD0 [Stars]
018Cp(41D80044): ADD R1, SB, 44H [data]
018Dp(01190000): SUB R1, R1, R0
018Ep(E9000003): BNE 3 [0192H]
018Fq(80E00004): LDR R0, SP, 4H
|r RestoreMsgs:t Restore(F)u
0190r(F7FFFFC0): BL -64 [0151H]
0191s(E7000045): B 69 [01D7H]
0192t(80E0000C): LDR R0, SP, CH
0193t(80000004): LDR R0, R0, 4H
0194t .FIXUP D
0194t(8D000009): LDR SB, MT, MOD0 [Stars]
0195t(41D80030): ADD R1, SB, 30H [data]
0196t(01190000): SUB R1, R1, R0
0197t(E9000003): BNE 3 [019BH]
0198u(80E00004): LDR R0, SP, 4H
|v Oberonw.CopyMsg:x Oberon.Remove(T)y;z NEW(F1);a F1^ :=b F^;c M.F := F1
0199v(F7FFFE74): BL -396 [000EH]
019Aw(E700003C): B 60 [01D7H]
019Bx(80E0000C): LDR R0, SP, CH
019Cx(80000004): LDR R0, R0, 4H
019Dx .FIXUP D
019Dx(8D600009): LDR SB, MT, MOD6 [Oberon]
019Ex(41D80006): ADD R1, SB, VAR6
019Fx(01190000): SUB R1, R1, R0
01A0x(E9000016): BNE 22 [01B7H]
01A1y .FIXUP D
01A1y(8D000004): LDR SB, MT, MOD0 [Stars]
01A2y(80D00058): LDR R0, SB, 58H [data]
01A3z .FIXUP P
01A3z(F762C01C): BL MOD6 [Oberon] PROC44
01A4a(40E80010): ADD R0, SP, 10H
01A5a .FIXUP D
01A5a(8D000004): LDR SB, MT, MOD0 [Stars]
01A6a(41D80014): ADD R1, SB, 14H [data]
01A7a(D709570C): BL MT [trap=0, pos=2391]
01A8b(80E00010): LDR R0, SP, 10H
01A9b(D1095E4C): BLEQ MT [trap=4, pos=2398]
01AAc(81E00004): LDR R1, SP, 4H
01ABc(D109624C): BLEQ MT [trap=4, pos=2402]
01ACc(4200001F): MOV R2, R0, 1FH
01ADc(83100000): LDR R3, R1, 0H
01AEc(41180004): ADD R1, R1, 4H
01AFc(A3000000): STR R3, R0, 0H
01B0c(40080004): ADD R0, R0, 4H
01B1c(42290001): SUB R2, R2, 1H
01B2c(E9FFFFFA): BNE -6 [01ADH]
|d MenuViewerse.ModifyMsg:f
01B3d(80E00010): LDR R0, SP, 10H
01B4d(81E00008): LDR R1, SP, 8H
01B5d(A0100000): STR R0, R1, 0H
01B6e(E7000020): B 32 [01D7H]
01B7f(80E0000C): LDR R0, SP, CH
01B8f(80000004): LDR R0, R0, 4H
01B9f .FIXUP D
01B9f(8D700014): LDR SB, MT, MOD7 [MenuViewers]
01BAf(41D80002): ADD R1, SB, VAR2
01BBf(01190000): SUB R1, R1, R0
01BCf(E900001A): BNE 26 [01D7H]
IF (M.Y # F.Yg)h OR (iM.H # F.Hj)k THENl F.Ym := M.Y;n F.Ho := M.H;p Restore(F)q ENDr
01BDg(80E00004): LDR R0, SP, 4H
01BEg(D109A14C): BLEQ MT [trap=4, pos=2465]
01BFh(81E00008): LDR R1, SP, 8H
01C0h(81100008): LDR R1, R1, 8H
01C1h(8000000C): LDR R0, R0, CH
01C2h(01190000): SUB R1, R1, R0
01C3i(E9000007): BNE 7 [01CBH]
01C4j(80E00004): LDR R0, SP, 4H
01C5j(D109B04C): BLEQ MT [trap=4, pos=2480]
01C6k(81E00008): LDR R1, SP, 8H
01C7k(8110000C): LDR R1, R1, CH
01C8k(80000014): LDR R0, R0, 14H
01C9k(01190000): SUB R1, R1, R0
01CAl(E100000C): BEQ 12 [01D7H]
01CBm(80E00004): LDR R0, SP, 4H
01CCm(D109BA4C): BLEQ MT [trap=4, pos=2490]
01CDn(81E00008): LDR R1, SP, 8H
01CEn(81100008): LDR R1, R1, 8H
01CFn(A100000C): STR R1, R0, CH
01D0o(80E00004): LDR R0, SP, 4H
01D1o(D109C64C): BLEQ MT [trap=4, pos=2502]
01D2p(81E00008): LDR R1, SP, 8H
01D3p(8110000C): LDR R1, R1, CH
01D4p(A1000014): STR R1, R0, 14H
01D5q(80E00004): LDR R0, SP, 4H
01D6r(F7FFFE37): BL -457 [000EH]
END
END
ENDs Handle;
01D7s(8FE00000): LDR LNK, SP, 0H
01D8s(4EE80014): ADD SP, SP, 14H
01D9s(C700000F): B LNK
PROCEDURE Step*;
VAR k: INTEGER; M: StepMsg;
BEGINt
01DAt .PROC 1
01DAt .COMMAND Step
01DAt(4EE90008): SUB SP, SP, 8H
01DBt(AFE00000): STR LNK, SP, 0H
IF Oberon.Par.vwr.udscv = Oberon.Par.frame THENw Steps(Oberon.Par.frame.xnexty(Frame)z)
01DCu .FIXUP D
01DCu(8D600023): LDR SB, MT, MOD6 [Oberon]
01DDu(40D8000E): ADD R0, SB, VAR14
01DEv(80000000): LDR R0, R0, 0H
01DFv(D10A534C): BLEQ MT [trap=4, pos=2643]
01E0w .FIXUP D
01E0w(8D600004): LDR SB, MT, MOD6 [Oberon]
01E1w(41D8000E): ADD R1, SB, VAR14
01E2w(80000004): LDR R0, R0, 4H
01E3w(81100004): LDR R1, R1, 4H
01E4w(00090001): SUB R0, R0, R1
01E5w(E900000E): BNE 14 [01F4H]
01E6x .FIXUP D
01E6x(8D600006): LDR SB, MT, MOD6 [Oberon]
01E7x(40D8000E): ADD R0, SB, VAR14
01E8y(80000004): LDR R0, R0, 4H
01E9y(D10A874C): BLEQ MT [trap=4, pos=2695]
01EAz(80000000): LDR R0, R0, 0H
01EBz(E1000005): BEQ 5 [01F1H]
01ECz(810FFFF8): LDR R1, R0, FFFFFFF8H
01EDz(81100004): LDR R1, R1, 4H
01EEz .FIXUP D
01EEz(8D000008): LDR SB, MT, MOD0 [Stars]
01EFz(42D80014): ADD R2, SB, 14H [data]
01F0z(02290001): SUB R2, R2, R1
01F1z(D90A8E2C): BLNE MT [trap=2, pos=2702]
ELSEa Viewersb.Broadcast(M)c
01F2a(F7FFFF5E): BL -162 [0151H]
01F3b(E7000004): B 4 [01F8H]
01F4c(40E80008): ADD R0, SP, 8H
01F5c .FIXUP D
01F5c(8D000007): LDR SB, MT, MOD0 [Stars]
01F6c(41D80044): ADD R1, SB, 44H [data]
ENDd
01F7d .FIXUP P
01F7d(F720F054): BL MOD2 [Viewers] PROC15
ENDe Step;
01F8e(8FE00000): LDR LNK, SP, 0H
01F9e(4EE80008): ADD SP, SP, 8H
01FAe(C700000F): B LNK
PROCEDURE Open*;
VAR F: Frame; V: Viewers.Viewer; X, Y: INTEGER;
BEGINf NEW(F);g F.handleh := Handle;i
01FBf .PROC 2
01FBf .COMMAND Open
01FBf(4EE90014): SUB SP, SP, 14H
01FCf(AFE00000): STR LNK, SP, 0H
01FDg(40E80004): ADD R0, SP, 4H
01FEg .FIXUP D
01FEg(8D000009): LDR SB, MT, MOD0 [Stars]
01FFg(41D80014): ADD R1, SB, 14H [data]
0200g(D70B190C): BL MT [trap=0, pos=2841]
0201h(80E00004): LDR R0, SP, 4H
0202h(D10B224C): BLEQ MT [trap=4, pos=2850]
0203i(F7000000): BL 0 [0204H]
0204i(41F90260): SUB R1, LNK, 260H
0205i(A1000018): STR R1, R0, 18H
Oberon.AllocateUserViewer(Oberon.Par.vwr.jXk,l X,m Y)n;o
0206j .FIXUP D
0206j(8D600008): LDR SB, MT, MOD6 [Oberon]
0207j(40D8000E): ADD R0, SB, VAR14
0208k(80000000): LDR R0, R0, 0H
0209k(D10B5C4C): BLEQ MT [trap=4, pos=2908]
020Al(80000008): LDR R0, R0, 8H
020Bm(41E8000C): ADD R1, SP, CH
020Cn(42E80010): ADD R2, SP, 10H
020Do .FIXUP P
020Do(F7622016): BL MOD6 [Oberon] PROC34
V := MenuViewers.New(
TextFrames.NewMenu("Stars",p "Stars.Close System.Grow System.Copy Stars.Step Stars.Run Stars.Stop")q,r
020Ep .FIXUP D
020Ep(8D000008): LDR SB, MT, MOD0 [Stars]
020Fp(40D80084): ADD R0, SB, 84H ["Stars"]
0210p(41000006): MOV R1, R0, 6H
0211q(42D8008C): ADD R2, SB, 8CH
0212q(43000049): MOV R3, R0, 49H
0213r .FIXUP P
0213r(F782C006): BL MOD8 [TextFrames] PROC44
F,s TextFrames.menuH,t X,u Y)v
0214s(81E00004): LDR R1, SP, 4H
0215t .FIXUP D
0215t(8D800007): LDR SB, MT, MOD8 [TextFrames]
0216t(82D00005): LDR R2, SB, VAR5
0217u(83E0000C): LDR R3, SP, CH
0218v(84E00010): LDR R4, SP, 10H
ENDw Open;
0219w .FIXUP P
0219w(F7704006): BL MOD7 [MenuViewers] PROC4
021Aw(A0E00008): STR R0, SP, 8H
021Bw(8FE00000): LDR LNK, SP, 0H
021Cw(4EE80014): ADD SP, SP, 14H
021Dw(C700000F): B LNK
PROCEDURE Run*;
BEGINx Oberon.Install(T)y
021Ex .PROC 3
021Ex .COMMAND Run
021Ex(4EE90004): SUB SP, SP, 4H
021Fx(AFE00000): STR LNK, SP, 0H
0220y .FIXUP D
0220y(8D00000B): LDR SB, MT, MOD0 [Stars]
0221y(80D00058): LDR R0, SB, 58H [data]
ENDz Run;
0222z .FIXUP P
0222z(F762B009): BL MOD6 [Oberon] PROC43
0223z(8FE00000): LDR LNK, SP, 0H
0224z(4EE80004): ADD SP, SP, 4H
0225z(C700000F): B LNK
PROCEDURE Stop*;
BEGINa Oberon.Remove(T)b
0226a .PROC 4
0226a .COMMAND Stop
0226a(4EE90004): SUB SP, SP, 4H
0227a(AFE00000): STR LNK, SP, 0H
0228b .FIXUP D
0228b(8D000008): LDR SB, MT, MOD0 [Stars]
0229b(80D00058): LDR R0, SB, 58H [data]
ENDc Stop;
022Ac .FIXUP P
022Ac(F762C008): BL MOD6 [Oberon] PROC44
022Bc(8FE00000): LDR LNK, SP, 0H
022Cc(4EE80004): ADD SP, SP, 4H
022Dc(C700000F): B LNK
PROCEDURE Close*;
BEGINd
022Ed .PROC 5
022Ed .COMMAND Close
022Ed(4EE90004): SUB SP, SP, 4H
022Fd(AFE00000): STR LNK, SP, 0H
IF Oberon.Par.vwr.edscf = Oberon.Par.frame THENg Stop;h Viewers.Close(Oberon.Par.vwr)i ENDj
0230e .FIXUP D
0230e(8D600008): LDR SB, MT, MOD6 [Oberon]
0231e(40D8000E): ADD R0, SB, VAR14
0232f(80000000): LDR R0, R0, 0H
0233f(D10CC24C): BLEQ MT [trap=4, pos=3266]
0234g .FIXUP D
0234g(8D600004): LDR SB, MT, MOD6 [Oberon]
0235g(41D8000E): ADD R1, SB, VAR14
0236g(80000004): LDR R0, R0, 4H
0237g(81100004): LDR R1, R1, 4H
0238g(00090001): SUB R0, R0, R1
0239g(E9000005): BNE 5 [023FH]
023Ah(F7FFFFEB): BL -21 [0226H]
023Bi .FIXUP D
023Bi(8D600007): LDR SB, MT, MOD6 [Oberon]
023Ci(40D8000E): ADD R0, SB, VAR14
023Di(80000000): LDR R0, R0, 0H
023Ej .FIXUP P
023Ej(F7207014): BL MOD2 [Viewers] PROC7
ENDk Close;
023Fk(8FE00000): LDR LNK, SP, 0H
0240k(4EE80004): ADD SP, SP, 4H
0241k(C700000F): B LNK
PROCEDURE Step1;
VAR M: StepMsg;
BEGINl Viewers.Broadcast(M)m
0242l(4EE90004): SUB SP, SP, 4H
0243l(AFE00000): STR LNK, SP, 0H
0244m(40E80004): ADD R0, SP, 4H
0245m .FIXUP D
0245m(8D00000A): LDR SB, MT, MOD0 [Stars]
0246m(41D80044): ADD R1, SB, 44H [data]
ENDn Step1;
0247n .FIXUP P
0247n(F720F009): BL MOD2 [Viewers] PROC15
0248n(8FE00000): LDR LNK, SP, 0H
0249n(4EE80004): ADD SP, SP, 4H
024An(C700000F): B LNK
PROCEDURE SetPeriod*;
VAR S: Texts.Scanner;
BEGINo Texts.OpenScanner(S,p Oberon.Par.text,q Oberon.Par.pos)r;s Texts.Scan(S)t;u
024Bo .PROC 6
024Bo .COMMAND SetPeriod
024Bo(4EE90078): SUB SP, SP, 78H
024Co(AFE00000): STR LNK, SP, 0H
024Dp(40E80004): ADD R0, SP, 4H
024Ep .FIXUP D
024Ep(8D300009): LDR SB, MT, MOD3 [Texts]
024Fp(41D80003): ADD R1, SB, VAR3
0250q .FIXUP D
0250q(8D600002): LDR SB, MT, MOD6 [Oberon]
0251q(42D8000E): ADD R2, SB, VAR14
0252q(82200008): LDR R2, R2, 8H
0253r .FIXUP D
0253r(8D600003): LDR SB, MT, MOD6 [Oberon]
0254r(43D8000E): ADD R3, SB, VAR14
0255r(8330000C): LDR R3, R3, CH
0256s .FIXUP P
0256s(F731500F): BL MOD3 [Texts] PROC21
0257t(40E80004): ADD R0, SP, 4H
0258t .FIXUP D
0258t(8D300005): LDR SB, MT, MOD3 [Texts]
0259t(41D80003): ADD R1, SB, VAR3
025Au .FIXUP P
025Au(F7316004): BL MOD3 [Texts] PROC22
IF S.class = Texts.Int THENv T.periodw := S.i ENDx
025Bv(80E00040): LDR R0, SP, 40H
025Cv(40090003): SUB R0, R0, 3H
025Dv(E9000005): BNE 5 [0263H]
025Ew .FIXUP D
025Ew(8D000006): LDR SB, MT, MOD0 [Stars]
025Fw(80D00058): LDR R0, SB, 58H [data]
0260w(D10E0B4C): BLEQ MT [trap=4, pos=3595]
0261x(81E00044): LDR R1, SP, 44H
0262x(A1000008): STR R1, R0, 8H
ENDy SetPeriod;
0263y(8FE00000): LDR LNK, SP, 0H
0264y(4EE80078): ADD SP, SP, 78H
0265y(C700000F): B LNK
BEGINz Texts.OpenWriter(W)a;b T := Oberon.NewTask(Step1,c interval)d;e
0266z .PROC 0
0266z .ENTRYPOINT
0266z(4EE90004): SUB SP, SP, 4H
0267z(AFE00000): STR LNK, SP, 0H
0268a .FIXUP D
0268a(8D00000A): LDR SB, MT, MOD0 [Stars]
0269a(40D8005C): ADD R0, SB, 5CH [data]
026Aa .FIXUP D
026Aa(8D300002): LDR SB, MT, MOD3 [Texts]
026Ba(41D80005): ADD R1, SB, VAR5
026Cb .FIXUP P
026Cb(F7317012): BL MOD3 [Texts] PROC23
026Dc(F7000000): BL 0 [026EH]
026Ec(40F900B0): SUB R0, LNK, B0H
026Fd(410000C8): MOV R1, R0, C8H
0270e .FIXUP P
0270e(F762A004): BL MOD6 [Oberon] PROC42
0271e .FIXUP D
0271e(8D000007): LDR SB, MT, MOD0 [Stars]
0272e(A0D00058): STR R0, SB, 58H [data]
END Stars.f
0273f(8FE00000): LDR LNK, SP, 0H
0274f(4EE80004): ADD SP, SP, 4H
0275f(C700000F): B LNK