*****************************************************************************
*                                                                           *
*   				Filled Line Intro                           *
*                                                                           *
*  Start Date : 1/3/91                                                      *
* Last Update : 1/3/91                                                      *
*   							   Code : Melt Down *
*                                                                           *
*****************************************************************************

; Include the macros

	Incdir	Df1:
	Include	Source/Macro

*****************************************************************************

; Dont forget to use chip ram

	Chip
	
*****************************************************************************

; Kill the operating system for good mesure

	Kill		
	
*****************************************************************************

; Load custom and set up copper list

	Lea	Custom,A5
	Move.l	#Copper,Cop1lch(a5)
	
*****************************************************************************

; Clear Some Memory

	Blitwait
	Move.l	#$70000,Bltdpth(a5)
	Move.l	#-1,Bltafwm(a5)
	Move.w	#0,Bltdmod(a5)
	Move.l	#$01000000,Bltcon0(a5)
	Move.w	#256*64+60,Bltsize(a5)

*****************************************************************************

; Main routine here

Mouse
	Move.l	$dff004,d2
	And.l	#$1ff00,d2	
	Cmp.l	#$100,d2
	Bne.s	Mouse

	Move.w	#$f0f,$dff180
	Eor.l	#$4000,Bit1
	Eor.l	#$4000,Bit2
	Eor.l	#$4000,ScreenPtr

	Bsr	Clear
	Bsr	UpDateAll
	Bsr	Conect
	Move.w	#$000,$dff180
	Tstmice	Mouse				; Pressed the mouse
	
*****************************************************************************

; Return operating system and go back to user

	Heal
	Clr.l	D0				; No error
	Rts
	
*****************************************************************************

Clear
	Blitwait				; Blitter Nasty But Why Do
	Move.l	#$01000000,Bltcon0(a5)		; Clear
	Move.w	#$0000,Bltdmod(a5)		; Skip No Bytes
	Move.l	ScreenPtr,A1
	Move.l	a1,Bltdpth(A5)			; Set Dest
	Move.l	#-1,Bltafwm(a5)			; Use All Bits
	Move.w	#100*64+20,Bltsize(a5)		; Fill Half Screen
	Movem.l	a0-a6/d0-d7,-(a7)		; Save The Regs
	Movem.l	RegFiller(pc),a1-a6/d0-d7	; Clear The Regs
	Move.l	ScreenPtr,A0
	Add.l	#8000,A0

; 4000/56 = 71.14 Rnd Up = 72
	Rept	72				; Rept it 58 times
	Movem.l	a1-a6/d0-d7,-(a0)		; Clear 56 Butes
	Endr					; End repeat
	Movem.l	(a7)+,a0-a6/d0-d7		; Restor Regs
	Rts
RegFiller
	Dcb.l	16,0
	Rts

*****************************************************************************

Conect
	Move.w	#40,$60(a5)			; Screen In Bytes
	Move.l	#-$8000,$72(a5)			; Set to line ??????
	Move.l	#-1,$44(a5)			; The Mask
	Move.l	ScreenPtr,A0
	Move.l	#40,D5
	Lea	XSin,A1	
	Lea	YSin,A2
	Lea	Form1+2,a3
	Lea	Form1Con,A4
	Move.w	(a4)+,d7
DoLines
	Move.w	(a4)+,d6			; Get Offset		
	Move.w	(a3,d6),d0			; Get X
	Move.w	2(a3,d6),d1			; Get Y
	Move.w	4(a3,d6),d2			; Get X1
	Move.w	6(a3,d6),d3			; Get Y1

	Move.w	(a1,d0),d0			; Get X Val
	Move.w	(a2,d1),d1			; Get Y Val
	Add.w	(a1,d2),d0			; Add X Val
	Add.w	(a2,d3),d1			; Add Y Val
	Movem.w	d0/d1,-(A7)
	Move.w	(a4)+,d6			
	Move.w	(a3,d6),d0			
	Move.w	2(a3,d6),d1			
	Move.w	4(a3,d6),d2			
	Move.w	6(a3,d6),d3			
	Move.w	(a1,d0),d0			
	Move.w	(a2,d1),d1			
	Add.w	(a1,d2),d0			
	Add.w	(a2,d3),d1			
	Movem.w	(a7)+,d2/d3
	Movem.l	a0/d5,-(a7)
	cmp.w	d1,d3
	bgt.s	line1
	exg	d0,d2
	exg	d1,d3
	beq.s	out
