;Mario Bros Sound Code

	ORG	$2200									;TO $27FF

;	TUNE VARIABLES - ? BYTES
TUNEAREA	
TUNESOFF		.ds 1				;1 BYTE  - FLAG FOR ALL TUNES OFF
TUNNUM			.ds 1				;1 BYTE  - CURRENT TUNE NUMBER BEING PROCESSED
TUNCHANNEL		.ds 1				;1 BYTE  - CONVERTED FOR INDEX INTO POKEY CHANNEL REGISTERS
TUNFILLER		.ds 1				;1 BYTE  - NOT USED YET
.LOCAL CHD	
TUNON			.ds CHANNEL_COUNT	;CHANNEL_COUNT BYTES - FLAG FOR TUNE PLAYING BY CHANNEL
NOTELO			.ds CHANNEL_COUNT	;CHANNEL_COUNT BYTES - INDEX INTO NOTE TABLE LOW
NOTEHI			.ds CHANNEL_COUNT	;CHANNEL_COUNT BYTES - INDEX INTO NOTE TABLE HI
CTLVOL			.ds CHANNEL_COUNT	;CHANNEL_COUNT BYTES - CONTROL / VOLUME VALUE BY CHANNEL
TUNINDEX		.ds CHANNEL_COUNT	;CHANNEL_COUNT BYTES - TUNE NUMBER BY CHANNEL
TUNFRM			.ds CHANNEL_COUNT	;CHANNEL_COUNT BYTES - NUMBER OF FRAMES (DURATION COUNT)
TUNPRIOR		.ds CHANNEL_COUNT	;CHANNEL_COUNT BYTES - TUNE PRIORITY BY CHANNEL
DURNLO			.ds CHANNEL_COUNT	;CHANNEL_COUNT BYTES - INDEX INTO DURATION TABLE LOW
DURNHI			.ds CHANNEL_COUNT	;CHANNEL_COUNT BYTES - INDEX INTO DURATION TABLE HI
DCYSTOR			.ds CHANNEL_COUNT	;CHANNEL_COUNT BYTES - FOR NOTE DECAY BY CHANNEL
FREQCNT			.ds CHANNEL_COUNT	;CHANNEL_COUNT BYTES - FOR NOTE DECAY BY CHANNEL
CTLSAV			.ds CHANNEL_COUNT	;CHANNEL_COUNT BYTES - TO SAVE THE CONTROL VALUE
MUTEMASK		.ds CHANNEL_COUNT	;CHANNEL_COUNT BYTES
.ENDL
TUNEAREA_END

	org $2240

;	SOUND -------------------------------------------------------------------------------------------------------------------->

;	TUNES - THESE ROUTINES HANDLE ALL OF THE SOUNDS

;	RESET POKEY CHIP
RSTPOKEY:
	LDX #$0F 
	LDA #$00
RSTLP:
	STA AUDF0,X									;CLEAR POKEY REGISTERS
	STA AUDF0+POKEY2_OFFSET,X									;CLEAR POKEY2 REGISTERS
	DEX 
	BPL RSTLP 
	LDA #$03
	STA SKCTL	;S									;TURN IT ON
	STA SKCTL+POKEY2_OFFSET	;S									;TURN IT ON
	RTS

;	TURN OFF ALL SOUNDS
STOPTUN
	LDA #$00
	STA AUDC0
	STA AUDC1
	STA AUDC2
	STA AUDC3
	STA AUDC0+POKEY2_OFFSET
	STA AUDC1+POKEY2_OFFSET
	STA AUDC2+POKEY2_OFFSET
	STA AUDC3+POKEY2_OFFSET
	LDA #$01
	STA TUNESOFF
	RTS

;	TURN ON ALL SOUNDS
STARTTUN
	LDA #$00
	STA TUNESOFF
	RTS

;	THIS ROUTINE ERASES ALL TUNES
;	X AND Y ARE PRESERVED
CLEARTUN
	TXA											;STACK REGISTERS
	PHA
	TYA
	PHA
	LDX #CHANNEL_COUNT-1
CTLOOP
	JSR ENDTUNE									;ERASE CURRENT TUNE
	DEX
	BPL CTLOOP
	PLA											;UNSTACK REGISTERS
	TAY
	PLA
	TAX
	RTS

;	ROUTINE TO KILL A PARTICULAR TUNE - IF IT IS RUNNING
;	INPUT: TUNE NUMBER IN A
;	X AND Y ARE PRESERVED
KILLTUNE
	STA TUNNUM									;SAVE IT
	TXA											;STACK REGISTERS
	PHA
	TYA
	PHA
	LDX #CHANNEL_COUNT-1								;CHECK ALL CHANNELS
KTLOOP
	LDA CHD.TUNON,X									;SEE IF CHANNEL ON
	BEQ KTNEXT
	LDA CHD.TUNINDEX,X								;SEE IF HAS TUNE TO BE KILLED
	CMP TUNNUM
	BNE KTNEXT
	JSR ENDTUNE									;ERASE IT
KTNEXT
	DEX
	BPL KTLOOP
	PLA											;UNSTACK REGISTERS
	TAY
	PLA
	TAX
	RTS

;	THIS ROUTINE CLEARS OUT A TUNE CHANNEL
;	INPUT: X IS CHANNEL
ENDTUNE
	LDA #$00
	STA CHD.TUNON,X									;INDICATE CHANNEL CLEAR
	STA CHD.TUNINDEX,X								;CLEAR TUNE INDEX
	STA CHD.DCYSTOR,X
	STA CHD.FREQCNT,X
	RTS

