;--------------------------------------------------------------
;-----            ANOTHER GROOVY PROJECT BY:              -----
;--------------------------------------------------------------
;-----     BANDOG OF THE MEGA-MIGHTY BEASTIE BOYS !!!     -----
;--------------------------------------------------------------
;-----               CONTACT ME UNDER:                    -----
;--------------------------------------------------------------
;-----        PLK 040612 C,4370 MARL /W.GERMANY           -----
;--------------------------------------------------------------
;-----   [+49] (0)2365 47545   (LEGAL MATTERS ONLY !!)    -----
;--------------------------------------------------------------
JMP $30000
ORG $30000
LOAD$30000
;--------------------------------------------------------------
>EXTERN "df1:LOGO!",$40000
>EXTERN "df1:INTROFONT.BANDOG",$35000
>EXTERN "df1:MOD.4-MAT",$36000		;Max. $a000 (#40960 Bytes)
;--------------------------------------------------------------
OPENLIBRARY     =-408
CLOSELIBRARY    =-414
EXECBASE        =4
FONT            =$35000
MT_DATA         =$36000
;--------------------------------------------------------------
Start:
	movem.l	d0-d7/a0-a6,-(a7)
	move.l 	ExecBase,a6 
	lea 	gfxname,a1   
	jsr 	OpenLibrary(a6) 
	move.l 	d0,gfxbase 
;--------------------------------------------------------------------
FillPLANES:
	lea	$50000,a0
	lea	$60000,a1
CLEAR:	clr.b	(a0)+
	clr.b	(a1)+
	cmp.l	#$6ffff,a1
	bne.S	CLEAR
	move.l	#0,$7f000	;Clear as dummy for unused sprites
;--------------------------------------------------------------------
	move.b	#2,$bfe001
	clr.w	scspeed
	move.w	#$f9f0,speedlogic
	move.l	#scrollmsg,textptr
	clr.w	textctr
;--------------------------------------------------------------------
FillCopper:
	lea	Copper,a0
	lea	Colortable,a1
	move.l	#30,d0
	move.l	#$7309fffe,d1
Loop:	
	move.l	d1,(a0)+
	move.w	#$0182,(a0)+
	move.w	(a1),(a0)+
	add.l	#$01000000,d1
	move.l	d1,(a0)+
	move.w	#$0182,(a0)+
	move.w	(a1)+,(a0)+
	add.l	#$01000000,d1
	dbf	d0,Loop
;--------------------------------------------------------------------
	bsr.L	MT_INIT
;                            *** INIT STARS-SPRITES IN COPPERLIST ***
	lea	s0,a0
	move.l	#stars,d0
	move.w	d0,6(a0)
	swap	d0
	move.w	d0,2(a0)
;--------------------------------------------------------------------
	move.w #$00a0,$dff096 
	move.l #newcopper,$dff080 
	move.w #$80e0,$dff096 
;--------------------------------------------------------------------
	move.l	$6c,oldirq	
	move.l	#newirq,$6c	
;--------------------------------------------------------------------
wait:			
	btst	#6,$bfe001	
	bne.s	wait		
;--------------------------------------------------------------------
	move.l	oldirq,$6c	
	move.b	#0,$bfe001
	move.l	execbase,a6	
	move.l	gfxbase,a1	
	jsr	closelibrary(a6)
;--------------------------------------------------------------------
	move.l	gfxbase,a0	
	move.w	#$0080,$dff096
	move.l	38(a0),$dff080
	move.w	#$80a0,$dff096	
;--------------------------------------------------------------
	bsr.L	MT_END
;--------------------------------------------------------------
	movem.l	(a7)+,d0-d7/a0-a6
	rts				
;--------------------------------------------------------------
newirq:			;New Interrupt				
	movem.l	d0-d7/a0-a6,-(sp)
	clr.l	d0
	move	$dff01e,d0
	btst	#5,d0
	beq.S	noVB
	move	#0020,$dff09c
;---------------------------------------------------------------
	bsr.L	SINUSSCROLLER
	bsr.S	SCROLLJUMP
	bsr.L	DO_LOGO_TRICK
	bsr.S	FILLSPLIT
	bsr.L	MOVESTARS
	bsr.L	MT_MUSIC
;---------------------------------------------------------------
;	move	#$f,$dff180
irqleave:
	move	#$0020,$dff09c
	movem.l	(sp)+,d0-d7/a0-a6
	rte
noVB:
	movem.l	(sp)+,d0-d7/a0-a6
	dc.w	$4ef9
oldirq:
	dc.l	0		; continue Sytsem-Interrupt
even
;--------------------------------------------------------------
ScrollJump:
	moveq	#0,d0
	move.l	Jumpptr,a0
	move.w	(a0),d0
	mulu	#44,d0
	add.w	d0,lo1
	add.l	#2,jumpptr
	cmp.l	#jumptableend,jumpptr
	bne.S	OK
	move.l	#Jumptable,jumpptr
OK:	rts
;---------------------------------------------------------------------
FillSplit:
	move.l	#47,d0
	lea	split1+2,a0
	move.l	Colortableptr,a1
	moveq	#0,d1
Dick:	
	move.w	(a1)+,d1
	move.w	d1,(a0)	
	addq.l	#4,a0
	dbf	d0,Dick

	addq.l	#2,Colortableptr
	cmp.l	#Colortableend,colortableptr
	bne	noway
	move.l	#Colortable,Colortableptr
noway:	
	move.l	#47,d0
	lea	split2+2,a0
	move.l	Colortableptr2,a1
	moveq	#0,d1
Dick2:	
	move.w	(a1)+,d1
	move.w	d1,(a0)	
	addq.l	#4,a0
	dbf	d0,Dick2

	subq.l	#2,Colortableptr2
	cmp.l	#colortable,Colortableptr2
	bne	Norway
	move.l	#Colortableend,Colortableptr2
Norway:
	rts
;--------------------------------------------------------------------
STARSHEIGHT=16
STARSBEGIN =0
;--------------------------------------------------------------------
MOVESTARS:
	lea	stars+1+[STARSBEGIN*8],a0
	move.l	#STARSHEIGHT,d0
stars1:
	add.b	#$01,(a0)
	add.l	#24,a0
	dbf	d0,stars1

	lea	stars+9+[STARSBEGIN*8],a0
	move.l	#STARSHEIGHT,d0
stars2:
	add.b	#$02,(a0)
	add.l	#24,a0
	dbf	d0,stars2

	lea	stars+17+[STARSBEGIN*8],a0
	move.l	#STARSHEIGHT,d0
stars3:
	add.b	#$03,(a0)
	add.l	#24,a0
	dbf	d0,stars3
	rts
;---------------------------------------------------------------------
DO_LOGO_TRICK:
	cmp.b	#2,delay
	bne	CLICK_OF_FEAR2

	move.b	#0,delay
	move.l	LOGOTABLEPTR,a0
	move.l	LOGOTABLEPTR2,a1
	moveq	#0,d0
	moveq	#0,d1
	move.w	(a0),d0
	move.w	(a1),d1
	move.w	d0,LOGOTRICK+6
	move.w	d1,LOGOTRICK+2
	move.w	d0,LOGOTRICK2+6
	move.w	d1,LOGOTRICK2+2
	addq.l	#2,LOGOTABLEPTR
	cmp.l	#FEAR,LOGOTABLEPTR
	bne.S	CLICK_OF_FEAR
	move.l	#LOGOTABLE,LOGOTABLEPTR
CLICK_OF_FEAR:
	addq.l	#2,LOGOTABLEPTR2
	cmp.l	#FEAR,LOGOTABLEPTR2
	bne.S	CLICK_OF_FEAR2
	move.l	#LOGOTABLE,LOGOTABLEPTR2
CLICK_OF_FEAR2:
	addq.b	#1,delay
	rts
;---------------------------------------------------------------------
;---------------------------------------------------------------------
SINUSSCROLLER:
;-------------
CopySINUSTABLE:
	move.l	#sinustab,a0
	move.l	#sinustab+4,a1
	move.l	(a0),d0
copysinustab:
	move.l	(a1)+,(a0)+
	cmp.l	#$ffff,(a1)
	bne.S	copysinustab
	move.l	d0,(a0)
	move.l	#sinusend,sinus

	move.l	#$50000+[80*44],$dff054		;BLTDPTH
	move.w	#%0000000100000000,$dff040	;BLTCON0
	move.w	#0,$dff066			;BLTDMOD
	move.w	#64*46+22,$dff058		;BLTSIZE

	bsr.L	WAIT_BLITTER

	move.l	#$6002c,a0			;ScreenPosition (memory)
	move.l	#$50000+[80*44],a1		;Source (invisible scrl)
	move.l	#21,d0				;Words to blit
	move.w	#%0000111111011100,$dff040	;BLTCON0
	move.w	#%1111111111111111,$dff044	;BLTAFWM
	move.l	#$2a002a,$dff064		;BLTAMOD
	move.w	#$0,$dff060			;BLTCMOD
	move.w	#42,$dff062			;BLTBMOD
copysinus:
	bsr.L	copysinus2			;OUTMASKING
	move.l	#mask1,$dff048
	bsr.L	copypiece
	bsr.L	copysinus2
	move.l	#mask2,$dff048
	bsr.L	copypiece
	bsr.L	copysinus2
	move.l	#mask3,$dff048
	bsr.L	copypiece
	bsr.L	copysinus2
	move.l	#mask4,$dff048
	bsr.L	copypiece
	addq	#2,a1
	addq	#2,a0
	dbf	d0,copysinus


	move.l	noscroll,d0
	subq	#1,d0
	bmi.S	scroll_it
	move.l	d0,noscroll
	bra.S	contvbl

scroll_it:				;NON-Visible Area at $60000
	move.l	#0,noscroll		
	lea	$6002c+40,a3		;Blit new Char there
	bsr.S	print
	move.l	#$60002,$dff050		;Scroll Area
	move.l	#$60000,$dff054
	move.l	#0,$dff042
	move.l	#0,$dff064
	move.l	#$ffffffff,$dff044
	move.w	speedlogic,$dff040
	move.w	#16*64+22,$dff058
	bsr.S	WAIT_BLITTER
contvbl:
	rts
WAIT_BLITTER:
	btst	#14,$dff002
	bne.S	WAIT_BLITTER
	rts
print:
	tst.w	textctr
	bne.L	no
	move.l	textptr,a0
	moveq	#0,d0
	move.b	(a0)+,d0
	cmp.l	#textend,textptr
	bne.S	noend
	move.l	#scrollmsg,a0
	move.b	(a0)+,d0
noend:
	move.l	a0,textptr		;0 -> Stop Scroller ??
	cmp.b	#0,d0
	bne.S	notstop
	move.l	#150,noscroll	;length of stop
	move.b	(a0)+,d0
	bra.L	endscroll	
notstop:
	cmp.b	#1,d0			;1 -> Speed 1 Scroller ??
	bne.S	nots1
	move.w	#16,scspeed
	move.w	#$f9f0,speedlogic
	move.b	(a0)+,d0
	bra.S	contscroll
nots1:
	cmp.b	#2,d0			;2 -> Speed 2 Scroller ??
	bne.S	nots2
	move.w	#8,scspeed
	move.w	#$e9f0,speedlogic
	move.b	(a0)+,d0
	bra.S	contscroll
nots2:					;3 -> Speed 3 Scroller ??
	cmp.b	#3,d0
	bne.S	nots3
	move.w	#4,scspeed
	move.w	#$c9f0,speedlogic
	move.b	(a0)+,d0
	bra.S	contscroll
nots3:					;4 -> Speed 4 Scroller ??
	cmp.b	#4,d0
	bne.S	nots4
	move.w	#2,scspeed
	move.w	#$89f0,speedlogic
	move.b	(a0)+,d0
	bra.S	contscroll
nots4:
	cmp.b	#5,d0			;5 -> Speed 5 Scroller ??
	bne.S	contscroll
	move.w	#1,scspeed
	move.w	#$19f0,speedlogic
	move.b	(a0)+,d0
contscroll:
	move.l	a0,textptr
	sub.b	#32,d0
	lsl.w	#2,d0
	lea	fontadresses,a0
	move.l	0(a0,d0.w),a0
	move.l	a0,$dff050
	move.l	a3,$dff054
	move.l	#$ffffffff,$dff040
	move.l	#$0026002a,$dff064
	move.l	#$09f00000,$dff040
	move.w	#16*64+1,$dff058
	bsr.L	WAIT_BLITTER
	move.w	scspeed,textctr
no:
	subq.w	#1,textctr
endscroll:
	rts
copypiece:
				;MASK in $DFF048
	move.l	a2,$dff04c	;BLTBPTH (SOURCEADR.+SINUS-VALUE)
	move.l	a3,$dff050	;BLTAPTH (DEST. (SCREEN))
	move.l	a2,$dff054	;BLTDPTH (SOURCEADR.+SINUS-VALUE)
	move.w	#16*64+1,$dff058;BLIT WORD
	bsr.L	WAIT_BLITTER
	rts
copysinus2:
	move.l	a1,a2		;A1 -> SOURCE (INVISBLE SCROLL)
	move.l	a0,a3		;A0 -> DESTINATION (SCREEN)
	move.l	sinus,a4
	move.l	(a4),d4
	add.l	d4,a2		;ADD SINUS ON SOURCE
	subq	#4,a4		;NEXT SINE-VALUE
	cmp.l	#sinustab,a4
	bne.S	nottopofsinustab
	move.l	#sinusend,a4
NOTtopOFsinusTAB:
	move.l	a4,sinus
	rts
;---------------------------------------------------------------------
;---------------------------------------------------------------------
;         *** COPROCESSOR-INSTRUCTION-LIST *** !
newcopper:			; New Copperlist
 dc.l  $008e3073		;DIWSTRT
 dc.l  $009030e1		;DIWSTOP
 dc.l  $00920038		;DDFSTRT
 dc.l  $009400d0		;DDFSTOP
 dc.l  $01020000		;BPL....
 dc.l  $01080004		;BPL1MOD
 dc.l  $010a0004		;BPL2MOD
 dc.l  $01040000  		;BPLCON2
 dc.w  $0100,%0010001000000000	;BPLCON0
;-------------------------------------------
s0:	
dc.w	$0120,$0000,$0122,$0000
dc.w		$01a2
Color:dc.w	$0770
dc.w		$01a4
Color1:dc.w	$0aa0
dc.w		$01a6
color2:dc.w	$0ff0
dc.w	$0124,$0007
dc.w	$0126,$f000
dc.w	$0128,$0007
dc.w	$012a,$f000
dc.w	$012c,$0007
dc.w	$012e,$f000
dc.w	$0130,$0007
dc.w	$0132,$f000
dc.w	$0134,$0007
dc.w	$0136,$f000
dc.w	$0138,$0007
dc.w	$013a,$f000
dc.w	$013c,$0007
dc.w	$013e,$f000
dc.w	$01a8,$0000,$01aa,$0000,$01ac,$0000,$01ae,$0000,$01b0,$0000
dc.w	$01b2,$0000,$01b4,$0000,$01b6,$0000,$01b8,$0000,$01ba,$0000

dc.l $00e00004,$00e20b00
dc.l $00e40004,$00e63700
LOGOTRICK2:
dc.l $01840000,$01860000
dc.l $7009fffe
dc.w  $0100,%0001001000000000	;BPLCON0
Planes:
     dc.w $00e0
hi1: dc.w $0005 		;BPL1PTH
     dc.w $00e2
lo1: dc.w $04fc 		;BPL1PTL
;--------------------------------------------------
Colormap:
 dc.l $01800000 
;------------------------------------------------------------
;SplitFlip-Data:			;47 Moves
;---------------
dc.l $5029fffe
Split1:
blk.l	48,$01800000
dc.l $5109fffe,$01800002
;---------------------------------------------------------------------
Copper:
blk.l	120,$01800000
BONUS:
blk.l	10,$01860000

dc.l $d729fffe
Split2:
blk.l	48,$01800000

dc.l $d809fffe,$01800000
dc.w  $0100,%0010001000000000	;BPLCON0
dc.l $01020000
dc.l $00e00004,$00e209f8
dc.l $00e40004,$00e635f8
LOGOTRICK:
dc.l $01860000,$01840000
;---------------------------------------------------------------------
 dc.l $fffffffe
;-----------------------------
even
gfxbase:dc.l  0 
oldcopper: dc.l  0
even
gfxname:dc.b  "graphics.library",0
even
fontadresses:
dc.l 	font,font+2,font+4,font+6,font+8,font+10,font+12
dc.l 	font+14,font+16,font+18,font+20,font+22,font+24,font+26
dc.l	font+28,font+30,font+32,font+34,font+36,font+38
dc.l	font+640,font+642,font+644,font+646,font+648,font+650,font+652
dc.l	font+654,font+656,font+658,font+660,font+662,font+664,font+666
dc.l	font+668,font+670,font+672,font+674,font+676,font+678
dc.l 	font+1280,font+1282,font+1284,font+1286,font+1288,font+1290
dc.l	font+1292,font+1294,font+1296,font+1298,font+1300,font+1302
dc.l	font+1304,font+1306,font+1308,font+1310,font+1312,font+1314
dc.l	font+1316,font+1318
ColorTable:
dc.w	$0100,$0200,$0300,$0400,$0500,$0600,$0700,$0800,$0900,$0a00,$0b00
dc.w	$0c00,$0d00,$0e00,$0f00,$0f10,$0f20,$0f30,$0f40,$0f50,$0f60,$0f70
dc.w	$0f80,$0f90,$0fa0,$0fb0,$0fc0
dc.w	$0fd0,$0fe0,$0ff0,$0df0,$0bf0,$09f0,$07f0,$05f0,$03f0,$01f0,$00d0
dc.w	$00c0,$00b0,$00a0,$0090,$0080,$0070,$0060,$0050,$0040,$0030,$0020
dc.w	$0010
ColorTableEnd:
dc.w	$0100,$0200,$0300,$0400,$0500,$0600,$0700,$0800,$0900,$0a00,$0b00
dc.w	$0c00,$0d00,$0e00,$0f00,$0f10,$0f20,$0f30,$0f40,$0f50,$0f60,$0f70
dc.w	$0f80,$0f90,$0fa0,$0fb0,$0fc0
dc.w	$0fd0,$0fe0,$0ff0,$0df0,$0bf0,$09f0,$07f0,$05f0,$03f0,$01f0,$00d0
dc.w	$00c0,$00b0,$00a0,$0090,$0080,$0070,$0060,$0050,$0040,$0030,$0020
dc.w	$0010
even
ColorTablePtr:
dc.l	Colortable
ColorTablePtr2:
dc.l	Colortableend
even
LOGOTABLE:
dc.w	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dc.w	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dc.w	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dc.w	$0111,$0222,$0333,$0444,$0555,$0666,$0777,$0888,$0999,$0aaa
dc.w	$0bbb,$0ccc,$0ddd,$0eee,$0fff
TWO:
blk.w	8*12,$0fff
dc.w	$0eee,$0ddd,$0ccc,$0bbb,$0aaa,$0999
dc.w	$0888,$0777,$0666,$0555,$0444,$0333,$0222,$0111
FEAR:
dc.w	0
even
LogotablePTR:
dc.l	LOGOTABLE
LogotablePTR2:
dc.l	TWO
even
scspeed:
dc.w	0
speedlogic:
dc.w	0
textptr:
dc.l	0
textctr:
dc.w	0
noscroll:
dc.l	0
mask1:
blk.w	16,$0fff
mask2:
blk.w	16,$f0ff
mask3:
blk.w	16,$ff0f
mask4:
blk.w	16,$fff0
sinus:
dc.l	sinustab
sinustab:
dc.l $0,$2C,$2C,$58,$84,$84,$B0,$DC
dc.l $108,$134,$160,$18C,$1E4,$210,$23C,$268
dc.l $294,$2EC,$318,$344,$370,$3C8,$3F4,$420
dc.l $44C,$478,$4A4,$4D0,$4D0,$4FC,$528,$528
dc.l $554,$554,$554,$554,$554,$554,$554,$554
dc.l $554,$528,$528,$4FC,$4D0,$4D0,$4A4,$478
dc.l $44C,$420,$3F4,$3C8,$39C,$344,$318,$2EC
dc.l $2C0
dc.l $2C0,$2EC,$318,$344,$370,$3C8,$3F4,$420
dc.l $44C,$478,$4A4,$4D0,$4D0,$4FC,$528,$528
dc.l $554,$554,$554,$554,$554,$554,$554,$554
dc.l $554,$528,$528,$4FC,$4D0,$4D0,$4A4,$478
dc.l $44C,$420,$3F4,$3C8,$370,$344,$318,$2EC
dc.l $2C0,$268,$23C,$210,$1E4,$18C,$160,$134
dc.l $108,$DC,$B0,$84,$84,$58,$2C,$2C
dc.l $0,$0,$0,$0,$0,$0,$0,$0
sinusend:
dc.l $0
dc.l	$ffff
JumpTable:
dc.w	3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,-1,0,0,-2,-2,-2,-2,-2,-2,-2
blk.w	10,-3	
JumpTABLEend:
dc.w	0
even
Jumpptr:
dc.l	Jumptable
even
delay:
dc.b	0
even
stars:
		dc.w	$72b1,$7300,$0000,$0200
		dc.w	$7483,$7500,$0200,$0200
		dc.w	$7605,$7700,$0200,$0000
		dc.w	$7874,$7900,$0000,$0200
		dc.w	$7ab7,$7b00,$0200,$0200
		dc.w	$7c42,$7d00,$0200,$0000
		dc.w	$7e85,$7f00,$0000,$0200
		dc.w	$804f,$8100,$0200,$0200
		dc.w	$827f,$8300,$0200,$0000
		dc.w	$84ef,$8500,$0000,$0200
		dc.w	$86ae,$8700,$0200,$0200
		dc.w	$88e7,$8900,$0200,$0000
		dc.w	$8af0,$8b00,$0000,$0200
		dc.w	$8c35,$8d00,$0200,$0200
		dc.w	$8e7b,$8f00,$0200,$0000
		dc.w	$908e,$9100,$0000,$0200
		dc.w	$9292,$9300,$0200,$0200
		dc.w	$9412,$9500,$0200,$0000
		dc.w	$9683,$9700,$0000,$0200
		dc.w	$989e,$9900,$0200,$0200
		dc.w	$9ab7,$9b00,$0200,$0000
		dc.w	$9ca2,$9d00,$0000,$0200
		dc.w	$9e51,$9f00,$0200,$0200
		dc.w	$a03f,$a100,$0200,$0000
		dc.w	$a228,$a300,$0000,$0200
		dc.w	$a483,$a500,$0200,$0200
		dc.w	$a67f,$a700,$0200,$0000
		dc.w	$a8d8,$a900,$0000,$0200
		dc.w	$aab3,$ab00,$0200,$0200
		dc.w	$ac52,$ad00,$0200,$0000
		dc.w	$ae72,$af00,$0000,$0200
		dc.w	$b023,$b100,$0200,$0200
		dc.w	$b262,$b300,$0200,$0000
		dc.w	$b4b2,$b500,$0000,$0200
		dc.w	$b673,$b700,$0200,$0200
		dc.w	$b842,$b900,$0200,$0000
		dc.w	$bae2,$bb00,$0000,$0200
		dc.w	$bc13,$bd00,$0200,$0200
		dc.w	$be52,$bf00,$0200,$0000
		dc.w	$c072,$c100,$0000,$0200
		dc.w	$c263,$c300,$0200,$0200
		dc.w	$c492,$c500,$0200,$0000
		dc.w	$c6f2,$c700,$0000,$0200
		dc.w	$c883,$c900,$0200,$0200
		dc.w	$ca22,$cb00,$0200,$0000
		dc.w	$cc52,$cd00,$0000,$0200
		dc.w	$cea3,$cf00,$0200,$0200
		dc.w	$d062,$d100,$0200,$0000
		dc.w	$d212,$d300,$0000,$0200
		dc.w	$d423,$d500,$0200,$0200
		dc.w	$d662,$d700,$0200,$0000
		dc.w	$0000,$0000
blk.w	30,0
;ญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญ
;ญ   NoisetrackerV1.0 replayroutine   ญ
;ญ Mahoney & Kaktus - HALLONSOFT 1989 ญ
;ญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญ


mt_init:lea	mt_data,a0
	move.l	a0,a1
	add.l	#$3b8,a1
	moveq	#$7f,d0
	moveq	#0,d1
mt_loop:move.l	d1,d2
	subq.w	#1,d0
mt_lop2:move.b	(a1)+,d1
	cmp.b	d2,d1
	bgt.s	mt_loop
	dbf	d0,mt_lop2
	addq.b	#1,d2

	lea	mt_samplestarts(pc),a1
	asl.l	#8,d2
	asl.l	#2,d2
	add.l	#$43c,d2
	add.l	a0,d2
	move.l	d2,a2
	moveq	#$1e,d0
mt_lop3:clr.l	(a2)
	move.l	a2,(a1)+
	moveq	#0,d1
	move.w	42(a0),d1
	asl.l	#1,d1
	add.l	d1,a2
	add.l	#$1e,a0
	dbf	d0,mt_lop3

	or.b	#$2,$bfe001
	move.b	#$6,mt_speed
	clr.w	$dff0a8
	clr.w	$dff0b8
	clr.w	$dff0c8
	clr.w	$dff0d8
	clr.b	mt_songpos
	clr.b	mt_counter
	clr.w	mt_pattpos
	rts

mt_end:	clr.w	$dff0a8
	clr.w	$dff0b8
	clr.w	$dff0c8
	clr.w	$dff0d8
	move.w	#$f,$dff096
	rts

mt_music:
	movem.l	d0-d4/a0-a3/a5-a6,-(a7)
	lea	mt_data,a0
	addq.b	#$1,mt_counter
	move.b	mt_counter,D0
	cmp.b	mt_speed,D0
	blt.s	mt_nonew
	clr.b	mt_counter
	bra	mt_getnew

mt_nonew:
	lea	mt_voice1(pc),a6
	lea	$dff0a0,a5
	bsr	mt_checkcom
	lea	mt_voice2(pc),a6
	lea	$dff0b0,a5
	bsr	mt_checkcom
	lea	mt_voice3(pc),a6
	lea	$dff0c0,a5
	bsr	mt_checkcom
	lea	mt_voice4(pc),a6
	lea	$dff0d0,a5
	bsr	mt_checkcom
	bra	mt_endr

mt_arpeggio:
	moveq	#0,d0
	move.b	mt_counter,d0
	divs	#$3,d0
	swap	d0
	cmp.w	#$0,d0
	beq.s	mt_arp2
	cmp.w	#$2,d0
	beq.s	mt_arp1

	moveq	#0,d0
	move.b	$3(a6),d0
	lsr.b	#4,d0
	bra.s	mt_arp3
mt_arp1:moveq	#0,d0
	move.b	$3(a6),d0
	and.b	#$f,d0
	bra.s	mt_arp3
mt_arp2:move.w	$10(a6),d2
	bra.s	mt_arp4
mt_arp3:asl.w	#1,d0
	moveq	#0,d1
	move.w	$10(a6),d1
	lea	mt_periods(pc),a0
	moveq	#$24,d7
mt_arploop:
	move.w	(a0,d0.w),d2
	cmp.w	(a0),d1
	bge.s	mt_arp4
	addq.l	#2,a0
	dbf	d7,mt_arploop
	rts
mt_arp4:move.w	d2,$6(a5)
	rts

mt_getnew:
	lea	mt_data,a0
	move.l	a0,a3
	move.l	a0,a2
	add.l	#$c,a3
	add.l	#$3b8,a2
	add.l	#$43c,a0

	moveq	#0,d0
	move.l	d0,d1
	move.b	mt_songpos,d0
	move.b	(a2,d0.w),d1
	asl.l	#8,d1
	asl.l	#2,d1
	add.w	mt_pattpos,d1
	clr.w	mt_dmacon

	lea	$dff0a0,a5
	lea	mt_voice1(pc),a6
	bsr.s	mt_playvoice
	lea	$dff0b0,a5
	lea	mt_voice2(pc),a6
	bsr.s	mt_playvoice
	lea	$dff0c0,a5
	lea	mt_voice3(pc),a6
	bsr.s	mt_playvoice
	lea	$dff0d0,a5
	lea	mt_voice4(pc),a6
	bsr.s	mt_playvoice
	bra	mt_setdma

mt_playvoice:
	move.l	(a0,d1.l),(a6)
	addq.l	#4,d1
	moveq	#0,d2
	move.b	$2(a6),d2
	and.b	#$f0,d2
	lsr.b	#4,d2
	move.b	(a6),d0
	and.b	#$f0,d0
	or.b	d0,d2
	tst.b	d2
	beq.s	mt_setregs
	moveq	#0,d3
	lea	mt_samplestarts(pc),a1
	move.l	d2,d4
	subq.l	#$1,d2
	asl.l	#2,d2
	mulu	#$1e,d4
	move.l	(a1,d2.l),$4(a6)
	move.w	(a3,d4.l),$8(a6)
	move.w	$2(a3,d4.l),$12(a6)
	move.w	$4(a3,d4.l),d3
	tst.w	d3
	beq.s	mt_noloop
	move.l	$4(a6),d2
	asl.w	#1,d3
	add.l	d3,d2
	move.l	d2,$a(a6)
	move.w	$4(a3,d4.l),d0
	add.w	$6(a3,d4.l),d0
	move.w	d0,8(a6)
	move.w	$6(a3,d4.l),$e(a6)
	move.w	$12(a6),$8(a5)
	bra.s	mt_setregs
mt_noloop:
	move.l	$4(a6),d2
	add.l	d3,d2
	move.l	d2,$a(a6)
	move.w	$6(a3,d4.l),$e(a6)
	move.w	$12(a6),$8(a5)
mt_setregs:
	move.w	(a6),d0
	and.w	#$fff,d0
	beq	mt_checkcom2
	move.b	$2(a6),d0
	and.b	#$F,d0
	cmp.b	#$3,d0
	bne.s	mt_setperiod
	bsr	mt_setmyport
	bra	mt_checkcom2
mt_setperiod:
	move.w	(a6),$10(a6)
	and.w	#$fff,$10(a6)
	move.w	$14(a6),d0
	move.w	d0,$dff096
	clr.b	$1b(a6)

	move.l	$4(a6),(a5)
	move.w	$8(a6),$4(a5)
	move.w	$10(a6),d0
	and.w	#$fff,d0
	move.w	d0,$6(a5)
	move.w	$14(a6),d0
	or.w	d0,mt_dmacon
	bra	mt_checkcom2

mt_setdma:
	move.w	#$12c,d0
mt_wait:dbf	d0,mt_wait
	move.w	mt_dmacon,d0
	or.w	#$8000,d0
	move.w	d0,$dff096
	move.w	#$12c,d0
mt_wai2:dbf	d0,mt_wai2
	lea	$dff000,a5
	lea	mt_voice4(pc),a6
	move.l	$a(a6),$d0(a5)
	move.w	$e(a6),$d4(a5)
	lea	mt_voice3(pc),a6
	move.l	$a(a6),$c0(a5)
	move.w	$e(a6),$c4(a5)
	lea	mt_voice2(pc),a6
	move.l	$a(a6),$b0(a5)
	move.w	$e(a6),$b4(a5)
	lea	mt_voice1(pc),a6
	move.l	$a(a6),$a0(a5)
	move.w	$e(a6),$a4(a5)

	add.w	#$10,mt_pattpos
	cmp.w	#$400,mt_pattpos
	bne.s	mt_endr
mt_nex:	clr.w	mt_pattpos
	clr.b	mt_break
	addq.b	#1,mt_songpos
	and.b	#$7f,mt_songpos
	move.b	mt_songpos,d1
	cmp.b	mt_data+$3b6,d1
	bne.s	mt_endr
	clr.b	mt_songpos
mt_endr:tst.b	mt_break
	bne.s	mt_nex
	movem.l	(a7)+,d0-d4/a0-a3/a5-a6
	rts

mt_setmyport:
	move.w	(a6),d2
	and.w	#$fff,d2
	move.w	d2,$18(a6)
	move.w	$10(a6),d0
	clr.b	$16(a6)
	cmp.w	d0,d2
	beq.s	mt_clrport
	bge.s	mt_rt
	move.b	#$1,$16(a6)
	rts
mt_clrport:
	clr.w	$18(a6)
mt_rt:	rts

mt_myport:
	move.b	$3(a6),d0
	beq.s	mt_myslide
	move.b	d0,$17(a6)
	clr.b	$3(a6)
mt_myslide:
	tst.w	$18(a6)
	beq.s	mt_rt
	moveq	#0,d0
	move.b	$17(a6),d0
	tst.b	$16(a6)
	bne.s	mt_mysub
	add.w	d0,$10(a6)
	move.w	$18(a6),d0
	cmp.w	$10(a6),d0
	bgt.s	mt_myok
	move.w	$18(a6),$10(a6)
	clr.w	$18(a6)
mt_myok:move.w	$10(a6),$6(a5)
	rts
mt_mysub:
	sub.w	d0,$10(a6)
	move.w	$18(a6),d0
	cmp.w	$10(a6),d0
	blt.s	mt_myok
	move.w	$18(a6),$10(a6)
	clr.w	$18(a6)
	move.w	$10(a6),$6(a5)
	rts

mt_vib:	move.b	$3(a6),d0
	beq.s	mt_vi
	move.b	d0,$1a(a6)

mt_vi:	move.b	$1b(a6),d0
	lea	mt_sin(pc),a4
	lsr.w	#$2,d0
	and.w	#$1f,d0
	moveq	#0,d2
	move.b	(a4,d0.w),d2
	move.b	$1a(a6),d0
	and.w	#$f,d0
	mulu	d0,d2
	lsr.w	#$6,d2
	move.w	$10(a6),d0
	tst.b	$1b(a6)
	bmi.s	mt_vibmin
	add.w	d2,d0
	bra.s	mt_vib2
mt_vibmin:
	sub.w	d2,d0
mt_vib2:move.w	d0,$6(a5)
	move.b	$1a(a6),d0
	lsr.w	#$2,d0
	and.w	#$3c,d0
	add.b	d0,$1b(a6)
	rts

mt_nop:	move.w	$10(a6),$6(a5)
	rts

mt_checkcom:
	move.w	$2(a6),d0
	and.w	#$fff,d0
	beq.s	mt_nop
	move.b	$2(a6),d0
	and.b	#$f,d0
	tst.b	d0
	beq	mt_arpeggio
	cmp.b	#$1,d0
	beq.s	mt_portup
	cmp.b	#$2,d0
	beq	mt_portdown
	cmp.b	#$3,d0
	beq	mt_myport
	cmp.b	#$4,d0
	beq	mt_vib
	move.w	$10(a6),$6(a5)
	cmp.b	#$a,d0
	beq.s	mt_volslide
	rts

mt_volslide:
	moveq	#0,d0
	move.b	$3(a6),d0
	lsr.b	#4,d0
	tst.b	d0
	beq.s	mt_voldown
	add.w	d0,$12(a6)
	cmp.w	#$40,$12(a6)
	bmi.s	mt_vol2
	move.w	#$40,$12(a6)
mt_vol2:move.w	$12(a6),$8(a5)
	rts

mt_voldown:
	moveq	#0,d0
	move.b	$3(a6),d0
	and.b	#$f,d0
	sub.w	d0,$12(a6)
	bpl.s	mt_vol3
	clr.w	$12(a6)
mt_vol3:move.w	$12(a6),$8(a5)
	rts

mt_portup:
	moveq	#0,d0
	move.b	$3(a6),d0
	sub.w	d0,$10(a6)
	move.w	$10(a6),d0
	and.w	#$fff,d0
	cmp.w	#$71,d0
	bpl.s	mt_por2
	and.w	#$f000,$10(a6)
	or.w	#$71,$10(a6)
mt_por2:move.w	$10(a6),d0
	and.w	#$fff,d0
	move.w	d0,$6(a5)
	rts

mt_portdown:
	clr.w	d0
	move.b	$3(a6),d0
	add.w	d0,$10(a6)
	move.w	$10(a6),d0
	and.w	#$fff,d0
	cmp.w	#$358,d0
	bmi.s	mt_por3
	and.w	#$f000,$10(a6)
	or.w	#$358,$10(a6)
mt_por3:move.w	$10(a6),d0
	and.w	#$fff,d0
	move.w	d0,$6(a5)
	rts

mt_checkcom2:
	move.b	$2(a6),d0
	and.b	#$f,d0
	cmp.b	#$e,d0
	beq.s	mt_setfilt
	cmp.b	#$d,d0
	beq.s	mt_pattbreak
	cmp.b	#$b,d0
	beq.s	mt_posjmp
	cmp.b	#$c,d0
	beq.s	mt_setvol
	cmp.b	#$f,d0
	beq.s	mt_setspeed
	rts

mt_setfilt:
	move.b	$3(a6),d0
	and.b	#$1,d0
	asl.b	#$1,d0
	and.b	#$fd,$bfe001
	or.b	d0,$bfe001
	rts
mt_pattbreak:
	not.b	mt_break
	rts
mt_posjmp:
	move.b	$3(a6),d0
	subq.b	#$1,d0
	move.b	d0,mt_songpos
	not.b	mt_break
	rts
mt_setvol:
	cmp.b	#$40,$3(a6)
	ble.s	mt_vol4
	move.b	#$40,$3(a6)
mt_vol4:move.b	$3(a6),$8(a5)
	rts
mt_setspeed:
	move.b	$3(a6),d0
	and.w	#$1f,d0
	beq.s	mt_rts2
	clr.b	mt_counter
	move.b	d0,mt_speed
mt_rts2:rts

mt_sin:
dc.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
dc.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18

mt_periods:
dc.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
dc.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
dc.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
dc.w $007f,$0078,$0071,$0000,$0000

mt_speed:	dc.b	$6
mt_songpos:	dc.b	$0
mt_pattpos:	dc.w	$0
mt_counter:	dc.b	$0

mt_break:	dc.b	$0
mt_dmacon:	dc.w	$0
mt_samplestarts:blk.l	$1f,0
mt_voice1:	blk.w	10,0
		dc.w	$1
		blk.w	3,0
mt_voice2:	blk.w	10,0
		dc.w	$2
		blk.w	3,0
mt_voice3:	blk.w	10,0
		dc.w	$4
		blk.w	3,0
mt_voice4:	blk.w	10,0
		dc.w	$8
		blk.w	3,0
;---------------------------------------------------------------------
;---------------------------------------------------------------------
scrollmsg:
DC.B	1,"      BEASTIE BOYS    ",0,"     PROUDLY PRESENT ANOTHER SHORT"
DC.B 	" INTRO !!     CREDITS COMING UP...          "
DC.B	2,"       CODE BY BANDOG   ",0,"           LOGO BY ZB     ",0
DC.B	"          FONT BY BANDOG   ",0,"         TUNE BY 4-MAT   ",0
DC.B 	"      WE SEND GREETS TO ALL OUR CONTACTS...         CONTACT "
DC.B	"US !  WRITE TO:         PLK 040612 C    ",0,"    4370 MARL   "
DC.B	"   ",0,"      W.GERMANY     ",0,"  (BANDOG,FOR BUYING AN INTRO "
DC.B	"ONLY)      OR         PLK 113565 C    ",0,"       6452 HAINBURG"
DC.B	"   ",0,"     W.GERMANY     ",0,"    (FCKW,FOR MAIL- AND MODEM"
DC.B	"SWAPPING)           OR        PO.BOX 56      ",0,"      4052 "
DC.B	"ROYNEBERG   ",0,"      NORWAY       ",0,"      (IRONLORD,FOR "
DC.B	"HOT MAIL"
DC.B	"-SWAPPING)           OR         PO.BOX 77      ",0,"     4350 "
DC.B	"NAERBOE     ",0,"    NORWAY       ",0,"      (ZARKY-BABY,FOR "
DC.B	"AMIGA AND C64 SWAPPING)           CONTACT ANYONE FOR MEMBERSHIP"
DC.B	" !  CODERS NEEDED !!                              " 
DC.B	"  BY THE WAY:  FOR ALL PEOPLE WHO AWAIT OUR SECOND MEGADEMO,"
DC.B	"PLEASE NOTICE THAT IT WILL TAKE A WHILE UNTIL IT IS FINISHED "
DC.B	"BUT BE SURE THAT YA'L LL GET IT WHEN IT IS RELEASED !!!      "
DC.B	" OK GUYS,IT IS LATE AND PEOPLE HAVE TO GET UP EARLY SO WRAPPIN'"
DC.B	" IS NEAR !                BEASTIE BOYS - ONE STEP INTO FUTURE !"
DC.B	"                         WRAP,BANDOG IS OFF                "
;---------------------------------------------------------------------
;---------------------------------------------------------------------
textend:
even
