ùúùú  ÿ<_Oÿ<_Oÿ<_Oÿ<_Oÿ<_Oÿ<_Oÿ<_Oÿ<_O*****************************************************************
****  ClipLine (pseudo)object has been made by DURA/FUNZINe  ****
*****************************************************************
;Registers use:
;.goAhead	- D0-D5/A0/A1
;.fill		- D0-D4/A0-A2

;
ClipLine2:
.bitplanes:		EQU	0
.ScreenWidth:		EQU	[368+16]/8
.MaxXValue:		EQU	368+16-1
.MaxYValue:		EQU	288+16-1
.ScreenWidth2:		EQU	(.MaxXValue+1)/8
.doubleMod:		EQU	[[.ScreenWidth-2]*65536]![.ScreenWidth-2]
.doubleModNeg:		EQU	[[-2-.ScreenWidth]*65536]![[-2-.ScreenWidth]&$FFFF]

.return3:		LEA	.minX(PC),A0
			CLR.W	(A0)
.return2:		RTS
.goAhead:		CMP.W	D1,D3
			BGT.B	.noSwapPoints	;Y2>Y1
			BEQ.B	.return2	;Y2=Y1
			EXG	D1,D3
			EXG	D0,D2
.noSwapPoints:		TST.W	D3
			BLE.W	.return		;Y1<0 and Y2<=0
			CMP.W	#.MaxYValue,D1
			BGE.B	.return2	;Y1>=Ymax and Y2>Ymax
			CMP.W	D0,D2
			BGE.W	.backslash	;X2>=X1
.slash:			TST.W	D0		;/
			BLE.B	.return3	;X1<=0 and X2<0
			CMP.W	#.MaxXValue,D2
			BGE.W	.onTheRight	;X1>Xmax and X2>=Xmax
			CMP.W	#.MaxYValue,D3
			BLE.B	.sDownIsOK	;Y2<Ymax
			MOVE.W	D3,D4		;D4=Y2
			SUB.W	#.MaxYValue,D4	;D4=Y2-Ymax
			MOVE.W	D2,D5		;D5=X2
			SUB.W	D0,D5		;D5=X2-X1
			MULS	D5,D4		;D4=(Y2-Ymax)*(X2-X1)
			SUB.W	D1,D3		;D3=Y2-Y1
			DIVS	D3,D4		;D4=(Y2-Ymax)*(X2-X1)/(Y2-Y1)
			SUB.W	D4,D2		;X2=X2-(Y2-Ymax)*(X2-X1)/(Y2-Y1)
			MOVE.W	#.MaxYValue,D3	;Y2=Ymax
			CMP.W	#.MaxXValue,D2
			BGE.W	.onTheRight	;X1>Xmax and X2>=Xmax
.sDownIsOK:		;status: Y2<=Ymax
			TST.W	D2
			BGE.B	.sLeftIsOK
			MOVE.W	D3,D4		;D4=Y2
			SUB.W	D1,D4		;D4=Y2-Y1
			MULS	D2,D4		;D4=(Y2-Y1)*X2
			SUB.W	D0,D2		;D2=X2-X1
			DIVS	D2,D4		;D4=(Y2-Y1)*X2/(X2-X1)
			SUB.W	D4,D3		;Y2=Y2-(Y2-Y1)*X2/(X2-X1)
			BLE.S	.return3
			MOVEQ	#0,D2		;X2=0
.sLeftIsOK:		;status: Y2<=Ymax, X2>=0
			TST.W	D1
			BGE.B	.sUpIsOK	;Y1>=0
			MOVE.W	D0,D4		;D4=X1
			SUB.W	D2,D4		;D4=X1-X2
			MULS	D1,D4		;D4=(X1-X2)*Y1
			SUB.W	D3,D1		;D1=Y1-Y2
			DIVS	D1,D4		;D4=(X1-X2)*Y1/(Y1-Y2)
			MOVEQ	#0,D1		;Y1=0
			SUB.W	D4,D0		;X1=X1-(X1-X2)*Y1/(Y1-Y2)
