summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author angelosa <salese_corp_ltd@email.it>2016-12-25 03:43:03 +0100
committer angelosa <salese_corp_ltd@email.it>2016-12-25 03:43:22 +0100
commit129a91c2929b88a4cdb6a8c6bc89f2fb264992ca (patch)
treec1848063f3faa653b9f1f10f9a40036b7f20d8fc
parentaa4e9a5d85877beda4344266e9fb6dae93d7502b (diff)
srmp2.cpp: fix regression with ADPCM playback on m68k based games [Angelo Salese]
-rw-r--r--src/mame/drivers/srmp2.cpp33
-rw-r--r--src/mame/includes/srmp2.h3
2 files changed, 7 insertions, 29 deletions
diff --git a/src/mame/drivers/srmp2.cpp b/src/mame/drivers/srmp2.cpp
index dc6e15cada5..9c3a8b88ac7 100644
--- a/src/mame/drivers/srmp2.cpp
+++ b/src/mame/drivers/srmp2.cpp
@@ -196,30 +196,7 @@ WRITE16_MEMBER(srmp2_state::mjyuugi_adpcm_bank_w)
}
-WRITE16_MEMBER(srmp2_state::srmp2_adpcm_code_w)
-{
-/*
- - Received data may be playing ADPCM number.
- - 0x000000 - 0x0000ff and 0x010000 - 0x0100ff are offset table.
- - When the hardware receives the ADPCM number, it refers the offset
- table and plays the ADPCM for itself.
-*/
-
- uint8_t *ROM = memregion("adpcm")->base();
-
- m_adpcm_sptr = (ROM[((m_adpcm_bank * 0x10000) + (data << 2) + 0)] << 8);
- m_adpcm_eptr = (ROM[((m_adpcm_bank * 0x10000) + (data << 2) + 1)] << 8);
- m_adpcm_eptr = (m_adpcm_eptr - 1) & 0x0ffff;
-
- m_adpcm_sptr += (m_adpcm_bank * 0x10000);
- m_adpcm_eptr += (m_adpcm_bank * 0x10000);
-
- m_msm->reset_w(0);
- m_adpcm_data = -1;
-}
-
-
-WRITE8_MEMBER(srmp2_state::srmp3_adpcm_code_w)
+WRITE8_MEMBER(srmp2_state::adpcm_code_w)
{
/*
- Received data may be playing ADPCM number.
@@ -237,6 +214,8 @@ WRITE8_MEMBER(srmp2_state::srmp3_adpcm_code_w)
m_adpcm_sptr += (m_adpcm_bank * 0x10000);
m_adpcm_eptr += (m_adpcm_bank * 0x10000);
+ //printf("%02x %08x %08x %08x\n",data,m_adpcm_sptr,m_adpcm_eptr,((m_adpcm_bank * 0x10000) + (data << 2) + 0));
+
m_msm->reset_w(0);
m_adpcm_data = -1;
}
@@ -419,7 +398,7 @@ static ADDRESS_MAP_START( srmp2_map, AS_PROGRAM, 16, srmp2_state )
AM_RANGE(0x900000, 0x900001) AM_WRITENOP /* ??? */
AM_RANGE(0xa00000, 0xa00001) AM_READWRITE8(iox_mux_r, iox_command_w,0x00ff) /* key matrix | I/O */
AM_RANGE(0xa00002, 0xa00003) AM_READWRITE8(iox_status_r,iox_data_w,0x00ff)
- AM_RANGE(0xb00000, 0xb00001) AM_WRITE(srmp2_adpcm_code_w) /* ADPCM number */
+ AM_RANGE(0xb00000, 0xb00001) AM_WRITE8(adpcm_code_w,0x00ff) /* ADPCM number */
AM_RANGE(0xb00002, 0xb00003) AM_READ8(vox_status_r,0x00ff) /* ADPCM voice status */
AM_RANGE(0xc00000, 0xc00001) AM_WRITE8(srmp2_irq2_ack_w,0x00ff) /* irq ack lv 2 */
AM_RANGE(0xd00000, 0xd00001) AM_WRITE8(srmp2_irq4_ack_w,0x00ff) /* irq ack lv 4 */
@@ -454,7 +433,7 @@ static ADDRESS_MAP_START( mjyuugi_map, AS_PROGRAM, 16, srmp2_state )
AM_RANGE(0x800000, 0x800001) AM_READNOP /* ??? */
AM_RANGE(0x900000, 0x900001) AM_READWRITE8(iox_mux_r, iox_command_w,0x00ff) /* key matrix | I/O */
AM_RANGE(0x900002, 0x900003) AM_READWRITE8(iox_status_r,iox_data_w,0x00ff)
- AM_RANGE(0xa00000, 0xa00001) AM_WRITE(srmp2_adpcm_code_w) /* ADPCM number */
+ AM_RANGE(0xa00000, 0xa00001) AM_WRITE8(adpcm_code_w,0x00ff) /* ADPCM number */
AM_RANGE(0xb00002, 0xb00003) AM_READ8(vox_status_r,0x00ff) /* ADPCM voice status */
AM_RANGE(0xb00000, 0xb00001) AM_DEVREAD8("aysnd", ay8910_device, data_r, 0x00ff)
AM_RANGE(0xb00000, 0xb00003) AM_DEVWRITE8("aysnd", ay8910_device, address_data_w, 0x00ff)
@@ -503,7 +482,7 @@ static ADDRESS_MAP_START( srmp3_io_map, AS_IO, 8, srmp2_state )
AM_RANGE(0x20, 0x20) AM_WRITE(srmp3_irq_ack_w) /* interrupt acknowledge */
AM_RANGE(0x40, 0x40) AM_READ_PORT("SYSTEM") AM_WRITE(srmp3_flags_w) /* coin, service | GFX bank, counter, lockout */
AM_RANGE(0x60, 0x60) AM_WRITE(srmp3_rombank_w) /* ROM bank select */
- AM_RANGE(0xa0, 0xa0) AM_WRITE(srmp3_adpcm_code_w) /* ADPCM number */
+ AM_RANGE(0xa0, 0xa0) AM_WRITE(adpcm_code_w) /* ADPCM number */
AM_RANGE(0xa1, 0xa1) AM_READ(vox_status_r) /* ADPCM voice status */
AM_RANGE(0xc0, 0xc0) AM_READWRITE(iox_mux_r, iox_command_w) /* key matrix | I/O */
AM_RANGE(0xc1, 0xc1) AM_READWRITE(iox_status_r,iox_data_w)
diff --git a/src/mame/includes/srmp2.h b/src/mame/includes/srmp2.h
index f05170a6c39..54b4c814890 100644
--- a/src/mame/includes/srmp2.h
+++ b/src/mame/includes/srmp2.h
@@ -53,13 +53,12 @@ public:
DECLARE_WRITE8_MEMBER(srmp2_irq2_ack_w);
DECLARE_WRITE8_MEMBER(srmp2_irq4_ack_w);
DECLARE_WRITE16_MEMBER(srmp2_flags_w);
- DECLARE_WRITE16_MEMBER(srmp2_adpcm_code_w);
+ DECLARE_WRITE8_MEMBER(adpcm_code_w);
// srmp3
DECLARE_WRITE8_MEMBER(srmp3_rombank_w);
DECLARE_WRITE8_MEMBER(srmp3_flags_w);
DECLARE_WRITE8_MEMBER(srmp3_irq_ack_w);
- DECLARE_WRITE8_MEMBER(srmp3_adpcm_code_w);
virtual void machine_start() override;
DECLARE_MACHINE_START(srmp2);