]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Munt MT-32/CM-32L MIDI emulation
authorToni Wilen <twilen@winuae.net>
Thu, 27 Jul 2023 18:45:53 +0000 (21:45 +0300)
committerToni Wilen <twilen@winuae.net>
Thu, 27 Jul 2023 18:45:53 +0000 (21:45 +0300)
12 files changed:
devices.cpp
include/midiemu.h [new file with mode: 0644]
midiemu.cpp [new file with mode: 0644]
od-win32/midi.cpp
od-win32/midi.h
od-win32/parser.cpp
od-win32/parser.h
od-win32/serial_win32.cpp
od-win32/sysconfig.h
od-win32/win32gfx.cpp
od-win32/winuae_msvc15/winuae_msvc.vcxproj
od-win32/winuae_msvc15/winuae_msvc.vcxproj.filters

index d34016098b10c7e9db54b1ed5fb85c9301a34daf..7da93ac6463c21df9db51d791500ecd550f32edf 100644 (file)
@@ -57,6 +57,9 @@
 #include "videograb.h"
 #include "rommgr.h"
 #include "newcpu.h"
+#ifdef WITH_MIDIEMU
+#include "midiemu.h"
+#endif
 #ifdef RETROPLATFORM
 #include "rp.h"
 #endif
@@ -287,6 +290,9 @@ void devices_update_sound(float clk, float syncadjust)
        update_sndboard_sound (clk / syncadjust);
        update_cda_sound(clk / syncadjust);
        x86_update_sound(clk / syncadjust);
+#ifdef WITH_MIDIEMU
+       midi_update_sound(clk / syncadjust);
+#endif
 }
 
 void devices_update_sync(float svpos, float syncadjust)
