scene.org File Archive

File download

<root>­/­mirrors­/­amigascne­/­Scrollers­/­E-Groupstext­/­Elysion/Elysion-BBSDemo.txt

File size:
83 003 bytes (81.06K)
File date:
2024-09-05 01:10:10
Download count:
all-time: 1

Preview

rubber
RUBBER
spline
SPLINE
nummer
NUMMER
greetz
GREETZ
theend
THEEND 



  ----------------  
   yeah rite ....   
  elysion presents  
  a little bbs-tro  
  ----------------  
  ----------------  
  let's start with  
   a transforming   
    rubbervector    
  ----------------  
  ----------------  
  yo that was cool  
      but now       
   something else   
  ----------------  
  ----------------  
  comming up is an  
  elastic b-spline  
       vector       
  ----------------  
  ----------------  
  here is the part  
   you have been    
   waiting for ..   
  ----------------  
  ----------------  
   the numbers of   
   our boards and   
       fax !!       
  ----------------  
  ----------------  
    got them ???    
     okay .....     
   and now .....    
  ----------------  
  ----------------  
       we have      
    got to greet    
    some friends    
  ----------------  
  ----------------  
   dont feel too    
    sorry if we     
   missed you !!    
  ----------------  
  ----------------  
    and finally     
   the last part    
    the end !!!     
  ---------------- 



rubber
RUBBER



GREETINGS FLY OUT TO
THE ONES WHO DESERVE
        IT:         
                    
YOYO  5TH GENERATION
SKINDIVER      ABYSS
XENTEC       ADDICTS
CONQUEST     ANARCHY
DARYL      ANDROMEDA
AGENT         ATOMIC
FRONE     DARK DEMON
CRAZY SLIME   DESERT
MATTHEW      EPSYLON
PINHEAD       LEGEND
MR.MIXX MELON DEZIGN
DARK         NOXIOUS
MARLOW         PANIC
PALADIN    PRINCIPES
CELIC        SCEPTIC
FLITE        SCEPTIC
MAGGY     SUBMISSION
MR.MAGNOSE          
          SUBMISSION
JOKER           TECH
MAC              TEK
CETERUS       VANISH
RACKLER     WILDFIRE
SHOCKWAVE      TRIAD
NEUROMANCER  ORBITAL
DEMENTED FORM       
             ORBITAL
REBEL      FAIRLIGHT
DAMAGE     FAIRLIGHT
V-CUT        ADDONIC
ORGASMATRON  X-TRADE
CHUCKY       X-TRADE
SLAM         X-TRADE
D-ZIRE       SILENTS
MR.ELAKA HARDCORE D.
INCUBUS  HARDCORE D.
ARVID TUBA          
     HARDCORE DESIGN
LACOSTE    SHINING 8
ZYNC         IMAGINE
TITANIC       ZENITH
KAYO       FREESTYLE
OMEGA      MEGA IND.
REPOMAN    MEGA IND.
STEARO      PARADISE
DAMION        PLATIN
ZYNC         IMAGINE
BULLDOG          ICE
MOSQUITO     MANITOU
KRIS          REBELS
DIP-STICK           
CRUSADER-X          
HAUSS               
SPIRIT              
PANIC               
INTRUDER            
                    
 SORRY IF WE FORGOT 
YOU BUT WE WERE IN A
    BIG HURRY !!    
                    
                    
                    
                    
                    
                    
                    
                    



   call our boards  
--------------------
 angel ice:         
 -46 27 055 303 243 
                    
 black lodge:       
 -46 52 024 399     
                    
 dark angel:        
 -49 212 201 611    
                    
 elysion fax:       
 -49 212 49338      



  YEAH RIGHT    A REAL B SPLINE ELASTIC VECTOR CUBE  ROTATED AROUND THREE AXIS         AINT THAT COOL        YEAH   WELL WELL   LETS CONTINUE WITH SOME MORE ROUTINES                                                                 



                      
                      
                      
you reached the end of
this little bbs'tro by
       elysion        
                      
                      
                      
                      
                      
 the complete credits 
----------------------
                      
 loaderpicture        
 drawn by shrike      
                      
 intropart            
 coded by tim         
 logo by fenrir and   
         rodder       
 other gfx by tim     
                      
 loaderpart           
 coded by tim         
 logo by galaxy       
 font by stormcrow    
                      
 the rubbervector     
 coded by sure        
                      
 the vectorsplinebox  
 coded by sure        
 font by stormcrow    
                      
 bbs-number writer    
 coded by tim         
 font by stormcrow    
                      
 greetingspart        
 coded by tim         
 font by galaxy       
 greets by frame one  
                      
 this end part        
 coded by tim         
 font by stromcrow    
 mountains by galaxy  
 music by zardax      
                      
 the tune during the  
 demo was composed by 
 galaxy               
                      
                      
                      
                      
                      
                      
                      
                      
 don't forget to call 
      our boards      
----------------------
 angel ice            
 -46 27 055 303 243   
                      
 the black lodge      
 -46 52 024 399       
                      
 dark angel           
 -49 212 201 611      
                      
 or fax elysion:      
 -49 21 249 338       
                      
                      
                      
                      
                      
                      
                      
                      
                      
 phew! that was that! 
                      
 now there isn't much 
  to say so the text  
   will restart in a  
      few seconds     
                      
                      
                      
                      
                      
                      
                      
     end of line      
   text restarting    
                      
                      
                      
                      
                      
                      
                      
                      
;	onder=$1000
;	beeld=$2a40
;	font=$6000


;	>extern	"df3:dik.raw",$81000
;	>extern	"df3:style.raw",$86000


	>extern	"df0:sullekes",$50000


	org	$c0
	load	$80000

	jsr	initmusic
	jsr	$64000
	jsr	init
	jsr	clea
;	move.w	#$7fff,$dff09a

volgpart:
	move.w	#$7ff0,$dff096
	move.l	#copper,$dff080
	move.l	#action,$74
	move.l	#inter6,$78
	move.w	#$a7f0,$dff096
ve.w	#$c800,$dff09a

",$50000


	org	$c0
	load	$80000

	jsr	initmusic
	jsr	$64000
	jsr	init
	jsr	clea
;	move.w	#$7fff,$dff09a

volgpart:
	move.w	#$7ff0,$dff096
	move.l	#copper,$dff080
	move.l	#action,$74
	move.l	#inter6,$78
	move.w	#$a7f0,$dff096
	move.w	#$c800,$dff09a

	jsr	fadein
	jsr	typetext
	jsr	fade
	move.w	#0,langer

	jsr	copynam
	move.l	$0,file
	jsr	loader

tryla:	cmp.w	#300,langer
	blt	tryla


	jsr	fade3
	jsr	typetext
	jsr	fade

	move.w	#0,langer

	move.l	$0,a0
	move.w	noop,$de(a0)
	move.w	noop,$e0(a0)
	move.w	noop,$ea(a0)
	move.w	noop,$ec(a0)
	move.w	noop,$16a(a0)
	move.w	noop,$16c(a0)
	move.l	$f8(a0),startadd
	move.l	#addy,$f8(a0)


	jmp	$20(a0)

addy:
tryla2:	cmp.w	#300,langer
	blt	tryla2


	jsr	fade3
	jsr	fadeout2

	move.w	#$800,$dff09a
	move.l	startadd,a0
	jsr	(a0)	

	btst	#6,$bfe001
	bne     volgpart

	move.b	#$8a,$bfed01


	rts

noop:	nop

inter6:	tst.b	$bfdd00
	move.w	#$2000,$dff09c
	rte
	

startadd:
	dc.l	0

copynam:
	lea	name,a0
	lea	namen,a1

	move.w	part,d0
	mulu	#14,d0
	add.l	d0,a1

	move.l	#14,d7
baby:	move.b	(a1)+,(a0)+
	dbf	d7,baby
	add.w	#1,part

;	and.w	#3,part		;<==================watch this
	rts

part:	dc.w	0

	


namen:	dc.b	6,"rubber"
	dc.b	6,"RUBBER"
	dc.b	6,"spline"
	dc.b	6,"SPLINE"
	dc.b	6,"nummer"
	dc.b	6,"NUMMER"
	dc.b	6,"greetz"
	dc.b	6,"GREETZ"
	dc.b	6,"theend"
	dc.b	6,"THEEND"
	



	

fade:	move.l	$dff004,d0
	and.l	#$1ff00,d0
	cmp.l	#$13000,d0
	bne	fade

fade2:	move.l	$dff004,d0
	and.l	#$1ff00,d0
	cmp.l	#$13000,d0
	beq	fade2

	add.b	#2,rast1
	add.b	#2,rast1+20
	add.b	#2,rast1+40
	add.b	#2,rast1+60
	add.b	#2,rast1+80
	add.b	#2,rast1+100
	add.b	#2,rast1+120
	add.b	#2,rast1+140
	add.b	#2,rast1+160
			
	cmp.b	#$d0,rast1
	bne	fade

	rts



fade3:	move.l	$dff004,d0
	and.l	#$1ff00,d0
	cmp.l	#$13000,d0
	bne	fade3

fade4:	move.l	$dff004,d0
	and.l	#$1ff00,d0
	cmp.l	#$13000,d0
	beq	fade4

	sub.b	#2,rast1
	sub.b	#2,rast1+20
	sub.b	#2,rast1+40
	sub.b	#2,rast1+60
	sub.b	#2,rast1+80
	sub.b	#2,rast1+100
	sub.b	#2,rast1+120
	sub.b	#2,rast1+140
	sub.b	#2,rast1+160
	
	cmp.b	#$20,rast1
	bne	fade3
	add.w	#1,texttel
	rts

fadeout:cmp.w	#5,part
	bne	blur
	move.w	#-1,pr_musicfadedirection

blur:	move.l	$dff004,d0
	and.l	#$1ff00,d0
	cmp.l	#$13000,d0
	bne	fadeout

fadeout2:
	move.l	$dff004,d0
	and.l	#$1ff00,d0
	cmp.l	#$13000,d0
	beq	fadeout2



	sub.b	#1,sprite1+1
	sub.b	#1,sprite2+1
	sub.b	#1,sprite3+1
	sub.b	#1,sprite4+1
	sub.b	#1,sprite5+1
	sub.b	#1,sprite6+1
	sub.b	#2,zulu
	cmp.b	#0,sprite1+1
	bne	fadeout
	rts
	


fadeIN:	move.l	$dff004,d0
	and.l	#$1ff00,d0
	cmp.l	#$13000,d0
	bne	fadein

fadein2:
	move.l	$dff004,d0
	and.l	#$1ff00,d0
	cmp.l	#$13000,d0
	beq	fadein2



	add.b	#1,sprite1+1
	add.b	#1,sprite2+1
	add.b	#1,sprite3+1
	add.b	#1,sprite4+1
	add.b	#1,sprite5+1
	add.b	#1,sprite6+1
	add.b	#2,zulu
	cmp.b	#$40,sprite1+1
	bne	fadein
	rts
	

clea:
	lea	beeld,a0
cle:	move.l	#0,(a0)+
	cmp.l	#[beeld+$35c0],a0
	bne	cle
	rts
	
typetext:
	lea	beeld,a0
ruig:	move.l	#0,(a0)+
	cmp.l	#[beeld+$35c0],a0
	bne	ruig

	lea	text,a0
	move.w	texttel,d0
	mulu	#100,d0
	add.l	d0,a0	
	lea	beeld,a2
	move.l	#4,d5
walk2:	move.l	#19,d7
walk:	moveq	#0,d1
	lea	fontok,a1
	move.b	(a0)+,d0

dikzoek:cmp.b	(a1)+,d0
	beq	found
	cmp.b	#$ff,(A1)
	beq	notfound
	addq	#1,d1
	bra	dikzoek
found:	divu	#20,d1
	move.w	d1,d0
	swap	d1
	add.w	d1,d1
	mulu	#[32*40],d0
	add.w	d1,d0
	lea	font,a1
	add.l	d0,a1
	move.l	a2,a3
	move.l	#31,d6

lettel:	move.w	(a1),(a3)
	move.w	$f00(a1),$1ae0(a3)
	add.l	#40,a1
	add.l	#40,a3
	dbf	d6,lettel
	
notfound:add.l	#2,a2
	
	dbf	d7,walk
	add.l	#$500,a2
	dbf	d5,walk2

	rts
	






action:	movem.l	d0-d7/a0-a6,-(sp)
	jsr	beweeg
	jsr	colrout
	add.w	#1,langer
	movem.l	(sp)+,d0-d7/a0-a6
	move.w	#$800,$dff09c
	rte


langer:	dc.w	0


colrout:lea	kilo+6,a0
	lea	killcol,a1
	lea	dumdum,a3
	move.w	#0,tel2	
	lea	dikkiedik,a2
	move.l	#0,d0
	add.l	tel,d0
	move.l	#11,d2

	move.l	#83,d7
catch:	move.l	d0,d1
	asr.l	d2,d1	
	add.w	d1,d1
	add.w	d1,d1
	

	move.w	(a1,d1.w),(a0)
	move.w	2(a1,d1.w),4(a0)

	move.l	#$1000*1*64,d3
	divu	(a2)+,d3
	and.l	#$ffff,d3
	add.l	d3,d0
	cmp.l	#$40000,d0
	blt	ok
	sub.l	#$40000,d0
ok:	add.l	#12,a0

	add.w	#1,tel2
	move.w	(a3),d3
	cmp.w	tel2,d3
	bne	screw
	addq	#2,a3
	move.w	#0,tel2
	add.l	#512,a1
screw:	

	dbf	d7,catch
	
	sub.l	#$2800,tel
	cmp.l	#00,tel
	bgt	ok2
	add.l	#$40000,tel
ok2:	rts
	
tel:	dc.l	$40000-$2800
tel2:	dc.w	0
	
dumdum:	dc.w	1,2,4,8,16,32,64



	
beweeg:	lea	saaisin,a0
	add.l	giveup,a0
	move.w	(a0),d0

	move.b	d0,sprite1
	move.b	d0,sprite2	
	move.b	d0,sprite3
	move.b	d0,sprite4	
	move.b	d0,sprite5
	move.b	d0,sprite6
	add.w	#150,d0
	move.b	d0,sprite1+2
	move.b	d0,sprite2+2	
	move.b	d0,sprite3+2
	move.b	d0,sprite4+2	
	move.b	d0,sprite5+2
	move.b	d0,sprite6+2
	cmp.w	#256,d0
	blt	boe

	move.b	#$82,sprite1+3
	move.b	#$82,sprite2+3
	move.b	#$82,sprite3+3
	move.b	#$82,sprite4+3
	move.b	#$82,sprite5+3
	move.b	#$82,sprite6+3
	bra	boe2	

boe:	move.b	#$80,sprite1+3
	move.b	#$80,sprite2+3
	move.b	#$80,sprite3+3
	move.b	#$80,sprite4+3
	move.b	#$80,sprite5+3
	move.b	#$80,sprite6+3

boe2:	add.l	#2,giveup
	and.l	#$fe,giveup
	rts


giveup:	dc.l	0

	even