;	THIS ROUTINE ENTERS A TUNE INTO ONE OF THE SOUND CHANNELS IF IT CAN
;	INPUT:  TUNE NUMBER IN A
;	X AND Y ARE PRESERVED
DOTUNE
	STA TUNNUM									;SAVE IT
	;LDA AUTOPLAY								;IF IN AUTOPLAY - NO SOUND
	;BEQ DTCONT
	;RTS
DTCONT
	TXA											;STACK REGISTERS
	PHA
	TYA
	PHA
	LDY TUNNUM									;SEE IF WE CAN PUT IT IN
	LDX CHANNLTBL,Y								;GET WHAT CHANNEL TO TRY TO PUT IT IN
	LDA CHD.TUNON,X									;SEE IF CHANNEL OPEN
	BEQ DTDOIT
	LDA PRIRTYTBL,Y								;SEE IF WE CAN BUMP CHANNEL
	CMP CHD.TUNPRIOR,X
	BMI DTOUT
DTDOIT
	LDA TUNNUM
	TAY											;PUT TUNE IN Y
	STA CHD.TUNINDEX,X								;SET THE TUNE INDEX
	LDA #$00									;TURN TUNE OFF WHILE CHANGING IT
	STA CHD.TUNON,X
	LDA CNTVOLTBL,Y								;GET TUNE CONTROL / VOLUME
	STA CHD.CTLVOL,X
	STA CHD.CTLSAV,X								;USED TO RESTORE AFTER DECAY
	LDA NOTETBLLO,Y								;GET TUNE FREQUENCY LOW ADDRESS
	STA CHD.NOTELO,X
	LDA NOTETBLHI,Y								;GET TUNE FREQUENCY HIGH ADDRESS
	STA CHD.NOTEHI,X
	LDA DURNTBLLO,Y								;GET TUNE DURATION LOW ADDRESS
	STA CHD.DURNLO,X
	LDA DURNTBLHI,Y								;GET TUNE DURATION HIGH ADDRESS
	STA CHD.DURNHI,X
	LDA PRIRTYTBL,Y								;SET PRIORITY
	STA CHD.TUNPRIOR,X
	LDA #$01									;SET FREQ, CTL, AND VOL TO BE SET
	STA CHD.TUNFRM,X
	STA CHD.TUNON,X									;AND TURN THE TUNE ON!
DTOUT
	PLA											;UNSTACK REGISTERS
	TAY
	PLA
	TAX
	RTS

;  THIS ROUTINE IS CALLED EVERY VBLANK TO TAKE CARE OF TUNES
;  REGISTERS ARE NOT SAVED
TUNER
	LDX #CHANNEL_COUNT-1							;8 TUNES CHANNELS, START WITH LAST
	LDA TUNESOFF
	BEQ TUNLOOP
	RTS
TUNLOOP
	TXA
	AND #$3
	ASL
	STA TUNCHANNEL								;CHANNELS ARE OFFSET 0, 2, 4, 6 IN THE POKEY
	TXA
	AND #$4
	BEQ POKEY0
	LDA #POKEY2_OFFSET							; extra channels go to 2nd pokey
	ORA TUNCHANNEL								
	STA TUNCHANNEL								
POKEY0

	TAY
	LDA CHD.TUNON,X
	BNE TUNBODY
	STA AUDC0,Y									;CHANNEL OFF - MAKE SURE VOLUME OFF
	JMP TUNNEXT
TUNBODY
	DEC CHD.TUNFRM,X								;SEE IF WE'RE DONE WITH THIS SOUND
	BEQ TUNFRMFRQ								;YES - GET NEXT NOTE / DURATION
	DEC CHD.FREQCNT,X                               ;REDUCE THE NUMBER OF FRAMES UNTIL NEXT DECAY
	BEQ DEC_VOLUME
	JMP TUNNEXT                                 ;IF WE AREN'T AT ZERO YET, DON'T DECAY

DEC_VOLUME
	LDA CHD.DCYSTOR,X                               ;RESET THE DECAY FOR THE NEXT COUNT
	STA CHD.FREQCNT,X

	LDA CHD.CTLVOL,X                                ;IF VOLUME ALREADY 0 DO NOT DECREMENT
	AND #$0F
	BEQ TUNNEXT
	
	DEC CHD.CTLVOL,X                                ;DECREMENT THE VOLUME
	LDA CHD.CTLVOL,X
	LDY TUNCHANNEL
	;AND MUTEMASK,Y
	STA AUDC0,Y
	JMP TUNNEXT                                 ;GO TO NEXT CHANNEL
TUNFRMFRQ
	LDA CHD.DURNLO,X								;GET THE CURRENT DURATION
	STA SOUNDZP
	LDA CHD.DURNHI,X
	STA SOUNDZP+1
	LDY #$00
	LDA (SOUNDZP),Y
	BEQ TUNEND									;$00 IN DURATION MEANS TUNE IS OVER
	STA CHD.TUNFRM,X
	TAY
	LDA DECAYTBL,Y								;GET THE CURRENT DECAY VALUE INDEXED BY NOTE
	STA CHD.DCYSTOR,X								;STORE IT HERE TO REFRESH THE COUNTER FOR THE NEXT DECAY
	STA CHD.FREQCNT,X								;ALSO STORE IT HERE FOR TUNER
	LDY TUNCHANNEL
	LDA CHD.CTLSAV,X
	STA CHD.CTLVOL,X								;RESTORE THE ORIGINAL CONTROL AND VOLUME FOR NEXT NOTE
	STA AUDC0,Y
	LDA CHD.NOTELO,X								;GET THE CURRENT FREQUENCY
	STA SOUNDZP
	LDA CHD.NOTEHI,X
	STA SOUNDZP+1
	LDY #$00
	LDA (SOUNDZP),Y
	LDY TUNCHANNEL
	STA AUDF0,Y
	INC CHD.NOTELO,X
	BNE TUNNEXTNOTE
	INC CHD.NOTEHI,X
