コード例 #1
0
ファイル: musicTest.c プロジェクト: imaspiderman/VBGame
void timeHnd(void){
	u8 tr,doTimer;
	timer_int(0);
	timer_enable(0);
	timer_clearstat();
	
	for(tr=0; tr<NUM_TRACKS; tr++){
		if(trackTable[tr].play == 0) continue;
		if(trackTable[tr].data[trackTable[tr].currNote].tickPosition == musicTick && 
		   trackTable[tr].data[trackTable[tr].currNote].onoff == 0x09){//Start note
		    while(trackTable[tr].data[trackTable[tr].currNote+1].tickPosition == musicTick && //Look for the last note in a cord and play that one.
			      trackTable[tr].data[trackTable[tr].currNote+1].onoff == 0x09) trackTable[tr].currNote++;
			SND_REGS[tr].SxFQH=(FREQUENCY[trackTable[tr].data[trackTable[tr].currNote].note]>>8) & 0xFF;
			SND_REGS[tr].SxFQL=FREQUENCY[trackTable[tr].data[trackTable[tr].currNote].note] & 0xFF;
			SND_REGS[tr].SxLRV=trackTable[tr].volume;
			SND_REGS[tr].SxRAM = tr;
			trackTable[tr].offNote = 0;
			SND_REGS[tr].SxINT = 0x9F;
		}
		/*some midi's don't have off notes so this sets a max length for a given note*/
		trackTable[tr].offNote++;
		if(trackTable[tr].offNote > MAX_NOTE_LENGTH){
			SND_REGS[tr].SxINT = 0x00;
		}

		while(trackTable[tr].data[trackTable[tr].currNote].tickPosition <= musicTick && 
		      trackTable[tr].data[trackTable[tr].currNote].tickPosition != 0xFFFFFFFF){
			trackTable[tr].currNote++;
		}
		
		if(trackTable[tr].data[trackTable[tr].currNote].tickPosition == 0xFFFFFFFF){
			trackTable[tr].play = 0;
			trackTable[tr].currNote = 0;
			SND_REGS[tr].SxINT=0;
		}
	}
	musicTick++;
	doTimer = 0x00;
	for(tr=0; tr<NUM_TRACKS; tr++){
		if(trackTable[tr].play == 1) doTimer = 0x01;
	}
	if(doTimer){
		timer_int(1);
		timer_enable(1);
	}
}
コード例 #2
0
ファイル: musicTest.c プロジェクト: imaspiderman/VBGame
void DoSound(u16 timerCount){
	u8 i;
	for(i=0; i<NUM_TRACKS; i++){
		trackTable[i].currNote = 0;
	}
	musicTick = 0;
	timer_freq(1);
	timer_set(timerCount);
	timer_enable(1);
	timer_int(1);
	
	HW_REGS[BKCOL] = ~HW_REGS[BKCOL];
}
コード例 #3
0
ファイル: acher_config.c プロジェクト: FreeJaus/ardupi
void conf_timers(void){
TCNT0=0;
TCNT1=0;
OCR0A=LINE_LIMIT;
OCR1A=COLUMN_LIMIT;

TCCR0A|=1<<WGM01;
TCCR0B|=1<<CS02;
TCCR0B|=1<<CS00;

TCCR1B|=1<<WGM12;
TCCR1B|=1<<CS12;
TCCR1B|=1<<CS10;

TIFR0=0;
TIFR1=0;

timer_int(1);
}