	;====================================
	; generate 4 patterns worth of music
	; at address $7000-$FC00

pt3_write_lc_4:

	; page offset
	lda	#0
	sta	FRAME_PAGE

lc4_frame_decode_loop:

	jsr	pt3_set_pages

	jsr	pt3_write_lc

	lda	FRAME_PAGE
	cmp	#8
	bne	lc4_frame_decode_loop

	rts

pt3_write_lc_9:

	; page offset
	lda	#0
	sta	FRAME_PAGE

lc9_frame_decode_loop:

	jsr	pt3_set_pages

	jsr	pt3_write_lc

	lda	FRAME_PAGE
	cmp	#9
	bne	lc9_frame_decode_loop

	rts


	;==============================
	; write one page of frame data
pt3_write_lc_1:

	; page offset
	lda	#0
	sta	FRAME_PAGE

	jsr	pt3_set_pages

	jsr	pt3_write_lc

	rts



	;==============================
	; write one page of frame data

pt3_write_lc:

	; offset within page
	lda	#0
	sta	FRAME_OFFSET

lc_frame_decode_loop:
	jsr	pt3_make_frame

	jsr	pt3_write_frame

	inc	FRAME_OFFSET

	lda	SOUND_WHILE_DECODE
	beq	no_play_music

	lda	FRAME_OFFSET
	and	#$7
	bne	no_play_music

	jsr	play_frame_compressed

no_play_music:
	lda	FRAME_OFFSET
	cmp	#0 ;64*4		; FIXME: make this depend on song
					; hardcoding for 64 for our song
	bne	lc_frame_decode_loop

	inc	FRAME_PAGE

	rts

	;========================
	;
pt3_set_pages:
	lda	FRAME_PAGE
	asl
	asl
	asl
	asl
	tay

	lda	music_addr_table+0,Y
	sta	r0_wrsmc+2

	lda	music_addr_table+1,Y
	sta	r1_wrsmc+2

	lda	music_addr_table+2,Y
	sta	r2_wrsmc+2

	lda	music_addr_table+3,Y
	sta	r4_wrsmc+2

	lda	music_addr_table+4,Y		;5+13=D4
	sta	r13_wrsmc+2

	lda	music_addr_table+5,Y
	sta	r6_wrsmc+2

	lda	music_addr_table+6,Y
	sta	r7_wrsmc+2

	lda	music_addr_table+7,Y
	sta	r8_wrsmc+2

	lda	music_addr_table+8,Y
	sta	r9_wrsmc+2

	lda	music_addr_table+9,Y
	sta	r11_wrsmc+2

	lda	music_addr_table+10,Y
	sta	r12_wrsmc+2

	rts

.align $100
music_table_begin:

music_addr_table:

.byte $91,$92,$93,$94,$95,$96,$97,$98,$99,$9a,$9b,$BB,$CC,$DD,$EE,$FF	;0
.byte $86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f,$90,$BB,$CC,$DD,$EE,$FF	;1
.byte $7b,$7c,$7d,$7e,$7f,$80,$81,$82,$83,$84,$85,$BB,$CC,$DD,$EE,$FF	;2
.byte $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$BB,$CC,$DD,$EE,$FF	;3
.byte $bd,$be,$bf,$10,$11,$12,$13,$14,$15,$16,$17,$BB,$CC,$DD,$EE,$FF	;4
.byte $b2,$b3,$b4,$b5,$b6,$b7,$b8,$b9,$ba,$bb,$bc,$BB,$CC,$DD,$EE,$FF	;5
.byte $a7,$a8,$a9,$aa,$ab,$ac,$ad,$ae,$af,$b0,$b1,$BB,$CC,$DD,$EE,$FF	;6
.byte $9c,$9d,$9e,$9f,$a0,$A1,$a2,$a3,$a4,$a5,$a6,$BB,$CC,$DD,$EE,$FF	;7
;.byte $40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4A,$BB,$CC,$DD,$EE,$FF	;8
;.byte $35,$36,$37,$38,$39,$3A,$3B,$3C,$3D,$3E,$3F,$BB,$CC,$DD,$EE,$FF	;9
;.byte $d0,$d1,$d2,$d3,$d4,$d5,$d6,$d7,$d8,$d9,$da,$BB,$CC,$DD,$EE,$FF
music_table_end:

.assert >music_table_begin = >music_table_end, error, "music_table crosses page"