TUNNEXTNOTE
	INC CHD.DURNLO,X
	BNE TUNNEXT
	INC CHD.DURNHI,X
TUNNEXT
	DEX
	CPX #$00
	BMI TUNEXIT
	JMP TUNLOOP
TUNEXIT
	RTS

TUNEND
	LDA CHD.NOTELO,X								;SEE IF WE SHOULD REPEAT
	STA SOUNDZP
	LDA CHD.NOTEHI,X
	STA SOUNDZP+1
	LDY #$00
	LDA (SOUNDZP),Y
	BMI TUNRESTART
	JSR ENDTUNE
	JMP TUNNEXT
TUNRESTART
	LDA CHD.TUNINDEX,X								;GET TUNE NUMBER
	TAY
	LDA CNTVOLTBL,Y								;GET TUNE CONTROL / VOLUME
	STA CHD.CTLVOL,X
	STA CHD.CTLSAV,X								;USED TO RESTORE AFTER DECAY
	LDA NOTETBLLO,Y								;GET TUNE FREQUENCY LOW ADDRESS
	STA CHD.NOTELO,X
	LDA NOTETBLHI,Y								;GET TUNE FREQUENCY HIGH ADDRESS
	STA CHD.NOTEHI,X
	LDA DURNTBLLO,Y								;GET TUNE DURATION LOW ADDRESS
	STA CHD.DURNLO,X
	LDA DURNTBLHI,Y								;GET TUNE DURATION HIGH ADDRESS
	STA CHD.DURNHI,X
	LDY TUNCHANNEL
	LDA CHD.CTLVOL,X
	STA AUDC0,Y									;STORE THE CONTROL / VOLUME IN THE CHANNEL
	LDA #$01									;SET FREQ, CTL, AND VOL TO BE SET
	STA CHD.TUNFRM,X
	JMP TUNNEXT
	
;RESETTIMER
;
;	lda #0
;	sta SKCTL
;	; the period of resetting POKEY (SKCTL = 0) should last for
;	; at least 17 cycles to clear the longest 17-bit polycounter
;	; set AUDF1 register with selector value needed to reach desired E6
;	; poly4 element by channel 1
;	lda #$02 ; 2 cycles
;	sta AUDF2 ; 4 cycles
;	nop ; 2 cycles
;	sta STIMER ; 4 cycles
;	; finish resetting
;	lda #3 ; 2 cycles
;	sta SKCTL ; 4 cycles
;
;	;// does that even work? not sure anything timer related is implemented for extra pokeys ?
;	lda #0
;	sta SKCTL+POKEY2_OFFSET
;	; the period of resetting POKEY (SKCTL = 0) should last for
;	; at least 17 cycles to clear the longest 17-bit polycounter
;	; set AUDF1 register with selector value needed to reach desired E6
;	; poly4 element by channel 1
;	lda #$02 ; 2 cycles
;	sta AUDF2+POKEY2_OFFSET ; 4 cycles
;	nop ; 2 cycles
;	sta STIMER+POKEY2_OFFSET ; 4 cycles
;	; finish resetting
;	lda #3 ; 2 cycles
;	sta SKCTL+POKEY2_OFFSET ; 4 cycles
;
;	rts

;	DATA FOR TUNES

;	CNTVOLTBL - HIGH NYBBLE FOR VOICE CONTROL (7654XXXX), AND LOW NYBBLE FOR VOLUME (XXXX3210)
CNTVOLTBL:
	.byte $00,$a7,$00,$00		 	
	.byte $00,$a7,$a7,$a4
;	.byte $00,$A7,$A7,$A0
;	.byte $00,$A7,$A7,$A0
;	.byte $A7,$A0,$A0
;	.byte $00,$A7,$A7,$A0
;	.byte $A7,$A0,$A0

;	PRIORITY TABLE
PRIRTYTBL:
	.byte $02,$02,$02,$02
	.byte $02,$02,$02,$02	
;	.byte $02,$02,$02,$00
;	.byte $02,$02,$02,$00
;	.byte $02,$02,$02
;	.byte $02,$02,$02,$00
;	.byte $02,$00,$00,$00
	
;	CHANNEL TABLE ($00 - $07 ARE VALID)
CHANNLTBL:
	.byte $00,$01,$02,$03		; must set $00 and $01 to use 16-bit combined channel
	.byte $04,$05,$06,$07
	; anything above 7 causes unpredictable results
;	.byte $00,$01,$02,$03
;	.byte $00,$01,$02,$03
;	.byte $01,$02,$03
;	.byte $00,$01,$02,$03
;	.byte $00,$01,$02,$03