.sUpIsOK:		;status: Y2<=Ymax, X2>=0, Y1>=0
			CMP.W	#.MaxXValue,D0
			BLE.W	.sRightIsOK
			MOVE.W	D1,D4		;D4=Y1
			SUB.W	D3,D4		;D4=Y1-Y2
			MOVE.W	D0,D5		;D5=X1
			SUB.W	#.MaxXValue,D5	;D5=X1-Xmax
			MULS	D5,D4		;D4=(Y1-Y2)*(X1-Xmax)
			MOVE.W	D1,D5		;D5=Y1
			SUB.W	D2,D0		;D0=X1-X2
			DIVS	D0,D4		;D4=(Y1-Y2)*(X1-Xmax)/(X1-X2)
			SUB.W	D4,D1		;Y1=Y1-(Y1-Y2)*(X1-Xmax)/(X1-X2)
		;draw line Xmax,D5(old Y1),Xmax,D1
			LEA	.minY(PC),A0
			CMP.W	(A0),D5
			BGE.B	.sNoNewMinY
			MOVE.W	D5,(A0)
.sNoNewMinY:		SUB.W	D1,D5
			BEQ.B	.sNoVerticalLine
			NEG.W	D5
			LSL.W	#6,D5
			ADDQ.W	#1,D5
			MOVE.W	D1,D0
			ADD.W	D0,D0
			LEA	.offsTable(PC),A1
			MOVE.L	.bitplane(PC),A0
			ADD.W	0(A1,D0.W),A0
			ADD.W	#[.ScreenWidth2-2],A0
			LEA	$40(A6),A1
			BSR	WaitBlit
	;B-mask(OFF) A-bpl(ON) D-bpl(ON) Func: B~A+~BA
			MOVE.L	#$093C0000,(A1)+	;BLTCONs
			MOVEQ	#-1,D0
			MOVE.L	D0,(A1)+		;BLTaWM
			ADDQ.W	#8,A1
			MOVE.L	A0,(A1)+		;BLTaPT
			MOVE.L	A0,(A1)+		;BLTdPT
			MOVE.L	#.doubleModNeg,$64(A6)	;BLTadMOD
			MOVE.W	#$0001,$72(A6)		;BLTbDAT
			MOVE.W	D5,(A1)+		;BLTSIZE
.sNoVerticalLine:	MOVE.W	#.MaxXValue,D0	;X1=Xmax
.sRightIsOK:		;status: X1>=0, Y1>=0, X2<=Xmax, Y2<=Ymax
			LEA	.minX(PC),A0
			CMP.W	(A0)+,D2
			BGE.B	.sNoNewMinX
			MOVE.W	D2,-2(A0)
.sNoNewMinX:		CMP.W	(A0)+,D0
			BLE.B	.sNoNewMaxX
			MOVE.W	D0,-2(A0)
.sNoNewMaxX:		MOVEQ	#%01011111,D5
			SUB.W	D0,D2			;D2=X2-X1
			NEG.W	D2
			BRA.W	.bDraw
.return4:		LEA	.minX(PC),A0
			CLR.W	(A0)
.return:		RTS
.backslash:		TST.W	D2		;\
			BLE.W	.return3	;X1<=0 and X2<=0
			CMP.W	#.MaxXValue,D0
			BGE.W	.onTheRight	;X1>=Xmax and X2>Xmax
			TST.W	D1
			BGE.B	.bUpIsOK	;Y1>=0
			MOVE.W	D0,D4		;D4=X1
			SUB.W	D2,D4		;D4=X1-X2
			MULS	D1,D4		;D4=Y1*(X1-X2)
			SUB.W	D3,D1		;D1=Y1-Y2
			DIVS	D1,D4		;D4=Y1*(X1-X2)/(Y1-Y2)
			MOVEQ	#0,D1		;Y1=0
			SUB.W	D4,D0		;X1=X1-Y1*(X1-X2)/(Y1-Y2)
			CMP.W	#.MaxXValue,D0
			BGE.W	.onRUpIsOK	;on the right
.bUpIsOK:		;status: Y1>=0
			TST.W	D0
			BGE.B	.bLeftIsOK	;X1>=0
			MOVE.W	D1,D4		;D4=Y1
			SUB.W	D3,D4		;D4=Y1-Y2
			MULS	D0,D4		;D4=X1*(Y1-Y2)
			SUB.W	D2,D0		;D0=X1-X2
			DIVS	D0,D4		;D4=X1*(Y1-Y2)/(X1-X2)
			MOVEQ	#0,D0		;X1=0
			SUB.W	D4,D1		;Y1=Y1-X1*(Y1-Y2)/(X1-X2)
			CMP.W	#.MaxYValue,D1
			BGE.B	.return4	;Y1>=Ymax