diff --git a/include/midiemu.h b/include/midiemu.h
new file mode 100644 (file)
index 0000000..283bdfd
--- /dev/null
@@ -0,0 +1,8 @@
+
+extern int midi_emu;
+extern void midi_emu_close(void);
+extern int midi_emu_open(const TCHAR *);
+extern void midi_emu_parse(uae_u8 *midi, int len);
+extern bool midi_emu_available(const TCHAR *);
+extern void midi_emu_reopen(void);
+extern void midi_update_sound(float);
diff --git a/midiemu.cpp b/midiemu.cpp
new file mode 100644 (file)
index 0000000..a121f3e
--- /dev/null
@@ -0,0 +1,254 @@
+
+#include "sysconfig.h"
+#include "sysdeps.h"
+#include "options.h"
+
+#include "fsdb.h"
+#include "uae.h"
+#include "audio.h"
+#define MT32EMU_API_TYPE 1
+#include <mt32emu.h>
+#include "midiemu.h"
+#include "parser.h"
+
+// MUNT MT-32/CM-32L emulation
+
+static mt32emu_context mt32context;
+static int midi_emu_streamid;
+static float base_midi_emu_event;
+static int midi_evt_time;
+static int midi_emu_freq;
+static uae_s16 midi_volume;
+int midi_emu;
+
+static const TCHAR *cm32lctl[] = {
+       _T("ctrl_cm32ln_1_00"),
+       _T("ctrl_cm32l_1_02"),
+       _T("ctrl_cm32l_1_00"),
+       NULL
+};
+static const TCHAR *mt32ctl[] = {
+       _T("ctrl_mt32_1_07"),
+       _T("ctrl_mt32_1_06"),
+       _T("ctrl_mt32_1_05"),
+       _T("ctrl_mt32_1_04"),
+       _T("ctrl_mt32_bluer"),
+       _T("ctrl_mt32_2_04"),
+       _T("ctrl_mt32_2_07"),
+       _T("ctrl_mt32_2_06"),
+       _T("ctrl_mt32_2_03"),
+       NULL
+};
+
+static bool check_rom(const TCHAR *path, const TCHAR *name)
+{
+       TCHAR rpath[MAX_DPATH];
+       _tcscpy(rpath, path);
+       _tcscat(rpath, name);
+       _tcscat(rpath, _T(".rom"));
+       bool exists = my_existsfile(rpath);
+       return exists;
+}
+
+static bool load_rom(const TCHAR *path, const TCHAR *name)
+{
+       mt32emu_return_code err;
+       TCHAR rpath[MAX_DPATH];
+       _tcscpy(rpath, path);
+       _tcscat(rpath, name);
+       _tcscat(rpath, _T(".rom"));
+       write_log(_T("mt32emu_add_rom_file(%s)\n"), rpath);
+       char *n = ua(rpath);
+       err = mt32emu_add_rom_file(mt32context, n);
+       xfree(n);
+       if (err < 0) {
+               _tcscpy(rpath, path);
+               _tcscat(rpath, name);
+               _tcscat(rpath, _T("_a.rom"));
+               char *n = ua(rpath);
+               err = mt32emu_add_rom_file(mt32context, n);
+               xfree(n);
+               if (err >= 0) {
+                       _tcscpy(rpath, path);
+                       _tcscat(rpath, name);
+                       _tcscat(rpath, _T("_b.rom"));
+                       char *n = ua(rpath);
+                       err = mt32emu_add_rom_file(mt32context, n);
+                       xfree(n);
+               }
+       }
+       write_log("-> %d\n", err);
+       return err >= 0;
+}
+
+static void midi_emu_add_roms(void)
+{
+       TCHAR path[MAX_DPATH];
+       fetch_rompath(path, sizeof(path) / sizeof(TCHAR));
+       _tcscat(path, _T("mt32-roms\\"));
+       if (!my_existsdir(path)) {
+               _tcscpy(path, _T("C:\\mt32-rom-data\\"));
+       }
+       if (!my_existsdir(path)) {
+               write_log(_T("mt32emu: rom path missing\n"));
+               return;
+       }
+       if (midi_emu == 1) {
+               if (!load_rom(path, _T("pcm_mt32"))) {
+                       load_rom(path, _T("pcm_mt32_l"));
+                       load_rom(path, _T("pcm_mt32_h"));
+               }
+       } else {
+               if (!load_rom(path, _T("pcm_cm32l"))) {
+                       load_rom(path, _T("pcm_mt32"));
+                       load_rom(path, _T("pcm_cm32l_h"));
+               }
+       }
+       const TCHAR **ctl = midi_emu == 1 ? mt32ctl : cm32lctl;
+       for (int i = 0; ctl[i]; i++) {
+               if (load_rom(path, ctl[i])) {
+                       break;
+               }
+       }
+}
+
+bool midi_emu_available(const TCHAR *id)
+{
+       TCHAR path[MAX_DPATH];
+       int me = 0;
+
+       if (_tcsstr(id, _T("MT-32"))) {
+               me = 1;
+       } else if (_tcsstr(id, _T("CM-32L"))) {
+               me = 2;
+       } else {
+               return false;
+       }
+
+       fetch_rompath(path, sizeof(path) / sizeof(TCHAR));
+       _tcscat(path, _T("mt32-roms\\"));
+       if (!my_existsdir(path)) {
+               _tcscpy(path, _T("C:\\mt32-rom-data\\"));
+       }
+       if (!my_existsdir(path)) {
+               return false;
+       }
+       if (me == 1) {
+               if (!check_rom(path, _T("pcm_mt32"))) {
+                       if (!check_rom(path, _T("pcm_mt32_l")) || !check_rom(path, _T("pcm_mt32_h"))) {
+                               return false;
+                       }
+               }
+       } else {
+               if (!check_rom(path, _T("pcm_cm32l"))) {
+                       if (!check_rom(path, _T("pcm_mt32")) || check_rom(path, _T("pcm_cm32l_h"))) {
+                               return false;
+                       }
+               }
+       }
+       const TCHAR **ctl = me == 1 ? mt32ctl : cm32lctl;
+       for (int i = 0; ctl[i]; i++) {
+               if (check_rom(path, ctl[i])) {
+                       return true;
+               }
+       }
+       return false;
+}
+
+void midi_update_sound(float v)
+{
+       base_midi_emu_event = v;
+       midi_volume = (100 - currprefs.sound_volume_midi) * 32768 / 100;
+}
+
+static bool audio_state_midi_emu(int streamid, void *params)
+{
+       int sample[2] = { 0 };
+
+       if (mt32context) {
+               int vol = currprefs.sound_volume_midi;
+               mt32emu_bit16s stream[2];
+               mt32emu_render_bit16s(mt32context, stream, 1);
+               sample[0] = stream[0] * midi_volume / 32768;
+               sample[1] = stream[1] * midi_volume / 32768;
+       }
+
+       midi_evt_time = (int)(base_midi_emu_event * CYCLE_UNIT / midi_emu_freq);
+       audio_state_stream_state(streamid, sample, 2, midi_evt_time);
+       return true;
+}
+
+void midi_emu_parse(uae_u8 *midi, int len)
+{
+       if (mt32context) {
+               mt32emu_parse_stream(mt32context, midi, len);
+       }
+}
+
+void midi_emu_close(void)
+{
+       midi_emu = 0;
+       if (midi_emu_streamid) {
+               audio_enable_stream(false, midi_emu_streamid, 0, NULL, NULL);
+               midi_emu_streamid = 0;
+       }
+       if (mt32context) {
+               mt32emu_close_synth(mt32context);
+               mt32emu_free_context(mt32context);
+       }
+       mt32context = NULL;
+}
+
+int midi_emu_open(const TCHAR *id)
+{
+       mt32emu_return_code err;
+       mt32emu_rom_info ri;
+
+       if (_tcsstr(id, _T("MT-32"))) {
+               midi_emu = 1;
+       } else if (_tcsstr(id, _T("CM-32L"))) {
+               midi_emu = 2;
+       } else {
+               return 0;
+       }
+       const char *s = mt32emu_get_library_version_string();
+       write_log("mt32emu version: %s\n", s);
+       mt32context = mt32emu_create_context((mt32emu_report_handler_i)NULL, NULL);
+       if (!mt32context) {
+               write_log("mt32emu_create_context() failed\n");
+               return 0;
+       }
+       midi_emu_add_roms();
+       mt32emu_set_analog_output_mode(mt32context, MT32EMU_AOM_ACCURATE);
+       mt32emu_get_rom_info(mt32context, &ri);
+       write_log("mt32emu control_rom_id: %s\n", ri.control_rom_id);
+       write_log("mt32emu control_rom_description: %s\n", ri.control_rom_description);
+       write_log("mt32emu control_rom_sha1_digest: %s\n", ri.control_rom_sha1_digest);
+       write_log("mt32emu pcm_rom_id: %s\n", ri.pcm_rom_id);
+       write_log("mt32emu pcm_rom_description: %s\n", ri.pcm_rom_description);
+       write_log("mt32emu pcm_rom_sha1_digest: %s\n", ri.pcm_rom_sha1_digest);
+       err = mt32emu_open_synth(mt32context);
+       if (err != MT32EMU_RC_OK) {
+               write_log("mt32emu_open_synth() failed: %d\n", err);
+               midi_emu_close();
+               return 0;
+       }
+       midi_emu_freq = mt32emu_get_actual_stereo_output_samplerate(mt32context);
+       write_log("mt32emu frequency: %d\n", midi_emu_freq);
+       midi_emu_streamid = audio_enable_stream(true, -1, 2, audio_state_midi_emu, NULL);
+
+       return 1;
+}
+
+void midi_emu_reopen(void)
+{
+       if (midi_emu) {
+               midi_emu_close();
+               if (currprefs.win32_midioutdev >= 0) {
+                       TCHAR *name = midioutportinfo[currprefs.win32_midioutdev]->name;
+                       if (!_tcsncmp(name, _T("Munt "), 5)) {
+                               midi_emu_open(name);
+                       }
+               }
+       }
+}
\ No newline at end of file
index 249326d5db541505fef985a41b51085ab84fa9f3..53992df15488207f7fc852579cc0558753f4c47b 100644 (file)
@@ -740,3 +740,11 @@ void Midi_Close(void)
                DeleteCriticalSection(&cs_proc);
        }
 }
