New working machines

--------------------
Sensor Computachess [hap, Sean Riddle]
Portachess II [hap, Sean Riddle]
This commit is contained in:
hap 2020-04-25 02:27:31 +02:00
parent 165a4f4d39
commit 465e64fa14
9 changed files with 660 additions and 17 deletions

View File

@ -2063,6 +2063,7 @@ createMESSProjects(_target, _subtarget, "cxg")
files {
MAME_DIR .. "src/mame/drivers/cxg_ch2001.cpp",
MAME_DIR .. "src/mame/drivers/cxg_dominator.cpp",
MAME_DIR .. "src/mame/drivers/cxg_scptchess.cpp",
MAME_DIR .. "src/mame/drivers/cxg_sphinx40.cpp",
}

View File

@ -0,0 +1,225 @@
// license:BSD-3-Clause
// copyright-holders:hap
// thanks-to:Sean Riddle
/******************************************************************************
CXG Sensor Computachess (CXG-001 or WA-001)
CXG Portachess, Portachess II, Sphinx Chess Voyager
Sensor Computachess is White & Allcock's first original chesscomputer. Cassia's
Chess Mate (aka Computachess) doesn't really count since it was a bootleg of
Fidelity Chess Challenger 10. The chess engine is by Mark Taylor, it's the same
one as in Mini Chess released by SciSys earlier that year.
Initially, it had a "Sound" button for turning the beeps off. This was later
changed to the more useful "New Game". With Portachess, they added a "Save"
switch which puts the MCU in halt state.
Hardware notes (Sensor Computachess):
- PCB label WA 001
- HD44801 MCU @ ~400kHz
- buzzer, 16 leds, button sensors chessboard
HD44801A50 used in:
- CXG Sensor Computachess
- Hanimex HCG 1500
- Schneider Sensor Chesspartner MK 3
- Systema Computachess
HD44801C89 used in:
- CXG Portachess II
- CXG Computachess IV
- Fidelity Computachess IV
- Fidelity Mini Chess Challenger (same housing as Portachess II)
- Schneider MK 7 (same housing as Portachess II)
- Schneider Sensor Chessmaster MK 6
- Schneider Sensor Chesspartner MK 4
TODO:
- Does the 1st Portachess have the same rom data as prtchess2? HD44801C89
says "202" which is the model number of Portachess, although C89 is from 1985.
******************************************************************************/
#include "emu.h"
#include "cpu/hmcs40/hmcs40.h"
#include "machine/sensorboard.h"
#include "sound/dac.h"
#include "sound/volt_reg.h"
#include "video/pwm.h"
#include "speaker.h"
// internal artwork
#include "cxg_scptchess.lh" // clickable
namespace {
class scptchess_state : public driver_device
{
public:
scptchess_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_board(*this, "board"),
m_display(*this, "display"),
m_dac(*this, "dac"),
m_inputs(*this, "IN.%u", 0)
{ }
void scptchess(machine_config &config);
// assume that New Game button is directly tied to MCU reset
DECLARE_INPUT_CHANGED_MEMBER(reset_button) { m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE); }
protected:
virtual void machine_start() override;
private:
// devices/pointers
required_device<hmcs40_cpu_device> m_maincpu;
required_device<sensorboard_device> m_board;
required_device<pwm_display_device> m_display;
required_device<dac_bit_interface> m_dac;
required_ioport_array<2> m_inputs;
void update_display();
template<int N> void mux_w(u8 data);
void leds_w(u16 data);
u16 input_r();
u8 m_inp_mux = 0;
u8 m_led_data = 0;
};
void scptchess_state::machine_start()
{
save_item(NAME(m_inp_mux));
save_item(NAME(m_led_data));
}
/******************************************************************************
I/O
******************************************************************************/
void scptchess_state::update_display()
{
m_display->matrix(m_inp_mux, m_led_data);
}
template<int N>
void scptchess_state::mux_w(u8 data)
{
// R2x,R3x: input mux, led select
m_inp_mux = (m_inp_mux & ~(0xf << (N*4))) | (data << (N*4));
update_display();
}
void scptchess_state::leds_w(u16 data)
{
// D2,D3: led data
m_led_data = ~data >> 2 & 3;
update_display();
// D0: speaker out
m_dac->write(data & 1);
}
u16 scptchess_state::input_r()
{
u16 data = 0;
// D7: read buttons
if (m_inp_mux & m_inputs[0]->read())
data |= 0x80;
// D8-D15: read chessboard
for (int i = 0; i < 8; i++)
if (BIT(m_inp_mux, i))
data |= m_board->read_file(i ^ 7) << 8;
return ~data;
}
/******************************************************************************
Input Ports
******************************************************************************/
static INPUT_PORTS_START( scptchess )
PORT_START("IN.0")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Sound") // only hooked up on 1st version
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("Reverse Play")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("Level")
PORT_START("IN.1")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_CHANGED_MEMBER(DEVICE_SELF, scptchess_state, reset_button, 0) PORT_NAME("New Game")
INPUT_PORTS_END
static INPUT_PORTS_START( prtchess2 )
PORT_INCLUDE( scptchess )
PORT_MODIFY("IN.0")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_UNUSED)
INPUT_PORTS_END
/******************************************************************************
Machine Configs
******************************************************************************/
void scptchess_state::scptchess(machine_config &config)
{
/* basic machine hardware */
HD44801(config, m_maincpu, 400000);
m_maincpu->write_r<2>().set(FUNC(scptchess_state::mux_w<0>));
m_maincpu->write_r<3>().set(FUNC(scptchess_state::mux_w<1>));
m_maincpu->write_d().set(FUNC(scptchess_state::leds_w));
m_maincpu->read_d().set(FUNC(scptchess_state::input_r));
SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS);
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
m_board->set_delay(attotime::from_msec(150));
/* video hardware */
PWM_DISPLAY(config, m_display).set_size(8, 2);
config.set_default_layout(layout_cxg_scptchess);
/* sound hardware */
SPEAKER(config, "speaker").front_center();
DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25);
VOLTAGE_REGULATOR(config, "vref").add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
}
/******************************************************************************
ROM Definitions
******************************************************************************/
ROM_START( scptchess )
ROM_REGION( 0x2000, "maincpu", 0 )
ROM_LOAD("white_allcock_44801a50", 0x0000, 0x2000, CRC(c5c53e05) SHA1(8fa9b8e48ca54f08585afd83ae78fb1970fbd382) )
ROM_END
ROM_START( prtchess2 )
ROM_REGION( 0x2000, "maincpu", 0 )
ROM_LOAD("202_newcrest_16_hd44801c89", 0x0000, 0x2000, CRC(56b48f70) SHA1(84ec62323c6d3314e0515bccfde2f65f6d753e99) )
ROM_END
} // anonymous namespace
/******************************************************************************
Drivers
******************************************************************************/
// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
CONS( 1981, scptchess, 0, 0, scptchess, scptchess, scptchess_state, empty_init, "CXG Systems / White & Allcock", "Sensor Computachess", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1985, prtchess2, 0, 0, scptchess, prtchess2, scptchess_state, empty_init, "CXG Systems / Newcrest Technology", "Portachess II", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )

