summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
author Robbbert <Robbbert@users.noreply.github.com>2019-12-17 15:41:15 +1100
committer Robbbert <Robbbert@users.noreply.github.com>2019-12-17 15:41:15 +1100
commit6679a78dcad1374c6b42b0fc09838f2dc9efa92c (patch)
treeb4ad7f084df1727e7e019b950f4a35ac9aefc0fc
parent82f65e93b4043438ed760c54307acde369c147e4 (diff)
parenta91d1faee843b7835009aa041fcdcbeac399b2bf (diff)
Merge remote-tracking branch 'upstream/master'
-rw-r--r--src/devices/bus/s100/polyfdc.cpp1
-rw-r--r--src/devices/cpu/i386/cpuidmsrs.hxx20
-rw-r--r--src/devices/machine/i8255.cpp6
-rw-r--r--src/emu/emuopts.cpp2
-rw-r--r--src/frontend/mame/clifront.cpp4
-rw-r--r--src/frontend/mame/infoxml.cpp21
-rw-r--r--src/frontend/mame/media_ident.cpp84
-rw-r--r--src/mame/drivers/cabaret.cpp1
-rw-r--r--src/mame/drivers/cgang.cpp62
-rw-r--r--src/mame/drivers/fidel_cc1.cpp2
-rw-r--r--src/mame/drivers/fidel_cc10.cpp2
-rw-r--r--src/mame/drivers/fidel_elite.cpp2
-rw-r--r--src/mame/drivers/fidel_vcc.cpp2
-rw-r--r--src/mame/drivers/hh_cop400.cpp9
-rw-r--r--src/mame/drivers/hh_pic16.cpp9
-rw-r--r--src/mame/drivers/hh_tms1k.cpp13
-rw-r--r--src/mame/drivers/intellect02.cpp1
-rw-r--r--src/mame/drivers/kingdrby.cpp2
-rw-r--r--src/mame/drivers/rotaryf.cpp4
-rw-r--r--src/mame/drivers/rulechan.cpp1
-rw-r--r--src/mame/drivers/segae.cpp1
-rw-r--r--src/mame/drivers/subsino.cpp2
-rw-r--r--src/mame/drivers/suprloco.cpp1
-rw-r--r--src/mame/layout/cgang.lay259
-rw-r--r--src/mame/video/xbox_nv2a.cpp20
25 files changed, 401 insertions, 130 deletions
diff --git a/src/devices/bus/s100/polyfdc.cpp b/src/devices/bus/s100/polyfdc.cpp
index 8f6d885302b..962424324e0 100644
--- a/src/devices/bus/s100/polyfdc.cpp
+++ b/src/devices/bus/s100/polyfdc.cpp
@@ -121,4 +121,5 @@ void poly_fdc_device::device_add_mconfig(machine_config &config)
m_pio->out_pa_callback().set(FUNC(poly_fdc_device::pa_w));
m_pio->in_pb_callback().set(FUNC(poly_fdc_device::pb_r));
m_pio->out_pc_callback().set(FUNC(poly_fdc_device::pc_w));
+ m_pio->tri_pc_callback().set_constant(0xfe);
}
diff --git a/src/devices/cpu/i386/cpuidmsrs.hxx b/src/devices/cpu/i386/cpuidmsrs.hxx
index dcbc8faff37..63c233f6776 100644
--- a/src/devices/cpu/i386/cpuidmsrs.hxx
+++ b/src/devices/cpu/i386/cpuidmsrs.hxx
@@ -158,23 +158,13 @@ void pentium_pro_device::opcode_wrmsr(uint64_t data, bool &valid_msr)
uint64_t pentium4_device::opcode_rdmsr(bool &valid_msr)
{
- switch (REG32(ECX))
- {
- default:
- logerror("RDMSR: unimplemented register called %08x at %08x\n", REG32(ECX), m_pc - 2);
- valid_msr = true;
- return 0;
- }
- return -1;
+ logerror("RDMSR: unimplemented register called %08x at %08x\n", REG32(ECX), m_pc - 2);
+ valid_msr = true;
+ return 0;
}
void pentium4_device::opcode_wrmsr(uint64_t data, bool &valid_msr)
{
- switch (REG32(ECX))
- {
- default:
- logerror("WRMSR: unimplemented register called %08x (%08x%08x) at %08x\n", REG32(ECX), (uint32_t)(data >> 32), (uint32_t)data, m_pc - 2);
- valid_msr = true;
- break;
- }
+ logerror("WRMSR: unimplemented register called %08x (%08x%08x) at %08x\n", REG32(ECX), (uint32_t)(data >> 32), (uint32_t)data, m_pc - 2);
+ valid_msr = true;
}
diff --git a/src/devices/machine/i8255.cpp b/src/devices/machine/i8255.cpp
index ffb8f503ce9..212eeda644f 100644
--- a/src/devices/machine/i8255.cpp
+++ b/src/devices/machine/i8255.cpp
@@ -249,9 +249,9 @@ void i8255_device::device_resolve_objects()
m_out_pa_cb.resolve_safe();
m_out_pb_cb.resolve_safe();
m_out_pc_cb.resolve_safe();
- m_tri_pa_cb.resolve_safe(0);
- m_tri_pb_cb.resolve_safe(0);
- m_tri_pc_cb.resolve_safe(0);
+ m_tri_pa_cb.resolve_safe(0xff);
+ m_tri_pb_cb.resolve_safe(0xff);
+ m_tri_pc_cb.resolve_safe(0xff);
}
//-------------------------------------------------
diff --git a/src/emu/emuopts.cpp b/src/emu/emuopts.cpp
index 1c664875e8d..aac1704347a 100644
--- a/src/emu/emuopts.cpp
+++ b/src/emu/emuopts.cpp
@@ -1056,7 +1056,7 @@ void emu_options::command_argument_processed()
{
// some command line arguments require that the system name be set, so we can get slot options
if (command_arguments().size() == 1 && !core_iswildstr(command_arguments()[0].c_str()) &&
- (command() == "listdevices" || (command() == "listslots") || (command() == "listmedia")))
+ (command() == "listdevices" || (command() == "listslots") || (command() == "listmedia") || (command() == "listsoftware")))
{
set_system_name(command_arguments()[0]);
}
diff --git a/src/frontend/mame/clifront.cpp b/src/frontend/mame/clifront.cpp
index de31ae0d94c..3316240ea9b 100644
--- a/src/frontend/mame/clifront.cpp
+++ b/src/frontend/mame/clifront.cpp
@@ -66,7 +66,7 @@
#define CLICOMMAND_ROMIDENT "romident"
#define CLICOMMAND_LISTDEVICES "listdevices"
#define CLICOMMAND_LISTSLOTS "listslots"
-#define CLICOMMAND_LISTMEDIA "listmedia" // needed by MESS
+#define CLICOMMAND_LISTMEDIA "listmedia"
#define CLICOMMAND_LISTSOFTWARE "listsoftware"
#define CLICOMMAND_VERIFYSOFTWARE "verifysoftware"
#define CLICOMMAND_GETSOFTLIST "getsoftlist"
@@ -1203,8 +1203,6 @@ void cli_frontend::output_single_softlist(FILE *out, software_list_device &swlis
software supported by a given game or set of
games
TODO: Add all information read from the source files
- Possible improvement: use a sorted list for
- identifying duplicate lists.
-------------------------------------------------*/
void cli_frontend::listsoftware(const std::vector<std::string> &args)
diff --git a/src/frontend/mame/infoxml.cpp b/src/frontend/mame/infoxml.cpp
index b8273fa7125..ea85bf3b172 100644
--- a/src/frontend/mame/infoxml.cpp
+++ b/src/frontend/mame/infoxml.cpp
@@ -74,7 +74,7 @@ namespace
void output_features(std::ostream &out, device_type type, device_t::feature_type unemulated, device_t::feature_type imperfect);
void output_images(std::ostream &out, device_t &device, const char *root_tag);
void output_slots(std::ostream &out, machine_config &config, device_t &device, const char *root_tag, device_type_set *devtypes);
- void output_software_list(std::ostream &out, device_t &root);
+ void output_software_lists(std::ostream &out, device_t &root, const char *root_tag);
void output_ramoptions(std::ostream &out, device_t &root);
void output_one_device(std::ostream &out, machine_config &config, device_t &device, const char *devtag);
@@ -245,6 +245,7 @@ static const char s_dtd_string[] =
"\t\t\t\t<!ATTLIST slotoption default (yes|no) \"no\">\n"
"\t\t<!ELEMENT softwarelist EMPTY>\n"
"\t\t\t<!ATTLIST softwarelist name CDATA #REQUIRED>\n"
+"\t\t\t<!ATTLIST softwarelist tag CDATA #REQUIRED>\n"
"\t\t\t<!ATTLIST softwarelist status (original|compatible) #REQUIRED>\n"
"\t\t\t<!ATTLIST softwarelist filter CDATA #IMPLIED>\n"
"\t\t<!ELEMENT ramoption (#PCDATA)>\n"
@@ -624,7 +625,7 @@ void output_one(std::ostream &out, driver_enumerator &drivlist, const game_drive
output_features(out, driver.type, overall_unemulated, overall_imperfect);
output_images(out, config.root_device(), "");
output_slots(out, config, config.root_device(), "", devtypes);
- output_software_list(out, config.root_device());
+ output_software_lists(out, config.root_device(), "");
output_ramoptions(out, config.root_device());
// close the topmost tag
@@ -693,6 +694,7 @@ void output_one_device(std::ostream &out, machine_config &config, device_t &devi
output_features(out, device.type(), overall_unemulated, overall_imperfect);
output_images(out, device, devtag);
output_slots(out, config, device, devtag, nullptr);
+ output_software_lists(out, device, devtag);
out << util::string_format("\t</%s>\n", XML_TOP);
}
@@ -1937,15 +1939,24 @@ void output_slots(std::ostream &out, machine_config &config, device_t &device, c
//-------------------------------------------------
-// output_software_list - print the information
+// output_software_lists - print the information
// for all known software lists for this system
//-------------------------------------------------
-void output_software_list(std::ostream &out, device_t &root)
+void output_software_lists(std::ostream &out, device_t &root, const char *root_tag)
{
for (const software_list_device &swlist : software_list_device_iterator(root))
{
- out << util::string_format("\t\t<softwarelist name=\"%s\" status=\"%s\"", normalize_string(swlist.list_name().c_str()), swlist.is_original() ? "original" : "compatible");
+ if (&static_cast<const device_t &>(swlist) == &root)
+ {
+ assert(swlist.list_name().empty());
+ continue;
+ }
+
+ std::string newtag(swlist.tag()), oldtag(":");
+ newtag = newtag.substr(newtag.find(oldtag.append(root_tag)) + oldtag.length());
+
+ out << util::string_format("\t\t<softwarelist tag=\"%s\" name=\"%s\" status=\"%s\"", normalize_string(newtag.c_str()), normalize_string(swlist.list_name().c_str()), swlist.is_original() ? "original" : "compatible");
if (swlist.filter())
out << util::string_format(" filter=\"%s\"", normalize_string(swlist.filter()));
out << "/>\n";
diff --git a/src/frontend/mame/media_ident.cpp b/src/frontend/mame/media_ident.cpp
index dc88fae4365..9881e992a51 100644
--- a/src/frontend/mame/media_ident.cpp
+++ b/src/frontend/mame/media_ident.cpp
@@ -332,73 +332,61 @@ void media_identifier::digest_data(std::vector<file_info> &info, char const *nam
void media_identifier::match_hashes(std::vector<file_info> &info)
{
- std::unordered_set<std::string> listnames;
-
- // iterate over drivers
- m_drivlist.reset();
- while (m_drivlist.next())
- {
- // iterate over regions and files within the region
- device_t &device = m_drivlist.config()->root_device();
- for (romload::region const &region : romload::entries(device.rom_region()).get_regions())
- {
- for (romload::file const &rom : region.get_files())
+ auto match_device =
+ [&info, listnames = std::unordered_set<std::string>()] (device_t &device) mutable
{
- util::hash_collection const romhashes(rom.get_hashdata());
- if (!romhashes.flag(util::hash_collection::FLAG_NO_DUMP))
+ // iterate over regions and files within the region
+ for (romload::region const &region : romload::entries(device.rom_region()).get_regions())
{
- for (file_info &file : info)
- file.match(device, rom, romhashes);
+ for (romload::file const &rom : region.get_files())
+ {
+ util::hash_collection const romhashes(rom.get_hashdata());
+ if (!romhashes.flag(util::hash_collection::FLAG_NO_DUMP))
+ {
+ for (file_info &file : info)
+ file.match(device, rom, romhashes);
+ }
+ }
}
- }
- }
- // next iterate over softlists
- for (software_list_device &swlistdev : software_list_device_iterator(device))
- {
- if (listnames.insert(swlistdev.list_name()).second)
- {
- for (software_info const &swinfo : swlistdev.get_info())
+ // next iterate over softlists
+ for (software_list_device &swlistdev : software_list_device_iterator(device))
{
- for (software_part const &part : swinfo.parts())
+ if (!listnames.insert(swlistdev.list_name()).second)
+ continue;
+
+ for (software_info const &swinfo : swlistdev.get_info())
{
- for (rom_entry const *region = part.romdata().data(); region; region = rom_next_region(region))
+ for (software_part const &part : swinfo.parts())
{
- for (rom_entry const *rom = rom_first_file(region); rom; rom = rom_next_file(rom))
+ for (rom_entry const *region = part.romdata().data(); region; region = rom_next_region(region))
{
- util::hash_collection romhashes(ROM_GETHASHDATA(rom));
- if (!romhashes.flag(util::hash_collection::FLAG_NO_DUMP))
+ for (rom_entry const *rom = rom_first_file(region); rom; rom = rom_next_file(rom))
{
- for (file_info &file : info)
- file.match(swlistdev.list_name(), swinfo, *rom, romhashes);
+ util::hash_collection romhashes(ROM_GETHASHDATA(rom));
+ if (!romhashes.flag(util::hash_collection::FLAG_NO_DUMP))
+ {
+ for (file_info &file : info)
+ file.match(swlistdev.list_name(), swinfo, *rom, romhashes);
+ }
}
}
}
}
}
- }
- }
- }
+ };
+
+ // iterate over drivers
+ m_drivlist.reset();
+ while (m_drivlist.next())
+ match_device(m_drivlist.config()->root_device());
- // iterator over devices
+ // iterator over registered device types
machine_config config(GAME_NAME(___empty), m_drivlist.options());
machine_config::token const tok(config.begin_configuration(config.root_device()));
for (device_type type : registered_device_types)
{
- // iterate over regions and files within the region
- device_t *const device = config.device_add("_tmp", type, 0);
- for (romload::region const &region : romload::entries(device->rom_region()).get_regions())
- {
- for (romload::file const &rom : region.get_files())
- {
- util::hash_collection const romhashes(rom.get_hashdata());
- if (!romhashes.flag(util::hash_collection::FLAG_NO_DUMP))
- {
- for (file_info &file : info)
- file.match(*device, rom, romhashes);
- }
- }
- }
+ match_device(*config.device_add("_tmp", type, 0));
config.device_remove("_tmp");
}
}
diff --git a/src/mame/drivers/cabaret.cpp b/src/mame/drivers/cabaret.cpp
index 7ec5eacd779..126c9a7856c 100644
--- a/src/mame/drivers/cabaret.cpp
+++ b/src/mame/drivers/cabaret.cpp
@@ -386,6 +386,7 @@ void cabaret_state::cabaret(machine_config &config)
i8255_device &ppi3(I8255(config, "ppi3"));
ppi3.out_pa_callback().set(FUNC(cabaret_state::nmi_and_coins_w));
+ ppi3.tri_pa_callback().set_constant(0xf0);
ppi3.in_pb_callback().set_ioport("DSW1");
ppi3.in_pc_callback().set_ioport("DSW2");
diff --git a/src/mame/drivers/cgang.cpp b/src/mame/drivers/cgang.cpp
index a1f3dc96bec..2a5ac175cd7 100644
--- a/src/mame/drivers/cgang.cpp
+++ b/src/mame/drivers/cgang.cpp
@@ -8,11 +8,14 @@ Data East, they titled it "Cosmo Gang".
It is an electromechanical arcade lightgun game. There is no screen, feedback
is with motorized elements, lamps and 7segs, and of course sounds and music.
+To shoot the targets in MAME, either enable -mouse and click on one of the
+cosmogang lanes(left mouse button doubles as gun trigger by default).
+Or, configure the gun aim inputs and share them with the trigger. For example
+use Z,X,C,V,B for the gun aims, and "Z or X or C or V or B" for the trigger.
+
TODO:
-- internal artwork
-- game can't really be played within MAME's constraints (mechanical stuff,
+- game can't be played properly within MAME's constraints (mechanical stuff,
and the lightguns linked to it)
-- ppi2_b_r cabinet center sensors, doesn't seem to affect the game at all
-------------------------------------------------------------------------------
@@ -63,6 +66,9 @@ Overall, the hardware has similarities with Wacky Gator, see wacky_gator.cpp.
#include "speaker.h"
+// internal artwork
+#include "cgang.lh" // clickable
+
namespace {
@@ -70,8 +76,9 @@ namespace {
static constexpr int DOOR_MOTOR_LIMIT = 2000;
// length of each cosmogang lane, in motor steps
-// at game start, one cosmo going forward takes around 6-7 seconds (compared to video recording)
-static constexpr int CG_MOTOR_LIMIT = 850;
+// At game start, one cosmo going forward takes around 7 seconds, and if the player does nothing
+// at the 1st round, game is lost with around 10 seconds remaining (compared to video recording).
+static constexpr int CG_MOTOR_LIMIT = 1000;
class cgang_state : public driver_device
@@ -181,7 +188,7 @@ private:
int m_cg_motor_clk[5];
int m_cg_motor_pos[5];
- int m_en_motor_pos[5];
+ int m_en_pos[5];
emu_timer *m_sol_filter[5];
TIMER_CALLBACK_MEMBER(output_sol) { m_en_sol[param >> 1] = param & 1; }
@@ -214,7 +221,7 @@ void cgang_state::machine_start()
save_item(NAME(m_cg_motor_dir));
save_item(NAME(m_cg_motor_clk));
save_item(NAME(m_cg_motor_pos));
- save_item(NAME(m_en_motor_pos));
+ save_item(NAME(m_en_pos));
}
void cgang_state::machine_reset()
@@ -227,7 +234,7 @@ void cgang_state::machine_reset()
{
m_cg_motor_clk[i] = 0;
m_cg_motor_pos[i] = 0;
- m_en_motor_pos[i] = CG_MOTOR_LIMIT;
+ m_en_pos[i] = CG_MOTOR_LIMIT;
m_en_sol[i] = 0;
}
@@ -287,33 +294,33 @@ WRITE_LINE_MEMBER(cgang_state::motor_clock_w)
void cgang_state::cg_motor_tick(int i)
{
// note: the cosmogangs are stuck on the drive belts(5),
- // and the energy crates can lock(or loosen) themselves from the belt
+ // and the energy crates can lock themselves into position
if (BIT(m_cg_motor_dir, i))
{
if (m_cg_motor_pos[i] > 0)
{
- m_cg_motor_pos[i]--;
+ // pull energy crate
+ if (m_en_sol[i] && m_cg_motor_pos[i] == m_en_pos[i])
+ m_en_pos[i]--;
- // 'pull' energy crate
- if (m_en_sol[i])
- m_en_motor_pos[i]--;
+ m_cg_motor_pos[i]--;
}
}
else
{
- // 'push' energy crate
- if (m_en_sol[i])
+ if (m_cg_motor_pos[i] < CG_MOTOR_LIMIT)
{
- if (m_en_motor_pos[i] < CG_MOTOR_LIMIT)
+ if (m_cg_motor_pos[i] < m_en_pos[i])
+ m_cg_motor_pos[i]++;
+
+ // push energy crate
+ else if (m_en_sol[i])
{
- m_en_motor_pos[i]++;
m_cg_motor_pos[i]++;
+ m_en_pos[i]++;
}
}
-
- else if (m_cg_motor_pos[i] < m_en_motor_pos[i])
- m_cg_motor_pos[i]++;
}
refresh_motor_output();
@@ -335,7 +342,7 @@ void cgang_state::refresh_motor_output()
for (int i = 0; i < 5; i++)
{
m_cg_count[i] = int((m_cg_motor_pos[i] / float(CG_MOTOR_LIMIT)) * 100.0 + 0.5);
- m_en_count[i] = int((m_en_motor_pos[i] / float(CG_MOTOR_LIMIT)) * 100.0 + 0.5);
+ m_en_count[i] = int((m_en_pos[i] / float(CG_MOTOR_LIMIT)) * 100.0 + 0.5);
}
m_door_count = int((m_door_motor_pos / float(DOOR_MOTOR_LIMIT)) * 100.0 + 0.5);
@@ -350,7 +357,7 @@ READ8_MEMBER(cgang_state::ppi1_b_r)
// PB0-PB4: cabinet front limit (CR1INI-CR5INI)
for (int i = 0; i < 5; i++)
- if (m_en_motor_pos[i] == CG_MOTOR_LIMIT)
+ if (m_en_pos[i] == CG_MOTOR_LIMIT)
data ^= 1 << i;
// PB5-PB7: cabinet back limit (HST1-HST3)
@@ -372,7 +379,7 @@ READ8_MEMBER(cgang_state::ppi1_c_r)
// PC2-PC6: cosmogang-energy crate collision (CR1-CR5)
for (int i = 0; i < 5; i++)
- if (m_cg_motor_pos[i] == m_en_motor_pos[i])
+ if (m_cg_motor_pos[i] == m_en_pos[i])
data ^= 1 << (i + 2);
// PC7: audiocpu mailbox status
@@ -414,7 +421,9 @@ READ8_MEMBER(cgang_state::ppi2_b_r)
u8 data = 0x1f;
// PB0-PB4: cabinet center (G1POG-G5POG)
- // how this is sensed?
+ for (int i = 0; i < 5; i++)
+ if (m_cg_motor_pos[i] < (CG_MOTOR_LIMIT / 8))
+ data ^= 1 << i;
return data;
}
@@ -765,6 +774,7 @@ void cgang_state::cgang(machine_config &config)
m_ppi[1]->in_pb_callback().set(FUNC(cgang_state::ppi2_b_r));
m_ppi[1]->in_pc_callback().set_ioport("SW4").lshift(4);
m_ppi[1]->out_pc_callback().set(FUNC(cgang_state::ppi2_c_w));
+ m_ppi[1]->tri_pc_callback().set_constant(0);
I8255(config, m_ppi[2]); // 0x80: all = output
m_ppi[2]->out_pa_callback().set(FUNC(cgang_state::ppi3_a_w));
@@ -792,7 +802,7 @@ void cgang_state::cgang(machine_config &config)
PWM_DISPLAY(config, m_digits).set_size(10, 7);
m_digits->set_segmask(0x3ff, 0x7f);
- //config.set_default_layout(layout_cgang);
+ config.set_default_layout(layout_cgang);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -835,4 +845,4 @@ ROM_END
******************************************************************************/
/* YEAR NAME PARENT MACHINE INPUT CLASS INIT MONITOR COMPANY, FULLNAME, FLAGS */
-GAME( 1990, cgang, 0, cgang, cgang, cgang_state, empty_init, ROT0, "Namco (Data East license)", "Cosmo Gang (US)", MACHINE_SUPPORTS_SAVE | MACHINE_MECHANICAL | MACHINE_NOT_WORKING )
+GAME( 1990, cgang, 0, cgang, cgang, cgang_state, empty_init, ROT0, "Namco (Data East license)", "Cosmo Gang (US)", MACHINE_SUPPORTS_SAVE | MACHINE_MECHANICAL | MACHINE_CLICKABLE_ARTWORK | MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/fidel_cc1.cpp b/src/mame/drivers/fidel_cc1.cpp
index 66eec8aeab2..3d9cfec2334 100644
--- a/src/mame/drivers/fidel_cc1.cpp
+++ b/src/mame/drivers/fidel_cc1.cpp
@@ -229,7 +229,9 @@ void cc1_state::cc1(machine_config &config)
I8255(config, m_ppi8255);
m_ppi8255->in_pa_callback().set(FUNC(cc1_state::ppi_porta_r));
m_ppi8255->out_pb_callback().set(FUNC(cc1_state::ppi_portb_w));
+ m_ppi8255->tri_pb_callback().set_constant(0);
m_ppi8255->out_pc_callback().set(FUNC(cc1_state::ppi_portc_w));
+ m_ppi8255->tri_pc_callback().set_constant(0);
TIMER(config, "delay").configure_generic(nullptr);
diff --git a/src/mame/drivers/fidel_cc10.cpp b/src/mame/drivers/fidel_cc10.cpp
index 0e2fc2ec4c2..a7bb7e43860 100644
--- a/src/mame/drivers/fidel_cc10.cpp
+++ b/src/mame/drivers/fidel_cc10.cpp
@@ -298,8 +298,10 @@ void ccx_state::acr(machine_config &config)
I8255(config, m_ppi8255);
m_ppi8255->out_pa_callback().set(FUNC(ccx_state::ppi_porta_w));
+ m_ppi8255->tri_pa_callback().set_constant(0);
m_ppi8255->in_pb_callback().set_constant(0);
m_ppi8255->out_pb_callback().set(FUNC(ccx_state::ppi_portb_w));
+ m_ppi8255->tri_pb_callback().set_constant(0);
m_ppi8255->in_pc_callback().set(FUNC(ccx_state::ppi_portc_r));
m_ppi8255->out_pc_callback().set(FUNC(ccx_state::ppi_portc_w));
diff --git a/src/mame/drivers/fidel_elite.cpp b/src/mame/drivers/fidel_elite.cpp
index beb2a6b6b3b..46ead41491d 100644
--- a/src/mame/drivers/fidel_elite.cpp
+++ b/src/mame/drivers/fidel_elite.cpp
@@ -469,8 +469,10 @@ void elite_state::eas(machine_config &config)
I8255(config, m_ppi8255); // port B: input, port A & C: output
m_ppi8255->out_pa_callback().set(FUNC(elite_state::ppi_porta_w));
+ m_ppi8255->tri_pa_callback().set_constant(0);
m_ppi8255->in_pb_callback().set(FUNC(elite_state::ppi_portb_r));
m_ppi8255->out_pc_callback().set(FUNC(elite_state::ppi_portc_w));
+ m_ppi8255->tri_pc_callback().set_constant(0);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
diff --git a/src/mame/drivers/fidel_vcc.cpp b/src/mame/drivers/fidel_vcc.cpp
index 430b58b8ee4..ddf9b772864 100644
--- a/src/mame/drivers/fidel_vcc.cpp
+++ b/src/mame/drivers/fidel_vcc.cpp
@@ -333,8 +333,10 @@ void vcc_state::vcc(machine_config &config)
I8255(config, m_ppi8255);
m_ppi8255->out_pa_callback().set(FUNC(vcc_state::ppi_porta_w));
+ m_ppi8255->tri_pa_callback().set_constant(0);
m_ppi8255->in_pb_callback().set(FUNC(vcc_state::ppi_portb_r));
m_ppi8255->out_pb_callback().set(FUNC(vcc_state::ppi_portb_w));
+ m_ppi8255->tri_pb_callback().set_constant(0);
m_ppi8255->in_pc_callback().set(FUNC(vcc_state::ppi_portc_r));
m_ppi8255->out_pc_callback().set(FUNC(vcc_state::ppi_portc_w));
diff --git a/src/mame/drivers/hh_cop400.cpp b/src/mame/drivers/hh_cop400.cpp
index 51567e4d1ed..5380f7a25da 100644
--- a/src/mame/drivers/hh_cop400.cpp
+++ b/src/mame/drivers/hh_cop400.cpp
@@ -44,9 +44,6 @@
//#include "hh_cop400_test.lh" // common test-layout - use external artwork
-// workaround to disable default LMB on IPT_BUTTON1 when running MAME with -mouse, conflict with clickable artwork
-#define PORT_BUTTON1_NOMOUSE PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(JOYCODE_BUTTON1_INDEXED(0))
-
class hh_cop400_state : public driver_device
{
@@ -206,7 +203,7 @@ static INPUT_PORTS_START( ctstein )
PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("IN.2") // G2 port L
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BUTTON1_NOMOUSE PORT_NAME("Red Button")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Red Button")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Yellow Button")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Green Button")
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Blue Button")
@@ -901,7 +898,7 @@ static INPUT_PORTS_START( funjacks )
PORT_START("IN.2") // D2 port G
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON6 )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BUTTON1_NOMOUSE // positioned at 1 o'clock on panel, increment clockwise
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) // positioned at 1 o'clock on panel, increment clockwise
PORT_START("IN.3") // port G
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
@@ -1352,7 +1349,7 @@ READ8_MEMBER(lightfgt_state::read_g)
static INPUT_PORTS_START( lightfgt )
PORT_START("IN.0") // SO port G
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON6 )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BUTTON1_NOMOUSE // note: button 1 is on the left side from player perspective
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) // note: button 1 is on the left side from player perspective
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_COCKTAIL
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON10 ) PORT_COCKTAIL
diff --git a/src/mame/drivers/hh_pic16.cpp b/src/mame/drivers/hh_pic16.cpp
index 4bbe3234e08..9a566101ef4 100644
--- a/src/mame/drivers/hh_pic16.cpp
+++ b/src/mame/drivers/hh_pic16.cpp
@@ -68,9 +68,6 @@
#include "hh_pic16_test.lh" // common test-layout - use external artwork
-// workaround to disable default LMB on IPT_BUTTON1 when running MAME with -mouse, conflict with clickable artwork
-#define PORT_BUTTON1_NOMOUSE PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(JOYCODE_BUTTON1_INDEXED(0))
-
class hh_pic16_state : public driver_device
{
@@ -263,7 +260,7 @@ static INPUT_PORTS_START( touchme )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_NAME("Skill")
PORT_START("IN.1") // B1 port A
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BUTTON1_NOMOUSE PORT_NAME("Blue Button")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Blue Button")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Yellow Button")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Red Button")
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Green Button")
@@ -605,7 +602,7 @@ WRITE8_MEMBER(maniac_state::write_c)
static INPUT_PORTS_START( maniac )
PORT_START("IN.0") // port A
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BUTTON1_NOMOUSE PORT_PLAYER(1) // top button, increment clockwise
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) // top button, increment clockwise
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
@@ -729,7 +726,7 @@ WRITE8_MEMBER(matchme_state::write_c)
static INPUT_PORTS_START( matchme )
PORT_START("IN.0") // C4 port C
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BUTTON1_NOMOUSE // purple
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) // purple
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) // pink
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) // yellow
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) // blue
diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp
index 47b1bfcba59..0463f4ac7cb 100644
--- a/src/mame/drivers/hh_tms1k.cpp
+++ b/src/mame/drivers/hh_tms1k.cpp
@@ -249,9 +249,6 @@
//#include "hh_tms1k_test.lh" // common test-layout - use external artwork
-// workaround to disable default LMB on IPT_BUTTON1 when running MAME with -mouse, conflict with clickable artwork
-#define PORT_BUTTON1_NOMOUSE PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(JOYCODE_BUTTON1_INDEXED(0))
-
// machine_start/reset
@@ -6973,7 +6970,7 @@ static INPUT_PORTS_START( simon )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("IN.1") // R1
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_BUTTON1_NOMOUSE PORT_NAME("Green Button")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Green Button")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Red Button")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Yellow Button")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Blue Button")
@@ -7136,7 +7133,7 @@ static INPUT_PORTS_START( ssimon )
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("P1 Yellow Button")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P1 Green Button")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P1 Blue Button")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_BUTTON1_NOMOUSE PORT_NAME("P1 Red Button")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P1 Red Button")
PORT_START("IN.4") // R9
PORT_CONFNAME( 0x0f, 0x02, DEF_STR( Difficulty ) )
@@ -11274,7 +11271,7 @@ static INPUT_PORTS_START( copycat )
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Green Button")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Red Button")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Orange Button")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_BUTTON1_NOMOUSE PORT_NAME("Yellow Button")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Yellow Button")
PORT_START("IN.1") // R5
PORT_CONFNAME( 0x0f, 0x01, DEF_STR( Difficulty ) )
@@ -11383,7 +11380,7 @@ static INPUT_PORTS_START( copycatm2 )
PORT_START("IN.0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Orange Button")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Red Button")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_BUTTON1_NOMOUSE PORT_NAME("Yellow Button")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Yellow Button")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Green Button")
INPUT_PORTS_END
@@ -11466,7 +11463,7 @@ WRITE16_MEMBER(ditto_state::write_o)
static INPUT_PORTS_START( ditto )
PORT_START("IN.0")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_BUTTON1_NOMOUSE PORT_NAME("Yellow Button")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Yellow Button")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Blue Button")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Orange Button")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Red Button")
diff --git a/src/mame/drivers/intellect02.cpp b/src/mame/drivers/intellect02.cpp
index 7b83669c247..3a2b9f731f0 100644
--- a/src/mame/drivers/intellect02.cpp
+++ b/src/mame/drivers/intellect02.cpp
@@ -239,6 +239,7 @@ void intel02_state::intel02(machine_config &config)
I8255(config, m_ppi8255);
m_ppi8255->in_pa_callback().set(FUNC(intel02_state::input_r));
m_ppi8255->out_pb_callback().set(FUNC(intel02_state::digit_w));
+ m_ppi8255->tri_pb_callback().set_constant(0);
m_ppi8255->out_pc_callback().set(FUNC(intel02_state::control_w));
m_ppi8255->tri_pc_callback().set_constant(0x80);
diff --git a/src/mame/drivers/kingdrby.cpp b/src/mame/drivers/kingdrby.cpp
index 053027b9e25..e6039a808e6 100644
--- a/src/mame/drivers/kingdrby.cpp
+++ b/src/mame/drivers/kingdrby.cpp
@@ -995,6 +995,7 @@ void kingdrby_state::kingdrby(machine_config &config)
// 6000-6003 PPI group modes 0/0 - B & C (lower) as input, A & C (upper) as output.
I8255A(config, m_ppi[1]);
m_ppi[1]->out_pa_callback().set(FUNC(kingdrby_state::sound_cmd_w));
+ m_ppi[1]->tri_pa_callback().set_constant(0x7f);
m_ppi[1]->in_pb_callback().set(FUNC(kingdrby_state::key_matrix_r));
m_ppi[1]->in_pc_callback().set(FUNC(kingdrby_state::input_mux_r));
m_ppi[1]->out_pc_callback().set(FUNC(kingdrby_state::outport2_w));
@@ -1031,6 +1032,7 @@ void kingdrby_state::kingdrbb(machine_config &config)
/* C as input, (all) as output */
m_ppi[0]->out_pa_callback().set(FUNC(kingdrby_state::sound_cmd_w));
m_ppi[0]->in_pa_callback().set_constant(0);
+ m_ppi[0]->tri_pa_callback().set_constant(0x7f);
m_ppi[0]->in_pb_callback().set_ioport("IN0");
m_ppi[0]->out_pb_callback().set(FUNC(kingdrby_state::outportb_w));
m_ppi[0]->in_pc_callback().set_ioport("IN1");
diff --git a/src/mame/drivers/rotaryf.cpp b/src/mame/drivers/rotaryf.cpp
index df9bec07129..362f81b2388 100644
--- a/src/mame/drivers/rotaryf.cpp
+++ b/src/mame/drivers/rotaryf.cpp
@@ -123,6 +123,9 @@ WRITE8_MEMBER(rotaryf_state::porta_w)
WRITE8_MEMBER(rotaryf_state::portc_w)
{
+ if (data == 0xff)
+ return;
+
machine().bookkeeping().coin_counter_w(0, BIT(data, 1));
// bit 5 set when game starts, but isn't coin lockout?
@@ -272,6 +275,7 @@ void rotaryf_state::rotaryf(machine_config &config)
ppi.out_pa_callback().set(FUNC(rotaryf_state::porta_w));
ppi.in_pb_callback().set(FUNC(rotaryf_state::portb_r));
ppi.out_pc_callback().set(FUNC(rotaryf_state::portc_w));
+ //ppi.tri_pc_callback().set_constant(0);
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
diff --git a/src/mame/drivers/rulechan.cpp b/src/mame/drivers/rulechan.cpp
index 9dc2868130b..bcb87ddfc3c 100644
--- a/src/mame/drivers/rulechan.cpp
+++ b/src/mame/drivers/rulechan.cpp
@@ -727,6 +727,7 @@ void rulechan_state::rulechan(machine_config &config)
ppi1.in_pa_callback().set(FUNC(rulechan_state::port30_r));
ppi1.out_pb_callback().set(FUNC(rulechan_state::port31_w)); // Must read back as 0x00 at power-up.
ppi1.out_pc_callback().set(FUNC(rulechan_state::port32_w));
+ ppi1.tri_pc_callback().set_constant(0xf0); // Motor off at startup
/* video hardware */
v9938_device &v9938(V9938(config, "v9938", VID_CLOCK));
diff --git a/src/mame/drivers/segae.cpp b/src/mame/drivers/segae.cpp
index 76a20aa5918..1ab6b3be2f9 100644
--- a/src/mame/drivers/segae.cpp
+++ b/src/mame/drivers/segae.cpp
@@ -887,6 +887,7 @@ void systeme_state::systeme(machine_config &config)
I8255(config, m_ppi);
m_ppi->out_pb_callback().set(FUNC(systeme_state::coin_counters_write));
+ m_ppi->tri_pb_callback().set_constant(0);
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_raw(XTAL(10'738'635)/2,
diff --git a/src/mame/drivers/subsino.cpp b/src/mame/drivers/subsino.cpp
index 629849a48e6..331eb20bde6 100644
--- a/src/mame/drivers/subsino.cpp
+++ b/src/mame/drivers/subsino.cpp
@@ -2696,7 +2696,9 @@ void subsino_state::victor21(machine_config &config)
i8255_device &ppi(I8255A(config, "ppi"));
ppi.out_pa_callback().set(FUNC(subsino_state::out_a_w));
+ ppi.tri_pa_callback().set_constant(0);
ppi.out_pb_callback().set(FUNC(subsino_state::out_b_w));
+ ppi.tri_pb_callback().set_constant(0);
ppi.in_pc_callback().set_ioport("INC");
TICKET_DISPENSER(config, m_hopper, attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW);
diff --git a/src/mame/drivers/suprloco.cpp b/src/mame/drivers/suprloco.cpp
index 21dadda23b5..0125c1bab1b 100644
--- a/src/mame/drivers/suprloco.cpp
+++ b/src/mame/drivers/suprloco.cpp
@@ -178,6 +178,7 @@ void suprloco_state::suprloco(machine_config &config)
i8255_device &ppi(I8255A(config, "ppi"));
ppi.out_pb_callback().set(FUNC(suprloco_state::control_w));
+ ppi.tri_pb_callback().set_constant(0);
ppi.out_pc_callback().set_output("lamp0").bit(0).invert(); // set by 8255 bit mode when no credits inserted
ppi.out_pc_callback().append_inputline(m_audiocpu, INPUT_LINE_NMI).bit(7).invert();
diff --git a/src/mame/layout/cgang.lay b/src/mame/layout/cgang.lay
new file mode 100644
index 00000000000..ea414dcfb82
--- /dev/null
+++ b/src/mame/layout/cgang.lay
@@ -0,0 +1,259 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+ <element name="nothing" defstate="0">
+ <text string=" "/>
+ </element>
+
+ <element name="ani_white" defstate="0">
+ <text string=" "><bounds x="0" y="0" width="1" height="100" /></text>
+ <rect state="1"><bounds x="0" y="0" width="1" height="1" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="2"><bounds x="0" y="0" width="1" height="2" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="3"><bounds x="0" y="0" width="1" height="3" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="4"><bounds x="0" y="0" width="1" height="4" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="5"><bounds x="0" y="0" width="1" height="5" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="6"><bounds x="0" y="0" width="1" height="6" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="7"><bounds x="0" y="0" width="1" height="7" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="8"><bounds x="0" y="0" width="1" height="8" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="9"><bounds x="0" y="0" width="1" height="9" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="10"><bounds x="0" y="0" width="1" height="10" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="11"><bounds x="0" y="0" width="1" height="11" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="12"><bounds x="0" y="0" width="1" height="12" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="13"><bounds x="0" y="0" width="1" height="13" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="14"><bounds x="0" y="0" width="1" height="14" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="15"><bounds x="0" y="0" width="1" height="15" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="16"><bounds x="0" y="0" width="1" height="16" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="17"><bounds x="0" y="0" width="1" height="17" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="18"><bounds x="0" y="0" width="1" height="18" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="19"><bounds x="0" y="0" width="1" height="19" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="20"><bounds x="0" y="0" width="1" height="20" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="21"><bounds x="0" y="0" width="1" height="21" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="22"><bounds x="0" y="0" width="1" height="22" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="23"><bounds x="0" y="0" width="1" height="23" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="24"><bounds x="0" y="0" width="1" height="24" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="25"><bounds x="0" y="0" width="1" height="25" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="26"><bounds x="0" y="0" width="1" height="26" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="27"><bounds x="0" y="0" width="1" height="27" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="28"><bounds x="0" y="0" width="1" height="28" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="29"><bounds x="0" y="0" width="1" height="29" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="30"><bounds x="0" y="0" width="1" height="30" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="31"><bounds x="0" y="0" width="1" height="31" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="32"><bounds x="0" y="0" width="1" height="32" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="33"><bounds x="0" y="0" width="1" height="33" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="34"><bounds x="0" y="0" width="1" height="34" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="35"><bounds x="0" y="0" width="1" height="35" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="36"><bounds x="0" y="0" width="1" height="36" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="37"><bounds x="0" y="0" width="1" height="37" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="38"><bounds x="0" y="0" width="1" height="38" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="39"><bounds x="0" y="0" width="1" height="39" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="40"><bounds x="0" y="0" width="1" height="40" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="41"><bounds x="0" y="0" width="1" height="41" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="42"><bounds x="0" y="0" width="1" height="42" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="43"><bounds x="0" y="0" width="1" height="43" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="44"><bounds x="0" y="0" width="1" height="44" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="45"><bounds x="0" y="0" width="1" height="45" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="46"><bounds x="0" y="0" width="1" height="46" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="47"><bounds x="0" y="0" width="1" height="47" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="48"><bounds x="0" y="0" width="1" height="48" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="49"><bounds x="0" y="0" width="1" height="49" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="50"><bounds x="0" y="0" width="1" height="50" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="51"><bounds x="0" y="0" width="1" height="51" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="52"><bounds x="0" y="0" width="1" height="52" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="53"><bounds x="0" y="0" width="1" height="53" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="54"><bounds x="0" y="0" width="1" height="54" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="55"><bounds x="0" y="0" width="1" height="55" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="56"><bounds x="0" y="0" width="1" height="56" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="57"><bounds x="0" y="0" width="1" height="57" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="58"><bounds x="0" y="0" width="1" height="58" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="59"><bounds x="0" y="0" width="1" height="59" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="60"><bounds x="0" y="0" width="1" height="60" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="61"><bounds x="0" y="0" width="1" height="61" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="62"><bounds x="0" y="0" width="1" height="62" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="63"><bounds x="0" y="0" width="1" height="63" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="64"><bounds x="0" y="0" width="1" height="64" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="65"><bounds x="0" y="0" width="1" height="65" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="66"><bounds x="0" y="0" width="1" height="66" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="67"><bounds x="0" y="0" width="1" height="67" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="68"><bounds x="0" y="0" width="1" height="68" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="69"><bounds x="0" y="0" width="1" height="69" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="70"><bounds x="0" y="0" width="1" height="70" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="71"><bounds x="0" y="0" width="1" height="71" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="72"><bounds x="0" y="0" width="1" height="72" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="73"><bounds x="0" y="0" width="1" height="73" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="74"><bounds x="0" y="0" width="1" height="74" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="75"><bounds x="0" y="0" width="1" height="75" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="76"><bounds x="0" y="0" width="1" height="76" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="77"><bounds x="0" y="0" width="1" height="77" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="78"><bounds x="0" y="0" width="1" height="78" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="79"><bounds x="0" y="0" width="1" height="79" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="80"><bounds x="0" y="0" width="1" height="80" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="81"><bounds x="0" y="0" width="1" height="81" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="82"><bounds x="0" y="0" width="1" height="82" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="83"><bounds x="0" y="0" width="1" height="83" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="84"><bounds x="0" y="0" width="1" height="84" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="85"><bounds x="0" y="0" width="1" height="85" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="86"><bounds x="0" y="0" width="1" height="86" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="87"><bounds x="0" y="0" width="1" height="87" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="88"><bounds x="0" y="0" width="1" height="88" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="89"><bounds x="0" y="0" width="1" height="89" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="90"><bounds x="0" y="0" width="1" height="90" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="91"><bounds x="0" y="0" width="1" height="91" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="92"><bounds x="0" y="0" width="1" height="92" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="93"><bounds x="0" y="0" width="1" height="93" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="94"><bounds x="0" y="0" width="1" height="94" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="95"><bounds x="0" y="0" width="1" height="95" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="96"><bounds x="0" y="0" width="1" height="96" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="97"><bounds x="0" y="0" width="1" height="97" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="98"><bounds x="0" y="0" width="1" height="98" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="99"><bounds x="0" y="0" width="1" height="99" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="100"><bounds x="0" y="0" width="1" height="100" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ </element>
+
+ <element name="ani_crate" defstate="0">
+ <text string=" "><bounds x="0" y="0" width="1" height="102" /></text>
+ <rect state="0"><bounds x="0" y="0" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="1"><bounds x="0" y="1" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="2"><bounds x="0" y="2" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="3"><bounds x="0" y="3" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="4"><bounds x="0" y="4" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="5"><bounds x="0" y="5" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="6"><bounds x="0" y="6" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="7"><bounds x="0" y="7" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="8"><bounds x="0" y="8" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="9"><bounds x="0" y="9" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="10"><bounds x="0" y="10" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="11"><bounds x="0" y="11" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="12"><bounds x="0" y="12" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="13"><bounds x="0" y="13" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="14"><bounds x="0" y="14" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="15"><bounds x="0" y="15" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="16"><bounds x="0" y="16" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="17"><bounds x="0" y="17" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="18"><bounds x="0" y="18" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="19"><bounds x="0" y="19" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="20"><bounds x="0" y="20" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="21"><bounds x="0" y="21" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="22"><bounds x="0" y="22" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="23"><bounds x="0" y="23" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="24"><bounds x="0" y="24" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="25"><bounds x="0" y="25" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="26"><bounds x="0" y="26" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="27"><bounds x="0" y="27" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="28"><bounds x="0" y="28" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="29"><bounds x="0" y="29" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="30"><bounds x="0" y="30" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="31"><bounds x="0" y="31" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="32"><bounds x="0" y="32" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="33"><bounds x="0" y="33" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="34"><bounds x="0" y="34" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="35"><bounds x="0" y="35" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="36"><bounds x="0" y="36" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="37"><bounds x="0" y="37" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="38"><bounds x="0" y="38" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="39"><bounds x="0" y="39" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="40"><bounds x="0" y="40" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="41"><bounds x="0" y="41" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="42"><bounds x="0" y="42" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="43"><bounds x="0" y="43" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="44"><bounds x="0" y="44" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="45"><bounds x="0" y="45" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="46"><bounds x="0" y="46" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="47"><bounds x="0" y="47" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="48"><bounds x="0" y="48" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="49"><bounds x="0" y="49" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="50"><bounds x="0" y="50" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="51"><bounds x="0" y="51" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="52"><bounds x="0" y="52" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="53"><bounds x="0" y="53" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="54"><bounds x="0" y="54" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="55"><bounds x="0" y="55" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="56"><bounds x="0" y="56" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="57"><bounds x="0" y="57" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="58"><bounds x="0" y="58" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="59"><bounds x="0" y="59" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="60"><bounds x="0" y="60" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="61"><bounds x="0" y="61" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="62"><bounds x="0" y="62" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="63"><bounds x="0" y="63" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="64"><bounds x="0" y="64" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="65"><bounds x="0" y="65" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="66"><bounds x="0" y="66" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="67"><bounds x="0" y="67" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="68"><bounds x="0" y="68" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="69"><bounds x="0" y="69" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="70"><bounds x="0" y="70" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="71"><bounds x="0" y="71" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="72"><bounds x="0" y="72" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="73"><bounds x="0" y="73" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="74"><bounds x="0" y="74" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="75"><bounds x="0" y="75" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="76"><bounds x="0" y="76" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="77"><bounds x="0" y="77" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="78"><bounds x="0" y="78" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="79"><bounds x="0" y="79" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="80"><bounds x="0" y="80" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="81"><bounds x="0" y="81" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="82"><bounds x="0" y="82" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="83"><bounds x="0" y="83" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="84"><bounds x="0" y="84" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="85"><bounds x="0" y="85" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="86"><bounds x="0" y="86" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="87"><bounds x="0" y="87" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="88"><bounds x="0" y="88" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="89"><bounds x="0" y="89" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="90"><bounds x="0" y="90" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="91"><bounds x="0" y="91" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="92"><bounds x="0" y="92" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="93"><bounds x="0" y="93" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="94"><bounds x="0" y="94" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="95"><bounds x="0" y="95" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="96"><bounds x="0" y="96" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="97"><bounds x="0" y="97" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="98"><bounds x="0" y="98" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="99"><bounds x="0" y="99" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ <rect state="100"><bounds x="0" y="100" width="1" height="2" /><color red="1.0" green="0.0" blue="0.0" /></rect>
+ </element>
+
+ <element name="digit" defstate="0">
+ <led7seg><color red="1.0" green="0.15" blue="0.08" /></led7seg>
+ </element>
+
+ <view name="Internal Layout">
+ <bounds left="0" right="50" top="0" bottom="35" />
+
+ <element name="digit9" ref="digit"><bounds x="0" y="0" width="4" height="6" /></element>
+ <element name="digit8" ref="digit"><bounds x="4" y="0" width="4" height="6" /></element>
+
+ <element name="digit7" ref="digit"><bounds x="10" y="0" width="4" height="6" /></element>
+ <element name="digit6" ref="digit"><bounds x="14" y="0" width="4" height="6" /></element>
+ <element name="digit5" ref="digit"><bounds x="18" y="0" width="4" height="6" /></element>
+
+ <element name="digit4" ref="digit"><bounds x="25" y="0" width="4" height="6" /></element>
+ <element name="digit3" ref="digit"><bounds x="29" y="0" width="4" height="6" /></element>
+
+ <element name="digit2" ref="digit"><bounds x="35" y="0" width="4" height="6" /></element>
+ <element name="digit1" ref="digit"><bounds x="39" y="0" width="4" height="6" /></element>
+ <element name="digit0" ref="digit"><bounds x="43" y="0" width="4" height="6" /></element>
+
+ <element ref="nothing" inputtag="FAKE1" inputmask="0x01"><bounds x="10" y="15" width="1" height="15" /></element>
+ <element ref="nothing" inputtag="FAKE1" inputmask="0x02"><bounds x="12" y="15" width="1" height="15" /></element>
+ <element ref="nothing" inputtag="FAKE1" inputmask="0x04"><bounds x="14" y="15" width="1" height="15" /></element>
+ <element ref="nothing" inputtag="FAKE1" inputmask="0x08"><bounds x="16" y="15" width="1" height="15" /></element>
+ <element ref="nothing" inputtag="FAKE1" inputmask="0x10"><bounds x="18" y="15" width="1" height="15" /></element>
+
+ <element name="door_count" ref="ani_white"><bounds x="10" y="13" width="9" height="2" /></element>
+
+ <element name="cg_count0" ref="ani_white"><bounds x="10" y="15" width="1" height="15" /></element>
+ <element name="cg_count1" ref="ani_white"><bounds x="12" y="15" width="1" height="15" /></element>
+ <element name="cg_count2" ref="ani_white"><bounds x="14" y="15" width="1" height="15" /></element>
+ <element name="cg_count3" ref="ani_white"><bounds x="16" y="15" width="1" height="15" /></element>
+ <element name="cg_count4" ref="ani_white"><bounds x="18" y="15" width="1" height="15" /></element>
+
+ <element name="en_count0" ref="ani_crate"><bounds x="10" y="15" width="1" height="15" /></element>
+ <element name="en_count1" ref="ani_crate"><bounds x="12" y="15" width="1" height="15" /></element>
+ <element name="en_count2" ref="ani_crate"><bounds x="14" y="15" width="1" height="15" /></element>
+ <element name="en_count3" ref="ani_crate"><bounds x="16" y="15" width="1" height="15" /></element>
+ <element name="en_count4" ref="ani_crate"><bounds x="18" y="15" width="1" height="15" /></element>
+
+ </view>
+</mamelayout>
diff --git a/src/mame/video/xbox_nv2a.cpp b/src/mame/video/xbox_nv2a.cpp
index 31f9411c743..6bff22f9493 100644
--- a/src/mame/video/xbox_nv2a.cpp
+++ b/src/mame/video/xbox_nv2a.cpp
@@ -1331,11 +1331,13 @@ void nv2a_renderer::write_pixel(int x, int y, uint32_t color, int depth)
uint32_t deptsten;
int32_t c[4], fb[4], s[4], d[4], cc[4];
uint32_t dep, sten, stenc, stenv;
+ uint32_t udepth;
bool stencil_passed;
bool depth_passed;
if ((depth > 0xffffff) || (depth < 0) || (x < 0))
return;
+ udepth = (uint32_t)depth;
fb[3] = fb[2] = fb[1] = fb[0] = 0;
addr = nullptr;
if (color_mask != 0)
@@ -1508,27 +1510,27 @@ void nv2a_renderer::write_pixel(int x, int y, uint32_t color, int depth)
depth_passed = false;
break;
case NV2A_COMPARISON_OP::LESS:
- if (depth >= dep)
+ if (udepth >= dep)
depth_passed = false;
break;
case NV2A_COMPARISON_OP::EQUAL:
- if (depth != dep)
+ if (udepth != dep)
depth_passed = false;
break;
case NV2A_COMPARISON_OP::LEQUAL:
- if (depth > dep)
+ if (udepth > dep)
depth_passed = false;
break;
case NV2A_COMPARISON_OP::GREATER:
- if (depth <= dep)
+ if (udepth <= dep)
depth_passed = false;
break;
case NV2A_COMPARISON_OP::NOTEQUAL:
- if (depth == dep)
+ if (udepth == dep)
depth_passed = false;
break;
case NV2A_COMPARISON_OP::GEQUAL:
- if (depth < dep)
+ if (udepth < dep)
depth_passed = false;
break;
case NV2A_COMPARISON_OP::ALWAYS:
@@ -1925,7 +1927,7 @@ void nv2a_renderer::write_pixel(int x, int y, uint32_t color, int depth)
}
}
if (depth_write_enabled)
- dep = depth;
+ dep = udepth;
if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT::Z24S8) {
deptsten = (dep << 8) | sten;
*daddr32 = deptsten;
@@ -4491,11 +4493,11 @@ WRITE_LINE_MEMBER(nv2a_renderer::vblank_callback)
#ifdef LOG_NV2A
printf("vblank_callback\n\r");
#endif
- if ((state == true) && (puller_waiting == 1)) {
+ if ((state != 0) && (puller_waiting == 1)) {
puller_waiting = 0;
puller_timer_work(nullptr, 0);
}
- if (state == true) {
+ if (state != 0) {
pcrtc[0x100 / 4] |= 1;
pcrtc[0x808 / 4] |= 0x10000;
}