summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2019-02-21 13:37:53 +0100
committer hap <happppp@users.noreply.github.com>2019-02-21 13:38:18 +0100
commit2b59e6556104c9b2eefa072381f7c8005d97d856 (patch)
treea9d42507adf8639137414e92bfe50ca475c10abe
parent03753c9fbf13041c048034716519a984ac2f1230 (diff)
chess*: move generic electronic chessboard functions to machine/chessbase.cpp (nw)
-rw-r--r--scripts/target/mame/mess.lua80
-rw-r--r--src/mame/drivers/cking_master.cpp20
-rw-r--r--src/mame/drivers/ckingbase.cpp219
-rw-r--r--src/mame/drivers/cxg_ch2001.cpp27
-rw-r--r--src/mame/drivers/fidel_as12.cpp4
-rw-r--r--src/mame/drivers/fidel_card.cpp2
-rw-r--r--src/mame/drivers/fidel_cc10.cpp2
-rw-r--r--src/mame/drivers/fidel_cc7.cpp2
-rw-r--r--src/mame/drivers/fidel_chesster.cpp4
-rw-r--r--src/mame/drivers/fidel_csc.cpp6
-rw-r--r--src/mame/drivers/fidel_dames.cpp4
-rw-r--r--src/mame/drivers/fidel_desdis.cpp4
-rw-r--r--src/mame/drivers/fidel_eag68k.cpp6
-rw-r--r--src/mame/drivers/fidel_elite.cpp10
-rw-r--r--src/mame/drivers/fidel_excel.cpp10
-rw-r--r--src/mame/drivers/fidel_phantom.cpp4
-rw-r--r--src/mame/drivers/fidel_sc12.cpp6
-rw-r--r--src/mame/drivers/fidel_sc6.cpp4
-rw-r--r--src/mame/drivers/fidel_sc8.cpp4
-rw-r--r--src/mame/drivers/fidel_sc9.cpp6
-rw-r--r--src/mame/drivers/fidel_vcc.cpp2
-rw-r--r--src/mame/drivers/fidel_vsc.cpp4
-rw-r--r--src/mame/drivers/fidelbase.cpp297
-rw-r--r--src/mame/drivers/novag_cforte.cpp4
-rw-r--r--src/mame/drivers/novag_delta1.cpp2
-rw-r--r--src/mame/drivers/novag_diablo.cpp6
-rw-r--r--src/mame/drivers/novag_presto.cpp4
-rw-r--r--src/mame/drivers/novag_scon.cpp4
-rw-r--r--src/mame/drivers/novag_sexpert.cpp6
-rw-r--r--src/mame/drivers/novagbase.cpp292
-rw-r--r--src/mame/includes/chessbase.h69
-rw-r--r--src/mame/includes/fidelbase.h53
-rw-r--r--src/mame/includes/novagbase.h54
-rw-r--r--src/mame/machine/chessbase.cpp (renamed from src/mame/drivers/cxgbase.cpp)118
-rw-r--r--src/mame/mess.flt4
35 files changed, 332 insertions, 1011 deletions
diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua
index c2c819adbe1..aeb43e21086 100644
--- a/scripts/target/mame/mess.lua
+++ b/scripts/target/mame/mess.lua
@@ -1033,7 +1033,7 @@ function linkProjects_mame_mess(_target, _subtarget)
"cccp",
"cce",
"ccs",
- "chessking",
+ "chess",
"chromatics",
"chrysler",
"coleco",
@@ -1042,7 +1042,6 @@ function linkProjects_mame_mess(_target, _subtarget)
"comx",
"concept",
"conitec",
- "cxg",
"cybiko",
"dai",
"ddr",
@@ -1065,7 +1064,6 @@ function linkProjects_mame_mess(_target, _subtarget)
"exidy",
"fairch",
"fairlight",
- "fidelity",
"force",
"fujitsu",
"funtech",
@@ -1834,11 +1832,42 @@ files {
MAME_DIR .. "src/mame/drivers/ccs300.cpp",
}
-createMESSProjects(_target, _subtarget, "chessking")
+createMESSProjects(_target, _subtarget, "chess")
files {
- MAME_DIR .. "src/mame/drivers/ckingbase.cpp",
- MAME_DIR .. "src/mame/includes/ckingbase.h",
+ MAME_DIR .. "src/mame/machine/chessbase.cpp",
+ MAME_DIR .. "src/mame/includes/chessbase.h",
MAME_DIR .. "src/mame/drivers/cking_master.cpp",
+ MAME_DIR .. "src/mame/drivers/cxg_ch2001.cpp",
+
+ MAME_DIR .. "src/mame/drivers/fidelbase.cpp",
+ MAME_DIR .. "src/mame/includes/fidelbase.h",
+ MAME_DIR .. "src/mame/drivers/fidel_as12.cpp",
+ MAME_DIR .. "src/mame/drivers/fidel_card.cpp",
+ MAME_DIR .. "src/mame/drivers/fidel_cc10.cpp",
+ MAME_DIR .. "src/mame/drivers/fidel_cc7.cpp",
+ MAME_DIR .. "src/mame/drivers/fidel_chesster.cpp",
+ MAME_DIR .. "src/mame/drivers/fidel_csc.cpp",
+ MAME_DIR .. "src/mame/drivers/fidel_dames.cpp",
+ MAME_DIR .. "src/mame/drivers/fidel_desdis.cpp",
+ MAME_DIR .. "src/mame/drivers/fidel_eag68k.cpp",
+ MAME_DIR .. "src/mame/drivers/fidel_elite.cpp",
+ MAME_DIR .. "src/mame/drivers/fidel_excel.cpp",
+ MAME_DIR .. "src/mame/drivers/fidel_phantom.cpp",
+ MAME_DIR .. "src/mame/drivers/fidel_sc12.cpp",
+ MAME_DIR .. "src/mame/drivers/fidel_sc6.cpp",
+ MAME_DIR .. "src/mame/drivers/fidel_sc8.cpp",
+ MAME_DIR .. "src/mame/drivers/fidel_sc9.cpp",
+ MAME_DIR .. "src/mame/drivers/fidel_vcc.cpp",
+ MAME_DIR .. "src/mame/drivers/fidel_vsc.cpp",
+
+ MAME_DIR .. "src/mame/drivers/novagbase.cpp",
+ MAME_DIR .. "src/mame/includes/novagbase.h",
+ MAME_DIR .. "src/mame/drivers/novag_cforte.cpp",
+ MAME_DIR .. "src/mame/drivers/novag_delta1.cpp",
+ MAME_DIR .. "src/mame/drivers/novag_diablo.cpp",
+ MAME_DIR .. "src/mame/drivers/novag_presto.cpp",
+ MAME_DIR .. "src/mame/drivers/novag_scon.cpp",
+ MAME_DIR .. "src/mame/drivers/novag_sexpert.cpp",
}
createMESSProjects(_target, _subtarget, "chromatics")
@@ -1898,13 +1927,6 @@ files {
MAME_DIR .. "src/mame/machine/prof80mmu.h",
}
-createMESSProjects(_target, _subtarget, "cxg")
-files {
- MAME_DIR .. "src/mame/drivers/cxgbase.cpp",
- MAME_DIR .. "src/mame/includes/cxgbase.h",
- MAME_DIR .. "src/mame/drivers/cxg_ch2001.cpp",
-}
-
createMESSProjects(_target, _subtarget, "cybiko")
files {
MAME_DIR .. "src/mame/drivers/cybiko.cpp",
@@ -2130,30 +2152,6 @@ files {
MAME_DIR .. "src/mame/audio/cmi01a.h",
}
-createMESSProjects(_target, _subtarget, "fidelity")
-files {
- MAME_DIR .. "src/mame/drivers/fidelbase.cpp",
- MAME_DIR .. "src/mame/includes/fidelbase.h",
- MAME_DIR .. "src/mame/drivers/fidel_as12.cpp",
- MAME_DIR .. "src/mame/drivers/fidel_card.cpp",
- MAME_DIR .. "src/mame/drivers/fidel_cc10.cpp",
- MAME_DIR .. "src/mame/drivers/fidel_cc7.cpp",
- MAME_DIR .. "src/mame/drivers/fidel_chesster.cpp",
- MAME_DIR .. "src/mame/drivers/fidel_csc.cpp",
- MAME_DIR .. "src/mame/drivers/fidel_dames.cpp",
- MAME_DIR .. "src/mame/drivers/fidel_desdis.cpp",
- MAME_DIR .. "src/mame/drivers/fidel_eag68k.cpp",
- MAME_DIR .. "src/mame/drivers/fidel_elite.cpp",
- MAME_DIR .. "src/mame/drivers/fidel_excel.cpp",
- MAME_DIR .. "src/mame/drivers/fidel_phantom.cpp",
- MAME_DIR .. "src/mame/drivers/fidel_sc12.cpp",
- MAME_DIR .. "src/mame/drivers/fidel_sc6.cpp",
- MAME_DIR .. "src/mame/drivers/fidel_sc8.cpp",
- MAME_DIR .. "src/mame/drivers/fidel_sc9.cpp",
- MAME_DIR .. "src/mame/drivers/fidel_vcc.cpp",
- MAME_DIR .. "src/mame/drivers/fidel_vsc.cpp",
-}
-
createMESSProjects(_target, _subtarget, "force")
files {
MAME_DIR .. "src/mame/drivers/miniforce.cpp",
@@ -2741,14 +2739,6 @@ files {
createMESSProjects(_target, _subtarget, "novag")
files {
- MAME_DIR .. "src/mame/drivers/novagbase.cpp",
- MAME_DIR .. "src/mame/includes/novagbase.h",
- MAME_DIR .. "src/mame/drivers/novag_cforte.cpp",
- MAME_DIR .. "src/mame/drivers/novag_delta1.cpp",
- MAME_DIR .. "src/mame/drivers/novag_diablo.cpp",
- MAME_DIR .. "src/mame/drivers/novag_presto.cpp",
- MAME_DIR .. "src/mame/drivers/novag_scon.cpp",
- MAME_DIR .. "src/mame/drivers/novag_sexpert.cpp",
MAME_DIR .. "src/mame/drivers/mk1.cpp",
MAME_DIR .. "src/mame/drivers/mk2.cpp",
MAME_DIR .. "src/mame/drivers/ssystem3.cpp",
diff --git a/src/mame/drivers/cking_master.cpp b/src/mame/drivers/cking_master.cpp
index f7b4f140139..34a8cedfcbb 100644
--- a/src/mame/drivers/cking_master.cpp
+++ b/src/mame/drivers/cking_master.cpp
@@ -3,7 +3,7 @@
// thanks-to:Berger
/******************************************************************************
*
-* cking_master.cpp, subdriver of ckingbase.cpp
+* cking_master.cpp, subdriver of machine/chessbase.cpp
TODO:
- 1 WAIT CLK per M1, workaround with z80_set_cycle_tables is possible
@@ -21,7 +21,7 @@ Master: (yes, it's plainly named "Master")
******************************************************************************/
#include "emu.h"
-#include "includes/ckingbase.h"
+#include "includes/chessbase.h"
#include "cpu/z80/z80.h"
#include "machine/bankdev.h"
@@ -35,11 +35,13 @@ Master: (yes, it's plainly named "Master")
namespace {
-class master_state : public ckingbase_state
+class master_state : public chessbase_state
{
public:
master_state(const machine_config &mconfig, device_type type, const char *tag) :
- ckingbase_state(mconfig, type, tag),
+ chessbase_state(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_irq_on(*this, "irq_on"),
m_dac(*this, "dac"),
m_mainmap(*this, "mainmap")
{ }
@@ -51,9 +53,15 @@ public:
private:
// devices/pointers
+ required_device<cpu_device> m_maincpu;
+ required_device<timer_device> m_irq_on;
required_device<dac_2bit_binary_weighted_ones_complement_device> m_dac;
required_device<address_map_bank_device> m_mainmap;
+ // periodic interrupts
+ template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(Line, ASSERT_LINE); }
+ template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(Line, CLEAR_LINE); }
+
// address maps
void main_map(address_map &map);
void main_trampoline(address_map &map);
@@ -156,7 +164,7 @@ void master_state::main_trampoline(address_map &map)
******************************************************************************/
static INPUT_PORTS_START( master )
- PORT_INCLUDE( cking_cb_buttons )
+ PORT_INCLUDE( generic_cb_buttons )
PORT_START("IN.8")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Change Position")
@@ -197,7 +205,7 @@ void master_state::master(machine_config &config)
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(22870)); // active for 22.87us
TIMER(config, "irq_off").configure_periodic(FUNC(master_state::irq_off<INPUT_LINE_IRQ0>), irq_period);
- TIMER(config, "display_decay").configure_periodic(FUNC(ckingbase_state::display_decay_tick), attotime::from_msec(1));
+ TIMER(config, "display_decay").configure_periodic(FUNC(master_state::display_decay_tick), attotime::from_msec(1));
config.set_default_layout(layout_ck_master);
/* sound hardware */
diff --git a/src/mame/drivers/ckingbase.cpp b/src/mame/drivers/ckingbase.cpp
deleted file mode 100644
index e4c01f59a3b..00000000000
--- a/src/mame/drivers/ckingbase.cpp
+++ /dev/null
@@ -1,219 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:hap
-/******************************************************************************
-
-Chess King chess computer driver base class
-
-NOTE: MAME doesn't include a generalized implementation for boardpieces yet,
-greatly affecting user playability of emulated electronic board games.
-As workaround for the chess games, use an external chess GUI on the side,
-such as Arena(in editmode).
-
-******************************************************************************/
-
-#include "emu.h"
-#include "includes/ckingbase.h"
-
-
-// machine start/reset
-
-void ckingbase_state::machine_start()
-{
- // resolve handlers
- m_out_x.resolve();
- m_out_a.resolve();
- m_out_digit.resolve();
-
- // zerofill
- memset(m_display_state, 0, sizeof(m_display_state));
- memset(m_display_decay, 0, sizeof(m_display_decay));
- memset(m_display_segmask, 0, sizeof(m_display_segmask));
-
- m_inp_mux = 0;
- m_led_select = 0;
- m_led_data = 0;
-
- // register for savestates
- save_item(NAME(m_display_maxy));
- save_item(NAME(m_display_maxx));
- save_item(NAME(m_display_wait));
-
- save_item(NAME(m_display_state));
- save_item(NAME(m_display_decay));
- save_item(NAME(m_display_segmask));
-
- save_item(NAME(m_inp_mux));
- save_item(NAME(m_led_select));
- save_item(NAME(m_led_data));
-}
-
-void ckingbase_state::machine_reset()
-{
-}
-
-
-/***************************************************************************
- Helper Functions
-***************************************************************************/
-
-// The device may strobe the outputs very fast, it is unnoticeable to the user.
-// To prevent flickering here, we need to simulate a decay.
-
-void ckingbase_state::display_update()
-{
- for (int y = 0; y < m_display_maxy; y++)
- {
- u32 active_state = 0;
-
- for (int x = 0; x <= m_display_maxx; x++)
- {
- // turn on powered segments
- if (m_display_state[y] >> x & 1)
- m_display_decay[y][x] = m_display_wait;
-
- // determine active state
- u32 ds = (m_display_decay[y][x] != 0) ? 1 : 0;
- active_state |= (ds << x);
-
- // output to y.x, or y.a when always-on
- if (x != m_display_maxx)
- m_out_x[y][x] = ds;
- else
- m_out_a[y] = ds;
- }
-
- // output to digity
- if (m_display_segmask[y] != 0)
- m_out_digit[y] = active_state & m_display_segmask[y];
- }
-}
-
-TIMER_DEVICE_CALLBACK_MEMBER(ckingbase_state::display_decay_tick)
-{
- // slowly turn off unpowered segments
- for (int y = 0; y < m_display_maxy; y++)
- for (int x = 0; x <= m_display_maxx; x++)
- if (m_display_decay[y][x] != 0)
- m_display_decay[y][x]--;
-
- display_update();
-}
-
-void ckingbase_state::set_display_size(int maxx, int maxy)
-{
- m_display_maxx = maxx;
- m_display_maxy = maxy;
-}
-
-void ckingbase_state::display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update)
-{
- set_display_size(maxx, maxy);
-
- // update current state
- u32 mask = (1 << maxx) - 1;
- for (int y = 0; y < maxy; y++)
- m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0;
-
- if (update)
- display_update();
-}
-
-
-// generic input handlers
-
-u16 ckingbase_state::read_inputs(int columns)
-{
- u16 ret = 0;
-
- // read selected input rows
- for (int i = 0; i < columns; i++)
- if (m_inp_mux >> i & 1)
- ret |= m_inp_matrix[i]->read();
-
- return ret;
-}
-
-
-// chessboard generic inputs
-
-INPUT_PORTS_START( cking_cb_buttons )
- PORT_START("IN.0")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
-
- PORT_START("IN.1")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
-
- PORT_START("IN.2")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
-
- PORT_START("IN.3")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
-
- PORT_START("IN.4")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
-
- PORT_START("IN.5")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
-
- PORT_START("IN.6")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
-
- PORT_START("IN.7")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
-INPUT_PORTS_END
diff --git a/src/mame/drivers/cxg_ch2001.cpp b/src/mame/drivers/cxg_ch2001.cpp
index e7de8598941..b0da63f1c0d 100644
--- a/src/mame/drivers/cxg_ch2001.cpp
+++ b/src/mame/drivers/cxg_ch2001.cpp
@@ -3,7 +3,7 @@
// thanks-to:Berger
/******************************************************************************
*
-* cxg_ch2001.cpp, subdriver of cxgbase.cpp
+* cxg_ch2001.cpp, subdriver of machine/chessbase.cpp
*******************************************************************************
@@ -15,9 +15,10 @@ Chess 2001:
******************************************************************************/
#include "emu.h"
-#include "includes/cxgbase.h"
+#include "includes/chessbase.h"
#include "cpu/z80/z80.h"
+#include "sound/dac.h"
#include "sound/volt_reg.h"
#include "speaker.h"
@@ -27,11 +28,14 @@ Chess 2001:
namespace {
-class ch2001_state : public cxgbase_state
+class ch2001_state : public chessbase_state
{
public:
ch2001_state(const machine_config &mconfig, device_type type, const char *tag) :
- cxgbase_state(mconfig, type, tag),
+ chessbase_state(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_irq_on(*this, "irq_on"),
+ m_dac(*this, "dac"),
m_speaker_off(*this, "speaker_off")
{ }
@@ -40,13 +44,20 @@ public:
private:
// devices/pointers
+ required_device<cpu_device> m_maincpu;
+ required_device<timer_device> m_irq_on;
+ required_device<dac_bit_interface> m_dac;
required_device<timer_device> m_speaker_off;
- // address maps
- void main_map(address_map &map);
+ // periodic interrupts
+ template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(Line, ASSERT_LINE); }
+ template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(Line, CLEAR_LINE); }
TIMER_DEVICE_CALLBACK_MEMBER(speaker_off) { m_dac->write(0); }
+ // address maps
+ void main_map(address_map &map);
+
// I/O handlers
DECLARE_WRITE8_MEMBER(speaker_w);
DECLARE_WRITE8_MEMBER(leds_w);
@@ -108,7 +119,7 @@ void ch2001_state::main_map(address_map &map)
******************************************************************************/
static INPUT_PORTS_START( ch2001 )
- PORT_INCLUDE( cxg_cb_magnets )
+ PORT_INCLUDE( generic_cb_magnets )
PORT_START("IN.8")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Black")
@@ -150,7 +161,7 @@ void ch2001_state::ch2001(machine_config &config)
TIMER(config, m_speaker_off).configure_generic(FUNC(ch2001_state::speaker_off));
- TIMER(config, "display_decay").configure_periodic(FUNC(cxgbase_state::display_decay_tick), attotime::from_msec(1));
+ TIMER(config, "display_decay").configure_periodic(FUNC(ch2001_state::display_decay_tick), attotime::from_msec(1));
config.set_default_layout(layout_cxg_ch2001);
/* sound hardware */
diff --git a/src/mame/drivers/fidel_as12.cpp b/src/mame/drivers/fidel_as12.cpp
index dc7e387194a..ab58c5f977b 100644
--- a/src/mame/drivers/fidel_as12.cpp
+++ b/src/mame/drivers/fidel_as12.cpp
@@ -3,7 +3,7 @@
// thanks-to:yoyo_chessboard
/******************************************************************************
*
-* fidel_as12.cpp, subdriver of fidelbase.cpp
+* fidel_as12.cpp, subdriver of machine/fidelbase.cpp, machine/chessbase.cpp
*******************************************************************************
@@ -120,7 +120,7 @@ void as12_state::main_map(address_map &map)
static INPUT_PORTS_START( as12 )
PORT_INCLUDE( fidel_cpu_div_4 )
- PORT_INCLUDE( fidel_cb_magnets )
+ PORT_INCLUDE( generic_cb_magnets )
PORT_START("IN.8")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("RV / Pawn")
diff --git a/src/mame/drivers/fidel_card.cpp b/src/mame/drivers/fidel_card.cpp
index 4275ec90e48..31988ea00ed 100644
--- a/src/mame/drivers/fidel_card.cpp
+++ b/src/mame/drivers/fidel_card.cpp
@@ -2,7 +2,7 @@
// copyright-holders:Kevin Horton,Jonathan Gevaryahu,Sandro Ronco,hap
/******************************************************************************
*
-* fidel_card.cpp, subdriver of fidelbase.cpp
+* fidel_card.cpp, subdriver of machine/fidelbase.cpp, machine/chessbase.cpp
Fidelity electronic card games
- *Bridge Challenger (BRC)
diff --git a/src/mame/drivers/fidel_cc10.cpp b/src/mame/drivers/fidel_cc10.cpp
index 516952e8ad1..e7cb805ffbd 100644
--- a/src/mame/drivers/fidel_cc10.cpp
+++ b/src/mame/drivers/fidel_cc10.cpp
@@ -3,7 +3,7 @@
// thanks-to:Berger
/******************************************************************************
*
-* fidel_cc10.cpp, subdriver of fidelbase.cpp
+* fidel_cc10.cpp, subdriver of machine/fidelbase.cpp, machine/chessbase.cpp
*******************************************************************************
diff --git a/src/mame/drivers/fidel_cc7.cpp b/src/mame/drivers/fidel_cc7.cpp
index ec9cc01639d..a2b4109b99e 100644
--- a/src/mame/drivers/fidel_cc7.cpp
+++ b/src/mame/drivers/fidel_cc7.cpp
@@ -3,7 +3,7 @@
// thanks-to:Berger
/******************************************************************************
*
-* fidel_cc7.cpp, subdriver of fidelbase.cpp
+* fidel_cc7.cpp, subdriver of machine/fidelbase.cpp, machine/chessbase.cpp
*******************************************************************************
diff --git a/src/mame/drivers/fidel_chesster.cpp b/src/mame/drivers/fidel_chesster.cpp
index 9fe22cd0844..579958826d8 100644
--- a/src/mame/drivers/fidel_chesster.cpp
+++ b/src/mame/drivers/fidel_chesster.cpp
@@ -3,7 +3,7 @@
// thanks-to:yoyo_chessboard
/******************************************************************************
*
-* fidel_chesster.cpp, subdriver of fidelbase.cpp
+* fidel_chesster.cpp, subdriver of machine/fidelbase.cpp, machine/chessbase.cpp
*******************************************************************************
@@ -122,7 +122,7 @@ void chesster_state::main_map(address_map &map)
******************************************************************************/
static INPUT_PORTS_START( chesster )
- PORT_INCLUDE( fidel_cb_buttons )
+ PORT_INCLUDE( generic_cb_buttons )
PORT_START("IN.8")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("Clear")
diff --git a/src/mame/drivers/fidel_csc.cpp b/src/mame/drivers/fidel_csc.cpp
index 9da346e3ee7..0ad9af0057e 100644
--- a/src/mame/drivers/fidel_csc.cpp
+++ b/src/mame/drivers/fidel_csc.cpp
@@ -3,7 +3,7 @@
// thanks-to:Berger,yoyo_chessboard
/******************************************************************************
*
-* fidel_csc.cpp, subdriver of fidelbase.cpp
+* fidel_csc.cpp, subdriver of machine/fidelbase.cpp, machine/chessbase.cpp
Fidelity CSC(and derived) hardware
- Champion Sensory Chess Challenger
@@ -421,7 +421,7 @@ void csc_state::rsc_map(address_map &map)
******************************************************************************/
static INPUT_PORTS_START( csc )
- PORT_INCLUDE( fidel_cb_buttons )
+ PORT_INCLUDE( generic_cb_buttons )
PORT_MODIFY("IN.0")
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_SPACE) PORT_NAME("Speaker")
@@ -470,7 +470,7 @@ static INPUT_PORTS_START( su9 )
INPUT_PORTS_END
static INPUT_PORTS_START( rsc )
- PORT_INCLUDE( fidel_cb_buttons )
+ PORT_INCLUDE( generic_cb_buttons )
PORT_START("IN.8")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("ST")
diff --git a/src/mame/drivers/fidel_dames.cpp b/src/mame/drivers/fidel_dames.cpp
index 24df971134b..9cc7cd2ec04 100644
--- a/src/mame/drivers/fidel_dames.cpp
+++ b/src/mame/drivers/fidel_dames.cpp
@@ -3,7 +3,7 @@
// thanks-to:yoyo_chessboard
/******************************************************************************
*
-* fidel_dames.cpp, subdriver of fidelbase.cpp
+* fidel_dames.cpp, subdriver of machine/fidelbase.cpp, machine/chessbase.cpp
*******************************************************************************
@@ -112,7 +112,7 @@ void dsc_state::main_map(address_map &map)
******************************************************************************/
static INPUT_PORTS_START( dsc )
- PORT_INCLUDE( fidel_cb_buttons )
+ PORT_INCLUDE( generic_cb_buttons )
PORT_MODIFY("IN.4")
PORT_BIT(0x8f, IP_ACTIVE_HIGH, IPT_UNUSED)
diff --git a/src/mame/drivers/fidel_desdis.cpp b/src/mame/drivers/fidel_desdis.cpp
index ab8923bf35f..ce7c72626a8 100644
--- a/src/mame/drivers/fidel_desdis.cpp
+++ b/src/mame/drivers/fidel_desdis.cpp
@@ -3,7 +3,7 @@
// thanks-to:Berger,yoyo_chessboard
/******************************************************************************
*
-* fidel_desdis.cpp, subdriver of fidelbase.cpp
+* fidel_desdis.cpp, subdriver of machine/fidelbase.cpp, machine/chessbase.cpp
Fidelity Designer Display series, 6502 and 68000
(6502-based displayless Designer is in fidel_excel.cpp)
@@ -230,7 +230,7 @@ void desmas_state::fdes2325_map(address_map &map)
******************************************************************************/
static INPUT_PORTS_START( desdis )
- PORT_INCLUDE( fidel_cb_buttons )
+ PORT_INCLUDE( generic_cb_buttons )
PORT_START("IN.8")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("Clear")
diff --git a/src/mame/drivers/fidel_eag68k.cpp b/src/mame/drivers/fidel_eag68k.cpp
index 306f98d4640..1634c6d8a2d 100644
--- a/src/mame/drivers/fidel_eag68k.cpp
+++ b/src/mame/drivers/fidel_eag68k.cpp
@@ -3,7 +3,7 @@
// thanks-to:Berger,yoyo_chessboard
/******************************************************************************
*
-* fidel_eag68k.cpp, subdriver of fidelbase.cpp
+* fidel_eag68k.cpp, subdriver of machine/fidelbase.cpp, machine/chessbase.cpp
Fidelity 68000-based Elite Avant Garde driver
For 6502-based EAG, see fidel_elite.cpp
@@ -391,7 +391,7 @@ void eag_state::eagv5_slave_map(address_map &map)
******************************************************************************/
static INPUT_PORTS_START( excel68k )
- PORT_INCLUDE( fidel_cb_buttons )
+ PORT_INCLUDE( generic_cb_buttons )
PORT_START("IN.8")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("Clear")
@@ -406,7 +406,7 @@ INPUT_PORTS_END
static INPUT_PORTS_START( eag )
- PORT_INCLUDE( fidel_cb_magnets )
+ PORT_INCLUDE( generic_cb_magnets )
PORT_MODIFY("IN.0")
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("CL")
diff --git a/src/mame/drivers/fidel_elite.cpp b/src/mame/drivers/fidel_elite.cpp
index 81fc0c11fa2..e7c0b7aa2ba 100644
--- a/src/mame/drivers/fidel_elite.cpp
+++ b/src/mame/drivers/fidel_elite.cpp
@@ -3,7 +3,7 @@
// thanks-to:Berger
/******************************************************************************
*
-* fidel_elite.cpp, subdriver of fidelbase.cpp
+* fidel_elite.cpp, subdriver of machine/fidelbase.cpp, machine/chessbase.cpp
Fidelity Elite A/S series hardware (EAS, EAG, PC)
see fidel_eag68k.cpp for 68000-based EAG hardware
@@ -11,10 +11,12 @@ see fidel_eag68k.cpp for 68000-based EAG hardware
*******************************************************************************
Elite A/S Challenger (EAS)
+---------------------------------
This came out in 1982. 2 program updates were released in 1983 and 1984,
named Budapest and Glasgow, places where Fidelity won chess computer matches.
A/S stands for auto sensory, it's the 1st Fidelity board with magnet sensors.
----------------------------------
+The magnetic chessboard was licensed from AVE Micro Systems, in fact it's the
+exact same one as in AVE's ARB.
8*8 magnet sensors, 11 buttons, 8*(8+1) LEDs + 4*7seg LEDs
R65C02P4 or R6502BP CPU, default frequency 3MHz*
@@ -247,7 +249,7 @@ void elite_state::pc_map(address_map &map)
static INPUT_PORTS_START( eas )
PORT_INCLUDE( fidel_cpu_div_4 )
- PORT_INCLUDE( fidel_cb_magnets )
+ PORT_INCLUDE( generic_cb_magnets )
PORT_MODIFY("IN.0")
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("DM")
@@ -271,7 +273,7 @@ INPUT_PORTS_END
static INPUT_PORTS_START( eag )
PORT_INCLUDE( fidel_cpu_div_4 )
- PORT_INCLUDE( fidel_cb_magnets )
+ PORT_INCLUDE( generic_cb_magnets )
PORT_MODIFY("IN.0")
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("CL")
diff --git a/src/mame/drivers/fidel_excel.cpp b/src/mame/drivers/fidel_excel.cpp
index e1436f46669..c8bfeaa321b 100644
--- a/src/mame/drivers/fidel_excel.cpp
+++ b/src/mame/drivers/fidel_excel.cpp
@@ -3,7 +3,7 @@
// thanks-to:Berger,yoyo_chessboard
/******************************************************************************
*
-* fidel_vsc.cpp, subdriver of fidelbase.cpp
+* fidel_vsc.cpp, subdriver of machine/fidelbase.cpp, machine/chessbase.cpp
Fidelity Excellence series hardware
(for Excel 68000, see fidel_eag68k.cpp)
@@ -162,7 +162,7 @@ public:
void fdes2100(machine_config &config);
void fdes2000(machine_config &config);
- DECLARE_INPUT_CHANGED_MEMBER(lan_bankswitch);
+ DECLARE_INPUT_CHANGED_MEMBER(speech_bankswitch);
private:
// address maps
@@ -182,7 +182,7 @@ private:
// misc handlers
-INPUT_CHANGED_MEMBER(excel_state::lan_bankswitch)
+INPUT_CHANGED_MEMBER(excel_state::speech_bankswitch)
{
// tied to speech ROM highest bits
m_speech->force_update();
@@ -289,7 +289,7 @@ void excel_state::fexcelb_map(address_map &map)
******************************************************************************/
static INPUT_PORTS_START( fexcelb )
- PORT_INCLUDE( fidel_cb_buttons )
+ PORT_INCLUDE( generic_cb_buttons )
PORT_START("IN.8")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("Clear")
@@ -306,7 +306,7 @@ static INPUT_PORTS_START( fexcelv )
PORT_INCLUDE( fexcelb )
PORT_START("IN.9")
- PORT_CONFNAME( 0x03, 0x00, DEF_STR( Language ) ) PORT_CHANGED_MEMBER(DEVICE_SELF, excel_state, lan_bankswitch, 0)
+ PORT_CONFNAME( 0x03, 0x00, DEF_STR( Language ) ) PORT_CHANGED_MEMBER(DEVICE_SELF, excel_state, speech_bankswitch, 0)
PORT_CONFSETTING( 0x00, DEF_STR( English ) )
PORT_CONFSETTING( 0x01, DEF_STR( German ) )
PORT_CONFSETTING( 0x02, DEF_STR( French ) )
diff --git a/src/mame/drivers/fidel_phantom.cpp b/src/mame/drivers/fidel_phantom.cpp
index c21bba2f4ae..777c826dd1f 100644
--- a/src/mame/drivers/fidel_phantom.cpp
+++ b/src/mame/drivers/fidel_phantom.cpp
@@ -2,7 +2,7 @@
// copyright-holders:hap
/******************************************************************************
*
-* fidel_phantom.cpp, subdriver of fidelbase.cpp
+* fidel_phantom.cpp, subdriver of machine/fidelbase.cpp, machine/chessbase.cpp
TODO:
- everything, this is a skeleton driver
@@ -93,7 +93,7 @@ void phantom_state::main_map(address_map &map)
******************************************************************************/
static INPUT_PORTS_START( fphantom )
- PORT_INCLUDE( fidel_cb_buttons )
+ PORT_INCLUDE( generic_cb_buttons )
INPUT_PORTS_END
diff --git a/src/mame/drivers/fidel_sc12.cpp b/src/mame/drivers/fidel_sc12.cpp
index 26c9c528998..643c5f11a56 100644
--- a/src/mame/drivers/fidel_sc12.cpp
+++ b/src/mame/drivers/fidel_sc12.cpp
@@ -3,7 +3,7 @@
// thanks-to:Berger,yoyo_chessboard
/******************************************************************************
*
-* fidel_sc12.cpp, subdriver of fidelbase.cpp
+* fidel_sc12.cpp, subdriver of machine/fidelbase.cpp, machine/chessbase.cpp
*******************************************************************************
@@ -151,13 +151,13 @@ INPUT_PORTS_END
static INPUT_PORTS_START( sc12 )
PORT_INCLUDE( fidel_cpu_div_2 )
- PORT_INCLUDE( fidel_cb_buttons )
+ PORT_INCLUDE( generic_cb_buttons )
PORT_INCLUDE( sc12_sidepanel )
INPUT_PORTS_END
static INPUT_PORTS_START( sc12b )
PORT_INCLUDE( fidel_cpu_div_4 )
- PORT_INCLUDE( fidel_cb_buttons )
+ PORT_INCLUDE( generic_cb_buttons )
PORT_INCLUDE( sc12_sidepanel )
INPUT_PORTS_END
diff --git a/src/mame/drivers/fidel_sc6.cpp b/src/mame/drivers/fidel_sc6.cpp
index c9ec0053fda..4fc31106a03 100644
--- a/src/mame/drivers/fidel_sc6.cpp
+++ b/src/mame/drivers/fidel_sc6.cpp
@@ -3,7 +3,7 @@
// thanks-to:yoyo_chessboard
/******************************************************************************
*
-* fidel_sc6.cpp, subdriver of fidelbase.cpp
+* fidel_sc6.cpp, subdriver of machine/fidelbase.cpp, machine/chessbase.cpp
*******************************************************************************
@@ -155,7 +155,7 @@ void sc6_state::main_map(address_map &map)
******************************************************************************/
static INPUT_PORTS_START( sc6 )
- PORT_INCLUDE( fidel_cb_buttons )
+ PORT_INCLUDE( generic_cb_buttons )
PORT_START("IN.8")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("RV / Pawn")
diff --git a/src/mame/drivers/fidel_sc8.cpp b/src/mame/drivers/fidel_sc8.cpp
index 307bd629b43..f0fd9772d5a 100644
--- a/src/mame/drivers/fidel_sc8.cpp
+++ b/src/mame/drivers/fidel_sc8.cpp
@@ -3,7 +3,7 @@
// thanks-to:yoyo_chessboard
/******************************************************************************
*
-* fidel_sc8.cpp, subdriver of fidelbase.cpp
+* fidel_sc8.cpp, subdriver of machine/fidelbase.cpp, machine/chessbase.cpp
*******************************************************************************
@@ -100,7 +100,7 @@ void scc_state::main_io(address_map &map)
******************************************************************************/
static INPUT_PORTS_START( scc )
- PORT_INCLUDE( fidel_cb_buttons )
+ PORT_INCLUDE( generic_cb_buttons )
PORT_START("IN.8")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Pawn")
diff --git a/src/mame/drivers/fidel_sc9.cpp b/src/mame/drivers/fidel_sc9.cpp
index 5cf428496f6..b27bc985242 100644
--- a/src/mame/drivers/fidel_sc9.cpp
+++ b/src/mame/drivers/fidel_sc9.cpp
@@ -3,7 +3,7 @@
// thanks-to:Berger,yoyo_chessboard
/******************************************************************************
*
-* fidel_sc9.cpp, subdriver of fidelbase.cpp
+* fidel_sc9.cpp, subdriver of machine/fidelbase.cpp, machine/chessbase.cpp
*******************************************************************************
@@ -182,12 +182,12 @@ static INPUT_PORTS_START( sc9_sidepanel )
INPUT_PORTS_END
static INPUT_PORTS_START( sc9 )
- PORT_INCLUDE( fidel_cb_buttons )
+ PORT_INCLUDE( generic_cb_buttons )
PORT_INCLUDE( sc9_sidepanel )
INPUT_PORTS_END
static INPUT_PORTS_START( playmatic )
- PORT_INCLUDE( fidel_cb_magnets )
+ PORT_INCLUDE( generic_cb_magnets )
PORT_INCLUDE( sc9_sidepanel )
INPUT_PORTS_END
diff --git a/src/mame/drivers/fidel_vcc.cpp b/src/mame/drivers/fidel_vcc.cpp
index ebf52d0ec01..9d8b2285579 100644
--- a/src/mame/drivers/fidel_vcc.cpp
+++ b/src/mame/drivers/fidel_vcc.cpp
@@ -2,7 +2,7 @@
// copyright-holders:Kevin Horton,Jonathan Gevaryahu,Sandro Ronco,hap
/******************************************************************************
*
-* fidel_vcc.cpp, subdriver of fidelbase.cpp
+* fidel_vcc.cpp, subdriver of machine/fidelbase.cpp, machine/chessbase.cpp
Fidelity Voice Chess Challenger series hardware
- Voice Chess Challenger (VCC) (version A and B?)
diff --git a/src/mame/drivers/fidel_vsc.cpp b/src/mame/drivers/fidel_vsc.cpp
index eb2826a6731..9ff50770af8 100644
--- a/src/mame/drivers/fidel_vsc.cpp
+++ b/src/mame/drivers/fidel_vsc.cpp
@@ -2,7 +2,7 @@
// copyright-holders:Kevin Horton,Jonathan Gevaryahu,Sandro Ronco,hap
/******************************************************************************
*
-* fidel_vsc.cpp, subdriver of fidelbase.cpp
+* fidel_vsc.cpp, subdriver of machine/fidelbase.cpp, machine/chessbase.cpp
*******************************************************************************
@@ -325,7 +325,7 @@ void vsc_state::main_io(address_map &map)
******************************************************************************/
static INPUT_PORTS_START( vsc )
- PORT_INCLUDE( fidel_cb_buttons )
+ PORT_INCLUDE( generic_cb_buttons )
PORT_START("IN.8")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Pawn")
diff --git a/src/mame/drivers/fidelbase.cpp b/src/mame/drivers/fidelbase.cpp
index acf894f3325..955ee03f2eb 100644
--- a/src/mame/drivers/fidelbase.cpp
+++ b/src/mame/drivers/fidelbase.cpp
@@ -2,12 +2,7 @@
// copyright-holders:hap
/******************************************************************************
-Fidelity Electronics (mostly-)chess computer driver base class
-
-NOTE: MAME doesn't include a generalized implementation for boardpieces yet,
-greatly affecting user playability of emulated electronic board games.
-As workaround for the chess games, use an external chess GUI on the side,
-such as Arena(in editmode).
+Fidelity Electronics (mostly-)chess computers base driver
TODO: (see each driver for more specific)
- verify cpu speed and rom labels where uncertain
@@ -51,43 +46,21 @@ Program/data cartridges, for various boards, some cross-compatible:
void fidelbase_state::machine_start()
{
- // resolve handlers
- m_out_x.resolve();
- m_out_a.resolve();
- m_out_digit.resolve();
-
- // zerofill
- memset(m_display_state, 0, sizeof(m_display_state));
- memset(m_display_decay, 0, sizeof(m_display_decay));
- memset(m_display_segmask, 0, sizeof(m_display_segmask));
-
- m_inp_mux = 0;
- m_led_select = 0;
- m_led_data = 0;
- m_7seg_data = 0;
+ chessbase_state::machine_start();
+
+ // zerofill/register for savestates
m_speech_data = 0;
m_speech_bank = 0;
- // register for savestates
- save_item(NAME(m_display_maxy));
- save_item(NAME(m_display_maxx));
- save_item(NAME(m_display_wait));
-
- save_item(NAME(m_display_state));
- save_item(NAME(m_display_decay));
- save_item(NAME(m_display_segmask));
-
- save_item(NAME(m_div_status));
- save_item(NAME(m_inp_mux));
- save_item(NAME(m_led_select));
- save_item(NAME(m_led_data));
- save_item(NAME(m_7seg_data));
save_item(NAME(m_speech_data));
save_item(NAME(m_speech_bank));
+ save_item(NAME(m_div_status));
}
void fidelbase_state::machine_reset()
{
+ chessbase_state::machine_reset();
+
m_div_status = ~0;
}
@@ -96,95 +69,6 @@ void fidelbase_state::machine_reset()
Helper Functions
***************************************************************************/
-// The device may strobe the outputs very fast, it is unnoticeable to the user.
-// To prevent flickering here, we need to simulate a decay.
-
-void fidelbase_state::display_update()
-{
- for (int y = 0; y < m_display_maxy; y++)
- {
- u32 active_state = 0;
-
- for (int x = 0; x <= m_display_maxx; x++)
- {
- // turn on powered segments
- if (m_display_state[y] >> x & 1)
- m_display_decay[y][x] = m_display_wait;
-
- // determine active state
- u32 ds = (m_display_decay[y][x] != 0) ? 1 : 0;
- active_state |= (ds << x);
-
- // output to y.x, or y.a when always-on
- if (x != m_display_maxx)
- m_out_x[y][x] = ds;
- else
- m_out_a[y] = ds;
- }
-
- // output to digity
- if (m_display_segmask[y] != 0)
- m_out_digit[y] = active_state & m_display_segmask[y];
- }
-}
-
-TIMER_DEVICE_CALLBACK_MEMBER(fidelbase_state::display_decay_tick)
-{
- // slowly turn off unpowered segments
- for (int y = 0; y < m_display_maxy; y++)
- for (int x = 0; x <= m_display_maxx; x++)
- if (m_display_decay[y][x] != 0)
- m_display_decay[y][x]--;
-
- display_update();
-}
-
-void fidelbase_state::set_display_size(int maxx, int maxy)
-{
- m_display_maxx = maxx;
- m_display_maxy = maxy;
-}
-
-void fidelbase_state::set_display_segmask(u32 digits, u32 mask)
-{
- // set a segment mask per selected digit, but leave unselected ones alone
- for (int i = 0; i < 0x20; i++)
- {
- if (digits & 1)
- m_display_segmask[i] = mask;
- digits >>= 1;
- }
-}
-
-void fidelbase_state::display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update)
-{
- set_display_size(maxx, maxy);
-
- // update current state
- u32 mask = (1 << maxx) - 1;
- for (int y = 0; y < maxy; y++)
- m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0;
-
- if (update)
- display_update();
-}
-
-
-// generic input handlers
-
-u16 fidelbase_state::read_inputs(int columns)
-{
- u16 ret = 0;
-
- // read selected input rows
- for (int i = 0; i < columns; i++)
- if (m_inp_mux >> i & 1)
- ret |= m_inp_matrix[i]->read();
-
- return ret;
-}
-
-
// cartridge
DEVICE_IMAGE_LOAD_MEMBER(fidelbase_state, scc_cartridge)
@@ -265,170 +149,3 @@ INPUT_PORTS_START( fidel_cpu_div_4 )
PORT_CONFSETTING( 0x02, "2" )
PORT_CONFSETTING( 0x03, "4" )
INPUT_PORTS_END
-
-
-// chessboard generic inputs
-
-INPUT_PORTS_START( fidel_cb_buttons )
- PORT_START("IN.0")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
-
- PORT_START("IN.1")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
-
- PORT_START("IN.2")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
-
- PORT_START("IN.3")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
-
- PORT_START("IN.4")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
-
- PORT_START("IN.5")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
-
- PORT_START("IN.6")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
-
- PORT_START("IN.7")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
-INPUT_PORTS_END
-
-INPUT_PORTS_START( fidel_cb_magnets )
- PORT_START("IN.0")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
-
- PORT_START("IN.1")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
-
- PORT_START("IN.2")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
-
- PORT_START("IN.3")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
-
- PORT_START("IN.4")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
-
- PORT_START("IN.5")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
-
- PORT_START("IN.6")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
-
- PORT_START("IN.7")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
-INPUT_PORTS_END
diff --git a/src/mame/drivers/novag_cforte.cpp b/src/mame/drivers/novag_cforte.cpp
index f9c07de1920..ab4d980501d 100644
--- a/src/mame/drivers/novag_cforte.cpp
+++ b/src/mame/drivers/novag_cforte.cpp
@@ -3,7 +3,7 @@
// thanks-to:Berger
/******************************************************************************
*
-* novag_cforte.cpp, subdriver of novagbase.cpp
+* novag_cforte.cpp, subdriver of machine/novagbase.cpp, machine/chessbase.cpp
TODO:
- RS232 port?
@@ -162,7 +162,7 @@ void cforte_state::main_map(address_map &map)
******************************************************************************/
static INPUT_PORTS_START( cforte )
- PORT_INCLUDE( novag_cb_buttons )
+ PORT_INCLUDE( generic_cb_buttons )
PORT_MODIFY("IN.0")
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("New Game")
diff --git a/src/mame/drivers/novag_delta1.cpp b/src/mame/drivers/novag_delta1.cpp
index a2806b8b805..30e6e0880ec 100644
--- a/src/mame/drivers/novag_delta1.cpp
+++ b/src/mame/drivers/novag_delta1.cpp
@@ -3,7 +3,7 @@
// thanks-to:Berger
/******************************************************************************
*
-* novag_delta1.cpp, subdriver of novagbase.cpp
+* novag_delta1.cpp, subdriver of machine/novagbase.cpp, machine/chessbase.cpp
TODO:
- ccdelta1 doesn't work, goes bonkers when you press Enter. CPU core bug?
diff --git a/src/mame/drivers/novag_diablo.cpp b/src/mame/drivers/novag_diablo.cpp
index e4b21046f72..bcc52d3d776 100644
--- a/src/mame/drivers/novag_diablo.cpp
+++ b/src/mame/drivers/novag_diablo.cpp
@@ -3,7 +3,7 @@
// thanks-to:yoyo_chessboard
/******************************************************************************
*
-* novag_diablo.cpp, subdriver of novagbase.cpp
+* novag_diablo.cpp, subdriver of machine/novagbase.cpp, machine/chessbase.cpp
TODO:
- RS232 port (when connected, I'm only getting "New Game")
@@ -190,12 +190,12 @@ static INPUT_PORTS_START( diablo68k_sidepanel )
INPUT_PORTS_END
static INPUT_PORTS_START( diablo68k )
- PORT_INCLUDE( novag_cb_magnets )
+ PORT_INCLUDE( generic_cb_magnets )
PORT_INCLUDE( diablo68k_sidepanel )
INPUT_PORTS_END
static INPUT_PORTS_START( scorpio68k )
- PORT_INCLUDE( novag_cb_buttons )
+ PORT_INCLUDE( generic_cb_buttons )
PORT_INCLUDE( diablo68k_sidepanel )
INPUT_PORTS_END
diff --git a/src/mame/drivers/novag_presto.cpp b/src/mame/drivers/novag_presto.cpp
index 7b10225aea0..8b6e8c9262d 100644
--- a/src/mame/drivers/novag_presto.cpp
+++ b/src/mame/drivers/novag_presto.cpp
@@ -3,7 +3,7 @@
// thanks-to:Berger
/******************************************************************************
*
-* novag_presto.cpp, subdriver of novagbase.cpp
+* novag_presto.cpp, subdriver of machine/novagbase.cpp, machine/chessbase.cpp
TODO:
- is led handling correct? mux data needs to be auto cleared
@@ -126,7 +126,7 @@ READ8_MEMBER(presto_state::input_r)
******************************************************************************/
static INPUT_PORTS_START( presto )
- PORT_INCLUDE( novag_cb_buttons )
+ PORT_INCLUDE( generic_cb_buttons )
PORT_START("IN.8")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Black/White") // Octo calls it "Change Color"
diff --git a/src/mame/drivers/novag_scon.cpp b/src/mame/drivers/novag_scon.cpp
index 1867d1f38ee..78370a3a23d 100644
--- a/src/mame/drivers/novag_scon.cpp
+++ b/src/mame/drivers/novag_scon.cpp
@@ -2,7 +2,7 @@
// copyright-holders:hap
/******************************************************************************
*
-* novag_scon.cpp, subdriver of novagbase.cpp
+* novag_scon.cpp, subdriver of machine/novagbase.cpp, machine/chessbase.cpp
TODO:
- verify IRQ and beeper frequency
@@ -113,7 +113,7 @@ void scon_state::main_map(address_map &map)
******************************************************************************/
static INPUT_PORTS_START( scon )
- PORT_INCLUDE( novag_cb_buttons )
+ PORT_INCLUDE( generic_cb_buttons )
PORT_MODIFY("IN.0")
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("New Game")
diff --git a/src/mame/drivers/novag_sexpert.cpp b/src/mame/drivers/novag_sexpert.cpp
index d5f453216f8..e4209fecd74 100644
--- a/src/mame/drivers/novag_sexpert.cpp
+++ b/src/mame/drivers/novag_sexpert.cpp
@@ -3,7 +3,7 @@
// thanks-to:Berger
/******************************************************************************
*
-* novag_sexpert.cpp, subdriver of novagbase.cpp
+* novag_sexpert.cpp, subdriver of machine/novagbase.cpp, machine/chessbase.cpp
TODO:
- sforte irq active time (21.5us is too long)
@@ -286,12 +286,12 @@ static INPUT_PORTS_START( sexy_shared )
INPUT_PORTS_END
static INPUT_PORTS_START( sexpert )
- PORT_INCLUDE( novag_cb_magnets )
+ PORT_INCLUDE( generic_cb_magnets )
PORT_INCLUDE( sexy_shared )
INPUT_PORTS_END
static INPUT_PORTS_START( sforte )
- PORT_INCLUDE( novag_cb_buttons )
+ PORT_INCLUDE( generic_cb_buttons )
PORT_INCLUDE( sexy_shared )
INPUT_PORTS_END
diff --git a/src/mame/drivers/novagbase.cpp b/src/mame/drivers/novagbase.cpp
index b6ce9a8ec8a..6595de8e288 100644
--- a/src/mame/drivers/novagbase.cpp
+++ b/src/mame/drivers/novagbase.cpp
@@ -2,12 +2,7 @@
// copyright-holders:hap
/******************************************************************************
-Novag chess computer driver base class
-
-NOTE: MAME doesn't include a generalized implementation for boardpieces yet,
-greatly affecting user playability of emulated electronic board games.
-As workaround for the chess games, use an external chess GUI on the side,
-such as Arena(in editmode).
+Novag chess computers base driver
TODO:
- printer port
@@ -22,42 +17,19 @@ TODO:
void novagbase_state::machine_start()
{
- // resolve handlers
- m_out_x.resolve();
- m_out_a.resolve();
- m_out_digit.resolve();
-
- // zerofill
- memset(m_display_state, 0, sizeof(m_display_state));
- memset(m_display_decay, 0, sizeof(m_display_decay));
- memset(m_display_segmask, 0, sizeof(m_display_segmask));
+ chessbase_state::machine_start();
- m_inp_mux = 0;
- m_led_select = 0;
- m_led_data = 0;
- m_7seg_data = 0;
+ // zerofill/register for savestates
m_lcd_control = 0;
m_lcd_data = 0;
- // register for savestates
- save_item(NAME(m_display_maxy));
- save_item(NAME(m_display_maxx));
- save_item(NAME(m_display_wait));
-
- save_item(NAME(m_display_state));
- save_item(NAME(m_display_decay));
- save_item(NAME(m_display_segmask));
-
- save_item(NAME(m_inp_mux));
- save_item(NAME(m_led_select));
- save_item(NAME(m_led_data));
- save_item(NAME(m_7seg_data));
save_item(NAME(m_lcd_control));
save_item(NAME(m_lcd_data));
}
void novagbase_state::machine_reset()
{
+ chessbase_state::machine_reset();
}
@@ -65,80 +37,6 @@ void novagbase_state::machine_reset()
Helper Functions
***************************************************************************/
-// The device may strobe the outputs very fast, it is unnoticeable to the user.
-// To prevent flickering here, we need to simulate a decay.
-
-void novagbase_state::display_update()
-{
- for (int y = 0; y < m_display_maxy; y++)
- {
- u32 active_state = 0;
-
- for (int x = 0; x <= m_display_maxx; x++)
- {
- // turn on powered segments
- if (m_display_state[y] >> x & 1)
- m_display_decay[y][x] = m_display_wait;
-
- // determine active state
- u32 ds = (m_display_decay[y][x] != 0) ? 1 : 0;
- active_state |= (ds << x);
-
- // output to y.x, or y.a when always-on
- if (x != m_display_maxx)
- m_out_x[y][x] = ds;
- else
- m_out_a[y] = ds;
- }
-
- // output to digity
- if (m_display_segmask[y] != 0)
- m_out_digit[y] = active_state & m_display_segmask[y];
- }
-}
-
-TIMER_DEVICE_CALLBACK_MEMBER(novagbase_state::display_decay_tick)
-{
- // slowly turn off unpowered segments
- for (int y = 0; y < m_display_maxy; y++)
- for (int x = 0; x <= m_display_maxx; x++)
- if (m_display_decay[y][x] != 0)
- m_display_decay[y][x]--;
-
- display_update();
-}
-
-void novagbase_state::set_display_size(int maxx, int maxy)
-{
- m_display_maxx = maxx;
- m_display_maxy = maxy;
-}
-
-void novagbase_state::set_display_segmask(u32 digits, u32 mask)
-{
- // set a segment mask per selected digit, but leave unselected ones alone
- for (int i = 0; i < 0x20; i++)
- {
- if (digits & 1)
- m_display_segmask[i] = mask;
- digits >>= 1;
- }
-}
-
-void novagbase_state::display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update)
-{
- set_display_size(maxx, maxy);
-
- // update current state
- u32 mask = (1 << maxx) - 1;
- for (int y = 0; y < maxy; y++)
- m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0;
-
- if (update)
- display_update();
-}
-
-
// LCD
void novagbase_state::novag_lcd_palette(palette_device &palette) const
@@ -160,185 +58,3 @@ HD44780_PIXEL_UPDATE(novagbase_state::novag_lcd_pixel_update)
bitmap.pix16(1 + y, 1 + line*8*6 + pos*6 + x) = state ? 1 : 2;
}
}
-
-
-// generic input handlers
-
-u16 novagbase_state::read_inputs(int columns)
-{
- u16 ret = 0;
-
- // read selected input rows
- for (int i = 0; i < columns; i++)
- if (m_inp_mux >> i & 1)
- ret |= m_inp_matrix[i]->read();
-
- return ret;
-}
-
-
-// chessboard generic inputs
-
-INPUT_PORTS_START( novag_cb_buttons )
- PORT_START("IN.0")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
-
- PORT_START("IN.1")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
-
- PORT_START("IN.2")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
-
- PORT_START("IN.3")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
-
- PORT_START("IN.4")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
-
- PORT_START("IN.5")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
-
- PORT_START("IN.6")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
-
- PORT_START("IN.7")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
-INPUT_PORTS_END
-
-INPUT_PORTS_START( novag_cb_magnets )
- PORT_START("IN.0")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
-
- PORT_START("IN.1")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
-
- PORT_START("IN.2")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
-
- PORT_START("IN.3")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
-
- PORT_START("IN.4")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
-
- PORT_START("IN.5")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
-
- PORT_START("IN.6")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
-
- PORT_START("IN.7")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
- PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
-INPUT_PORTS_END
diff --git a/src/mame/includes/chessbase.h b/src/mame/includes/chessbase.h
new file mode 100644
index 00000000000..ae0304c853e
--- /dev/null
+++ b/src/mame/includes/chessbase.h
@@ -0,0 +1,69 @@
+// license:BSD-3-Clause
+// copyright-holders:hap
+/******************************************************************************
+*
+* Generic chess computers base driver
+* implementation is in machine/chessbase.cpp
+*
+******************************************************************************/
+
+#ifndef MAME_INCLUDES_CHESSBASE_H
+#define MAME_INCLUDES_CHESSBASE_H
+
+#pragma once
+
+#include "machine/timer.h"
+
+class chessbase_state : public driver_device
+{
+public:
+ chessbase_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
+ m_inp_matrix(*this, "IN.%u", 0),
+ m_out_x(*this, "%u.%u", 0U, 0U),
+ m_out_a(*this, "%u.a", 0U),
+ m_out_digit(*this, "digit%u", 0U),
+ m_display_wait(33),
+ m_display_maxy(1),
+ m_display_maxx(0)
+ { }
+
+ // devices/pointers
+ optional_ioport_array<16> m_inp_matrix; // max 16
+ output_finder<0x20, 0x20> m_out_x;
+ output_finder<0x20> m_out_a;
+ output_finder<0x20> m_out_digit;
+
+ // misc common
+ u16 m_inp_mux; // multiplexed keypad/leds mask
+ u16 m_led_select;
+ u16 m_led_data;
+ u32 m_7seg_data; // data for seg leds
+
+ u16 read_inputs(int columns);
+
+ // display common
+ int m_display_wait; // led/lamp off-delay in milliseconds (default 33ms)
+ int m_display_maxy; // display matrix number of rows
+ int m_display_maxx; // display matrix number of columns (max 31 for now)
+
+ u32 m_display_state[0x20]; // display matrix rows data (last bit is used for always-on)
+ u16 m_display_segmask[0x20]; // if not 0, display matrix row is a digit, mask indicates connected segments
+ u8 m_display_decay[0x20][0x20]; // (internal use)
+
+ TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
+ void display_update();
+ void set_display_size(int maxx, int maxy);
+ void set_display_segmask(u32 digits, u32 mask);
+ void display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update = true);
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+};
+
+
+INPUT_PORTS_EXTERN( generic_cb_buttons );
+INPUT_PORTS_EXTERN( generic_cb_magnets );
+
+#endif // MAME_INCLUDES_CHESSBASE_H
diff --git a/src/mame/includes/fidelbase.h b/src/mame/includes/fidelbase.h
index 1e2eca0fbde..8948eff3af1 100644
--- a/src/mame/includes/fidelbase.h
+++ b/src/mame/includes/fidelbase.h
@@ -2,7 +2,8 @@
// copyright-holders:hap
/******************************************************************************
*
-* Fidelity Electronics chess machines base class
+* Fidelity Electronics chess computers base driver
+* implementation is in machine/fidelbase.cpp
*
******************************************************************************/
@@ -11,6 +12,8 @@
#pragma once
+#include "includes/chessbase.h"
+
#include "machine/bankdev.h"
#include "machine/timer.h"
#include "sound/dac.h"
@@ -19,27 +22,20 @@
#include "bus/generic/carts.h"
#include "softlist.h"
-class fidelbase_state : public driver_device
+class fidelbase_state : public chessbase_state
{
public:
fidelbase_state(const machine_config &mconfig, device_type type, const char *tag) :
- driver_device(mconfig, type, tag),
+ chessbase_state(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_irq_on(*this, "irq_on"),
m_rombank(*this, "rombank"),
m_mainmap(*this, "mainmap"),
m_div_config(*this, "div_config"),
- m_inp_matrix(*this, "IN.%u", 0),
- m_out_x(*this, "%u.%u", 0U, 0U),
- m_out_a(*this, "%u.a", 0U),
- m_out_digit(*this, "digit%u", 0U),
m_speech(*this, "speech"),
m_speech_rom(*this, "speech"),
m_dac(*this, "dac"),
- m_cart(*this, "cartslot"),
- m_display_wait(33),
- m_display_maxy(1),
- m_display_maxx(0)
+ m_cart(*this, "cartslot")
{ }
// devices/pointers
@@ -48,25 +44,11 @@ public:
optional_memory_bank m_rombank;
optional_device<address_map_bank_device> m_mainmap;
optional_ioport m_div_config;
- optional_ioport_array<11> m_inp_matrix; // max 11
- output_finder<0x20, 0x20> m_out_x;
- output_finder<0x20> m_out_a;
- output_finder<0x20> m_out_digit;
optional_device<s14001a_device> m_speech;
optional_region_ptr<u8> m_speech_rom;
optional_device<dac_bit_interface> m_dac;
optional_device<generic_slot_device> m_cart;
- // misc common
- u16 m_inp_mux; // multiplexed keypad/leds mask
- u16 m_led_select;
- u16 m_led_data;
- u32 m_7seg_data; // data for seg leds
- u8 m_speech_data;
- u8 m_speech_bank; // speech rom higher address bits
-
- u16 read_inputs(int columns);
-
// cross-compatible cartridges(opening book modules)
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(scc_cartridge);
virtual DECLARE_READ8_MEMBER(cartridge_r);
@@ -78,6 +60,9 @@ public:
template<int Language> void init_language() { m_language = Language; }
int m_language;
+ u8 m_speech_data;
+ u8 m_speech_bank; // speech rom higher address bits
+
// periodic interrupts
template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(Line, ASSERT_LINE); }
template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(Line, CLEAR_LINE); }
@@ -89,21 +74,6 @@ public:
void div_trampoline(address_map &map);
u16 m_div_status;
- // display common
- int m_display_wait; // led/lamp off-delay in milliseconds (default 33ms)
- int m_display_maxy; // display matrix number of rows
- int m_display_maxx; // display matrix number of columns (max 31 for now)
-
- u32 m_display_state[0x20]; // display matrix rows data (last bit is used for always-on)
- u16 m_display_segmask[0x20]; // if not 0, display matrix row is a digit, mask indicates connected segments
- u8 m_display_decay[0x20][0x20]; // (internal use)
-
- TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
- void display_update();
- void set_display_size(int maxx, int maxy);
- void set_display_segmask(u32 digits, u32 mask);
- void display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update = true);
-
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
@@ -113,7 +83,4 @@ protected:
INPUT_PORTS_EXTERN( fidel_cpu_div_2 );
INPUT_PORTS_EXTERN( fidel_cpu_div_4 );
-INPUT_PORTS_EXTERN( fidel_cb_buttons );
-INPUT_PORTS_EXTERN( fidel_cb_magnets );
-
#endif // MAME_INCLUDES_FIDELBASE_H
diff --git a/src/mame/includes/novagbase.h b/src/mame/includes/novagbase.h
index e62b32c91ab..e5f3856953c 100644
--- a/src/mame/includes/novagbase.h
+++ b/src/mame/includes/novagbase.h
@@ -2,7 +2,8 @@
// copyright-holders:hap
/******************************************************************************
*
-* Novag chess machines base class
+* Novag chess computers base driver
+* implementation is in machine/novagbase.cpp
*
******************************************************************************/
@@ -11,30 +12,25 @@
#pragma once
+#include "includes/chessbase.h"
+
#include "machine/timer.h"
#include "sound/dac.h"
#include "sound/beep.h"
#include "video/hd44780.h"
#include "emupal.h"
-class novagbase_state : public driver_device
+class novagbase_state : public chessbase_state
{
public:
novagbase_state(const machine_config &mconfig, device_type type, const char *tag) :
- driver_device(mconfig, type, tag),
+ chessbase_state(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_irq_on(*this, "irq_on"),
m_rombank(*this, "rombank"),
m_beeper(*this, "beeper"),
m_dac(*this, "dac"),
- m_lcd(*this, "hd44780"),
- m_inp_matrix(*this, "IN.%u", 0),
- m_out_x(*this, "%u.%u", 0U, 0U),
- m_out_a(*this, "%u.a", 0U),
- m_out_digit(*this, "digit%u", 0U),
- m_display_wait(33),
- m_display_maxy(1),
- m_display_maxx(0)
+ m_lcd(*this, "hd44780")
{ }
// devices/pointers
@@ -44,20 +40,6 @@ public:
optional_device<beep_device> m_beeper;
optional_device<dac_bit_interface> m_dac;
optional_device<hd44780_device> m_lcd;
- optional_ioport_array<9> m_inp_matrix; // max 9
- output_finder<0x20, 0x20> m_out_x;
- output_finder<0x20> m_out_a;
- output_finder<0x20> m_out_digit;
-
- // misc common
- u16 m_inp_mux; // multiplexed keypad mask
- u16 m_led_select;
- u16 m_led_data;
- u8 m_7seg_data;
- u8 m_lcd_control;
- u8 m_lcd_data;
-
- u16 read_inputs(int columns);
// in case reset button is directly tied to maincpu reset pin
virtual DECLARE_INPUT_CHANGED_MEMBER(reset_button) { m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE); }
@@ -66,22 +48,11 @@ public:
template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(Line, ASSERT_LINE); }
template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(Line, CLEAR_LINE); }
- // display common
- int m_display_wait; // led/lamp off-delay in milliseconds (default 33ms)
- int m_display_maxy; // display matrix number of rows
- int m_display_maxx; // display matrix number of columns (max 31 for now)
-
- u32 m_display_state[0x20]; // display matrix rows data (last bit is used for always-on)
- u16 m_display_segmask[0x20]; // if not 0, display matrix row is a digit, mask indicates connected segments
- u8 m_display_decay[0x20][0x20]; // (internal use)
-
- void novag_lcd_palette(palette_device &palette) const;
- TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
+ // lcd common
HD44780_PIXEL_UPDATE(novag_lcd_pixel_update);
- void display_update();
- void set_display_size(int maxx, int maxy);
- void set_display_segmask(u32 digits, u32 mask);
- void display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update = true);
+ void novag_lcd_palette(palette_device &palette) const;
+ u8 m_lcd_control;
+ u8 m_lcd_data;
protected:
virtual void machine_start() override;
@@ -89,7 +60,4 @@ protected:
};
-INPUT_PORTS_EXTERN( novag_cb_buttons );
-INPUT_PORTS_EXTERN( novag_cb_magnets );
-
#endif // MAME_INCLUDES_NOVAGBASE_H
diff --git a/src/mame/drivers/cxgbase.cpp b/src/mame/machine/chessbase.cpp
index a62f6e5f94a..85453f3c785 100644
--- a/src/mame/drivers/cxgbase.cpp
+++ b/src/mame/machine/chessbase.cpp
@@ -2,8 +2,9 @@
// copyright-holders:hap
/******************************************************************************
-CXG* chess computer driver base class
-*later known as CXG Newcrest Technology Ltd.
+Generic chess computers base driver
+
+This file contains helpers for generic chessboard leds and input handling.
NOTE: MAME doesn't include a generalized implementation for boardpieces yet,
greatly affecting user playability of emulated electronic board games.
@@ -13,12 +14,12 @@ such as Arena(in editmode).
******************************************************************************/
#include "emu.h"
-#include "includes/cxgbase.h"
+#include "includes/chessbase.h"
// machine start/reset
-void cxgbase_state::machine_start()
+void chessbase_state::machine_start()
{
// resolve handlers
m_out_x.resolve();
@@ -33,6 +34,7 @@ void cxgbase_state::machine_start()
m_inp_mux = 0;
m_led_select = 0;
m_led_data = 0;
+ m_7seg_data = 0;
// register for savestates
save_item(NAME(m_display_maxy));
@@ -46,9 +48,10 @@ void cxgbase_state::machine_start()
save_item(NAME(m_inp_mux));
save_item(NAME(m_led_select));
save_item(NAME(m_led_data));
+ save_item(NAME(m_7seg_data));
}
-void cxgbase_state::machine_reset()
+void chessbase_state::machine_reset()
{
}
@@ -60,7 +63,7 @@ void cxgbase_state::machine_reset()
// The device may strobe the outputs very fast, it is unnoticeable to the user.
// To prevent flickering here, we need to simulate a decay.
-void cxgbase_state::display_update()
+void chessbase_state::display_update()
{
for (int y = 0; y < m_display_maxy; y++)
{
@@ -89,7 +92,7 @@ void cxgbase_state::display_update()
}
}
-TIMER_DEVICE_CALLBACK_MEMBER(cxgbase_state::display_decay_tick)
+TIMER_DEVICE_CALLBACK_MEMBER(chessbase_state::display_decay_tick)
{
// slowly turn off unpowered segments
for (int y = 0; y < m_display_maxy; y++)
@@ -100,13 +103,24 @@ TIMER_DEVICE_CALLBACK_MEMBER(cxgbase_state::display_decay_tick)
display_update();
}
-void cxgbase_state::set_display_size(int maxx, int maxy)
+void chessbase_state::set_display_size(int maxx, int maxy)
{
m_display_maxx = maxx;
m_display_maxy = maxy;
}
-void cxgbase_state::display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update)
+void chessbase_state::set_display_segmask(u32 digits, u32 mask)
+{
+ // set a segment mask per selected digit, but leave unselected ones alone
+ for (int i = 0; i < 0x20; i++)
+ {
+ if (digits & 1)
+ m_display_segmask[i] = mask;
+ digits >>= 1;
+ }
+}
+
+void chessbase_state::display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update)
{
set_display_size(maxx, maxy);
@@ -122,7 +136,7 @@ void cxgbase_state::display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool
// generic input handlers
-u16 cxgbase_state::read_inputs(int columns)
+u16 chessbase_state::read_inputs(int columns)
{
u16 ret = 0;
@@ -137,7 +151,89 @@ u16 cxgbase_state::read_inputs(int columns)
// chessboard generic inputs
-INPUT_PORTS_START( cxg_cb_magnets )
+INPUT_PORTS_START( generic_cb_buttons )
+ PORT_START("IN.0")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+
+ PORT_START("IN.1")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+
+ PORT_START("IN.2")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+
+ PORT_START("IN.3")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+
+ PORT_START("IN.4")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+
+ PORT_START("IN.5")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+
+ PORT_START("IN.6")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+
+ PORT_START("IN.7")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
+INPUT_PORTS_END
+
+INPUT_PORTS_START( generic_cb_magnets )
PORT_START("IN.0")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
diff --git a/src/mame/mess.flt b/src/mame/mess.flt
index f7270561950..33c046f0927 100644
--- a/src/mame/mess.flt
+++ b/src/mame/mess.flt
@@ -139,7 +139,6 @@ chesstrv.cpp
cit101.cpp
cit220.cpp
cking_master.cpp
-ckingbase.cpp
clcd.cpp
clickstart.cpp
cm1800.cpp
@@ -165,7 +164,6 @@ crvision.cpp
ct486.cpp
cvicny.cpp
cxg_ch2001.cpp
-cxgbase.cpp
cxhumax.cpp
cybiko.cpp
cz101.cpp
@@ -259,7 +257,6 @@ fidel_sc8.cpp
fidel_sc9.cpp
fidel_vcc.cpp
fidel_vsc.cpp
-fidelbase.cpp
fk1.cpp
fm7.cpp
fmtowns.cpp
@@ -529,7 +526,6 @@ novag_diablo.cpp
novag_presto.cpp
novag_scon.cpp
novag_sexpert.cpp
-novagbase.cpp
o2.cpp
ob68k1a.cpp
octane.cpp