;	DECAY TABLE - DEFINES DECAY COUNT INDEXED BY NOTE DURATION
DECAYTBL:
	.byte $01,$01,$01,$01,$02,$02,$02,$02
	.byte $02,$03,$03,$03,$03,$03,$03,$03
	.byte $04,$04,$04,$04,$04,$04,$04,$04
	.byte $05,$05,$05,$05,$05,$05,$05,$05
	.byte $05,$05,$06,$06,$06,$06,$06,$06
	.byte $06,$06,$06,$06,$07,$07,$07,$07
	.byte $07,$07,$07,$07,$07,$07,$07,$07
	.byte $07,$08,$08,$08,$08,$08,$08,$08

;	FREQUENCY TABLE
NOTETBLHI:
	.byte >(TUNE00),>(TUNE01),>(TUNE02),>(TUNE03)
	.byte >(TUNE04),>(TUNE05),>(TUNE06),>(TUNE07)
;	.byte >(TUNE08),>(TUNE09),>(TUNE0A),>(TUNE0B)
;	.byte >(TUNE0C),>(TUNE0D),>(TUNE0E),>(TUNE0F)
;	.byte >(TUNE10),>(TUNE11),>(TUNE12)
;	.byte >(TUNE13),>(TUNE14),>(TUNE15),>(TUNE16)
;	.byte >(TUNE17),>(TUNE18),>(TUNE19),>(TUNE1a)

NOTETBLLO:
	.byte <(TUNE00),<(TUNE01),<(TUNE02),<(TUNE03)
	.byte <(TUNE04),<(TUNE05),<(TUNE06),<(TUNE07)
;	.byte <(TUNE08),<(TUNE09),<(TUNE0A),<(TUNE0B)
;	.byte <(TUNE0C),<(TUNE0D),<(TUNE0E),<(TUNE0F)
;	.byte <(TUNE10),<(TUNE11),<(TUNE12)
;	.byte <(TUNE13),<(TUNE14),<(TUNE15),<(TUNE16)
;	.byte <(TUNE17),<(TUNE18),<(TUNE19),<(TUNE1a)

;	DURATION TABLE
DURNTBLHI:
	.byte >(DURN00),>(DURN01),>(DURN02),>(DURN03)
	.byte >(DURN04),>(DURN05),>(DURN06),>(DURN07)
;	.byte >(DURN08),>(DURN09),>(DURN0A),>(DURN0B)
;	.byte >(DURN0C),>(DURN0D),>(DURN0E),>(DURN0F)
;	.byte >(DURN10),>(DURN11),>(DURN12)
;	.byte >(DURN13),>(DURN14),>(DURN15),>(DURN16)
;	.byte >(DURN17),>(DURN18),>(DURN19),>(DURN1a)

DURNTBLLO:
	.byte <(DURN00),<(DURN01),<(DURN02),<(DURN03)
	.byte <(DURN04),<(DURN05),<(DURN06),<(DURN07)
;	.byte <(DURN08),<(DURN09),<(DURN0A),<(DURN0B)
;	.byte <(DURN0C),<(DURN0D),<(DURN0E),<(DURN0F)
;	.byte <(DURN10),<(DURN11),<(DURN12)
;	.byte <(DURN13),<(DURN14),<(DURN15),<(DURN16)
;	.byte <(DURN17),<(DURN18),<(DURN19),<(DURN1a)

;TEMPOS
T1	=	$03
T2      =       (T1*2)
T3      =       (T1*3)
T4      =       (T1*4)
T5      =       (T1*5)
T6      =       (T1*6)
T7      =       (T1*7)
T8      =       (T1*8)
T9      =       (T1*9)
TA      =       (T1*10)
TB      =       (T1*11)
TC      =       (T1*12)
TD      =       (T1*13)
TE      =       (T1*14)
TF      =       (T1*15)
T0      =       (T1*16)

;A	16264	3F88			
;A#	15351	3BF7			
;B	14489	3899			
;C	13675	356B				OCTAVE 2
;C#	12907	326B			
;D	12182	2F96			
;D#	11498	2CEA			
;E	10852	2A64	
;
;F	10243	2803			
;F#	9668	25C4			
;G	9125	23A5			
;G#	8612	21A4			
;A	8128	1FC0			
;A#	7672	1DF8			
;B	7241	1C49			
;C	6834	1AB2	243	F3		OCTAVE 3
;C#	6450	1932	230	E6	
;D	6088	17C8	217	D9	
;D#	5746	1672	204	CC	
;E	5423	152F	193	C1	
;F	5118	13FE	182	B6	
;F#	4830	12DE	172	AC	
;G	4559	11CF	162	A2	
;G#	4303	10CF	153	99	
;A	4061	0FDD	144	90	

