#dontinclude


function	music_player	music_player_calibration
rem	music_player( calibration.b )
rem	
rem
rem	
def	music_player_rate	byte
def	music_player_cnt1	byte
def	music_player_com	byte
def	music_player_note	byte
def	music_player_note2	byte
def	music_player_hold	byte
def	music_player_pos	word
def	music_player_start	word
def	music_player_cnt2	byte
def	music_player_speed	byte
def	music_player_play	byte
def	music_player_calibration	byte

def	music_player_music	byte
def	music_player_pos2	word
def	music_player_start2	word

music_player
	orcc	#$50	;kill interupt

; turn tv sound on
	lda	$ff01
	anda	#$f7
	sta	$ff01
	lda	$ff03
	anda	#$f7
	sta	$ff03
	lda	$ff23
	ora	#8
	sta	$ff23


	ldx	#music_player_irq
	stx	$010d

	lda	#0
	sta	music_player_play	;not playing
	sta	music_player_note
	sta	music_player_rate

	andcc	#$ef

	rts

;*********************************************************************************
; new music player
music_player_irq

	ldd	$112	;sys clock
	rolb
	rola
	std	$112
	inc	$e00

;playback speed
	if	b,music_player_cnt1>#0
	dec	music_player_cnt1
	else
	lda	music_player_speed
	sta	music_player_cnt1

	if	b,music_player_play!#0
	ldx	music_player_pos
	ldy	music_player_pos2
	lda	,x+
	ldb	,y+
	stb	music_player_note2
	sta	music_player_note
	stx	music_player_pos
	sty	music_player_pos2

	if	b,music_player_music=#0
	lda	music_player_note
	sta	music_player_rate
	else
	lda	music_player_note2
	sta	music_player_rate
	sta	music_player_note
	endif


	if	b,music_player_note!#0	b,music_player_note!#255
	lda	music_player_note
	adda	#1
	sta	music_player_rate
	sta	music_player_note
	endif

	endif

	if	b,music_player_note=#255

	if	b,music_player_play=#2
	ldx	music_player_start
	stx	music_player_pos
	ldy	music_player_start2
	sty	music_player_pos2
	lda	,x+
	ldb	,y+
	sta	music_player_note
	sta	music_player_rate
	stb	music_player_note2
	stx	music_player_pos
	sty	music_player_pos2

	if	b,music_player_music=#0
	lda	music_player_note
	sta	music_player_rate
	else
	lda	music_player_note2
	sta	music_player_rate
	sta	music_player_note
	endif

	else
	ldx	music_player_start
	stx	music_player_pos
	ldy	music_player_start2
	sty	music_player_pos2
	clra
	sta	music_player_note
	sta	music_player_rate
	sta	music_player_play	;stop
	endif

	endif

	endif

;	if	b,music_player_note!#0
;	inc	music_player_rate
;	endif

music_player_repeat_lp


	if	b,music_player_cnt2>#0
	dec	music_player_cnt2
	else
	com	music_player_com
	lda	music_player_rate
	sta	music_player_cnt2
	endif

	if	b,music_player_note=#0
	clr	music_player_com
	endif

	lda	music_player_com
	anda	#252
	sta	$ff20
	dec	music_player_hold
	bne	music_player_repeat_lp

	lda	music_player_calibration
	sta	music_player_hold

	lda	$ff02
	rti





endfunction


function	playmusic_swap	music_player_music
rem	playmusic_swap( value.b )
rem	
rem	
rem	
ref	music_player_music	byte

playmusic_swap


	rts
endfunction



function	playmusic	music_player_play2,music_player_speed,music_player_start,music_player_start2
rem	playmusic( play.b , speed.b , music_addr.w , music_addr2.w )
rem	
rem	
rem	
def	music_player_play2	byte

ref	music_player_start	word
ref	music_player_speed	byte
ref	music_player_start2	word

playmusic
	ldx	music_player_start
	stx	music_player_pos
	ldx	music_player_start2
	stx	music_player_pos2
	lda	#0
	sta	music_player_music	;play 1
	lda	music_player_play2
	sta	music_player_play
	rts

endfunction