+
+void Midi_Reopen(void)
+{
+       if (midi_ready) {
+               Midi_Close();
+               Midi_Open();
+       }
+}
index a137c239005772294b2332650ce6d4fc2becc3f1..e5278ab52e7f417aac295dcc94bc6aeac080dcad 100644 (file)
@@ -51,9 +51,10 @@ typedef enum
 
 extern BOOL midi_ready;
 
-extern int Midi_Parse (midi_direction_e direction, BYTE *c);
-extern int Midi_Open (void);
-extern void Midi_Close (void);
+extern int Midi_Parse(midi_direction_e direction, BYTE *c);
+extern int Midi_Open(void);
+extern void Midi_Close(void);
+extern void Midi_Reopen(void);
 extern LONG getmidibyte(void);
 extern int ismidibyte(void);
 
index 8ba42148985c67b06bbf39a6a0ec60f73c1b7088..f9bf023ffc9d72be410cb59467435d4b57d86125 100644 (file)
@@ -56,6 +56,9 @@
 #include "uaeipc.h"
 #include "xwin.h"
 #include "drawing.h"
+#ifdef WITH_MIDIEMU
+#include "midiemu.h"
+#endif
 #ifdef RETROPLATFORM
 #include "rp.h"
 #endif
@@ -1132,6 +1135,11 @@ void closeser (void)
                //is the same and do not open midi), so setting serper to different value helps
                serper = 0x30;
        }