dikkiedik:
	DC.B	$00,$08,$00,$09,$00,$0A,$00,$0B
	DC.B	$00,$0C,$00,$0C,$00,$0E,$00,$0E
	DC.B	$00,$10,$00,$10,$00,$10,$00,$12
	DC.B	$00,$12,$00,$14,$00,$14,$00,$15
	DC.B	$00,$16,$00,$17,$00,$18,$00,$19
	DC.B	$00,$19,$00,$1A,$00,$1B,$00,$1C
	DC.B	$00,$1D,$00,$1D,$00,$1F,$00,$1F
	DC.B	$00,$21,$00,$21,$00,$22,$00,$23
	DC.B	$00,$23,$00,$25,$00,$25,$00,$26
	DC.B	$00,$27,$00,$28,$00,$29,$00,$2A
	DC.B	$00,$2A,$00,$2B,$00,$2C,$00,$2D
	DC.B	$00,$2E,$00,$2E,$00,$30,$00,$30
	DC.B	$00,$32,$00,$32,$00,$33,$00,$34
	DC.B	$00,$34,$00,$36,$00,$36,$00,$37
	DC.B	$00,$38,$00,$39,$00,$3A,$00,$3B
	DC.B	$00,$3B,$00,$3D,$00,$3D,$00,$3E
	DC.B	$00,$3F,$00,$3F,$00,$41,$00,$41
	DC.B	$00,$43,$00,$43,$00,$44,$00,$45
	DC.B	$00,$45,$00,$47,$00,$47,$00,$48
	DC.B	$00,$49,$00,$4A,$00,$4B,$00,$4C
	DC.B	$00,$4C,$00,$4E,$00,$4E,$00,$4F
	dc.b	$00,$4f

		;01234567890123456789
text:	dc.b	"   ---------------- "
        dc.b	"    yeah rite ....  "   
	dc.b	"   elysion presents "
	dc.b	"   a little bbs-tro " 
	dc.b	"   ---------------- "
	dc.b	"   ---------------- "
	dc.b	"   let's start with "
	dc.b	"    a transforming  "
	dc.b	"     rubbervector   "
	dc.b	"   ---------------- "

	dc.b	"   ---------------- "
        dc.b	"   yo that was cool "   
	dc.b	"       but now      "
	dc.b	"    something else  " 
	dc.b	"   ---------------- "
	dc.b	"   ---------------- "
	dc.b	"   comming up is an "
	dc.b	"   elastic b-spline "
	dc.b	"        vector      "
	dc.b	"   ---------------- "

	dc.b	"   ---------------- "
	dc.b	"   here is the part "
	dc.b	"    you have been   "
	dc.b	"    waiting for ..  "
	dc.b	"   ---------------- "

	dc.b	"   ---------------- "
	dc.b	"    the numbers of  "
	dc.b	"    our boards and  "
	dc.b	"        fax !!      "
	dc.b	"   ---------------- "

	dc.b	"   ---------------- "
	dc.b	"     got them ???   "
	dc.b  	"      okay .....    "
	dc.b	"    and now .....   "
	dc.b	"   ---------------- "

	dc.b	"   ---------------- "
	dc.b	"        we have     "
	dc.b	"     got to greet   "
	dc.b	"     some friends   " 
	dc.b	"   ---------------- "

	dc.b	"   ---------------- "
	dc.b	"    dont feel too   "
	dc.b	"     sorry if we    "
	dc.b	"    missed you !!   "
	dc.b	"   ---------------- "
	
	dc.b	"   ---------------- "
	dc.b	"     and finally    "
	dc.b	"    the last part   "
	dc.b	"     the end !!!    "
	dc.b	"   ---------------- "
	
	
texttel:dc.w	0


fontok:	dc.b	"abcdefghijklmnopqrstuvwxyz1234567890!?.-()",$ff
	even



copper:	

	dc.w	$120,0,$122,$0,$124,$0,$126,$0
	dc.w	$128,0,$12a,$0,$12c,$0,$12e,$0
	dc.w	$130,0,$132,$0,$134,$0,$136,$0
	dc.w	$138,0,$13a,$0,$13c,$0,$13e,$0

	dc.w	$9c,$8800
	dc.w	$8e,$3081,$90
zulu:	dc.w	$b0c1,$92,$38,$94,$d0
	dc.w	$102,$0,$104,$20,$108,$0,$10a,$0
	dc.w	$e0,[beeld+$0000]/$10000,$e2,[beeld+$0000]&$ffff
	dc.w	$e4,[beeld+$1ae0]/$10000,$e6,[beeld+$1ae0]&$ffff
	dc.w	$100,$2200


	dc.w	$0180,$0000,$0182,$0fff,$0184,$0bbb,$0186,$0555
rast1:	dc.w	$300f,-2
	dc.w	$0180,$0000,$0182,$0ddd,$0184,$0aaa,$0186,$0444
	dc.w	$310f,-2
	dc.w	$0180,$0000,$0182,$0bbb,$0184,$0999,$0186,$0444
	dc.w	$330f,-2
	dc.w	$0180,$0000,$0182,$0999,$0184,$0777,$0186,$0333
	dc.w	$340f,-2
	dc.w	$0180,$0000,$0182,$0777,$0184,$0666,$0186,$0333
	dc.w	$350f,-2
	dc.w	$0180,$0000,$0182,$0555,$0184,$0444,$0186,$0222
	dc.w	$360f,-2
	dc.w	$0180,$0000,$0182,$0333,$0184,$0333,$0186,$0222
	dc.w	$370f,-2
	dc.w	$0180,$0000,$0182,$0111,$0184,$0111,$0186,$0111
	dc.w	$380f,-2
	dc.w	$0180,$0000,$0182,$0000,$0184,$0000,$0186,$0000


	dc.w	$1a2,$000,$1a2,$db6,$1a4,$fd9,$1a6,$fff
	dc.w	$1a8,$b84,$1aa,$a63,$1ac,$852,$1ae,$731
	dc.w	$1b0,$620,$1b2,$510

	dc.w	$dbdb,-2
	dc.w	$e0,[onder+$0000]/$10000,$e2,[onder+$0000]&$ffff
	dc.w	$e4,[onder+$0d20]/$10000,$e6,[onder+$0d20]&$ffff
	dc.w	$100,$2200	
kilo:	dc.w	$dbe1,-2,$182,$00f,$186,$fff
	blk.l	84*3,0

	dc.l	-2

init:	move.l	#sprite1,d0
	move.w	d0,copper+6
	swap	d0
	move.w	d0,copper+2

	move.l	#sprite2,d0
	move.w	d0,copper+14
	swap	d0
	move.w	d0,copper+10

	move.l	#sprite3,d0
	move.w	d0,copper+22
	swap	d0
	move.w	d0,copper+18

	move.l	#sprite4,d0
	move.w	d0,copper+30
	swap	d0
	move.w	d0,copper+26

	move.l	#sprite5,d0
	move.w	d0,copper+38
	swap	d0
	move.w	d0,copper+34

	move.l	#sprite6,d0
	move.w	d0,copper+46
	swap	d0
	move.w	d0,copper+42

	lea	kilo,a0
	move.l	#$dbe1fffe,d0

	move.l	#83,d7
rijbewijs:
	move.l	d0,(a0)+
	move.l	#$182000f,(a0)+
	move.l	#$1860fff,(a0)+
	add.l	#$01000000,d0
	dbf	d7,rijbewijs

	rts
	
killcol:blk.l	64,$00040444
	blk.l	64,$04440004
	blk.l	64,$00050555
	blk.l	64,$05550005
	blk.l	64,$00060666
	blk.l	64,$06660006
	blk.l	64,$00070777
	blk.l	64,$07770007
	blk.l	64,$00080888
	blk.l	64,$08880008
	blk.l	64,$00090999
	blk.l	64,$09990009
	blk.l	64,$000a0aaa
	blk.l	64,$0aaa000a





saaisin:	
	DC.W	$0065,$0067,$006A,$006C,$006F,$0071,$0074,$0076,$0079,$007B
	DC.W	$007D,$0080,$0082,$0084,$0086,$0088,$008A,$008C,$008D,$008F
	DC.W	$0090,$0092,$0093,$0094,$0095,$0096,$0097,$0098,$0098,$0099
	DC.W	$0099,$0099,$0099,$0099,$0099,$0099,$0099,$0098,$0097,$0096
	DC.W	$0096,$0095,$0093,$0092,$0091,$008F,$008E,$008C,$008A,$0088
	DC.W	$0086,$0084,$0082,$0080,$007E,$007C,$0079,$0077,$0074,$0072
	DC.W	$006F,$006D,$006A,$0068,$0065,$0063,$0061,$005E,$005C,$0059
	DC.W	$0057,$0054,$0052,$004F,$004D,$004B,$0049,$0046,$0044,$0042
	DC.W	$0040,$003F,$003D,$003B,$003A,$0038,$0037,$0036,$0035,$0034
	DC.W	$0033,$0032,$0032,$0031,$0031,$0031,$0031,$0031,$0031,$0031
	DC.W	$0031,$0032,$0033,$0033,$0034,$0035,$0036,$0038,$0039,$003A
	DC.W	$003C,$003E,$003F,$0041,$0043,$0045,$0047,$004A,$004C,$004E
	DC.W	$0050,$0053,$0055,$0058,$005A,$005D,$005F,$0062
	
	

	
loader:	move.w	#$0008,$dff09a
	move.l	#kaykay,$68
	move.b	#$7f,$bfed01
	move.b	#$ff,$bfe401
	move.b	#$0a,$bfe501
	move.b	#$19,$bfee01
	move.b	#$81,$bfed01
	move.w	#$8210,$dff096
	move.w	#$c008,$dff09a
	
	jsr	driveinit
	jsr	zero
	move.w	#880,block	
	jsr	leesblok
	jsr	copyroot
	jsr	searchf
	jsr	driveoff

	move.w	#$0008,$dff09a
	rts
		
	

kaykay:	move.w	#1,sux
	tst.b	$bfed01
	move.w	#$8,$dff09c
	rte
	
	


searchf:lea	root+24,a0

	moveq	#0,d0
	moveq	#0,d7
	lea	name2,a1
	move.b	(a1),d7
	sub.w	#1,d7
	move.b	(a1)+,d0

has:	mulu	#13,d0
	moveq	#0,d1
	move.b	(a1)+,d1
	add.l	d1,d0
	and.l	#2047,d0
	dbf	d7,has
	divu	#72,d0
	swap	d0
	add.w	d0,d0
	add.w	d0,d0
	
	move.l	(a0,d0.w),d0



saai:	move.w	d0,block
	jsr	leesblok

	lea	trackin,a1
	move.w	sect,d0
	mulu	#512,d0
	lea	(a1,d0.l),a1
	lea	432(a1),a2
	lea	name,a3
	moveq	#0,d0
	move.b	(a3)+,d0
	cmp.b	(a2)+,d0
	bne	next2
	sub.w	#1,d0
filenam:move.b	(a3)+,d1
	cmp.b	(a2)+,d1
	bne	next2
	dbf	d0,filenam

	lea	filepoints,a3
filelis:lea	312(a1),a2
	move.l	#71,d7
nogeens:move.l	-(a2),d0
	tst.l	d0
	beq	next3
	move.w	d0,(a3)+
	dbf	d7,nogeens

	move.l	504(a1),d0
	tst.l	d0
	beq	next3
	
	move.w	d0,block
	jsr	leesblok
	lea	trackin,a1
	move.w	sect,d0
	mulu	#512,d0
	lea	(a1,d0.l),a1

	bra	filelis	

next3:	move.w	#$ffff,(a3)+
	move.l	file,a2
	lea	filepoints,a3
kilosa:	move.w	(a3)+,d0
	cmp.w	#$ffff,d0

	beq	out
	move.w	d0,block
	jsr	leesblok
	move.w	sect,d0
	mulu	#512,d0
	lea	trackin+24,a4
	lea	(a4,d0.l),a4
	move.l	#121,d6
loopje:	move.l	(a4)+,(a2)+
	dbf	d6,loopje
	bra	kilosa
	
next2:	move.l	496(a1),d0
	tst.l	d0
	bne	saai
	bra	halve
	
out:	rts
		




copyroot:
	move.l	#127,d7
	lea	root,a1
	lea	trackin,a0
copyr:	move.l	(a0)+,(a1)+
	dbf	d7,copyr
	rts
	

leesblok:
	movem.l	d0-d7/a0-a6,-(a7)
	jsr	sblock
	jsr	sside
	jsr	search
	jsr	load
	movem.l	(a7)+,d0-d7/a0-a6
	rts


sblock:	moveq	#0,d0
	move.w	block,d0
	divu	#22,d0
	move.w	d0,track
	moveq	#0,d0
	move.w	block,d0
	divu	#11,d0
	move.l	d0,d1
	and.w	#$1,d0
	move.w	d0,side
	swap	d1
	move.w	d1,sect
	rts
	


mouse:	btst	#6,$bfe001
	bne	mouse
	rts

sside:	cmp.w	#0,side
	beq	sidea
	bclr	#2,$bfd100
	nop
	nop
	rts

sidea:	bset	#2,$bfd100
	nop
	nop
	rts
	


		
driveinit:
	move.b	#$7f,$bfd100
	nop
	nop
	move.b	#$77,$bfd100
	nop
	nop
	jsr	drvwait
	rts	

driveoff:
	move.b	#$ff,$bfd100
	nop
	nop
	move.b	#$f7,$bfd100
	nop
	nop
	move.b	#$ff,$bfd100
	rts	

zero:	bset	#1,$bfd100
	bclr	#0,$bfd100
	nop
	nop
	bset	#0,$bfd100
	nop
	nop
	jsr	drvwait

	btst	#4,$bfe001
	bne	zero
	move.w	#0,current
	rts

search:	move.w	track,d0
	cmp.w	current,d0
	bgt	voorw
	cmp.w	current,d0
	blt	terug
	rts
	
terug:	moveq	#0,d0
	move.w	current,d0
	sub.w	track,d0
	sub.w	#1,d0

s2:	bset	#1,$bfd100
	bclr	#0,$bfd100
	nop
	nop
	bset	#0,$bfd100
	nop
	nop
	jsr	drvwait
	dbf	d0,s2
	move.w	track,current
	rts

voorw:	move.w	track,d0
	sub.w	current,d0
	sub.w	#1,d0
	
s3:	bclr	#1,$bfd100
	bclr	#0,$bfd100
	nop
	nop
	bset	#0,$bfd100
	nop
	nop
	jsr	drvwait
	dbf	d0,s3
	move.w	track,current
	rts

load:	move.w	inbuf,d0
	lsr.w	#1,d0
	cmp.w	track,d0
	bne	exload2
	move.w	inbuf,d0
	and.w	#$1,d0
	cmp.w	side,d0	
	beq	exload
			

exload2:move.w	track,d0
	add.w	d0,d0
	add.w	side,d0
	move.w	d0,inbuf
	move.w	#0,cola
afstraf:move.w	#$2,$dff09c
	move.w	#$4489,$dff07e
	move.w	#$7fff,$dff09e
	move.w	#$9500,$dff09e
	move.l	#trackbuffer,$dff020
	move.w	#$4000,$dff024
	move.w	#$8000+$19f0,$dff024
	move.w	#$8000+$19f0,$dff024
	

dwait:	btst	#1,$dff01f
	beq	dwait
	
	lea	trackbuffer,a0
	lea	trackin,a1

	move.l	#$55555555,d2
	move.l	#10,d6

gap3:	cmp.w	#$4489,(a0)+
	bne	gap3

gap2:	cmp.w	#$4489,(a0)
	bne	gap	
	lea	2(a0),a0
	bra	gap2	
