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

version 1.1, 2003/10/16 17:58:00 version 1.5, 2004/01/22 01:10:03
Line 1 Line 1
 #include        "compiler.h"  #include        "compiler.h"
 #include        "commng.h"  #include        "commng.h"
 #include        "i286.h"  
 #include        "pccore.h"  #include        "pccore.h"
 #include        "iocore.h"  #include        "iocore.h"
 #include        "cbuscore.h"  #include        "cbuscore.h"
Line 41  enum { Line 40  enum {
         COMMNG          cm_mpu98;          COMMNG          cm_mpu98;
   
   
 static const BYTE mpuirqnum[4] = {3, 5, 6, 12};  static const UINT8 mpuirqnum[4] = {3, 5, 6, 12};
   
 static const BYTE fd_step1[4][4] = {{0, 0, 0, 0}, {1, 0, 0, 0},  static const UINT8 fd_step1[4][4] = {{0, 0, 0, 0}, {1, 0, 0, 0},
                                                                 {1, 0, 1, 0}, {1, 1, 1, 0}};                                                                          {1, 0, 1, 0}, {1, 1, 1, 0}};
   
   
 static void makeintclock(void) {  static void makeintclock(void) {
Line 55  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 = (pc.realclock * 5 / l);           //      /12          mpu98.clock = (pccore.realclock * 5 / l);               //      /12
 }  }
   
 static void sendallclocks(BYTE data) {  static void sendallclocks(REG8 data) {
   
         BYTE    quarter;          REG8    quarter;
         int             i;          int             i;
   
         quarter = data >> 2;          quarter = data >> 2;
Line 69  static void sendallclocks(BYTE data) { Line 68  static void sendallclocks(BYTE data) {
                 quarter = 64;                  quarter = 64;
         }          }
         for (i=0; i<4; i++) {          for (i=0; i<4; i++) {
                 mpu98.fd_step[i] = fd_step1[data & 3][i];                  mpu98.fd_step[i] = quarter + fd_step1[data & 3][i];
                 mpu98.fd_step[i] += quarter;  
         }          }
         mpu98.fd_remain = 0;          mpu98.fd_remain = 0;
 }  }
   
 static void setrecvdata(BYTE data) {  static void setrecvdata(REG8 data) {
   
         if (mpu98.cnt < MPU98_RECVBUFS) {          if (mpu98.cnt < MPU98_RECVBUFS) {
                 mpu98.buf[(mpu98.pos + mpu98.cnt) & (MPU98_RECVBUFS - 1)] = data;                  mpu98.buf[(mpu98.pos + mpu98.cnt) & (MPU98_RECVBUFS - 1)] = data;
Line 91  static void mpu98ii_int(void) { Line 89  static void mpu98ii_int(void) {
 static void ch_step(void) {  static void ch_step(void) {
   
         int             i;          int             i;
         BYTE    bit;          REG8    bit;
   
         if (mpu98.flag1 & MPU1FLAG_F9) {          if (mpu98.flag1 & MPU1FLAG_F9) {
                 if (mpu98.f9.step) {                  if (mpu98.f9.step) {
                         mpu98.f9.step--;                          mpu98.f9.step--;
                 }                  }
         }          }
         for (i=0, bit=1; bit; bit<<=1, i++) {          for (i=0, bit=1; i<8; bit<<=1, i++) {
                 if (mpu98.intch & bit) {                  if (mpu98.intch & bit) {
                         if (mpu98.ch[i].step) {                          if (mpu98.ch[i].step) {
                                 mpu98.ch[i].step--;                                  mpu98.ch[i].step--;
Line 110  static void ch_step(void) { Line 108  static void ch_step(void) {
 static BOOL ch_nextsearch(void) {  static BOOL ch_nextsearch(void) {
   
         int             i;          int             i;
         BYTE    bit;          REG8    bit;
   
 ch_nextsearch_more:  ch_nextsearch_more:
         if (mpu98.intreq == 9) {          if (mpu98.intreq == 9) {
Line 148  ch_nextsearch_more: Line 146  ch_nextsearch_more:
                                         }                                          }
                                         ch->datas = 0;                                          ch->datas = 0;
                                 }                                  }
                                 setrecvdata((BYTE)(0xf0 + mpu98.intreq));                                  setrecvdata((REG8)(0xf0 + mpu98.intreq));
                                 mpu98ii_int();                                  mpu98ii_int();
                                 mpu98.recvevent |= MIDIE_STEP;                                  mpu98.recvevent |= MIDIE_STEP;
                                 return(TRUE);                                  return(TRUE);
Line 205  static void midiwait(SINT32 waitclock) { Line 203  static void midiwait(SINT32 waitclock) {
         }          }
 }  }
   
 static BOOL sendcmd(BYTE cmd) {  static BOOL sendcmd(REG8 cmd) {
   
         BYTE    work;          REG8    work;
   
         mpu98.cmd = cmd;          mpu98.cmd = cmd;
         switch(cmd & 0xf0) {          switch(cmd & 0xf0) {
Line 339  static BOOL sendcmd(BYTE cmd) { Line 337  static BOOL sendcmd(BYTE cmd) {
         return(TRUE);          return(TRUE);
 }  }
   
 static void group_ex(BYTE cmd, BYTE data) {  static void group_ex(REG8 cmd, REG8 data) {
   
         switch(cmd) {          switch(cmd) {
                 case 0xe0:                              // tempo                  case 0xe0:                              // tempo
Line 373  static void group_ex(BYTE cmd, BYTE data Line 371  static void group_ex(BYTE cmd, BYTE data
         }          }
 }  }
   
 static void senddat(BYTE data) {  static void senddat(REG8 data) {
   
         MPUCH   *ch;          MPUCH   *ch;
   
Line 506  static void senddat(BYTE data) { Line 504  static void senddat(BYTE data) {
 }  }
   
   
 static void IOOUTCALL mpu98ii_o0(UINT port, BYTE dat) {  static void IOOUTCALL mpu98ii_o0(UINT port, REG8 dat) {
   
         UINT    sent;          UINT    sent;
   
Line 516  static void IOOUTCALL mpu98ii_o0(UINT po Line 514  static void IOOUTCALL mpu98ii_o0(UINT po
         if (cm_mpu98->connect != COMCONNECT_OFF) {          if (cm_mpu98->connect != COMCONNECT_OFF) {
   
                 if (mpu98.mode) {                  if (mpu98.mode) {
                         sent = cm_mpu98->write(cm_mpu98, dat);                          sent = cm_mpu98->write(cm_mpu98, (BYTE)dat);
                 }                  }
                 else {                  else {
                         if ((mpu98.cmd == 0xd0) || (mpu98.cmd == 0xdf)) {                          if ((mpu98.cmd == 0xd0) || (mpu98.cmd == 0xdf)) {
                                 sent = cm_mpu98->write(cm_mpu98, dat);                                  sent = cm_mpu98->write(cm_mpu98, (BYTE)dat);
                         }                          }
                         else {                          else {
                                 senddat(dat);                                  senddat(dat);
Line 528  static void IOOUTCALL mpu98ii_o0(UINT po Line 526  static void IOOUTCALL mpu98ii_o0(UINT po
                         }                          }
                 }                  }
                 if (sent) {                  if (sent) {
                         midiwait(pc.midiclock * sent);                          midiwait(pccore.midiclock * sent);
                 }                  }
         }          }
         (void)port;          (void)port;
 }  }
   
 static void IOOUTCALL mpu98ii_o2(UINT port, BYTE dat) {  static void IOOUTCALL mpu98ii_o2(UINT port, REG8 dat) {
   
         if (cm_mpu98 == NULL) {          if (cm_mpu98 == NULL) {
                 cm_mpu98 = commng_create(COMCREATE_MPU98II);                  cm_mpu98 = commng_create(COMCREATE_MPU98II);
Line 560  static void IOOUTCALL mpu98ii_o2(UINT po Line 558  static void IOOUTCALL mpu98ii_o2(UINT po
                                 setrecvdata(MPU_ACK);                                  setrecvdata(MPU_ACK);
                         }                          }
                 }                  }
                 midiwait(pc.realclock / 10000);                  midiwait(pccore.realclock / 10000);
         }          }
         (void)port;          (void)port;
 }  }
   
 static BYTE IOINPCALL mpu98ii_i0(UINT port) {  static REG8 IOINPCALL mpu98ii_i0(UINT port) {
   
         if (cm_mpu98 == NULL) {          if (cm_mpu98 == NULL) {
                 cm_mpu98 = commng_create(COMCREATE_MPU98II);                  cm_mpu98 = commng_create(COMCREATE_MPU98II);
Line 588  static BYTE IOINPCALL mpu98ii_i0(UINT po Line 586  static BYTE IOINPCALL mpu98ii_i0(UINT po
         return(0xff);          return(0xff);
 }  }
   
 static BYTE IOINPCALL mpu98ii_i2(UINT port) {  static REG8 IOINPCALL mpu98ii_i2(UINT port) {
   
         BYTE    ret;          REG8    ret;
   
         if (cm_mpu98 == NULL) {          if (cm_mpu98 == NULL) {
                 cm_mpu98 = commng_create(COMCREATE_MPU98II);                  cm_mpu98 = commng_create(COMCREATE_MPU98II);
Line 632  void mpu98ii_reset(void) { Line 630  void mpu98ii_reset(void) {
         mpu98.timebase = 2;          mpu98.timebase = 2;
         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();          makeintclock();
 }  }
   

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


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