+#ifdef WITH_MIDIEMU
+       if (midi_emu) {
+               midi_emu_close();
+       }
+#endif
        if(writeevent)
                CloseHandle(writeevent);
        writeevent = 0;
@@ -1172,6 +1180,11 @@ void writeser (int c)
                                tcp_disconnect ();
                        }
                }
+#ifdef WITH_MIDIEMU
+       } else if (midi_emu) {
+               uae_u8 b = (uae_u8)c;
+               midi_emu_parse(&b, 1);
+#endif
        } else if (midi_ready) {
                BYTE outchar = (BYTE)c;
                Midi_Parse (midi_output, &outchar);
@@ -1374,10 +1387,19 @@ void setserstat (int mask, int onoff)
        }
 }
 
-int setbaud (long baud)
+int setbaud(int baud, int org_baud)
 {
-       if(baud == 31400 && currprefs.win32_midioutdev >= -1) {
+       if(org_baud == 31400 && currprefs.win32_midioutdev >= -1) {
                /* MIDI baud-rate */
+#ifdef WITH_MIDIEMU
+               if (currprefs.win32_midioutdev >= 0) {
+                       TCHAR *name = midioutportinfo[currprefs.win32_midioutdev]->name;
+                       if (!_tcsncmp(name, _T("Munt "), 5)) {
+                               midi_emu_open(name);
+                               return 1;
+                       }
+               }
+#endif
                if (!midi_ready) {
                        if (Midi_Open())
                                write_log (_T("Midi enabled\n"));
@@ -1387,6 +1409,11 @@ int setbaud (long baud)
                if (midi_ready) {
                        Midi_Close();
                }
+#ifdef WITH_MIDIEMU
+               if (midi_emu) {
+                       midi_emu_close();
+               }
+#endif
                if (!currprefs.use_serial)
                        return 1;
                if (hCom != INVALID_HANDLE_VALUE)  {
@@ -1699,6 +1726,18 @@ int enummidiports (void)
                        }
                }
        }
+#ifdef WITH_MIDIEMU
+       midioutportinfo[num] = xcalloc(struct midiportinfo, 1);
+       midioutportinfo[num]->label = midi_emu_available(_T("MT-32")) ? my_strdup(_T("Munt MT-32")) : my_strdup(_T("Munt MT-32 (Missing ROMs)"));
+       midioutportinfo[num]->name = my_strdup(_T("Munt MT-32"));
+       midioutportinfo[num]->devid = num;
+       num++;
+       midioutportinfo[num] = xcalloc(struct midiportinfo, 1);
+       midioutportinfo[num]->label = midi_emu_available(_T("CM-32L")) ? my_strdup(_T("Munt CM-32L")) : my_strdup(_T("Munt CM-32L (Missing ROMs)"));
+       midioutportinfo[num]->name = my_strdup(_T("Munt CM-32L"));
+       midioutportinfo[num]->devid = num;
+       num++;
+#endif
        num = innum;
        for (i = 0; i < num && i < MAX_MIDI_PORTS - 1; i++) {
                if (midiInGetDevCaps (i, &midiInCaps, sizeof (midiInCaps)) != MMSYSERR_NOERROR) {
index ccf905cc70b3de590562808746608d0b74da32c6..6fac433c121f9c09372c4dd050dcbb53a9b685cb 100644 (file)
@@ -9,7 +9,7 @@
 
 #define PRTBUFSIZE 65536
 
-int setbaud(long baud );
+int setbaud(int baud, int origbaud);
 void getserstat(int *status);
 void setserstat(int mask, int onoff);
 int readser(int *buffer);
@@ -48,7 +48,8 @@ extern int load_ghostscript (void);
 struct midiportinfo
 {
        TCHAR *name;
-       unsigned int devid;
+    TCHAR *label;
+    int devid;
 };
 extern struct midiportinfo *midiinportinfo[MAX_MIDI_PORTS];
 extern struct midiportinfo *midioutportinfo[MAX_MIDI_PORTS];
index 1a1dd32feff1affd45ce47f8de9b064225a572b4..07ea6cc12f90b1e0f8fab56ada98132f01da1ac3 100644 (file)
@@ -220,7 +220,7 @@ static void sersend_end(uae_u32 v);
 
 void SERPER (uae_u16 w)
 {
-       int baud = 0, i, per;
+       int baud = 0, mbaud = 0, i, per;
        int oldper = serper;
        static int warned;
 
@@ -247,6 +247,7 @@ void SERPER (uae_u16 w)
        if (baud <= 0) {
                baud = allowed_baudrates[1];
        }
+       mbaud = baud;
 
        serial_period_hsyncs = (((serper & 0x7fff) + 1) * (1 + 8 + ninebit + 1 - 1)) / maxhpos;
        if (serial_period_hsyncs <= 0)
@@ -281,7 +282,7 @@ void SERPER (uae_u16 w)
        serial_send_previous = -1;
 
 #ifdef SERIAL_PORT
-       setbaud (baud);
+       setbaud(baud, mbaud);
 #endif
 
        // mid transmit period change
index acb4e290b84b39a51c211cd0f4319500a2e1fc34..04e917c16dc4a79a75245302c987587041722fc3 100644 (file)
 #define WITH_THREADED_CPU
 #define WITH_SOFTFLOAT
 #define FLOPPYBRIDGE
+#define WITH_MIDIEMU
 
 
 #else
index 80b4e18eb4149ec90a8d9b7688cdf43573fa6937..db96cf6477591f5c30a083d36c76e5622f9ec876 100644 (file)
@@ -2616,11 +2616,14 @@ int check_prefs_changed_gfx(void)
                currprefs.win32_midioutdev = changed_prefs.win32_midioutdev;
                currprefs.sound_volume_midi = changed_prefs.sound_volume_midi;
                currprefs.win32_midirouter = changed_prefs.win32_midirouter;
+
 #ifdef SERIAL_PORT
-               if (midi_ready) {
-                       Midi_Close ();
-                       Midi_Open ();
-               }
+               serial_exit();
+               serial_init();
+               Midi_Reopen();
+#endif
+#ifdef WITH_MIDIEMU
+               midi_emu_reopen();
 #endif
        }
 
index a35078740474a4036158db13604e077ec386f10f..35119929aed0bf1c5772f30aa025a7a611446fe0 100644 (file)
       <Culture>0x0409</Culture>
     </ResourceCompile>
     <Link>
-      <AdditionalDependencies>ws2_32.lib;winmm.lib;comctl32.lib;version.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;winio.lib;setupapi.lib;wininet.lib;shlwapi.lib;libpng16.lib;lglcd.lib;openal32.lib;portaudio_x86.lib;vfw32.lib;wtsapi32.lib;enet.lib;lzmalib.lib;prowizard.lib;libFLAC_static.lib;hid.lib;zlibstat.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;gdiplus.lib;effects11.lib;Msimg32.lib;Dwmapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>ws2_32.lib;winmm.lib;comctl32.lib;version.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;winio.lib;setupapi.lib;wininet.lib;shlwapi.lib;libpng16.lib;lglcd.lib;openal32.lib;portaudio_x86.lib;vfw32.lib;wtsapi32.lib;enet.lib;lzmalib.lib;prowizard.lib;libFLAC_static.lib;hid.lib;zlibstat.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;gdiplus.lib;effects11.lib;Msimg32.lib;Dwmapi.lib;mt32emu.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories);$(SolutionDir)\..\lib\</AdditionalLibraryDirectories>
       <Culture>0x0409</Culture>
     </ResourceCompile>
     <Link>
-      <AdditionalDependencies>ws2_32.lib;winmm.lib;comctl32.lib;version.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;winio.lib;setupapi.lib;wininet.lib;shlwapi.lib;libpng16.lib;lglcd.lib;openal32.lib;portaudio_x86.lib;vfw32.lib;wtsapi32.lib;enet.lib;lzmalib.lib;prowizard.lib;libFLAC_static.lib;hid.lib;zlibstat.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;gdiplus.lib;effects11.lib;Msimg32.lib;Dwmapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>ws2_32.lib;winmm.lib;comctl32.lib;version.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;winio.lib;setupapi.lib;wininet.lib;shlwapi.lib;libpng16.lib;lglcd.lib;openal32.lib;portaudio_x86.lib;vfw32.lib;wtsapi32.lib;enet.lib;lzmalib.lib;prowizard.lib;libFLAC_static.lib;hid.lib;zlibstat.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;gdiplus.lib;effects11.lib;Msimg32.lib;Dwmapi.lib;mt32emu.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories);$(SolutionDir)\..\lib\</AdditionalLibraryDirectories>
       <Culture>0x0409</Culture>
     </ResourceCompile>
     <Link>
-      <AdditionalDependencies>ws2_32.lib;winmm.lib;comctl32.lib;version.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;winio.lib;setupapi.lib;wininet.lib;shlwapi.lib;libpng16.lib;lglcd.lib;openal32.lib;portaudio_x86.lib;vfw32.lib;wtsapi32.lib;enet.lib;lzmalib.lib;prowizard.lib;libFLAC_static.lib;hid.lib;zlibstat.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;gdiplus.lib;effects11.lib;Msimg32.lib;Dwmapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>ws2_32.lib;winmm.lib;comctl32.lib;version.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;winio.lib;setupapi.lib;wininet.lib;shlwapi.lib;libpng16.lib;lglcd.lib;openal32.lib;portaudio_x86.lib;vfw32.lib;wtsapi32.lib;enet.lib;lzmalib.lib;prowizard.lib;libFLAC_static.lib;hid.lib;zlibstat.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;gdiplus.lib;effects11.lib;Msimg32.lib;Dwmapi.lib;mt32emu.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories);$(SolutionDir)\..\lib\</AdditionalLibraryDirectories>
       <Culture>0x0409</Culture>
     </ResourceCompile>
     <Link>
-      <AdditionalDependencies>ws2_32.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;openal32.lib;libpng16.lib;lglcd.lib;wtsapi32.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;libFLAC_static.lib;hid.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;gdiplus.lib;effects11.lib;Msimg32.lib;Dwmapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>ws2_32.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;openal32.lib;libpng16.lib;lglcd.lib;wtsapi32.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;libFLAC_static.lib;hid.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;gdiplus.lib;effects11.lib;Msimg32.lib;Dwmapi.lib;mt32emu.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <ShowProgress>NotSet</ShowProgress>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <Culture>0x0409</Culture>
     </ResourceCompile>
     <Link>
-      <AdditionalDependencies>ws2_32.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;openal32.lib;libpng16.lib;lglcd.lib;wtsapi32.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;libFLAC_static.lib;hid.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;gdiplus.lib;effects11.lib;Msimg32.lib;Dwmapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>ws2_32.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;openal32.lib;libpng16.lib;lglcd.lib;wtsapi32.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;libFLAC_static.lib;hid.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;gdiplus.lib;effects11.lib;Msimg32.lib;Dwmapi.lib;mt32emu.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <ShowProgress>NotSet</ShowProgress>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <Culture>0x0409</Culture>
     </ResourceCompile>
     <Link>
-      <AdditionalDependencies>ws2_32.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;openal32.lib;libpng16.lib;lglcd.lib;wtsapi32.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;libFLAC_static.lib;hid.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;gdiplus.lib;effects11.lib;Msimg32.lib;Dwmapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>ws2_32.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;openal32.lib;libpng16.lib;lglcd.lib;wtsapi32.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;libFLAC_static.lib;hid.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;gdiplus.lib;effects11.lib;Msimg32.lib;Dwmapi.lib;mt32emu.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <ShowProgress>NotSet</ShowProgress>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <Culture>0x0409</Culture>
     </ResourceCompile>
     <Link>
-      <AdditionalDependencies>ws2_32.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;openal32.lib;libpng16.lib;lglcd.lib;wtsapi32.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;libFLAC_static.lib;hid.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;gdiplus.lib;effects11.lib;Msimg32.lib;Dwmapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>ws2_32.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;openal32.lib;libpng16.lib;lglcd.lib;wtsapi32.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;libFLAC_static.lib;hid.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;gdiplus.lib;effects11.lib;Msimg32.lib;Dwmapi.lib;mt32emu.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <ShowProgress>NotSet</ShowProgress>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <Culture>0x0409</Culture>
     </ResourceCompile>
     <Link>
-      <AdditionalDependencies>ws2_32.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;openal32.lib;libpng16.lib;lglcd.lib;wtsapi32.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;libFLAC_static.lib;hid.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;gdiplus.lib;effects11.lib;Msimg32.lib;Dwmapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>ws2_32.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;openal32.lib;libpng16.lib;lglcd.lib;wtsapi32.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;libFLAC_static.lib;hid.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;gdiplus.lib;effects11.lib;Msimg32.lib;Dwmapi.lib;mt32emu.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <ShowProgress>NotSet</ShowProgress>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <Culture>0x0409</Culture>
     </ResourceCompile>
     <Link>
-      <AdditionalDependencies>ws2_32.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;openal32.lib;libpng16.lib;lglcd.lib;wtsapi32.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;libFLAC_static.lib;hid.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;gdiplus.lib;effects11.lib;Msimg32.lib;Dwmapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>ws2_32.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;openal32.lib;libpng16.lib;lglcd.lib;wtsapi32.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;libFLAC_static.lib;hid.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;gdiplus.lib;effects11.lib;Msimg32.lib;Dwmapi.lib;mt32emu.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <ShowProgress>NotSet</ShowProgress>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <Culture>0x0409</Culture>
     </ResourceCompile>
     <Link>
-      <AdditionalDependencies>ws2_32.lib;winmm.lib;comctl32.lib;version.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;winio.lib;setupapi.lib;wininet.lib;shlwapi.lib;libpng16.lib;lglcd.lib;openal32.lib;portaudio_x86.lib;vfw32.lib;wtsapi32.lib;enet.lib;lzmalib.lib;prowizard.lib;libFLAC_static.lib;hid.lib;zlibstat.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;gdiplus.lib;effects11.lib;Msimg32.lib;Dwmapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>ws2_32.lib;winmm.lib;comctl32.lib;version.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;winio.lib;setupapi.lib;wininet.lib;shlwapi.lib;libpng16.lib;lglcd.lib;openal32.lib;portaudio_x86.lib;vfw32.lib;wtsapi32.lib;enet.lib;lzmalib.lib;prowizard.lib;libFLAC_static.lib;hid.lib;zlibstat.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;gdiplus.lib;effects11.lib;Msimg32.lib;Dwmapi.lib;mt32emu.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories);$(SolutionDir)\..\lib\</AdditionalLibraryDirectories>
       <Culture>0x0409</Culture>
     </ResourceCompile>
     <Link>