gap:	

	move.l	(a0)+,d0
	move.l	(a0)+,d1
	and.l	d2,d0
	and.l	d2,d1
	add.l	d0,d0
	or.l	d1,d0	
	and.l	#$0000ff00,d0
	lsl.l	#1,d0
	lea	(a1,d0.l),a2
	lea	40(a0),a0
	move.l	(a0)+,d4
	move.l	(a0)+,d5
	and.l	d2,d4
	and.l	d2,d5
	add.l	d4,d4
	or.l	d5,d4
	move.l	#0,d3
	
	move.l	#127,d7
decode:	move.l	512(a0),d1
	move.l	(a0)+,d0
	eor.l	d0,d3
	eor.l	d1,d3
	

	and.l	d2,d0
	and.l	d2,d1
	add.l	d0,d0
	or.l	d0,d1
	move.l	d1,(a2)+
	dbf	d7,decode
	and.l	d2,d3
	cmp.l	d4,d3
	bne	fuckyou
	lea	512(a0),a0
	dbf	d6,gap3
exload:	rts		
	
fuckyou:add.w	#1,cola
	cmp.w	#3,cola
	bne	afstraf
	
	move.w	#$ffff,d7
halve:	move.w	d7,$dff180
	dbf	d7,halve
	btst	#6,$bfe001
	bne	halve
	
	move.w	#0,cola
	bra	afstraf
		
	

drvwait:move.w	#0,sux
	move.b	#$19,$bfee01

oetje2:	tst.w	sux
	beq	oetje2

	rts


name:	dc.b	6,"rubber"
name2:	dc.b	6,"RUBBER"
	even
inbuf:	dc.w	160
block:	dc.w	11
current:dc.w	0
track:	dc.w	0

side:	dc.w	0
sect:	dc.w	0
sux:	dc.w	0
cola:	dc.w	0

met:	dc.w	0

filepoints:
	blk.w	2000,0
trackbuffer:
	blk.l	$1000
trackin:blk.l	$580
root:	blk.l	128

file:	dc.l	$0000




sprite1:dc.l	$3000c680

	dc.w $0000,$0000
	dc.w $0000,$0000
	dc.w $0000,$0000
	dc.w $0000,$0000
	dc.w $03FF,$0000
	dc.w $0AFF,$1400
	dc.w $00FE,$0FFF
	dc.w $0296,$03E8
	dc.w $01CF,$03F0
	dc.w $01D4,$01E2
	dc.w $0001,$0001
	dc.w $0007,$0004
	dc.w $0006,$0008
	dc.w $003D,$0020
	dc.w $003F,$0040
	dc.w $01FB,$0000
	dc.w $03D6,$0001
	dc.w $008D,$0023
	dc.w $0E7F,$0840
	dc.w $03BF,$1CFF
	dc.w $1D81,$1FFE
	dc.w $0F62,$1FFD
	dc.w $07C2,$03EB
	dc.w $01F0,$02E0
	dc.w $00C0,$0040
	dc.w $0015,$0006
	dc.w $002F,$0030
	dc.w $003A,$0040
	dc.w $0055,$008A
	dc.w $0030,$0160
	dc.w $01E8,$0280
	dc.w $0351,$0504
	dc.w $0240,$0620
	dc.w $0580,$0600
	dc.w $0100,$0600
	dc.w $0000,$0000
	dc.w $0E80,$0080
	dc.w $1180,$0800
	dc.w $0F80,$1840
	dc.w $17C0,$1C20	
	dc.w $1CE0,$1E10
	dc.w $1F74,$0F0C	
	dc.w $0CBE,$1F81
	dc.w $0A7F,$07C0
	dc.w $042B,$0FF0
	dc.w $024F,$07BF
	dc.w $0117,$02E8
	dc.w $00AD,$0052
	dc.w $000B,$0024
	dc.w $0000,$0000
	dc.w $0000,$0000
	dc.w $00AF,$0030
	dc.w $0CBF,$2F00
	dc.w $03FF,$0FFF
	dc.w $01A1,$02FE
	dc.w $0078,$004F
	dc.w $0003,$0004
	dc.w $0000,$0000
	dc.w $0026,$004A
	dc.w $0088,$0130
	dc.w $0390,$0440
	dc.w $0120,$0880
	dc.w $0300,$0020
	dc.w $0880,$1200
	dc.w $0F00,$0040
	dc.w $19C0,$0440
	dc.w $1FC0,$0400
	dc.w $1F00,$0480
	dc.w $0D80,$0480
	dc.w $0B80,$1400
dc.w $0380,$0E80
dc.w $0B00,$0681
dc.w $08C1,$0600
dc.w $0CC3,$0F40
dc.w $0787,$0340
dc.w $0745,$0303
dc.w $01DC,$030F
dc.w $0191,$019E
dc.w $0000,$0000
dc.w $0600,$0100
dc.w $0BC0,$1040
dc.w $1DC0,$0820
dc.w $1B60,$0E10
dc.w $1CB0,$1F80
dc.w $1A10,$1FC8
dc.w $0998,$0C60
dc.w $0168,$0190
dc.w $0000,$0000
dc.w $006D,$0043
dc.w $0087,$0030
dc.w $006D,$0058
dc.w $003B,$0024
dc.w $0046,$0010
dc.w $057D,$0180
dc.w $07EB,$1000
dc.w $19D7,$1001
dc.w $1522,$18C2
dc.w $1FF0,$1F04
dc.w $1870,$1F88
dc.w $1C00,$1FA0
dc.w $1C00,$1E80
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0BFA,$1006
dc.w $13FF,$1800
dc.w $15FF,$1800
dc.w $1FF0,$1FFF
dc.w $1AAE,$1F50
dc.w $1C5F,$1FA0
dc.w $1A3D,$1FC0
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $03C0,$0800
dc.w $09A0,$0C00
dc.w $0560,$0E00
dc.w $0BE0,$0F00
dc.w $05C0,$0F20
dc.w $09E0,$0E20
dc.w $0ACD,$0602
dc.w $0BC7,$0603
dc.w $0B83,$0E41
dc.w $03C1,$0640
dc.w $0381,$0600
dc.w $0680,$0200
dc.w $09FA,$1206
dc.w $11FF,$1900
dc.w $15FF,$1900
dc.w $1F03,$1FFC
dc.w $105D,$1FA0
dc.w $1C2F,$1FD0
dc.w $1A57,$1FA8
dc.w $0101,$0180
dc.w $0183,$0080
dc.w $0003,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000


sprite2:dc.l	$3000c680

dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $1FFF,$0000
dc.w $11FF,$0000
dc.w $0800,$0000
dc.w $0401,$0000
dc.w $0000,$0000
dc.w $000E,$0000
dc.w $0001,$0000
dc.w $0007,$0000
dc.w $000F,$0010
dc.w $003E,$0000
dc.w $0079,$0080
dc.w $00F7,$0100
dc.w $01EF,$0200
dc.w $03DF,$0400
dc.w $099F,$0000
dc.w $1000,$0000
dc.w $0000,$0000
dc.w $1000,$0000
dc.w $001B,$0000
dc.w $0210,$0000
dc.w $00A0,$0000
dc.w $0007,$0018
dc.w $003F,$0000
dc.w $007F,$0000
dc.w $00E0,$0000
dc.w $018F,$0000
dc.w $023F,$0000
dc.w $04FC,$0003
dc.w $01E0,$0010
dc.w $0080,$0040
dc.w $0100,$0080
dc.w $0000,$0000
dc.w $1780,$0000
dc.w $0780,$0040
dc.w $03C0,$0000
dc.w $01E0,$0000
dc.w $01F0,$0000
dc.w $00FC,$0002
dc.w $107F,$0000
dc.w $001F,$0000
dc.w $0807,$0000
dc.w $0400,$0000
dc.w $0200,$0000
dc.w $0080,$0100
dc.w $0030,$0040
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $003F,$00C0
dc.w $307F,$0000
dc.w $0800,$0000
dc.w $0200,$0000
dc.w $0060,$0000
dc.w $0006,$0000
dc.w $0000,$0000
dc.w $0072,$0080
dc.w $01C0,$0204
dc.w $0720,$0008
dc.w $0E40,$0010
dc.w $0CE0,$1000
dc.w $15C0,$0020
dc.w $11C0,$0000
dc.w $03C0,$0000
dc.w $0380,$0040
dc.w $0380,$0000
dc.w $1380,$0000
dc.w $1100,$0080
dc.w $0180,$1001
dc.w $0181,$0000
dc.w $0981,$0042
dc.w $08C2,$0000
dc.w $00C4,$0000
dc.w $04C8,$0000
dc.w $0040,$0000
dc.w $0001,$0000
dc.w $0000,$0000
dc.w $0F00,$1080
dc.w $17C0,$0000
dc.w $13E0,$0000
dc.w $00F0,$0000
dc.w $0070,$0008
dc.w $0038,$0000
dc.w $0E18,$0000
dc.w $01C8,$0000
dc.w $0000,$0000
dc.w $007F,$0000
dc.w $00CF,$0100
dc.w $0063,$0000
dc.w $0030,$0000
dc.w $001B,$0060
dc.w $01FB,$0600
dc.w $0FF7,$0000
dc.w $07EF,$0000
dc.w $021E,$0000
dc.w $000C,$0000
dc.w $0008,$0000
dc.w $0060,$0010
dc.w $0180,$0040
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $07FE,$0001
dc.w $07FF,$0000
dc.w $03FF,$0000
dc.w $0000,$0000
dc.w $0001,$0000
dc.w $0000,$0000
dc.w $0002,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $07E0,$0000
dc.w $03E0,$0000
dc.w $00E0,$0000
dc.w $00E0,$0000
dc.w $00E0,$0000
dc.w $00E0,$0000
dc.w $01C9,$0020
dc.w $09C4,$0000
dc.w $09C2,$0000
dc.w $01C0,$0000
dc.w $0181,$0040
dc.w $0180,$0000
dc.w $04FE,$0001
dc.w $06FF,$0000
dc.w $02FF,$0000
dc.w $0000,$0000
dc.w $0002,$0000
dc.w $0000,$0000
dc.w $0002,$0000
dc.w $0200,$0000
dc.w $0102,$0000
dc.w $0081,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000

sprite3:dc.l	$3008c680
dc.w $0000,$0000
dc.w $0001,$0001
dc.w $0003,$0002
dc.w $000B,$000C
dc.w $FFFF,$0000
dc.w $8263,$0000
dc.w $817E,$FFF8
dc.w $803E,$0021
dc.w $5FFC,$1084
dc.w $7FF8,$4308
dc.w $FFE0,$0C20
dc.w $8100,$3080
dc.w $0000,$C200
dc.w $6000,$0800
dc.w $D000,$3000
dc.w $8050,$4060
dc.w $15E0,$0608
dc.w $7FEC,$8004
dc.w $FFDE,$0002
dc.w $A5FE,$FA01
dc.w $A8B7,$0000
dc.w $F449,$0000
dc.w $BA15,$0003
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $FA00,$0600
dc.w $FF40,$00C0
dc.w $67C0,$0020
dc.w $01E0,$FC10
dc.w $4BF0,$0708
dc.w $24FC,$0184
dc.w $8BF8,$2044
dc.w $0F5E,$08A2
dc.w $02BC,$0172
dc.w $015E,$00F0
dc.w $002E,$00F8
dc.w $005E,$0078
dc.w $001E,$005C
dc.w $0000,$0000
dc.w $0030,$0028
dc.w $00B0,$00C0
dc.w $0AD8,$0300
dc.w $97A8,$9828
dc.w $FE40,$00C0
dc.w $F590,$0310
dc.w $FA00,$FC20
dc.w $D500,$0040
dc.w $EB00,$0000
dc.w $BC06,$0403
dc.w $015F,$0060
dc.w $AFFE,$3000
dc.w $FFFE,$0000
dc.w $FF4F,$0000
dc.w $E071,$FF80
dc.w $7901,$8000
dc.w $B400,$4000
dc.w $7A81,$8001
dc.w $0000,$0000
dc.w $1A00,$0600
dc.w $2FA0,$0060
dc.w $1FF8,$0008
dc.w $27FC,$0000
dc.w $135E,$0780
dc.w $42AF,$45F0
dc.w $0273,$45F8
dc.w $6F37,$00F8
dc.w $533B,$083C
dc.w $B017,$883C
dc.w $4C27,$911C
dc.w $A617,$100C
dc.w $6C7B,$1244
dc.w $D81B,$2444
dc.w $EC03,$2408
dc.w $C04D,$4881
dc.w $E0E3,$9110
dc.w $C1D4,$2220
dc.w $0DA4,$0044
dc.w $73F8,$4D80
dc.w $6740,$BE90
dc.w $78A0,$1F20
dc.w $1A00,$0480
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0050,$001F
dc.w $AAFC,$6301
dc.w $FFFB,$0001
dc.w $CFFA,$0000
dc.w $22F6,$1C00
dc.w $97E4,$03F2
dc.w $EEB6,$8142
dc.w $1564,$2280
dc.w $12D0,$1904
dc.w $0164,$0184
dc.w $0000,$0000
dc.w $00A8,$00D8
dc.w $063C,$0404
dc.w $06B8,$2FE4
dc.w $071E,$01E2
dc.w $0174,$0092
dc.w $00BE,$0040
dc.w $003E,$0008
dc.w $0062,$0008
dc.w $0016,$0000
dc.w $000A,$0024
dc.w $0002,$0004
dc.w $0002,$0015
dc.w $0012,$0014
dc.w $0151,$0066
dc.w $97F6,$1801
dc.w $FEBD,$0004
dc.w $EBFE,$0004
dc.w $7C94,$800E
dc.w $A006,$004E
dc.w $D408,$0204
dc.w $300C,$6000
dc.w $0008,$0008
dc.w $0004,$0000
dc.w $00B0,$00C8
dc.w $0D78,$0804
dc.w $005E,$2FC2
dc.w $082C,$0BE2
dc.w $0216,$02F0
dc.w $000E,$0070
dc.w $000A,$0038
dc.w $0066,$0058
dc.w $8006,$401C
dc.w $6026,$003C
dc.w $2016,$900C
dc.w $F002,$800C
dc.w $3013,$C01C
dc.w $32BA,$C0C4
dc.w $BFF5,$4008
dc.w $3F5F,$4021
dc.w $A8BE,$4700
dc.w $F2FC,$0002
dc.w $450E,$0052
dc.w $8410,$0204
dc.w $7818,$0820
dc.w $8020,$2000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000

sprite4:dc.l	$3008c680

