| version 1.2, 2003/10/18 07:28:50 | version 1.13, 2005/02/07 14:46:12 | 
| Line 1 | Line 1 | 
 | #include        "compiler.h" | #include        "compiler.h" | 
 | #include        "joymng.h" | #include        "joymng.h" | 
 | #include        "soundmng.h" | #include        "soundmng.h" | 
 | #include        "i286.h" |  | 
 | #include        "pccore.h" | #include        "pccore.h" | 
 | #include        "iocore.h" | #include        "iocore.h" | 
 | #include        "cbuscore.h" | #include        "cbuscore.h" | 
| Line 18 | Line 17 | 
 | #include        "fmboard.h" | #include        "fmboard.h" | 
 | #include        "beep.h" | #include        "beep.h" | 
 | #include        "keydisp.h" | #include        "keydisp.h" | 
 |  | #include        "keystat.h" | 
 |  |  | 
 |  |  | 
| int                     usesound = 0; | UINT32          usesound; | 
|  | OPN_T           opn; | 
|  | AMD98           amd98; | 
|  | MUSICGEN        musicgen; | 
 |  |  | 
 | _TMS3631        tms3631; | _TMS3631        tms3631; | 
 | _FMTIMER        fmtimer; | _FMTIMER        fmtimer; | 
| Line 35 | Line 38 | 
 | _CS4231         cs4231; | _CS4231         cs4231; | 
 |  |  | 
 |  |  | 
| OPN_T           opn; | static void     (*extfn)(REG8 enable); | 
| AMD98           amd98; |  | 
| MUSICGEN        musicgen; |  | 
|  |  | 
|  |  | 
| static void             (*extfn)(BYTE enable); |  | 
 |  |  | 
 |  |  | 
 | // ---- | // ---- | 
 |  |  | 
| static  BYTE    rapids = 0; | static  REG8    rapids = 0; | 
 |  |  | 
