*****************************************************************************
*							XENTRIX INTRO:1									*
*																			*
* CODED BY       : TANGO													*
* PROGRAM STARTED:11/2/91													*
* LAST EDITED    :11/2/91													*
*																			*
*****************************************************************************

	section ste,code_c
	incdir	df1:
	opt c-
	include gamemacros
	
	
	killsys

	move.l	#$70000,a0
	move.l	#10240,d2
cloop:
	clr.l	(a0)+
	dbf		d2,cloop

	move.l	#$60000,a0
	move.l	#10240,d2
dloop:
	clr.l	(a0)+
	dbf		d2,dloop

	jsr		cyb_init				; initialise music
	move.l	#newcop,$dff080
	lea		custom,a5
mouse:
	move.l	vposr(a5),d0			
	and.l	#$1ff00,d0
	cmp.l	#$00100,d0	
	bne.s	mouse
	bsr		doform
	bsr		clear
	bsr		scroller
	bsr		copy
	save_all
	jsr		cyb_music
	return_all
	btst	#6,$bfe001
	bne.s	mouse
	ressys
	clr.l	d0
	rts


*****************************************************************************
*							BLIT THE COPPER BARS							*
*****************************************************************************

blitbar:
	lea		coltab(pc),a1
	lea		dest+6(pc),a2				; point to colour 
	lea		bltapth(a5),a3
	lea		bltdpth(a5),a4
	lea		bltsize(a5),a0
	lea		bltcon0(a5),a6
	move.l	#-1,d6
	moveq	#0,d4
	moveq	#6,d5
	add.l	d1,a2						; d1 holds position of bar
	blitwait
	move.w	d4,bltamod(a5)
	move.w	d5,bltdmod(a5)				; 6  (3words to next colour)
	move.l	d6,bltafwm(a5)
	move.l	a1,(a3)						; source
	move.l	a2,(a4)						; dest
	move.l	#$09f00000,(a6)				; minterm D=A
	move.w	#32<<6!1,(a0)				; blitsize
	rts


*****************************************************************************
*					MOVE THE COPPER BARS FROM A SINE TABLE					*
*****************************************************************************

doform:
	move.l	bsinptr(pc),a2	; pointer to sine table
	move.l	tabptr(pc),a0	; pointer to table
	move.w	(a0)+,d7		; amount of bars
barlooper:
	move.w	(a0)+,d1		; position in sinetab
	add.w	d1,d1			; even
	and.w	#$fe,d1
	move.w	(a2,d1),d1		; got position
	asl.l	#3,d1			; times by 8 for next line down!
	move.w	(a0)+,d2
	add.w	d2,-4(a0)		; speed
	save_all
	bsr		blitbar
	return_all
	dbf		d7,barlooper
	rts
	

*****************************************************************************
*						  BLIT SHIFT SCROLL ROUTINE							*
*****************************************************************************

scroller:
	move.l	#-1,bltafwm(a5)
	tst.l	scrolled				;have we scrolled 16 pixels?
	bne		scrollon				;no
	move.l	#15,scrolled			;yes, reset
	sub.l	d6,d6
	lea		table(pc),a4
	move.l	scrptr(pc),a3
	move.b	(a3),d6
	cmp.b	#255,d6					;end of scroll text?
	bne.s	anotover				;no
	move.l	#scrolltext,scrptr
	sub.l	d6,d6
	rts
anotover:
	sub.b	#32,d6					;convert
	add.w	d6,d6
	move.w	(a4,d6),d6				;got letter
	add.l	#1,scrptr				;update
	blitwait
	move.l	#$09f00000,bltcon0(a5)	;minterm d=a
	move.l	#font,a0
	add.l	d6,a0
	move.l	a0,bltapth(a5)
	move.w	#38,bltamod(a5)
	move.w	#46,bltdmod(a5)			;screen is 2 words bigger
	move.l	#$70000,bltdpth(a5)
	move.w	#16<<6!1,bltsize(a5)