dc.w $0000,$0000
dc.w $0001,$0000
dc.w $0003,$0000
dc.w $000F,$0010
dc.w $FFFE,$0000
dc.w $FD9C,$0000
dc.w $0001,$0000
dc.w $7FC3,$0000
dc.w $DE04,$2000
dc.w $7818,$0000
dc.w $E060,$0000
dc.w $CE80,$0040
dc.w $3E00,$0100
dc.w $F800,$0400
dc.w $F000,$0000
dc.w $C070,$2080
dc.w $07F8,$9800
dc.w $FFFC,$0000
dc.w $FFFE,$0000
dc.w $000F,$0000
dc.w $57FF,$0000
dc.w $0BFF,$0000
dc.w $C5FF,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $FE00,$0100
dc.w $FFC0,$0000
dc.w $9FE0,$0000
dc.w $03F0,$0000
dc.w $B0F8,$0000
dc.w $DA7C,$0000
dc.w $343C,$C002
dc.w $0C1E,$0000
dc.w $020E,$0000
dc.w $0006,$0000
dc.w $0006,$0000
dc.w $0082,$0000
dc.w $0062,$0000
dc.w $0000,$0000
dc.w $0038,$0000
dc.w $00F8,$0000
dc.w $03E8,$0C00
dc.w $9FD8,$6000
dc.w $FF30,$0008
dc.w $F870,$0000
dc.w $01E0,$0000
dc.w $2AC0,$0000
dc.w $1500,$0080
dc.w $4C03,$0004
dc.w $007F,$0180
dc.w $3FFF,$C000
dc.w $FFFF,$0000
dc.w $FFF1,$0000
dc.w $000F,$0000
dc.w $06FF,$0000
dc.w $0BFF,$0000
dc.w $057F,$0000
dc.w $0000,$0000
dc.w $3E00,$0100
dc.w $1FE0,$0000
dc.w $2FF8,$0000
dc.w $1FFC,$0002
dc.w $283E,$4001
dc.w $780F,$0000
dc.w $7807,$0000
dc.w $5003,$0000
dc.w $2403,$0000
dc.w $C703,$0000
dc.w $A723,$0000
dc.w $CE23,$0100
dc.w $8E43,$0000
dc.w $0C63,$0200
dc.w $1C77,$0080
dc.w $38F7,$0000
dc.w $11EE,$0001
dc.w $23CC,$0402
dc.w $8B9C,$1000
dc.w $6008,$0000
dc.w $8030,$0000
dc.w $4060,$0000
dc.w $1180,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $001F,$8060
dc.w $E3FF,$1C00
dc.w $FFFF,$0000
dc.w $3FFE,$0001
dc.w $C1FE,$0000
dc.w $E80E,$0000
dc.w $D00E,$0000
dc.w $281C,$4000
dc.w $1C2C,$0000
dc.w $01DC,$0200
dc.w $0000,$0000
dc.w $00F8,$0000
dc.w $07FC,$0800
dc.w $301C,$0000
dc.w $040E,$0800
dc.w $000E,$0000
dc.w $0006,$0000
dc.w $0046,$0000
dc.w $0056,$0000
dc.w $002A,$0000
dc.w $0032,$0000
dc.w $001A,$0020
dc.w $001B,$0000
dc.w $001B,$0000
dc.w $0078,$0180
dc.w $1FF8,$A000
dc.w $FFC3,$0000
dc.w $FC32,$0000
dc.w $03F2,$0000
dc.w $5FC2,$0020
dc.w $2E00,$0102
dc.w $E008,$1000
dc.w $000C,$0000
dc.w $0004,$0000
dc.w $00F8,$0100
dc.w $0EFC,$0000
dc.w $303E,$0000
dc.w $0C1E,$0000
dc.w $030E,$0000
dc.w $0086,$0000
dc.w $0046,$0000
dc.w $0042,$0000
dc.w $C022,$0000
dc.w $E022,$0000
dc.w $7002,$0000
dc.w $3012,$0000
dc.w $3013,$0000
dc.w $30FB,$0300
dc.w $3FF3,$0000
dc.w $BF8F,$0000
dc.w $B07E,$0000
dc.w $0FFE,$0000
dc.w $BFD6,$0020
dc.w $7E1C,$0000
dc.w $9828,$0004
dc.w $6030,$0008
dc.w $8000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000

sprite5:dc.l	$3010c680


dc.w $0000,$0000
dc.w $C000,$6000
dc.w $E000,$0000
dc.w $E000,$0000
dc.w $E000,$2000
dc.w $6800,$1800
dc.w $B000,$1000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $8000,$0000
dc.w $E000,$4000
dc.w $D000,$3000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $8000,$0000
dc.w $4000,$0000
dc.w $8000,$4000
dc.w $C000,$4000
dc.w $8000,$0000
dc.w $8000,$0000
dc.w $8000,$8000
dc.w $8000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $8000,$8000
dc.w $0000,$8000
dc.w $8000,$0000
dc.w $8000,$0000
dc.w $8000,$0000
dc.w $0000,$8000
dc.w $8000,$8000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$4000
dc.w $A000,$0000
dc.w $C000,$0000
dc.w $0000,$C000
dc.w $8000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $2000,$2000
dc.w $4000,$6000
dc.w $6000,$8000
dc.w $6000,$2000
dc.w $C000,$4000
dc.w $8000,$8000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000

sprite6:dc.l	$3010c680

dc.w $0000,$0000
dc.w $A000,$0000
dc.w $8000,$0000
dc.w $2000,$0000
dc.w $2000,$0000
dc.w $F800,$0000
dc.w $7000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$8000
dc.w $C000,$2000
dc.w $F000,$0000
dc.w $0000,$8000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $C000,$0000
dc.w $C000,$0000
dc.w $C000,$0000
dc.w $C000,$0000
dc.w $8000,$4000
dc.w $8000,$0000
dc.w $8000,$0000
dc.w $0000,$8000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$8000
dc.w $8000,$0000
dc.w $8000,$0000
dc.w $8000,$0000
dc.w $8000,$0000
dc.w $8000,$0000
dc.w $8000,$0000
dc.w $8000,$0000
dc.w $0000,$8000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $6000,$0000
dc.w $C000,$0000
dc.w $0000,$2000
dc.w $4000,$0000
dc.w $8000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $2000,$0000
dc.w $6000,$0000
dc.w $E000,$0000
dc.w $E000,$0000
dc.w $C000,$0000
dc.w $8000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000
dc.w $0000,$0000

	
initmusic:
	move.w	#$7fff,$dff09a
	move.l	#inter,$6c
	move.l	#inter7,$78
	move.l	#pr_data,pr_module
	bsr.w	pr_init
	move.w	#$e020,$dff09a
	rts	



inter:	movem.l	d0-d7/a0-a6,-(sp)
	bsr.w	pr_music
	movem.l	(sp)+,d0-d7/a0-a6
	move.w	#$20,$dff09c
	rte
	

inter7:	move.w	#$2000,$dff09c
	rte
	




*****************************************
*					*
* PRORUNNER V2.0			*
* --------------			*
* CODED BY COSMOS OF SANITY IN 1992	*
*					*
*****************************************
*					*
* Supporting the following effects:	*
*					*
*	- Running with 68010/20/30/40	*
*	- Using VBR-register		*
*	- Packed/Normal PT-Moduleformat	*
*	- Fade Sound in/out		*
*	- Variable Musicfadespeed	*
*	- Variable Interrupt-timing	*
*	- Finetune			*
*	- Normal play or Arpeggio	*
*	- Slide Frequenz up		*
*	- Slide	Frequenz down		*
*	- Tone Portamento		*
*	- Vibrato			*
*	- Tone Portamento+Volume Slide	*
*	- Vibrato + Volume Slide	*
*	- Tremolo			*
*	- Set SampleOffset		*
*	- Volume Slide			*
*	- Position Jump			*
*	- Set Volume			*
*	- Pattern Break			*
*	- Set Speed			*
* - E-Commands:				*
*	- Set Filter			*
*	- Fine Slide Up			*
*	- Fine Slide Down		*
*	- Glissando Control		*
*	- Set Vibrato Waveform		*
*	- Set Finetune			*
*	- Set Loop / Jump to Loop	*
*	- Set Tremolo Waveform		*
*	- Retrig Note			*
*	- Fine VolumeSlide Up		*
*	- Fine VolumeSlide Down		*
*	- NoteCut			*
*	- NoteDelay			*
*	- PatternDelay			*
*	- FunkRepeat			*
*					*
*****************************************

YES=1
NO=0
INCLUDEFADINGROUTINE=YES
PACKEDSONGFORMAT=NO
FADINGSTEPS=6	; ( 0< FADINGSTEPS <9 )
MAXVOLUME=2^FADINGSTEPS
INTERRUPTTIME=$180

SAMPLELENGTHOFFSET=4
SAMPLEVOLUMEOFFSET=6
SAMPLEREPEATPOINTOFFSET=8
SAMPLEWITHLOOP=12
SAMPLEREPEATLENGTHOFFSET=14
SAMPLEFINETUNEOFFSET=16

* Init-Routine *******************************************************

pr_init:
	lea	pr_framecounter(pc),a6
	move.w	#$7fff,pr_oldledvalue-pr_framecounter(a6)
	move.l	pr_module(pc),a0
	cmp.l	#0,a0
	bne.s	pr_init1
	rts
pr_init1:
	IFEQ	PACKEDSONGFORMAT-YES
	cmp.l	#'SNT!',(a0)
	beq.s	pr_init2
	ELSE
	cmp.l	#'M.K.',1080(a0)
	beq.s	pr_init2
	cmp.l	#'SNT.',1080(a0)
	beq.s	pr_init2
	ENDC
	rts
pr_init2:
	IFEQ	PACKEDSONGFORMAT-YES
	lea	8(a0),a1
	ELSE
	lea	20(a0),a1
	ENDC
	lea	pr_Sampleinfos(pc),a2
	moveq.l	#32,d7
	moveq	#30,d0
pr_init3:
	IFNE	PACKEDSONGFORMAT-YES
	lea	22(a1),a1		; Samplenamen überspringen
	ENDC
	move.w	(a1)+,SAMPLELENGTHOFFSET(a2)	; Samplelength in Words
	lea	pr_periods(pc),a3
	moveq	#$f,d2
	and.b	(a1)+,d2		; Finetuning
	mulu.w	#36*2,d2
	add.l	d2,a3
	move.l	a3,SAMPLEFINETUNEOFFSET(a2)
	moveq	#0,d1
	move.b	(a1)+,d1
	move.w	d1,SAMPLEVOLUMEOFFSET(a2)	; Volume
	moveq.l	#0,d1
	move.w	(a1)+,d1		; Repeatpoint in Bytes
	add.l	d1,d1
	move.l	d1,SAMPLEREPEATPOINTOFFSET(a2)
	move.w	(a1)+,d1
	clr.w	SAMPLEWITHLOOP(a2)
	cmp.w	#1,d1
	bls.s	pr_init3_2
	addq.w	#1,SAMPLEWITHLOOP(a2)
pr_init3_2:
	move.w	d1,SAMPLEREPEATLENGTHOFFSET(a2)	; Repeatlength
	add.l	d7,a2
	dbf	d0,pr_init3

	moveq	#0,d0
	IFEQ	PACKEDSONGFORMAT-YES
	move.b	256(a0),d0
	ELSE
	move.b	950(a0),d0		; Number of patterns
	ENDC
	subq.w	#1,d0
	move.w	d0,pr_highestpattern-pr_framecounter(a6)
	moveq.l	#0,d1
	lea	pr_Patternpositions(pc),a3
	IFEQ	PACKEDSONGFORMAT-YES
	lea	258(a0),a1		; 1.Patternpos
	lea	770(a0),a2		; 1.Patterndata
	lea	642(a0),a4		; 1.Patternoffset
pr_init4:
	moveq.l	#0,d2
	move.b	(a1)+,d2
	add.w	d2,d2
	move.w	(a4,d2.w),d2
	add.l	a2,d2
	move.l	d2,(a3)+
	dbf	d0,pr_init4
	ELSE
	lea	952(a0),a1		; 1. Patternpos
	lea	1084(a0),a2		; 1. Patterndata
pr_init4:
	move.b	(a1)+,d2		; x. Patternpos
	moveq.l	#0,d3
	move.b	d2,d3
	mulu.w	#1024,d3
	add.l	a2,d3
	move.l	d3,(a3)+
	dbf	d0,pr_init4
	ENDC

	IFEQ	PACKEDSONGFORMAT-YES
	move.l	4(a0),d2
	add.l	a0,d2
	ELSE
	lea	952(a0),a1
	moveq.l	#0,d1
	moveq	#127,d0
pr_init4_1:
	move.b	(a1)+,d2
	cmp.b	d1,d2			; Highest Pattern ?
	bls.s	pr_init4_2
	move.b	d2,d1
pr_init4_2:
	dbf	d0,pr_init4_1
	addq.w	#1,d1
	move.l	a0,d2
	mulu.w	#1024,d1		; Highest Pattern * 1024 Bytes
	add.l	#1084,d2
	add.l	d1,d2
	ENDC
	lea	pr_Sampleinfos(pc),a3
	lea	pr_Sampleinfos+SAMPLELENGTHOFFSET(pc),a2
	moveq.l	#32,d7
	move.l	d2,(a3)
	moveq	#29,d0
pr_init4_3:
	move.l	(a3),d1
	add.l	d7,a3
	moveq.l	#0,d2
	move.w	(a2),d2
	add.l	d7,a2
	add.l	d2,d2
	add.l	d2,d1
	move.l	d1,(a3)
	dbf	d0,pr_init4_3

	lea	pr_Sampleinfos(pc),a2
	lea	pr_Sampleinfos+SAMPLEREPEATPOINTOFFSET(pc),a3
	moveq.l	#32,d7
	moveq	#30,d0
pr_init4_4:
	move.l	(a2),d1
	add.l	d1,(a3)
	add.l	d7,a2
	add.l	d7,a3
	dbf	d0,pr_init4_4
	
	IFNE	PACKEDSONGFORMAT-YES
	
	cmp.l	#'SNT.',1080(a0)
	beq.s	pr_init7
	
	lea	1084(a0),a1
	move.l	pr_Sampleinfos(pc),a2
	move.b	#$f0,d6
	move.w	#$fff,d7
pr_init5:
	move.b	(a1),d0
	move.b	2(a1),d1
	move.w	(a1),d2
	and.w	d7,2(a1)
	and.w	d7,d2
	
	and.b	d6,d0
	lsr.b	#4,d1
	or.b	d1,d0
	move.b	d0,(a1)
	
	tst.w	d2
	beq.s	pr_init5_3
	lea	pr_periods(pc),a4
	moveq	#0,d1
pr_init5_2:
	addq.w	#1,d1
	cmp.w	(a4)+,d2
	bne.s	pr_init5_2
	move.b	d1,1(a1)
pr_init5_3:
	cmp.b	#$d,2(a1)
	bne.s	pr_init5_4

	moveq	#0,d1
	move.b	3(a1),d1
	moveq	#$f,d2
	and.w	d1,d2
	lsr.w	#4,d1
	mulu.w	#10,d1
	add.w	d2,d1
	cmp.b	#63,d1
	bls.s	pr_init5_3_2
	moveq	#63,d1
pr_init5_3_2:
	move.b	d1,3(a1)
pr_init5_4:
	addq.l	#4,a1
	cmp.l	a2,a1
	blt.s	pr_init5	

	move.l	#'SNT.',1080(a0)

	ENDC
	
pr_init7:
	lea	pr_Arpeggiofastlist(pc),a2
	lea	pr_Arpeggiofastlistperiods(pc),a1
	lea	35*2(a1),a1		; to the end of list...
	moveq	#0,d0
	moveq	#35,d1
	move.w	#999,d2
	moveq	#0,d6
pr_init8:
	move.w	-(a1),d7
	addq.w	#1,d6
pr_init8_2:
	cmp.w	d7,d0
	blt.s	pr_init8_4
	subq.w	#1,d1
	tst.b	d1
	bne.s	pr_init8
pr_init8_3:
	move.b	d1,(a2)+
	dbf	d2,pr_init8_3
	bra.s	pr_init8_5	
