|
|
| version 1.8, 2005/02/14 06:25:30 | version 1.9, 2005/03/23 08:07:48 |
|---|---|
| Line 123 static void setdefaultcondition(void) { | Line 123 static void setdefaultcondition(void) { |
| mpu98.recvevent = 0; | mpu98.recvevent = 0; |
| mpu98.remainstep = 0; | mpu98.remainstep = 0; |
| mpu98.intphase = 0; | |
| mpu98.intreq = 0; | mpu98.intreq = 0; |
| ZeroMemory(&mpu98.cmd, sizeof(mpu98.cmd)); | ZeroMemory(&mpu98.cmd, sizeof(mpu98.cmd)); |
| Line 193 static void sendmpulongmsg(const UINT8 * | Line 194 static void sendmpulongmsg(const UINT8 * |
| static void mpu98ii_int(void) { | static void mpu98ii_int(void) { |
| TRACEOUT(("int!")); | |
| pic_setirq(mpu98.irqnum); | pic_setirq(mpu98.irqnum); |
| } | } |
| Line 221 static BOOL tr_nextsearch(void) { | Line 223 static BOOL tr_nextsearch(void) { |
| REG8 bit; | REG8 bit; |
| tr_nextsearch_more: | tr_nextsearch_more: |
| if (mpu98.intreq == 9) { | if (mpu98.intphase == 1) { |
| if (mpu98.flag1 & MPUFLAG1_CONDUCTOR) { | if (mpu98.flag1 & MPUFLAG1_CONDUCTOR) { |
| if (!mpu98.cond.step) { | if (!mpu98.cond.step) { |
| setrecvdata(MPUMSG_REQCOND); | mpu98.intreq = MPUMSG_REQCOND; |
| mpu98ii_int(); | |
| mpu98.cond.phase |= MPUCMDP_STEP | MPUCMDP_CMD; | mpu98.cond.phase |= MPUCMDP_STEP | MPUCMDP_CMD; |
| mpu98ii_int(); | |
| return(TRUE); | return(TRUE); |
| } | } |
| } | } |
| mpu98.intreq = 7; | mpu98.intphase = 2; |
| } | } |
| bit = 1 << mpu98.intreq; | if (mpu98.intphase) { |
| for (; bit; bit>>=1) { | bit = 1 << (mpu98.intphase - 2); |
| if (mpu98.acttr & bit) { | do { |
| MPUTR *tr; | if (mpu98.acttr & bit) { |
| tr = mpu98.tr + mpu98.intreq; | MPUTR *tr; |
| if (!tr->step) { | tr = mpu98.tr + (mpu98.intphase - 2); |
| if ((tr->datas) && (tr->remain == 0)) { | if (!tr->step) { |
| if (cm_mpu98 == NULL) { | if ((tr->datas) && (tr->remain == 0)) { |
| cm_mpu98 = commng_create(COMCREATE_MPU98II); | if (cm_mpu98 == NULL) { |
| } | cm_mpu98 = commng_create(COMCREATE_MPU98II); |
| if (tr->data[0] == MIDI_STOP) { | } |
| if (tr->data[0] == MIDI_STOP) { | |
| tr->datas = 0; | |
| cm_mpu98->write(cm_mpu98, MIDI_STOP); | |
| setrecvdata(MIDI_STOP); | |
| mpu98ii_int(); | |
| return(TRUE); | |
| } | |
| for (i=0; i<tr->datas; i++) { | |
| cm_mpu98->write(cm_mpu98, tr->data[i]); | |
| } | |
| tr->datas = 0; | tr->datas = 0; |
| cm_mpu98->write(cm_mpu98, MIDI_STOP); | |
| setrecvdata(MIDI_STOP); | |
| mpu98ii_int(); | |
| return(TRUE); | |
| } | |
| for (i=0; i<tr->datas; i++) { | |
| cm_mpu98->write(cm_mpu98, tr->data[i]); | |
| } | } |
| tr->datas = 0; | mpu98.intreq = 0xf0 + (mpu98.intphase - 2); |
| mpu98.recvevent |= MIDIE_STEP; | |
| mpu98ii_int(); | |
| return(TRUE); | |
| } | } |
| setrecvdata((REG8)(0xf0 + mpu98.intreq)); | |
| mpu98ii_int(); | |
| mpu98.recvevent |= MIDIE_STEP; | |
| return(TRUE); | |
| } | } |
| } | bit <<= 1; |
| mpu98.intreq--; | mpu98.intphase++; |
| } while(mpu98.intphase < 10); | |
| mpu98.intphase = 0; | |
| } | } |
| mpu98.remainstep--; | mpu98.remainstep--; |
| if (mpu98.remainstep) { | if (mpu98.remainstep) { |
| tr_step(); | tr_step(); |
| mpu98.intreq = 9; | mpu98.intphase = 1; |
| goto tr_nextsearch_more; | goto tr_nextsearch_more; |
| } | } |
| return(FALSE); | return(FALSE); |
| Line 289 void midiint(NEVENTITEM item) { | Line 295 void midiint(NEVENTITEM item) { |
| if (mpu98.flag1 & MPUFLAG1_PLAY) { | if (mpu98.flag1 & MPUFLAG1_PLAY) { |
| if (!mpu98.remainstep++) { | if (!mpu98.remainstep++) { |
| tr_step(); | tr_step(); |
| mpu98.intreq = 9; | mpu98.intphase = 1; |
| tr_nextsearch(); | tr_nextsearch(); |
| } | } |
| } | } |
| Line 325 static REG8 mpucmd_xx(REG8 cmd) { | Line 331 static REG8 mpucmd_xx(REG8 cmd) { |
| static REG8 mpucmd_md(REG8 cmd) { // 00-2F: Mode | static REG8 mpucmd_md(REG8 cmd) { // 00-2F: Mode |
| TRACEOUT(("mpucmd_md %.2x", cmd)); | |
| #if 0 | #if 0 |
| switch((cmd >> 0) & 3) { | switch((cmd >> 0) & 3) { |
| case 1: // MIDI Stop | case 1: // MIDI Stop |
| Line 337 static REG8 mpucmd_md(REG8 cmd) { // 0 | Line 344 static REG8 mpucmd_md(REG8 cmd) { // 0 |
| case 1: // Stop Play | case 1: // Stop Play |
| mpu98.flag1 &= ~MPUFLAG1_PLAY; | mpu98.flag1 &= ~MPUFLAG1_PLAY; |
| mpu98.recvevent = 0; | mpu98.recvevent = 0; |
| mpu98.intphase = 0; | |
| mpu98.intreq = 0; | mpu98.intreq = 0; |
| ZeroMemory(mpu98.tr, sizeof(mpu98.tr)); | ZeroMemory(mpu98.tr, sizeof(mpu98.tr)); |
| ZeroMemory(&mpu98.cond, sizeof(mpu98.cond)); | ZeroMemory(&mpu98.cond, sizeof(mpu98.cond)); |
| Line 771 static BRESULT sendmpucmd(MPUCMDS *cmd, | Line 779 static BRESULT sendmpucmd(MPUCMDS *cmd, |
| static BRESULT sendmpucond(MPUCMDS *cmd, REG8 data) { | static BRESULT sendmpucond(MPUCMDS *cmd, REG8 data) { |
| if (cmd->phase & (MPUCMDP_SHORT | MPUCMDP_LONG)) { | if (cmd->phase & (MPUCMDP_SHORT | MPUCMDP_LONG)) { |
| // if (mpu98.intreq == 0xf9) { | |
| // mpu98.intreq = 0; | |
| // } | |
| sendmpumsg(cmd, data); | sendmpumsg(cmd, data); |
| return(SUCCESS); | return(SUCCESS); |
| } | } |
| Line 796 static BRESULT sendmpucond(MPUCMDS *cmd, | Line 807 static BRESULT sendmpucond(MPUCMDS *cmd, |
| reqmpucmdgroupd(data); | reqmpucmdgroupd(data); |
| } | } |
| cmd->phase = phase; | cmd->phase = phase; |
| if (!(phase & MPUCMDP_FOLLOWBYTE)) { | if (phase & MPUCMDP_FOLLOWBYTE) { |
| tr_nextsearch(); | return(SUCCESS); |
| } | } |
| } | } |
| else { | else { |
| Line 807 static BRESULT sendmpucond(MPUCMDS *cmd, | Line 818 static BRESULT sendmpucond(MPUCMDS *cmd, |
| setrecvdata(MIDI_STOP); | setrecvdata(MIDI_STOP); |
| mpu98ii_int(); | mpu98ii_int(); |
| } | } |
| tr_nextsearch(); | |
| } | } |
| return(SUCCESS); | |
| } | } |
| else if (cmd->phase & MPUCMDP_FOLLOWBYTE) { | else if (cmd->phase & MPUCMDP_FOLLOWBYTE) { |
| cmd->phase &= ~MPUCMDP_FOLLOWBYTE; | cmd->phase &= ~MPUCMDP_FOLLOWBYTE; |
| setmpucmdgroupe(cmd->cmd, data); | setmpucmdgroupe(cmd->cmd, data); |
| tr_nextsearch(); | |
| return(SUCCESS); | |
| } | } |
| else { | else { |
| cmd->phase = 0; | cmd->phase = 0; |
| return(FAILURE); | return(FAILURE); |
| } | } |
| tr_nextsearch(); | |
| return(SUCCESS); | |
| } | } |
| static void sendmpudata(REG8 data) { | static void sendmpudata(REG8 data) { |
| Line 833 static void sendmpudata(REG8 data) { | Line 843 static void sendmpudata(REG8 data) { |
| if (mpu98.recvevent & MIDIE_STEP) { | if (mpu98.recvevent & MIDIE_STEP) { |
| MPUTR *tr; | MPUTR *tr; |
| mpu98.recvevent ^= MIDIE_STEP; | mpu98.recvevent ^= MIDIE_STEP; |
| tr = mpu98.tr + mpu98.intreq; | tr = mpu98.tr + (mpu98.intphase - 2); |
| tr->datas = 0; | tr->datas = 0; |
| if (data < 0xf0) { | if (data < 0xf0) { |
| mpu98.recvevent ^= MIDIE_EVENT; | mpu98.recvevent ^= MIDIE_EVENT; |
| Line 851 static void sendmpudata(REG8 data) { | Line 861 static void sendmpudata(REG8 data) { |
| MPUTR *tr; | MPUTR *tr; |
| mpu98.recvevent ^= MIDIE_EVENT; | mpu98.recvevent ^= MIDIE_EVENT; |
| mpu98.recvevent |= MIDIE_DATA; | mpu98.recvevent |= MIDIE_DATA; |
| tr = mpu98.tr + mpu98.intreq; | tr = mpu98.tr + (mpu98.intphase - 2); |
| switch(data & 0xf0) { | switch(data & 0xf0) { |
| case 0xc0: | case 0xc0: |
| case 0xd0: | case 0xd0: |
| Line 884 static void sendmpudata(REG8 data) { | Line 894 static void sendmpudata(REG8 data) { |
| } | } |
| if (mpu98.recvevent & MIDIE_DATA) { | if (mpu98.recvevent & MIDIE_DATA) { |
| MPUTR *tr; | MPUTR *tr; |
| tr = mpu98.tr + mpu98.intreq; | tr = mpu98.tr + (mpu98.intphase - 2); |
| if (tr->remain) { | if (tr->remain) { |
| tr->data[tr->datas] = data; | tr->data[tr->datas] = data; |
| tr->datas++; | tr->datas++; |
| Line 912 static void IOOUTCALL mpu98ii_o0(UINT po | Line 922 static void IOOUTCALL mpu98ii_o0(UINT po |
| UINT sent; | UINT sent; |
| TRACEOUT(("mpu98ii out %.4x %.2x", port, dat)); | |
| if (cm_mpu98 == NULL) { | if (cm_mpu98 == NULL) { |
| cm_mpu98 = commng_create(COMCREATE_MPU98II); | cm_mpu98 = commng_create(COMCREATE_MPU98II); |
| } | } |
| Line 933 static void IOOUTCALL mpu98ii_o0(UINT po | Line 944 static void IOOUTCALL mpu98ii_o0(UINT po |
| static void IOOUTCALL mpu98ii_o2(UINT port, REG8 dat) { | static void IOOUTCALL mpu98ii_o2(UINT port, REG8 dat) { |
| TRACEOUT(("mpu98ii out %.4x %.2x", port, dat)); | |
| if (cm_mpu98 == NULL) { | if (cm_mpu98 == NULL) { |
| cm_mpu98 = commng_create(COMCREATE_MPU98II); | cm_mpu98 = commng_create(COMCREATE_MPU98II); |
| } | } |
| Line 969 static REG8 IOINPCALL mpu98ii_i0(UINT po | Line 981 static REG8 IOINPCALL mpu98ii_i0(UINT po |
| if (cm_mpu98->connect != COMCONNECT_OFF) { | if (cm_mpu98->connect != COMCONNECT_OFF) { |
| if (mpu98.r.cnt) { | if (mpu98.r.cnt) { |
| mpu98.r.cnt--; | mpu98.r.cnt--; |
| #if 0 | |
| if (mpu98.r.cnt) { | if (mpu98.r.cnt) { |
| mpu98ii_int(); | mpu98ii_int(); |
| } | } |
| else { | else { |
| pic_resetirq(mpu98.irqnum); | pic_resetirq(mpu98.irqnum); |
| } | } |
| #endif | |
| mpu98.data = mpu98.r.buf[mpu98.r.pos]; | mpu98.data = mpu98.r.buf[mpu98.r.pos]; |
| mpu98.r.pos = (mpu98.r.pos + 1) & (MPU98_RECVBUFS - 1); | mpu98.r.pos = (mpu98.r.pos + 1) & (MPU98_RECVBUFS - 1); |
| } | } |
| else if (mpu98.intreq) { | |
| mpu98.data = mpu98.intreq; | |
| mpu98.intreq = 0; | |
| } | |
| if ((mpu98.r.cnt) || (mpu98.intreq)) { | |
| mpu98ii_int(); | |
| } | |
| else { | |
| pic_resetirq(mpu98.irqnum); | |
| } | |
| // TRACEOUT(("recv data->%.2x", mpu98.data)); | // TRACEOUT(("recv data->%.2x", mpu98.data)); |
| TRACEOUT(("mpu98ii inp %.4x %.2x", port, mpu98.data)); | |
| return(mpu98.data); | return(mpu98.data); |
| } | } |
| (void)port; | (void)port; |
| Line 994 static REG8 IOINPCALL mpu98ii_i2(UINT po | Line 1020 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.r.cnt) { | if ((mpu98.r.cnt == 0) && (mpu98.intreq == 0)) { |
| ret |= MIDIIN_AVAIL; | ret |= MIDIIN_AVAIL; |
| } | } |
| // TRACEOUT(("mpu98ii inp %.4x %.2x", port, ret)); | |
| return(ret); | return(ret); |
| } | } |
| (void)port; | (void)port; |