New working machines

-----------
Chess King Master [hap, Berger]
This commit is contained in:
hap 2017-12-17 11:22:07 +01:00
parent d818fd5eab
commit b3428ef505
2 changed files with 390 additions and 30 deletions

View File

@ -11,18 +11,24 @@
such as Arena(in editmode).
TODO:
- x
- ckmaster 1 WAIT CLK per M1, workaround with z80_set_cycle_tables is possible
(wait state is similar to MSX) but I can't be bothered, better solution
is to add M1 pin to the z80 core. Until then, it'll run ~20% too fast.
******************************************************************************
Master:
- x
- Z80 CPU(NEC D780C-1) @ 4MHz(8MHz XTAL), IRQ from 555 timer
- 8KB ROM(NEC D2764C-3), 2KB RAM(NEC D4016C)
- simple I/O via 2*74373 and a 74145
- 8*8 chessboard buttons, 32+1 border leds, piezo
******************************************************************************/
#include "emu.h"
#include "cpu/z80/z80.h"
#include "machine/timer.h"
#include "machine/bankdev.h"
#include "sound/dac.h"
#include "sound/volt_reg.h"
#include "speaker.h"
@ -38,6 +44,7 @@ public:
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_dac(*this, "dac"),
m_master_map(*this, "master_map"),
m_inp_matrix(*this, "IN.%u", 0),
m_out_x(*this, "%u.%u", 0U, 0U),
m_out_a(*this, "%u.a", 0U),
@ -49,7 +56,8 @@ public:
// devices/pointers
required_device<cpu_device> m_maincpu;
required_device<dac_bit_interface> m_dac;
required_device<dac_2bit_binary_weighted_ones_complement_device> m_dac;
optional_device<address_map_bank_device> m_master_map;
optional_ioport_array<10> m_inp_matrix; // max 10
output_finder<0x20, 0x20> m_out_x;
output_finder<0x20> m_out_a;
@ -80,8 +88,11 @@ public:
void display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update = true);
// Master
//DECLARE_READ8_MEMBER(master_input_r);
DECLARE_READ8_MEMBER(master_input_r);
DECLARE_WRITE8_MEMBER(master_control_w);
DECLARE_DRIVER_INIT(master);
DECLARE_READ8_MEMBER(master_trampoline_r);
DECLARE_WRITE8_MEMBER(master_trampoline_w);
protected:
virtual void machine_start() override;
@ -220,6 +231,26 @@ u16 ckz80_state::read_inputs(int columns)
// TTL/generic
WRITE8_MEMBER(ckz80_state::master_control_w)
{
// d0-d3: 74145 A-D
// 74145 0-9: input mux, led select
u16 sel = 1 << (data & 0xf) & 0x3ff;
m_inp_mux = sel;
// d4,d5: led data
display_matrix(2, 9, data >> 4 & 3, sel & 0x1ff);
// d6,d7: speaker +/-
m_dac->write(data >> 6 & 3);
}
READ8_MEMBER(ckz80_state::master_input_r)
{
// d0-d7: multiplexed inputs (active low)
return ~read_inputs(10);
}
DRIVER_INIT_MEMBER(ckz80_state, master)
{
u8 *rom = memregion("maincpu")->base();
@ -237,6 +268,7 @@ DRIVER_INIT_MEMBER(ckz80_state, master)
}
/******************************************************************************
Address Maps
******************************************************************************/
@ -244,8 +276,35 @@ DRIVER_INIT_MEMBER(ckz80_state, master)
// Master
static ADDRESS_MAP_START( master_map, AS_PROGRAM, 8, ckz80_state )
AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0xc000, 0xc7ff) AM_RAM
AM_RANGE(0x0000, 0x1fff) AM_MIRROR(0x6000) AM_ROM AM_REGION("maincpu", 0) // _A15
AM_RANGE(0xa000, 0xa000) AM_MIRROR(0x1fff) AM_READWRITE(master_input_r, master_control_w) // A13
AM_RANGE(0xc000, 0xc7ff) AM_MIRROR(0x3800) AM_RAM // A14
ADDRESS_MAP_END
// PCB design is prone to bus conflicts, but should be fine if software obeys
WRITE8_MEMBER(ckz80_state::master_trampoline_w)
{
if (offset & 0x2000)
m_master_map->write8(space, (offset & 0x3fff) | 0x8000, data);
if (offset & 0x4000)
m_master_map->write8(space, (offset & 0x7fff) | 0x8000, data);
}
READ8_MEMBER(ckz80_state::master_trampoline_r)
{
u8 data = 0xff;
if (~offset & 0x8000)
data &= m_master_map->read8(space, offset);
if (offset & 0x2000)
data &= m_master_map->read8(space, (offset & 0x3fff) | 0x8000);
if (offset & 0x4000)
data &= m_master_map->read8(space, (offset & 0x7fff) | 0x8000);
return data;
}
static ADDRESS_MAP_START( master_trampoline, AS_PROGRAM, 8, ckz80_state )
AM_RANGE(0x0000, 0xffff) AM_READWRITE(master_trampoline_r, master_trampoline_w)
ADDRESS_MAP_END
@ -341,24 +400,24 @@ static INPUT_PORTS_START( master )
PORT_INCLUDE( cb_buttons )
PORT_START("IN.8")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Black")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_NAME("King")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_NAME("Queen")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_NAME("Rook")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("Bishop")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Knight")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("Pawn")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_NAME("White")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Change Position")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_NAME("Clear Board")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_NAME("New Game")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_NAME("Take Back")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_NAME("King")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_NAME("Queen")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_NAME("Rook")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("IN.9")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Set up")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("New Game")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) PORT_NAME("Take Back")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) PORT_NAME("Forward")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_NAME("Hint")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("Move")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_NAME("Level")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_NAME("Sound")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_NAME("Bishop")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_9) PORT_NAME("Knight")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_0) PORT_NAME("Pawn")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("White")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("Black")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Move")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("Level")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Sound")
INPUT_PORTS_END
@ -371,19 +430,25 @@ static MACHINE_CONFIG_START( master )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_8MHz/2)
MCFG_CPU_PROGRAM_MAP(master_map)
MCFG_CPU_PROGRAM_MAP(master_trampoline)
MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_on", ckz80_state, irq_on, attotime::from_hz(429)) // theoretical frequency from 555 timer (22nF, 150K, 1K5), measurement was 418Hz
MCFG_TIMER_START_DELAY(attotime::from_hz(429) - attotime::from_nsec(22870)) // active for 22.87us
MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_off", ckz80_state, irq_off, attotime::from_hz(429))
MCFG_DEVICE_ADD("master_map", ADDRESS_MAP_BANK, 0)
MCFG_DEVICE_PROGRAM_MAP(master_map)
MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE)
MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(8)
MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(16)
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", ckz80_state, display_decay_tick, attotime::from_msec(1))
MCFG_DEFAULT_LAYOUT(layout_ck_master)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("speaker")
MCFG_SOUND_ADD("dac", DAC_1BIT, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.25)
MCFG_SOUND_ADD("dac", DAC_2BIT_BINARY_WEIGHTED_ONES_COMPLEMENT, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.25)
MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
MCFG_SOUND_ROUTE_EX(0, "dac", 1.0, DAC_VREF_POS_INPUT)
MCFG_SOUND_ROUTE_EX(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE_EX(0, "dac", -1.0, DAC_VREF_NEG_INPUT)
MACHINE_CONFIG_END
@ -394,7 +459,7 @@ MACHINE_CONFIG_END
ROM_START( ckmaster )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("ckmaster.bin", 0x0000, 0x2000, CRC(59cbec9e) SHA1(2e0629e65778da62bed857406b91a334698d2fe8) ) // D2764C, no label
ROM_LOAD("ckmaster.ic2", 0x0000, 0x2000, CRC(59cbec9e) SHA1(2e0629e65778da62bed857406b91a334698d2fe8) ) // D2764C, no label
ROM_END

View File

@ -4,17 +4,312 @@
<!-- define elements -->
<element name="led" defstate="0">
<disk state="0"><color red="0.2" green="0.04" blue="0.046" /></disk>
<disk state="1"><color red="1.0" green="0.2" blue="0.23" /></disk>
<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="ledg" defstate="0">
<disk state="1"><color red="0.15" green="1.0" blue="0.1" /></disk>
<disk state="0"><color red="0.015" green="0.1" blue="0.01" /></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>
<disk state="1">
<bounds x="0.12" y="0.12" width="0.76" height="0.76" />
<color red="1.0" green="1.0" blue="1.0" />
</disk>
</element>
<element name="hlb" 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="1.0" green="1.0" blue="1.0" />
</rect>
</element>
<element name="black"><rect><color red="0.17" green="0.15" blue="0.15" /></rect></element>
<element name="white"><rect><color red="0.81" green="0.8" blue="0.79" /></rect></element>
<element name="text_l1">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="CHANGE POSITION"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_l2">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="CLEAR BOARD"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_l3">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="NEW GAME"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_l4">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="TAKE BACK"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_l13">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="MOVE"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_l14">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="LEVEL"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_l15">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="SOUND"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_king">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="&#x2654;"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_queen">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="&#x2655;"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_rook">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="&#x2656;"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_bishop">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="&#x2657;"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_knight">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="&#x2658;"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<element name="text_pawn">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
<text string="&#x2659;"><color red="0.17" green="0.15" blue="0.15" /></text>
</element>
<!-- build screen -->
<view name="Internal Layout">
<bounds left="0" right="100" top="0" bottom="100" />
<bounds left="-2.5" right="106.5" top="-2.5" bottom="88.5" />
<bezel name="0.0" element="led"><bounds x="1" y="1" width="1" height="1" /></bezel>
<!-- chessboard leds -->
<bezel name="0.0" element="led"><bounds x="-1" y="7.25" width="1.5" height="1.5" /></bezel>
<bezel name="1.0" element="led"><bounds x="-1" y="17.25" width="1.5" height="1.5" /></bezel>
<bezel name="2.0" element="led"><bounds x="-1" y="27.25" width="1.5" height="1.5" /></bezel>
<bezel name="3.0" element="led"><bounds x="-1" y="37.25" width="1.5" height="1.5" /></bezel>
<bezel name="4.0" element="led"><bounds x="-1" y="47.25" width="1.5" height="1.5" /></bezel>
<bezel name="5.0" element="led"><bounds x="-1" y="57.25" width="1.5" height="1.5" /></bezel>
<bezel name="6.0" element="led"><bounds x="-1" y="67.25" width="1.5" height="1.5" /></bezel>
<bezel name="7.0" element="led"><bounds x="-1" y="77.25" width="1.5" height="1.5" /></bezel>
<bezel name="0.0" element="led"><bounds x="85.5" y="7.25" width="1.5" height="1.5" /></bezel>
<bezel name="1.0" element="led"><bounds x="85.5" y="17.25" width="1.5" height="1.5" /></bezel>
<bezel name="2.0" element="led"><bounds x="85.5" y="27.25" width="1.5" height="1.5" /></bezel>
<bezel name="3.0" element="led"><bounds x="85.5" y="37.25" width="1.5" height="1.5" /></bezel>
<bezel name="4.0" element="led"><bounds x="85.5" y="47.25" width="1.5" height="1.5" /></bezel>
<bezel name="5.0" element="led"><bounds x="85.5" y="57.25" width="1.5" height="1.5" /></bezel>
<bezel name="6.0" element="led"><bounds x="85.5" y="67.25" width="1.5" height="1.5" /></bezel>
<bezel name="7.0" element="led"><bounds x="85.5" y="77.25" width="1.5" height="1.5" /></bezel>
<bezel name="0.1" element="led"><bounds x="7.25" y="-1" width="1.5" height="1.5" /></bezel>
<bezel name="1.1" element="led"><bounds x="17.25" y="-1" width="1.5" height="1.5" /></bezel>
<bezel name="2.1" element="led"><bounds x="27.25" y="-1" width="1.5" height="1.5" /></bezel>
<bezel name="3.1" element="led"><bounds x="37.25" y="-1" width="1.5" height="1.5" /></bezel>
<bezel name="4.1" element="led"><bounds x="47.25" y="-1" width="1.5" height="1.5" /></bezel>
<bezel name="5.1" element="led"><bounds x="57.25" y="-1" width="1.5" height="1.5" /></bezel>
<bezel name="6.1" element="led"><bounds x="67.25" y="-1" width="1.5" height="1.5" /></bezel>
<bezel name="7.1" element="led"><bounds x="77.25" y="-1" width="1.5" height="1.5" /></bezel>
<bezel name="0.1" element="led"><bounds x="7.25" y="85.5" width="1.5" height="1.5" /></bezel>
<bezel name="1.1" element="led"><bounds x="17.25" y="85.5" width="1.5" height="1.5" /></bezel>
<bezel name="2.1" element="led"><bounds x="27.25" y="85.5" width="1.5" height="1.5" /></bezel>
<bezel name="3.1" element="led"><bounds x="37.25" y="85.5" width="1.5" height="1.5" /></bezel>
<bezel name="4.1" element="led"><bounds x="47.25" y="85.5" width="1.5" height="1.5" /></bezel>
<bezel name="5.1" element="led"><bounds x="57.25" y="85.5" width="1.5" height="1.5" /></bezel>
<bezel name="6.1" element="led"><bounds x="67.25" y="85.5" width="1.5" height="1.5" /></bezel>
<bezel name="7.1" element="led"><bounds x="77.25" y="85.5" width="1.5" height="1.5" /></bezel>
<bezel name="8.1" element="ledg"><bounds x="85.5" y="3.5" width="1.5" height="1.5" /></bezel>
<!-- chessboard bezel -->
<bezel element="black"><bounds x="2" y="2" width="82" height="82" /></bezel>
<bezel element="white"><bounds x="3" y="3" width="80" height="80" /></bezel>
<bezel element="black"><bounds x="13" y="2.5" width="10" height="10.5" /></bezel>
<bezel element="black"><bounds x="33" y="2.5" width="10" height="10.5" /></bezel>
<bezel element="black"><bounds x="53" y="2.5" width="10" height="10.5" /></bezel>
<bezel element="black"><bounds x="73" y="2.5" width="10.5" height="10.5" /></bezel>
<bezel element="black"><bounds x="2.5" y="13" width="10.5" height="10" /></bezel>
<bezel element="black"><bounds x="23" y="13" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="43" y="13" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="63" y="13" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="13" y="23" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="33" y="23" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="53" y="23" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="73" y="23" width="10.5" height="10" /></bezel>
<bezel element="black"><bounds x="2.5" y="33" width="10.5" height="10" /></bezel>
<bezel element="black"><bounds x="23" y="33" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="43" y="33" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="63" y="33" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="13" y="43" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="33" y="43" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="53" y="43" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="73" y="43" width="10.5" height="10" /></bezel>
<bezel element="black"><bounds x="2.5" y="53" width="10.5" height="10" /></bezel>
<bezel element="black"><bounds x="23" y="53" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="43" y="53" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="63" y="53" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="13" y="63" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="33" y="63" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="53" y="63" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="73" y="63" width="10.5" height="10" /></bezel>
<bezel element="black"><bounds x="2.5" y="73" width="10.5" height="10.5" /></bezel>
<bezel element="black"><bounds x="23" y="73" width="10" height="10.5" /></bezel>
<bezel element="black"><bounds x="43" y="73" width="10" height="10.5" /></bezel>
<bezel element="black"><bounds x="63" y="73" width="10" height="10.5" /></bezel>
<!-- chessboard sensors -->
<bezel element="hl" inputtag="IN.0" inputmask="0x01"><bounds x="3" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x01"><bounds x="13" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.2" inputmask="0x01"><bounds x="23" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x01"><bounds x="33" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x01"><bounds x="43" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x01"><bounds x="53" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.6" inputmask="0x01"><bounds x="63" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.7" inputmask="0x01"><bounds x="73" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.0" inputmask="0x02"><bounds x="3" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x02"><bounds x="13" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.2" inputmask="0x02"><bounds x="23" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x02"><bounds x="33" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x02"><bounds x="43" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x02"><bounds x="53" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.6" inputmask="0x02"><bounds x="63" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.7" inputmask="0x02"><bounds x="73" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.0" inputmask="0x04"><bounds x="3" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x04"><bounds x="13" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.2" inputmask="0x04"><bounds x="23" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x04"><bounds x="33" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x04"><bounds x="43" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x04"><bounds x="53" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.6" inputmask="0x04"><bounds x="63" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.7" inputmask="0x04"><bounds x="73" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.0" inputmask="0x08"><bounds x="3" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x08"><bounds x="13" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.2" inputmask="0x08"><bounds x="23" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x08"><bounds x="33" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x08"><bounds x="43" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x08"><bounds x="53" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.6" inputmask="0x08"><bounds x="63" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.7" inputmask="0x08"><bounds x="73" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.0" inputmask="0x10"><bounds x="3" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x10"><bounds x="13" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.2" inputmask="0x10"><bounds x="23" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x10"><bounds x="33" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x10"><bounds x="43" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x10"><bounds x="53" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.6" inputmask="0x10"><bounds x="63" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.7" inputmask="0x10"><bounds x="73" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.0" inputmask="0x20"><bounds x="3" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x20"><bounds x="13" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.2" inputmask="0x20"><bounds x="23" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x20"><bounds x="33" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x20"><bounds x="43" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x20"><bounds x="53" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.6" inputmask="0x20"><bounds x="63" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.7" inputmask="0x20"><bounds x="73" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.0" inputmask="0x40"><bounds x="3" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x40"><bounds x="13" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.2" inputmask="0x40"><bounds x="23" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x40"><bounds x="33" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x40"><bounds x="43" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x40"><bounds x="53" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.6" inputmask="0x40"><bounds x="63" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.7" inputmask="0x40"><bounds x="73" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.0" inputmask="0x80"><bounds x="3" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.1" inputmask="0x80"><bounds x="13" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.2" inputmask="0x80"><bounds x="23" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.3" inputmask="0x80"><bounds x="33" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.4" inputmask="0x80"><bounds x="43" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.5" inputmask="0x80"><bounds x="53" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="IN.6" inputmask="0x80"><bounds x="63" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="IN.7" inputmask="0x80"><bounds x="73" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
<!-- right side -->
<bezel element="white"><bounds x="88.5" y="-2.5" width="18" height="91" /></bezel>
<bezel element="black"><bounds x="90.666" y="2.833" width="13.666" height="80.333" /></bezel>
<bezel element="white"><bounds x="91" y="3.166" width="13" height="5" /></bezel>
<bezel element="white"><bounds x="91" y="8.500" width="13" height="5" /></bezel>
<bezel element="white"><bounds x="91" y="13.833" width="13" height="5" /></bezel>
<bezel element="white"><bounds x="91" y="19.166" width="13" height="5" /></bezel>
<bezel element="white"><bounds x="91" y="24.500" width="13" height="5" /></bezel>
<bezel element="white"><bounds x="91" y="29.833" width="13" height="5" /></bezel>
<bezel element="white"><bounds x="91" y="35.166" width="13" height="5" /></bezel>
<bezel element="white"><bounds x="91" y="40.500" width="13" height="5" /></bezel>
<bezel element="white"><bounds x="91" y="45.833" width="13" height="5" /></bezel>
<bezel element="white"><bounds x="91" y="51.166" width="13" height="5" /></bezel>
<bezel element="white"><bounds x="91" y="56.500" width="13" height="5" /></bezel>
<bezel element="white"><bounds x="91" y="61.833" width="13" height="5" /></bezel>
<bezel element="white"><bounds x="91" y="67.166" width="13" height="5" /></bezel>
<bezel element="white"><bounds x="91" y="72.500" width="13" height="5" /></bezel>
<bezel element="white"><bounds x="91" y="77.833" width="13" height="5" /></bezel>
<bezel element="text_l1"><bounds x="91.4" y="4.916" width="12.5" height="1.5" /></bezel>
<bezel element="text_l2"><bounds x="91.4" y="10.250" width="12.5" height="1.5" /></bezel>
<bezel element="text_l3"><bounds x="91.4" y="15.583" width="12.5" height="1.5" /></bezel>
<bezel element="text_l4"><bounds x="91.4" y="20.916" width="12.5" height="1.5" /></bezel>
<bezel element="text_l13"><bounds x="91.4" y="68.916" width="12.5" height="1.5" /></bezel>
<bezel element="text_l14"><bounds x="91.4" y="74.250" width="12.5" height="1.5" /></bezel>
<bezel element="text_l15"><bounds x="91.4" y="79.583" width="12.5" height="1.5" /></bezel>
<bezel element="text_king"><bounds x="91.4" y="24.500" width="12.5" height="5" /></bezel>
<bezel element="text_queen"><bounds x="91.4" y="29.833" width="12.5" height="5" /></bezel>
<bezel element="text_rook"><bounds x="91.4" y="35.166" width="12.5" height="5" /></bezel>
<bezel element="text_bishop"><bounds x="91.4" y="40.500" width="12.5" height="5" /></bezel>
<bezel element="text_knight"><bounds x="91.4" y="45.833" width="12.5" height="5" /></bezel>
<bezel element="text_pawn"><bounds x="91.4" y="51.166" width="12.5" height="5" /></bezel>
<bezel element="black"><bounds x="96.25" y="57.75" width="2.5" height="2.5" /></bezel>
<bezel element="white"><bounds x="96.5" y="58" width="2.0" height="2.0" /></bezel>
<bezel element="black"><bounds x="96.25" y="63.083" width="2.5" height="2.5" /></bezel>
<bezel element="hlb" inputtag="IN.8" inputmask="0x01"><bounds x="91" y="3.166" width="13" height="5" /><color alpha="0.4" /></bezel>
<bezel element="hlb" inputtag="IN.8" inputmask="0x02"><bounds x="91" y="8.500" width="13" height="5" /><color alpha="0.4" /></bezel>
<bezel element="hlb" inputtag="IN.8" inputmask="0x04"><bounds x="91" y="13.833" width="13" height="5" /><color alpha="0.4" /></bezel>
<bezel element="hlb" inputtag="IN.8" inputmask="0x08"><bounds x="91" y="19.166" width="13" height="5" /><color alpha="0.4" /></bezel>
<bezel element="hlb" inputtag="IN.8" inputmask="0x10"><bounds x="91" y="24.500" width="13" height="5" /><color alpha="0.4" /></bezel>
<bezel element="hlb" inputtag="IN.8" inputmask="0x20"><bounds x="91" y="29.833" width="13" height="5" /><color alpha="0.4" /></bezel>
<bezel element="hlb" inputtag="IN.8" inputmask="0x40"><bounds x="91" y="35.166" width="13" height="5" /><color alpha="0.4" /></bezel>
<bezel element="hlb" inputtag="IN.9" inputmask="0x01"><bounds x="91" y="40.500" width="13" height="5" /><color alpha="0.4" /></bezel>
<bezel element="hlb" inputtag="IN.9" inputmask="0x02"><bounds x="91" y="45.833" width="13" height="5" /><color alpha="0.4" /></bezel>
<bezel element="hlb" inputtag="IN.9" inputmask="0x04"><bounds x="91" y="51.166" width="13" height="5" /><color alpha="0.4" /></bezel>
<bezel element="hlb" inputtag="IN.9" inputmask="0x08"><bounds x="91" y="56.500" width="13" height="5" /><color alpha="0.4" /></bezel>
<bezel element="hlb" inputtag="IN.9" inputmask="0x10"><bounds x="91" y="61.833" width="13" height="5" /><color alpha="0.4" /></bezel>
<bezel element="hlb" inputtag="IN.9" inputmask="0x20"><bounds x="91" y="67.166" width="13" height="5" /><color alpha="0.4" /></bezel>
<bezel element="hlb" inputtag="IN.9" inputmask="0x40"><bounds x="91" y="72.500" width="13" height="5" /><color alpha="0.4" /></bezel>
<bezel element="hlb" inputtag="IN.9" inputmask="0x80"><bounds x="91" y="77.833" width="13" height="5" /><color alpha="0.4" /></bezel>
</view>
</mamelayout>