pr_init8_4:
	move.b	d1,(a2)+
	addq.w	#1,d0
	dbf	d2,pr_init8_2
pr_init8_5:

	lea	pr_Channel0(pc),a1
	move.w	#1,pr_Channel1-pr_Channel0(a1)
	move.w	#1,pr_Channel2-pr_Channel0(a1)
	move.w	#1,pr_Channel3-pr_Channel0(a1)
	move.w	#1,(a1)+
	moveq	#(pr_Channel1-pr_Channel0)/2-2,d0
pr_init9_2:
	clr.w	pr_Channel1-pr_Channel0(a1)
	clr.w	pr_Channel2-pr_Channel0(a1)
	clr.w	pr_Channel3-pr_Channel0(a1)
	clr.w	(a1)+
	dbf	d0,pr_init9_2

	lea	pr_fastperiodlist(pc),a1
	lea	pr_periods(pc),a2
	move.l	a2,(a1)
	moveq.l	#36*2,d1
	moveq	#14,d0
pr_init9_3:
	move.l	(a1)+,d2
	add.l	d1,d2
	move.l	d2,(a1)
	dbf	d0,pr_init9_3
		
	lea	pr_Arpeggiofastdivisionlist(pc),a1
	moveq	#0,d1
	move.w	#$ff,d0
pr_init9_4:
	move.b	d1,(a1)+
	subq.b	#1,d1
	bpl.s	pr_init9_4_2
	moveq	#2,d1
pr_init9_4_2:
	dbf	d0,pr_init9_4
	
	move.w	#6,pr_speed-pr_framecounter(a6)
	move.w	pr_speed(pc),(a6)
	clr.w	pr_Patternct-pr_framecounter(a6)
	move.w	pr_highestpattern(pc),d0
	move.w	pr_startposition(pc),d1
	blt.s	pr_init9_5
	cmp.w	d0,d1
	bls.s	pr_init9_5_2
pr_init9_5:
	clr.w	pr_startposition-pr_framecounter(a6)
pr_init9_5_2:
	move.w	pr_startposition(pc),pr_currentpattern-pr_framecounter(a6)
	
	lea	pr_Patternpositions(pc),a3
	move.l	a3,d0
	moveq.l	#0,d1
	move.w	pr_startposition(pc),d1
	lsl.l	#2,d1
	add.l	d1,d0
	move.l	d0,pr_Patternpt-pr_framecounter(a6)
	move.l	pr_Patternpt(pc),a5
	move.l	(a5),pr_Currentposition-pr_framecounter(a6)
	
	lea	$dff000,a5
	lea	$bfd000,a0
	move.w	#$2000,d0
	move.w	d0,$9a(a5)
	move.w	d0,$9c(a5)
	
	lea	pr_int(pc),a1
	move.l	pr_Vectorbasept(pc),a3
	move.l	a1,$78(a3)

	move.b	#$7f,$d00(a0)
	move.b	#$08,$e00(a0)
	move.w	#INTERRUPTTIME,d0
	move.b	d0,$400(a0)
	lsr.w	#8,d0
	move.b	d0,$500(a0)
pr_init10:
	btst	#0,$bfdd00
	beq.s	pr_init10
	move.b	#$81,$d00(a0)
	move.w	#$2000,$9c(a5)
	move.w	#$a000,$9a(a5)
	move.w	#$f,$96(a5)
	move.w	#$8000,pr_dmacon-pr_framecounter(a6)
	clr.w	$a8(a5)
	clr.w	$b8(a5)
	clr.w	$c8(a5)
	clr.w	$d8(a5)
	moveq	#0,d0
	move.b	$bfe001,d0
	move.w	d0,pr_oldledvalue-pr_framecounter(a6)
	bset	#1,$bfe001
	rts

* End-Routine *********************************************************

pr_end:
	lea	$dff000,a5
	move.w	#$f,$96(a5)
	clr.w	$a8(a5)
	clr.w	$b8(a5)
	clr.w	$c8(a5)
	clr.w	$d8(a5)
	move.w	#$2000,$9a(a5)
	move.w	pr_oldledvalue(pc),d0
	cmp.w	#$7fff,d0
	beq.s	pr_end3
	btst	#1,d0
	beq.s	pr_end2
	bset	#1,$bfe001
	rts
pr_end2:
	bclr	#1,$bfe001
pr_end3:
	rts

* Music-Fading ********************************************************

	IFEQ	INCLUDEFADINGROUTINE-YES
pr_fademusic:	macro
	lea	pr_musicfadect(pc),a0
	move.w	pr_musicfadedirection(pc),d0
	add.w	d0,(a0)
	cmp.w	#MAXVOLUME,(a0)
	bls.s	pr_fademusicend
	bgt.s	pr_fademusictoohigh
	clr.w	(a0)
	clr.w	pr_musicfadedirection-pr_musicfadect(a0)
	rts
pr_fademusictoohigh:
	move.w	#MAXVOLUME,(a0)
	clr.w	pr_musicfadedirection-pr_musicfadect(a0)
pr_fademusicend:
	endm

pr_musicfadect:		dc.w	MAXVOLUME
pr_musicfadedirection:	dc.w	0
	ENDC
	
* MACROS **************************************************************

pr_playchannel:	macro				; do not change: d7,a2-a6
		moveq	#0,d2
		moveq	#0,d0
		moveq	#0,d1
		IFEQ	PACKEDSONGFORMAT-YES
		move.b	(a6),d6
		bpl.s	.pr_playchannel1
		btst	#6,d6
		bne.s	.pr_playchannel0
		subq.l	#2,a6
		clr.w	4(a4)
		bra.s	.pr_playchannelend
.pr_playchannel0:		
		subq.l	#2,a6
		move.b	56(a4),d0
		move.b	57(a4),d1
		move.b	58(a4),d2
		move.w	58(a4),4(a4)
		bra.s	.pr_playchanneljump		
.pr_playchannel1:
		moveq	#$f,d0
		and.b	1(a6),d0
		move.b	d0,4(a4)
		move.b	d0,d2
		move.b	2(a6),5(a4)
		move.w	4(a4),58(a4)
		
		moveq	#1,d0
		and.b	(a6),d0
		move.b	1(a6),d1
		lsr.b	#3,d1
		bclr	#0,d1
		or.b	d1,d0
		move.b	d0,56(a4)		

		move.b	(a6),d1
		lsr.b	#1,d1
		move.b	d1,57(a4)
		ELSE
		move.w	2(a6),4(a4)
		move.b	2(a6),d2
		move.b	(a6),d0
		move.b	1(a6),d1
		ENDC
.pr_playchanneljump:
		add.w	d2,d2
		lea	pr_playchannellist(pc),a0
		move.w	(a0,d2.w),d2
		jsr	(a0,d2.w)
.pr_playchannelend:
		IFEQ	PACKEDSONGFORMAT-YES
		addq.l	#3,a6
		ELSE
		addq.l	#4,a6
		ENDC
		endm

pr_checkchannel:	macro			; do not change: d7,a2-a6
		bsr.w	pr_checkfunkrepeat
		moveq	#0,d0
		move.b	4(a4),d0
		add.b	d0,d0
		lea	pr_Effectchecklist(pc),a0
		move.w	(a0,d0.w),d0
		jsr	(a0,d0.w)
		endm
		
pr_copyplayvalues:	macro
		tst.w	pr_commandnotedelay-pr_framecounter(a2)
		bne.s	.pr_copyplayvalues2
		move.w	2(a4),6(a3)
.pr_copyplayvalues2:
		IFEQ	INCLUDEFADINGROUTINE-YES
		move.w	12(a4),d0
		mulu.w	pr_musicfadect-pr_framecounter(a2),d0
 		lsr.l	#FADINGSTEPS,d0
		move.w	d0,8(a3)
		ELSE
		move.w	12(a4),8(a3)
		ENDC
		endm

* Music-Routine *******************************************************

pr_music:
	IFEQ	INCLUDEFADINGROUTINE-YES
	pr_fademusic
	ENDC
	lea	$dff000,a5

	lea	pr_framecounter(pc),a2
	subq.w	#1,(a2)
	beq.s	pr_music2
	bra.w	pr_checkeffects
pr_music2:
	cmp.b	#1,pr_patterndelaytime-pr_framecounter+1(a2)
	blt.s	pr_music2_2
	bsr.w	pr_checkeffects
	bra.w	pr_music2_9
pr_music2_2:
	move.l	pr_Currentposition(pc),a6
	lea	pr_Channel0(pc),a4
	lea	$a0(a5),a3
	moveq	#1,d7
	pr_playchannel
	pr_copyplayvalues
pr_music2_3:	
	lea	pr_Channel1(pc),a4
	lea	$b0(a5),a3
	moveq	#2,d7
	pr_playchannel
	pr_copyplayvalues
pr_music2_4:
	lea	pr_Channel2(pc),a4
	lea	$c0(a5),a3
	moveq	#4,d7
	pr_playchannel
	pr_copyplayvalues
pr_music2_5:
	lea	pr_Channel3(pc),a4
	lea	$d0(a5),a3
	moveq	#8,d7
	pr_playchannel
	pr_copyplayvalues
	
	lea	pr_int(pc),a0
	move.l	pr_Vectorbasept(pc),a1
	move.l	a0,$78(a1)
	move.b	#$19,$bfde00

pr_music2_9:
	move.w	pr_speed(pc),(a2)
	tst.w	pr_patternhasbeenbreaked-pr_framecounter(a2)
	bne.s	pr_music3
	tst.w	pr_patterndelaytime-pr_framecounter(a2)
	beq.s	pr_music3_1
	subq.w	#1,pr_patterndelaytime-pr_framecounter(a2)
	beq.s	pr_music3_1
	bra.s	pr_nonextpattern
pr_music3:
	clr.w	pr_patternhasbeenbreaked-pr_framecounter(a2)
	tst.w	pr_patterndelaytime-pr_framecounter(a2)
	beq.s	pr_music3_1
	subq.w	#1,pr_patterndelaytime-pr_framecounter(a2)
pr_music3_1:
	lea	pr_Patternct(pc),a1
	tst.w	pr_dontcalcnewposition-pr_framecounter(a2)
	bne.s	pr_music3_2
	move.l	a6,pr_Currentposition-pr_framecounter(a2)
	addq.w	#1,(a1)
pr_music3_2:
	clr.w	pr_dontcalcnewposition-pr_framecounter(a2)
	moveq.l	#64,d1
	cmp.w	(a1),d1
	bgt.s	pr_nonextpattern
	sub.w	d1,(a1)
	lea	pr_currentpattern(pc),a0
	move.w	(a1),d1
	beq.s	pr_music3_3
	IFEQ	PACKEDSONGFORMAT-YES
	move.l	pr_module(pc),a1
	lea	386(a1),a1
	move.w	(a0),d1
	add.w	d1,d1
	move.w	(a1,d1.w),d1
	ELSE
	lsl.w	#4,d1
	ENDC
pr_music3_3:
	addq.l	#4,pr_Patternpt-pr_framecounter(a2)
	addq.w	#1,(a0)
	move.w	(a0),d0
	cmp.w	pr_highestpattern-pr_framecounter(a2),d0
	bls.s	pr_nohighestpattern
	lea	pr_Patternpositions(pc),a1
	move.l	a1,pr_Patternpt-pr_framecounter(a2)
	clr.w	(a0)
pr_nohighestpattern:
	move.l	pr_Patternpt-pr_framecounter(a2),a6
	move.l	(a6),d0
	add.l	d1,d0
	move.l	d0,pr_Currentposition-pr_framecounter(a2)
pr_nonextpattern:
	rts

	
pr_int:
	tst.b	$bfdd00
	move.b	#$19,$bfde00
	move.w	pr_dmacon(pc),$dff096
	move.w	#$2000,$dff09c
	move.l	a0,-(sp)
	move.l	pr_Vectorbasept(pc),a0
	add.l	#pr_int2-pr_int,$78(a0)
	move.l	(sp)+,a0
	rte

pr_int2:
	tst.b	$bfdd00
	movem.l	a5-a6,-(sp)
	lea	$dff000,a5
	lea	pr_Channel0+6(pc),a6
	move.l	(a6),$a0(a5)
	move.w	4(a6),$a4(a5)
	move.l	pr_Channel1-pr_Channel0(a6),$b0(a5)
	move.w	4+pr_Channel1-pr_Channel0(a6),$b4(a5)
	move.l	pr_Channel2-pr_Channel0(a6),$c0(a5)
	move.w	4+pr_Channel2-pr_Channel0(a6),$c4(a5)
	move.l	pr_Channel3-pr_Channel0(a6),$d0(a5)
	move.w	4+pr_Channel3-pr_Channel0(a6),$d4(a5)
	move.w	#$2000,$9c(a5)
	move.l	pr_Vectorbasept(pc),a6
	move.l	pr_old78(pc),$78(a6)
	movem.l	(sp)+,a5-a6
	rte
		
pr_playchannellist:
	dc.w	pr_playnormalchannel-pr_playchannellist		; 0
	dc.w	pr_playnormalchannel-pr_playchannellist		; 1
	dc.w	pr_playnormalchannel-pr_playchannellist		; 2
	dc.w	pr_playtpchannel-pr_playchannellist		; 3
	dc.w	pr_playnormalchannel-pr_playchannellist		; 4
	dc.w	pr_playtpchannel-pr_playchannellist		; 5
	dc.w	pr_playnormalchannel-pr_playchannellist		; 6
	dc.w	pr_playnormalchannel-pr_playchannellist		; 7
	dc.w	pr_playnormalchannel-pr_playchannellist		; 8
	dc.w	pr_playsochannel-pr_playchannellist		; 9
	dc.w	pr_playnormalchannel-pr_playchannellist		; A
	dc.w	pr_playnormalchannel-pr_playchannellist		; B
	dc.w	pr_playnormalchannel-pr_playchannellist		; C
	dc.w	pr_playnormalchannel-pr_playchannellist		; D
	dc.w	pr_playnormalchannel-pr_playchannellist		; E
	dc.w	pr_playnormalchannel-pr_playchannellist		; F
	
* KANAL NORMAL SPIELEN ************************************************

pr_playnormalchannel:
	lea	pr_Sampleinfos(pc),a0
	lea	(a0),a1
	lea	SAMPLEFINETUNEOFFSET(a1),a1
	clr.w	pr_commandnotedelay-pr_framecounter(a2)
	moveq	#-1,d4
	lsl.w	#4,d4
	and.w	4(a4),d4
	cmp.w	#$ed0,d4
	bne.s	pr_playnormalsamplenotedelay
	addq.w	#1,pr_commandnotedelay-pr_framecounter(a2)
pr_playnormalsamplenotedelay:
	tst.b	d0
	beq.w	pr_playnormalnonewsample	; Irgendein Sample ?
	move.w	d0,(a4)				; Trage Samplenummer ein
	tst.b	d1
	bne.s	pr_playnormalsample
	subq.b	#1,d0
	lsl.l	#5,d0
	add.l	d0,a0
	addq.l	#6,a0
	move.w	(a0)+,12(a4)
	move.l	(a0)+,d2
	move.l	d2,6(a4)
	tst.w	(a0)+
	beq.s	pr_playnormalchannel2
	move.l	d2,36(a4)
	move.l	d2,40(a4)
pr_playnormalchannel2:
	move.w	(a0)+,10(a4)
	bra.w	pr_playnormalnonewperiod
