****************** CLIPPING LINEE *********************

	;	DA D2-D3  A  D6-D7

CLIPPING
	MOVEM.L	D0-D7/A0-A6,-(A7)

	MOVE.W	#0,I_M_OUT

	MOVE.W	D2,D0
	MOVE.W	D3,D1
	BSR	CALCOLABITS
	MOVE.B	D4,CBITS1
	MOVE.W	D6,D0
	MOVE.W	D7,D1
	BSR	CALCOLABITS
	MOVE.B	D4,CBITS2
	MOVE.B	CBITS1,D5
	OR.B	D4,D5
	TST.B	D5
	BEQ.W	NOCLIPPING
	MOVE.B	CBITS1,D4
	MOVE.B	CBITS2,D5
	AND.B	D4,D5
	TST.B	D5
	BEQ.S	GO_AND_CLIP
	MOVE.W	#1,I_M_OUT
	BRA.W	NOCLIPPING
GO_AND_CLIP

	BTST	#0,CBITS1
	BEQ.S	NO_XMIN_CLIP_1
	BSR	XMIN_CLIP
	MOVE.W	XMIN,D2
	MOVE.W	D0,D3
NO_XMIN_CLIP_1
;	BTST	#0,CBITS2
;	BEQ.S	NO_XMIN_CLIP_2
;	BSR	XMIN_CLIP
;	MOVE.W	XMIN,D6
;	MOVE.W	D0,D7
;NO_XMIN_CLIP_2

;	BTST	#1,CBITS1
;	BEQ.S	NO_XMAX_CLIP_1
;	BSR	XMAX_CLIP
;	MOVE.W	XMAX,D2
;	MOVE.W	D0,D3
;NO_XMAX_CLIP_1
	BTST	#1,CBITS2
	BEQ.S	NO_XMAX_CLIP_2
	BSR	XMAX_CLIP
	MOVE.W	XMAX,D6
	MOVE.W	D0,D7
NO_XMAX_CLIP_2

	BTST	#2,CBITS1
	BEQ.S	NO_YMIN_CLIP_1
	BSR	YMIN_CLIP
	MOVE.W	D0,D2
	MOVE.W	YMIN,D3
NO_YMIN_CLIP_1
;	BTST	#2,CBITS2
;	BEQ.S	NO_YMIN_CLIP_2
;	BSR	YMIN_CLIP
;	MOVE.W	D0,D6
;	MOVE.W	YMIN,D7
;NO_YMIN_CLIP_2

;	BTST	#3,CBITS1
;	BEQ.S	NO_YMAX_CLIP_1
;	BSR	YMAX_CLIP
;	MOVE.W	D0,D2
;	MOVE.W	YMAX,D3
;NO_YMAX_CLIP_1
	BTST	#3,CBITS2
	BEQ.S	NO_YMAX_CLIP_2
	BSR	YMAX_CLIP
	MOVE.W	D0,D6
	MOVE.W	YMAX,D7
NO_YMAX_CLIP_2


;	LEA	COLS,A0
;	MOVE.W	#$0FFF,2(A0)

NOCLIPPING:
	MOVEM.L	(A7)+,D0-D7/A0-A6
	RTS	


XMIN_CLIP
	MOVE.W	D7,D0
	SUB.W	D3,D0	; Y2-Y1
	MOVE.W	D6,D1
	SUB.W	D2,D1	; X2-X1
	DIVS.W	D1,D0	; (Y2-Y1/X2-X1)
	MOVE.W	XMIN,D1
	SUB.W	D6,D1
	MULS.W	D1,D0	; (Y2-Y1/X2-X1) * (X-X2)
	ADD.W	D7,D0	; (Y2-Y1/X2-X1) * (X-X2) + Y2
	RTS

XMAX_CLIP
	MOVE.W	D7,D0
	SUB.W	D3,D0	; Y2-Y1
	MOVE.W	D6,D1
	SUB.W	D2,D1	; X2-X1
	DIVS.W	D1,D0	; (Y2-Y1/X2-X1)
	MOVE.W	XMAX,D1
	SUB.W	D6,D1
	MULS.W	D1,D0	; (Y2-Y1/X2-X1) * (X-X2)
	ADD.W	D7,D0	; (Y2-Y1/X2-X1) * (X-X2) + Y2
	RTS
	
YMIN_CLIP
	MOVE.W	D7,D0
	SUB.W	D3,D0	; Y2-Y1
	MOVE.W	D6,D1
	SUB.W	D2,D1	; X2-X1
	DIVS.W	D0,D1	; (X2-X1/Y2-Y1)
	MOVE.W	YMIN,D0
	SUB.W	D7,D0
	MULS.W	D1,D0	; (X2-X1/Y2-Y1) * (Y-Y2)
	ADD.W	D6,D0	; (X2-X1/Y2-Y1) * (Y-Y2) + X2
	RTS

YMAX_CLIP
	MOVE.W	D7,D0
	SUB.W	D3,D0	; Y2-Y1
	MOVE.W	D6,D1
	SUB.W	D2,D1	; X2-X1
	DIVS.W	D0,D1	; (X2-X1/Y2-Y1)
	MOVE.W	YMAX,D0
	SUB.W	D7,D0
	MULS.W	D1,D0	; (X2-X1/Y2-Y1) * (Y-Y2)
	ADD.W	D6,D0	; (X2-X1/Y2-Y1) * (Y-Y2) + X2
	RTS

CALCOLABITS
	MOVEQ	#0,D4
	MOVE.W	D1,D5
	SUB.W	YMAX,D5
	TST.W	D5
	BLT.S	NOMAG_YMAX
	OR.B	#$08,D4
NOMAG_YMAX
	MOVE.W	YMIN,D5
	SUB.W	D1,D5
	TST.W	D5
	BLT.S	NOMIN_YMIN
	OR.B	#$04,D4
NOMIN_YMIN
	MOVE.W	D0,D5
 	SUB.W	XMAX,D5
	TST.W	D5
	BLT.S	NOMAG_XMAX
	OR.B	#$02,D4
NOMAG_XMAX
	MOVE.W	XMIN,D5
	SUB.W	D0,D5
	TST.W	D5
	BLT.S	NOMIN_XMIN
	OR.B	#$01,D4
NOMIN_XMIN
	RTS

XMAX	DC.W	320
YMAX	DC.W	256
XMIN	DC.W	1
YMIN	DC.W	1
I_M_OUT	DC.W	0

CBITS1	DC.B	0
CBITS2	DC.B	0
