mirror of
https://github.com/holub/mame
synced 2025-06-05 20:33:45 +03:00
chess*: move generic electronic chessboard functions to machine/chessbase.cpp (nw)
This commit is contained in:
parent
03753c9fbf
commit
2b59e65561
@ -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",
|
||||
|
@ -3,7 +3,7 @@
|
||||
// thanks-to:Berger
|
||||
/******************************************************************************
|
||||
*
|
||||
* cking_master.cpp, subdriver of ckingbase.cpp
|
||||
* cking_master.cpp, subdriver of machine/chessbase.cpp
|
||||
|
||||
TODO:
|
||||
- 1 WAIT CLK per M1, workaround with z80_set_cycle_tables is possible
|
||||
@ -21,7 +21,7 @@ Master: (yes, it's plainly named "Master")
|
||||
******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/ckingbase.h"
|
||||
#include "includes/chessbase.h"
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/bankdev.h"
|
||||
@ -35,11 +35,13 @@ Master: (yes, it's plainly named "Master")
|
||||
|
||||
namespace {
|
||||
|
||||
class master_state : public ckingbase_state
|
||||
class master_state : public chessbase_state
|
||||
{
|
||||
public:
|
||||
master_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
ckingbase_state(mconfig, type, tag),
|
||||
chessbase_state(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_irq_on(*this, "irq_on"),
|
||||
m_dac(*this, "dac"),
|
||||
m_mainmap(*this, "mainmap")
|
||||
{ }
|
||||
@ -51,9 +53,15 @@ public:
|
||||
|
||||
private:
|
||||
// devices/pointers
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<timer_device> m_irq_on;
|
||||
required_device<dac_2bit_binary_weighted_ones_complement_device> m_dac;
|
||||
required_device<address_map_bank_device> m_mainmap;
|
||||
|
||||
// periodic interrupts
|
||||
template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(Line, ASSERT_LINE); }
|
||||
template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(Line, CLEAR_LINE); }
|
||||
|
||||
// address maps
|
||||
void main_map(address_map &map);
|
||||
void main_trampoline(address_map &map);
|
||||
@ -156,7 +164,7 @@ void master_state::main_trampoline(address_map &map)
|
||||
******************************************************************************/
|
||||
|
||||
static INPUT_PORTS_START( master )
|
||||
PORT_INCLUDE( cking_cb_buttons )
|
||||
PORT_INCLUDE( generic_cb_buttons )
|
||||
|
||||
PORT_START("IN.8")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Change Position")
|
||||
@ -197,7 +205,7 @@ void master_state::master(machine_config &config)
|
||||
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(22870)); // active for 22.87us
|
||||
TIMER(config, "irq_off").configure_periodic(FUNC(master_state::irq_off<INPUT_LINE_IRQ0>), irq_period);
|
||||
|
||||
TIMER(config, "display_decay").configure_periodic(FUNC(ckingbase_state::display_decay_tick), attotime::from_msec(1));
|
||||
TIMER(config, "display_decay").configure_periodic(FUNC(master_state::display_decay_tick), attotime::from_msec(1));
|
||||
config.set_default_layout(layout_ck_master);
|
||||
|
||||
/* sound hardware */
|
||||
|
@ -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
|
@ -3,7 +3,7 @@
|
||||
// thanks-to:Berger
|
||||
/******************************************************************************
|
||||
*
|
||||
* cxg_ch2001.cpp, subdriver of cxgbase.cpp
|
||||
* cxg_ch2001.cpp, subdriver of machine/chessbase.cpp
|
||||
|
||||
*******************************************************************************
|
||||
|
||||
@ -15,9 +15,10 @@ Chess 2001:
|
||||
******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/cxgbase.h"
|
||||
#include "includes/chessbase.h"
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "sound/dac.h"
|
||||
#include "sound/volt_reg.h"
|
||||
#include "speaker.h"
|
||||
|
||||
@ -27,11 +28,14 @@ Chess 2001:
|
||||
|
||||
namespace {
|
||||
|
||||
class ch2001_state : public cxgbase_state
|
||||
class ch2001_state : public chessbase_state
|
||||
{
|
||||
public:
|
||||
ch2001_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
cxgbase_state(mconfig, type, tag),
|
||||
chessbase_state(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_irq_on(*this, "irq_on"),
|
||||
m_dac(*this, "dac"),
|
||||
m_speaker_off(*this, "speaker_off")
|
||||
{ }
|
||||
|
||||
@ -40,13 +44,20 @@ public:
|
||||
|
||||
private:
|
||||
// devices/pointers
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<timer_device> m_irq_on;
|
||||
required_device<dac_bit_interface> m_dac;
|
||||
required_device<timer_device> m_speaker_off;
|
||||
|
||||
// periodic interrupts
|
||||
template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(Line, ASSERT_LINE); }
|
||||
template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(Line, CLEAR_LINE); }
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(speaker_off) { m_dac->write(0); }
|
||||
|
||||
// address maps
|
||||
void main_map(address_map &map);
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(speaker_off) { m_dac->write(0); }
|
||||
|
||||
// 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 */
|
||||
|
@ -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")
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
||||
*******************************************************************************
|
||||
|
||||
|
@ -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
|
||||
|
||||
*******************************************************************************
|
||||
|
||||
|
@ -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")
|
||||
|
@ -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")
|
||||
|
@ -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)
|
||||
|
@ -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")
|
||||
|
@ -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")
|
||||
|
@ -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")
|
||||
|
@ -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 ) )
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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")
|
||||
|
@ -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")
|
||||
|
@ -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
|
||||
|
||||
|
@ -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?)
|
||||
|
@ -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")
|
||||
|
@ -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();
|
||||
chessbase_state::machine_start();
|
||||
|
||||
// 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;
|
||||
// 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
|
||||
|
@ -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")
|
||||
|
@ -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?
|
||||
|
@ -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
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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")
|
||||
|
@ -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
|
||||
|
||||
|
@ -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();
|
||||
chessbase_state::machine_start();
|
||||
|
||||
// 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;
|
||||
// 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
|
||||
|
69
src/mame/includes/chessbase.h
Normal file
69
src/mame/includes/chessbase.h
Normal file
@ -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
|
@ -2,7 +2,8 @@
|
||||
// copyright-holders:hap
|
||||
/******************************************************************************
|
||||
*
|
||||
* Fidelity Electronics chess machines base class
|
||||
* Fidelity Electronics chess computers base driver
|
||||
* implementation is in machine/fidelbase.cpp
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -11,6 +12,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "includes/chessbase.h"
|
||||
|
||||
#include "machine/bankdev.h"
|
||||
#include "machine/timer.h"
|
||||
#include "sound/dac.h"
|
||||
@ -19,27 +22,20 @@
|
||||
#include "bus/generic/carts.h"
|
||||
#include "softlist.h"
|
||||
|
||||
class fidelbase_state : public driver_device
|
||||
class fidelbase_state : public chessbase_state
|
||||
{
|
||||
public:
|
||||
fidelbase_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
chessbase_state(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_irq_on(*this, "irq_on"),
|
||||
m_rombank(*this, "rombank"),
|
||||
m_mainmap(*this, "mainmap"),
|
||||
m_div_config(*this, "div_config"),
|
||||
m_inp_matrix(*this, "IN.%u", 0),
|
||||
m_out_x(*this, "%u.%u", 0U, 0U),
|
||||
m_out_a(*this, "%u.a", 0U),
|
||||
m_out_digit(*this, "digit%u", 0U),
|
||||
m_speech(*this, "speech"),
|
||||
m_speech_rom(*this, "speech"),
|
||||
m_dac(*this, "dac"),
|
||||
m_cart(*this, "cartslot"),
|
||||
m_display_wait(33),
|
||||
m_display_maxy(1),
|
||||
m_display_maxx(0)
|
||||
m_cart(*this, "cartslot")
|
||||
{ }
|
||||
|
||||
// devices/pointers
|
||||
@ -48,25 +44,11 @@ public:
|
||||
optional_memory_bank m_rombank;
|
||||
optional_device<address_map_bank_device> m_mainmap;
|
||||
optional_ioport m_div_config;
|
||||
optional_ioport_array<11> m_inp_matrix; // max 11
|
||||
output_finder<0x20, 0x20> m_out_x;
|
||||
output_finder<0x20> m_out_a;
|
||||
output_finder<0x20> m_out_digit;
|
||||
optional_device<s14001a_device> m_speech;
|
||||
optional_region_ptr<u8> m_speech_rom;
|
||||
optional_device<dac_bit_interface> m_dac;
|
||||
optional_device<generic_slot_device> m_cart;
|
||||
|
||||
// misc common
|
||||
u16 m_inp_mux; // multiplexed keypad/leds mask
|
||||
u16 m_led_select;
|
||||
u16 m_led_data;
|
||||
u32 m_7seg_data; // data for seg leds
|
||||
u8 m_speech_data;
|
||||
u8 m_speech_bank; // speech rom higher address bits
|
||||
|
||||
u16 read_inputs(int columns);
|
||||
|
||||
// cross-compatible cartridges(opening book modules)
|
||||
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(scc_cartridge);
|
||||
virtual DECLARE_READ8_MEMBER(cartridge_r);
|
||||
@ -78,6 +60,9 @@ public:
|
||||
template<int Language> void init_language() { m_language = Language; }
|
||||
int m_language;
|
||||
|
||||
u8 m_speech_data;
|
||||
u8 m_speech_bank; // speech rom higher address bits
|
||||
|
||||
// periodic interrupts
|
||||
template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(Line, ASSERT_LINE); }
|
||||
template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(Line, CLEAR_LINE); }
|
||||
@ -89,21 +74,6 @@ public:
|
||||
void div_trampoline(address_map &map);
|
||||
u16 m_div_status;
|
||||
|
||||
// display common
|
||||
int m_display_wait; // led/lamp off-delay in milliseconds (default 33ms)
|
||||
int m_display_maxy; // display matrix number of rows
|
||||
int m_display_maxx; // display matrix number of columns (max 31 for now)
|
||||
|
||||
u32 m_display_state[0x20]; // display matrix rows data (last bit is used for always-on)
|
||||
u16 m_display_segmask[0x20]; // if not 0, display matrix row is a digit, mask indicates connected segments
|
||||
u8 m_display_decay[0x20][0x20]; // (internal use)
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
|
||||
void display_update();
|
||||
void set_display_size(int maxx, int maxy);
|
||||
void set_display_segmask(u32 digits, u32 mask);
|
||||
void display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update = true);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
@ -113,7 +83,4 @@ protected:
|
||||
INPUT_PORTS_EXTERN( fidel_cpu_div_2 );
|
||||
INPUT_PORTS_EXTERN( fidel_cpu_div_4 );
|
||||
|
||||
INPUT_PORTS_EXTERN( fidel_cb_buttons );
|
||||
INPUT_PORTS_EXTERN( fidel_cb_magnets );
|
||||
|
||||
#endif // MAME_INCLUDES_FIDELBASE_H
|
||||
|
@ -2,7 +2,8 @@
|
||||
// copyright-holders:hap
|
||||
/******************************************************************************
|
||||
*
|
||||
* Novag chess machines base class
|
||||
* Novag chess computers base driver
|
||||
* implementation is in machine/novagbase.cpp
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -11,30 +12,25 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "includes/chessbase.h"
|
||||
|
||||
#include "machine/timer.h"
|
||||
#include "sound/dac.h"
|
||||
#include "sound/beep.h"
|
||||
#include "video/hd44780.h"
|
||||
#include "emupal.h"
|
||||
|
||||
class novagbase_state : public driver_device
|
||||
class novagbase_state : public chessbase_state
|
||||
{
|
||||
public:
|
||||
novagbase_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
chessbase_state(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_irq_on(*this, "irq_on"),
|
||||
m_rombank(*this, "rombank"),
|
||||
m_beeper(*this, "beeper"),
|
||||
m_dac(*this, "dac"),
|
||||
m_lcd(*this, "hd44780"),
|
||||
m_inp_matrix(*this, "IN.%u", 0),
|
||||
m_out_x(*this, "%u.%u", 0U, 0U),
|
||||
m_out_a(*this, "%u.a", 0U),
|
||||
m_out_digit(*this, "digit%u", 0U),
|
||||
m_display_wait(33),
|
||||
m_display_maxy(1),
|
||||
m_display_maxx(0)
|
||||
m_lcd(*this, "hd44780")
|
||||
{ }
|
||||
|
||||
// devices/pointers
|
||||
@ -44,20 +40,6 @@ public:
|
||||
optional_device<beep_device> m_beeper;
|
||||
optional_device<dac_bit_interface> m_dac;
|
||||
optional_device<hd44780_device> m_lcd;
|
||||
optional_ioport_array<9> m_inp_matrix; // max 9
|
||||
output_finder<0x20, 0x20> m_out_x;
|
||||
output_finder<0x20> m_out_a;
|
||||
output_finder<0x20> m_out_digit;
|
||||
|
||||
// misc common
|
||||
u16 m_inp_mux; // multiplexed keypad mask
|
||||
u16 m_led_select;
|
||||
u16 m_led_data;
|
||||
u8 m_7seg_data;
|
||||
u8 m_lcd_control;
|
||||
u8 m_lcd_data;
|
||||
|
||||
u16 read_inputs(int columns);
|
||||
|
||||
// in case reset button is directly tied to maincpu reset pin
|
||||
virtual DECLARE_INPUT_CHANGED_MEMBER(reset_button) { m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE); }
|
||||
@ -66,22 +48,11 @@ public:
|
||||
template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(Line, ASSERT_LINE); }
|
||||
template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(Line, CLEAR_LINE); }
|
||||
|
||||
// display common
|
||||
int m_display_wait; // led/lamp off-delay in milliseconds (default 33ms)
|
||||
int m_display_maxy; // display matrix number of rows
|
||||
int m_display_maxx; // display matrix number of columns (max 31 for now)
|
||||
|
||||
u32 m_display_state[0x20]; // display matrix rows data (last bit is used for always-on)
|
||||
u16 m_display_segmask[0x20]; // if not 0, display matrix row is a digit, mask indicates connected segments
|
||||
u8 m_display_decay[0x20][0x20]; // (internal use)
|
||||
|
||||
void novag_lcd_palette(palette_device &palette) const;
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
|
||||
// lcd common
|
||||
HD44780_PIXEL_UPDATE(novag_lcd_pixel_update);
|
||||
void display_update();
|
||||
void set_display_size(int maxx, int maxy);
|
||||
void set_display_segmask(u32 digits, u32 mask);
|
||||
void display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update = true);
|
||||
void novag_lcd_palette(palette_device &palette) const;
|
||||
u8 m_lcd_control;
|
||||
u8 m_lcd_data;
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
@ -89,7 +60,4 @@ protected:
|
||||
};
|
||||
|
||||
|
||||
INPUT_PORTS_EXTERN( novag_cb_buttons );
|
||||
INPUT_PORTS_EXTERN( novag_cb_magnets );
|
||||
|
||||
#endif // MAME_INCLUDES_NOVAGBASE_H
|
||||
|
@ -2,8 +2,9 @@
|
||||
// copyright-holders:hap
|
||||
/******************************************************************************
|
||||
|
||||
CXG* chess computer driver base class
|
||||
*later known as CXG Newcrest Technology Ltd.
|
||||
Generic chess computers base driver
|
||||
|
||||
This file contains helpers for generic chessboard leds and input handling.
|
||||
|
||||
NOTE: MAME doesn't include a generalized implementation for boardpieces yet,
|
||||
greatly affecting user playability of emulated electronic board games.
|
||||
@ -13,12 +14,12 @@ such as Arena(in editmode).
|
||||
******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/cxgbase.h"
|
||||
#include "includes/chessbase.h"
|
||||
|
||||
|
||||
// machine start/reset
|
||||
|
||||
void cxgbase_state::machine_start()
|
||||
void chessbase_state::machine_start()
|
||||
{
|
||||
// resolve handlers
|
||||
m_out_x.resolve();
|
||||
@ -33,6 +34,7 @@ void cxgbase_state::machine_start()
|
||||
m_inp_mux = 0;
|
||||
m_led_select = 0;
|
||||
m_led_data = 0;
|
||||
m_7seg_data = 0;
|
||||
|
||||
// register for savestates
|
||||
save_item(NAME(m_display_maxy));
|
||||
@ -46,9 +48,10 @@ void cxgbase_state::machine_start()
|
||||
save_item(NAME(m_inp_mux));
|
||||
save_item(NAME(m_led_select));
|
||||
save_item(NAME(m_led_data));
|
||||
save_item(NAME(m_7seg_data));
|
||||
}
|
||||
|
||||
void cxgbase_state::machine_reset()
|
||||
void chessbase_state::machine_reset()
|
||||
{
|
||||
}
|
||||
|
||||
@ -60,7 +63,7 @@ void cxgbase_state::machine_reset()
|
||||
// The device may strobe the outputs very fast, it is unnoticeable to the user.
|
||||
// To prevent flickering here, we need to simulate a decay.
|
||||
|
||||
void cxgbase_state::display_update()
|
||||
void chessbase_state::display_update()
|
||||
{
|
||||
for (int y = 0; y < m_display_maxy; y++)
|
||||
{
|
||||
@ -89,7 +92,7 @@ void cxgbase_state::display_update()
|
||||
}
|
||||
}
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(cxgbase_state::display_decay_tick)
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(chessbase_state::display_decay_tick)
|
||||
{
|
||||
// slowly turn off unpowered segments
|
||||
for (int y = 0; y < m_display_maxy; y++)
|
||||
@ -100,13 +103,24 @@ TIMER_DEVICE_CALLBACK_MEMBER(cxgbase_state::display_decay_tick)
|
||||
display_update();
|
||||
}
|
||||
|
||||
void cxgbase_state::set_display_size(int maxx, int maxy)
|
||||
void chessbase_state::set_display_size(int maxx, int maxy)
|
||||
{
|
||||
m_display_maxx = maxx;
|
||||
m_display_maxy = maxy;
|
||||
}
|
||||
|
||||
void cxgbase_state::display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update)
|
||||
void chessbase_state::set_display_segmask(u32 digits, u32 mask)
|
||||
{
|
||||
// set a segment mask per selected digit, but leave unselected ones alone
|
||||
for (int i = 0; i < 0x20; i++)
|
||||
{
|
||||
if (digits & 1)
|
||||
m_display_segmask[i] = mask;
|
||||
digits >>= 1;
|
||||
}
|
||||
}
|
||||
|
||||
void chessbase_state::display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update)
|
||||
{
|
||||
set_display_size(maxx, maxy);
|
||||
|
||||
@ -122,7 +136,7 @@ void cxgbase_state::display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool
|
||||
|
||||
// generic input handlers
|
||||
|
||||
u16 cxgbase_state::read_inputs(int columns)
|
||||
u16 chessbase_state::read_inputs(int columns)
|
||||
{
|
||||
u16 ret = 0;
|
||||
|
||||
@ -137,7 +151,89 @@ u16 cxgbase_state::read_inputs(int columns)
|
||||
|
||||
// chessboard generic inputs
|
||||
|
||||
INPUT_PORTS_START( cxg_cb_magnets )
|
||||
INPUT_PORTS_START( generic_cb_buttons )
|
||||
PORT_START("IN.0")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.1")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.2")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.3")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.4")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.5")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.6")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.7")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
INPUT_PORTS_END
|
||||
|
||||
INPUT_PORTS_START( generic_cb_magnets )
|
||||
PORT_START("IN.0")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor")
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user