pr_playnormalsample:
	or.w	d7,pr_dmacon-pr_framecounter(a2)
	tst.w	pr_commandnotedelay-pr_framecounter(a2)
	beq.w	pr_playnormalsamplenoedcom
	subq.b	#1,d0
	lsl.l	#5,d0
	add.l	d0,a0
	move.w	6(a0),12(a4)
	move.l	8(a0),6(a4)
	move.w	14(a0),10(a4)
	bra.s	pr_playnormalnewperiod
pr_playnormalsamplenoedcom:
	move.w	d7,$96(a5)
	subq.b	#1,d0
	lsl.l	#5,d0
	add.l	d0,a0
	move.l	(a0)+,(a3)		; Setze Samplestart
	move.w	(a0)+,4(a3)		; Setze Audiodatenlänge
	move.w	(a0)+,12(a4)		; Setze Samplelautstärke
	move.l	(a0)+,d2
	move.l	d2,6(a4)		; Samplerepeatpoint eintragen
	tst.w	(a0)+
	beq.s	pr_playnormalsample2
	move.l	d2,36(a4)
	move.l	d2,40(a4)
pr_playnormalsample2:
	move.w	(a0)+,10(a4)		; Samplerepeatlength eintragen
	bra.s	pr_playnormalnewperiod
pr_playnormalnonewsample:
	clr.l	14(a4)
	tst.b	d1
	beq.s	pr_playnormalnonewperiod	; Irgend ne neue Frequenz ?
	move.w	(a4),d0			; Alte Samplenummer holen
	or.w	d7,pr_dmacon-pr_framecounter(a2)
	tst.w	pr_commandnotedelay-pr_framecounter(a2)
	bne.s	pr_playnormalnewperiod
	move.w	d7,$96(a5)
pr_playnormalnonewsamplenoedcom:
	subq.b	#1,d0
	lsl.l	#5,d0
	add.l	d0,a0
	move.l	(a0)+,(a3)		; Setze Samplestart
	move.w	(a0)+,4(a3)		; Setze Audiodatenlänge
	addq.l	#2,a0
	move.l	(a0)+,d2
	move.l	d2,6(a4)		; Samplerepeatpoint eintragen
	tst.w	(a0)+
	beq.s	pr_playnormalnonewsample2
	move.l	d2,36(a4)
	move.l	d2,40(a4)
pr_playnormalnonewsample2:
	move.w	(a0)+,10(a4)		; Samplerepeatlength eintragen
pr_playnormalnewperiod:
	subq.b	#1,d1
	add.b	d1,d1
	move.w	(a4),d0
	subq.b	#1,d0
	lsl.w	#5,d0
	move.l	(a1,d0.w),a1
	move.w	(a1,d1.w),2(a4)		; Frequenz eintragen
pr_playnormalnonewperiod:
	bra.w	pr_playeffect

* KANAL MIT OFFSET SPIELEN *********************************************

pr_playsochannel:
	lea	pr_Sampleinfos(pc),a0
	lea	(a0),a1
	lea	SAMPLEFINETUNEOFFSET(a1),a1
	tst.b	d0
	beq.w	pr_playsononewsample	; Irgendein Sample ?
	move.w	d0,(a4)				; Trage Samplenummer ein
	tst.b	d1
	bne.s	pr_playsosample
	subq.b	#1,d0
	lsl.l	#5,d0
	add.l	d0,a0
	addq.l	#6,a0
	move.w	(a0)+,12(a4)
	move.l	(a0)+,d2
	move.l	d2,6(a4)
	tst.w	(a0)+
	beq.s	pr_playsochannel2
	move.l	d2,36(a4)
	move.l	d2,40(a4)
pr_playsochannel2:
	move.w	(a0)+,10(a4)
	bra.w	pr_playsononewperiod
pr_playsosample:
	move.w	d7,$96(a5)
	or.w	d7,pr_dmacon-pr_framecounter(a2)
	moveq.l	#0,d6
	move.b	5(a4),d6
	lsl.w	#7,d6
	subq.b	#1,d0
	lsl.l	#5,d0
	add.l	d0,a0
	move.l	(a0)+,d2
	move.w	(a0)+,d3
	cmp.w	d3,d6
	bge.s	pr_playsosample2
	sub.w	d6,d3
	add.l	d6,d6
	add.l	d6,d2
	move.l	d2,(a3)			; Setze Samplestart
	move.w	d3,4(a3)		; Setze Audiodatenlänge
	move.w	(a0)+,12(a4)		; Setze Samplelautstärke
	move.l	(a0)+,d2
	move.l	d2,6(a4)		; Samplerepeatpoint eintragen
	tst.w	(a0)+
	beq.s	pr_playsosample1
	move.l	d2,36(a4)
	move.l	d2,40(a4)
pr_playsosample1:
	move.w	(a0)+,10(a4)		; Samplerepeatlength eintragen
	bra.w	pr_playsonewperiod
pr_playsosample2:
	move.w	(a0)+,12(a4)
	move.l	(a0),(a3)
	move.w	4(a0),4(a3)
	move.l	(a0)+,d2
	move.l	d2,6(a4)
	tst.w	(a0)+
	beq.s	pr_playsosample4
	move.l	d2,36(a4)
	move.l	d2,40(a4)
pr_playsosample4:
	move.w	(a0)+,10(a4)
	bra.s	pr_playsonewperiod
pr_playsononewsample:
	clr.l	14(a4)
	tst.b	d1
	beq.b	pr_playsononewperiod	; Irgend ne neue Frequenz ?
	move.w	(a4),d0			; Alte Samplenummer holen
	move.w	d7,$96(a5)
	or.w	d7,pr_dmacon-pr_framecounter(a2)
	moveq.l	#0,d6
	move.b	5(a4),d6
	lsl.w	#7,d6
	subq.b	#1,d0
	lsl.l	#5,d0
	add.l	d0,a0
	move.l	(a0)+,d2
	move.w	(a0)+,d3
	cmp.w	d3,d6
	bge.s	pr_playsosample3
	sub.w	d6,d3
	add.l	d6,d6
	add.l	d6,d2
	move.l	d2,(a3)			; Setze Samplestart
	move.w	d3,4(a3)		; Setze Audiodatenlänge
	addq.l	#2,a0
	move.l	(a0)+,d2
	move.l	d2,6(a4)		; Samplerepeatpoint eintragen
	tst.w	(a0)+
	beq.s	pr_playsononewsample2
	move.l	d2,36(a4)
	move.l	d2,40(a4)
pr_playsononewsample2:
	move.w	(a0)+,10(a4)		; Samplerepeatlength eintragen
	bra.s	pr_playsonewperiod
pr_playsosample3:
	addq.l	#2,a0
	move.l	(a0),(a3)
	move.w	4(a0),4(a3)
	move.l	(a0)+,d2
	move.l	d2,6(a4)
	tst.w	(a0)+
	beq.s	pr_playsosample5
	move.l	d2,36(a4)
	move.l	d2,40(a4)
pr_playsosample5:
	move.w	(a0)+,10(a4)
	bra.w	pr_playsonewperiod
pr_playsonewperiod:
	subq.w	#1,d1
	add.b	d1,d1
	move.w	(a4),d0
	subq.b	#1,d0
	lsl.w	#5,d0
	move.l	(a1,d0.w),a1
	move.w	(a1,d1.w),2(a4)		; Frequenz eintragen
pr_playsononewperiod:
	bra.b	pr_playeffect

* Kanal spielen mit TONE PORTAMENTO **********************************

pr_playtpchannel:
	lea	pr_Sampleinfos(pc),a0
	lea	(a0),a1
	lea	SAMPLEFINETUNEOFFSET(a1),a1
	tst.b	d0
	beq.s	pr_playtpnonewsample	; Irgendein Sample ?
	move.w	d0,(a4)			; Trage Samplenummer ein
	subq.b	#1,d0
	lsl.l	#5,d0
	add.l	d0,a0
	addq.l	#6,a0
	move.w	(a0)+,12(a4)		; Lautstärke eintragen
	move.l	(a0)+,d2
	move.l	d2,6(a4)		; Repeatpoint eintragen
	tst.w	(a0)+
	beq.s	pr_playtpchannel2
	move.l	d2,36(a4)
	move.l	d2,40(a4)
pr_playtpchannel2:
	move.w	(a0)+,10(a4)		; Repeatlength eintragen
pr_playtpnonewsample:
	tst.b	d1
	beq.s	pr_playtpnonewperiod	; Irgend ne neue Frequenz ?
pr_playtpnewperiod:
	move.w	2(a4),14(a4)
	subq.w	#1,d1
	add.b	d1,d1
	move.w	(a4),d0
	subq.b	#1,d0
	lsl.w	#5,d0
	move.l	(a1,d0.w),a1
	move.w	(a1,d1.w),d2
	move.w	d2,16(a4)		; Frequenz eintragen
	bra.s	pr_playtpallowed
pr_playtpnonewperiod:
	tst.w	16(a4)
	bne.s	pr_playtpallowed
	clr.w	14(a4)
	clr.l	26(a4)
pr_playtpallowed:
	bra.w	pr_playeffect

pr_playeffect:
	bsr.w	pr_checkfunkrepeat
	moveq	#0,d0
	move.b	4(a4),d0
	add.b	d0,d0
	lea	pr_normaleffectlist(pc),a0
	move.w	(a0,d0.w),d0
	jmp	(a0,d0.w)
pr_playnoeffect:
	rts

pr_normaleffectlist:
	dc.w	pr_playnoeffect-pr_normaleffectlist		; 0
	dc.w	pr_playnoeffect-pr_normaleffectlist		; 1
	dc.w	pr_playnoeffect-pr_normaleffectlist		; 2
	dc.w	pr_preptoneportamento-pr_normaleffectlist	; 3
	dc.w	pr_prepvibrato-pr_normaleffectlist		; 4
	dc.w	pr_playnoeffect-pr_normaleffectlist		; 5
	dc.w	pr_prepvibandvolslide-pr_normaleffectlist	; 6
	dc.w	pr_preptremolo-pr_normaleffectlist		; 7
	dc.w	pr_playnoeffect-pr_normaleffectlist		; 8
	dc.w	pr_playnoeffect-pr_normaleffectlist		; 9
	dc.w	pr_playnoeffect-pr_normaleffectlist		; A
	dc.w	pr_jumptopattern-pr_normaleffectlist		; B
	dc.w	pr_newvolume-pr_normaleffectlist		; C
	dc.w	pr_patternbreak-pr_normaleffectlist		; D
	dc.w	pr_play_e_command-pr_normaleffectlist		; E
	dc.w	pr_newspeed-pr_normaleffectlist			; F

pr_play_e_command:
	moveq	#0,d0
	move.b	5(a4),d0
	lsr.b	#3,d0
	bclr	#0,d0
	lea	pr_e_commandeffectlist(pc),a0
	move.w	(a0,d0.w),d0
	jmp	(a0,d0.w)
	
pr_e_commandeffectlist:
	dc.w	pr_setfilter-pr_e_commandeffectlist		; 0
	dc.w	pr_fineslideup-pr_e_commandeffectlist		; 1
	dc.w	pr_fineslidedown-pr_e_commandeffectlist		; 2
	dc.w	pr_setglissandocontrol-pr_e_commandeffectlist	; 3
	dc.w	pr_setvibratowaveform-pr_e_commandeffectlist	; 4
	dc.w	pr_playfinetune-pr_e_commandeffectlist		; 5
	dc.w	pr_jumptoloop-pr_e_commandeffectlist		; 6
	dc.w	pr_settremolowaveform-pr_e_commandeffectlist	; 7
	dc.w	pr_playnoeffect-pr_e_commandeffectlist		; 8
	dc.w	pr_prepretrignote-pr_e_commandeffectlist	; 9
	dc.w	pr_finevolumeslideup-pr_e_commandeffectlist	; A
	dc.w	pr_finevolumeslidedown-pr_e_commandeffectlist	; B
	dc.w	pr_prepnotecut-pr_e_commandeffectlist		; C
	dc.w	pr_prepnotedelay-pr_e_commandeffectlist		; D
	dc.w	pr_preppatterndelay-pr_e_commandeffectlist	; E
	dc.w	pr_prepfunkrepeat-pr_e_commandeffectlist	; F

pr_preppatterndelay:
	cmp.b	#1,pr_patterndelaytime-pr_framecounter+1(a2)
	bge.s	pr_preppatterndelayend
	moveq	#$f,d0
	and.b	5(a4),d0
	addq.b	#1,d0
	move.b	d0,pr_patterndelaytime-pr_framecounter+1(a2)
pr_preppatterndelayend:
	rts

pr_setvibratowaveform:
	moveq	#$f,d0
	and.b	5(a4),d0
	move.w	d0,50(a4)
	rts

pr_settremolowaveform:
	moveq	#$f,d0
	and.b	5(a4),d0
	move.w	d0,52(a4)
	rts

pr_setglissandocontrol:
	moveq	#$f,d0
	and.b	5(a4),d0
	move.w	d0,48(a4)
	rts

pr_playfinetune:
	moveq	#$f,d0
	and.b	5(a4),d0
	lsl.w	#2,d0
	lea	pr_fastperiodlist(pc),a0
	move.l	(a0,d0.w),a0
	moveq	#0,d1
	IFEQ	PACKEDSONGFORMAT-YES
	move.b	(a6),d1
	lsr.b	#1,d1
	ELSE
	move.b	1(a6),d1
	ENDC
	beq.s	pr_playfinetuneend
	subq.b	#1,d1
	add.w	d1,d1
	move.w	(a0,d1.w),2(a4)		; Frequenz eintragen
pr_playfinetuneend:
	rts
	
pr_jumptoloop:
	moveq	#$f,d0
	and.b	5(a4),d0
	beq.s	pr_prepjumptoloop
	addq.b	#1,47(a4)
	cmp.b	47(a4),d0
	blt.s	pr_jumptoloopend
	moveq.l	#0,d0
	move.w	44(a4),d0
	move.w	d0,pr_Patternct-pr_framecounter(a2)
	move.l	pr_Patternpt(pc),a0
	move.l	(a0),d5
	IFEQ	PACKEDSONGFORMAT-YES
	moveq.l	#0,d0
	move.w	60(a4),d0
	ELSE
	lsl.l	#4,d0
	ENDIF
	add.l	d0,d5
	move.l	d5,pr_Currentposition-pr_framecounter(a2)
	addq.w	#1,pr_dontcalcnewposition-pr_framecounter(a2)
	rts
pr_jumptoloopend:
	clr.w	46(a4)
	rts
pr_prepjumptoloop:
	tst.w	46(a4)
	bne.s	pr_prepjumptoloopend
	move.w	pr_Patternct-pr_framecounter(a2),44(a4)
	IFEQ	PACKEDSONGFORMAT-YES
	move.l	pr_Currentposition(pc),d0
	move.l	pr_Patternpt(pc),a1
	sub.l	(a1),d0
	move.w	d0,60(a4)
	ENDC
	clr.w	46(a4)
pr_prepjumptoloopend:
	rts

pr_prepnotedelay:
	IFEQ	PACKEDSONGFORMAT-YES
	tst.b	57(a4)
	ELSE
	tst.b	1(a6)
	ENDC
	beq.s	pr_prepnotedelayend2

	moveq	#$f,d0
	and.b	5(a4),d0
	bne.s	pr_prepnotedelay2
	move.w	#$fff,18(a4)
	bra.w	pr_checknotedelay2
