corona/simultano: use memory_view instead of bankdev (big improvement according to -bench 10)

This commit is contained in:
hap 2021-04-14 14:41:07 +02:00
parent c60845cdea
commit 69668ab7fa
3 changed files with 25 additions and 41 deletions

View File

@ -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<address_map_bank_device> m_rombank;
memory_view m_rombank;
required_device<sensorboard_device> m_board;
required_device<dac_bit_interface> 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);

View File

@ -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<cpu_device> m_maincpu;
required_device<address_map_bank_device> m_rombank;
memory_view m_rombank;
required_device<sensorboard_device> m_board;
required_device<pwm_display_device> m_display;
required_device<pwm_display_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));
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::cc2150_rombank_map(address_map &map)
void simultano_state::simultano_map(address_map &map)
{
map.unmap_value_high();
map(0x00000, 0x0ffff).rom().region("maincpu", 0);
}
void simultano_state::simultano_rombank_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");

View File

@ -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"