mirror of
https://github.com/mamedev/mame.git
synced 2024-11-16 07:48:32 +01:00
ymfm: Play ADPCM-A samples through the end of the end block inclusive
This commit is contained in:
parent
4728cc9c4d
commit
86d1ef2604
1 changed files with 15 additions and 10 deletions
15
3rdparty/ymfm/src/ymfm_adpcm.cpp
vendored
15
3rdparty/ymfm/src/ymfm_adpcm.cpp
vendored
|
@ -157,20 +157,25 @@ bool adpcm_a_channel::clock()
|
|||
return false;
|
||||
}
|
||||
|
||||
// if we're about to read nibble 0, fetch the data
|
||||
uint8_t data;
|
||||
if (m_curnibble == 0)
|
||||
{
|
||||
// stop when we hit the end address; apparently only low 20 bits are used for
|
||||
// comparison on the YM2610: this affects sample playback in some games, for
|
||||
// example twinspri character select screen music will skip some samples if
|
||||
// this is not correct
|
||||
if (((m_curaddress ^ (m_regs.ch_end(m_choffs) << m_address_shift)) & 0xfffff) == 0)
|
||||
//
|
||||
// note also: end address is inclusive, so wait until we are about to fetch
|
||||
// the sample just after the end before stopping; this is needed for nitd's
|
||||
// jump sound, for example
|
||||
uint32_t end = (m_regs.ch_end(m_choffs) + 1) << m_address_shift;
|
||||
if (((m_curaddress ^ end) & 0xfffff) == 0)
|
||||
{
|
||||
m_playing = m_accumulator = 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
// if we're about to read nibble 0, fetch the data
|
||||
uint8_t data;
|
||||
if (m_curnibble == 0)
|
||||
{
|
||||
m_curbyte = m_owner.intf().ymfm_external_read(ACCESS_ADPCM_A, m_curaddress++);
|
||||
data = m_curbyte >> 4;
|
||||
m_curnibble = 1;
|
||||
|
|
Loading…
Reference in a new issue