New working machine added

-------
Computer Chess (Conic) [hap, Sean Riddle]
This commit is contained in:
hap 2019-04-10 20:34:34 +02:00
parent 8477c1229b
commit afb8089ae5
5 changed files with 424 additions and 21 deletions

View File

@ -35,9 +35,6 @@ keypad legend:
ПП - просмотр позиции (view position)
УИ - уровень игры (game level)
TODO:
- identify 0,9 buttons (unused on the chess games)
******************************************************************************/
#include "emu.h"
@ -76,8 +73,7 @@ public:
// machine configs
void intel02(machine_config &config);
// reset button is tied directly to CPU RESET pin
DECLARE_INPUT_CHANGED_MEMBER(reset_button) { m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE); }
DECLARE_INPUT_CHANGED_MEMBER(reset_button);
protected:
virtual void machine_start() override;
@ -132,6 +128,14 @@ void intel02_state::machine_start()
save_item(NAME(m_led_active));
}
INPUT_CHANGED_MEMBER(intel02_state::reset_button)
{
// reset button goes to 8080/8255 RESET pins simultaneously (via 7474, and also a maze of NAND gates to who knows where)
m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE);
if (newval)
m_ppi8255->reset();
}
/******************************************************************************
@ -190,8 +194,8 @@ READ8_MEMBER(intel02_state::input_r)
WRITE8_MEMBER(intel02_state::digit_w)
{
// d0-d7: digit segment data
m_digit_data = bitswap<8>(data,7,0,1,2,3,4,5,6);
// d0-d6: digit segment data, d7: N/C
m_digit_data = bitswap<7>(data,0,1,2,3,4,5,6);
update_display();
}
@ -246,10 +250,10 @@ void intel02_state::main_io(address_map &map)
static INPUT_PORTS_START( intel02 )
PORT_START("IN.0")
PORT_BIT(0x0007, IP_ACTIVE_HIGH, IPT_UNKNOWN)
PORT_BIT(0x0007, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("View Position") PORT_CODE(KEYCODE_V)
PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Game Level") PORT_CODE(KEYCODE_L)
PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_UNKNOWN)
PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD)
PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("H8") PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_H)
PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("G7") PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CODE(KEYCODE_G)
PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("F6") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_CODE(KEYCODE_F)
@ -258,7 +262,7 @@ static INPUT_PORTS_START( intel02 )
PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("C3") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CODE(KEYCODE_C)
PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("B2") PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_CODE(KEYCODE_B)
PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("A1") PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_CODE(KEYCODE_A)
PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_UNKNOWN)
PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD)
PORT_START("IN.1")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
@ -288,7 +292,7 @@ void intel02_state::intel02(machine_config &config)
m_ppi8255->out_pb_callback().set(FUNC(intel02_state::digit_w));
m_ppi8255->tri_pb_callback().set_constant(0);
m_ppi8255->out_pc_callback().set(FUNC(intel02_state::control_w));
m_ppi8255->tri_pc_callback().set_constant(0);
m_ppi8255->tri_pc_callback().set_constant(0x80);
/* video hardware */
TIMER(config, m_delay_update).configure_generic(FUNC(intel02_state::delay_update));

View File

