New working clones

------------------
Mephisto Portorose 68030 [hap, anonymous]
Mephisto Lyon 68030 [hap, anonymous]
Mephisto TM Lyon [hap, anonymous]
Mephisto Vancouver 68030 [hap, anonymous]
Mephisto TM Vancouver [hap, anonymous]
Mephisto TM Berlin (prototype) [hap, anonymous]
Mephisto London 68030 [hap, anonymous]
Mephisto TM London [hap, anonymous]
This commit is contained in:
hap 2020-01-04 00:33:12 +01:00
parent 0dc4b6a7d4
commit b560193d56
15 changed files with 832 additions and 101 deletions

View File

@ -2375,6 +2375,7 @@ files {
MAME_DIR .. "src/mame/drivers/mephisto_mm2.cpp",
MAME_DIR .. "src/mame/drivers/mephisto_modena.cpp",
MAME_DIR .. "src/mame/drivers/mephisto_modular.cpp",
MAME_DIR .. "src/mame/drivers/mephisto_modular_tm.cpp",
MAME_DIR .. "src/mame/drivers/mephisto_mondial68k.cpp",
MAME_DIR .. "src/mame/drivers/mephisto_montec.cpp",
MAME_DIR .. "src/mame/drivers/mephisto_polgar.cpp",

View File

@ -6,7 +6,8 @@
TODO:
- dump internal CGROM
- emulate osc pin, determine video timings and busy flag duration from it
- emulate osc pin, determine video timings and busy flag duration from it,
and if possible, remove m_busy_factor
***************************************************************************/
@ -56,6 +57,7 @@ hd44780_device::hd44780_device(const machine_config &mconfig, const char *tag, d
hd44780_device::hd44780_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, type, tag, owner, clock)
, m_pixel_update_cb(*this)
, m_busy_factor(1.0)
, m_cgrom(nullptr)
, m_cgrom_region(*this, DEVICE_SELF)
, m_rs_input(0)
@ -102,6 +104,7 @@ void hd44780_device::device_start()
m_blink_timer->adjust(attotime::from_msec(409), 0, attotime::from_msec(409));
// state saving
save_item(NAME(m_busy_factor));
save_item(NAME(m_busy_flag));
save_item(NAME(m_ac));
save_item(NAME(m_dr));
@ -191,7 +194,9 @@ void hd44780_device::set_charset_type(int type)
void hd44780_device::set_busy_flag(uint16_t usec)
{
m_busy_flag = true;
m_busy_timer->adjust( attotime::from_usec( usec ) );
usec = float(usec) * m_busy_factor + 0.5;
m_busy_timer->adjust(attotime::from_usec(usec));
}
void hd44780_device::correct_ac()

View File

@ -32,6 +32,7 @@ public:
// static configuration helpers
void set_lcd_size(int lines, int chars) { m_lines = lines; m_chars = chars; }
template <typename... T> void set_pixel_update_cb(T &&... args) { m_pixel_update_cb.set(std::forward<T>(args)...); }
void set_busy_factor(float f) { m_busy_factor = f; } // it's a workaround for inaccurate busy flag emulation
// device interface
void write(offs_t offset, u8 data);
@ -103,6 +104,7 @@ private:
u8 m_chars; // chars for line
pixel_update_delegate m_pixel_update_cb; // pixel update callback
float m_busy_factor;
bool m_busy_flag; // busy flag
u8 m_ddram[0x80]; // internal display data RAM
u8 m_cgram[0x40]; // internal chargen RAM

View File

@ -2,7 +2,8 @@
// copyright-holders:Sandro Ronco
/******************************************************************************
Mephisto Berlin / Berlin Professional
Mephisto Berlin 68000 / Berlin Professional 68020
Berlin Professional has the same engine as Mephisto Genius.
TODO:
- does it have ROM waitstates like mephisto_modular?
@ -148,7 +149,9 @@ void berlin_state::berlinp(machine_config &config)
/* basic machine hardware */
M68EC020(config.replace(), m_maincpu, 24.576_MHz_XTAL); // M68EC020RP25
m_maincpu->set_addrmap(AS_PROGRAM, &berlin_state::berlinp_mem);
m_maincpu->set_periodic_int(FUNC(berlin_state::irq2_line_hold), attotime::from_hz(750));
const attotime irq_period = attotime::from_hz(24.576_MHz_XTAL / 0x8000); // 750Hz
m_maincpu->set_periodic_int(FUNC(berlin_state::irq2_line_hold), irq_period);
}
@ -159,26 +162,26 @@ void berlin_state::berlinp(machine_config &config)
ROM_START( berl16 )
ROM_REGION16_BE( 0x20000, "maincpu", 0 )
ROM_SYSTEM_BIOS( 0, "v003", "V0.03" )
ROM_SYSTEM_BIOS( 0, "v003", "V0.03" ) // B003 8C60 CA47
ROMX_LOAD("berlin_68000_even.bin", 0x00000, 0x10000, CRC(31337f15) SHA1(0dcacb153a6f8376e6f1c2f3e57e60aad4370740), ROM_SKIP(1) | ROM_BIOS(0) )
ROMX_LOAD("berlin_68000_odd_b003.bin", 0x00001, 0x10000, CRC(cc146819) SHA1(e4b2c6e496eff4a657a0718be292f563fb4e5688), ROM_SKIP(1) | ROM_BIOS(0) )
ROM_SYSTEM_BIOS( 1, "v002", "V0.02" )
ROM_SYSTEM_BIOS( 1, "v002", "V0.02" ) // B002 8C59 CA47
ROMX_LOAD("berlin_68000_even.bin", 0x00000, 0x10000, CRC(31337f15) SHA1(0dcacb153a6f8376e6f1c2f3e57e60aad4370740), ROM_SKIP(1) | ROM_BIOS(1) )
ROMX_LOAD("berlin_68000_odd_b002.bin", 0x00001, 0x10000, CRC(513a95f2) SHA1(cbaef0078a119163577e76a78b2110939b17be6b), ROM_SKIP(1) | ROM_BIOS(1) )
ROM_END
ROM_START( berlinp )
ROM_START( berlinp ) // B400 8AA1 E785
ROM_REGION32_BE( 0x40000, "maincpu", 0 )
ROM_LOAD("berlin_020_v400.u2", 0x00000, 0x40000, CRC(82fbaf6e) SHA1(729b7cef3dfaecc4594a6178fc4ba6015afa6202) )
ROM_END
ROM_START( berl16l )
ROM_START( berl16l ) // B500 ABD5 CA47
ROM_REGION16_BE( 0x20000, "maincpu", 0 )
ROM_LOAD16_BYTE("berlin_68000_london_even.bin", 0x00000, 0x10000, CRC(0ccddbc6) SHA1(90effdc9f2811a24d450b74ccfb24995ce896b86) )
ROM_LOAD16_BYTE("berlin_68000_london_odd.bin", 0x00001, 0x10000, CRC(5edac658) SHA1(18ebebc5ceffd9a01798d8a3709875120bd096f7) )
ROM_END
ROM_START( berlinpl )
ROM_START( berlinpl ) // B500 53CA 3DCE
ROM_REGION32_BE( 0x40000, "maincpu", 0 )
ROM_LOAD("berlin_020_london.u2", 0x00000, 0x40000, CRC(d75e170f) SHA1(ac0ebdaa114abd4fef87361a03df56928768b1ae) )
ROM_END

View File