.bLeftIsOK:		;status: X1>=0, Ymax>Y1>=0
			CMP.W	#.MaxYValue,D3
			BLE.B	.bDownIsOK	;Y2<=Ymax
			MOVE.W	D2,D4		;D4=X2
			SUB.W	D0,D4		;D4=X2-X1
			MOVE.W	D3,D5		;D5=Y2
			SUB.W	#.MaxYValue,D5	;D5=Y2-Ymax
			MULS	D5,D4		;D4=(X2-X1)*(Y2-Ymax)
			SUB.W	D1,D3		;D3=Y2-Y1
			DIVS	D3,D4		;D4=(X2-X1)*(Y2-Ymax)/(Y2-Y1)
			SUB.W	D4,D2		;X2=X2-(X2-X1)*(Y2-Ymax)/(Y2-Y1)
			MOVE.W	#.MaxYValue,D3	;Y2=Ymax
.bDownIsOK:		;status: X1>=0, Y1>=0, Y2<=Ymax
			CMP.W	#.MaxXValue,D2
			BLE.B	.bRightIsOK	;X2<=Xmax
			MOVE.W	D3,D4		;D4=Y2
			SUB.W	D1,D4		;D4=Y2-Y1
			MOVE.W	D2,D5		;D5=X2
			SUB.W	#.MaxXValue,D5	;D5=X2-Xmax
			MULS	D5,D4		;D4=(Y2-Y1)*(X2-Xmax)
			MOVE.W	D3,D5		;D5=Y2
			SUB.W	D0,D2		;D2=X2-X1
			DIVS	D2,D4		;D4=(Y2-Y1)*(X2-Xmax)/(X2-X1)
			SUB.W	D4,D3		;Y2=Y2-(Y2-Y1)*(X2-Xmax)/(X2-X1)
		;draw line Xmax,D3,Xmax,D5(old Y2)
			LEA	.maxY(PC),A0
			CMP.W	(A0),D5
			BLE.B	.bNoNewMaxY
			MOVE.W	D5,(A0)
.bNoNewMaxY:		SUB.W	D3,D5
			BEQ.B	.bNoVerticalLine
			LSL.W	#6,D5
			ADDQ.W	#1,D5
			MOVE.W	D3,D2
			ADD.W	D2,D2
			LEA	.offsTable(PC),A1
			MOVE.L	.bitplane(PC),A0
			ADD.W	2(A1,D2.W),A0
			ADD.W	#[.ScreenWidth2-2],A0
			LEA	$40(A6),A1
			BSR	WaitBlit
	;B-mask(OFF) A-bpl(ON) D-bpl(ON) Func: B~A+~BA
			MOVE.L	#$093C0000,(A1)+	;BLTCONs
			MOVEQ	#-1,D2
			MOVE.L	D2,(A1)+		;BLTaWM
			ADDQ.W	#8,A1
			MOVE.L	A0,(A1)+		;BLTcPT
			MOVE.L	A0,(A1)+		;BLTdPT
			MOVE.L	#.doubleMod,$64(A6)	;BLTadMOD
			MOVE.W	#$0001,$72(A6)		;BLTbDAT
			MOVE.W	D5,(A1)+		;BLTSIZE
.bNoVerticalLine:	MOVE.W	#.MaxXValue,D2	;X2=Xmax
.bRightIsOK:		;status: X1>=0, Y1>=0, X2<=Xmax, Y2<=Ymax
			LEA	.minX(PC),A0
			CMP.W	(A0)+,D0
			BGE.B	.bNoNewMinX
			MOVE.W	D0,-2(A0)
.bNoNewMinX:		CMP.W	(A0)+,D2
			BLE.B	.bNoNewMaxX
			MOVE.W	D2,-2(A0)
.bNoNewMaxX:		MOVEQ	#%01010011,D5
			SUB.W	D0,D2			;D2=X2-X1
.bDraw:			CMP.W	(A0)+,D1
			BGE.B	.bDNoNewMinY
			MOVE.W	D1,-2(A0)
.bDNoNewMinY:		CMP.W	(A0),D3
			BLE.B	.bDNoNewMaxY
			MOVE.W	D3,(A0)
