Previous 199869 Revisions Next

r34757 Saturday 31st January, 2015 at 01:39:40 UTC by Couriersud
Converted midi into a module. (nw)
[src/emu/imagedev]midiin.c midiout.c
[src/osd]osdcore.h osdepend.h
[src/osd/modules/lib]osdobj_common.c osdobj_common.h
[src/osd/modules/midi]midi_module.h* none.c portmidi.c
[src/osd/modules/sound]sdl_sound.c
[src/osd/sdl]sdl.mak
[src/osd/windows]windows.mak

trunk/src/emu/imagedev/midiin.c
r243268r243269
88
99#include "emu.h"
1010#include "midiin.h"
11#include "osdepend.h"
1112
1213/***************************************************************************
1314    IMPLEMENTATION
r243268r243269
7778      return;
7879   }
7980
80   while (osd_poll_midi_channel(m_midi))
81   while (m_midi->poll())
8182   {
82      bytesRead = osd_read_midi_channel(m_midi, buf);
83      bytesRead = m_midi->read(buf);
8384
8485      if (bytesRead > 0)
8586      {
r243268r243269
9798
9899bool midiin_device::call_load(void)
99100{
100   m_midi = osd_open_midi_input(filename());
101   m_midi = machine().osd().create_midi_device();
101102
102   if (m_midi == NULL)
103   if (!m_midi->open_input(filename()))
103104   {
105      global_free(m_midi);
106      m_midi = NULL;
104107      return IMAGE_INIT_FAIL;
105108   }
106109
r243268r243269
117120{
118121   if (m_midi)
119122   {
120      osd_close_midi_channel(m_midi);
123      m_midi->close();
124      global_free(m_midi);
121125   }
122126      m_timer->enable(false);
123127      m_midi = NULL;
trunk/src/emu/imagedev/midiout.c
r243268r243269
77*********************************************************************/
88
99#include "emu.h"
10#include "osdepend.h"
1011#include "midiout.h"
1112
1213/***************************************************************************
r243268r243269
6364
6465bool midiout_device::call_load(void)
6566{
66   m_midi = osd_open_midi_output(filename());
67   m_midi = machine().osd().create_midi_device();
6768
68   if (m_midi == NULL)
69   if (!m_midi->open_output(filename()))
6970   {
71      global_free(m_midi);
72      m_midi = NULL;
7073      return IMAGE_INIT_FAIL;
7174   }
7275
r243268r243269
8184{
8285   if (m_midi)
8386   {
84      osd_close_midi_channel(m_midi);
87      m_midi->close();
88      global_free(m_midi);
89      m_midi = NULL;
8590   }
8691}
8792
r243268r243269
9297
9398   if (m_midi)
9499   {
95      osd_write_midi_channel(m_midi, data);
100      m_midi->write(data);
96101   }
97102}
trunk/src/osd/modules/lib/osdobj_common.c
r243268r243269
131131   REGISTER_MODULE(m_mod_man, NETDEV_TAPTUN);
132132   REGISTER_MODULE(m_mod_man, NETDEV_PCAP);
133133
134   REGISTER_MODULE(m_mod_man, MIDI_PM);
135   REGISTER_MODULE(m_mod_man, MIDI_NONE);
134136
135137   // after initialization we know which modules are supported
136138
r243268r243269
148150      dnames.append(names[i]);
149151   update_option(OSD_SOUND_PROVIDER, dnames);
150152
153#if 0
154   // Register midi options and update options
155   m_mod_man.get_module_names(OSD_DEBUG_PROVIDER, 20, &num, names);
156   dnames.reset();
157   for (int i = 0; i < num; i++)
158      dnames.append(names[i]);
159   update_option(OSD_DEBUG_PROVIDER, dnames);
160#endif
161
151162   // Register debugger options and update options
152163   m_mod_man.get_module_names(OSD_DEBUG_PROVIDER, 20, &num, names);
153164   dnames.reset();
r243268r243269
416427   }
417428   else if (strcmp(command, OSDCOMMAND_LIST_MIDI_DEVICES) == 0)
418429   {
419      osd_list_midi_devices();
430      osd_module *om = select_module_options(options(), OSD_MIDI_PROVIDER);
431      midi_module *pm = select_module_options<midi_module *>(options(), OSD_MIDI_PROVIDER);
432
433      if (om->probe())
434      {
435         om->init();
436         pm->list_midi_devices();
437         om->exit();
438      }
420439      return true;
421440   }
422441
r243268r243269
441460   machine().add_notifier(MACHINE_NOTIFY_RESUME, machine_notify_delegate(FUNC(osd_common_t::input_resume), this));
442461
443462   output_init();
444   midi_init();
445463
446464   m_font_module = select_module_options<font_module *>(options(), OSD_FONT_PROVIDER);
447465
r243268r243269
453471
454472   select_module_options<netdev_module *>(options(), OSD_NETDEV_PROVIDER);
455473
474   m_midi = select_module_options<midi_module *>(options(), OSD_MIDI_PROVIDER);
475
456476   m_mod_man.init();
457477
458478}
r243268r243269
499519   video_exit();
500520   input_exit();
501521   output_exit();
502   midi_exit();
503522}
504523
505524void osd_common_t::video_exit()
r243268r243269
530549   //m_video_options.add(name, type, false);
531550   m_video_names.append(core_strdup(name));
532551}
533
534bool osd_common_t::midi_init()
535{
536   // this should be done on the OS_level
537   return osd_midi_init();
538}
539
540void osd_common_t::midi_exit()
541{
542   osd_midi_exit();
543}
trunk/src/osd/modules/lib/osdobj_common.h
r243268r243269
1919#include "modules/sound/sound_module.h"
2020#include "modules/debugger/debug_module.h"
2121#include "modules/netdev/netdev_module.h"
22#include "modules/midi/midi_module.h"
2223#include "cliopts.h"
2324
2425//============================================================
r243268r243269
148149
149150   osd_font *font_alloc() { return m_font_module->font_alloc(); }
150151
152   osd_midi_device *create_midi_device() { return m_midi->create_midi_device(); }
153
151154   // FIXME: everything below seems to be osd specific and not part of
152155   //        this INTERFACE but part of the osd IMPLEMENTATION
153156
r243268r243269
165168
166169   virtual void input_resume();
167170   virtual bool output_init();
168   virtual bool midi_init();
169171
170172   virtual void exit_subsystems();
171173   virtual void video_exit();
172174   virtual void window_exit();
173175   virtual void input_exit();
174176   virtual void output_exit();
175   virtual void midi_exit();
176177
177178   virtual void osd_exit();
178179
r243268r243269
216217protected:
217218   sound_module* m_sound;
218219   debug_module* m_debugger;
220   midi_module* m_midi;
219221private:
220222   //tagmap_t<osd_video_type>  m_video_options;
221223   dynamic_array<const char *> m_video_names;
trunk/src/osd/modules/midi/midi_module.h
r0r243269
1/*
2 * midi_module.h
3 *
4 */
5
6#ifndef MIDI_MODULE_H_
7#define MIDI_MODULE_H_
8
9#include "osdepend.h"
10#include "modules/osdmodule.h"
11
12//============================================================
13//  CONSTANTS
14//============================================================
15
16#define OSD_MIDI_PROVIDER   "midiprovider"
17
18class midi_module
19{
20public:
21   virtual ~midi_module() { }
22   // specific routines
23
24   virtual osd_midi_device *create_midi_device() = 0;
25   // FIXME: should return a list of strings ...
26   virtual void list_midi_devices(void) = 0;
27};
28
29
30#endif /* MIDI_MODULE_H_ */
trunk/src/osd/modules/midi/none.c
r243268r243269
77*******************************************************************c********/
88
99#include "osdcore.h"
10#include "corealloc.h"
11#include "modules/osdmodule.h"
12#include "midi_module.h"
1013
11struct osd_midi_device
14class none_module : public osd_module, public midi_module
1215{
16public:
17
18   none_module()
19   : osd_module(OSD_MIDI_PROVIDER, "pm"), midi_module()
20   {
21   }
22   virtual ~none_module() { }
23
24   virtual int init();
25   virtual void exit();
26
27   osd_midi_device *create_midi_device();
28   void list_midi_devices(void);
29};
30
31
32class osd_midi_device_none : public osd_midi_device
33{
34public:
35   virtual ~osd_midi_device_none() { }
36   virtual bool open_input(const char *devname);
37   virtual bool open_output(const char *devname);
38   virtual void close();
39   virtual bool poll();
40   virtual int read(UINT8 *pOut);
41   virtual void write(UINT8 data);
42
43private:
1344   int dummy;
1445};
1546
16bool osd_midi_init()
47osd_midi_device *none_module::create_midi_device()
1748{
18   return true;
49   return global_alloc(osd_midi_device_none());
1950}
2051
21void osd_midi_exit()
52
53int none_module::init()
2254{
55   return 0;
2356}
2457
25void osd_list_midi_devices(void)
58void none_module::exit()
2659{
60}
61
62void none_module::list_midi_devices(void)
63{
2764   osd_printf_warning("\nMIDI is not supported in this build\n");
2865}
2966
30osd_midi_device *osd_open_midi_input(const char *devname)
67bool osd_midi_device_none::open_input(const char *devname)
3168{
32   return NULL;
69   return false;
3370}
3471
35osd_midi_device *osd_open_midi_output(const char *devname)
72bool osd_midi_device_none::open_output(const char *devname)
3673{
37   return NULL;
74   return false;
3875}
3976
40void osd_close_midi_channel(osd_midi_device *dev)
77void osd_midi_device_none::close()
4178{
4279}
4380
44bool osd_poll_midi_channel(osd_midi_device *dev)
81bool osd_midi_device_none::poll()
4582{
4683   return false;
4784}
4885
49int osd_read_midi_channel(osd_midi_device *dev, UINT8 *pOut)
86int osd_midi_device_none::read(UINT8 *pOut)
5087{
5188   return 0;
5289}
5390
54void osd_write_midi_channel(osd_midi_device *dev, UINT8 data)
91void osd_midi_device_none::write(UINT8 data)
5592{
5693}
94
95MODULE_DEFINITION(MIDI_NONE, none_module)
trunk/src/osd/modules/midi/portmidi.c
r243268r243269
66
77*******************************************************************c********/
88
9#ifndef NO_USE_MIDI
10
911#include "portmidi/pm_common/portmidi.h"
1012#include "osdcore.h"
13#include "corealloc.h"
14#include "modules/osdmodule.h"
15#include "midi_module.h"
1116
17class pm_module : public osd_module, public midi_module
18{
19public:
20
21   pm_module()
22   : osd_module(OSD_MIDI_PROVIDER, "pm"), midi_module()
23   {
24   }
25   virtual ~pm_module() { }
26
27   virtual int init();
28   virtual void exit();
29
30   osd_midi_device *create_midi_device();
31   void list_midi_devices(void);
32};
33
34
1235static const int RX_EVENT_BUF_SIZE = 512;
1336
1437#define MIDI_SYSEX  0xf0
1538#define MIDI_EOX    0xf7
1639
17struct osd_midi_device
40class osd_midi_device_pm : public osd_midi_device
1841{
42public:
43   virtual ~osd_midi_device_pm() { }
44   virtual bool open_input(const char *devname);
45   virtual bool open_output(const char *devname);
46   virtual void close();
47   virtual bool poll();
48   virtual int read(UINT8 *pOut);
49   virtual void write(UINT8 data);
50
51private:
1952   PortMidiStream *pmStream;
2053   PmEvent rx_evBuf[RX_EVENT_BUF_SIZE];
2154   UINT8 xmit_in[4]; // Pm_Messages mean we can at most have 3 residue bytes
r243268r243269
2457   bool rx_sysex;
2558};
2659
27bool osd_midi_init()
60osd_midi_device *pm_module::create_midi_device()
2861{
62   return global_alloc(osd_midi_device_pm());
63}
64
65
66int pm_module::init()
67{
2968   Pm_Initialize();
30   return true;
69   return 0;
3170}
3271
33void osd_midi_exit()
72void pm_module::exit()
3473{
3574   Pm_Terminate();
3675}
3776
38void osd_list_midi_devices(void)
77void pm_module::list_midi_devices(void)
3978{
4079   int num_devs = Pm_CountDevices();
4180   const PmDeviceInfo *pmInfo;
r243268r243269
71110   }
72111}
73112
74osd_midi_device *osd_open_midi_input(const char *devname)
113bool osd_midi_device_pm::open_input(const char *devname)
75114{
76115   int num_devs = Pm_CountDevices();
77116   int found_dev = -1;
78117   const PmDeviceInfo *pmInfo;
79118   PortMidiStream *stm;
80   osd_midi_device *ret;
81119
82120   if (!strcmp("default", devname))
83121   {
r243268r243269
104142   {
105143      if (Pm_OpenInput(&stm, found_dev, NULL, RX_EVENT_BUF_SIZE, NULL, NULL) == pmNoError)
106144      {
107         ret = (osd_midi_device *)osd_malloc(sizeof(osd_midi_device));
108         memset(ret, 0, sizeof(osd_midi_device));
109         ret->pmStream = stm;
110         return ret;
145         pmStream = stm;
146         return true;
111147      }
112148      else
113149      {
114150         printf("Couldn't open PM device\n");
115         return NULL;
151         return false;
116152      }
117153   }
118154   else
119155   {
120      return NULL;
156      return false;
121157   }
122158}
123159
124osd_midi_device *osd_open_midi_output(const char *devname)
160bool osd_midi_device_pm::open_output(const char *devname)
125161{
126162   int num_devs = Pm_CountDevices();
127163   int found_dev = -1;
128164   const PmDeviceInfo *pmInfo;
129165   PortMidiStream *stm;
130   osd_midi_device *ret;
131166
132167   if (!strcmp("default", devname))
133168   {
r243268r243269
154189   {
155190      if (Pm_OpenOutput(&stm, found_dev, NULL, 100, NULL, NULL, 0) == pmNoError)
156191      {
157         ret = (osd_midi_device *)osd_malloc(sizeof(osd_midi_device));
158         memset(ret, 0, sizeof(osd_midi_device));
159         ret->pmStream = stm;
160         return ret;
192         pmStream = stm;
193         return true;
161194      }
162195      else
163196      {
164197         printf("Couldn't open PM device\n");
165         return NULL;
198         return false;
166199      }
167200   }
168201   else
169202   {
170      return NULL;
203      return false;
171204   }
172   return NULL;
205   return false;
173206}
174207
175void osd_close_midi_channel(osd_midi_device *dev)
208void osd_midi_device_pm::close()
176209{
177   Pm_Close(dev->pmStream);
178   osd_free(dev);
210   Pm_Close(pmStream);
179211}
180212
181bool osd_poll_midi_channel(osd_midi_device *dev)
213bool osd_midi_device_pm::poll()
182214{
183   PmError chk = Pm_Poll(dev->pmStream);
215   PmError chk = Pm_Poll(pmStream);
184216
185217   return (chk == pmGotData) ? true : false;
186218}
187219
188int osd_read_midi_channel(osd_midi_device *dev, UINT8 *pOut)
220int osd_midi_device_pm::read(UINT8 *pOut)
189221{
190   int msgsRead = Pm_Read(dev->pmStream, dev->rx_evBuf, RX_EVENT_BUF_SIZE);
222   int msgsRead = Pm_Read(pmStream, rx_evBuf, RX_EVENT_BUF_SIZE);
191223   int bytesOut = 0;
192224
193225   if (msgsRead <= 0)
r243268r243269
197229
198230   for (int msg = 0; msg < msgsRead; msg++)
199231   {
200      UINT8 status = Pm_MessageStatus(dev->rx_evBuf[msg].message);
232      UINT8 status = Pm_MessageStatus(rx_evBuf[msg].message);
201233
202      if (dev->rx_sysex)
234      if (rx_sysex)
203235      {
204236         if (status & 0x80)  // sys real-time imposing on us?
205237         {
206238            if ((status == 0xf2) || (status == 0xf3))
207239            {
208240               *pOut++ = status;
209               *pOut++ = Pm_MessageData1(dev->rx_evBuf[msg].message);
210               *pOut++ = Pm_MessageData2(dev->rx_evBuf[msg].message);
241               *pOut++ = Pm_MessageData1(rx_evBuf[msg].message);
242               *pOut++ = Pm_MessageData2(rx_evBuf[msg].message);
211243               bytesOut += 3;
212244            }
213245            else
r243268r243269
216248               bytesOut++;
217249               if (status == MIDI_EOX)
218250               {
219                  dev->rx_sysex = false;
251                  rx_sysex = false;
220252               }
221253            }
222254         }
r243268r243269
224256         {
225257            for (int i = 0; i < 4; i++)
226258            {
227               UINT8 byte = dev->rx_evBuf[msg].message & 0xff;
259               UINT8 byte = rx_evBuf[msg].message & 0xff;
228260               *pOut++ = byte;
229261               bytesOut++;
230262               if (byte == MIDI_EOX)
231263               {
232                  dev->rx_sysex = false;
264                  rx_sysex = false;
233265                  break;
234266               }
235               dev->rx_evBuf[msg].message >>= 8;
267               rx_evBuf[msg].message >>= 8;
236268            }
237269         }
238270      }
r243268r243269
243275            case 0xc:   // 2-byte messages
244276            case 0xd:
245277               *pOut++ = status;
246               *pOut++ = Pm_MessageData1(dev->rx_evBuf[msg].message);
278               *pOut++ = Pm_MessageData1(rx_evBuf[msg].message);
247279               bytesOut += 2;
248280               break;
249281
r243268r243269
253285                  case 0: // System Exclusive
254286                  {
255287                     *pOut++ = status;   // this should be OK: the shortest legal sysex is F0 tt dd F7, I believe
256                     *pOut++ = (dev->rx_evBuf[msg].message>>8) & 0xff;
257                     *pOut++ = (dev->rx_evBuf[msg].message>>16) & 0xff;
258                     UINT8 last = *pOut++ = (dev->rx_evBuf[msg].message>>24) & 0xff;
288                     *pOut++ = (rx_evBuf[msg].message>>8) & 0xff;
289                     *pOut++ = (rx_evBuf[msg].message>>16) & 0xff;
290                     UINT8 last = *pOut++ = (rx_evBuf[msg].message>>24) & 0xff;
259291                     bytesOut += 4;
260                     dev->rx_sysex = (last != MIDI_EOX);
292                     rx_sysex = (last != MIDI_EOX);
261293                     break;
262294                  }
263295
264296                  case 7: // End of System Exclusive
265297                     *pOut++ = status;
266298                     bytesOut += 1;
267                     dev->rx_sysex = false;
299                     rx_sysex = false;
268300                     break;
269301
270302                  case 2: // song pos
271303                  case 3: // song select
272304                     *pOut++ = status;
273                     *pOut++ = Pm_MessageData1(dev->rx_evBuf[msg].message);
274                     *pOut++ = Pm_MessageData2(dev->rx_evBuf[msg].message);
305                     *pOut++ = Pm_MessageData1(rx_evBuf[msg].message);
306                     *pOut++ = Pm_MessageData2(rx_evBuf[msg].message);
275307                     bytesOut += 3;
276308                     break;
277309
r243268r243269
282314
283315            default:
284316               *pOut++ = status;
285               *pOut++ = Pm_MessageData1(dev->rx_evBuf[msg].message);
286               *pOut++ = Pm_MessageData2(dev->rx_evBuf[msg].message);
317               *pOut++ = Pm_MessageData1(rx_evBuf[msg].message);
318               *pOut++ = Pm_MessageData2(rx_evBuf[msg].message);
287319               bytesOut += 3;
288320               break;
289321         }
r243268r243269
293325   return bytesOut;
294326}
295327
296void osd_write_midi_channel(osd_midi_device *dev, UINT8 data)
328void osd_midi_device_pm::write(UINT8 data)
297329{
298330   int bytes_needed = 0;
299331   PmEvent ev;
300332   ev.timestamp = 0;   // use the current time
301333
302//  printf("write: %02x (%d)\n", data, dev->xmit_cnt);
334//  printf("write: %02x (%d)\n", data, xmit_cnt);
303335
304336   // reject data bytes when no valid status exists
305   if ((dev->last_status == 0) && !(data & 0x80))
337   if ((last_status == 0) && !(data & 0x80))
306338   {
307      dev->xmit_cnt = 0;
339      xmit_cnt = 0;
308340      return;
309341   }
310342
311   if (dev->xmit_cnt >= 4)
343   if (xmit_cnt >= 4)
312344   {
313345      printf("MIDI out: packet assembly overflow, contact MAMEdev!\n");
314346      return;
315347   }
316348
317349   // handle sysex
318   if (dev->last_status == MIDI_SYSEX)
350   if (last_status == MIDI_SYSEX)
319351   {
320//      printf("sysex: %02x (%d)\n", data, dev->xmit_cnt);
352//      printf("sysex: %02x (%d)\n", data, xmit_cnt);
321353
322354      // if we get a status that isn't sysex, assume it's system common
323355      if ((data & 0x80) && (data != MIDI_EOX))
324356      {
325357//          printf("common during sysex!\n");
326358         ev.message = Pm_Message(data, 0, 0);
327         Pm_Write(dev->pmStream, &ev, 1);
359         Pm_Write(pmStream, &ev, 1);
328360         return;
329361      }
330362
331      dev->xmit_in[dev->xmit_cnt++] = data;
363      xmit_in[xmit_cnt++] = data;
332364
333365      // if EOX or 4 bytes filled, transmit 4 bytes
334      if ((dev->xmit_cnt == 4) || (data == MIDI_EOX))
366      if ((xmit_cnt == 4) || (data == MIDI_EOX))
335367      {
336         ev.message = dev->xmit_in[0] | (dev->xmit_in[1]<<8) | (dev->xmit_in[2]<<16) | (dev->xmit_in[3]<<24);
337         Pm_Write(dev->pmStream, &ev, 1);
338         dev->xmit_in[0] = dev->xmit_in[1] = dev->xmit_in[2] = dev->xmit_in[3] = 0;
339         dev->xmit_cnt = 0;
368         ev.message = xmit_in[0] | (xmit_in[1]<<8) | (xmit_in[2]<<16) | (xmit_in[3]<<24);
369         Pm_Write(pmStream, &ev, 1);
370         xmit_in[0] = xmit_in[1] = xmit_in[2] = xmit_in[3] = 0;
371         xmit_cnt = 0;
340372
341373//          printf("SysEx packet: %08x\n", ev.message);
342374
343375         // if this is EOX, kill the running status
344376         if (data == MIDI_EOX)
345377         {
346            dev->last_status = 0;
378            last_status = 0;
347379         }
348380      }
349381
r243268r243269
351383   }
352384
353385   // handle running status.  don't allow system real-time messages to be considered as running status.
354   if ((dev->xmit_cnt == 0) && (data & 0x80) && (data < 0xf8))
386   if ((xmit_cnt == 0) && (data & 0x80) && (data < 0xf8))
355387   {
356      dev->last_status = data;
388      last_status = data;
357389   }
358390
359   if ((dev->xmit_cnt == 0) && !(data & 0x80))
391   if ((xmit_cnt == 0) && !(data & 0x80))
360392   {
361      dev->xmit_in[dev->xmit_cnt++] = dev->last_status;
362      dev->xmit_in[dev->xmit_cnt++] = data;
363//      printf("\trunning status: [%d] = %02x, [%d] = %02x, last_status = %02x\n", dev->xmit_cnt-2, dev->last_status, dev->xmit_cnt-1, data, dev->last_status);
393      xmit_in[xmit_cnt++] = last_status;
394      xmit_in[xmit_cnt++] = data;
395//      printf("\trunning status: [%d] = %02x, [%d] = %02x, last_status = %02x\n", xmit_cnt-2, last_status, xmit_cnt-1, data, last_status);
364396   }
365397   else
366398   {
367      dev->xmit_in[dev->xmit_cnt++] = data;
368//      printf("\tNRS: [%d] = %02x\n", dev->xmit_cnt-1, data);
399      xmit_in[xmit_cnt++] = data;
400//      printf("\tNRS: [%d] = %02x\n", xmit_cnt-1, data);
369401   }
370402
371   if ((dev->xmit_cnt == 1) && (dev->xmit_in[0] == MIDI_SYSEX))
403   if ((xmit_cnt == 1) && (xmit_in[0] == MIDI_SYSEX))
372404   {
373405//      printf("Start SysEx!\n");
374      dev->last_status = MIDI_SYSEX;
406      last_status = MIDI_SYSEX;
375407      return;
376408   }
377409
378410   // are we there yet?
379//  printf("status check: %02x\n", dev->xmit_in[0]);
380   switch ((dev->xmit_in[0]>>4) & 0xf)
411//  printf("status check: %02x\n", xmit_in[0]);
412   switch ((xmit_in[0]>>4) & 0xf)
381413   {
382414      case 0xc:   // 2-byte messages
383415      case 0xd:
r243268r243269
385417         break;
386418
387419      case 0xf:   // system common
388         switch (dev->xmit_in[0] & 0xf)
420         switch (xmit_in[0] & 0xf)
389421         {
390422            case 0: // System Exclusive is handled above
391423               break;
r243268r243269
410442         break;
411443   }
412444
413   if (dev->xmit_cnt == bytes_needed)
445   if (xmit_cnt == bytes_needed)
414446   {
415      ev.message = Pm_Message(dev->xmit_in[0], dev->xmit_in[1], dev->xmit_in[2]);
416      Pm_Write(dev->pmStream, &ev, 1);
417      dev->xmit_cnt = 0;
447      ev.message = Pm_Message(xmit_in[0], xmit_in[1], xmit_in[2]);
448      Pm_Write(pmStream, &ev, 1);
449      xmit_cnt = 0;
418450   }
419451
420452}
453#else
454   #include "modules/osdmodule.h"
455   #include "netdev_module.h"
456
457   MODULE_NOT_SUPPORTED(pm_module, OSD_MIDI_PROVIDER, "pm")
458#endif
459
460
461MODULE_DEFINITION(MIDI_PM, pm_module)
trunk/src/osd/modules/sound/sdl_sound.c
r243268r243269
1212#include "sound_module.h"
1313#include "modules/osdmodule.h"
1414
15#if (!defined(OSD_WINDOWS))
15#if (!defined(OSD_WINDOWS) || defined(USE_SDL_SOUND))
1616
1717// standard sdl header
1818#include "../../sdl/sdlinc.h"
trunk/src/osd/osdcore.h
r243268r243269
887887/***************************************************************************
888888    MIDI I/O INTERFACES
889889***************************************************************************/
890struct osd_midi_device;
891890
892bool osd_midi_init();
893void osd_midi_exit();
894void osd_list_midi_devices(void);
895// free result with osd_close_midi_channel()
896osd_midi_device *osd_open_midi_input(const char *devname);
897// free result with osd_close_midi_channel()
898osd_midi_device *osd_open_midi_output(const char *devname);
899void osd_close_midi_channel(osd_midi_device *dev);
900bool osd_poll_midi_channel(osd_midi_device *dev);
901int osd_read_midi_channel(osd_midi_device *dev, UINT8 *pOut);
902void osd_write_midi_channel(osd_midi_device *dev, UINT8 data);
891class osd_midi_device
892{
893public:
894   virtual ~osd_midi_device() { }
895   // free result with osd_close_midi_channel()
896   virtual bool open_input(const char *devname) = 0;
897   // free result with osd_close_midi_channel()
898   virtual bool open_output(const char *devname) = 0;
899   virtual void close() = 0;
900   virtual bool poll() = 0;
901   virtual int read(UINT8 *pOut) = 0;
902   virtual void write(UINT8 data) = 0;
903};
903904
904
905//FIXME: really needed here?
905906void osd_list_network_adapters(void);
906907
907908/***************************************************************************
trunk/src/osd/osdepend.h
r243268r243269
7171   // command option overrides
7272   virtual bool execute_command(const char *command) = 0;
7373
74   // midi interface
75   virtual osd_midi_device *create_midi_device() = 0;
76
7477};
7578
7679#endif  /* __OSDEPEND_H__ */
trunk/src/osd/sdl/sdl.mak
r243268r243269
210210BASE_TARGETOS = unix
211211SYNC_IMPLEMENTATION = tc
212212SDL_NETWORK = taptun
213#SDL_NETWORK = pcap
214213
215214ifndef NO_USE_MIDI
216215INCPATH += `pkg-config --cflags alsa`
r243268r243269
448447   $(OSDOBJ)/modules/font/font_none.o \
449448   $(OSDOBJ)/modules/netdev/taptun.o \
450449   $(OSDOBJ)/modules/netdev/pcap.o \
450   $(OSDOBJ)/modules/midi/portmidi.o \
451   $(OSDOBJ)/modules/midi/none.o \
451452
452453ifdef NO_USE_MIDI
453   OSDOBJS += $(OSDOBJ)/modules/midi/none.o
454   DEFS += -DNO_USE_MIDI
454455else
455   OSDOBJS += $(OSDOBJ)/modules/midi/portmidi.o
456456endif
457457
458458# Add SDL2.0 support
trunk/src/osd/windows/windows.mak
r243268r243269
383383   $(WINOBJ)/winmenu.o \
384384   $(WINOBJ)/winmain.o \
385385   $(OSDOBJ)/modules/midi/portmidi.o \
386   $(OSDOBJ)/modules/midi/none.o \
386387   $(OSDOBJ)/modules/lib/osdobj_common.o  \
387388   $(OSDOBJ)/modules/font/font_sdl.o \
388389   $(OSDOBJ)/modules/font/font_windows.o \
r243268r243269
392393   $(OSDOBJ)/modules/netdev/taptun.o \
393394
394395ifdef USE_SDL
395OSDOBJS += \
396   $(OSDOBJ)/modules/sound/sdl_sound.o
396DEFS += -DUSE_SDL_SOUND
397397endif
398398
399399ifndef DONT_USE_NETWORK


Previous 199869 Revisions Next


© 1997-2024 The MAME Team