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