.bDNoNewMaxY:		MOVEQ	#%1111,D4
			AND.W	D0,D4
			LSR.W	#3,D0
			SUB.W	D1,D3			;D3=dy
			LEA		.offsTable(PC),A1
			MOVE.L	.bitplane(PC),A0
			ADD.W	D1,D1
			ADD.W	0(A1,D1.W),A0
			ADD.W	D0,A0			;A0 - pt to the line
			MOVE.W	D4,D0
			NOT.W	D0
			SWAP	D0
			ROR.W	#4,D4
			OR.W	#$B4A,D4		;D4=BLTCON0
;D4-BLTCON0,	D2-dx,	D3-dy,	A0-address
;dy must be smaller
.bDraw2:		CMP.W	D2,D3			;tst(dy-dx)
			BPL.B	.bDraw_2		;dy>dx
;(D2>D3) dy<dx
;D4-BLTCON0,	D2-dx,	D3-dy,	A0-address
			ADD.W	D3,D3			;D2=2*dy
			MOVE.W	D3,D0			;>D0=2*dy
;		ADD.W	D0,D0
			SUB.W	D2,D3			;D2=2*dy-dx
			BMI.B	.chgSignBit1
			AND.W	#%10111111,D5
.chgSignBit1:		MOVE.W	D3,D1			;>D1=2*dy-dx
;		ADD.W	D1,D1
			AND.W	#$57,D5			;>D5=BLTCON1
			SUB.W	D2,D3			;>D2=2*dy-dx-dx
;		ADD.W	D3,D3
			ADDQ.W	#1,D2			;D3=dx+1
			LSL.W	#6,D2
			ADDQ.W	#2,D2
			LEA	$60(A6),A1		;BLTCMOD
			BSR	WaitBlit
			MOVE.L	#$FFFF8000,$72(A6)	;BLTBDAT
			MOVE.W	#.ScreenWidth,(A1)+	;BLTCMOD
			MOVE.W	D0,(A1)+		;BLTBMOD
			MOVE.W	D3,(A1)+		;BLTAMOD
			MOVE.W	#.ScreenWidth,(A1)+	;BLTDMOD
			LEA	$40(A6),A1
			MOVE.W	D4,(A1)+		;BLTCON0
			MOVE.W	D5,(A1)+		;BLTCON1
			MOVEQ	#-1,D5
			MOVE.L	D5,(A1)+		;BLTAWM
			MOVE.L	A0,(A1)+		;BLTCPT
			ADDQ.W	#6,A1
			MOVE.W	D1,(A1)+		;BLTAPTL
			MOVE.L	A0,(A1)+		;BLTDPT
			SWAP	D0
			BCHG	D0,(A0)			;inverse the first point
			MOVE.W	D2,(A1)+
			RTS
.bDraw_2:
;dy>dx
;D4-BLTCON0,	D2-dy,	D3-dx,	A0-address
			ADD.W	D2,D2			;D3=2*dy
			MOVE.W	D2,D0			;>D0=2*dy
;		ADD.W	D0,D0
			SUB.W	D3,D2			;D3=2*dy-dx
			BMI.B	.chgSignBit2
			AND.W	#%10111111,D5
.chgSignBit2:		MOVE.W	D2,D1			;>D1=2*dy-dx
;		ADD.W	D1,D1
			AND.W	#$4B,D5			;>D5=BLTCON1
			SUB.W	D3,D2			;>D3=2*dy-dx-dx
;		ADD.W	D2,D2
			ADDQ.W	#1,D3			;D3=dx+1
			LSL.W	#6,D3
			ADDQ.W	#2,D3
			LEA	$60(A6),A1		;BLTCMOD
			BSR	WaitBlit
			MOVE.L	#$FFFF8000,$72(A6)	;BLTBDAT
			MOVE.W	#.ScreenWidth,(A1)+	;BLTCMOD
			MOVE.W	D0,(A1)+		;BLTBMOD
			MOVE.W	D2,(A1)+		;BLTAMOD
			MOVE.W	#.ScreenWidth,(A1)+	;BLTDMOD
			LEA	$40(A6),A1
			MOVE.W	D4,(A1)+		;BLTCON0
			MOVE.W	D5,(A1)+		;BLTCON1
			MOVEQ	#-1,D5
			MOVE.L	D5,(A1)+		;BLTAWM
			MOVE.L	A0,(A1)+		;BLTCPT
			ADDQ.W	#6,A1
			MOVE.W	D1,(A1)+		;BLTAPTL
			MOVE.L	A0,(A1)+		;BLTDPT
			SWAP	D0
			BCHG	D0,(A0)			;inverse the first point
			MOVE.W	D3,(A1)+
			RTS



