|
|
| version 1.3, 2003/12/08 00:55:33 | version 1.5, 2004/02/19 11:32:12 |
|---|---|
| Line 42 void pcm86_reset(void) { // ve | Line 42 void pcm86_reset(void) { // ve |
| pcm86.dactrl = 0x32; | pcm86.dactrl = 0x32; |
| pcm86.stepmask = (1 << 2) - 1; | pcm86.stepmask = (1 << 2) - 1; |
| pcm86.stepbit = 2; | pcm86.stepbit = 2; |
| pcm86.stepclock = (pc.baseclock << 6); | pcm86.stepclock = (pccore.baseclock << 6); |
| pcm86.stepclock /= 44100; | pcm86.stepclock /= 44100; |
| pcm86.stepclock *= pc.multiple; | pcm86.stepclock *= pccore.multiple; |
| pcm86.rescue = (PCM86_RESCUE * 32) << 2; | pcm86.rescue = (PCM86_RESCUE * 32) << 2; |
| } | } |
| Line 59 void pcm86_setpcmrate(REG8 val) { | Line 59 void pcm86_setpcmrate(REG8 val) { |
| SINT32 rate; | SINT32 rate; |
| rate = pcm86rate8[val & 7]; | rate = pcm86rate8[val & 7]; |
| pcm86.stepclock = (pc.baseclock << 6); | pcm86.stepclock = (pccore.baseclock << 6); |
| pcm86.stepclock /= rate; | pcm86.stepclock /= rate; |
| pcm86.stepclock *= (pc.multiple << 3); | pcm86.stepclock *= (pccore.multiple << 3); |
| if (pcm86cfg.rate) { | if (pcm86cfg.rate) { |
| pcm86.div = (rate << (PCM86_DIVBIT - 3)) / pcm86cfg.rate; | pcm86.div = (rate << (PCM86_DIVBIT - 3)) / pcm86cfg.rate; |
| pcm86.div2 = (pcm86cfg.rate << (PCM86_DIVBIT + 3)) / rate; | pcm86.div2 = (pcm86cfg.rate << (PCM86_DIVBIT + 3)) / rate; |
| Line 95 void pcm86_setnextintr(void) { | Line 95 void pcm86_setnextintr(void) { |
| cnt += pcm86.stepmask; | cnt += pcm86.stepmask; |
| cnt >>= pcm86.stepbit; | cnt >>= pcm86.stepbit; |
| // cnt += 4; // ちょっと延滞させる | // cnt += 4; // ちょっと延滞させる |
| // ここで clk = pc.realclock * cnt / 86pcm_rate | // ここで clk = pccore.realclock * cnt / 86pcm_rate |
| // clk = ((pc.baseclock / 86pcm_rate) * cnt) * pc.multiple | // clk = ((pccore.baseclock / 86pcm_rate) * cnt) * pccore.multiple |
| if (pc.baseclock == PCBASECLOCK25) { | if (pccore.cpumode & CPUMODE_8MHZ) { |
| clk = clk25_128[pcm86.fifo & 7]; | clk = clk20_128[pcm86.fifo & 7]; |
| } | } |
| else { | else { |
| clk = clk20_128[pcm86.fifo & 7]; | clk = clk25_128[pcm86.fifo & 7]; |
| } | } |
| // cntは最大 8000h で 32bitで収まるように… | // cntは最大 8000h で 32bitで収まるように… |
| clk *= cnt; | clk *= cnt; |
| clk >>= 7; | clk >>= 7; |
| // clk++; // roundup | // clk++; // roundup |
| clk *= pc.multiple; | clk *= pccore.multiple; |
| nevent_set(NEVENT_86PCM, clk, pcm86_cb, NEVENT_ABSOLUTE); | nevent_set(NEVENT_86PCM, clk, pcm86_cb, NEVENT_ABSOLUTE); |
| } | } |
| } | } |