//-------------------------------
// Snakes of Atari Island
//
// Author: Jakub "JKR" Krzak
// Katowice, April 2012
//-------------------------------


; Sound effects array   
    .array _arrSFX .byte
    $FF
    11, 29, $FF
    11, 11, 11, 29, $FF
    25, 25, 27, 29, $FF
    10, 8, 7, 5, 6, 3, $FF
    3, 6, 5, 7, 8, 10, $FF
    .enda


VBI_Proc .proc

   jsr CMCplayer_tact

   mvza vcnt
   
	inc tmrBase
	lda tmrBase
	cmp #50
	jne l1
	mvza tmrBase
	inc clckSeconds
	lda clckSeconds
	cmp #60
	jne l1
	lda clckMinutes
	cmp #254
	jne l0
	dec clckSeconds
	jne l1
l0
	mvza clckSeconds
	inc clckMinutes
	
l1
   inc tmrDisplMsgs
   sne 
   inc tmrDisplMsgs +1

	lda _msgFlags
	and #(cMsgUp_Change + cMsgDown_Change + cMsgUp_Blink + cMsgDown_Blink)
	jeq l6

	inc _tmrMsg

	lda _tmrMsg	
	cmp #2
	jcc l11 ; if _tmrMsg < 2

	; Upper Message
	checkFlag _msgFlags (cMsgUp_Change + cMsgUp_Blink) 
	jcc l5

	checkFlag _msgFlags cMsgUp_SH
	jcs l3
	
	#if .byte _msgBrUpper = #0
	
		checkFlag _msgFlags cMsgUp_Change 
		jcc l4
		
		;for i:2..39 _scr(i, 0) = _msg2(i)
		ldx #2
l2		lda _msg2, x
		sta _scr, x
		inx
		cpx #40
		bne l2
l4		
		setFlag	_msgFlags cMsgUp_SH	
	#else
		dec _msgBrUpper
	#end
	jmp l5
	
l3
	#if .byte _msgBrUpper = #cMaxMsgBrtnss
		clearFlag _msgFlags (cMsgUp_Change + cMsgUp_SH)
	#else
		inc _msgBrUpper
	#end

l5
	; Lower message
	checkFlag _msgFlags (cMsgDown_Change + cMsgDown_Blink) 
	jcc l6

	checkFlag _msgFlags cMsgDown_SH
	jcs l7
	
	#if .byte _msgBrLower = #0
	
		checkFlag _msgFlags cMsgDown_Change 
		jcc l8
		
		#if .byte _msg = #28 ; '<'
			mva #$12 DLScrllLine
			mva #$12 DLScrllLine2
			;for i:0..39 _scr(i, 24) = _msg(i + 1)
			ldx #0
l9			lda _msg+1, x
			sta _scrL24, x
			inx
			cpx #40
			bne l9
		#else
			mva #$02 DLScrllLine
			mva #$02 DLScrllLine2
			;for i:0..39 _scr(i, 24) = _msg(i)
			ldx #0
l10			lda _msg, x
			sta _scrL24, x
			inx
			cpx #40
			bne l10
		#end
l8		
		setFlag	_msgFlags cMsgDown_SH	
	#else
		dec _msgBrLower
	#end
	jmp l6
	
l7
	#if .byte _msgBrLower = #cMaxMsgBrtnss
		clearFlag _msgFlags (cMsgDown_Change + cMsgDown_SH)
	#else
		inc _msgBrLower
	#end
	
l6
	mvza _tmrMsg

l11
	ldx _sfx_ptr
	#if .byte _arrSFX,x <> #255

		#if .byte _sfx_tmr = #0
			
			#if .byte _mute = #0
	   			ldx _sfx_ptr
	   			lda _arrSFX,x 
	   			tax ; note
				lda #1 ; chanel
	   			ldy #2 ; instrument
	   			jsr CMC_PlayNote
   			#end
   			
   			inc _sfx_ptr
   			mva #5 _sfx_tmr
   
		#else
		
			dec _sfx_tmr
		
		#end		
	#end
	
	jmp $e462
.endp
