diff options
-rw-r--r-- | include/adlmidi.h | 2 | ||||
-rw-r--r-- | src/adlmidi.cpp | 11 | ||||
-rw-r--r-- | src/adlmidi_opl3.cpp | 14 | ||||
-rw-r--r-- | src/adlmidi_private.hpp | 3 | ||||
-rw-r--r-- | utils/midiplay/adlmidiplay.cpp | 8 |
5 files changed, 27 insertions, 11 deletions
diff --git a/include/adlmidi.h b/include/adlmidi.h index 4dbd476..6786f4a 100644 --- a/include/adlmidi.h +++ b/include/adlmidi.h @@ -135,7 +135,7 @@ extern const char *adl_chipEmulatorName(struct ADL_MIDIPlayer *device); enum ADL_Emulator { ADLMIDI_EMU_NUKED = 0, - ADLMIDI_EMU_NUKED_8, + ADLMIDI_EMU_NUKED_174, ADLMIDI_EMU_DOSBOX, ADLMIDI_EMU_end }; diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp index d26911d..4744903 100644 --- a/src/adlmidi.cpp +++ b/src/adlmidi.cpp @@ -67,7 +67,12 @@ ADLMIDI_EXPORT int adl_setNumChips(ADL_MIDIPlayer *device, int numCards) return -2; MIDIplay *play = reinterpret_cast<MIDIplay *>(device->adl_midiPlayer); +#ifdef ADLMIDI_HW_OPL + (void)numCards; + play->m_setup.NumCards = 1; +#else play->m_setup.NumCards = static_cast<unsigned int>(numCards); +#endif if(play->m_setup.NumCards < 1 || play->m_setup.NumCards > MaxCards) { play->setErrorString("number of chips may only be 1.." MaxCards_STR ".\n"); @@ -108,7 +113,7 @@ ADLMIDI_EXPORT int adl_setBank(ADL_MIDIPlayer *device, int bank) if(static_cast<uint32_t>(bankno) >= NumBanks) { char errBuf[150]; - snprintf(errBuf, 150, "Embedded bank number may only be 0..%u!\n", (NumBanks - 1)); + snprintf(errBuf, 150, "Embedded bank number may only be 0..%" PRIu32 "!\n", (NumBanks - 1)); play->setErrorString(errBuf); return -1; } @@ -319,9 +324,13 @@ ADLMIDI_EXPORT const char *adl_chipEmulatorName(struct ADL_MIDIPlayer *device) { if(device) { + #ifndef ADLMIDI_HW_OPL MIDIplay *play = reinterpret_cast<MIDIplay *>(device->adl_midiPlayer); if(play && !play->opl.cardsOP2.empty()) return play->opl.cardsOP2[0]->emulatorName(); + #else + return "Hardware OPL3 chip on 0x330"; + #endif } return "Unknown"; } diff --git a/src/adlmidi_opl3.cpp b/src/adlmidi_opl3.cpp index 308e380..66254b6 100644 --- a/src/adlmidi_opl3.cpp +++ b/src/adlmidi_opl3.cpp @@ -503,12 +503,14 @@ void OPL3::ChangeVolumeRangesModel(ADLMIDI_VolumeModels volumeModel) } } +#ifndef ADLMIDI_HW_OPL void OPL3::ClearChips() { for(size_t i = 0; i < cardsOP2.size(); i++) cardsOP2[i].reset(NULL); cardsOP2.clear(); } +#endif void OPL3::Reset(int emulator, unsigned long PCM_RATE) { @@ -544,18 +546,19 @@ void OPL3::Reset(int emulator, unsigned long PCM_RATE) }; unsigned fours = NumFourOps; - for(size_t i = 0; i < cardsOP2.size(); ++i) + for(size_t i = 0; i < NumCards; ++i) { +#ifndef ADLMIDI_HW_OPL switch(emulator) { default: #ifndef ADLMIDI_DISABLE_NUKED_EMULATOR - case ADLMIDI_EMU_NUKED: - cardsOP2[i].reset(new NukedOPL3v174()); - break; - case ADLMIDI_EMU_NUKED_8: + case ADLMIDI_EMU_NUKED: /* Latest Nuked OPL3 */ cardsOP2[i].reset(new NukedOPL3()); break; + case ADLMIDI_EMU_NUKED_174: /* Old Nuked OPL3 1.4.7 modified and optimized */ + cardsOP2[i].reset(new NukedOPL3v174()); + break; #endif #ifndef ADLMIDI_DISABLE_DOSBOX_EMULATOR case ADLMIDI_EMU_DOSBOX: @@ -564,6 +567,7 @@ void OPL3::Reset(int emulator, unsigned long PCM_RATE) #endif } cardsOP2[i]->setRate((uint32_t)PCM_RATE); +#endif // ADLMIDI_HW_OPL for(unsigned a = 0; a < 18; ++a) Poke(i, 0xB0 + Channels[a], 0x00); for(unsigned a = 0; a < sizeof(data) / sizeof(*data); a += 2) diff --git a/src/adlmidi_private.hpp b/src/adlmidi_private.hpp index 395b7f7..312f462 100644 --- a/src/adlmidi_private.hpp +++ b/src/adlmidi_private.hpp @@ -87,6 +87,7 @@ typedef int32_t ssize_t; #include <cmath> #include <cstdarg> #include <cstdio> +#include <cinttypes> //PRId32, PRIu32, etc. #include <vector> // vector #include <deque> // deque #include <cmath> // exp, log, ceil @@ -332,7 +333,9 @@ public: void updateFlags(); void updateDeepFlags(); void ChangeVolumeRangesModel(ADLMIDI_VolumeModels volumeModel); + #ifndef ADLMIDI_HW_OPL void ClearChips(); + #endif void Reset(int emulator, unsigned long PCM_RATE); }; diff --git a/utils/midiplay/adlmidiplay.cpp b/utils/midiplay/adlmidiplay.cpp index 3734b13..ed49b76 100644 --- a/utils/midiplay/adlmidiplay.cpp +++ b/utils/midiplay/adlmidiplay.cpp @@ -196,8 +196,8 @@ int main(int argc, char **argv) " -nl Quit without looping\n" " -w Write WAV file rather than playing\n" #ifndef HARDWARE_OPL3 - " --emu-nuked Uses Nuked OPL3 v 1.7.4 emulator\n" - " --emu-nuked8 Uses Nuked OPL3 v 1.8 emulator\n" + " --emu-nuked Uses Nuked OPL3 v 1.8 emulator\n" + " --emu-nuked7 Uses Nuked OPL3 v 1.7.4 emulator\n" " --emu-dosbox Uses DosBox 0.74 OPL3 emulator\n" #endif "\n" @@ -316,8 +316,8 @@ int main(int argc, char **argv) #ifndef HARDWARE_OPL3 else if(!std::strcmp("--emu-nuked", argv[2])) emulator = ADLMIDI_EMU_NUKED; - else if(!std::strcmp("--emu-nuked8", argv[2])) - emulator = ADLMIDI_EMU_NUKED_8; + else if(!std::strcmp("--emu-nuked7", argv[2])) + emulator = ADLMIDI_EMU_NUKED_174; else if(!std::strcmp("--emu-dosbox", argv[2])) emulator = ADLMIDI_EMU_DOSBOX; #endif |