Merge remote-tracking branch 'mamedev/master'

This commit is contained in:
Tomer Verona 2016-09-14 11:30:55 -07:00
commit 44a63fccb7
33 changed files with 1814 additions and 585 deletions

27
hash/chessmstdm.xml Normal file
View File

@ -0,0 +1,27 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<softwarelist name="chessmstdm" description="Chess-Master Diamond Modules">
<software name="pm10">
<description>PM10 Openings</description>
<year>1987</year>
<publisher>VEB Mikroelektronik Erfurt</publisher>
<part name="cart" interface="chessmstdm_cart">
<dataarea name="rom" size="0x2000">
<rom name="PM10_bm400.bin" size="0x2000" crc="aa784d7a" sha1="fd2d6cac9805a5aaf4f51b7c974d0314a402c186" offset="0" />
</dataarea>
</part>
</software>
<software name="pm11">
<description>PM11 Endings</description>
<year>1987</year>
<publisher>VEB Mikroelektronik Erfurt</publisher>
<part name="cart" interface="chessmstdm_cart">
<dataarea name="rom" size="0x4000">
<rom name="PM11_bm403_bm607.bin" size="0x4000" crc="5af4f3e2" sha1="7c9befc6182d65ca0c7d53820a0f84a3a55b9c78" offset="0" />
</dataarea>
</part>
</software>
</softwarelist>

View File

