summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2020-06-09 01:11:04 +0200
committer hap <happppp@users.noreply.github.com>2020-06-09 01:11:32 +0200
commitd9ee5234f7622a49acaae68fb51ec89638f356ab (patch)
tree8f2b50fedea97508cc04866ab21d9a608e8e1579
parent3f5784f3a9e9e4cf8580f15af79fc3f23a2a230c (diff)
sensorboard: only load last position when the chesscomputer expects it (nw)
-rw-r--r--src/devices/machine/sensorboard.cpp8
-rw-r--r--src/devices/machine/sensorboard.h2
-rw-r--r--src/mame/drivers/cxg_sphinx40.cpp1
-rw-r--r--src/mame/drivers/fidel_eag68k.cpp1
-rw-r--r--src/mame/drivers/fidel_elite.cpp1
-rw-r--r--src/mame/drivers/mephisto_berlin.cpp2
-rw-r--r--src/mame/drivers/mephisto_modena.cpp1
-rw-r--r--src/mame/drivers/mephisto_modular.cpp5
-rw-r--r--src/mame/drivers/mephisto_modular_tm.cpp2
-rw-r--r--src/mame/drivers/novag_cforte.cpp1
-rw-r--r--src/mame/drivers/novag_const.cpp2
-rw-r--r--src/mame/drivers/novag_diablo.cpp1
-rw-r--r--src/mame/drivers/novag_sexpert.cpp2
-rw-r--r--src/mame/drivers/saitek_corona.cpp1
-rw-r--r--src/mame/drivers/saitek_mark5.cpp1
-rw-r--r--src/mame/drivers/saitek_risc2500.cpp1
-rw-r--r--src/mame/drivers/saitek_simultano.cpp1
-rw-r--r--src/mame/drivers/saitek_stratos.cpp1
-rw-r--r--src/mame/drivers/tasc.cpp1
19 files changed, 32 insertions, 3 deletions
diff --git a/src/devices/machine/sensorboard.cpp b/src/devices/machine/sensorboard.cpp
index 34f713d5c66..27c16277448 100644
--- a/src/devices/machine/sensorboard.cpp
+++ b/src/devices/machine/sensorboard.cpp
@@ -79,6 +79,7 @@ sensorboard_device::sensorboard_device(const machine_config &mconfig, const char
m_custom_spawn_cb(*this),
m_custom_output_cb(*this)
{
+ m_nvram_on = false;
m_nosensors = false;
m_magnets = false;
m_inductive = false;
@@ -202,8 +203,13 @@ void sensorboard_device::device_reset()
{
cancel_sensor();
cancel_hand();
- undo_reset();
+ if (!m_nvram_on)
+ {
+ clear_board();
+ m_custom_init_cb(0);
+ }
+ undo_reset();
refresh();
}
diff --git a/src/devices/machine/sensorboard.h b/src/devices/machine/sensorboard.h
index fcaea539163..b01a82a19be 100644
--- a/src/devices/machine/sensorboard.h
+++ b/src/devices/machine/sensorboard.h
@@ -33,6 +33,7 @@ public:
sensorboard_device &set_spawnpoints(u8 i) { m_maxspawn = i; m_maxid = i; return *this; } // number of piece spawnpoints, max 16
sensorboard_device &set_max_id(u8 i) { m_maxid = i; return *this; } // maximum piece id (if larger than set_spawnpoints)
sensorboard_device &set_delay(attotime delay) { m_sensordelay = delay; return *this; } // delay when activating a sensor (like PORT_IMPULSE), set to attotime::never to disable
+ sensorboard_device &set_nvram(bool b) { m_nvram_on = b; return *this; } // load last board position on start
sensorboard_device &set_ui_enable(bool b) { if (!b) m_maxspawn = 0; m_ui_enabled = (b) ? 3 : 0; return *this; } // enable UI inputs
sensorboard_device &set_mod_enable(bool b) { if (b) m_ui_enabled |= 1; else m_ui_enabled &= 2; return *this; } // enable modifier keys
@@ -124,6 +125,7 @@ private:
u32 m_usize;
void nvram_init(nvram_device &nvram, void *data, size_t size);
+ bool m_nvram_on;
emu_timer *m_undotimer;
TIMER_CALLBACK_MEMBER(undo_tick);
diff --git a/src/mame/drivers/cxg_sphinx40.cpp b/src/mame/drivers/cxg_sphinx40.cpp
index b421d629582..30ca911f72d 100644
--- a/src/mame/drivers/cxg_sphinx40.cpp
+++ b/src/mame/drivers/cxg_sphinx40.cpp
@@ -292,6 +292,7 @@ void sphinx40_state::sphinx40(machine_config &config)
SENSORBOARD(config, m_board).set_type(sensorboard_device::MAGNETS);
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
m_board->set_delay(attotime::from_msec(150));
+ m_board->set_nvram(true);
/* video hardware */
HD61603(config, m_lcd, 0);
diff --git a/src/mame/drivers/fidel_eag68k.cpp b/src/mame/drivers/fidel_eag68k.cpp
index a4e629e0a98..c2d9a234842 100644
--- a/src/mame/drivers/fidel_eag68k.cpp
+++ b/src/mame/drivers/fidel_eag68k.cpp
@@ -623,6 +623,7 @@ void eag_state::eag_base(machine_config &config)
SENSORBOARD(config, m_board).set_type(sensorboard_device::MAGNETS);
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
m_board->set_delay(attotime::from_msec(150));
+ m_board->set_nvram(true);
/* video hardware */
PWM_DISPLAY(config, m_display).set_size(9, 16);
diff --git a/src/mame/drivers/fidel_elite.cpp b/src/mame/drivers/fidel_elite.cpp
index 216b84c21c1..f2f2b326b7d 100644
--- a/src/mame/drivers/fidel_elite.cpp
+++ b/src/mame/drivers/fidel_elite.cpp
@@ -466,6 +466,7 @@ void elite_state::eas(machine_config &config)
m_ppi8255->tri_pc_callback().set_constant(0);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
+ m_board->set_nvram(true);
config.set_default_layout(layout_fidel_eas);
}
diff --git a/src/mame/drivers/mephisto_berlin.cpp b/src/mame/drivers/mephisto_berlin.cpp
index 32394831413..750510734ea 100644
--- a/src/mame/drivers/mephisto_berlin.cpp
+++ b/src/mame/drivers/mephisto_berlin.cpp
@@ -138,6 +138,8 @@ void berlin_state::berlin(machine_config &config)
ADDRESS_MAP_BANK(config, "nvram_map").set_map(&berlin_state::nvram_map).set_options(ENDIANNESS_BIG, 8, 13);
MEPHISTO_BUTTONS_BOARD(config, m_board);
+ subdevice<sensorboard_device>("board:board")->set_nvram(true);
+
MEPHISTO_DISPLAY_MODULE2(config, "display");
config.set_default_layout(layout_mephisto_berlin);
}
diff --git a/src/mame/drivers/mephisto_modena.cpp b/src/mame/drivers/mephisto_modena.cpp
index 30e5db10b37..8b5f346d07c 100644
--- a/src/mame/drivers/mephisto_modena.cpp
+++ b/src/mame/drivers/mephisto_modena.cpp
@@ -181,6 +181,7 @@ void mephisto_modena_state::modena(machine_config &config)
SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS);
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
m_board->set_delay(attotime::from_msec(150));
+ m_board->set_nvram(true);
/* video hardware */
PWM_DISPLAY(config, m_display).set_size(3, 8);
diff --git a/src/mame/drivers/mephisto_modular.cpp b/src/mame/drivers/mephisto_modular.cpp
index f179a6ed8ae..25b77ce35f5 100644
--- a/src/mame/drivers/mephisto_modular.cpp
+++ b/src/mame/drivers/mephisto_modular.cpp
@@ -410,8 +410,9 @@ void mmodular_state::alm16(machine_config &config)
ADDRESS_MAP_BANK(config, "nvram_map").set_map(&mmodular_state::nvram_map).set_options(ENDIANNESS_BIG, 8, 13);
MEPHISTO_SENSORS_BOARD(config, m_board);
- m_board->subdevice<sensorboard_device>("board")->set_spawnpoints(12+2); // 2 jokers
- m_board->subdevice<sensorboard_device>("board")->spawn_cb().set(FUNC(mmodular_state::spawn_cb));
+ subdevice<sensorboard_device>("board:board")->set_spawnpoints(12+2); // 2 jokers
+ subdevice<sensorboard_device>("board:board")->spawn_cb().set(FUNC(mmodular_state::spawn_cb));
+ subdevice<sensorboard_device>("board:board")->set_nvram(true);
TIMER(config, "bav_busy").configure_generic(nullptr);
diff --git a/src/mame/drivers/mephisto_modular_tm.cpp b/src/mame/drivers/mephisto_modular_tm.cpp
index 06a2fd59fd8..81bfd0ea1d2 100644
--- a/src/mame/drivers/mephisto_modular_tm.cpp
+++ b/src/mame/drivers/mephisto_modular_tm.cpp
@@ -213,6 +213,8 @@ void mmtm_state::mmtm_v(machine_config &config)
ADDRESS_MAP_BANK(config, "nvram_map").set_map(&mmtm_state::nvram_map).set_options(ENDIANNESS_BIG, 8, 13);
MEPHISTO_SENSORS_BOARD(config, "board");
+ subdevice<sensorboard_device>("board:board")->set_nvram(true);
+
MEPHISTO_DISPLAY_MODULE2(config, "display");
config.set_default_layout(layout_mephisto_modular_tm);
}
diff --git a/src/mame/drivers/novag_cforte.cpp b/src/mame/drivers/novag_cforte.cpp
index a6673585ae6..393c5859699 100644
--- a/src/mame/drivers/novag_cforte.cpp
+++ b/src/mame/drivers/novag_cforte.cpp
@@ -259,6 +259,7 @@ void cforte_state::cforte(machine_config &config)
SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS);
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
m_board->set_delay(attotime::from_msec(200));
+ m_board->set_nvram(true);
/* video hardware */
HLCD0538(config, m_lcd).write_cols().set(FUNC(cforte_state::lcd_output_w));
diff --git a/src/mame/drivers/novag_const.cpp b/src/mame/drivers/novag_const.cpp
index b08053c59c6..d9ef2654c6c 100644
--- a/src/mame/drivers/novag_const.cpp
+++ b/src/mame/drivers/novag_const.cpp
@@ -377,6 +377,7 @@ void const_state::ssensor4(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &const_state::ssensor4_map);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1);
+ m_board->set_nvram(true);
config.set_default_layout(layout_novag_ssensor4);
}
@@ -447,6 +448,7 @@ void const_state::sconst(machine_config &config)
m_irq_on->set_start_delay(m_irq_on->period() - attotime::from_nsec(10200)); // irq active for 10.2us
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1);
+ m_board->set_nvram(true);
config.set_default_layout(layout_novag_supercon);
}
diff --git a/src/mame/drivers/novag_diablo.cpp b/src/mame/drivers/novag_diablo.cpp
index 2b28c56d7e0..2f9939ee7f2 100644
--- a/src/mame/drivers/novag_diablo.cpp
+++ b/src/mame/drivers/novag_diablo.cpp
@@ -299,6 +299,7 @@ void diablo_state::diablo68k(machine_config &config)
SENSORBOARD(config, m_board).set_type(sensorboard_device::MAGNETS);
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
m_board->set_delay(attotime::from_msec(100));
+ m_board->set_nvram(true);
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_LCD);
diff --git a/src/mame/drivers/novag_sexpert.cpp b/src/mame/drivers/novag_sexpert.cpp
index 20a8588f699..533e675c182 100644
--- a/src/mame/drivers/novag_sexpert.cpp
+++ b/src/mame/drivers/novag_sexpert.cpp
@@ -429,6 +429,7 @@ void sexpert_state::sexpert(machine_config &config)
SENSORBOARD(config, m_board).set_type(sensorboard_device::MAGNETS);
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
m_board->set_delay(attotime::from_msec(200));
+ m_board->set_nvram(true);
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_LCD);
@@ -472,6 +473,7 @@ void sforte_state::sforte(machine_config &config)
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &sforte_state::sforte_map);
m_irq_on->set_start_delay(m_irq_on->period() - attotime::from_usec(10)); // tlow measured between 8us and 12us (unstable)
+
m_board->set_type(sensorboard_device::BUTTONS);
config.set_default_layout(layout_novag_sforte);
diff --git a/src/mame/drivers/saitek_corona.cpp b/src/mame/drivers/saitek_corona.cpp
index c182c62e911..3e6a20538de 100644
--- a/src/mame/drivers/saitek_corona.cpp
+++ b/src/mame/drivers/saitek_corona.cpp
@@ -283,6 +283,7 @@ void corona_state::corona(machine_config &config)
SENSORBOARD(config, m_board).set_type(sensorboard_device::MAGNETS);
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
m_board->set_delay(attotime::from_msec(200));
+ m_board->set_nvram(true);
/* video hardware */
PWM_DISPLAY(config, m_display).set_size(3+8, 8);
diff --git a/src/mame/drivers/saitek_mark5.cpp b/src/mame/drivers/saitek_mark5.cpp
index bb7a8e98dbe..a285a74ca4c 100644
--- a/src/mame/drivers/saitek_mark5.cpp
+++ b/src/mame/drivers/saitek_mark5.cpp
@@ -457,6 +457,7 @@ void mark5_state::mark6(machine_config &config)
SENSORBOARD(config, m_board).set_type(sensorboard_device::MAGNETS);
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
m_board->set_delay(attotime::from_msec(150));
+ m_board->set_nvram(true);
PWM_DISPLAY(config, m_display[3]).set_size(8, 8);
m_display[3]->set_bri_levels(0.001);
diff --git a/src/mame/drivers/saitek_risc2500.cpp b/src/mame/drivers/saitek_risc2500.cpp
index 9a225ecbcec..b244bc842e1 100644
--- a/src/mame/drivers/saitek_risc2500.cpp
+++ b/src/mame/drivers/saitek_risc2500.cpp
@@ -301,6 +301,7 @@ void risc2500_state::risc2500(machine_config &config)
m_board->set_type(sensorboard_device::BUTTONS);
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
m_board->set_delay(attotime::from_msec(100));
+ m_board->set_nvram(true);
RAM(config, m_ram).set_default_size("2M").set_extra_options("128K, 256K, 512K, 1M, 2M");
diff --git a/src/mame/drivers/saitek_simultano.cpp b/src/mame/drivers/saitek_simultano.cpp
index cb5f663f9df..46b6d5d6e4e 100644
--- a/src/mame/drivers/saitek_simultano.cpp
+++ b/src/mame/drivers/saitek_simultano.cpp
@@ -312,6 +312,7 @@ void simultano_state::simultano(machine_config &config)
SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS);
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
m_board->set_delay(attotime::from_msec(350));
+ m_board->set_nvram(true);
/* video hardware */
SED1502(config, m_lcd, 32768).write_segs().set(FUNC(simultano_state::lcd_output_w));
diff --git a/src/mame/drivers/saitek_stratos.cpp b/src/mame/drivers/saitek_stratos.cpp
index 9588163fd3e..278d5734178 100644
--- a/src/mame/drivers/saitek_stratos.cpp
+++ b/src/mame/drivers/saitek_stratos.cpp
@@ -483,6 +483,7 @@ void stratos_state::stratos(machine_config &config)
SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS);
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
m_board->set_delay(attotime::from_msec(350));
+ m_board->set_nvram(true);
/* video hardware */
PWM_DISPLAY(config, m_display).set_size(2+4, 8+1);
diff --git a/src/mame/drivers/tasc.cpp b/src/mame/drivers/tasc.cpp
index e3b59c87f24..4d02c8014c4 100644
--- a/src/mame/drivers/tasc.cpp
+++ b/src/mame/drivers/tasc.cpp
@@ -233,6 +233,7 @@ void tasc_state::tasc(machine_config &config)
m_lcd->set_fs(1); // font size 6x8
TASC_SB30(config, m_smartboard);
+ subdevice<sensorboard_device>("smartboard:board")->set_nvram(true);
config.set_default_layout(layout_tascr30);