;mal_pattern = $1100
;mah_pattern = $1120
;mbl_pattern = $1140
;mbh_pattern = $1160
;mcl_pattern = $1180
;mch_pattern = $11a0
;mnl_pattern = $11c0
;mnh_pattern = $11e0


mah03=$d000
mbl02=$d100
mbl07=$d200
mbh07=$d300
mcl03=$d400
mch03=$d500
mnl03=$d600
mnh01=$d700
mnh02=$d800
mnh03=$d900
mnh07=$da00

mnh00=$db00
mch07=$dc00
mcl07=$dd00
mbh02=$de00
mah02=$df00

mbh01=$e000
mbh04=$e100
mbh05=$e200
mbh08=$e300
mbh10=$e400
mbh11=$e500
mcl04=$e600
mcl05=$e700
mbl05=$e800
mcl08=$e900
mcl09=$ea00
mcl10=$eb00
mcl11=$ec00
mch04=$ed00
mch05=$ee00
mbh09=$ef00
mch08=$f000
mch09=$f100
mch10=$f200
mch11=$f300
mnl04=$f400
mnl05=$f500
mnl07=$f600
mnl10=$f700
mnl11=$f800
mnh22=$f900
mnh04=$fa00
mnh05=$fb00
mnh08=$fc00
mnh09=$fd00
mnh10=$fe00
mnh11=$ff00

mah30=$d000
mbh30=$d100
mcl30=$d200
mch30=$d300
mnl30=$d400
mnh30=$d500
mcl22=$d600
mcl23=$d700
mch22=$d800
mch23=$d900
mnh23=$da00

mbh22=$db00
mbh23=$dc00
mbl22=$dd00
mbl23=$de00
mah11=$df00

MB_VALUE = $91
MB_FRAME = $94
MB_PATTERN = $95

	; takes
	;   7 load pattern
	;  11 lang card setup
	;  76 smc
	;   3 loop init
	; 910 play music 80 + 82 + 88 + 80 + 82 + 88 + 80 + 82 + 88 + 80 + 80
	;  25 end
	;==========
	;      = 1032
play_music:

	; self-modify the code
	lda	MB_PATTERN	; 3
	and	#$1f		; 2
	tay			; 2

	; if > 17 use $D000 PAGE2 of language card
	cpy	#17		; 2
	bcs	use_page2	; 3
use_page1:
	; turn on language card	; -1
	lda	$C088		; 4
	jmp	done_lang_card	; 3
use_page2:
	lda	$C080		; 4
	nop			; 2
done_lang_card:



	lda	mal_pattern,Y	; 4
	sta	mb_smc1+2	; 4
	lda	mah_pattern,Y	; 4
	sta	mb_smc2+2	; 4
	sta	mb_smc3+2	; 4

	lda	mbl_pattern,Y	; 4
	sta	mb_smc4+2	; 4
	lda	mbh_pattern,Y	; 4
	sta	mb_smc5+2	; 4
	sta	mb_smc6+2	; 4

	; mcl and mch patterns are the same
	lda	mcl_pattern,Y	; 4
	sta	mb_smc7+2	; 4
	lda	mch_pattern,Y	; 4
	sta	mb_smc8+2	; 4
	sta	mb_smc9+2	; 4

	lda	mnl_pattern,Y	; 4
	sta	mb_smc10+2	; 4
	lda	mnh_pattern,Y	; 4
	sta	mb_smc11+2	; 4
				;=======
				; 76




	; play the code

	ldy	MB_FRAME	; 3
				;=======

	; mal
mb_smc1:
	lda	mal00,Y		; 4
	sta	MB_VALUE	; 3
	ldx	#0		; 2
	jsr	write_ay_both	; 6+65
				;=========
				; 80

	; mah
mb_smc2:
	lda	mal00,Y		; 4
	and	#$f		; 2
	sta	MB_VALUE	; 3
	ldx	#1		; 2
	jsr	write_ay_both	; 6+65
				;========
				; 82