View File

@ -11,7 +11,7 @@ Hardware notes:
- 4-digit 7seg panel, sensory board with 50 buttons
- PCB label 510-1030A01
It's a checkers game for once instead of chess.
Instead of chess, it's a checkers game for once (international rules).
When playing it on MAME with the sensorboard device, use the modifier keys
(eg. hold CTRL to ignore sensor). The game expects the player to press a sensor

View File

@ -65,15 +65,15 @@
@A88 HD38820 1984, Bandai Pair Match (PT-460) (1/2)
@A89 HD38820 1984, Bandai Pair Match (PT-460) (2/2)
*A34 HD44801 1981, Scisys Graduate Chess / Chesspartner 3000/4000
*A50 HD44801 1981, CXG Sensor Computachess
*A34 HD44801 1981, Scisys Mini Chess / Graduate Chess / Chesspartner 3000/4000
A50 HD44801 1981, CXG Sensor Computachess -> cxg_scptchess.cpp
A75 HD44801 1982, Alpha 8201 protection MCU -> machine/alpha8201.*
*A85 HD44801 1982, Scisys Travel Sensor / Travel Mate / Chesspartner 5000/6000
B35 HD44801 1983, Alpha 8302 protection MCU (see 8201)
B42 HD44801 1983, Alpha 8303 protection MCU (see 8201)
*B43 HD44801 1983, Alpha 8304 protection MCU (see 8201)
C57 HD44801 1985, Alpha 8505 protection MCU (see 8201)
*C89 HD44801 1985, CXG Portachess II / Computachess IV
C89 HD44801 1985, CXG Portachess II / Computachess IV -> cxg_scptchess.cpp
*A86 HD44820 1983, Chess King Pocket Micro
*B63 HD44820 1985, CXG Pocket Chess (12 buttons)

View File

