diff options
Diffstat (limited to 'src/mame/entex/advision.cpp')
-rw-r--r-- | src/mame/entex/advision.cpp | 35 |
1 files changed, 8 insertions, 27 deletions
diff --git a/src/mame/entex/advision.cpp b/src/mame/entex/advision.cpp index 4a703983219..e26f5e89404 100644 --- a/src/mame/entex/advision.cpp +++ b/src/mame/entex/advision.cpp @@ -30,7 +30,6 @@ different rate, hence MAME configures a larger screen. In fact, the homebrew dem Code Red doesn't use the BIOS for it, and runs at 50*40 to save some RAM. TODO: -- EA banking is ugly, it can be turd-polished but the real issue is in mcs48 - display refresh is actually ~14Hz, but doing that will make MAME very sluggish BTANB: @@ -70,8 +69,6 @@ public: m_mirror_sync(*this, "mirror_sync"), m_led_update(*this, "led_update"), m_led_off(*this, "led_off"), - m_cart(*this, "cartslot"), - m_ea_bank(*this, "ea_bank"), m_joy(*this, "JOY"), m_conf(*this, "CONF") { } @@ -81,8 +78,8 @@ public: DECLARE_INPUT_CHANGED_MEMBER(set_screensize); protected: - virtual void machine_start() override; - virtual void machine_reset() override; + virtual void machine_start() override ATTR_COLD; + virtual void machine_reset() override ATTR_COLD; private: required_device<i8048_device> m_maincpu; @@ -93,8 +90,6 @@ private: required_device<timer_device> m_mirror_sync; required_device<timer_device> m_led_update; required_device<timer_device> m_led_off; - required_device<generic_slot_device> m_cart; - required_memory_bank m_ea_bank; required_ioport m_joy; required_ioport m_conf; @@ -108,13 +103,12 @@ private: u8 m_led_latch[5] = { }; std::unique_ptr<u8[]> m_display; - memory_region *m_cart_rom = nullptr; std::vector<u8> m_ext_ram; u16 m_rambank = 0; u8 m_sound_cmd = 0; - void io_map(address_map &map); - void program_map(address_map &map); + void io_map(address_map &map) ATTR_COLD; + void program_map(address_map &map) ATTR_COLD; u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); void av_control_w(u8 data); @@ -288,8 +282,6 @@ void advision_state::bankswitch_w(u8 data) // P12: 8048 EA pin m_maincpu->set_input_line(MCS48_INPUT_EA, BIT(data, 2) ? ASSERT_LINE : CLEAR_LINE); - if (m_cart_rom) - m_ea_bank->set_entry(BIT(data, 2)); } u8 advision_state::ext_ram_r(offs_t offset) @@ -318,8 +310,7 @@ void advision_state::ext_ram_w(offs_t offset, u8 data) void advision_state::program_map(address_map &map) { - map(0x0000, 0x0fff).r(m_cart, FUNC(generic_slot_device::read_rom)); - map(0x0000, 0x03ff).bankr("ea_bank"); + map(0x0000, 0x0fff).r("cartslot", FUNC(generic_slot_device::read_rom)); } void advision_state::io_map(address_map &map) @@ -357,14 +348,14 @@ static INPUT_PORTS_START( advision ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_START("CONF") - PORT_CONFNAME( 0x3f, 20, "Screen Width" ) PORT_CHANGED_MEMBER(DEVICE_SELF, advision_state, set_screensize, 0) // factors of 60 + PORT_CONFNAME( 0x3f, 20, "Screen Width" ) PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(advision_state::set_screensize), 0) // factors of 60 PORT_CONFSETTING( 60, "160" ) PORT_CONFSETTING( 30, "320" ) PORT_CONFSETTING( 20, "480" ) PORT_CONFSETTING( 15, "640" ) PORT_CONFSETTING( 12, "800" ) PORT_CONFSETTING( 10, "960" ) - PORT_CONFNAME( 0xc0, 0x80, "LED Height" ) PORT_CHANGED_MEMBER(DEVICE_SELF, advision_state, set_screensize, 0) + PORT_CONFNAME( 0xc0, 0x80, "LED Height" ) PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(advision_state::set_screensize), 0) PORT_CONFSETTING( 0x00, "25%" ) PORT_CONFSETTING( 0x40, "50%" ) PORT_CONFSETTING( 0x80, "75%" ) @@ -379,16 +370,6 @@ INPUT_PORTS_END void advision_state::machine_start() { - // configure EA banking - std::string region_tag; - m_cart_rom = memregion(region_tag.assign(m_cart->tag()).append(GENERIC_ROM_REGION_TAG).c_str()); - - m_ea_bank->configure_entry(0, memregion("maincpu")->base()); - if (m_cart_rom) - m_ea_bank->configure_entry(1, m_cart_rom->base()); - m_maincpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x03ff, m_ea_bank); - m_ea_bank->set_entry(0); - // allocate display buffer m_display = std::make_unique<u8 []>(DISPLAY_WIDTH * 40); std::fill_n(m_display.get(), DISPLAY_WIDTH * 40, 0); @@ -460,7 +441,7 @@ void advision_state::advision(machine_config &config) FILTER_VOLUME(config, m_volume).add_route(ALL_OUTPUTS, "speaker", 1.0); // cartridge - GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "advision_cart"); + GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "advision_cart"); SOFTWARE_LIST(config, "cart_list").set_original("advision"); } |