Fix GA20 mute

This commit is contained in:
cam900 2023-02-09 10:20:36 +09:00
parent 2343cdecc5
commit ffe5ced7b9
3 changed files with 13 additions and 4 deletions

View file

@ -121,8 +121,12 @@ void DivPlatformGA20::tick(bool sysTick) {
} }
} }
if (chan[i].volumeChanged) { if (chan[i].volumeChanged) {
chan[i].resVol=(chan[i].active && isMuted[i])?0:chan[i].outVol&0xff; if (isMuted[i]) {
chWrite(i,0x5,chan[i].resVol); chWrite(i,0x5,0);
} else {
chan[i].resVol=(isMuted[i])?0:chan[i].outVol&0xff;
chWrite(i,0x5,chan[i].resVol);
}
chan[i].volumeChanged=false; chan[i].volumeChanged=false;
} }
if (chan[i].setPos) { if (chan[i].setPos) {
@ -320,6 +324,7 @@ int DivPlatformGA20::dispatch(DivCommand c) {
void DivPlatformGA20::muteChannel(int ch, bool mute) { void DivPlatformGA20::muteChannel(int ch, bool mute) {
isMuted[ch]=mute; isMuted[ch]=mute;
ga20.set_mute(ch,mute);
chan[ch].volumeChanged=true; chan[ch].volumeChanged=true;
} }

View file

@ -104,7 +104,7 @@ void iremga20_device::sound_stream_update(short** outputs, int len)
ch.play = false; ch.play = false;
else else
{ {
sampleout = (sample - 0x80) * (s32)ch.volume; sampleout = ch.mute ? 0 : (sample - 0x80) * (s32)ch.volume;
ch.counter--; ch.counter--;
if (ch.counter <= ch.rate) if (ch.counter <= ch.rate)
{ {

View file

@ -38,6 +38,8 @@ public:
void write(u32 offset, u8 data); void write(u32 offset, u8 data);
u8 read(u32 offset); u8 read(u32 offset);
inline void set_mute(const int ch, const bool mute) { m_channel[ch & 3].mute = mute; }
// device-level overrides // device-level overrides
void device_reset(); void device_reset();
@ -53,7 +55,8 @@ private:
counter(0), counter(0),
end(0), end(0),
volume(0), volume(0),
play(0) play(0),
mute(false)
{ {
} }
@ -63,6 +66,7 @@ private:
u32 end; u32 end;
u32 volume; u32 volume;
bool play; bool play;
bool mute;
}; };
u8 m_regs[0x20]; u8 m_regs[0x20];