scrollon:	
	blitwait
	move.w	#0,bltamod(a5)
	move.w	#0,bltdmod(a5)
	move.l	#$70000,bltdpth(a5)		;coarse scroller
	move.l	#$70002,bltapth(a5)
	move.l	#$f9f00000,bltcon0(a5)
	move.w	#16<<6!22,bltsize(a5)
	sub.l	#1,scrolled
	rts

copy:
	lea		bltapth(a5),a1			;source
	lea		bltdpth(a5),a2			;dest
	lea		bltbpth(a5),a3			;dest
	lea		bltsize(a5),a4			;blitsize
	lea		bltcon0(a5),a6
	move.w	#$3fe,d1
	move.w	#22,d6
	move.w	#46,d2					;modulo
	move.w	#16<<6!1,d3				;bltsize
	move.l	#$0dfc0000,d7
	move.l	#$70000,d4
	move.l	screen_base,d5
	move.l	#-1,bltalwm(a5)
	move.w	d2,bltamod(a5)
	move.w	d2,bltbmod(a5)
	move.w	d2,bltdmod(a5)
	add.w	#12,sinptr+2
	and.l	d1,sinptr
	lea		sintab(pc),a0
	add.l	sinptr,a0
	lea		bltafwm(a5),a5
brloop:
	move.w	#$8000,d1				;mask
coploop:
	rept	16
	move.w	d1,(a5)
	add.w	(a0),d5
	move.l	d4,(a1)					;source
	move.l	d5,(a2)					;dest d
	move.l	d5,(a3)					;dest b
	sub.w	(a0)+,d5
	move.l	d7,(a6)
	move.w	d3,(a4)					;blitsize
	ror.w	d1
	endr
	addq.w	#2,d4					;next along
	addq.w	#2,d5					;next along
	dbf		d6,brloop
	lea		custom,a5
	rts


clear:
	eor.w	#$4000,a1l+2
	eor.w	#$4000,screen_base+2
	move.l	screen_base,a1					; dst
	blitwait
	move.l	#$01f00000,bltcon0(a5)
	move.l	#-1,bltafwm(A5)
	move.w	#0,bltdmod(a5)
	move.l	a1,bltdpth(A5)
	move.w	#117*64+24,bltsize(a5)
	Movem.l	a0-a6/d0-d7,-(a7)		
	Movem.l	RegFiller(pc),a1-a6/d0-d7
	move.l	screen_base,a0
	add.w	#10368,a0
	Rept	93				
	Movem.l	a1-a6/d0-d7,-(a0)
	Endr					
	Movem.l	(a7)+,a0-a6/d0-d7
	Rts
RegFiller
	Dcb.l	16,0

	
scrolled:
	dc.l	15
scrptr:
	dc.l	scrolltext