mb_smc3:
	lda	mal00,Y		; 4
	lsr			; 2
	lsr			; 2
	lsr			; 2
	lsr			; 2
	sta	MB_VALUE	; 3
	ldx	#8		; 2
	jsr	write_ay_both	; 6+65
				;=======
				; 88

	; mbl
mb_smc4:
	lda	mbl00,Y		; 4
	sta	MB_VALUE	; 3
	ldx	#2		; 2
	jsr	write_ay_both	; 6+65
				;=======
				; 80
	; mbh
mb_smc5:
	lda	mbh00,Y		; 4
	and	#$f		; 2
	sta	MB_VALUE	; 3
	ldx	#3		; 2
	jsr	write_ay_both	; 6+65
				;=======
				; 82

mb_smc6:
	lda	mbh00,Y		; 4
	lsr			; 2
	lsr			; 2
	lsr			; 2
	lsr			; 2
	sta	MB_VALUE	; 3
	ldx	#9		; 2
	jsr	write_ay_both	; 6+65
				;======
				; 88
	; mcl
mb_smc7:
	lda	mal00,Y		; 4
	sta	MB_VALUE	; 3
	ldx	#4		; 2
	jsr	write_ay_both	; 6+65
				;======
				; 80

	; mch
mb_smc8:
	lda	mal00,Y		; 4
	and	#$f		; 2
	sta	MB_VALUE	; 3
	ldx	#5		; 2
	jsr	write_ay_both	; 6+65
				;=======
				; 82

mb_smc9:
	lda	mal00,Y		; 4
	lsr			; 2
	lsr			; 2
	lsr			; 2
	lsr			; 2
	sta	MB_VALUE	; 3
	ldx	#10		; 2
	jsr	write_ay_both	; 6+65
				;========
				; 88
	; mnl
mb_smc10:
	lda	mal00,Y		; 4
	sta	MB_VALUE	; 3
	ldx	#6		; 2
	jsr	write_ay_both	; 6+65
				;=======
				; 80
	; mnh
mb_smc11:
	lda	mnh00,Y		; 4
	sta	MB_VALUE	; 3
	ldx	#7		; 2
	jsr	write_ay_both	; 6+65
				;=======
				; 80

	inc	MB_FRAME	; 5

	bne	mb_no_change	; 3
				; -1
	inc	MB_PATTERN	; 5
	jmp	mb_done_change	; 3
mb_no_change:
	lda	$0		; 3
	nop			; 2
	nop			; 2
mb_done_change:

	; restore language card
	lda	$C08A		; 4
	rts			; 6
				;=======
				; 25

.align $100
.include "mockingboard.s"

.align	$100