********
********	P1 and P2 are on the right side of bitplane
********

.onTheRight:		TST.W	D1
			BGE.B	.onRUpIsOK
			MOVEQ	#0,D1
.onRUpIsOK:		CMP.W	#.MaxYValue,D3
			BLE.B	.onRDownIsOK
			MOVE.W	#.MaxYValue,D3
.onRDownIsOK:		;draw line Xmax,D1,Xmax,D3
			LEA	.maxX(PC),A0
			MOVE.W	#.MaxXValue,(A0)+
			CMP.W	(A0)+,D1
			BGE.B	.onRNoNewYmin
			MOVE.W	D1,-2(A0)
.onRNoNewYmin:		CMP.W	(A0),D3
			BLE.B	.onRNoNewYmax
			MOVE.W	D3,(A0)
.onRNoNewYmax:		SUB.W	D1,D3
			LSL.W	#6,D3
			ADDQ.W	#1,D3
			ADD.W	D1,D1
			LEA	.offsTable(PC),A1
			MOVE.L	.bitplane(PC),A0
			ADD.W	2(A1,D1.W),A0
			ADD.W	#[.ScreenWidth2-2],A0
			LEA	$40(A6),A1
			BSR	WaitBlit
	;B-mask(OFF) A-bpl(ON) D-bpl(ON) Func: B~A+~BA
			MOVE.L	#$093C0000,(A1)+	;BLTCONs
			MOVEQ	#-1,D1
			MOVE.L	D1,(A1)+		;BLTaWM
			ADDQ.W	#8,A1
			MOVE.L	A0,(A1)+		;BLTcPT
			MOVE.L	A0,(A1)+		;BLTdPT
			MOVE.L	#.doubleMod,$64(A6)	;BLTadMOD
			MOVE.W	#$0001,$72(A6)		;BLTbDAT
			MOVE.W	D3,(A1)+		;BLTSIZE
			RTS

********
********	Init the table that is neccessary for correct drawing
********	Chg: D0/D1/A0
********

.initTable:		LEA	.offsTable(PC),A0
			MOVEQ	#0,D0
			MOVE.W	#.MaxYValue,D1
.initTable_loop1:	MOVE.W	D0,(A0)+
			ADD.W	#.ScreenWidth,D0
			DBF	D1,.initTable_loop1
			RTS

********
********	Fill the shape
********
;>D5 - colour
.fill:			LEA	.minX(PC),A0
			MOVE.W	(A0)+,D2
			MOVE.W	(A0)+,D3
			CMP.W	D2,D3
			BLE.W	.fillret
			MOVEQ	#-16,D1
			AND.W	D2,D1		;D1=(minX and $FFF0)
			MOVEQ	#-16,D0
			AND.W	D3,D0		;D0=(maxX and $FFF0)
			MOVE.W	(A0)+,D3	;D3=minY
			MOVE.W	(A0)+,D4	;D4=maxY
			SUB.W	D4,D3		;D3=minY-maxY
			BGE.W	.fillret
			LSR.W	#3,D0
			LSR.W	#3,D1
			SUB.W	D0,D1		;-(Width-2) in bytes
			MOVEQ	#.ScreenWidth-2,D2
			ADD.W	D1,D2		;D2-modulo
			NEG.W	D1		;D1-Width-2 in bytes
			ADDQ.W	#2,D1		;D1=Width in bytes
			LSR.W	#1,D1		;D1-width in words
			NEG.W	D3		;height-1
			LSL.W	#6,D3
			OR.W	D3,D1		;D1-BLTSIZE
			ADD.W	D4,D4
			LEA	.offsTable(PC),A0
			ADD.W	0(A0,D4.W),D0	;D0-offset
	;D0-offset
	;D1-BLTSIZE
	;D2-modulo
	;D5-colour
			MOVEA.L	.bitplane(PC),A0
			ADDA.W	D0,A0
			LEA	$60(A6),A1	;BLTcMOD
			BSR	WaitBlit
			MOVE.W	D2,(A1)+	;BLTcMOD
			MOVE.W	D2,(A1)+	;BLTbMOD
			MOVE.W	D2,(A1)+	;BLTaMOD
			MOVE.W	D2,(A1)+	;BLTdMOD
			LEA	$40(A6),A1
			MOVE.L	#$09F0000A,(A1)+
			MOVE.L	#-1,(A1)+	;BLTaWM
			ADDQ.W	#8,A1
			MOVE.L	A0,(A1)+	;BLTaPT
			MOVE.L	A0,(A1)+	;BLTdPT
			MOVE.W	D1,(A1)+

		IF	.bitplanes>=1