;coin grab sound effect
TUNE00:

  
	
	.byte $2f,0,$49,$dd,0,$b2,$de,0,$c8,$49,0,$f8
	.byte $2f,0,$49,$dd,0,$b2,$de,0,$c8,$49,0,$f8
	.byte $2f,0,$49,$dd,0,$b2,$de,0,$c8,$49,0,$f8
	.byte $2f,0,$49,$dd,0,$b2,$de,0,$c8,$49,0,$f8
	
	.byte $cf,0,$c8,$2f,0,$49,$de,0,$c8,$dd,0,$2f
	.byte $cf,0,$c8,$2f,0,$49,$de,0,$c8,$dd,0,$2f
	
	.byte $cf,0,$49,$cf,$49,$cf,$49,$F8,$2F,$F8,$2F,$F8,$2F
	.BYTE $dd,$b2,$dd,$b2,$dd,$b2,$dd,$72,$de,$72,$21,$72
	.byte $cf,0,$49,$cf,$49,$cf,$49,$F8,$2F,$F8,$2F,$F8,$2F
	.BYTE $dd,$b2,$dd,$b2,$dd,$b2,$dd,$72,$de,$72,$21,$72
	
	.byte $cf,0,$49,$cf,$49,$cf,$49,$F8,$2F,$F8,$2F,$F8,$2F
	.BYTE $dd,$b2,$dd,$b2,$dd,$b2,$dd,$72,$de,$72,$21,$72
	.byte $cf,0,$49,$cf,$49,$cf,$49,$F8,$2F,$F8,$2F,$F8,$2F
	.BYTE $dd,$b2,$dd,$b2,$dd,$b2,$dd,$72,$de,$72,$21,$72
	
	.byte $de,0,$cf,$dd,$21,$e0,$21,$6c,$e0,$dd,$cf,$de,$21
	.byte $eb,$6c,$e0,$dd,$cf,$de,$2f,$cf,$dd,$e0,$94,0
	.byte $de,$cf,$dd,$21,$e0,$21,$6c,$e0,$dd,$cf,$de,$21
	.byte $eb,$6c,$e0,$dd,$cf,$de,$2f,$cf,$dd,$e0,$94,0
	
	.byte $eb,0,$e4,0,$6c,0,$94,0,$6c,0,$e4,0
	.byte $eb,0,$e4,0,$6c,0,$94,0,$6c,0,$e4,0
	.byte $eb,0,$e4,0,$6c,0,$94,0,$6c,0,$e4,0
	.byte $eb,0,$e4,0,$6c,0,$94,0,$6c,0,$e4,0
	
	
	
	
	
	
	
	.byte 0

    
	
	
	
DURN00:

	 
	 
	   .byte 31,1,16,31,1,16,31,1,16,31,1,16
	  .byte 31,1,16,31,1,16,31,1,16,31,1,16
	  .byte 31,1,16,31,1,16,31,1,16,31,1,16
	  .byte 31,1,16,31,1,16,31,1,16,31,1,16
	  
	  .byte 31,1,16,31,1,16,31,1,16,31,1,16
	  .byte 31,1,16,31,1,16,31,1,16,31,1,16
	  
	  .byte 7,1,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 7,1,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  
	  .byte 7,1,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 7,1,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  
	  .byte 7,1,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  
	   .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	    
	  
	  
	 
	 
	 
	 
	 
	 .byte 0
	
TUNE01:
	
	
	 
	.byte $15,0,$1c,$0f,0,$1a,$12,0,$17,$1c,0,$1d
	.byte $15,0,$1c,$0f,0,$1a,$12,0,$17,$1c,0,$1d
	.byte $15,0,$1c,$0f,0,$1a,$12,0,$17,$1c,0,$1d
	.byte $15,0,$1c,$0f,0,$1a,$12,0,$17,$1c,0,$1d
	
	.byte $11,0,$17,$15,0,$1c,$12,0,$17,$0f,0,$15
	.byte $11,0,$17,$15,0,$1c,$12,0,$17,$0f,0,$15
	
	.byte $11,0,$1c,$11,$1c,$11,$1c,$0e,$15,$0e,$15,$0e,$15
	.BYTE $0f,$1a,$0f,$1a,$0f,$1a,$0f,$16,$12,$16,$0e,$16
	.byte $11,0,$1c,$11,$1c,$11,$1c,$0e,$15,$0e,$15,$0e,$15
	.BYTE $0f,$1a,$0f,$1a,$0f,$1a,$0f,$16,$12,$16,$0e,$16
	
	.byte $11,0,$1c,$11,$1c,$11,$1c,$0e,$15,$0e,$15,$0e,$15
	.BYTE $0f,$1a,$0f,$1a,$0f,$1a,$0f,$16,$12,$16,$0e,$16
	.byte $11,0,$1c,$11,$1c,$11,$1c,$0e,$15,$0e,$15,$0e,$15
	.BYTE $0f,$1a,$0f,$1a,$0f,$1a,$0f,$16,$12,$16,$0e,$16
	
	.byte $12,0,$11,$0f,$0e,$0b,$0e,$09,$0b,$0f,$11,$12,$0e
	.byte $07,$09,$0b,$0f,$11,$12,$15,$11,$0f,$0b,$0a,0
	.byte $12,$11,$0f,$0e,$0b,$0e,$09,$0b,$0f,$11,$12,$0e
	.byte $07,$09,$0b,$0f,$11,$12,$15,$11,$0f,$0b,$0a,0
	
	.byte 7,0,8,0,9,0,10,0,9,0,8,0
	.byte 7,0,8,0,9,0,10,0,9,0,8,0
	.byte 7,0,8,0,9,0,10,0,9,0,8,0
	.byte 7,0,8,0,9,0,10,0,9,0,8,0
	
	
	
	
	
	
	
	
	
	.byte 0
	
	

    
    
	
	
	
	
	

   
	
	
DURN01:
	   .byte 31,1,16,31,1,16,31,1,16,31,1,16
	  .byte 31,1,16,31,1,16,31,1,16,31,1,16
	  .byte 31,1,16,31,1,16,31,1,16,31,1,16
	  .byte 31,1,16,31,1,16,31,1,16,31,1,16
	  
	  .byte 31,1,16,31,1,16,31,1,16,31,1,16
	  .byte 31,1,16,31,1,16,31,1,16,31,1,16
	  
	  .byte 7,1,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 7,1,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  
	  .byte 7,1,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 7,1,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  
	  .byte 7,1,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  
	   .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	 
	 .byte 0
	
	
	
	
	