@ -3021,6 +3021,17 @@ Known PC Booter Games Not Dumped, Or Dumped and Lost when Demonlord's Site went
</part> </part>
</software> </software>
<software name="budokan">
<description>Budokan - The Martial Spirit</description>
<year>1989</year>
<publisher>Electronic Arts</publisher>
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size = "737280">
<rom name="Budokan - The Martial Spirit [Electronic Arts] [1989] [3.5] [1 of 1].img" size="737280" crc="fea46e33" sha1="bf874ea08695344cc9c3db8bc1b2db2e0b62ca9f" offset="0"/>
</dataarea>
</part>
</software>
<software name="armorik"> <software name="armorik">
<description>Les 8 Conquêtes d'Armorik le Viking</description> <description>Les 8 Conquêtes d'Armorik le Viking</description>
<year>1988</year> <year>1988</year>
@ -3046,7 +3057,23 @@ Known PC Booter Games Not Dumped, Or Dumped and Lost when Demonlord's Site went
</software> </software>
<software name="indy500"> <software name="indy500">
<description>Indianapolis 500: The Simulation</description> <description>Indianapolis 500: The Simulation (5.25")</description>
<year>1989</year>
<publisher>Electronic Arts</publisher>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size = "368640">
<rom name="Indianapolis 500 - The Simulation [1989] [5.25] [1 of 2].img" size="368640" crc="5d8f3b23" sha1="c3abf7a4cbc444ee1d60c5de278812502e529932" offset="0"/>
</dataarea>
</part>
<part name="flop2" interface="floppy_5_25">
<dataarea name="flop" size = "368640">
<rom name="Indianapolis 500 - The Simulation [1989] [5.25] [2 of 2].img" size="368640" crc="ca21e0ee" sha1="875c81518345d100444457b610873d36061c3602" offset="0"/>
</dataarea>
</part>
</software>
<software name="indy500_35" cloneof="indy500">
<description>Indianapolis 500: The Simulation (3.5")</description>
<year>1989</year> <year>1989</year>
<publisher>Electronic Arts</publisher> <publisher>Electronic Arts</publisher>
<part name="flop1" interface="floppy_3_5"> <part name="flop1" interface="floppy_3_5">
@ -3225,6 +3252,23 @@ Known PC Booter Games Not Dumped, Or Dumped and Lost when Demonlord's Site went
</part> </part>
</software> </software>
<!-- Fatal error: Incorrect layout on track 39 head 0, expected_size=100000, current_size=103360 -->
<software name="purplesa" supported="no">
<description>Purple Saturn Day</description>
<year>1989</year>
<publisher>Epyx</publisher>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size = "354497">
<rom name="Purple Saturn Day [1989] [5.25] [1 of 2].td0" size="354497" crc="8832e9eb" sha1="84a4d1f85ad8f34f11686d3f8c5725a5f332b652" offset="0"/>
</dataarea>
</part>
<part name="flop2" interface="floppy_5_25">
<dataarea name="flop" size = "339570">
<rom name="Purple Saturn Day [1989] [5.25] [2 of 2].td0" size="339570" crc="c9170d4c" sha1="158295366af0822a741fb1ebd34c0a52eced5825" offset="0"/>
</dataarea>
</part>
</software>
<software name="skatedie"> <software name="skatedie">
<description>Skate or Die (5.25")</description> <description>Skate or Die (5.25")</description>
<year>1988</year> <year>1988</year>

View File

@ -3611,6 +3611,54 @@ Missing files come here
</part> </part>
</software> </software>
<software name="wp60">
<description>WordPerfect 6.0 for DOS</description>
<year>1993</year>
<publisher>WordPerfect Corporation</publisher>
<part name="flop1" interface="floppy_3_5">
<feature name="part_id" value="Install 1"/>
<dataarea name="flop" size = "1474560">
<rom name="Word Perfect 6.0 DOS - Disk 1.img" size="1474560" crc="18ea85ae" sha1="a22d6f1b8a266960b35cdb56201ca2448296da5a" offset="0"/>
</dataarea>
</part>
<part name="flop2" interface="floppy_3_5">
<feature name="part_id" value="Install 2"/>
<dataarea name="flop" size = "1474560">
<rom name="Word Perfect 6.0 DOS - Disk 2.img" size="1474560" crc="c5045bb4" sha1="337c138c7ab4c9c9bb19150d652f949ce5ce3cd5" offset="0"/>
</dataarea>
</part>
<part name="flop3" interface="floppy_3_5">
<feature name="part_id" value="Install 3"/>
<dataarea name="flop" size = "1474560">
<rom name="Word Perfect 6.0 DOS - Disk 3.img" size="1474560" crc="bd22e80b" sha1="e274a5fe47ead680d070804faa79c0dae2bf0a59" offset="0"/>
</dataarea>
</part>
<part name="flop4" interface="floppy_3_5">
<feature name="part_id" value="Install 4"/>
<dataarea name="flop" size = "1474560">
<rom name="Word Perfect 6.0 DOS - Disk 4.img" size="1474560" crc="5261f673" sha1="4c1462b853f884c835d979c5fa3c7b12f5ce4a5f" offset="0"/>
</dataarea>
</part>
<part name="flop5" interface="floppy_3_5">
<feature name="part_id" value="Program 1"/>
<dataarea name="flop" size = "1474560">
<rom name="Word Perfect 6.0 DOS - Disk 5.img" size="1474560" crc="316c1cf7" sha1="0d4c0a7edb79f36cd5460ca7fabe6ea212127b92" offset="0"/>
</dataarea>
</part>
<part name="flop6" interface="floppy_3_5">
<feature name="part_id" value="Program 2"/>
<dataarea name="flop" size = "1474560">
<rom name="Word Perfect 6.0 DOS - Disk 6.img" size="1474560" crc="76dfdce7" sha1="a1cae91a0a32557e1c97dec62bd86c1722afb217" offset="0"/>
</dataarea>
</part>
<part name="flop7" interface="floppy_3_5">
<feature name="part_id" value="Program 3"/>
<dataarea name="flop" size = "1474560">
<rom name="Word Perfect 6.0 DOS - Disk 7.img" size="1474560" crc="50b4d482" sha1="02894c316a1900bce1d07bc8c0458bdb88e35699" offset="0"/>
</dataarea>
</part>
</software>
<software name="mbhh95"> <software name="mbhh95">
<description>MikroBITTI Huvi- ja hyötylevyke 1995 (Fin)</description> <description>MikroBITTI Huvi- ja hyötylevyke 1995 (Fin)</description>
<year>1995</year> <year>1995</year>

View File

@ -124,7 +124,7 @@ static const char *const s_gtelm[] =
static char *effective_address( psxcpu_state *state, UINT32 pc, UINT32 op ) static char *effective_address( psxcpu_state *state, UINT32 pc, UINT32 op )
{ {
static char s_address[ 20 ]; static char s_address[ 30 ];
if( state != nullptr && state->pc() == pc ) if( state != nullptr && state->pc() == pc )
{ {

View File

@ -32,11 +32,11 @@ int m68340_calc_cs(m68340cpu_device *m68k, offs_t address)
UINT16 m68340_get_cs(m68340cpu_device *device, offs_t address) UINT16 m68340cpu_device::get_cs(offs_t address)
{ {
device->m68340_currentcs = m68340_calc_cs(device, address); m68340_currentcs = m68340_calc_cs(this, address);
return device->m68340_currentcs; return m68340_currentcs;
} }

View File

@ -38,6 +38,8 @@ public:
UINT16 m_picr; UINT16 m_picr;
UINT16 m_pitr; UINT16 m_pitr;
UINT16 get_cs(offs_t address);
READ32_MEMBER( m68340_internal_base_r ); READ32_MEMBER( m68340_internal_base_r );
WRITE32_MEMBER( m68340_internal_base_w ); WRITE32_MEMBER( m68340_internal_base_w );
READ32_MEMBER( m68340_internal_dma_r ); READ32_MEMBER( m68340_internal_dma_r );
@ -66,8 +68,6 @@ protected:
static const device_type M68340 = &device_creator<m68340cpu_device>; static const device_type M68340 = &device_creator<m68340cpu_device>;
extern UINT16 m68340_get_cs(m68340cpu_device *device, offs_t address);

View File

@ -150,7 +150,6 @@ favorite_manager::favorite_manager(running_machine &machine, ui_options &moption
: m_machine(machine) : m_machine(machine)
, m_options(moptions) , m_options(moptions)
{ {
m_current = -1;
parse_favorite(); parse_favorite();
} }
@ -160,7 +159,7 @@ favorite_manager::favorite_manager(running_machine &machine, ui_options &moption
void favorite_manager::add_favorite_game(const game_driver *driver) void favorite_manager::add_favorite_game(const game_driver *driver)
{ {
m_list.emplace_back(driver->name, driver->description, "", "", "", 0, "", driver, "", "", "", 1, "", "", "", true); m_list.emplace(driver->description, ui_software_info{ driver->name, driver->description, "", "", "", 0, "", driver, "", "", "", 1, "", "", "", true });
save_favorite_games(); save_favorite_games();
} }
@ -170,7 +169,7 @@ void favorite_manager::add_favorite_game(const game_driver *driver)
void favorite_manager::add_favorite_game(ui_software_info &swinfo) void favorite_manager::add_favorite_game(ui_software_info &swinfo)
{ {
m_list.push_back(swinfo); m_list.emplace(swinfo.longname, swinfo);
save_favorite_games(); save_favorite_games();
} }
@ -229,7 +228,7 @@ void favorite_manager::add_favorite_game()
tmpmatches.devicetype = strensure(image.image_type_name()); tmpmatches.devicetype = strensure(image.image_type_name());
tmpmatches.available = true; tmpmatches.available = true;
software_avail = true; software_avail = true;
m_list.push_back(tmpmatches); m_list.emplace(tmpmatches.longname, tmpmatches);
save_favorite_games(); save_favorite_games();
} }
} }
@ -244,7 +243,13 @@ void favorite_manager::add_favorite_game()
void favorite_manager::remove_favorite_game(ui_software_info &swinfo) void favorite_manager::remove_favorite_game(ui_software_info &swinfo)
{ {
m_list.erase(std::remove(m_list.begin(), m_list.end(), swinfo), m_list.end()); for (auto e = m_list.begin(); e != m_list.end(); ++e)
if (e->second == swinfo)
{
m_list.erase(e);
break;
}
m_current = m_list.begin();
save_favorite_games(); save_favorite_games();
} }
@ -254,7 +259,8 @@ void favorite_manager::remove_favorite_game(ui_software_info &swinfo)
void favorite_manager::remove_favorite_game() void favorite_manager::remove_favorite_game()
{ {
m_list.erase(m_list.begin() + m_current); m_list.erase(m_current);
m_current = m_list.begin();
save_favorite_games(); save_favorite_games();
} }
@ -275,9 +281,9 @@ bool favorite_manager::isgame_favorite()
if (image.exists() && swinfo != nullptr) if (image.exists() && swinfo != nullptr)
{ {
image_loaded = true; image_loaded = true;
for (size_t current = 0; current < m_list.size(); current++) for (auto current = m_list.begin(); current != m_list.end(); ++current)
if (m_list[current].shortname == swinfo->shortname() && if (current->second.shortname == swinfo->shortname() &&
m_list[current].listname == image.software_list_name()) current->second.listname == image.software_list_name())
{ {
m_current = current; m_current = current;
return true; return true;
@ -288,7 +294,7 @@ bool favorite_manager::isgame_favorite()
if (!image_loaded) if (!image_loaded)
return isgame_favorite(&machine().system()); return isgame_favorite(&machine().system());
m_current = -1; m_current = m_list.begin();
return false; return false;
} }
@ -298,14 +304,14 @@ bool favorite_manager::isgame_favorite()
bool favorite_manager::isgame_favorite(const game_driver *driver) bool favorite_manager::isgame_favorite(const game_driver *driver)
{ {
for (size_t x = 0; x < m_list.size(); x++) for (auto current = m_list.begin(); current != m_list.end(); ++current)
if (m_list[x].driver == driver && m_list[x].shortname == driver->name) if (current->second.driver == driver && current->second.shortname == driver->name)
{ {
m_current = x; m_current = current;
return true; return true;
} }
m_current = -1; m_current = m_list.begin();
return false; return false;
} }
@ -315,14 +321,14 @@ bool favorite_manager::isgame_favorite(const game_driver *driver)
bool favorite_manager::isgame_favorite(ui_software_info const &swinfo) bool favorite_manager::isgame_favorite(ui_software_info const &swinfo)
{ {
for (size_t x = 0; x < m_list.size(); x++) for (auto current = m_list.begin(); current != m_list.end(); ++current)
if (m_list[x] == swinfo) if (current->second == swinfo)
{ {
m_current = x; m_current = current;
return true; return true;
} }
m_current = -1; m_current = m_list.begin();
return false; return false;
} }
@ -378,7 +384,7 @@ void favorite_manager::parse_favorite()
tmpmatches.devicetype = chartrimcarriage(readbuf); tmpmatches.devicetype = chartrimcarriage(readbuf);
file.gets(readbuf, 1024); file.gets(readbuf, 1024);
tmpmatches.available = atoi(readbuf); tmpmatches.available = atoi(readbuf);
m_list.push_back(tmpmatches); m_list.emplace(tmpmatches.longname, tmpmatches);
} }
file.close(); file.close();
} }
@ -404,8 +410,9 @@ void favorite_manager::save_favorite_games()
// generate the favorite INI // generate the favorite INI
std::ostringstream text; std::ostringstream text;
text << "[ROOT_FOLDER]\n[Favorite]\n\n"; text << "[ROOT_FOLDER]\n[Favorite]\n\n";
for (auto & elem : m_list) for (auto & e : m_list)
{ {
auto elem = e.second;
text << elem.shortname << '\n'; text << elem.shortname << '\n';
text << elem.longname << '\n'; text << elem.longname << '\n';
text << elem.parentname << '\n'; text << elem.parentname << '\n';

View File

@ -83,8 +83,17 @@ public:
// construction/destruction // construction/destruction
favorite_manager(running_machine &machine, ui_options &moptions); favorite_manager(running_machine &machine, ui_options &moptions);
// favorites comparator
struct ci_less
{
bool operator() (const std::string &s1, const std::string &s2) const
{
return (core_stricmp(s1.c_str(), s2.c_str()) < 0);
}
};
// favorite indices // favorite indices
std::vector<ui_software_info> m_list; std::multimap<std::string, ui_software_info, ci_less> m_list;
// getters // getters
running_machine &machine() const { return m_machine; } running_machine &machine() const { return m_machine; }
@ -110,7 +119,7 @@ private:
const char *favorite_filename = "favorites.ini"; const char *favorite_filename = "favorites.ini";
// current // current
int m_current; std::multimap<std::string, ui_software_info>::iterator m_current;
// parse file ui_favorite // parse file ui_favorite
void parse_favorite(); void parse_favorite();

View File

@ -681,6 +681,7 @@ menu_machine_configure::menu_machine_configure(mame_ui_manager &mui, render_cont
, x0(_x0) , x0(_x0)
, y0(_y0) , y0(_y0)
, m_curbios(0) , m_curbios(0)
, m_fav_reset(false)
{ {
// parse the INI file // parse the INI file
std::string error; std::string error;
@ -690,6 +691,8 @@ menu_machine_configure::menu_machine_configure(mame_ui_manager &mui, render_cont
menu_machine_configure::~menu_machine_configure() menu_machine_configure::~menu_machine_configure()
{ {
if (m_fav_reset)
reset_topmost(reset_options::SELECT_FIRST);
} }
//------------------------------------------------- //-------------------------------------------------
@ -724,10 +727,15 @@ void menu_machine_configure::handle()
mame_machine_manager::instance()->favorite().add_favorite_game(m_drv); mame_machine_manager::instance()->favorite().add_favorite_game(m_drv);
reset(reset_options::REMEMBER_POSITION); reset(reset_options::REMEMBER_POSITION);
break; break;
case DELFAV: case DELFAV:
mame_machine_manager::instance()->favorite().remove_favorite_game(); mame_machine_manager::instance()->favorite().remove_favorite_game();
reset(reset_options::REMEMBER_POSITION); if (main_filters::actual == FILTER_FAVORITE)
{
m_fav_reset = true;
menu::stack_pop();
}
else
reset(reset_options::REMEMBER_POSITION);
break; break;
case CONTROLLER: case CONTROLLER:
if (menu_event->iptkey == IPT_UI_SELECT) if (menu_event->iptkey == IPT_UI_SELECT)

View File

@ -165,6 +165,7 @@ private:
s_bios m_bios; s_bios m_bios;
std::size_t m_curbios; std::size_t m_curbios;
void setup_bios(); void setup_bios();
bool m_fav_reset;
}; };
//------------------------------------------------- //-------------------------------------------------

View File

@ -549,36 +549,37 @@ void menu_select_game::populate()
} }
} }
} }
// populate favorites list
else else
{ {
// populate favorites list
m_search[0] = '\0'; m_search[0] = '\0';
int curitem = 0; int curitem = 0;
// iterate over entries // iterate over entries
for (auto & mfavorite : mame_machine_manager::instance()->favorite().m_list) for (auto & favmap : mame_machine_manager::instance()->favorite().m_list)
{ {
auto flags = flags_ui | FLAG_UI_FAVORITE; auto flags = flags_ui | FLAG_UI_FAVORITE;
if (mfavorite.startempty == 1) if (favmap.second.startempty == 1)
{ {
if (old_item_selected == -1 && mfavorite.shortname == reselect_last::driver) if (old_item_selected == -1 && favmap.second.shortname == reselect_last::driver)
old_item_selected = curitem; old_item_selected = curitem;
bool cloneof = strcmp(mfavorite.driver->parent, "0"); bool cloneof = strcmp(favmap.second.driver->parent, "0");
if (cloneof) if (cloneof)
{ {
int cx = driver_list::find(mfavorite.driver->parent); int cx = driver_list::find(favmap.second.driver->parent);
if (cx != -1 && ((driver_list::driver(cx).flags & MACHINE_IS_BIOS_ROOT) != 0)) if (cx != -1 && ((driver_list::driver(cx).flags & MACHINE_IS_BIOS_ROOT) != 0))
cloneof = false; cloneof = false;
} }
item_append(mfavorite.longname, "", (cloneof) ? (flags | FLAG_INVERT) : flags, (void *)&mfavorite); item_append(favmap.second.longname, "", (cloneof) ? (flags | FLAG_INVERT) : flags, (void *)&favmap.second);
} }
else else
{ {
if (old_item_selected == -1 && mfavorite.shortname == reselect_last::driver) if (old_item_selected == -1 && favmap.second.shortname == reselect_last::driver)
old_item_selected = curitem; old_item_selected = curitem;
item_append(mfavorite.longname, mfavorite.devicetype, item_append(favmap.second.longname, favmap.second.devicetype,
mfavorite.parentname.empty() ? flags : (FLAG_INVERT | flags), (void *)&mfavorite); favmap.second.parentname.empty() ? flags : (FLAG_INVERT | flags), (void *)&favmap.second);
} }
curitem++; curitem++;
} }
@ -993,9 +994,6 @@ void menu_select_game::inkey_special(const event *menu_event)
void menu_select_game::build_list(const char *filter_text, int filter, bool bioscheck, std::vector<const game_driver *> s_drivers) void menu_select_game::build_list(const char *filter_text, int filter, bool bioscheck, std::vector<const game_driver *> s_drivers)
{ {
int cx = 0;
bool cloneof = false;
if (s_drivers.empty()) if (s_drivers.empty())
{ {
filter = main_filters::actual; filter = main_filters::actual;
@ -1037,20 +1035,21 @@ void menu_select_game::build_list(const char *filter_text, int filter, bool bios
case FILTER_PARENT: case FILTER_PARENT:
case FILTER_CLONES: case FILTER_CLONES:
cloneof = strcmp(s_driver->parent, "0");
if (cloneof)
{ {
cx = driver_list::find(s_driver->parent); bool cloneof = strcmp(s_driver->parent, "0");
if (cx != -1 && ((driver_list::driver(cx).flags & MACHINE_IS_BIOS_ROOT) != 0)) if (cloneof)
cloneof = false; {
auto cx = driver_list::find(s_driver->parent);
if (cx != -1 && ((driver_list::driver(cx).flags & MACHINE_IS_BIOS_ROOT) != 0))
cloneof = false;
}
if (filter == FILTER_CLONES && cloneof)
m_displaylist.push_back(s_driver);
else if (filter == FILTER_PARENT && !cloneof)
m_displaylist.push_back(s_driver);
} }
if (filter == FILTER_CLONES && cloneof)
m_displaylist.push_back(s_driver);
else if (filter == FILTER_PARENT && !cloneof)
m_displaylist.push_back(s_driver);
break; break;
case FILTER_NOT_WORKING: case FILTER_NOT_WORKING:
if (s_driver->flags & MACHINE_NOT_WORKING) if (s_driver->flags & MACHINE_NOT_WORKING)
m_displaylist.push_back(s_driver); m_displaylist.push_back(s_driver);
@ -1417,11 +1416,10 @@ bool menu_select_game::load_available_machines()
file.gets(rbuf, MAX_CHAR_INFO); file.gets(rbuf, MAX_CHAR_INFO);
file.gets(rbuf, MAX_CHAR_INFO); file.gets(rbuf, MAX_CHAR_INFO);
int avsize = 0, unavsize = 0;
file.gets(rbuf, MAX_CHAR_INFO); file.gets(rbuf, MAX_CHAR_INFO);
avsize = atoi(rbuf); auto avsize = atoi(rbuf);
file.gets(rbuf, MAX_CHAR_INFO); file.gets(rbuf, MAX_CHAR_INFO);
unavsize = atoi(rbuf); auto unavsize = atoi(rbuf);
// load available list // load available list
for (int x = 0; x < avsize; ++x) for (int x = 0; x < avsize; ++x)

View File

@ -37,16 +37,19 @@ const char *jvc_format::extensions() const
bool jvc_format::parse_header(io_generic *io, int &header_size, int &tracks, int &heads, int &sectors, int &sector_size, int &base_sector_id) bool jvc_format::parse_header(io_generic *io, int &header_size, int &tracks, int &heads, int &sectors, int &sector_size, int &base_sector_id)
{ {
// The JVC format has a header whose size is the size of the image modulo 256. Currently, we only
// handle up to five header bytes
UINT64 size = io_generic_size(io); UINT64 size = io_generic_size(io);
header_size = size % 256; header_size = size % 256;
UINT8 header[5]; UINT8 header[5];
// if we know that this is a header of a bad size, we can fail
// immediately; otherwise read the header
if (header_size >= sizeof(header))
return false;
if (header_size > 0) if (header_size > 0)
io_generic_read(io, header, 0, header_size); io_generic_read(io, header, 0, header_size);
if (header_size > 5)
return false;
// default values // default values
heads = 1; heads = 1;
sectors = 18; sectors = 18;

View File

@ -133,7 +133,7 @@ public:
READ32_MEMBER(astrafr_state::astrafr_mem_r) READ32_MEMBER(astrafr_state::astrafr_mem_r)
{ {
int pc = space.device().safe_pc(); int pc = space.device().safe_pc();
int cs = m68340_get_cs(m_maincpu, offset * 4); int cs = m_maincpu->get_cs(offset * 4);
switch ( cs ) switch ( cs )
{ {
@ -161,7 +161,7 @@ WRITE32_MEMBER(astrafr_state::astrafr_mem_w)
{ {
int pc = space.device().safe_pc(); int pc = space.device().safe_pc();
int address = offset * 4; int address = offset * 4;
int cs = m68340_get_cs(m_maincpu, address); int cs = m_maincpu->get_cs(address);
switch ( cs ) switch ( cs )
@ -190,7 +190,7 @@ WRITE32_MEMBER(astrafr_state::astrafr_mem_w)
READ32_MEMBER(astrafr_state::astrafr_slave_mem_r) READ32_MEMBER(astrafr_state::astrafr_slave_mem_r)
{ {
int pc = space.device().safe_pc(); int pc = space.device().safe_pc();
int cs = m68340_get_cs(m_slavecpu, offset * 4); int cs = m_slavecpu->get_cs(offset * 4);
switch ( cs ) switch ( cs )
{ {
@ -216,7 +216,7 @@ WRITE32_MEMBER(astrafr_state::astrafr_slave_mem_w)
{ {
int pc = space.device().safe_pc(); int pc = space.device().safe_pc();
int address = offset * 4; int address = offset * 4;
int cs = m68340_get_cs(m_slavecpu, address); int cs = m_slavecpu->get_cs(address);
switch ( cs ) switch ( cs )

View File

@ -624,7 +624,7 @@ ADDRESS_MAP_END
READ32_MEMBER(sc4_adder4_state::adder4_mem_r) READ32_MEMBER(sc4_adder4_state::adder4_mem_r)
{ {
int pc = space.device().safe_pc(); int pc = space.device().safe_pc();
int cs = m68340_get_cs(m_adder4cpu, offset * 4); int cs = m_adder4cpu->get_cs(offset * 4);
switch ( cs ) switch ( cs )
{ {
@ -646,7 +646,7 @@ READ32_MEMBER(sc4_adder4_state::adder4_mem_r)
WRITE32_MEMBER(sc4_adder4_state::adder4_mem_w) WRITE32_MEMBER(sc4_adder4_state::adder4_mem_w)
{ {
int pc = space.device().safe_pc(); int pc = space.device().safe_pc();
int cs = m68340_get_cs(m_adder4cpu, offset * 4); int cs = m_adder4cpu->get_cs(offset * 4);
switch ( cs ) switch ( cs )
{ {

View File

@ -136,7 +136,7 @@ protected:
READ32_MEMBER(bfm_swp_state::bfm_swp_mem_r) READ32_MEMBER(bfm_swp_state::bfm_swp_mem_r)
{ {
int pc = space.device().safe_pc(); int pc = space.device().safe_pc();
int cs = m68340_get_cs(m_maincpu, offset * 4); int cs = m_maincpu->get_cs(offset * 4);
switch ( cs ) switch ( cs )
{ {
@ -158,7 +158,7 @@ READ32_MEMBER(bfm_swp_state::bfm_swp_mem_r)
WRITE32_MEMBER(bfm_swp_state::bfm_swp_mem_w) WRITE32_MEMBER(bfm_swp_state::bfm_swp_mem_w)
{ {
int pc = space.device().safe_pc(); int pc = space.device().safe_pc();
int cs = m68340_get_cs(m_maincpu, offset * 4); int cs = m_maincpu->get_cs(offset * 4);
switch ( cs ) switch ( cs )
{ {

View File

@ -6,7 +6,6 @@
TODO: TODO:
- figure out why chessmsta won't work, for starters it assume z80 carry flag is set at poweron? - figure out why chessmsta won't work, for starters it assume z80 carry flag is set at poweron?
- a better artwork
****************************************************************************/ ****************************************************************************/
@ -14,8 +13,15 @@
#include "emu.h" #include "emu.h"
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
#include "machine/z80pio.h" #include "machine/z80pio.h"
#include "machine/clock.h"
#include "sound/speaker.h" #include "sound/speaker.h"
#include "sound/beep.h"
#include "chessmst.lh" #include "chessmst.lh"
#include "chessmstdm.lh"
#include "bus/generic/slot.h"
#include "bus/generic/carts.h"
class chessmst_state : public driver_device class chessmst_state : public driver_device
{ {
@ -23,24 +29,40 @@ public:
chessmst_state(const machine_config &mconfig, device_type type, const char *tag) chessmst_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag), : driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_speaker(*this, "speaker") m_pia2(*this, "z80pio2"),
m_speaker(*this, "speaker"),
m_beeper(*this, "beeper"),
m_extra(*this, "EXTRA")
{ } { }
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<speaker_sound_device> m_speaker; required_device<z80pio_device> m_pia2;
optional_device<speaker_sound_device> m_speaker;
optional_device<beep_device> m_beeper;
required_ioport m_extra;
UINT16 m_matrix; UINT16 m_matrix;
UINT16 m_led_sel; UINT16 m_led_sel;
UINT8 m_sensor[64]; UINT8 m_sensor[64];
UINT8 m_digit_matrix;
int m_digit_dot;
UINT16 m_digit;
virtual void machine_reset() override; virtual void machine_reset() override;
DECLARE_WRITE8_MEMBER( digits_w );
DECLARE_WRITE8_MEMBER( pio1_port_a_w ); DECLARE_WRITE8_MEMBER( pio1_port_a_w );
DECLARE_WRITE8_MEMBER( pio1_port_b_w ); DECLARE_WRITE8_MEMBER( pio1_port_b_w );
DECLARE_WRITE8_MEMBER( pio1_port_b_dm_w );
DECLARE_READ8_MEMBER( pio2_port_a_r ); DECLARE_READ8_MEMBER( pio2_port_a_r );
DECLARE_WRITE8_MEMBER( pio2_port_b_w ); DECLARE_WRITE8_MEMBER( pio2_port_b_w );
DECLARE_INPUT_CHANGED_MEMBER(chessmst_sensor); DECLARE_INPUT_CHANGED_MEMBER(chessmst_sensor);
DECLARE_INPUT_CHANGED_MEMBER(reset_button); DECLARE_INPUT_CHANGED_MEMBER(reset_button);
DECLARE_INPUT_CHANGED_MEMBER(view_monitor_button);
DECLARE_WRITE_LINE_MEMBER( timer_555_w );
private:
void update_display();
}; };
@ -51,6 +73,13 @@ static ADDRESS_MAP_START(chessmst_mem, AS_PROGRAM, 8, chessmst_state)
AM_RANGE( 0x3400, 0x3bff ) AM_RAM AM_RANGE( 0x3400, 0x3bff ) AM_RAM
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START(chessmstdm, AS_PROGRAM, 8, chessmst_state)
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE( 0x0000, 0x3fff ) AM_ROM
AM_RANGE( 0x4000, 0x7fff ) AM_DEVREAD("cartslot", generic_slot_device, read_rom)
AM_RANGE( 0x8000, 0x8bff ) AM_RAM
ADDRESS_MAP_END
static ADDRESS_MAP_START( chessmst_io , AS_IO, 8, chessmst_state) static ADDRESS_MAP_START( chessmst_io , AS_IO, 8, chessmst_state)
ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0xff) ADDRESS_MAP_GLOBAL_MASK(0xff)
@ -59,9 +88,31 @@ static ADDRESS_MAP_START( chessmst_io , AS_IO, 8, chessmst_state)
AM_RANGE(0x08, 0x0b) AM_MIRROR(0xf0) AM_DEVREADWRITE("z80pio2", z80pio_device, read, write) AM_RANGE(0x08, 0x0b) AM_MIRROR(0xf0) AM_DEVREADWRITE("z80pio2", z80pio_device, read, write)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( chessmstdm_io , AS_IO, 8, chessmst_state)
AM_IMPORT_FROM(chessmst_io)
AM_RANGE(0x4c, 0x4c) AM_WRITE(digits_w)
ADDRESS_MAP_END
WRITE_LINE_MEMBER( chessmst_state::timer_555_w )
{
m_pia2->strobe_b(state);
m_pia2->data_b_write(m_matrix);
}
INPUT_CHANGED_MEMBER(chessmst_state::reset_button) INPUT_CHANGED_MEMBER(chessmst_state::reset_button)
{ {
m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE); m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE);
machine_reset();
}
INPUT_CHANGED_MEMBER(chessmst_state::view_monitor_button)
{
// pressing both VIEW and MONITOR buttons causes a reset
if ((m_extra->read() & 0x03) == 0x03)
{
m_maincpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE);
machine_reset();
}
} }
INPUT_CHANGED_MEMBER(chessmst_state::chessmst_sensor) INPUT_CHANGED_MEMBER(chessmst_state::chessmst_sensor)
@ -77,93 +128,112 @@ INPUT_CHANGED_MEMBER(chessmst_state::chessmst_sensor)
/* Input ports */ /* Input ports */
static INPUT_PORTS_START( chessmst ) static INPUT_PORTS_START( chessmst )
PORT_START("COL_A") PORT_START("COL_A")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 0) PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 0)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 1) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 1)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 2) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 2)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 3) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 3)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 4) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 4)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 5) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 5)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 6) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 6)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 7) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 7)
PORT_START("COL_B") PORT_START("COL_B")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 8) PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 8)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 9) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 9)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 10) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 10)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 11) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 11)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 12) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 12)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 13) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 13)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 14) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 14)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 15) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 15)
PORT_START("COL_C") PORT_START("COL_C")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 16) PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 16)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 17) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 17)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 18) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 18)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 19) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 19)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 20) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 20)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 21) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 21)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 22) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 22)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 23) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 23)
PORT_START("COL_D") PORT_START("COL_D")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 24) PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 24)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 25) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 25)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 26) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 26)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 27) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 27)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 28) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 28)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 29) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 29)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 30) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 30)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 31) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 31)
PORT_START("COL_E") PORT_START("COL_E")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 32) PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 32)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 33) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 33)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 34) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 34)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 35) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 35)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 36) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 36)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 37) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 37)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 38) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 38)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 39) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 39)
PORT_START("COL_F") PORT_START("COL_F")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 40) PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 40)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 41) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 41)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 42) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 42)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 43) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 43)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 44) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 44)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 45) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 45)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 46) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 46)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 47) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 47)
PORT_START("COL_G") PORT_START("COL_G")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 48) PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 48)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 49) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 49)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 50) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 50)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 51) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 51)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 52) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 52)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 53) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 53)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 54) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 54)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 55) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 55)
PORT_START("COL_H") PORT_START("COL_H")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 56) PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 56)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 57) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 57)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 58) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 58)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 59) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 59)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 60) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 60)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 61) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 61)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 62) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 62)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 63) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 63)
PORT_START("BUTTONS") PORT_START("BUTTONS")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Hint [7]") PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_H) PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Hint [7]") PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_H)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Random [6]") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_R) PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Random [6]") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_R)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Referee [5]") PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_F) PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Referee [5]") PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_F)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Selfplay [4]") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_S) PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Selfplay [4]") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_S)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board [3]") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_B) PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board [3]") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_B)
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Color [2]") PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_C) PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Color [2]") PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_C)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Level [1]") PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_L) PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Level [1]") PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_L)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("New Game [0]") PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_ENTER) PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("New Game [0]") PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_ENTER)
PORT_START("EXTRA") PORT_START("EXTRA")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Halt") PORT_CODE(KEYCODE_F2) PORT_WRITE_LINE_DEVICE_MEMBER("z80pio1", z80pio_device, strobe_a) // -> PIO(1) ASTB pin PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Halt") PORT_CODE(KEYCODE_F2) PORT_WRITE_LINE_DEVICE_MEMBER("z80pio1", z80pio_device, strobe_a) // -> PIO(1) ASTB pin
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Reset") PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, reset_button, 0) // -> Z80 RESET pin PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Reset") PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, reset_button, 0) // -> Z80 RESET pin
INPUT_PORTS_END INPUT_PORTS_END
static INPUT_PORTS_START( chessmstdm )
PORT_INCLUDE(chessmst)
PORT_MODIFY("BUTTONS")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Move Fore") PORT_CODE(KEYCODE_RIGHT)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Move Back") PORT_CODE(KEYCODE_LEFT)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Board") PORT_CODE(KEYCODE_B)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Match / Time") PORT_CODE(KEYCODE_M)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Parameter / Information") PORT_CODE(KEYCODE_I)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Selection / Dialogue") PORT_CODE(KEYCODE_S)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Function / Notation") PORT_CODE(KEYCODE_F)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER)
PORT_MODIFY("EXTRA")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Monitor") PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, view_monitor_button, 0)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("View") PORT_CODE(KEYCODE_F2) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, view_monitor_button, 0)
INPUT_PORTS_END
void chessmst_state::machine_reset() void chessmst_state::machine_reset()
{ {
//reset all sensors //reset all sensors
@ -174,6 +244,23 @@ void chessmst_state::machine_reset()
m_sensor[i+0] = m_sensor[i+1] = m_sensor[i+6] = m_sensor[i+7] = 0; m_sensor[i+0] = m_sensor[i+1] = m_sensor[i+6] = m_sensor[i+7] = 0;
} }
void chessmst_state::update_display()
{
for(int i=0; i<4; i++)
{
if (BIT(m_digit_matrix, i))
output().set_indexed_value("digit", i, BITSWAP16(m_digit, 3,5,12,10,14,1,2,13,8,6,11,15,7,9,4,0) | (m_digit_dot << 16));
}
}
WRITE8_MEMBER( chessmst_state::digits_w )
{
m_digit = (m_digit << 4) | (data & 0x0f);
m_digit_matrix = (data >> 4) & 0x0f;
update_display();
}
WRITE8_MEMBER( chessmst_state::pio1_port_a_w ) WRITE8_MEMBER( chessmst_state::pio1_port_a_w )
{ {
for (int row=1; row<=8; row++) for (int row=1; row<=8; row++)
@ -211,6 +298,20 @@ WRITE8_MEMBER( chessmst_state::pio1_port_b_w )
m_speaker->level_w(BIT(data, 6)); m_speaker->level_w(BIT(data, 6));
} }
WRITE8_MEMBER( chessmst_state::pio1_port_b_dm_w )
{
m_matrix = (m_matrix & 0xff) | ((data & 0x04)<<6);
m_digit_dot = BIT(data, 4);
if (m_digit_dot)
update_display();
m_beeper->set_state(BIT(data, 3));
output().set_value("monitor_led", !BIT(data, 5));
output().set_value("playmode_led", !BIT(data, 6));
}
READ8_MEMBER( chessmst_state::pio2_port_a_r ) READ8_MEMBER( chessmst_state::pio2_port_a_r )
{ {
UINT8 data = 0x00; UINT8 data = 0x00;
@ -218,24 +319,11 @@ READ8_MEMBER( chessmst_state::pio2_port_a_r )
// The pieces position on the chessboard is identified by 64 Hall // The pieces position on the chessboard is identified by 64 Hall
// sensors, which are in a 8x8 matrix with the corresponding LEDs. // sensors, which are in a 8x8 matrix with the corresponding LEDs.
for (int i=0; i<8; i++) for (int i=0; i<8; i++)
{ for (int j=0; j<8; j++)
if (m_matrix & 0x01) {
data |= (m_sensor[0+i] ? (1<<i) : 0); if (m_matrix & (1 << j))
if (m_matrix & 0x02) data |= (m_sensor[j * 8 + i] ? (1 << i) : 0);
data |= (m_sensor[8+i] ? (1<<i) : 0); }
if (m_matrix & 0x04)
data |= (m_sensor[16+i] ? (1<<i) : 0);
if (m_matrix & 0x08)
data |= (m_sensor[24+i] ? (1<<i) : 0);
if (m_matrix & 0x10)
data |= (m_sensor[32+i] ? (1<<i) : 0);
if (m_matrix & 0x20)
data |= (m_sensor[40+i] ? (1<<i) : 0);
if (m_matrix & 0x40)
data |= (m_sensor[48+i] ? (1<<i) : 0);
if (m_matrix & 0x80)
data |= (m_sensor[56+i] ? (1<<i) : 0);
}
if (m_matrix & 0x100) if (m_matrix & 0x100)
data |= ioport("BUTTONS")->read(); data |= ioport("BUTTONS")->read();
@ -255,6 +343,12 @@ static const z80_daisy_config chessmst_daisy_chain[] =
{ nullptr } { nullptr }
}; };
static const z80_daisy_config chessmstdm_daisy_chain[] =
{
{ "z80pio2" },
{ nullptr }
};
static MACHINE_CONFIG_START( chessmst, chessmst_state ) static MACHINE_CONFIG_START( chessmst, chessmst_state )
/* basic machine hardware */ /* basic machine hardware */
@ -305,10 +399,42 @@ static MACHINE_CONFIG_START( chessmsta, chessmst_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_START( chessmstdm, chessmst_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_8MHz/2) // U880 Z80 clone
MCFG_CPU_PROGRAM_MAP(chessmstdm)
MCFG_CPU_IO_MAP(chessmstdm_io)
MCFG_Z80_DAISY_CHAIN(chessmstdm_daisy_chain)
MCFG_DEVICE_ADD("z80pio1", Z80PIO, XTAL_8MHz/4)
MCFG_Z80PIO_OUT_PA_CB(WRITE8(chessmst_state, pio1_port_a_w))
MCFG_Z80PIO_OUT_PB_CB(WRITE8(chessmst_state, pio1_port_b_dm_w))
MCFG_Z80PIO_IN_PB_CB(IOPORT("EXTRA"))
MCFG_DEVICE_ADD("z80pio2", Z80PIO, XTAL_8MHz/4)
MCFG_Z80PIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
MCFG_Z80PIO_IN_PA_CB(READ8(chessmst_state, pio2_port_a_r))
MCFG_Z80PIO_OUT_PB_CB(WRITE8(chessmst_state, pio2_port_b_w))
MCFG_DEFAULT_LAYOUT(layout_chessmstdm)
MCFG_DEVICE_ADD("555_timer", CLOCK, 500) // from 555 timer
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(chessmst_state, timer_555_w))
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("beeper", BEEP, 1000)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "chessmstdm_cart")
MCFG_SOFTWARE_LIST_ADD("cart_list", "chessmstdm")
MACHINE_CONFIG_END
/* ROM definition */ /* ROM definition */
ROM_START( chessmst ) ROM_START( chessmst )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) ROM_REGION( 0x2800, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "056.bin", 0x0000, 0x0400, CRC(2b90e5d3) SHA1(c47445964b2e6cb11bd1f27e395cf980c97af196) ) ROM_LOAD( "056.bin", 0x0000, 0x0400, CRC(2b90e5d3) SHA1(c47445964b2e6cb11bd1f27e395cf980c97af196) )
ROM_LOAD( "057.bin", 0x0400, 0x0400, CRC(e666fc56) SHA1(3fa75b82cead81973bea94191a5c35f0acaaa0e6) ) ROM_LOAD( "057.bin", 0x0400, 0x0400, CRC(e666fc56) SHA1(3fa75b82cead81973bea94191a5c35f0acaaa0e6) )
ROM_LOAD( "058.bin", 0x0800, 0x0400, CRC(6a17fbec) SHA1(019051e93a5114477c50eaa87e1ff01b02eb404d) ) ROM_LOAD( "058.bin", 0x0800, 0x0400, CRC(6a17fbec) SHA1(019051e93a5114477c50eaa87e1ff01b02eb404d) )
@ -322,14 +448,20 @@ ROM_START( chessmst )
ROM_END ROM_END
ROM_START( chessmsta ) ROM_START( chessmsta )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) ROM_REGION( 0x2800, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "2764.bin", 0x0000, 0x2000, CRC(6be28876) SHA1(fd7d77b471e7792aef3b2b3f7ff1de4cdafc94c9) ) ROM_LOAD( "2764.bin", 0x0000, 0x2000, CRC(6be28876) SHA1(fd7d77b471e7792aef3b2b3f7ff1de4cdafc94c9) )
ROM_LOAD( "u2616bm108.bin", 0x2000, 0x0800, CRC(6e69ace3) SHA1(e099b6b6cc505092f64b8d51ab9c70aa64f58f70) ) ROM_LOAD( "u2616bm108.bin", 0x2000, 0x0800, CRC(6e69ace3) SHA1(e099b6b6cc505092f64b8d51ab9c70aa64f58f70) )
ROM_END ROM_END
ROM_START( chessmstdm )
ROM_REGION( 0x4000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD("CMD_bm002_bm201.bin", 0x0000, 0x4000, CRC(47858079) SHA1(eeae1126b514e4853d056690e72e7f5c6dfb3008))
ROM_END
/* Driver */ /* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */ /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */
COMP( 1984, chessmst, 0, 0, chessmst, chessmst, driver_device, 0, "VEB Mikroelektronik Erfurt", "Chess-Master (set 1)", MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) COMP( 1984, chessmst, 0, 0, chessmst, chessmst, driver_device, 0, "VEB Mikroelektronik Erfurt", "Chess-Master (set 1)", MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK )
COMP( 1984, chessmsta, chessmst, 0, chessmsta, chessmst, driver_device, 0, "VEB Mikroelektronik Erfurt", "Chess-Master (set 2)", MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) COMP( 1984, chessmsta, chessmst, 0, chessmsta, chessmst, driver_device, 0, "VEB Mikroelektronik Erfurt", "Chess-Master (set 2)", MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK )
COMP( 1987, chessmstdm,0, 0, chessmstdm, chessmstdm, driver_device, 0, "VEB Mikroelektronik Erfurt", "Chess-Master Diamond", MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK )

View File

@ -582,6 +582,29 @@ ROM_START( airtrix )
ROM_PARAMETER( ":rom_board:segam2crypt:key", "291b02c7" ) ROM_PARAMETER( ":rom_board:segam2crypt:key", "291b02c7" )
ROM_END ROM_END
ROM_START( airtrixo )
ROM_REGION( 0x200000, "maincpu", 0)
HIKARU_BIOS
ROM_REGION( 0x800000, "user1", 0)
ROM_LOAD32_WORD( "epr-23601.ic29", 0x0000000, 0x0400000, CRC(e0c642cb) SHA1(f04f8e13cc46d462c79ecebcded7dee9b3500bdc) )
ROM_LOAD32_WORD( "epr-23602.ic30", 0x0000002, 0x0400000, CRC(fac11d21) SHA1(70b48a7e1ac4268fc09d96d6845c5a5099d4e301) )
/* ROM board using 128M TSOP48 MASKROMs */
ROM_REGION( 0x10000000, "user2", 0)
ROM_LOAD32_WORD( "mpr-23573.ic37" , 0x0000000, 0x1000000, CRC(e22a0734) SHA1(fc06d5972d285d09473874aaeb1efed2d19c8f36) )
ROM_LOAD32_WORD( "mpr-23577.ic38" , 0x0000002, 0x1000000, CRC(d007680d) SHA1(a795057c40b1851adb0e19e5dfb39e16206215bf) )
ROM_LOAD32_WORD( "mpr-23574.ic41" , 0x2000000, 0x1000000, CRC(a77034a5) SHA1(e6e8e2f747e7a972144436103741acfd7030fe84) )
ROM_LOAD32_WORD( "mpr-23578.ic42" , 0x2000002, 0x1000000, CRC(db612dd6) SHA1(e6813a1e16099094d67347027e058be582750ad7) )
ROM_LOAD32_WORD( "mpr-23575.ic45" , 0x4000000, 0x1000000, CRC(fe660f06) SHA1(73916f67d852df719fd65b1ed0f8b977c0c33390) )
ROM_LOAD32_WORD( "mpr-23579.ic46" , 0x4000002, 0x1000000, CRC(55e656d2) SHA1(5d0b26807cf915ab0ae5cc3a7c9dd6bec43da7b2) )
ROM_LOAD32_WORD( "mpr-23576.ic49" , 0x6000000, 0x1000000, CRC(c01e0329) SHA1(df1a3c83f338925d69912af56f675197e14e1793) )
ROM_LOAD32_WORD( "mpr-23580.ic50" , 0x6000002, 0x1000000, CRC(d260f39c) SHA1(e5cdf399defaaa7dbcee62f7ab64b898c28d8f7d) )
// 834-14149 2000 317-0294-COM Hikaru
ROM_PARAMETER( ":rom_board:segam2crypt:key", "291b02c7" )
ROM_END
ROM_START( pharrier ) ROM_START( pharrier )
ROM_REGION( 0x200000, "maincpu", 0) ROM_REGION( 0x200000, "maincpu", 0)
@ -749,9 +772,43 @@ ROM_START( sgnascar )
ROM_PARAMETER( ":rom_board:key", "56dedf33" ) ROM_PARAMETER( ":rom_board:key", "56dedf33" )
ROM_END ROM_END
ROM_START( sgnascaro )
ROM_REGION( 0x200000, "maincpu", 0)
HIKARU_BIOS
ROM_REGION( 0x2000000, "user1", 0)
ROM_LOAD32_WORD( "epr-23485.ic35", 0x000000, 0x400000, CRC(13b44fbf) SHA1(73416fa7b671ec5c96f0b084a427ff701bf6c399) )
ROM_LOAD32_WORD( "epr-23486.ic36", 0x000002, 0x400000, CRC(ac3acd19) SHA1(1ec96be0bfceb2f1f808d78b07425d32056fbde0) )
/* ROM board using 128M TSOP48 MASKROMs */
ROM_REGION( 0x10000000, "user2", ROMREGION_ERASE00)
ROM_LOAD32_WORD( "mpr-23469.ic19", 0x0000000, 0x1000000, CRC(89cbad8d) SHA1(e4f103b96a3a842a90182172ddcf3bc5dfe6cca8) )
ROM_LOAD32_WORD( "mpr-23473.ic20", 0x0000002, 0x1000000, CRC(977b87d6) SHA1(079eeebc6f9c60d0a016a46386bbe846d8a354da) )
ROM_LOAD32_WORD( "mpr-23470.ic21", 0x2000000, 0x1000000, CRC(faf4940f) SHA1(72fee9ea5b78da260ed99ebe80ca6300f62cdbd7) )
ROM_LOAD32_WORD( "mpr-23474.ic22", 0x2000002, 0x1000000, CRC(faf69ac5) SHA1(875c748151bf0e9cd73d86384665414b2f7b6f5a) )
ROM_LOAD32_WORD( "mpr-23471.ic23", 0x4000000, 0x1000000, CRC(a3aad8ac) SHA1(afc8f3d1546e50afab4f540d59c87fe27cfb2cdd) )
ROM_LOAD32_WORD( "mpr-23475.ic24", 0x4000002, 0x1000000, CRC(5f51597c) SHA1(02c0a5d463714082b7ebb2bec4d0f88aff186f82) )
ROM_LOAD32_WORD( "mpr-23472.ic25", 0x6000000, 0x1000000, CRC(2495f678) SHA1(94b3160aabaea0596855c38ab1b63b16b20f2bae) )
ROM_LOAD32_WORD( "mpr-23476.ic26", 0x6000002, 0x1000000, CRC(927cf31c) SHA1(7cab22a4113d92080a52e1d235bf075ce95f985f) )
ROM_LOAD32_WORD( "mpr-23477.ic27", 0x8000000, 0x1000000, CRC(b4b7c477) SHA1(bcbfe081d509f0b87c6685b9b6617ae146987fe7) )
ROM_LOAD32_WORD( "mpr-23481.ic28", 0x8000002, 0x1000000, CRC(27b8eb7d) SHA1(087b1ed13a3e2a0dbda82c454243214784429d24) )
ROM_LOAD32_WORD( "mpr-23478.ic29", 0xa000000, 0x1000000, CRC(1fac431c) SHA1(2e3903c8cfd55d414555a1d23ba3a97c335991b3) )
ROM_LOAD32_WORD( "mpr-23482.ic30", 0xa000002, 0x1000000, CRC(2e9a0420) SHA1(376d5f0b8274d741a702dc08da50ea5679991740) )
ROM_LOAD32_WORD( "mpr-23479.ic31", 0xc000000, 0x1000000, CRC(9704e393) SHA1(0cb1403f4a268def3ce88db42e55d89ca913e2a0) )
ROM_LOAD32_WORD( "mpr-23483.ic32", 0xc000002, 0x1000000, CRC(c37adebe) SHA1(e84f6d2cc364c743f7f3b73d8c8d0271952bb093) )
ROM_LOAD32_WORD( "mpr-23480.ic33", 0xe000000, 0x1000000, CRC(f517b8b3) SHA1(c04740adb612473c4c9f8186e7e93d2f73d1bb1a) )
ROM_LOAD32_WORD( "mpr-23484.ic34", 0xe000002, 0x1000000, CRC(2ebe1aa1) SHA1(16b39f7422da1a334dde27169c2949e1d95bddb3) )
// 317-0283-COM Actel A54SX32
// ID 0x4252
ROM_PARAMETER( ":rom_board:key", "56dedf33" )
ROM_END
GAME( 2000, hikaru, 0, hikaru, hikaru, driver_device, 0, ROT0, "Sega", "Hikaru Bios", MACHINE_NO_SOUND|MACHINE_NOT_WORKING|MACHINE_IS_BIOS_ROOT ) GAME( 2000, hikaru, 0, hikaru, hikaru, driver_device, 0, ROT0, "Sega", "Hikaru Bios", MACHINE_NO_SOUND|MACHINE_NOT_WORKING|MACHINE_IS_BIOS_ROOT )
GAME( 1999, braveff, hikaru, hikaru, hikaru, driver_device, 0, ROT0, "Sega", "Brave Fire Fighters", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) GAME( 1999, braveff, hikaru, hikaru, hikaru, driver_device, 0, ROT0, "Sega", "Brave Fire Fighters", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
GAME( 2000, airtrix, hikaru, hikaru, hikaru, driver_device, 0, ROT0, "Sega", "Air Trix", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) GAME( 2000, airtrix, hikaru, hikaru, hikaru, driver_device, 0, ROT0, "Sega", "Air Trix (Rev A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
GAME( 2000, sgnascar, hikaru, hikaru, hikaru, driver_device, 0, ROT0, "Sega / Electronic Arts", "NASCAR Racing", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) GAME( 2000, airtrixo, airtrix, hikaru, hikaru, driver_device, 0, ROT0, "Sega", "Air Trix (original)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
GAME( 2001, pharrier, hikaru, hikaru, hikaru, driver_device, 0, ROT0, "Sega", "Planet Harriers", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) GAME( 2000, sgnascar, hikaru, hikaru, hikaru, driver_device, 0, ROT0, "Sega / Electronic Arts", "NASCAR Racing (Rev A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
GAME( 2000, sgnascaro,sgnascar, hikaru, hikaru, driver_device, 0, ROT0, "Sega / Electronic Arts", "NASCAR Racing (original)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
GAME( 2001, pharrier, hikaru, hikaru, hikaru, driver_device, 0, ROT0, "Sega", "Planet Harriers (Rev A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
GAME( 2001, podrace, hikaru, hikaru, hikaru, driver_device, 0, ROT0, "Sega", "Star Wars Pod Racer", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) GAME( 2001, podrace, hikaru, hikaru, hikaru, driver_device, 0, ROT0, "Sega", "Star Wars Pod Racer", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )

View File

@ -320,10 +320,11 @@ WRITE8_MEMBER(homedata_state::mrokumei_sound_io_w)
switch (offset & 0xff) switch (offset & 0xff)
{ {
case 0x40: case 0x40:
case 0x7f: // hourouki mirror
m_dac->write_signed8(data); m_dac->write_signed8(data);
break; break;
default: default:
logerror("%04x: I/O write to port %04x\n", space.device().safe_pc(), offset); logerror("%04x: I/O write to port %04x %02x\n", space.device().safe_pc(), offset,data);
break; break;
} }
} }
@ -557,8 +558,10 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( mrokumei_sound_map, AS_PROGRAM, 8, homedata_state ) static ADDRESS_MAP_START( mrokumei_sound_map, AS_PROGRAM, 8, homedata_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x0000, 0x7fff) AM_ROM
// TODO: might be that the entire area is sound_bank_w
AM_RANGE(0xfffc, 0xfffd) AM_WRITENOP /* stack writes happen here, but there's no RAM */ AM_RANGE(0xfffc, 0xfffd) AM_WRITENOP /* stack writes happen here, but there's no RAM */
AM_RANGE(0x8080, 0x8080) AM_WRITE(mrokumei_sound_bank_w) AM_RANGE(0x8080, 0x8080) AM_WRITE(mrokumei_sound_bank_w)
AM_RANGE(0xffbf, 0xffbf) AM_WRITE(mrokumei_sound_bank_w) // hourouki mirror
ADDRESS_MAP_END ADDRESS_MAP_END

View File

@ -14,8 +14,6 @@ Notes:
necessarily mean anything. necessarily mean anything.
TODO: TODO:
- Coin counters don't work correctly, because the register is overwritten by
other routines and the coin counter bits rapidly toggle between 0 and 1.
- running the sound CPU at the nominal clock rate, music stops working at the - running the sound CPU at the nominal clock rate, music stops working at the
beginning of the game. This is kludged by overclocking the sound CPU. This beginning of the game. This is kludged by overclocking the sound CPU. This
looks like a CPU communication timing issue however fiddling with the looks like a CPU communication timing issue however fiddling with the
@ -121,9 +119,14 @@ WRITE8_MEMBER(jackal_state::jackal_rambank_w)
if (data & 0x04) if (data & 0x04)
popmessage("jackal_rambank_w %02x", data); popmessage("jackal_rambank_w %02x", data);
machine().bookkeeping().coin_counter_w(0, data & 0x01); // all revisions flips the coin counter bit between 1 -> 0 five times, causing the bookkeeping to report 5 coins inserted.
machine().bookkeeping().coin_counter_w(1, data & 0x02); // most likely solution in HW is a f/f that disables coin counters when any of the other bits are enabled.
if((data & 0xfc) == 0)
{
machine().bookkeeping().coin_counter_w(0, data & 0x01);
machine().bookkeeping().coin_counter_w(1, data & 0x02);
}
m_spritebank = &rgn[((data & 0x08) << 13)]; m_spritebank = &rgn[((data & 0x08) << 13)];
m_rambank = &rgn[((data & 0x10) << 12)]; m_rambank = &rgn[((data & 0x10) << 12)];
membank("bank1")->set_entry((data & 0x20) ? 1 : 0); membank("bank1")->set_entry((data & 0x20) ? 1 : 0);

View File

@ -4038,12 +4038,12 @@ static MACHINE_CONFIG_START( gakusai, metro_state )
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_OKIM6295_ADD("oki", 2112000, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified MCFG_OKIM6295_ADD("oki", 2112000, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.25)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.25)
MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_3_579545MHz) MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_3_579545MHz)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.90) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 2.00)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.90) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 2.00)
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -4077,12 +4077,12 @@ static MACHINE_CONFIG_START( gakusai2, metro_state )
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_OKIM6295_ADD("oki", 2112000, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified MCFG_OKIM6295_ADD("oki", 2112000, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.25)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.25)
MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_3_579545MHz) MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_3_579545MHz)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.90) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 2.00)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.90) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 2.00)
MACHINE_CONFIG_END MACHINE_CONFIG_END