scrolltext:
	DC.B	'THIS IS THE STORY OF THE TIMELORDS   '
	DC.B    'ONCE UPON A TIME THE LAMETURDS WANTED TO SWAP WITH SEPULTURA '
	DC.B    'THIS WAS FAIR ENOUGH   NO PROBLEMS YET  '
	DC.B    'SO THE MAN FROM DELMONTE SENT THESE GUYS SOME DISKS '
	DC.B    'THESE WERE FRESH FROM ANARCHY 91 AND WERE NOT SHIT  '
	DC.B    'SO WE WAITED FOR OUR REPLY FROM THE LAMETURDS   '
	DC.B    'AND WE WAITED AND OUR PACKAGE NEVER ARRIVED    '
	DC.B    'THE TIMELORDS RIPPED US OFF    BUT WE CAN HANDLE IT  '
	DC.B    'A MESSAGE TO EVERYONE FROM MFD OF SEPULTURA UK   '
	DC.B    'DONT SEND TO CHRIS IN EXETER COS HE DOESNT REPLY  '
	DC.B    'IF THE TIMELORDS ARE READING THIS THEN DONT JUST SIT THERE  '
	DC.B    'YOU COULD SEND US THE DISKS YOU OWE US  '
	DC.B    'YOU COULD GIVE A REASON FOR NOT REPLYING '
	DC.B    'YOU COULD SEND US AN INTRO WITH AN EXPLAINATION  '
	DC.B    'OR CAN YOU NOT CODE  PROBABLY NOT '
	DC.B    'MEMBERS OF SEPULTURA TRAVEL THE COUNTRY FOLLOWING BWFC '
	DC.B    'IF WE ARE IN DEVON THEN WE MAY JUST PAY YOU A VISIT '
	DC.B    'IF YOU ARENT IN BED OR DOING HOMEWORK THEN WATCH OUT '
	DC.B    'BECAUSE SEPULTURA ARE GOING TO GET YOU '
	DC.B    'THIS INTRO WILL GO ON A SEPULTURA COMP AND WILL BE SPREAD '
	DC.B    'SO PERHAPS YOU WILL HAVE LEARNT YOUR LESSON '
	DC.B    'DONT FUCK PEOPLE ABOUT BECAUSE PEOPLE DONT LIKE IT '
	DC.B	255
	even


*****************************************************************************
*					NOISETRACKER PLAY ROUTINE TO BE INCLUDED				*
*****************************************************************************

play_routine:

	include	sfx/nt.s


*****************************************************************************
*								NEW COPPER LIST								*
*****************************************************************************

newcop:
	cmove	color01,$f5f
	cmove	bpl1mod,2	
	cmove	bpl2mod,2	
	cmove	bplcon0,$1200
	cmove	diwstrt,$2c81
	cmove	diwstop,$2cc1
	cmove	ddfstrt,$28
	cmove	ddfstop,$d8
	cmove	bpl1pth,$0007
a1l	cmove	bpl1ptl,$1000
a	set	80
dest:
	rept	170
	dc.b	a,$09,$ff,$fe
	dc.w	$180,$00			; CHANGE THIS COL!!!
a	set		a+1
	endr
	end_copper

	
*****************************************************************************
*								CHARACTER TABLE								*
*****************************************************************************

table:
	dc.w	0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38
	dc.w	(16*40),2+(16*40),4+(16*40),6+(16*40),8+(16*40),10+(16*40)
	dc.w	12+(16*40),14+(16*40),16+(16*40),18+(16*40),20+(16*40),22+(16*40)
	dc.w    24+(16*40),26+(16*40),28+(16*40),30+(16*40),32+(16*40),34+(16*40)
	dc.w    36+(16*40),38+(16*40)
	dc.w	(16*80),2+(16*80),4+(16*80),6+(16*80),8+(16*80),10+(16*80)
	dc.w	12+(16*80),14+(16*80),16+(16*80),18+(16*80),20+(16*80),22+(16*80)
	dc.w    24+(16*80),26+(16*80),28+(16*80),30+(16*80),32+(16*80),34+(16*80)
	dc.w    36+(16*80),38+(16*80)
	even

screen_base:
	dc.l	$71000
sinptr:
	dc.l	sintab
