diff --git a/src/emu/sound/ymz770.c b/src/emu/sound/ymz770.c index fc85adf61bc..67d21156925 100644 --- a/src/emu/sound/ymz770.c +++ b/src/emu/sound/ymz770.c @@ -665,7 +665,7 @@ void amm::handle_block(int &pos) int base_offset = rsize; for(int chan=0; chanset_pointers(&rom_base[pptr], (UINT8 *)&channels[ch].output_data[0]); + channels[ch].decoder->init(); + } + else + { + channels[ch].is_playing = false; + } } - else + + if (channels[ch].is_playing) { channels[ch].last_block = channels[ch].decoder->run(); channels[ch].output_remaining = (channels[ch].decoder->get_rsize()/2)-1; @@ -882,7 +903,7 @@ WRITE8_MEMBER( ymz770_device::write ) channels[voice].is_playing = true; } - else if (!(data & 6) && (channels[voice].is_playing)) + else { channels[voice].is_playing = false; } @@ -906,8 +927,8 @@ WRITE8_MEMBER( ymz770_device::write ) UINT8 sqn = channels[voice].sequence; UINT32 pptr = rom_base[(4*sqn)+1+0x400]<<16 | rom_base[(4*sqn)+2+0x400]<<8 | rom_base[(4*sqn)+3+0x400]; channels[voice].seqdata = &rom_base[pptr]; - channels[voice].is_seq_playing = true; channels[voice].seqdelay = 0; + channels[voice].is_seq_playing = true; } else {