equals X = 160, Y = 70 .CrLf EQU 0Dh, 0Ah (expr JumpFAR ?) -> bytes =0EAh, ^1(4) (expr Terminate (?) ax=4C^1; 21h=.int expr) MODEL Tiny, Pascal .ORG 100h ..286 .LOCALS _@ PROGRAM Flame ax=0013h; 10h=.int .cli dx=03C4h; dx=.out.al=04h; al=.in.dx=+1; al=.or.04h; dx=.out.al=.and.0F7h dx=03CEh; dx=.out.al=05h; al=.in.dx=+1; dx=.out.al=.and.0EFh dx=-1; dx=.out.al=06h; al=.in.dx=+1; dx=.out.al=.and.0FDh dx=03D4h; dx=.out.al=14h; al=.in.dx=+1; dx=.out.al=.and.0BFh dx=-1; dx=.out.al=17h; al=.in.dx=+1; al=.or.40h; dx=.out.al dx=03C4h; dx=.out.al=01h; al=.in.dx=+1; al=.or.20h; dx=.out.al dx=03D4h; dx=.out.al=09h; al=.in.dx=+1; dx=.out.al=.and.0F0h+03h dx=03C4h; dx=.out.ax=0F02h; .sti es=ax=0A000h; di,ax=0; cx=(80*100/2); stosw=.rep si=OFFSET CData (loop 7 (save cx bx=1; .lodsw; cx=256; ax=.xchg.cx; dx=0; cx=.idiv.; bp=ax .lodsw; di=ax (while (save si .cli dx=03C8h; ax=di; dx=.out.al dx=+1; push dx; push dx; push dx (loop 3 dx=bx; .lodsw; dx=.imul.; (save cx) cx=256; cx=.idiv ah=al; .lodsb; al=+ah; pop dx; dx=.out.al loop) .sti di=+1; bx=+bp; .lodsw save) while) di<=ax save) si=+11 loop) push cs; pop es; di=OFFSET StartBuffer; cx=(70*160/2); ax=0; stosw=.rep dx=OFFSET Int_09h ax=3509h; 21h=.int WORD PTR [Old_Int_09h]=bx WORD PTR [Old_Int_09h+2]=es ah=25h; 21h=.int 21h=.out.al=11111100b push cs; pop es; push cs; pop ds .cli dx=03C4h; dx=.out.al=01h; al=.in.dx=+1; dx=.out.al=.and.0DFh .sti Next: dx=03DAh (while al=.in.dx while) al.test.00001000b= bx=StartPos+(Y-3); if bx >= Y then bx=-Y cx=1 (while di=OFFSET StartBuffer; ax=X; bx=.mul; di=+ax+cx al=.in.40h; ax=>1 BYTE PTR ds:[di]=255; if is carry then BYTE PTR ds:[di]=20 cx=+1 while) cx<=(X-2) di=OFFSET StartBuffer; push di; push di ax,bx=0 di=+X; dh=(Y-2) (while (loop X al=[di]+[di+1]; ah=.adc.bl al=+[di-X]; ah=.adc.bl al=+[di+X]; ah=.adc.bl ax=>2; if <> then al=-1 .stosb loop) dh=-1 while) <> pop di; ax=0 (loop X al=[di]+[di+1]; ah=.adc.bl al=+[di+X*(Y-1)]; ah=.adc.bl al=+[di+X]; ah=.adc.bl ax=>2; if <> then al=-1 .stosb loop) pop di; di=+(X*(Y-1)); ax=0 cx=(X-1) (loop al=[di]+[di+1]; ah=.adc.bl al=+[di-X*(Y-1)]; ah=.adc.bl al=+[di-X]; ah=.adc.bl ax=>2; if <> then al=-1 .stosb loop) dx=03C4h; dx=.out.ax=0302h dx=X; ax=StartPos; dx=.imul (save ax si=ax; call DrawBuffer() dx=03C4h; dx=.out.ax=0C02h save) si=ax+1; call DrawBuffer() StartPos=+1; if StartPos = Y then StartPos=00h goto Next Int_09h: (save ax) al=.in.60h; al=.test.10000000b if = goto Exit JumpFAR Old_Int_09h Exit: sp=+6 dx=.lds.DWORD PTR Old_Int_09h ax=2509h; 21h=.int 21h=.out.al=0 ax=0003h; 10h=.int 09h=.int ah=09h; dx=OFFSET CopyrightMsg; push cs; pop ds; 21h=.int Finish: Terminate (00h) // ************************************************************************ (proc DrawBuffer()[es] es=ax=0A000h; di=(80*35); si=+OFFSET StartBuffer dx=StartPos ax=(Y-4) (while cx=(X/2) (save ax (loop) .movsb; si=+1 dx=+1 if dx>=Y then dx=0; si=-(Y*X) save) ax=-1 while) <> return proc) data CData = data = 4.0 data = 0 bytes = 0 data = 0 bytes = 0 data = 0 bytes = 0 data = 4 data = 4.5 data = 0 bytes = 0 data = 0 bytes = 0 data = 6 bytes = 0 data = 9 data = 35.10 data = 43 bytes = 0 data = 0 bytes = 0 data = -6 bytes = 6 data = 45 data = 29.46 data = 20 bytes = 43 data = 30 bytes = 0 data = 10 bytes = 0 data = 75 data = 9.76 data = 0 bytes = 63 data = 30 bytes = 30 data = 0 bytes = 10 data = 85 data = 63.86 data = 0 bytes = 63 data = 3 bytes = 60 data = 53 bytes = 10 data = 149 data = 105.150 data = 0 bytes = 63 data = -20 bytes = 63 data = -63 bytes = 63 data = 255 bytes CopyrightMsg = "Flame Copyright (C) 1997 by Scout, SPS.".CrLf."$" data StartPos=0 bytes StartBuffer(X*Y)