Diff for /np2/macosx/cmmidi.cpp between versions 1.1 and 1.2

version 1.1, 2003/10/16 17:59:37 version 1.2, 2003/10/25 09:08:24
Line 46  enum { Line 46  enum {
 };  };
   
 typedef struct {  typedef struct {
           BYTE    prog;
           BYTE    press;
           UINT16  bend;
           BYTE    ctrl[28];
   } _MIDICH, *MIDICH;
   
   typedef struct {
         MIDIHDL         vermouth;          MIDIHDL         vermouth;
         UINT            midictrl;          UINT            midictrl;
         UINT            midisyscnt;          UINT            midisyscnt;
         UINT            mpos;          UINT            mpos;
         BYTE            midilast;          BYTE            midilast;
           _MIDICH         mch[16];
         BYTE            buffer[MIDI_BUFFER];          BYTE            buffer[MIDI_BUFFER];
 } _CMMIDI, *CMMIDI;  } _CMMIDI, *CMMIDI;
   
   static const BYTE midictrltbl[] = {     0, 1, 5, 7, 10, 11, 64,
                                                                           65, 66, 67, 84, 91, 93,
                                                                           94,                                             // for SC-88
                                                                           71, 72, 73, 74};                // for XG
   
   static  BYTE    midictrlindex[128];
   
   
   // ----
   
 static void SOUNDCALL vermouth_getpcm(MIDIHDL hdl, SINT32 *pcm, UINT count) {  static void SOUNDCALL vermouth_getpcm(MIDIHDL hdl, SINT32 *pcm, UINT count) {
   
Line 91  static void midireset(CMMIDI midi) { Line 108  static void midireset(CMMIDI midi) {
         }          }
 }  }
   
   static void midisetparam(CMMIDI midi) {
   
           BYTE    i;
           UINT    j;
           MIDICH  mch;
   
           mch = midi->mch;
           sound_sync();
           for (i=0; i<16; i++, mch++) {
                   if (mch->press != 0xff) {
                           midiout_shortmsg(midi->vermouth, MIDIOUTS(0xa0+i, mch->press, 0));
                   }
                   if (mch->bend != 0xffff) {
                           midiout_shortmsg(midi->vermouth, (mch->bend << 8) + 0xe0+i);
                   }
                   for (j=0; j<sizeof(midictrltbl)/sizeof(BYTE); j++) {
                           if (mch->ctrl[j+1] != 0xff) {
                                   midiout_shortmsg(midi->vermouth,
                                                           MIDIOUTS(0xb0+i, midictrltbl[j], mch->ctrl[j+1]));
                           }
                   }
                   if (mch->prog != 0xff) {
                           midiout_shortmsg(midi->vermouth, MIDIOUTS(0xc0+i, mch->prog, 0));
                   }
           }
   }
   
   
 // ----  // ----
   
 static UINT     midiread(COMMNG self, BYTE *data) {  static UINT midiread(COMMNG self, BYTE *data) {
   
         (void)self;          (void)self;
         (void)data;          (void)data;
         return(0);          return(0);
 }  }
   
 static UINT     midiwrite(COMMNG self, BYTE data) {  static UINT midiwrite(COMMNG self, BYTE data) {
   
         CMMIDI  midi;          CMMIDI  midi;
           MIDICH  mch;
   
         midi = (CMMIDI)(self + 1);          midi = (CMMIDI)(self + 1);
         switch(data) {          switch(data) {
Line 179  static UINT midiwrite(COMMNG self, BYTE  Line 224  static UINT midiwrite(COMMNG self, BYTE 
                 case MIDICTRL_2BYTES:                  case MIDICTRL_2BYTES:
                         if (midi->mpos >= 2) {                          if (midi->mpos >= 2) {
                                 midi->buffer[1] &= 0x7f;                                  midi->buffer[1] &= 0x7f;
                                   mch = midi->mch + (midi->buffer[0] & 0xf);
                                   switch(midi->buffer[0] & 0xf0) {
                                           case 0xa0:
                                                   mch->press = midi->buffer[1];
                                                   break;
   
                                           case 0xc0:
                                                   mch->prog = midi->buffer[1];
                                                   break;
                                   }
                                 keydisp_midi(midi->buffer);                                  keydisp_midi(midi->buffer);
                                 sound_sync();                                  sound_sync();
                                 midiout_shortmsg(midi->vermouth, MIDIOUTS2(midi->buffer));                                  midiout_shortmsg(midi->vermouth, MIDIOUTS2(midi->buffer));
Line 191  static UINT midiwrite(COMMNG self, BYTE  Line 246  static UINT midiwrite(COMMNG self, BYTE 
                         if (midi->mpos >= 3) {                          if (midi->mpos >= 3) {
                                 midi->buffer[1] &= 0x7f;                                  midi->buffer[1] &= 0x7f;
                                 midi->buffer[2] &= 0x7f;                                  midi->buffer[2] &= 0x7f;
                                   mch = midi->mch + (midi->buffer[0] & 0xf);
                                   switch(midi->buffer[0] & 0xf0) {
                                           case 0xb0:
                                                   if (midi->buffer[1] == 123) {
                                                           mch->press = 0;
                                                           mch->bend = 0x4000;
                                                           mch->ctrl[1] = 0;                       // Modulation
                                                           mch->ctrl[5] = 127;                     // Explession
                                                           mch->ctrl[6] = 0;                       // Hold
                                                           mch->ctrl[7] = 0;                       // Portament
                                                           mch->ctrl[8] = 0;                       // Sostenute
                                                           mch->ctrl[9] = 0;                       // Soft
                                                   }
                                                   else {
                                                           mch->ctrl[midictrlindex[midi->buffer[1]]]
                                                                                                                           = midi->buffer[2];
                                                   }
                                                   break;
   
                                           case 0xe0:
                                                   mch->bend = LOADINTELWORD(midi->buffer + 1);
                                                   break;
                                   }
                                 keydisp_midi(midi->buffer);                                  keydisp_midi(midi->buffer);
                                 sound_sync();                                  sound_sync();
                                 midiout_shortmsg(midi->vermouth, MIDIOUTS3(midi->buffer));                                  midiout_shortmsg(midi->vermouth, MIDIOUTS3(midi->buffer));
Line 233  static UINT midiwrite(COMMNG self, BYTE  Line 311  static UINT midiwrite(COMMNG self, BYTE 
         return(0);          return(0);
 }  }
   
 static BYTE     midigetstat(COMMNG self) {  static BYTE midigetstat(COMMNG self) {
   
         return(0x00);          return(0x00);
 }  }
   
 static UINT     midimsg(COMMNG self, UINT msg, long param) {  static long midimsg(COMMNG self, UINT msg, long param) {
   
         CMMIDI  midi;          CMMIDI  midi;
           COMFLAG flag;
   
         midi = (CMMIDI)(self + 1);          midi = (CMMIDI)(self + 1);
         switch(msg) {          switch(msg) {
                 case COMMSG_MIDIRESET:                  case COMMSG_MIDIRESET:
                         midireset(midi);                          midireset(midi);
                         return(1);                          return(1);
   
                   case COMMSG_SETFLAG:
                           flag = (COMFLAG)param;
                           if ((flag) &&
                                   (flag->size == sizeof(_COMFLAG) + sizeof(midi->mch)) &&
                                   (flag->sig == COMSIG_MIDI)) {
                                   CopyMemory(midi->mch, flag + 1, sizeof(midi->mch));
                                   midisetparam(midi);
                                   return(1);
                           }
                           break;
   
                   case COMMSG_GETFLAG:
                           flag = (COMFLAG)_MALLOC(sizeof(_COMFLAG) + sizeof(midi->mch),
                                                                                                                                   "MIDI FLAG");
                           if (flag) {
                                   flag->size = sizeof(_COMFLAG) + sizeof(midi->mch);
                                   flag->sig = COMSIG_MIDI;
                                   flag->ver = 0;
                                   flag->param = 0;
                                   CopyMemory(flag + 1, midi->mch, sizeof(midi->mch));
                                   return((long)flag);
                           }
                           break;
         }          }
         (void)param;  
         return(0);          return(0);
 }  }
   
Line 264  static void midirelease(COMMNG self) { Line 366  static void midirelease(COMMNG self) {
   
 // ----  // ----
   
   void cmmidi_initailize(void) {
   
           UINT    i;
   
           ZeroMemory(midictrlindex, sizeof(midictrlindex));
           for (i=0; i<sizeof(midictrltbl)/sizeof(BYTE); i++) {
                   midictrlindex[midictrltbl[i]] = (BYTE)(i + 1);
           }
           midictrlindex[32] = 1;
   }
   
 COMMNG cmmidi_create(void) {  COMMNG cmmidi_create(void) {
   
         MIDIHDL         vermouth;          MIDIHDL         vermouth;
Line 293  COMMNG cmmidi_create(void) { Line 406  COMMNG cmmidi_create(void) {
 //      midi->midisyscnt = 0;  //      midi->midisyscnt = 0;
 //      midi->mpos = 0;  //      midi->mpos = 0;
         midi->midilast = 0x80;          midi->midilast = 0x80;
           FillMemory(midi->mch, sizeof(midi->mch), 0xff);
         return(ret);          return(ret);
   
 cmcre_err2:  cmcre_err2:
Line 304  cmcre_err1: Line 418  cmcre_err1:
   
 #else  #else
   
   void cmmidi_initailize(void) {
   }
   
 COMMNG cmmidi_create(void) {  COMMNG cmmidi_create(void) {
   
         return(NULL);          return(NULL);

Removed from v.1.1  
changed lines
  Added in v.1.2


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