| BYTE fmboard_getjoy(PSGGEN psg) { | REG8 fmboard_getjoy(PSGGEN psg) { | 
 |  |  | 
| BYTE    ret; | REG8    ret; | 
 |  |  | 
 | rapids ^= 0xf0;                                                                                 // ver0.28 | rapids ^= 0xf0;                                                                                 // ver0.28 | 
 | ret = 0xff; | ret = 0xff; | 
| Line 72  BYTE fmboard_getjoy(PSGGEN psg) { | Line 70  BYTE fmboard_getjoy(PSGGEN psg) { | 
 | ret &= ((ret >> 2) | (~0x30)); | ret &= ((ret >> 2) | (~0x30)); | 
 |  |  | 
 | if (np2cfg.BTN_MODE) { | if (np2cfg.BTN_MODE) { | 
| BYTE bit1 = (ret & 0x20) >> 1;                                  // ver0.28 | UINT8 bit1 = (ret & 0x20) >> 1;                                 // ver0.28 | 
| BYTE bit2 = (ret & 0x10) << 1; | UINT8 bit2 = (ret & 0x10) << 1; | 
 | ret = (ret & (~0x30)) | bit1 | bit2; | ret = (ret & (~0x30)) | bit1 | bit2; | 
 | } | } | 
 |  |  | 
| Line 86  BYTE fmboard_getjoy(PSGGEN psg) { | Line 84  BYTE fmboard_getjoy(PSGGEN psg) { | 
 |  |  | 
 | // ---- | // ---- | 
 |  |  | 
| void fmboard_extreg(void (*ext)(BYTE enable)) { | void fmboard_extreg(void (*ext)(REG8 enable)) { | 
 |  |  | 
 | extfn = ext; | extfn = ext; | 
 | } | } | 
 |  |  | 
| void fmboard_extenable(BYTE enable) { | void fmboard_extenable(REG8 enable) { | 
 |  |  | 
 | if (extfn) { | if (extfn) { | 
 | (*extfn)(enable); | (*extfn)(enable); | 
| Line 102  void fmboard_extenable(BYTE enable) { | Line 100  void fmboard_extenable(BYTE enable) { | 
 |  |  | 
 | // ---- | // ---- | 
 |  |  | 
| void fmboard_reset(BYTE num) { | static void setfmregs(UINT8 *reg) { | 
 |  |  | 
| BYTE    cross; | FillMemory(reg + 0x30, 0x60, 0xff); | 
|  | FillMemory(reg + 0x90, 0x20, 0x00); | 
|  | FillMemory(reg + 0xb0, 0x04, 0x00); | 
|  | FillMemory(reg + 0xb4, 0x04, 0xc0); | 
|  | } | 
|  |  | 
|  | void fmboard_reset(UINT32 type) { | 
|  |  | 
|  | UINT8   cross; | 
 |  |  | 
 | soundrom_reset(); | soundrom_reset(); | 
 | beep_reset();                                                                                           // ver0.27a | beep_reset();                                                                                           // ver0.27a | 
 | cross = np2cfg.snd_x;                                                                           // ver0.30 | cross = np2cfg.snd_x;                                                                           // ver0.30 | 
 | usesound = num; |  | 
 |  |  | 
 | extfn = NULL; | extfn = NULL; | 
 | ZeroMemory(&opn, sizeof(opn)); | ZeroMemory(&opn, sizeof(opn)); | 
 |  | setfmregs(opn.reg + 0x000); | 
 |  | setfmregs(opn.reg + 0x100); | 
 |  | setfmregs(opn.reg + 0x200); | 
 |  | setfmregs(opn.reg + 0x300); | 
 |  | opn.reg[0xff] = 0x01; | 
 |  | opn.channels = 3; | 
 |  | opn.adpcmmask = (UINT8)~(0x1c); | 
 |  |  | 
 | ZeroMemory(&musicgen, sizeof(musicgen)); | ZeroMemory(&musicgen, sizeof(musicgen)); | 
 | ZeroMemory(&amd98, sizeof(amd98)); | ZeroMemory(&amd98, sizeof(amd98)); | 
 |  |  | 
 | opn.channels = 3; |  | 
 | opn.adpcmmask = (BYTE)~(0x1c); |  | 
 | opn.reg[0xff] = 0x01; |  | 
 |  |  | 
 | tms3631_reset(&tms3631); | tms3631_reset(&tms3631); | 
 | opngen_reset(); | opngen_reset(); | 
 | psggen_reset(&psg1); | psggen_reset(&psg1); | 
| Line 130  void fmboard_reset(BYTE num) { | Line 139  void fmboard_reset(BYTE num) { | 
 | pcm86_reset(); | pcm86_reset(); | 
 | cs4231_reset(); | cs4231_reset(); | 
 |  |  | 
| switch(num) { | switch(type) { | 
 | case 0x01: | case 0x01: | 
 | board14_reset(); | board14_reset(); | 
 | break; | break; | 
| Line 170  void fmboard_reset(BYTE num) { | Line 179  void fmboard_reset(BYTE num) { | 
 | break; | break; | 
 |  |  | 
 | default: | default: | 
| usesound = 0; | type = 0; | 
 | break; | break; | 
 | } | } | 
 |  | usesound = type; | 
 | soundmng_setreverse(cross); | soundmng_setreverse(cross); | 
| keydisp_setfmboard(num); | keydisp_setfmboard(type); | 
| //      FM_setVR(np2cfg.spb_vrc, np2cfg.spb_vrl);                               // ver0.30 | opngen_setVR(np2cfg.spb_vrc, np2cfg.spb_vrl); | 
 | } | } | 
 |  |  | 
 | void fmboard_bind(void) { | void fmboard_bind(void) { | 
| Line 194  void fmboard_bind(void) { | Line 204  void fmboard_bind(void) { | 
 | break; | break; | 
 |  |  | 
 | case 0x06: | case 0x06: | 
| board86c_bind(); | boardx2_bind(); | 
 | break; | break; | 
 |  |  | 
 | case 0x08: | case 0x08: | 
| Line 220  void fmboard_bind(void) { | Line 230  void fmboard_bind(void) { | 
 | sound_streamregist(&beep, (SOUNDCB)beep_getpcm); | sound_streamregist(&beep, (SOUNDCB)beep_getpcm); | 
 | } | } | 
 |  |  | 
 |  |  | 
 |  | // ---- | 
 |  |  | 
 |  | void fmboard_fmrestore(REG8 chbase, UINT bank) { | 
 |  |  | 
 |  | REG8    i; | 
 |  | const UINT8     *reg; | 
 |  |  | 
 |  | reg = opn.reg + (bank * 0x100); | 
 |  | for (i=0x30; i<0xa0; i++) { | 
 |  | opngen_setreg(chbase, i, reg[i]); | 
 |  | } | 
 |  | for (i=0xb7; i>=0xa0; i--) { | 
 |  | opngen_setreg(chbase, i, reg[i]); | 
 |  | } | 
 |  | for (i=0; i<3; i++) { | 
 |  | opngen_keyon(chbase + i, opngen.keyreg[chbase + i]); | 
 |  | } | 
 |  | } | 
 |  |  | 
 |  | void fmboard_rhyrestore(RHYTHM rhy, UINT bank) { | 
 |  |  | 
 |  | const UINT8     *reg; | 
 |  |  | 
 |  | reg = opn.reg + (bank * 0x100); | 
 |  | rhythm_setreg(rhy, 0x11, reg[0x11]); | 
 |  | rhythm_setreg(rhy, 0x18, reg[0x18]); | 
 |  | rhythm_setreg(rhy, 0x19, reg[0x19]); | 
 |  | rhythm_setreg(rhy, 0x1a, reg[0x1a]); | 
 |  | rhythm_setreg(rhy, 0x1b, reg[0x1b]); | 
 |  | rhythm_setreg(rhy, 0x1c, reg[0x1c]); | 
 |  | rhythm_setreg(rhy, 0x1d, reg[0x1d]); | 
 |  | } | 
 |  |  |