|
|
| version 1.1.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(); |
| } | } |