;A(ON)-filledBpl, B(ON)-screen, D(ON)-screen
;Func:	bit=1	~AB+A	($FC)
;	bit=0	~AB	($0C)
			MOVE.L	#$0D0C0002,D2	;bit=0
			BTST	#0,D5
			BEQ.B	.bpl1Clear
			MOVE.L	#$0DFC0002,D2	;bit=1
.bpl1Clear:		MOVEA.L	.bitplane1(PC),A2
			ADDA.W	D0,A2
			LEA	$4C(A6),A1	;BLTbPT
			BSR	WaitBlit
			MOVE.L	D2,$40(A6)
			MOVE.L	A2,(A1)+	;BLTbPT
			MOVE.L	A0,(A1)+	;BLTaPT
			MOVE.L	A2,(A1)+	;BLTdPT
			MOVE.W	D1,(A1)+
		ENDC

		IF	.bitplanes>=2
;A(ON)-filledBpl, B(ON)-screen, D(ON)-screen
;Func:	bit=1	~AB+A	($FC)
;	bit=0	~AB	($0C)
			MOVE.W	#$0D0C,D2	;bit=0
			BTST	#1,D5
			BEQ.B	.bpl2Clear
			MOVE.W	#$0DFC,D2	;bit=1
.bpl2Clear:		MOVEA.L	.bitplane2(PC),A2
			ADDA.W	D0,A2
			LEA	$4C(A6),A1	;BLTbPT
			BSR	WaitBlit
			MOVE.W	D2,$40(A6)
			MOVE.L	A2,(A1)+	;BLTbPT
			MOVE.L	A0,(A1)+	;BLTaPT
			MOVE.L	A2,(A1)+	;BLTdPT
			MOVE.W	D1,(A1)+
		ENDC

		IF	.bitplanes>=3
;A(ON)-filledBpl, B(ON)-screen, D(ON)-screen
;Func:	bit=1	~AB+A	($FC)
;	bit=0	~AB	($0C)
			MOVE.W	#$0D0C,D2	;bit=0
			BTST	#2,D5
			BEQ.B	.bpl3Clear
			MOVE.W	#$0DFC,D2	;bit=1
.bpl3Clear:		MOVE.L	.bitplane3(PC),A2
			ADDA.W	D0,A2
			LEA	$4C(A6),A1	;BLTbPT
			BSR	WaitBlit
			MOVE.W	D2,$40(A6)
			MOVE.L	A2,(A1)+	;BLTbPT
			MOVE.L	A0,(A1)+	;BLTaPT
			MOVE.L	A2,(A1)+	;BLTdPT
			MOVE.W	D1,(A1)+
		ENDC

		IF	.bitplanes>=4
;A(ON)-filledBpl, B(ON)-screen, D(ON)-screen
;Func:	bit=1	~AB+A	($FC)
;	bit=0	~AB	($0C)
			MOVE.W	#$0D0C,D2	;bit=0
			BTST	#3,D5
			BEQ.B	.bpl4Clear
			MOVE.W	#$0DFC,D2	;bit=1
.bpl4Clear:		MOVE.L	.bitplane4(PC),A2
			ADDA.W	D0,A2
			LEA	$4C(A6),A1	;BLTbPT
			BSR	WaitBlit
			MOVE.W	D2,$40(A6)
			MOVE.L	A2,(A1)+	;BLTbPT
			MOVE.L	A0,(A1)+	;BLTaPT
			MOVE.L	A2,(A1)+	;BLTdPT
			MOVE.W	D1,(A1)+
		ENDC

		IF	.bitplanes>=5
;A(ON)-filledBpl, B(ON)-screen, D(ON)-screen
;Func:	bit=1	~AB+A	($FC)
;	bit=0	~AB	($0C)
			MOVE.W	#$0D0C,D2	;bit=0
			BTST	#4,D5
			BEQ.B	.bpl5Clear
			MOVE.W	#$0DFC,D2	;bit=1