pr_prepnotedelay2:
	move.w	d7,d0
	not.b	d0
	and.b	d0,pr_dmacon-pr_framecounter+1(a2)
	clr.w	18(a4)
	rts
pr_prepnotedelayend2:
	move.w	#$fff,18(a4)
	rts

pr_prepretrignote:
	clr.w	18(a4)
	IFEQ	PACKEDSONGFORMAT-YES
	tst.b	56(a4)
	ELSE
	tst.w	(a6)
	ENDC
	bne.s	pr_prepretrignoteend
	bra.w	pr_checkretrignote2	
pr_prepretrignoteend:
	rts

pr_prepnotecut:
	clr.w	18(a4)
	moveq	#$f,d0
	and.b	5(a4),d0
	tst.b	d0
	bne.s	pr_prepnotecutend
	clr.w	12(a4)
pr_prepnotecutend:
	rts
	
pr_finevolumeslideup:
	moveq	#$f,d0
	and.b	5(a4),d0
	move.w	12(a4),d1
	add.w	d0,d1
	moveq	#64,d0
	cmp.w	d0,d1
	bls.s	pr_finevolumeslideup2
	move.w	d0,d1
pr_finevolumeslideup2:
	move.w	d1,12(a4)
	rts

pr_finevolumeslidedown:
	moveq	#$f,d0
	and.b	5(a4),d0
	move.w	12(a4),d1
	sub.w	d0,d1
	bpl.s	pr_finevolumeslidedown2
	moveq	#0,d1
pr_finevolumeslidedown2:
	move.w	d1,12(a4)
	rts

pr_fineslideup:
	moveq	#$f,d0
	and.b	5(a4),d0
	move.w	2(a4),d1
	sub.w	d0,d1
	cmp.w	#108,d1
	bge.s	pr_fineslideup2
	move.w	#108,d1
pr_fineslideup2:
	move.w	d1,2(a4)
	rts

pr_fineslidedown:
	moveq	#$f,d0
	and.b	5(a4),d0
	move.w	2(a4),d1
	add.w	d0,d1
	cmp.w	#907,d1
	bls.s	pr_fineslidedown2
	move.w	#907,d1
pr_fineslidedown2:
	move.w	d1,2(a4)
	rts

pr_setfilter:
	btst	#0,5(a4)
	beq.s	pr_setfilteron
pr_setfilteroff:
	bset	#1,$bfe001
	rts
pr_setfilteron:
	bclr	#1,$bfe001
	rts

pr_prepvibandvolslide:
	cmp.b	#1,pr_speed-pr_framecounter+1(a2)
	beq.s	pr_prepvibandvolslide2
	IFEQ	PACKEDSONGFORMAT-YES
	move.b	(a6),d1
	lsr.b	#1,d1
	ELSE
	tst.b	1(a6)
	ENDC
	beq.s	pr_prepvibandvolslide2
	clr.w	18(a4)
pr_prepvibandvolslide2:
	rts

pr_preptoneportamento:
	tst.b	5(a4)
	beq.s	pr_preptoneportamento2
	move.w	4(a4),22(a4)
pr_preptoneportamento2:
	rts

pr_prepvibrato:
	cmp.b	#1,pr_speed-pr_framecounter+1(a2)
	beq.s	pr_prepvibrato2
	IFEQ	PACKEDSONGFORMAT-YES
	move.b	(a6),d1
	lsr.b	#1,d1
	ELSE
	tst.b	1(a6)
	ENDC
	beq.s	pr_prepvibrato0
	clr.w	18(a4)
pr_prepvibrato0:
	move.b	5(a4),d0
	move.b	d0,d1
	lsr.b	#4,d1
	beq.s	pr_prepvibrato1
	move.b	d1,24(a4)
pr_prepvibrato1:
	and.b	#$f,d0
	beq.s	pr_prepvibrato2
	move.b	d0,25(a4)
pr_prepvibrato2:
	rts

pr_preptremolo:
	cmp.b	#1,pr_speed-pr_framecounter+1(a2)
	beq.s	pr_preptremolo2
	IFEQ	PACKEDSONGFORMAT-YES
	move.b	(a6),d1
	lsr.b	#1,d1
	ELSE
	tst.b	1(a6)
	ENDC
	beq.s	pr_preptremolo0
	clr.w	18(a4)
pr_preptremolo0:
	move.w	12(a4),20(a4)
	move.b	5(a4),d0
	move.b	d0,d1
	lsr.b	#4,d1
	beq.s	pr_preptremolo1
	move.b	d1,30(a4)
pr_preptremolo1:
	and.b	#$f,d0
	beq.s	pr_preptremolo2
	move.b	d0,31(a4)
pr_preptremolo2:
	rts

pr_newvolume:
	move.b	5(a4),d0
	cmp.b	#64,d0
	bls.s	pr_newvolumeend
	moveq	#64,d0
pr_newvolumeend:
	move.b	d0,13(a4)
	rts

pr_newspeed:
	move.b	5(a4),d0
	tst.b	d0
	bne.s	pr_newspeed2
	moveq	#1,d0
pr_newspeed2:
	move.b	d0,pr_speed-pr_framecounter+1(a2)
	rts

pr_patternbreak:
	moveq	#0,d0
	move.b	5(a4),d0
	add.w	#64,d0
	move.w	d0,pr_Patternct-pr_framecounter(a2)
	addq.w	#1,pr_patternhasbeenbreaked-pr_framecounter(a2)
	addq.w	#1,pr_dontcalcnewposition-pr_framecounter(a2)
	rts
		
pr_jumptopattern:
	moveq.l	#0,d0
	move.b	5(a4),d0
	subq.b	#1,d0
	bpl.s	pr_playjumptopattern2
	move.w	#128,d0
pr_playjumptopattern2:
	move.b	d0,pr_currentpattern-pr_framecounter+1(a2)
	lsl.l	#2,d0
	lea	pr_Patternpositions(pc),a0
	add.l	a0,d0
	move.l	d0,pr_Patternpt-pr_framecounter(a2)
	move.w	#64,pr_Patternct-pr_framecounter(a2)
	addq.w	#1,pr_patternhasbeenbreaked-pr_framecounter(a2)
	addq.w	#1,pr_dontcalcnewposition-pr_framecounter(a2)
	rts

* Control FX every frame **********************************************

pr_checkeffects:
	moveq	#1,d7
	lea	$a0(a5),a3
	lea	pr_Channel0(pc),a4
	move.w	12(a4),54(a4)
	pr_checkchannel
	IFEQ	INCLUDEFADINGROUTINE-YES
	move.w	54(a4),d0
	mulu.w	pr_musicfadect-pr_framecounter(a2),d0
	lsr.l	#FADINGSTEPS,d0
	move.w	d0,8(a3)
	ELSE
	move.w	54(a4),8(a3)
	ENDC
	
	moveq	#2,d7
	lea	$b0(a5),a3
	lea	pr_Channel1(pc),a4
	move.w	12(a4),54(a4)
	pr_checkchannel
	IFEQ	INCLUDEFADINGROUTINE-YES
	move.w	54(a4),d0
	mulu.w	pr_musicfadect-pr_framecounter(a2),d0
	lsr.l	#FADINGSTEPS,d0
	move.w	d0,8(a3)
	ELSE
	move.w	54(a4),8(a3)
	ENDC

	moveq	#4,d7
	lea	$c0(a5),a3
	lea	pr_Channel2(pc),a4
	move.w	12(a4),54(a4)
	pr_checkchannel
	IFEQ	INCLUDEFADINGROUTINE-YES
	move.w	54(a4),d0
	mulu.w	pr_musicfadect-pr_framecounter(a2),d0
	lsr.l	#FADINGSTEPS,d0
	move.w	d0,8(a3)
	ELSE
	move.w	54(a4),8(a3)
	ENDC

	moveq	#8,d7
	lea	$d0(a5),a3
	lea	pr_Channel3(pc),a4
	move.w	12(a4),54(a4)
	pr_checkchannel
	IFEQ	INCLUDEFADINGROUTINE-YES
	move.w	54(a4),d0
	mulu.w	pr_musicfadect-pr_framecounter(a2),d0
	lsr.l	#FADINGSTEPS,d0
	move.w	d0,8(a3)
	ELSE
	move.w	54(a4),8(a3)
	ENDC

	lea	pr_int(pc),a0
	move.l	pr_Vectorbasept(pc),a1
	move.l	a0,$78(a1)
	move.b	#$19,$bfde00
	rts

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

pr_checknotchannel:
	rts

pr_check_e_commands:
	moveq	#0,d0
	move.b	5(a4),d0
	lsr.b	#3,d0
	bclr	#0,d0
	lea	pr_E_Command_checklist(pc),a0
	move.w	(a0,d0.w),d0
	jmp	(a0,d0.w)
	
pr_Effectchecklist:
	dc.w	pr_checkarpeggio-pr_Effectchecklist		; 0
	dc.w	pr_checkperiodslideup-pr_Effectchecklist	; 1
	dc.w	pr_checkperiodslidedown-pr_Effectchecklist	; 2
	dc.w	pr_checktoneportamento-pr_Effectchecklist	; 3
	dc.w	pr_checkvibrato-pr_Effectchecklist		; 4
	dc.w	pr_checktpandvolslide-pr_Effectchecklist	; 5
	dc.w	pr_checkvibandvolslide-pr_Effectchecklist	; 6
	dc.w	pr_checktremolo-pr_Effectchecklist		; 7
	dc.w	pr_checknotchannel-pr_Effectchecklist		; 8
	dc.w	pr_checknotchannel-pr_Effectchecklist		; 9
	dc.w	pr_checkvolumeslide-pr_Effectchecklist		; A
	dc.w	pr_checknotchannel-pr_Effectchecklist		; B
	dc.w	pr_checknotchannel-pr_Effectchecklist		; C
	dc.w	pr_checknotchannel-pr_Effectchecklist		; D
	dc.w	pr_check_e_commands-pr_Effectchecklist		; E
	dc.w	pr_checknotchannel-pr_Effectchecklist		; F

pr_E_Command_checklist:
	dc.w	pr_checknotchannel-pr_E_Command_checklist	; 0
	dc.w	pr_checknotchannel-pr_E_Command_checklist	; 1
	dc.w	pr_checknotchannel-pr_E_Command_checklist	; 2
	dc.w	pr_checknotchannel-pr_E_Command_checklist	; 3
	dc.w	pr_checknotchannel-pr_E_Command_checklist	; 4
	dc.w	pr_checknotchannel-pr_E_Command_checklist	; 5
	dc.w	pr_checknotchannel-pr_E_Command_checklist	; 6
	dc.w	pr_checknotchannel-pr_E_Command_checklist	; 7
	dc.w	pr_checknotchannel-pr_E_Command_checklist	; 8
	dc.w	pr_checkretrignote-pr_E_Command_checklist	; 9
	dc.w	pr_checknotchannel-pr_E_Command_checklist	; A
	dc.w	pr_checknotchannel-pr_E_Command_checklist	; B
	dc.w	pr_checknotecut-pr_E_Command_checklist		; C
	dc.w	pr_checknotedelay-pr_E_Command_checklist	; D
	dc.w	pr_checknotchannel-pr_E_Command_checklist	; E
	dc.w	pr_checknotchannel-pr_E_Command_checklist	; F

pr_prepfunkrepeat:
	moveq	#$f,d0
	and.b	5(a4),d0
	move.b	d0,33(a4)
	tst.b	d0
	bne.s	pr_checkfunkrepeat
	rts
pr_checkfunkrepeat:
	move.w	32(a4),d0
	beq.s	pr_checkfunkrepeatend
	lea	pr_FunkTable(pc),a0
	move.b	(a0,d0.w),d0
	move.b	35(a4),d1
	add.b	d0,d1
	bmi.s	pr_checkfunkrepeat2
	move.b	d1,35(a4)
	rts
pr_checkfunkrepeat2:
	clr.b	35(a4)

	move.l	36(a4),d0
	beq.s	pr_checkfunkrepeatend
	move.l	d0,d2
	moveq.l	#0,d1
	move.w	10(a4),d1
	add.l	d1,d0
	add.l	d1,d0
	move.l	40(a4),a0
	addq.l	#1,a0
	cmp.l	d0,a0
	blo.s	pr_checkfunkrepeatok
	move.l	d2,a0
pr_checkfunkrepeatok:
	move.l	a0,40(a4)
	moveq	#-1,d0
	sub.b	(a0),d0
	move.b	d0,(a0)
pr_checkfunkrepeatend:
	rts

pr_checknotedelay:
	move.w	18(a4),d1
	addq.w	#1,d1
	cmp.w	d0,d1
	bne.s	pr_checknotedelayend
pr_checknotedelay2:
	move.w	d7,$96(a5)
	or.w	d7,pr_dmacon-pr_framecounter(a2)
	moveq.l	#0,d0
	move.w	(a4),d0
	subq.w	#1,d0
	lsl.w	#5,d0
	lea	pr_Sampleinfos(pc),a0
	add.l	d0,a0
	move.w	2(a4),6(a3)
	move.l	(a0)+,(a3)		; Setze Samplestart
	move.w	(a0)+,4(a3)		; Setze Audiodatenlänge
	addq.l	#2,a0
	move.l	(a0)+,d2
	move.l	d2,6(a4)		; Samplerepeatpoint eintragen
	tst.w	(a0)+
	beq.s	pr_checknotedelay3
	move.l	d2,36(a4)
	move.l	d2,40(a4)
pr_checknotedelay3:
	move.w	(a0)+,10(a4)		; Samplerepeatlength eintragen
pr_checknotedelayend:
	move.w	d1,18(a4)
	rts

pr_checkretrignote:
	moveq	#$f,d0
	and.b	5(a4),d0
	move.w	18(a4),d1
	addq.w	#1,d1
	cmp.w	d0,d1
	bne.s	pr_checkretrignoteend
pr_checkretrignote2:
	moveq	#0,d1
	move.w	d7,$96(a5)
	or.w	d7,pr_dmacon-pr_framecounter(a2)
	move.w	(a4),d0
	subq.w	#1,d0
	lsl.w	#5,d0
	lea	pr_Sampleinfos(pc),a0
	move.l	(a0,d0.w),(a3)
	move.w	4(a0,d0.w),4(a3)
pr_checkretrignoteend:
	move.w	d1,18(a4)
	rts

pr_checknotecut:
	moveq	#$f,d0
	and.b	5(a4),d0
	addq.w	#1,18(a4)
	move.w	18(a4),d1
	cmp.w	d0,d1
	blt.s	pr_checknotecutend
	clr.w	12(a4)
	clr.w	54(a4)
pr_checknotecutend:
	rts

pr_checkarpeggio:
	tst.b	5(a4)
	bne.s	pr_checkarpeggio0
	rts
pr_checkarpeggio0:
	move.w	(a2),d0
	lea	pr_Arpeggiofastdivisionlist(pc),a1
	move.b	(a1,d0.w),d0
	beq.s	pr_checkarpeggio2
	cmp.b	#2,d0
	beq.s	pr_checkarpeggio1
	moveq	#0,d0
	move.b	5(a4),d0
	lsr.b	#4,d0
	bra.s	pr_checkarpeggio3
pr_checkarpeggio2:
	move.w	2(a4),6(a3)
	rts
pr_checkarpeggio1:
	moveq	#$f,d0
	and.b	5(a4),d0