sintab:	
	rept	3
	dc.w	200*48,200*48,200*48,200*48,200*48,200*48,200*48,200*48
	dc.w	200*48,199*48,199*48,199*48,199*48,199*48,199*48,198*48
	dc.w	198*48,198*48,198*48,197*48,197*48,197*48,196*48,196*48
	dc.w	196*48,195*48,195*48,195*48,194*48,194*48,193*48,193*48
	dc.w	192*48,192*48,191*48,191*48,190*48,190*48,189*48,189*48
	dc.w	188*48,188*48,187*48,186*48,186*48,185*48,184*48,184*48
	dc.w	183*48,182*48,182*48,181*48,180*48,180*48,179*48,178*48
	dc.w	177*48,177*48,176*48,175*48,174*48,173*48,172*48,172*48
	dc.w	171*48,170*48,169*48,168*48,167*48,166*48,165*48,164*48
	dc.w	163*48,162*48,162*48,161*48,160*48,159*48,158*48,157*48
	dc.w	156*48,155*48,153*48,152*48,151*48,150*48,149*48,148*48
	dc.w	147*48,146*48,145*48,144*48,143*48,142*48,141*48,139*48
	dc.w	138*48,137*48,136*48,135*48,134*48,133*48,131*48,130*48
	dc.w	129*48,128*48,127*48,125*48,124*48,123*48,122*48,121*48
	dc.w	120*48,118*48,117*48,116*48,115*48,113*48,112*48,111*48
	dc.w	110*48,109*48,107*48,106*48,105*48,104*48,102*48,101*48
	dc.w	100*48,99*48,98*48,96*48,95*48,94*48,93*48,91*48
	dc.w	90*48,89*48,88*48,87*48,85*48,84*48,83*48,82*48
	dc.w	80*48,79*48,78*48,77*48,76*48,75*48,73*48,72*48
	dc.w	71*48,70*48,69*48,67*48,66*48,65*48,64*48,63*48
	dc.w	62*48,61*48,59*48,58*48,57*48,56*48,55*48,54*48
	dc.w	53*48,52*48,51*48,50*48,49*48,48*48,46*48,45*48
	dc.w	44*48,43*48,42*48,41*48,40*48,39*48,38*48,38*48
	dc.w	37*48,36*48,35*48,34*48,33*48,32*48,31*48,30*48
	dc.w	29*48,28*48,28*48,27*48,26*48,25*48,24*48,23*48
	dc.w	23*48,22*48,21*48,20*48,20*48,19*48,18*48,18*48
	dc.w	17*48,16*48,16*48,15*48,14*48,14*48,13*48,12*48
	dc.w	12*48,11*48,11*48,10*48,10*48,9*48,9*48,8*48
	dc.w	8*48,7*48,7*48,6*48,6*48,5*48,5*48,5*48
	dc.w	4*48,4*48,4*48,3*48,3*48,3*48,2*48,2*48
	dc.w	2*48,2*48,1*48,1*48,1*48,1*48,1*48,1*48
	dc.w	0*48,0*48,0*48,0*48,0*48,0*48,0*48,0*48
	dc.w	0*48,0*48,0*48,0*48,0*48,0*48,0*48,0*48
	dc.w	0*48,1*48,1*48,1*48,1*48,1*48,1*48,2*48
	dc.w	2*48,2*48,2*48,3*48,3*48,3*48,4*48,4*48
	dc.w	4*48,5*48,5*48,5*48,6*48,6*48,7*48,7*48
	dc.w	8*48,8*48,9*48,9*48,10*48,10*48,11*48,11*48
	dc.w	12*48,12*48,13*48,14*48,14*48,15*48,16*48,16*48
	dc.w	17*48,18*48,18*48,19*48,20*48,20*48,21*48,22*48
	dc.w	23*48,23*48,24*48,25*48,26*48,27*48,28*48,28*48
	dc.w	29*48,30*48,31*48,32*48,33*48,34*48,35*48,36*48
	dc.w	37*48,38*48,38*48,39*48,40*48,41*48,42*48,43*48
	dc.w	44*48,45*48,47*48,48*48,49*48,50*48,51*48,52*48
	dc.w	53*48,54*48,55*48,56*48,57*48,58*48,59*48,61*48
	dc.w	62*48,63*48,64*48,65*48,66*48,67*48,69*48,70*48
	dc.w	71*48,72*48,73*48,75*48,76*48,77*48,78*48,79*48
	dc.w	80*48,82*48,83*48,84*48,85*48,87*48,88*48,89*48
	dc.w	90*48,91*48,93*48,94*48,95*48,96*48,98*48,99*48
	dc.w	100*48,101*48,102*48,104*48,105*48,106*48,107*48,109*48
	dc.w	110*48,111*48,112*48,113*48,115*48,116*48,117*48,118*48
	dc.w	120*48,121*48,122*48,123*48,124*48,125*48,127*48,128*48
	dc.w	129*48,130*48,131*48,133*48,134*48,135*48,136*48,137*48
	dc.w	138*48,139*48,141*48,142*48,143*48,144*48,145*48,146*48
	dc.w	147*48,148*48,149*48,150*48,151*48,152*48,154*48,155*48
	dc.w	156*48,157*48,158*48,159*48,160*48,161*48,162*48,162*48
	dc.w	163*48,164*48,165*48,166*48,167*48,168*48,169*48,170*48
	dc.w	171*48,172*48,172*48,173*48,174*48,175*48,176*48,177*48
	dc.w	177*48,178*48,179*48,180*48,180*48,181*48,182*48,182*48
	dc.w	183*48,184*48,184*48,185*48,186*48,186*48,187*48,188*48
	dc.w	188*48,189*48,189*48,190*48,190*48,191*48,191*48,192*48
	dc.w	192*48,193*48,193*48,194*48,194*48,195*48,195*48,195*48
	dc.w	196*48,196*48,196*48,197*48,197*48,197*48,198*48,198*48
	dc.w	198*48,198*48,199*48,199*48,199*48,199*48,199*48,199*48
	dc.w	200*48,200*48,200*48,200*48,200*48,200*48,200*48,200*48
	endr


*****************************************************************************
*		   COLOURS FOR BAR (NOTE BAR IS 34 LINES, HENCE 34 COLOURS!)		*
*****************************************************************************

coltab:
	dc.w	$000,$000,$100,$200,$300,$400,$500,$600,$700
	dc.w	$800,$900,$a00,$b00,$c00,$d00,$e00,$f00
	dc.w	$e00,$d00,$c00,$b00,$a00,$900,$800,$700,$600
	dc.w	$500,$400,$300,$200,$100,$000

	
*****************************************************************************
*							 BAR FORMATIONS!								*
*****************************************************************************

tabptr:
	dc.l	tab
tab:
	dc.w	10-1				; no of bars to blit
	dc.w	10,1				; offset to sine tab and speed
	dc.w	20,1				; offset to sine tab and speed
	dc.w	30,1
	dc.w	40,1
	dc.w	50,1
	dc.w	60,1
	dc.w	70,1
	dc.w	80,1
	dc.w	90,1
	dc.w	100,1
 

*****************************************************************************
*		               THE MEGA SINE TABLE FOR THE BARS						*
*****************************************************************************

bsinptr:	
		dc.l	bsintab
bsintab:
	dc.w	120,120,120,119,119,118,117,116
	dc.w	115,114,113,111,110,108,106,104
	dc.w	102,100,98,96,93,91,88,86
	dc.w	83,80,77,75,72,69,66,63
	dc.w	60,57,54,51,48,45,43,40
	dc.w	37,34,32,29,27,24,22,20
	dc.w	18,16,14,12,10,9,7,6
	dc.w	5,4,3,2,1,1,0,0
	dc.w	0,0,0,1,1,2,3,4
	dc.w	5,6,7,9,10,12,14,16
	dc.w	18,20,22,24,27,29,32,34
	dc.w	37,40,43,45,48,51,54,57
	dc.w	60,63,66,69,72,75,77,80
	dc.w	83,86,88,91,93,96,98,100
	dc.w	102,104,106,108,110,111,113,114
	dc.w	115,116,117,118,119,119,120,120
	even
	

*****************************************************************************
*									BINARIES								*
*****************************************************************************

font:
	incbin	gfx/font.bin
	even
cyb_data:
	incbin	"sfx/mod.task iii"
	even