TUNE02:
	 .byte $2d,0,$47,$db,0,$b0,$dc,0,$c6,$47,0,$f6
	.byte $2d,0,$47,$db,0,$b0,$dc,0,$c6,$47,0,$f6
	.byte $2d,0,$47,$db,0,$b0,$dc,0,$c6,$47,0,$f6
	.byte $2d,0,$47,$db,0,$b0,$dc,0,$c6,$47,0,$f6
	
	.byte $cd,0,$c6,$2d,0,$47,$dc,0,$c6,$db,0,$2d
	.byte $cd,0,$c6,$2d,0,$47,$dc,0,$c6,$db,0,$2d
	
	.byte $cd,0,$47,$cd,$47,$cd,$47,$F6,$2d,$F6,$2d,$F6,$2d
	.BYTE $db,$b0,$db,$b0,$db,$b0,$db,$70,$dc,$70,$1f,$70
	.byte $cd,0,$47,$cd,$47,$cd,$47,$F6,$2d,$F6,$2d,$F6,$2d
	.BYTE $db,$b0,$db,$b0,$db,$b0,$db,$70,$dc,$70,$1f,$70
	
	.byte $cd,0,$47,$cd,$47,$cd,$47,$F6,$2d,$F6,$2d,$F6,$2d
	.BYTE $db,$b0,$db,$b0,$db,$b0,$db,$70,$dc,$70,$1f,$70
	.byte $cd,0,$47,$cd,$47,$cd,$47,$F6,$2d,$F6,$2d,$F6,$2d
	.BYTE $db,$b0,$db,$b0,$db,$b0,$db,$70,$dc,$70,$1f,$70
	
	.byte $dc,0,$cd,$db,$1f,$de,$1f,$6a,$de,$db,$cd,$dc,$1f
	.byte $ed,$6a,$de,$db,$cd,$dc,$2d,$cd,$db,$de,$92,0
	.byte $dc,$cd,$db,$1f,$de,$1f,$6a,$de,$db,$cd,$dc,$1f
	.byte $ed,$6a,$de,$db,$cd,$dc,$2d,$cd,$db,$de,$92,0
	
	.byte $ed,0,$e2,0,$6a,0,$92,0,$6a,0,$e2,0
	.byte $ed,0,$e2,0,$6a,0,$92,0,$6a,0,$e2,0
	.byte $ed,0,$e2,0,$6a,0,$92,0,$6a,0,$e2,0
	.byte $ed,0,$e2,0,$6a,0,$92,0,$6a,0,$e2,0
	
	
	
	 	.byte 0
	
DURN02:
   .byte 31,1,16,31,1,16,31,1,16,31,1,16
	  .byte 31,1,16,31,1,16,31,1,16,31,1,16
	  .byte 31,1,16,31,1,16,31,1,16,31,1,16
	  .byte 31,1,16,31,1,16,31,1,16,31,1,16
	  
	  .byte 31,1,16,31,1,16,31,1,16,31,1,16
	  .byte 31,1,16,31,1,16,31,1,16,31,1,16
	   
	    .byte 7,1,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 7,1,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  
	    .byte 7,1,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 7,1,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  
	  .byte 7,1,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  
	  .byte 0
	
	
	
	
	
	

;
;	TUNE 1 - COMBINED 16-BIT CHANNEL (High order bytes stored in AUDF1)

TUNE03:
   .byte $15,0,$1c,$0f,0,$1a,$12,0,$17,$1c,0,$1d
	.byte $15,0,$1c,$0f,0,$1a,$12,0,$17,$1c,0,$1d
	.byte $15,0,$1c,$0f,0,$1a,$12,0,$17,$1c,0,$1d
	.byte $15,0,$1c,$0f,0,$1a,$12,0,$17,$1c,0,$1d
	
	.byte $11,0,$17,$15,0,$1c,$12,0,$17,$0f,0,$15
	.byte $11,0,$17,$15,0,$1c,$12,0,$17,$0f,0,$15
	
	.byte $11,0,$1c,$11,$1c,$11,$1c,$0e,$15,$0e,$15,$0e,$15
	.BYTE $0f,$1a,$0f,$1a,$0f,$1a,$0f,$16,$12,$16,$0e,$16
	.byte $11,0,$1c,$11,$1c,$11,$1c,$0e,$15,$0e,$15,$0e,$15
	.BYTE $0f,$1a,$0f,$1a,$0f,$1a,$0f,$16,$12,$16,$0e,$16
	
	.byte $11,0,$1c,$11,$1c,$11,$1c,$0e,$15,$0e,$15,$0e,$15
	.BYTE $0f,$1a,$0f,$1a,$0f,$1a,$0f,$16,$12,$16,$0e,$16
	.byte $11,0,$1c,$11,$1c,$11,$1c,$0e,$15,$0e,$15,$0e,$15
	.BYTE $0f,$1a,$0f,$1a,$0f,$1a,$0f,$16,$12,$16,$0e,$16
	
	.byte $12,0,$11,$0f,$0e,$0b,$0e,$09,$0b,$0f,$11,$12,$0e
	.byte $07,$09,$0b,$0f,$11,$12,$15,$11,$0f,$0b,$0a,0
	.byte $12,$11,$0f,$0e,$0b,$0e,$09,$0b,$0f,$11,$12,$0e
	.byte $07,$09,$0b,$0f,$11,$12,$15,$11,$0f,$0b,$0a,0
	
	.byte 7,0,8,0,9,0,10,0,9,0,8,0
	.byte 7,0,8,0,9,0,10,0,9,0,8,0
	.byte 7,0,8,0,9,0,10,0,9,0,8,0
	.byte 7,0,8,0,9,0,10,0,9,0,8,0
	
	
	
	
	
	
	
	
	.byte 0

	
