/* Run FM chip for required M-cycles */ INLINE void fm_update(unsigned int cycles) { if (cycles > fm_cycles_count) { int32 *buffer; /* samples to run */ unsigned int samples = (cycles - fm_cycles_count + fm_cycles_ratio - 1) / fm_cycles_ratio; /* update cycle count */ fm_cycles_count += samples * fm_cycles_ratio; /* select input sample buffer */ buffer = Fir_Resampler_buffer(); if (buffer) { Fir_Resampler_write(samples << 1); } else { buffer = snd.fm.pos; snd.fm.pos += (samples << 1); } /* run FM chip & get samples */ YM_Update(buffer, samples); } }
/* Run FM chip until required M-cycles */ INLINE void fm_update(unsigned int cycles) { if (cycles > fm_cycles_count) { /* number of samples to run */ unsigned int samples = (cycles - fm_cycles_count + fm_cycles_ratio - 1) / fm_cycles_ratio; /* run FM chip to sample buffer */ YM_Update(fm_ptr, samples); /* update FM buffer pointer */ fm_ptr += (samples << 1); /* update FM cycle counter */ fm_cycles_count += samples * fm_cycles_ratio; } }