Machines promoted to working

----------------------------
Intelligent Chess [hap, Berger, Achim]
This commit is contained in:
hap 2020-07-16 20:19:41 +02:00
parent a200131478
commit fbb49a3124
4 changed files with 262 additions and 71 deletions

View File

@ -73,9 +73,9 @@ public:
{ }
// halt button is tied to NMI, reset button to RESET(but only if halt button is held)
void update_reset() { m_maincpu->set_input_line(INPUT_LINE_RESET, (m_inputs[1]->read() == 3) ? ASSERT_LINE : CLEAR_LINE); }
DECLARE_INPUT_CHANGED_MEMBER(reset_button) { update_reset(); }
DECLARE_INPUT_CHANGED_MEMBER(halt_button) { m_maincpu->set_input_line(M6502_NMI_LINE, newval ? ASSERT_LINE : CLEAR_LINE); update_reset(); }
void update_reset();
// machine configs
void arb(machine_config &config);
@ -109,22 +109,15 @@ private:
void control_w(u8 data);
u8 input_r();
u16 m_inp_mux;
u16 m_led_select;
u8 m_led_group;
u8 m_led_latch;
u16 m_led_data;
u16 m_inp_mux = 0;
u16 m_led_select = 0;
u8 m_led_group = 0;
u8 m_led_latch = 0;
u16 m_led_data = 0;
};
void arb_state::machine_start()
{
// zerofill
m_inp_mux = 0;
m_led_select = 0;
m_led_group = 0;
m_led_latch = 0;
m_led_data = 0;
// register for savestates
save_item(NAME(m_inp_mux));
save_item(NAME(m_led_select));
@ -133,6 +126,16 @@ void arb_state::machine_start()
save_item(NAME(m_led_data));
}
void arb_state::update_reset()
{
bool state = m_inputs[1]->read() == 3;
// RESET goes to 6502+6522
m_maincpu->set_input_line(INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE);
if (state)
m_via->reset();
}
/******************************************************************************

View File

@ -9,11 +9,11 @@ It's a portable chesscomputer with sensory board. The MCU says "(C) CAL R & O3",
though the program is supposedly by David Kittinger?
Hardware notes:
- Mostek 3875/42 (4KB ROM, 64 bytes executable RAM)
- Mostek 3875/42 (4KB ROM, 64 bytes extra RAM)
- buzzer, button sensors chessboard, 16+4 leds
TODO:
- memory switch? probably a hardware thing to power only the MCU
MCU interrupts are unused. Its embedded extra RAM is battery-backed via MEM
switch tied to pin #4 (VSB: RAM standby power).
******************************************************************************/
@ -22,6 +22,7 @@ TODO:
#include "cpu/f8/f8.h"
#include "machine/f3853.h"
#include "machine/sensorboard.h"
#include "machine/nvram.h"
#include "sound/dac.h"
#include "sound/volt_reg.h"
#include "video/pwm.h"
@ -82,10 +83,6 @@ void micro_state::machine_start()
save_item(NAME(m_led_data));
save_item(NAME(m_control));
save_item(NAME(m_inp_mux));
// game relies on RAM filled with FF at power-on
for (int i = 0; i < 0x40; i++)
m_maincpu->space(AS_PROGRAM).write_byte(i + 0xfc0, 0xff);
}
@ -163,7 +160,7 @@ void micro_state::main_map(address_map &map)
{
map.global_mask(0xfff);
map(0x0000, 0x0fbf).rom();
map(0x0fc0, 0x0fff).ram();
map(0x0fc0, 0x0fff).ram().share("nvram");
}
void micro_state::main_io(address_map &map)
@ -200,7 +197,7 @@ INPUT_PORTS_END
void micro_state::micro(machine_config &config)
{
// basic machine hardware
F8(config, m_maincpu, 4500000/2); // approximation
F8(config, m_maincpu, 4500000/2); // matches video reference
m_maincpu->set_addrmap(AS_PROGRAM, &micro_state::main_map);
m_maincpu->set_addrmap(AS_IO, &micro_state::main_io);
@ -209,9 +206,12 @@ void micro_state::micro(machine_config &config)
psu.write_a().set(FUNC(micro_state::control_w));
psu.write_b().set(FUNC(micro_state::led_w));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1);
SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS);
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
m_board->set_delay(attotime::from_msec(150));
m_board->set_nvram_enable(true);
// video hardware
PWM_DISPLAY(config, m_display).set_size(6, 6);

