From 69668ab7fa379b078138649d4b06e7e1a8df7e7e Mon Sep 17 00:00:00 2001 From: hap Date: Wed, 14 Apr 2021 14:41:07 +0200 Subject: corona/simultano: use memory_view instead of bankdev (big improvement according to -bench 10) --- src/mame/drivers/saitek_corona.cpp | 22 +++++++------------ src/mame/drivers/saitek_simultano.cpp | 41 ++++++++++++++--------------------- src/mame/includes/simpsons.h | 1 - 3 files changed, 24 insertions(+), 40 deletions(-) diff --git a/src/mame/drivers/saitek_corona.cpp b/src/mame/drivers/saitek_corona.cpp index 710a8119c1e..c7ac8108024 100644 --- a/src/mame/drivers/saitek_corona.cpp +++ b/src/mame/drivers/saitek_corona.cpp @@ -14,7 +14,6 @@ different compared to Stratos/Turbo King. #include "includes/saitek_stratos.h" #include "cpu/m6502/m65c02.h" -#include "machine/bankdev.h" #include "machine/nvram.h" #include "machine/sensorboard.h" #include "sound/dac.h" @@ -52,13 +51,12 @@ protected: private: // devices/pointers - required_device m_rombank; + memory_view m_rombank; required_device m_board; required_device m_dac; required_ioport_array<8+1> m_inputs; void main_map(address_map &map); - void rombank_map(address_map &map); // I/O handlers void update_leds(); @@ -106,7 +104,7 @@ void corona_state::machine_reset() { saitek_stratos_state::machine_reset(); - m_rombank->set_bank(0); + m_rombank.select(0); } @@ -169,7 +167,7 @@ void corona_state::control1_w(u8 data) void corona_state::control2_w(u8 data) { // d0,d1: rombank - m_rombank->set_bank(data & 3); + m_rombank.select(data & 3); // d2 rising edge: write to lcd if (~m_control2 & data & 4) @@ -239,14 +237,12 @@ void corona_state::main_map(address_map &map) map(0x6200, 0x6200).w(FUNC(corona_state::lcd_reset_w)); map(0x6400, 0x6400).w(FUNC(corona_state::leds2_w)); map(0x6600, 0x6600).rw(FUNC(corona_state::control2_r), FUNC(corona_state::control2_w)); - map(0x8000, 0xffff).m(m_rombank, FUNC(address_map_bank_device::amap8)); -} -void corona_state::rombank_map(address_map &map) -{ - map.unmap_value_high(); - map(0x00000, 0x0ffff).rom().region("maincpu", 0); - map(0x10000, 0x17fff).r("extrom", FUNC(generic_slot_device::read_rom)); + map(0x8000, 0xffff).view(m_rombank); + m_rombank[0](0x8000, 0xffff).rom().region("maincpu", 0x0000); + m_rombank[1](0x8000, 0xffff).rom().region("maincpu", 0x8000); + m_rombank[2](0x8000, 0xffff).r("extrom", FUNC(generic_slot_device::read_rom)); + m_rombank[3](0x8000, 0xffff).lr8(NAME([]() { return 0xff; })); } @@ -275,8 +271,6 @@ void corona_state::corona(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &corona_state::main_map); m_maincpu->set_periodic_int(FUNC(corona_state::irq0_line_hold), attotime::from_hz(183)); - ADDRESS_MAP_BANK(config, "rombank").set_map(&corona_state::rombank_map).set_options(ENDIANNESS_LITTLE, 8, 17, 0x8000); - NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); SENSORBOARD(config, m_board).set_type(sensorboard_device::MAGNETS); diff --git a/src/mame/drivers/saitek_simultano.cpp b/src/mame/drivers/saitek_simultano.cpp index 9043d88b5c1..853d94a4701 100644 --- a/src/mame/drivers/saitek_simultano.cpp +++ b/src/mame/drivers/saitek_simultano.cpp @@ -31,7 +31,6 @@ TODO: #include "cpu/m6502/m65c02.h" #include "cpu/m6502/r65c02.h" -#include "machine/bankdev.h" #include "machine/nvram.h" #include "machine/sensorboard.h" #include "sound/dac.h" @@ -79,7 +78,7 @@ protected: private: // devices/pointers required_device m_maincpu; - required_device m_rombank; + memory_view m_rombank; required_device m_board; required_device m_display; required_device m_lcd_pwm; @@ -88,9 +87,8 @@ private: required_ioport_array<8+1> m_inputs; output_finder<16, 34> m_out_lcd; - void main_map(address_map &map); - void simultano_rombank_map(address_map &map); - void cc2150_rombank_map(address_map &map); + void simultano_map(address_map &map); + void cc2150_map(address_map &map); void power_off(); void lcd_pwm_w(offs_t offset, u8 data); @@ -120,7 +118,7 @@ void simultano_state::machine_start() void simultano_state::machine_reset() { m_power = true; - m_rombank->set_bank(0); + m_rombank.select(0); } @@ -211,7 +209,7 @@ void simultano_state::control_w(u8 data) m_control = data; // d0,d1: rombank - m_rombank->set_bank(bitswap<2>(data,0,1)); + m_rombank.select(bitswap<2>(data,0,1)); // d6 falling edge: power-off request if (~data & prev & 0x40) @@ -224,7 +222,7 @@ void simultano_state::control_w(u8 data) Address Maps ******************************************************************************/ -void simultano_state::main_map(address_map &map) +void simultano_state::cc2150_map(address_map &map) { map(0x0000, 0x1fff).ram().share("nvram"); map(0x2000, 0x2000).w(FUNC(simultano_state::select_w)); @@ -233,19 +231,18 @@ void simultano_state::main_map(address_map &map) map(0x2600, 0x2600).rw(FUNC(simultano_state::control_r), FUNC(simultano_state::control_w)); //map(0x4000, 0x5fff).noprw(); // tries to access RAM, unpopulated on PCB map(0x6000, 0x607f).rw("lcd", FUNC(sed1502_device::read), FUNC(sed1502_device::write)); - map(0x8000, 0xffff).m(m_rombank, FUNC(address_map_bank_device::amap8)); -} -void simultano_state::cc2150_rombank_map(address_map &map) -{ - map.unmap_value_high(); - map(0x00000, 0x0ffff).rom().region("maincpu", 0); + map(0x8000, 0xffff).view(m_rombank); + m_rombank[0](0x8000, 0xffff).rom().region("maincpu", 0x0000); + m_rombank[1](0x8000, 0xffff).rom().region("maincpu", 0x8000); + m_rombank[2](0x8000, 0xffff).lr8(NAME([]() { return 0xff; })); + m_rombank[3](0x8000, 0xffff).lr8(NAME([]() { return 0xff; })); } -void simultano_state::simultano_rombank_map(address_map &map) +void simultano_state::simultano_map(address_map &map) { - cc2150_rombank_map(map); - map(0x10000, 0x17fff).r("extrom", FUNC(generic_slot_device::read_rom)); + cc2150_map(map); + m_rombank[2](0x8000, 0xffff).r("extrom", FUNC(generic_slot_device::read_rom)); } @@ -322,13 +319,9 @@ void simultano_state::cc2150(machine_config &config) { /* basic machine hardware */ R65C02(config, m_maincpu, 3_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &simultano_state::main_map); + m_maincpu->set_addrmap(AS_PROGRAM, &simultano_state::cc2150_map); m_maincpu->set_periodic_int(FUNC(simultano_state::irq0_line_hold), attotime::from_hz(91.6)); // measured - ADDRESS_MAP_BANK(config, m_rombank); - m_rombank->set_map(&simultano_state::cc2150_rombank_map); - m_rombank->set_options(ENDIANNESS_LITTLE, 8, 17, 0x8000); - NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS); @@ -361,11 +354,9 @@ void simultano_state::simultano(machine_config &config) /* basic machine hardware */ M65C02(config.replace(), m_maincpu, 5_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &simultano_state::main_map); + m_maincpu->set_addrmap(AS_PROGRAM, &simultano_state::simultano_map); m_maincpu->set_periodic_int(FUNC(simultano_state::irq0_line_hold), attotime::from_hz(76)); // approximation - m_rombank->set_map(&simultano_state::simultano_rombank_map); - /* extension rom */ GENERIC_CARTSLOT(config, "extrom", generic_plain_slot, "saitek_egr"); SOFTWARE_LIST(config, "cart_list").set_original("saitek_egr").set_filter("egr2"); diff --git a/src/mame/includes/simpsons.h b/src/mame/includes/simpsons.h index 7a766965378..aa5fc8b0e6d 100644 --- a/src/mame/includes/simpsons.h +++ b/src/mame/includes/simpsons.h @@ -6,7 +6,6 @@ #pragma once #include "cpu/m6809/konami.h" // for the callback and the firq irq definition -#include "machine/bankdev.h" #include "video/k052109.h" #include "video/k053251.h" #include "video/k053246_k053247_k055673.h" -- cgit v1.2.3