igor.cpp: rename to ivant.cpp

New working clones
------------------
Ivan The Terrible (H8/3216 version) [hap, Sean Riddle]
This commit is contained in:
hap 2024-07-12 19:28:33 +02:00
parent daccce5990
commit 756f5cfe24
6 changed files with 620 additions and 61 deletions

View File

@ -3,23 +3,43 @@
// thanks-to:Sean Riddle
/*******************************************************************************
Excalibur Ivan The Terrible (model 701E, H8/3216 version)
Excalibur Igor (model 711E)
This is the newer version of Ivan, see ivanto.cpp for the first version. It's
on very different hardware. Manufacturing was moved to Ewig. Ivan's model number
is the same as the first version, but it's easy to distinguish them.
The chess engine is by Ron Nelson, similar to the one in Excalibur Mirage. It
has speech, and also sound effects that are reminiscent of Battle Chess.
Hardware notes:
- PCB label: EXCALIBUR ELECTRONICS, INC. 510-1005A01, 5/28/97 IGOR
- Hitachi H8/3214 MCU, 12MHz XTAL
- small daughterboard (27C080 pinout) with a 128KB ROM under epoxy
Ivan The Terrible:
- PCB label: EXCALIBUR ELECTRONICS, INC. 4/18/97, IVANT2, 00-33352-000
- Hitachi H8/3216 MCU (only 32KB out of 48KB internal ROM used), 12MHz XTAL
- small daughterboard (27C080 pinout) with an 1MB ROM under epoxy, contents is
identical to the 1st version of Ivan after unscrambling
- 8-bit DAC (Yageo 10L503G resistor array), KA8602 amplifier
- LCD with 5 7segs and custom segments (BAT segment unused)
- LCD with 5 7segs and custom segments
- no LEDs, button sensors chessboard
There's also a newer version from 2000 (model 711E-2) on much weaker hardware,
it has a Samsung KS57C2308 MCU instead.
Igor:
- PCB label: EXCALIBUR ELECTRONICS, INC. 510-1005A01, 5/28/97 IGOR
- Hitachi H8/3214 MCU, 12MHz XTAL
- sound ROM under epoxy 128KB instead of 1MB
- rest is same as Ivan
There's also a newer version of Igor from 2000 (model 711E-2) on much weaker
hardware, it has a Samsung KS57C2308 MCU instead.
TODO:
- it does a cold boot at every reset, so nvram won't work properly unless MAME
adds some kind of auxillary autosave state feature at power-off
BTANB:
- speech sound is a bit scratchy, it has background noise like a tape recorder
*******************************************************************************/
#include "emu.h"
@ -34,14 +54,15 @@ TODO:
// internal artwork
#include "excal_igor.lh"
#include "excal_ivant.lh"
namespace {
class igor_state : public driver_device
class ivant_state : public driver_device
{
public:
igor_state(const machine_config &mconfig, device_type type, const char *tag) :
ivant_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_board(*this, "board"),
@ -52,8 +73,11 @@ public:
m_out_lcd(*this, "s%u.%u", 0U, 0U)
{ }
void init_igor();
void init_ivant();
template <typename T> void cpu_config(T &maincpu);
void shared(machine_config &config);
void ivant(machine_config &config);
void igor(machine_config &config);
protected:
@ -61,7 +85,7 @@ protected:
private:
// devices/pointers
required_device<h83214_device> m_maincpu;
required_device<h8_device> m_maincpu;
required_device<sensorboard_device> m_board;
required_region_ptr<u8> m_soundrom;
required_device<pwm_display_device> m_lcd_pwm;
@ -97,11 +121,12 @@ private:
};
/*******************************************************************************
Initialization
*******************************************************************************/
void igor_state::init_igor()
void ivant_state::init_ivant()
{
u8 *rom = memregion("soundrom")->base();
const u32 len = memregion("soundrom")->bytes();
@ -117,12 +142,12 @@ void igor_state::init_igor()
rom[i] = buf[bitswap<20>(i,19,18,17,16, 15,14,12,13,6,3,8,10, 11,9,7,5,4,2,1,0)];
}
void igor_state::machine_start()
void ivant_state::machine_start()
{
m_out_lcd.resolve();
// periodically check for interrupts
m_irqtimer = timer_alloc(FUNC(igor_state::update_irq), this);
m_irqtimer = timer_alloc(FUNC(ivant_state::update_irq), this);
attotime period = attotime::from_msec(1);
m_irqtimer->adjust(period, 0, period);
@ -141,12 +166,12 @@ void igor_state::machine_start()
I/O
*******************************************************************************/
void igor_state::lcd_pwm_w(offs_t offset, u8 data)
void ivant_state::lcd_pwm_w(offs_t offset, u8 data)
{
m_out_lcd[offset & 0x3f][offset >> 6] = data;
}
void igor_state::update_lcd()
void ivant_state::update_lcd()
{
u32 lcd_segs = bitswap<8>(m_port1,0,1,2,3,4,5,6,7) << 16 | bitswap<8>(m_port2,0,1,2,3,4,5,6,7) << 8 | m_port7;
@ -158,12 +183,12 @@ void igor_state::update_lcd()
}
}
void igor_state::update_dac()
void ivant_state::update_dac()
{
m_dac->write((m_port5 & 4) ? 0x80 : m_dac_data);
}
u8 igor_state::read_inputs()
u8 ivant_state::read_inputs()
{
u8 data = 0;
@ -188,13 +213,13 @@ u8 igor_state::read_inputs()
return ~data;
}
void igor_state::p1_w(u8 data)
void ivant_state::p1_w(u8 data)
{
// P10-P17: sound ROM address + LCD segs
m_port1 = data;
}
void igor_state::p2_w(u8 data)
void ivant_state::p2_w(u8 data)
{
// P20-P27: sound ROM address + LCD segs
// P26: input mux low bit
@ -202,27 +227,27 @@ void igor_state::p2_w(u8 data)
read_inputs();
}
u8 igor_state::p3_r()
u8 ivant_state::p3_r()
{
// P30-P37: read sound ROM
u32 address = bitswap<4>(m_port7,4,7,6,5) << 16 | m_port2 << 8 | m_port1;
return (m_port5 & 4) ? 0xff : m_soundrom[address & (m_soundrom.bytes() - 1)];
}
void igor_state::p4_w(u8 data)
void ivant_state::p4_w(u8 data)
{
// P40-P47 (not P46): DAC data
m_dac_data = (m_dac_data & 0x40) | (data & 0xbf);
update_dac();
}
u8 igor_state::p5_r()
u8 ivant_state::p5_r()
{
// P50: multiplexed inputs high bit
return read_inputs() >> 7 | 0xfe;
}
void igor_state::p5_w(offs_t offset, u8 data, u8 mem_mask)
void ivant_state::p5_w(offs_t offset, u8 data, u8 mem_mask)
{
// P51: DAC bit 6
m_dac_data = (m_dac_data & 0xbf) | BIT(data, 1) << 6;
@ -242,13 +267,13 @@ void igor_state::p5_w(offs_t offset, u8 data, u8 mem_mask)
}
}
u8 igor_state::p6_r()
u8 ivant_state::p6_r()
{
// P60-P66: multiplexed inputs part
return read_inputs() | 0x80;
}
void igor_state::p7_w(u8 data)
void ivant_state::p7_w(u8 data)
{
// P70-P77: input mux part + LCD segs
// P74-P77: sound ROM address
@ -262,7 +287,7 @@ void igor_state::p7_w(u8 data)
Input Ports
*******************************************************************************/
static INPUT_PORTS_START( igor )
static INPUT_PORTS_START( ivant )
PORT_START("IN.0")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) PORT_CODE(KEYCODE_LEFT) PORT_NAME("No / Left")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("Repeat")
@ -270,18 +295,39 @@ static INPUT_PORTS_START( igor )
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("Option")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_NAME("New Game")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_NAME("Black / White")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Takeback")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Take Back")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("Yes / Right")
PORT_START("IN.1")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Mode")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Set Up / King")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Multi-Move / Bishop")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Multi-Move / Bishop")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F2) PORT_NAME("Off / Save")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F1) PORT_CODE(KEYCODE_C) PORT_NAME("On / Clear")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Move / Pawn")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Level / Rook")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Hint / Knight")
PORT_START("BATT")
PORT_CONFNAME( 0x40, 0x00, "Battery Status" )
PORT_CONFSETTING( 0x40, "Low" )
PORT_CONFSETTING( 0x00, DEF_STR( Normal ) )
PORT_BIT(0xbf, IP_ACTIVE_HIGH, IPT_UNUSED)
INPUT_PORTS_END
static INPUT_PORTS_START( igor ) // same buttons, different layout
PORT_INCLUDE( ivant )
PORT_MODIFY("IN.0")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Takeback")
PORT_MODIFY("IN.1")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Multi-Move / Bishop")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Level / Rook")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Hint / Knight")
PORT_MODIFY("BATT") // read, but discarded
PORT_BIT(0xff, IP_ACTIVE_HIGH, IPT_UNUSED)
INPUT_PORTS_END
@ -290,23 +336,26 @@ INPUT_PORTS_END
Machine Configs
*******************************************************************************/
void igor_state::igor(machine_config &config)
template <typename T>
void ivant_state::cpu_config(T &maincpu)
{
maincpu.nvram_enable_backup(true);
maincpu.standby_cb().set(maincpu, FUNC(T::nvram_set_battery));
maincpu.standby_cb().append([this](int state) { if (state) m_lcd_pwm->clear(); });
maincpu.write_port1().set(FUNC(ivant_state::p1_w));
maincpu.write_port2().set(FUNC(ivant_state::p2_w));
maincpu.read_port3().set(FUNC(ivant_state::p3_r));
maincpu.read_port4().set_ioport("BATT").invert();
maincpu.write_port4().set(FUNC(ivant_state::p4_w));
maincpu.read_port5().set(FUNC(ivant_state::p5_r));
maincpu.write_port5().set(FUNC(ivant_state::p5_w));
maincpu.read_port6().set(FUNC(ivant_state::p6_r));
maincpu.write_port7().set(FUNC(ivant_state::p7_w));
}
void ivant_state::shared(machine_config &config)
{
// basic machine hardware
H83214(config, m_maincpu, 12_MHz_XTAL);
m_maincpu->nvram_enable_backup(true);
m_maincpu->standby_cb().set(m_maincpu, FUNC(h83214_device::nvram_set_battery));
m_maincpu->standby_cb().append([this](int state) { if (state) m_lcd_pwm->clear(); });
m_maincpu->write_port1().set(FUNC(igor_state::p1_w));
m_maincpu->write_port2().set(FUNC(igor_state::p2_w));
m_maincpu->read_port3().set(FUNC(igor_state::p3_r));
m_maincpu->read_port4().set_constant(0xff); // discard
m_maincpu->write_port4().set(FUNC(igor_state::p4_w));
m_maincpu->read_port5().set(FUNC(igor_state::p5_r));
m_maincpu->write_port5().set(FUNC(igor_state::p5_w));
m_maincpu->read_port6().set(FUNC(igor_state::p6_r));
m_maincpu->write_port7().set(FUNC(igor_state::p7_w));
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));
@ -314,26 +363,55 @@ void igor_state::igor(machine_config &config)
// video hardware
PWM_DISPLAY(config, m_lcd_pwm).set_size(2, 24);
m_lcd_pwm->output_x().set(FUNC(igor_state::lcd_pwm_w));
m_lcd_pwm->output_x().set(FUNC(ivant_state::lcd_pwm_w));
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG));
screen.set_refresh_hz(60);
screen.set_size(1920/6, 723/6);
screen.set_visarea_full();
config.set_default_layout(layout_excal_igor);
// sound hardware
SPEAKER(config, "speaker").front_center();
DAC_8BIT_R2R(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.5);
}
void ivant_state::ivant(machine_config &config)
{
H83216(config, m_maincpu, 12_MHz_XTAL);
cpu_config<h83216_device>(downcast<h83216_device &>(*m_maincpu));
shared(config);
config.set_default_layout(layout_excal_ivant);
}
void ivant_state::igor(machine_config &config)
{
H83214(config, m_maincpu, 12_MHz_XTAL);
cpu_config<h83214_device>(downcast<h83214_device &>(*m_maincpu));
shared(config);
config.set_default_layout(layout_excal_igor);
}
/*******************************************************************************
ROM Definitions
*******************************************************************************/
ROM_START( ivant )
ROM_REGION16_BE( 0xc000, "maincpu", 0 )
ROM_LOAD("1997_rcn_1003a_excal_hd6433216l01p.ic1", 0x0000, 0xc000, CRC(6fcc34b1) SHA1(13bcb3d6766e6f3acb7d0f669337e8e40d5ed449) )
ROM_REGION( 0x100000, "soundrom", 0 )
ROM_LOAD("sound.ic2", 0x000000, 0x100000, CRC(7f9a78c9) SHA1(b80d33955496698c9288047e0854b335882bcdc7) ) // no label
ROM_REGION( 89047, "screen", 0 )
ROM_LOAD("ivant.svg", 0, 89047, CRC(fe514f65) SHA1(da5a56882bd241d01a6c49cb1cb066b88473c445) )
ROM_END
ROM_START( igor )
ROM_REGION16_BE( 0x8000, "maincpu", 0 )
ROM_LOAD("1997_rcn_1002a_excal_hd6433214l02p.ic1", 0x0000, 0x8000, CRC(adbc7e07) SHA1(0d297ad2fd0d18312966195cfad4658da4bc4442) )
@ -342,7 +420,7 @@ ROM_START( igor )
ROM_LOAD("sound.ic2", 0x00000, 0x20000, CRC(bc540da3) SHA1(68647ce1c7e87eba90d9d1912921213af03e3c5d) ) // no label
ROM_REGION( 89047, "screen", 0 )
ROM_LOAD("igor.svg", 0, 89047, CRC(fe514f65) SHA1(da5a56882bd241d01a6c49cb1cb066b88473c445) )
ROM_LOAD("ivant.svg", 0, 89047, CRC(fe514f65) SHA1(da5a56882bd241d01a6c49cb1cb066b88473c445) )
ROM_END
} // anonymous namespace
@ -353,5 +431,7 @@ ROM_END
Drivers
*******************************************************************************/
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
SYST( 1997, igor, 0, 0, igor, igor, igor_state, init_igor, "Excalibur Electronics", "Igor (Excalibur)", MACHINE_SUPPORTS_SAVE )
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
SYST( 1997, ivant, 0, 0, ivant, ivant, ivant_state, init_ivant, "Excalibur Electronics", "Ivan The Terrible (H8/3216 version)", MACHINE_SUPPORTS_SAVE )
SYST( 1997, igor, 0, 0, igor, igor, ivant_state, init_ivant, "Excalibur Electronics", "Igor (Excalibur)", MACHINE_SUPPORTS_SAVE )

