--- np2/cbus/pcm86io.c 2004/03/30 07:12:03 1.6 +++ np2/cbus/pcm86io.c 2004/03/30 08:48:46 1.7 @@ -121,25 +121,25 @@ static REG8 IOINPCALL pcm86_ia460(UINT p static REG8 IOINPCALL pcm86_ia466(UINT port) { - UINT32 nowclk; UINT32 past; + UINT32 cnt; + UINT32 stepclock; REG8 ret; - // こんなんでお茶濁すんなら ちゃんと書き直しましょうね 漏れ… - if (!(pcm86.fifo & 0x80)) { - ret = 0; - } - else { - sound_sync(); - nowclk = CPU_CLOCK + CPU_BASECLOCK - CPU_REMCLOCK; - nowclk <<= 6; - past = nowclk - pcm86.lastclock; - if (past >= pcm86.stepclock) { - RECALC_NOWCLKWAIT; - past = nowclk - pcm86.lastclock; + past = CPU_CLOCK + CPU_BASECLOCK - CPU_REMCLOCK; + past <<= 6; + past -= pcm86.lastclock; + stepclock = pcm86.stepclock; + if (past >= stepclock) { + cnt = past / stepclock; + pcm86.lastclock += (cnt * stepclock); + past -= cnt * stepclock; + if (pcm86.fifo & 0x80) { + sound_sync(); + RECALC_NOWCLKWAIT(cnt); } - ret = ((past << 1) >= pcm86.stepclock)?1:0; } + ret = ((past << 1) >= stepclock)?1:0; if (pcm86.virbuf >= PCM86_LOGICALBUF) { // バッファフル ret |= 0x80; }