From d5b09f7cbfb830a6eacdeef8bd54eb7b773dbb3f Mon Sep 17 00:00:00 2001 From: Robbbert Date: Wed, 19 Aug 2020 20:58:04 +1000 Subject: vtech2: added one waitstate to resolve MT 07094 and MT 07141. --- src/mame/drivers/vtech2.cpp | 2 +- src/mame/includes/vtech2.h | 2 ++ src/mame/machine/vtech2.cpp | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/mame/drivers/vtech2.cpp b/src/mame/drivers/vtech2.cpp index b40e19874da..0c21fe253fd 100644 --- a/src/mame/drivers/vtech2.cpp +++ b/src/mame/drivers/vtech2.cpp @@ -510,7 +510,7 @@ void vtech2_state::laser350(machine_config &config) CASSETTE(config, m_cassette); m_cassette->set_formats(vtech2_cassette_formats); - m_cassette->set_default_state(CASSETTE_PLAY); + m_cassette->set_default_state(CASSETTE_STOPPED); m_cassette->add_route(ALL_OUTPUTS, "mono", 0.05); VTECH_IOEXP_SLOT(config, "io").set_io_space(m_maincpu, AS_IO); diff --git a/src/mame/includes/vtech2.h b/src/mame/includes/vtech2.h index 5d6f963371f..f59d0535de8 100644 --- a/src/mame/includes/vtech2.h +++ b/src/mame/includes/vtech2.h @@ -75,6 +75,8 @@ private: void m_map500(address_map &map); void m_map700(address_map &map); + void init_waitstates(); + required_device m_maincpu; required_device m_speaker; required_device m_cassette; diff --git a/src/mame/machine/vtech2.cpp b/src/mame/machine/vtech2.cpp index 8b396dceccc..bfc74cd74cb 100644 --- a/src/mame/machine/vtech2.cpp +++ b/src/mame/machine/vtech2.cpp @@ -27,6 +27,8 @@ static const uint8_t laser_fdc_wrprot[2] = {0x80, 0x80}; void vtech2_state::init_laser() { + init_waitstates(); + uint8_t *gfx = memregion("gfx2")->base(); int i; @@ -99,6 +101,38 @@ uint8_t vtech2_state::cart_r(offs_t offset) return m_cart->read_rom(offset); } +// The ULA inserts one waitstate for every read and write in each space (MT 07094, MT 07141) +void vtech2_state::init_waitstates() +{ + address_space &mem = m_maincpu->space(AS_PROGRAM); + address_space &io = m_maincpu->space(AS_IO); + + mem.install_read_tap(0x0000, 0xffff, "mem_wait_r", [this](offs_t offset, u8 &data, u8 mem_mask) + { + if (!machine().side_effects_disabled()) + m_maincpu->adjust_icount(-1); + return data; + }); + mem.install_write_tap(0x0000, 0xffff, "mem_wait_w", [this](offs_t offset, u8 &data, u8 mem_mask) + { + if (!machine().side_effects_disabled()) + m_maincpu->adjust_icount(-1); + return data; + }); + io.install_read_tap(0x00, 0xff, "io_wait_r", [this](offs_t offset, u8 &data, u8 mem_mask) + { + if (!machine().side_effects_disabled()) + m_maincpu->adjust_icount(-1); + return data; + }); + io.install_write_tap(0x00, 0xff, "io_wait_w", [this](offs_t offset, u8 &data, u8 mem_mask) + { + if (!machine().side_effects_disabled()) + m_maincpu->adjust_icount(-1); + return data; + }); +} + /************************************************* * memory mapped I/O read -- cgit v1.2.3