uint8_t callfn(char *buf) { for(uint8_t idx = 0; ; idx++) { uint8_t n = __LPM(&fntab[idx].name); void (*fn)(char *) = (void (*)(char *))__LPM_word(&fntab[idx].fn); if(!n) break; if(buf == 0) { DC(' '); DC(n); } else if(buf[0] == n) { fn(buf); return 1; } } return 0; }
//--------------------------------------------------------------------------- void SndPlayNote(u8 ch, u8 note) { if(ch == 1 && Snd.isTonePlay == TRUE) { return; } u16 freq = __LPM_word(SndMidiNoteFreq + note); if(ch == 0) { Snd.scoreFreqCnt = freq; } Snd.isScoreCh[ch] = TRUE; SndStartTimerCh(ch, F_CPU / freq); }