line1:	move.w	d1,d4
	muls	d5,d4
	move.w	d0,d5
	add.l	a0,d4
	asr.w	#3,d5
	add.w	d5,d4
	moveq	#0,d5
	sub.w	d1,d3
	sub.w	d0,d2
	bpl.s	line2
	moveq	#1,d5
	neg.w	d2
line2:	move.w	d3,d1
	add.w	d1,d1
	cmp.w	d2,d1
	dbhi	d3,line3
line3:	move.w	d3,d1
	sub.w	d2,d1
	bpl.s	line4
	exg	d2,d3
line4:	addx.w	d5,d5
	add.w	d2,d2
	move.w	d2,d1
	sub.w	d3,d2
	addx.w	d5,d5
	and.w	#15,d0
	ror.w	#4,d0
	or.w	#$a4a,d0
waitblt:btst	#6,2(a5)
	bne.s	waitblt
	move.w	d2,$52(a5)
	sub.w	d3,d2
	lsl.w	#6,d3
	addq.w	#2,d3
	move.w	d0,$40(a5)
	move.b	oct(PC,d5.w),$43(a5)
	move.l	d4,$48(a5)
	move.l	d4,$54(a5)
	movem.w	d1/d2,$62(a5)
	move.w	d3,$58(a5)
out:	
	Movem.l	(A7)+,a0/d5
	Dbf	D7,Dolines
	Blitwait
	Add.l	#10240-2,A0			; Plane Size -2
	Move.l	#$09f0000a,Bltcon0(a5)		; D=A Desending And Fill
	Move.l	#$ffffffff,bltafwm(a5)		; Use All Bits And Why Not
	Move.l	a0,bltapth(a5)			; Set Ketchup
	Move.l	a0,bltdpth(a5)			; Set THE IN PLACE
	Move.w	#0,Bltamod(a5)			; Dont Skip 
	Move.w	#0,Bltdmod(a5)			; To My Loop
	Move.w	#255*64+20,bltsize(a5)		; Do The Full Screen
	Rts
	
*****************************************************************************

oct:	dc.l	$3431353,$b4b1757   
ScreenPtr
	Dc.l	$70000
	
*****************************************************************************

UpDateAll
	Lea	Form1,A0
	Move.w	(A0)+,d7			; Number Of Points On Lines
	Move.l	#$01fe01fe,D0
	Move.w	#16,d2
Update
	Move.l	8(A0),d1
	Add.l	d1,(A0)
	Move.l	12(A0),d1
	Add.l	d1,4(A0)
	And.l	D0,(A0)
	And.l	D0,4(A0)
	Lea	(a0,d2),a0
	Dbf	D7,UpDate
	Rts

*****************************************************************************

; All copper list after here

Copper

	Spr_Off					; Switch sprites off
	Cmove	$2c71,Diwstrt
	Cmove	$2cc1,Diwstop
	Cmove	$0038,Ddfstrt
	Cmove	$00d0,Ddfstop
	Cmove	$0000,Bpl1mod			
	Cmove	-80,Bpl2mod
;	Cmove	$0000,Color00
	Cmove	$0fff,Color01
	Cmove	$0fff,Color02
	Cmove	$0000,Color03
Bit1
	Cmove	$0000,Bpl1ptl
	Cmove	$0007,Bpl1pth
Bit2
	Cmove	$2800,Bpl2ptl
	Cmove	$0007,Bpl2pth
	Cmove	$2200,Bplcon0
	Endcop

*****************************************************************************

Posa	Macro
	Dc.w	\1*2&$1fe,\2*2&$1fe,\3*2&$1fe,\4*2&$1fe,\5*2,\6*2,\7*2,\8*2
	Endm
