From 842dba5d9c9ebd605f03cea2c7811307e1832a3f Mon Sep 17 00:00:00 2001 From: Robbbert Date: Sat, 16 May 2020 23:49:26 +1000 Subject: [PATCH] (nw) c10: added tap --- src/mame/drivers/c10.cpp | 70 +++++++++++++++++-------------------- src/mame/drivers/pulsar.cpp | 2 +- 2 files changed, 33 insertions(+), 39 deletions(-) diff --git a/src/mame/drivers/c10.cpp b/src/mame/drivers/c10.cpp index 511b6741ffe..9c52a68d2b2 100644 --- a/src/mame/drivers/c10.cpp +++ b/src/mame/drivers/c10.cpp @@ -25,30 +25,28 @@ constantly looking at. class c10_state : public driver_device { public: - enum - { - TIMER_RESET - }; - c10_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") + , m_rom(*this, "maincpu") , m_p_videoram(*this, "videoram") , m_p_chargen(*this, "chargen") + , m_ram(*this, "mainram") { } uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void init_c10(); - void c10(machine_config &config); + +private: void c10_io(address_map &map); void c10_mem(address_map &map); -private: - required_device m_maincpu; - required_shared_ptr m_p_videoram; - required_region_ptr m_p_chargen; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + required_device m_maincpu; + required_region_ptr m_rom; + required_shared_ptr m_p_videoram; + required_region_ptr m_p_chargen; + memory_passthrough_handler *m_rom_shadow_tap; + required_shared_ptr m_ram; }; @@ -56,9 +54,8 @@ private: void c10_state::c10_mem(address_map &map) { map.unmap_value_high(); - map(0x0000, 0x0fff).bankrw("boot"); - map(0x1000, 0x7fff).ram(); - map(0x8000, 0xbfff).rom(); + map(0x0000, 0x7fff).ram().share("mainram"); + map(0x8000, 0xbfff).rom().region("maincpu", 0); map(0xc000, 0xf0a1).ram(); map(0xf0a2, 0xffff).ram().share("videoram"); } @@ -72,23 +69,24 @@ void c10_state::c10_io(address_map &map) static INPUT_PORTS_START( c10 ) INPUT_PORTS_END -void c10_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) -{ - switch (id) - { - case TIMER_RESET: - /* after the first 4 bytes have been read from ROM, switch the ram back in */ - membank("boot")->set_entry(0); - break; - default: - throw emu_fatalerror("Unknown id in c10_state::device_timer"); - } -} - void c10_state::machine_reset() { - membank("boot")->set_entry(1); - timer_set(attotime::from_usec(4), TIMER_RESET); + address_space &program = m_maincpu->space(AS_PROGRAM); + program.install_rom(0x0000, 0x0fff, m_rom); // do it here for F3 + m_rom_shadow_tap = program.install_read_tap(0x8000, 0x8fff, "rom_shadow_r",[this](offs_t offset, u8 &data, u8 mem_mask) + { + if (!machine().side_effects_disabled()) + { + // delete this tap + m_rom_shadow_tap->remove(); + + // reinstall ram over the rom shadow + m_maincpu->space(AS_PROGRAM).install_ram(0x0000, 0x0fff, m_ram); + } + + // return the original data + return data; + }); } /* This system appears to have inline attribute bytes of unknown meaning. @@ -178,16 +176,11 @@ void c10_state::c10(machine_config &config) PALETTE(config, "palette", palette_device::MONOCHROME); } -void c10_state::init_c10() -{ - uint8_t *RAM = memregion("maincpu")->base(); - membank("boot")->configure_entries(0, 2, &RAM[0x0000], 0x8000); -} /* ROM definition */ ROM_START( c10 ) - ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) - ROM_LOAD( "502-0055.ic16", 0x8000, 0x4000, CRC(2ccf5983) SHA1(52f7c497f5284bf5df9eb0d6e9142bb1869d8c24)) + ROM_REGION( 0x4000, "maincpu", 0 ) + ROM_LOAD( "502-0055.ic16", 0x0000, 0x4000, CRC(2ccf5983) SHA1(52f7c497f5284bf5df9eb0d6e9142bb1869d8c24)) ROM_REGION( 0x2000, "chargen", 0 ) ROM_LOAD( "c10_char.ic9", 0x0000, 0x2000, CRC(cb530b6f) SHA1(95590bbb433db9c4317f535723b29516b9b9fcbf)) @@ -196,4 +189,5 @@ ROM_END /* Driver */ /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -COMP( 1982, c10, 0, 0, c10, c10, c10_state, init_c10, "Cromemco", "C-10", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) +COMP( 1982, c10, 0, 0, c10, c10, c10_state, empty_init, "Cromemco", "C-10", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE ) + diff --git a/src/mame/drivers/pulsar.cpp b/src/mame/drivers/pulsar.cpp index 50b5bcfd417..1c527de1e53 100644 --- a/src/mame/drivers/pulsar.cpp +++ b/src/mame/drivers/pulsar.cpp @@ -273,5 +273,5 @@ ROM_END /* Driver */ // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP( 1981, pulsarlb, 0, 0, pulsar, pulsar, pulsar_state, empty_init, "Pulsar", "Little Big Board (6000 series)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW ) +COMP( 1981, pulsarlb, 0, 0, pulsar, pulsar, pulsar_state, empty_init, "Pulsar", "Little Big Board (6000 series)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )