summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2020-07-21 23:36:31 +0200
committer hap <happppp@users.noreply.github.com>2020-07-21 23:36:50 +0200
commit4f7fcbf21c952c9ae303e1ff7a6452b0e69369ac (patch)
tree8b9f87c80fdea7c77a57cc0803e66627997c1551
parentbdd7e205a93e65344c0c71d53475b04f29753534 (diff)
New working machines
-------------------- CompuChess: The Second Edition [hap, Berger, Achim] New working clones ------------------ Chess Intercontinental Traveler [hap, Berger, Achim]
-rw-r--r--src/devices/cpu/z8/z8.cpp1
-rw-r--r--src/mame/drivers/chessmate.cpp24
-rw-r--r--src/mame/drivers/compuchess.cpp198
-rw-r--r--src/mame/drivers/fidel_cc1.cpp2
-rw-r--r--src/mame/drivers/fidel_elite.cpp12
-rw-r--r--src/mame/drivers/hh_hmcs40.cpp3
-rw-r--r--src/mame/drivers/hh_sm510.cpp7
-rw-r--r--src/mame/drivers/saitek_chesstrv.cpp95
-rw-r--r--src/mame/drivers/saitek_delta1.cpp2
-rw-r--r--src/mame/drivers/saitek_intchess.cpp27
-rw-r--r--src/mame/drivers/segaybd.cpp2
-rw-r--r--src/mame/layout/saitek_chesstrvi.lay159
-rw-r--r--src/mame/layout/saitek_intchess.lay4
-rw-r--r--src/mame/mame.lst2
14 files changed, 424 insertions, 114 deletions
diff --git a/src/devices/cpu/z8/z8.cpp b/src/devices/cpu/z8/z8.cpp
index aae001c893a..5d291b465f1 100644
--- a/src/devices/cpu/z8/z8.cpp
+++ b/src/devices/cpu/z8/z8.cpp
@@ -138,6 +138,7 @@ void z8_device::preprogrammed_map(address_map &map)
void z8_device::register_map(address_map &map)
{
+ map.unmap_value_high();
map(0x00, 0x00).rw(FUNC(z8_device::p0_read), FUNC(z8_device::p0_write));
map(0x01, 0x01).rw(FUNC(z8_device::p1_read), FUNC(z8_device::p1_write));
map(0x02, 0x02).rw(FUNC(z8_device::p2_read), FUNC(z8_device::p2_write));
diff --git a/src/mame/drivers/chessmate.cpp b/src/mame/drivers/chessmate.cpp
index b89352c7076..e1514874ecc 100644
--- a/src/mame/drivers/chessmate.cpp
+++ b/src/mame/drivers/chessmate.cpp
@@ -3,24 +3,28 @@
/******************************************************************************
Commodore Chessmate / Novag Chess Champion MK II
-Initial version by PeT mess@utanet.at September 2000.
+Initial driver version by PeT mess@utanet.at September 2000.
Driver mostly rewritten later.
-The hardware is pretty similar to KIM-1. In fact, the chess engine is Peter R. Jennings's
-Microchess, originally made for the KIM-1. Jennings went on to co-found Personal Software
-(later named VisiCorp, known for VisiCalc).
+The hardware is pretty similar to KIM-1. In fact, the chess engine is Peter
+R. Jennings's Microchess, originally made for the KIM-1. Jennings went on to
+co-found Personal Software (later named VisiCorp, known for VisiCalc).
-Jennings also licensed Chessmate to Novag, and they released it as the MK II. The hardware
-is almost identical and the software is the same(identical ROM labels). Two designs were made,
-one jukebox shape, and one brick shape. The one in MAME came from the jukebox, but both
-models have the same ROMs. Note that like MK I, although it is a Winkler/Auge production,
-it doesn't involve SciSys company. SciSys was founded by Winkler after MK II.
+Jennings also licensed Chessmate to Novag, and they released it as the MK II.
+The hardware is almost identical and the software is the same(identical ROM labels).
+Two designs were made, one jukebox shape, and one brick shape. The one in MAME came
+from the jukebox, but both models have the same ROMs.
+
+Note that like MK I, although it is a Winkler/Auge production, it doesn't involve
+SciSys company. SciSys was founded by Winkler after MK II.
TODO:
- is there an older version of chmate? chips on pcb photos are dated 1979, but
the game is known to be released in 1978
-*******************************************************************************
+===============================================================================
+
+Hardware notes:
MOS MPS 6504 2179
MOS MPS 6530 024 1879
diff --git a/src/mame/drivers/compuchess.cpp b/src/mame/drivers/compuchess.cpp
index 6008e63ef34..8befeb7dfeb 100644
--- a/src/mame/drivers/compuchess.cpp
+++ b/src/mame/drivers/compuchess.cpp
@@ -1,37 +1,66 @@
// license:BSD-3-Clause
// copyright-holders:Peter Trauner, Wilbert Pol, hap
-// thanks-to:Sean Riddle
+// thanks-to:Sean Riddle, Berger
/******************************************************************************
DCS CompuChess / Novag Chess Champion MK I
-Initial version by PeT mess@utanet.at 2000,2001.
+Initial driver version by PeT mess@utanet.at 2000,2001.
Driver largely rewritten over the years.
+To start playing, enter difficulty level (1-6), then when it says "bP", press A
+for new game, B for empty board, or C for continue.
+
TODO:
- cncchess sound is wrong, it should be a long dual-tone alarm sound
-- verify CPU speed (cmpchess XTAL is not 100% certain)
-- dump/add cmpchess2
BTANB:
+- cmpchess/cmpchess2 accepts illegal moves (Conic fixed that)
- digits may flash briefly after entering a command, eg. the "b" or "P" digit
after setting board preset, this happens on the real device
-*******************************************************************************
+===============================================================================
+
+DataCash Systems's CompuChess released mid-1977. One of the first chess
+computers, the first one being Fidelity Chess Challenger (fidel_cc1.cpp)
+
+Hardware notes:
+- PCB label: CompuChess 1, STAID INC, REV A, 7-77
+- Fairchild 3850PK, 2MHz XTAL
+- Fairchild 3853PK
+- 2KB ROM, 256 bytes RAM(2*D2101AL-4)
+- 4-digit 7seg led display, no sound
-Data Cash Systems's CompuChess (1977, one of the first chess computers).
-The game underneath is better known as Novag's MK I, it was an unlicensed clone.
-The ROM is identical. DCS sued JS&A / Novag Industries for copyright infringement
-and somehow didn't manage to win the case.
+CompuChess 2nd edition is on the same PCB, but with a 3.57MHz XTAL(!), a 3850PC,
+and Mostek MK3853N. The MCU speed was also confirmed with move calculation time.
+
+2nd edition added 3 new game modes: E for "Game of Knights", F for "Amazon Queen",
+and G for "Survival".
+
+===============================================================================
+
+The game underneath CompuChess is better known as Novag's MK I, it was an
+unlicensed clone. The ROM is identical. DCS sued JS&A / Novag Industries for
+copyright infringement and somehow didn't manage to win the case.
Unlike CompuChess, MK I was a large success, we can assume that it kickstarted
Novag's chess computer generation. It was also distributed as "Computer Chess"
-by JS&A, in the same casing as MK I.
+by JS&A, in the same housing as MK I.
-To start playing, enter difficulty level (1-6), then when it says "bP", press A
-for new game, B for empty board, or C for continue.
+MCU frequency is with an LC circuit. The first version was around 5% faster than
+CompuChess, the JS&A version was measured 2.18MHz on average. The 2nd version was
+much faster, judging from move calculation time: around 3.5MHz(give or take 0.2).
+
+1st (slow) version:
+- Novag MK I with Boris Spassky photo on the box
+- JS&A Computer Chess
+
+2nd (fast) version:
+- Novag MK I with Karpov photo on the box, later advertised with message
+ "Neu: Mit Quick-Electronic für Schnelle Gegenzüge"
+- Waddingtons Videomaster Chess Champion
MK I hardware description:
-- An F8 3850 CPU accompanied by a 3853 memory interface, approx 2MHz
+- An F8 3850 CPU accompanied by a 3853 memory interface
Variations seen:
- MOSTEK MK 3853N 7915 Philippines (static memory interface for F8)
- MOSTEK MK 3850N-3 7917 Philipines (Fairchild F8 CPU)
@@ -57,15 +86,16 @@ MK I hardware description:
- Hardware addressing is controlled by a HBF4001AE.
- No speaker.
-*******************************************************************************
+===============================================================================
Conic Computer Chess (aka Master I in Germany) is also based on DCS CompuChess,
-probably the 2nd edition. Conic have done a few changes, not enough to hide that
-they 'borrowed' code from CompuChess. They also added a piezo circuit.
+this time the 2nd edition. Conic have done a few changes, not enough to hide that
+they 'borrowed' code. They also added a piezo circuit.
-Fairchild 3850PK CPU @ 2MHz (LC circuit), 3853PK
-2KB ROM (3216), 256 bytes RAM (2*2111A)
-555, 4001, 4011 for display blinking and beeper
+Hardware notes:
+- Fairchild 3850PK CPU @ 2MHz (LC circuit), 3853PK
+- 2KB ROM (3216), 256 bytes RAM (2*2111A)
+- 555, 4001, 4011 for display blinking and beeper
"bP" buttons are F, G, H (instead of A, B, C)
@@ -100,11 +130,13 @@ public:
{ }
DECLARE_INPUT_CHANGED_MEMBER(reset_switch) { update_reset(newval); }
+ DECLARE_INPUT_CHANGED_MEMBER(change_cpu_freq) { update_cpu_freq(newval); }
// machine configs
void cmpchess(machine_config &config);
+ void cmpchess2(machine_config &config);
void mk1(machine_config &config);
- void cnc(machine_config &config);
+ void cncchess(machine_config &config);
protected:
virtual void machine_start() override;
@@ -121,38 +153,34 @@ private:
// address maps
void main_map(address_map &map);
void main_io(address_map &map);
- void cnc_io(address_map &map);
+ void cncchess_map(address_map &map);
+ void cncchess_io(address_map &map);
TIMER_DEVICE_CALLBACK_MEMBER(beeper_off) { m_beeper->set_state(0); }
TIMER_DEVICE_CALLBACK_MEMBER(blink) { m_blink = !m_blink; update_display(); }
void update_display();
void update_reset(ioport_value state);
+ void update_cpu_freq(ioport_value state);
// I/O handlers
- u8 beeper_r(offs_t offset);
void input_w(u8 data);
u8 input_r();
void digit_select_w(u8 data);
void digit_data_w(u8 data);
u8 digit_data_r();
+ u8 beeper_r(offs_t offset);
void input_digit_select_w(u8 data) { input_w(data); digit_select_w(data); }
void input_digit_data_w(u8 data) { input_w(data); digit_data_w(data); }
- u8 m_inp_mux;
- u8 m_digit_select;
- u8 m_digit_data;
- bool m_blink;
+ u8 m_inp_mux = 0;
+ u8 m_digit_select = 0;
+ u8 m_digit_data = 0;
+ bool m_blink = false;
};
void cmpchess_state::machine_start()
{
- // zerofill
- m_inp_mux = 0;
- m_digit_select = 0;
- m_digit_data = 0;
- m_blink = false;
-
// register for savestates
save_item(NAME(m_inp_mux));
save_item(NAME(m_digit_select));
@@ -162,6 +190,9 @@ void cmpchess_state::machine_start()
void cmpchess_state::machine_reset()
{
+ if (ioport("FAKE") != nullptr)
+ update_cpu_freq(ioport("FAKE")->read());
+
update_reset(ioport("RESET")->read());
}
@@ -175,24 +206,20 @@ void cmpchess_state::update_reset(ioport_value state)
m_display->clear();
}
+void cmpchess_state::update_cpu_freq(ioport_value state)
+{
+ // 2 MK I versions, 2nd one was a lot faster
+ const u32 freq = state ? 3500000 : 2250000;
+ m_maincpu->set_unscaled_clock(freq);
+ subdevice<f3853_device>("smi")->set_unscaled_clock(freq);
+}
+
/******************************************************************************
I/O
******************************************************************************/
-u8 cmpchess_state::beeper_r(offs_t offset)
-{
- // cncchess: trigger beeper
- if (!machine().side_effects_disabled() && m_beeper != nullptr)
- {
- m_beeper->set_state(1);
- m_beeper_off->adjust(attotime::from_msec(50)); // wrong, see TODO
- }
-
- return m_maincpu->space(AS_PROGRAM).read_byte(offset);
-}
-
void cmpchess_state::update_display()
{
// display panel goes into automated blink mode if DP segment is held high,
@@ -247,6 +274,18 @@ u8 cmpchess_state::input_r()
return data;
}
+u8 cmpchess_state::beeper_r(offs_t offset)
+{
+ // cncchess: trigger beeper
+ if (!machine().side_effects_disabled())
+ {
+ m_beeper->set_state(1);
+ m_beeper_off->adjust(attotime::from_msec(50)); // wrong, see TODO
+ }
+
+ return m_maincpu->space(AS_PROGRAM).read_byte(offset);
+}
+
/******************************************************************************
@@ -255,9 +294,9 @@ u8 cmpchess_state::input_r()
void cmpchess_state::main_map(address_map &map)
{
+ map.global_mask(0x0fff);
map(0x0000, 0x07ff).rom();
- map(0x1800, 0x18ff).ram();
- map(0x8000, 0xffff).r(FUNC(cmpchess_state::beeper_r));
+ map(0x0800, 0x08ff).mirror(0x0700).ram();
}
void cmpchess_state::main_io(address_map &map)
@@ -267,7 +306,14 @@ void cmpchess_state::main_io(address_map &map)
map(0x0c, 0x0f).rw("smi", FUNC(f3853_device::read), FUNC(f3853_device::write));
}
-void cmpchess_state::cnc_io(address_map &map)
+void cmpchess_state::cncchess_map(address_map &map)
+{
+ map(0x0000, 0x07ff).rom();
+ map(0x1800, 0x18ff).ram();
+ map(0x8000, 0xffff).r(FUNC(cmpchess_state::beeper_r));
+}
+
+void cmpchess_state::cncchess_io(address_map &map)
{
map(0x00, 0x00).rw(FUNC(cmpchess_state::digit_data_r), FUNC(cmpchess_state::digit_data_w));
map(0x01, 0x01).rw(FUNC(cmpchess_state::input_r), FUNC(cmpchess_state::input_digit_select_w));
@@ -306,7 +352,19 @@ static INPUT_PORTS_START( cmpchess )
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5 / Black Knight")
PORT_START("RESET")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_F1) PORT_TOGGLE PORT_CHANGED_MEMBER(DEVICE_SELF, cmpchess_state, reset_switch, 0) PORT_NAME("Reset Switch") // L.S. switch on the MK I
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_F1) PORT_TOGGLE PORT_CHANGED_MEMBER(DEVICE_SELF, cmpchess_state, reset_switch, 0) PORT_NAME("Reset Switch")
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( mk1 )
+ PORT_INCLUDE( cmpchess )
+
+ PORT_MODIFY("RESET")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_F1) PORT_TOGGLE PORT_CHANGED_MEMBER(DEVICE_SELF, cmpchess_state, reset_switch, 0) PORT_NAME("L.S. Switch")
+
+ PORT_START("FAKE")
+ PORT_CONFNAME( 0x01, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, cmpchess_state, change_cpu_freq, 0) // factory set
+ PORT_CONFSETTING( 0x00, "2.25MHz (Spassky packaging)" )
+ PORT_CONFSETTING( 0x01, "3.5MHz (Karpov packaging)" )
INPUT_PORTS_END
static INPUT_PORTS_START( cncchess )
@@ -347,12 +405,12 @@ INPUT_PORTS_END
void cmpchess_state::cmpchess(machine_config &config)
{
/* basic machine hardware */
- F8(config, m_maincpu, 3.579545_MHz_XTAL/2); // Fairchild 3850PK
+ F8(config, m_maincpu, 2_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &cmpchess_state::main_map);
m_maincpu->set_addrmap(AS_IO, &cmpchess_state::main_io);
m_maincpu->set_irq_acknowledge_callback("smi", FUNC(f3853_device::int_acknowledge));
- f3853_device &smi(F3853(config, "smi", 3.579545_MHz_XTAL/2));
+ f3853_device &smi(F3853(config, "smi", 2_MHz_XTAL));
smi.int_req_callback().set_inputline("maincpu", F8_INPUT_LINE_INT_REQ);
/* video hardware */
@@ -360,7 +418,17 @@ void cmpchess_state::cmpchess(machine_config &config)
m_display->set_segmask(0xf, 0xff);
config.set_default_layout(layout_cmpchess);
- TIMER(config, "blink_display").configure_periodic(FUNC(cmpchess_state::blink), attotime::from_msec(200)); // approximation
+ const attotime blink_period = attotime::from_msec(200); // approximation
+ TIMER(config, "blink_display").configure_periodic(FUNC(cmpchess_state::blink), blink_period);
+}
+
+void cmpchess_state::cmpchess2(machine_config &config)
+{
+ cmpchess(config);
+
+ /* basic machine hardware */
+ m_maincpu->set_clock(3.579545_MHz_XTAL);
+ subdevice<f3853_device>("smi")->set_clock(3.579545_MHz_XTAL);
}
void cmpchess_state::mk1(machine_config &config)
@@ -368,19 +436,21 @@ void cmpchess_state::mk1(machine_config &config)
cmpchess(config);
/* basic machine hardware */
- m_maincpu->set_clock(2250000); // JS&A version measured 2.18MHz on average
+ m_maincpu->set_clock(2250000); // see notes
subdevice<f3853_device>("smi")->set_clock(2250000);
config.set_default_layout(layout_novag_mk1);
}
-void cmpchess_state::cnc(machine_config &config)
+void cmpchess_state::cncchess(machine_config &config)
{
- cmpchess(config);
+ cmpchess2(config);
/* basic machine hardware */
- m_maincpu->set_addrmap(AS_IO, &cmpchess_state::cnc_io);
m_maincpu->set_clock(2000000); // LC circuit, measured 2MHz
+ m_maincpu->set_addrmap(AS_PROGRAM, &cmpchess_state::cncchess_map);
+ m_maincpu->set_addrmap(AS_IO, &cmpchess_state::cncchess_io);
+
subdevice<f3853_device>("smi")->set_clock(2000000);
config.set_default_layout(layout_conic_cchess);
@@ -400,9 +470,15 @@ void cmpchess_state::cnc(machine_config &config)
ROM_START( cmpchess )
ROM_REGION( 0x0800, "maincpu", 0 )
- ROM_LOAD("32014-4950", 0x0000, 0x0800, CRC(278f7bf3) SHA1(b384c95ba691d52dfdddd35987a71e9746a46170) )
+ ROM_LOAD("32014-4950_cmcsi_staid.u3", 0x0000, 0x0800, CRC(278f7bf3) SHA1(b384c95ba691d52dfdddd35987a71e9746a46170) )
+ROM_END
+
+ROM_START( cmpchess2 )
+ ROM_REGION( 0x0800, "maincpu", 0 )
+ ROM_LOAD("8316a-4952_cmc2_staid.u3", 0x0000, 0x0800, CRC(aee49c5f) SHA1(8a10f74207f2646164cc0deed81bd082143ac38a) )
ROM_END
+
ROM_START( ccmk1 )
ROM_REGION( 0x0800, "maincpu", 0 )
ROM_LOAD("82c210-1", 0x0000, 0x0800, CRC(278f7bf3) SHA1(b384c95ba691d52dfdddd35987a71e9746a46170) )
@@ -422,8 +498,10 @@ ROM_END
Drivers
******************************************************************************/
-// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
-CONS( 1977, cmpchess, 0, 0, cmpchess, cmpchess, cmpchess_state, empty_init, "Data Cash Systems / Staid", "CompuChess", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1978, ccmk1, cmpchess, 0, mk1, cmpchess, cmpchess_state, empty_init, "Novag", "Chess Champion: MK I", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
+CONS( 1977, cmpchess, 0, 0, cmpchess, cmpchess, cmpchess_state, empty_init, "DataCash Systems / Staid", "CompuChess", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // aka CompuChess I
+CONS( 1978, cmpchess2, 0, 0, cmpchess2, cmpchess, cmpchess_state, empty_init, "DataCash Systems / Staid", "CompuChess: The Second Edition", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+
+CONS( 1978, ccmk1, cmpchess, 0, mk1, mk1, cmpchess_state, empty_init, "Novag", "Chess Champion: MK I", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1979, cncchess, 0, 0, cnc, cncchess, cmpchess_state, empty_init, "Conic", "Computer Chess (Conic, model 7011)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1979, cncchess, 0, 0, cncchess, cncchess, cmpchess_state, empty_init, "Conic", "Computer Chess (Conic, model 7011)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
diff --git a/src/mame/drivers/fidel_cc1.cpp b/src/mame/drivers/fidel_cc1.cpp
index 07f07b27bd6..d5a08d75ca0 100644
--- a/src/mame/drivers/fidel_cc1.cpp
+++ b/src/mame/drivers/fidel_cc1.cpp
@@ -22,7 +22,7 @@ the ESB 6000 board in the machine configuration, and set the video options to
That being said, it's probably a better idea to use a real chessboard.
-*******************************************************************************
+===============================================================================
Chess Challenger (1)
--------------------
diff --git a/src/mame/drivers/fidel_elite.cpp b/src/mame/drivers/fidel_elite.cpp
index 6f840ee4c39..975ac193fa6 100644
--- a/src/mame/drivers/fidel_elite.cpp
+++ b/src/mame/drivers/fidel_elite.cpp
@@ -414,9 +414,9 @@ static INPUT_PORTS_START( eas )
PORT_START("FAKE")
PORT_CONFNAME( 0x03, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, elite_state, switch_cpu_freq, 0) // factory set
- PORT_CONFSETTING( 0x00, "3MHz" )
- PORT_CONFSETTING( 0x01, "3.57MHz" )
- PORT_CONFSETTING( 0x02, "4MHz" )
+ PORT_CONFSETTING( 0x00, "3MHz (original)" )
+ PORT_CONFSETTING( 0x01, "3.57MHz (Privat)" )
+ PORT_CONFSETTING( 0x02, "4MHz (Glasgow)" )
INPUT_PORTS_END
static INPUT_PORTS_START( easc )
@@ -424,9 +424,9 @@ static INPUT_PORTS_START( easc )
PORT_MODIFY("FAKE") // default to 4MHz
PORT_CONFNAME( 0x03, 0x02, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, elite_state, switch_cpu_freq, 0) // factory set
- PORT_CONFSETTING( 0x00, "3MHz" )
- PORT_CONFSETTING( 0x01, "3.57MHz" )
- PORT_CONFSETTING( 0x02, "4MHz" )
+ PORT_CONFSETTING( 0x00, "3MHz (original)" )
+ PORT_CONFSETTING( 0x01, "3.57MHz (Privat)" )
+ PORT_CONFSETTING( 0x02, "4MHz (Glasgow)" )
INPUT_PORTS_END
static INPUT_PORTS_START( pc )
diff --git a/src/mame/drivers/hh_hmcs40.cpp b/src/mame/drivers/hh_hmcs40.cpp
index db020140c25..d9f8bf63ce3 100644
--- a/src/mame/drivers/hh_hmcs40.cpp
+++ b/src/mame/drivers/hh_hmcs40.cpp
@@ -79,8 +79,7 @@
*A86 HD44820 1983, Chess King Pocket Micro
*B63 HD44820 1985, CXG Pocket Chess (12 buttons)
- *A13 HD44840 1982, CXG Computachess II
- *A14 HD44840 1982, CXG Advanced Portachess
+ *A14 HD44840 1982, CXG Computachess II / Advanced Portachess
*B55 HD44860 1987, Saitek Pro Bridge 100
diff --git a/src/mame/drivers/hh_sm510.cpp b/src/mame/drivers/hh_sm510.cpp
index 9d944dc1560..7fc98eb6a76 100644
--- a/src/mame/drivers/hh_sm510.cpp
+++ b/src/mame/drivers/hh_sm510.cpp
@@ -4336,12 +4336,12 @@ static INPUT_PORTS_START( bassmate )
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON8 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Wind")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Cover")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Time of Day")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Wtr. Temp F")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Water Temp F")
PORT_START("IN.2") // S3
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Wtr. Clarity")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Water Clarity")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Structure")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Wtr. Depth(FT)")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Water Depth(ft)")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Season")
PORT_START("ACL")
@@ -4351,7 +4351,6 @@ static INPUT_PORTS_START( bassmate )
PORT_CONFNAME( 0x01, 0x01, "Skip Compute Animation (Cheat)") // factory test, unpopulated on PCB
PORT_CONFSETTING( 0x01, DEF_STR( Off ) )
PORT_CONFSETTING( 0x00, DEF_STR( On ) )
-
INPUT_PORTS_END
void bassmate_state::bassmate(machine_config &config)
diff --git a/src/mame/drivers/saitek_chesstrv.cpp b/src/mame/drivers/saitek_chesstrv.cpp
index 15697092325..bafda1d5714 100644
--- a/src/mame/drivers/saitek_chesstrv.cpp
+++ b/src/mame/drivers/saitek_chesstrv.cpp
@@ -1,11 +1,12 @@
// license:BSD-3-Clause
// copyright-holders:Sandro Ronco, hap
-// thanks-to:Sean Riddle
+// thanks-to:Sean Riddle, Berger
/******************************************************************************
-SciSys Chess Traveler
+SciSys Chess Traveler (aka Novag Pocket Chess)
+SciSys Chess Intercontinental Traveler
-Hardware notes:
+Chess Traveler hardware notes:
- Fairchild 3870 MCU, label SL90387 (does not use the timer or irq at all)
- 256 bytes RAM(3539)
- 4-digit 7seg led panel
@@ -17,19 +18,43 @@ SciSys/Novag's "Chess Champion: Pocket Chess" is assumed to be the same game,
it has the same MCU serial (SL90387). They added battery low voltage detection
to it (rightmost digit DP lights up).
+Chess Intercontinental Traveler, released after the SciSys/Novag splitup, is nearly
+the same program. Only a few bytes different, not counting changed jump addresses
+due to inserted code.
+
+Chess Intercontinental Traveler hardware notes:
+- Fairchild 3870 MCU, label SL90594, backside label 3870T-0594
+- 256 bytes RAM(2*TC5501P)
+- 4-digit LCD screen, the exact same one as in Mini Chess, but of the extra segments,
+ only the 'low battery' and 'computing' segments are used
+
+Regarding MCU frequency:
+
+Chess Traveler should be around 4.5MHz. An Acetronic version was measured ~3MHz,
+but that is far too slow. On Novag Pocket Chess, opening move F2F3 at level 6 is
+answered after around 60 seconds.
+
+Likewise, Intercontinental Traveler was measured ~5MHz, but in reality is much
+closer to 6MHz. This was confirmed by hooking up a 6MHz XTAL, taking around
+44 seconds after the same F2F3 move.
+
+Both chesscomputers have a cheap RC circuit for the MCU clock, it seems that
+electronically measuring them affected the frequency.
+
TODO:
-- MCU frequency was actually measured ~3MHz, but this is much too slow when compared
- to a video recording (of Novag Pocket Chess), need to reverify
+- add low-battery indicator? useless since it's not software-controlled
******************************************************************************/
#include "emu.h"
#include "cpu/f8/f8.h"
#include "machine/f3853.h"
+#include "machine/timer.h"
#include "video/pwm.h"
// internal artwork
#include "saitek_chesstrv.lh" // clickable
+#include "saitek_chesstrvi.lh" // clickable
namespace {
@@ -41,10 +66,13 @@ public:
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_display(*this, "display"),
+ m_comp_timer(*this, "comp_timer"),
+ m_computing(*this, "computing"),
m_inputs(*this, "IN.%u", 0)
{ }
void chesstrv(machine_config &config);
+ void chesstrvi(machine_config &config);
protected:
virtual void machine_start() override;
@@ -53,11 +81,15 @@ private:
// devices/pointers
required_device<cpu_device> m_maincpu;
required_device<pwm_display_device> m_display;
+ optional_device<timer_device> m_comp_timer;
+ output_finder<> m_computing;
required_ioport_array<4> m_inputs;
void chesstrv_mem(address_map &map);
void chesstrv_io(address_map &map);
+ TIMER_DEVICE_CALLBACK_MEMBER(computing) { m_computing = 1; }
+
void update_display();
void matrix_w(u8 data);
void digit_w(u8 data);
@@ -70,18 +102,15 @@ private:
void ram_data_w(u8 data) { m_ram[m_ram_address] = data; }
std::unique_ptr<u8[]> m_ram;
- u8 m_ram_address;
- u8 m_inp_mux;
- u8 m_7seg_data;
+ u8 m_ram_address = 0;
+ u8 m_inp_mux = 0;
+ u8 m_7seg_data = 0;
};
void chesstrv_state::machine_start()
{
- // zerofill
m_ram = make_unique_clear<u8[]>(0x100);
- m_ram_address = 0;
- m_inp_mux = 0;
- m_7seg_data = 0;
+ m_computing.resolve();
// register for savestates
save_pointer(NAME(m_ram), 0x100);
@@ -112,6 +141,13 @@ void chesstrv_state::digit_w(u8 data)
void chesstrv_state::matrix_w(u8 data)
{
+ // chesstrvi: "computing" segment goes on when LCD isn't driven
+ if (m_comp_timer != nullptr && ~data & m_inp_mux & 1)
+ {
+ m_computing = 0;
+ m_comp_timer->adjust(attotime::from_msec(100));
+ }
+
// d0-d3: input/digit select (active low)
m_inp_mux = data;
update_display();
@@ -185,6 +221,19 @@ static INPUT_PORTS_START( chesstrv )
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNUSED)
INPUT_PORTS_END
+static INPUT_PORTS_START( chesstrvi )
+ PORT_INCLUDE( chesstrv )
+
+ PORT_MODIFY("IN.2")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("Level / CS")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_K) PORT_NAME("Find Position")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("Enter Position")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_NAME("New Game")
+
+ PORT_MODIFY("IN.3")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("Multi Move")
+INPUT_PORTS_END
+
/******************************************************************************
@@ -210,6 +259,18 @@ void chesstrv_state::chesstrv(machine_config &config)
config.set_default_layout(layout_saitek_chesstrv);
}
+void chesstrv_state::chesstrvi(machine_config &config)
+{
+ chesstrv(config);
+
+ /* basic machine hardware */
+ m_maincpu->set_clock(6000000/2); // approximation
+ subdevice<f38t56_device>("psu")->set_clock(6000000/2);
+
+ TIMER(config, m_comp_timer).configure_generic(FUNC(chesstrv_state::computing));
+ config.set_default_layout(layout_saitek_chesstrvi);
+}
+
/******************************************************************************
@@ -221,6 +282,11 @@ ROM_START( chesstrv )
ROM_LOAD("sl90387", 0x0000, 0x0800, CRC(b76214d8) SHA1(7760903a64d9c513eb54c4787f535dabec62eb64) )
ROM_END
+ROM_START( chesstrvi )
+ ROM_REGION( 0x0800, "maincpu", 0 )
+ ROM_LOAD("sl90594.u3", 0x0000, 0x0800, CRC(9162e89a) SHA1(c3f71365b73b0112aae09f11722bd78186c78408) )
+ROM_END
+
} // anonymous namespace
@@ -229,5 +295,6 @@ ROM_END
Drivers
******************************************************************************/
-// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
-CONS( 1980, chesstrv, 0, 0, chesstrv, chesstrv, chesstrv_state, empty_init, "SciSys / Novag", "Chess Traveler", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
+CONS( 1980, chesstrv, 0, 0, chesstrv, chesstrv, chesstrv_state, empty_init, "SciSys / Novag", "Chess Traveler", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1982, chesstrvi, 0, 0, chesstrvi, chesstrvi, chesstrv_state, empty_init, "SciSys", "Chess Intercontinental Traveler", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
diff --git a/src/mame/drivers/saitek_delta1.cpp b/src/mame/drivers/saitek_delta1.cpp
index 98af0951f85..1b9d504cc67 100644
--- a/src/mame/drivers/saitek_delta1.cpp
+++ b/src/mame/drivers/saitek_delta1.cpp
@@ -12,7 +12,7 @@ Hardware notes:
- 4KB ROM(2332A), 256 bytes RAM(2*2111A-4)
- 4-digit 7seg panel, no sound, no chessboard
--------------------------------------------------------------------------------
+===============================================================================
Program origin notes by bataais:
diff --git a/src/mame/drivers/saitek_intchess.cpp b/src/mame/drivers/saitek_intchess.cpp
index faff4fe2fb9..13330fe4429 100644
--- a/src/mame/drivers/saitek_intchess.cpp
+++ b/src/mame/drivers/saitek_intchess.cpp
@@ -5,6 +5,8 @@
SciSys Intelligent Chess
+The UK version wasn't widely released, perhaps it wasn't sold at all (can't find
+photos, just brochures and some magazine reviews). The German version was common.
Development by Intelligent Games, the same group of people that worked on the
Super System III and Mark V. The visual interface is an evolution of "Tolinka".
@@ -21,7 +23,6 @@ TODO:
- colors are estimated from photos (black and white are obvious, but the green
and cyan are not standard 0x00ff00 / 0x00ffff)
- video timing is unknown, sprite offsets are estimated from photos
-- not sure about "Record" and "Reset" button labels, the rest is correct
******************************************************************************/
@@ -234,33 +235,33 @@ static INPUT_PORTS_START( intchess )
PORT_START("X1")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("A 1 / Pawn")
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("E 5 / Queen")
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("Level")
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("Clear")
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("Level / Clear Square") // Spielstärke / Feld Frei
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("Clear") // Löschen
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_X) PORT_NAME("Flash")
PORT_START("X2")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("B 2 / Knight")
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("F 6 / King")
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_NAME("New Game")
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Enter")
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Take Back")
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_NAME("New Game / Clear Board") // Neue Partie / Brett Frei
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Enter") // Eingabe
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Take Back") // Zurück
PORT_START("X3")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("C 3 / Bishop")
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("G 7 / White")
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("Mode")
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("Find")
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("Next Best")
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("Mode") // Modus
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("Find") // Check
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("Next Best") // Altern
PORT_START("X4")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_D) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("D 4 / Rook")
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("H 8 / Black")
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_Z) PORT_NAME("Record")
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_U) PORT_NAME("Place")
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Step")
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_Z) PORT_NAME("Record") // Speichern
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_U) PORT_NAME("Place") // Setzen
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Step") // Vor
PORT_START("RESET")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_CHANGED_MEMBER(DEVICE_SELF, intchess_state, reset_button, 0) PORT_NAME("Reset")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, intchess_state, reset_button, 0) PORT_NAME("Reset") // Start
INPUT_PORTS_END
diff --git a/src/mame/drivers/segaybd.cpp b/src/mame/drivers/segaybd.cpp
index 98fc07b6e1a..f87aa39ff53 100644
--- a/src/mame/drivers/segaybd.cpp
+++ b/src/mame/drivers/segaybd.cpp
@@ -1181,7 +1181,7 @@ static INPUT_PORTS_START( rchase )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
- PORT_MODIFY("COINAGE") // like with the other games, set all 0x00 for Free Play
+ PORT_MODIFY("COINAGE") // like with the other games, set all switches to 0x00 for Free Play
PORT_DIPNAME( 0x03, 0x03, "Coin to Credit" ) PORT_DIPLOCATION("SWA:1,2")
PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x01, DEF_STR( 3C_1C ) )
diff --git a/src/mame/layout/saitek_chesstrvi.lay b/src/mame/layout/saitek_chesstrvi.lay
new file mode 100644
index 00000000000..2b612b03ccf
--- /dev/null
+++ b/src/mame/layout/saitek_chesstrvi.lay
@@ -0,0 +1,159 @@
+<?xml version="1.0"?>
+<!--
+license:CC0
+-->
+<mamelayout version="2">
+
+<!-- NOTE: no chesspieces simulation here -->
+
+<!-- define elements -->
+
+ <element name="blackb"><rect><color red="0" green="0" blue="0" /></rect></element>
+ <element name="black2"><rect><color red="0.12" green="0.12" blue="0.12" /></rect></element>
+ <element name="white"><rect><color red="0.8" green="0.8" blue="0.8" /></rect></element>
+ <element name="white2"><rect><color red="0.75" green="0.76" blue="0.78" /></rect></element>
+
+ <element name="button" defstate="0">
+ <rect state="0"><color red="0.26" green="0.25" blue="0.25" /></rect>
+ <rect state="1"><color red="0.36" green="0.35" blue="0.35" /></rect>
+ </element>
+
+ <element name="text_l01a"><text string="A" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_l01b"><text string="1" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_l02a"><text string="B" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_l02b"><text string="2" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_l03a"><text string="C" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_l03b"><text string="3" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_l04a"><text string="D" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_l04b"><text string="4" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_l05a"><text string="E" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_l05b"><text string="5" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_l06a"><text string="F" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_l06b"><text string="6" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_l07a"><text string="G" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_l07b"><text string="7" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_l08a"><text string="H" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_l08b"><text string="8" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+
+ <element name="text_l09a"><text string="LEVEL"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_l09b"><text string="CS" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_l10a"><text string="FIND" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_l10b"><text string="POSITION" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_l11a"><text string="ENTER" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_l11b"><text string="POSITION" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_l12a"><text string="MULTI" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_l12b"><text string="MOVE" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_l13a"><text string="NEW" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_l13b"><text string="GAME" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_l14"><text string="C E"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+ <element name="text_l15"><text string="ENTER"><color red="0.8" green="0.8" blue="0.8" /></text></element>
+
+ <element name="text_p1"><image file="chess/wk.png"><color alpha="0.87" /></image></element>
+ <element name="text_p2"><image file="chess/wq.png"><color alpha="0.87" /></image></element>
+ <element name="text_p3"><image file="chess/wr.png"><color alpha="0.87" /></image></element>
+ <element name="text_p4"><image file="chess/wb.png"><color alpha="0.87" /></image></element>
+ <element name="text_p5"><image file="chess/wn.png"><color alpha="0.87" /></image></element>
+ <element name="text_p6"><image file="chess/wp.png"><color alpha="0.87" /></image></element>
+
+
+<!-- digits -->
+
+ <element name="lcd_bg"><rect><color red="0.54" green="0.57" blue="0.58" /></rect></element>
+
+ <element name="digit" defstate="0">
+ <led7seg><color red="0.2" green="0.16" blue="0.16" /></led7seg>
+ </element>
+ <element name="seg0" defstate="0">
+ <rect><color red="0.54" green="0.57" blue="0.58" /></rect>
+ <text state="1" string="COMPUTING"><color red="0.2" green="0.16" blue="0.16" /></text>
+ <text state="0" string="COMPUTING"><color red="0.49412" green="0.51765" blue="0.51765" /></text>
+ </element>
+
+ <group name="digits">
+ <bounds x="18" y="23.5" width="74" height="27.5" />
+ <bezel element="lcd_bg"><bounds x="18" y="23.5" width="74" height="27.5" /></bezel>
+ <bezel name="computing" element="seg0"><bounds x="40" y="25.7" width="30" height="4" /></bezel>
+ <bezel name="digit3" element="digit"><bounds x="29.5" y="30" width="10" height="14" /></bezel>
+ <bezel name="digit2" element="digit"><bounds x="40" y="30" width="10" height="14" /></bezel>
+ <bezel name="digit1" element="digit"><bounds x="60" y="30" width="10" height="14" /></bezel>
+ <bezel name="digit0" element="digit"><bounds x="70.5" y="30" width="10" height="14" /></bezel>
+ </group>
+
+
+<!-- button panel -->
+
+ <group name="buttons">
+ <bounds x="-1" y="28.5" width="32" height="10.1" />
+
+ <bezel element="text_p6"><bounds x="0.7" y="32.18" width="1.6" height="1.6" /></bezel>
+ <bezel element="text_p5"><bounds x="4.7" y="32.18" width="1.6" height="1.6" /></bezel>
+ <bezel element="text_p4"><bounds x="8.7" y="32.18" width="1.6" height="1.6" /></bezel>
+ <bezel element="text_p3"><bounds x="12.7" y="32.18" width="1.6" height="1.6" /></bezel>
+ <bezel element="text_p2"><bounds x="16.7" y="32.18" width="1.6" height="1.6" /></bezel>
+ <bezel element="text_p1"><bounds x="20.7" y="32.18" width="1.6" height="1.6" /></bezel>
+
+ <bezel element="button" inputtag="IN.0" inputmask="0x01"><bounds x="0" y="30" width="3" height="2.2" /></bezel>
+ <bezel element="button" inputtag="IN.0" inputmask="0x02"><bounds x="4" y="30" width="3" height="2.2" /></bezel>
+ <bezel element="button" inputtag="IN.0" inputmask="0x04"><bounds x="8" y="30" width="3" height="2.2" /></bezel>
+ <bezel element="button" inputtag="IN.0" inputmask="0x08"><bounds x="12" y="30" width="3" height="2.2" /></bezel>
+ <bezel element="button" inputtag="IN.1" inputmask="0x01"><bounds x="16" y="30" width="3" height="2.2" /></bezel>
+ <bezel element="button" inputtag="IN.1" inputmask="0x02"><bounds x="20" y="30" width="3" height="2.2" /></bezel>
+ <bezel element="button" inputtag="IN.1" inputmask="0x04"><bounds x="24" y="30" width="3" height="2.2" /></bezel>
+ <bezel element="button" inputtag="IN.1" inputmask="0x08"><bounds x="28" y="30" width="3" height="2.2" /></bezel>
+
+ <bezel element="button" inputtag="IN.2" inputmask="0x01"><bounds x="0" y="35" width="3" height="2.2" /></bezel>
+ <bezel element="button" inputtag="IN.2" inputmask="0x02"><bounds x="4" y="35" width="3" height="2.2" /></bezel>
+ <bezel element="button" inputtag="IN.2" inputmask="0x04"><bounds x="8" y="35" width="3" height="2.2" /></bezel>
+ <bezel element="button" inputtag="IN.3" inputmask="0x04"><bounds x="12" y="35" width="3" height="2.2" /></bezel>
+ <bezel element="button" inputtag="IN.2" inputmask="0x08"><bounds x="16" y="35" width="3" height="2.2" /></bezel>
+ <bezel element="button" inputtag="IN.3" inputmask="0x01"><bounds x="20" y="35" width="3" height="2.2" /></bezel>
+ <bezel element="button" inputtag="IN.3" inputmask="0x02"><bounds x="26" y="35" width="3" height="2.2" /></bezel>
+
+ <bezel element="text_l01a"><bounds x="0.3" y="28.5" width="2.4" height="1.3" /></bezel>
+ <bezel element="text_l01b"><bounds x="0.3" y="28.5" width="2.4" height="1.3" /></bezel>
+ <bezel element="text_l02a"><bounds x="4.3" y="28.5" width="2.4" height="1.3" /></bezel>
+ <bezel element="text_l02b"><bounds x="4.3" y="28.5" width="2.4" height="1.3" /></bezel>
+ <bezel element="text_l03a"><bounds x="8.3" y="28.5" width="2.4" height="1.3" /></bezel>
+ <bezel element="text_l03b"><bounds x="8.3" y="28.5" width="2.4" height="1.3" /></bezel>
+ <bezel element="text_l04a"><bounds x="12.3" y="28.5" width="2.4" height="1.3" /></bezel>
+ <bezel element="text_l04b"><bounds x="12.3" y="28.5" width="2.4" height="1.3" /></bezel>
+ <bezel element="text_l05a"><bounds x="16.3" y="28.5" width="2.4" height="1.3" /></bezel>
+ <bezel element="text_l05b"><bounds x="16.3" y="28.5" width="2.4" height="1.3" /></bezel>
+ <bezel element="text_l06a"><bounds x="20.3" y="28.5" width="2.4" height="1.3" /></bezel>
+ <bezel element="text_l06b"><bounds x="20.3" y="28.5" width="2.4" height="1.3" /></bezel>
+ <bezel element="text_l07a"><bounds x="24.3" y="28.5" width="2.4" height="1.3" /></bezel>
+ <bezel element="text_l07b"><bounds x="24.3" y="28.5" width="2.4" height="1.3" /></bezel>
+ <bezel element="text_l08a"><bounds x="28.3" y="28.5" width="2.4" height="1.3" /></bezel>
+ <bezel element="text_l08b"><bounds x="28.3" y="28.5" width="2.4" height="1.3" /></bezel>
+
+ <bezel element="white"><bounds x="25" y="32.55" width="1" height="1" /></bezel>
+ <bezel element="white"><bounds x="29" y="32.55" width="1" height="1" /></bezel>
+ <bezel element="blackb"><bounds x="29.15" y="32.7" width="0.7" height="0.7" /></bezel>
+
+ <bezel element="text_l09a"><bounds x="0" y="37.7" width="3" height="0.8" /></bezel>
+ <bezel element="text_l09b"><bounds x="2.5" y="37.6" width="3" height="0.5" /></bezel>
+ <bezel element="text_l10a"><bounds x="4" y="37.35" width="4" height="0.8" /></bezel>
+ <bezel element="text_l10b"><bounds x="4" y="38.15" width="4" height="0.8" /></bezel>
+ <bezel element="text_l11a"><bounds x="8" y="37.35" width="4" height="0.8" /></bezel>
+ <bezel element="text_l11b"><bounds x="8" y="38.15" width="4" height="0.8" /></bezel>
+ <bezel element="text_l12a"><bounds x="12.5" y="37.35" width="4" height="0.8" /></bezel>
+ <bezel element="text_l12b"><bounds x="12.5" y="38.15" width="4" height="0.8" /></bezel>
+ <bezel element="text_l13a"><bounds x="16.7" y="37.35" width="4" height="0.8" /></bezel>
+ <bezel element="text_l13b"><bounds x="16.7" y="38.15" width="4" height="0.8" /></bezel>
+ <bezel element="text_l14"><bounds x="20" y="37.7" width="3" height="0.8" /></bezel>
+ <bezel element="text_l15"><bounds x="26" y="37.7" width="3" height="0.8" /></bezel>
+ </group>
+
+
+<!-- build screen -->
+
+ <view name="Internal Layout">
+ <bounds left="-0.775" right="31.775" top="20" bottom="39.3" />
+
+ <bezel element="white2"><bounds x="-0.775" y="20" width="32.55" height="7.5" /></bezel>
+ <bezel element="black2"><bounds x="7.85" y="20.85" width="15.3" height="5.8" /></bezel>
+ <group ref="digits"><bounds x="8" y="21" width="15" height="5.5" /></group>
+ <group ref="buttons"><bounds x="-1" y="28.5" width="32" height="10.1" /></group>
+ </view>
+
+</mamelayout>
diff --git a/src/mame/layout/saitek_intchess.lay b/src/mame/layout/saitek_intchess.lay
index 2ec6a41db85..2ae9fc1dd65 100644
--- a/src/mame/layout/saitek_intchess.lay
+++ b/src/mame/layout/saitek_intchess.lay
@@ -43,8 +43,8 @@ license:CC0
<element name="text_l03"><text string="NEW GAME"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_l11"><text string="MODE"><color red="0.66" green="0.66" blue="0.66" /></text></element>
- <element name="text_l12"><text string="CLEAR SQUARE"><color red="0.66" green="0.66" blue="0.66" /></text></element>
- <element name="text_l13"><text string="CLEAR BOARD"><color red="0.66" green="0.66" blue="0.66" /></text></element>
+ <element name="text_l12"><text string="C SQUARE"><color red="0.66" green="0.66" blue="0.66" /></text></element>
+ <element name="text_l13"><text string="C BOARD"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_l14"><text string="PLACE"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_l15"><text string="FIND"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_l16"><text string="NEXT BEST"><color red="0.66" green="0.66" blue="0.66" /></text></element>
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 1b3bf2ece9a..91e61c9af61 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -10544,6 +10544,7 @@ compis2 // 1985 Telenova Compis
@source:compuchess.cpp
ccmk1 // Chess Champion MK I
cmpchess
+cmpchess2
cncchess
@source:compmahj.cpp
@@ -35686,6 +35687,7 @@ ccompan
@source:saitek_chesstrv.cpp
chesstrv
+chesstrvi
@source:saitek_corona.cpp
corona