From f9a946905207e8b5e51937513d804e80d1a55c92 Mon Sep 17 00:00:00 2001 From: Vitaly Novichkov Date: Wed, 11 Apr 2018 00:04:11 +0300 Subject: Put Nuked OPL3 1.8 be default and fix the DJGPP build --- src/adlmidi.cpp | 11 ++++++++++- src/adlmidi_opl3.cpp | 14 +++++++++----- src/adlmidi_private.hpp | 3 +++ 3 files changed, 22 insertions(+), 6 deletions(-) (limited to 'src') 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(device->adl_midiPlayer); +#ifdef ADLMIDI_HW_OPL + (void)numCards; + play->m_setup.NumCards = 1; +#else play->m_setup.NumCards = static_cast(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(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(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 7fc7f4e..3e9dcc9 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 4f727e2..f63d04b 100644 --- a/src/adlmidi_private.hpp +++ b/src/adlmidi_private.hpp @@ -87,6 +87,7 @@ typedef int32_t ssize_t; #include #include #include +#include //PRId32, PRIu32, etc. #include // vector #include // deque #include // exp, log, ceil @@ -259,7 +260,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); }; -- cgit v1.2.3