View File

@ -4,7 +4,10 @@
/*******************************************************************************
Excalibur Ivan The Terrible (model 701E, H8/3256 version)
This is the first version (see ivant.cpp for the newer version).
This is the first version, see ivant.cpp for the newer version. It was produced
in a factory owned by Eric White's company (ex-CXG), hence it's not that strange
that the LCD is the same as the one in CXG Sphinx Legend and Krypton Challenge.
Hardware notes:
- PCB label: EXCALIBUR ELECTRONICS, INC. 6/28/96, IVANT
@ -13,19 +16,18 @@ Hardware notes:
- LCD with 5 7segs and custom segments
- no LEDs, button sensors chessboard
It was produced in a factory owned by Eric White's company (ex-CXG), hence it's
not that strange that the LCD is the same as the one in CXG Sphinx Legend and
Krypton Challenge/Regency. The MCU used here is a HD6433256A33P from Excalibur
Mirage, the internal ROM was disabled.
The MCU used here is a HD6433256A33P from Excalibur Mirage, the internal ROM
was disabled. It runs at a higher frequency than the H8/3216 version, but
is actually a bit slower due to the H8/325 /2 clock divider.
TODO:
- it does a cold boot at every reset, so nvram won't work properly unless MAME
adds some kind of auxillary autosave state feature at power-off
BTANB:
- sound is scratchy like a tape recorder and has spikes here and there, verified
with a digital capture, final (analog) output on the real thing sounds a bit
better than MAME though
- speech sound is scratchy (worse than ivant), it has spikes here and there,
verified with a digital capture, final (analog) output on the real thing
sounds a bit better than MAME though
*******************************************************************************/
@ -346,4 +348,4 @@ ROM_END
*******************************************************************************/
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
SYST( 1996, ivanto, 0, 0, ivanto, ivanto, ivanto_state, empty_init, "Excalibur Electronics", "Ivan The Terrible (H8/3256 version)", MACHINE_SUPPORTS_SAVE )
SYST( 1996, ivanto, ivant, 0, ivanto, ivanto, ivanto_state, empty_init, "Excalibur Electronics", "Ivan The Terrible (H8/3256 version)", MACHINE_SUPPORTS_SAVE )