; patterns 31 long
mal_pattern:
.byte	>mal00,>mal00,>mal00,>mal02,>mal02,>mal02,>mal02,>mal02,>mal02
.byte	>mal02,>mal02,>mal02,>mal02,>mal02,>mal02,>mal02,>mal02
.byte	>mal02,>mal02,>mal02,>mal02,>mal02,>mal02,>mal02,>mal02
.byte	>mal02,>mal02,>mal02,>mal02,>mal02,>mal02,>mal02
mah_pattern:
.byte	>mal00,>mal00,>mal00,>mah02,>mah03,>mah04,>mah05,>mah04,>mah07
.byte	>mah04,>mah05,>mah10,>mah11,>mah04,>mah05,>mah04,>mah07
.byte	>mah04,>mah05,>mah10,>mah11,>mah04,>mah05,>mah04,>mah07
.byte	>mah04,>mah05,>mah10,>mah11,>mah10,>mah11,>mah30
mbl_pattern:
.byte	>mal00,>mbl00,>mbl01,>mbl02,>mbl01,>mbl04,>mbl05,>mbl04,>mbl07
.byte	>mbl00,>mbl01,>mbl10,>mbl11,>mbl04,>mbl05,>mbl04,>mbl07
.byte	>mbl00,>mbl01,>mbl10,>mbl11,>mbl04,>mbl05,>mbl22,>mbl23
.byte	>mbl00,>mbl01,>mbl10,>mbl11,>mbl10,>mbl11,>mbl30
mbh_pattern:
.byte	>mal00,>mbh00,>mbh01,>mbh02,>mbh01,>mbh04,>mbh05,>mbh04,>mbh07
.byte	>mbh08,>mbh09,>mbh10,>mbh11,>mbh04,>mbh05,>mbh04,>mbh07
.byte	>mbh08,>mbh09,>mbh10,>mbh11,>mbh04,>mbh05,>mbh22,>mbh23
.byte	>mbh08,>mbh09,>mbh10,>mbh11,>mbh10,>mbh11,>mbh30
mcl_pattern:
.byte	>mal00,>mal00,>mal00,>mal00,>mcl03,>mcl04,>mcl05,>mcl04,>mcl07
.byte	>mcl08,>mcl09,>mcl10,>mcl11,>mcl04,>mcl05,>mcl04,>mcl07
.byte	>mcl08,>mcl09,>mcl10,>mcl11,>mcl04,>mcl05,>mcl22,>mcl23
.byte	>mcl08,>mcl09,>mcl10,>mcl11,>mcl10,>mcl11,>mcl30
mch_pattern:
.byte	>mal00,>mal00,>mal00,>mal00,>mch03,>mch04,>mch05,>mch04,>mch07
.byte	>mch08,>mch09,>mch10,>mch11,>mch04,>mch05,>mch04,>mch07
.byte	>mch08,>mch09,>mch10,>mch11,>mch04,>mch05,>mch22,>mch23
.byte	>mch08,>mch09,>mch10,>mch11,>mch10,>mch11,>mch30
mnl_pattern:
.byte	>mal00,>mal00,>mal00,>mal00,>mnl03,>mnl04,>mnl05,>mnl04,>mnl07
.byte	>mnl04,>mnl05,>mnl10,>mnl11,>mnl04,>mnl05,>mnl04,>mnl07
.byte	>mnl04,>mnl05,>mnl10,>mnl11,>mnl04,>mnl05,>mnl04,>mnl07
.byte	>mnl04,>mnl05,>mnl10,>mnl11,>mnl10,>mnl11,>mnl30
mnh_pattern:
.byte	>mal00,>mnh00,>mnh01,>mnh02,>mnh03,>mnh04,>mnh05,>mnh04,>mnh07
.byte	>mnh08,>mnh09,>mnh10,>mnh11,>mnh04,>mnh05,>mnh04,>mnh07
.byte	>mnh08,>mnh09,>mnh10,>mnh11,>mnh04,>mnh05,>mnh22,>mnh23
.byte	>mnh08,>mnh09,>mnh10,>mnh11,>mnh10,>mnh11,>mnh30

.align	$100

; total = 2+8+8+11+11+11+7+13=71

mal00:
.incbin "music_chunks/mock.al.00"
mal02:
.incbin "music_chunks/mock.al.02"
mbl04:
.incbin "music_chunks/mock.bl.04"
mah04:
.incbin "music_chunks/mock.ah.04"
mah05:
.incbin "music_chunks/mock.ah.05"
mah07:
.incbin "music_chunks/mock.ah.07"
mah10:
.incbin "music_chunks/mock.ah.10"
mbl00:
.incbin "music_chunks/mock.bl.00"
mbl01:
.incbin "music_chunks/mock.bl.01"
mbl10:
.incbin "music_chunks/mock.bl.10"
mbl11:
.incbin "music_chunks/mock.bl.11"
mbh00:
.incbin "music_chunks/mock.bh.00"
mbl30:
.incbin "music_chunks/mock.bl.30"
