| 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); | 
 |  | } | 
 |  |  |