Diff for /np2/cbus/pcm86io.c between versions 1.6 and 1.9

version 1.6, 2004/03/30 07:12:03 version 1.9, 2004/06/17 10:09:46
Line 19  static const SINT32 pcm86rescue[] = {PCM Line 19  static const SINT32 pcm86rescue[] = {PCM
   
 static void IOOUTCALL pcm86_oa460(UINT port, REG8 val) {  static void IOOUTCALL pcm86_oa460(UINT port, REG8 val) {
   
   //      TRACEOUT(("86pcm out %.4x %.2x", port, val));
         pcm86.extfunc = val;          pcm86.extfunc = val;
         fmboard_extenable((REG8)(val & 1));          fmboard_extenable((REG8)(val & 1));
         (void)port;          (void)port;
Line 26  static void IOOUTCALL pcm86_oa460(UINT p Line 27  static void IOOUTCALL pcm86_oa460(UINT p
   
 static void IOOUTCALL pcm86_oa466(UINT port, REG8 val) {  static void IOOUTCALL pcm86_oa466(UINT port, REG8 val) {
   
   //      TRACEOUT(("86pcm out %.4x %.2x", port, val));
         if ((val & 0xe0) == 0xa0) {          if ((val & 0xe0) == 0xa0) {
                 sound_sync();                  sound_sync();
                 pcm86.vol5 = (~val) & 15;                  pcm86.vol5 = (~val) & 15;
Line 38  static void IOOUTCALL pcm86_oa468(UINT p Line 40  static void IOOUTCALL pcm86_oa468(UINT p
   
         REG8    xchgbit;          REG8    xchgbit;
   
   //      TRACEOUT(("86pcm out %.4x %.2x", port, val));
         sound_sync();          sound_sync();
         xchgbit = pcm86.fifo ^ val;          xchgbit = pcm86.fifo ^ val;
         // バッファリセット判定          // バッファリセット判定
Line 50  static void IOOUTCALL pcm86_oa468(UINT p Line 53  static void IOOUTCALL pcm86_oa468(UINT p
                 pcm86.lastclock <<= 6;                  pcm86.lastclock <<= 6;
         }          }
         if ((xchgbit & 0x10) && (!(val & 0x10))) {          if ((xchgbit & 0x10) && (!(val & 0x10))) {
                 pcm86.write = 0;                  pcm86.irqflag = 0;
                 pcm86.reqirq = 0;  //              pcm86.write = 0;
   //              pcm86.reqirq = 0;
         }          }
         // サンプリングレート変更          // サンプリングレート変更
         if (xchgbit & 7) {          if (xchgbit & 7) {
                 pcm86.rescue = pcm86rescue[val & 7] << pcm86.stepbit;                  pcm86.rescue = pcm86rescue[val & 7] << pcm86.stepbit;
                 pcm86_setpcmrate(val);                  pcm86_setpcmrate(val);
         }          }
   #if 1   // これ重大なバグ....
           pcm86.fifo = val;
   #else
         pcm86.fifo = val & (~0x10);          pcm86.fifo = val & (~0x10);
   #endif
         if ((xchgbit & 0x80) && (val & 0x80)) {          if ((xchgbit & 0x80) && (val & 0x80)) {
                 pcm86.lastclock = CPU_CLOCK + CPU_BASECLOCK - CPU_REMCLOCK;                  pcm86.lastclock = CPU_CLOCK + CPU_BASECLOCK - CPU_REMCLOCK;
                 pcm86.lastclock <<= 6;                  pcm86.lastclock <<= 6;
Line 69  static void IOOUTCALL pcm86_oa468(UINT p Line 77  static void IOOUTCALL pcm86_oa468(UINT p
   
 static void IOOUTCALL pcm86_oa46a(UINT port, REG8 val) {  static void IOOUTCALL pcm86_oa46a(UINT port, REG8 val) {
   
   //      TRACEOUT(("86pcm out %.4x %.2x", port, val));
         sound_sync();          sound_sync();
         if (pcm86.fifo & 0x20) {          if (pcm86.fifo & 0x20) {
 #if 1  #if 1
Line 97  static void IOOUTCALL pcm86_oa46a(UINT p Line 106  static void IOOUTCALL pcm86_oa46a(UINT p
   
 static void IOOUTCALL pcm86_oa46c(UINT port, REG8 val) {  static void IOOUTCALL pcm86_oa46c(UINT port, REG8 val) {
   
   //      TRACEOUT(("86pcm out %.4x %.2x", port, val));
   #if 1
           if (pcm86.virbuf < PCM86_LOGICALBUF) {
                   pcm86.virbuf++;
           }
           pcm86.buffer[pcm86.wrtpos] = val;
           pcm86.wrtpos = (pcm86.wrtpos + 1) & PCM86_BUFMSK;
           pcm86.realbuf++;
           // バッファオーバーフローの監視
           if (pcm86.realbuf >= PCM86_REALBUFSIZE) {
   #if 1
                   pcm86.realbuf -= 4;
                   pcm86.readpos = (pcm86.readpos + 4) & PCM86_BUFMSK;
   #else
                   pcm86.realbuf &= 3;                             // align4決めウチ
                   pcm86.realbuf += PCM86_REALBUFSIZE - 4;
   #endif
           }
   //      pcm86.write = 1;
           pcm86.reqirq = 1;
   #else
         if (pcm86.virbuf < PCM86_LOGICALBUF) {          if (pcm86.virbuf < PCM86_LOGICALBUF) {
                 pcm86.virbuf++;                  pcm86.virbuf++;
                 pcm86.buffer[pcm86.wrtpos] = val;                  pcm86.buffer[pcm86.wrtpos] = val;
Line 107  static void IOOUTCALL pcm86_oa46c(UINT p Line 137  static void IOOUTCALL pcm86_oa46c(UINT p
                         pcm86.realbuf &= 3;                             // align4決めウチ                          pcm86.realbuf &= 3;                             // align4決めウチ
                         pcm86.realbuf += PCM86_REALBUFSIZE - 4;                          pcm86.realbuf += PCM86_REALBUFSIZE - 4;
                 }                  }
                 pcm86.write = 1;  //              pcm86.write = 1;
                 pcm86.reqirq = 1;                  pcm86.reqirq = 1;
         }          }
   #endif
         (void)port;          (void)port;
 }  }
   
Line 121  static REG8 IOINPCALL pcm86_ia460(UINT p Line 152  static REG8 IOINPCALL pcm86_ia460(UINT p
   
 static REG8 IOINPCALL pcm86_ia466(UINT port) {  static REG8 IOINPCALL pcm86_ia466(UINT port) {
   
         UINT32  nowclk;  
         UINT32  past;          UINT32  past;
           UINT32  cnt;
           UINT32  stepclock;
         REG8    ret;          REG8    ret;
   
         // こんなんでお茶濁すんなら ちゃんと書き直しましょうね 漏れ…          past = CPU_CLOCK + CPU_BASECLOCK - CPU_REMCLOCK;
         if (!(pcm86.fifo & 0x80)) {          past <<= 6;
                 ret = 0;          past -= pcm86.lastclock;
         }          stepclock = pcm86.stepclock;
         else {          if (past >= stepclock) {
                 sound_sync();                  cnt = past / stepclock;
                 nowclk = CPU_CLOCK + CPU_BASECLOCK - CPU_REMCLOCK;                  pcm86.lastclock += (cnt * stepclock);
                 nowclk <<= 6;                  past -= cnt * stepclock;
                 past = nowclk - pcm86.lastclock;                  if (pcm86.fifo & 0x80) {
                 if (past >= pcm86.stepclock) {                          sound_sync();
                         RECALC_NOWCLKWAIT;                          RECALC_NOWCLKWAIT(cnt);
                         past = nowclk - pcm86.lastclock;  
                 }                  }
                 ret = ((past << 1) >= pcm86.stepclock)?1:0;  
         }          }
           ret = ((past << 1) >= stepclock)?1:0;
         if (pcm86.virbuf >= PCM86_LOGICALBUF) {                 // バッファフル          if (pcm86.virbuf >= PCM86_LOGICALBUF) {                 // バッファフル
                 ret |= 0x80;                  ret |= 0x80;
         }          }
Line 147  static REG8 IOINPCALL pcm86_ia466(UINT p Line 178  static REG8 IOINPCALL pcm86_ia466(UINT p
                 ret |= 0x40;                                                            // ちと変…                  ret |= 0x40;                                                            // ちと変…
         }          }
         (void)port;          (void)port;
   //      TRACEOUT(("86pcm in %.4x %.2x", port, ret));
         return(ret);          return(ret);
 }  }
   
Line 182  static REG8 IOINPCALL pcm86_ia468(UINT p Line 214  static REG8 IOINPCALL pcm86_ia468(UINT p
         }          }
 #endif  #endif
         (void)port;          (void)port;
   //      TRACEOUT(("86pcm in %.4x %.2x", port, ret));
         return(ret);          return(ret);
 }  }
   
 static REG8 IOINPCALL pcm86_ia46a(UINT port) {  static REG8 IOINPCALL pcm86_ia46a(UINT port) {
   
         (void)port;          (void)port;
   //      TRACEOUT(("86pcm in %.4x %.2x", port, pcm86.dactrl));
         return(pcm86.dactrl);          return(pcm86.dactrl);
 }  }
   

Removed from v.1.6  
changed lines
  Added in v.1.9


RetroPC.NET-CVS <cvs@retropc.net>