DURN03:	
	
	   .byte 31,1,16,31,1,16,31,1,16,31,1,16
	   .byte 31,1,16,31,1,16,31,1,16,31,1,16
	   .byte 31,1,16,31,1,16,31,1,16,31,1,16
	   .byte 31,1,16,31,1,16,31,1,16,31,1,16
	   
	   .byte 31,1,16,31,1,16,31,1,16,31,1,16
	  .byte 31,1,16,31,1,16,31,1,16,31,1,16
	   
	   .byte 7,1,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 7,1,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  
	   .byte 7,1,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 7,1,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  
	  .byte 7,1,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	
	.byte 0
	 
  
   
  
   
   
   
   
   
   
   
	
	
	.byte 0

;
;	TUNE 1 - COMBINED 16-BIT CHANNEL (High order bytes stored in AUDF1)

TUNE04:

  
	
	.byte $64,$2f,$2f,$64,$2f,$2f,$64,$2f,$2f,$64,$2f,$2f
	.byte $64,$2f,$2f,$64,$2f,$2f,$64,$2f,$2f,$64,$2f,$2f
	.byte $64,$2f,$2f,$64,$2f,$2f,$64,$2f,$2f,$64,$2f,$2f
	.byte $64,$2f,$2f,$64,$2f,$2f,$64,$2f,$2f,$64,$2f,$2f
	
	.byte $6b,$b2,$b2,$6b,$b2,$b2,$96,$c8,$c8,$96,$c8,$c8
	.byte $6b,$b2,$b2,$6b,$b2,$b2,$96,$c8,$c8,$96,$c8,$c8
	
	.byte $64,$2f,$94,$c4,$de,$6c,$03,$Fe,$fb,$99,$49,$21
	.byte $64,$2f,$94,$c4,$de,$6c,$03,$Fe,$fb,$99,$49,$21
	.byte $64,$2f,$94,$c4,$de,$6c,$03,$Fe,$fb,$99,$49,$21
	.byte $64,$2f,$94,$c4,$de,$6c,$03,$Fe,$fb,$99,$49,$21
	
	.byte $64,$49,$b2,$49,$6b,$a5,$c0,$a5
	.byte $64,$49,$b2,$49,$6b,$a5,$c0,$a5
	
	
	
	.byte $d0,0
	.byte $d0,0
	
	
	
	
	
	
	
	.byte 0

    
	
	
	
DURN04:

	 
	 
	   .byte 16,16,16,16,16,16,16,16,16,16,16,16
	  .byte 16,16,16,16,16,16,16,16,16,16,16,16
	  .byte 16,16,16,16,16,16,16,16,16,16,16,16
	  .byte 16,16,16,16,16,16,16,16,16,16,16,16
	  
	  .byte 16,16,16,16,16,16,16,16,16,16,16,16
	  .byte 16,16,16,16,16,16,16,16,16,16,16,16
	  
	 .byte 16,16,16,16,16,16,16,16,16,16,16,16
	 .byte 16,16,16,16,16,16,16,16,16,16,16,16
	 .byte 16,16,16,16,16,16,16,16,16,16,16,16
	 .byte 16,16,16,16,16,16,16,16,16,16,16,16
	  
	 .byte 32,16,32,16,32,16,32,16
	 .byte 32,16,32,16,32,16,32,16
	  
	 
	  
	 .byte 176,16
	 .byte 176,16
	    
	  
	  
	 
	 
	 
	 
	 
	 .byte 0
	
TUNE05:
	
	
	 
	.byte $2a,$15,$15,$2a,$15,$15,$2a,$15,$15,$2a,$15,$15
	.byte $2a,$15,$15,$2a,$15,$15,$2a,$15,$15,$2a,$15,$15
	.byte $2a,$15,$15,$2a,$15,$15,$2a,$15,$15,$2a,$15,$15
	.byte $2a,$15,$15,$2a,$15,$15,$2a,$15,$15,$2a,$15,$15
	
	.byte $35,$1a,$1a,$35,$1a,$1a,$2f,$17,$17,$2f,$17,$17
	.byte $35,$1a,$1a,$35,$1a,$1a,$2f,$17,$17,$2f,$17,$17
	
	.byte $2a,$15,$0a,$25,$12,$09,$28,$13,$09,$38,$1c,$0e
	.byte $2a,$15,$0a,$25,$12,$09,$28,$13,$09,$38,$1c,$0e
	.byte $2a,$15,$0a,$25,$12,$09,$28,$13,$09,$38,$1c,$0e
	.byte $2a,$15,$0a,$25,$12,$09,$28,$13,$09,$38,$1c,$0e
	
	.byte $2a,$1c,$1a,$1c,$36,$23,$1f,$23
	.byte $2a,$1c,$1a,$1c,$36,$23,$1f,$23
	
	.byte $54,0
	.byte $54,0
	
	
	

    
    
	.byte 0
	
	
	
	

   
	
	
