; PBar V1.0 ; By Preben Nielsen ; OPT O+ ; OPT O1+ ;Tells when a branch could be optimised to short ; OPT i+ ;Tells when '#' is probably missing incdir "INCLUDE:" include "exec/exec_lib.i" include "graphics/graphics_lib.i" include "intuition/intuition.i" include "intuition/intuition_lib.i" include "libraries/dos.i" include "libraries/dosextens.i" include "libraries/dos_lib.i" include "workbench/workbench.i" include "workbench/icon_lib.i" NL =0 PSID =0 MSID =1 STRID =2 CREATEID =3 PStartx =26 PStarty =50 MStartx =26 MStarty =106 BoxSizex =12 BoxSizey =6 StartX =0 StartY =2 SizeX =4 SizeY =6 SpaceX =8 SpaceY =10 Cols =12 Rows =14 Buffer =16 ColorSet =20 ColorClr =22 LoadBase MACRO IFNC '\1','ExecBase' movea.l \1(PC),A6 ENDC IFC '\1','ExecBase' movea.l 4.W,A6 ENDC ENDM CallLib MACRO jsr _LVO\1(A6) ENDM Call MACRO bsr \1 ENDM Push MACRO movem.l \1,-(SP) ENDM Pop MACRO movem.l (SP)+,\1 ENDM Gadget MACRO dc.l \1 dc.w \2,\3,\4,\5,\6,\7,\8 ENDM Gadget2 MACRO dc.l \1,\2,\3,\4,\5 dc.w \6 dc.l \7 ENDM Border MACRO dc.w \1,\2 dc.b \3,\4,\5,\6 dc.l \7,\8 ENDM IntuiText MACRO dc.b \1,\2,\3,0 dc.w \4,\5 dc.l TxtAttr1,\6,\7 ENDM SECTION PBAR,CODE Init Push D0-D7/A0-A6 LoadBase ExecBase suba.l A1,A1 CallLib FindTask ;Find us movea.l D0,A2 tst.l pr_CLI(A2) bne.S CLIAndWBStartup WBenchStartup lea pr_MsgPort(A2),A0 CallLib WaitPort ;wait for a message lea pr_MsgPort(A2),A0 CallLib GetMsg ;then get it move.l D0,WBenchMsg ;save it for later reply CLIAndWBStartup lea DosName(PC),A1 CallLib OldOpenLibrary move.l D0,DosBase beq.S Exit lea GfxName(PC),A1 CallLib OldOpenLibrary move.l D0,GfxBase beq.S Exit lea IntName(PC),A1 CallLib OldOpenLibrary move.l D0,IntBase beq.S Exit LoadBase IntBase lea NW(PC),A0 CallLib OpenWindow move.l D0,PWindow movea.l D0,A0 beq.S Exit move.l wd_RPort(A0),Rp ;save RastPort lea WinTitle(PC),A1 lea ScrTitle(PC),A2 CallLib SetWindowTitles bra.S Main Exit FreeWindow LoadBase IntBase move.l PWindow(PC),D0 beq.S FreeIntui movea.l D0,A0 CallLib CloseWindow FreeIntui LoadBase ExecBase move.l IntBase(PC),D0 beq.S FreeGfx movea.l D0,A1 CallLib CloseLibrary FreeGfx move.l GfxBase(PC),D0 beq.S FreeDos movea.l D0,A1 CallLib CloseLibrary FreeDos move.l DosBase(PC),D0 beq.S ReplyWB movea.l D0,A1 CallLib CloseLibrary ReplyWB move.l WBenchMsg(PC),D0 beq.S AllDone CallLib Forbid movea.l D0,A1 CallLib ReplyMsg ;Reply WBenchMessage if we are started from WB AllDone Pop D0-D7/A0-A6 moveq #0,D0 rts Main Call DrawPatBoxes Call DrawMaskBoxes Call FillPatBoxes Call FillMaskBoxes RefreshPart move.w PCopy,Pattern move.w MCopy,Mask Call DrawPat Call DrawMask Call DrawActiveBar Call DrawGhostedBar GetNextMsg LoadBase ExecBase movea.l PWindow(PC),A0 movea.l wd_UserPort(A0),A0 CallLib WaitPort movea.l PWindow(PC),A0 movea.l wd_UserPort(A0),A0 CallLib GetMsg tst.l D0 beq.S GetNextMsg GotAMessage movea.l D0,A1 move.l im_Class(A1),D3 move.l im_IAddress(A1),IAddress move.w im_MouseX(A1),MouseX move.w im_MouseY(A1),MouseY CallLib ReplyMsg DecodeMessage cmpi.l #CLOSEWINDOW,D3 beq Exit cmpi.w #GADGETUP,D3 beq.S DoGadget cmpi.w #GADGETDOWN,D3 bne.S GetNextMsg DoGadget movea.l IAddress(PC),A1 move.w gg_GadgetID(A1),D0 ;GadgetID lsl.l #1,D0 move.w GJ(PC,D0.W),D0 jmp GJ(PC,D0.W) GJ dc.w PSelect-GJ dc.w MSelect-GJ dc.w DoSaveAs-GJ dc.w DoChange-GJ * User clicked on the 'Active Pattern drawing area' gadget PSelect lea PatBoxes(PC),A5 bra.S DoSelect * User clicked on the 'Ghost Mask drawing area' gadget MSelect lea MaskBoxes(PC),A5 DoSelect Call ClearBarPat FindMousePos move.w MouseX(PC),D5 move.w MouseY(PC),D6 sub.w StartX(A5),D5 sub.w StartY(A5),D6 ext.l D5 ext.l D6 move.w SizeX(A5),D2 move.w SizeY(A5),D3 add.w SpaceX(A5),D2 add.w SpaceY(A5),D3 divu D2,D5 divu D3,D6 ext.l D5 ext.l D6 movea.l Buffer(A5),A1 adda.l D6,A1 adda.l D6,A1 moveq #15,D3 sub.w D5,D3 mulu Cols(A5),D6 add.l D6,D5 move.w (A1),D2 bchg D3,D2 move.w D2,(A1) bchg D3,D2 bne.S SetPMBit ClearPMBit move.w ColorClr(A5),D0 bra.S DoCom SetPMBit move.w ColorSet(A5),D0 DoCom Call SetPenA Call SetField bra RefreshPart ;The user pressed RETURN in the 'Save as' gadget DoSaveAs lea Pattern,A0 lea PatCopy(PC),A1 moveq #7,D0 PatLoop move.w (A0)+,(A1)+ dbf D0,PatLoop lea Mask,A0 lea MaskCopy(PC),A1 moveq #3,D0 MaskLoop move.w (A0)+,(A1)+ dbf D0,MaskLoop lea CharBuf(PC),A0 LoadBase DosBase move.l A0,D1 move.l #MODE_NEWFILE,D2 CallLib Open move.l D0,D7 beq.S DoneSave move.l D7,D1 lea PBar(PC),A0 move.l A0,D2 move.l #PBarEnd-PBar,D3 CallLib Write move.l D7,D1 CallLib Close move.l ITxtCreate+12(PC),D0 lea TxtCreate1(PC),A1 cmp.l A1,D0 bne.S DoneSave Call CreateIcon LoadBase ExecBase ;Save Icon lea IconName(PC),A1 CallLib OldOpenLibrary move.l D0,D7 beq.S DoneSave lea CharBuf(PC),A0 lea MyDiskObject(PC),A1 move.l D7,A6 CallLib PutIcon LoadBase ExecBase move.l D7,A1 CallLib CloseLibrary DoneSave bra GetNextMsg ;The user clicked the 'Save WITH(OUT) Icon' gadget DoChange lea ITxtCreate+it_IText(PC),A0 lea TxtCreate1(PC),A1 lea TxtCreate2(PC),A2 move.l (A0),D0 cmp.l A2,D0 beq.S Change move.l A2,A1 Change move.l A1,(A0) moveq #1,D0 lea CreateGad(PC),A0 movea.l PWindow(PC),A1 suba.l A2,A2 LoadBase IntBase CallLib RefreshGList bra GetNextMsg DrawPatBoxes lea PatBoxes(PC),A5 bra.S DrawBoxes DrawMaskBoxes lea MaskBoxes(PC),A5 ;A5=structure DrawBoxes Push D0-D7/A0-A1 Call SetAPen1 LoadBase GfxBase move.w StartX(A5),D0 move.w Cols(A5),D2 subq.w #1,D2 ColLoop move.w StartY(A5),D1 move.w Rows(A5),D3 subq.w #1,D3 RowLoop Push D0-D5/A5 move.w D0,D2 move.w D1,D3 moveq #0,D0 moveq #2,D1 move.w SizeX(A5),D4 move.w SizeY(A5),D5 lea ImageData,A0 movea.l Rp(PC),A1 CallLib BltTemplate ;BltTemplate((APTR)AltFont,8,192,rp,x,y,8,8); Pop D0-D5/A5 add.w SizeY(A5),D1 add.w SpaceY(A5),D1 dbf D3,RowLoop add.w SizeX(A5),D0 add.w SpaceX(A5),D0 dbf D2,ColLoop EndColLoop Pop D0-D7/A0-A1 rts FillPatBoxes lea PatBoxes(PC),A5 bra.S FillPMBoxes FillMaskBoxes lea MaskBoxes(PC),A5 FillPMBoxes movea.l Buffer(A5),A4 moveq #0,D1 FillPMLoop move.w (A4)+,D0 Call FillWORD addq.w #1,D1 cmp.w Rows(A5),D1 bne.S FillPMLoop rts ;D0=word, D1=row, A5=structure FillWORD Push D0-D7/A0-A1 move.l D0,D7 move.l D1,D6 move.w Cols(A5),D4 move.w D4,D3 subq.w #1,D4 FillWORDLoop move.l D6,D5 mulu D3,D5 add.w D3,D5 subq.w #1,D5 sub.w D4,D5 btst D4,D7 beq.S ClearBit SetBit move.w ColorSet(A5),D0 bra.S ContWORDLoop ClearBit move.w ColorClr(A5),D0 ContWORDLoop Call SetPenA Call SetField dbf D4,FillWORDLoop Pop D0-D7/A0-A1 rts ;D5=number, A5=structure SetField Push D0-D7/A0-A1 move.l D5,D0 divu Cols(A5),D0 move.w D0,D1 ;Row swap D0 ;Col ext.l D0 ext.l D1 move.w SizeX(A5),D2 move.w SizeY(A5),D3 add.w SpaceX(A5),D2 add.w SpaceY(A5),D3 mulu D2,D0 mulu D3,D1 add.w StartX(A5),D0 add.w StartY(A5),D1 move.l D0,D2 move.l D1,D3 addq.w #4,D0 addq.w #2,D1 subq.w #3,D2 subq.w #2,D3 add.w SizeX(A5),D2 add.w SizeY(A5),D3 movea.l Rp(PC),A1 LoadBase GfxBase CallLib RectFill Pop D0-D7/A0-A1 rts ClearBarPat suba.l A0,A0 moveq #0,D0 bra.S SetPattern SetActivePat lea Pattern+2,A0 moveq #3,D0 bra.S SetPattern SetGhostPat lea Mask+2,A0 moveq #2,D0 SetPattern movea.l Rp(PC),A1 move.l A0,rp_AreaPtrn(A1) move.b D0,rp_AreaPtSz(A1) rts DrawPat Call SetActivePat lea PatBoxes(PC),A5 moveq #40,D6 moveq #47,D7 bra.S DrawPM DrawMask Call SetGhostPat lea MaskBoxes(PC),A5 moveq #100,D6 moveq #103,D7 DrawPM Call SetDrMd1 move.w ColorSet(A5),D0 Call SetPenA move.w ColorClr(A5),D0 Call SetPenB move.w #160,D0 move.w D6,D1 move.w #175,D2 move.w D7,D3 LoadBase GfxBase movea.l Rp(PC),A1 CallLib RectFill rts DrawActiveBar moveq #28,D7 DrawAGB Call DrawBack Call SetActivePat Call SetDrMd1 Call SetAPen0 Call SetBPen1 Call DrawBar rts DrawGhostedBar moveq #114,D7 Call DrawAGB Call SetGhostPat Call SetDrMd0 Call SetAPen1 Call SetBPen0 Call DrawBar rts ;D7=x-offset DrawBack Call ClearBarPat Call SetAPen1 Call SetDrMd1 move.w D7,D0 subq.w #2,D0 moveq #23,D1 move.w D7,D2 addi.w #72,D2 moveq #32,D3 bra.S FillRect ;D7=x-offset DrawBar move.w D7,D0 moveq #24,D1 move.w D7,D2 addi.w #70,D2 moveq #31,D3 FillRect LoadBase GfxBase movea.l Rp(PC),A1 CallLib RectFill rts SetAPen0 moveq #0,D0 bra.S SetPenA SetAPen1 moveq #1,D0 bra.S SetPenA SetAPen2 moveq #2,D0 SetPenA movea.l Rp(PC),A1 ;D0=Color LoadBase GfxBase CallLib SetAPen rts SetBPen0 moveq #0,D0 bra.S SetPenB SetBPen1 moveq #1,D0 SetPenB movea.l Rp(PC),A1 ;D0=Color LoadBase GfxBase CallLib SetBPen rts SetDrMd0 moveq #0,D0 bra.S SetMdDr SetDrMd1 moveq #1,D0 SetMdDr movea.l Rp(PC),A1 ;D0=Mode LoadBase GfxBase CallLib SetDrMd rts ; Create an icon that shows the new-made pattern CreateIcon lea PatCopy+2(PC),A5 lea IconData+19(PC),A4 moveq #6,D0 Call PutData lea PatCopy(PC),A5 moveq #0,D0 Call PutData rts PutData CreateLoop move.l A4,A1 move.l A5,A2 move.b (A1),D1 lsl.l #8,D1 move.b 1(A1),D1 lsl.l #8,D1 move.b 2(A1),D1 lsl.l #8,D1 move.b 3(A1),D1 andi.l #%11111110000000000000000000000000,D1 move.b (A2),D2 lsl.l #8,D2 move.b 1(A2),D2 lsl.l #8,D2 move.b (A2),D2 lsl.l #1,D2 not.l D2 andi.l #%00000001111111111111111111111111,D2 or.l D2,D1 move.b D1,3(A1) lsr.l #8,D1 move.b D1,2(A1) lsr.l #8,D1 move.b D1,1(A1) lsr.l #8,D1 move.b D1,(A1) addq.w #2,A5 add.w #16,A4 dbf D0,CreateLoop rts DosName dc.b 'dos.library',0 GfxName dc.b 'graphics.library',0 IntName dc.b 'intuition.library',0 IconName dc.b 'icon.library',0 EVEN IAddress dc.l 0 MouseX dc.w 0 MouseY dc.w 0 StartSP dc.l 0 DosBase dc.l 0 GfxBase dc.l 0 IntBase dc.l 0 WBenchMsg dc.l 0 PWindow dc.l 0 Rp dc.l 0 ;RastPort Up dc.l 0 ;UserPort EVEN ;--- Window and gadgets NW dc.w 220,15,220,167 dc.b 0,1 dc.l GADGETUP!GADGETDOWN!CLOSEWINDOW,WINDOWCLOSE!WINDOWDRAG!WINDOWDEPTH!ACTIVATE,GadgetList,0,0,0,0 dc.w 0,0,0,0,WBENCHSCREEN BWIDTH =198 BHEIGHT =11 BBorder Border -2,-1,3,0,1,9,BVectors,NL BVectors dc.w 2,0,BWIDTH+1,0,BWIDTH+3,2,BWIDTH+3,BHEIGHT-1,BWIDTH+1,BHEIGHT+1,2,BHEIGHT+1,0,BHEIGHT-1,0,2,2,0 PWIDTH =22 PHEIGHT =12 PBorder Border 129,-13,1,0,1,9,PVectors,NL PVectors dc.w 2,0,PWIDTH+1,0,PWIDTH+3,2,PWIDTH+3,PHEIGHT-1,PWIDTH+1,PHEIGHT+1,2,PHEIGHT+1,0,PHEIGHT-1,0,2,2,0 MWIDTH =22 MHEIGHT =8 MBorder Border 129,-9,1,0,1,9,MVectors,NL MVectors dc.w 2,0,MWIDTH+1,0,MWIDTH+3,2,MWIDTH+3,MHEIGHT-1,MWIDTH+1,MHEIGHT+1,2,MHEIGHT+1,0,MHEIGHT-1,0,2,2,0 STRWIDTH =135 STRHEIGHT =10 StrBorder Border -3,-2,3,0,1,9,StrBVectors,NL StrBVectors dc.w 2,0,STRWIDTH,0,STRWIDTH+2,2,STRWIDTH+2,STRHEIGHT,STRWIDTH,STRHEIGHT+2,2,STRHEIGHT+2,0,STRHEIGHT,0,2,2,0 GadgetList PSGad Gadget MSGad,PStartx,PStarty,16*(BoxSizex-2),8*(BoxSizey-1),GADGHNONE,GADGIMMEDIATE,BOOLGADGET Gadget2 PBorder,NL,ITxtAP,NL,NL,PSID,NL MSGad Gadget StrGad,MStartx,MStarty,16*(BoxSizex-2),4*(BoxSizey-1),GADGHNONE,GADGIMMEDIATE,BOOLGADGET Gadget2 MBorder,NL,ITxtGM,NL,NL,MSID,NL StrGad Gadget CreateGad,75,133,STRWIDTH,STRHEIGHT,GADGHCOMP,RELVERIFY,STRGADGET Gadget2 StrBorder,NL,ITxtSaveAs,NL,StrInfo,STRID,NL CreateGad Gadget NL,11,149,BWIDTH,BHEIGHT,GADGHCOMP,RELVERIFY,BOOLGADGET Gadget2 BBorder,NL,ITxtCreate,NL,NL,CREATEID,NL StrInfo dc.l CharBuf,NL dc.w NL,60,NL,NL,NL,NL,NL,NL dc.l NL,NL,NL CharBuf dcb.b 60,0 EVEN ITxtAP IntuiText 1,0,1,-6,-9,TxtAP,ITxtAB ITxtGM IntuiText 1,0,1,-6,-9,TxtGM,NL ITxtAB IntuiText 1,0,1,2,-35,TxtAB,ITxtGB ITxtGB IntuiText 1,0,1,90,-35,TxtGB,NL ITxtSaveAs IntuiText 1,0,1,-65,0,TxtSaveAs,NL ITxtCreate IntuiText 1,0,1,34,2,TxtCreate1,NL ScrTitle dc.b 'PBar V1.0 by Preben Nielsen in 1990. This is Public Domain',0 WinTitle dc.b 'PBar V1.0',0 TxtAP dc.b "'Active' Pattern",0 TxtGM dc.b "'Ghost' Mask",0 TxtAB dc.b "'Active'",0 TxtGB dc.b "'Ghosted'",0 TxtSaveAs dc.b 'Save as',0 TxtCreate1 dc.b ' Save WITH Icon ',0 TxtCreate2 dc.b 'Save WITHOUT Icon',0 FontName dc.b 'topaz.font',0 EVEN TxtAttr1 dc.l FontName dc.w TOPAZ_EIGHTY dc.b FS_NORMAL,FPB_ROMFONT PatBoxes dc.w PStartx,PStarty ;posx,posy dc.w BoxSizex,BoxSizey ;width,height dc.w -2,-1 ;spacex,spacey dc.w 16,8 ;cols,rows dc.l Pattern+2 ;buffer dc.w 0,1 MaskBoxes dc.w MStartx,MStarty dc.w BoxSizex,BoxSizey dc.w -2,-1 dc.w 16,4 dc.l Mask+2 dc.w 1,0 ; This rest is for the icon MyDiskObject dc.w WB_DISKMAGIC,WB_DISKVERSION dc.l 0 dc.w 0,0,115,10 dc.w GADGIMAGE!GADGHCOMP,RELVERIFY!GADGIMMEDIATE,BOOLGADGET dc.l IconImage,0,0,0,0 dc.w 0 dc.l 0 dc.b WBTOOL,0 dc.l 0,0,100,40,0,0,0 IconImage dc.w 0,0 ; LeftEdge, TopEdge dc.w 115,10 ; Width, Height dc.w 2 ; Depth dc.l IconData ; ImageData dc.b 3,0 ; PlanePick, PlaneOnOff dc.l 0 ; Next Image IconData ; Plane 0 dc.w $f3ff dc.w $ffcf dc.w $ffff dc.w $ffe7 dc.w $ffff dc.w $e3ff dc.w $fff3 dc.w $e000 dc.w $f300 dc.w $00cf dc.w $ffff dc.w $ffe6 dc.w $0007 dc.w $e300 dc.w $03f3 dc.w $e000 dc.w $f33f dc.w $fcce dc.w $0000 dc.w $00e6 dc.w $7fe7 dc.w $e300 dc.w $0033 dc.w $e000 dc.w $f33f dc.w $fcce dc.w $0000 dc.w $00e6 dc.w $6000 dc.w $6303 dc.w $ff33 dc.w $e000 dc.w $f33c dc.w $3ccf dc.w $ffff dc.w $ffe6 dc.w $6000 dc.w $6303 dc.w $ff33 dc.w $e000 dc.w $f33c dc.w $3ccf dc.w $ffff dc.w $ffe6 dc.w $6000 dc.w $6303 dc.w $ff33 dc.w $e000 dc.w $f33f dc.w $fcce dc.w $0000 dc.w $00e6 dc.w $0000 dc.w $6303 dc.w $ff33 dc.w $e000 dc.w $f33f dc.w $fcce dc.w $0000 dc.w $00e7 dc.w $e000 dc.w $63f3 dc.w $ff33 dc.w $e000 dc.w $f300 dc.w $00cf dc.w $ffff dc.w $ffe7 dc.w $e000 dc.w $63f0 dc.w $0033 dc.w $e000 dc.w $f3ff dc.w $ffcf dc.w $ffff dc.w $ffe7 dc.w $ffff dc.w $e3ff dc.w $fff3 dc.w $e000 ; Plane 1 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $00ff dc.w $fc00 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $00f0 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $1fff dc.w $80f0 dc.w $0000 dc.w $0000 dc.w $0003 dc.w $c000 dc.w $0000 dc.w $0000 dc.w $1fff dc.w $80f0 dc.w $0000 dc.w $0000 dc.w $0003 dc.w $c000 dc.w $0000 dc.w $0000 dc.w $1fff dc.w $80f0 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $1fff dc.w $80f0 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $1fff dc.w $8000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $1fff dc.w $8000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 dc.w $0000 * This is to be written to disk as an executable file * The code contains no absolute references PBar dc.l $000003F3,$00000000,$00000001,$00000000 dc.l $00000000,$00000030,$000003E9,$00000030 dc.l $48E7FFFE,$2C780004,$93C94EAE,$FEDA2440 dc.l $4AAA00AC,$661641EA,$005C4EAE,$FE8041EA dc.l $005C4EAE,$FE8C23C0,$000000A2,$43FA0062 dc.l $4EAEFE68,$2A404A80,$673043ED,$031641FA dc.l $00667017,$12D851C8,$FFFC2C4D,$286D003C dc.l $200C6716,$266C0004,$200B670A,$20404EAE dc.l $FE382653,$60F22854,$60E62C78,$0004200D dc.l $67062240,$4EAEFE62,$203A0028,$670A4EAE dc.l $FF7C2240,$4EAEFE86,$4CDF7FFF,$70004E75 dc.l $696E7475,$6974696F,$6E2E6C69,$62726172 dc.l $79000000 dc.w $0000 PatCopy dc.l $00000000,$FFFFFFFF,$00000000,$FFFFFFFF MaskCopy dc.l $44441111,$44441111 dc.l $00000000,$03EC0000,$00010000,$0000000,$00280000 dc.w $0000,$0000,$03F2 PBarEnd SECTION IMAGEDATA,DATA_C ;Image-data has to be in CHIP-RAM Pattern dc.l $00000000,$FFFFFFFF,$00000000,$FFFFFFFF PCopy dc.w $0000 Mask dc.l $44441111,$44441111 MCopy dc.w $4444 ImageData dc.w %1111111111110000 dc.w %1100000000110000 dc.w %1100000000110000 dc.w %1100000000110000 dc.w %1100000000110000 dc.w %1111111111110000 END