pr_checkarpeggio3:
	asl.w	#1,d0
	move.w	(a4),d1
	lsl.w	#5,d1
	lea	pr_Sampleinfos+SAMPLEFINETUNEOFFSET(pc),a0
	move.l	(a0,d1.w),a0
	move.w	2(a4),d1
	lea	pr_Arpeggiofastlist(pc),a1
	moveq.l	#0,d2
	move.b	(a1,d1.w),d2
	add.b	d2,d2
	add.l	d2,a0
	moveq	#36,d7
pr_checkarpeggioloop:
	cmp.w	(a0)+,d1
	bhs.s	pr_checkarpeggio4
	dbf	d7,pr_checkarpeggioloop
	rts
pr_checkarpeggio4:
	subq.l	#2,a0
	move.w	(a0,d0.w),6(a3)
	rts

pr_checktpandvolslide:
	bsr.w	pr_checkvolumeslide
	moveq	#0,d2
	move.b	23(a4),d2
	move.w	26(a4),d0
	move.w	28(a4),d1
	bsr.s	pr_checktoneportamento2
	move.w	14(a4),26(a4)
	rts
	
pr_checktoneportamento:
	moveq	#0,d2
	move.b	5(a4),d2
	bne.s	pr_checktoneportamento1
	move.b	23(a4),d2
pr_checktoneportamento1:
	move.w	14(a4),d0
	move.w	16(a4),d1
pr_checktoneportamento2:
	cmp.w	d0,d1
	bgt.s	pr_checktoneportamentoplus
	blt.s	pr_checktoneportamentominus
	cmp.w	#1,(a2)
	beq.s	pr_savetpvalues
	rts
pr_checktoneportamentoplus:
	add.w	d2,d0
	cmp.w	d0,d1
	bgt.s	pr_checktoneportamentoend
	move.w	d1,d0
	move.w	d1,14(a4)
	move.w	d1,2(a4)
	tst.w	48(a4)
	bne.s	pr_checktoneportamentoglissando
	move.w	d1,6(a3)
	cmp.w	#1,(a2)
	beq.s	pr_savetpvalues
	rts
pr_checktoneportamentominus:
	sub.w	d2,d0
	cmp.w	d0,d1
	blt.s	pr_checktoneportamentoend
	move.w	d1,d0
	move.w	d1,14(a4)
	move.w	d1,2(a4)
	tst.w	48(a4)
	bne.s	pr_checktoneportamentoglissando
	move.w	d1,6(a3)
	cmp.w	#1,(a2)
	beq.s	pr_savetpvalues
	rts
pr_checktoneportamentoend:
	move.w	d0,14(a4)
	move.w	d0,2(a4)
	tst.w	48(a4)
	bne.s	pr_checktoneportamentoglissando
	move.w	d0,6(a3)
	cmp.w	#1,(a2)
	beq.s	pr_savetpvalues
	rts	
pr_savetpvalues:
	move.l	14(a4),26(a4)
	rts
pr_checktoneportamentoglissando:
	move.w	(a4),d1
	lsl.w	#5,d1
	lea	pr_Sampleinfos+SAMPLEFINETUNEOFFSET(pc),a0
	move.l	(a0,d1.w),a0
	lea	pr_Arpeggiofastlist(pc),a1
	moveq.l	#0,d2
	move.b	(a1,d0.w),d2
	add.w	d2,d2
	add.l	d2,a0
	moveq	#0,d3
	moveq	#36*2,d1
pr_checktoneportamentoglissandoloop:
	cmp.w	(a0,d3.w),d0
	bhs.s	pr_checktoneportamentoglissando2
	addq.w	#2,d3
	cmp.w	d1,d3
	blo.s	pr_checktoneportamentoglissandoloop
	moveq	#35*2,d3
pr_checktoneportamentoglissando2:
	move.w	(a0,d3.w),6(a3)
	cmp.w	#1,(a2)
	beq.s	pr_savetpvalues
	rts

pr_checkvolumeslide:
	moveq	#0,d0
	move.b	5(a4),d0
	move.w	d0,d1
	lsr.b	#4,d1
	beq.s	pr_checkvolumeslidedown
	move.w	12(a4),d2
	add.w	d1,d2
	bmi.s	pr_checkvolumeslide0
	moveq	#64,d0
	cmp.w	d0,d2
	bgt.s	pr_checkvolumeslide64
	move.w	d2,12(a4)
	move.w	d2,54(a4)
	rts
pr_checkvolumeslidedown:	
	and.b	#$f,d0
	move.w	12(a4),d2
	sub.w	d0,d2
	bmi.s	pr_checkvolumeslide0
	moveq	#64,d0
	cmp.w	d0,d2
	bgt.s	pr_checkvolumeslide64
	move.w	d2,12(a4)
	move.w	d2,54(a4)
	rts
pr_checkvolumeslide64:
	move.w	d0,12(a4)
	move.w	d0,54(a4)
	rts
pr_checkvolumeslide0:
	clr.w	12(a4)
	clr.w	54(a4)
	rts
	
pr_checkperiodslidedown:
	moveq	#0,d0
	move.b	5(a4),d0
	add.w	d0,2(a4)
	cmp.w	#907,2(a4)
	bls.s	pr_checkperiodslidedown2
	move.w	#907,2(a4)
pr_checkperiodslidedown2:
	move.w	2(a4),6(a3)
	rts

pr_checkperiodslideup:
	moveq	#0,d0
	move.b	5(a4),d0
	sub.w	d0,2(a4)
	cmp.w	#108,2(a4)
	bge.s	pr_checkperiodslideup2
	move.w	#108,2(a4)
pr_checkperiodslideup2:
	move.w	2(a4),6(a3)
	rts

pr_checkvibandvolslide:
	bsr.w	pr_checkvolumeslide
	moveq.l	#0,d0
	moveq.l	#0,d1
	move.b	25(a4),d0
	move.b	24(a4),d1
	bra.s	pr_checkvibrato4

pr_checkvibrato:
	moveq.l	#0,d0
	moveq.l	#0,d1
	move.b	5(a4),d0	; Tiefe
pr_checkvibrato2:
	move.w	d0,d1		; Geschwindigkeit
	and.w	#$f,d0
	bne.s	pr_checkvibrato3
	move.b	25(a4),d0
pr_checkvibrato3:
	lsr.b	#4,d1
	bne.s	pr_checkvibrato4
	move.b	24(a4),d1
pr_checkvibrato4:
	move.w	18(a4),d2	;Position
	lsr.w	#2,d2
	and.w	#$1f,d2
	move.w	50(a4),d3
	beq.s	pr_checkvibratosine
	btst	#0,d3
	bne.s	pr_checkvibratorampdown
	move.b	#255,d3
	bra.s	pr_checkvibratoset
pr_checkvibratorampdown:
	lsl.b	#3,d2
	tst.b	19(a4)
	bmi.s	pr_checkvibratorampdown2
	move.b	#255,d3
	sub.b	d2,d3
	bra.s	pr_checkvibratoset
pr_checkvibratorampdown2:
	move.b	d2,d3
	bra.s	pr_checkvibratoset
pr_checkvibratosine:
	lea	pr_VibratoTable(pc),a0
	moveq	#0,d3
	move.b	(a0,d2.w),d3
pr_checkvibratoset:
	mulu.w	d0,d3
	lsr.w	#7,d3
	move.w	2(a4),d2
	tst.b	19(a4)
	bpl.s	pr_checkvibratoneg
	add.w	d3,d2
	bra.s	pr_checkvibrato5
pr_checkvibratoneg:
	sub.w	d3,d2
pr_checkvibrato5:
	move.w	d2,6(a3)
	lsl.w	#2,d1
	add.b	d1,19(a4)
	rts

pr_checktremolo:
	moveq	#0,d0
	moveq.l	#0,d1
	move.b	5(a4),d0	; Tiefe
pr_checktremolo2:
	move.w	d0,d1		; Geschwindigkeit
	and.w	#$f,d0
	bne.s	pr_checktremolo3
	move.b	31(a4),d0
pr_checktremolo3:
	lsr.b	#4,d1
	bne.s	pr_checktremolo4
	move.b	30(a4),d1
pr_checktremolo4:
	move.w	18(a4),d2	;Position
	lsr.w	#2,d2
	and.w	#$1f,d2
	move.w	52(a4),d3
	beq.s	pr_checktremolosine
	btst	#0,d3
	bne.s	pr_checktremolorampdown
	move.b	#255,d3
	bra.s	pr_checktremoloset
pr_checktremolorampdown:
	lsl.b	#3,d2
	tst.b	19(a4)
	bmi.s	pr_checktremolorampdown2
	move.b	#255,d3
	sub.b	d2,d3
	bra.s	pr_checktremoloset
pr_checktremolorampdown2:
	move.b	d2,d3
	bra.s	pr_checktremoloset
pr_checktremolosine:
	lea	pr_VibratoTable(pc),a0
	moveq	#0,d3
	move.b	(a0,d2.w),d3
pr_checktremoloset:
	mulu.w	d0,d3
	lsr.w	#6,d3
	move.w	20(a4),d2
	tst.b	19(a4)
	bpl.s	pr_checktremoloneg
	add.w	d3,d2
	moveq	#64,d4
	cmp.w	d4,d2
	bls.s	pr_checktremolo5
	move.w	d4,d2
	bra.s	pr_checktremolo5
pr_checktremoloneg:
	sub.w	d3,d2
	bpl.s	pr_checktremolo5
	moveq	#0,d2
pr_checktremolo5:
	move.w	d2,54(a4)
	lsl.w	#2,d1
	add.b	d1,19(a4)
	rts

pr_VibratoTable:	
	dc.b	0,24,49,74,97,120,141,161
	dc.b	180,197,212,224,235,244,250,253
	dc.b	255,253,250,244,235,224,212,197
	dc.b	180,161,141,120,97,74,49,24
pr_FunkTable:
	dc.b	0,5,6,7,8,10,11,13,16,19,22,26,32,43,64,128
	
* Variables ***********************************************************

pr_module:			dc.l	0
pr_startposition:		dc.w	0
pr_speed:			dc.w	6
pr_highestpattern:		dc.w	0
pr_currentpattern:		dc.w	0
pr_framecounter:		dc.w	0
pr_patterndelaytime:		dc.w	0
pr_patternhasbeenbreaked:	dc.w	0
pr_Patternpositions:		ds.l	128
pr_Patternpt:			dc.l	0
pr_Currentposition:		dc.l	0
pr_Patternct:			dc.w	0
pr_oldledvalue:			dc.w	0
pr_dontcalcnewposition:		dc.w	0
pr_commandnotedelay:		dc.w	0
pr_old78:			dc.l	0
pr_Vectorbasept:		dc.l	0
pr_Channel0:			dc.w	1
				ds.w	30
pr_Channel1:			dc.w	1
				ds.w	30
pr_Channel2:			dc.w	1
				ds.w	30
pr_Channel3:			dc.w	1
				ds.w	30
pr_dmacon:			dc.w	$8000

pr_Arpeggiofastlist:		ds.b	1000
pr_Arpeggiofastdivisionlist:	ds.b	$100
pr_fastperiodlist:		ds.l	16
pr_Sampleinfos:			ds.b	32*32

pr_periods:
; Tuning 0, Normal
	dc.w	856,808,762,720,678,640,604,570,538,508,480,453
	dc.w	428,404,381,360,339,320,302,285,269,254,240,226
	dc.w	214,202,190,180,170,160,151,143,135,127,120,113
; Tuning 1
	dc.w	850,802,757,715,674,637,601,567,535,505,477,450
	dc.w	425,401,379,357,337,318,300,284,268,253,239,225
	dc.w	213,201,189,179,169,159,150,142,134,126,119,113
; Tuning 2
	dc.w	844,796,752,709,670,632,597,563,532,502,474,447
	dc.w	422,398,376,355,335,316,298,282,266,251,237,224
	dc.w	211,199,188,177,167,158,149,141,133,125,118,112
; Tuning 3
	dc.w	838,791,746,704,665,628,592,559,528,498,470,444
	dc.w	419,395,373,352,332,314,296,280,264,249,235,222
	dc.w	209,198,187,176,166,157,148,140,132,125,118,111
; Tuning 4
	dc.w	832,785,741,699,660,623,588,555,524,495,467,441
	dc.w	416,392,370,350,330,312,294,278,262,247,233,220
	dc.w	208,196,185,175,165,156,147,139,131,124,117,110
; Tuning 5
	dc.w	826,779,736,694,655,619,584,551,520,491,463,437
	dc.w	413,390,368,347,328,309,292,276,260,245,232,219
	dc.w	206,195,184,174,164,155,146,138,130,123,116,109
; Tuning 6
	dc.w	820,774,730,689,651,614,580,547,516,487,460,434
	dc.w	410,387,365,345,325,307,290,274,258,244,230,217
	dc.w	205,193,183,172,163,154,145,137,129,122,115,109
pr_Arpeggiofastlistperiods:
; Tuning 7
	dc.w	814,768,725,684,646,610,575,543,513,484,457,431
	dc.w	407,384,363,342,323,305,288,272,256,242,228,216
	dc.w	204,192,181,171,161,152,144,136,128,121,114,108
; Tuning -8
	dc.w	907,856,808,762,720,678,640,604,570,538,508,480
	dc.w	453,428,404,381,360,339,320,302,285,269,254,240
	dc.w	226,214,202,190,180,170,160,151,143,135,127,120
; Tuning -7
	dc.w	900,850,802,757,715,675,636,601,567,535,505,477
	dc.w	450,425,401,379,357,337,318,300,284,268,253,238
	dc.w	225,212,200,189,179,169,159,150,142,134,126,119
; Tuning -6
	dc.w	894,844,796,752,709,670,632,597,563,532,502,474
	dc.w	447,422,398,376,355,335,316,298,282,266,251,237
	dc.w	223,211,199,188,177,167,158,149,141,133,125,118
; Tuning -5
	dc.w	887,838,791,746,704,665,628,592,559,528,498,470
	dc.w	444,419,395,373,352,332,314,296,280,264,249,235
	dc.w	222,209,198,187,176,166,157,148,140,132,125,118
; Tuning -4
	dc.w	881,832,785,741,699,660,623,588,555,524,494,467
	dc.w	441,416,392,370,350,330,312,294,278,262,247,233
	dc.w	220,208,196,185,175,165,156,147,139,131,123,117
; Tuning -3
	dc.w	875,826,779,736,694,655,619,584,551,520,491,463
	dc.w	437,413,390,368,347,328,309,292,276,260,245,232
	dc.w	219,206,195,184,174,164,155,146,138,130,123,116
; Tuning -2
	dc.w	868,820,774,730,689,651,614,580,547,516,487,460
	dc.w	434,410,387,365,345,325,307,290,274,258,244,230
	dc.w	217,205,193,183,172,163,154,145,137,129,122,115
; Tuning -1
	dc.w	862,814,768,725,684,646,610,575,543,513,484,457
	dc.w	431,407,384,363,342,323,305,288,272,256,242,228
	dc.w	216,203,192,181,171,161,152,144,136,128,121,114

* END OF PRORUNNER ***************************************************

pr_data:
	incbin	"df3:galaxy/mod.the big idea"
	blk.l	256,0
font:
	incbin  "df0:style.raw"
	even
beeld:	blk.b	$35c0,0

onder:	incbin	"dik.raw"

hut: