|
|
| version 1.4, 2004/01/13 05:30:59 | version 1.8, 2004/06/02 11:02:53 |
|---|---|
| Line 35 void pcm86gen_setvol(UINT vol) { | Line 35 void pcm86gen_setvol(UINT vol) { |
| pcm86gen_update(); | pcm86gen_update(); |
| } | } |
| void pcm86_reset(void) { // ver0.28 | void pcm86_reset(void) { |
| ZeroMemory(&pcm86, sizeof(pcm86)); | ZeroMemory(&pcm86, sizeof(pcm86)); |
| pcm86.fifosize = 0x80; // ver0.29 | pcm86.fifosize = 0x80; |
| pcm86.dactrl = 0x32; | pcm86.dactrl = 0x32; |
| pcm86.stepmask = (1 << 2) - 1; | pcm86.stepmask = (1 << 2) - 1; |
| pcm86.stepbit = 2; | pcm86.stepbit = 2; |
| Line 68 void pcm86_setpcmrate(REG8 val) { | Line 68 void pcm86_setpcmrate(REG8 val) { |
| } | } |
| } | } |
| void pcm86_cb(NEVENTITEM item) { // ver0.29 | void pcm86_cb(NEVENTITEM item) { |
| if (pcm86.reqirq) { | if (pcm86.reqirq) { |
| sound_sync(); | sound_sync(); |
| // RECALC_NOWCLKP; | // RECALC_NOWCLKP; |
| if (pcm86.virbuf <= pcm86.fifosize) { | if (pcm86.virbuf <= pcm86.fifosize) { |
| pcm86.reqirq = 0; | pcm86.reqirq = 0; |
| pcm86.irqflag = 1; | |
| pic_setirq(fmtimer.irq); | pic_setirq(fmtimer.irq); |
| } | } |
| else { | else { |
| Line 97 void pcm86_setnextintr(void) { | Line 98 void pcm86_setnextintr(void) { |
| // cnt += 4; // ちょっと延滞させる | // cnt += 4; // ちょっと延滞させる |
| // ここで clk = pccore.realclock * cnt / 86pcm_rate | // ここで clk = pccore.realclock * cnt / 86pcm_rate |
| // clk = ((pccore.baseclock / 86pcm_rate) * cnt) * pccore.multiple | // clk = ((pccore.baseclock / 86pcm_rate) * cnt) * pccore.multiple |
| if (pccore.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; |
| Line 122 void SOUNDCALL pcm86gen_checkbuf(void) { | Line 123 void SOUNDCALL pcm86gen_checkbuf(void) { |
| past <<= 6; | past <<= 6; |
| past -= pcm86.lastclock; | past -= pcm86.lastclock; |
| if (past >= pcm86.stepclock) { | if (past >= pcm86.stepclock) { |
| RECALC_NOWCLKWAIT; | past = past / pcm86.stepclock; |
| pcm86.lastclock += (past * pcm86.stepclock); | |
| RECALC_NOWCLKWAIT(past); | |
| } | } |
| bufs = pcm86.realbuf - pcm86.virbuf; | bufs = pcm86.realbuf - pcm86.virbuf; |
| Line 131 void SOUNDCALL pcm86gen_checkbuf(void) { | Line 134 void SOUNDCALL pcm86gen_checkbuf(void) { |
| pcm86.virbuf += bufs; | pcm86.virbuf += bufs; |
| if (pcm86.virbuf <= pcm86.fifosize) { | if (pcm86.virbuf <= pcm86.fifosize) { |
| pcm86.reqirq = 0; | pcm86.reqirq = 0; |
| pcm86.irqflag = 1; | |
| pic_setirq(fmtimer.irq); | pic_setirq(fmtimer.irq); |
| } | } |
| else { | else { |
| Line 147 void SOUNDCALL pcm86gen_checkbuf(void) { | Line 151 void SOUNDCALL pcm86gen_checkbuf(void) { |
| } | } |
| } | } |
| BOOL pcm86gen_intrq(void) { | |
| if (pcm86.irqflag) { | |
| return(TRUE); | |
| } | |
| if (pcm86.fifo & 0x20) { | |
| sound_sync(); | |
| if ((pcm86.reqirq) && (pcm86.virbuf <= pcm86.fifosize)) { | |
| pcm86.reqirq = 0; | |
| pcm86.irqflag = 1; | |
| return(TRUE); | |
| } | |
| } | |
| return(FALSE); | |
| } | |