diff options
Diffstat (limited to 'src/devices/bus/bbc/tube/tube_32016.cpp')
-rw-r--r-- | src/devices/bus/bbc/tube/tube_32016.cpp | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/src/devices/bus/bbc/tube/tube_32016.cpp b/src/devices/bus/bbc/tube/tube_32016.cpp index 8d40ec56eb8..01019302aec 100644 --- a/src/devices/bus/bbc/tube/tube_32016.cpp +++ b/src/devices/bus/bbc/tube/tube_32016.cpp @@ -21,6 +21,7 @@ #include "emu.h" #include "tube_32016.h" + #include "softlist_dev.h" @@ -135,6 +136,7 @@ void bbc_tube_32016_device::device_add_mconfig(machine_config &config) TUBE(config, m_ula); m_ula->pnmi_handler().set_inputline(m_maincpu, INPUT_LINE_NMI); m_ula->pirq_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + m_ula->prst_handler().set(FUNC(bbc_tube_32016_device::prst_w)); RAM(config, m_ram).set_default_size("1M").set_extra_options("256K").set_default_value(0); @@ -242,18 +244,23 @@ void bbc_tube_32016_device::device_reset() // address map during booting program.install_rom(0x000000, 0x007fff, 0xff8000, m_rom->base()); - m_rom_shadow_tap = program.install_write_tap(0x000000, 0xffffff, "rom_shadow_w",[this](offs_t offset, u16 &data, u16 mem_mask) - { - // delete this tap - m_rom_shadow_tap->remove(); - - // address map after booting - m_maincpu->space(AS_PROGRAM).nop_readwrite(0x000000, 0xffffff); - m_maincpu->space(AS_PROGRAM).install_ram(0x000000, m_ram->mask(), 0x7fffff ^ m_ram->mask(), m_ram->pointer()); - m_maincpu->space(AS_PROGRAM).install_rom(0xf00000, 0xf07fff, 0x038000, m_rom->base()); - m_maincpu->space(AS_PROGRAM).install_read_port(0xf90000, 0xf90001, 0x00fffe, "CONFIG"); - m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xfffff0, 0xffffff, read8sm_delegate(*m_ula, FUNC(tube_device::parasite_r)), write8sm_delegate(*m_ula, FUNC(tube_device::parasite_w)), 0xff); - }); + m_rom_shadow_tap.remove(); + m_rom_shadow_tap = program.install_write_tap( + 0x000000, 0xffffff, + "rom_shadow_w", + [this] (offs_t offset, u16 &data, u16 mem_mask) + { + // delete this tap + m_rom_shadow_tap.remove(); + + // address map after booting + m_maincpu->space(AS_PROGRAM).nop_readwrite(0x000000, 0xffffff); + m_maincpu->space(AS_PROGRAM).install_ram(0x000000, m_ram->mask(), 0x7fffff ^ m_ram->mask(), m_ram->pointer()); + m_maincpu->space(AS_PROGRAM).install_rom(0xf00000, 0xf07fff, 0x038000, m_rom->base()); + m_maincpu->space(AS_PROGRAM).install_read_port(0xf90000, 0xf90001, 0x00fffe, "CONFIG"); + m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xfffff0, 0xffffff, read8sm_delegate(*m_ula, FUNC(tube_device::parasite_r)), write8sm_delegate(*m_ula, FUNC(tube_device::parasite_w)), 0xff); + }, + &m_rom_shadow_tap); } @@ -261,6 +268,13 @@ void bbc_tube_32016_device::device_reset() // IMPLEMENTATION //************************************************************************** +void bbc_tube_32016_device::prst_w(int state) +{ + device_reset(); + + m_maincpu->set_input_line(INPUT_LINE_RESET, state); +} + uint8_t bbc_tube_32016_device::host_r(offs_t offset) { return m_ula->host_r(offset); |