View File

@ -281,7 +281,7 @@ READ32_MEMBER(mpu5_state::mpu5_mem_r)
{ {
int pc = space.device().safe_pc(); int pc = space.device().safe_pc();
int addr = offset *4; int addr = offset *4;
int cs = m68340_get_cs(m_maincpu, addr); int cs = m_maincpu->get_cs(addr);
switch ( cs ) switch ( cs )
{ {
@ -477,7 +477,7 @@ WRITE32_MEMBER(mpu5_state::mpu5_mem_w)
{ {
int pc = space.device().safe_pc(); int pc = space.device().safe_pc();
int addr = offset *4; int addr = offset *4;
int cs = m68340_get_cs(m_maincpu, addr); int cs = m_maincpu->get_cs(addr);
switch ( cs ) switch ( cs )
{ {

View File

@ -9887,7 +9887,7 @@ GAME( 2003, puyofevp, naomi, naomim1, naomi, naomi_state, naomi, ROT0, "Sega", "
/* Atomiswave */ /* Atomiswave */
GAME( 2001, awbios, 0, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy", "Atomiswave Bios", GAME_FLAGS|MACHINE_IS_BIOS_ROOT ) GAME( 2001, awbios, 0, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy", "Atomiswave Bios", GAME_FLAGS|MACHINE_IS_BIOS_ROOT )
GAME( 2003, maxspeed, awbios, aw1c, aw1w, naomi_state, atomiswave, ROT0, "Sammy", "Maximum Speed", GAME_FLAGS ) GAME( 2003, maxspeed, awbios, aw1c, aw1w, naomi_state, atomiswave, ROT0, "SIMS / Sammy", "Maximum Speed", GAME_FLAGS )
GAME( 2003, sprtshot, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy USA", "Sports Shooting USA", GAME_FLAGS ) GAME( 2003, sprtshot, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy USA", "Sports Shooting USA", GAME_FLAGS )
GAME( 2003, ggx15, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Arc System Works / Sammy", "Guilty Gear X ver. 1.5", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND|MACHINE_NOT_WORKING ) GAME( 2003, ggx15, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Arc System Works / Sammy", "Guilty Gear X ver. 1.5", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND|MACHINE_NOT_WORKING )
GAME( 2003, demofist, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Polygon Magic / Dimps", "Demolish Fist", GAME_FLAGS ) GAME( 2003, demofist, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Polygon Magic / Dimps", "Demolish Fist", GAME_FLAGS )
@ -9898,10 +9898,10 @@ GAME( 2003, sushibar, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "S
GAME( 2004, dirtypig, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy", "Dirty Pigskin Football", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND|MACHINE_NOT_WORKING ) GAME( 2004, dirtypig, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy", "Dirty Pigskin Football", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND|MACHINE_NOT_WORKING )
GAME( 2004, rumblef, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy / Dimps", "The Rumble Fish", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND|MACHINE_NOT_WORKING ) GAME( 2004, rumblef, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy / Dimps", "The Rumble Fish", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND|MACHINE_NOT_WORKING )
GAME( 2004, rumblefp, rumblef, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy / Dimps", "The Rumble Fish (prototype)", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND|MACHINE_NOT_WORKING ) GAME( 2004, rumblefp, rumblef, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy / Dimps", "The Rumble Fish (prototype)", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND|MACHINE_NOT_WORKING )
GAME( 2004, rangrmsn, awbios, aw2c, aw1w, naomi_state, atomiswave, ROT0, "Sammy", "Ranger Mission", GAME_FLAGS ) GAME( 2004, rangrmsn, awbios, aw2c, aw1w, naomi_state, atomiswave, ROT0, "RIZ Inc./ Sammy", "Ranger Mission", GAME_FLAGS )
GAME( 2004, salmankt, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy", "Salary Man Kintarou", GAME_FLAGS ) GAME( 2004, salmankt, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Yuki Enterprise / Sammy", "Net Select: Salaryman Kintaro", GAME_FLAGS )
GAME( 2004, ftspeed, awbios, aw1c, aw1w, naomi_state, atomiswave, ROT0, "Sammy", "Faster Than Speed", GAME_FLAGS ) GAME( 2004, ftspeed, awbios, aw1c, aw1w, naomi_state, atomiswave, ROT0, "Sammy", "Faster Than Speed", GAME_FLAGS )
GAME( 2005, vfurlong, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy", "Net Select Keiba Victory Furlong", GAME_FLAGS ) GAME( 2005, vfurlong, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Progress / Sammy", "Net Select Horse Racing: Victory Furlong", GAME_FLAGS )
GAME( 2005, rumblef2, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy / Dimps", "The Rumble Fish 2", GAME_FLAGS ) GAME( 2005, rumblef2, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy / Dimps", "The Rumble Fish 2", GAME_FLAGS )
GAME( 2005, rumblf2p, rumblef2, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy / Dimps", "The Rumble Fish 2 (prototype)", GAME_FLAGS ) GAME( 2005, rumblf2p, rumblef2, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy / Dimps", "The Rumble Fish 2 (prototype)", GAME_FLAGS )
GAME( 2005, anmlbskt, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT270, "MOSS / Sammy", "Animal Basket", GAME_FLAGS ) GAME( 2005, anmlbskt, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT270, "MOSS / Sammy", "Animal Basket", GAME_FLAGS )

View File

@ -55,7 +55,6 @@ TODO:
- Hacha Mecha Fighter: mcu simulation is wrong/incorrect (see notes). - Hacha Mecha Fighter: mcu simulation is wrong/incorrect (see notes).
- Music timing in nouryoku is a little off.
- In Bioship, there's an occasional flicker of one of the sprites composing big - In Bioship, there's an occasional flicker of one of the sprites composing big
ships. Increasing CPU speed from 12 to 16 MHz improved it, but it's still not ships. Increasing CPU speed from 12 to 16 MHz improved it, but it's still not
100% fixed. (the CPU speed has been verified to be 10Mhz??) 100% fixed. (the CPU speed has been verified to be 10Mhz??)

View File

@ -206,7 +206,7 @@ public:
READ32_MEMBER(pluto5_state::pluto5_mem_r) READ32_MEMBER(pluto5_state::pluto5_mem_r)
{ {
int pc = space.device().safe_pc(); int pc = space.device().safe_pc();
int cs = m68340_get_cs(m_maincpu, offset * 4); int cs = m_maincpu->get_cs(offset * 4);
switch ( cs ) switch ( cs )
{ {
@ -224,7 +224,7 @@ READ32_MEMBER(pluto5_state::pluto5_mem_r)
WRITE32_MEMBER(pluto5_state::pluto5_mem_w) WRITE32_MEMBER(pluto5_state::pluto5_mem_w)
{ {
int pc = space.device().safe_pc(); int pc = space.device().safe_pc();
int cs = m68340_get_cs(m_maincpu, offset * 4); int cs = m_maincpu->get_cs(offset * 4);
switch ( cs ) switch ( cs )
{ {

View File

@ -354,6 +354,9 @@ Notes:
#define FRC_CLOCK_MODE0 (MASTER_CLOCK/2)/24 // /16 according to Charles #define FRC_CLOCK_MODE0 (MASTER_CLOCK/2)/24 // /16 according to Charles
#define FRC_CLOCK_MODE1 (MASTER_CLOCK/2)/1536 // /1024 according to Charles, but /1536 sounds better #define FRC_CLOCK_MODE1 (MASTER_CLOCK/2)/1536 // /1024 according to Charles, but /1536 sounds better
#define FDC_LEGACY_LOG 0
#define FDC_LOG(x) do { if (FDC_LEGACY_LOG) logerror x; } while (0)
enum { enum {
IRQ_YM2151 = 1, IRQ_YM2151 = 1,
IRQ_TIMER = 2, IRQ_TIMER = 2,
@ -394,18 +397,18 @@ READ16_MEMBER( segas24_state::fdc_r )
int res = fdc_data; int res = fdc_data;
if(fdc_drq) { if(fdc_drq) {
fdc_span--; fdc_span--;
// logerror("Read %02x (%d)\n", res, fdc_span); // FDC_LOG(("Read %02x (%d)\n", res, fdc_span));
if(fdc_span) { if(fdc_span) {
fdc_pt++; fdc_pt++;
fdc_data = *fdc_pt; fdc_data = *fdc_pt;
} else { } else {
logerror("FDC: transfert complete\n"); FDC_LOG(("FDC: transfert complete\n"));
fdc_drq = 0; fdc_drq = 0;
fdc_status = 0; fdc_status = 0;
fdc_irq = 1; fdc_irq = 1;
} }
} else } else
logerror("FDC: data read with drq down\n"); FDC_LOG(("FDC: data read with drq down\n"));
return res; return res;
} }
} }
@ -423,19 +426,19 @@ WRITE16_MEMBER( segas24_state::fdc_w )
fdc_irq = 0; fdc_irq = 0;
switch(data >> 4) { switch(data >> 4) {
case 0x0: case 0x0:
logerror("FDC: Restore\n"); FDC_LOG(("FDC: Restore\n"));
fdc_phys_track = fdc_track = 0; fdc_phys_track = fdc_track = 0;
fdc_irq = 1; fdc_irq = 1;
fdc_status = 4; fdc_status = 4;
break; break;
case 0x1: case 0x1:
logerror("FDC: Seek %d\n", fdc_data); FDC_LOG(("FDC: Seek %d\n", fdc_data));
fdc_phys_track = fdc_track = fdc_data; fdc_phys_track = fdc_track = fdc_data;
fdc_irq = 1; fdc_irq = 1;
fdc_status = fdc_track ? 0 : 4; fdc_status = fdc_track ? 0 : 4;
break; break;
case 0x9: case 0x9:
logerror("Read multiple [%02x] %d..%d side %d track %d\n", data, fdc_sector, fdc_sector+fdc_data-1, data & 8 ? 1 : 0, fdc_phys_track); FDC_LOG(("Read multiple [%02x] %d..%d side %d track %d\n", data, fdc_sector, fdc_sector+fdc_data-1, data & 8 ? 1 : 0, fdc_phys_track));
fdc_pt = memregion("floppy")->base() + track_size*(2*fdc_phys_track+(data & 8 ? 1 : 0)); fdc_pt = memregion("floppy")->base() + track_size*(2*fdc_phys_track+(data & 8 ? 1 : 0));
fdc_span = track_size; fdc_span = track_size;
fdc_status = 3; fdc_status = 3;
@ -443,14 +446,14 @@ WRITE16_MEMBER( segas24_state::fdc_w )
fdc_data = *fdc_pt; fdc_data = *fdc_pt;
break; break;
case 0xb: case 0xb:
logerror("Write multiple [%02x] %d..%d side %d track %d\n", data, fdc_sector, fdc_sector+fdc_data-1, data & 8 ? 1 : 0, fdc_phys_track); FDC_LOG(("Write multiple [%02x] %d..%d side %d track %d\n", data, fdc_sector, fdc_sector+fdc_data-1, data & 8 ? 1 : 0, fdc_phys_track));
fdc_pt = memregion("floppy")->base() + track_size*(2*fdc_phys_track+(data & 8 ? 1 : 0)); fdc_pt = memregion("floppy")->base() + track_size*(2*fdc_phys_track+(data & 8 ? 1 : 0));
fdc_span = track_size; fdc_span = track_size;
fdc_status = 3; fdc_status = 3;
fdc_drq = 1; fdc_drq = 1;
break; break;
case 0xd: case 0xd:
logerror("FDC: Forced interrupt\n"); FDC_LOG(("FDC: Forced interrupt\n"));
fdc_span = 0; fdc_span = 0;
fdc_drq = 0; fdc_drq = 0;
fdc_irq = data & 1; fdc_irq = data & 1;
@ -458,38 +461,38 @@ WRITE16_MEMBER( segas24_state::fdc_w )
break; break;
case 0xf: case 0xf:
if(data == 0xfe) if(data == 0xfe)
logerror("FDC: Assign mode %02x\n", fdc_data); FDC_LOG(("FDC: Assign mode %02x\n", fdc_data));
else if(data == 0xfd) else if(data == 0xfd)
logerror("FDC: Assign parameter %02x\n", fdc_data); FDC_LOG(("FDC: Assign parameter %02x\n", fdc_data));
else else
logerror("FDC: Unknown command %02x\n", data); FDC_LOG(("FDC: Unknown command %02x\n", data));
break; break;
default: default:
logerror("FDC: Unknown command %02x\n", data); FDC_LOG(("FDC: Unknown command %02x\n", data));
break; break;
} }
break; break;
case 1: case 1:
logerror("FDC: Track register %02x\n", data); FDC_LOG(("FDC: Track register %02x\n", data));
fdc_track = data; fdc_track = data;
break; break;
case 2: case 2:
logerror("FDC: Sector register %02x\n", data); FDC_LOG(("FDC: Sector register %02x\n", data));
fdc_sector = data; fdc_sector = data;
break; break;
case 3: case 3:
if(fdc_drq) { if(fdc_drq) {
// logerror("Write %02x (%d)\n", data, fdc_span); // FDC_LOG("Write %02x (%d)\n", data, fdc_span);
*fdc_pt++ = data; *fdc_pt++ = data;
fdc_span--; fdc_span--;
if(!fdc_span) { if(!fdc_span) {
logerror("FDC: transfert complete\n"); FDC_LOG(("FDC: transfert complete\n"));
fdc_drq = 0; fdc_drq = 0;
fdc_status = 0; fdc_status = 0;
fdc_irq = 1; fdc_irq = 1;
} }
} else } else
logerror("FDC: Data register %02x\n", data); FDC_LOG(("FDC: Data register %02x\n", data));
fdc_data = data; fdc_data = data;
break; break;
} }
@ -507,7 +510,7 @@ READ16_MEMBER( segas24_state::fdc_status_r )
WRITE16_MEMBER( segas24_state::fdc_ctrl_w ) WRITE16_MEMBER( segas24_state::fdc_ctrl_w )
{ {
if(ACCESSING_BITS_0_7) if(ACCESSING_BITS_0_7)
logerror("FDC control %02x\n", data & 0xff); FDC_LOG(("FDC control %02x\n", data & 0xff));
} }

View File

@ -22,20 +22,37 @@ Notes:
5P and 5M are the Sprite framebuffer 5P and 5M are the Sprite framebuffer
Super Qix: Super Qix:
- The sq07.108 ROM came from a bootleg where the 8751 MCU was replaced by a - The sq07.ic108 ROM came from a bootleg where the 8751 MCU was replaced by an
model using external ROM. The ROM was bad (bit 3 was stuck high). It was 8031 MCU plus an external ROM (i.e. the sqixb1 romset). The 8031 ROM was bad
recovered by carefully checking the disassembly but there might still be (bit 3 was stuck high). It was originally recovered by carefully checking
some mistakes. the disassembly, and this repair was later verified from another dump to be
The bootleg MCU code is different from the original; it was modified by the correct. The majority of the bootleg 8031 MCU code matches the decapped
bootleggers to avoid use of port 2. sqixu b03-03.l2 mcu code, implying the sq07.ic108 8031 MCU code ROM was
derived from code dumped from an original Taito b03-03.l2 8751 MCU somehow.
The bootleg MCU code is different from the original b03-03.l2 MCU since
an 8031 when running in external ROM mode cannot use ports 0 or 2, hence
the code was extensively patched by the bootleggers to avoid use of those
ports, by adding an additional multiplexer to port 1, and moving various
read and write pins around.
An important note about the sqixb1 bootleg pcb: the SOCKET on the pcb for
sq07.ic108 is populated backwards compared to the way the ROM will fit into
it! This is probably the cause of the bad bit 3 in the original dump in MAME
(due to someone inserting and powering the chip backwards) and is definitely
the cause of at least one other ROM failure during a repair. Be aware of
this, if you find or own one of these PCBs!
- The MCU sends some ID to the Z80 on startup, but the Z80 happily ignores it. - The MCU sends some ID to the Z80 on startup, but the Z80 happily ignores it.
This happens in all sets. There appears to be code that would check part of This happens in all sets. There appears to be code that would check part of
the MCU init sequence ($5973 onwards), but it doesn't seem to be called. the MCU init sequence ($5973 onwards), but it doesn't seem to be called.
- sqixb1 might be an earlier version because there is a bug with coin lockout: - sqixb1 might be based on an earlier version because there is a bug with coin
it is activated after inesrting 10 coins instead of 9. sqix doesn't have lockout: it is activated after inserting 10 coins instead of 9.
that bug and also inverts the coin lockout output. sqix doesn't have that bug and also inverts the coin lockout output compared
to the bootleg.
The older sqixr1 non-bootleg set does not have the 10 coin lockout bug
either, so it is possible that the bootleggers introduced it themselves, or
the bootleg is based on some sort of early (location test?) set (older than
the sqixr1 set) which we don't have a dump of.
- sqixb2 is a bootleg of sqixb1, with the MCU removed. - sqixb2 is a bootleg of sqixb1, with the MCU removed.
@ -210,11 +227,26 @@ The MCU acts this way:
**************************************************************************/ **************************************************************************/
CUSTOM_INPUT_MEMBER(superqix_state::superqix_semaphore_input_r) // similar to pbillian_semaphore_input_r below, but reverse order and polarity
{
int res = 0;
if (m_MCUHasWritten)
res |= 0x01;
if (m_Z80HasWritten)
res |= 0x02;
return res;
}
READ8_MEMBER(superqix_state::in4_mcu_r) READ8_MEMBER(superqix_state::in4_mcu_r)
{ {
// logerror("%04x: in4_mcu_r\n",space.device().safe_pc()); // logerror("%04x: in4_mcu_r\n",space.device().safe_pc());
return ioport("P2")->read() | (m_MCUHasWritten << 6) | (m_Z80HasWritten << 7); //logerror("%04x: ay_port_b_r and MCUHasWritten is %d and Z80HasWritten is %d: ",static_cast<device_t &>(*m_maincpu).safe_pc(),m_MCUHasWritten, m_Z80HasWritten);
UINT8 temp = ioport("P2")->read();
//logerror("returning %02X\n", temp);
return temp;
} }
READ8_MEMBER(superqix_state::sqix_from_mcu_r) READ8_MEMBER(superqix_state::sqix_from_mcu_r)
@ -225,7 +257,15 @@ READ8_MEMBER(superqix_state::sqix_from_mcu_r)
TIMER_CALLBACK_MEMBER(superqix_state::mcu_acknowledge_callback) TIMER_CALLBACK_MEMBER(superqix_state::mcu_acknowledge_callback)
{ {
m_Z80HasWritten = 1; /* if we're on a set with no mcu, namely sqixb2, perestro or perestrof,
do not set the mcu flags since at least a few checks in sqixb2 were
not patched out by the bootleggers nor the read from the
mcu_acknowledge_r register which sets the m_Z80HasWritten semaphore,
hence the semaphore flags must both be hard-wired inactive on the pcb,
or else it will never boot to the title screen.
perestro and perestrof seem to completely ignore the semaphores.
*/
if (m_mcu.found()) m_Z80HasWritten = 1; // only set this if we have an actual mcu
m_fromZ80 = m_fromZ80pending; m_fromZ80 = m_fromZ80pending;
// logerror("Z80->MCU %02x\n",m_fromZ80); // logerror("Z80->MCU %02x\n",m_fromZ80);
} }
@ -309,12 +349,12 @@ READ8_MEMBER(superqix_state::bootleg_mcu_p3_r)
READ8_MEMBER(superqix_state::sqix_system_status_r) READ8_MEMBER(superqix_state::sqix_system_status_r)
{ {
return ioport("SYSTEM")->read() | (m_MCUHasWritten << 6) | (m_Z80HasWritten << 7); return ioport("SYSTEM")->read();
} }
WRITE8_MEMBER(superqix_state::sqixu_mcu_p2_w) WRITE8_MEMBER(superqix_state::sqixu_mcu_p2_w)
{ {
// bit 0 = unknown (clocked often), watchdog? // bit 0 = enable latch for bits 1-6 below on high level or falling edge (doesn't particularly matter which, either one works)
// bit 1 = coin cointer 1 // bit 1 = coin cointer 1
machine().bookkeeping().coin_counter_w(0,data & 2); machine().bookkeeping().coin_counter_w(0,data & 2);
@ -812,7 +852,7 @@ READ8_MEMBER(superqix_state::hotsmash_Z80_mcu_r)
return m_fromMCU; return m_fromMCU;
} }
CUSTOM_INPUT_MEMBER(superqix_state::superqix_semaphore_input_r) CUSTOM_INPUT_MEMBER(superqix_state::pbillian_semaphore_input_r)
{ {
int res = 0; int res = 0;
/* bit 0x40 is PROBABLY latch 1 on 74ls74.7c, is high if m_Z80HasWritten is clear */ /* bit 0x40 is PROBABLY latch 1 on 74ls74.7c, is high if m_Z80HasWritten is clear */
@ -1006,12 +1046,12 @@ ADDRESS_MAP_END
/* I8751 memory handlers */ /* I8751 memory handlers */
static ADDRESS_MAP_START( bootleg_mcu_io_map, AS_IO, 8, superqix_state ) static ADDRESS_MAP_START( sqix_8031_mcu_io_map, AS_IO, 8, superqix_state )
AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_WRITE(bootleg_mcu_p1_w) AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_WRITE(bootleg_mcu_p1_w)
AM_RANGE(MCS51_PORT_P3, MCS51_PORT_P3) AM_READWRITE(bootleg_mcu_p3_r, mcu_p3_w) AM_RANGE(MCS51_PORT_P3, MCS51_PORT_P3) AM_READWRITE(bootleg_mcu_p3_r, mcu_p3_w)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( sqixu_mcu_io_map, AS_IO, 8, superqix_state ) static ADDRESS_MAP_START( sqix_mcu_io_map, AS_IO, 8, superqix_state )
AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P0) AM_READ(sqix_system_status_r) AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P0) AM_READ(sqix_system_status_r)
AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_READ_PORT("DSW1") AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_READ_PORT("DSW1")
AM_RANGE(MCS51_PORT_P2, MCS51_PORT_P2) AM_WRITE(sqixu_mcu_p2_w) AM_RANGE(MCS51_PORT_P2, MCS51_PORT_P2) AM_WRITE(sqixu_mcu_p2_w)
@ -1077,7 +1117,7 @@ static INPUT_PORTS_START( pbillian )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, superqix_state,superqix_semaphore_input_r, nullptr) /* Z80 and MCU Semaphores */ PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, superqix_state, pbillian_semaphore_input_r, nullptr) /* Z80 and MCU Semaphores */
PORT_START("BUTTONS") PORT_START("BUTTONS")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) // N/C PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) // N/C
@ -1086,7 +1126,7 @@ static INPUT_PORTS_START( pbillian )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL // P2 fire (M powerup) + high score initials PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL // P2 fire (M powerup) + high score initials
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, superqix_state,superqix_semaphore_input_r, nullptr) /* Z80 and MCU Semaphores */ PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, superqix_state, pbillian_semaphore_input_r, nullptr) /* Z80 and MCU Semaphores */
PORT_START("PLUNGER1") // plunger mechanism for shot (BUTTON1 and PEDAL mapped to the same key in MAME) PORT_START("PLUNGER1") // plunger mechanism for shot (BUTTON1 and PEDAL mapped to the same key in MAME)
PORT_BIT( 0x3f, 0x00, IPT_PEDAL ) PORT_MINMAX(0x00, 0x3f) PORT_SENSITIVITY(100) PORT_KEYDELTA(1) PORT_BIT( 0x3f, 0x00, IPT_PEDAL ) PORT_MINMAX(0x00, 0x3f) PORT_SENSITIVITY(100) PORT_KEYDELTA(1)
@ -1159,7 +1199,7 @@ static INPUT_PORTS_START( hotsmash )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 )//$49c PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 )//$49c
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 )//$42d PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 )//$42d
PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, superqix_state,superqix_semaphore_input_r, nullptr) /* Z80 and MCU Semaphores */ PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, superqix_state, pbillian_semaphore_input_r, nullptr) /* Z80 and MCU Semaphores */
PORT_START("BUTTONS") PORT_START("BUTTONS")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
@ -1168,7 +1208,7 @@ static INPUT_PORTS_START( hotsmash )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL // p2 button 2, unused on this game? PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL // p2 button 2, unused on this game?
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, superqix_state,superqix_semaphore_input_r, nullptr) /* Z80 and MCU Semaphores */ PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, superqix_state, pbillian_semaphore_input_r, nullptr) /* Z80 and MCU Semaphores */
PORT_START("DIAL1") PORT_START("DIAL1")
PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(15) PORT_KEYDELTA(30) PORT_CENTERDELTA(0) PORT_PLAYER(1) PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(15) PORT_KEYDELTA(30) PORT_CENTERDELTA(0) PORT_PLAYER(1)
@ -1233,8 +1273,7 @@ static INPUT_PORTS_START( superqix )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) // doesn't work in bootleg PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) // doesn't work in bootleg
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SPECIAL ) // Z80 status (pending mcu->z80) PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, superqix_state, superqix_semaphore_input_r, nullptr) /* Z80 and MCU Semaphores */
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) // Z80 status (pending z80->mcu)
PORT_START("P1") PORT_START("P1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY
@ -1253,8 +1292,8 @@ static INPUT_PORTS_START( superqix )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SPECIAL ) // mcu status (pending mcu->z80) PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, superqix_state, superqix_semaphore_input_r, nullptr) /* Z80 and MCU Semaphores */
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) // mcu status (pending z80->mcu)
INPUT_PORTS_END INPUT_PORTS_END
@ -1359,7 +1398,6 @@ static MACHINE_CONFIG_START( pbillian, superqix_state )
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( hotsmash, pbillian ) static MACHINE_CONFIG_DERIVED( hotsmash, pbillian )
MCFG_CPU_ADD("mcu", M68705, XTAL_12MHz/4) /* 3mhz???? */ MCFG_CPU_ADD("mcu", M68705, XTAL_12MHz/4) /* 3mhz???? */
MCFG_CPU_PROGRAM_MAP(m68705_map) MCFG_CPU_PROGRAM_MAP(m68705_map)
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -1373,7 +1411,7 @@ static MACHINE_CONFIG_START( sqix, superqix_state )
MCFG_CPU_PERIODIC_INT_DRIVER(superqix_state, sqix_timer_irq, 4*60) /* ??? */ MCFG_CPU_PERIODIC_INT_DRIVER(superqix_state, sqix_timer_irq, 4*60) /* ??? */
MCFG_CPU_ADD("mcu", I8751, 12000000/3) /* ??? */ MCFG_CPU_ADD("mcu", I8751, 12000000/3) /* ??? */
MCFG_CPU_IO_MAP(bootleg_mcu_io_map) MCFG_CPU_IO_MAP(sqix_mcu_io_map)
MCFG_QUANTUM_PERFECT_CPU("maincpu") MCFG_QUANTUM_PERFECT_CPU("maincpu")
@ -1410,14 +1448,13 @@ static MACHINE_CONFIG_START( sqix, superqix_state )
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( sqixu, sqix ) static MACHINE_CONFIG_DERIVED( sqix_8031, sqix )
MCFG_CPU_MODIFY("mcu") MCFG_CPU_MODIFY("mcu")
MCFG_CPU_IO_MAP(sqixu_mcu_io_map) MCFG_CPU_IO_MAP(sqix_8031_mcu_io_map)
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_START( sqixbl, superqix_state ) static MACHINE_CONFIG_START( sqix_nomcu, superqix_state )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, 12000000/2) /* 6 MHz */ MCFG_CPU_ADD("maincpu", Z80, 12000000/2) /* 6 MHz */
@ -1447,7 +1484,7 @@ static MACHINE_CONFIG_START( sqixbl, superqix_state )
MCFG_SOUND_ADD("ay1", AY8910, 12000000/8) MCFG_SOUND_ADD("ay1", AY8910, 12000000/8)
MCFG_AY8910_PORT_A_READ_CB(IOPORT("P1")) MCFG_AY8910_PORT_A_READ_CB(IOPORT("P1"))
MCFG_AY8910_PORT_B_READ_CB(IOPORT("P2")) MCFG_AY8910_PORT_B_READ_CB(READ8(superqix_state, in4_mcu_r))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MCFG_SOUND_ADD("ay2", AY8910, 12000000/8) MCFG_SOUND_ADD("ay2", AY8910, 12000000/8)
@ -1510,7 +1547,7 @@ ROM_START( sqix )
ROM_REGION( 0x1000, "mcu", 0 ) /* I8751 code */ ROM_REGION( 0x1000, "mcu", 0 ) /* I8751 code */
ROM_LOAD( "b03-03.l2", 0x00000, 0x1000, NO_DUMP ) /* Original Taito ID code for this set's MCU */ ROM_LOAD( "b03-03.l2", 0x00000, 0x1000, NO_DUMP ) /* Original Taito ID code for this set's MCU */
/* sq07.108 is from the sqixb1 set, it will be removed once the actual MCU code from b03-03.l2 is decapped / dumped */ /* sq07.108 is from the sqixb1 set, it will be removed once the actual MCU code from b03-03.l2 is decapped / dumped */
ROM_LOAD( "sq07.108", 0x00000, 0x1000, BAD_DUMP CRC(d11411fb) SHA1(31183f433596c4d2503c01f6dc8d91024f2cf5de) ) ROM_LOAD( "sq07.ic108", 0x00000, 0x1000, BAD_DUMP CRC(d11411fb) SHA1(31183f433596c4d2503c01f6dc8d91024f2cf5de) )
ROM_REGION( 0x08000, "gfx1", 0 ) ROM_REGION( 0x08000, "gfx1", 0 )
ROM_LOAD( "b03-04.s8", 0x00000, 0x08000, CRC(f815ef45) SHA1(4189d455b6ccf3ae922d410fb624c4665203febf) ) ROM_LOAD( "b03-04.s8", 0x00000, 0x08000, CRC(f815ef45) SHA1(4189d455b6ccf3ae922d410fb624c4665203febf) )
@ -1530,7 +1567,7 @@ ROM_START( sqixr1 )
ROM_REGION( 0x1000, "mcu", 0 ) /* I8751 code */ ROM_REGION( 0x1000, "mcu", 0 ) /* I8751 code */
ROM_LOAD( "b03-03.l2", 0x00000, 0x1000, NO_DUMP ) /* Original Taito ID code for this set's MCU */ ROM_LOAD( "b03-03.l2", 0x00000, 0x1000, NO_DUMP ) /* Original Taito ID code for this set's MCU */
/* sq07.108 is from the sqixb1 set, it will be removed once the actual MCU code from b03-03.l2 is decapped / dumped */ /* sq07.108 is from the sqixb1 set, it will be removed once the actual MCU code from b03-03.l2 is decapped / dumped */
ROM_LOAD( "sq07.108", 0x00000, 0x1000, BAD_DUMP CRC(d11411fb) SHA1(31183f433596c4d2503c01f6dc8d91024f2cf5de) ) ROM_LOAD( "sq07.ic108", 0x00000, 0x1000, BAD_DUMP CRC(d11411fb) SHA1(31183f433596c4d2503c01f6dc8d91024f2cf5de) )
ROM_REGION( 0x08000, "gfx1", 0 ) ROM_REGION( 0x08000, "gfx1", 0 )
ROM_LOAD( "b03-04.s8", 0x00000, 0x08000, CRC(f815ef45) SHA1(4189d455b6ccf3ae922d410fb624c4665203febf) ) ROM_LOAD( "b03-04.s8", 0x00000, 0x08000, CRC(f815ef45) SHA1(4189d455b6ccf3ae922d410fb624c4665203febf) )
@ -1563,14 +1600,14 @@ ROM_END
/* this is a bootleg with an 8031+external rom in place of the 8751 of the /* this is a bootleg with an 8031+external rom in place of the 8751 of the
original board; The mcu code is extensively hacked to avoid use of port 2, original board; The mcu code is extensively hacked to avoid use of port 2,
which is used as the rom data bus, using a multiplexed latch on one of the which is used as the rom data bus, using a multiplexed latch on one of the
other ports instead. Is this based on dumped original b03-03.l2 code? */ other ports instead. This is based on dumped original b03-03.l2 code. */
ROM_START( sqixb1 ) ROM_START( sqixb1 )
ROM_REGION( 0x20000, "maincpu", 0 ) ROM_REGION( 0x20000, "maincpu", 0 )
ROM_LOAD( "sq01.97", 0x00000, 0x08000, CRC(0888b7de) SHA1(de3e4637436de185f43d2ad4186d4cfdcd4d33d9) ) ROM_LOAD( "sq01.97", 0x00000, 0x08000, CRC(0888b7de) SHA1(de3e4637436de185f43d2ad4186d4cfdcd4d33d9) )
ROM_LOAD( "b03-02.h3", 0x10000, 0x10000, CRC(9c23cb64) SHA1(7e04cb18cabdc0031621162cbc228cd95875a022) ) ROM_LOAD( "b03-02.h3", 0x10000, 0x10000, CRC(9c23cb64) SHA1(7e04cb18cabdc0031621162cbc228cd95875a022) )
ROM_REGION( 0x10000, "mcu", 0 ) /* I8031 code */ ROM_REGION( 0x10000, "mcu", 0 ) /* I8031 code */
ROM_LOAD( "sq07.108", 0x00000, 0x1000, BAD_DUMP CRC(d11411fb) SHA1(31183f433596c4d2503c01f6dc8d91024f2cf5de) ) ROM_LOAD( "sq07.ic108", 0x00000, 0x1000, CRC(d11411fb) SHA1(31183f433596c4d2503c01f6dc8d91024f2cf5de) )
ROM_REGION( 0x08000, "gfx1", 0 ) ROM_REGION( 0x08000, "gfx1", 0 )
ROM_LOAD( "b03-04.s8", 0x00000, 0x08000, CRC(f815ef45) SHA1(4189d455b6ccf3ae922d410fb624c4665203febf) ) ROM_LOAD( "b03-04.s8", 0x00000, 0x08000, CRC(f815ef45) SHA1(4189d455b6ccf3ae922d410fb624c4665203febf) )
@ -1705,12 +1742,12 @@ DRIVER_INIT_MEMBER(superqix_state,perestro)
GAME( 1986, pbillian, 0, pbillian, pbillian, driver_device, 0, ROT0, "Kaneko / Taito", "Prebillian", MACHINE_SUPPORTS_SAVE ) GAME( 1986, pbillian, 0, pbillian, pbillian, driver_device, 0, ROT0, "Kaneko / Taito", "Prebillian", MACHINE_SUPPORTS_SAVE )
GAME( 1987, hotsmash, 0, hotsmash, hotsmash, driver_device, 0, ROT90, "Kaneko / Taito", "Vs. Hot Smash", MACHINE_SUPPORTS_SAVE ) GAME( 1987, hotsmash, 0, hotsmash, hotsmash, driver_device, 0, ROT90, "Kaneko / Taito", "Vs. Hot Smash", MACHINE_SUPPORTS_SAVE )
GAME( 1987, sqix, 0, sqix, superqix, superqix_state, sqix, ROT90, "Kaneko / Taito", "Super Qix (World, Rev 2)", MACHINE_SUPPORTS_SAVE ) GAME( 1987, sqix, 0, sqix_8031, superqix, superqix_state, sqix, ROT90, "Kaneko / Taito", "Super Qix (World, Rev 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, sqixr1, sqix, sqix, superqix, superqix_state, sqix, ROT90, "Kaneko / Taito", "Super Qix (World, Rev 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1987, sqixr1, sqix, sqix_8031, superqix, superqix_state, sqix, ROT90, "Kaneko / Taito", "Super Qix (World, Rev 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, sqixu, sqix, sqixu, superqix, driver_device, 0, ROT90, "Kaneko / Taito (Romstar License)", "Super Qix (US)", MACHINE_SUPPORTS_SAVE ) GAME( 1987, sqixu, sqix, sqix, superqix, driver_device, 0, ROT90, "Kaneko / Taito (Romstar License)", "Super Qix (US)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, sqixb1, sqix, sqix, superqix, superqix_state, sqixa, ROT90, "bootleg", "Super Qix (bootleg set 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1987, sqixb1, sqix, sqix_8031, superqix, superqix_state, sqixa, ROT90, "bootleg", "Super Qix (bootleg set 1, 8031 MCU)", MACHINE_SUPPORTS_SAVE ) // bootleg of World, Rev 1
GAME( 1987, sqixb2, sqix, sqixbl, superqix, driver_device, 0, ROT90, "bootleg", "Super Qix (bootleg set 2, No MCU)", MACHINE_SUPPORTS_SAVE ) GAME( 1987, sqixb2, sqix, sqix_nomcu, superqix, driver_device, 0, ROT90, "bootleg", "Super Qix (bootleg set 2, No MCU)", MACHINE_SUPPORTS_SAVE ) // bootleg of World, Rev 1
GAME( 1994, perestro, 0, sqixbl, superqix, superqix_state, perestro, ROT90, "Promat", "Perestroika Girls", MACHINE_SUPPORTS_SAVE ) GAME( 1994, perestro, 0, sqix_nomcu, superqix, superqix_state, perestro, ROT90, "Promat", "Perestroika Girls", MACHINE_SUPPORTS_SAVE )
GAME( 1993, perestrof,perestro, sqixbl, superqix, superqix_state, perestro, ROT90, "Promat (Fuuki license)", "Perestroika Girls (Fuuki license)", MACHINE_SUPPORTS_SAVE ) GAME( 1993, perestrof,perestro, sqix_nomcu, superqix, superqix_state, perestro, ROT90, "Promat (Fuuki license)", "Perestroika Girls (Fuuki license)", MACHINE_SUPPORTS_SAVE )

View File

@ -7,9 +7,6 @@
Driver by Pierpaolo Prazzoli and Bryan McPhail Driver by Pierpaolo Prazzoli and Bryan McPhail
TODO:
- Fix sprite position in cocktail mode
================================================================= =================================================================
Debug cheats: Debug cheats:
@ -246,4 +243,4 @@ ROM_START( tryout )
ROM_LOAD( "ch14.bpr", 0x00000, 0x0020, CRC(8ce19925) SHA1(12f8f6022f1148b6ba1d019a34247452637063a7) ) ROM_LOAD( "ch14.bpr", 0x00000, 0x0020, CRC(8ce19925) SHA1(12f8f6022f1148b6ba1d019a34247452637063a7) )
ROM_END ROM_END
GAME( 1985, tryout, 0, tryout, tryout, driver_device, 0, ROT90, "Data East Corporation", "Pro Baseball Skill Tryout (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) GAME( 1985, tryout, 0, tryout, tryout, driver_device, 0, ROT90, "Data East Corporation", "Pro Baseball Skill Tryout (Japan)", MACHINE_SUPPORTS_SAVE )

View File

@ -7,7 +7,7 @@ class superqix_state : public driver_device
public: public:
enum enum
{ {
MCU_ACKNOWLEDGE, MCU_ACKNOWLEDGE, /// TODO: get rid of this hack!
HLE_68705_WRITE HLE_68705_WRITE
}; };
@ -96,6 +96,7 @@ public:
DECLARE_WRITE8_MEMBER(hotsmash_68705_ddr_c_w); DECLARE_WRITE8_MEMBER(hotsmash_68705_ddr_c_w);
DECLARE_WRITE8_MEMBER(hotsmash_Z80_mcu_w); DECLARE_WRITE8_MEMBER(hotsmash_Z80_mcu_w);
DECLARE_READ8_MEMBER(hotsmash_Z80_mcu_r); DECLARE_READ8_MEMBER(hotsmash_Z80_mcu_r);
DECLARE_CUSTOM_INPUT_MEMBER(pbillian_semaphore_input_r);
DECLARE_CUSTOM_INPUT_MEMBER(superqix_semaphore_input_r); DECLARE_CUSTOM_INPUT_MEMBER(superqix_semaphore_input_r);
DECLARE_WRITE8_MEMBER(pbillian_Z80_mcu_w); DECLARE_WRITE8_MEMBER(pbillian_Z80_mcu_w);
DECLARE_WRITE8_MEMBER(superqix_videoram_w); DECLARE_WRITE8_MEMBER(superqix_videoram_w);
@ -103,8 +104,9 @@ public:
DECLARE_WRITE8_MEMBER(superqix_bitmapram2_w); DECLARE_WRITE8_MEMBER(superqix_bitmapram2_w);
DECLARE_WRITE8_MEMBER(pbillian_0410_w); DECLARE_WRITE8_MEMBER(pbillian_0410_w);
DECLARE_WRITE8_MEMBER(superqix_0410_w); DECLARE_WRITE8_MEMBER(superqix_0410_w);
DECLARE_READ8_MEMBER(in4_mcu_r);
DECLARE_READ8_MEMBER(sqix_from_mcu_r); DECLARE_READ8_MEMBER(sqix_from_mcu_r);
//DECLARE_READ8_MEMBER(superqix_ay1_a_r);
DECLARE_READ8_MEMBER(in4_mcu_r); //DECLARE_READ8_MEMBER(superqix_ay1_b_r);
DECLARE_WRITE8_MEMBER(sqix_z80_mcu_w); DECLARE_WRITE8_MEMBER(sqix_z80_mcu_w);
DECLARE_READ8_MEMBER(bootleg_in0_r); DECLARE_READ8_MEMBER(bootleg_in0_r);
DECLARE_READ8_MEMBER(hotsmash_ay_port_a_r); DECLARE_READ8_MEMBER(hotsmash_ay_port_a_r);

View File

@ -1,351 +1,609 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<mamelayout version="2"> <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 = { ":COL_A", ":COL_B", ":COL_C", ":COL_D", ":COL_E", ":COL_F", ":COL_G", ":COL_H" }
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
-- if another piece is on the destination position, the first input is used for remove the old piece and the next input is used for move the new piece
if board[to.y][to.x] ~= 0 then
change_piece_state(to, 0)
return 0
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[":EXTRA"]:read()
if value &amp; 0x02 == 0x02 then
layout.reset()
return
end
for x, tag in ipairs(port_tags) do
local port = ports[tag]
if not port then
return
end
local newvalue = port:read()
if port_values[x] ~= newvalue then
port_values[x] = newvalue
for y = 8, 1, -1 do
if newvalue &amp; 1 == 0 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, "chessmst"
</script>
<element name="led" defstate="1"> <element name="led" defstate="1">
<disk state="0"> <disk state="0">
<color red="0.75" green="0.0" blue="0.0" /> <color red="0.95" green="0.0" blue="0.0" />
</disk> </disk>
<disk state="1"> <disk state="1">
<color red="0.20" green="0.0" blue="0.0" /> <color red="0.20" green="0.0" blue="0.0" />
</disk> </disk>
</element> </element>
<element name="hl" defstate="0">
<element name="str_your"> <text string="YOUR"/> </element> <text string=" ">
<element name="str_cm"> <text string="CM"/> </element> <bounds x="0.0" y="0.0" width="1.0" height="1.0" />
<element name="str_check"> <text string="CHECK"/> </element>
<element name="str_c1"> <text string="C1"/> </element>
<element name="str_c2"> <text string="C2"/> </element>
<element name="str_c3"> <text string="C3"/> </element>
<element name="str_pawn"> <text string="Pawn"/> </element>
<element name="str_rook"> <text string="Rook"/> </element>
<element name="str_knight"> <text string="Knight"/> </element>
<element name="str_bishop"> <text string="Bishop"/> </element>
<element name="str_queen"> <text string="Queen"/> </element>
<element name="str_king"> <text string="King"/> </element>
<element name="str_white"> <text string="White"/> </element>
<element name="str_black"> <text string="Black"/> </element>
<element name="str_changeb"> <text string="CHANGE BOARD"/> </element>
<element name="background">
<rect>
<bounds left="0" top="0" right="1" bottom="1" />
<color red="0.0" green="0.0" blue="0.0" /> <color red="0.0" green="0.0" blue="0.0" />
</rect> </text>
<disk state="1">
<bounds x="0.12" y="0.12" width="0.76" height="0.76" />
<color red="1.0" green="1.0" blue="1.0" />
</disk>
</element>
<element name="hlb" defstate="0">
<disk 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" />
</disk>
<disk 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" />
</disk>
</element> </element>
<view name="Default Layout"> <element name="black"><rect><color red="0.64" green="0.08" blue="0.11" /></rect></element>
<!-- background --> <element name="white"><rect><color red="1.00" green="0.88" blue="0.55" /></rect></element>
<bezel element="background">
<bounds left="00" top="00" right="100" bottom="80" />
</bezel>
<!-- Column A --> <element name="text_1"> <text string="1"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<bezel name="led_a1" element="led" inputtag="COL_A" inputmask="0x80"> <element name="text_2"> <text string="2"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<bounds x="5" y="5" width="2" height="2" /> <element name="text_3"> <text string="3"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
</bezel> <element name="text_4"> <text string="4"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<bezel name="led_a2" element="led" inputtag="COL_A" inputmask="0x40"> <element name="text_5"> <text string="5"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<bounds x="5" y="15" width="2" height="2" /> <element name="text_6"> <text string="6"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
</bezel> <element name="text_7"> <text string="7"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<bezel name="led_a3" element="led" inputtag="COL_A" inputmask="0x20"> <element name="text_8"> <text string="8"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<bounds x="5" y="25" width="2" height="2" />
</bezel>
<bezel name="led_a4" element="led" inputtag="COL_A" inputmask="0x10">
<bounds x="5" y="35" width="2" height="2" />
</bezel>
<bezel name="led_a5" element="led" inputtag="COL_A" inputmask="0x08">
<bounds x="5" y="45" width="2" height="2" />
</bezel>
<bezel name="led_a6" element="led" inputtag="COL_A" inputmask="0x04">
<bounds x="5" y="55" width="2" height="2" />
</bezel>
<bezel name="led_a7" element="led" inputtag="COL_A" inputmask="0x02">
<bounds x="5" y="65" width="2" height="2" />
</bezel>
<bezel name="led_a8" element="led" inputtag="COL_A" inputmask="0x01">
<bounds x="5" y="75" width="2" height="2" />
</bezel>
<!-- Column B --> <element name="text_a"> <text string="A"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<bezel name="led_b1" element="led" inputtag="COL_B" inputmask="0x80"> <element name="text_b"> <text string="B"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<bounds x="15" y="5" width="2" height="2" /> <element name="text_c"> <text string="C"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
</bezel> <element name="text_d"> <text string="D"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<bezel name="led_b2" element="led" inputtag="COL_B" inputmask="0x40"> <element name="text_e"> <text string="E"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<bounds x="15" y="15" width="2" height="2" /> <element name="text_f"> <text string="F"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
</bezel> <element name="text_g"> <text string="G"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<bezel name="led_b3" element="led" inputtag="COL_B" inputmask="0x20"> <element name="text_h"> <text string="H"><color red="0.01" green="0.01" blue="0.01" /></text> </element>
<bounds x="15" y="25" width="2" height="2" />
</bezel>
<bezel name="led_b4" element="led" inputtag="COL_B" inputmask="0x10">
<bounds x="15" y="35" width="2" height="2" />
</bezel>
<bezel name="led_b5" element="led" inputtag="COL_B" inputmask="0x08">
<bounds x="15" y="45" width="2" height="2" />
</bezel>
<bezel name="led_b6" element="led" inputtag="COL_B" inputmask="0x04">
<bounds x="15" y="55" width="2" height="2" />
</bezel>
<bezel name="led_b7" element="led" inputtag="COL_B" inputmask="0x02">
<bounds x="15" y="65" width="2" height="2" />
</bezel>
<bezel name="led_b8" element="led" inputtag="COL_B" inputmask="0x01">
<bounds x="15" y="75" width="2" height="2" />
</bezel>
<!-- Column C --> <element name="text_chessmaster"> <text string="CHESS-MASTER" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<bezel name="led_c1" element="led" inputtag="COL_C" inputmask="0x80"> <element name="text_newgame"> <text string="NEW GAME" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<bounds x="25" y="5" width="2" height="2" /> <element name="text_level"> <text string="LEVEL" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
</bezel> <element name="text_color"> <text string="COLOR" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<bezel name="led_c2" element="led" inputtag="COL_C" inputmask="0x40"> <element name="text_board"> <text string="BOARD" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<bounds x="25" y="15" width="2" height="2" /> <element name="text_selfplay"> <text string="SELF PLAY" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
</bezel> <element name="text_referee"> <text string="REFEREE" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<bezel name="led_c3" element="led" inputtag="COL_C" inputmask="0x20"> <element name="text_random"> <text string="RANDOM" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<bounds x="25" y="25" width="2" height="2" /> <element name="text_hint"> <text string="HINT" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
</bezel> <element name="text_white"> <text string="WHITE" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<bezel name="led_c4" element="led" inputtag="COL_C" inputmask="0x10"> <element name="text_black"> <text string="BLACK" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<bounds x="25" y="35" width="2" height="2" /> <element name="text_king" > <text string="&#x2654;" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
</bezel> <element name="text_queen" > <text string="&#x2655;" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<bezel name="led_c5" element="led" inputtag="COL_C" inputmask="0x08"> <element name="text_rook" > <text string="&#x2656;" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<bounds x="25" y="45" width="2" height="2" /> <element name="text_bishop" > <text string="&#x2657;" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
</bezel> <element name="text_knight" > <text string="&#x2658;" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<bezel name="led_c6" element="led" inputtag="COL_C" inputmask="0x04"> <element name="text_pawn" > <text string="&#x2659;" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<bounds x="25" y="55" width="2" height="2" /> <element name="text_change"> <text string="CHANGE" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
</bezel> <element name="text_board"> <text string="BOARD" align="2"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<bezel name="led_c7" element="led" inputtag="COL_C" inputmask="0x02"> <element name="text_halt"> <text string="HALT" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<bounds x="25" y="65" width="2" height="2" /> <element name="text_reset"> <text string="RESET" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
</bezel> <element name="text_check"> <text string="CHECK" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<bezel name="led_c8" element="led" inputtag="COL_C" inputmask="0x01"> <element name="text_your"> <text string="YOUR" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<bounds x="25" y="75" width="2" height="2" /> <element name="text_cms"> <text string="CM'S" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
</bezel>
<!-- Column D --> <element name="piece" defstate="0">
<bezel name="led_d1" element="led" inputtag="COL_D" inputmask="0x80"> <text string="&#x265a;" state="1"><color red="0.27" green="0.25" blue="0.25" /></text>
<bounds x="35" y="5" width="2" height="2" /> <text string="&#x265b;" state="2"><color red="0.27" green="0.25" blue="0.25" /></text>
</bezel> <text string="&#x265c;" state="3"><color red="0.27" green="0.25" blue="0.25" /></text>
<bezel name="led_d2" element="led" inputtag="COL_D" inputmask="0x40"> <text string="&#x265d;" state="4"><color red="0.27" green="0.25" blue="0.25" /></text>
<bounds x="35" y="15" width="2" height="2" /> <text string="&#x265e;" state="5"><color red="0.27" green="0.25" blue="0.25" /></text>
</bezel> <text string="&#x265f;" state="6"><color red="0.27" green="0.25" blue="0.25" /></text>
<bezel name="led_d3" element="led" inputtag="COL_D" inputmask="0x20">
<bounds x="35" y="25" width="2" height="2" />
</bezel>
<bezel name="led_d4" element="led" inputtag="COL_D" inputmask="0x10">
<bounds x="35" y="35" width="2" height="2" />
</bezel>
<bezel name="led_d5" element="led" inputtag="COL_D" inputmask="0x08">
<bounds x="35" y="45" width="2" height="2" />
</bezel>
<bezel name="led_d6" element="led" inputtag="COL_D" inputmask="0x04">
<bounds x="35" y="55" width="2" height="2" />
</bezel>
<bezel name="led_d7" element="led" inputtag="COL_D" inputmask="0x02">
<bounds x="35" y="65" width="2" height="2" />
</bezel>
<bezel name="led_d8" element="led" inputtag="COL_D" inputmask="0x01">
<bounds x="35" y="75" width="2" height="2" />
</bezel>
<!-- Column E --> <text string="&#x265a;" state="7"><color red="0.71" green="0.7" blue="0.69" /></text>
<bezel name="led_e1" element="led" inputtag="COL_E" inputmask="0x80"> <text string="&#x265b;" state="8"><color red="0.71" green="0.7" blue="0.69" /></text>
<bounds x="45" y="5" width="2" height="2" /> <text string="&#x265c;" state="9"><color red="0.71" green="0.7" blue="0.69" /></text>
</bezel> <text string="&#x265d;" state="10"><color red="0.71" green="0.7" blue="0.69" /></text>
<bezel name="led_e2" element="led" inputtag="COL_E" inputmask="0x40"> <text string="&#x265e;" state="11"><color red="0.71" green="0.7" blue="0.69" /></text>
<bounds x="45" y="15" width="2" height="2" /> <text string="&#x265f;" state="12"><color red="0.71" green="0.7" blue="0.69" /></text>
</bezel>
<bezel name="led_e3" element="led" inputtag="COL_E" inputmask="0x20">
<bounds x="45" y="25" width="2" height="2" />
</bezel>
<bezel name="led_e4" element="led" inputtag="COL_E" inputmask="0x10">
<bounds x="45" y="35" width="2" height="2" />
</bezel>
<bezel name="led_e5" element="led" inputtag="COL_E" inputmask="0x08">
<bounds x="45" y="45" width="2" height="2" />
</bezel>
<bezel name="led_e6" element="led" inputtag="COL_E" inputmask="0x04">
<bounds x="45" y="55" width="2" height="2" />
</bezel>
<bezel name="led_e7" element="led" inputtag="COL_E" inputmask="0x02">
<bounds x="45" y="65" width="2" height="2" />
</bezel>
<bezel name="led_e8" element="led" inputtag="COL_E" inputmask="0x01">
<bounds x="45" y="75" width="2" height="2" />
</bezel>
<!-- Column F --> <!-- selected pieces -->
<bezel name="led_f1" element="led" inputtag="COL_F" inputmask="0x80"> <disk state="17"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
<bounds x="55" y="5" width="2" height="2" /> <disk state="18"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
</bezel> <disk state="19"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
<bezel name="led_f2" element="led" inputtag="COL_F" inputmask="0x40"> <disk state="20"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
<bounds x="55" y="15" width="2" height="2" /> <disk state="21"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
</bezel> <disk state="22"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
<bezel name="led_f3" element="led" inputtag="COL_F" inputmask="0x20"> <disk state="23"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
<bounds x="55" y="25" width="2" height="2" /> <disk state="24"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
</bezel> <disk state="25"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
<bezel name="led_f4" element="led" inputtag="COL_F" inputmask="0x10"> <disk state="26"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
<bounds x="55" y="35" width="2" height="2" /> <disk state="27"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
</bezel> <disk state="28"> <color red="1.00" green="0.25" blue="1.00" /> </disk>
<bezel name="led_f5" element="led" inputtag="COL_F" inputmask="0x08">
<bounds x="55" y="45" width="2" height="2" />
</bezel>
<bezel name="led_f6" element="led" inputtag="COL_F" inputmask="0x04">
<bounds x="55" y="55" width="2" height="2" />
</bezel>
<bezel name="led_f7" element="led" inputtag="COL_F" inputmask="0x02">
<bounds x="55" y="65" width="2" height="2" />
</bezel>
<bezel name="led_f8" element="led" inputtag="COL_F" inputmask="0x01">
<bounds x="55" y="75" width="2" height="2" />
</bezel>
<!-- Column G --> <text string="&#x265a;" state="17"><color red="0.27" green="0.25" blue="0.25" /></text>
<bezel name="led_g1" element="led" inputtag="COL_G" inputmask="0x80"> <text string="&#x265b;" state="18"><color red="0.27" green="0.25" blue="0.25" /></text>
<bounds x="65" y="5" width="2" height="2" /> <text string="&#x265c;" state="19"><color red="0.27" green="0.25" blue="0.25" /></text>
</bezel> <text string="&#x265d;" state="20"><color red="0.27" green="0.25" blue="0.25" /></text>
<bezel name="led_g2" element="led" inputtag="COL_G" inputmask="0x40"> <text string="&#x265e;" state="21"><color red="0.27" green="0.25" blue="0.25" /></text>
<bounds x="65" y="15" width="2" height="2" /> <text string="&#x265f;" state="22"><color red="0.27" green="0.25" blue="0.25" /></text>
</bezel>
<bezel name="led_g3" element="led" inputtag="COL_G" inputmask="0x20">
<bounds x="65" y="25" width="2" height="2" />
</bezel>
<bezel name="led_g4" element="led" inputtag="COL_G" inputmask="0x10">
<bounds x="65" y="35" width="2" height="2" />
</bezel>
<bezel name="led_g5" element="led" inputtag="COL_G" inputmask="0x08">
<bounds x="65" y="45" width="2" height="2" />
</bezel>
<bezel name="led_g6" element="led" inputtag="COL_G" inputmask="0x04">
<bounds x="65" y="55" width="2" height="2" />
</bezel>
<bezel name="led_g7" element="led" inputtag="COL_G" inputmask="0x02">
<bounds x="65" y="65" width="2" height="2" />
</bezel>
<bezel name="led_g8" element="led" inputtag="COL_G" inputmask="0x01">
<bounds x="65" y="75" width="2" height="2" />
</bezel>
<!-- Column H --> <text string="&#x265a;" state="23"><color red="0.71" green="0.7" blue="0.69" /></text>
<bezel name="led_h1" element="led" inputtag="COL_H" inputmask="0x80"> <text string="&#x265b;" state="24"><color red="0.71" green="0.7" blue="0.69" /></text>
<bounds x="75" y="5" width="2" height="2" /> <text string="&#x265c;" state="25"><color red="0.71" green="0.7" blue="0.69" /></text>
</bezel> <text string="&#x265d;" state="26"><color red="0.71" green="0.7" blue="0.69" /></text>
<bezel name="led_h2" element="led" inputtag="COL_H" inputmask="0x40"> <text string="&#x265e;" state="27"><color red="0.71" green="0.7" blue="0.69" /></text>
<bounds x="75" y="15" width="2" height="2" /> <text string="&#x265f;" state="28"><color red="0.71" green="0.7" blue="0.69" /></text>
</bezel> </element>
<bezel name="led_h3" element="led" inputtag="COL_H" inputmask="0x20">
<bounds x="75" y="25" width="2" height="2" />
</bezel>
<bezel name="led_h4" element="led" inputtag="COL_H" inputmask="0x10">
<bounds x="75" y="35" width="2" height="2" />
</bezel>
<bezel name="led_h5" element="led" inputtag="COL_H" inputmask="0x08">
<bounds x="75" y="45" width="2" height="2" />
</bezel>
<bezel name="led_h6" element="led" inputtag="COL_H" inputmask="0x04">
<bounds x="75" y="55" width="2" height="2" />
</bezel>
<bezel name="led_h7" element="led" inputtag="COL_H" inputmask="0x02">
<bounds x="75" y="65" width="2" height="2" />
</bezel>
<bezel name="led_h8" element="led" inputtag="COL_H" inputmask="0x01">
<bounds x="75" y="75" width="2" height="2" />
</bezel>
<!-- game status LEDs --> <!-- build screen -->
<bezel name="led_j5" element="led">
<bounds x="85" y="8" width="2" height="2" />
</bezel>
<bezel name="led_j6" element="led">
<bounds x="90" y="8" width="2" height="2" />
</bezel>
<bezel name="led_j7" element="led">
<bounds x="95" y="8" width="2" height="2" />
</bezel>
<bezel name="lbl_your" element="str_your"> <view name="Internal Layout">
<bounds x="84" y="5" width="4" height="2" /> <bounds left="-2" right="117.5" top="-2" bottom="88" />
</bezel>
<bezel name="lbl_cm" element="str_cm">
<bounds x="90" y="5" width="2" height="2" />
</bezel>
<bezel name="lbl_check" element="str_check">
<bounds x="94" y="5" width="5" height="2" />
</bezel>
<!-- command mode LEDs --> <bezel element="black"><bounds x="-2.5" y="-2" width="120" height="90.5" /></bezel>
<bezel name="led_j2" element="led"> <bezel element="white"><bounds x="89" y="-2" width="30" height="90.5" /></bezel>
<bounds x="85" y="15" width="2" height="2" />
</bezel>
<bezel name="led_j3" element="led">
<bounds x="90" y="15" width="2" height="2" />
</bezel>
<bezel name="led_j4" element="led">
<bounds x="95" y="15" width="2" height="2" />
</bezel>
<bezel name="lbl_c1" element="str_c1"> <!-- chessboard coords -->
<bounds x="85" y="12" width="2" height="2" />
</bezel>
<bezel name="lbl_c2" element="str_c2">
<bounds x="90" y="12" width="2" height="2" />
</bezel>
<bezel name="lbl_c3" element="str_c3">
<bounds x="95" y="12" width="2" height="2" />
</bezel>
<!-- type LEDs --> <bezel element="text_8"><bounds x="-0.8" y="7" width="2" height="2" /></bezel>
<bezel name="led_i1" element="led"> <bezel element="text_7"><bounds x="-0.8" y="17" width="2" height="2" /></bezel>
<bounds x="85" y="20" width="2" height="2" /> <bezel element="text_6"><bounds x="-0.8" y="27" width="2" height="2" /></bezel>
</bezel> <bezel element="text_5"><bounds x="-0.8" y="37" width="2" height="2" /></bezel>
<bezel name="led_i2" element="led"> <bezel element="text_4"><bounds x="-0.8" y="47" width="2" height="2" /></bezel>
<bounds x="85" y="26" width="2" height="2" /> <bezel element="text_3"><bounds x="-0.8" y="57" width="2" height="2" /></bezel>
</bezel> <bezel element="text_2"><bounds x="-0.8" y="67" width="2" height="2" /></bezel>
<bezel name="led_i3" element="led"> <bezel element="text_1"><bounds x="-0.8" y="77" width="2" height="2" /></bezel>
<bounds x="85" y="32" width="2" height="2" />
</bezel>
<bezel name="led_i4" element="led">
<bounds x="85" y="38" width="2" height="2" />
</bezel>
<bezel name="led_i5" element="led">
<bounds x="85" y="44" width="2" height="2" />
</bezel>
<bezel name="led_i6" element="led">
<bounds x="85" y="50" width="2" height="2" />
</bezel>
<bezel name="led_i7" element="led">
<bounds x="85" y="56" width="2" height="2" />
</bezel>
<bezel name="led_i8" element="led">
<bounds x="85" y="62" width="2" height="2" />
</bezel>
<bezel name="lbl_pawn" element="str_pawn"> <bezel element="text_a"><bounds x="7" y="85" width="2" height="2" /></bezel>
<bounds x="88" y="20" width="4" height="2" /> <bezel element="text_b"><bounds x="17" y="85" width="2" height="2" /></bezel>
</bezel> <bezel element="text_c"><bounds x="27" y="85" width="2" height="2" /></bezel>
<bezel name="lbl_knight" element="str_knight"> <bezel element="text_d"><bounds x="37" y="85" width="2" height="2" /></bezel>
<bounds x="88" y="26" width="5" height="2" /> <bezel element="text_e"><bounds x="47" y="85" width="2" height="2" /></bezel>
</bezel> <bezel element="text_f"><bounds x="57" y="85" width="2" height="2" /></bezel>
<bezel name="lbl_bishop" element="str_bishop"> <bezel element="text_g"><bounds x="67" y="85" width="2" height="2" /></bezel>
<bounds x="88" y="32" width="5" height="2" /> <bezel element="text_h"><bounds x="77" y="85" width="2" height="2" /></bezel>
</bezel>
<bezel name="lbl_rook" element="str_rook">
<bounds x="88" y="38" width="4" height="2" />
</bezel>
<bezel name="lbl_queen" element="str_queen">
<bounds x="88" y="44" width="5" height="2" />
</bezel>
<bezel name="lbl_king" element="str_king">
<bounds x="88" y="50" width="4" height="2" />
</bezel>
<bezel name="lbl_white" element="str_white">
<bounds x="88" y="56" width="5" height="2" />
</bezel>
<bezel name="lbl_black" element="str_black">
<bounds x="88" y="62" width="4" height="2" />
</bezel>
<!-- change board LED --> <!-- chessboard bezel -->
<bezel name="led_j8" element="led">
<bounds x="89" y="70" width="2" height="2" /> <bezel element="white"><bounds x="2" y="2" width="82" height="82" /></bezel>
</bezel> <bezel element="white"><bounds x="3" y="3" width="80" height="80" /></bezel>
<bezel element="black"><bounds x="13" y="2.5" width="10" height="10.5" /></bezel>
<bezel element="black"><bounds x="33" y="2.5" width="10" height="10.5" /></bezel>
<bezel element="black"><bounds x="53" y="2.5" width="10" height="10.5" /></bezel>
<bezel element="black"><bounds x="73" y="2.5" width="10.5" height="10.5" /></bezel>
<bezel element="black"><bounds x="2.5" y="13" width="10.5" height="10" /></bezel>
<bezel element="black"><bounds x="23" y="13" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="43" y="13" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="63" y="13" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="13" y="23" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="33" y="23" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="53" y="23" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="73" y="23" width="10.5" height="10" /></bezel>
<bezel element="black"><bounds x="2.5" y="33" width="10.5" height="10" /></bezel>
<bezel element="black"><bounds x="23" y="33" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="43" y="33" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="63" y="33" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="13" y="43" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="33" y="43" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="53" y="43" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="73" y="43" width="10.5" height="10" /></bezel>
<bezel element="black"><bounds x="2.5" y="53" width="10.5" height="10" /></bezel>
<bezel element="black"><bounds x="23" y="53" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="43" y="53" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="63" y="53" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="13" y="63" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="33" y="63" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="53" y="63" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="73" y="63" width="10.5" height="10" /></bezel>
<bezel element="black"><bounds x="2.5" y="73" width="10.5" height="10.5" /></bezel>
<bezel element="black"><bounds x="23" y="73" width="10" height="10.5" /></bezel>
<bezel element="black"><bounds x="43" y="73" width="10" height="10.5" /></bezel>
<bezel element="black"><bounds x="63" y="73" width="10" height="10.5" /></bezel>
<bezel name="pos11" element="piece"><bounds x="3" y="3" width="10" height="10" /></bezel>
<bezel name="pos12" element="piece"><bounds x="13" y="3" width="10" height="10" /></bezel>
<bezel name="pos13" element="piece"><bounds x="23" y="3" width="10" height="10" /></bezel>
<bezel name="pos14" element="piece"><bounds x="33" y="3" width="10" height="10" /></bezel>
<bezel name="pos15" element="piece"><bounds x="43" y="3" width="10" height="10" /></bezel>
<bezel name="pos16" element="piece"><bounds x="53" y="3" width="10" height="10" /></bezel>
<bezel name="pos17" element="piece"><bounds x="63" y="3" width="10" height="10" /></bezel>
<bezel name="pos18" element="piece"><bounds x="73" y="3" width="10" height="10" /></bezel>
<bezel name="pos21" element="piece"><bounds x="3" y="13" width="10" height="10" /></bezel>
<bezel name="pos22" element="piece"><bounds x="13" y="13" width="10" height="10" /></bezel>
<bezel name="pos23" element="piece"><bounds x="23" y="13" width="10" height="10" /></bezel>
<bezel name="pos24" element="piece"><bounds x="33" y="13" width="10" height="10" /></bezel>
<bezel name="pos25" element="piece"><bounds x="43" y="13" width="10" height="10" /></bezel>
<bezel name="pos26" element="piece"><bounds x="53" y="13" width="10" height="10" /></bezel>
<bezel name="pos27" element="piece"><bounds x="63" y="13" width="10" height="10" /></bezel>
<bezel name="pos28" element="piece"><bounds x="73" y="13" width="10" height="10" /></bezel>
<bezel name="pos31" element="piece"><bounds x="3" y="23" width="10" height="10" /></bezel>
<bezel name="pos32" element="piece"><bounds x="13" y="23" width="10" height="10" /></bezel>
<bezel name="pos33" element="piece"><bounds x="23" y="23" width="10" height="10" /></bezel>
<bezel name="pos34" element="piece"><bounds x="33" y="23" width="10" height="10" /></bezel>
<bezel name="pos35" element="piece"><bounds x="43" y="23" width="10" height="10" /></bezel>
<bezel name="pos36" element="piece"><bounds x="53" y="23" width="10" height="10" /></bezel>
<bezel name="pos37" element="piece"><bounds x="63" y="23" width="10" height="10" /></bezel>
<bezel name="pos38" element="piece"><bounds x="73" y="23" width="10" height="10" /></bezel>
<bezel name="pos41" element="piece"><bounds x="3" y="33" width="10" height="10" /></bezel>
<bezel name="pos42" element="piece"><bounds x="13" y="33" width="10" height="10" /></bezel>
<bezel name="pos43" element="piece"><bounds x="23" y="33" width="10" height="10" /></bezel>
<bezel name="pos44" element="piece"><bounds x="33" y="33" width="10" height="10" /></bezel>
<bezel name="pos45" element="piece"><bounds x="43" y="33" width="10" height="10" /></bezel>
<bezel name="pos46" element="piece"><bounds x="53" y="33" width="10" height="10" /></bezel>
<bezel name="pos47" element="piece"><bounds x="63" y="33" width="10" height="10" /></bezel>
<bezel name="pos48" element="piece"><bounds x="73" y="33" width="10" height="10" /></bezel>
<bezel name="pos51" element="piece"><bounds x="3" y="43" width="10" height="10" /></bezel>
<bezel name="pos52" element="piece"><bounds x="13" y="43" width="10" height="10" /></bezel>
<bezel name="pos53" element="piece"><bounds x="23" y="43" width="10" height="10" /></bezel>
<bezel name="pos54" element="piece"><bounds x="33" y="43" width="10" height="10" /></bezel>
<bezel name="pos55" element="piece"><bounds x="43" y="43" width="10" height="10" /></bezel>
<bezel name="pos56" element="piece"><bounds x="53" y="43" width="10" height="10" /></bezel>
<bezel name="pos57" element="piece"><bounds x="63" y="43" width="10" height="10" /></bezel>
<bezel name="pos58" element="piece"><bounds x="73" y="43" width="10" height="10" /></bezel>
<bezel name="pos61" element="piece"><bounds x="3" y="53" width="10" height="10" /></bezel>
<bezel name="pos62" element="piece"><bounds x="13" y="53" width="10" height="10" /></bezel>
<bezel name="pos63" element="piece"><bounds x="23" y="53" width="10" height="10" /></bezel>
<bezel name="pos64" element="piece"><bounds x="33" y="53" width="10" height="10" /></bezel>
<bezel name="pos65" element="piece"><bounds x="43" y="53" width="10" height="10" /></bezel>
<bezel name="pos66" element="piece"><bounds x="53" y="53" width="10" height="10" /></bezel>
<bezel name="pos67" element="piece"><bounds x="63" y="53" width="10" height="10" /></bezel>
<bezel name="pos68" element="piece"><bounds x="73" y="53" width="10" height="10" /></bezel>
<bezel name="pos71" element="piece"><bounds x="3" y="63" width="10" height="10" /></bezel>
<bezel name="pos72" element="piece"><bounds x="13" y="63" width="10" height="10" /></bezel>
<bezel name="pos73" element="piece"><bounds x="23" y="63" width="10" height="10" /></bezel>
<bezel name="pos74" element="piece"><bounds x="33" y="63" width="10" height="10" /></bezel>
<bezel name="pos75" element="piece"><bounds x="43" y="63" width="10" height="10" /></bezel>
<bezel name="pos76" element="piece"><bounds x="53" y="63" width="10" height="10" /></bezel>
<bezel name="pos77" element="piece"><bounds x="63" y="63" width="10" height="10" /></bezel>
<bezel name="pos78" element="piece"><bounds x="73" y="63" width="10" height="10" /></bezel>
<bezel name="pos81" element="piece"><bounds x="3" y="73" width="10" height="10" /></bezel>
<bezel name="pos82" element="piece"><bounds x="13" y="73" width="10" height="10" /></bezel>
<bezel name="pos83" element="piece"><bounds x="23" y="73" width="10" height="10" /></bezel>
<bezel name="pos84" element="piece"><bounds x="33" y="73" width="10" height="10" /></bezel>
<bezel name="pos85" element="piece"><bounds x="43" y="73" width="10" height="10" /></bezel>
<bezel name="pos86" element="piece"><bounds x="53" y="73" width="10" height="10" /></bezel>
<bezel name="pos87" element="piece"><bounds x="63" y="73" width="10" height="10" /></bezel>
<bezel name="pos88" element="piece"><bounds x="73" y="73" width="10" height="10" /></bezel>
<!-- chessboard leds -->
<bezel name="led_a1" element="led"><bounds x="3.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_b1" element="led"><bounds x="13.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_c1" element="led"><bounds x="23.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_d1" element="led"><bounds x="33.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_e1" element="led"><bounds x="43.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_f1" element="led"><bounds x="53.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_g1" element="led"><bounds x="63.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_h1" element="led"><bounds x="73.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_a2" element="led"><bounds x="3.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_b2" element="led"><bounds x="13.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_c2" element="led"><bounds x="23.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_d2" element="led"><bounds x="33.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_e2" element="led"><bounds x="43.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_f2" element="led"><bounds x="53.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_g2" element="led"><bounds x="63.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_h2" element="led"><bounds x="73.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_a3" element="led"><bounds x="3.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_b3" element="led"><bounds x="13.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_c3" element="led"><bounds x="23.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_d3" element="led"><bounds x="33.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_e3" element="led"><bounds x="43.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_f3" element="led"><bounds x="53.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_g3" element="led"><bounds x="63.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_h3" element="led"><bounds x="73.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_a4" element="led"><bounds x="3.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_b4" element="led"><bounds x="13.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_c4" element="led"><bounds x="23.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_d4" element="led"><bounds x="33.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_e4" element="led"><bounds x="43.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_f4" element="led"><bounds x="53.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_g4" element="led"><bounds x="63.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_h4" element="led"><bounds x="73.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_a5" element="led"><bounds x="3.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_b5" element="led"><bounds x="13.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_c5" element="led"><bounds x="23.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_d5" element="led"><bounds x="33.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_e5" element="led"><bounds x="43.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_f5" element="led"><bounds x="53.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_g5" element="led"><bounds x="63.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_h5" element="led"><bounds x="73.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_a6" element="led"><bounds x="3.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_b6" element="led"><bounds x="13.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_c6" element="led"><bounds x="23.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_d6" element="led"><bounds x="33.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_e6" element="led"><bounds x="43.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_f6" element="led"><bounds x="53.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_g6" element="led"><bounds x="63.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_h6" element="led"><bounds x="73.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_a7" element="led"><bounds x="3.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_b7" element="led"><bounds x="13.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_c7" element="led"><bounds x="23.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_d7" element="led"><bounds x="33.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_e7" element="led"><bounds x="43.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_f7" element="led"><bounds x="53.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_g7" element="led"><bounds x="63.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_h7" element="led"><bounds x="73.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_a8" element="led"><bounds x="3.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_b8" element="led"><bounds x="13.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_c8" element="led"><bounds x="23.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_d8" element="led"><bounds x="33.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_e8" element="led"><bounds x="43.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_f8" element="led"><bounds x="53.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_g8" element="led"><bounds x="63.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_h8" element="led"><bounds x="73.2" y="81.3" width="1.5" height="1.5" /></bezel>
<!-- chessboard sensors -->
<bezel element="hl" inputtag="COL_A" inputmask="0x80"><bounds x="3" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_B" inputmask="0x80"><bounds x="13" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_C" inputmask="0x80"><bounds x="23" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_D" inputmask="0x80"><bounds x="33" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_E" inputmask="0x80"><bounds x="43" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_F" inputmask="0x80"><bounds x="53" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_G" inputmask="0x80"><bounds x="63" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_H" inputmask="0x80"><bounds x="73" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_A" inputmask="0x40"><bounds x="3" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_B" inputmask="0x40"><bounds x="13" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_C" inputmask="0x40"><bounds x="23" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_D" inputmask="0x40"><bounds x="33" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_E" inputmask="0x40"><bounds x="43" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_F" inputmask="0x40"><bounds x="53" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_G" inputmask="0x40"><bounds x="63" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_H" inputmask="0x40"><bounds x="73" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_A" inputmask="0x20"><bounds x="3" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_B" inputmask="0x20"><bounds x="13" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_C" inputmask="0x20"><bounds x="23" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_D" inputmask="0x20"><bounds x="33" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_E" inputmask="0x20"><bounds x="43" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_F" inputmask="0x20"><bounds x="53" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_G" inputmask="0x20"><bounds x="63" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_H" inputmask="0x20"><bounds x="73" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_A" inputmask="0x10"><bounds x="3" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_B" inputmask="0x10"><bounds x="13" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_C" inputmask="0x10"><bounds x="23" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_D" inputmask="0x10"><bounds x="33" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_E" inputmask="0x10"><bounds x="43" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_F" inputmask="0x10"><bounds x="53" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_G" inputmask="0x10"><bounds x="63" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_H" inputmask="0x10"><bounds x="73" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_A" inputmask="0x08"><bounds x="3" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_B" inputmask="0x08"><bounds x="13" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_C" inputmask="0x08"><bounds x="23" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_D" inputmask="0x08"><bounds x="33" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_E" inputmask="0x08"><bounds x="43" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_F" inputmask="0x08"><bounds x="53" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_G" inputmask="0x08"><bounds x="63" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_H" inputmask="0x08"><bounds x="73" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_A" inputmask="0x04"><bounds x="3" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_B" inputmask="0x04"><bounds x="13" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_C" inputmask="0x04"><bounds x="23" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_D" inputmask="0x04"><bounds x="33" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_E" inputmask="0x04"><bounds x="43" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_F" inputmask="0x04"><bounds x="53" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_G" inputmask="0x04"><bounds x="63" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_H" inputmask="0x04"><bounds x="73" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_A" inputmask="0x02"><bounds x="3" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_B" inputmask="0x02"><bounds x="13" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_C" inputmask="0x02"><bounds x="23" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_D" inputmask="0x02"><bounds x="33" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_E" inputmask="0x02"><bounds x="43" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_F" inputmask="0x02"><bounds x="53" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_G" inputmask="0x02"><bounds x="63" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_H" inputmask="0x02"><bounds x="73" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_A" inputmask="0x01"><bounds x="3" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_B" inputmask="0x01"><bounds x="13" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_C" inputmask="0x01"><bounds x="23" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_D" inputmask="0x01"><bounds x="33" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_E" inputmask="0x01"><bounds x="43" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_F" inputmask="0x01"><bounds x="53" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_G" inputmask="0x01"><bounds x="63" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_H" inputmask="0x01"><bounds x="73" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
<!-- right side -->
<bezel element="text_chessmaster"><bounds x="94" y="0" width="24" height="3" /></bezel>
<bezel element="text_newgame"> <bounds x="98" y="16" width="18" height="1.8" /></bezel>
<bezel element="text_level"> <bounds x="98" y="23" width="18" height="1.8" /></bezel>
<bezel element="text_color"> <bounds x="98" y="30" width="18" height="1.8" /></bezel>
<bezel element="text_board"> <bounds x="98" y="37" width="18" height="1.8" /></bezel>
<bezel element="text_selfplay"><bounds x="98" y="44" width="18" height="1.8" /></bezel>
<bezel element="text_referee"> <bounds x="98" y="51" width="18" height="1.8" /></bezel>
<bezel element="text_random"> <bounds x="98" y="58" width="18" height="1.8" /></bezel>
<bezel element="text_hint"> <bounds x="98" y="65" width="18" height="1.8" /></bezel>
<bezel element="text_reset"> <bounds x="92.5" y="82" width="10" height="2" /></bezel>
<bezel element="text_halt"> <bounds x="107.5" y="82" width="8" height="2" /></bezel>
<bezel element="text_pawn"> <bounds x="95" y="18" width="4" height="4" /></bezel>
<bezel element="text_knight"> <bounds x="95" y="25" width="4" height="4" /></bezel>
<bezel element="text_bishop"> <bounds x="95" y="32" width="4" height="4" /></bezel>
<bezel element="text_rook"> <bounds x="95" y="39" width="4" height="4" /></bezel>
<bezel element="text_queen"> <bounds x="95" y="46" width="4" height="4" /></bezel>
<bezel element="text_king"> <bounds x="95" y="53" width="4" height="4" /></bezel>
<bezel element="text_white"> <bounds x="88" y="61" width="10" height="1.8" /></bezel>
<bezel element="text_black"> <bounds x="88" y="68" width="10" height="1.8" /></bezel>
<bezel element="text_check"> <bounds x="91" y="6" width="10" height="1.8" /></bezel>
<bezel element="text_your"> <bounds x="98" y="6" width="8" height="1.8" /></bezel>
<bezel element="text_cms"> <bounds x="104" y="6" width="8" height="1.8" /></bezel>
<bezel element="text_change"> <bounds x="95.3" y="73" width="12" height="1.8" /></bezel>
<bezel element="text_board"> <bounds x="103" y="73" width="10" height="1.8" /></bezel>
<bezel element="text_1"><bounds x="111" y="19" width="2" height="1.8" /></bezel>
<bezel element="text_2"><bounds x="111" y="26" width="2" height="1.8" /></bezel>
<bezel element="text_3"><bounds x="111" y="33" width="2" height="1.8" /></bezel>
<bezel element="text_4"><bounds x="111" y="40" width="2" height="1.8" /></bezel>
<bezel element="text_5"><bounds x="111" y="47" width="2" height="1.8" /></bezel>
<bezel element="text_6"><bounds x="111" y="54" width="2" height="1.8" /></bezel>
<bezel element="text_7"><bounds x="111" y="62" width="2" height="1.8" /></bezel>
<bezel element="text_8"><bounds x="111" y="69" width="2" height="1.8" /></bezel>
<bezel name="led_i1" element="led"> <bounds x="100" y="19" width="2" height="2" /></bezel>
<bezel name="led_i2" element="led"> <bounds x="100" y="26" width="2" height="2" /></bezel>
<bezel name="led_i3" element="led"> <bounds x="100" y="33" width="2" height="2" /></bezel>
<bezel name="led_i4" element="led"> <bounds x="100" y="40" width="2" height="2" /></bezel>
<bezel name="led_i5" element="led"> <bounds x="100" y="47" width="2" height="2" /></bezel>
<bezel name="led_i6" element="led"> <bounds x="100" y="54" width="2" height="2" /></bezel>
<bezel name="led_i7" element="led"> <bounds x="100" y="61" width="2" height="2" /></bezel>
<bezel name="led_i8" element="led"> <bounds x="100" y="68" width="2" height="2" /></bezel>
<bezel name="led_j7" element="led"> <bounds x="95" y="8" width="2" height="2" /></bezel>
<bezel name="led_j5" element="led"> <bounds x="101" y="8" width="2" height="2" /></bezel>
<bezel name="led_j6" element="led"> <bounds x="107" y="8" width="2" height="2" /></bezel>
<bezel name="led_j2" element="led"> <bounds x="95" y="12" width="2" height="2" /></bezel>
<bezel name="led_j3" element="led"> <bounds x="101" y="12" width="2" height="2" /></bezel>
<bezel name="led_j4" element="led"> <bounds x="107" y="12" width="2" height="2" /></bezel>
<bezel name="led_j8" element="led"> <bounds x="102.5" y="73" width="2" height="2" /></bezel>
<bezel element="hlb" inputtag="BUTTONS" inputmask="0x80"><bounds x="105" y="18" width="4" height="4" /></bezel>
<bezel element="hlb" inputtag="BUTTONS" inputmask="0x40"><bounds x="105" y="25" width="4" height="4" /></bezel>
<bezel element="hlb" inputtag="BUTTONS" inputmask="0x20"><bounds x="105" y="32" width="4" height="4" /></bezel>
<bezel element="hlb" inputtag="BUTTONS" inputmask="0x10"><bounds x="105" y="39" width="4" height="4" /></bezel>
<bezel element="hlb" inputtag="BUTTONS" inputmask="0x08"><bounds x="105" y="46" width="4" height="4" /></bezel>
<bezel element="hlb" inputtag="BUTTONS" inputmask="0x04"><bounds x="105" y="53" width="4" height="4" /></bezel>
<bezel element="hlb" inputtag="BUTTONS" inputmask="0x02"><bounds x="105" y="60" width="4" height="4" /></bezel>
<bezel element="hlb" inputtag="BUTTONS" inputmask="0x01"><bounds x="105" y="67" width="4" height="4" /></bezel>
<bezel element="hlb" inputtag="EXTRA" inputmask="0x02"><bounds x="95" y="77" width="4" height="4" /></bezel>
<bezel element="hlb" inputtag="EXTRA" inputmask="0x01"><bounds x="109" y="77" width="4" height="4" /></bezel>
<bezel name="lbl_cb" element="str_changeb">
<bounds x="85" y="67" width="10" height="2" />
</bezel>
</view> </view>
</mamelayout> </mamelayout>

View File

@ -0,0 +1,589 @@
<?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 = { ":COL_A", ":COL_B", ":COL_C", ":COL_D", ":COL_E", ":COL_F", ":COL_G", ":COL_H" }
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
-- if another piece is on the destination position, the first input is used for remove the old piece and the next input is used for move the new piece
if board[to.y][to.x] ~= 0 then
change_piece_state(to, 0)
return 0
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[":EXTRA"]:read()
if value &amp; 0x03 == 0x03 then
layout.reset()
return
end
for x, tag in ipairs(port_tags) do
local port = ports[tag]
if not port then
return
end
local newvalue = port:read()
if port_values[x] ~= newvalue then
port_values[x] = newvalue
for y = 8, 1, -1 do
if newvalue &amp; 1 == 0 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, "chessmstdm"
</script>
<element name="black_rect">
<rect>
<color red="0.0" green="0.0" blue="0.0" />
</rect>
</element>
<element name="digit" defstate="0">
<led16segsc>
<color red="0.5" green="1.0" blue="0.0" />
</led16segsc>
</element>
<element name="led" defstate="1">
<disk state="0">
<color red="0.95" green="0.0" blue="0.0" />
</disk>
<disk state="1">
<color red="0.20" green="0.0" blue="0.0" />
</disk>
</element>
<element name="hl" defstate="0">
<text string=" ">
<bounds x="0.0" y="0.0" width="1.0" height="1.0" />
<color red="0.0" green="0.0" blue="0.0" />
</text>
<disk state="1">
<bounds x="0.12" y="0.12" width="0.76" height="0.76" />
<color red="1.0" green="1.0" blue="1.0" />
</disk>
</element>
<element name="hlb" defstate="0">
<disk 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" />
</disk>
<disk 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" />
</disk>
</element>
<element name="black"><rect><color red="0.44" green="0.08" blue="0.01" /></rect></element>
<element name="white"><rect><color red="1.00" green="0.88" blue="0.55" /></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_chessmaster"> <text string="CHESS-MASTER" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_diamond"> <text string="diamond" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_monitor"> <text string="MONITOR" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_view"> <text string="VIEW" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_reset"> <text string="RESET" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_selection"> <text string="SELECTION" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_dialogue"> <text string="DIALOGUE" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_function"> <text string="FUNCTION" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_notation"> <text string="NOTATION" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_parameter"> <text string="PARAMETER" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_information"> <text string="INFORMATION" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_board"> <text string="BOARD" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_match"> <text string="MATCH" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_time"> <text string="TIME" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_enter"> <text string="ENTER" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_playmode"> <text string="PLAYMODE" align="1"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_move_fore"> <text string="MOVE FORE" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </element>
<element name="text_move_back"> <text string="MOVE BACK" align="0"><color red="0.17" green="0.15" blue="0.15" /></text> </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">
<bounds left="-2" right="117.5" top="-2" bottom="88" />
<bezel element="white"><bounds x="-2.5" y="-2" width="120" height="90.5" /></bezel>
<!-- chessboard coords -->
<bezel element="text_8"><bounds x="-0.8" y="7" width="2" height="2" /></bezel>
<bezel element="text_7"><bounds x="-0.8" y="17" width="2" height="2" /></bezel>
<bezel element="text_6"><bounds x="-0.8" y="27" width="2" height="2" /></bezel>
<bezel element="text_5"><bounds x="-0.8" y="37" width="2" height="2" /></bezel>
<bezel element="text_4"><bounds x="-0.8" y="47" width="2" height="2" /></bezel>
<bezel element="text_3"><bounds x="-0.8" y="57" width="2" height="2" /></bezel>
<bezel element="text_2"><bounds x="-0.8" y="67" width="2" height="2" /></bezel>
<bezel element="text_1"><bounds x="-0.8" y="77" width="2" height="2" /></bezel>
<bezel element="text_a"><bounds x="7" y="85" width="2" height="2" /></bezel>
<bezel element="text_b"><bounds x="17" y="85" width="2" height="2" /></bezel>
<bezel element="text_c"><bounds x="27" y="85" width="2" height="2" /></bezel>
<bezel element="text_d"><bounds x="37" y="85" width="2" height="2" /></bezel>
<bezel element="text_e"><bounds x="47" y="85" width="2" height="2" /></bezel>
<bezel element="text_f"><bounds x="57" y="85" width="2" height="2" /></bezel>
<bezel element="text_g"><bounds x="67" y="85" width="2" height="2" /></bezel>
<bezel element="text_h"><bounds x="77" y="85" width="2" height="2" /></bezel>
<!-- chessboard bezel -->
<bezel element="black"><bounds x="2" y="2" width="82" height="82" /></bezel>
<bezel element="white"><bounds x="3" y="3" width="80" height="80" /></bezel>
<bezel element="black"><bounds x="13" y="2.5" width="10" height="10.5" /></bezel>
<bezel element="black"><bounds x="33" y="2.5" width="10" height="10.5" /></bezel>
<bezel element="black"><bounds x="53" y="2.5" width="10" height="10.5" /></bezel>
<bezel element="black"><bounds x="73" y="2.5" width="10.5" height="10.5" /></bezel>
<bezel element="black"><bounds x="2.5" y="13" width="10.5" height="10" /></bezel>
<bezel element="black"><bounds x="23" y="13" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="43" y="13" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="63" y="13" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="13" y="23" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="33" y="23" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="53" y="23" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="73" y="23" width="10.5" height="10" /></bezel>
<bezel element="black"><bounds x="2.5" y="33" width="10.5" height="10" /></bezel>
<bezel element="black"><bounds x="23" y="33" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="43" y="33" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="63" y="33" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="13" y="43" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="33" y="43" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="53" y="43" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="73" y="43" width="10.5" height="10" /></bezel>
<bezel element="black"><bounds x="2.5" y="53" width="10.5" height="10" /></bezel>
<bezel element="black"><bounds x="23" y="53" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="43" y="53" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="63" y="53" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="13" y="63" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="33" y="63" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="53" y="63" width="10" height="10" /></bezel>
<bezel element="black"><bounds x="73" y="63" width="10.5" height="10" /></bezel>
<bezel element="black"><bounds x="2.5" y="73" width="10.5" height="10.5" /></bezel>
<bezel element="black"><bounds x="23" y="73" width="10" height="10.5" /></bezel>
<bezel element="black"><bounds x="43" y="73" width="10" height="10.5" /></bezel>
<bezel element="black"><bounds x="63" y="73" width="10" height="10.5" /></bezel>
<bezel name="pos11" element="piece"><bounds x="3" y="3" width="10" height="10" /></bezel>
<bezel name="pos12" element="piece"><bounds x="13" y="3" width="10" height="10" /></bezel>
<bezel name="pos13" element="piece"><bounds x="23" y="3" width="10" height="10" /></bezel>
<bezel name="pos14" element="piece"><bounds x="33" y="3" width="10" height="10" /></bezel>
<bezel name="pos15" element="piece"><bounds x="43" y="3" width="10" height="10" /></bezel>
<bezel name="pos16" element="piece"><bounds x="53" y="3" width="10" height="10" /></bezel>
<bezel name="pos17" element="piece"><bounds x="63" y="3" width="10" height="10" /></bezel>
<bezel name="pos18" element="piece"><bounds x="73" y="3" width="10" height="10" /></bezel>
<bezel name="pos21" element="piece"><bounds x="3" y="13" width="10" height="10" /></bezel>
<bezel name="pos22" element="piece"><bounds x="13" y="13" width="10" height="10" /></bezel>
<bezel name="pos23" element="piece"><bounds x="23" y="13" width="10" height="10" /></bezel>
<bezel name="pos24" element="piece"><bounds x="33" y="13" width="10" height="10" /></bezel>
<bezel name="pos25" element="piece"><bounds x="43" y="13" width="10" height="10" /></bezel>
<bezel name="pos26" element="piece"><bounds x="53" y="13" width="10" height="10" /></bezel>
<bezel name="pos27" element="piece"><bounds x="63" y="13" width="10" height="10" /></bezel>
<bezel name="pos28" element="piece"><bounds x="73" y="13" width="10" height="10" /></bezel>
<bezel name="pos31" element="piece"><bounds x="3" y="23" width="10" height="10" /></bezel>
<bezel name="pos32" element="piece"><bounds x="13" y="23" width="10" height="10" /></bezel>
<bezel name="pos33" element="piece"><bounds x="23" y="23" width="10" height="10" /></bezel>
<bezel name="pos34" element="piece"><bounds x="33" y="23" width="10" height="10" /></bezel>
<bezel name="pos35" element="piece"><bounds x="43" y="23" width="10" height="10" /></bezel>
<bezel name="pos36" element="piece"><bounds x="53" y="23" width="10" height="10" /></bezel>
<bezel name="pos37" element="piece"><bounds x="63" y="23" width="10" height="10" /></bezel>
<bezel name="pos38" element="piece"><bounds x="73" y="23" width="10" height="10" /></bezel>
<bezel name="pos41" element="piece"><bounds x="3" y="33" width="10" height="10" /></bezel>
<bezel name="pos42" element="piece"><bounds x="13" y="33" width="10" height="10" /></bezel>
<bezel name="pos43" element="piece"><bounds x="23" y="33" width="10" height="10" /></bezel>
<bezel name="pos44" element="piece"><bounds x="33" y="33" width="10" height="10" /></bezel>
<bezel name="pos45" element="piece"><bounds x="43" y="33" width="10" height="10" /></bezel>
<bezel name="pos46" element="piece"><bounds x="53" y="33" width="10" height="10" /></bezel>
<bezel name="pos47" element="piece"><bounds x="63" y="33" width="10" height="10" /></bezel>
<bezel name="pos48" element="piece"><bounds x="73" y="33" width="10" height="10" /></bezel>
<bezel name="pos51" element="piece"><bounds x="3" y="43" width="10" height="10" /></bezel>
<bezel name="pos52" element="piece"><bounds x="13" y="43" width="10" height="10" /></bezel>
<bezel name="pos53" element="piece"><bounds x="23" y="43" width="10" height="10" /></bezel>
<bezel name="pos54" element="piece"><bounds x="33" y="43" width="10" height="10" /></bezel>
<bezel name="pos55" element="piece"><bounds x="43" y="43" width="10" height="10" /></bezel>
<bezel name="pos56" element="piece"><bounds x="53" y="43" width="10" height="10" /></bezel>
<bezel name="pos57" element="piece"><bounds x="63" y="43" width="10" height="10" /></bezel>
<bezel name="pos58" element="piece"><bounds x="73" y="43" width="10" height="10" /></bezel>
<bezel name="pos61" element="piece"><bounds x="3" y="53" width="10" height="10" /></bezel>
<bezel name="pos62" element="piece"><bounds x="13" y="53" width="10" height="10" /></bezel>
<bezel name="pos63" element="piece"><bounds x="23" y="53" width="10" height="10" /></bezel>
<bezel name="pos64" element="piece"><bounds x="33" y="53" width="10" height="10" /></bezel>
<bezel name="pos65" element="piece"><bounds x="43" y="53" width="10" height="10" /></bezel>
<bezel name="pos66" element="piece"><bounds x="53" y="53" width="10" height="10" /></bezel>
<bezel name="pos67" element="piece"><bounds x="63" y="53" width="10" height="10" /></bezel>
<bezel name="pos68" element="piece"><bounds x="73" y="53" width="10" height="10" /></bezel>
<bezel name="pos71" element="piece"><bounds x="3" y="63" width="10" height="10" /></bezel>
<bezel name="pos72" element="piece"><bounds x="13" y="63" width="10" height="10" /></bezel>
<bezel name="pos73" element="piece"><bounds x="23" y="63" width="10" height="10" /></bezel>
<bezel name="pos74" element="piece"><bounds x="33" y="63" width="10" height="10" /></bezel>
<bezel name="pos75" element="piece"><bounds x="43" y="63" width="10" height="10" /></bezel>
<bezel name="pos76" element="piece"><bounds x="53" y="63" width="10" height="10" /></bezel>
<bezel name="pos77" element="piece"><bounds x="63" y="63" width="10" height="10" /></bezel>
<bezel name="pos78" element="piece"><bounds x="73" y="63" width="10" height="10" /></bezel>
<bezel name="pos81" element="piece"><bounds x="3" y="73" width="10" height="10" /></bezel>
<bezel name="pos82" element="piece"><bounds x="13" y="73" width="10" height="10" /></bezel>
<bezel name="pos83" element="piece"><bounds x="23" y="73" width="10" height="10" /></bezel>
<bezel name="pos84" element="piece"><bounds x="33" y="73" width="10" height="10" /></bezel>
<bezel name="pos85" element="piece"><bounds x="43" y="73" width="10" height="10" /></bezel>
<bezel name="pos86" element="piece"><bounds x="53" y="73" width="10" height="10" /></bezel>
<bezel name="pos87" element="piece"><bounds x="63" y="73" width="10" height="10" /></bezel>
<bezel name="pos88" element="piece"><bounds x="73" y="73" width="10" height="10" /></bezel>
<!-- chessboard leds -->
<bezel name="led_a1" element="led"><bounds x="3.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_b1" element="led"><bounds x="13.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_c1" element="led"><bounds x="23.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_d1" element="led"><bounds x="33.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_e1" element="led"><bounds x="43.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_f1" element="led"><bounds x="53.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_g1" element="led"><bounds x="63.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_h1" element="led"><bounds x="73.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_a2" element="led"><bounds x="3.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_b2" element="led"><bounds x="13.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_c2" element="led"><bounds x="23.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_d2" element="led"><bounds x="33.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_e2" element="led"><bounds x="43.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_f2" element="led"><bounds x="53.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_g2" element="led"><bounds x="63.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_h2" element="led"><bounds x="73.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_a3" element="led"><bounds x="3.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_b3" element="led"><bounds x="13.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_c3" element="led"><bounds x="23.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_d3" element="led"><bounds x="33.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_e3" element="led"><bounds x="43.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_f3" element="led"><bounds x="53.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_g3" element="led"><bounds x="63.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_h3" element="led"><bounds x="73.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_a4" element="led"><bounds x="3.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_b4" element="led"><bounds x="13.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_c4" element="led"><bounds x="23.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_d4" element="led"><bounds x="33.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_e4" element="led"><bounds x="43.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_f4" element="led"><bounds x="53.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_g4" element="led"><bounds x="63.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_h4" element="led"><bounds x="73.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_a5" element="led"><bounds x="3.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_b5" element="led"><bounds x="13.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_c5" element="led"><bounds x="23.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_d5" element="led"><bounds x="33.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_e5" element="led"><bounds x="43.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_f5" element="led"><bounds x="53.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_g5" element="led"><bounds x="63.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_h5" element="led"><bounds x="73.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_a6" element="led"><bounds x="3.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_b6" element="led"><bounds x="13.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_c6" element="led"><bounds x="23.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_d6" element="led"><bounds x="33.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_e6" element="led"><bounds x="43.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_f6" element="led"><bounds x="53.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_g6" element="led"><bounds x="63.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_h6" element="led"><bounds x="73.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_a7" element="led"><bounds x="3.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_b7" element="led"><bounds x="13.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_c7" element="led"><bounds x="23.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_d7" element="led"><bounds x="33.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_e7" element="led"><bounds x="43.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_f7" element="led"><bounds x="53.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_g7" element="led"><bounds x="63.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_h7" element="led"><bounds x="73.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_a8" element="led"><bounds x="3.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_b8" element="led"><bounds x="13.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_c8" element="led"><bounds x="23.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_d8" element="led"><bounds x="33.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_e8" element="led"><bounds x="43.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_f8" element="led"><bounds x="53.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_g8" element="led"><bounds x="63.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="led_h8" element="led"><bounds x="73.2" y="81.3" width="1.5" height="1.5" /></bezel>
<!-- chessboard sensors -->
<bezel element="hl" inputtag="COL_A" inputmask="0x80"><bounds x="3" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_B" inputmask="0x80"><bounds x="13" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_C" inputmask="0x80"><bounds x="23" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_D" inputmask="0x80"><bounds x="33" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_E" inputmask="0x80"><bounds x="43" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_F" inputmask="0x80"><bounds x="53" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_G" inputmask="0x80"><bounds x="63" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_H" inputmask="0x80"><bounds x="73" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_A" inputmask="0x40"><bounds x="3" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_B" inputmask="0x40"><bounds x="13" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_C" inputmask="0x40"><bounds x="23" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_D" inputmask="0x40"><bounds x="33" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_E" inputmask="0x40"><bounds x="43" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_F" inputmask="0x40"><bounds x="53" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_G" inputmask="0x40"><bounds x="63" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_H" inputmask="0x40"><bounds x="73" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_A" inputmask="0x20"><bounds x="3" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_B" inputmask="0x20"><bounds x="13" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_C" inputmask="0x20"><bounds x="23" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_D" inputmask="0x20"><bounds x="33" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_E" inputmask="0x20"><bounds x="43" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_F" inputmask="0x20"><bounds x="53" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_G" inputmask="0x20"><bounds x="63" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_H" inputmask="0x20"><bounds x="73" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_A" inputmask="0x10"><bounds x="3" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_B" inputmask="0x10"><bounds x="13" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_C" inputmask="0x10"><bounds x="23" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_D" inputmask="0x10"><bounds x="33" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_E" inputmask="0x10"><bounds x="43" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_F" inputmask="0x10"><bounds x="53" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_G" inputmask="0x10"><bounds x="63" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_H" inputmask="0x10"><bounds x="73" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_A" inputmask="0x08"><bounds x="3" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_B" inputmask="0x08"><bounds x="13" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_C" inputmask="0x08"><bounds x="23" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_D" inputmask="0x08"><bounds x="33" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_E" inputmask="0x08"><bounds x="43" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_F" inputmask="0x08"><bounds x="53" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_G" inputmask="0x08"><bounds x="63" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_H" inputmask="0x08"><bounds x="73" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_A" inputmask="0x04"><bounds x="3" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_B" inputmask="0x04"><bounds x="13" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_C" inputmask="0x04"><bounds x="23" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_D" inputmask="0x04"><bounds x="33" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_E" inputmask="0x04"><bounds x="43" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_F" inputmask="0x04"><bounds x="53" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_G" inputmask="0x04"><bounds x="63" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_H" inputmask="0x04"><bounds x="73" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_A" inputmask="0x02"><bounds x="3" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_B" inputmask="0x02"><bounds x="13" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_C" inputmask="0x02"><bounds x="23" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_D" inputmask="0x02"><bounds x="33" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_E" inputmask="0x02"><bounds x="43" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_F" inputmask="0x02"><bounds x="53" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_G" inputmask="0x02"><bounds x="63" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_H" inputmask="0x02"><bounds x="73" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_A" inputmask="0x01"><bounds x="3" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_B" inputmask="0x01"><bounds x="13" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_C" inputmask="0x01"><bounds x="23" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_D" inputmask="0x01"><bounds x="33" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_E" inputmask="0x01"><bounds x="43" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_F" inputmask="0x01"><bounds x="53" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="COL_G" inputmask="0x01"><bounds x="63" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="COL_H" inputmask="0x01"><bounds x="73" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
<!-- right side -->
<bezel element="text_chessmaster"><bounds x="89" y="12" width="22" height="2.8" /></bezel>
<bezel element="text_diamond"> <bounds x="106" y="15" width="14" height="2.5" /></bezel>
<bezel element="text_monitor"> <bounds x="91" y="19.5" width="14" height="2" /></bezel>
<bezel element="text_view"> <bounds x="91" y="26.5" width="8" height="2" /></bezel>
<bezel element="text_reset"> <bounds x="99" y="23.0" width="10" height="2" /></bezel>
<bezel element="text_function"> <bounds x="91" y="32.3" width="16" height="2" /></bezel>
<bezel element="text_notation"> <bounds x="91" y="34.7" width="16" height="2" /></bezel>
<bezel element="text_selection"> <bounds x="91" y="39.3" width="18" height="2" /></bezel>
<bezel element="text_dialogue"> <bounds x="91" y="41.7" width="16" height="2" /></bezel>
<bezel element="text_parameter"> <bounds x="91" y="46.3" width="18" height="2" /></bezel>
<bezel element="text_information"><bounds x="91" y="48.7" width="22" height="2" /></bezel>
<bezel element="text_match"> <bounds x="91" y="53.3" width="10" height="2" /></bezel>
<bezel element="text_time"> <bounds x="91" y="55.7" width="8" height="2" /></bezel>
<bezel element="text_board"> <bounds x="91" y="61.5" width="10" height="2" /></bezel>
<bezel element="text_enter"> <bounds x="91" y="68.5" width="10" height="2" /></bezel>
<bezel element="text_move_back"> <bounds x="87" y="83" width="18" height="2" /></bezel>
<bezel element="text_move_fore"> <bounds x="101" y="83" width="18" height="2" /></bezel>
<bezel element="text_playmode"> <bounds x="92" y="73" width="16" height="2" /></bezel>
<bezel name="monitor_led" element="led"> <bounds x="101" y="19.63" width="1.5" height="1.5" /> </bezel>
<bezel name="playmode_led" element="led"> <bounds x="103" y="73.13" width="1.5" height="1.5" /> </bezel>
<bezel name="reset_line0" element="black_rect"> <bounds x="107.4" y="23.2" width="0.2" height="1.6" /> </bezel>
<bezel name="reset_line1" element="black_rect"> <bounds x="104.7" y="24.0" width="2.9" height="0.2" /> </bezel>
<bezel element="hlb" inputtag="EXTRA" inputmask="0x01"><bounds x="105" y="18" width="5" height="5" /></bezel>
<bezel element="hlb" inputtag="EXTRA" inputmask="0x02"><bounds x="105" y="25" width="5" height="5" /></bezel>
<bezel element="hlb" inputtag="BUTTONS" inputmask="0x40"><bounds x="105" y="32" width="5" height="5" /></bezel>
<bezel element="hlb" inputtag="BUTTONS" inputmask="0x20"><bounds x="105" y="39" width="5" height="5" /></bezel>
<bezel element="hlb" inputtag="BUTTONS" inputmask="0x10"><bounds x="105" y="46" width="5" height="5" /></bezel>
<bezel element="hlb" inputtag="BUTTONS" inputmask="0x08"><bounds x="105" y="53" width="5" height="5" /></bezel>
<bezel element="hlb" inputtag="BUTTONS" inputmask="0x04"><bounds x="105" y="60" width="5" height="5" /></bezel>
<bezel element="hlb" inputtag="BUTTONS" inputmask="0x80"><bounds x="105" y="67" width="5" height="5" /></bezel>
<bezel element="hlb" inputtag="BUTTONS" inputmask="0x02"><bounds x="94" y="77" width="5" height="5" /></bezel>
<bezel element="hlb" inputtag="BUTTONS" inputmask="0x01"><bounds x="108" y="77" width="5" height="5" /></bezel>
<!-- panel 16seg leds -->
<bezel name="display_background" element="black_rect"> <bounds x="89" y="2" width="26" height="9.2" /> </bezel>
<bezel name="digit3" element="digit"> <bounds x="90" y="2.5" width="5.66" height="8.5" /></bezel>
<bezel name="digit2" element="digit"> <bounds x="96" y="2.5" width="5.66" height="8.5" /></bezel>
<bezel name="digit1" element="digit"> <bounds x="102" y="2.5" width="5.66" height="8.5" /></bezel>
<bezel name="digit0" element="digit"> <bounds x="108" y="2.5" width="5.66" height="8.5" /></bezel>
</view>
</mamelayout>

View File

@ -9352,6 +9352,7 @@ cheekyms // 8004 (c) [1980?]
@source:chessmst.cpp @source:chessmst.cpp
chessmst // chessmst //
chessmsta // chessmsta //
chessmstdm //
@source:chesstrv.cpp @source:chesstrv.cpp
borisdpl // borisdpl //
@ -14230,12 +14231,14 @@ tour4000 // (c) 2000 High Video
tour4010 // (c) 2000 High Video tour4010 // (c) 2000 High Video
@source:hikaru.cpp @source:hikaru.cpp
airtrix // 2001.02 Air Trix airtrix // 2001.02 Air Trix (Rev A)
airtrixo // 2001.02 Air Trix (original)
braveff // 1999.06 Syouboushi Brave Fire Fighters braveff // 1999.06 Syouboushi Brave Fire Fighters
hikaru // 2000.?? Hikaru BIOS hikaru // 2000.?? Hikaru BIOS
pharrier // 2000.12 Planet Harriers pharrier // 2000.12 Planet Harriers (Rev A)
podrace // 2000.06 Star Wars: Racer Arcade podrace // 2000.06 Star Wars: Racer Arcade
sgnascar // 2000.09 Nascar Arcade sgnascar // 2000.10 Nascar Arcade (Rev A)
sgnascaro // 2000.09 Nascar Arcade (original)
@source:himesiki.cpp @source:himesiki.cpp
himesiki // (c) 1989 Hi-Soft himesiki // (c) 1989 Hi-Soft

View File

@ -180,7 +180,7 @@ UINT32 rollrace_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap
sx = offs % 32; sx = offs % 32;
sy = offs / 32; sy = offs / 32;
scroll = ( 8 * sy + m_colorram[2 * sx] ) % 256; scroll = ( 8 * sy - m_colorram[2 * sx] ) % 256;
col = m_colorram[ sx * 2 + 1 ]&0x1f; col = m_colorram[ sx * 2 + 1 ]&0x1f;
if (!m_flipy) if (!m_flipy)

View File

@ -157,10 +157,11 @@ WRITE8_MEMBER(superqix_state::superqix_0410_w)
} }
/* bit 2 selects which of the two bitmaps to display (for 2 players game) */ /* bit 2 selects which of the two bitmaps to display (for 2 players game) */
m_show_bitmap = (data & 0x04) >> 2; m_show_bitmap = BIT(data,2);
/* bit 3 enables NMI */ /* bit 3 enables NMI */
m_nmi_mask = data & 0x08; m_nmi_mask = BIT(data,3);
//if (!(m_nmi_mask)) m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); // test for later, could this explain the need for 4 NMIs per frame instead of one? Is the game manually retriggering NMI using the mask register, several times during the vblank period?
/* bits 4-5 control ROM bank */ /* bits 4-5 control ROM bank */
membank("bank1")->set_entry((data & 0x30) >> 4); membank("bank1")->set_entry((data & 0x30) >> 4);