Diff for /np2/sound/fmboard.c between versions 1.5 and 1.16

version 1.5, 2003/10/27 15:06:31 version 1.16, 2007/11/03 00:00:21
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 11 Line 10
 #include        "boardx2.h"  #include        "boardx2.h"
 #include        "board118.h"  #include        "board118.h"
 #include        "boardspb.h"  #include        "boardspb.h"
   #if defined(SUPPORT_PX)
   #include        "boardpx.h"
   #endif  // defined(SUPPORT_PX)
 #include        "amd98.h"  #include        "amd98.h"
 #include        "pcm86io.h"  #include        "pcm86io.h"
 #include        "cs4231io.h"  #include        "cs4231io.h"
Line 18 Line 20
 #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;
         _OPNGEN         opngen;          _OPNGEN         opngen;
         OPNCH           opnch[OPNCH_MAX];          OPNCH           opnch[OPNCH_MAX];
         _PSGGEN         psg1;          _PSGGEN         __psg[3];
         _PSGGEN         psg2;  
         _PSGGEN         psg3;  
         _RHYTHM         rhythm;          _RHYTHM         rhythm;
         _ADPCM          adpcm;          _ADPCM          adpcm;
         _PCM86          pcm86;          _PCM86          pcm86;
         _CS4231         cs4231;          _CS4231         cs4231;
   
   #if defined(SUPPORT_PX)
         OPN_T           opn;          OPN_T           opn2;
         AMD98           amd98;          OPN_T           opn3;
         MUSICGEN        musicgen;          _RHYTHM         rhythm2;
           _RHYTHM         rhythm3;
           _ADPCM          adpcm2;
           _ADPCM          adpcm3;
   #endif  // defined(SUPPORT_PX)
   
   
 static void             (*extfn)(BYTE enable);  static void     (*extfn)(REG8 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;
         if (!(psg->reg.io2 & 0x40)) {          if (!(psg->reg.io2 & 0x40)) {
                 ret &= (joymng_getstat() | (rapids & 0x30));                  ret &= (joymng_getstat() | (rapids & 0x30));
                 if (np2cfg.KEY_MODE == 1) {                  if (np2cfg.KEY_MODE == 1) {
                         ret &= keyext_getjoy();                          ret &= keystat_getjoy();
                 }                  }
         }          }
         else {          else {
                 if (np2cfg.KEY_MODE == 2) {                  if (np2cfg.KEY_MODE == 2) {
                         ret &= keyext_getjoy();                          ret &= keystat_getjoy();
                 }                  }
         }          }
         if (np2cfg.BTN_RAPID) {          if (np2cfg.BTN_RAPID) {
Line 72  BYTE fmboard_getjoy(PSGGEN psg) { Line 80  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 94  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 110  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(const NP2CFG *pConfig, 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);
   
   #if defined(SUPPORT_PX)
           ZeroMemory(&opn2, sizeof(opn2));
           setfmregs(opn2.reg + 0x000);
           setfmregs(opn2.reg + 0x100);
           setfmregs(opn2.reg + 0x200);
           setfmregs(opn2.reg + 0x300);
           opn2.reg[0xff] = 0x01;
           opn2.channels = 3;
           opn2.adpcmmask = (UINT8)~(0x1c);
   
           ZeroMemory(&opn3, sizeof(opn3));
           setfmregs(opn3.reg + 0x000);
           setfmregs(opn3.reg + 0x100);
           setfmregs(opn3.reg + 0x200);
           setfmregs(opn3.reg + 0x300);
           opn3.reg[0xff] = 0x01;
           opn3.channels = 3;
           opn3.adpcmmask = (UINT8)~(0x1c);
   #endif  // defined(SUPPORT_PX)
   
         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);
         psggen_reset(&psg2);          psggen_reset(&psg2);
         psggen_reset(&psg3);          psggen_reset(&psg3);
         rhythm_reset(&rhythm);          rhythm_reset(&rhythm);
   #if defined(SUPPORT_PX)
           rhythm_reset(&rhythm2);
           rhythm_reset(&rhythm3);
   #endif  // defined(SUPPORT_PX)
         adpcm_reset(&adpcm);          adpcm_reset(&adpcm);
   #if defined(SUPPORT_PX)
           adpcm_reset(&adpcm2);
           adpcm_reset(&adpcm3);
   #endif  // defined(SUPPORT_PX)
         pcm86_reset();          pcm86_reset();
         cs4231_reset();          cs4231_reset();
   
         switch(num) {          switch(type) {
                 case 0x01:                  case 0x01:
                         board14_reset();                          board14_reset(pConfig);
                         break;                          break;
   
                 case 0x02:                  case 0x02:
                         board26k_reset();                          board26k_reset(pConfig);
                         break;                          break;
   
                 case 0x04:                  case 0x04:
                         board86_reset();                          board86_reset(pConfig);
                         break;                          break;
   
                 case 0x06:                  case 0x06:
                         boardx2_reset();                          boardx2_reset(pConfig);
                         break;                          break;
   
                 case 0x08:                  case 0x08:
                         board118_reset();                          board118_reset(pConfig);
                         break;                          break;
   
                 case 0x14:                  case 0x14:
                         board86_reset();                          board86_reset(pConfig);
                         break;                          break;
   
                 case 0x20:                  case 0x20:
                         boardspb_reset();                          boardspb_reset(pConfig);
                         cross ^= np2cfg.spb_x;                          cross ^= pConfig->spb_x;
                         break;                          break;
   
                 case 0x40:                  case 0x40:
                         boardspr_reset();                          boardspr_reset(pConfig);
                         cross ^= np2cfg.spb_x;                          cross ^= pConfig->spb_x;
                         break;                          break;
   
                 case 0x80:                  case 0x80:
 //                      amd98_reset();  //                      amd98_reset(pConfig);
                         break;                          break;
   
   #if     defined(SUPPORT_PX)
                   case 0x30:
                           boardpx1_reset(pConfig);
                           break;
   
                   case 0x50:
                           boardpx2_reset(pConfig);
                           break;
   #endif  // defined(SUPPORT_PX)
   
                 default:                  default:
                         usesound = 0;                          type = 0;
                         break;                          break;
         }          }
           usesound = type;
         soundmng_setreverse(cross);          soundmng_setreverse(cross);
         keydisp_setfmboard(num);          keydisp_setfmboard(type);
         opngen_setVR(np2cfg.spb_vrc, np2cfg.spb_vrl);          opngen_setVR(pConfig->spb_vrc, pConfig->spb_vrl);
 }  }
   
 void fmboard_bind(void) {  void fmboard_bind(void) {
Line 216  void fmboard_bind(void) { Line 274  void fmboard_bind(void) {
                 case 0x80:                  case 0x80:
                         amd98_bind();                          amd98_bind();
                         break;                          break;
   
   #if defined(SUPPORT_PX)
                   case 0x30:
                           boardpx1_bind();
                           break;
   
                   case 0x50:
                           boardpx2_bind();
                           break;
   #endif  // defined(SUPPORT_PX)
         }          }
         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]);
   }
   
   
   #if defined(SUPPORT_PX)
   void fmboard_fmrestore2(OPN_T* pOpn, REG8 chbase, UINT bank) {
   
           REG8    i;
   const UINT8     *reg;
   
           reg = pOpn->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_rhyrestore2(OPN_T* pOpn, RHYTHM rhy, UINT bank) {
   
   const UINT8     *reg;
   
           reg = pOpn->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]);
   }
   #endif  // defined(SUPPORT_PX)
   

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


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