View File

@ -5,26 +5,34 @@
SciSys Intelligent Chess
Development by Intelligent Games, the same group of people that worked on the
Super System III and Mark V. The visual interface is an evolution of "Tolinka".
Hardware notes:
- Synertek 6502A @ ~1.1MHz
- Synertek 6522 VIA
- 2*4KB ROM(Synertek 2332), 2KB RAM(4*M5L2114LP)
- 256 bytes PROM(MMI 6336-1J), 256x4 VRAM(2101-1), RF video
- MM74C923N keyboard encoder, 20 buttons
- tape deck with microphone
- cassette deck with microphone
- 4-digit 7seg display
TODO:
- cassette data input doesn't work
- NMI is from the cassette deck, maybe for mixing microphone input?
- colors are estimated from photos (black and white are obvious, but the green
and cyan are not standard 0x00ff00 / 0x00ffff)
- video timing is unknown, sprite offsets are estimated from photos
- not sure about "Record" and "Reset" button labels, the rest is correct
******************************************************************************/
#include "emu.h"
#include "cpu/m6502/m6502.h"
#include "imagedev/cassette.h"
#include "machine/6522via.h"
#include "machine/mm74c922.h"
#include "machine/timer.h"
#include "sound/dac.h"
#include "sound/volt_reg.h"
#include "video/pwm.h"
@ -52,9 +60,12 @@ public:
m_vram(*this, "vram"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette")
m_palette(*this, "palette"),
m_cass(*this, "cassette")
{ }
DECLARE_INPUT_CHANGED_MEMBER(reset_button);
void intchess(machine_config &config);
protected:
@ -71,12 +82,12 @@ private:
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
required_device<cassette_image_device> m_cass;
// address maps
void main_map(address_map &map);
// I/O handlers
void vram_w(offs_t offset, u8 data);
void update_display();
void seg_w(u8 data);
void control_w(u8 data);
@ -84,6 +95,9 @@ private:
void init_palette(palette_device &palette) const;
u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void vram_w(offs_t offset, u8 data);
TIMER_DEVICE_CALLBACK_MEMBER(cass_input);
u8 m_select = 0;
u8 m_7seg_data = 0;
@ -96,6 +110,14 @@ void intchess_state::machine_start()
save_item(NAME(m_7seg_data));
}
INPUT_CHANGED_MEMBER(intchess_state::reset_button)
{
// assume that reset button is tied to 6502/6522
m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE);
if (newval)
m_via->reset();
}
/******************************************************************************
@ -154,35 +176,25 @@ void intchess_state::update_display()
void intchess_state::seg_w(u8 data)
{
//printf("a_%X ",data);
// PA1-PA7: 7seg data
// PA0: ?
m_7seg_data = bitswap<8>(~data,0,1,2,3,4,5,6,7);
update_display();
}
void intchess_state::control_w(u8 data)
{
//printf("b_%X ",data);
// PB0-PB3: digit select
m_select = data & 0xf;
update_display();
// PB5-PB7 to tape deck
// PB5-PB7 to cassette deck
// PB5: speaker
// PB6: ?
// PB7: output
m_dac->write(BIT(data, 5));
//printf("%d",data>>6&1);
// PB6: cassette input?
// PB7: cassette output
m_cass->output(BIT(data, 7) ? +1.0 : -1.0);
}
u8 intchess_state::control_r()
@ -191,6 +203,11 @@ u8 intchess_state::control_r()
return m_encoder->da_r() ? 0x10 : 0x00;
}
TIMER_DEVICE_CALLBACK_MEMBER(intchess_state::cass_input)
{
m_via->write_pb6((m_cass->input() > +0.04) ? 1 : 0);
}
/******************************************************************************
@ -209,42 +226,49 @@ void intchess_state::main_map(address_map &map)
/******************************************************************************
Input Ports
******************************************************************************/
static INPUT_PORTS_START( intchess )
PORT_START("X1")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_1) // a1
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_2) // e5
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_3) // level
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_4) // clear?
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_5) // flash
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("A 1 / Pawn")
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("E 5 / Queen")
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("Level")
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("Clear")
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_X) PORT_NAME("Flash")
PORT_START("X2")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) // b2
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_W) // f6
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_E) // newgame?
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_R) // enter
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_T) // zuruck
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("B 2 / Knight")
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("F 6 / King")
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_NAME("New Game")
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Enter")
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Take Back")
PORT_START("X3")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_A) // c3
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_S) // g7
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_D) // modus
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_F) // check?
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_G) // altern?
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("C 3 / Bishop")
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("G 7 / White")
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("Mode")
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("Find")
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("Next Best")
PORT_START("X4")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_Z) // d4
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_X) // h8
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_C) // speichern?
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_V) // setzen
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_B) // vor
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_D) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("D 4 / Rook")
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("H 8 / Black")
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_Z) PORT_NAME("Record")
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_U) PORT_NAME("Place")
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Step")
PORT_START("RESET")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_CHANGED_MEMBER(DEVICE_SELF, intchess_state, reset_button, 0) PORT_NAME("Reset")
INPUT_PORTS_END
/******************************************************************************
GFX Layouts
******************************************************************************/
static const gfx_layout layout_8x8 =
{
8,8,
@ -261,6 +285,7 @@ static GFXDECODE_START( gfx_intchess )
GFXDECODE_END
/******************************************************************************
Machine Configs
******************************************************************************/
@ -304,6 +329,12 @@ void intchess_state::intchess(machine_config &config)
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);
// cassette
CASSETTE(config, m_cass);
m_cass->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED);
m_cass->add_route(ALL_OUTPUTS, "speaker", 0.05);
TIMER(config, "cass_input").configure_periodic(FUNC(intchess_state::cass_input), attotime::from_usec(10));
}
@ -330,4 +361,4 @@ ROM_END
******************************************************************************/
// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
CONS( 1980, intchess, 0, 0, intchess, intchess, intchess_state, empty_init, "SciSys / Intelligent Games", "Intelligent Chess", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
CONS( 1980, intchess, 0, 0, intchess, intchess, intchess_state, empty_init, "SciSys / Intelligent Games", "Intelligent Chess", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_GRAPHICS )

View File

@ -6,25 +6,182 @@ license:CC0
<!-- define elements -->
<element name="black"><rect><color red="0" green="0" blue="0" /></rect></element>
<element name="white"><rect><color red="1" green="1" blue="1" /></rect></element>
<element name="whitea"><rect><color red="0.1" green="0.1" blue="0.1" /></rect></element>
<element name="whitem"><rect><color red="0.8" green="0.8" blue="0.8" /></rect></element>
<element name="orange"><rect><color red="0.8" green="0.5" blue="0.05" /></rect></element>
<element name="hl" defstate="0">
<text string=" "/>
<rect state="1"><color red="0.8" green="0.8" blue="0.8" /></rect>
</element>
<element name="digit" defstate="0">
<led7seg><color red="1.0" green="0.1" blue="0.15" /></led7seg>
</element>
<group name="panel">
<bounds x="0" y="0" width="40" height="15" />
<bezel name="digit0" element="digit"><bounds x="0" y="0" width="10" height="15" /></bezel>
<bezel name="digit1" element="digit"><bounds x="10" y="0" width="10" height="15" /></bezel>
<bezel name="digit2" element="digit"><bounds x="20" y="0" width="10" height="15" /></bezel>
<bezel name="digit3" element="digit"><bounds x="30" y="0" width="10" height="15" /></bezel>
</group>
<element name="text_1"><text string="1"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_2"><text string="2"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_3"><text string="3"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_4"><text string="4"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_5"><text string="5"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_6"><text string="6"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_7"><text string="7"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_8"><text string="8"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_a"><text string="A"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_b"><text string="B"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_c"><text string="C"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_d"><text string="D"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_e"><text string="E"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_f"><text string="F"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_g"><text string="G"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_h"><text string="H"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_l00"><text string="RESET"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_l02"><text string="LEVEL"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_l03"><text string="NEW GAME"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_l11"><text string="MODE"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_l12"><text string="CLEAR SQUARE"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_l13"><text string="CLEAR BOARD"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_l14"><text string="PLACE"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_l15"><text string="FIND"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_l16"><text string="NEXT BEST"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_l21"><text string="RECORD"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_l22"><text string="FLASH"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_l23"><text string="TAKE BACK"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_l24"><text string="STEP"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_l25"><text string="CLEAR"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_l26"><text string="ENTER"><color red="0.66" green="0.66" blue="0.66" /></text></element>
<element name="text_p1"><image file="chess/bp.png" /></element>
<element name="text_p2"><image file="chess/bn.png" /></element>
<element name="text_p3"><image file="chess/bb.png" /></element>
<element name="text_p4"><image file="chess/br.png" /></element>
<element name="text_p5"><image file="chess/bq.png" /></element>
<element name="text_p6"><image file="chess/bk.png" /></element>
<!-- build screen -->
<view name="Internal Layout">
<bounds left="0" right="40" top="0" bottom="40" />
<screen index="0"><bounds x="0" y="0" width="40" height="30" /></screen>
<group ref="panel"><bounds x="10" y="31" width="20" height="7.5" /></group>
<bounds left="-2" right="48" top="46.5" bottom="124" />
<screen index="0"><bounds x="-2" y="46.5" width="50" height="37.5" /></screen>
<bezel name="digit0" element="digit"><bounds x="15" y="88" width="4" height="6" /></bezel>
<bezel name="digit1" element="digit"><bounds x="19" y="88" width="4" height="6" /></bezel>
<bezel name="digit2" element="digit"><bounds x="23" y="88" width="4" height="6" /></bezel>
<bezel name="digit3" element="digit"><bounds x="27" y="88" width="4" height="6" /></bezel>
<!-- buttons -->
<element ref="orange"><bounds x="0" y="100" width="4" height="4" /></element>
<element ref="orange"><bounds x="6" y="100" width="4" height="4" /></element>
<element ref="orange"><bounds x="18" y="100" width="4" height="4" /></element>
<element ref="orange"><bounds x="24" y="100" width="4" height="4" /></element>
<element ref="orange"><bounds x="36" y="100" width="4" height="4" /></element>
<element ref="orange"><bounds x="42" y="100" width="4" height="4" /></element>
<element ref="orange"><bounds x="0" y="107" width="4" height="4" /></element>
<element ref="orange"><bounds x="6" y="107" width="4" height="4" /></element>
<element ref="orange"><bounds x="18" y="107" width="4" height="4" /></element>
<element ref="orange"><bounds x="24" y="107" width="4" height="4" /></element>
<element ref="orange"><bounds x="36" y="107" width="4" height="4" /></element>
<element ref="orange"><bounds x="42" y="107" width="4" height="4" /></element>
<element ref="white"><bounds x="0" y="117" width="4" height="4" /></element>
<element ref="white"><bounds x="6" y="117" width="4" height="4" /></element>
<element ref="white"><bounds x="12" y="117" width="4" height="4" /></element>
<element ref="white"><bounds x="18" y="117" width="4" height="4" /></element>
<element ref="white"><bounds x="24" y="117" width="4" height="4" /></element>
<element ref="white"><bounds x="30" y="117" width="4" height="4" /></element>
<element ref="white"><bounds x="36" y="117" width="4" height="4" /></element>
<element ref="white"><bounds x="42" y="117" width="4" height="4" /></element>
<element ref="text_p1"><bounds x="0.4" y="117.4" width="3.2" height="3.2" /></element>
<element ref="text_p2"><bounds x="6.4" y="117.4" width="3.2" height="3.2" /></element>
<element ref="text_p3"><bounds x="12.4" y="117.4" width="3.2" height="3.2" /></element>
<element ref="text_p4"><bounds x="18.4" y="117.4" width="3.2" height="3.2" /></element>
<element ref="text_p5"><bounds x="24.4" y="117.4" width="3.2" height="3.2" /></element>
<element ref="text_p6"><bounds x="30.4" y="117.4" width="3.2" height="3.2" /></element>
<element ref="black"><bounds x="36.8" y="117.8" width="2.4" height="2.4" /></element>
<element ref="white"><bounds x="37.2" y="118.2" width="1.6" height="1.6" /></element>
<element ref="black"><bounds x="42.8" y="117.8" width="2.4" height="2.4" /></element>
<element ref="whitea" blend="add"><bounds x="0" y="117" width="4" height="4" /></element>
<element ref="whitea" blend="add"><bounds x="6" y="117" width="4" height="4" /></element>
<element ref="whitea" blend="add"><bounds x="12" y="117" width="4" height="4" /></element>
<element ref="whitea" blend="add"><bounds x="18" y="117" width="4" height="4" /></element>
<element ref="whitea" blend="add"><bounds x="24" y="117" width="4" height="4" /></element>
<element ref="whitea" blend="add"><bounds x="30" y="117" width="4" height="4" /></element>
<element ref="whitea" blend="add"><bounds x="36" y="117" width="4" height="4" /></element>
<element ref="whitea" blend="add"><bounds x="42" y="117" width="4" height="4" /></element>
<element ref="whitem" blend="multiply"><bounds x="-1" y="116" width="50" height="6" /></element>
<element ref="hl" blend="multiply" inputtag="X3" inputmask="0x04"><bounds x="0" y="100" width="4" height="4" /></element>
<element ref="hl" blend="multiply" inputtag="X1" inputmask="0x04"><bounds x="6" y="100" width="4" height="4" /></element>
<element ref="hl" blend="multiply" inputtag="X2" inputmask="0x04"><bounds x="18" y="100" width="4" height="4" /></element>
<element ref="hl" blend="multiply" inputtag="X4" inputmask="0x08"><bounds x="24" y="100" width="4" height="4" /></element>
<element ref="hl" blend="multiply" inputtag="X3" inputmask="0x08"><bounds x="36" y="100" width="4" height="4" /></element>
<element ref="hl" blend="multiply" inputtag="X3" inputmask="0x10"><bounds x="42" y="100" width="4" height="4" /></element>
<element ref="hl" blend="multiply" inputtag="X4" inputmask="0x04"><bounds x="0" y="107" width="4" height="4" /></element>
<element ref="hl" blend="multiply" inputtag="X1" inputmask="0x10"><bounds x="6" y="107" width="4" height="4" /></element>
<element ref="hl" blend="multiply" inputtag="X2" inputmask="0x10"><bounds x="18" y="107" width="4" height="4" /></element>
<element ref="hl" blend="multiply" inputtag="X4" inputmask="0x10"><bounds x="24" y="107" width="4" height="4" /></element>
<element ref="hl" blend="multiply" inputtag="X1" inputmask="0x08"><bounds x="36" y="107" width="4" height="4" /></element>
<element ref="hl" blend="multiply" inputtag="X2" inputmask="0x08"><bounds x="42" y="107" width="4" height="4" /></element>
<element ref="hl" blend="multiply" inputtag="X1" inputmask="0x01"><bounds x="0" y="117" width="4" height="4" /></element>
<element ref="hl" blend="multiply" inputtag="X2" inputmask="0x01"><bounds x="6" y="117" width="4" height="4" /></element>
<element ref="hl" blend="multiply" inputtag="X3" inputmask="0x01"><bounds x="12" y="117" width="4" height="4" /></element>
<element ref="hl" blend="multiply" inputtag="X4" inputmask="0x01"><bounds x="18" y="117" width="4" height="4" /></element>
<element ref="hl" blend="multiply" inputtag="X1" inputmask="0x02"><bounds x="24" y="117" width="4" height="4" /></element>
<element ref="hl" blend="multiply" inputtag="X2" inputmask="0x02"><bounds x="30" y="117" width="4" height="4" /></element>
<element ref="hl" blend="multiply" inputtag="X3" inputmask="0x02"><bounds x="36" y="117" width="4" height="4" /></element>
<element ref="hl" blend="multiply" inputtag="X4" inputmask="0x02"><bounds x="42" y="117" width="4" height="4" /></element>
<element ref="whitem"><bounds x="42" y="90" width="4" height="4" /></element>
<element ref="hl" blend="multiply" inputtag="RESET" inputmask="0x01"><bounds x="42" y="90" width="4" height="4" /></element>
<!-- labels -->
<bezel element="text_a"><bounds x="0" y="114.5" width="4" height="1.9" /></bezel>
<bezel element="text_b"><bounds x="6" y="114.5" width="4" height="1.9" /></bezel>
<bezel element="text_c"><bounds x="12" y="114.5" width="4" height="1.9" /></bezel>
<bezel element="text_d"><bounds x="18" y="114.5" width="4" height="1.9" /></bezel>
<bezel element="text_e"><bounds x="24" y="114.5" width="4" height="1.9" /></bezel>
<bezel element="text_f"><bounds x="30" y="114.5" width="4" height="1.9" /></bezel>
<bezel element="text_g"><bounds x="36" y="114.5" width="4" height="1.9" /></bezel>
<bezel element="text_h"><bounds x="42" y="114.5" width="4" height="1.9" /></bezel>
<bezel element="text_1"><bounds x="0" y="121.4" width="4" height="1.9" /></bezel>
<bezel element="text_2"><bounds x="6" y="121.4" width="4" height="1.9" /></bezel>
<bezel element="text_3"><bounds x="12" y="121.4" width="4" height="1.9" /></bezel>
<bezel element="text_4"><bounds x="18" y="121.4" width="4" height="1.9" /></bezel>
<bezel element="text_5"><bounds x="24" y="121.4" width="4" height="1.9" /></bezel>
<bezel element="text_6"><bounds x="30" y="121.4" width="4" height="1.9" /></bezel>
<bezel element="text_7"><bounds x="36" y="121.4" width="4" height="1.9" /></bezel>
<bezel element="text_8"><bounds x="42" y="121.4" width="4" height="1.9" /></bezel>
<bezel element="text_l00"><bounds x="40" y="88.5" width="8" height="1.1" /></bezel>
<bezel element="text_l02"><bounds x="4" y="97.3" width="8" height="1.1" /></bezel>
<bezel element="text_l03"><bounds x="16" y="97.3" width="8" height="1.1" /></bezel>
<bezel element="text_l11"><bounds x="-2" y="98.5" width="8" height="1.1" /></bezel>
<bezel element="text_l12"><bounds x="4" y="98.5" width="8" height="1.1" /></bezel>
<bezel element="text_l13"><bounds x="16" y="98.5" width="8" height="1.1" /></bezel>
<bezel element="text_l14"><bounds x="22" y="98.5" width="8" height="1.1" /></bezel>
<bezel element="text_l15"><bounds x="34" y="98.5" width="8" height="1.1" /></bezel>
<bezel element="text_l16"><bounds x="40" y="98.5" width="8" height="1.1" /></bezel>
<bezel element="text_l21"><bounds x="-2" y="105.5" width="8" height="1.1" /></bezel>
<bezel element="text_l22"><bounds x="4" y="105.5" width="8" height="1.1" /></bezel>
<bezel element="text_l23"><bounds x="16" y="105.5" width="8" height="1.1" /></bezel>
<bezel element="text_l24"><bounds x="22" y="105.5" width="8" height="1.1" /></bezel>
<bezel element="text_l25"><bounds x="34" y="105.5" width="8" height="1.1" /></bezel>
<bezel element="text_l26"><bounds x="40" y="105.5" width="8" height="1.1" /></bezel>
</view>
</mamelayout>