View File

@ -2,7 +2,7 @@
// copyright-holders:hap
/*******************************************************************************
Excalibur Mirage
Excalibur Mirage (model 702E)
It's Excalibur's first chess computer, and also Ron Nelson's official return to
chess programming. The x/y motorized magnet is similar to the one used in

View File

@ -0,0 +1,476 @@
<?xml version="1.0"?>
<!--
license:CC0-1.0
authors:hap
-->
<mamelayout version="2">
<!-- define elements -->
<element name="red"><rect><color red="0.6" green="0.12" blue="0.10" /></rect></element>
<element name="blackb"><rect><color red="0" green="0" blue="0" /></rect></element>
<element name="lcdm"><rect><color red="0.7" green="0.71" blue="0.72" /></rect></element>
<element name="text_cl00"><text string="A" align="2"><color red="0.41" green="0.4" blue="0.39" /></text></element>
<element name="text_cl01"><text string="B" align="2"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_cl02"><text string="C" align="2"><color red="0.41" green="0.4" blue="0.39" /></text></element>
<element name="text_cl03"><text string="D" align="2"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_cl04"><text string="E" align="2"><color red="0.41" green="0.4" blue="0.39" /></text></element>
<element name="text_cl05"><text string="F" align="2"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_cl06"><text string="G" align="2"><color red="0.41" green="0.4" blue="0.39" /></text></element>
<element name="text_cl07"><text string="H" align="2"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_cl10"><text string="A" align="2"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_cl11"><text string="B" align="2"><color red="0.41" green="0.4" blue="0.39" /></text></element>
<element name="text_cl12"><text string="C" align="2"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_cl13"><text string="D" align="2"><color red="0.41" green="0.4" blue="0.39" /></text></element>
<element name="text_cl14"><text string="E" align="2"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_cl15"><text string="F" align="2"><color red="0.41" green="0.4" blue="0.39" /></text></element>
<element name="text_cl16"><text string="G" align="2"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_cl17"><text string="H" align="2"><color red="0.41" green="0.4" blue="0.39" /></text></element>
<element name="text_cn00"><text string="8" align="1"><color red="0.41" green="0.4" blue="0.39" /></text></element>
<element name="text_cn01"><text string="7" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_cn02"><text string="6" align="1"><color red="0.41" green="0.4" blue="0.39" /></text></element>
<element name="text_cn03"><text string="5" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_cn04"><text string="4" align="1"><color red="0.41" green="0.4" blue="0.39" /></text></element>
<element name="text_cn05"><text string="3" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_cn06"><text string="2" align="1"><color red="0.41" green="0.4" blue="0.39" /></text></element>
<element name="text_cn07"><text string="1" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_cn10"><text string="8" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_cn11"><text string="7" align="1"><color red="0.41" green="0.4" blue="0.39" /></text></element>
<element name="text_cn12"><text string="6" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_cn13"><text string="5" align="1"><color red="0.41" green="0.4" blue="0.39" /></text></element>
<element name="text_cn14"><text string="4" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_cn15"><text string="3" align="1"><color red="0.41" green="0.4" blue="0.39" /></text></element>
<element name="text_cn16"><text string="2" align="1"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_cn17"><text string="1" align="1"><color red="0.41" green="0.4" blue="0.39" /></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.svg" state="1"/>
<image file="chess/wn.svg" state="2"/>
<image file="chess/wb.svg" state="3"/>
<image file="chess/wr.svg" state="4"/>
<image file="chess/wq.svg" state="5"/>
<image file="chess/wk.svg" state="6"/>
<image file="chess/bp.svg" state="7"/>
<image file="chess/bn.svg" state="8"/>
<image file="chess/bb.svg" state="9"/>
<image file="chess/br.svg" state="10"/>
<image file="chess/bq.svg" state="11"/>
<image file="chess/bk.svg" state="12"/>
<!-- selected pieces -->
<image file="chess/wp.svg" state="13"><color alpha="0.5" /></image>
<image file="chess/wn.svg" state="14"><color alpha="0.5" /></image>
<image file="chess/wb.svg" state="15"><color alpha="0.5" /></image>
<image file="chess/wr.svg" state="16"><color alpha="0.5" /></image>
<image file="chess/wq.svg" state="17"><color alpha="0.5" /></image>
<image file="chess/wk.svg" state="18"><color alpha="0.5" /></image>
<image file="chess/bp.svg" state="19"><color alpha="0.5" /></image>
<image file="chess/bn.svg" state="20"><color alpha="0.5" /></image>
<image file="chess/bb.svg" state="21"><color alpha="0.5" /></image>
<image file="chess/br.svg" state="22"><color alpha="0.5" /></image>
<image file="chess/bq.svg" state="23"><color alpha="0.5" /></image>
<image file="chess/bk.svg" state="24"><color alpha="0.5" /></image>
</element>
<group name="sb_board">
<bounds x="-1.25" y="-1.25" width="82.5" height="82.5" />
<element ref="cwhite"><bounds x="-1.25" y="-1.25" width="82.5" height="82.5" /></element>
<element ref="blackb"><bounds x="-1" y="-1" width="82" height="82" /></element>
<element ref="red"><bounds x="-0.25" y="-0.25" width="80.5" height="80.5" /></element>
<!-- squares (avoid seams) -->
<element ref="cwhite"><bounds x="0" y="0" width="11" height="11" /></element>
<element ref="cblack"><bounds x="10" y="0" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="20" y="0" width="11" height="11" /></element>
<element ref="cblack"><bounds x="30" y="0" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="40" y="0" width="11" height="11" /></element>
<element ref="cblack"><bounds x="50" y="0" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="60" y="0" width="11" height="11" /></element>
<element ref="cblack"><bounds x="70" y="0" width="10" height="11" /></element>
<element ref="cblack"><bounds x="0" y="10" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="10" y="10" width="11" height="11" /></element>
<element ref="cblack"><bounds x="20" y="10" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="30" y="10" width="11" height="11" /></element>
<element ref="cblack"><bounds x="40" y="10" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="50" y="10" width="11" height="11" /></element>
<element ref="cblack"><bounds x="60" y="10" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="70" y="10" width="10" height="11" /></element>
<element ref="cwhite"><bounds x="0" y="20" width="11" height="11" /></element>
<element ref="cblack"><bounds x="10" y="20" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="20" y="20" width="11" height="11" /></element>
<element ref="cblack"><bounds x="30" y="20" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="40" y="20" width="11" height="11" /></element>
<element ref="cblack"><bounds x="50" y="20" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="60" y="20" width="11" height="11" /></element>
<element ref="cblack"><bounds x="70" y="20" width="10" height="11" /></element>
<element ref="cblack"><bounds x="0" y="30" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="10" y="30" width="11" height="11" /></element>
<element ref="cblack"><bounds x="20" y="30" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="30" y="30" width="11" height="11" /></element>
<element ref="cblack"><bounds x="40" y="30" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="50" y="30" width="11" height="11" /></element>
<element ref="cblack"><bounds x="60" y="30" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="70" y="30" width="10" height="11" /></element>
<element ref="cwhite"><bounds x="0" y="40" width="11" height="11" /></element>
<element ref="cblack"><bounds x="10" y="40" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="20" y="40" width="11" height="11" /></element>
<element ref="cblack"><bounds x="30" y="40" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="40" y="40" width="11" height="11" /></element>
<element ref="cblack"><bounds x="50" y="40" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="60" y="40" width="11" height="11" /></element>
<element ref="cblack"><bounds x="70" y="40" width="10" height="11" /></element>
<element ref="cblack"><bounds x="0" y="50" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="10" y="50" width="11" height="11" /></element>
<element ref="cblack"><bounds x="20" y="50" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="30" y="50" width="11" height="11" /></element>
<element ref="cblack"><bounds x="40" y="50" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="50" y="50" width="11" height="11" /></element>
<element ref="cblack"><bounds x="60" y="50" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="70" y="50" width="10" height="11" /></element>
<element ref="cwhite"><bounds x="0" y="60" width="11" height="11" /></element>
<element ref="cblack"><bounds x="10" y="60" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="20" y="60" width="11" height="11" /></element>
<element ref="cblack"><bounds x="30" y="60" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="40" y="60" width="11" height="11" /></element>
<element ref="cblack"><bounds x="50" y="60" width="11" height="11" /></element>
<element ref="cwhite"><bounds x="60" y="60" width="11" height="11" /></element>
<element ref="cblack"><bounds x="70" y="60" width="10" height="11" /></element>
<element ref="cblack"><bounds x="0" y="70" width="11" height="10" /></element>
<element ref="cwhite"><bounds x="10" y="70" width="11" height="10" /></element>
<element ref="cblack"><bounds x="20" y="70" width="11" height="10" /></element>
<element ref="cwhite"><bounds x="30" y="70" width="11" height="10" /></element>
<element ref="cblack"><bounds x="40" y="70" width="11" height="10" /></element>
<element ref="cwhite"><bounds x="50" y="70" width="11" height="10" /></element>
<element ref="cblack"><bounds x="60" y="70" width="11" height="10" /></element>
<element ref="cwhite"><bounds x="70" y="70" width="10" height="10" /></element>
<!-- coords -->
<repeat count="4">
<param name="y1" start="8.3" increment="20" />
<param name="y2" start="18.3" increment="20" />
<repeat count="8">
<param name="i" start="0" increment="1" />
<param name="x" start="8" increment="10" />
<element ref="text_cl0~i~"><bounds x="~x~" y="~y1~" width="1" height="1.7" /></element>
<element ref="text_cl1~i~"><bounds x="~x~" y="~y2~" width="1" height="1.7" /></element>
</repeat>
</repeat>
<repeat count="4">
<param name="x1" start="9" increment="20" />
<param name="x2" start="19" increment="20" />
<repeat count="8">
<param name="i" start="0" increment="1" />
<param name="y" start="8.3" increment="10" />
<element ref="text_cn0~i~"><bounds x="~x1~" y="~y~" width="1" height="1.7" /></element>
<element ref="text_cn1~i~"><bounds x="~x2~" y="~y~" width="1" height="1.7" /></element>
</repeat>
</repeat>
<!-- sensors, pieces -->
<repeat count="8">
<param name="y" start="0" increment="10" />
<param name="i" start="8" increment="-1" />
<element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x01"><bounds x="0" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x02"><bounds x="10" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x04"><bounds x="20" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x08"><bounds x="30" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x10"><bounds x="40" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x20"><bounds x="50" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x40"><bounds x="60" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x80"><bounds x="70" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
<element name="piece_a~i~" ref="piece"><bounds x="0" y="~y~" width="10" height="10" /></element>
<element name="piece_b~i~" ref="piece"><bounds x="10" y="~y~" width="10" height="10" /></element>
<element name="piece_c~i~" ref="piece"><bounds x="20" y="~y~" width="10" height="10" /></element>
<element name="piece_d~i~" ref="piece"><bounds x="30" y="~y~" width="10" height="10" /></element>
<element name="piece_e~i~" ref="piece"><bounds x="40" y="~y~" width="10" height="10" /></element>
<element name="piece_f~i~" ref="piece"><bounds x="50" y="~y~" width="10" height="10" /></element>
<element name="piece_g~i~" ref="piece"><bounds x="60" y="~y~" width="10" height="10" /></element>
<element name="piece_h~i~" ref="piece"><bounds x="70" y="~y~" width="10" height="10" /></element>
</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"><text string="RESET"><color red="0.01" green="0.01" blue="0.01" /></text></element>
<element name="text_uib3"><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"><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"><text string=" &lt;&lt;"><color red="0.01" green="0.01" blue="0.01" /></text></element>
<element name="text_uiu2b"><text string=" &lt; "><color red="0.01" green="0.01" blue="0.01" /></text></element>
<element name="text_uiu2c"><text string=" &gt;"><color red="0.01" green="0.01" blue="0.01" /></text></element>
<element name="text_uiu2d"><text string=" &gt;&gt;"><color red="0.01" green="0.01" blue="0.01" /></text></element>
<element name="text_uiu3b"><text string="/"><color red="0.81" green="0.8" blue="0.79" /></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_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" />
<element ref="cblack"><bounds x="0" y="0" width="10" height="1" /></element>
<element ref="cblack"><bounds x="0" y="7" width="10" height="1" /></element>
<element ref="cblack"><bounds x="0" y="79" width="10" height="1" /></element>
<element ref="text_uit1"><bounds x="0" y="2" width="10" height="2" /></element>
<element ref="text_uit2"><bounds x="0" y="4" width="10" height="2" /></element>
<!-- board -->
<element ref="text_uib1"><bounds x="0" y="9" width="10" height="2" /></element>
<element ref="cwhite"><bounds x="1" y="11.5" width="8" height="2.5" /></element>
<element ref="cwhite"><bounds x="1" y="15" width="8" height="2.5" /></element>
<element ref="text_uib2"><bounds x="1.5" y="11.75" width="7" height="2" /></element>
<element ref="text_uib3"><bounds x="1.5" y="15.25" width="7" height="2" /></element>
<element ref="hlub" inputtag="board:UI" inputmask="0x200"><bounds x="1" y="11.5" width="8" height="2.5" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:UI" inputmask="0x100"><bounds x="1" y="15" width="8" height="2.5" /><color alpha="0.25" /></element>
<!-- spawn -->
<element ref="text_uis1"><bounds x="0" y="20.5" width="10" height="2" /></element>
<element ref="cwhite"><bounds x="1" y="23" width="8" height="12" /></element>
<element ref="cwhite"><bounds x="1" y="36" width="8" height="12" /></element>
<element name="piece_ui1" ref="piece"><bounds x="1" y="23" width="4" height="4" /></element>
<element name="piece_ui2" ref="piece"><bounds x="1" y="27" width="4" height="4" /></element>
<element name="piece_ui3" ref="piece"><bounds x="1" y="31" width="4" height="4" /></element>
<element name="piece_ui4" ref="piece"><bounds x="5" y="23" width="4" height="4" /></element>
<element name="piece_ui5" ref="piece"><bounds x="5" y="27" width="4" height="4" /></element>
<element name="piece_ui6" ref="piece"><bounds x="5" y="31" width="4" height="4" /></element>
<element name="piece_ui7" ref="piece"><bounds x="1" y="36" width="4" height="4" /></element>
<element name="piece_ui8" ref="piece"><bounds x="1" y="40" width="4" height="4" /></element>
<element name="piece_ui9" ref="piece"><bounds x="1" y="44" width="4" height="4" /></element>
<element name="piece_ui10" ref="piece"><bounds x="5" y="36" width="4" height="4" /></element>
<element name="piece_ui11" ref="piece"><bounds x="5" y="40" width="4" height="4" /></element>
<element name="piece_ui12" ref="piece"><bounds x="5" y="44" width="4" height="4" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0001"><bounds x="1" y="23" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0002"><bounds x="1" y="27" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0004"><bounds x="1" y="31" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0008"><bounds x="5" y="23" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0010"><bounds x="5" y="27" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0020"><bounds x="5" y="31" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0040"><bounds x="1" y="36" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0080"><bounds x="1" y="40" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0100"><bounds x="1" y="44" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0200"><bounds x="5" y="36" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0400"><bounds x="5" y="40" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:SPAWN" inputmask="0x0800"><bounds x="5" y="44" width="4" height="4" /><color alpha="0.25" /></element>
<!-- hand -->
<element ref="text_uih1"><bounds x="0" y="51" width="10" height="2" /></element>
<element ref="cblack"><bounds x="1" y="53.5" width="8" height="6" /></element>
<element name="piece_ui0" ref="piece"><bounds x="2" y="53.5" width="6" height="6" /></element>
<element ref="cwhite"><bounds x="1" y="60.5" width="8" height="2.5" /></element>
<element ref="text_uih2"><bounds x="1.5" y="60.75" width="7" height="2" /></element>
<element ref="hlub" inputtag="board:UI" inputmask="0x08"><bounds x="1" y="60.5" width="8" height="2.5" /><color alpha="0.25" /></element>
<!-- undo -->
<element ref="text_uiu1"><bounds x="0" y="66" width="10" height="2" /></element>
<element ref="cwhite"><bounds x="1" y="68.5" width="1.7" height="6" /></element>
<element ref="cwhite"><bounds x="3.1" y="68.5" width="1.7" height="6" /></element>
<element ref="cwhite"><bounds x="5.2" y="68.5" width="1.7" height="6" /></element>
<element ref="cwhite"><bounds x="7.3" y="68.5" width="1.7" height="6" /></element>
<element ref="text_uiu2a"><bounds x="1" y="69.5" width="1.7" height="4" /></element>
<element ref="text_uiu2b"><bounds x="3.1" y="69.5" width="1.7" height="4" /></element>
<element ref="text_uiu2c"><bounds x="5.2" y="69.5" width="1.7" height="4" /></element>
<element ref="text_uiu2d"><bounds x="7.3" y="69.5" width="1.7" height="4" /></element>
<element ref="hlub" inputtag="board:UI" inputmask="0x10"><bounds x="1" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:UI" inputmask="0x20"><bounds x="3.1" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:UI" inputmask="0x40"><bounds x="5.2" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:UI" inputmask="0x80"><bounds x="7.3" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></element>
<element name="count_ui0" ref="text_uiu3a"><bounds x="0" y="75" width="4" height="2" /></element>
<element name="count_ui1" ref="text_uiu3c"><bounds x="6" y="75" width="4" height="2" /></element>
<element ref="text_uiu3b"><bounds x="4" y="75" width="2" height="2" /></element>
</group>
<!-- buttons -->
<element name="text_b00"><text string="MODE"></text></element>
<element name="text_b10"><text string="SET UP"></text></element>
<element name="text_b11"><text string="LEVEL"></text></element>
<element name="text_b12"><text string="HINT"></text></element>
<element name="text_b20"><text string="VERIFY"></text></element>
<element name="text_b21"><text string="MULTI-MOVE"></text></element>
<element name="text_b22"><text string="MOVE"></text></element>
<element name="text_b30"><text string="OFF/SAVE"></text></element>
<element name="text_b31"><text string="OPTION"></text></element>
<element name="text_b32"><text string="TAKE BACK"></text></element>
<element name="text_b33"><text string="NO"></text></element>
<element name="text_b40"><text string="ON/CLEAR"></text></element>
<element name="text_b41"><text string="BLACK/WHITE"></text></element>
<element name="text_b42"><text string="REPEAT"></text></element>
<element name="text_b43"><text string="YES"></text></element>
<element name="text_b50"><text string="NEW GAME"></text></element>
<element name="text_p1"><image file="chess/wk.svg"/></element>
<element name="text_p2"><image file="chess/wq.svg"/></element>
<element name="text_p3"><image file="chess/wr.svg"/></element>
<element name="text_p4"><image file="chess/wb.svg"/></element>
<element name="text_p5"><image file="chess/wn.svg"/></element>
<element name="text_p6"><image file="chess/wp.svg"/></element>
<element name="triangle">
<image><data><![CDATA[
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="10" height="10">
<path d="M 5,0 10,10 0,10 z" fill="none" stroke="#ffffff" stroke-width="1.2" />
</svg>
]]></data></image>
</element>
<element name="butw" defstate="0">
<rect state="0"><color red="0.81" green="0.8" blue="0.79" /></rect>
<rect state="1"><color red="0.81" green="0.8" blue="0.79" alpha="0.8" /></rect>
</element>
<element name="butr" defstate="0">
<rect state="0">
<bounds xc="0" yc="0" width="5.5" height="1.5" />
<color red="0.81" green="0.8" blue="0.79" />
</rect>
<rect state="0">
<bounds xc="0" yc="0" width="5" height="1" />
<color red="0.6" green="0.12" blue="0.10" />
</rect>
<rect state="1">
<bounds xc="0" yc="0" width="5.5" height="1.5" />
<color red="0.81" green="0.8" blue="0.79" alpha="0.8" />
</rect>
<rect state="1">
<bounds xc="0" yc="0" width="5" height="1" />
<color red="0.48" green="0.096" blue="0.08" />
</rect>
</element>
<group name="buttons1">
<bounds x="0" y="0" width="50" height="50" />
<repeat count="3">
<param name="y" start="7" increment="6" />
<param name="i" start="0" increment="1" />
<element ref="text_b1~i~"><bounds xc="13.75" y="~y~" width="10" height="1.4" /></element>
<element ref="text_b2~i~"><bounds xc="21.5" y="~y~" width="10" height="1.4" /></element>
</repeat>
<element ref="text_b00"><bounds xc="6" y="7" width="10" height="1.4" /></element>
<repeat count="3">
<param name="y" start="3.9" increment="6" />
<param name="i1" start="1" increment="2" />
<param name="i2" start="2" increment="2" />
<element ref="text_p~i1~"><bounds xc="13.75" yc="~y~" width="2.4" height="2.4" /></element>
<element ref="text_p~i2~"><bounds xc="21.5" yc="~y~" width="2.4" height="2.4" /></element>
</repeat>
<element ref="cwhite" blend="multiply"><bounds x="0" y="0" width="30" height="30" /></element>
<element ref="butw" inputtag="IN.1" inputmask="0x01"><bounds xc="6" yc="6" width="5.5" height="1.5" /></element>
<element ref="butw" inputtag="IN.1" inputmask="0x02"><bounds xc="13.75" yc="6" width="5.5" height="1.5" /></element>
<element ref="butw" inputtag="IN.1" inputmask="0x40"><bounds xc="13.75" yc="12" width="5.5" height="1.5" /></element>
<element ref="butw" inputtag="IN.1" inputmask="0x80"><bounds xc="13.75" yc="18" width="5.5" height="1.5" /></element>
<element ref="butw" inputtag="IN.0" inputmask="0x04"><bounds xc="21.5" yc="6" width="5.5" height="1.5" /></element>
<element ref="butw" inputtag="IN.1" inputmask="0x04"><bounds xc="21.5" yc="12" width="5.5" height="1.5" /></element>
<element ref="butw" inputtag="IN.1" inputmask="0x20"><bounds xc="21.5" yc="18" width="5.5" height="1.5" /></element>
</group>
<group name="buttons2">
<bounds x="0" y="0" width="50" height="50" />
<repeat count="4">
<param name="y" start="3.6" increment="4" />
<param name="i" start="0" increment="1" />
<element ref="text_b3~i~"><bounds xc="6" y="~y~" width="10" height="1.4" /></element>
<element ref="text_b4~i~"><bounds xc="13.75" y="~y~" width="10" height="1.4" /></element>
</repeat>
<element ref="text_b50"><bounds xc="21.5" y="3.6" width="10" height="1.4" /></element>
<element ref="triangle"><bounds xc="6" y="19.3" width="1.5" height="1.1" /><orientation rotate="270" /></element>
<element ref="triangle"><bounds xc="13.75" y="19.3" width="1.5" height="1.1" /><orientation rotate="90" /></element>
<element ref="cwhite" blend="multiply"><bounds x="0" y="0" width="30" height="30" /></element>
<element ref="butr" inputtag="IN.1" inputmask="0x08"><bounds xc="6" yc="6" width="5.5" height="1.5" /></element>
<element ref="butr" inputtag="IN.0" inputmask="0x08"><bounds xc="6" yc="10" width="5.5" height="1.5" /></element>
<element ref="butr" inputtag="IN.0" inputmask="0x40"><bounds xc="6" yc="14" width="5.5" height="1.5" /></element>
<element ref="butr" inputtag="IN.0" inputmask="0x01"><bounds xc="6" yc="18" width="5.5" height="1.5" /></element>
<element ref="butr" inputtag="IN.1" inputmask="0x10"><bounds xc="13.75" yc="6" width="5.5" height="1.5" /></element>
<element ref="butr" inputtag="IN.0" inputmask="0x20"><bounds xc="13.75" yc="10" width="5.5" height="1.5" /></element>
<element ref="butr" inputtag="IN.0" inputmask="0x02"><bounds xc="13.75" yc="14" width="5.5" height="1.5" /></element>
<element ref="butr" inputtag="IN.0" inputmask="0x80"><bounds xc="13.75" yc="18" width="5.5" height="1.5" /></element>
<element ref="butr" inputtag="IN.0" inputmask="0x10"><bounds xc="21.5" yc="6" width="5.5" height="1.5" /></element>
</group>
<!-- build screen -->
<view name="Internal Layout">
<bounds left="-4.25" right="93.25" top="6.75" bottom="111.5" />
<group ref="buttons1"><bounds x="11.25" y="89.5" width="50" height="50" /></group>
<group ref="buttons2"><bounds x="61.25" y="89.5" width="50" height="50" /></group>
<screen index="0"><bounds xc="50" yc="98.5" width="20" height="7.531" /></screen>
<element ref="lcdm" blend="multiply"><bounds xc="50" yc="98.5" width="21" height="8.5" /></element>
<group ref="sb_board"><bounds xc="50" yc="50" width="82.5" height="82.5" /></group>
<group ref="sb_ui"><bounds x="-2.75" y="10" width="10" height="80" /></group>
</view>
</mamelayout>

View File

@ -17795,8 +17795,9 @@ esp250c // 2005 Esprit Systems
@source:esprit/executive10.cpp
exe10102 // 1983 Esprit Systems
@source:excalibur/igor.cpp
@source:excalibur/ivant.cpp
igor
ivant
@source:excalibur/ivanto.cpp
ivanto

View File

@ -10,7 +10,7 @@ David Kittinger.
Hardware notes:
- PCB label: 100168 REV A
- Hitachi H8/325 MCU, 26.601712MHz XTAL
- Hitachi H8/325 MCU (mode 2), 26.601712MHz XTAL
- 32KB EPROM (M27C256B-12F1), 128KB SRAM (KM681000ALG-10)
- LCD with 4 7segs and custom segments, same as Novag VIP
- RJ-12 port for Novag Super System (always 9600 baud)