@ -1,10 +1,17 @@
// license:GPL-2.0+
// copyright-holders:Peter Trauner, Wilbert Pol, hap
// thanks-to:Sean Riddle
/******************************************************************************
Driver file to handle emulation of the Novag/Videomaster Chess Champion MK I
Initial version by PeT mess@utanet.at 2000,2001.
TODO:
- verify cncchess beeper duration/frequency
- cncchess middle leds
*******************************************************************************
The MK I was a clone of Data Cash Systems's CompuChess (1977, one of the first
chess computers). The ROM is identical. DCS sued Novag Industries for copyright
infringement and somehow didn't manage to win the case.
@ -43,16 +50,31 @@ MK I hardware description:
- Hardware addressing is controlled by a HBF4001AE.
- No speaker.
*******************************************************************************
Conic Computer Chess (aka Master I in Germany) is also based on DCS CompuChess,
probably the 2nd edition. Conic have done a few changes, not enough to hide that
they 'borrowed' code from CompuChess. They also added a piezo circuit.
Fairchild 3850PK CPU @ 2MHz (LC circuit), 3853PK
2KB ROM (3216), 256 bytes RAM (2*2111A)
555, 4001, 4011 for display blinking and beeper
"bP" buttons are F, G, H (instead of A, B, C)
******************************************************************************/
#include "emu.h"
#include "cpu/f8/f8.h"
#include "machine/f3853.h"
#include "machine/timer.h"
#include "sound/beep.h"
#include "speaker.h"
// internal artwork
#include "cmpchess.lh" // clickable
#include "mk1.lh" // clickable
#include "cncchess.lh" // clickable
namespace {
@ -63,6 +85,8 @@ public:
mk1_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_beeper_off(*this, "beeper_off"),
m_beeper(*this, "beeper"),
m_keypad(*this, "LINE%u", 1U),
m_delay_display(*this, "delay_display_%u", 0),
m_out_digit(*this, "digit%u", 0U)
@ -70,6 +94,7 @@ public:
void cmpchess(machine_config &config);
void mk1(machine_config &config);
void cnc(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(reset_switch);
@ -79,21 +104,32 @@ protected:
private:
// devices/pointers
required_device<cpu_device> m_maincpu;
optional_device<timer_device> m_beeper_off;
optional_device<beep_device> m_beeper;
required_ioport_array<4> m_keypad;
required_device_array<timer_device, 4> m_delay_display;
output_finder<4> m_out_digit;
void main_io(address_map &map);
void main_map(address_map &map);
void main_io(address_map &map);
void cnc_io(address_map &map);
TIMER_DEVICE_CALLBACK_MEMBER(beeper_off) { m_beeper->set_state(0); }
TIMER_DEVICE_CALLBACK_MEMBER(blink) { m_blink = !m_blink; update_display(); }
TIMER_DEVICE_CALLBACK_MEMBER(delay_display);
void update_display();
DECLARE_READ8_MEMBER(beeper_r);
DECLARE_WRITE8_MEMBER(input_w);
DECLARE_READ8_MEMBER(input_r);
DECLARE_WRITE8_MEMBER(digit_select_w);
DECLARE_WRITE8_MEMBER(digit_data_w);
DECLARE_READ8_MEMBER(digit_data_r);
DECLARE_WRITE8_MEMBER(input_digit_select_w) { input_w(space, offset, data); digit_select_w(space, offset, data); }
DECLARE_WRITE8_MEMBER(input_digit_data_w) { input_w(space, offset, data); digit_data_w(space, offset, data); }
u8 m_inp_mux;
u8 m_digit_select;
u8 m_digit_data;
bool m_blink;
@ -105,11 +141,13 @@ void mk1_state::machine_start()
m_out_digit.resolve();
// zerofill
m_inp_mux = 0;
m_digit_select = 0;
m_digit_data = 0;
m_blink = false;
// register for savestates
save_item(NAME(m_inp_mux));
save_item(NAME(m_digit_select));
save_item(NAME(m_digit_data));
save_item(NAME(m_blink));
@ -161,13 +199,29 @@ void mk1_state::update_display()
}
// F3850 ports
// I/O handlers
READ8_MEMBER(mk1_state::beeper_r)
{
// cncchess: trigger beeper
if (!machine().side_effects_disabled() && m_beeper != nullptr)
{
m_beeper->set_state(1);
m_beeper_off->adjust(attotime::from_msec(50)); // guessed
}
return m_maincpu->space(AS_PROGRAM).read_byte(offset);
}
WRITE8_MEMBER(mk1_state::digit_data_w)
{
// digit segment data, and also input mux
// digit segment data
m_digit_data = data;
update_display();
}
READ8_MEMBER(mk1_state::digit_data_r)
{
return m_digit_data;
}
WRITE8_MEMBER(mk1_state::digit_select_w)
@ -182,18 +236,24 @@ WRITE8_MEMBER(mk1_state::digit_select_w)
update_display();
}
WRITE8_MEMBER(mk1_state::input_w)
{
// input matrix is shared with either digit_data_w, or digit_select_w
m_inp_mux = data;
}
READ8_MEMBER(mk1_state::input_r)
{
u8 data = m_digit_data;
u8 data = m_inp_mux;
// d0-d3: multiplexed inputs from d4-d7
for (int i = 0; i < 4; i++)
if (m_digit_data & m_keypad[i]->read())
if (m_inp_mux & m_keypad[i]->read())
data |= 1 << i;
// d4-d7: multiplexed inputs from d0-d3
for (int i = 0; i < 4; i++)
if (BIT(m_digit_data, i))
if (BIT(m_inp_mux, i))
data |= m_keypad[i]->read();
return data;
@ -209,15 +269,23 @@ void mk1_state::main_map(address_map &map)
{
map(0x0000, 0x07ff).rom();
map(0x1800, 0x18ff).ram();
map(0x8000, 0xffff).r(FUNC(mk1_state::beeper_r));
}
void mk1_state::main_io(address_map &map)
{
map(0x00, 0x00).rw(FUNC(mk1_state::input_r), FUNC(mk1_state::digit_data_w));
map(0x00, 0x00).rw(FUNC(mk1_state::input_r), FUNC(mk1_state::input_digit_data_w));
map(0x01, 0x01).w(FUNC(mk1_state::digit_select_w));
map(0x0c, 0x0f).rw("smi", FUNC(f3853_device::read), FUNC(f3853_device::write));
}
void mk1_state::cnc_io(address_map &map)
{
map(0x00, 0x00).rw(FUNC(mk1_state::digit_data_r), FUNC(mk1_state::digit_data_w));
map(0x01, 0x01).rw(FUNC(mk1_state::input_r), FUNC(mk1_state::input_digit_select_w));
map(0x0c, 0x0f).rw("smi", FUNC(f3853_device::read), FUNC(f3853_device::write));
}
/******************************************************************************
@ -253,6 +321,35 @@ static INPUT_PORTS_START( cmpchess )
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_R) PORT_TOGGLE PORT_CHANGED_MEMBER(DEVICE_SELF, mk1_state, reset_switch, nullptr) PORT_NAME("Reset Switch") // L.S. switch on the MK I
INPUT_PORTS_END
static INPUT_PORTS_START( cncchess )
PORT_START("LINE1")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1 / Black Pawn")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2 / Black Rook")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3 / Black Knight")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4 / Black Bishop")
PORT_START("LINE2")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5 / Black Queen")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6 / Black King")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CODE(KEYCODE_S) PORT_NAME("7 / SP") // search piece (same as fp)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_I) PORT_NAME("8 / IP") // insert piece (same as ep)
PORT_START("LINE3")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("A / White Pawn")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_NAME("B / White Rook")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_NAME("C / White Knight")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_D) PORT_NAME("D / White Bishop")
PORT_START("LINE4")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("E / White Queen")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_NAME("F / White King")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_M) PORT_NAME("G / MD") // more data
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("H / GO")
PORT_START("RESET")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_CHANGED_MEMBER(DEVICE_SELF, mk1_state, reset_switch, nullptr) PORT_NAME("Reset")
INPUT_PORTS_END
/******************************************************************************
@ -289,6 +386,22 @@ void mk1_state::mk1(machine_config &config)
config.set_default_layout(layout_mk1);
}
void mk1_state::cnc(machine_config &config)
{
mk1(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_IO, &mk1_state::cnc_io);
config.set_default_layout(layout_cncchess);
/* sound hardware */
SPEAKER(config, "speaker").front_center();
BEEP(config, m_beeper, 2000); // guessed
m_beeper->add_route(ALL_OUTPUTS, "speaker", 0.25);
TIMER(config, "beeper_off").configure_generic(FUNC(mk1_state::beeper_off));
}
/******************************************************************************
@ -305,6 +418,12 @@ ROM_START( ccmk1 )
ROM_LOAD("82c210-1", 0x0000, 0x0800, CRC(278f7bf3) SHA1(b384c95ba691d52dfdddd35987a71e9746a46170) )
ROM_END
ROM_START( cncchess )
ROM_REGION( 0x0800, "maincpu", 0 )
ROM_LOAD("c48170.u1", 0x0000, 0x0800, CRC(5beace32) SHA1(9df924037614831a86b73eb3a16bbc80c63257a2) ) // 2316B
ROM_END
} // anonymous namespace
@ -316,3 +435,5 @@ ROM_END
// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
CONS( 1977, cmpchess, 0, 0, cmpchess, cmpchess, mk1_state, empty_init, "Data Cash Systems", "CompuChess", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1978, ccmk1, cmpchess, 0, mk1, cmpchess, mk1_state, empty_init, "Novag", "Chess Champion: MK I", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1979, cncchess, 0, 0, cnc, cncchess, mk1_state, empty_init, "Conic", "Computer Chess (Conic)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )

View File

@ -0,0 +1,277 @@
<?xml version="1.0"?>
<mamelayout version="2">
<!-- define elements -->
<element name="blackb"><rect><color red="0" green="0" blue="0" /></rect></element>
<element name="disk_blackb"><disk><color red="0" green="0" blue="0" /></disk></element>
<element name="black"><rect><color red="0.25" green="0.25" blue="0.25" /></rect></element>
<element name="disk_black"><disk><color red="0.25" green="0.25" blue="0.25" /></disk></element>
<element name="white"><rect><color red="0.75" green="0.75" blue="0.75" /></rect></element>
<element name="orange"><rect><color red="0.75" green="0.35" blue="0.05" /></rect></element>
<element name="red"><rect><color red="1.0" green="0.1" blue="0.15" /></rect></element>
<element name="digit" defstate="0">
<led7seg><color red="1.0" green="0.1" blue="0.15" /></led7seg>
</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.15" green="0.02" blue="0.03" /></disk>
</element>
<element name="hl" defstate="0">
<text string=" ">
<bounds x="0.0" y="0.0" width="1.0" height="1.0" />
<color red="0.0" green="0.0" blue="0.0" />
</text>
<rect state="1">
<bounds x="0.0" y="0.0" width="1.0" height="1.0" />
<color red="0.0" green="0.0" blue="0.0" />
</rect>
</element>
<element name="text_br">
<rect><color red="0.75" green="0.35" blue="0.05" /></rect>
<text string="RESET"><color red="0.05" green="0.05" blue="0.05" /></text>
</element>
<element name="text_b01a">
<rect><color red="0.25" green="0.25" blue="0.25" /></rect>
<text string="A"><color red="0.85" green="0.85" blue="0.85" /></text>
</element>
<element name="text_b01b">
<rect><color red="0.25" green="0.25" blue="0.25" /></rect>
<text string="[P]"><color red="0.85" green="0.85" blue="0.85" /></text>
</element>
<element name="text_b02a">
<rect><color red="0.25" green="0.25" blue="0.25" /></rect>
<text string="B"><color red="0.85" green="0.85" blue="0.85" /></text>
</element>
<element name="text_b02b">
<rect><color red="0.25" green="0.25" blue="0.25" /></rect>
<text string="[R]"><color red="0.85" green="0.85" blue="0.85" /></text>
</element>
<element name="text_b03a">
<rect><color red="0.25" green="0.25" blue="0.25" /></rect>
<text string="C"><color red="0.85" green="0.85" blue="0.85" /></text>
</element>
<element name="text_b03b">
<rect><color red="0.25" green="0.25" blue="0.25" /></rect>
<text string="[N]"><color red="0.85" green="0.85" blue="0.85" /></text>
</element>
<element name="text_b04a">
<rect><color red="0.25" green="0.25" blue="0.25" /></rect>
<text string="D"><color red="0.85" green="0.85" blue="0.85" /></text>
</element>
<element name="text_b04b">
<rect><color red="0.25" green="0.25" blue="0.25" /></rect>
<text string="[B]"><color red="0.85" green="0.85" blue="0.85" /></text>
</element>
<element name="text_b05a">
<rect><color red="0.25" green="0.25" blue="0.25" /></rect>
<text string="E"><color red="0.85" green="0.85" blue="0.85" /></text>
</element>
<element name="text_b05b">
<rect><color red="0.25" green="0.25" blue="0.25" /></rect>
<text string="[Q]"><color red="0.85" green="0.85" blue="0.85" /></text>
</element>
<element name="text_b06a">
<rect><color red="0.25" green="0.25" blue="0.25" /></rect>
<text string="F"><color red="0.85" green="0.85" blue="0.85" /></text>
</element>
<element name="text_b06b">
<rect><color red="0.25" green="0.25" blue="0.25" /></rect>
<text string="[K]"><color red="0.85" green="0.85" blue="0.85" /></text>
</element>
<element name="text_b07a">
<rect><color red="0.25" green="0.25" blue="0.25" /></rect>
<text string="G"><color red="0.85" green="0.85" blue="0.85" /></text>
</element>
<element name="text_b07b">
<rect><color red="0.25" green="0.25" blue="0.25" /></rect>
<text string="MD"><color red="0.85" green="0.85" blue="0.85" /></text>
</element>
<element name="text_b08a">
<rect><color red="0.25" green="0.25" blue="0.25" /></rect>
<text string="H"><color red="0.85" green="0.85" blue="0.85" /></text>
</element>
<element name="text_b08b">
<rect><color red="0.25" green="0.25" blue="0.25" /></rect>
<text string="GO"><color red="0.85" green="0.85" blue="0.85" /></text>
</element>
<element name="text_b09a">
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
<text string="1"><color red="0.05" green="0.05" blue="0.05" /></text>
</element>
<element name="text_b09b">
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
<text string="[P]"><color red="0.05" green="0.05" blue="0.05" /></text>
</element>
<element name="text_b10a">
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
<text string="2"><color red="0.05" green="0.05" blue="0.05" /></text>
</element>
<element name="text_b10b">
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
<text string="[R]"><color red="0.05" green="0.05" blue="0.05" /></text>
</element>
<element name="text_b11a">
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
<text string="3"><color red="0.05" green="0.05" blue="0.05" /></text>
</element>
<element name="text_b11b">
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
<text string="[N]"><color red="0.05" green="0.05" blue="0.05" /></text>
</element>
<element name="text_b12a">
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
<text string="4"><color red="0.05" green="0.05" blue="0.05" /></text>
</element>
<element name="text_b12b">
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
<text string="[B]"><color red="0.05" green="0.05" blue="0.05" /></text>
</element>
<element name="text_b13a">
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
<text string="5"><color red="0.05" green="0.05" blue="0.05" /></text>
</element>
<element name="text_b13b">
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
<text string="[Q]"><color red="0.05" green="0.05" blue="0.05" /></text>
</element>
<element name="text_b14a">
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
<text string="6"><color red="0.05" green="0.05" blue="0.05" /></text>
</element>
<element name="text_b14b">
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
<text string="[K]"><color red="0.05" green="0.05" blue="0.05" /></text>
</element>
<element name="text_b15a">
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
<text string="7"><color red="0.05" green="0.05" blue="0.05" /></text>
</element>
<element name="text_b15b">
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
<text string="SP"><color red="0.05" green="0.05" blue="0.05" /></text>
</element>
<element name="text_b16a">
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
<text string="8"><color red="0.05" green="0.05" blue="0.05" /></text>
</element>
<element name="text_b16b">
<rect><color red="0.75" green="0.75" blue="0.75" /></rect>
<text string="IP"><color red="0.05" green="0.05" blue="0.05" /></text>
</element>
<!-- build screen -->
<view name="Internal Layout">
<bounds left="8.8" right="55.3" top="20" bottom="42.5" />
<!-- outer part, display -->
<bezel element="black"><bounds x="8.7" y="22" width="46.7" height="0.7" /></bezel>
<bezel element="black"><bounds x="8.7" y="23.4" width="46.7" height="0.7" /></bezel>
<bezel element="black"><bounds x="8.7" y="24.8" width="46.7" height="0.7" /></bezel>
<bezel element="blackb"><bounds x="20" y="20" width="28" height="20" /></bezel>
<bezel element="black"><bounds x="19.3" y="27.3" width="32.0" height="20" /></bezel>
<bezel element="black"><bounds x="17.3" y="29.3" width="36.0" height="20" /></bezel>
<bezel element="blackb"><bounds x="18" y="28" width="34.6" height="20" /></bezel>
<bezel element="disk_black"><bounds x="17.3" y="27.3" width="4" height="4" /></bezel>
<bezel element="disk_blackb"><bounds x="18" y="28" width="2.6" height="2.6" /></bezel>
<bezel element="disk_black"><bounds x="49.3" y="27.3" width="4" height="4" /></bezel>
<bezel element="disk_blackb"><bounds x="50" y="28" width="2.6" height="2.6" /></bezel>
<bezel element="blackb"><bounds x="19.3" y="28" width="32.0" height="20" /></bezel>
<bezel element="blackb"><bounds x="18" y="29.3" width="34.6" height="20" /></bezel>
<bezel element="blackb"><bounds x="15" y="42.6" width="50" height="20" /></bezel>
<bezel element="blackb"><bounds x="25.3" y="22" width="20" height="6.5" /></bezel>
<bezel name="digit0" element="digit"><bounds x="28.3" y="23" width="3" height="4.5" /></bezel>
<bezel name="digit1" element="digit"><bounds x="31.3" y="23" width="3" height="4.5" /></bezel>
<bezel name="digit2" element="digit"><bounds x="36.3" y="23" width="3" height="4.5" /></bezel>
<bezel name="digit3" element="digit"><bounds x="39.3" y="23" width="3" height="4.5" /></bezel>
<bezel name="ledx" element="led"><bounds x="35.15" y="24.0" width="0.45" height="0.45" /></bezel>
<bezel name="ledx" element="led"><bounds x="35.0" y="26.05" width="0.45" height="0.45" /></bezel>
<bezel element="red"><bounds x="25.3" y="22" width="20" height="6.5" /><color alpha="0.15" /></bezel>
<!-- button panel -->
<bezel element="black"><bounds x="20" y="30" width="2.6" height="4.5" /></bezel>
<bezel element="black"><bounds x="24" y="30" width="2.6" height="4.5" /></bezel>
<bezel element="black"><bounds x="28" y="30" width="2.6" height="4.5" /></bezel>
<bezel element="black"><bounds x="32" y="30" width="2.6" height="4.5" /></bezel>
<bezel element="black"><bounds x="36" y="30" width="2.6" height="4.5" /></bezel>
<bezel element="black"><bounds x="40" y="30" width="2.6" height="4.5" /></bezel>
<bezel element="black"><bounds x="44" y="30" width="2.6" height="4.5" /></bezel>
<bezel element="black"><bounds x="48" y="30" width="2.6" height="4.5" /></bezel>
<bezel element="white"><bounds x="20" y="36.2" width="2.6" height="4.5" /></bezel>
<bezel element="white"><bounds x="24" y="36.2" width="2.6" height="4.5" /></bezel>
<bezel element="white"><bounds x="28" y="36.2" width="2.6" height="4.5" /></bezel>
<bezel element="white"><bounds x="32" y="36.2" width="2.6" height="4.5" /></bezel>
<bezel element="white"><bounds x="36" y="36.2" width="2.6" height="4.5" /></bezel>
<bezel element="white"><bounds x="40" y="36.2" width="2.6" height="4.5" /></bezel>
<bezel element="white"><bounds x="44" y="36.2" width="2.6" height="4.5" /></bezel>
<bezel element="white"><bounds x="48" y="36.2" width="2.6" height="4.5" /></bezel>
<bezel element="text_b01a"><bounds x="20.10" y="30.4" width="2.4" height="1.2" /></bezel>
<bezel element="text_b01b"><bounds x="20.15" y="32.0" width="2.4" height="1.9" /></bezel>
<bezel element="text_b02a"><bounds x="24.10" y="30.4" width="2.4" height="1.2" /></bezel>
<bezel element="text_b02b"><bounds x="24.15" y="32.0" width="2.4" height="1.9" /></bezel>
<bezel element="text_b03a"><bounds x="28.10" y="30.4" width="2.4" height="1.2" /></bezel>
<bezel element="text_b03b"><bounds x="28.15" y="32.0" width="2.4" height="1.9" /></bezel>
<bezel element="text_b04a"><bounds x="32.10" y="30.4" width="2.4" height="1.2" /></bezel>
<bezel element="text_b04b"><bounds x="32.15" y="32.0" width="2.4" height="1.9" /></bezel>
<bezel element="text_b05a"><bounds x="36.10" y="30.4" width="2.4" height="1.2" /></bezel>
<bezel element="text_b05b"><bounds x="36.15" y="32.0" width="2.4" height="1.9" /></bezel>
<bezel element="text_b06a"><bounds x="40.10" y="30.4" width="2.4" height="1.2" /></bezel>
<bezel element="text_b06b"><bounds x="40.15" y="32.0" width="2.4" height="1.9" /></bezel>
<bezel element="text_b07a"><bounds x="44.10" y="30.4" width="2.4" height="1.2" /></bezel>
<bezel element="text_b07b"><bounds x="44.15" y="32.0" width="2.4" height="1.9" /></bezel>
<bezel element="text_b08a"><bounds x="48.10" y="30.4" width="2.4" height="1.2" /></bezel>
<bezel element="text_b08b"><bounds x="48.15" y="32.0" width="2.4" height="1.9" /></bezel>
<bezel element="text_b09a"><bounds x="20.10" y="36.6" width="2.4" height="1.2" /></bezel>
<bezel element="text_b09b"><bounds x="20.15" y="38.2" width="2.4" height="1.9" /></bezel>
<bezel element="text_b10a"><bounds x="24.10" y="36.6" width="2.4" height="1.2" /></bezel>
<bezel element="text_b10b"><bounds x="24.15" y="38.2" width="2.4" height="1.9" /></bezel>
<bezel element="text_b11a"><bounds x="28.10" y="36.6" width="2.4" height="1.2" /></bezel>
<bezel element="text_b11b"><bounds x="28.15" y="38.2" width="2.4" height="1.9" /></bezel>
<bezel element="text_b12a"><bounds x="32.10" y="36.6" width="2.4" height="1.2" /></bezel>
<bezel element="text_b12b"><bounds x="32.15" y="38.2" width="2.4" height="1.9" /></bezel>
<bezel element="text_b13a"><bounds x="36.10" y="36.6" width="2.4" height="1.2" /></bezel>
<bezel element="text_b13b"><bounds x="36.15" y="38.2" width="2.4" height="1.9" /></bezel>
<bezel element="text_b14a"><bounds x="40.10" y="36.6" width="2.4" height="1.2" /></bezel>
<bezel element="text_b14b"><bounds x="40.15" y="38.2" width="2.4" height="1.9" /></bezel>
<bezel element="text_b15a"><bounds x="44.10" y="36.6" width="2.4" height="1.2" /></bezel>
<bezel element="text_b15b"><bounds x="44.15" y="38.2" width="2.4" height="1.9" /></bezel>
<bezel element="text_b16a"><bounds x="48.10" y="36.6" width="2.4" height="1.2" /></bezel>
<bezel element="text_b16b"><bounds x="48.15" y="38.2" width="2.4" height="1.9" /></bezel>
<bezel element="hl" inputtag="LINE3" inputmask="0x80"><bounds x="20" y="30" width="2.6" height="4.5" /><color alpha="0.25" /></bezel>
<bezel element="hl" inputtag="LINE3" inputmask="0x40"><bounds x="24" y="30" width="2.6" height="4.5" /><color alpha="0.25" /></bezel>
<bezel element="hl" inputtag="LINE3" inputmask="0x20"><bounds x="28" y="30" width="2.6" height="4.5" /><color alpha="0.25" /></bezel>
<bezel element="hl" inputtag="LINE3" inputmask="0x10"><bounds x="32" y="30" width="2.6" height="4.5" /><color alpha="0.25" /></bezel>
<bezel element="hl" inputtag="LINE4" inputmask="0x80"><bounds x="36" y="30" width="2.6" height="4.5" /><color alpha="0.25" /></bezel>
<bezel element="hl" inputtag="LINE4" inputmask="0x40"><bounds x="40" y="30" width="2.6" height="4.5" /><color alpha="0.25" /></bezel>
<bezel element="hl" inputtag="LINE4" inputmask="0x20"><bounds x="44" y="30" width="2.6" height="4.5" /><color alpha="0.25" /></bezel>
<bezel element="hl" inputtag="LINE4" inputmask="0x10"><bounds x="48" y="30" width="2.6" height="4.5" /><color alpha="0.25" /></bezel>
<bezel element="hl" inputtag="LINE1" inputmask="0x80"><bounds x="20" y="36.2" width="2.6" height="4.5" /><color alpha="0.25" /></bezel>
<bezel element="hl" inputtag="LINE1" inputmask="0x40"><bounds x="24" y="36.2" width="2.6" height="4.5" /><color alpha="0.25" /></bezel>
<bezel element="hl" inputtag="LINE1" inputmask="0x20"><bounds x="28" y="36.2" width="2.6" height="4.5" /><color alpha="0.25" /></bezel>
<bezel element="hl" inputtag="LINE1" inputmask="0x10"><bounds x="32" y="36.2" width="2.6" height="4.5" /><color alpha="0.25" /></bezel>
<bezel element="hl" inputtag="LINE2" inputmask="0x80"><bounds x="36" y="36.2" width="2.6" height="4.5" /><color alpha="0.25" /></bezel>
<bezel element="hl" inputtag="LINE2" inputmask="0x40"><bounds x="40" y="36.2" width="2.6" height="4.5" /><color alpha="0.25" /></bezel>
<bezel element="hl" inputtag="LINE2" inputmask="0x20"><bounds x="44" y="36.2" width="2.6" height="4.5" /><color alpha="0.25" /></bezel>
<bezel element="hl" inputtag="LINE2" inputmask="0x10"><bounds x="48" y="36.2" width="2.6" height="4.5" /><color alpha="0.25" /></bezel>
<bezel element="orange"><bounds x="10.8" y="37.15" width="4.5" height="2.6" /></bezel>
<bezel element="text_br"><bounds x="10.9" y="37.6" width="4.3" height="1.5" /></bezel>
<bezel element="hl" inputtag="RESET" inputmask="0x01"><bounds x="10.8" y="37.15" width="4.5" height="2.6" /><color alpha="0.25" /></bezel>
</view>
</mamelayout>

View File

@ -99,8 +99,8 @@
<bezel element="button" inputtag="IN.0" inputmask="0x0100"><bounds x="21.57" y="26.7" width="3" height="2.5" /></bezel>
<bezel element="button" inputtag="IN.0" inputmask="0x0080"><bounds x="25.93" y="26.7" width="3" height="2.5" /></bezel>
<bezel element="button" inputtag="IN.0" inputmask="0x0040"><bounds x="30.27" y="26.7" width="3" height="2.5" /></bezel>
<bezel element="button" inputtag="IN.x" inputmask="0x01"><bounds x="34.64" y="26.7" width="3" height="2.5" /></bezel>
<bezel element="button" inputtag="IN.x" inputmask="0x01"><bounds x="39" y="26.7" width="3" height="2.5" /></bezel>
<bezel element="button" inputtag="IN.0" inputmask="0x0020"><bounds x="34.64" y="26.7" width="3" height="2.5" /></bezel>
<bezel element="button" inputtag="IN.0" inputmask="0x4000"><bounds x="39" y="26.7" width="3" height="2.5" /></bezel>
</view>
</mamelayout>

View File

@ -21743,6 +21743,7 @@ mjsister // (c) 1986 Toaplan
@source:mk1.cpp
ccmk1 // Chess Champion MK I
cmpchess
cncchess
@source:mk14.cpp
mk14 //