@ -21,6 +21,7 @@ TODO:
#include "machine/f3853.h"
#include "video/hlcd0538.h"
#include "video/pwm.h"
#include "screen.h"
// internal artwork
//#include "saitek_exchess.lh" // clickable
@ -37,11 +38,15 @@ public:
m_lcd1(*this, "lcd1"),
m_lcd2(*this, "lcd2"),
m_display(*this, "display"),
m_battery(*this, "battery"),
m_inputs(*this, "IN.%u", 0)
{ }
void exchess(machine_config &config);
// battery status indicator is not software controlled
DECLARE_INPUT_CHANGED_MEMBER(battery) { m_battery = newval; }
protected:
virtual void machine_start() override;
@ -51,7 +56,8 @@ private:
required_device<hlcd0538_device> m_lcd1;
required_device<hlcd0539_device> m_lcd2;
required_device<pwm_display_device> m_display;
required_ioport_array<3> m_inputs;
output_finder<> m_battery;
required_ioport_array<4> m_inputs;
void main_map(address_map &map);
void main_io(address_map &map);
@ -72,6 +78,7 @@ private:
void exchess_state::machine_start()
{
m_battery.resolve();
m_ram = make_unique_clear<u8[]>(0x400);
// register for savestates
@ -127,7 +134,7 @@ u8 exchess_state::ram_address_r()
u8 data = m_ram_address[N];
// P13: Enter button
return (N) ? data | m_inputs[0]->read() : data;
return (N) ? data | (m_inputs[0]->read() & 8) : data;
}
void exchess_state::ram_data_w(u8 data)
@ -183,6 +190,11 @@ static INPUT_PORTS_START( exchess )
PORT_START("IN.2")
PORT_BIT(0xff, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("IN.3")
PORT_CONFNAME( 0x01, 0x00, "Battery Status" ) PORT_CHANGED_MEMBER(DEVICE_SELF, exchess_state, battery, 0)
PORT_CONFSETTING( 0x01, "Low" )
PORT_CONFSETTING( 0x00, DEF_STR( Normal ) )
INPUT_PORTS_END
@ -218,6 +230,11 @@ void exchess_state::exchess(machine_config &config)
PWM_DISPLAY(config, m_display).set_size(8, 26+34);
//config.set_default_layout(layout_saitek_exchess);
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(977, 1080);
screen.set_visarea_full();
}
@ -229,6 +246,9 @@ void exchess_state::exchess(machine_config &config)
ROM_START( exchess )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD("sl90553", 0x0000, 0x1000, CRC(a61b0c7e) SHA1(a13b11a93f78236223c5c0b9879a93284b7f7525) )
ROM_REGION( 774009, "screen", ROMREGION_ERASE00 )
//ROM_LOAD("exchess.svg", 0, 774009, CRC(795d66e0) SHA1(5f786c00bf33793bfba7065d8e9ec476e02e5c46) )
ROM_END
} // anonymous namespace

View File

