Diff for /np2/cbus/mpu98ii.c between versions 1.5 and 1.6

version 1.5, 2004/01/22 01:10:03 version 1.6, 2004/02/07 21:23:21
Line 54  static void makeintclock(void) { Line 54  static void makeintclock(void) {
         if (l < 5*2) {          if (l < 5*2) {
                 l = 5*2;                  l = 5*2;
         }          }
         l *= mpu98.timebase;                                                    //      *12          l *= mpu98.timebase;                                                            //      *12
         mpu98.clock = (pccore.realclock * 5 / l);               //      /12          mpu98.stepclock = (pccore.realclock * 5 / l);           //      /12
 }  }
   
 static void sendallclocks(REG8 data) {  static void sendallclocks(REG8 data) {
Line 75  static void sendallclocks(REG8 data) { Line 75  static void sendallclocks(REG8 data) {
   
 static void setrecvdata(REG8 data) {  static void setrecvdata(REG8 data) {
   
         if (mpu98.cnt < MPU98_RECVBUFS) {          MPURECV *r;
                 mpu98.buf[(mpu98.pos + mpu98.cnt) & (MPU98_RECVBUFS - 1)] = data;  
                 mpu98.cnt++;          r = &mpu98.r;
           if (r->cnt < MPU98_RECVBUFS) {
                   r->buf[(r->pos + r->cnt) & (MPU98_RECVBUFS - 1)] = data;
                   r->cnt++;
         }          }
 }  }
   
Line 165  ch_nextsearch_more: Line 168  ch_nextsearch_more:
   
 void midiint(NEVENTITEM item) {  void midiint(NEVENTITEM item) {
   
         nevent_set(NEVENT_MIDIINT, mpu98.clock, midiint, NEVENT_RELATIVE);          nevent_set(NEVENT_MIDIINT, mpu98.stepclock, midiint, NEVENT_RELATIVE);
   
         if (mpu98.flag1 & MPU1FLAG_A) {          if (mpu98.flag1 & MPU1FLAG_A) {
                 if (!mpu98.fd_remain) {                  if (!mpu98.fd_remain) {
Line 280  static BOOL sendcmd(REG8 cmd) { Line 283  static BOOL sendcmd(REG8 cmd) {
                 case 0x95:                              // enable clock to host                  case 0x95:                              // enable clock to host
                         mpu98.flag1 |= MPU1FLAG_A;                          mpu98.flag1 |= MPU1FLAG_A;
                         if (!nevent_iswork(NEVENT_MIDIINT)) {                          if (!nevent_iswork(NEVENT_MIDIINT)) {
                                 nevent_set(NEVENT_MIDIINT, mpu98.clock,                                  nevent_set(NEVENT_MIDIINT, mpu98.stepclock,
                                                                                         midiint, NEVENT_ABSOLUTE);                                                                                          midiint, NEVENT_ABSOLUTE);
                         }                          }
                         break;                          break;
Line 289  static BOOL sendcmd(REG8 cmd) { Line 292  static BOOL sendcmd(REG8 cmd) {
                         mpu98.flag1 |= MPU1FLAG_B;                          mpu98.flag1 |= MPU1FLAG_B;
                         mpu98.remainstep = 0;                          mpu98.remainstep = 0;
                         if (!nevent_iswork(NEVENT_MIDIINT)) {                          if (!nevent_iswork(NEVENT_MIDIINT)) {
                                 nevent_set(NEVENT_MIDIINT, mpu98.clock,                                  nevent_set(NEVENT_MIDIINT, mpu98.stepclock,
                                                                                         midiint, NEVENT_ABSOLUTE);                                                                                          midiint, NEVENT_ABSOLUTE);
                         }                          }
                         break;                          break;
Line 526  static void IOOUTCALL mpu98ii_o0(UINT po Line 529  static void IOOUTCALL mpu98ii_o0(UINT po
                         }                          }
                 }                  }
                 if (sent) {                  if (sent) {
                         midiwait(pccore.midiclock * sent);                          midiwait(mpu98.xferclock * sent);
                 }                  }
         }          }
         (void)port;          (void)port;
Line 569  static REG8 IOINPCALL mpu98ii_i0(UINT po Line 572  static REG8 IOINPCALL mpu98ii_i0(UINT po
                 cm_mpu98 = commng_create(COMCREATE_MPU98II);                  cm_mpu98 = commng_create(COMCREATE_MPU98II);
         }          }
         if (cm_mpu98->connect != COMCONNECT_OFF) {          if (cm_mpu98->connect != COMCONNECT_OFF) {
                 if (mpu98.cnt) {                  if (mpu98.r.cnt) {
                         mpu98.cnt--;                          mpu98.r.cnt--;
                         if (mpu98.cnt) {                          if (mpu98.r.cnt) {
                                 mpu98ii_int();                                  mpu98ii_int();
                         }                          }
                         else {                          else {
                                 pic_resetirq(mpu98.irqnum);                                  pic_resetirq(mpu98.irqnum);
                         }                          }
                         mpu98.data = mpu98.buf[mpu98.pos];                          mpu98.data = mpu98.r.buf[mpu98.r.pos];
                         mpu98.pos = (mpu98.pos + 1) & (MPU98_RECVBUFS - 1);                          mpu98.r.pos = (mpu98.r.pos + 1) & (MPU98_RECVBUFS - 1);
                 }                  }
                 return(mpu98.data);                  return(mpu98.data);
         }          }
Line 595  static REG8 IOINPCALL mpu98ii_i2(UINT po Line 598  static REG8 IOINPCALL mpu98ii_i2(UINT po
         }          }
         if (cm_mpu98->connect != COMCONNECT_OFF) {          if (cm_mpu98->connect != COMCONNECT_OFF) {
                 ret = mpu98.status;                  ret = mpu98.status;
                 if (!mpu98.cnt) {                  if (!mpu98.r.cnt) {
                         ret |= MIDIIN_AVAIL;                          ret |= MIDIIN_AVAIL;
                 }                  }
                 return(ret);                  return(ret);
Line 631  void mpu98ii_reset(void) { Line 634  void mpu98ii_reset(void) {
         mpu98.port = 0xc0d0 | ((np2cfg.mpuopt & 0xf0) << 6);          mpu98.port = 0xc0d0 | ((np2cfg.mpuopt & 0xf0) << 6);
         mpu98.irqnum = mpuirqnum[np2cfg.mpuopt & 3];          mpu98.irqnum = mpuirqnum[np2cfg.mpuopt & 3];
 //      pic_registext(mpu98.irqnum);  //      pic_registext(mpu98.irqnum);
         makeintclock();  
 }  }
   
 void mpu98ii_bind(void) {  void mpu98ii_bind(void) {
   
         UINT    port;          UINT    port;
   
           mpu98.xferclock = pccore.realclock / 3125;
           makeintclock();
         port = mpu98.port;          port = mpu98.port;
         iocore_attachout(port, mpu98ii_o0);          iocore_attachout(port, mpu98ii_o0);
         iocore_attachinp(port, mpu98ii_i0);          iocore_attachinp(port, mpu98ii_i0);
Line 651  void mpu98ii_callback(void) { Line 655  void mpu98ii_callback(void) {
         BYTE    data;          BYTE    data;
   
         if (cm_mpu98) {          if (cm_mpu98) {
                 while((mpu98.cnt < MPU98_RECVBUFS) &&                  while((mpu98.r.cnt < MPU98_RECVBUFS) &&
                         (cm_mpu98->read(cm_mpu98, &data))) {                          (cm_mpu98->read(cm_mpu98, &data))) {
                         if (!mpu98.cnt) {                          if (!mpu98.r.cnt) {
                                 mpu98ii_int();                                  mpu98ii_int();
                         }                          }
                         setrecvdata(data);                          setrecvdata(data);

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


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