@ -21,13 +21,14 @@ Genius 68030 33.3330MHz
The London program (1994 competition) is not a dedicated module, but an EPROM upgrade
released by Richard Lang for Almeria, Lyon, Portorose and Vancouver modules, and also
available as upgrades for Berlin/Berlin Pro and Genius.
No Mephisto modules were released anymore after Saitek took over H+G, engine is assumed
to be same as Saitek's 1996 Mephisto London 68030 (limited release TM version).
No Mephisto modules were released anymore after Saitek took over H+G, engine is the
same as Saitek's 1996 Mephisto London 68030 (limited release TM version).
For the dedicated tournament machines, see mephisto_modular_tm.cpp
TODO:
- add the missing very rare 'TM' Tournament Machines
- match I/S= diag speed test with real hardware (good test for proper waitstates)
- remove gen32/gen32l ROM patch, also related to waitstates
- match I/S= diag speed test with real hardware (good test for proper waitstates),
especially gen32 is way too fast when comparing sound pitch
Undocumented buttons:
- holding ENTER and LEFT cursor on boot runs diagnostics
@ -74,12 +75,8 @@ Reminder: unsupported on Almeria and Portorose 1.01, this is not a bug.
#include "machine/bankdev.h"
#include "machine/nvram.h"
#include "machine/timer.h"
#include "machine/sensorboard.h"
#include "machine/mmboard.h"
#include "screen.h"
#include "speaker.h"
// internal artwork
#include "mephisto_alm16.lh" // clickable
#include "mephisto_alm32.lh" // clickable
@ -95,7 +92,8 @@ public:
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_board(*this, "board"),
m_bav_busy(*this, "bav_busy")
m_bav_busy(*this, "bav_busy"),
m_fake(*this, "FAKE")
{ }
// machine configs
@ -107,8 +105,6 @@ public:
void van32(machine_config &config);
void gen32(machine_config &config);
void init_gen32();
DECLARE_INPUT_CHANGED_MEMBER(switch_sensor_type) { set_sbtype(newval); }
protected:
@ -120,6 +116,7 @@ private:
required_device<cpu_device> m_maincpu;
required_device<mephisto_board_device> m_board;
required_device<timer_device> m_bav_busy;
optional_ioport m_fake;
// address maps
void alm16_mem(address_map &map);
@ -144,22 +141,13 @@ private:
void mmodular_state::machine_start()
{
// register for savestates
save_item(NAME(m_bav_data));
}
void mmodular_state::machine_reset()
{
set_sbtype(ioport("FAKE")->read() & 1);
m_bav_data = 0;
}
void mmodular_state::init_gen32()
{
// patch LCD delay loop
uint8_t *rom = memregion("maincpu")->base();
if (rom[0x870] == 0x0c && rom[0x871] == 0x78)
rom[0x870] = 0x38;
set_sbtype(m_fake.read_safe(0) & 1);
}
@ -168,6 +156,25 @@ void mmodular_state::init_gen32()
I/O
******************************************************************************/
// Bavaria board
void mmodular_state::set_sbtype(ioport_value newval)
{
m_board->get()->set_type(newval ? sensorboard_device::INDUCTIVE : sensorboard_device::MAGNETS);
if (machine().phase() == machine_phase::RUNNING)
{
m_board->get()->cancel_hand();
m_board->get()->refresh();
}
}
u8 mmodular_state::spawn_cb(offs_t offset)
{
// ignore jokers
return (!m_board->get()->is_inductive() && offset > 12) ? 0 : offset;
}
WRITE8_MEMBER(mmodular_state::bavaria_w)
{
if (!m_board->get()->is_inductive())
@ -208,12 +215,6 @@ READ8_MEMBER(mmodular_state::bavaria2_r)
return m_bav_busy->enabled() ? 0x80 : 0;
}
u8 mmodular_state::spawn_cb(offs_t offset)
{
// ignore jokers
return (!m_board->get()->is_inductive() && offset > 12) ? 0 : offset;
}
/******************************************************************************
@ -255,7 +256,7 @@ void mmodular_state::van16_mem(address_map &map)
{
port16_mem(map);
map(0x000000, 0x03ffff).rom();
map(0x020000, 0x03ffff).rom();
}
@ -287,7 +288,7 @@ void mmodular_state::van32_mem(address_map &map)
{
port32_mem(map);
map(0x00000000, 0x0003ffff).rom();
map(0x00020000, 0x0003ffff).rom();
}
@ -297,7 +298,9 @@ void mmodular_state::gen32_mem(address_map &map)
map(0x40000000, 0x4007ffff).ram();
map(0x80000000, 0x8003ffff).ram();
map(0xc0000000, 0xc0000000).r("board", FUNC(mephisto_board_device::input_r));
map(0xc8000000, 0xc8000003).nopw();
map(0xc8000004, 0xc8000004).w("board", FUNC(mephisto_board_device::mux_w));
map(0xd0000000, 0xd0000003).nopw();
map(0xd0000004, 0xd0000004).w("board", FUNC(mephisto_board_device::led_w));
map(0xd8000004, 0xd8000004).r(FUNC(mmodular_state::bavaria1_r));
map(0xd8000008, 0xd8000008).w(FUNC(mmodular_state::bavaria_w));
@ -318,23 +321,11 @@ void mmodular_state::gen32_mem(address_map &map)
static INPUT_PORTS_START( bavaria )
PORT_START("FAKE")
PORT_CONFNAME( 0x01, 0x01, "Board Sensors" ) PORT_CHANGED_MEMBER(DEVICE_SELF, mmodular_state, switch_sensor_type, 0)
PORT_CONFSETTING( 0x01, "Magnets (Exclusive)" ) // or Muenchen/Modular
PORT_CONFSETTING( 0x00, "Induction (Bavaria)" )
PORT_CONFNAME( 0x01, 0x00, "Board Sensors" ) PORT_CHANGED_MEMBER(DEVICE_SELF, mmodular_state, switch_sensor_type, 0)
PORT_CONFSETTING( 0x00, "Magnets (Exclusive)" ) // or Muenchen/Modular
PORT_CONFSETTING( 0x01, "Induction (Bavaria)" )
INPUT_PORTS_END
void mmodular_state::set_sbtype(ioport_value newval)
{
m_board->get()->set_type(newval ? sensorboard_device::MAGNETS : sensorboard_device::INDUCTIVE);
if (machine().phase() == machine_phase::RUNNING)
{
m_board->get()->cancel_hand();
m_board->get()->refresh();
}
}
static INPUT_PORTS_START( gen32 )
PORT_INCLUDE( bavaria )
@ -351,9 +342,7 @@ static INPUT_PORTS_START( gen32 )
PORT_BIT(0x02000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RIGHT") PORT_CODE(KEYCODE_RIGHT)
INPUT_PORTS_END
static INPUT_PORTS_START( port16 )
PORT_INCLUDE( bavaria )
static INPUT_PORTS_START( alm16 )
PORT_START("KEY1")
PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LEFT") PORT_CODE(KEYCODE_LEFT)
PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ENT") PORT_CODE(KEYCODE_ENTER)
@ -367,9 +356,7 @@ static INPUT_PORTS_START( port16 )
PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL)
INPUT_PORTS_END
static INPUT_PORTS_START( port32 )
PORT_INCLUDE( bavaria )
static INPUT_PORTS_START( alm32 )
PORT_START("KEY1")
PORT_BIT(0x4000, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("RIGHT") PORT_CODE(KEYCODE_RIGHT)
PORT_BIT(0x8000, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL)
@ -383,18 +370,14 @@ static INPUT_PORTS_START( port32 )
PORT_BIT(0x8000, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("ENT") PORT_CODE(KEYCODE_ENTER)
INPUT_PORTS_END
static INPUT_PORTS_START( alm16 )
PORT_INCLUDE( port16 )
PORT_MODIFY("FAKE")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
static INPUT_PORTS_START( port16 )
PORT_INCLUDE( bavaria )
PORT_INCLUDE( alm16 )
INPUT_PORTS_END
static INPUT_PORTS_START( alm32 )
PORT_INCLUDE( port32 )
PORT_MODIFY("FAKE")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
static INPUT_PORTS_START( port32 )
PORT_INCLUDE( bavaria )
PORT_INCLUDE( alm32 )
INPUT_PORTS_END
@ -443,7 +426,7 @@ void mmodular_state::alm32(machine_config &config)
/* basic machine hardware */
M68020(config.replace(), m_maincpu, 12_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &mmodular_state::alm32_mem);
m_maincpu->set_periodic_int(FUNC(mmodular_state::irq6_line_hold), attotime::from_hz(750));
m_maincpu->set_periodic_int(FUNC(mmodular_state::irq2_line_hold), attotime::from_hz(750));
config.set_default_layout(layout_mephisto_alm32);
}
@ -471,6 +454,7 @@ void mmodular_state::gen32(machine_config &config)
const attotime irq_period = attotime::from_hz(6.144_MHz_XTAL / 0x4000); // through 4060, 375Hz
m_maincpu->set_periodic_int(FUNC(mmodular_state::irq2_line_hold), irq_period);
subdevice<hd44780_device>("display:hd44780")->set_busy_factor(0.25);
config.set_default_layout(layout_mephisto_gen32);
}
@ -480,18 +464,18 @@ void mmodular_state::gen32(machine_config &config)
ROM Definitions
******************************************************************************/
ROM_START( alm16 )
ROM_START( alm16 ) // U013 65CE 2FCE
ROM_REGION16_BE( 0x20000, "maincpu", 0 )
ROM_LOAD16_BYTE("alm16eve.bin", 0x00000, 0x10000, CRC(ee5b6ec4) SHA1(30920c1b9e16ffae576da5afa0b56da59ada3dbb) )
ROM_LOAD16_BYTE("alm16odd.bin", 0x00001, 0x10000, CRC(d0be4ee4) SHA1(d36c074802d2c9099cd44e75f9de3fc7d1fd9908) )
ROM_END
ROM_START( alm32 )
ROM_START( alm32 ) // U012 D21A 2FCE
ROM_REGION32_BE( 0x20000, "maincpu", 0 )
ROM_LOAD("alm32.bin", 0x00000, 0x20000, CRC(38f4b305) SHA1(43459a057ff29248c74d656a036ac325202b9c15) )
ROM_END
ROM_START( port16 )
ROM_START( port16 ) // V101 630D 1CD7
ROM_REGION16_BE( 0x20000, "maincpu", 0 )
ROM_LOAD16_BYTE("port16ev.bin", 0x00000, 0x10000, CRC(68e4a37d) SHA1(33e7216db664174a8448e455bba97738a29c0f31) )
ROM_LOAD16_BYTE("port16od.bin", 0x00001, 0x10000, CRC(cae77a05) SHA1(9a0ca8bb37325698f8d208f64a340690b9a933b5) )
@ -502,16 +486,16 @@ ROM_END
ROM_START( port32 )
ROM_REGION32_BE( 0x20000, "maincpu", 0 )
ROM_SYSTEM_BIOS( 0, "v103", "V1.03" )
ROM_SYSTEM_BIOS( 0, "v103", "V1.03" ) // V103 C734 1CD7
ROMX_LOAD("portorose_32bit_v103", 0x00000, 0x20000, CRC(02c091b3) SHA1(f1d48e73b24093288dbb8a06617bb62420c07508), ROM_BIOS(0) )
ROM_SYSTEM_BIOS( 1, "v101", "V1.01" )
ROM_SYSTEM_BIOS( 1, "v101", "V1.01" ) // V101 7805 1CD7
ROMX_LOAD("portorose_32bit_v101", 0x00000, 0x20000, CRC(405bd668) SHA1(8c6eacff7f6784fa1d38344d594c7e52ac828a23), ROM_BIOS(1) )
ROM_REGION( 0x8000, "bavaria", 0 )
ROM_LOAD( "sinus_15_bavaria", 0x0000, 0x8000, CRC(84421306) SHA1(5aab13bf38d80a4233c11f6eb5657f2749c14547) )
ROM_END
ROM_START( lyon16 )
ROM_START( lyon16 ) // V207 EC82 5805
ROM_REGION16_BE( 0x20000, "maincpu", 0 )
ROM_LOAD16_BYTE("lyon16ev.bin", 0x00000, 0x10000, CRC(497bd41a) SHA1(3ffefeeac694f49997c10d248ec6a7aa932898a4) )
ROM_LOAD16_BYTE("lyon16od.bin", 0x00001, 0x10000, CRC(f9de3f54) SHA1(4060e29566d2f40122ccde3c1f84c94a9c1ed54f) )
@ -520,7 +504,7 @@ ROM_START( lyon16 )
ROM_LOAD( "sinus_15_bavaria", 0x0000, 0x8000, CRC(84421306) SHA1(5aab13bf38d80a4233c11f6eb5657f2749c14547) )
ROM_END
ROM_START( lyon32 )
ROM_START( lyon32 ) // V207 AE64 5805
ROM_REGION32_BE( 0x20000, "maincpu", 0 )
ROM_LOAD("lyon32.bin", 0x00000, 0x20000, CRC(5c128b06) SHA1(954c8f0d3fae29900cb1e9c14a41a9a07a8e185f) )
@ -528,7 +512,7 @@ ROM_START( lyon32 )
ROM_LOAD( "sinus_15_bavaria", 0x0000, 0x8000, CRC(84421306) SHA1(5aab13bf38d80a4233c11f6eb5657f2749c14547) )
ROM_END
ROM_START( van16 )
ROM_START( van16 ) // V309 C8F3 18D3
ROM_REGION16_BE( 0x40000, "maincpu", 0 )
ROM_LOAD16_BYTE("va16even.bin", 0x00000, 0x20000, CRC(e87602d5) SHA1(90cb2767b4ae9e1b265951eb2569b9956b9f7f44) )
ROM_LOAD16_BYTE("va16odd.bin", 0x00001, 0x20000, CRC(585f3bdd) SHA1(90bb94a12d3153a91e3760020e1ea2a9eaa7ec0a) )
@ -537,7 +521,7 @@ ROM_START( van16 )
ROM_LOAD( "sinus_15_bavaria", 0x0000, 0x8000, CRC(84421306) SHA1(5aab13bf38d80a4233c11f6eb5657f2749c14547) )
ROM_END
ROM_START( van32 )
ROM_START( van32 ) // V309 3FD3 18D3
ROM_REGION32_BE( 0x40000, "maincpu", 0 )
ROM_LOAD("vanc32.bin", 0x00000, 0x40000, CRC(f872beb5) SHA1(9919f207264f74e2b634b723b048ae9ca2cefbc7) )
@ -547,16 +531,16 @@ ROM_END
ROM_START( gen32 )
ROM_REGION32_BE( 0x40000, "maincpu", 0 )
ROM_SYSTEM_BIOS( 0, "v401", "V4.01" )
ROM_SYSTEM_BIOS( 0, "v401", "V4.01" ) // V401 D1BB 5A88
ROMX_LOAD("gen32_41.bin", 0x00000, 0x40000, CRC(ea9938c0) SHA1(645cf0b5b831b48104ad6cec8d78c63dbb6a588c), ROM_BIOS(0) )
ROM_SYSTEM_BIOS( 1, "v400", "V4.00" )
ROM_SYSTEM_BIOS( 1, "v400", "V4.00" ) // V400 3B95 5A88
ROMX_LOAD("gen32_4.bin", 0x00000, 0x40000, CRC(6cc4da88) SHA1(ea72acf9c67ed17c6ac8de56a165784aa629c4a1), ROM_BIOS(1) )
ROM_REGION( 0x8000, "bavaria", 0 )
ROM_LOAD( "sinus_15_bavaria", 0x0000, 0x8000, CRC(84421306) SHA1(5aab13bf38d80a4233c11f6eb5657f2749c14547) )
ROM_END
ROM_START( gen32l )
ROM_START( gen32l ) // V500 EDC1 B0D1
ROM_REGION32_BE( 0x40000, "maincpu", 0 )
ROM_LOAD("gen32l.bin", 0x00000, 0x40000, CRC(853baa4e) SHA1(946951081d4e91e5bdd9e93d0769568a7fe79bad) )
@ -564,7 +548,7 @@ ROM_START( gen32l )
ROM_LOAD( "sinus_15_bavaria", 0x0000, 0x8000, CRC(84421306) SHA1(5aab13bf38d80a4233c11f6eb5657f2749c14547) )
ROM_END
ROM_START( lond16 )
ROM_START( lond16 ) // V500 5ED1 B0D1
ROM_REGION16_BE( 0x40000, "maincpu", 0 )
ROM_LOAD16_BYTE("london_program_68000_module_even", 0x00000, 0x20000, CRC(68cfc2de) SHA1(93b551180f01f8ed6991c082795cd9ead922179a) )
ROM_LOAD16_BYTE("london_program_68000_module_odd", 0x00001, 0x20000, CRC(2d75e2cf) SHA1(2ec9222c95f4be9667fb3b4be1b6f90fd4ad11c4) )
@ -573,7 +557,7 @@ ROM_START( lond16 )
ROM_LOAD( "sinus_15_bavaria", 0x0000, 0x8000, CRC(84421306) SHA1(5aab13bf38d80a4233c11f6eb5657f2749c14547) )
ROM_END
ROM_START( lond32 )
ROM_START( lond32 ) // V500 DF8B B0D1
ROM_REGION32_BE( 0x40000, "maincpu", 0 )
ROM_LOAD("london_program_68020_module", 0x00000, 0x40000, CRC(3225b8da) SHA1(fd8f6f4e9c03b6cdc86d8405e856c26041bfad12) )
@ -598,7 +582,7 @@ CONS( 1990, lyon32, 0, 0, port32, port32, mmodular_state, empty_ini
CONS( 1990, lyon16, lyon32, 0, port16, port16, mmodular_state, empty_init, "Hegener + Glaser", "Mephisto Lyon 16 Bit", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING | MACHINE_CLICKABLE_ARTWORK )
CONS( 1991, van32, 0, 0, van32, port32, mmodular_state, empty_init, "Hegener + Glaser", "Mephisto Vancouver 32 Bit", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING | MACHINE_CLICKABLE_ARTWORK )
CONS( 1991, van16, van32, 0, van16, port16, mmodular_state, empty_init, "Hegener + Glaser", "Mephisto Vancouver 16 Bit", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING | MACHINE_CLICKABLE_ARTWORK )
CONS( 1993, gen32, 0, 0, gen32, gen32, mmodular_state, init_gen32, "Hegener + Glaser", "Mephisto Genius 68030", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING | MACHINE_CLICKABLE_ARTWORK )
CONS( 1996, gen32l, gen32, 0, gen32, gen32, mmodular_state, init_gen32, "Richard Lang", "Mephisto Genius 68030 (London upgrade)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING | MACHINE_CLICKABLE_ARTWORK )
CONS( 1993, gen32, 0, 0, gen32, gen32, mmodular_state, empty_init, "Hegener + Glaser", "Mephisto Genius 68030", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING | MACHINE_CLICKABLE_ARTWORK )
CONS( 1996, gen32l, gen32, 0, gen32, gen32, mmodular_state, empty_init, "Richard Lang", "Mephisto Genius 68030 (London upgrade)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING | MACHINE_CLICKABLE_ARTWORK )
CONS( 1996, lond32, 0, 0, van32, port32, mmodular_state, empty_init, "Richard Lang", "Mephisto London 32 Bit", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING | MACHINE_CLICKABLE_ARTWORK ) // for alm32/port32/lyon32/van32
CONS( 1996, lond16, lond32, 0, van16, port16, mmodular_state, empty_init, "Richard Lang", "Mephisto London 16 Bit", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING | MACHINE_CLICKABLE_ARTWORK ) // for alm16/port16/lyon16/van16

View File

@ -0,0 +1,285 @@
// license:BSD-3-Clause
// copyright-holders:hap
/******************************************************************************
Mephisto Turniermaschinen (dedicated in-house chesscomputers used at tournaments),
and their limited-release home versions. These are mephisto_modular hardware
generation, see that driver for more information.
The Bavaria board does not work on these. Not only does it not have the connector
for it, but no software 'driver' either.
Mephisto TM Almeria is not on this hardware.
Mephisto Berlin 68030 is an unreleased dev version, an update to Vancouver,
not used in any tournament. Internal string and version matches Vancouver 68030,
but ROM has many differences.
Hardware notes:
V(Verkauf?) home version:
- 68030 @ 36MHz (not sure about type, big heatsink in the way)
- 256KB SRAM (8*TC55465P-25), 128KB or 256KB ROM
- 2MB DRAM (16*TC514256AP-70)
- 8KB battery-backed SRAM (TC5565PL-15)
- 8*8 LEDs, magnets chessboard
T(Turnier) tournament version: (differences)
- XC68030RC50B, CPU frequency tuned for tournament (see set_cpu_freq)
- 3 more 2MB DRAM rows
After boot, it copies ROM to RAM, probably to circumvent waitstates on slow ROM.
******************************************************************************/
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "machine/bankdev.h"
#include "machine/nvram.h"
#include "machine/timer.h"
#include "machine/mmboard.h"
// internal artwork
#include "mephisto_modular_tm.lh" // clickable
namespace {
class mmtm_state : public driver_device
{
public:
mmtm_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_rom(*this, "maincpu"),
m_mainram(*this, "mainram"),
m_disable_bootrom(*this, "disable_bootrom"),
m_fake(*this, "FAKE")
{ }
// machine drivers
void mmtm_v(machine_config &config);
void mmtm_t(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(cpu_freq) { set_cpu_freq(); }
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
private:
// devices/pointers
required_device<cpu_device> m_maincpu;
required_region_ptr<u32> m_rom;
required_shared_ptr<u32> m_mainram;
required_device<timer_device> m_disable_bootrom;
optional_ioport m_fake;
// address maps
void mmtm_2m_map(address_map &map);
void mmtm_8m_map(address_map &map);
void nvram_map(address_map &map);
bool m_bootrom_enabled;
TIMER_DEVICE_CALLBACK_MEMBER(disable_bootrom) { m_bootrom_enabled = false; }
DECLARE_READ32_MEMBER(bootrom_r) { return (m_bootrom_enabled) ? m_rom[offset] : m_mainram[offset]; }
void set_cpu_freq();
};
void mmtm_state::machine_start()
{
save_item(NAME(m_bootrom_enabled));
}
void mmtm_state::machine_reset()
{
set_cpu_freq();
// disable bootrom after reset
m_bootrom_enabled = true;
m_disable_bootrom->adjust(m_maincpu->cycles_to_attotime(50));
}
void mmtm_state::set_cpu_freq()
{
// "Mephisto X" were usually overclocked at tournaments
// rare versions sold to fans seen overclocked at 60MHz or 66MHz
// default frequency of TM version is 50MHz (also matches beeper pitch with V version)
ioport_value val = m_fake.read_safe(0);
static const XTAL xtal[] = { 36_MHz_XTAL, 50_MHz_XTAL, 60_MHz_XTAL, 66_MHz_XTAL };
m_maincpu->set_unscaled_clock(xtal[val]);
// lcd busy flag timing problem when overclocked
subdevice<hd44780_device>("display:hd44780")->set_busy_factor((val > 1) ? 0.75 : 1.0);
}
/******************************************************************************
Address Maps
******************************************************************************/
void mmtm_state::nvram_map(address_map &map)
{
// nvram is 8-bit (8KB) - this makes sure that endianness is correct
map(0x0000, 0x1fff).ram().share("nvram");
}
void mmtm_state::mmtm_2m_map(address_map &map)
{
map(0x00000000, 0x0003ffff).ram().share("mainram");
map(0x00000000, 0x0000000b).r(FUNC(mmtm_state::bootrom_r));
map(0x80000000, 0x801fffff).ram();
map(0xf0000000, 0xf003ffff).rom().region("maincpu", 0);
map(0xfc000000, 0xfc001fff).m("nvram_map", FUNC(address_map_bank_device::amap8));
map(0xfc020004, 0xfc020007).portr("KEY1");
map(0xfc020008, 0xfc02000b).portr("KEY2");
map(0xfc020010, 0xfc020013).portr("KEY3");
map(0xfc040000, 0xfc040000).w("display", FUNC(mephisto_display_modul_device::latch_w));
map(0xfc060000, 0xfc060000).w("display", FUNC(mephisto_display_modul_device::io_w));
map(0xfc080000, 0xfc080000).w("board", FUNC(mephisto_board_device::mux_w));
map(0xfc0a0000, 0xfc0a0000).w("board", FUNC(mephisto_board_device::led_w));
map(0xfc0c0000, 0xfc0c0000).r("board", FUNC(mephisto_board_device::input_r));
}
void mmtm_state::mmtm_8m_map(address_map &map)
{
mmtm_2m_map(map);
map(0x80200000, 0x803fffff).ram();
map(0x80400000, 0x805fffff).ram();
map(0x80600000, 0x807fffff).ram();
}
/******************************************************************************
Input Ports
******************************************************************************/
static INPUT_PORTS_START( mmtm_v )
PORT_START("KEY1")
PORT_BIT(0x01000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LEFT") PORT_CODE(KEYCODE_LEFT)
PORT_BIT(0x02000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ENT") PORT_CODE(KEYCODE_ENTER)
PORT_START("KEY2")
PORT_BIT(0x01000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RIGHT") PORT_CODE(KEYCODE_RIGHT)
PORT_BIT(0x02000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("UP") PORT_CODE(KEYCODE_UP)
PORT_START("KEY3")
PORT_BIT(0x01000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("DOWN") PORT_CODE(KEYCODE_DOWN)
PORT_BIT(0x02000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL)
INPUT_PORTS_END
static INPUT_PORTS_START( mmtm_t )
PORT_INCLUDE( mmtm_v )
PORT_START("FAKE")
PORT_CONFNAME( 0x03, 0x01, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, mmtm_state, cpu_freq, 0)
PORT_CONFSETTING( 0x01, "50MHz" )
PORT_CONFSETTING( 0x02, "60MHz" )
PORT_CONFSETTING( 0x03, "66MHz" )
INPUT_PORTS_END
/******************************************************************************
Machine Drivers
******************************************************************************/
void mmtm_state::mmtm_v(machine_config &config)
{
/* basic machine hardware */
M68030(config, m_maincpu, 36_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &mmtm_state::mmtm_2m_map);
const attotime irq_period = attotime::from_hz(12.288_MHz_XTAL / 0x8000); // through 4060, 375Hz
m_maincpu->set_periodic_int(FUNC(mmtm_state::irq2_line_hold), irq_period);
TIMER(config, "disable_bootrom").configure_generic(FUNC(mmtm_state::disable_bootrom));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
ADDRESS_MAP_BANK(config, "nvram_map").set_map(&mmtm_state::nvram_map).set_options(ENDIANNESS_BIG, 8, 13);
MEPHISTO_SENSORS_BOARD(config, "board");
MEPHISTO_DISPLAY_MODUL(config, "display");
config.set_default_layout(layout_mephisto_modular_tm);
}
void mmtm_state::mmtm_t(machine_config &config)
{
mmtm_v(config);
/* basic machine hardware */
m_maincpu->set_clock(50_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &mmtm_state::mmtm_8m_map);
}
/******************************************************************************
ROM Definitions
******************************************************************************/
ROM_START( port32t ) // V101 FA1D 1CD7
ROM_REGION32_BE( 0x40000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD("portorose_68030_tournament.bin", 0x00000, 0x20000, CRC(31f4c916) SHA1(d22572d224b7308d0d03617997a1ad90e63403c5) )
ROM_END
ROM_START( lyon32t ) // V207 6D28 5805
ROM_REGION32_BE( 0x40000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD("lyon_68030_tournament.bin", 0x00000, 0x20000, CRC(f07856af) SHA1(a1d5191a4ab4518f2df22f10e6e1305bea8afb37) )
ROM_END
ROM_START( lyon32t8 ) // T207 3C9F 5805
ROM_REGION32_BE( 0x40000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD("lyon_68030_tournament_8mb.bin", 0x00000, 0x20000, CRC(7b3e6db5) SHA1(28ce87c2d12d92e1a534aaa8dd5489fcf1b42964) )
ROM_END
ROM_START( van32t ) // V309 15C8 18D3
ROM_REGION32_BE( 0x40000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD("vancouver_68030_tournament.bin", 0x00000, 0x40000, CRC(7b25c9ec) SHA1(bf955b9521f52341754814a7c0bf5941989c8be6) )
ROM_END
ROM_START( van32t8 ) // T309 E04C 18D3
ROM_REGION32_BE( 0x40000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD("vancouver_68030_tournament_8mb.bin", 0x00000, 0x40000, CRC(d9f0190b) SHA1(7631d2499baad7b8075a1ca2c49f6544d7020c95) )
ROM_END
ROM_START( berl32t8p ) // T309 B138 C981
ROM_REGION32_BE( 0x40000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD("berlin_68030_tournament_8mb.bin", 0x00000, 0x40000, CRC(4fa6d99d) SHA1(4cda1ce11136e5055f5307f3de3a29b1d98d4f00) )
ROM_END
ROM_START( lond32t ) // V500 BAC6 B0D1
ROM_REGION32_BE( 0x40000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD("london_68030_tournament.bin", 0x00000, 0x40000, CRC(cc7a1a19) SHA1(860b84ac354280cec1cfcc36627e0a6e1d80c108) )
ROM_END
ROM_START( lond32t8 ) // T500 854A B0D1
ROM_REGION32_BE( 0x40000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD("london_68030_tournament_8mb.bin", 0x00000, 0x40000, CRC(1ef51242) SHA1(7d4ffec7d80789aaf0a9e796baa8dac7ef2c2f1b) )
ROM_END
} // anonymous namespace
/******************************************************************************
Drivers
******************************************************************************/
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
CONS( 1989, port32t, port32, 0, mmtm_v, mmtm_v, mmtm_state, empty_init, "Hegener + Glaser", "Mephisto Portorose 68030", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1990, lyon32t, lyon32, 0, mmtm_v, mmtm_v, mmtm_state, empty_init, "Hegener + Glaser", "Mephisto Lyon 68030", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1990, lyon32t8, lyon32, 0, mmtm_t, mmtm_t, mmtm_state, empty_init, "Hegener + Glaser", "Mephisto TM Lyon", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1991, van32t, van32, 0, mmtm_v, mmtm_v, mmtm_state, empty_init, "Hegener + Glaser", "Mephisto Vancouver 68030", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1991, van32t8, van32, 0, mmtm_t, mmtm_t, mmtm_state, empty_init, "Hegener + Glaser", "Mephisto TM Vancouver", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1991, berl32t8p, van32, 0, mmtm_t, mmtm_t, mmtm_state, empty_init, "Hegener + Glaser", "Mephisto TM Berlin (prototype)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1996, lond32t, lond32, 0, mmtm_v, mmtm_v, mmtm_state, empty_init, "Saitek", "Mephisto London 68030", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // after Saitek took over H+G
CONS( 1996, lond32t8, lond32, 0, mmtm_t, mmtm_t, mmtm_state, empty_init, "Saitek", "Mephisto TM London", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // "

View File

@ -49,6 +49,7 @@ public:
protected:
virtual void machine_start() override;
private:
// devices/pointers
required_device<hd6303y_cpu_device> m_maincpu;
required_device<sensorboard_device> m_board;

View File

@ -226,8 +226,8 @@
<!-- sb ui -->
<element name="wmask1" defstate="0">
<rect state="1"><color red="0.84" green="0.75" blue="0.50" /></rect>
<element name="wmask1" defstate="1">
<rect state="0"><color red="0.84" green="0.75" blue="0.50" /></rect>
</element>
<element name="wmask2">
<rect><color red="1" green="1" blue="1" /></rect>
@ -238,8 +238,8 @@
</element>
<element name="text_uit1" defstate="0">
<text string="SB.BAVARIA" state="0"><color red="0.81" green="0.8" blue="0.79" /></text>
<text string="SB.MAGNETS" state="1"><color red="0.81" green="0.8" blue="0.79" /></text>
<text string="SB.MAGNETS" state="0"><color red="0.81" green="0.8" blue="0.79" /></text>
<text string="SB.BAVARIA" state="1"><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>

View File

@ -226,8 +226,8 @@
<!-- sb ui -->
<element name="wmask1" defstate="0">
<rect state="1"><color red="0.84" green="0.75" blue="0.50" /></rect>
<element name="wmask1" defstate="1">
<rect state="0"><color red="0.84" green="0.75" blue="0.50" /></rect>
</element>
<element name="wmask2">
<rect><color red="1" green="1" blue="1" /></rect>
@ -238,8 +238,8 @@
</element>
<element name="text_uit1" defstate="0">
<text string="SB.BAVARIA" state="0"><color red="0.81" green="0.8" blue="0.79" /></text>
<text string="SB.MAGNETS" state="1"><color red="0.81" green="0.8" blue="0.79" /></text>
<text string="SB.MAGNETS" state="0"><color red="0.81" green="0.8" blue="0.79" /></text>
<text string="SB.BAVARIA" state="1"><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>

View File

@ -226,8 +226,8 @@
<!-- sb ui -->
<element name="wmask1" defstate="0">
<rect state="1"><color red="0.84" green="0.75" blue="0.50" /></rect>
<element name="wmask1" defstate="1">
<rect state="0"><color red="0.84" green="0.75" blue="0.50" /></rect>
</element>
<element name="wmask2">
<rect><color red="1" green="1" blue="1" /></rect>
@ -238,8 +238,8 @@
</element>
<element name="text_uit1" defstate="0">
<text string="SB.BAVARIA" state="0"><color red="0.81" green="0.8" blue="0.79" /></text>
<text string="SB.MAGNETS" state="1"><color red="0.81" green="0.8" blue="0.79" /></text>
<text string="SB.MAGNETS" state="0"><color red="0.81" green="0.8" blue="0.79" /></text>
<text string="SB.BAVARIA" state="1"><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>

View File

@ -0,0 +1,435 @@
<?xml version="1.0"?>
<mamelayout version="2">
<!-- define elements -->
<element name="led" defstate="0">
<disk state="0">
<color red="0.20" green="0.0" blue="0.0" />
</disk>
<disk state="1">
<color red="0.95" green="0.0" blue="0.0" />
</disk>
</element>
<element name="text_1"> <rect><color red="0.56" green="0.33" blue="0.12" /></rect> <text string="1"><color red="0.87" green="0.87" blue="0.84" /></text> </element>
<element name="text_2"> <rect><color red="0.56" green="0.33" blue="0.12" /></rect> <text string="2"><color red="0.87" green="0.87" blue="0.84" /></text> </element>
<element name="text_3"> <rect><color red="0.56" green="0.33" blue="0.12" /></rect> <text string="3"><color red="0.87" green="0.87" blue="0.84" /></text> </element>
<element name="text_4"> <rect><color red="0.56" green="0.33" blue="0.12" /></rect> <text string="4"><color red="0.87" green="0.87" blue="0.84" /></text> </element>
<element name="text_5"> <rect><color red="0.56" green="0.33" blue="0.12" /></rect> <text string="5"><color red="0.87" green="0.87" blue="0.84" /></text> </element>
<element name="text_6"> <rect><color red="0.56" green="0.33" blue="0.12" /></rect> <text string="6"><color red="0.87" green="0.87" blue="0.84" /></text> </element>
<element name="text_7"> <rect><color red="0.56" green="0.33" blue="0.12" /></rect> <text string="7"><color red="0.87" green="0.87" blue="0.84" /></text> </element>
<element name="text_8"> <rect><color red="0.56" green="0.33" blue="0.12" /></rect> <text string="8"><color red="0.87" green="0.87" blue="0.84" /></text> </element>
<element name="text_a"> <rect><color red="0.56" green="0.33" blue="0.12" /></rect> <text string="A"><color red="0.87" green="0.87" blue="0.84" /></text> </element>
<element name="text_b"> <rect><color red="0.56" green="0.33" blue="0.12" /></rect> <text string="B"><color red="0.87" green="0.87" blue="0.84" /></text> </element>
<element name="text_c"> <rect><color red="0.56" green="0.33" blue="0.12" /></rect> <text string="C"><color red="0.87" green="0.87" blue="0.84" /></text> </element>
<element name="text_d"> <rect><color red="0.56" green="0.33" blue="0.12" /></rect> <text string="D"><color red="0.87" green="0.87" blue="0.84" /></text> </element>
<element name="text_e"> <rect><color red="0.56" green="0.33" blue="0.12" /></rect> <text string="E"><color red="0.87" green="0.87" blue="0.84" /></text> </element>
<element name="text_f"> <rect><color red="0.56" green="0.33" blue="0.12" /></rect> <text string="F"><color red="0.87" green="0.87" blue="0.84" /></text> </element>
<element name="text_g"> <rect><color red="0.56" green="0.33" blue="0.12" /></rect> <text string="G"><color red="0.87" green="0.87" blue="0.84" /></text> </element>
<element name="text_h"> <rect><color red="0.56" green="0.33" blue="0.12" /></rect> <text string="H"><color red="0.87" green="0.87" blue="0.84" /></text> </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>
<!-- sb board -->
<element name="cblack"><rect><color red="0.56" green="0.33" blue="0.12" /></rect></element>
<element name="cwhite"><rect><color red="0.84" green="0.75" blue="0.50" /></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>
<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>
<!-- chessboard leds -->
<repeat count="8">
<param name="x" start="8.2" increment="10" />
<param name="la" start="0" increment="1" />
<param name="lb" start="8" increment="1" />
<param name="lc" start="16" increment="1" />
<param name="ld" start="24" increment="1" />
<param name="le" start="32" increment="1" />
<param name="lf" start="40" increment="1" />
<param name="lg" start="48" increment="1" />
<param name="lh" start="56" increment="1" />
<bezel name="led~la~" element="led"><bounds x="~x~" y="78.3" width="1.5" height="1.5" /></bezel>
<bezel name="led~lb~" element="led"><bounds x="~x~" y="68.3" width="1.5" height="1.5" /></bezel>
<bezel name="led~lc~" element="led"><bounds x="~x~" y="58.3" width="1.5" height="1.5" /></bezel>
<bezel name="led~ld~" element="led"><bounds x="~x~" y="48.3" width="1.5" height="1.5" /></bezel>
<bezel name="led~le~" element="led"><bounds x="~x~" y="38.3" width="1.5" height="1.5" /></bezel>
<bezel name="led~lf~" element="led"><bounds x="~x~" y="28.3" width="1.5" height="1.5" /></bezel>
<bezel name="led~lg~" element="led"><bounds x="~x~" y="18.3" width="1.5" height="1.5" /></bezel>
<bezel name="led~lh~" element="led"><bounds x="~x~" y="8.3" width="1.5" height="1.5" /></bezel>
</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:board:RANK.~i~" inputmask="0x01"><bounds x="0" y="~y~" width="10" height="10" /><color alpha="0.04" /></bezel>
<bezel element="hlbb" inputtag="board:board:RANK.~i~" inputmask="0x02"><bounds x="10" y="~y~" width="10" height="10" /><color alpha="0.04" /></bezel>
<bezel element="hlbb" inputtag="board:board:RANK.~i~" inputmask="0x04"><bounds x="20" y="~y~" width="10" height="10" /><color alpha="0.04" /></bezel>
<bezel element="hlbb" inputtag="board:board:RANK.~i~" inputmask="0x08"><bounds x="30" y="~y~" width="10" height="10" /><color alpha="0.04" /></bezel>
<bezel element="hlbb" inputtag="board:board:RANK.~i~" inputmask="0x10"><bounds x="40" y="~y~" width="10" height="10" /><color alpha="0.04" /></bezel>
<bezel element="hlbb" inputtag="board:board:RANK.~i~" inputmask="0x20"><bounds x="50" y="~y~" width="10" height="10" /><color alpha="0.04" /></bezel>
<bezel element="hlbb" inputtag="board:board:RANK.~i~" inputmask="0x40"><bounds x="60" y="~y~" width="10" height="10" /><color alpha="0.04" /></bezel>
<bezel element="hlbb" inputtag="board: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.84" green="0.75" blue="0.50" /></rect>
<text string="RESET"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_uib3">
<rect><color red="0.84" green="0.75" blue="0.50" /></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.84" green="0.75" blue="0.50" /></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.84" green="0.75" blue="0.50" /></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.84" green="0.75" blue="0.50" /></rect>
<text string=" &lt; "><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_uiu2c">
<rect><color red="0.84" green="0.75" blue="0.50" /></rect>
<text string=" &gt;"><color red="0.01" green="0.01" blue="0.01" /></text>
</element>
<element name="text_uiu2d">
<rect><color red="0.84" green="0.75" blue="0.50" /></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: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: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:board:SPAWN" inputmask="0x0001"><bounds x="1" y="23" width="4" height="4" /><color alpha="0.25" /></bezel>
<bezel element="hlub" inputtag="board:board:SPAWN" inputmask="0x0002"><bounds x="1" y="27" width="4" height="4" /><color alpha="0.25" /></bezel>
<bezel element="hlub" inputtag="board:board:SPAWN" inputmask="0x0004"><bounds x="1" y="31" width="4" height="4" /><color alpha="0.25" /></bezel>
<bezel element="hlub" inputtag="board:board:SPAWN" inputmask="0x0008"><bounds x="5" y="23" width="4" height="4" /><color alpha="0.25" /></bezel>
<bezel element="hlub" inputtag="board:board:SPAWN" inputmask="0x0010"><bounds x="5" y="27" width="4" height="4" /><color alpha="0.25" /></bezel>
<bezel element="hlub" inputtag="board:board:SPAWN" inputmask="0x0020"><bounds x="5" y="31" width="4" height="4" /><color alpha="0.25" /></bezel>
<bezel element="hlub" inputtag="board:board:SPAWN" inputmask="0x0040"><bounds x="1" y="36" width="4" height="4" /><color alpha="0.25" /></bezel>
<bezel element="hlub" inputtag="board:board:SPAWN" inputmask="0x0080"><bounds x="1" y="40" width="4" height="4" /><color alpha="0.25" /></bezel>
<bezel element="hlub" inputtag="board:board:SPAWN" inputmask="0x0100"><bounds x="1" y="44" width="4" height="4" /><color alpha="0.25" /></bezel>
<bezel element="hlub" inputtag="board:board:SPAWN" inputmask="0x0200"><bounds x="5" y="36" width="4" height="4" /><color alpha="0.25" /></bezel>
<bezel element="hlub" inputtag="board:board:SPAWN" inputmask="0x0400"><bounds x="5" y="40" width="4" height="4" /><color alpha="0.25" /></bezel>
<bezel element="hlub" inputtag="board: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: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: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: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: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: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 -->
<element name="text_lcd"><text string="GRAPHIC DISPLAY MODUL"><color red="0.64" green="0.59" blue="0.30" /></text></element>
<element name="static_lcd"><rect><color red="0.5412" green="0.57255" blue="0.5804" /></rect></element>
<group name="panel">
<element ref="static_lcd"><bounds x="0" y="0" width="24.5" height="6.5" /></element>
<screen index="0" blend="alpha"><bounds x="0.25" y="1" width="24" height="4.5" /></screen>
</group>
<!-- Buttons -->
<element name="gray"> <rect><color red="0.25" green="0.25" blue="0.25" /></rect></element>
<element name="green"><rect><color red="0" green="0.5" blue="0.25" /></rect></element>
<element name="red"> <rect><color red="0.75" green="0.15" blue="0.15" /></rect></element>
<element name="text_ent"><rect><color red="0" green="0.5" blue="0.25" /></rect> <text string="ENT"> <color red="1" green="1" blue="1" /></text> </element>
<element name="text_cl"> <rect><color red="0.75" green="0.15" blue="0.15" /></rect><text string="CL"> <color red="1" green="1" blue="1" /></text> </element>
<element name="text_left"> <rect><color red="0.25" green="0.25" blue="0.25" /></rect><text string="&#x2190;"> <color red="1" green="1" blue="1" /></text> </element>
<element name="text_up"> <rect><color red="0.25" green="0.25" blue="0.25" /></rect><text string="&#x2191;"> <color red="1" green="1" blue="1" /></text> </element>
<element name="text_right"><rect><color red="0.25" green="0.25" blue="0.25" /></rect><text string="&#x2192;"> <color red="1" green="1" blue="1" /></text> </element>
<element name="text_down"> <rect><color red="0.25" green="0.25" blue="0.25" /></rect><text string="&#x2193;"> <color red="1" green="1" blue="1" /></text> </element>
<element name="keys" defstate="0">
<rect state="1"><color red="0.0" green="0.0" blue="0.0" /></rect>
</element>
<group name="buttons">
<bounds x="76" y="89.5" width="17" height="17" />
<bezel element="green"><bounds x="76" y="89.5" width="5" height="5" /></bezel>
<bezel element="gray"> <bounds x="82" y="89.5" width="5" height="5" /></bezel>
<bezel element="red"> <bounds x="88" y="89.5" width="5" height="5" /></bezel>
<bezel element="gray"> <bounds x="76" y="95.5" width="5" height="5" /></bezel>
<bezel element="gray"> <bounds x="88" y="95.5" width="5" height="5" /></bezel>
<bezel element="gray"> <bounds x="82" y="101.5" width="5" height="5" /></bezel>
<bezel element="text_ent"> <bounds x="76" y="90.7" width="5" height="2.6" /></bezel>
<bezel element="text_up"> <bounds x="82.5" y="90" width="4" height="4" /></bezel>
<bezel element="text_cl"> <bounds x="88" y="90.7" width="5" height="2.6" /></bezel>
<bezel element="text_left"> <bounds x="76.5" y="96" width="4" height="4" /></bezel>
<bezel element="text_right"><bounds x="88.5" y="96" width="4" height="4" /></bezel>
<bezel element="text_down"> <bounds x="82.5" y="102" width="4" height="4" /></bezel>
<bezel element="keys" inputtag="KEY1" inputmask="0x02000000"> <!-- ENT -->
<bounds x="76" y="89.5" width="5" height="5" /><color alpha="0.25" />
</bezel>
<bezel element="keys" inputtag="KEY2" inputmask="0x02000000"> <!-- Up -->
<bounds x="82" y="89.5" width="5" height="5" /><color alpha="0.25" />
</bezel>
<bezel element="keys" inputtag="KEY3" inputmask="0x02000000"> <!-- CL -->
<bounds x="88" y="89.5" width="5" height="5" /><color alpha="0.25" />
</bezel>
<bezel element="keys" inputtag="KEY1" inputmask="0x01000000"> <!-- Left -->
<bounds x="76" y="95.5" width="5" height="5" /><color alpha="0.25" />
</bezel>
<bezel element="keys" inputtag="KEY2" inputmask="0x01000000"> <!-- Right -->
<bounds x="88" y="95.5" width="5" height="5" /><color alpha="0.25" />
</bezel>
<bezel element="keys" inputtag="KEY3" inputmask="0x01000000"> <!-- Down -->
<bounds x="82" y="101.5" width="5" height="5" /><color alpha="0.25" />
</bezel>
</group>
<!-- build screen -->
<view name="Internal Layout">
<bounds left="0" right="102" top="-2" bottom="103" />
<bezel element="cblack"><bounds x="13" y="-2" width="89" height="89" /></bezel>
<bezel element="cwhite"><bounds x="17" y="2" width="81" height="81" /></bezel>
<bezel element="text_lcd"><bounds x="47.5" y="89" width="24.5" height="2" /></bezel>
<group ref="panel"><bounds x="47.5" y="91.8" width="24.5" height="6.5" /></group>
<group ref="buttons"><bounds x="77.5" y="88.5" width="13" height="13" /></group>
<group ref="sb_board"><bounds x="17.5" y="2.5" width="80" height="80" /></group>
<group ref="sb_ui"><bounds x="1.5" y="3" width="10" height="80" /></group>
<!-- chessboard coords -->
<bezel element="text_8"><bounds x="14.2" y="6.5" width="2" height="2" /></bezel>
<bezel element="text_7"><bounds x="14.2" y="16.5" width="2" height="2" /></bezel>
<bezel element="text_6"><bounds x="14.2" y="26.5" width="2" height="2" /></bezel>
<bezel element="text_5"><bounds x="14.2" y="36.5" width="2" height="2" /></bezel>
<bezel element="text_4"><bounds x="14.2" y="46.5" width="2" height="2" /></bezel>
<bezel element="text_3"><bounds x="14.2" y="56.5" width="2" height="2" /></bezel>
<bezel element="text_2"><bounds x="14.2" y="66.5" width="2" height="2" /></bezel>
<bezel element="text_1"><bounds x="14.2" y="76.5" width="2" height="2" /></bezel>
<bezel element="text_a"><bounds x="21.5" y="84" width="2" height="2" /></bezel>
<bezel element="text_b"><bounds x="31.5" y="84" width="2" height="2" /></bezel>
<bezel element="text_c"><bounds x="41.5" y="84" width="2" height="2" /></bezel>
<bezel element="text_d"><bounds x="51.5" y="84" width="2" height="2" /></bezel>
<bezel element="text_e"><bounds x="61.5" y="84" width="2" height="2" /></bezel>
<bezel element="text_f"><bounds x="71.5" y="84" width="2" height="2" /></bezel>
<bezel element="text_g"><bounds x="81.5" y="84" width="2" height="2" /></bezel>
<bezel element="text_h"><bounds x="91.5" y="84" width="2" height="2" /></bezel>
</view>
</mamelayout>

View File

@ -114,6 +114,7 @@ void mephisto_board_device::device_reset()
{
m_mux = 0x00;
m_led_data = 0x00;
update_led_pwm();
}
WRITE8_MEMBER( mephisto_board_device::refresh_leds_w )
@ -141,13 +142,13 @@ READ8_MEMBER( mephisto_board_device::mux_r )
WRITE8_MEMBER( mephisto_board_device::mux_w )
{
m_mux = data;
m_led_pwm->matrix(~m_mux, m_led_data);
update_led_pwm();
}
WRITE8_MEMBER( mephisto_board_device::led_w )
{
m_led_data = data;
m_led_pwm->matrix(~m_mux, m_led_data);
update_led_pwm();
}

View File

@ -52,6 +52,7 @@ protected:
void set_config(machine_config &config, sensorboard_device::sb_type board_type);
DECLARE_WRITE8_MEMBER(refresh_leds_w);
void update_led_pwm() { m_led_pwm->matrix(~m_mux, m_led_data); }
required_device<sensorboard_device> m_board;
required_device<pwm_display_device> m_led_pwm;
@ -98,6 +99,8 @@ public:
// construction/destruction
mephisto_display_modul_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
hd44780_device *get() { return m_lcdc; }
DECLARE_WRITE8_MEMBER(latch_w);
DECLARE_WRITE8_MEMBER(io_w);

View File

@ -21883,6 +21883,16 @@ gen32l // 1996 Mephisto Genius 68030 London Upgrade
lond16 // 1996 Mephisto London 16 Bit
lond32 // 1996 Mephisto London 32 Bit
@source:mephisto_modular_tm.cpp
port32t
lyon32t
lyon32t8
van32t
van32t8
berl32t8p
lond32t
lond32t8
@source:mephisto_mondial68k.cpp
mondl68k // 1988 Mephisto Mondial 68000XL

View File

@ -494,6 +494,7 @@ mephisto_mm1.cpp
mephisto_mm2.cpp
mephisto_modena.cpp
mephisto_modular.cpp
mephisto_modular_tm.cpp
mephisto_mondial68k.cpp
mephisto_montec.cpp
mephisto_polgar.cpp