diff options
Diffstat (limited to 'src/mame/drivers/vgmplay.cpp')
-rw-r--r-- | src/mame/drivers/vgmplay.cpp | 46 |
1 files changed, 38 insertions, 8 deletions
diff --git a/src/mame/drivers/vgmplay.cpp b/src/mame/drivers/vgmplay.cpp index 39404afc759..e3ce23f29ee 100644 --- a/src/mame/drivers/vgmplay.cpp +++ b/src/mame/drivers/vgmplay.cpp @@ -22,6 +22,7 @@ #include "sound/multipcm.h" #include "sound/okim6295.h" #include "sound/pokey.h" +#include "sound/qsound.h" #include "sound/segapcm.h" #include "sound/sn76496.h" #include "sound/ym2151.h" @@ -77,7 +78,8 @@ public: A_POKEYB = 0x00013030, A_YMF271 = 0x00013040, A_YMZ280B = 0x00013050, - A_YM2608 = 0x00013060 + A_YM2608 = 0x00013060, + A_QSOUND = 0x00013070 }; enum io16_t @@ -103,7 +105,7 @@ public: virtual void state_string_export(const device_state_entry &entry, std::string &str) const override; virtual util::disasm_interface *create_disassembler() override; - + READ8_MEMBER(segapcm_rom_r); READ8_MEMBER(ymf271_rom_r); READ8_MEMBER(ymz280b_rom_r); @@ -112,6 +114,7 @@ public: READ8_MEMBER(k053260_rom_r); READ8_MEMBER(okim6295_rom_r); READ8_MEMBER(c352_rom_r); + READ8_MEMBER(qsound_rom_r); private: struct rom_block { @@ -191,6 +194,7 @@ private: required_device<ymf271_device> m_ymf271; required_device<ymz280b_device> m_ymz280b; required_device<ym2608_device> m_ym2608; + required_device<qsound_device> m_qsound; uint32_t m_multipcma_bank_l; uint32_t m_multipcma_bank_r; @@ -463,12 +467,7 @@ void vgmplay_device::execute_run() m_io->write_byte(A_GAMEBOY + m_file->read_byte(m_pc+1), m_file->read_byte(m_pc+2)); m_pc += 3; break; - - case 0xc0: - m_io->write_byte(A_SEGAPCM + (m_file->read_word(m_pc+1) & 0x7ff), m_file->read_byte(m_pc+3)); - m_pc += 4; - break; - + case 0xb4: m_io->write_byte(A_NESAPU + m_file->read_byte(m_pc+1), m_file->read_byte(m_pc+2)); m_pc += 3; @@ -510,6 +509,11 @@ void vgmplay_device::execute_run() m_pc += 3; break; } + + case 0xc0: + m_io->write_byte(A_SEGAPCM + (m_file->read_word(m_pc+1) & 0x7ff), m_file->read_byte(m_pc+3)); + m_pc += 4; + break; case 0xc3: { @@ -527,6 +531,13 @@ void vgmplay_device::execute_run() m_pc += 4; break; } + + case 0xc4: + m_io->write_byte(A_QSOUND + 0, m_file->read_byte(m_pc+1)); + m_io->write_byte(A_QSOUND + 1, m_file->read_byte(m_pc+2)); + m_io->write_byte(A_QSOUND + 2, m_file->read_byte(m_pc+3)); + m_pc += 4; + break; case 0xd1: { @@ -947,6 +958,11 @@ READ8_MEMBER(vgmplay_device::k053260_rom_r) return rom_r(0, 0x8e, offset); } +READ8_MEMBER(vgmplay_device::qsound_rom_r) +{ + return rom_r(0, 0x8f, offset); +} + READ8_MEMBER(vgmplay_device::c352_rom_r) { return rom_r(0, 0x92, offset); @@ -981,6 +997,7 @@ vgmplay_state::vgmplay_state(const machine_config &mconfig, device_type type, co , m_ymf271(*this, "ymf271") , m_ymz280b(*this, "ymz280b") , m_ym2608(*this, "ym2608") + , m_qsound(*this, "qsound") { } @@ -1202,6 +1219,9 @@ void vgmplay_state::machine_start() m_pokeyb->set_unscaled_clock(clock); } } + if(version >= 0x161 && r32(0xb4)) { + m_qsound->set_unscaled_clock(r32(0xb4)); + } } if (data_start > 0xc0) @@ -1310,6 +1330,7 @@ static ADDRESS_MAP_START( soundchips_map, AS_IO, 8, vgmplay_state ) 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_QSOUND, vgmplay_device::A_QSOUND+0x2) AM_DEVWRITE ("qsound", qsound_device, write) ADDRESS_MAP_END static ADDRESS_MAP_START( segapcm_map, 0, 8, vgmplay_state ) @@ -1336,6 +1357,10 @@ 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 +static ADDRESS_MAP_START( qsound_map, 0, 8, vgmplay_state ) + AM_RANGE(0, 0xffffff) AM_DEVREAD("vgmplay", vgmplay_device, qsound_rom_r) +ADDRESS_MAP_END + static ADDRESS_MAP_START( nescpu_map, AS_PROGRAM, 8, vgmplay_state ) AM_RANGE(0, 0xffff) AM_RAM AM_SHARE("nesapu_ram") ADDRESS_MAP_END @@ -1476,6 +1501,11 @@ MACHINE_CONFIG_START(vgmplay_state::vgmplay) MCFG_SOUND_ROUTE(0, "rspeaker", 0.25) MCFG_SOUND_ROUTE(1, "lspeaker", 0.50) MCFG_SOUND_ROUTE(2, "rspeaker", 0.50) + + MCFG_QSOUND_ADD("qsound", 4000000) + MCFG_DEVICE_ADDRESS_MAP(0, qsound_map) + MCFG_SOUND_ROUTE(0, "lspeaker", 1) + MCFG_SOUND_ROUTE(1, "rspeaker", 1) MACHINE_CONFIG_END ROM_START( vgmplay ) |