From 2b59e6556104c9b2eefa072381f7c8005d97d856 Mon Sep 17 00:00:00 2001 From: hap Date: Thu, 21 Feb 2019 13:37:53 +0100 Subject: chess*: move generic electronic chessboard functions to machine/chessbase.cpp (nw) --- scripts/target/mame/mess.lua | 80 ++++----- src/mame/drivers/cking_master.cpp | 20 ++- src/mame/drivers/ckingbase.cpp | 219 ------------------------- src/mame/drivers/cxg_ch2001.cpp | 27 ++- src/mame/drivers/cxgbase.cpp | 220 ------------------------- src/mame/drivers/fidel_as12.cpp | 4 +- src/mame/drivers/fidel_card.cpp | 2 +- src/mame/drivers/fidel_cc10.cpp | 2 +- src/mame/drivers/fidel_cc7.cpp | 2 +- src/mame/drivers/fidel_chesster.cpp | 4 +- src/mame/drivers/fidel_csc.cpp | 6 +- src/mame/drivers/fidel_dames.cpp | 4 +- src/mame/drivers/fidel_desdis.cpp | 4 +- src/mame/drivers/fidel_eag68k.cpp | 6 +- src/mame/drivers/fidel_elite.cpp | 10 +- src/mame/drivers/fidel_excel.cpp | 10 +- src/mame/drivers/fidel_phantom.cpp | 4 +- src/mame/drivers/fidel_sc12.cpp | 6 +- src/mame/drivers/fidel_sc6.cpp | 4 +- src/mame/drivers/fidel_sc8.cpp | 4 +- src/mame/drivers/fidel_sc9.cpp | 6 +- src/mame/drivers/fidel_vcc.cpp | 2 +- src/mame/drivers/fidel_vsc.cpp | 4 +- src/mame/drivers/fidelbase.cpp | 297 +-------------------------------- src/mame/drivers/novag_cforte.cpp | 4 +- src/mame/drivers/novag_delta1.cpp | 2 +- src/mame/drivers/novag_diablo.cpp | 6 +- src/mame/drivers/novag_presto.cpp | 4 +- src/mame/drivers/novag_scon.cpp | 4 +- src/mame/drivers/novag_sexpert.cpp | 6 +- src/mame/drivers/novagbase.cpp | 292 +-------------------------------- src/mame/includes/chessbase.h | 69 ++++++++ src/mame/includes/fidelbase.h | 53 ++---- src/mame/includes/novagbase.h | 54 ++---- src/mame/machine/chessbase.cpp | 316 ++++++++++++++++++++++++++++++++++++ src/mame/mess.flt | 4 - 36 files changed, 541 insertions(+), 1220 deletions(-) delete mode 100644 src/mame/drivers/ckingbase.cpp delete mode 100644 src/mame/drivers/cxgbase.cpp create mode 100644 src/mame/includes/chessbase.h create mode 100644 src/mame/machine/chessbase.cpp 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 m_maincpu; + required_device m_irq_on; required_device m_dac; required_device m_mainmap; + // periodic interrupts + template TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(Line, ASSERT_LINE); } + template 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), 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 m_maincpu; + required_device m_irq_on; + required_device m_dac; required_device m_speaker_off; - // address maps - void main_map(address_map &map); + // periodic interrupts + template TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(Line, ASSERT_LINE); } + template 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/cxgbase.cpp b/src/mame/drivers/cxgbase.cpp deleted file mode 100644 index a62f6e5f94a..00000000000 --- a/src/mame/drivers/cxgbase.cpp +++ /dev/null @@ -1,220 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:hap -/****************************************************************************** - -CXG* chess computer driver base class -*later known as CXG Newcrest Technology Ltd. - -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/cxgbase.h" - - -// machine start/reset - -void cxgbase_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 cxgbase_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 cxgbase_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(cxgbase_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 cxgbase_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) -{ - 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 cxgbase_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( cxg_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/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 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 m_speech; optional_region_ptr m_speech_rom; optional_device m_dac; optional_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 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 TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(Line, ASSERT_LINE); } template 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 m_beeper; optional_device m_dac; optional_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 TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(Line, ASSERT_LINE); } template 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/machine/chessbase.cpp b/src/mame/machine/chessbase.cpp new file mode 100644 index 00000000000..85453f3c785 --- /dev/null +++ b/src/mame/machine/chessbase.cpp @@ -0,0 +1,316 @@ +// license:BSD-3-Clause +// copyright-holders:hap +/****************************************************************************** + +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. +As workaround for the chess games, use an external chess GUI on the side, +such as Arena(in editmode). + +******************************************************************************/ + +#include "emu.h" +#include "includes/chessbase.h" + + +// machine start/reset + +void chessbase_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; + + // 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)); +} + +void chessbase_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 chessbase_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(chessbase_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 chessbase_state::set_display_size(int maxx, int maxy) +{ + m_display_maxx = maxx; + m_display_maxy = maxy; +} + +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); + + // 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 chessbase_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( 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") + 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/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 -- cgit v1.2.3