From 6b10d9bad7ebf655f73a3a3fb49984d4be539b33 Mon Sep 17 00:00:00 2001 From: cam900 Date: Fri, 26 Jan 2018 10:51:48 +0900 Subject: vgmplay : Dual OKIM6295s, NMK112 banking support (#3114) * vgmplay : Implement NMK112, Dual OKIM6295 Chip Support * oops * typo --- src/mame/drivers/vgmplay.cpp | 284 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 229 insertions(+), 55 deletions(-) diff --git a/src/mame/drivers/vgmplay.cpp b/src/mame/drivers/vgmplay.cpp index 7ecdf4d31eb..47d62edbb17 100644 --- a/src/mame/drivers/vgmplay.cpp +++ b/src/mame/drivers/vgmplay.cpp @@ -68,7 +68,8 @@ public: A_SN76496 = 0x000000a0, A_K053260 = 0x000000b0, A_C6280 = 0x000000e0, - A_OKIM6295 = 0x000000f0, + A_OKIM6295A = 0x000000f0, + A_OKIM6295B = 0x00000110, A_SEGAPCM = 0x00001000, A_GAMEBOY = 0x00002000, A_NESAPU = 0x00002030, @@ -115,9 +116,10 @@ public: READ8_MEMBER(multipcma_rom_r); READ8_MEMBER(multipcmb_rom_r); READ8_MEMBER(k053260_rom_r); + READ8_MEMBER(okim6295a_rom_r); + READ8_MEMBER(okim6295b_rom_r); READ8_MEMBER(k054539a_rom_r); READ8_MEMBER(k054539b_rom_r); - READ8_MEMBER(okim6295_rom_r); READ8_MEMBER(c352_rom_r); READ8_MEMBER(qsound_rom_r); @@ -125,6 +127,16 @@ public: DECLARE_WRITE8_MEMBER(multipcm_bank_hi_a_w); DECLARE_WRITE8_MEMBER(multipcm_bank_lo_b_w); DECLARE_WRITE8_MEMBER(multipcm_bank_hi_b_w); + DECLARE_WRITE8_MEMBER(okim6295_clock_a_w); + DECLARE_WRITE8_MEMBER(okim6295_pin7_a_w); + DECLARE_WRITE8_MEMBER(okim6295_nmk112_enable_a_w); + DECLARE_WRITE8_MEMBER(okim6295_bank_a_w); + DECLARE_WRITE8_MEMBER(okim6295_nmk112_bank_a_w); + DECLARE_WRITE8_MEMBER(okim6295_clock_b_w); + DECLARE_WRITE8_MEMBER(okim6295_pin7_b_w); + DECLARE_WRITE8_MEMBER(okim6295_nmk112_enable_b_w); + DECLARE_WRITE8_MEMBER(okim6295_bank_b_w); + DECLARE_WRITE8_MEMBER(okim6295_nmk112_bank_b_w); private: struct rom_block { @@ -158,6 +170,16 @@ private: uint32_t m_multipcmb_bank_l; uint32_t m_multipcmb_bank_r; uint32_t m_multipcmb_banked; + uint32_t m_okim6295a_clock; + uint32_t m_okim6295a_pin7; + uint32_t m_okim6295a_nmk112_enable; + uint32_t m_okim6295a_bank; + uint32_t m_okim6295a_nmk112_bank[4]; + uint32_t m_okim6295b_clock; + uint32_t m_okim6295b_pin7; + uint32_t m_okim6295b_nmk112_enable; + uint32_t m_okim6295b_bank; + uint32_t m_okim6295b_nmk112_bank[4]; uint8_t rom_r(int chip, uint8_t type, offs_t offset); uint32_t handle_data_block(uint32_t address); @@ -204,7 +226,8 @@ private: required_device m_pokeya; required_device m_pokeyb; required_device m_c352; - required_device m_okim6295; + required_device m_okim6295a; + required_device m_okim6295b; required_device m_ymf271; required_device m_ymz280b; required_device m_ym2608; @@ -494,9 +517,15 @@ void vgmplay_device::execute_run() } case 0xb8: - m_io->write_byte(A_OKIM6295 + m_file->read_byte(m_pc+1), m_file->read_byte(m_pc+2)); + { + uint8_t offset = m_file->read_byte(m_pc+1); + if (offset & 0x80) + m_io->write_byte(A_OKIM6295B + (offset & 0x7f), m_file->read_byte(m_pc+2)); + else + m_io->write_byte(A_OKIM6295A + (offset & 0x7f), m_file->read_byte(m_pc+2)); m_pc += 3; break; + } case 0xb9: m_io->write_byte(A_C6280 + m_file->read_byte(m_pc+1), m_file->read_byte(m_pc+2)); @@ -1012,11 +1041,46 @@ READ8_MEMBER(vgmplay_device::multipcmb_rom_r) return rom_r(1, 0x89, offset); } -READ8_MEMBER(vgmplay_device::okim6295_rom_r) +READ8_MEMBER(vgmplay_device::okim6295a_rom_r) { + if (m_okim6295a_nmk112_enable) + { + if (offset < 0x400) && (m_okim6295a_nmk112_enable & 0x80) + { + offset = (m_okim6295a_nmk112_bank[(offset >> 8) & 0x3] << 16) | (offset & 0xff); + } + else + { + offset = (m_okim6295a_nmk112_bank[(offset >> 16) & 0x3] << 16) | (offset & 0xffff); + } + } + else + { + offset = (m_okim6295a_bank * 0x40000) | offset; + } return rom_r(0, 0x8b, offset); } +READ8_MEMBER(vgmplay_device::okim6295b_rom_r) +{ + if (m_okim6295b_nmk112_enable) + { + if (offset < 0x400) && (m_okim6295b_nmk112_enable & 0x80) + { + offset = (m_okim6295b_nmk112_bank[(offset >> 8) & 0x3] << 16) | (offset & 0x3ff); + } + else + { + offset = (m_okim6295b_nmk112_bank[(offset >> 16) & 0x3] << 16) | (offset & 0xffff); + } + } + else + { + offset = (m_okim6295b_bank * 0x40000) | offset; + } + return rom_r(1, 0x8b, offset); +} + READ8_MEMBER(vgmplay_device::k054539a_rom_r) { return rom_r(0, 0x8c, offset); @@ -1069,7 +1133,8 @@ vgmplay_state::vgmplay_state(const machine_config &mconfig, device_type type, co , m_pokeya(*this, "pokeya") , m_pokeyb(*this, "pokeyb") , m_c352(*this, "c352") - , m_okim6295(*this, "okim6295") + , m_okim6295a(*this, "okim6295a") + , m_okim6295b(*this, "okim6295b") , m_ymf271(*this, "ymf271") , m_ymz280b(*this, "ymz280b") , m_ym2608(*this, "ym2608") @@ -1276,14 +1341,21 @@ void vgmplay_state::machine_start() m_k054539b->init_flags(r8(0x95)); } if(version >= 0x161 && r32(0x98)) { - uint32_t clock = r32(0x98); - uint32_t pin7 = 0; - if (clock & 0x80000000) { - clock &= ~0x80000000; - pin7 = 1; + m_okim6295a_clock = r32(0x98); + m_okim6295a_pin7 = 0; + if (m_okim6295a_clock & 0x80000000) { + m_okim6295a_clock &= ~0x80000000; + m_okim6295a_pin7 = 1; + } + okim6295_device::static_set_pin7(*m_okim6295a, m_okim6295a_pin7); + m_okim6295a->set_unscaled_clock(m_okim6295a_clock & ~0xc0000000); + if (m_okim6295a_clock & 0x40000000) { + m_okim6295a_clock &= ~0x40000000; + m_okim6295b_clock = m_okim6295a_clock; + m_okim6295b_pin7 = m_okim6295a_pin7; + okim6295_device::static_set_pin7(*m_okim6295b, m_okim6295b_pin7); + m_okim6295b->set_unscaled_clock(m_okim6295b_clock); } - okim6295_device::static_set_pin7(*m_okim6295, pin7); - m_okim6295->set_unscaled_clock(clock); } if(version >= 0x161 && r32(0xa0)) { uint32_t clock = r32(0xa0); @@ -1373,6 +1445,88 @@ WRITE8_MEMBER(vgmplay_device::multipcm_bank_lo_b_w) m_multipcmb_banked = 1; } +WRITE8_MEMBER(vgmplay_device::okim6295_clock_a_w) +{ + uint32_t old = m_okim6295a_clock; + int shift = ((offset & 3) << 3); + m_okim6295a_clock = (m_okim6295a_clock & ~(mem_mask << shift)) | ((data & mem_mask) << shift); + if (old != m_okim6295a_clock) + m_okim6295a->set_unscaled_clock(m_okim6295a_clock); + +} + +WRITE8_MEMBER(vgmplay_device::okim6295_pin7_a_w) +{ + if ((data & mem_mask) != (m_okim6295a_pin7 & mem_mask)) + { + COMBINE_DATA(&m_okim6295a_pin7); + okim6295_device::static_set_pin7(*m_okim6295a, m_okim6295a_pin7); + } +} + +WRITE8_MEMBER(vgmplay_device::okim6295_nmk112_enable_a_w) +{ + COMBINE_DATA(&m_okim6295a_nmk112_enable); +} + +WRITE8_MEMBER(vgmplay_device::okim6295_bank_a_w) +{ + if ((data & mem_mask) != (m_okim6295a_bank & mem_mask)) + { + COMBINE_DATA(&m_okim6295a_bank); + } +} + +WRITE8_MEMBER(vgmplay_device::okim6295_nmk112_bank_a_w) +{ + offset &= 3; + if ((data & mem_mask) != (m_okim6295a_nmk112_bank[offset] & mem_mask)) + { + COMBINE_DATA(&m_okim6295a_nmk112_bank[offset]); + } +} + +WRITE8_MEMBER(vgmplay_device::okim6295_clock_b_w) +{ + uint32_t old = m_okim6295b_clock; + int shift = ((offset & 3) << 3); + m_okim6295b_clock = (m_okim6295b_clock & ~(mem_mask << shift)) | ((data & mem_mask) << shift); + if (old != m_okim6295b_clock) + m_okim6295b->set_unscaled_clock(m_okim6295b_clock); + +} + +WRITE8_MEMBER(vgmplay_device::okim6295_pin7_b_w) +{ + if ((data & mem_mask) != (m_okim6295b_pin7 & mem_mask)) + { + COMBINE_DATA(&m_okim6295b_pin7); + okim6295_device::static_set_pin7(*m_okim6295b, m_okim6295b_pin7); + } +} + +WRITE8_MEMBER(vgmplay_device::okim6295_nmk112_enable_b_w) +{ + COMBINE_DATA(&m_okim6295b_nmk112_enable); +} + +WRITE8_MEMBER(vgmplay_device::okim6295_bank_b_w) +{ + if ((data & mem_mask) != (m_okim6295b_bank & mem_mask)) + { + COMBINE_DATA(&m_okim6295b_bank); + } +} + +WRITE8_MEMBER(vgmplay_device::okim6295_nmk112_bank_b_w) +{ + offset &= 3; + if ((data & mem_mask) != (m_okim6295b_nmk112_bank[offset] & mem_mask)) + { + COMBINE_DATA(&m_okim6295b_nmk112_bank[offset]); + } +} + static INPUT_PORTS_START( vgmplay ) INPUT_PORTS_END @@ -1385,42 +1539,53 @@ static ADDRESS_MAP_START( soundchips16_map, AS_IO16, 16, vgmplay_state ) ADDRESS_MAP_END static ADDRESS_MAP_START( soundchips_map, AS_IO, 8, vgmplay_state ) - AM_RANGE(vgmplay_device::REG_SIZE, vgmplay_device::REG_SIZE+3) AM_READ(file_size_r) - AM_RANGE(vgmplay_device::A_YM2612, vgmplay_device::A_YM2612+3) AM_DEVWRITE ("ym2612", ym2612_device, write) - AM_RANGE(vgmplay_device::A_YM2151, vgmplay_device::A_YM2151+1) AM_DEVWRITE ("ym2151", ym2151_device, write) - AM_RANGE(vgmplay_device::A_YM2413, vgmplay_device::A_YM2413+1) AM_DEVWRITE ("ym2413", ym2413_device, write) - AM_RANGE(vgmplay_device::A_YM2203A, vgmplay_device::A_YM2203A+1) AM_DEVWRITE ("ym2203a", ym2203_device, write) - AM_RANGE(vgmplay_device::A_YM2203B, vgmplay_device::A_YM2203B+1) AM_DEVWRITE ("ym2203b", ym2203_device, write) - AM_RANGE(vgmplay_device::A_YM3526, vgmplay_device::A_YM3526+1) AM_DEVWRITE ("ym3526", ym3526_device, write) - AM_RANGE(vgmplay_device::A_YM3812, vgmplay_device::A_YM3812+1) AM_DEVWRITE ("ym3812", ym3812_device, write) - AM_RANGE(vgmplay_device::A_AY8910A, vgmplay_device::A_AY8910A) AM_DEVWRITE ("ay8910a", ay8910_device, data_w) - AM_RANGE(vgmplay_device::A_AY8910A+1, vgmplay_device::A_AY8910A+1) AM_DEVWRITE ("ay8910a", ay8910_device, address_w) - AM_RANGE(vgmplay_device::A_AY8910B, vgmplay_device::A_AY8910B) AM_DEVWRITE ("ay8910b", ay8910_device, data_w) - AM_RANGE(vgmplay_device::A_AY8910B+1, vgmplay_device::A_AY8910B+1) AM_DEVWRITE ("ay8910b", ay8910_device, address_w) -// AM_RANGE(vgmplay_device::A_SN76496+0, vgmplay_device::A_SN76496+0) AM_DEVWRITE ("sn76496", sn76496_device, stereo_w) - AM_RANGE(vgmplay_device::A_SN76496+1, vgmplay_device::A_SN76496+1) AM_DEVWRITE ("sn76496", sn76496_device, write) - AM_RANGE(vgmplay_device::A_K053260, vgmplay_device::A_K053260+0x2f) AM_DEVWRITE ("k053260", k053260_device, write) - AM_RANGE(vgmplay_device::A_C6280, vgmplay_device::A_C6280+0xf) AM_DEVWRITE ("c6280", c6280_device, c6280_w) - AM_RANGE(vgmplay_device::A_OKIM6295, vgmplay_device::A_OKIM6295) AM_DEVWRITE ("okim6295", okim6295_device, write) - AM_RANGE(vgmplay_device::A_SEGAPCM, vgmplay_device::A_SEGAPCM+0x7ff) AM_DEVWRITE ("segapcm", segapcm_device, sega_pcm_w) - AM_RANGE(vgmplay_device::A_GAMEBOY, vgmplay_device::A_GAMEBOY+0x16) AM_DEVWRITE ("dmg", gameboy_sound_device, sound_w) - AM_RANGE(vgmplay_device::A_GAMEBOY+0x20, vgmplay_device::A_GAMEBOY+0x2f) AM_DEVWRITE ("dmg", gameboy_sound_device, wave_w) - AM_RANGE(vgmplay_device::A_NESAPU, vgmplay_device::A_NESAPU+0x1f) AM_DEVWRITE ("nescpu:nesapu", nesapu_device, write) - AM_RANGE(vgmplay_device::A_NESRAM, vgmplay_device::A_NESRAM+0xffff) AM_RAM AM_SHARE("nesapu_ram") - AM_RANGE(vgmplay_device::A_MULTIPCMA, vgmplay_device::A_MULTIPCMA+3) AM_DEVWRITE ("multipcma", multipcm_device, write ) - AM_RANGE(vgmplay_device::A_MULTIPCMA+4, vgmplay_device::A_MULTIPCMA+7) AM_DEVWRITE ("vgmplay", vgmplay_device, multipcm_bank_hi_a_w) - AM_RANGE(vgmplay_device::A_MULTIPCMA+8, vgmplay_device::A_MULTIPCMA+11) AM_DEVWRITE ("vgmplay", vgmplay_device, multipcm_bank_lo_a_w) - AM_RANGE(vgmplay_device::A_MULTIPCMB, vgmplay_device::A_MULTIPCMB+3) AM_DEVWRITE ("multipcmb", multipcm_device, write ) - AM_RANGE(vgmplay_device::A_MULTIPCMB+4, vgmplay_device::A_MULTIPCMB+7) AM_DEVWRITE ("vgmplay", vgmplay_device, multipcm_bank_hi_b_w) - AM_RANGE(vgmplay_device::A_MULTIPCMB+8, vgmplay_device::A_MULTIPCMB+11) AM_DEVWRITE ("vgmplay", vgmplay_device, multipcm_bank_lo_b_w) - AM_RANGE(vgmplay_device::A_POKEYA, vgmplay_device::A_POKEYA+0xf) AM_DEVWRITE ("pokeya", pokey_device, write) - AM_RANGE(vgmplay_device::A_POKEYB, vgmplay_device::A_POKEYB+0xf) AM_DEVWRITE ("pokeyb", pokey_device, write) - AM_RANGE(vgmplay_device::A_YMF271, vgmplay_device::A_YMF271+0xf) AM_DEVWRITE ("ymf271", ymf271_device, write) - AM_RANGE(vgmplay_device::A_YMZ280B, vgmplay_device::A_YMZ280B+0x1) AM_DEVWRITE ("ymz280b", ymz280b_device, write) - AM_RANGE(vgmplay_device::A_YM2608, vgmplay_device::A_YM2608+0x3) AM_DEVWRITE ("ym2608", ym2608_device, write) - AM_RANGE(vgmplay_device::A_K054539A, vgmplay_device::A_K054539A+0x22f) AM_DEVWRITE ("k054539a", k054539_device, write) - AM_RANGE(vgmplay_device::A_K054539B, vgmplay_device::A_K054539B+0x22f) AM_DEVWRITE ("k054539b", k054539_device, write) - AM_RANGE(vgmplay_device::A_QSOUND, vgmplay_device::A_QSOUND+0x2) AM_DEVWRITE ("qsound", qsound_device, qsound_w) + AM_RANGE(vgmplay_device::REG_SIZE, vgmplay_device::REG_SIZE+3) AM_READ(file_size_r) + AM_RANGE(vgmplay_device::A_YM2612, vgmplay_device::A_YM2612+3) AM_DEVWRITE ("ym2612", ym2612_device, write) + AM_RANGE(vgmplay_device::A_YM2151, vgmplay_device::A_YM2151+1) AM_DEVWRITE ("ym2151", ym2151_device, write) + AM_RANGE(vgmplay_device::A_YM2413, vgmplay_device::A_YM2413+1) AM_DEVWRITE ("ym2413", ym2413_device, write) + AM_RANGE(vgmplay_device::A_YM2203A, vgmplay_device::A_YM2203A+1) AM_DEVWRITE ("ym2203a", ym2203_device, write) + AM_RANGE(vgmplay_device::A_YM2203B, vgmplay_device::A_YM2203B+1) AM_DEVWRITE ("ym2203b", ym2203_device, write) + AM_RANGE(vgmplay_device::A_YM3526, vgmplay_device::A_YM3526+1) AM_DEVWRITE ("ym3526", ym3526_device, write) + AM_RANGE(vgmplay_device::A_YM3812, vgmplay_device::A_YM3812+1) AM_DEVWRITE ("ym3812", ym3812_device, write) + AM_RANGE(vgmplay_device::A_AY8910A, vgmplay_device::A_AY8910A) AM_DEVWRITE ("ay8910a", ay8910_device, data_w) + AM_RANGE(vgmplay_device::A_AY8910A+1, vgmplay_device::A_AY8910A+1) AM_DEVWRITE ("ay8910a", ay8910_device, address_w) + AM_RANGE(vgmplay_device::A_AY8910B, vgmplay_device::A_AY8910B) AM_DEVWRITE ("ay8910b", ay8910_device, data_w) + AM_RANGE(vgmplay_device::A_AY8910B+1, vgmplay_device::A_AY8910B+1) AM_DEVWRITE ("ay8910b", ay8910_device, address_w) +// AM_RANGE(vgmplay_device::A_SN76496+0, vgmplay_device::A_SN76496+0) AM_DEVWRITE ("sn76496", sn76496_device, stereo_w) + AM_RANGE(vgmplay_device::A_SN76496+1, vgmplay_device::A_SN76496+1) AM_DEVWRITE ("sn76496", sn76496_device, write) + AM_RANGE(vgmplay_device::A_K053260, vgmplay_device::A_K053260+0x2f) AM_DEVWRITE ("k053260", k053260_device, write) + AM_RANGE(vgmplay_device::A_C6280, vgmplay_device::A_C6280+0xf) AM_DEVWRITE ("c6280", c6280_device, c6280_w) + AM_RANGE(vgmplay_device::A_OKIM6295A, vgmplay_device::A_OKIM6295A) AM_DEVWRITE ("okim6295a", okim6295_device, write) + AM_RANGE(vgmplay_device::A_OKIM6295A+0x8, vgmplay_device::A_OKIM6295A+0xb) AM_DEVWRITE ("vgmplay", vgmplay_device, okim6295_clock_a_w) + AM_RANGE(vgmplay_device::A_OKIM6295A+0xc, vgmplay_device::A_OKIM6295A+0xc) AM_DEVWRITE ("vgmplay", vgmplay_device, okim6295_pin7_a_w) + AM_RANGE(vgmplay_device::A_OKIM6295A+0xe, vgmplay_device::A_OKIM6295A+0xe) AM_DEVWRITE ("vgmplay", vgmplay_device, okim6295_nmk112_enable_a_w) + AM_RANGE(vgmplay_device::A_OKIM6295A+0xf, vgmplay_device::A_OKIM6295A+0xf) AM_DEVWRITE ("vgmplay", vgmplay_device, okim6295_bank_a_w) + AM_RANGE(vgmplay_device::A_OKIM6295A+0x10, vgmplay_device::A_OKIM6295A+0x13) AM_DEVWRITE ("vgmplay", vgmplay_device, okim6295_nmk112_bank_a_w) + AM_RANGE(vgmplay_device::A_OKIM6295B, vgmplay_device::A_OKIM6295B) AM_DEVWRITE ("okim6295b", okim6295_device, write) + AM_RANGE(vgmplay_device::A_OKIM6295B+0x8, vgmplay_device::A_OKIM6295B+0xb) AM_DEVWRITE ("vgmplay", vgmplay_device, okim6295_clock_b_w) + AM_RANGE(vgmplay_device::A_OKIM6295B+0xc, vgmplay_device::A_OKIM6295B+0xc) AM_DEVWRITE ("vgmplay", vgmplay_device, okim6295_pin7_b_w) + AM_RANGE(vgmplay_device::A_OKIM6295B+0xe, vgmplay_device::A_OKIM6295B+0xe) AM_DEVWRITE ("vgmplay", vgmplay_device, okim6295_nmk112_enable_b_w) + AM_RANGE(vgmplay_device::A_OKIM6295B+0xf, vgmplay_device::A_OKIM6295B+0xf) AM_DEVWRITE ("vgmplay", vgmplay_device, okim6295_bank_b_w) + AM_RANGE(vgmplay_device::A_OKIM6295B+0x10, vgmplay_device::A_OKIM6295B+0x13) AM_DEVWRITE ("vgmplay", vgmplay_device, okim6295_nmk112_bank_b_w) + AM_RANGE(vgmplay_device::A_SEGAPCM, vgmplay_device::A_SEGAPCM+0x7ff) AM_DEVWRITE ("segapcm", segapcm_device, sega_pcm_w) + AM_RANGE(vgmplay_device::A_GAMEBOY, vgmplay_device::A_GAMEBOY+0x16) AM_DEVWRITE ("dmg", gameboy_sound_device, sound_w) + AM_RANGE(vgmplay_device::A_GAMEBOY+0x20, vgmplay_device::A_GAMEBOY+0x2f) AM_DEVWRITE ("dmg", gameboy_sound_device, wave_w) + AM_RANGE(vgmplay_device::A_NESAPU, vgmplay_device::A_NESAPU+0x1f) AM_DEVWRITE ("nescpu:nesapu", nesapu_device, write) + AM_RANGE(vgmplay_device::A_NESRAM, vgmplay_device::A_NESRAM+0xffff) AM_RAM AM_SHARE("nesapu_ram") + AM_RANGE(vgmplay_device::A_MULTIPCMA, vgmplay_device::A_MULTIPCMA+3) AM_DEVWRITE ("multipcma", multipcm_device, write ) + AM_RANGE(vgmplay_device::A_MULTIPCMA+4, vgmplay_device::A_MULTIPCMA+7) AM_DEVWRITE ("vgmplay", vgmplay_device, multipcm_bank_hi_a_w) + AM_RANGE(vgmplay_device::A_MULTIPCMA+8, vgmplay_device::A_MULTIPCMA+11) AM_DEVWRITE ("vgmplay", vgmplay_device, multipcm_bank_lo_a_w) + AM_RANGE(vgmplay_device::A_MULTIPCMB, vgmplay_device::A_MULTIPCMB+3) AM_DEVWRITE ("multipcmb", multipcm_device, write ) + AM_RANGE(vgmplay_device::A_MULTIPCMB+4, vgmplay_device::A_MULTIPCMB+7) AM_DEVWRITE ("vgmplay", vgmplay_device, multipcm_bank_hi_b_w) + AM_RANGE(vgmplay_device::A_MULTIPCMB+8, vgmplay_device::A_MULTIPCMB+11) AM_DEVWRITE ("vgmplay", vgmplay_device, multipcm_bank_lo_b_w) + AM_RANGE(vgmplay_device::A_POKEYA, vgmplay_device::A_POKEYA+0xf) AM_DEVWRITE ("pokeya", pokey_device, write) + AM_RANGE(vgmplay_device::A_POKEYB, vgmplay_device::A_POKEYB+0xf) AM_DEVWRITE ("pokeyb", pokey_device, write) + AM_RANGE(vgmplay_device::A_YMF271, vgmplay_device::A_YMF271+0xf) AM_DEVWRITE ("ymf271", ymf271_device, write) + AM_RANGE(vgmplay_device::A_YMZ280B, vgmplay_device::A_YMZ280B+0x1) AM_DEVWRITE ("ymz280b", ymz280b_device, write) + AM_RANGE(vgmplay_device::A_YM2608, vgmplay_device::A_YM2608+0x3) AM_DEVWRITE ("ym2608", ym2608_device, write) + AM_RANGE(vgmplay_device::A_K054539A, vgmplay_device::A_K054539A+0x22f) AM_DEVWRITE ("k054539a", k054539_device, write) + AM_RANGE(vgmplay_device::A_K054539B, vgmplay_device::A_K054539B+0x22f) AM_DEVWRITE ("k054539b", k054539_device, write) + AM_RANGE(vgmplay_device::A_QSOUND, vgmplay_device::A_QSOUND+0x2) AM_DEVWRITE ("qsound", qsound_device, qsound_w) ADDRESS_MAP_END static ADDRESS_MAP_START( segapcm_map, 0, 8, vgmplay_state ) @@ -1439,6 +1604,14 @@ static ADDRESS_MAP_START( k053260_map, 0, 8, vgmplay_state ) AM_RANGE(0, 0x1fffff) AM_DEVREAD("vgmplay", vgmplay_device, k053260_rom_r) ADDRESS_MAP_END +static ADDRESS_MAP_START( okim6295a_map, 0, 8, vgmplay_state ) + AM_RANGE(0, 0x3ffff) AM_DEVREAD("vgmplay", vgmplay_device, okim6295a_rom_r) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( okim6295b_map, 0, 8, vgmplay_state ) + AM_RANGE(0, 0x3ffff) AM_DEVREAD("vgmplay", vgmplay_device, okim6295b_rom_r) +ADDRESS_MAP_END + static ADDRESS_MAP_START( k054539a_map, 0, 8, vgmplay_state ) AM_RANGE(0, 0xffffff) AM_DEVREAD("vgmplay", vgmplay_device, k054539a_rom_r) ADDRESS_MAP_END @@ -1447,10 +1620,6 @@ static ADDRESS_MAP_START( k054539b_map, 0, 8, vgmplay_state ) AM_RANGE(0, 0xffffff) AM_DEVREAD("vgmplay", vgmplay_device, k054539b_rom_r) ADDRESS_MAP_END -static ADDRESS_MAP_START( okim6295_map, 0, 8, vgmplay_state ) - AM_RANGE(0, 0x3ffff) AM_DEVREAD("vgmplay", vgmplay_device, okim6295_rom_r) -ADDRESS_MAP_END - static ADDRESS_MAP_START( c352_map, 0, 8, vgmplay_state ) AM_RANGE(0, 0xffffff) AM_DEVREAD("vgmplay", vgmplay_device, c352_rom_r) ADDRESS_MAP_END @@ -1578,9 +1747,14 @@ MACHINE_CONFIG_START(vgmplay_state::vgmplay) MCFG_DEVICE_ADDRESS_MAP(0, c352_map) MCFG_SOUND_ROUTE(0, "lspeaker", 1) MCFG_SOUND_ROUTE(1, "rspeaker", 1) + + MCFG_OKIM6295_ADD("okim6295a", 1000000, PIN7_HIGH) + MCFG_DEVICE_ADDRESS_MAP(0, okim6295a_map) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.25) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.25) - MCFG_OKIM6295_ADD("okim6295", 1000000, PIN7_HIGH) - MCFG_DEVICE_ADDRESS_MAP(0, okim6295_map) + MCFG_OKIM6295_ADD("okim6295b", 1000000, PIN7_HIGH) + MCFG_DEVICE_ADDRESS_MAP(0, okim6295b_map) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.25) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.25) -- cgit v1.2.3