| MODULE Display; (*NW 5.11.2013 / 3.7.2016*) |
| | .MODULE Display (KEY 4C08D3EA, VERSION 1, SIZE 000011B0) |
| | .TYPEDESC 00000020 FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000040 FFFFFFFF FFFFFFFF FFFFFFFF 00000004 00000000 FFFFFFFF |
| | .DATA 28H |
| | .STRING TABLE SKIPPED |
| | .FIXUP T 0H |
| IMPORT SYSTEM; |
| |
| CONST black* = 0; white* = 1; (*black = background*) |
| replace* = 0; paint* = 1; invert* = 2; (*modes*) |
| base = 0E7F00H; (*adr of 1024 x 768 pixel, monocolor display frame*) |
| |
| TYPE Frame* = POINTER TO FrameDesc; |
| FrameMsg* = RECORD END ; |
| Handler* = PROCEDURE (F: Frame; VAR M: FrameMsg); |
| FrameDesc* = RECORD next*, dsc*: Frame; |
| X*, Y*, W*, H*: INTEGER; |
| handle*: Handler |
| END ; |
| |
| VAR Base*, Width*, Height*: INTEGER; |
| arrow*, star*, hook*, updown*, block*, cross*, grey*: INTEGER; |
| (*a pattern is an array of bytes; the first is its width (< 32), the second its height, the rest the raster*) |
| |
| PROCEDURE Handle*(F: Frame; VAR M: FrameMsg); |
| BEGINa |
| 0000 | a .PROC 1 |
| 0000 | a .PROC 13 |
| 0000 | a(4EE90010): SUB SP, SP, 10H |
| 0001 | a(AFE00000): STR LNK, SP, 0H |
| 0002 | a(A0E00004): STR R0, SP, 4H |
| 0003 | a(A1E00008): STR R1, SP, 8H |
| 0004 | a(A2E0000C): STR R2, SP, CH |
| IF (F # NIL)b & (cF.handled # NIL)e THENf F.handleg(Fh,i M)j ENDk |
| 0005 | b .PROC 2 |
| 0005 | b(80E00004): LDR R0, SP, 4H |
| 0006 | c(E1000010): BEQ 16 [0017H] |
| 0007 | d(80E00004): LDR R0, SP, 4H |
| 0008 | d(D103154C): BLEQ MT [trap=4, pos=789] |
| 0009 | e(80000018): LDR R0, R0, 18H |
| 000A | f(E100000C): BEQ 12 [0017H] |
| 000B | g(80E00004): LDR R0, SP, 4H |
| 000C | g .PROC 3 |
| 000C | g(D1032A4C): BLEQ MT [trap=4, pos=810] |
| 000D | h .PROC 4 |
| 000D | h(80000018): LDR R0, R0, 18H |
| 000E | h .PROC 5 |
| 000E | h(4EE90004): SUB SP, SP, 4H |
| 000F | h .PROC 6 |
| 000F | h(A0E00000): STR R0, SP, 0H |
| 0010 | i .PROC 7 |
| 0010 | i(80E00008): LDR R0, SP, 8H |
| 0011 | j .PROC 8 |
| 0011 | j(81E0000C): LDR R1, SP, CH |
| 0012 | j .PROC 9 |
| 0012 | j(82E00010): LDR R2, SP, 10H |
| 0013 | k .PROC 10 |
| 0013 | k(83E00000): LDR R3, SP, 0H |
| 0014 | k .PROC 11 |
| 0014 | k(4EE80004): ADD SP, SP, 4H |
| 0015 | k .PROC 12 |
| 0015 | k(D103345C): BLEQ MT [trap=5, pos=820] |
| 0016 | k(D7000003): BL R3 |
| ENDl Handle; |
| 0017 | l(8FE00000): LDR LNK, SP, 0H |
| 0018 | l(4EE80010): ADD SP, SP, 10H |
| 0019 | l(C700000F): B LNK |
| |
| (* raster ops *) |
| |
| PROCEDURE Dot*(col, x, y, mode: INTEGER); |
| VAR a: INTEGER; u, s: SET; |
| BEGINm a := base + (x DIV 32)n*4 +o y*128;p |
| 001A | m .PROC 14 |
| 001A | m(4EE90020): SUB SP, SP, 20H |
| 001B | m(AFE00000): STR LNK, SP, 0H |
| 001C | m(A0E00004): STR R0, SP, 4H |
| 001D | m(A1E00008): STR R1, SP, 8H |
| 001E | m(A2E0000C): STR R2, SP, CH |
| 001F | m(A3E00010): STR R3, SP, 10H |
| 0020 | n(80E00008): LDR R0, SP, 8H |
| 0021 | n(40020005): ASR R0, R0, 5H |
| 0022 | o(40010002): LSL R0, R0, 2H |
| 0023 | o(6100000E): MOV' R1, R0, EH |
| 0024 | o(41167F00): IOR R1, R1, 7F00H |
| 0025 | o(00180000): ADD R0, R1, R0 |
| 0026 | p(81E0000C): LDR R1, SP, CH |
| 0027 | p(41110007): LSL R1, R1, 7H |
| 0028 | p(00080001): ADD R0, R0, R1 |
| 0029 | p(A0E00014): STR R0, SP, 14H |
| s := {x MOD 32}q;r SYSTEM.GET(a, u);s |
| 002A | q(80E00008): LDR R0, SP, 8H |
| 002B | q(4004001F): AND R0, R0, 1FH |
| 002C | q(41000001): MOV R1, R0, 1H |
| 002D | q(00110000): LSL R0, R1, R0 |
| 002E | r(A0E0001C): STR R0, SP, 1CH |
| 002F | s(80E00014): LDR R0, SP, 14H |
| 0030 | s(80000000): LDR R0, R0, 0H |
| 0031 | s(A0E00018): STR R0, SP, 18H |
| IF mode = paint THENt SYSTEM.PUT(a, u + s)u |
| 0032 | t(80E00010): LDR R0, SP, 10H |
| 0033 | t(40090001): SUB R0, R0, 1H |
| 0034 | t(E9000006): BNE 6 [003BH] |
| 0035 | u(80E00018): LDR R0, SP, 18H |
| 0036 | u(81E0001C): LDR R1, SP, 1CH |
| 0037 | u(00060001): IOR R0, R0, R1 |
| ELSIFv modew = invert THENx SYSTEM.PUT(a, u / s)y |
| 0038 | v(81E00014): LDR R1, SP, 14H |
| 0039 | v(A0100000): STR R0, R1, 0H |
| 003A | w(E7000016): B 22 [0051H] |
| 003B | x(80E00010): LDR R0, SP, 10H |
| 003C | x(40090002): SUB R0, R0, 2H |
| 003D | x(E9000006): BNE 6 [0044H] |
| 003E | y(80E00018): LDR R0, SP, 18H |
| 003F | y(81E0001C): LDR R1, SP, 1CH |
| 0040 | y(00070001): XOR R0, R0, R1 |
| ELSEz (*mode = replace*) |
| 0041 | z(81E00014): LDR R1, SP, 14H |
| 0042 | z(A0100000): STR R0, R1, 0H |
| IFa col # black THENb SYSTEM.PUT(a, u + s)c ELSEd SYSTEMe.PUT(a, u - s)f ENDg |
| 0043 | a(E700000D): B 13 [0051H] |
| 0044 | b(80E00004): LDR R0, SP, 4H |
| 0045 | b(E1000006): BEQ 6 [004CH] |
| 0046 | c(80E00018): LDR R0, SP, 18H |
| 0047 | c(81E0001C): LDR R1, SP, 1CH |
| 0048 | c(00060001): IOR R0, R0, R1 |
| 0049 | d(81E00014): LDR R1, SP, 14H |
| 004A | d(A0100000): STR R0, R1, 0H |
| 004B | e(E7000005): B 5 [0051H] |
| 004C | f(80E00018): LDR R0, SP, 18H |
| 004D | f(81E0001C): LDR R1, SP, 1CH |
| 004E | f(00050001): ANN R0, R0, R1 |
| 004F | g(81E00014): LDR R1, SP, 14H |
| 0050 | g(A0100000): STR R0, R1, 0H |
| END |
| ENDh Dot; |
| 0051 | h(8FE00000): LDR LNK, SP, 0H |
| 0052 | h(4EE80020): ADD SP, SP, 20H |
| 0053 | h(C700000F): B LNK |
| |
| PROCEDURE ReplConst*(col, x, y, w, h, mode: INTEGER); |
| VAR al, ar, a0, a1: INTEGER; left, right, mid, pix, pixl, pixr: SET; |
| BEGINi al := base + y*128;j |
| 0054 | i .PROC 15 |
| 0054 | i(4EE90044): SUB SP, SP, 44H |
| 0055 | i(AFE00000): STR LNK, SP, 0H |
| 0056 | i(A0E00004): STR R0, SP, 4H |
| 0057 | i(A1E00008): STR R1, SP, 8H |
| 0058 | i(A2E0000C): STR R2, SP, CH |
| 0059 | i(A3E00010): STR R3, SP, 10H |
| 005A | i(A4E00014): STR R4, SP, 14H |
| 005B | i(A5E00018): STR R5, SP, 18H |
| 005C | j(80E0000C): LDR R0, SP, CH |
| 005D | j(40010007): LSL R0, R0, 7H |
| 005E | j(6100000E): MOV' R1, R0, EH |
| 005F | j(41167F00): IOR R1, R1, 7F00H |
| 0060 | j(00180000): ADD R0, R1, R0 |
| 0061 | j(A0E0001C): STR R0, SP, 1CH |
| ar := ((x+w-k1)l DIV 32)m*4 +n al;o al := (x DIV 32)p*4 +q al;r |
| 0062 | k(80E00008): LDR R0, SP, 8H |
| 0063 | k(81E00010): LDR R1, SP, 10H |
| 0064 | k(00080001): ADD R0, R0, R1 |
| 0065 | l(40090001): SUB R0, R0, 1H |
| 0066 | m(40020005): ASR R0, R0, 5H |
| 0067 | n(40010002): LSL R0, R0, 2H |
| 0068 | o(81E0001C): LDR R1, SP, 1CH |
| 0069 | o(00080001): ADD R0, R0, R1 |
| 006A | o(A0E00020): STR R0, SP, 20H |
| 006B | p(80E00008): LDR R0, SP, 8H |
| 006C | p(40020005): ASR R0, R0, 5H |
| 006D | q(40010002): LSL R0, R0, 2H |
| 006E | r(81E0001C): LDR R1, SP, 1CH |
| 006F | r(00080001): ADD R0, R0, R1 |
| 0070 | r(A0E0001C): STR R0, SP, 1CH |
| IF ar = al THENs |
| 0071 | s(80E00020): LDR R0, SP, 20H |
| 0072 | s(81E0001C): LDR R1, SP, 1CH |
| 0073 | s(00090001): SUB R0, R0, R1 |
| 0074 | s(E9000035): BNE 53 [00AAH] |
| mid := {(x MOD 32)t .. ((x+w-u1)v MOD 32)w}x;y |
| 0075 | t(80E00008): LDR R0, SP, 8H |
| 0076 | t(4004001F): AND R0, R0, 1FH |
| 0077 | u(81E00008): LDR R1, SP, 8H |
| 0078 | u(82E00010): LDR R2, SP, 10H |
| 0079 | u(01180002): ADD R1, R1, R2 |
| 007A | v(41190001): SUB R1, R1, 1H |
| 007B | w(4114001F): AND R1, R1, 1FH |
| 007C | x(5200FFFF): MOV R2, R0, FFFFFFFFH |
| 007D | x(00210000): LSL R0, R2, R0 |
| 007E | x(5200FFFE): MOV R2, R0, FFFFFFFEH |
| 007F | x(01210001): LSL R1, R2, R1 |
| 0080 | x(00050001): ANN R0, R0, R1 |
| 0081 | y(A0E00034): STR R0, SP, 34H |
| FOR a1 := al TOz al + (h-1)a*128 BYb 128 DO |
| 0082 | z(80E0001C): LDR R0, SP, 1CH |
| 0083 | a(81E00014): LDR R1, SP, 14H |
| 0084 | a(41190001): SUB R1, R1, 1H |
| 0085 | b(41110007): LSL R1, R1, 7H |
| 0086 | b(82E0001C): LDR R2, SP, 1CH |
| 0087 | b(01280001): ADD R1, R2, R1 |
| SYSTEMc.GET(a1, pix);d |
| 0088 | c(01090001): SUB R1, R0, R1 |
| 0089 | c(EE00001F): BGT 31 [00A9H] |
| 008A | c(A0E00028): STR R0, SP, 28H |
| 008B | d(80E00028): LDR R0, SP, 28H |
| 008C | d(80000000): LDR R0, R0, 0H |
| 008D | d(A0E00038): STR R0, SP, 38H |
| IF mode = invert THENe SYSTEM.PUT(a1, pix / mid)f |
| 008E | e(80E00018): LDR R0, SP, 18H |
| 008F | e(40090002): SUB R0, R0, 2H |
| 0090 | e(E9000006): BNE 6 [0097H] |
| 0091 | f(80E00038): LDR R0, SP, 38H |
| 0092 | f(81E00034): LDR R1, SP, 34H |
| 0093 | f(00070001): XOR R0, R0, R1 |
| ELSIFg (hmode = replace)i & (jcol = black)k THENl (*erase*) SYSTEM.PUT(a1, pix - mid)m |
| 0094 | g(81E00028): LDR R1, SP, 28H |
| 0095 | g(A0100000): STR R0, R1, 0H |
| 0096 | h(E700000F): B 15 [00A6H] |
| 0097 | i(80E00018): LDR R0, SP, 18H |
| 0098 | j(E9000008): BNE 8 [00A1H] |
| 0099 | k(80E00004): LDR R0, SP, 4H |
| 009A | l(E9000006): BNE 6 [00A1H] |
| 009B | m(80E00038): LDR R0, SP, 38H |
| 009C | m(81E00034): LDR R1, SP, 34H |
| 009D | m(00050001): ANN R0, R0, R1 |
| ELSEn (* (mode = paint) OR (mode = replace) & (col # black) *) SYSTEMo.PUT(a1, pix + mid)p |
| 009E | n(81E00028): LDR R1, SP, 28H |
| 009F | n(A0100000): STR R0, R1, 0H |
| 00A0 | o(E7000005): B 5 [00A6H] |
| 00A1 | p(80E00038): LDR R0, SP, 38H |
| 00A2 | p(81E00034): LDR R1, SP, 34H |
| 00A3 | p(00060001): IOR R0, R0, R1 |
| ENDq |
| 00A4 | q(81E00028): LDR R1, SP, 28H |
| 00A5 | q(A0100000): STR R0, R1, 0H |
| END |
| ELSIFr ars > al THENt |
| 00A6 | r(80E00028): LDR R0, SP, 28H |
| 00A7 | r(40080080): ADD R0, R0, 80H |
| 00A8 | r(E7FFFFDA): B -38 [0083H] |
| 00A9 | s(E700007E): B 126 [0128H] |
| 00AA | t(80E00020): LDR R0, SP, 20H |
| 00AB | t(81E0001C): LDR R1, SP, 1CH |
| 00AC | t(00090001): SUB R0, R0, R1 |
| 00AD | t(E600007A): BLE 122 [0128H] |
| left := {(x MOD 32)u .. 31}v;w right := {0 .. ((x+w-x1)y MOD 32)z}a;b |
| 00AE | u(80E00008): LDR R0, SP, 8H |
| 00AF | u(4004001F): AND R0, R0, 1FH |
| 00B0 | v(5100FFFF): MOV R1, R0, FFFFFFFFH |
| 00B1 | v(00110000): LSL R0, R1, R0 |
| 00B2 | v(4100001F): MOV R1, R0, 1FH |
| 00B3 | v(5200FFFE): MOV R2, R0, FFFFFFFEH |
| 00B4 | v(01210001): LSL R1, R2, R1 |
| 00B5 | v(00050001): ANN R0, R0, R1 |
| 00B6 | w(A0E0002C): STR R0, SP, 2CH |
| 00B7 | x(80E00008): LDR R0, SP, 8H |
| 00B8 | x(81E00010): LDR R1, SP, 10H |
| 00B9 | x(00080001): ADD R0, R0, R1 |
| 00BA | y(40090001): SUB R0, R0, 1H |
| 00BB | z(4004001F): AND R0, R0, 1FH |
| 00BC | a(5100FFFE): MOV R1, R0, FFFFFFFEH |
| 00BD | a(00110000): LSL R0, R1, R0 |
| 00BE | a(5007FFFF): XOR R0, R0, FFFFFFFFH |
| 00BF | a(5004FFFF): AND R0, R0, FFFFFFFFH |
| 00C0 | b(A0E00030): STR R0, SP, 30H |
| FOR a0 := al TOc al + (h-1)d*128 BYe 128 DO |
| 00C1 | c(80E0001C): LDR R0, SP, 1CH |
| 00C2 | d(81E00014): LDR R1, SP, 14H |
| 00C3 | d(41190001): SUB R1, R1, 1H |
| 00C4 | e(41110007): LSL R1, R1, 7H |
| 00C5 | e(82E0001C): LDR R2, SP, 1CH |
| 00C6 | e(01280001): ADD R1, R2, R1 |
| SYSTEMf.GET(a0, pixl);g SYSTEM.GET(ar, pixr);h |
| 00C7 | f(01090001): SUB R1, R0, R1 |
| 00C8 | f(EE00005F): BGT 95 [0128H] |
| 00C9 | f(A0E00024): STR R0, SP, 24H |
| 00CA | g(80E00024): LDR R0, SP, 24H |
| 00CB | g(80000000): LDR R0, R0, 0H |
| 00CC | g(A0E0003C): STR R0, SP, 3CH |
| 00CD | h(80E00020): LDR R0, SP, 20H |
| 00CE | h(80000000): LDR R0, R0, 0H |
| 00CF | h(A0E00040): STR R0, SP, 40H |
| IF mode = invert THENi |
| 00D0 | i(80E00018): LDR R0, SP, 18H |
| 00D1 | i(40090002): SUB R0, R0, 2H |
| 00D2 | i(E900001C): BNE 28 [00EFH] |
| SYSTEM.PUT(a0, pixl / left)j;k |
| 00D3 | j(80E0003C): LDR R0, SP, 3CH |
| 00D4 | j(81E0002C): LDR R1, SP, 2CH |
| 00D5 | j(00070001): XOR R0, R0, R1 |
| 00D6 | k(81E00024): LDR R1, SP, 24H |
| 00D7 | k(A0100000): STR R0, R1, 0H |
| FOR a1 := a0+4 TOl ar-4 BYm 4 DO SYSTEMn.GET(a1, pix);o SYSTEM.PUT(a1, -pix)p ENDq ;r |
| 00D8 | l(80E00024): LDR R0, SP, 24H |
| 00D9 | l(40080004): ADD R0, R0, 4H |
| 00DA | m(81E00020): LDR R1, SP, 20H |
| 00DB | m(41190004): SUB R1, R1, 4H |
| 00DC | n(01090001): SUB R1, R0, R1 |
| 00DD | n(EE00000B): BGT 11 [00E9H] |
| 00DE | n(A0E00028): STR R0, SP, 28H |
| 00DF | o(80E00028): LDR R0, SP, 28H |
| 00E0 | o(80000000): LDR R0, R0, 0H |
| 00E1 | o(A0E00038): STR R0, SP, 38H |
| 00E2 | p(80E00038): LDR R0, SP, 38H |
| 00E3 | p(5007FFFF): XOR R0, R0, FFFFFFFFH |
| 00E4 | q(81E00028): LDR R1, SP, 28H |
| 00E5 | q(A0100000): STR R0, R1, 0H |
| 00E6 | r(80E00028): LDR R0, SP, 28H |
| 00E7 | r(40080004): ADD R0, R0, 4H |
| 00E8 | r(E7FFFFF1): B -15 [00DAH] |
| SYSTEM.PUT(ar, pixr / right)s |
| 00E9 | s(80E00040): LDR R0, SP, 40H |
| 00EA | s(81E00030): LDR R1, SP, 30H |
| 00EB | s(00070001): XOR R0, R0, R1 |
| ELSIFt (umode = replace)v & (wcol = black)x THENy (*erase*) |
| 00EC | t(81E00020): LDR R1, SP, 20H |
| 00ED | t(A0100000): STR R0, R1, 0H |
| 00EE | u(E7000033): B 51 [0122H] |
| 00EF | v(80E00018): LDR R0, SP, 18H |
| 00F0 | w(E900001A): BNE 26 [010BH] |
| 00F1 | x(80E00004): LDR R0, SP, 4H |
| 00F2 | y(E9000018): BNE 24 [010BH] |
| SYSTEM.PUT(a0, pixl - left)z;a |
| 00F3 | z(80E0003C): LDR R0, SP, 3CH |
| 00F4 | z(81E0002C): LDR R1, SP, 2CH |
| 00F5 | z(00050001): ANN R0, R0, R1 |
| 00F6 | a(81E00024): LDR R1, SP, 24H |
| 00F7 | a(A0100000): STR R0, R1, 0H |
| FOR a1 := a0+4 TOb ar-4 BYc 4 DO SYSTEMd.PUT(a1, {}) ENDe ;f |
| 00F8 | b(80E00024): LDR R0, SP, 24H |
| 00F9 | b(40080004): ADD R0, R0, 4H |
| 00FA | c(81E00020): LDR R1, SP, 20H |
| 00FB | c(41190004): SUB R1, R1, 4H |
| 00FC | d(01090001): SUB R1, R0, R1 |
| 00FD | d(EE000007): BGT 7 [0105H] |
| 00FE | d(A0E00028): STR R0, SP, 28H |
| 00FF | e(80E00028): LDR R0, SP, 28H |
| 0100 | e(41000000): MOV R1, R0, 0H |
| 0101 | e(A1000000): STR R1, R0, 0H |
| 0102 | f(80E00028): LDR R0, SP, 28H |
| 0103 | f(40080004): ADD R0, R0, 4H |
| 0104 | f(E7FFFFF5): B -11 [00FAH] |
| SYSTEM.PUT(ar, pixr - right)g |
| 0105 | g(80E00040): LDR R0, SP, 40H |
| 0106 | g(81E00030): LDR R1, SP, 30H |
| 0107 | g(00050001): ANN R0, R0, R1 |
| ELSEh (* (mode = paint) OR (mode = replace) & (col # black) *) |
| 0108 | h(81E00020): LDR R1, SP, 20H |
| 0109 | h(A0100000): STR R0, R1, 0H |
| SYSTEMi.PUT(a0, pixl + left)j;k |
| 010A | i(E7000017): B 23 [0122H] |
| 010B | j(80E0003C): LDR R0, SP, 3CH |
| 010C | j(81E0002C): LDR R1, SP, 2CH |
| 010D | j(00060001): IOR R0, R0, R1 |
| 010E | k(81E00024): LDR R1, SP, 24H |
| 010F | k(A0100000): STR R0, R1, 0H |
| FOR a1 := a0+4 TOl ar-4 BYm 4 DO SYSTEMn.PUT(a1, {0 .. 31}) ENDo ;p |
| 0110 | l(80E00024): LDR R0, SP, 24H |
| 0111 | l(40080004): ADD R0, R0, 4H |
| 0112 | m(81E00020): LDR R1, SP, 20H |
| 0113 | m(41190004): SUB R1, R1, 4H |
| 0114 | n(01090001): SUB R1, R0, R1 |
| 0115 | n(EE000007): BGT 7 [011DH] |
| 0116 | n(A0E00028): STR R0, SP, 28H |
| 0117 | o(80E00028): LDR R0, SP, 28H |
| 0118 | o(5100FFFF): MOV R1, R0, FFFFFFFFH |
| 0119 | o(A1000000): STR R1, R0, 0H |
| 011A | p(80E00028): LDR R0, SP, 28H |
| 011B | p(40080004): ADD R0, R0, 4H |
| 011C | p(E7FFFFF5): B -11 [0112H] |
| SYSTEM.PUT(ar, pixr + right)q |
| 011D | q(80E00040): LDR R0, SP, 40H |
| 011E | q(81E00030): LDR R1, SP, 30H |
| 011F | q(00060001): IOR R0, R0, R1 |
| ENDr ; |
| 0120 | r(81E00020): LDR R1, SP, 20H |
| 0121 | r(A0100000): STR R0, R1, 0H |
| INC(ar, 128) |
| ENDs |
| 0122 | s(80E00020): LDR R0, SP, 20H |
| 0123 | s(40080080): ADD R0, R0, 80H |
| 0124 | s(A0E00020): STR R0, SP, 20H |
| ENDt |
| 0125 | t(80E00024): LDR R0, SP, 24H |
| 0126 | t(40080080): ADD R0, R0, 80H |
| 0127 | t(E7FFFF9A): B -102 [00C2H] |
| ENDu ReplConst; |
| 0128 | u(8FE00000): LDR LNK, SP, 0H |
| 0129 | u(4EE80044): ADD SP, SP, 44H |
| 012A | u(C700000F): B LNK |
| |
| PROCEDURE CopyPattern*(col, patadr, x, y, mode: INTEGER); (*only for modes = paint, invert*) |
| VAR a, a0, pwd: INTEGER; |
| w, h, pbt: BYTE; pix: SET; |
| BEGINv SYSTEM.GET(patadr, w);w SYSTEM.GET(patadr+1,x h);y INC(patadr, 2);z |
| 012B | v .PROC 16 |
| 012B | v(4EE9002C): SUB SP, SP, 2CH |
| 012C | v(AFE00000): STR LNK, SP, 0H |
| 012D | v(A0E00004): STR R0, SP, 4H |
| 012E | v(A1E00008): STR R1, SP, 8H |
| 012F | v(A2E0000C): STR R2, SP, CH |
| 0130 | v(A3E00010): STR R3, SP, 10H |
| 0131 | v(A4E00014): STR R4, SP, 14H |
| 0132 | w(80E00008): LDR R0, SP, 8H |
| 0133 | w(90000000): LDR R0, R0, 0H |
| 0134 | w(B0E00024): STR R0, SP, 24H |
| 0135 | x(80E00008): LDR R0, SP, 8H |
| 0136 | x(40080001): ADD R0, R0, 1H |
| 0137 | y(90000000): LDR R0, R0, 0H |
| 0138 | y(B0E00025): STR R0, SP, 25H |
| 0139 | z(80E00008): LDR R0, SP, 8H |
| 013A | z(40080002): ADD R0, R0, 2H |
| 013B | z(A0E00008): STR R0, SP, 8H |
| a := base + (x DIV 32)a*4 +b y*128;c |
| 013C | a(80E0000C): LDR R0, SP, CH |
| 013D | a(40020005): ASR R0, R0, 5H |
| 013E | b(40010002): LSL R0, R0, 2H |
| 013F | b(6100000E): MOV' R1, R0, EH |
| 0140 | b(41167F00): IOR R1, R1, 7F00H |
| 0141 | b(00180000): ADD R0, R1, R0 |
| 0142 | c(81E00010): LDR R1, SP, 10H |
| 0143 | c(41110007): LSL R1, R1, 7H |
| 0144 | c(00080001): ADD R0, R0, R1 |
| 0145 | c(A0E00018): STR R0, SP, 18H |
| FOR a0 := a TOd a + (h-1)e*128 BYf 128 DO |
| 0146 | d(80E00018): LDR R0, SP, 18H |
| 0147 | e(91E00025): LDR R1, SP, 25H |
| 0148 | e(41190001): SUB R1, R1, 1H |
| 0149 | f(41110007): LSL R1, R1, 7H |
| 014A | f(82E00018): LDR R2, SP, 18H |
| 014B | f(01280001): ADD R1, R2, R1 |
| (*build pattern line; w < 32*) |
| SYSTEMg.GET(patadr, pbt);h INC(patadr);i pwd := pbt;j |
| 014C | g(01090001): SUB R1, R0, R1 |
| 014D | g(EE000071): BGT 113 [01BFH] |
| 014E | g(A0E0001C): STR R0, SP, 1CH |
| 014F | h(80E00008): LDR R0, SP, 8H |
| 0150 | h(90000000): LDR R0, R0, 0H |
| 0151 | h(B0E00026): STR R0, SP, 26H |
| 0152 | i(80E00008): LDR R0, SP, 8H |
| 0153 | i(40080001): ADD R0, R0, 1H |
| 0154 | i(A0E00008): STR R0, SP, 8H |
| 0155 | j(90E00026): LDR R0, SP, 26H |
| 0156 | j(A0E00020): STR R0, SP, 20H |
| IF w > 8 THENk SYSTEM.GET(patadr, pbt);l INC(patadr);m pwd := pbt*100H +n pwd;o |
| 0157 | k(90E00024): LDR R0, SP, 24H |
| 0158 | k(40090008): SUB R0, R0, 8H |
| 0159 | k(E6000027): BLE 39 [0181H] |
| 015A | l(80E00008): LDR R0, SP, 8H |
| 015B | l(90000000): LDR R0, R0, 0H |
| 015C | l(B0E00026): STR R0, SP, 26H |
| 015D | m(80E00008): LDR R0, SP, 8H |
| 015E | m(40080001): ADD R0, R0, 1H |
| 015F | m(A0E00008): STR R0, SP, 8H |
| 0160 | n(90E00026): LDR R0, SP, 26H |
| 0161 | n(40010008): LSL R0, R0, 8H |
| 0162 | o(81E00020): LDR R1, SP, 20H |
| 0163 | o(00080001): ADD R0, R0, R1 |
| 0164 | o(A0E00020): STR R0, SP, 20H |
| IF w > 16 THENp SYSTEM.GET(patadr, pbt);q INC(patadr);r pwd := pbt*10000H +s pwd;t |
| 0165 | p(90E00024): LDR R0, SP, 24H |
| 0166 | p(40090010): SUB R0, R0, 10H |
| 0167 | p(E6000019): BLE 25 [0181H] |
| 0168 | q(80E00008): LDR R0, SP, 8H |
| 0169 | q(90000000): LDR R0, R0, 0H |
| 016A | q(B0E00026): STR R0, SP, 26H |
| 016B | r(80E00008): LDR R0, SP, 8H |
| 016C | r(40080001): ADD R0, R0, 1H |
| 016D | r(A0E00008): STR R0, SP, 8H |
| 016E | s(90E00026): LDR R0, SP, 26H |
| 016F | s(40010010): LSL R0, R0, 10H |
| 0170 | t(81E00020): LDR R1, SP, 20H |
| 0171 | t(00080001): ADD R0, R0, R1 |
| 0172 | t(A0E00020): STR R0, SP, 20H |
| IF w > 24 THENu SYSTEM.GET(patadr, pbt);v INC(patadr);w pwd := pbt*1000000H +x pwd ENDy |
| 0173 | u(90E00024): LDR R0, SP, 24H |
| 0174 | u(40090018): SUB R0, R0, 18H |
| 0175 | u(E600000B): BLE 11 [0181H] |
| 0176 | v(80E00008): LDR R0, SP, 8H |
| 0177 | v(90000000): LDR R0, R0, 0H |
| 0178 | v(B0E00026): STR R0, SP, 26H |
| 0179 | w(80E00008): LDR R0, SP, 8H |
| 017A | w(40080001): ADD R0, R0, 1H |
| 017B | w(A0E00008): STR R0, SP, 8H |
| 017C | x(90E00026): LDR R0, SP, 26H |
| 017D | x(40010018): LSL R0, R0, 18H |
| 017E | y(81E00020): LDR R1, SP, 20H |
| 017F | y(00080001): ADD R0, R0, R1 |
| 0180 | y(A0E00020): STR R0, SP, 20H |
| END |
| END ; |
| SYSTEM.GET(a0, pix);z |
| 0181 | z(80E0001C): LDR R0, SP, 1CH |
| 0182 | z(80000000): LDR R0, R0, 0H |
| 0183 | z(A0E00028): STR R0, SP, 28H |
| IF mode = invert THENa SYSTEM.PUT(a0, SYSTEM.VAL(SET, LSL(pwd, x MOD 32)b)c / pix)d |
| 0184 | a(80E00014): LDR R0, SP, 14H |
| 0185 | a(40090002): SUB R0, R0, 2H |
| 0186 | a(E9000009): BNE 9 [0190H] |
| 0187 | b(80E0000C): LDR R0, SP, CH |
| 0188 | b(4004001F): AND R0, R0, 1FH |
| 0189 | c(81E00020): LDR R1, SP, 20H |
| 018A | c(00110000): LSL R0, R1, R0 |
| 018B | d(81E00028): LDR R1, SP, 28H |
| 018C | d(00070001): XOR R0, R0, R1 |
| ELSEe SYSTEMf.PUT(a0, SYSTEM.VAL(SET, LSL(pwd, x MOD 32)g)h + pix)i |
| 018D | e(81E0001C): LDR R1, SP, 1CH |
| 018E | e(A0100000): STR R0, R1, 0H |
| 018F | f(E7000008): B 8 [0198H] |
| 0190 | g(80E0000C): LDR R0, SP, CH |
| 0191 | g(4004001F): AND R0, R0, 1FH |
| 0192 | h(81E00020): LDR R1, SP, 20H |
| 0193 | h(00110000): LSL R0, R1, R0 |
| 0194 | i(81E00028): LDR R1, SP, 28H |
| 0195 | i(00060001): IOR R0, R0, R1 |
| ENDj ; |
| 0196 | j(81E0001C): LDR R1, SP, 1CH |
| 0197 | j(A0100000): STR R0, R1, 0H |
| IF (x MOD 32)k + w >l 32 THENm (*spill over*) |
| 0198 | k(80E0000C): LDR R0, SP, CH |
| 0199 | k(4004001F): AND R0, R0, 1FH |
| 019A | l(91E00024): LDR R1, SP, 24H |
| 019B | l(00080001): ADD R0, R0, R1 |
| 019C | m(40090020): SUB R0, R0, 20H |
| 019D | m(E600001E): BLE 30 [01BCH] |
| SYSTEM.GET(a0+4,n pix);o |
| 019E | n(80E0001C): LDR R0, SP, 1CH |
| 019F | n(40080004): ADD R0, R0, 4H |
| 01A0 | o(80000000): LDR R0, R0, 0H |
| 01A1 | o(A0E00028): STR R0, SP, 28H |
| IF mode = invert THENp SYSTEM.PUT(a0+4,q SYSTEM.VAL(SET, ASR(pwd, -(x MOD 32)r)s)t / pix)u |
| 01A2 | p(80E00014): LDR R0, SP, 14H |
| 01A3 | p(40090002): SUB R0, R0, 2H |
| 01A4 | p(E900000C): BNE 12 [01B1H] |
| 01A5 | q(80E0001C): LDR R0, SP, 1CH |
| 01A6 | q(40080004): ADD R0, R0, 4H |
| 01A7 | r(81E0000C): LDR R1, SP, CH |
| 01A8 | r(4114001F): AND R1, R1, 1FH |
| 01A9 | s(42000000): MOV R2, R0, 0H |
| 01AA | s(01290001): SUB R1, R2, R1 |
| 01AB | t(82E00020): LDR R2, SP, 20H |
| 01AC | t(01220001): ASR R1, R2, R1 |
| 01AD | u(82E00028): LDR R2, SP, 28H |
| 01AE | u(01170002): XOR R1, R1, R2 |
| ELSEv SYSTEMw.PUT(a0+4,x SYSTEM.VAL(SET, ASR(pwd, -(x MOD 32)y)z)a + pix)b |
| 01AF | v(A1000000): STR R1, R0, 0H |
| 01B0 | w(E700000B): B 11 [01BCH] |
| 01B1 | x(80E0001C): LDR R0, SP, 1CH |
| 01B2 | x(40080004): ADD R0, R0, 4H |
| 01B3 | y(81E0000C): LDR R1, SP, CH |
| 01B4 | y(4114001F): AND R1, R1, 1FH |
| 01B5 | z(42000000): MOV R2, R0, 0H |
| 01B6 | z(01290001): SUB R1, R2, R1 |
| 01B7 | a(82E00020): LDR R2, SP, 20H |
| 01B8 | a(01220001): ASR R1, R2, R1 |
| 01B9 | b(82E00028): LDR R2, SP, 28H |
| 01BA | b(01160002): IOR R1, R1, R2 |
| ENDc |
| 01BB | c(A1000000): STR R1, R0, 0H |
| END |
| END |
| ENDd CopyPattern; |
| 01BC | d(80E0001C): LDR R0, SP, 1CH |
| 01BD | d(40080080): ADD R0, R0, 80H |
| 01BE | d(E7FFFF88): B -120 [0147H] |
| 01BF | d(8FE00000): LDR LNK, SP, 0H |
| 01C0 | d(4EE8002C): ADD SP, SP, 2CH |
| 01C1 | d(C700000F): B LNK |
| |
| PROCEDURE CopyBlock*(sx, sy, w, h, dx, dy, mode: INTEGER); (*only for mode = replace*) |
| VAR sa, da, sa0, sa1, d, len: INTEGER; |
| u0, u1, u2, u3, v0, v1, v2, v3, n: INTEGER; |
| end, step: INTEGER; |
| src, dst, spill: SET; |
| m0, m1, m2, m3: SET; |
| BEGINe |
| 01C2 | e .PROC 17 |
| 01C2 | e(4EE90080): SUB SP, SP, 80H |
| 01C3 | e(AFE00000): STR LNK, SP, 0H |
| 01C4 | e(A0E00004): STR R0, SP, 4H |
| 01C5 | e(A1E00008): STR R1, SP, 8H |
| 01C6 | e(A2E0000C): STR R2, SP, CH |
| 01C7 | e(A3E00010): STR R3, SP, 10H |
| 01C8 | e(A4E00014): STR R4, SP, 14H |
| 01C9 | e(A5E00018): STR R5, SP, 18H |
| 01CA | e(A6E0001C): STR R6, SP, 1CH |
| u0 := sx DIV 32;f u1 := sx MOD 32;g u2 := (sx+w)h DIV 32;i u3 := (sx+w)j MOD 32;k |
| 01CB | f(80E00004): LDR R0, SP, 4H |
| 01CC | f(40020005): ASR R0, R0, 5H |
| 01CD | f(A0E00038): STR R0, SP, 38H |
| 01CE | g(80E00004): LDR R0, SP, 4H |
| 01CF | g(4004001F): AND R0, R0, 1FH |
| 01D0 | g(A0E0003C): STR R0, SP, 3CH |
| 01D1 | h(80E00004): LDR R0, SP, 4H |
| 01D2 | h(81E0000C): LDR R1, SP, CH |
| 01D3 | h(00080001): ADD R0, R0, R1 |
| 01D4 | i(40020005): ASR R0, R0, 5H |
| 01D5 | i(A0E00040): STR R0, SP, 40H |
| 01D6 | j(80E00004): LDR R0, SP, 4H |
| 01D7 | j(81E0000C): LDR R1, SP, CH |
| 01D8 | j(00080001): ADD R0, R0, R1 |
| 01D9 | k(4004001F): AND R0, R0, 1FH |
| 01DA | k(A0E00044): STR R0, SP, 44H |
| v0 := dx DIV 32;l v1 := dx MOD 32;m v2 := (dx+w)n DIV 32;o v3 := (dx+w)p MOD 32;q |
| 01DB | l(80E00014): LDR R0, SP, 14H |
| 01DC | l(40020005): ASR R0, R0, 5H |
| 01DD | l(A0E00048): STR R0, SP, 48H |
| 01DE | m(80E00014): LDR R0, SP, 14H |
| 01DF | m(4004001F): AND R0, R0, 1FH |
| 01E0 | m(A0E0004C): STR R0, SP, 4CH |
| 01E1 | n(80E00014): LDR R0, SP, 14H |
| 01E2 | n(81E0000C): LDR R1, SP, CH |
| 01E3 | n(00080001): ADD R0, R0, R1 |
| 01E4 | o(40020005): ASR R0, R0, 5H |
| 01E5 | o(A0E00050): STR R0, SP, 50H |
| 01E6 | p(80E00014): LDR R0, SP, 14H |
| 01E7 | p(81E0000C): LDR R1, SP, CH |
| 01E8 | p(00080001): ADD R0, R0, R1 |
| 01E9 | q(4004001F): AND R0, R0, 1FH |
| 01EA | q(A0E00054): STR R0, SP, 54H |
| sa := base + u0*4 +r sy*128;s da := base + v0*4 +t dy*128;u |
| 01EB | r(80E00038): LDR R0, SP, 38H |
| 01EC | r(40010002): LSL R0, R0, 2H |
| 01ED | r(6100000E): MOV' R1, R0, EH |
| 01EE | r(41167F00): IOR R1, R1, 7F00H |
| 01EF | r(00180000): ADD R0, R1, R0 |
| 01F0 | s(81E00008): LDR R1, SP, 8H |
| 01F1 | s(41110007): LSL R1, R1, 7H |
| 01F2 | s(00080001): ADD R0, R0, R1 |
| 01F3 | s(A0E00020): STR R0, SP, 20H |
| 01F4 | t(80E00048): LDR R0, SP, 48H |
| 01F5 | t(40010002): LSL R0, R0, 2H |
| 01F6 | t(6100000E): MOV' R1, R0, EH |
| 01F7 | t(41167F00): IOR R1, R1, 7F00H |
| 01F8 | t(00180000): ADD R0, R1, R0 |
| 01F9 | u(81E00018): LDR R1, SP, 18H |
| 01FA | u(41110007): LSL R1, R1, 7H |
| 01FB | u(00080001): ADD R0, R0, R1 |
| 01FC | u(A0E00024): STR R0, SP, 24H |
| d := da - sa;v n := u1 - v1;w (*displacement in words and bits*) |
| 01FD | v(80E00024): LDR R0, SP, 24H |
| 01FE | v(81E00020): LDR R1, SP, 20H |
| 01FF | v(00090001): SUB R0, R0, R1 |
| 0200 | v(A0E00030): STR R0, SP, 30H |
| 0201 | w(80E0003C): LDR R0, SP, 3CH |
| 0202 | w(81E0004C): LDR R1, SP, 4CH |
| 0203 | w(00090001): SUB R0, R0, R1 |
| 0204 | w(A0E00058): STR R0, SP, 58H |
| len := (u2 - u0)x * 4;y |
| 0205 | x(80E00040): LDR R0, SP, 40H |
| 0206 | x(81E00038): LDR R1, SP, 38H |
| 0207 | x(00090001): SUB R0, R0, R1 |
| 0208 | y(40010002): LSL R0, R0, 2H |
| 0209 | y(A0E00034): STR R0, SP, 34H |
| m0 := {v1 .. 31}z;a m2 := {v3 .. 31}b;c m3 := m0 / m2;d |
| 020A | z(80E0004C): LDR R0, SP, 4CH |
| 020B | z(5100FFFF): MOV R1, R0, FFFFFFFFH |
| 020C | z(00110000): LSL R0, R1, R0 |
| 020D | z(4100001F): MOV R1, R0, 1FH |
| 020E | z(5200FFFE): MOV R2, R0, FFFFFFFEH |
| 020F | z(01210001): LSL R1, R2, R1 |
| 0210 | z(00050001): ANN R0, R0, R1 |
| 0211 | a(A0E00070): STR R0, SP, 70H |
| 0212 | b(80E00054): LDR R0, SP, 54H |
| 0213 | b(5100FFFF): MOV R1, R0, FFFFFFFFH |
| 0214 | b(00110000): LSL R0, R1, R0 |
| 0215 | b(4100001F): MOV R1, R0, 1FH |
| 0216 | b(5200FFFE): MOV R2, R0, FFFFFFFEH |
| 0217 | b(01210001): LSL R1, R2, R1 |
| 0218 | b(00050001): ANN R0, R0, R1 |
| 0219 | c(A0E00078): STR R0, SP, 78H |
| 021A | d(80E00070): LDR R0, SP, 70H |
| 021B | d(81E00078): LDR R1, SP, 78H |
| 021C | d(00070001): XOR R0, R0, R1 |
| 021D | d(A0E0007C): STR R0, SP, 7CH |
| IF d >= 0 THENe (*copy up, scan down*) sa0 := sa + (h-1)f*128;g end := sa-128;h step := -128 |
| 021E | e(80E00030): LDR R0, SP, 30H |
| 021F | e(40090000): SUB R0, R0, 0H |
| 0220 | e(E500000C): BLT 12 [022DH] |
| 0221 | f(80E00010): LDR R0, SP, 10H |
| 0222 | f(40090001): SUB R0, R0, 1H |
| 0223 | g(40010007): LSL R0, R0, 7H |
| 0224 | g(81E00020): LDR R1, SP, 20H |
| 0225 | g(00180000): ADD R0, R1, R0 |
| 0226 | g(A0E00028): STR R0, SP, 28H |
| 0227 | h(80E00020): LDR R0, SP, 20H |
| 0228 | h(40090080): SUB R0, R0, 80H |
| 0229 | h(A0E0005C): STR R0, SP, 5CH |
| ELSEi (*copy down, scan up*) sa0j := sa;k end := sa + h*128;l step := 128 |
| 022A | i(5000FF80): MOV R0, R0, FFFFFF80H |
| 022B | i(A0E00060): STR R0, SP, 60H |
| 022C | j(E7000009): B 9 [0236H] |
| 022D | k(80E00020): LDR R0, SP, 20H |
| 022E | k(A0E00028): STR R0, SP, 28H |
| 022F | l(80E00010): LDR R0, SP, 10H |
| 0230 | l(40010007): LSL R0, R0, 7H |
| 0231 | l(81E00020): LDR R1, SP, 20H |
| 0232 | l(00180000): ADD R0, R1, R0 |
| 0233 | l(A0E0005C): STR R0, SP, 5CH |
| ENDm ; |
| 0234 | m(40000080): MOV R0, R0, 80H |
| 0235 | m(A0E00060): STR R0, SP, 60H |
| WHILE sa0 # end DOn |
| 0236 | n(80E00028): LDR R0, SP, 28H |
| 0237 | n(81E0005C): LDR R1, SP, 5CH |
| 0238 | n(00090001): SUB R0, R0, R1 |
| 0239 | n(E10000F9): BEQ 249 [0333H] |
| IF n >= 0 THENo (*shift right*) m1 := {n .. 31}p;q |
| 023A | o(80E00058): LDR R0, SP, 58H |
| 023B | o(40090000): SUB R0, R0, 0H |
| 023C | o(E500007E): BLT 126 [02BBH] |
| 023D | p(80E00058): LDR R0, SP, 58H |
| 023E | p(5100FFFF): MOV R1, R0, FFFFFFFFH |
| 023F | p(00110000): LSL R0, R1, R0 |
| 0240 | p(4100001F): MOV R1, R0, 1FH |
| 0241 | p(5200FFFE): MOV R2, R0, FFFFFFFEH |
| 0242 | p(01210001): LSL R1, R2, R1 |
| 0243 | p(00050001): ANN R0, R0, R1 |
| 0244 | q(A0E00074): STR R0, SP, 74H |
| IF v1 + w >=r 32 THENs |
| 0245 | r(80E0004C): LDR R0, SP, 4CH |
| 0246 | r(81E0000C): LDR R1, SP, CH |
| 0247 | r(00080001): ADD R0, R0, R1 |
| 0248 | s(40090020): SUB R0, R0, 20H |
| 0249 | s(E5000059): BLT 89 [02A3H] |
| SYSTEM.GET(sa0+len,t src);u src := ROR(src, n);v |
| 024A | t(80E00028): LDR R0, SP, 28H |
| 024B | t(81E00034): LDR R1, SP, 34H |
| 024C | t(00080001): ADD R0, R0, R1 |
| 024D | u(80000000): LDR R0, R0, 0H |
| 024E | u(A0E00064): STR R0, SP, 64H |
| 024F | v(80E00064): LDR R0, SP, 64H |
| 0250 | v(81E00058): LDR R1, SP, 58H |
| 0251 | v(00030001): ROR R0, R0, R1 |
| 0252 | v(A0E00064): STR R0, SP, 64H |
| SYSTEM.GET(sa0+len+wd,x dst);y |
| 0253 | w(80E00028): LDR R0, SP, 28H |
| 0254 | w(81E00034): LDR R1, SP, 34H |
| 0255 | w(00080001): ADD R0, R0, R1 |
| 0256 | x(81E00030): LDR R1, SP, 30H |
| 0257 | x(00080001): ADD R0, R0, R1 |
| 0258 | y(80000000): LDR R0, R0, 0H |
| 0259 | y(A0E00068): STR R0, SP, 68H |
| SYSTEM.PUT(sa0+len+zd,a (dst * m2)b + (src - m2)c)d;e |
| 025A | z(80E00028): LDR R0, SP, 28H |
| 025B | z(81E00034): LDR R1, SP, 34H |
| 025C | z(00080001): ADD R0, R0, R1 |
| 025D | a(81E00030): LDR R1, SP, 30H |
| 025E | a(00080001): ADD R0, R0, R1 |
| 025F | b(81E00068): LDR R1, SP, 68H |
| 0260 | b(82E00078): LDR R2, SP, 78H |
| 0261 | b(01140002): AND R1, R1, R2 |
| 0262 | c(82E00064): LDR R2, SP, 64H |
| 0263 | c(83E00078): LDR R3, SP, 78H |
| 0264 | c(02250003): ANN R2, R2, R3 |
| 0265 | d(01160002): IOR R1, R1, R2 |
| 0266 | e(A1000000): STR R1, R0, 0H |
| spill := src - m1;f |
| 0267 | f(80E00064): LDR R0, SP, 64H |
| 0268 | f(81E00074): LDR R1, SP, 74H |
| 0269 | f(00050001): ANN R0, R0, R1 |
| 026A | f(A0E0006C): STR R0, SP, 6CH |
| FOR sa1 := sa0 + len-g4 TOh sa0+4 BYi -4 DO |
| 026B | g(80E00028): LDR R0, SP, 28H |
| 026C | g(81E00034): LDR R1, SP, 34H |
| 026D | g(00080001): ADD R0, R0, R1 |
| 026E | h(40090004): SUB R0, R0, 4H |
| 026F | i(81E00028): LDR R1, SP, 28H |
| 0270 | i(41180004): ADD R1, R1, 4H |
| SYSTEMj.GET(sa1, src);k src := ROR(src, n);l |
| 0271 | j(01090001): SUB R1, R0, R1 |
| 0272 | j(E5000018): BLT 24 [028BH] |
| 0273 | j(A0E0002C): STR R0, SP, 2CH |
| 0274 | k(80E0002C): LDR R0, SP, 2CH |
| 0275 | k(80000000): LDR R0, R0, 0H |
| 0276 | k(A0E00064): STR R0, SP, 64H |
| 0277 | l(80E00064): LDR R0, SP, 64H |
| 0278 | l(81E00058): LDR R1, SP, 58H |
| 0279 | l(00030001): ROR R0, R0, R1 |
| 027A | l(A0E00064): STR R0, SP, 64H |
| SYSTEM.PUT(sa1+d,m spill + (src * m1)n)o;p |
| 027B | m(80E0002C): LDR R0, SP, 2CH |
| 027C | m(81E00030): LDR R1, SP, 30H |
| 027D | m(00080001): ADD R0, R0, R1 |
| 027E | n(81E00064): LDR R1, SP, 64H |
| 027F | n(82E00074): LDR R2, SP, 74H |
| 0280 | n(01140002): AND R1, R1, R2 |
| 0281 | o(82E0006C): LDR R2, SP, 6CH |
| 0282 | o(01260001): IOR R1, R2, R1 |
| 0283 | p(A1000000): STR R1, R0, 0H |
| spill := src - m1 |
| ENDq ;r |
| 0284 | q(80E00064): LDR R0, SP, 64H |
| 0285 | q(81E00074): LDR R1, SP, 74H |
| 0286 | q(00050001): ANN R0, R0, R1 |
| 0287 | q(A0E0006C): STR R0, SP, 6CH |
| 0288 | r(80E0002C): LDR R0, SP, 2CH |
| 0289 | r(5008FFFC): ADD R0, R0, FFFFFFFCH |
| 028A | r(E7FFFFE4): B -28 [026FH] |
| SYSTEM.GET(sa0, src);s src := ROR(src, n);t |
| 028B | s(80E00028): LDR R0, SP, 28H |
| 028C | s(80000000): LDR R0, R0, 0H |
| 028D | s(A0E00064): STR R0, SP, 64H |
| 028E | t(80E00064): LDR R0, SP, 64H |
| 028F | t(81E00058): LDR R1, SP, 58H |
| 0290 | t(00030001): ROR R0, R0, R1 |
| 0291 | t(A0E00064): STR R0, SP, 64H |
| SYSTEM.GET(sa0+d,u dst);v |
| 0292 | u(80E00028): LDR R0, SP, 28H |
| 0293 | u(81E00030): LDR R1, SP, 30H |
| 0294 | u(00080001): ADD R0, R0, R1 |
| 0295 | v(80000000): LDR R0, R0, 0H |
| 0296 | v(A0E00068): STR R0, SP, 68H |
| SYSTEM.PUT(sa0+d,w (src * m0)x + (dst - m0)y)z |
| 0297 | w(80E00028): LDR R0, SP, 28H |
| 0298 | w(81E00030): LDR R1, SP, 30H |
| 0299 | w(00080001): ADD R0, R0, R1 |
| 029A | x(81E00064): LDR R1, SP, 64H |
| 029B | x(82E00070): LDR R2, SP, 70H |
| 029C | x(01140002): AND R1, R1, R2 |
| 029D | y(82E00068): LDR R2, SP, 68H |
| 029E | y(83E00070): LDR R3, SP, 70H |
| 029F | y(02250003): ANN R2, R2, R3 |
| 02A0 | z(01160002): IOR R1, R1, R2 |
| ELSEa SYSTEMb.GET(sa0, src);c src := ROR(src, n);d |
| 02A1 | a(A1000000): STR R1, R0, 0H |
| 02A2 | b(E7000017): B 23 [02BAH] |
| 02A3 | c(80E00028): LDR R0, SP, 28H |
| 02A4 | c(80000000): LDR R0, R0, 0H |
| 02A5 | c(A0E00064): STR R0, SP, 64H |
| 02A6 | d(80E00064): LDR R0, SP, 64H |
| 02A7 | d(81E00058): LDR R1, SP, 58H |
| 02A8 | d(00030001): ROR R0, R0, R1 |
| 02A9 | d(A0E00064): STR R0, SP, 64H |
| SYSTEM.GET(sa0+d,e dst);f |
| 02AA | e(80E00028): LDR R0, SP, 28H |
| 02AB | e(81E00030): LDR R1, SP, 30H |
| 02AC | e(00080001): ADD R0, R0, R1 |
| 02AD | f(80000000): LDR R0, R0, 0H |
| 02AE | f(A0E00068): STR R0, SP, 68H |
| SYSTEM.PUT(sa0+d,g (src * m3)h + (dst - m3)i)j |
| 02AF | g(80E00028): LDR R0, SP, 28H |
| 02B0 | g(81E00030): LDR R1, SP, 30H |
| 02B1 | g(00080001): ADD R0, R0, R1 |
| 02B2 | h(81E00064): LDR R1, SP, 64H |
| 02B3 | h(82E0007C): LDR R2, SP, 7CH |
| 02B4 | h(01140002): AND R1, R1, R2 |
| 02B5 | i(82E00068): LDR R2, SP, 68H |
| 02B6 | i(83E0007C): LDR R3, SP, 7CH |
| 02B7 | i(02250003): ANN R2, R2, R3 |
| 02B8 | j(01160002): IOR R1, R1, R2 |
| ENDk |
| 02B9 | k(A1000000): STR R1, R0, 0H |
| ELSE (*shift left*) m1l := {-n ..m 31}n;o |
| 02BA | l(E7000073): B 115 [032EH] |
| 02BB | m(80E00058): LDR R0, SP, 58H |
| 02BC | m(41000000): MOV R1, R0, 0H |
| 02BD | m(00190000): SUB R0, R1, R0 |
| 02BE | n(5100FFFF): MOV R1, R0, FFFFFFFFH |
| 02BF | n(00110000): LSL R0, R1, R0 |
| 02C0 | n(4100001F): MOV R1, R0, 1FH |
| 02C1 | n(5200FFFE): MOV R2, R0, FFFFFFFEH |
| 02C2 | n(01210001): LSL R1, R2, R1 |
| 02C3 | n(00050001): ANN R0, R0, R1 |
| 02C4 | o(A0E00074): STR R0, SP, 74H |
| SYSTEM.GET(sa0, src);p src := ROR(src, n);q |
| 02C5 | p(80E00028): LDR R0, SP, 28H |
| 02C6 | p(80000000): LDR R0, R0, 0H |
| 02C7 | p(A0E00064): STR R0, SP, 64H |
| 02C8 | q(80E00064): LDR R0, SP, 64H |
| 02C9 | q(81E00058): LDR R1, SP, 58H |
| 02CA | q(00030001): ROR R0, R0, R1 |
| 02CB | q(A0E00064): STR R0, SP, 64H |
| SYSTEM.GET(sa0+d,r dst);s |
| 02CC | r(80E00028): LDR R0, SP, 28H |
| 02CD | r(81E00030): LDR R1, SP, 30H |
| 02CE | r(00080001): ADD R0, R0, R1 |
| 02CF | s(80000000): LDR R0, R0, 0H |
| 02D0 | s(A0E00068): STR R0, SP, 68H |
| IF v1 + w <t 32 THENu |
| 02D1 | t(80E0004C): LDR R0, SP, 4CH |
| 02D2 | t(81E0000C): LDR R1, SP, CH |
| 02D3 | t(00080001): ADD R0, R0, R1 |
| 02D4 | u(40090020): SUB R0, R0, 20H |
| 02D5 | u(ED00000C): BGE 12 [02E2H] |
| SYSTEM.PUT(sa0+d,v (dst - m3)w + (src * m3)x)y |
| 02D6 | v(80E00028): LDR R0, SP, 28H |
| 02D7 | v(81E00030): LDR R1, SP, 30H |
| 02D8 | v(00080001): ADD R0, R0, R1 |
| 02D9 | w(81E00068): LDR R1, SP, 68H |
| 02DA | w(82E0007C): LDR R2, SP, 7CH |
| 02DB | w(01150002): ANN R1, R1, R2 |
| 02DC | x(82E00064): LDR R2, SP, 64H |
| 02DD | x(83E0007C): LDR R3, SP, 7CH |
| 02DE | x(02240003): AND R2, R2, R3 |
| 02DF | y(01160002): IOR R1, R1, R2 |
| ELSEz SYSTEMa.PUT(sa0+d,b (dst - m0)c + (src * m0)d)e;f |
| 02E0 | z(A1000000): STR R1, R0, 0H |
| 02E1 | a(E700004C): B 76 [032EH] |
| 02E2 | b(80E00028): LDR R0, SP, 28H |
| 02E3 | b(81E00030): LDR R1, SP, 30H |
| 02E4 | b(00080001): ADD R0, R0, R1 |
| 02E5 | c(81E00068): LDR R1, SP, 68H |
| 02E6 | c(82E00070): LDR R2, SP, 70H |
| 02E7 | c(01150002): ANN R1, R1, R2 |
| 02E8 | d(82E00064): LDR R2, SP, 64H |
| 02E9 | d(83E00070): LDR R3, SP, 70H |
| 02EA | d(02240003): AND R2, R2, R3 |
| 02EB | e(01160002): IOR R1, R1, R2 |
| 02EC | f(A1000000): STR R1, R0, 0H |
| spill := src - m1;g |
| 02ED | g(80E00064): LDR R0, SP, 64H |
| 02EE | g(81E00074): LDR R1, SP, 74H |
| 02EF | g(00050001): ANN R0, R0, R1 |
| 02F0 | g(A0E0006C): STR R0, SP, 6CH |
| FOR sa1 := sa0+4 TOh sa0 + len-i4 BYj 4 DO |
| 02F1 | h(80E00028): LDR R0, SP, 28H |
| 02F2 | h(40080004): ADD R0, R0, 4H |
| 02F3 | i(81E00028): LDR R1, SP, 28H |
| 02F4 | i(82E00034): LDR R2, SP, 34H |
| 02F5 | i(01180002): ADD R1, R1, R2 |
| 02F6 | j(41190004): SUB R1, R1, 4H |
| SYSTEMk.GET(sa1, src);l src := ROR(src, n);m |
| 02F7 | k(01090001): SUB R1, R0, R1 |
| 02F8 | k(EE000018): BGT 24 [0311H] |
| 02F9 | k(A0E0002C): STR R0, SP, 2CH |
| 02FA | l(80E0002C): LDR R0, SP, 2CH |
| 02FB | l(80000000): LDR R0, R0, 0H |
| 02FC | l(A0E00064): STR R0, SP, 64H |
| 02FD | m(80E00064): LDR R0, SP, 64H |
| 02FE | m(81E00058): LDR R1, SP, 58H |
| 02FF | m(00030001): ROR R0, R0, R1 |
| 0300 | m(A0E00064): STR R0, SP, 64H |
| SYSTEM.PUT(sa1+d,n spill + (src * m1)o)p;q |
| 0301 | n(80E0002C): LDR R0, SP, 2CH |
| 0302 | n(81E00030): LDR R1, SP, 30H |
| 0303 | n(00080001): ADD R0, R0, R1 |
| 0304 | o(81E00064): LDR R1, SP, 64H |
| 0305 | o(82E00074): LDR R2, SP, 74H |
| 0306 | o(01140002): AND R1, R1, R2 |
| 0307 | p(82E0006C): LDR R2, SP, 6CH |
| 0308 | p(01260001): IOR R1, R2, R1 |
| 0309 | q(A1000000): STR R1, R0, 0H |
| spill := src - m1 |
| ENDr ;s |
| 030A | r(80E00064): LDR R0, SP, 64H |
| 030B | r(81E00074): LDR R1, SP, 74H |
| 030C | r(00050001): ANN R0, R0, R1 |
| 030D | r(A0E0006C): STR R0, SP, 6CH |
| 030E | s(80E0002C): LDR R0, SP, 2CH |
| 030F | s(40080004): ADD R0, R0, 4H |
| 0310 | s(E7FFFFE2): B -30 [02F3H] |
| SYSTEM.GET(sa0+len,t src);u src := ROR(src, n);v |
| 0311 | t(80E00028): LDR R0, SP, 28H |
| 0312 | t(81E00034): LDR R1, SP, 34H |
| 0313 | t(00080001): ADD R0, R0, R1 |
| 0314 | u(80000000): LDR R0, R0, 0H |
| 0315 | u(A0E00064): STR R0, SP, 64H |
| 0316 | v(80E00064): LDR R0, SP, 64H |
| 0317 | v(81E00058): LDR R1, SP, 58H |
| 0318 | v(00030001): ROR R0, R0, R1 |
| 0319 | v(A0E00064): STR R0, SP, 64H |
| SYSTEM.GET(sa0+len+wd,x dst);y |
| 031A | w(80E00028): LDR R0, SP, 28H |
| 031B | w(81E00034): LDR R1, SP, 34H |
| 031C | w(00080001): ADD R0, R0, R1 |
| 031D | x(81E00030): LDR R1, SP, 30H |
| 031E | x(00080001): ADD R0, R0, R1 |
| 031F | y(80000000): LDR R0, R0, 0H |
| 0320 | y(A0E00068): STR R0, SP, 68H |
| SYSTEM.PUT(sa0+len+zd,a (src - m2)b + (dst * m2)c)d |
| 0321 | z(80E00028): LDR R0, SP, 28H |
| 0322 | z(81E00034): LDR R1, SP, 34H |
| 0323 | z(00080001): ADD R0, R0, R1 |
| 0324 | a(81E00030): LDR R1, SP, 30H |
| 0325 | a(00080001): ADD R0, R0, R1 |
| 0326 | b(81E00064): LDR R1, SP, 64H |
| 0327 | b(82E00078): LDR R2, SP, 78H |
| 0328 | b(01150002): ANN R1, R1, R2 |
| 0329 | c(82E00068): LDR R2, SP, 68H |
| 032A | c(83E00078): LDR R3, SP, 78H |
| 032B | c(02240003): AND R2, R2, R3 |
| 032C | d(01160002): IOR R1, R1, R2 |
| ENDe |
| 032D | e(A1000000): STR R1, R0, 0H |
| END ; |
| INC(sa0, step) |
| ENDf |
| 032E | f(80E00028): LDR R0, SP, 28H |
| 032F | f(81E00060): LDR R1, SP, 60H |
| 0330 | f(00080001): ADD R0, R0, R1 |
| 0331 | f(A0E00028): STR R0, SP, 28H |
| 0332 | f(E7FFFF03): B -253 [0236H] |
| ENDg CopyBlock; |
| 0333 | g(8FE00000): LDR LNK, SP, 0H |
| 0334 | g(4EE80080): ADD SP, SP, 80H |
| 0335 | g(C700000F): B LNK |
| |
| PROCEDURE ReplPattern*(col, patadr, x, y, w, h, mode: INTEGER); |
| (* pattern width = 32, fixed; pattern starts at patadr+4, for mode = invert only *) |
| VAR al, ar, a0, a1: INTEGER; |
| pta0, pta1: INTEGER; (*pattern addresses*) |
| ph: BYTE; |
| left, right, mid, pix, pixl, pixr, ptw: SET; |
| BEGINh al := base + y*128;i SYSTEM.GET(patadr+1,j ph);k |
| 0336 | h .PROC 18 |
| 0336 | h(4EE90058): SUB SP, SP, 58H |
| 0337 | h(AFE00000): STR LNK, SP, 0H |
| 0338 | h(A0E00004): STR R0, SP, 4H |
| 0339 | h(A1E00008): STR R1, SP, 8H |
| 033A | h(A2E0000C): STR R2, SP, CH |
| 033B | h(A3E00010): STR R3, SP, 10H |
| 033C | h(A4E00014): STR R4, SP, 14H |
| 033D | h(A5E00018): STR R5, SP, 18H |
| 033E | h(A6E0001C): STR R6, SP, 1CH |
| 033F | i(80E00010): LDR R0, SP, 10H |
| 0340 | i(40010007): LSL R0, R0, 7H |
| 0341 | i(6100000E): MOV' R1, R0, EH |
| 0342 | i(41167F00): IOR R1, R1, 7F00H |
| 0343 | i(00180000): ADD R0, R1, R0 |
| 0344 | i(A0E00020): STR R0, SP, 20H |
| 0345 | j(80E00008): LDR R0, SP, 8H |
| 0346 | j(40080001): ADD R0, R0, 1H |
| 0347 | k(90000000): LDR R0, R0, 0H |
| 0348 | k(B0E00038): STR R0, SP, 38H |
| pta0 := patadr+4;l pta1 := ph*4 +m pta0;n |
| 0349 | l(80E00008): LDR R0, SP, 8H |
| 034A | l(40080004): ADD R0, R0, 4H |
| 034B | l(A0E00030): STR R0, SP, 30H |
| 034C | m(90E00038): LDR R0, SP, 38H |
| 034D | m(40010002): LSL R0, R0, 2H |
| 034E | n(81E00030): LDR R1, SP, 30H |
| 034F | n(00080001): ADD R0, R0, R1 |
| 0350 | n(A0E00034): STR R0, SP, 34H |
| ar := ((x+w-o1)p DIV 32)q*4 +r al;s al := (x DIV 32)t*4 +u al;v |
| 0351 | o(80E0000C): LDR R0, SP, CH |
| 0352 | o(81E00014): LDR R1, SP, 14H |
| 0353 | o(00080001): ADD R0, R0, R1 |
| 0354 | p(40090001): SUB R0, R0, 1H |
| 0355 | q(40020005): ASR R0, R0, 5H |
| 0356 | r(40010002): LSL R0, R0, 2H |
| 0357 | s(81E00020): LDR R1, SP, 20H |
| 0358 | s(00080001): ADD R0, R0, R1 |
| 0359 | s(A0E00024): STR R0, SP, 24H |
| 035A | t(80E0000C): LDR R0, SP, CH |
| 035B | t(40020005): ASR R0, R0, 5H |
| 035C | u(40010002): LSL R0, R0, 2H |
| 035D | v(81E00020): LDR R1, SP, 20H |
| 035E | v(00080001): ADD R0, R0, R1 |
| 035F | v(A0E00020): STR R0, SP, 20H |
| IF ar = al THENw |
| 0360 | w(80E00024): LDR R0, SP, 24H |
| 0361 | w(81E00020): LDR R1, SP, 20H |
| 0362 | w(00090001): SUB R0, R0, R1 |
| 0363 | w(E9000035): BNE 53 [0399H] |
| mid := {(x MOD 32)x .. ((x+w-y1)z MOD 32)a}b;c |
| 0364 | x(80E0000C): LDR R0, SP, CH |
| 0365 | x(4004001F): AND R0, R0, 1FH |
| 0366 | y(81E0000C): LDR R1, SP, CH |
| 0367 | y(82E00014): LDR R2, SP, 14H |
| 0368 | y(01180002): ADD R1, R1, R2 |
| 0369 | z(41190001): SUB R1, R1, 1H |
| 036A | a(4114001F): AND R1, R1, 1FH |
| 036B | b(5200FFFF): MOV R2, R0, FFFFFFFFH |
| 036C | b(00210000): LSL R0, R2, R0 |
| 036D | b(5200FFFE): MOV R2, R0, FFFFFFFEH |
| 036E | b(01210001): LSL R1, R2, R1 |
| 036F | b(00050001): ANN R0, R0, R1 |
| 0370 | c(A0E00044): STR R0, SP, 44H |
| FOR a1 := al TOd al + (h-1)e*128 BYf 128 DO |
| 0371 | d(80E00020): LDR R0, SP, 20H |
| 0372 | e(81E00018): LDR R1, SP, 18H |
| 0373 | e(41190001): SUB R1, R1, 1H |
| 0374 | f(41110007): LSL R1, R1, 7H |
| 0375 | f(82E00020): LDR R2, SP, 20H |
| 0376 | f(01280001): ADD R1, R2, R1 |
| SYSTEMg.GET(a1, pix);h SYSTEM.GET(pta0, ptw);i SYSTEM.PUT(a1, (pix - mid)j + (pix/ptw *k mid)l)m;n INC(pta0, 4);o |
| 0377 | g(01090001): SUB R1, R0, R1 |
| 0378 | g(EE00001F): BGT 31 [0398H] |
| 0379 | g(A0E0002C): STR R0, SP, 2CH |
| 037A | h(80E0002C): LDR R0, SP, 2CH |
| 037B | h(80000000): LDR R0, R0, 0H |
| 037C | h(A0E00048): STR R0, SP, 48H |
| 037D | i(80E00030): LDR R0, SP, 30H |
| 037E | i(80000000): LDR R0, R0, 0H |
| 037F | i(A0E00054): STR R0, SP, 54H |
| 0380 | j(80E00048): LDR R0, SP, 48H |
| 0381 | j(81E00044): LDR R1, SP, 44H |
| 0382 | j(00050001): ANN R0, R0, R1 |
| 0383 | k(81E00048): LDR R1, SP, 48H |
| 0384 | k(82E00054): LDR R2, SP, 54H |
| 0385 | k(01170002): XOR R1, R1, R2 |
| 0386 | l(82E00044): LDR R2, SP, 44H |
| 0387 | l(01140002): AND R1, R1, R2 |
| 0388 | m(00060001): IOR R0, R0, R1 |
| 0389 | n(81E0002C): LDR R1, SP, 2CH |
| 038A | n(A0100000): STR R0, R1, 0H |
| 038B | o(80E00030): LDR R0, SP, 30H |
| 038C | o(40080004): ADD R0, R0, 4H |
| 038D | o(A0E00030): STR R0, SP, 30H |
| IF pta0 = pta1 THENp pta0 := patadr+4 ENDq |
| 038E | p(80E00030): LDR R0, SP, 30H |
| 038F | p(81E00034): LDR R1, SP, 34H |
| 0390 | p(00090001): SUB R0, R0, R1 |
| 0391 | p(E9000003): BNE 3 [0395H] |
| 0392 | q(80E00008): LDR R0, SP, 8H |
| 0393 | q(40080004): ADD R0, R0, 4H |
| 0394 | q(A0E00030): STR R0, SP, 30H |
| END |
| ELSIFr ars > al THENt |
| 0395 | r(80E0002C): LDR R0, SP, 2CH |
| 0396 | r(40080080): ADD R0, R0, 80H |
| 0397 | r(E7FFFFDA): B -38 [0372H] |
| 0398 | s(E7000061): B 97 [03FAH] |
| 0399 | t(80E00024): LDR R0, SP, 24H |
| 039A | t(81E00020): LDR R1, SP, 20H |
| 039B | t(00090001): SUB R0, R0, R1 |
| 039C | t(E600005D): BLE 93 [03FAH] |
| left := {(x MOD 32)u .. 31}v;w right := {0 .. ((x+w-x1)y MOD 32)z}a;b |
| 039D | u(80E0000C): LDR R0, SP, CH |
| 039E | u(4004001F): AND R0, R0, 1FH |
| 039F | v(5100FFFF): MOV R1, R0, FFFFFFFFH |
| 03A0 | v(00110000): LSL R0, R1, R0 |
| 03A1 | v(4100001F): MOV R1, R0, 1FH |
| 03A2 | v(5200FFFE): MOV R2, R0, FFFFFFFEH |
| 03A3 | v(01210001): LSL R1, R2, R1 |
| 03A4 | v(00050001): ANN R0, R0, R1 |
| 03A5 | w(A0E0003C): STR R0, SP, 3CH |
| 03A6 | x(80E0000C): LDR R0, SP, CH |
| 03A7 | x(81E00014): LDR R1, SP, 14H |
| 03A8 | x(00080001): ADD R0, R0, R1 |
| 03A9 | y(40090001): SUB R0, R0, 1H |
| 03AA | z(4004001F): AND R0, R0, 1FH |
| 03AB | a(5100FFFE): MOV R1, R0, FFFFFFFEH |
| 03AC | a(00110000): LSL R0, R1, R0 |
| 03AD | a(5007FFFF): XOR R0, R0, FFFFFFFFH |
| 03AE | a(5004FFFF): AND R0, R0, FFFFFFFFH |
| 03AF | b(A0E00040): STR R0, SP, 40H |
| FOR a0 := al TOc al + (h-1)d*128 BYe 128 DO |
| 03B0 | c(80E00020): LDR R0, SP, 20H |
| 03B1 | d(81E00018): LDR R1, SP, 18H |
| 03B2 | d(41190001): SUB R1, R1, 1H |
| 03B3 | e(41110007): LSL R1, R1, 7H |
| 03B4 | e(82E00020): LDR R2, SP, 20H |
| 03B5 | e(01280001): ADD R1, R2, R1 |
| SYSTEMf.GET(a0, pixl);g SYSTEM.GET(pta0, ptw);h SYSTEM.PUT(a0, (pixl - left)i + (pixl/ptw *j left)k)l;m |
| 03B6 | f(01090001): SUB R1, R0, R1 |
| 03B7 | f(EE000042): BGT 66 [03FAH] |
| 03B8 | f(A0E00028): STR R0, SP, 28H |
| 03B9 | g(80E00028): LDR R0, SP, 28H |
| 03BA | g(80000000): LDR R0, R0, 0H |
| 03BB | g(A0E0004C): STR R0, SP, 4CH |
| 03BC | h(80E00030): LDR R0, SP, 30H |
| 03BD | h(80000000): LDR R0, R0, 0H |
| 03BE | h(A0E00054): STR R0, SP, 54H |
| 03BF | i(80E0004C): LDR R0, SP, 4CH |
| 03C0 | i(81E0003C): LDR R1, SP, 3CH |
| 03C1 | i(00050001): ANN R0, R0, R1 |
| 03C2 | j(81E0004C): LDR R1, SP, 4CH |
| 03C3 | j(82E00054): LDR R2, SP, 54H |
| 03C4 | j(01170002): XOR R1, R1, R2 |
| 03C5 | k(82E0003C): LDR R2, SP, 3CH |
| 03C6 | k(01140002): AND R1, R1, R2 |
| 03C7 | l(00060001): IOR R0, R0, R1 |
| 03C8 | m(81E00028): LDR R1, SP, 28H |
| 03C9 | m(A0100000): STR R0, R1, 0H |
| FOR a1 := a0+4 TOn ar-4 BYo 4 DO SYSTEMp.GET(a1, pix);q SYSTEM.PUT(a1, pix/ptw)r ENDs ;t |
| 03CA | n(80E00028): LDR R0, SP, 28H |
| 03CB | n(40080004): ADD R0, R0, 4H |
| 03CC | o(81E00024): LDR R1, SP, 24H |
| 03CD | o(41190004): SUB R1, R1, 4H |
| 03CE | p(01090001): SUB R1, R0, R1 |
| 03CF | p(EE00000C): BGT 12 [03DCH] |
| 03D0 | p(A0E0002C): STR R0, SP, 2CH |
| 03D1 | q(80E0002C): LDR R0, SP, 2CH |
| 03D2 | q(80000000): LDR R0, R0, 0H |
| 03D3 | q(A0E00048): STR R0, SP, 48H |
| 03D4 | r(80E00048): LDR R0, SP, 48H |
| 03D5 | r(81E00054): LDR R1, SP, 54H |
| 03D6 | r(00070001): XOR R0, R0, R1 |
| 03D7 | s(81E0002C): LDR R1, SP, 2CH |
| 03D8 | s(A0100000): STR R0, R1, 0H |
| 03D9 | t(80E0002C): LDR R0, SP, 2CH |
| 03DA | t(40080004): ADD R0, R0, 4H |
| 03DB | t(E7FFFFF0): B -16 [03CCH] |
| SYSTEM.GET(ar, pixr);u SYSTEM.PUT(ar, (pixr - right)v + (pixr/ptw *w right)x)y;z |
| 03DC | u(80E00024): LDR R0, SP, 24H |
| 03DD | u(80000000): LDR R0, R0, 0H |
| 03DE | u(A0E00050): STR R0, SP, 50H |
| 03DF | v(80E00050): LDR R0, SP, 50H |
| 03E0 | v(81E00040): LDR R1, SP, 40H |
| 03E1 | v(00050001): ANN R0, R0, R1 |
| 03E2 | w(81E00050): LDR R1, SP, 50H |
| 03E3 | w(82E00054): LDR R2, SP, 54H |
| 03E4 | w(01170002): XOR R1, R1, R2 |
| 03E5 | x(82E00040): LDR R2, SP, 40H |
| 03E6 | x(01140002): AND R1, R1, R2 |
| 03E7 | y(00060001): IOR R0, R0, R1 |
| 03E8 | z(81E00024): LDR R1, SP, 24H |
| 03E9 | z(A0100000): STR R0, R1, 0H |
| INC(pta0, 4);a INC(ar, 128);b |
| 03EA | a(80E00030): LDR R0, SP, 30H |
| 03EB | a(40080004): ADD R0, R0, 4H |
| 03EC | a(A0E00030): STR R0, SP, 30H |
| 03ED | b(80E00024): LDR R0, SP, 24H |
| 03EE | b(40080080): ADD R0, R0, 80H |
| 03EF | b(A0E00024): STR R0, SP, 24H |
| IF pta0 = pta1 THENc pta0 := patadr+4 ENDd |
| 03F0 | c(80E00030): LDR R0, SP, 30H |
| 03F1 | c(81E00034): LDR R1, SP, 34H |
| 03F2 | c(00090001): SUB R0, R0, R1 |
| 03F3 | c(E9000003): BNE 3 [03F7H] |
| 03F4 | d(80E00008): LDR R0, SP, 8H |
| 03F5 | d(40080004): ADD R0, R0, 4H |
| 03F6 | d(A0E00030): STR R0, SP, 30H |
| END |
| ENDe |
| 03F7 | e(80E00028): LDR R0, SP, 28H |
| 03F8 | e(40080080): ADD R0, R0, 80H |
| 03F9 | e(E7FFFFB7): B -73 [03B1H] |
| ENDf ReplPattern; |
| 03FA | f(8FE00000): LDR LNK, SP, 0H |
| 03FB | f(4EE80058): ADD SP, SP, 58H |
| 03FC | f(C700000F): B LNK |
| |
| BEGINg Base := base;h Width := 1024;i Height := 768;j |
| 03FD | g .PROC 0 |
| 03FD | g .ENTRYPOINT |
| 03FD | g(4EE90004): SUB SP, SP, 4H |
| 03FE | g(AFE00000): STR LNK, SP, 0H |
| 03FF | h(6000000E): MOV' R0, R0, EH |
| 0400 | h(40067F00): IOR R0, R0, 7F00H |
| 0401 | h .FIXUP D |
| 0401 | h(8D000401): LDR SB, MT, MOD0 [Display] |
| 0402 | h(A0D00030): STR R0, SB, 30H [data] |
| 0403 | i(40000400): MOV R0, R0, 400H |
| 0404 | i(A0D00034): STR R0, SB, 34H |
| 0405 | j(40000300): MOV R0, R0, 300H |
| 0406 | j(A0D00038): STR R0, SB, 38H |
| arrow := SYSTEM.ADR($0F0F 0060 0070 0038 001C 000E 0007 8003 C101 E300 7700 3F00 1F00 3F00 7F00 FF00$);k |
| 0407 | k(40D80058): ADD R0, SB, 58H |
| 0408 | k(A0D0003C): STR R0, SB, 3CH |
| star := SYSTEM.ADR($0F0F 8000 8220 8410 8808 9004 A002 C001 7F7F C001 A002 9004 8808 8410 8220 8000$);l |
| 0409 | l(40D80078): ADD R0, SB, 78H |
| 040A | l(A0D00040): STR R0, SB, 40H |
| hook := SYSTEM.ADR($0C0C 070F 8707 C703 E701 F700 7F00 3F00 1F00 0F00 0700 0300 01$);m |
| 040B | m(40D80098): ADD R0, SB, 98H |
| 040C | m(A0D00044): STR R0, SB, 44H |
| updown := SYSTEM.ADR($080E 183C 7EFF 1818 1818 1818 FF7E3C18$);n |
| 040D | n(40D800B4): ADD R0, SB, B4H |
| 040E | n(A0D00048): STR R0, SB, 48H |
| block := SYSTEM.ADR($0808 FFFF C3C3 C3C3 FFFF$);o |
| 040F | o(40D800C4): ADD R0, SB, C4H |
| 0410 | o(A0D0004C): STR R0, SB, 4CH |
| cross := SYSTEM.ADR($0F0F 0140 0220 0410 0808 1004 2002 4001 0000 4001 2002 1004 0808 0410 0220 0140$);p |
| 0411 | p(40D800D0): ADD R0, SB, D0H |
| 0412 | p(A0D00050): STR R0, SB, 50H |
| grey := SYSTEM.ADR($2002 0000 5555 5555 AAAA AAAA$) |
| ENDq Display.r |
| 0413 | q(40D800F0): ADD R0, SB, F0H |
| 0414 | q(A0D00054): STR R0, SB, 54H |
| 0415 | r(8FE00000): LDR LNK, SP, 0H |
| 0416 | r(4EE80004): ADD SP, SP, 4H |
| 0417 | r(C700000F): B LNK |