diff options
Diffstat (limited to 'src/mame/drivers/positron.cpp')
-rw-r--r-- | src/mame/drivers/positron.cpp | 58 |
1 files changed, 30 insertions, 28 deletions
diff --git a/src/mame/drivers/positron.cpp b/src/mame/drivers/positron.cpp index 92e9c5ef7fd..8b59791d7e4 100644 --- a/src/mame/drivers/positron.cpp +++ b/src/mame/drivers/positron.cpp @@ -22,7 +22,10 @@ #include "emu.h" +#include "bus/ieee488/ieee488.h" +#include "bus/rs232/rs232.h" #include "cpu/m6809/m6809.h" +#include "imagedev/cassette.h" #include "machine/6840ptm.h" #include "machine/6850acia.h" #include "machine/bankdev.h" @@ -32,13 +35,10 @@ #include "machine/ram.h" #include "machine/tms9914.h" #include "video/saa5050.h" -#include "bus/ieee488/ieee488.h" -#include "bus/rs232/rs232.h" -#include "imagedev/cassette.h" -#include "speaker.h" #include "emupal.h" #include "screen.h" +#include "speaker.h" // Debugging @@ -112,7 +112,7 @@ private: required_shared_ptr<uint8_t> m_lores_ram; required_device<cassette_image_device> m_cassette; - memory_passthrough_handler *m_mmu_shadow_tap; + memory_passthrough_handler m_mmu_shadow_tap; uint8_t m_prev_opcode; }; @@ -152,30 +152,32 @@ void positron_state::machine_reset() m_mmu.active_key = 0; address_space &program = m_maincpu->space(AS_PROGRAM); - m_mmu_shadow_tap = program.install_read_tap(0x0000, 0xffff, "mmu_shadow_r",[this](offs_t offset, u8 &data, u8 mem_mask) - { - if (!machine().side_effects_disabled()) - { - if (m_fuse_timer_running && m_prev_opcode == 0x3b) // RTI - { - m_mmu.active_key = m_mmu.operate_key; - logerror("mmu_shadow_r: switched to task %d\n", m_mmu.active_key); - m_mmu.sbit = false; - m_fuse_timer_running = false; - } - else if (m_irq_ack && offset >= 0xfff0 && offset != 0xffff) + m_mmu_shadow_tap.remove(); + m_mmu_shadow_tap = program.install_read_tap( + 0x0000, 0xffff, + "mmu_shadow_r", + [this] (offs_t offset, u8 &data, u8 mem_mask) { - m_mmu.active_key = 0; - logerror("irq_callback: switched to task %d\n", m_mmu.active_key); - m_mmu.sbit = true; - m_irq_ack = false; - data = m_maincpu->space(AS_PROGRAM).read_byte(offset); - } - } - - // return the original data - return data; - }); + if (!machine().side_effects_disabled()) + { + if (m_fuse_timer_running && m_prev_opcode == 0x3b) // RTI + { + m_mmu.active_key = m_mmu.operate_key; + logerror("mmu_shadow_r: switched to task %d\n", m_mmu.active_key); + m_mmu.sbit = false; + m_fuse_timer_running = false; + } + else if (m_irq_ack && offset >= 0xfff0 && offset != 0xffff) + { + m_mmu.active_key = 0; + logerror("irq_callback: switched to task %d\n", m_mmu.active_key); + m_mmu.sbit = true; + m_irq_ack = false; + data = m_maincpu->space(AS_PROGRAM).read_byte(offset); + } + } + }, + &m_mmu_shadow_tap); } |