.bpl5Clear:		MOVE.L	.bitplane5(PC),A2
			ADDA.W	D0,A2
			LEA	$4C(A6),A1	;BLTbPT
			BSR	WaitBlit
			MOVE.W	D2,$40(A6)
			MOVE.L	A2,(A1)+	;BLTbPT
			MOVE.L	A0,(A1)+	;BLTaPT
			MOVE.L	A2,(A1)+	;BLTdPT
			MOVE.W	D1,(A1)+
		ENDC

		IF	.bitplanes>=6
;A(ON)-filledBpl, B(ON)-screen, D(ON)-screen
;Func:	bit=1	~AB+A	($FC)
;	bit=0	~AB	($0C)
			MOVE.W	#$0D0C,D2	;bit=0
			BTST	#5,D5
			BEQ.B	.bpl6Clear
			MOVE.W	#$0DFC,D2	;bit=1
.bpl6Clear:		MOVE.L	.bitplane6(PC),A2
			ADDA.W	D0,A2
			LEA	$4C(A6),A1	;BLTbPT
			BSR	WaitBlit
			MOVE.W	D2,$40(A6)
			MOVE.L	A2,(A1)+	;BLTbPT
			MOVE.L	A0,(A1)+	;BLTaPT
			MOVE.L	A2,(A1)+	;BLTdPT
			MOVE.W	D1,(A1)+
		ENDC

		IF	.bitplanes>=7
;A(ON)-filledBpl, B(ON)-screen, D(ON)-screen
;Func:	bit=1	~AB+A	($FC)
;	bit=0	~AB	($0C)
			MOVE.W	#$0D0C,D2	;bit=0
			BTST	#6,D5
			BEQ.B	.bpl7Clear
			MOVE.W	#$0DFC,D2	;bit=1
.bpl7Clear:		MOVE.L	.bitplane7(PC),A2
			ADDA.W	D0,A2
			LEA	$4C(A6),A1	;BLTbPT
			BSR	WaitBlit
			MOVE.W	D2,$40(A6)
			MOVE.L	A2,(A1)+	;BLTbPT
			MOVE.L	A0,(A1)+	;BLTaPT
			MOVE.L	A2,(A1)+	;BLTdPT
			MOVE.W	D1,(A1)+
		ENDC

		IF	.bitplanes>=8
;A(ON)-filledBpl, B(ON)-screen, D(ON)-screen
;Func:	bit=1	~AB+A	($FC)
;	bit=0	~AB	($0C)
			MOVE.W	#$0D0C,D2	;bit=0
			BTST	#7,D5
			BEQ.B	.bpl8Clear
			MOVE.W	#$0DFC,D2	;bit=1
.bpl8Clear:		MOVE.L	.bitplane8(PC),A2
			ADDA.W	D0,A2
			LEA	$4C(A6),A1	;BLTbPT
			BSR	WaitBlit
			MOVE.W	D2,$40(A6)
			MOVE.L	A2,(A1)+	;BLTbPT
			MOVE.L	A0,(A1)+	;BLTaPT
			MOVE.L	A2,(A1)+	;BLTdPT
			MOVE.W	D1,(A1)+
		ENDC

;Clear fillbpl
		IF	.bitplanes>=1
;D(ON)-filledbpl
;Func:	bit=1	~AB+A	($FC)
;	bit=0	~AB	($0C)
			LEA	$54(A6),A1	;BLTdPT
			BSR	WaitBlit
			MOVE.L	#$01000002,$40(A6)
			MOVE.L	A0,(A1)+	;BLTdPT
			MOVE.W	D1,(A1)+
		ENDC

.fillret:		LEA	.minX(PC),A0
			MOVE.W	#.MaxXValue,(A0)+
			CLR.W	(A0)+
			MOVE.W	#.MaxYValue,(A0)+
			CLR.W	(A0)+
			RTS

.minX:			DC.W	.MaxXValue
.maxX:			DC.W	0
.minY:			DC.W	.MaxYValue
.maxY:			DC.W	0
.bitplane:		DC.L	$00000
	REM
.bitplane1:		DC.L	$00000
.bitplane2:		DC.L	$00000
.bitplane3:		DC.L	$00000
.bitplane4:		DC.L	$00000
.bitplane5:		DC.L	$00000
.bitplane6:		DC.L	$00000
.bitplane7:		DC.L	$00000
.bitplane8:		DC.L	$00000
	ENDR

.offsTable:		BLK.W	.MaxYValue+1,0

