Esempio n. 1
0
void opl2_poll(opl_t *opl, int16_t *bufl, int16_t *bufr)
{
        opl2_update(0, bufl, 1);
        opl2_update(1, bufr, 1);

        opl->filtbuf[0] = *bufl = ((*bufl) / 4) + ((opl->filtbuf[0] * 11) / 16);
        opl->filtbuf[1] = *bufr = ((*bufr) / 4) + ((opl->filtbuf[1] * 11) / 16);

        if (opl->timers_enable[0][0])
        {
                opl->timers[0][0]--;
                if (opl->timers[0][0] < 0) opl_timer_over(0, 0);
        }
        if (opl->timers_enable[0][1])
        {
                opl->timers[0][1]--;
                if (opl->timers[0][1] < 0) opl_timer_over(0, 1);
        }
        if (opl->timers_enable[1][0])
        {
                opl->timers[1][0]--;
                if (opl->timers[1][0] < 0) opl_timer_over(1, 0);
        }
        if (opl->timers_enable[1][1])
        {
                opl->timers[1][1]--;
                if (opl->timers[1][1] < 0) opl_timer_over(1, 1);
        }
}
Esempio n. 2
0
void opl2_update2(opl_t *opl)
{
        if (opl->pos < sound_pos_global)
        {
                opl2_update(0, &opl->buffer[opl->pos*2], sound_pos_global - opl->pos);
                opl2_update(1, &opl->buffer[opl->pos*2 + 1], sound_pos_global - opl->pos);
                for (; opl->pos < sound_pos_global; opl->pos++)
                {
                        opl->filtbuf[0] = opl->buffer[opl->pos*2]   = (opl->buffer[opl->pos*2]   / 2);
                        opl->filtbuf[1] = opl->buffer[opl->pos*2+1] = (opl->buffer[opl->pos*2+1] / 2);
                }
        }
}