Diff for /np2/generic/keydisp.c between versions 1.9 and 1.12

version 1.9, 2005/02/07 14:46:10 version 1.12, 2011/01/15 05:37:02
Line 56  typedef struct { Line 56  typedef struct {
         UINT8           keymax;          UINT8           keymax;
         UINT8           fmmax;          UINT8           fmmax;
         UINT8           psgmax;          UINT8           psgmax;
         UINT8           fmpos[KEYDISP_FMMAX];          UINT8           fmpos[KEYDISP_FMCHMAX];
         UINT8           psgpos[KEYDISP_PSGMAX];          UINT8           psgpos[KEYDISP_PSGMAX];
         UINT            fmreg[KEYDISP_FMMAX];          const UINT8     *pfmreg[KEYDISP_FMCHMAX];
         KDDELAY         delay;          KDDELAY         delay;
         KDCHANNEL       ch[KEYDISP_CHMAX];          KDCHANNEL       ch[KEYDISP_CHMAX];
         KDFMCTRL        fmctl[KEYDISP_FMMAX];          KDFMCTRL        fmctl[KEYDISP_FMCHMAX];
         KDPSGCTRL       psgctl[KEYDISP_PSGMAX];          KDPSGCTRL       psgctl[KEYDISP_PSGMAX];
         UINT8           pal8[KEYDISP_PALS];          UINT8           pal8[KEYDISP_PALS];
         UINT16          pal16[KEYDISP_LEVEL*2];          UINT16          pal16[KEYDISP_LEVEL*2];
Line 295  static void fmkeyoff(UINT8 ch, KDFMCTRL  Line 295  static void fmkeyoff(UINT8 ch, KDFMCTRL 
   
 static void fmkeyon(UINT8 ch, KDFMCTRL *k) {  static void fmkeyon(UINT8 ch, KDFMCTRL *k) {
   
         UINT    reg;          const UINT8 *pReg;
   
         fmkeyoff(ch, k);          fmkeyoff(ch, k);
         reg = keydisp.fmreg[ch] + 0xa0;          pReg = keydisp.pfmreg[ch];
         k->fnum[0] = ((opn.reg[reg + 4] & 0x3f) << 8) + opn.reg[reg];          if (pReg)
         k->lastnote[0] = getfmnote(k->fnum[0]);          {
         delaysetevent(keydisp.fmpos[ch], (UINT8)(k->lastnote[0] | 0x80));                  pReg = pReg + 0xa0;
                   k->fnum[0] = ((pReg[4] & 0x3f) << 8) + pReg[0];
                   k->lastnote[0] = getfmnote(k->fnum[0]);
                   delaysetevent(keydisp.fmpos[ch], (UINT8)(k->lastnote[0] | 0x80));
           }
 }  }
   
 static void fmkeyreset(void) {  static void fmkeyreset(void) {
Line 335  static void fmkeysync(void) { Line 339  static void fmkeysync(void) {
   
         UINT8           ch;          UINT8           ch;
         KDFMCTRL        *k;          KDFMCTRL        *k;
         UINT16          reg;          const UINT8 *pReg;
         UINT16          fnum;          UINT16          fnum;
   
         for (ch=0, k=keydisp.fmctl; ch<keydisp.fmmax; ch++, k++) {          for (ch=0, k=keydisp.fmctl; ch<keydisp.fmmax; ch++, k++) {
                 if (k->flag) {                  if (k->flag) {
                         reg = keydisp.fmreg[ch] + 0xa0;                          pReg = keydisp.pfmreg[ch];
                         fnum = ((opn.reg[reg + 4] & 0x3f) << 8) + opn.reg[reg];                          if (pReg)
                         if (k->fnum[0] != fnum) {                          {
                                 UINT8 n;                                  pReg = pReg + 0xa0;
                                 k->fnum[0] = fnum;                                  fnum = ((pReg[4] & 0x3f) << 8) + pReg[0];
                                 n = getfmnote(fnum);                                  if (k->fnum[0] != fnum) {
                                 if (k->lastnote[0] != n) {                                          UINT8 n;
                                         fmkeyoff(ch, k);                                          k->fnum[0] = fnum;
                                 }                                          n = getfmnote(fnum);
                                 k->lastnote[0] = n;                                          if (k->lastnote[0] != n) {
                                 delaysetevent(keydisp.fmpos[ch],                                                  fmkeyoff(ch, k);
                                           }
                                           k->lastnote[0] = n;
                                           delaysetevent(keydisp.fmpos[ch],
                                                                                         (UINT8)(k->lastnote[0] | 0x80));                                                                                          (UINT8)(k->lastnote[0] | 0x80));
                                   }
                         }                          }
                 }                  }
         }          }
Line 517  static void setfmhdl(UINT8 items, UINT b Line 525  static void setfmhdl(UINT8 items, UINT b
   
         while(items--) {          while(items--) {
                 if ((keydisp.keymax < KEYDISP_CHMAX) &&                  if ((keydisp.keymax < KEYDISP_CHMAX) &&
                         (keydisp.fmmax < KEYDISP_FMMAX)) {                          (keydisp.fmmax < KEYDISP_FMCHMAX)) {
                         keydisp.fmpos[keydisp.fmmax] = keydisp.keymax++;                          keydisp.fmpos[keydisp.fmmax] = keydisp.keymax++;
                         keydisp.fmreg[keydisp.fmmax] = base;                          keydisp.pfmreg[keydisp.fmmax] = opn.reg + base;
                         keydisp.fmmax++;                          keydisp.fmmax++;
                         base++;                          base++;
                         if ((base & 3) == 3) {                          if ((base & 3) == 3) {
Line 529  static void setfmhdl(UINT8 items, UINT b Line 537  static void setfmhdl(UINT8 items, UINT b
         }          }
 }  }
   
   #if defined(SUPPORT_PX)
   static void setfmhdlex(const OPN_T *pOpn, UINT nItems, UINT nBase) {
   
           while(nItems--) {
                   if ((keydisp.keymax < KEYDISP_CHMAX) &&
                           (keydisp.fmmax < KEYDISP_FMCHMAX)) {
                           keydisp.fmpos[keydisp.fmmax] = keydisp.keymax++;
                           keydisp.pfmreg[keydisp.fmmax] = pOpn->reg + nBase;
                           keydisp.fmmax++;
                           nBase++;
                           if ((nBase & 3) == 3) {
                                   nBase += 0x100 - 3;
                           }
                   }
           }
   }
   #endif  // defined(SUPPORT_PX)
   
 static void setpsghdl(UINT8 items) {  static void setpsghdl(UINT8 items) {
   
         while(items--) {          while(items--) {
Line 546  void keydisp_setfmboard(UINT b) { Line 572  void keydisp_setfmboard(UINT b) {
         keydisp.fmmax = 0;          keydisp.fmmax = 0;
         keydisp.psgmax = 0;          keydisp.psgmax = 0;
   
   #if defined(SUPPORT_PX)
           if (b == 0x30)
           {
                   setfmhdlex(&opn, 12, 0);
                   setfmhdlex(&opn2, 12, 0);
                   setpsghdl(2);
                   b = 0;
           }
           if (b == 0x50)
           {
                   setfmhdlex(&opn, 12, 0);
                   setfmhdlex(&opn2, 12, 0);
                   setfmhdlex(&opn3, 6, 0);
                   setpsghdl(3);
                   b = 0;
           }
   
   #endif  // defined(SUPPORT_PX)
   
         if (b & 0x02) {          if (b & 0x02) {
                 if (!(b & 0x04)) {                  if (!(b & 0x04)) {
                         setfmhdl(3, 0);                          setfmhdl(3, 0);
Line 606  void keydisp_midi(const UINT8 *cmd) { Line 651  void keydisp_midi(const UINT8 *cmd) {
                         break;                          break;
   
                 case 0xb0:                  case 0xb0:
                         if ((cmd[1] == 0x7b) || (cmd[1] == 0x78)) {                          if ((cmd[1] == 0x78) || (cmd[1] == 0x79) || (cmd[1] == 0x7b)) {
                                 chkeyoff(cmd[0] & 0x0f);                                  chkeyoff(cmd[0] & 0x0f);
                         }                          }
                         break;                          break;

Removed from v.1.9  
changed lines
  Added in v.1.12


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