summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2019-07-21 00:36:19 +0200
committer hap <happppp@users.noreply.github.com>2019-07-21 00:36:33 +0200
commit0ba5d412a4efcc62cef5240271350bfdeef7b8af (patch)
treef574d36ba92c0dd996e9d37d722c43afedec2648
parent4c2c3e52ee3a125a50908a4991fabf4adf114493 (diff)
saitek_corona: move to own driver (nw)
-rw-r--r--scripts/target/mame/mess.lua2
-rw-r--r--src/mame/drivers/saitek_corona.cpp156
-rw-r--r--src/mame/drivers/saitek_stratos.cpp184
-rw-r--r--src/mame/includes/saitek_stratos.h72
-rw-r--r--src/mame/layout/saitek_corona.lay661
-rw-r--r--src/mame/mame.lst6
-rw-r--r--src/mame/mess.flt1
7 files changed, 964 insertions, 118 deletions
diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua
index 2a3049e20d1..9020ab3996c 100644
--- a/scripts/target/mame/mess.lua
+++ b/scripts/target/mame/mess.lua
@@ -3060,7 +3060,9 @@ files {
MAME_DIR .. "src/mame/drivers/saitek_cp2000.cpp",
MAME_DIR .. "src/mame/drivers/saitek_delta1.cpp",
MAME_DIR .. "src/mame/drivers/saitek_risc2500.cpp",
+ MAME_DIR .. "src/mame/includes/saitek_stratos.h",
MAME_DIR .. "src/mame/drivers/saitek_stratos.cpp",
+ MAME_DIR .. "src/mame/drivers/saitek_corona.cpp", -- subdriver of saitek_stratos
}
createMESSProjects(_target, _subtarget, "samcoupe")
diff --git a/src/mame/drivers/saitek_corona.cpp b/src/mame/drivers/saitek_corona.cpp
new file mode 100644
index 00000000000..32cc8f1a2fe
--- /dev/null
+++ b/src/mame/drivers/saitek_corona.cpp
@@ -0,0 +1,156 @@
+// license:BSD-3-Clause
+// copyright-holders:hap
+/***************************************************************************
+
+Saitek Corona. This is a subclass of saitek_corona_state.
+Please refer to saitek_stratos.cpp for driver notes.
+
+To be brief, Saitek Corona has two "HELIOS" chips, I/O addressing is completely
+different compared to Stratos/Turbo King.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "includes/saitek_stratos.h"
+
+#include "cpu/m6502/m65c02.h"
+#include "machine/nvram.h"
+#include "machine/sensorboard.h"
+#include "sound/dac.h"
+#include "sound/volt_reg.h"
+
+#include "softlist.h"
+#include "speaker.h"
+
+// internal artwork
+#include "saitek_corona.lh" // clickable
+
+
+class corona_state : public saitek_stratos_state
+{
+public:
+ corona_state(const machine_config &mconfig, device_type type, const char *tag) :
+ saitek_stratos_state(mconfig, type, tag),
+ m_board(*this, "board"),
+ m_dac(*this, "dac")
+ { }
+
+ // machine drivers
+ void corona(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+private:
+ // devices/pointers
+ required_device<sensorboard_device> m_board;
+ required_device<dac_bit_interface> m_dac;
+
+ void main_map(address_map &map);
+};
+
+void corona_state::machine_start()
+{
+ saitek_stratos_state::machine_start();
+}
+
+void corona_state::machine_reset()
+{
+ saitek_stratos_state::machine_reset();
+}
+
+
+
+/******************************************************************************
+ I/O
+******************************************************************************/
+
+// HELIOS
+
+
+/******************************************************************************
+ Address Maps
+******************************************************************************/
+
+void corona_state::main_map(address_map &map)
+{
+ map(0x0000, 0x1fff).ram();
+ map(0x8000, 0xffff).rom();
+}
+
+
+
+/******************************************************************************
+ Input Ports
+******************************************************************************/
+
+static INPUT_PORTS_START( corona )
+ PORT_INCLUDE( saitek_stratos )
+
+ PORT_MODIFY("IN.6")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_CUSTOM)
+INPUT_PORTS_END
+
+
+
+/******************************************************************************
+ Machine Drivers
+******************************************************************************/
+
+void corona_state::corona(machine_config &config)
+{
+ /* basic machine hardware */
+ M65C02(config, m_maincpu, 5_MHz_XTAL); // see set_cpu_freq
+ m_maincpu->set_addrmap(AS_PROGRAM, &corona_state::main_map);
+ m_maincpu->set_periodic_int(FUNC(corona_state::irq0_line_hold), attotime::from_hz(100));
+
+ SENSORBOARD(config, m_board).set_type(sensorboard_device::MAGNETS);
+ m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
+ m_board->set_delay(attotime::from_msec(200));
+
+ /* video hardware */
+ PWM_DISPLAY(config, m_display).set_size(2+4, 8+1);
+ config.set_default_layout(layout_saitek_corona);
+
+ TIMER(config, "lcd_busy").configure_generic(timer_device::expired_delegate());
+
+ /* 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);
+
+ /* extension rom */
+ GENERIC_CARTSLOT(config, m_extrom, generic_plain_slot, "saitek_egr", "bin");
+ m_extrom->set_device_load(FUNC(corona_state::extrom_load), this);
+
+ SOFTWARE_LIST(config, "cart_list").set_original("saitek_egr");
+}
+
+
+
+/******************************************************************************
+ ROM Definitions
+******************************************************************************/
+
+ROM_START( corona )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD("w2_708g_u2.u2", 0x0000, 0x8000, CRC(52568bb4) SHA1(83fe91787e17bbefc2b3ec651ddb11c88990060d) )
+ ROM_LOAD("bw2_708a_u3.u3", 0x8000, 0x8000, CRC(32848f73) SHA1(a447543e3eb4757f9afed26fde77b66985eb96a7) )
+ROM_END
+
+ROM_START( coronaa )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD("w2_a14c_u2.u2", 0x0000, 0x8000, CRC(be82e199) SHA1(cfcc573774b6907ed137dca01fa7f3fce493a89f) )
+ ROM_LOAD("bw2_a14_u3.u3", 0x8000, 0x8000, CRC(abe87285) SHA1(b15f7ddeac78d252cf413ba4085523e44c6d15df) )
+ROM_END
+
+
+
+/******************************************************************************
+ Drivers
+******************************************************************************/
+
+/* YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS */
+CONS( 1988, corona, 0, 0, corona, corona, corona_state, empty_init, "Saitek", "Kasparov Corona (ver. D+)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK ) // aka Corona II
+CONS( 1988, coronaa, corona, 0, corona, corona, corona_state, empty_init, "Saitek", "Kasparov Corona (ver. D)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK )
diff --git a/src/mame/drivers/saitek_stratos.cpp b/src/mame/drivers/saitek_stratos.cpp
index 1f8cc6517c3..2d6ca005429 100644
--- a/src/mame/drivers/saitek_stratos.cpp
+++ b/src/mame/drivers/saitek_stratos.cpp
@@ -7,7 +7,7 @@ SciSys/Saitek Stratos chesscomputer family (1986-1990)
- Stratos
- Turbo King
-- Corona
+- Corona --> it's in saitek_corona.cpp
- *Simultano
*: not dumped yet
@@ -34,7 +34,6 @@ Simultano has an extra LCD screen representing the chessboard state.
TODO:
- emulate LCD at lower level, probably an MCU with embedded LCDC
- add LCD 7*7 DMD, it's in m_lcd_data[0x30 to 0x3b] but scrambled
-- corona: different addressmap, 64 leds
- tking different internal artwork
- irq timing is derived from the main XTAL, but result should be similar with 5MHz and 5.67MHz,
there are a couple of "FREQ. SEL" nodes on the PCB, maybe related (not the ones in input ports)
@@ -45,82 +44,51 @@ TODO:
***************************************************************************/
#include "emu.h"
+#include "includes/saitek_stratos.h"
+
#include "cpu/m6502/m65c02.h"
#include "machine/nvram.h"
#include "machine/sensorboard.h"
-#include "machine/timer.h"
#include "sound/dac.h"
#include "sound/volt_reg.h"
-#include "video/pwm.h"
-#include "bus/generic/slot.h"
-#include "bus/generic/carts.h"
#include "softlist.h"
#include "speaker.h"
-#include <algorithm>
-
// internal artwork
#include "saitek_stratos.lh" // clickable
-namespace {
-
-class stratos_state : public driver_device
+class stratos_state : public saitek_stratos_state
{
public:
stratos_state(const machine_config &mconfig, device_type type, const char *tag) :
- driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
+ saitek_stratos_state(mconfig, type, tag),
m_nvram(*this, "nvram.u7"),
m_rombank(*this, "rombank"),
m_nvrambank(*this, "nvrambank"),
- m_lcd_busy(*this, "lcd_busy"),
m_board(*this, "board"),
- m_display(*this, "display"),
- m_dac(*this, "dac"),
- m_extrom(*this, "extrom"),
- m_out_digit(*this, "digit%u", 0U),
- m_out_lcd(*this, "lcd%u.%u.%u", 0U, 0U, 0U),
- m_inputs(*this, "IN.%u", 0)
+ m_dac(*this, "dac")
{ }
- DECLARE_INPUT_CHANGED_MEMBER(cpu_freq) { set_cpu_freq(); }
- DECLARE_INPUT_CHANGED_MEMBER(acl_button) { if (newval) power_off(); }
- DECLARE_INPUT_CHANGED_MEMBER(go_button);
-
// machine drivers
void stratos(machine_config &config);
- void corona(machine_config &config);
void tking2(machine_config &config);
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
- virtual void device_post_load() override { update_lcd(); }
private:
// devices/pointers
- required_device<m65c02_device> m_maincpu;
required_device<nvram_device> m_nvram;
required_memory_bank m_rombank;
required_memory_bank m_nvrambank;
- required_device<timer_device> m_lcd_busy;
required_device<sensorboard_device> m_board;
- required_device<pwm_display_device> m_display;
required_device<dac_bit_interface> m_dac;
- required_device<generic_slot_device> m_extrom;
- output_finder<8+1> m_out_digit;
- output_finder<4, 16, 4> m_out_lcd;
- required_ioport_array<8+1> m_inputs;
void main_map(address_map &map);
-
- void clear_lcd() { std::fill_n(m_lcd_data, ARRAY_LENGTH(m_lcd_data), 0); }
void update_leds();
- void update_lcd();
- void power_off();
- void set_cpu_freq();
// I/O handlers
DECLARE_WRITE8_MEMBER(select_w);
@@ -130,9 +98,6 @@ private:
DECLARE_READ8_MEMBER(control_r);
DECLARE_WRITE8_MEMBER(control_w);
DECLARE_READ8_MEMBER(lcd_r);
- DECLARE_WRITE8_MEMBER(lcd_w);
-
- DECLARE_DEVICE_IMAGE_LOAD_MEMBER(extrom_load);
DECLARE_READ8_MEMBER(extrom_r);
std::unique_ptr<u8[]> m_nvram_data;
@@ -140,19 +105,49 @@ private:
u8 m_select;
u8 m_control;
u8 m_led_data;
- bool m_power;
-
- u8 m_lcd_count;
- u8 m_lcd_address;
- u8 m_lcd_data[0x40];
};
-void stratos_state::machine_start()
+// saitek_stratos_state
+
+void saitek_stratos_state::machine_start()
{
// resolve handlers
m_out_digit.resolve();
m_out_lcd.resolve();
+ // zerofill
+ m_power = false;
+ m_lcd_count = 0;
+ m_lcd_address = 0;
+
+ // register for savestates
+ save_item(NAME(m_power));
+ save_item(NAME(m_lcd_count));
+ save_item(NAME(m_lcd_address));
+ save_item(NAME(m_lcd_data));
+}
+
+void saitek_stratos_state::machine_reset()
+{
+ m_power = true;
+ m_lcd_count = 0;
+ clear_lcd();
+
+ set_cpu_freq();
+}
+
+void saitek_stratos_state::set_cpu_freq()
+{
+ // released with either 5MHz or 5.67MHz speeds
+ m_maincpu->set_unscaled_clock((ioport("FAKE")->read() & 1) ? 5.67_MHz_XTAL : 5_MHz_XTAL);
+}
+
+// stratos_state
+
+void stratos_state::machine_start()
+{
+ saitek_stratos_state::machine_start();
+
// init banks
m_rombank->configure_entries(0, 2, memregion("maincpu")->base(), 0x8000);
@@ -165,38 +160,19 @@ void stratos_state::machine_start()
m_select = 0;
m_control = 0;
m_led_data = 0;
- m_power = false;
-
- m_lcd_count = 0;
- m_lcd_address = 0;
- clear_lcd();
// register for savestates
save_item(NAME(m_select));
save_item(NAME(m_control));
save_item(NAME(m_led_data));
- save_item(NAME(m_power));
-
- save_item(NAME(m_lcd_count));
- save_item(NAME(m_lcd_address));
- save_item(NAME(m_lcd_data));
}
void stratos_state::machine_reset()
{
- m_power = true;
- m_lcd_count = 0;
+ saitek_stratos_state::machine_reset();
m_rombank->set_entry(0);
m_nvrambank->set_entry(0);
-
- set_cpu_freq();
-}
-
-void stratos_state::set_cpu_freq()
-{
- // released with either 5MHz or 5.67MHz speeds
- m_maincpu->set_unscaled_clock((ioport("FAKE")->read() & 1) ? 5.67_MHz_XTAL : 5_MHz_XTAL);
}
@@ -207,7 +183,7 @@ void stratos_state::set_cpu_freq()
// soft power on/off
-INPUT_CHANGED_MEMBER(stratos_state::go_button)
+INPUT_CHANGED_MEMBER(saitek_stratos_state::go_button)
{
if (newval && !m_power)
{
@@ -216,7 +192,7 @@ INPUT_CHANGED_MEMBER(stratos_state::go_button)
}
}
-void stratos_state::power_off()
+void saitek_stratos_state::power_off()
{
m_power = false;
m_maincpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
@@ -230,7 +206,7 @@ void stratos_state::power_off()
// Endgame ROM
-DEVICE_IMAGE_LOAD_MEMBER(stratos_state::extrom_load)
+DEVICE_IMAGE_LOAD_MEMBER(saitek_stratos_state::extrom_load)
{
u32 size = m_extrom->common_get_size("rom");
@@ -256,7 +232,7 @@ READ8_MEMBER(stratos_state::extrom_r)
// LCD HLE
-void stratos_state::update_lcd()
+void saitek_stratos_state::update_lcd()
{
// output individual segments
for (int i = 0; i < 0x40; i++)
@@ -274,13 +250,7 @@ void stratos_state::update_lcd()
m_out_digit[i + 5] = (m_lcd_data[0x11 + i * 2] << 4 | m_lcd_data[0x11 + i * 2 + 1]) & 0x7f;
}
-READ8_MEMBER(stratos_state::lcd_r)
-{
- // unknown, maybe resets lcd controller
- return 0;
-}
-
-WRITE8_MEMBER(stratos_state::lcd_w)
+void saitek_stratos_state::lcd_w(u8 data)
{
// d0-d3: lcd data
// d4-d7: unused?
@@ -308,6 +278,12 @@ WRITE8_MEMBER(stratos_state::lcd_w)
m_lcd_busy->adjust(attotime::from_usec(50)); // ?
}
+READ8_MEMBER(stratos_state::lcd_r)
+{
+ // unknown, maybe resets lcd controller
+ return 0;
+}
+
// HELIOS
@@ -411,7 +387,7 @@ void stratos_state::main_map(address_map &map)
Input Ports
******************************************************************************/
-static INPUT_PORTS_START( stratos )
+INPUT_PORTS_START( saitek_stratos )
PORT_START("IN.0")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Set Up")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_CODE(KEYCODE_L) PORT_NAME("Level")
@@ -433,7 +409,7 @@ static INPUT_PORTS_START( stratos )
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("King")
PORT_START("IN.4")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) PORT_NAME("Play")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_NAME("Play")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_V) PORT_NAME("Tab / Color")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_CODE(KEYCODE_MINUS) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("-")
@@ -458,17 +434,17 @@ static INPUT_PORTS_START( stratos )
PORT_CONFSETTING( 0x80, DEF_STR( Normal ) )
PORT_START("RESET")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_CHANGED_MEMBER(DEVICE_SELF, stratos_state, go_button, nullptr) PORT_NAME("Go")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, stratos_state, acl_button, nullptr) PORT_NAME("ACL")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_CHANGED_MEMBER(DEVICE_SELF, saitek_stratos_state, go_button, nullptr) PORT_NAME("Go")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, saitek_stratos_state, acl_button, nullptr) PORT_NAME("ACL")
PORT_START("FAKE")
- PORT_CONFNAME( 0x01, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, stratos_state, cpu_freq, nullptr) // factory set
+ PORT_CONFNAME( 0x01, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, saitek_stratos_state, cpu_freq, nullptr) // factory set
PORT_CONFSETTING( 0x00, "5MHz" )
PORT_CONFSETTING( 0x01, "5.67MHz" )
INPUT_PORTS_END
static INPUT_PORTS_START( tking2 )
- PORT_INCLUDE( stratos )
+ PORT_INCLUDE( saitek_stratos )
PORT_MODIFY("IN.5")
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_CUSTOM)
@@ -512,18 +488,12 @@ void stratos_state::stratos(machine_config &config)
SOFTWARE_LIST(config, "cart_list").set_original("saitek_egr");
}
-void stratos_state::corona(machine_config &config)
-{
- stratos(config);
-
- m_board->set_type(sensorboard_device::MAGNETS);
-}
-
void stratos_state::tking2(machine_config &config)
{
stratos(config);
+ m_maincpu->set_periodic_int(FUNC(stratos_state::irq0_line_hold), attotime::from_hz(100));
- // seems much more responsive
+ // seems much more responsive (not just because of higher irq rate)
m_board->set_delay(attotime::from_msec(200));
}
@@ -565,33 +535,15 @@ ROM_START( tkingb ) // PCB rev. 7
ROM_END
-ROM_START( corona )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD("w2_708g_u2.u2", 0x0000, 0x8000, CRC(52568bb4) SHA1(83fe91787e17bbefc2b3ec651ddb11c88990060d) )
- ROM_LOAD("bw2_708a_u3.u3", 0x8000, 0x8000, CRC(32848f73) SHA1(a447543e3eb4757f9afed26fde77b66985eb96a7) )
-ROM_END
-
-ROM_START( coronaa )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD("w2_a14c_u2.u2", 0x0000, 0x8000, CRC(be82e199) SHA1(cfcc573774b6907ed137dca01fa7f3fce493a89f) )
- ROM_LOAD("bw2_a14_u3.u3", 0x8000, 0x8000, CRC(abe87285) SHA1(b15f7ddeac78d252cf413ba4085523e44c6d15df) )
-ROM_END
-
-} // anonymous namespace
-
-
/******************************************************************************
Drivers
******************************************************************************/
-/* YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS */
-CONS( 1986, stratos, 0, 0, stratos, stratos, stratos_state, empty_init, "SciSys", "Kasparov Stratos (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1986, stratosa, stratos, 0, stratos, stratos, stratos_state, empty_init, "SciSys", "Kasparov Stratos (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK )
-
-CONS( 1990, tking, 0, 0, tking2, tking2, stratos_state, empty_init, "Saitek", "Kasparov Turbo King (set 1, ver. D)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK ) // aka Turbo King II
-CONS( 1988, tkinga, tking, 0, stratos, stratos, stratos_state, empty_init, "Saitek", "Kasparov Turbo King (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK ) // oldest?
-CONS( 1988, tkingb, tking, 0, stratos, stratos, stratos_state, empty_init, "Saitek", "Kasparov Turbo King (set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK )
+/* YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS */
+CONS( 1986, stratos, 0, 0, stratos, saitek_stratos, stratos_state, empty_init, "SciSys", "Kasparov Stratos (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1986, stratosa, stratos, 0, stratos, saitek_stratos, stratos_state, empty_init, "SciSys", "Kasparov Stratos (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1988, corona, 0, 0, corona, stratos, stratos_state, empty_init, "Saitek", "Kasparov Corona (ver. D+)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK ) // aka Corona II
-CONS( 1988, coronaa, corona, 0, corona, stratos, stratos_state, empty_init, "Saitek", "Kasparov Corona (ver. D)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1990, tking, 0, 0, tking2, tking2, stratos_state, empty_init, "Saitek", "Kasparov Turbo King (set 1, ver. D)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK ) // aka Turbo King II
+CONS( 1988, tkinga, tking, 0, stratos, saitek_stratos, stratos_state, empty_init, "Saitek", "Kasparov Turbo King (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK ) // oldest?
+CONS( 1988, tkingb, tking, 0, stratos, saitek_stratos, stratos_state, empty_init, "Saitek", "Kasparov Turbo King (set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_CLICKABLE_ARTWORK )
diff --git a/src/mame/includes/saitek_stratos.h b/src/mame/includes/saitek_stratos.h
new file mode 100644
index 00000000000..231ea8b53b9
--- /dev/null
+++ b/src/mame/includes/saitek_stratos.h
@@ -0,0 +1,72 @@
+// license:BSD-3-Clause
+// copyright-holders:hap
+/*
+
+ Saitek Stratos family chess computers shared class
+ Used in: saitek_stratos.cpp (main driver), saitek_corona.cpp
+
+*/
+
+#ifndef MAME_INCLUDES_SAITEK_STRATOS_H
+#define MAME_INCLUDES_SAITEK_STRATOS_H
+
+#pragma once
+
+#include "machine/timer.h"
+#include "video/pwm.h"
+#include "bus/generic/slot.h"
+#include "bus/generic/carts.h"
+
+#include <algorithm>
+
+
+class saitek_stratos_state : public driver_device
+{
+public:
+ saitek_stratos_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_lcd_busy(*this, "lcd_busy"),
+ m_display(*this, "display"),
+ m_extrom(*this, "extrom"),
+ m_out_digit(*this, "digit%u", 0U),
+ m_out_lcd(*this, "lcd%u.%u.%u", 0U, 0U, 0U),
+ m_inputs(*this, "IN.%u", 0)
+ { }
+
+ DECLARE_INPUT_CHANGED_MEMBER(cpu_freq) { set_cpu_freq(); }
+ DECLARE_INPUT_CHANGED_MEMBER(acl_button) { if (newval) power_off(); }
+ DECLARE_INPUT_CHANGED_MEMBER(go_button);
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+ virtual void device_post_load() override { update_lcd(); }
+
+ // devices/pointers
+ required_device<cpu_device> m_maincpu;
+ required_device<timer_device> m_lcd_busy;
+ required_device<pwm_display_device> m_display;
+ required_device<generic_slot_device> m_extrom;
+ output_finder<8+1> m_out_digit;
+ output_finder<4, 16, 4> m_out_lcd;
+ required_ioport_array<8+1> m_inputs;
+
+ // common handlers
+ void clear_lcd() { std::fill_n(m_lcd_data, ARRAY_LENGTH(m_lcd_data), 0); }
+ void update_lcd();
+ void power_off();
+ void set_cpu_freq();
+
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(extrom_load);
+ void lcd_w(u8 data);
+
+ bool m_power;
+ u8 m_lcd_count;
+ u8 m_lcd_address;
+ u8 m_lcd_data[0x40];
+};
+
+INPUT_PORTS_EXTERN( saitek_stratos );
+
+#endif // MAME_INCLUDES_SAITEK_STRATOS_H
diff --git a/src/mame/layout/saitek_corona.lay b/src/mame/layout/saitek_corona.lay
new file mode 100644
index 00000000000..af4152e892a
--- /dev/null
+++ b/src/mame/layout/saitek_corona.lay
@@ -0,0 +1,661 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+<!-- define elements -->
+
+ <element name="black"><rect><color red="0.21" green="0.2" blue="0.2" /></rect></element>
+ <element name="whitew"><rect><color red="1" green="1" blue="1" /></rect></element>
+ <element name="text_mode"><text string="Mode" align="1"><color red="0.36" green="0.35" blue="0.35" /></text></element>
+
+ <!-- our digit element is bright-on-dark, this means the lcd panel is the wrong colour here -->
+
+ <element name="digit" defstate="0">
+ <led7seg><color red="1.0" green="1.0" blue="1.0" /></led7seg>
+ </element>
+ <element name="ldot" defstate="0">
+ <rect state="1"><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="0"><color red="0.12157" green="0.12157" blue="0.12157" /></rect>
+ </element>
+
+ <element name="ledo">
+ <rect><color red="0.1" green="0.1" blue="0.1" /></rect>
+ </element>
+ <element name="ledr" defstate="0">
+ <rect state="0"><color red="0" green="0" blue="0" /></rect>
+ <rect state="1"><color red="1" green="0" blue="0" /></rect>
+ </element>
+ <element name="ledg" defstate="0">
+ <rect state="0"><color red="0" green="0" blue="0" /></rect>
+ <rect state="1"><color red="0" green="1" blue="0" /></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.1" green="0.01" blue="0.015" /></disk>
+ </element>
+
+ <element name="hl" defstate="0">
+ <text string=" "/>
+ <rect state="1"><color red="1" green="1" blue="1" /></rect>
+ </element>
+
+ <element name="text_go">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="Go"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_stop">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="Stop"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_newgame">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="New Game"> <color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_sound">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="Sound"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_plus">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="+"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_minus">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="-"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_function">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="Function"> <color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_tabcolor">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="Tab/Color"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+
+ <element name="text_normal">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="Normal"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_analysis">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="Analysis"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_setup">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="Set Up"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_level">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="Level"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_library">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="Library"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_info">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="Info"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_scroll">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="LCD Scroll"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+ <element name="text_play">
+ <rect><color red="0.21" green="0.2" blue="0.2" /></rect>
+ <text string="Play"><color red="0.81" green="0.8" blue="0.79" /></text>
+ </element>
+
+ <element name="text_white"><text string="White"><color red="0.71" green="0.7" blue="0.7" /></text></element>
+ <element name="text_black"><text string="Black"><color red="0.71" green="0.7" blue="0.7" /></text></element>
+ <element name="text_check"><text string="Check"><color red="0.71" green="0.7" blue="0.7" /></text></element>
+ <element name="text_end"><text string="End"><color red="0.71" green="0.7" blue="0.7" /></text></element>
+
+ <element name="text_p1"><image file="chess/wk.png"/></element>
+ <element name="text_p2"><image file="chess/wq.png"/></element>
+ <element name="text_p3"><image file="chess/wr.png"/></element>
+ <element name="text_p4"><image file="chess/wb.png"/></element>
+ <element name="text_p5"><image file="chess/wn.png"/></element>
+ <element name="text_p6"><image file="chess/wp.png"/></element>
+
+ <element name="text_1">
+ <rect><color red="0.41" green="0.4" blue="0.39" /></rect>
+ <text string="1" align="1"><color red="0.9" green="0.9" blue="0.9" /></text>
+ </element>
+ <element name="text_2">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="2" align="1"><color red="0.05" green="0.05" blue="0.05" /></text>
+ </element>
+ <element name="text_3">
+ <rect><color red="0.41" green="0.4" blue="0.39" /></rect>
+ <text string="3" align="1"><color red="0.9" green="0.9" blue="0.9" /></text>
+ </element>
+ <element name="text_4">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="4" align="1"><color red="0.05" green="0.05" blue="0.05" /></text>
+ </element>
+ <element name="text_5">
+ <rect><color red="0.41" green="0.4" blue="0.39" /></rect>
+ <text string="5" align="1"><color red="0.9" green="0.9" blue="0.9" /></text>
+ </element>
+ <element name="text_6">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="6" align="1"><color red="0.05" green="0.05" blue="0.05" /></text>
+ </element>
+ <element name="text_7">
+ <rect><color red="0.41" green="0.4" blue="0.39" /></rect>
+ <text string="7" align="1"><color red="0.9" green="0.9" blue="0.9" /></text>
+ </element>
+ <element name="text_8">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="8" align="1"><color red="0.05" green="0.05" blue="0.05" /></text>
+ </element>
+
+ <element name="text_a">
+ <rect><color red="0.41" green="0.4" blue="0.39" /></rect>
+ <text string="A"><color red="0.9" green="0.9" blue="0.9" /></text>
+ </element>
+ <element name="text_b">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="B"><color red="0.05" green="0.05" blue="0.05" /></text>
+ </element>
+ <element name="text_c">
+ <rect><color red="0.41" green="0.4" blue="0.39" /></rect>
+ <text string="C"><color red="0.9" green="0.9" blue="0.9" /></text>
+ </element>
+ <element name="text_d">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="D"><color red="0.05" green="0.05" blue="0.05" /></text>
+ </element>
+ <element name="text_e">
+ <rect><color red="0.41" green="0.4" blue="0.39" /></rect>
+ <text string="E"><color red="0.9" green="0.9" blue="0.9" /></text>
+ </element>
+ <element name="text_f">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="F"><color red="0.05" green="0.05" blue="0.05" /></text>
+ </element>
+ <element name="text_g">
+ <rect><color red="0.41" green="0.4" blue="0.39" /></rect>
+ <text string="G"><color red="0.9" green="0.9" blue="0.9" /></text>
+ </element>
+ <element name="text_h">
+ <rect><color red="0.81" green="0.8" blue="0.79" /></rect>
+ <text string="H"><color red="0.05" green="0.05" blue="0.05" /></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>
+
+ <!-- coords -->
+ <bezel element="text_8"><bounds x="0.25" y="4.3" width="2" height="1.4" /></bezel>
+ <bezel element="text_7"><bounds x="0.25" y="14.3" width="2" height="1.4" /></bezel>
+ <bezel element="text_6"><bounds x="0.25" y="24.3" width="2" height="1.4" /></bezel>
+ <bezel element="text_5"><bounds x="0.25" y="34.3" width="2" height="1.4" /></bezel>
+ <bezel element="text_4"><bounds x="0.25" y="44.3" width="2" height="1.4" /></bezel>
+ <bezel element="text_3"><bounds x="0.25" y="54.3" width="2" height="1.4" /></bezel>
+ <bezel element="text_2"><bounds x="0.25" y="64.3" width="2" height="1.4" /></bezel>
+ <bezel element="text_1"><bounds x="0.25" y="74.3" width="2" height="1.4" /></bezel>
+
+ <bezel element="text_a"><bounds x="4" y="78.55" width="2" height="1.4" /></bezel>
+ <bezel element="text_b"><bounds x="14" y="78.55" width="2" height="1.4" /></bezel>
+ <bezel element="text_c"><bounds x="24" y="78.55" width="2" height="1.4" /></bezel>
+ <bezel element="text_d"><bounds x="34" y="78.55" width="2" height="1.4" /></bezel>
+ <bezel element="text_e"><bounds x="44" y="78.55" width="2" height="1.4" /></bezel>
+ <bezel element="text_f"><bounds x="54" y="78.55" width="2" height="1.4" /></bezel>
+ <bezel element="text_g"><bounds x="64" y="78.55" width="2" height="1.4" /></bezel>
+ <bezel element="text_h"><bounds x="74" y="78.55" width="2" height="1.4" /></bezel>
+
+ <!-- leds -->
+ <repeat count="8">
+ <param name="y" start="8.3" increment="10" />
+ <param name="i2" start="7" increment="-1" />
+
+ <repeat count="8">
+ <param name="x" start="0.2" increment="10" />
+ <param name="i1" start="2" increment="1" />
+ <bezel name="~i1~.~i2~" element="led"><bounds x="~x~" y="~y~" width="1.5" height="1.5" /></bezel>
+ </repeat>
+ </repeat>
+
+ <!-- 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>
+
+
+<!-- lcd panel -->
+
+ <group name="lcd1">
+ <bounds x="15.5" y="0" width="22.5" height="14" />
+
+ <bezel name="digit0" element="digit"><bounds x="15.5" y="0" width="4" height="6" /></bezel>
+ <bezel name="digit1" element="digit"><bounds x="20" y="0" width="4" height="6" /></bezel>
+ <bezel name="digit2" element="digit"><bounds x="24" y="0" width="4" height="6" /></bezel>
+ <bezel name="digit3" element="digit"><bounds x="30" y="0" width="4" height="6" /></bezel>
+ <bezel name="digit4" element="digit"><bounds x="34" y="0" width="4" height="6" /></bezel>
+
+ <bezel name="lcd0.0.0" element="ldot"><bounds x="28.91" y="1.8" width="0.6" height="0.6" /></bezel>
+ <bezel name="lcd0.0.0" element="ldot"><bounds x="28.69" y="3.65" width="0.6" height="0.6" /></bezel>
+
+ <bezel name="digit5" element="digit"><bounds x="20" y="8" width="4" height="6" /></bezel>
+ <bezel name="digit6" element="digit"><bounds x="24" y="8" width="4" height="6" /></bezel>
+ <bezel name="digit7" element="digit"><bounds x="30" y="8" width="4" height="6" /></bezel>
+ <bezel name="digit8" element="digit"><bounds x="34" y="8" width="4" height="6" /></bezel>
+
+ <bezel name="lcd1.0.0" element="ldot"><bounds x="28.91" y="9.8" width="0.6" height="0.6" /></bezel>
+ <bezel name="lcd1.0.0" element="ldot"><bounds x="28.69" y="11.65" width="0.6" height="0.6" /></bezel>
+ </group>
+
+
+<!-- build screen -->
+
+ <view name="Internal Layout">
+ <bounds left="-2.5" right="103" top="8.5" bottom="102" />
+
+ <group ref="sb_board"><bounds x="10" y="10" width="80" height="80" /></group>
+ <group ref="sb_ui"><bounds x="-1.5" y="10" width="10" height="80" /></group>
+
+ <group ref="lcd1"><bounds x="26.64" y="92" width="12.86" height="8" /></group>
+ <bezel element="whitew"><bounds x="25.14" y="91.5" width="14.86" height="9" /><color alpha="0.125" /></bezel>
+
+ <!-- button panel -->
+ <element ref="black"><bounds x="92.5" y="40.5" width="9" height="0.25" /></element>
+ <element ref="black"><bounds x="92.5" y="44.25" width="9" height="0.25" /></element>
+ <element ref="black"><bounds x="92.5" y="45.5" width="9" height="0.25" /></element>
+ <element ref="black"><bounds x="92.5" y="49.25" width="9" height="0.25" /></element>
+ <element ref="black"><bounds x="92.5" y="50.5" width="9" height="0.25" /></element>
+ <element ref="black"><bounds x="92.5" y="54.25" width="9" height="0.25" /></element>
+ <element ref="black"><bounds x="92.5" y="55.5" width="9" height="0.25" /></element>
+ <element ref="black"><bounds x="92.5" y="59.25" width="9" height="0.25" /></element>
+
+ <element ref="text_mode"><bounds x="92.5" y="59.4" width="9" height="1.4" /></element>
+ <element ref="black"><bounds x="91.75" y="60.5" width="0.25" height="24" /></element>
+ <element ref="black"><bounds x="102" y="60.5" width="0.25" height="24" /></element>
+
+ <element ref="black"><bounds x="92.5" y="10.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="92.5" y="15.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="92.5" y="20.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="92.5" y="25.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="92.5" y="30.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="92.5" y="35.5" width="9" height="4" /></element>
+
+ <element ref="black"><bounds x="92.5" y="60.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="92.5" y="65.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="92.5" y="70.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="92.5" y="75.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="92.5" y="80.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="92.5" y="85.5" width="9" height="4" /></element>
+
+ <element ref="black"><bounds x="45.5" y="91.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="45.5" y="96.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="55.5" y="91.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="55.5" y="96.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="70.5" y="91.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="70.5" y="96.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="80.5" y="91.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="80.5" y="96.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="92.5" y="91.5" width="9" height="4" /></element>
+ <element ref="black"><bounds x="92.5" y="96.5" width="9" height="4" /></element>
+
+ <element ref="text_go"> <bounds x="45.6" y="92.5" width="8.8" height="2" /></element>
+ <element ref="text_stop"> <bounds x="45.6" y="97.5" width="8.8" height="2" /></element>
+ <element ref="text_newgame"> <bounds x="55.6" y="92.5" width="8.8" height="2" /></element>
+ <element ref="text_sound"> <bounds x="55.6" y="97.5" width="8.8" height="2" /></element>
+ <element ref="text_plus"> <bounds x="70.6" y="92.0" width="8.8" height="3" /></element>
+ <element ref="text_minus"> <bounds x="70.6" y="96.6" width="8.8" height="3.8" /></element>
+ <element ref="text_function"><bounds x="80.6" y="92.5" width="8.8" height="2" /></element>
+ <element ref="text_tabcolor"><bounds x="80.6" y="97.5" width="8.8" height="2" /></element>
+ <element ref="text_scroll"> <bounds x="92.6" y="92.5" width="8.8" height="2" /></element>
+ <element ref="text_play"> <bounds x="92.6" y="97.5" width="8.8" height="2" /></element>
+
+ <element ref="text_p1"><bounds x="95.4" y="10.8" width="3.2" height="3.2" /><color alpha="0.75" /></element>
+ <element ref="text_p2"><bounds x="95.4" y="15.8" width="3.2" height="3.2" /><color alpha="0.75" /></element>
+ <element ref="text_p3"><bounds x="95.4" y="20.8" width="3.2" height="3.2" /><color alpha="0.75" /></element>
+ <element ref="text_p4"><bounds x="95.4" y="25.8" width="3.2" height="3.2" /><color alpha="0.75" /></element>
+ <element ref="text_p5"><bounds x="95.4" y="30.8" width="3.2" height="3.2" /><color alpha="0.75" /></element>
+ <element ref="text_p6"><bounds x="95.4" y="35.8" width="3.2" height="3.2" /><color alpha="0.75" /></element>
+
+ <element ref="text_white"> <bounds x="92.6" y="41.5" width="8.8" height="2" /></element>
+ <element ref="text_black"> <bounds x="92.6" y="46.5" width="8.8" height="2" /></element>
+ <element ref="text_check"> <bounds x="92.6" y="51.5" width="8.8" height="2" /></element>
+ <element ref="text_end"> <bounds x="92.6" y="56.5" width="8.8" height="2" /></element>
+
+ <element ref="text_normal"> <bounds x="92.6" y="61.5" width="8.8" height="2" /></element>
+ <element ref="text_analysis"><bounds x="92.6" y="66.5" width="8.8" height="2" /></element>
+ <element ref="text_setup"> <bounds x="92.6" y="71.5" width="8.8" height="2" /></element>
+ <element ref="text_level"> <bounds x="92.6" y="76.5" width="8.8" height="2" /></element>
+ <element ref="text_library"> <bounds x="92.6" y="81.5" width="8.8" height="2" /></element>
+ <element ref="text_info"> <bounds x="92.6" y="86.5" width="8.8" height="2" /></element>
+
+ <element ref="ledo"><bounds x="93" y="11" width="1.6" height="0.6" /></element>
+ <element ref="ledo"><bounds x="93" y="16" width="1.6" height="0.6" /></element>
+ <element ref="ledo"><bounds x="93" y="21" width="1.6" height="0.6" /></element>
+ <element ref="ledo"><bounds x="93" y="26" width="1.6" height="0.6" /></element>
+ <element ref="ledo"><bounds x="93" y="31" width="1.6" height="0.6" /></element>
+ <element ref="ledo"><bounds x="93" y="36" width="1.6" height="0.6" /></element>
+ <element ref="ledo"><bounds x="93" y="41" width="1.6" height="0.6" /></element>
+ <element ref="ledo"><bounds x="93" y="46" width="1.6" height="0.6" /></element>
+ <element ref="ledo"><bounds x="93" y="51" width="1.6" height="0.6" /></element>
+ <element ref="ledo"><bounds x="93" y="56" width="1.6" height="0.6" /></element>
+ <element ref="ledo"><bounds x="93" y="61" width="1.6" height="0.6" /></element>
+
+ <element ref="ledr" name="1.7" blend="add"><bounds x="93" y="11" width="1.6" height="0.6" /></element>
+ <element ref="ledr" name="1.6" blend="add"><bounds x="93" y="16" width="1.6" height="0.6" /></element>
+ <element ref="ledr" name="1.5" blend="add"><bounds x="93" y="21" width="1.6" height="0.6" /></element>
+ <element ref="ledr" name="1.4" blend="add"><bounds x="93" y="26" width="1.6" height="0.6" /></element>
+ <element ref="ledr" name="1.3" blend="add"><bounds x="93" y="31" width="1.6" height="0.6" /></element>
+ <element ref="ledr" name="1.2" blend="add"><bounds x="93" y="36" width="1.6" height="0.6" /></element>
+
+ <element ref="ledg" name="0.7" blend="add"><bounds x="93" y="11" width="1.6" height="0.6" /></element>
+ <element ref="ledg" name="0.6" blend="add"><bounds x="93" y="16" width="1.6" height="0.6" /></element>
+ <element ref="ledg" name="0.5" blend="add"><bounds x="93" y="21" width="1.6" height="0.6" /></element>
+ <element ref="ledg" name="0.4" blend="add"><bounds x="93" y="26" width="1.6" height="0.6" /></element>
+ <element ref="ledg" name="0.3" blend="add"><bounds x="93" y="31" width="1.6" height="0.6" /></element>
+ <element ref="ledg" name="0.2" blend="add"><bounds x="93" y="36" width="1.6" height="0.6" /></element>
+
+ <element ref="ledr" name="0.8" blend="add"><bounds x="93" y="41" width="1.6" height="0.6" /></element>
+ <element ref="ledr" name="1.8" blend="add"><bounds x="93" y="46" width="1.6" height="0.6" /></element>
+ <element ref="ledr" name="0.0" blend="add"><bounds x="93" y="51" width="1.6" height="0.6" /></element>
+ <element ref="ledr" name="1.0" blend="add"><bounds x="93" y="56" width="1.6" height="0.6" /></element>
+
+ <element ref="ledg" name="0.1" blend="add"><bounds x="93" y="61" width="1.6" height="0.6" /></element>
+ <element ref="ledr" name="1.1" blend="add"><bounds x="93" y="61" width="1.6" height="0.6" /></element>
+
+ <element ref="hl" inputtag="IN.3" inputmask="0x04"><bounds x="92.5" y="10.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.3" inputmask="0x01"><bounds x="92.5" y="15.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.2" inputmask="0x01"><bounds x="92.5" y="20.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.2" inputmask="0x04"><bounds x="92.5" y="25.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.3" inputmask="0x02"><bounds x="92.5" y="30.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.2" inputmask="0x02"><bounds x="92.5" y="35.5" width="9" height="4" /><color alpha="0.15" /></element>
+
+ <element ref="hl" inputtag="IN.7" inputmask="0x04"><bounds x="92.5" y="60.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.7" inputmask="0x02"><bounds x="92.5" y="65.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.0" inputmask="0x01"><bounds x="92.5" y="70.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.0" inputmask="0x02"><bounds x="92.5" y="75.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.6" inputmask="0x01"><bounds x="92.5" y="80.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.6" inputmask="0x02"><bounds x="92.5" y="85.5" width="9" height="4" /><color alpha="0.15" /></element>
+
+ <element ref="hl" inputtag="RESET" inputmask="0x01"><bounds x="45.5" y="91.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.1" inputmask="0x02"><bounds x="45.5" y="96.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.1" inputmask="0x04"><bounds x="55.5" y="91.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.1" inputmask="0x01"><bounds x="55.5" y="96.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.5" inputmask="0x01"><bounds x="70.5" y="91.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.4" inputmask="0x04"><bounds x="70.5" y="96.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.5" inputmask="0x02"><bounds x="80.5" y="91.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.4" inputmask="0x02"><bounds x="80.5" y="96.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.x" inputmask="0x01"><bounds x="92.5" y="91.5" width="9" height="4" /><color alpha="0.15" /></element>
+ <element ref="hl" inputtag="IN.4" inputmask="0x01"><bounds x="92.5" y="96.5" width="9" height="4" /><color alpha="0.15" /></element>
+
+ </view>
+</mamelayout>
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index bce9f1dfe74..3c3b6c7ce28 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -34112,6 +34112,10 @@ sage2 //
@source:saitek_chesstrv.cpp
chesstrv //
+@source:saitek_corona.cpp
+corona
+coronaa
+
@source:saitek_cp2000.cpp
cp2000 //
@@ -34123,8 +34127,6 @@ risc2500 //
montreux //
@source:saitek_stratos.cpp
-corona
-coronaa
stratos
stratosa
tking
diff --git a/src/mame/mess.flt b/src/mame/mess.flt
index f486bb025cd..1ba447dd2f1 100644
--- a/src/mame/mess.flt
+++ b/src/mame/mess.flt
@@ -692,6 +692,7 @@ rzone.cpp
sacstate.cpp
sage2.cpp
saitek_chesstrv.cpp
+saitek_corona.cpp
saitek_cp2000.cpp
saitek_delta1.cpp
saitek_risc2500.cpp