From c0b3e7c6cd882ff33d737bcf254e809e1816fea3 Mon Sep 17 00:00:00 2001 From: MetalliC <0vetal0@gmail.com> Date: Wed, 22 Jan 2020 02:03:08 +0200 Subject: [PATCH] konmedal.cpp play some uPD7759 samples --- src/devices/sound/upd7759.cpp | 5 ++++- src/mame/drivers/konmedal.cpp | 25 ++++++++++++++++++++----- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/devices/sound/upd7759.cpp b/src/devices/sound/upd7759.cpp index b800f6a7b0e..f8ca2c2336d 100644 --- a/src/devices/sound/upd7759.cpp +++ b/src/devices/sound/upd7759.cpp @@ -287,7 +287,7 @@ void upd7756_device::device_start() void upd775x_device::device_reset() { m_pos = 0; - m_fifo_in = 0; + //m_fifo_in = 0; // this seems keeping state when /RESET line asserted (test case: konmedal.cpp games) m_state = STATE_IDLE; m_clocks_left = 0; m_nibbles_left = 0; @@ -699,6 +699,9 @@ void upd775x_device::port_w(u8 data) READ_LINE_MEMBER( upd775x_device::busy_r ) { + /* update the stream first */ + m_channel->update(); + /* return /BUSY */ return (m_state == STATE_IDLE); } diff --git a/src/mame/drivers/konmedal.cpp b/src/mame/drivers/konmedal.cpp index d80b9c6f5f9..bbc9ada2d11 100644 --- a/src/mame/drivers/konmedal.cpp +++ b/src/mame/drivers/konmedal.cpp @@ -62,7 +62,7 @@ public: m_palette(*this, "palette"), m_ymz(*this, "ymz"), m_oki(*this, "oki"), - m_upd7759(*this, "upd7759"), + m_upd7759(*this, "upd"), m_nvram(*this, "nvram"), m_outport(*this, "OUT") { } @@ -136,6 +136,10 @@ WRITE8_MEMBER(konmedal_state::control2_w) { //printf("%02x to control2\n", data); m_control2 = data; + + // note: this is needed because games clear reset line and assert start line at the same time, but MAME's outport can't handle right order + if (m_upd7759) + m_upd7759->reset_w((data & 2) ? 1 : 0); m_outport->write(data); } @@ -452,6 +456,17 @@ static INPUT_PORTS_START( konmedal ) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("hopper", hopper_device, motor_w) INPUT_PORTS_END +static INPUT_PORTS_START( shuriboy ) + PORT_INCLUDE( konmedal ) + + PORT_MODIFY("IN1") + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("upd", upd7759_device, busy_r) + + PORT_MODIFY("OUT") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("upd", upd7759_device, reset_w) // this should be called 1st, but it's not + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("upd", upd7759_device, start_w) +INPUT_PORTS_END + void konmedal_state::machine_start() { membank("bank1")->configure_entries(0, 0x10, memregion("maincpu")->base(), 0x2000); @@ -660,7 +675,7 @@ void konmedal_state::shuriboy(machine_config &config) K051649(config, "k051649", XTAL(24'000'000) / 12).add_route(ALL_OUTPUTS, "mono", 0.45); // divisor unknown - UPD7759(config, m_upd7759); + UPD7759(config, m_upd7759, XTAL(640'000)).add_route(ALL_OUTPUTS, "mono", 0.60); } void konmedal_state::fuusenpn(machine_config &config) @@ -892,9 +907,9 @@ ROM_START( mariorou ) ROM_END // K052109 (TMNT tilemaps) board -GAME( 1991, mariorou, 0, mariorou, konmedal, konmedal_state, shuri_init, ROT0, "Konami", "Mario Roulette", MACHINE_NOT_WORKING) -GAME( 1993, shuriboy, 0, shuriboy, konmedal, konmedal_state, shuri_init, ROT0, "Konami", "Shuriken Boy", MACHINE_NOT_WORKING) -GAME( 1993, fuusenpn, 0, fuusenpn, konmedal, konmedal_state, shuri_init, ROT0, "Konami", "Fuusen Pentai", MACHINE_NOT_WORKING) +GAME( 1991, mariorou, 0, mariorou, shuriboy, konmedal_state, shuri_init, ROT0, "Konami", "Mario Roulette", MACHINE_NOT_WORKING) +GAME( 1993, shuriboy, 0, shuriboy, shuriboy, konmedal_state, shuri_init, ROT0, "Konami", "Shuriken Boy", MACHINE_NOT_WORKING) +GAME( 1993, fuusenpn, 0, fuusenpn, shuriboy, konmedal_state, shuri_init, ROT0, "Konami", "Fuusen Pentai", MACHINE_NOT_WORKING) // K054156/K054157 (GX tilemaps) board GAME( 1994, buttobi, 0, ddboy, konmedal, konmedal_state, medal_init, ROT0, "Konami", "Buttobi Striker", MACHINE_NOT_WORKING)