-      <AdditionalDependencies>ws2_32.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;openal32.lib;libpng16.lib;lglcd.lib;wtsapi32.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;libFLAC_static.lib;hid.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;gdiplus.lib;effects11.lib;Msimg32.lib;Dwmapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>ws2_32.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;openal32.lib;libpng16.lib;lglcd.lib;wtsapi32.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;libFLAC_static.lib;hid.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;gdiplus.lib;effects11.lib;Msimg32.lib;Dwmapi.lib;mt32emu.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <ShowProgress>NotSet</ShowProgress>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <Culture>0x0409</Culture>
     </ResourceCompile>
     <Link>
-      <AdditionalDependencies>ws2_32.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;openal32.lib;libpng16.lib;lglcd.lib;wtsapi32.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;libFLAC_static.lib;hid.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;gdiplus.lib;effects11.lib;Msimg32.lib;Dwmapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>ws2_32.lib;winmm.lib;comctl32.lib;version.lib;vfw32.lib;msacm32.lib;dsound.lib;dinput8.lib;d3d9.lib;d3dx9.lib;setupapi.lib;wininet.lib;shlwapi.lib;zlibstat.lib;portaudio_x64.lib;openal32.lib;libpng16.lib;lglcd.lib;wtsapi32.lib;enet_x64.lib;prowizard_x64.lib;lzmalib.lib;libFLAC_static.lib;hid.lib;Iphlpapi.lib;luastatic.lib;libmpeg2_ff.lib;softfloat.lib;gdiplus.lib;effects11.lib;Msimg32.lib;Dwmapi.lib;mt32emu.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <ShowProgress>NotSet</ShowProgress>
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
       <SuppressStartupBanner>true</SuppressStartupBanner>
     <ClCompile Include="..\..\luascript.cpp" />
     <ClCompile Include="..\..\mame\a2410.cpp" />
     <ClCompile Include="..\..\mame\tm34010\tms34010.cpp" />
+    <ClCompile Include="..\..\midiemu.cpp" />
     <ClCompile Include="..\..\ncr9x_scsi.cpp" />
     <ClCompile Include="..\..\newcpu_common.cpp" />
     <ClCompile Include="..\..\pcem\386.cpp" />
index 808e4271c525c05b26ae667968c2135d20e538d5..9a92b75e22895c88077db29abd2f18cb7818c111 100644 (file)
     <ClCompile Include="..\darkmode.cpp">
       <Filter>win32</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\midiemu.cpp">
+      <Filter>common</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <None Include="..\resources\35floppy.ico">