@ -14,7 +14,7 @@ Mark VI/Philidor was released a year later, it was a plug-in module for the Mark
It's not much stronger than Mark V(retroactively called Mark V/Travemunde).
When using the MAME sensorboard interface with MK VI, reset the board by pressing
CLEAR before RESET, needed on 1st power-on or when starting a new game.
CLEAR before RESET, needed when starting a new game.
Hardware notes:
- SY6502A @ ~2MHz (19.6608MHz XTAL, bunch of 74113 dividers)
@ -122,11 +122,12 @@ private:
template<int N> DECLARE_WRITE8_MEMBER(pwm_output_w);
template<int N> DECLARE_WRITE64_MEMBER(lcd_output_w);
u8 m_dac_data;
u8 m_lcd_lcd;
u8 m_lcd_rowsel;
u8 m_cb_mux;
u8 m_dac_data = 0;
u8 m_lcd_lcd = 0;
u8 m_lcd_rowsel = 0;
u8 m_cb_mux = 0;
emu_timer *m_cb_startdelay;
emu_timer *m_irqtimer;
TIMER_CALLBACK_MEMBER(interrupt);
void write_lcd(int state);
@ -137,11 +138,8 @@ void mark5_state::machine_start()
m_out_x.resolve();
m_irqtimer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mark5_state::interrupt),this));
// zerofill
m_dac_data = 0;
m_lcd_lcd = 0;
m_lcd_rowsel = 0;
m_cb_mux = 0;
m_cb_startdelay = machine().scheduler().timer_alloc(timer_expired_delegate());
m_cb_startdelay->adjust(attotime::from_msec(100));
// register for savestates
save_item(NAME(m_dac_data));
@ -279,7 +277,7 @@ WRITE8_MEMBER(mark5_state::cb_w)
READ8_MEMBER(mark5_state::cb_r)
{
if (~m_inputs[6]->read() & 0x20)
if (~m_inputs[6]->read() & 0x20 || m_cb_startdelay->enabled())
return 0xff;
// read chessboard sensors

View File

@ -0,0 +1,394 @@
<?xml version="1.0"?>
<!--
license:CC0
-->
<mamelayout version="2">
<!-- define elements -->
<element name="white2"><rect><color red="0.76" green="0.75" blue="0.74" /></rect></element>
<element name="but" defstate="0">
<rect state="1"><color red="0.25" green="0.24" blue="0.24" /></rect>
<rect state="0"><color red="0.17" green="0.16" blue="0.16" /></rect>
</element>
<element name="led" defstate="0">
<disk state="1"><color red="1.0" green="0.1" blue="0.15" /></disk>
<disk state="0"><color red="0.17" green="0.015" blue="0.02" /></disk>
</element>
<element name="text_1"><text string="1"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_2"><text string="2"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_3"><text string="3"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_4"><text string="4"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_5"><text string="5"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_6"><text string="6"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_7"><text string="7"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_8"><text string="8"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_a"><text string="A"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_b"><text string="B"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_c"><text string="C"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_d"><text string="D"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_e"><text string="E"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_f"><text string="F"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_g"><text string="G"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_h"><text string="H"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_l1"><text string="CHECK"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_l2"><text string="MATE"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_l3"><text string="STALEMATE"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_l4"><text string="YOUR MOVE"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_l5"><text string="NEW GAME"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_l6"><text string="LEVEL"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_l7"><text string="REVERSE PLAY"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<!-- sb board -->
<element name="cblack"><rect><color red="0.41" green="0.4" blue="0.39" /></rect></element>
<element name="cwhite"><rect><color red="0.81" green="0.8" blue="0.79" /></rect></element>
<element name="hlbb" defstate="0">
<text string=" "><bounds x="0" y="0" width="1" height="1" /></text>
<disk state="1">
<bounds x="0.12" y="0.12" width="0.76" height="0.76" />
<color red="0" green="0" blue="0" />
</disk>
</element>
<element name="piece" defstate="0">
<image file="chess/wp.png" state="1"/>
<image file="chess/wn.png" state="2"/>
<image file="chess/wb.png" state="3"/>
<image file="chess/wr.png" state="4"/>
<image file="chess/wq.png" state="5"/>
<image file="chess/wk.png" state="6"/>
<image file="chess/bp.png" state="7"/>
<image file="chess/bn.png" state="8"/>
<image file="chess/bb.png" state="9"/>
<image file="chess/br.png" state="10"/>
<image file="chess/bq.png" state="11"/>
<image file="chess/bk.png" state="12"/>
<!-- selected pieces -->
<image file="chess/wp.png" state="13"><color alpha="0.5" /></image>
<image file="chess/wn.png" state="14"><color alpha="0.5" /></image>
<image file="chess/wb.png" state="15"><color alpha="0.5" /></image>
<image file="chess/wr.png" state="16"><color alpha="0.5" /></image>
<image file="chess/wq.png" state="17"><color alpha="0.5" /></image>
<image file="chess/wk.png" state="18"><color alpha="0.5" /></image>
<image file="chess/bp.png" state="19"><color alpha="0.5" /></image>
<image file="chess/bn.png" state="20"><color alpha="0.5" /></image>
<image file="chess/bb.png" state="21"><color alpha="0.5" /></image>
<image file="chess/br.png" state="22"><color alpha="0.5" /></image>
<image file="chess/bq.png" state="23"><color alpha="0.5" /></image>
<image file="chess/bk.png" state="24"><color alpha="0.5" /></image>
</element>
<group name="sb_board">
<bounds x="0" y="0" width="80" height="80" />
<!-- squares (avoid seams) -->
<bezel element="cwhite"><bounds x="0" y="0" width="11" height="11" /></bezel>
<bezel element="cblack"><bounds x="10" y="0" width="11" height="11" /></bezel>
<bezel element="cwhite"><bounds x="20" y="0" width="11" height="11" /></bezel>
<bezel element="cblack"><bounds x="30" y="0" width="11" height="11" /></bezel>
<bezel element="cwhite"><bounds x="40" y="0" width="11" height="11" /></bezel>
<bezel element="cblack"><bounds x="50" y="0" width="11" height="11" /></bezel>
<bezel element="cwhite"><bounds x="60" y="0" width="11" height="11" /></bezel>
<bezel element="cblack"><bounds x="70" y="0" width="10" height="11" /></bezel>
<bezel element="cblack"><bounds x="0" y="10" width="11" height="11" /></bezel>
<bezel element="cwhite"><bounds x="10" y="10" width="11" height="11" /></bezel>
<bezel element="cblack"><bounds x="20" y="10" width="11" height="11" /></bezel>
<bezel element="cwhite"><bounds x="30" y="10" width="11" height="11" /></bezel>
<bezel element="cblack"><bounds x="40" y="10" width="11" height="11" /></bezel>
<bezel element="cwhite"><bounds x="50" y="10" width="11" height="11" /></bezel>
<bezel element="cblack"><bounds x="60" y="10" width="11" height="11" /></bezel>
<bezel element="cwhite"><bounds x="70" y="10" width="10" height="11" /></bezel>
<bezel element="cwhite"><bounds x="0" y="20" width="11" height="11" /></bezel>
<bezel element="cblack"><bounds x="10" y="20" width="11" height="11" /></bezel>
<bezel element="cwhite"><bounds x="20" y="20" width="11" height="11" /></bezel>
<bezel element="cblack"><bounds x="30" y="20" width="11" height="11" /></bezel>
<bezel element="cwhite"><bounds x="40" y="20" width="11" height="11" /></bezel>
<bezel element="cblack"><bounds x="50" y="20" width="11" height="11" /></bezel>
<bezel element="cwhite"><bounds x="60" y="20" width="11" height="11" /></bezel>
<bezel element="cblack"><bounds x="70" y="20" width="10" height="11" /></bezel>
<bezel element="cblack"><bounds x="0" y="30" width="11" height="11" /></bezel>
<bezel element="cwhite"><bounds x="10" y="30" width="11" height="11" /></bezel>
<bezel element="cblack"><bounds x="20" y="30" width="11" height="11" /></bezel>
<bezel element="cwhite"><bounds x="30" y="30" width="11" height="11" /></bezel>
<bezel element="cblack"><bounds x="40" y="30" width="11" height="11" /></bezel>
<bezel element="cwhite"><bounds x="50" y="30" width="11" height="11" /></bezel>
<bezel element="cblack"><bounds x="60" y="30" width="11" height="11" /></bezel>
<bezel element="cwhite"><bounds x="70" y="30" width="10" height="11" /></bezel>
<bezel element="cwhite"><bounds x="0" y="40" width="11" height="11" /></bezel>
<bezel element="cblack"><bounds x="10" y="40" width="11" height="11" /></bezel>
<bezel element="cwhite"><bounds x="20" y="40" width="11" height="11" /></bezel>
<bezel element="cblack"><bounds x="30" y="40" width="11" height="11" /></bezel>
<bezel element="cwhite"><bounds x="40" y="40" width="11" height="11" /></bezel>
<bezel element="cblack"><bounds x="50" y="40" width="11" height="11" /></bezel>
<bezel element="cwhite"><bounds x="60" y="40" width="11" height="11" /></bezel>
<bezel element="cblack"><bounds x="70" y="40" width="10" height="11" /></bezel>
<bezel element="cblack"><bounds x="0" y="50" width="11" height="11" /></bezel>
<bezel element="cwhite"><bounds x="10" y="50" width="11" height="11" /></bezel>
<bezel element="cblack"><bounds x="20" y="50" width="11" height="11" /></bezel>
<bezel element="cwhite"><bounds x="30" y="50" width="11" height="11" /></bezel>
<bezel element="cblack"><bounds x="40" y="50" width="11" height="11" /></bezel>
<bezel element="cwhite"><bounds x="50" y="50" width="11" height="11" /></bezel>
<bezel element="cblack"><bounds x="60" y="50" width="11" height="11" /></bezel>
<bezel element="cwhite"><bounds x="70" y="50" width="10" height="11" /></bezel>
<bezel element="cwhite"><bounds x="0" y="60" width="11" height="11" /></bezel>
<bezel element="cblack"><bounds x="10" y="60" width="11" height="11" /></bezel>
<bezel element="cwhite"><bounds x="20" y="60" width="11" height="11" /></bezel>
<bezel element="cblack"><bounds x="30" y="60" width="11" height="11" /></bezel>
<bezel element="cwhite"><bounds x="40" y="60" width="11" height="11" /></bezel>
<bezel element="cblack"><bounds x="50" y="60" width="11" height="11" /></bezel>
<bezel element="cwhite"><bounds x="60" y="60" width="11" height="11" /></bezel>
<bezel element="cblack"><bounds x="70" y="60" width="10" height="11" /></bezel>
<bezel element="cblack"><bounds x="0" y="70" width="11" height="10" /></bezel>
<bezel element="cwhite"><bounds x="10" y="70" width="11" height="10" /></bezel>
<bezel element="cblack"><bounds x="20" y="70" width="11" height="10" /></bezel>
<bezel element="cwhite"><bounds x="30" y="70" width="11" height="10" /></bezel>
<bezel element="cblack"><bounds x="40" y="70" width="11" height="10" /></bezel>
<bezel element="cwhite"><bounds x="50" y="70" width="11" height="10" /></bezel>
<bezel element="cblack"><bounds x="60" y="70" width="11" height="10" /></bezel>
<bezel element="cwhite"><bounds x="70" y="70" width="10" height="10" /></bezel>
<!-- sensors, pieces -->
<repeat count="8">
<param name="y" start="0" increment="10" />
<param name="i" start="8" increment="-1" />
<bezel element="hlbb" inputtag="board:RANK.~i~" inputmask="0x01"><bounds x="0" y="~y~" width="10" height="10" /><color alpha="0.04" /></bezel>
<bezel element="hlbb" inputtag="board:RANK.~i~" inputmask="0x02"><bounds x="10" y="~y~" width="10" height="10" /><color alpha="0.04" /></bezel>
<bezel element="hlbb" inputtag="board:RANK.~i~" inputmask="0x04"><bounds x="20" y="~y~" width="10" height="10" /><color alpha="0.04" /></bezel>
<bezel element="hlbb" inputtag="board:RANK.~i~" inputmask="0x08"><bounds x="30" y="~y~" width="10" height="10" /><color alpha="0.04" /></bezel>
<bezel element="hlbb" inputtag="board:RANK.~i~" inputmask="0x10"><bounds x="40" y="~y~" width="10" height="10" /><color alpha="0.04" /></bezel>
<bezel element="hlbb" inputtag="board:RANK.~i~" inputmask="0x20"><bounds x="50" y="~y~" width="10" height="10" /><color alpha="0.04" /></bezel>
<bezel element="hlbb" inputtag="board:RANK.~i~" inputmask="0x40"><bounds x="60" y="~y~" width="10" height="10" /><color alpha="0.04" /></bezel>
<bezel element="hlbb" inputtag="board:RANK.~i~" inputmask="0x80"><bounds x="70" y="~y~" width="10" height="10" /><color alpha="0.04" /></bezel>
<bezel name="piece_a~i~" element="piece"><bounds x="0" y="~y~" width="10" height="10" /></bezel>
<bezel name="piece_b~i~" element="piece"><bounds x="10" y="~y~" width="10" height="10" /></bezel>
<bezel name="piece_c~i~" element="piece"><bounds x="20" y="~y~" width="10" height="10" /></bezel>
<bezel name="piece_d~i~" element="piece"><bounds x="30" y="~y~" width="10" height="10" /></bezel>
<bezel name="piece_e~i~" element="piece"><bounds x="40" y="~y~" width="10" height="10" /></bezel>
<bezel name="piece_f~i~" element="piece"><bounds x="50" y="~y~" width="10" height="10" /></bezel>
<bezel name="piece_g~i~" element="piece"><bounds x="60" y="~y~" width="10" height="10" /></bezel>
<bezel name="piece_h~i~" element="piece"><bounds x="70" y="~y~" width="10" height="10" /></bezel>
</repeat>
</group>
<!-- sb ui -->
<element name="hlub" defstate="0">
<rect state="1"><color red="0" green="0" blue="0" /></rect>
</element>
<element name="text_uit1"><text string="S.BOARD"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_uit2"><text string="INTERFACE"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_uib1"><text string="BOARD:"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_uib2">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="RESET"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_uib3">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="CLEAR"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_uis1"><text string="SPAWN:"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_uih1"><text string="HAND:"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_uih2">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="REMOVE"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_uiu1"><text string="UNDO:"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_uiu2a">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string=" &lt;&lt;"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_uiu2b">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string=" &lt; "><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_uiu2c">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string=" &gt;"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_uiu2d">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string=" &gt;&gt;"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_uiu3a" defstate="0">
<simplecounter maxstate="999" digits="1" align="2">
<color red="0.81" green="0.8" blue="0.79" />
</simplecounter>
</element>
<element name="text_uiu3b"><text string="/"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_uiu3c" defstate="0">
<simplecounter maxstate="999" digits="1" align="1">
<color red="0.81" green="0.8" blue="0.79" />
</simplecounter>
</element>
<group name="sb_ui">
<bounds x="0" y="0" width="10" height="80" />
<bezel element="cblack"><bounds x="0" y="0" width="10" height="1" /></bezel>
<bezel element="cblack"><bounds x="0" y="7" width="10" height="1" /></bezel>
<bezel element="cblack"><bounds x="0" y="79" width="10" height="1" /></bezel>
<bezel element="text_uit1"><bounds x="0" y="2" width="10" height="2" /></bezel>
<bezel element="text_uit2"><bounds x="0" y="4" width="10" height="2" /></bezel>
<!-- board -->
<bezel element="text_uib1"><bounds x="0" y="9" width="10" height="2" /></bezel>
<bezel element="cwhite"><bounds x="1" y="11.5" width="8" height="2.5" /></bezel>
<bezel element="cwhite"><bounds x="1" y="15" width="8" height="2.5" /></bezel>
<bezel element="text_uib2"><bounds x="1.5" y="11.75" width="7" height="2" /></bezel>
<bezel element="text_uib3"><bounds x="1.5" y="15.25" width="7" height="2" /></bezel>
<bezel element="hlub" inputtag="board:UI" inputmask="0x200"><bounds x="1" y="11.5" width="8" height="2.5" /><color alpha="0.25" /></bezel>
<bezel element="hlub" inputtag="board:UI" inputmask="0x100"><bounds x="1" y="15" width="8" height="2.5" /><color alpha="0.25" /></bezel>
<!-- spawn -->
<bezel element="text_uis1"><bounds x="0" y="20.5" width="10" height="2" /></bezel>
<bezel element="cwhite"><bounds x="1" y="23" width="8" height="12" /></bezel>
<bezel element="cwhite"><bounds x="1" y="36" width="8" height="12" /></bezel>
<bezel name="piece_ui1" element="piece"><bounds x="1" y="23" width="4" height="4" /></bezel>
<bezel name="piece_ui2" element="piece"><bounds x="1" y="27" width="4" height="4" /></bezel>
<bezel name="piece_ui3" element="piece"><bounds x="1" y="31" width="4" height="4" /></bezel>
<bezel name="piece_ui4" element="piece"><bounds x="5" y="23" width="4" height="4" /></bezel>
<bezel name="piece_ui5" element="piece"><bounds x="5" y="27" width="4" height="4" /></bezel>
<bezel name="piece_ui6" element="piece"><bounds x="5" y="31" width="4" height="4" /></bezel>
<bezel name="piece_ui7" element="piece"><bounds x="1" y="36" width="4" height="4" /></bezel>
<bezel name="piece_ui8" element="piece"><bounds x="1" y="40" width="4" height="4" /></bezel>
<bezel name="piece_ui9" element="piece"><bounds x="1" y="44" width="4" height="4" /></bezel>
<bezel name="piece_ui10" element="piece"><bounds x="5" y="36" width="4" height="4" /></bezel>
<bezel name="piece_ui11" element="piece"><bounds x="5" y="40" width="4" height="4" /></bezel>
<bezel name="piece_ui12" element="piece"><bounds x="5" y="44" width="4" height="4" /></bezel>
<bezel element="hlub" inputtag="board:SPAWN" inputmask="0x0001"><bounds x="1" y="23" width="4" height="4" /><color alpha="0.25" /></bezel>
<bezel element="hlub" inputtag="board:SPAWN" inputmask="0x0002"><bounds x="1" y="27" width="4" height="4" /><color alpha="0.25" /></bezel>
<bezel element="hlub" inputtag="board:SPAWN" inputmask="0x0004"><bounds x="1" y="31" width="4" height="4" /><color alpha="0.25" /></bezel>
<bezel element="hlub" inputtag="board:SPAWN" inputmask="0x0008"><bounds x="5" y="23" width="4" height="4" /><color alpha="0.25" /></bezel>
<bezel element="hlub" inputtag="board:SPAWN" inputmask="0x0010"><bounds x="5" y="27" width="4" height="4" /><color alpha="0.25" /></bezel>
<bezel element="hlub" inputtag="board:SPAWN" inputmask="0x0020"><bounds x="5" y="31" width="4" height="4" /><color alpha="0.25" /></bezel>
<bezel element="hlub" inputtag="board:SPAWN" inputmask="0x0040"><bounds x="1" y="36" width="4" height="4" /><color alpha="0.25" /></bezel>
<bezel element="hlub" inputtag="board:SPAWN" inputmask="0x0080"><bounds x="1" y="40" width="4" height="4" /><color alpha="0.25" /></bezel>
<bezel element="hlub" inputtag="board:SPAWN" inputmask="0x0100"><bounds x="1" y="44" width="4" height="4" /><color alpha="0.25" /></bezel>
<bezel element="hlub" inputtag="board:SPAWN" inputmask="0x0200"><bounds x="5" y="36" width="4" height="4" /><color alpha="0.25" /></bezel>
<bezel element="hlub" inputtag="board:SPAWN" inputmask="0x0400"><bounds x="5" y="40" width="4" height="4" /><color alpha="0.25" /></bezel>
<bezel element="hlub" inputtag="board:SPAWN" inputmask="0x0800"><bounds x="5" y="44" width="4" height="4" /><color alpha="0.25" /></bezel>
<!-- hand -->
<bezel element="text_uih1"><bounds x="0" y="51" width="10" height="2" /></bezel>
<bezel element="cblack"><bounds x="1" y="53.5" width="8" height="6" /></bezel>
<bezel name="piece_ui0" element="piece"><bounds x="2" y="53.5" width="6" height="6" /></bezel>
<bezel element="cwhite"><bounds x="1" y="60.5" width="8" height="2.5" /></bezel>
<bezel element="text_uih2"><bounds x="1.5" y="60.75" width="7" height="2" /></bezel>
<bezel element="hlub" inputtag="board:UI" inputmask="0x08"><bounds x="1" y="60.5" width="8" height="2.5" /><color alpha="0.25" /></bezel>
<!-- undo -->
<bezel element="text_uiu1"><bounds x="0" y="66" width="10" height="2" /></bezel>
<bezel element="cwhite"><bounds x="1" y="68.5" width="1.7" height="6" /></bezel>
<bezel element="cwhite"><bounds x="3.1" y="68.5" width="1.7" height="6" /></bezel>
<bezel element="cwhite"><bounds x="5.2" y="68.5" width="1.7" height="6" /></bezel>
<bezel element="cwhite"><bounds x="7.3" y="68.5" width="1.7" height="6" /></bezel>
<bezel element="text_uiu2a"><bounds x="1" y="69.5" width="1.7" height="4" /></bezel>
<bezel element="text_uiu2b"><bounds x="3.1" y="69.5" width="1.7" height="4" /></bezel>
<bezel element="text_uiu2c"><bounds x="5.2" y="69.5" width="1.7" height="4" /></bezel>
<bezel element="text_uiu2d"><bounds x="7.3" y="69.5" width="1.7" height="4" /></bezel>
<bezel element="hlub" inputtag="board:UI" inputmask="0x10"><bounds x="1" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></bezel>
<bezel element="hlub" inputtag="board:UI" inputmask="0x20"><bounds x="3.1" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></bezel>
<bezel element="hlub" inputtag="board:UI" inputmask="0x40"><bounds x="5.2" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></bezel>
<bezel element="hlub" inputtag="board:UI" inputmask="0x80"><bounds x="7.3" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></bezel>
<bezel name="count_ui0" element="text_uiu3a"><bounds x="0" y="75" width="4" height="2" /></bezel>
<bezel name="count_ui1" element="text_uiu3c"><bounds x="6" y="75" width="4" height="2" /></bezel>
<bezel element="text_uiu3b"><bounds x="4" y="75" width="2" height="2" /></bezel>
</group>
<!-- build screen -->
<view name="Internal Layout">
<bounds left="-12" right="102" top="-1" bottom="91" />
<group ref="sb_board"><bounds x="4" y="3" width="80" height="80" /></group>
<group ref="sb_ui"><bounds x="-10.5" y="3" width="10" height="80" /></group>
<!-- chessboard coords -->
<bezel element="text_8"><bounds x="1.25" y="9" width="2" height="2" /></bezel>
<bezel element="text_7"><bounds x="1.25" y="19" width="2" height="2" /></bezel>
<bezel element="text_6"><bounds x="1.25" y="29" width="2" height="2" /></bezel>
<bezel element="text_5"><bounds x="1.25" y="39" width="2" height="2" /></bezel>
<bezel element="text_4"><bounds x="1.25" y="49" width="2" height="2" /></bezel>
<bezel element="text_3"><bounds x="1.25" y="59" width="2" height="2" /></bezel>
<bezel element="text_2"><bounds x="1.25" y="69" width="2" height="2" /></bezel>
<bezel element="text_1"><bounds x="1.25" y="79" width="2" height="2" /></bezel>
<bezel element="text_a"><bounds x="6" y="83.7" width="2" height="2" /></bezel>
<bezel element="text_b"><bounds x="16" y="83.7" width="2" height="2" /></bezel>
<bezel element="text_c"><bounds x="26" y="83.7" width="2" height="2" /></bezel>
<bezel element="text_d"><bounds x="36" y="83.7" width="2" height="2" /></bezel>
<bezel element="text_e"><bounds x="46" y="83.7" width="2" height="2" /></bezel>
<bezel element="text_f"><bounds x="56" y="83.7" width="2" height="2" /></bezel>
<bezel element="text_g"><bounds x="66" y="83.7" width="2" height="2" /></bezel>
<bezel element="text_h"><bounds x="76" y="83.7" width="2" height="2" /></bezel>
<!-- chessboard leds -->
<bezel name="0.1" element="led"><bounds x="1.5" y="7.25" width="1.5" height="1.5" /></bezel>
<bezel name="1.1" element="led"><bounds x="1.5" y="17.25" width="1.5" height="1.5" /></bezel>
<bezel name="2.1" element="led"><bounds x="1.5" y="27.25" width="1.5" height="1.5" /></bezel>
<bezel name="3.1" element="led"><bounds x="1.5" y="37.25" width="1.5" height="1.5" /></bezel>
<bezel name="4.1" element="led"><bounds x="1.5" y="47.25" width="1.5" height="1.5" /></bezel>
<bezel name="5.1" element="led"><bounds x="1.5" y="57.25" width="1.5" height="1.5" /></bezel>
<bezel name="6.1" element="led"><bounds x="1.5" y="67.25" width="1.5" height="1.5" /></bezel>
<bezel name="7.1" element="led"><bounds x="1.5" y="77.25" width="1.5" height="1.5" /></bezel>
<bezel name="7.0" element="led"><bounds x="8.25" y="84" width="1.5" height="1.5" /></bezel>
<bezel name="6.0" element="led"><bounds x="18.25" y="84" width="1.5" height="1.5" /></bezel>
<bezel name="5.0" element="led"><bounds x="28.25" y="84" width="1.5" height="1.5" /></bezel>
<bezel name="4.0" element="led"><bounds x="38.25" y="84" width="1.5" height="1.5" /></bezel>
<bezel name="3.0" element="led"><bounds x="48.25" y="84" width="1.5" height="1.5" /></bezel>
<bezel name="2.0" element="led"><bounds x="58.25" y="84" width="1.5" height="1.5" /></bezel>
<bezel name="1.0" element="led"><bounds x="68.25" y="84" width="1.5" height="1.5" /></bezel>
<bezel name="0.0" element="led"><bounds x="78.25" y="84" width="1.5" height="1.5" /></bezel>
<!-- bottom side labels -->
<bezel element="white2"><bounds x="9" y="86.3" width="10" height="0.3" /></bezel>
<bezel element="white2"><bounds x="29" y="86.3" width="10" height="0.3" /></bezel>
<bezel element="white2"><bounds x="49" y="86.3" width="10" height="0.3" /></bezel>
<bezel element="white2"><bounds x="69" y="86.3" width="10" height="0.3" /></bezel>
<bezel element="text_l1"><bounds x="9" y="87.1" width="10" height="2" /></bezel>
<bezel element="text_l2"><bounds x="29" y="87.1" width="10" height="2" /></bezel>
<bezel element="text_l3"><bounds x="49" y="87.1" width="10" height="2" /></bezel>
<bezel element="text_l4"><bounds x="69" y="87.1" width="10" height="2" /></bezel>
<!-- right side buttons -->
<bezel element="but" inputtag="IN.1" inputmask="0x01"><bounds x="88" y="59" width="10" height="4" /></bezel>
<bezel element="but" inputtag="IN.0" inputmask="0x80"><bounds x="88" y="69" width="10" height="4" /></bezel>
<bezel element="but" inputtag="IN.0" inputmask="0x40"><bounds x="88" y="79" width="10" height="4" /></bezel>
<bezel element="text_l5"><bounds x="86" y="56.5" width="14" height="2" /></bezel>
<bezel element="text_l6"><bounds x="86" y="66.5" width="14" height="2" /></bezel>
<bezel element="text_l7"><bounds x="86" y="76.5" width="14" height="2" /></bezel>
</view>
</mamelayout>

View File

@ -11414,6 +11414,10 @@ ch2001
@source:cxg_dominator.cpp
sdtor
@source:cxg_scptchess.cpp
prtchess2
scptchess
@source:cxg_sphinx40.cpp
sphinx40

View File

@ -193,6 +193,7 @@ ct486.cpp
cvicny.cpp
cxg_ch2001.cpp
cxg_dominator.cpp
cxg_scptchess.cpp
cxg_sphinx40.cpp
cxhumax.cpp
cybiko.cpp