From c2ce67c37df82bc28622a929d23956f7cbdcf162 Mon Sep 17 00:00:00 2001 From: holub Date: Thu, 11 Aug 2022 12:25:52 -0400 Subject: pentagon.cpp: Clean up implementation of differences between 128K and 1024K variants. (#10198) --- src/mame/sinclair/pentagon.cpp | 82 ++++++++++++++++++++++++++---------------- 1 file changed, 52 insertions(+), 30 deletions(-) diff --git a/src/mame/sinclair/pentagon.cpp b/src/mame/sinclair/pentagon.cpp index 0438462f089..1281f59cf09 100644 --- a/src/mame/sinclair/pentagon.cpp +++ b/src/mame/sinclair/pentagon.cpp @@ -24,13 +24,15 @@ public: , m_beta(*this, BETA_DISK_TAG) { } - void pent1024(machine_config &config); void pentagon(machine_config &config); protected: virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; + virtual void pentagon_update_memory(); + + required_device m_beta; private: rectangle get_screen_area() override; @@ -44,10 +46,23 @@ private: void pentagon_io(address_map &map); void pentagon_mem(address_map &map); void pentagon_switch(address_map &map); - void pentagon_update_memory(); memory_access<16, 0, 0, ENDIANNESS_LITTLE>::specific m_program; - required_device m_beta; +}; + +class pent1024_state : public pentagon_state +{ +public: + pent1024_state(const machine_config &mconfig, device_type type, const char *tag) + : pentagon_state(mconfig, type, tag) + { } + + void pent1024(machine_config &config); + +protected: + void machine_start() override; + void machine_reset() override; + void pentagon_update_memory() override; }; void pentagon_state::pentagon_update_memory() @@ -56,22 +71,7 @@ void pentagon_state::pentagon_update_memory() m_screen_location = m_ram->pointer() + ((BIT(m_port_7ffd_data, 3) ? 7 : 5) << 14); m_bank_ram[3]->set_entry(m_port_7ffd_data & 0x07); - if (strcmp(machine().system().name, "pent1024") == 0) - // currently 512Kb ram expansion supported - m_bank_ram[3]->set_entry(m_bank_ram[3]->entry() | ((m_port_7ffd_data & 0xc0) >> 3)); - - if (m_beta->started() && m_beta->is_active() && !BIT(m_port_7ffd_data, 4)) - { - /* GLUK */ - m_bank_rom[0]->set_entry( - strcmp(machine().system().name, "pent1024") == 0 - ? 2 - : BIT(m_port_7ffd_data, 4) - ); - } - else - /* ROM switching */ - m_bank_rom[0]->set_entry(BIT(m_port_7ffd_data, 4)); + m_bank_rom[0]->set_entry(BIT(m_port_7ffd_data, 4)); } void pentagon_state::port_7ffd_w(offs_t offset, u8 data) @@ -102,7 +102,7 @@ u8 pentagon_state::beta_neutral_r(offs_t offset) u8 pentagon_state::beta_enable_r(offs_t offset) { if (!(machine().side_effects_disabled())) { - if (m_beta->started() && m_bank_rom[0]->entry() == 1) { + if (m_bank_rom[0]->entry() == 1) { m_beta->enable(); m_bank_rom[0]->set_entry(3); } @@ -113,7 +113,7 @@ u8 pentagon_state::beta_enable_r(offs_t offset) u8 pentagon_state::beta_disable_r(offs_t offset) { if (!(machine().side_effects_disabled())) { - if (m_beta->started() && m_beta->is_active()) { + if (m_beta->is_active()) { m_beta->disable(); m_bank_rom[0]->set_entry(BIT(m_port_7ffd_data, 4)); } @@ -155,16 +155,10 @@ void pentagon_state::machine_start() spectrum_128_state::machine_start(); m_bank_rom[0]->configure_entries(3, 1, memregion("beta:beta")->base(), 0x4000); m_maincpu->space(AS_PROGRAM).specific(m_program); - - if(strcmp(machine().system().name, "pent1024") == 0) - m_bank_rom[0]->configure_entries(2, 1, memregion("maincpu")->base() + 0x18000, 0x4000); } void pentagon_state::machine_reset() { - if (m_beta->started() && strcmp(machine().system().name, "pent1024") == 0) - m_beta->enable(); - m_port_7ffd_data = 0; m_port_1ffd_data = -1; pentagon_update_memory(); @@ -223,13 +217,41 @@ void pentagon_state::pentagon(machine_config &config) SOFTWARE_LIST(config, "betadisc_list").set_original("spectrum_betadisc_flop"); } -void pentagon_state::pent1024(machine_config &config) + +//------------------------------------------------- +// Pentagon 1024 +//------------------------------------------------- + +void pent1024_state::pent1024(machine_config &config) { pentagon(config); - /* internal ram */ m_ram->set_default_size("1024K"); } +void pent1024_state::machine_start() +{ + pentagon_state::machine_start(); + m_bank_rom[0]->configure_entries(2, 1, memregion("maincpu")->base() + 0x18000, 0x4000); +} + +void pent1024_state::machine_reset() +{ + m_beta->enable(); + m_bank_rom[0]->set_entry(3); + + pentagon_state::machine_reset(); +} + +void pent1024_state::pentagon_update_memory() +{ + pentagon_state::pentagon_update_memory(); + + m_bank_ram[3]->set_entry(m_bank_ram[3]->entry() | ((m_port_7ffd_data & 0xc0) >> 3)); + if (m_beta->is_active() && !BIT(m_port_7ffd_data, 4)) + m_bank_rom[0]->set_entry(2); +} + + /*************************************************************************** Game driver(s) @@ -309,4 +331,4 @@ ROM_END // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS COMP( 1991, pentagon, spec128, 0, pentagon, spec_plus, pentagon_state, empty_init, "Vladimir Drozdov", "Pentagon 128K", 0 ) -COMP( 2005, pent1024, spec128, 0, pent1024, spec_plus, pentagon_state, empty_init, "Alex Zhabin", "Pentagon 1024SL", 0 ) +COMP( 2005, pent1024, spec128, 0, pent1024, spec_plus, pent1024_state, empty_init, "Alex Zhabin", "Pentagon 1024SL", 0 ) -- cgit v1.2.3