*****************************************************************************
*							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	'   A NEW GROUP IS BORN     THE NAME IS....      '
	DC.B	'  XENTRIX '
	DC.B	'       WHICH WAS FORMED FROM TWO EX-MEMBERS OF CRYPTIC'
	DC.B	' TANGO AND SMURF.    OUR GLORY MEMBERS SO FAR ARE:    '
	DC.B	' TANGO:CODE-SWAPPER       SMURF:SWAPPER-COMPILER      '
	DC.B	' CARL:SWAPPER-COMPILER      FERRET:CODER-GFX-SFX      '
	DC.B	'   IF YOU WANT TO JOIN OUR CREW THEN SEND TO:         '
	DC.B	'TANGO, 368 HIGHFIELD ROAD, FARNWORTH, BOLTON. LANCASHIRE.'
	DC.B	'  BL4-OPG.   ENGLAND!    OR YOU CAN PHONE TANGO ON... '
	DC.B	'  0204-795267 (AFTER 5PM)       LOOK OUT FOR US AT THE'
	DC.B	' ANARCHY PARTY, UNTIL THEN KEEP COOL!!!           '
	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