DURN05:
	  .byte 16,16,16,16,16,16,16,16,16,16,16,16
	  .byte 16,16,16,16,16,16,16,16,16,16,16,16
	  .byte 16,16,16,16,16,16,16,16,16,16,16,16
	  .byte 16,16,16,16,16,16,16,16,16,16,16,16
	  
	  .byte 16,16,16,16,16,16,16,16,16,16,16,16
	  .byte 16,16,16,16,16,16,16,16,16,16,16,16
	  
	 .byte 16,16,16,16,16,16,16,16,16,16,16,16
	 .byte 16,16,16,16,16,16,16,16,16,16,16,16
	 .byte 16,16,16,16,16,16,16,16,16,16,16,16
	 .byte 16,16,16,16,16,16,16,16,16,16,16,16
	  
	  .byte 32,16,32,16,32,16,32,16
	 .byte 32,16,32,16,32,16,32,16
	  
	 .byte 176,16
	 .byte 176,16
	    
	  
	  
	 
	 
	 
	 
	 
	 .byte 0
	
	
	
	
	

TUNE06:
	 .byte 96,128,72,121,85,108,128,136
	.byte 96,128,72,121,85,108,128,136
	.byte 96,128,72,121,85,108,128,136
	.byte 96,128,72,121,85,108,128,136
	
	.byte 81,108,96,128,85,108,72,96
	.byte 81,108,96,128,85,108,72,96
	
	.byte 81,128,81,128,81,128,68,96,68,96,68,96
	.BYTE 72,120,72,120,72,120,72,102,85,102,64,102
	.byte 81,128,81,128,81,128,68,96,68,96,68,96
	.BYTE 72,120,72,120,72,120,72,102,85,102,64,102
	
	.byte 81,128,81,128,81,128,68,96,68,96,68,96
	.BYTE 72,120,72,120,72,120,72,102,85,102,64,102
	.byte 81,128,81,128,81,128,68,96,68,96,68,96
	.BYTE 72,120,72,120,72,120,72,102,85,102,64,102
	
	.byte 85,81,72,64,53,64,42,53,72,81,85,64
	.byte 35,42,53,72,81,85,96,81,72,53,47,0
	.byte 85,81,72,64,53,64,42,53,72,81,85,64
	.byte 35,42,53,72,81,85,96,81,72,53,47,0
	
	.byte 35,0,40,0,42,0,47,0,42,0,40,0
	.byte 35,0,40,0,42,0,47,0,42,0,40,0
	.byte 35,0,40,0,42,0,47,0,42,0,40,0
	.byte 35,0,40,0,42,0,47,0,42,0,40,0
	
	
	
	 	.byte 0
	
DURN06:
   .byte 32,16,32,16,32,16,32,16
	  .byte 32,16,32,16,32,16,32,16
	  .byte 32,16,32,16,32,16,32,16
	  .byte 32,16,32,16,32,16,32,16
	  
	  .byte 32,16,32,16,32,16,32,16
	   .byte 32,16,32,16,32,16,32,16
	   
	   .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  
	 .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  
	  .byte 0
	
	
	
	
	
	

;
;	TUNE 1 - COMBINED 16-BIT CHANNEL (High order bytes stored in AUDF1)

TUNE07:

	.byte 0
	
   .byte 96,128,72,121,85,108,128,136
	.byte 96,128,72,121,85,108,128,136
	.byte 96,128,72,121,85,108,128,136
	.byte 96,128,72,121,85,108,128,136
	
	.byte 81,108,96,128,85,108,72,96
	.byte 81,108,96,128,85,108,72,96
	
	.byte 81,128,81,128,81,128,68,96,68,96,68,96
	.BYTE 72,120,72,120,72,120,72,102,85,102,64,102
	.byte 81,128,81,128,81,128,68,96,68,96,68,96
	.BYTE 72,120,72,120,72,120,72,102,85,102,64,102
	
	.byte 81,128,81,128,81,128,68,96,68,96,68,96
	.BYTE 72,120,72,120,72,120,72,102,85,102,64,102
	.byte 81,128,81,128,81,128,68,96,68,96,68,96
	.BYTE 72,120,72,120,72,120,72,102,85,102,64,102
	
	.byte 85,81,72,64,53,64,42,53,72,81,85,64
	.byte 35,42,53,72,81,85,96,81,72,53,47,0
	.byte 85,81,72,64,53,64,42,53,72,81,85,64
	.byte 35,42,53,72,81,85,96,81,72,53,47,0
	
	.byte 35,0,40,0,42,0,47,0,42,0,40,0
	.byte 35,0,40,0,42,0,47,0,42,0,40,0
	.byte 35,0,40,0,42,0,47,0,42,0,40,0
	.byte 35,0,40,0,42,0,47,0,42,0,40
	
	
	
	
	
	
	
	
	.byte 0

	
DURN07:	
		.byte 8
	
	   .byte 32,16,32,16,32,16,32,16
	  .byte 32,16,32,16,32,16,32,16
	  .byte 32,16,32,16,32,16,32,16
	  .byte 32,16,32,16,32,16,32,16
	  
	  .byte 32,16,32,16,32,16,32,16
	   .byte 32,16,32,16,32,16,32,16
	   
	   .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  
	 .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8,8
	  .byte 8,8,8,8,8,8,8,8,8,8,8
	
	.byte 0
	 
  
   
  
   
