mirror of
https://github.com/holub/mame
synced 2025-04-19 15:11:37 +03:00
corona/simultano: use memory_view instead of bankdev (big improvement according to -bench 10)
This commit is contained in:
parent
c60845cdea
commit
69668ab7fa
@ -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);
|
||||
|
@ -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");
|
||||
|
@ -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"
|
||||
|
Loading…
Reference in New Issue
Block a user