diff options
Diffstat (limited to 'sky')
-rw-r--r-- | sky/music/adlibchannel.cpp | 8 | ||||
-rw-r--r-- | sky/music/adlibchannel.h | 4 | ||||
-rw-r--r-- | sky/music/adlibmusic.cpp | 20 | ||||
-rw-r--r-- | sky/music/adlibmusic.h | 2 |
4 files changed, 23 insertions, 11 deletions
diff --git a/sky/music/adlibchannel.cpp b/sky/music/adlibchannel.cpp index 6a320969d5..7418b05568 100644 --- a/sky/music/adlibchannel.cpp +++ b/sky/music/adlibchannel.cpp @@ -22,8 +22,9 @@ #include "adlibchannel.h" #include "sound/fmopl.h" -SkyAdlibChannel::SkyAdlibChannel(uint8 *pMusicData, uint16 startOfData) +SkyAdlibChannel::SkyAdlibChannel(FM_OPL *opl, uint8 *pMusicData, uint16 startOfData) { + _opl = opl; _musicData = pMusicData; _channelData.startOfData = startOfData; _channelData.eventDataPtr = startOfData; @@ -78,8 +79,9 @@ void SkyAdlibChannel::updateVolume(uint16 pVolume) { void SkyAdlibChannel::setRegister(uint8 regNum, uint8 value) { if (_adlibRegMirror[regNum] != value) { - YM3812Write(0, 0, regNum); - YM3812Write(0, 1, value); +// YM3812Write(0, 0, regNum); +// YM3812Write(0, 1, value); + OPLWriteReg (_opl, regNum, value); _adlibRegMirror[regNum] = value; } } diff --git a/sky/music/adlibchannel.h b/sky/music/adlibchannel.h index 8ca72e8a58..3b27c2305b 100644 --- a/sky/music/adlibchannel.h +++ b/sky/music/adlibchannel.h @@ -26,6 +26,7 @@ #include "common/engine.h" #include "sky/sky.h" #include "sky/music/musicbase.h" +#include "sound/fmopl.h" typedef struct { uint8 ad_Op1, ad_Op2; @@ -60,12 +61,13 @@ typedef struct { class SkyAdlibChannel : public SkyChannelBase { public: - SkyAdlibChannel(uint8 *pMusicData, uint16 startOfData); + SkyAdlibChannel (FM_OPL *opl, uint8 *pMusicData, uint16 startOfData); virtual void stopNote(void); virtual uint8 process(uint16 aktTime); virtual void updateVolume(uint16 pVolume); virtual bool isActive(void); private: + FM_OPL *_opl; uint8 *_musicData; uint16 _musicVolume; AdlibChannelType _channelData; diff --git a/sky/music/adlibmusic.cpp b/sky/music/adlibmusic.cpp index 6922295ef3..444e4cd3e0 100644 --- a/sky/music/adlibmusic.cpp +++ b/sky/music/adlibmusic.cpp @@ -33,15 +33,20 @@ SkyAdlibMusic::SkyAdlibMusic(SoundMixer *pMixer, SkyDisk *pSkyDisk, OSystem *sys _driverFileBase = 60202; _mixer = pMixer; _sampleRate = g_system->property(OSystem::PROP_GET_SAMPLE_RATE, 0); - if (0 != YM3812Init(1, 3579545, _sampleRate)) - error("Error initialising YM3812 sound chip emulation"); +// if (0 != YM3812Init(1, 3579545, _sampleRate)) +// error("Error initialising YM3812 sound chip emulation"); + int env_bits = g_system->property(OSystem::PROP_GET_FMOPL_ENV_BITS, NULL); + int eg_ent = g_system->property(OSystem::PROP_GET_FMOPL_EG_ENT, NULL); + OPLBuildTables((env_bits ? env_bits : FMOPL_ENV_BITS_HQ), (eg_ent ? eg_ent : FMOPL_EG_ENT_HQ)); + _opl = OPLCreate(OPL_TYPE_YM3812, 3579545, g_system->property(OSystem::PROP_GET_SAMPLE_RATE, 0)); + _mixer->setupPremix(this, passMixerFunc); } SkyAdlibMusic::~SkyAdlibMusic(void) { _mixer->setupPremix(NULL, NULL); - YM3812Shutdown(); +// YM3812Shutdown(); } void SkyAdlibMusic::setVolume(uint8 volume) { @@ -70,7 +75,7 @@ void SkyAdlibMusic::premixerCall(int16 *buf, uint len) { render = (len > _nextMusicPoll) ? (_nextMusicPoll) : (len); len -= render; _nextMusicPoll -= render; - YM3812UpdateOne(0, buf, render); + YM3812UpdateOne (_opl, buf, render); buf += render; if (_nextMusicPoll == 0) { pollMusic(); @@ -98,7 +103,7 @@ void SkyAdlibMusic::setupChannels(uint8 *channelData) { channelData++; for (uint8 cnt = 0; cnt < _numberOfChannels; cnt++) { uint16 chDataStart = ((channelData[(cnt << 1) | 1] << 8) | channelData[cnt << 1]) + _musicDataLoc; - _channels[cnt] = new SkyAdlibChannel(_musicData, chDataStart); + _channels[cnt] = new SkyAdlibChannel(_opl, _musicData, chDataStart); _channels[cnt]->updateVolume(_musicVolume | 128); } } @@ -107,8 +112,9 @@ void SkyAdlibMusic::startDriver(void) { uint16 cnt = 0; while (_initSequence[cnt] || _initSequence[cnt+1]) { - YM3812Write(0, 0, _initSequence[cnt]); - YM3812Write(0, 1, _initSequence[cnt+1]); +// YM3812Write(0, 0, _initSequence[cnt]); +// YM3812Write(0, 1, _initSequence[cnt+1]); + OPLWriteReg (_opl, _initSequence[cnt], _initSequence[cnt+1]); cnt += 2; } _allowedCommands = 0xD; diff --git a/sky/music/adlibmusic.h b/sky/music/adlibmusic.h index dd7085b0cd..481977b385 100644 --- a/sky/music/adlibmusic.h +++ b/sky/music/adlibmusic.h @@ -28,6 +28,7 @@ #include "common/engine.h" #include "adlibchannel.h" #include "musicbase.h" +#include "sound/fmopl.h" class SkyAdlibMusic : public SkyMusicBase { public: @@ -35,6 +36,7 @@ public: ~SkyAdlibMusic(void); virtual void setVolume(uint8 volume); private: + FM_OPL *_opl; SoundMixer *_mixer; uint8 *_initSequence; uint32 _sampleRate, _nextMusicPoll; |