;	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

