summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/entex/advision.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/entex/advision.cpp')
-rw-r--r--src/mame/entex/advision.cpp35
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");
}