Moved Saitek RISC 2500 into a separate driver and added internal layout and inputs.

This commit is contained in:
Sandro Ronco 2016-10-28 21:38:26 +02:00
parent 6184bba010
commit 1746a9f058
4 changed files with 850 additions and 46 deletions

View File

@ -1948,6 +1948,7 @@ files {
MAME_DIR .. "src/mame/drivers/glasgow.cpp",
MAME_DIR .. "src/mame/drivers/mephisto.cpp",
MAME_DIR .. "src/mame/drivers/mmodular.cpp",
MAME_DIR .. "src/mame/drivers/risc2500.cpp",
MAME_DIR .. "src/mame/drivers/stratos.cpp",
}

View File

@ -24,7 +24,6 @@
misc non-modular/non-68K boards
RISC 2500 (Skeleton, does not work, and not sure the same internal chessboard connections are used)
Academy 65C02 4.9152mhz
Monte Carlo IV, Mega IV and any others not listed above have correct ROM/RAM and maybe LCD, not much else for now
@ -81,7 +80,6 @@ Bit 5+6 LED 1-8 enable
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m6502/m65c02.h"
#include "cpu/arm/arm.h"
#include "sound/beep.h"
//#include "machine/mos6551.h"
#include "video/hd44780.h"
@ -180,8 +178,6 @@ public:
DECLARE_WRITE16_MEMBER(write_unknown2);
DECLARE_READ32_MEMBER(read_unknown3_32);
DECLARE_READ16_MEMBER(read_unknown3);
DECLARE_READ32_MEMBER(read_1800000);
DECLARE_WRITE32_MEMBER(write_1000000);
DECLARE_DRIVER_INIT(polgar);
DECLARE_MACHINE_START(polgar);
DECLARE_MACHINE_RESET(polgar);
@ -192,7 +188,6 @@ public:
DECLARE_MACHINE_RESET(monteciv);
DECLARE_MACHINE_START(diablo68);
DECLARE_MACHINE_START(van16);
DECLARE_MACHINE_START(risc);
DECLARE_MACHINE_RESET(academy);
DECLARE_PALETTE_INIT(chess_lcd);
TIMER_DEVICE_CALLBACK_MEMBER(cause_nmi);
@ -957,16 +952,6 @@ READ16_MEMBER(polgar_state::read_unknown3)
}
READ32_MEMBER(polgar_state::read_1800000)
{
logerror("Read from RISC2500 1800000\n");
return 0;
}
WRITE32_MEMBER(polgar_state::write_1000000)
{
logerror("Write to RISC2500 1000000\n");
}
TIMER_DEVICE_CALLBACK_MEMBER(polgar_state::timer_update_irq6)
{
@ -1000,11 +985,6 @@ MACHINE_START_MEMBER(polgar_state,van32)
}
MACHINE_START_MEMBER(polgar_state,risc)
{
}
void polgar_state::common_chess_start()
{
}
@ -1179,14 +1159,6 @@ static ADDRESS_MAP_START(alm32_mem, AS_PROGRAM, 32, polgar_state )
ADDRESS_MAP_END
static ADDRESS_MAP_START(risc_mem, AS_PROGRAM, 32, polgar_state )
AM_RANGE( 0x02000000, 0x0201ffff ) AM_ROM AM_REGION("maincpu", 0) // AM_MIRROR(0x2000000)
AM_RANGE( 0x01000000, 0x01000003 ) AM_WRITE(write_1000000 )
AM_RANGE( 0x01800000, 0x01800003 ) AM_READ(read_1800000 )
AM_RANGE( 0x00000000, 0x0001ffff ) AM_RAM
ADDRESS_MAP_END
static ADDRESS_MAP_START(van16_mem, AS_PROGRAM, 16, polgar_state )
@ -1639,18 +1611,6 @@ static MACHINE_CONFIG_START( van32, polgar_state )
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( risc, polgar_state )
MCFG_CPU_ADD("maincpu", ARM, 14000000)
MCFG_CPU_PROGRAM_MAP(risc_mem)
MCFG_MACHINE_START_OVERRIDE(polgar_state,risc)
MCFG_MACHINE_RESET_OVERRIDE(polgar_state,van16)
//MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", polgar_state, mboard_update_artwork, attotime::from_hz(120))
MCFG_FRAGMENT_ADD( chess_common )
// MCFG_NVRAM_ADD_0FILL("nvram")
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( gen32, polgar_state )
MCFG_CPU_ADD("maincpu", M68030, XTAL_33_333MHz)
MCFG_CPU_PROGRAM_MAP(gen32_mem)
@ -1799,11 +1759,6 @@ ROM_START( van32 )
ROM_END
ROM_START( risc )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD("s2500.bin", 0x000000, 0x20000, CRC(7a707e82) SHA1(87187fa58117a442f3abd30092cfcc2a4d7c7efc))
ROM_END
ROM_START( gen32 )
ROM_REGION32_BE( 0x40000, "maincpu", 0 )
ROM_LOAD("gen32_4.bin", 0x00000, 0x40000,CRC(6CC4DA88) SHA1(EA72ACF9C67ED17C6AC8DE56A165784AA629C4A1))
@ -1859,7 +1814,6 @@ DRIVER_INIT_MEMBER(polgar_state,polgar)
CONS( 1991, diablo68, 0, 0, diablo68, sfortea, driver_device, 0, "Novag", "Novag Diablo 68000 Chess Computer", MACHINE_NO_SOUND|MACHINE_NOT_WORKING|MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK )
CONS( 1991, van16, 0, 0, van16, van16, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Vancouver 68000", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
CONS( 1991, van32, van16, 0, van32, van32, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Vancouver 68020", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
CONS( 1992, risc, 0, 0, risc, van16, driver_device, 0, "Saitek", "RISC2500", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK|MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK )
CONS( 1993, gen32, van16, 0, gen32, gen32, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Genius030 V4.00", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
CONS( 1993, gen32_41, van16, 0, gen32, gen32, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Genius030 V4.01", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )
CONS( 1994, berlinp, van16, 0, bpl32, bpl32, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Berlin Pro 68020", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK )

View File

@ -0,0 +1,315 @@
// license:BSD-3-Clause
// copyright-holders:Sandro Ronco
/******************************************************************************
Saitek RISC 2500
TODO:
- sound
******************************************************************************/
#include "emu.h"
#include "cpu/arm/arm.h"
#include "machine/ram.h"
#include "machine/nvram.h"
#include "risc2500.lh"
class risc2500_state : public driver_device
{
public:
risc2500_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_ram(*this, "ram"),
m_nvram(*this, "nvram"),
m_inputs(*this, "P%u", 0)
{ }
DECLARE_READ32_MEMBER(p1000_r);
DECLARE_WRITE32_MEMBER(p1000_w);
DECLARE_READ32_MEMBER(disable_boot_rom);
TIMER_CALLBACK_MEMBER(disable_boot_rom);
virtual void machine_start() override;
virtual void machine_reset() override;
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
DECLARE_INPUT_CHANGED_MEMBER(on_button);
void install_boot_rom();
private:
required_device<cpu_device> m_maincpu;
required_device<ram_device> m_ram;
required_device<nvram_device> m_nvram;
required_ioport_array<8> m_inputs;
uint32_t m_p1000;
uint16_t m_vram_addr;
uint8_t m_vram[0x100];
};
void risc2500_state::install_boot_rom()
{
m_maincpu->space(AS_PROGRAM).install_rom(0x00000000, 0x001ffff, memregion("maincpu")->base());
}
uint32_t risc2500_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
for(int c=0; c<12; c++)
{
// 12 characters 5 x 7
for(int x=0; x<5; x++)
{
uint8_t gfx = BITSWAP8(m_vram[c*5 + x], 6,5,0,1,2,3,4,7);
for(int y=0; y<7; y++)
bitmap.pix16(y, 71 - (c*6 + x)) = (gfx >> (y + 1)) & 1;
}
// LCD digits and symbols
int data_addr = 0x40 + c * 5;
uint16_t data = ((m_vram[data_addr + 1] & 0x3) << 5) | ((m_vram[data_addr + 2] & 0x7) << 2) | (m_vram[data_addr + 4] & 0x3);
data = BITSWAP8(data, 7,3,0,1,4,6,5,2) | ((m_vram[data_addr - 1] & 0x04) ? 0x80 : 0);
output().set_digit_value(c, data);
output().set_indexed_value("sym", c, BIT(m_vram[data_addr + 1], 2));
}
output().set_indexed_value("sym", 12, BIT(m_vram[0x63], 0));
output().set_indexed_value("sym", 13, BIT(m_vram[0x4a], 0));
return 0;
}
INPUT_CHANGED_MEMBER(risc2500_state::on_button)
{
if (newval)
{
install_boot_rom();
m_maincpu->reset();
}
}
static INPUT_PORTS_START( risc2500 )
PORT_START("P0")
PORT_BIT(0x00000001, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // H1
PORT_BIT(0x00000002, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // G1
PORT_BIT(0x00000004, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // F1
PORT_BIT(0x00000008, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // E1
PORT_BIT(0x00000010, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // D1
PORT_BIT(0x00000020, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // C1
PORT_BIT(0x00000040, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // B1
PORT_BIT(0x00000080, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // A1
PORT_BIT(0x40000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Pawn")
PORT_BIT(0x80000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("BACK")
PORT_START("P1")
PORT_BIT(0x00000001, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // H2
PORT_BIT(0x00000002, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // G2
PORT_BIT(0x00000004, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // F2
PORT_BIT(0x00000008, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // E2
PORT_BIT(0x00000010, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // D2
PORT_BIT(0x00000020, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // C2
PORT_BIT(0x00000040, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // B2
PORT_BIT(0x00000080, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // A2
PORT_BIT(0x40000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Knight")
PORT_BIT(0x80000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_NAME("ENTER")
PORT_START("P2")
PORT_BIT(0x00000001, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // H3
PORT_BIT(0x00000002, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // G3
PORT_BIT(0x00000004, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // F3
PORT_BIT(0x00000008, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // E3
PORT_BIT(0x00000010, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // D3
PORT_BIT(0x00000020, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // C3
PORT_BIT(0x00000040, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // B3
PORT_BIT(0x00000080, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // A3
PORT_BIT(0x40000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Bishop")
PORT_BIT(0x80000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DOWN) PORT_NAME("DOWN")
PORT_START("P3")
PORT_BIT(0x00000001, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // H4
PORT_BIT(0x00000002, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // G4
PORT_BIT(0x00000004, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // F4
PORT_BIT(0x00000008, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // E4
PORT_BIT(0x00000010, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // D4
PORT_BIT(0x00000020, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // C4
PORT_BIT(0x00000040, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // B4
PORT_BIT(0x00000080, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // A4
PORT_BIT(0x40000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Rook")
PORT_BIT(0x80000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_UP) PORT_NAME("UP")
PORT_START("P4")
PORT_BIT(0x00000001, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // H5
PORT_BIT(0x00000002, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // G5
PORT_BIT(0x00000004, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // F5
PORT_BIT(0x00000008, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // E5
PORT_BIT(0x00000010, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // D5
PORT_BIT(0x00000020, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // C5
PORT_BIT(0x00000040, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // B5
PORT_BIT(0x00000080, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // A5
PORT_BIT(0x40000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Queen")
PORT_BIT(0x80000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("MENU")
PORT_START("P5")
PORT_BIT(0x00000001, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // H6
PORT_BIT(0x00000002, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // G6
PORT_BIT(0x00000004, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // F6
PORT_BIT(0x00000008, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // E6
PORT_BIT(0x00000010, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // D6
PORT_BIT(0x00000020, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // C6
PORT_BIT(0x00000040, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // B6
PORT_BIT(0x00000080, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // A6
PORT_BIT(0x40000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("King")
PORT_BIT(0x80000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("PLAY")
PORT_START("P6")
PORT_BIT(0x00000001, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // H7
PORT_BIT(0x00000002, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // G7
PORT_BIT(0x00000004, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // F7
PORT_BIT(0x00000008, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // E7
PORT_BIT(0x00000010, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // D7
PORT_BIT(0x00000020, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // C7
PORT_BIT(0x00000040, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // B7
PORT_BIT(0x00000080, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // A7
PORT_BIT(0x40000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("RIGHT")
PORT_BIT(0x80000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_NAME("NEW GAME")
PORT_START("P7")
PORT_BIT(0x00000001, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // H8
PORT_BIT(0x00000002, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // G8
PORT_BIT(0x00000004, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // F8
PORT_BIT(0x00000008, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // E8
PORT_BIT(0x00000010, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // D8
PORT_BIT(0x00000020, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // C8
PORT_BIT(0x00000040, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // B8
PORT_BIT(0x00000080, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_IMPULSE(10) // A8
PORT_BIT(0x40000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_LEFT) PORT_NAME("LEFT")
PORT_BIT(0x80000000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("OFF")
PORT_START("RESET")
PORT_BIT(0x00000001, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("ON") PORT_CHANGED_MEMBER(DEVICE_SELF, risc2500_state, on_button, 0)
INPUT_PORTS_END
READ32_MEMBER(risc2500_state::p1000_r)
{
uint32_t data = 0;
for(int i=0; i<8; i++)
{
if (m_p1000 & (1 << i))
data |= m_inputs[i]->read();
}
return data;
}
WRITE32_MEMBER(risc2500_state::p1000_w)
{
if ((data & 0xff000000) == 0x01000000) // VRAM address
{
if (data & 0x80)
m_vram_addr = (m_vram_addr & ~0x40) | (data & 0x01 ? 0x40 : 0);
else
m_vram_addr = (m_vram_addr & 0x40) | (data & 0xff);
}
else if (data & 0x04000000) // VRAM write
{
if (!(data & 0x08000000))
m_vram[m_vram_addr++ & 0x7f] = data & 0xff;
}
else if (data & 0x80000000) // Vertical LED
{
for(int i=0; i<8; i++)
output().set_led_value(i, BIT(data, i));
}
else if (data & 0x40000000) // Horizontal LED
{
for(int i=0; i<8; i++)
output().set_led_value(8 + i, BIT(data, i));
}
else if ((data & 0xff000000) == 0x08000000) // Power OFF
{
memset(m_vram, 0, sizeof(m_vram));
}
m_p1000 = data;
}
READ32_MEMBER(risc2500_state::disable_boot_rom)
{
machine().scheduler().timer_set(m_maincpu->cycles_to_attotime(10), timer_expired_delegate(FUNC(risc2500_state::disable_boot_rom), this));
return 0;
}
TIMER_CALLBACK_MEMBER(risc2500_state::disable_boot_rom)
{
m_maincpu->space(AS_PROGRAM).install_ram(0x00000000, m_ram->size() - 1, m_ram->pointer());
}
void risc2500_state::machine_start()
{
m_nvram->set_base(m_ram->pointer(), m_ram->size());
save_item(NAME(m_p1000));
save_item(NAME(m_vram_addr));
save_item(NAME(m_vram));
}
void risc2500_state::machine_reset()
{
m_p1000 = 0;
m_vram_addr = 0;
install_boot_rom();
}
static ADDRESS_MAP_START(risc2500_mem, AS_PROGRAM, 32, risc2500_state )
AM_RANGE( 0x00000000, 0x0001ffff ) AM_RAM
AM_RANGE( 0x01800000, 0x01800003 ) AM_READ(disable_boot_rom)
AM_RANGE( 0x01000000, 0x01000003 ) AM_READWRITE(p1000_r, p1000_w)
AM_RANGE( 0x02000000, 0x0201ffff ) AM_ROM AM_REGION("maincpu", 0)
ADDRESS_MAP_END
static MACHINE_CONFIG_START( risc2500, risc2500_state )
MCFG_CPU_ADD("maincpu", ARM, 14000000) // VY86C010
MCFG_CPU_PROGRAM_MAP(risc2500_mem)
MCFG_ARM_COPRO(ARM_COPRO_TYPE_VL86C020)
MCFG_CPU_PERIODIC_INT_DRIVER(risc2500_state, irq1_line_hold, 250)
MCFG_SCREEN_ADD("screen", LCD)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_SIZE(12*6+1, 7)
MCFG_SCREEN_VISIBLE_AREA(0, 12*6, 0, 7-1)
MCFG_SCREEN_UPDATE_DRIVER(risc2500_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_DEFAULT_LAYOUT(layout_risc2500)
MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_RAM_ADD("ram")
MCFG_RAM_DEFAULT_SIZE("2M")
MCFG_RAM_EXTRA_OPTIONS("128K, 256K, 512K, 1M, 2M")
MCFG_NVRAM_ADD_NO_FILL("nvram")
MACHINE_CONFIG_END
/* ROM definitions */
ROM_START( risc )
ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD("s2500.bin", 0x000000, 0x20000, CRC(7a707e82) SHA1(87187fa58117a442f3abd30092cfcc2a4d7c7efc))
ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
CONS( 1992, risc, 0, 0, risc2500, risc2500, driver_device, 0, "Saitek", "RISC 2500", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_CLICKABLE_ARTWORK )

View File

@ -0,0 +1,534 @@
<?xml version="1.0"?>
<mamelayout version="2">
<!-- define elements -->
<script>
local layout = {}
local board
local first_sq
local enpassant -- en passant possible on next move
local enpassant_pos -- position of the piece to be removed
local port_tags = { ":P7", ":P6", ":P5", ":P4", ":P3", ":P2", ":P1", ":P0" }
local port_values = { }
local ports
local function change_piece_state(pos, new_state)
board[pos.y][pos.x] = new_state
machine:outputs():set_indexed_value("pos", (pos.y * 10) + pos.x, new_state)
end
local function move_piece(from, to)
if board[from.y][from.x] == 0 then
return 0
end
-- ignores move on the same position
if from.y == to.y and from.x == to.x then
change_piece_state(to, board[to.y][to.x])
return 1
end
-- en passant
if enpassant and board[to.y][to.x] == 0 and board[from.y][from.x] == 12 and from.y == 4 and to.y == 3 and from.x ~= to.x and board[to.y + 1][to.x] == 6 then
enpassant_pos = {x = to.x, y = to.y + 1}
elseif enpassant and board[to.y][to.x] == 0 and board[from.y][from.x] == 6 and from.y == 5 and to.y == 6 and from.x ~= to.x and board[to.y - 1][to.x] == 12 then
enpassant_pos = {x = to.x, y = to.y - 1}
end
if board[to.y][to.x] == 0 and from.x == to.x and ((board[from.y][from.x] == 6 and from.y == 2 and to.y == 4) or
(board[from.y][from.x] == 12 and from.y == 7 and to.y == 5)) then
enpassant = true
else
enpassant = false
end
-- promotion
if (to.y == 8 and board[from.y][from.x] == 6) or (to.y == 1 and board[from.y][from.x] == 12) then
change_piece_state(to, board[from.y][from.x] - 4) -- TODO: make this configurable
else
change_piece_state(to, board[from.y][from.x])
end
change_piece_state(from, 0)
return 1
end
function layout.reset()
board =
{{ 3, 5, 4, 2, 1, 4, 5, 3 },
{ 6, 6, 6, 6, 6, 6, 6, 6 },
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 12,12,12,12,12,12,12,12 },
{ 9,11,10, 8, 7,10,11, 9 }}
for y, row in ipairs(board) do
for x, cell in ipairs(row) do
change_piece_state({x = x, y = y}, board[y][x])
end
end
ports = machine:ioport().ports
first_sq = nil
enpassant = false
enpassant_pos = nil
end
function layout.frame()
local value = ports[":RESET"]:read()
if value &amp; 0x01 == 0x01 then
layout.reset()
return
end
for y, tag in ipairs(port_tags) do
local port = ports[tag]
if not port then
return
end
local newvalue = port:read()
if port_values[y] ~= newvalue then
port_values[y] = newvalue
for x = 8, 1, -1 do
if newvalue &amp; 1 == 1 then
if enpassant_pos and enpassant_pos.x == x and enpassant_pos.y == y then
change_piece_state(enpassant_pos, 0)
enpassant = false
enpassant_pos = nil
return
end
if not first_sq then
if board[y][x] ~= 0 then
first_sq = {x = x, y = y}
machine:outputs():set_indexed_value("pos", (y * 10) + x, board[y][x] | 0x10)
end
else
if move_piece(first_sq, {x = x, y = y}) == 1 then
first_sq = nil
end
end
return
end
newvalue = newvalue >> 1
end
end
end
end
return layout, "risc2500"
</script>
<element name="digit" defstate="0">
<led7seg>
<color red="1.0" green="1.0" blue="1.0" />
</led7seg>
</element>
<element name="led" defstate="1">
<rect state="0">
<color red="0.95" green="0.0" blue="0.0" />
</rect>
<rect state="1">
<color red="0.20" green="0.0" blue="0.0" />
</rect>
</element>
<element name="button" defstate="0">
<rect state="0">
<bounds x="0.0" y="0.0" width="1.0" height="1.0" />
<color red="0.0" green="0.0" blue="0.0" />
</rect>
<rect state="1">
<bounds x="0.0" y="0.0" width="1.0" height="1.0" />
<color red="0.4" green="0.4" blue="0.4" />
</rect>
</element>
<element name="hl" defstate="0">
<text string=" ">
<bounds x="0.0" y="0.0" width="1.0" height="1.0" />
<color red="1.0" green="1.0" blue="1.0" />
</text>
<rect 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" />
</rect>
</element>
<element name="text_1"> <text string="1"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_2"> <text string="2"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_3"> <text string="3"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_4"> <text string="4"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_5"> <text string="5"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_6"> <text string="6"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_7"> <text string="7"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_8"> <text string="8"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_a"> <text string="A"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_b"> <text string="B"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_c"> <text string="C"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_d"> <text string="D"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_e"> <text string="E"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_f"> <text string="F"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_g"> <text string="G"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_h"> <text string="H"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<element name="text_on"> <text string="ON" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_off"> <text string="OFF" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_newgame"> <text string="NEW GAME" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_play"> <text string="PLAY" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_back"> <text string="BACK" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_left"> <text string="&#x2190;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_right"> <text string="&#x2192;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_menu"> <text string="MENU" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_up"> <text string="&#x2191;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_down"> <text string="&#x2193;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_enter"> <text string="ENTER" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_p1"> <text string="&#x265a;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_p2"> <text string="&#x265b;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_p3"> <text string="&#x265c;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_p4"> <text string="&#x265d;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_p5"> <text string="&#x265e;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_p6"> <text string="&#x265f;" > <color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="sym_colon"> <text string=":" state="1"> <color red="1.0" green="1.0" blue="1.0" /></text> </element>
<element name="sym_left"> <text string="&#x2190;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_right"> <text string="&#x2192;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_p1"> <text string="&#x265a;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_p2"> <text string="&#x265b;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_p3"> <text string="&#x265c;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_p4"> <text string="&#x265d;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_p5"> <text string="&#x265e;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_p6"> <text string="&#x265f;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_black"> <text string="&#x25cf;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="sym_white"> <text string="&#x25cb;" state="1"> <color red="1.0" green="1.0" blue="1.0" /> </text> </element>
<element name="white"><rect><color red="1" green="1" blue="1" /></rect></element>
<element name="black"><rect><color red="0" green="0" blue="0" /></rect></element>
<element name="background"><rect><color red="0.63" green="0.63" blue="0.63" /></rect></element>
<element name="piece" defstate="0">
<text string="&#x265a;" state="1"><color red="0.27" green="0.25" blue="0.25" /></text>
<text string="&#x265b;" state="2"><color red="0.27" green="0.25" blue="0.25" /></text>
<text string="&#x265c;" state="3"><color red="0.27" green="0.25" blue="0.25" /></text>
<text string="&#x265d;" state="4"><color red="0.27" green="0.25" blue="0.25" /></text>
<text string="&#x265e;" state="5"><color red="0.27" green="0.25" blue="0.25" /></text>
<text string="&#x265f;" state="6"><color red="0.27" green="0.25" blue="0.25" /></text>
<text string="&#x265a;" state="7"><color red="0.71" green="0.7" blue="0.69" /></text>
<text string="&#x265b;" state="8"><color red="0.71" green="0.7" blue="0.69" /></text>
<text string="&#x265c;" state="9"><color red="0.71" green="0.7" blue="0.69" /></text>
<text string="&#x265d;" state="10"><color red="0.71" green="0.7" blue="0.69" /></text>
<text string="&#x265e;" state="11"><color red="0.71" green="0.7" blue="0.69" /></text>
<text string="&#x265f;" state="12"><color red="0.71" green="0.7" blue="0.69" /></text>
<!-- selected pieces -->
<disk state="17"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
<disk state="18"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
<disk state="19"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
<disk state="20"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
<disk state="21"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
<disk state="22"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
<disk state="23"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
<disk state="24"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
<disk state="25"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
<disk state="26"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
<disk state="27"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
<disk state="28"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
<text string="&#x265a;" state="17"><color red="0.27" green="0.25" blue="0.25" /></text>
<text string="&#x265b;" state="18"><color red="0.27" green="0.25" blue="0.25" /></text>
<text string="&#x265c;" state="19"><color red="0.27" green="0.25" blue="0.25" /></text>
<text string="&#x265d;" state="20"><color red="0.27" green="0.25" blue="0.25" /></text>
<text string="&#x265e;" state="21"><color red="0.27" green="0.25" blue="0.25" /></text>
<text string="&#x265f;" state="22"><color red="0.27" green="0.25" blue="0.25" /></text>
<text string="&#x265a;" state="23"><color red="0.71" green="0.7" blue="0.69" /></text>
<text string="&#x265b;" state="24"><color red="0.71" green="0.7" blue="0.69" /></text>
<text string="&#x265c;" state="25"><color red="0.71" green="0.7" blue="0.69" /></text>
<text string="&#x265d;" state="26"><color red="0.71" green="0.7" blue="0.69" /></text>
<text string="&#x265e;" state="27"><color red="0.71" green="0.7" blue="0.69" /></text>
<text string="&#x265f;" state="28"><color red="0.71" green="0.7" blue="0.69" /></text>
</element>
<!-- build screen -->
<view name="Internal Layout">
<bezel element="background"><bounds x="0" y="0" width="95" height="90" /></bezel>
<bezel element="background"><bounds x="95" y="16" width="60" height="74" /></bezel>
<bezel element="background"><bounds x="95" y="0" width="60" height="4" /></bezel>
<bezel element="background"><bounds x="125" y="0" width="30" height="20" /></bezel>
<bezel element="white"><bounds x="8" y="3" width="80" height="80" /></bezel>
<bezel element="black"><bounds x="8" y="13" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="8" y="33" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="8" y="53" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="8" y="73" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="18" y="3" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="18" y="23" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="18" y="43" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="18" y="63" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="28" y="13" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="28" y="33" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="28" y="53" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="28" y="73" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="38" y="3" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="38" y="23" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="38" y="43" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="38" y="63" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="48" y="13" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="48" y="33" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="48" y="53" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="48" y="73" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="58" y="3" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="58" y="23" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="58" y="43" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="58" y="63" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="68" y="13" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="68" y="33" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="68" y="53" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="68" y="73" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="78" y="3" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="78" y="23" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="78" y="43" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="78" y="63" width="10" height="10" /></bezel>
<bezel element="text_8" ><bounds x="5" y="7" width="2" height="2" /></bezel>
<bezel element="text_7" ><bounds x="5" y="17" width="2" height="2" /></bezel>
<bezel element="text_6" ><bounds x="5" y="27" width="2" height="2" /></bezel>
<bezel element="text_5" ><bounds x="5" y="37" width="2" height="2" /></bezel>
<bezel element="text_4" ><bounds x="5" y="47" width="2" height="2" /></bezel>
<bezel element="text_3" ><bounds x="5" y="57" width="2" height="2" /></bezel>
<bezel element="text_2" ><bounds x="5" y="67" width="2" height="2" /></bezel>
<bezel element="text_1" ><bounds x="5" y="77" width="2" height="2" /></bezel>
<bezel element="text_a" ><bounds x="12" y="84" width="2" height="2" /></bezel>
<bezel element="text_b" ><bounds x="22" y="84" width="2" height="2" /></bezel>
<bezel element="text_c" ><bounds x="32" y="84" width="2" height="2" /></bezel>
<bezel element="text_d" ><bounds x="42" y="84" width="2" height="2" /></bezel>
<bezel element="text_e" ><bounds x="52" y="84" width="2" height="2" /></bezel>
<bezel element="text_f" ><bounds x="62" y="84" width="2" height="2" /></bezel>
<bezel element="text_g" ><bounds x="72" y="84" width="2" height="2" /></bezel>
<bezel element="text_h" ><bounds x="82" y="84" width="2" height="2" /></bezel>
<bezel name="led0" element="led"><bounds x="2" y="77.5" width="2" height="1" /></bezel>
<bezel name="led1" element="led"><bounds x="2" y="67.5" width="2" height="1" /></bezel>
<bezel name="led2" element="led"><bounds x="2" y="57.5" width="2" height="1" /></bezel>
<bezel name="led3" element="led"><bounds x="2" y="47.5" width="2" height="1" /></bezel>
<bezel name="led4" element="led"><bounds x="2" y="37.5" width="2" height="1" /></bezel>
<bezel name="led5" element="led"><bounds x="2" y="27.5" width="2" height="1" /></bezel>
<bezel name="led6" element="led"><bounds x="2" y="17.5" width="2" height="1" /></bezel>
<bezel name="led7" element="led"><bounds x="2" y="7.5" width="2" height="1" /></bezel>
<bezel name="led8" element="led"><bounds x="12.5" y="87" width="1" height="2" /></bezel>
<bezel name="led9" element="led"><bounds x="22.5" y="87" width="1" height="2" /></bezel>
<bezel name="led10" element="led"><bounds x="32.5" y="87" width="1" height="2" /></bezel>
<bezel name="led11" element="led"><bounds x="42.5" y="87" width="1" height="2" /></bezel>
<bezel name="led12" element="led"><bounds x="52.5" y="87" width="1" height="2" /></bezel>
<bezel name="led13" element="led"><bounds x="62.5" y="87" width="1" height="2" /></bezel>
<bezel name="led14" element="led"><bounds x="72.5" y="87" width="1" height="2" /></bezel>
<bezel name="led15" element="led"><bounds x="82.5" y="87" width="1" height="2" /></bezel>
<bezel element="hl" inputtag="P0" inputmask="0x01"><bounds x="78" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P0" inputmask="0x02"><bounds x="68" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P0" inputmask="0x04"><bounds x="58" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P0" inputmask="0x08"><bounds x="48" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P0" inputmask="0x10"><bounds x="38" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P0" inputmask="0x20"><bounds x="28" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P0" inputmask="0x40"><bounds x="18" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P0" inputmask="0x80"><bounds x="8" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P1" inputmask="0x01"><bounds x="78" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P1" inputmask="0x02"><bounds x="68" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P1" inputmask="0x04"><bounds x="58" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P1" inputmask="0x08"><bounds x="48" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P1" inputmask="0x10"><bounds x="38" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P1" inputmask="0x20"><bounds x="28" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P1" inputmask="0x40"><bounds x="18" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P1" inputmask="0x80"><bounds x="8" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P2" inputmask="0x01"><bounds x="78" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P2" inputmask="0x02"><bounds x="68" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P2" inputmask="0x04"><bounds x="58" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P2" inputmask="0x08"><bounds x="48" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P2" inputmask="0x10"><bounds x="38" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P2" inputmask="0x20"><bounds x="28" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P2" inputmask="0x40"><bounds x="18" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P2" inputmask="0x80"><bounds x="8" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P3" inputmask="0x01"><bounds x="78" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P3" inputmask="0x02"><bounds x="68" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P3" inputmask="0x04"><bounds x="58" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P3" inputmask="0x08"><bounds x="48" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P3" inputmask="0x10"><bounds x="38" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P3" inputmask="0x20"><bounds x="28" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P3" inputmask="0x40"><bounds x="18" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P3" inputmask="0x80"><bounds x="8" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P4" inputmask="0x01"><bounds x="78" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P4" inputmask="0x02"><bounds x="68" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P4" inputmask="0x04"><bounds x="58" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P4" inputmask="0x08"><bounds x="48" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P4" inputmask="0x10"><bounds x="38" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P4" inputmask="0x20"><bounds x="28" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P4" inputmask="0x40"><bounds x="18" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P4" inputmask="0x80"><bounds x="8" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P5" inputmask="0x01"><bounds x="78" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P5" inputmask="0x02"><bounds x="68" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P5" inputmask="0x04"><bounds x="58" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P5" inputmask="0x08"><bounds x="48" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P5" inputmask="0x10"><bounds x="38" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P5" inputmask="0x20"><bounds x="28" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P5" inputmask="0x40"><bounds x="18" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P5" inputmask="0x80"><bounds x="8" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P6" inputmask="0x01"><bounds x="78" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P6" inputmask="0x02"><bounds x="68" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P6" inputmask="0x04"><bounds x="58" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P6" inputmask="0x08"><bounds x="48" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P6" inputmask="0x10"><bounds x="38" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P6" inputmask="0x20"><bounds x="28" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P6" inputmask="0x40"><bounds x="18" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P6" inputmask="0x80"><bounds x="8" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P7" inputmask="0x01"><bounds x="78" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P7" inputmask="0x02"><bounds x="68" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P7" inputmask="0x04"><bounds x="58" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P7" inputmask="0x08"><bounds x="48" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P7" inputmask="0x10"><bounds x="38" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P7" inputmask="0x20"><bounds x="28" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="P7" inputmask="0x40"><bounds x="18" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="P7" inputmask="0x80"><bounds x="8" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel name="pos81" element="piece" ><bounds x="8" y="73" width="10" height="10" /></bezel>
<bezel name="pos82" element="piece" ><bounds x="18" y="73" width="10" height="10" /></bezel>
<bezel name="pos83" element="piece" ><bounds x="28" y="73" width="10" height="10" /></bezel>
<bezel name="pos84" element="piece" ><bounds x="38" y="73" width="10" height="10" /></bezel>
<bezel name="pos85" element="piece" ><bounds x="48" y="73" width="10" height="10" /></bezel>
<bezel name="pos86" element="piece" ><bounds x="58" y="73" width="10" height="10" /></bezel>
<bezel name="pos87" element="piece" ><bounds x="68" y="73" width="10" height="10" /></bezel>
<bezel name="pos88" element="piece" ><bounds x="78" y="73" width="10" height="10" /></bezel>
<bezel name="pos71" element="piece" ><bounds x="8" y="63" width="10" height="10" /></bezel>
<bezel name="pos72" element="piece" ><bounds x="18" y="63" width="10" height="10" /></bezel>
<bezel name="pos73" element="piece" ><bounds x="28" y="63" width="10" height="10" /></bezel>
<bezel name="pos74" element="piece" ><bounds x="38" y="63" width="10" height="10" /></bezel>
<bezel name="pos75" element="piece" ><bounds x="48" y="63" width="10" height="10" /></bezel>
<bezel name="pos76" element="piece" ><bounds x="58" y="63" width="10" height="10" /></bezel>
<bezel name="pos77" element="piece" ><bounds x="68" y="63" width="10" height="10" /></bezel>
<bezel name="pos78" element="piece" ><bounds x="78" y="63" width="10" height="10" /></bezel>
<bezel name="pos61" element="piece" ><bounds x="8" y="53" width="10" height="10" /></bezel>
<bezel name="pos62" element="piece" ><bounds x="18" y="53" width="10" height="10" /></bezel>
<bezel name="pos63" element="piece" ><bounds x="28" y="53" width="10" height="10" /></bezel>
<bezel name="pos64" element="piece" ><bounds x="38" y="53" width="10" height="10" /></bezel>
<bezel name="pos65" element="piece" ><bounds x="48" y="53" width="10" height="10" /></bezel>
<bezel name="pos66" element="piece" ><bounds x="58" y="53" width="10" height="10" /></bezel>
<bezel name="pos67" element="piece" ><bounds x="68" y="53" width="10" height="10" /></bezel>
<bezel name="pos68" element="piece" ><bounds x="78" y="53" width="10" height="10" /></bezel>
<bezel name="pos51" element="piece" ><bounds x="8" y="43" width="10" height="10" /></bezel>
<bezel name="pos52" element="piece" ><bounds x="18" y="43" width="10" height="10" /></bezel>
<bezel name="pos53" element="piece" ><bounds x="28" y="43" width="10" height="10" /></bezel>
<bezel name="pos54" element="piece" ><bounds x="38" y="43" width="10" height="10" /></bezel>
<bezel name="pos55" element="piece" ><bounds x="48" y="43" width="10" height="10" /></bezel>
<bezel name="pos56" element="piece" ><bounds x="58" y="43" width="10" height="10" /></bezel>
<bezel name="pos57" element="piece" ><bounds x="68" y="43" width="10" height="10" /></bezel>
<bezel name="pos58" element="piece" ><bounds x="78" y="43" width="10" height="10" /></bezel>
<bezel name="pos41" element="piece" ><bounds x="8" y="33" width="10" height="10" /></bezel>
<bezel name="pos42" element="piece" ><bounds x="18" y="33" width="10" height="10" /></bezel>
<bezel name="pos43" element="piece" ><bounds x="28" y="33" width="10" height="10" /></bezel>
<bezel name="pos44" element="piece" ><bounds x="38" y="33" width="10" height="10" /></bezel>
<bezel name="pos45" element="piece" ><bounds x="48" y="33" width="10" height="10" /></bezel>
<bezel name="pos46" element="piece" ><bounds x="58" y="33" width="10" height="10" /></bezel>
<bezel name="pos47" element="piece" ><bounds x="68" y="33" width="10" height="10" /></bezel>
<bezel name="pos48" element="piece" ><bounds x="78" y="33" width="10" height="10" /></bezel>
<bezel name="pos31" element="piece" ><bounds x="8" y="23" width="10" height="10" /></bezel>
<bezel name="pos32" element="piece" ><bounds x="18" y="23" width="10" height="10" /></bezel>
<bezel name="pos33" element="piece" ><bounds x="28" y="23" width="10" height="10" /></bezel>
<bezel name="pos34" element="piece" ><bounds x="38" y="23" width="10" height="10" /></bezel>
<bezel name="pos35" element="piece" ><bounds x="48" y="23" width="10" height="10" /></bezel>
<bezel name="pos36" element="piece" ><bounds x="58" y="23" width="10" height="10" /></bezel>
<bezel name="pos37" element="piece" ><bounds x="68" y="23" width="10" height="10" /></bezel>
<bezel name="pos38" element="piece" ><bounds x="78" y="23" width="10" height="10" /></bezel>
<bezel name="pos21" element="piece" ><bounds x="8" y="13" width="10" height="10" /></bezel>
<bezel name="pos22" element="piece" ><bounds x="18" y="13" width="10" height="10" /></bezel>
<bezel name="pos23" element="piece" ><bounds x="28" y="13" width="10" height="10" /></bezel>
<bezel name="pos24" element="piece" ><bounds x="38" y="13" width="10" height="10" /></bezel>
<bezel name="pos25" element="piece" ><bounds x="48" y="13" width="10" height="10" /></bezel>
<bezel name="pos26" element="piece" ><bounds x="58" y="13" width="10" height="10" /></bezel>
<bezel name="pos27" element="piece" ><bounds x="68" y="13" width="10" height="10" /></bezel>
<bezel name="pos28" element="piece" ><bounds x="78" y="13" width="10" height="10" /></bezel>
<bezel name="pos11" element="piece" ><bounds x="8" y="3" width="10" height="10" /></bezel>
<bezel name="pos12" element="piece" ><bounds x="18" y="3" width="10" height="10" /></bezel>
<bezel name="pos13" element="piece" ><bounds x="28" y="3" width="10" height="10" /></bezel>
<bezel name="pos14" element="piece" ><bounds x="38" y="3" width="10" height="10" /></bezel>
<bezel name="pos15" element="piece" ><bounds x="48" y="3" width="10" height="10" /></bezel>
<bezel name="pos16" element="piece" ><bounds x="58" y="3" width="10" height="10" /></bezel>
<bezel name="pos17" element="piece" ><bounds x="68" y="3" width="10" height="10" /></bezel>
<bezel name="pos18" element="piece" ><bounds x="78" y="3" width="10" height="10" /></bezel>
<!-- LCD panel -->
<screen index="0"><bounds x="95" y="4.5" width="30" height="4" /></screen>
<bezel name="digit11" element="digit" ><bounds x="95.9" y="9" width="1.6" height="3" /></bezel>
<bezel name="digit10" element="digit" ><bounds x="98.35" y="9" width="1.6" height="3" /></bezel>
<bezel name="digit9" element="digit" ><bounds x="100.8" y="9" width="1.6" height="3" /></bezel>
<bezel name="digit8" element="digit" ><bounds x="103.25" y="9" width="1.6" height="3" /></bezel>
<bezel name="digit7" element="digit" ><bounds x="105.7" y="9" width="1.6" height="3" /></bezel>
<bezel name="digit6" element="digit" ><bounds x="108.15" y="9" width="1.6" height="3" /></bezel>
<bezel name="digit5" element="digit" ><bounds x="110.6" y="9" width="1.6" height="3" /></bezel>
<bezel name="digit4" element="digit" ><bounds x="113.05" y="9" width="1.6" height="3" /></bezel>
<bezel name="digit3" element="digit" ><bounds x="115.5" y="9" width="1.6" height="3" /></bezel>
<bezel name="digit2" element="digit" ><bounds x="117.95" y="9" width="1.6" height="3" /></bezel>
<bezel name="digit1" element="digit" ><bounds x="120.4" y="9" width="1.6" height="3" /></bezel>
<bezel name="digit0" element="digit" ><bounds x="122.85" y="9" width="1.6" height="3" /></bezel>
<bezel name="sym12" element="sym_colon" ><bounds x="107.0" y="9" width="1.5" height="3" /></bezel>
<bezel name="sym13" element="sym_colon" ><bounds x="119.2" y="9" width="1.5" height="3" /></bezel>
<bezel name="sym1" element="sym_right" > <bounds x="121.60" y="12.7" width="3" height="3" /></bezel>
<bezel name="sym2" element="sym_p6" > <bounds x="116.60" y="12.5" width="5" height="3" /></bezel>
<bezel name="sym3" element="sym_p5" > <bounds x="113.75" y="12.5" width="4" height="3" /></bezel>
<bezel name="sym4" element="sym_p4" > <bounds x="110.88" y="12.5" width="4" height="3" /></bezel>
<bezel name="sym6" element="sym_p3" > <bounds x="108.00" y="12.5" width="4" height="3" /></bezel>
<bezel name="sym7" element="sym_p2" > <bounds x="105.13" y="12.5" width="4" height="3" /></bezel>
<bezel name="sym8" element="sym_p1" > <bounds x="102.25" y="12.5" width="4" height="3" /></bezel>
<bezel name="sym9" element="sym_white" > <bounds x="99.00" y="12.5" width="4" height="3" /></bezel>
<bezel name="sym10" element="sym_black" > <bounds x="99.90" y="13.0" width="2.2" height="2.2" /></bezel>
<bezel name="sym11" element="sym_left" > <bounds x="95.40" y="12.7" width="3" height="3" /></bezel>
<!-- right side -->
<bezel element="text_on" ><bounds x="96" y="37" width="8" height="2" /></bezel>
<bezel element="text_off" ><bounds x="107" y="37" width="8" height="2" /></bezel>
<bezel element="text_newgame" ><bounds x="118" y="37" width="8" height="2" /></bezel>
<bezel element="text_play" ><bounds x="129" y="37" width="8" height="2" /></bezel>
<bezel element="text_back" ><bounds x="140" y="37" width="8" height="2" /></bezel>
<bezel element="text_left" ><bounds x="96" y="52" width="7" height="3" /></bezel>
<bezel element="text_right" ><bounds x="105" y="52" width="7" height="3" /></bezel>
<bezel element="text_menu" ><bounds x="114" y="52" width="7" height="2" /></bezel>
<bezel element="text_up" ><bounds x="123" y="51" width="7" height="3" /></bezel>
<bezel element="text_down" ><bounds x="132" y="51" width="7" height="3" /></bezel>
<bezel element="text_enter" ><bounds x="141" y="52" width="7" height="2" /></bezel>
<bezel element="text_p1" ><bounds x="96" y="65" width="7" height="5" /></bezel>
<bezel element="text_p2" ><bounds x="105" y="65" width="7" height="5" /></bezel>
<bezel element="text_p3" ><bounds x="114" y="65" width="7" height="5" /></bezel>
<bezel element="text_p4" ><bounds x="123" y="65" width="7" height="5" /></bezel>
<bezel element="text_p5" ><bounds x="132" y="65" width="7" height="5" /></bezel>
<bezel element="text_p6" ><bounds x="141" y="65" width="7" height="5" /></bezel>
<bezel element="button" inputtag="RESET" inputmask="0x00000001"><bounds x="96" y="40" width="8" height="2" /></bezel>
<bezel element="button" inputtag="P7" inputmask="0x80000000"><bounds x="107" y="40" width="8" height="2" /></bezel>
<bezel element="button" inputtag="P6" inputmask="0x80000000"><bounds x="118" y="40" width="8" height="2" /></bezel>
<bezel element="button" inputtag="P5" inputmask="0x80000000"><bounds x="129" y="40" width="8" height="2" /></bezel>
<bezel element="button" inputtag="P0" inputmask="0x80000000"><bounds x="140" y="40" width="8" height="2" /></bezel>
<bezel element="button" inputtag="P7" inputmask="0x40000000"><bounds x="96" y="55" width="7" height="2" /></bezel>
<bezel element="button" inputtag="P6" inputmask="0x40000000"><bounds x="105" y="55" width="7" height="2" /></bezel>
<bezel element="button" inputtag="P4" inputmask="0x80000000"><bounds x="114" y="55" width="7" height="2" /></bezel>
<bezel element="button" inputtag="P3" inputmask="0x80000000"><bounds x="123" y="55" width="7" height="2" /></bezel>
<bezel element="button" inputtag="P2" inputmask="0x80000000"><bounds x="132" y="55" width="7" height="2" /></bezel>
<bezel element="button" inputtag="P1" inputmask="0x80000000"><bounds x="141" y="55" width="7" height="2" /></bezel>
<bezel element="button" inputtag="P5" inputmask="0x40000000"><bounds x="96" y="70" width="7" height="2" /></bezel>
<bezel element="button" inputtag="P4" inputmask="0x40000000"><bounds x="105" y="70" width="7" height="2" /></bezel>
<bezel element="button" inputtag="P3" inputmask="0x40000000"><bounds x="114" y="70" width="7" height="2" /></bezel>
<bezel element="button" inputtag="P2" inputmask="0x40000000"><bounds x="123" y="70" width="7" height="2" /></bezel>
<bezel element="button" inputtag="P1" inputmask="0x40000000"><bounds x="132" y="70" width="7" height="2" /></bezel>
<bezel element="button" inputtag="P0" inputmask="0x40000000"><bounds x="141" y="70" width="7" height="2" /></bezel>
</view>
</mamelayout>