diff --git a/src/include/86box/midi.h b/src/include/86box/midi.h index 9aae23f55..d3ed78af4 100644 --- a/src/include/86box/midi.h +++ b/src/include/86box/midi.h @@ -97,6 +97,7 @@ extern const device_t fluidsynth_device; # endif # ifdef USE_MUNT extern const device_t mt32_old_device; +extern const device_t mt32_new_device; extern const device_t cm32l_device; extern const device_t cm32ln_device; # endif diff --git a/src/sound/midi.c b/src/sound/midi.c index 851e9cfad..b150c423b 100644 --- a/src/sound/midi.c +++ b/src/sound/midi.c @@ -93,6 +93,7 @@ static const MIDI_OUT_DEVICE devices[] = { #endif #ifdef USE_MUNT { &mt32_old_device }, + { &mt32_new_device }, { &cm32l_device }, { &cm32ln_device }, #endif diff --git a/src/sound/midi_mt32.c b/src/sound/midi_mt32.c index 05002b1f3..914680010 100644 --- a/src/sound/midi_mt32.c +++ b/src/sound/midi_mt32.c @@ -17,6 +17,8 @@ #define MT32_OLD_CTRL_ROM "roms/sound/mt32/MT32_CONTROL.ROM" #define MT32_OLD_PCM_ROM "roms/sound/mt32/MT32_PCM.ROM" +#define MT32_NEW_CTRL_ROM "roms/sound/mt32_new/MT32_CONTROL.ROM" +#define MT32_NEW_PCM_ROM "roms/sound/mt32_new/MT32_PCM.ROM" #define CM32L_CTRL_ROM "roms/sound/cm32l/CM32L_CONTROL.ROM" #define CM32L_PCM_ROM "roms/sound/cm32l/CM32L_PCM.ROM" #define CM32LN_CTRL_ROM "roms/sound/cm32ln/CM32LN_CONTROL.ROM" @@ -125,6 +127,14 @@ mt32_old_available() return roms_present[0]; } +int +mt32_new_available() +{ + if (roms_present[0] < 0) + roms_present[0] = (rom_present(MT32_NEW_CTRL_ROM) && rom_present(MT32_NEW_PCM_ROM)); + return roms_present[0]; +} + int cm32l_available() { @@ -317,6 +327,12 @@ mt32_old_init(const device_t *info) return mt32emu_init(MT32_OLD_CTRL_ROM, MT32_OLD_PCM_ROM); } +void * +mt32_new_init(const device_t *info) +{ + return mt32emu_init(MT32_NEW_CTRL_ROM, MT32_NEW_PCM_ROM); +} + void * cm32l_init(const device_t *info) { @@ -418,6 +434,20 @@ const device_t mt32_old_device = { .config = mt32_config }; +const device_t mt32_new_device = { + .name = "Roland MT-32 (New) Emulation", + .internal_name = "mt32", + .flags = 0, + .local = 0, + .init = mt32_new_init, + .close = mt32_close, + .reset = NULL, + { .available = mt32_new_available }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = mt32_config +}; + const device_t cm32l_device = { .name = "Roland CM-32L Emulation", .internal_name = "cm32l",