Form1	
	Include	Filled-Lines/Forms/Form1
	
*****************************************************************************

Conect	Macro
	Dc.w	(\1*16),(\2*16)
	Endm
Form1Con
	Include	Filled-Lines/Forms/Form1a
	
*****************************************************************************

; X Sine Table

XSin
	Rept	2
	dc.w	159,159,159,159,159,158,158,158
	dc.w	157,157,157,156,156,155,154,154
	dc.w	153,152,151,151,150,149,148,147
	dc.w	146,144,143,142,141,140,138,137
	dc.w	136,134,133,131,130,128,127,125
	dc.w	124,122,120,119,117,115,113,112
	dc.w	110,108,106,104,103,101,99,97
	dc.w	95,93,91,89,87,85,83,81
	dc.w	80,78,76,74,72,70,68,66
	dc.w	64,62,60,58,56,55,53,51
	dc.w	49,47,46,44,42,40,39,37
	dc.w	35,34,32,31,29,28,26,25
	dc.w	23,22,21,19,18,17,16,15
	dc.w	13,12,11,10,9,8,8,7
	dc.w	6,5,5,4,3,3,2,2
	dc.w	2,1,1,1,0,0,0,0
	dc.w	0,0,0,0,0,1,1,1
	dc.w	2,2,2,3,3,4,5,5
	dc.w	6,7,8,8,9,10,11,12
	dc.w	13,15,16,17,18,19,21,22
	dc.w	23,25,26,28,29,31,32,34
	dc.w	35,37,39,40,42,44,46,47
	dc.w	49,51,53,55,56,58,60,62
	dc.w	64,66,68,70,72,74,76,78
	dc.w	80,81,83,85,87,89,91,93
	dc.w	95,97,99,101,103,104,106,108
	dc.w	110,112,113,115,117,119,120,122
	dc.w	124,125,127,128,130,131,133,134
	dc.w	136,137,138,140,141,142,143,144
	dc.w	146,147,148,149,150,151,151,152
	dc.w	153,154,154,155,156,156,157,157
	dc.w	157,158,158,158,159,159,159,159
	Endr
	
*****************************************************************************

; Y Sine Table

YSin
	Rept	2
	dc.w	99,99,99,99,99,99,98,98
	dc.w	98,98,98,97,97,97,96,96
	dc.w	95,95,94,94,93,93,92,91
	dc.w	91,90,89,89,88,87,86,85
	dc.w	85,84,83,82,81,80,79,78
	dc.w	77,76,75,74,73,72,71,70
	dc.w	68,67,66,65,64,63,62,60
	dc.w	59,58,57,56,54,53,52,51
	dc.w	50,48,47,46,45,43,42,41
	dc.w	40,39,37,36,35,34,33,32
	dc.w	31,29,28,27,26,25,24,23
	dc.w	22,21,20,19,18,17,16,15
	dc.w	14,14,13,12,11,10,10,9
	dc.w	8,8,7,6,6,5,5,4
	dc.w	4,3,3,2,2,2,1,1
	dc.w	1,1,1,0,0,0,0,0
	dc.w	0,0,0,0,0,0,1,1
	dc.w	1,1,1,2,2,2,3,3
	dc.w	4,4,5,5,6,6,7,8
	dc.w	8,9,10,10,11,12,13,14
	dc.w	14,15,16,17,18,19,20,21
	dc.w	22,23,24,25,26,27,28,29
	dc.w	31,32,33,34,35,36,37,39
	dc.w	40,41,42,43,45,46,47,48
	dc.w	50,51,52,53,54,56,57,58
	dc.w	59,60,62,63,64,65,66,67
	dc.w	68,70,71,72,73,74,75,76
	dc.w	77,78,79,80,81,82,83,84
	dc.w	85,85,86,87,88,89,89,90
	dc.w	91,91,92,93,93,94,94,95
	dc.w	95,96,96,97,97,97,98,98
	dc.w	98,98,98,99,99,99,99,99
	Endr
	
*****************************************************************************

