MPU4 refactoring, reverse engineering, notes etc. (#9893)

* Moved protection simulation to devices, and got more games to boot.
* Corrected lamp output mapping for most games.
* Correctly identified more games, and removed bad dumps.
* Organised sets better, and cleaned up some of the implementation.
This commit is contained in:
David Haywood 2022-06-15 07:35:16 +01:00 committed by GitHub
parent 62fd9b344d
commit 468ba897f6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
28 changed files with 15540 additions and 11170 deletions

View File

@ -1458,9 +1458,9 @@ createMAMEProjects(_target, _subtarget, "barcrest")
files {
MAME_DIR .. "src/mame/drivers/mpu2.cpp",
MAME_DIR .. "src/mame/drivers/mpu3.cpp",
MAME_DIR .. "src/mame/machine/mpu4.cpp",
MAME_DIR .. "src/mame/includes/mpu4.h",
MAME_DIR .. "src/mame/drivers/mpu4.cpp",
MAME_DIR .. "src/mame/includes/mpu4.h",
MAME_DIR .. "src/mame/drivers/mpu4unsorted.cpp",
MAME_DIR .. "src/mame/drivers/mpu4avan.cpp",
MAME_DIR .. "src/mame/drivers/mpu4bwb.cpp",
MAME_DIR .. "src/mame/drivers/mpu4concept.cpp",
@ -1470,11 +1470,17 @@ files {
MAME_DIR .. "src/mame/drivers/mpu4mdm.cpp",
MAME_DIR .. "src/mame/drivers/mpu4misc.cpp",
MAME_DIR .. "src/mame/drivers/mpu4mod2sw.cpp",
MAME_DIR .. "src/mame/drivers/mpu4mod4oki.cpp",
MAME_DIR .. "src/mame/drivers/mpu4mod4yam.cpp",
MAME_DIR .. "src/mame/drivers/mpu4plasma.cpp",
MAME_DIR .. "src/mame/drivers/mpu4sw.cpp",
MAME_DIR .. "src/mame/drivers/mpu4union.cpp",
MAME_DIR .. "src/mame/drivers/mpu4vid.cpp",
MAME_DIR .. "src/mame/machine/mpu4_characteriser_pal.cpp",
MAME_DIR .. "src/mame/machine/mpu4_characteriser_pal.h",
MAME_DIR .. "src/mame/machine/mpu4_characteriser_pal_bwb.cpp",
MAME_DIR .. "src/mame/machine/mpu4_characteriser_pal_bwb.h",
MAME_DIR .. "src/mame/machine/mpu4_characteriser_bootleg.cpp",
MAME_DIR .. "src/mame/machine/mpu4_characteriser_bootleg.h",
MAME_DIR .. "src/mame/includes/mpu5.h",
MAME_DIR .. "src/mame/drivers/mpu5.cpp",
MAME_DIR .. "src/mame/drivers/mpu5sw.cpp",

File diff suppressed because it is too large Load Diff

View File

@ -5,12 +5,27 @@
split out because there might be hardware differences, and there are an awful lot of them, especially american beauty! ;-)
I think some might be dual unit setups, some roms are marked top/bottom
are some of these actually by Concept?
*/
#include "emu.h"
#include "includes/mpu4.h"
INPUT_PORTS_EXTERN( mpu4 );
namespace {
class mpu4avan_machines_state : public mpu4_state
{
public:
mpu4avan_machines_state(const machine_config& mconfig, device_type type, const char* tag) :
mpu4_state(mconfig, type, tag)
{
}
};
} // anonymous namespace
#define GAME_FLAGS (MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK|MACHINE_MECHANICAL)
@ -20,7 +35,7 @@ INPUT_PORTS_EXTERN( mpu4 );
ROM_REGION( length, "maincpu", 0 ) \
ROM_LOAD( name, offset, length, hash ) \
ROM_END \
GAME(year, setname, parent, mod2, mpu4, mpu4_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod2, mpu4, mpu4avan_machines_state, init_m4default, ROT0, company, title, GAME_FLAGS )
// robotica - latvia
@ -99,7 +114,7 @@ GAME_CUSTOM( 199?, m4robo__0, m4robo, "rou2b317.bin", 0x0000, 0x010000, CRC(8
ROM_LOAD( name, offset, length, hash ) \
M4ABEAUT_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4avan_machines_state, init_m4default, ROT0, company, title, GAME_FLAGS )
// ab
GAME_CUSTOM( 199?, m4abeaut, 0, "aba305.bin", 0x0000, 0x010000, CRC(ab70802c) SHA1(0cb59947b0bc177b10c55e02a0c8016620e0c346), "Avantime?","American Beauty (Avantime?) (MPU4) (AB, set 1)" )
@ -307,7 +322,7 @@ GAME_CUSTOM( 199?, m4abeaut_k2, m4abeaut, "a2k0b618.bin", 0x0000, 0x010000,
ROM_LOAD( name, offset, length, hash ) \
M4TRG_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4avan_machines_state, init_m4default, ROT0, company, title, GAME_FLAGS )
// roms of different sizes again, might also be main / sub setups
@ -357,7 +372,7 @@ GAME_CUSTOM( 199?, m4trg__4, m4trg, "rmtp4cz", 0x0000, 0x010000, CRC(1c5f
ROM_LOAD( name, offset, length, hash ) \
M4RMTP_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4avan_machines_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME_CUSTOM( 199?, m4rmtp, 0, "r4iha202.bin", 0x0000, 0x010000, CRC(b1588632) SHA1(ad21bbc5e99fd6b511e6881e8b20dcad177b937f), "Avantime?","Reel Magic Turbo Play (Avantime?) (MPU4) (set 1)" )
@ -383,7 +398,7 @@ GAME_CUSTOM( 199?, m4rmtp__g, m4rmtp, "r4iua205.bin", 0x0000, 0x010000, CRC(4
ROM_LOAD( name, offset, length, hash ) \
M4RMTPD_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4avan_machines_state, init_m4default, ROT0, company, title, GAME_FLAGS )
@ -450,7 +465,7 @@ GAME_CUSTOM( 199?, m4rmtpd__am, m4rmtpd, "rduhb511.bin", 0x0000, 0x010000, CR
ROM_LOAD( name, offset, length, hash ) \
M4MBEL_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4avan_machines_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME_CUSTOM( 199?, m4mbel, 0, "mb1.1k", 0x0000, 0x020000, CRC(00763b37) SHA1(2314ea5e8541e2be2492135785317f4fdd998692), "Avantime?","Millennium Bells (Avantime?) (MPU4) (set 1)" )
GAME_CUSTOM( 199?, m4mbel__a, m4mbel, "mb1.1kw", 0x0000, 0x010000, CRC(d1ccefe4) SHA1(dba63d0a75fe614e77ac24ae23bfd0d924dd3e9a), "Avantime?","Millennium Bells (Avantime?) (MPU4) (set 2)" )
@ -531,7 +546,7 @@ GAME_CUSTOM( 199?, m4mbel__a0, m4mbel, "mbpl3.3c", 0x0000, 0x020000, C
ROM_LOAD( name, offset, length, hash ) \
M4CMONT_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4avan_machines_state, init_m4default, ROT0, company, title, GAME_FLAGS )
// cmc
GAME_CUSTOM( 199?, m4cmont, 0, "cmc1.7", 0x0000, 0x020000, CRC(aaebab34) SHA1(36145b7d062ad5a740bcf326933f78274b99495c), "Avantime?","Casino Monte Carlo (Avantime?) (MPU4) (Czech, set 1)" )
@ -619,7 +634,7 @@ GAME_CUSTOM( 199?, m4cmont_gt3, m4cmont, "gtr58gaa", 0x0000, 0x020000, CR
ROM_LOAD( name, offset, length, hash ) \
M4BLKMGC_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4avan_machines_state, init_m4default, ROT0, company, title, GAME_FLAGS )
// new - latvia
@ -646,7 +661,7 @@ GAME_CUSTOM( 199?, m4blkmgc_u6, m4blkmgc, "bau1b307.bin", 0x0000, 0x010000,
ROM_LOAD( name, offset, length, hash ) \
M4AMALAD_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4avan_machines_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME_CUSTOM( 199?, m4amalad, 0, "aag1.4", 0x0000, 0x020000, CRC(0da943a1) SHA1(50915ce67687f15a36b5c38b1c1c6773bd3ecf9f), "Avantime?","American Aladdin (Avantime?) (MPU4) (set 1)" )
GAME_CUSTOM( 199?, m4amalad__a, m4amalad, "aag1.3", 0x0000, 0x020000, CRC(3a9552a9) SHA1(7695899b6ed52d0c7530b5ed0829cfdbb3892fa2), "Avantime?","American Aladdin (Avantime?) (MPU4) (set 2)" )
@ -677,7 +692,7 @@ GAME_CUSTOM( 199?, m4amalad__n, m4amalad, "jpaltst2.dat", 0x0000, 0x020
ROM_LOAD( name, offset, length, hash ) \
M4BBEN_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4avan_machines_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME_CUSTOM( 199?, m4bben, 0, "bbc1a102.bin", 0x0000, 0x010000, CRC(c5010bb6) SHA1(f39ab219eafaa391b5b777c2918f059ba67b4504), "Avantime?","Big Ben (Avantime?) (MPU4) (set 1)" )
@ -704,7 +719,7 @@ GAME_CUSTOM( 199?, m4bben__i, m4bben, "bbc2b106.bin", 0x0000, 0x010000, CRC(d
ROM_LOAD( name, offset, length, hash ) \
M4BBOX_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4avan_machines_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME_CUSTOM( 199?, m4bbox, 0, "bbb1.bin", 0x0000, 0x010000, CRC(b668e08e) SHA1(f401405419689ea5ad06dfd815aaef9e1b7ed4e1), "Avantime?","Brain Box (Avantime?) (MPU4) (set 1)" )
@ -730,7 +745,7 @@ GAME_CUSTOM( 199?, m4bbox__i, m4bbox, "bbb9.bin", 0x0000, 0x010000, CRC(1
ROM_LOAD( name, offset, length, hash ) \
M4FRNUDG_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4avan_machines_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME_CUSTOM( 199?, m4frnudg, 0, "fanhc11.bin", 0x0000, 0x010000, CRC(d2fe9df9) SHA1(7b519e4ed447f8c59fda972fc398f6ff423a8f92), "Avantime?","Fruit & Nudge (Avantime?) (MPU4) (set 1)" )
GAME_CUSTOM( 199?, m4frnudg__a, m4frnudg, "fanhc12.bin", 0x0000, 0x010000, CRC(2b2176e0) SHA1(9acffc05c02e76a6cbe4cfd708ff2d94ecb6c308), "Avantime?","Fruit & Nudge (Avantime?) (MPU4) (set 2)" )
@ -750,7 +765,7 @@ GAME_CUSTOM( 199?, m4frnudg__c, m4frnudg, "fanhc9.bin", 0x0000, 0x010000,
ROM_LOAD( name, offset, length, hash ) \
M4FRMTX_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4avan_machines_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME_CUSTOM( 199?, m4frmtx, 0, "fm1.bin", 0x0000, 0x010000, CRC(0d11ffee) SHA1(50a3f97cf76855ba503a833e4198c154a57b6847), "Avantime?","Fruit Matrix (Avantime?) (MPU4) (set 1)" )
GAME_CUSTOM( 199?, m4frmtx__a, m4frmtx, "fm2.bin", 0x0000, 0x010000, CRC(ab143a49) SHA1(c4ba0671b154707fd69d58fd3bf65f5ba4d2bf53), "Avantime?","Fruit Matrix (Avantime?) (MPU4) (set 2)" )
GAME_CUSTOM( 199?, m4frmtx__b, m4frmtx, "fm4.bin", 0x0000, 0x010000, CRC(cbe09e1d) SHA1(00d17c6a189ac1a60ec9acbe2babb5a69dec3711), "Avantime?","Fruit Matrix (Avantime?) (MPU4) (set 3)" )
@ -771,7 +786,7 @@ GAME_CUSTOM( 199?, m4frmtx__f, m4frmtx, "frmatx3", 0x0000, 0x010000, CR
ROM_LOAD( name, offset, length, hash ) \
M4JOK2K_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4avan_machines_state, init_m4default, ROT0, company, title, GAME_FLAGS )
// latvia
GAME_CUSTOM( 199?, m4jok2k, 0, "j300 1.512", 0x0000, 0x010000, CRC(3a52da14) SHA1(b2b7f32093938f8b793fa4c425cd5beaeaa83286), "Avantime?","Joker 2000 (Avantime?) (MPU4) (set 1)" )
GAME_CUSTOM( 199?, m4jok2k__a, m4jok2k, "j300 2.512", 0x0000, 0x010000, CRC(6d3c6b99) SHA1(b5f34043e3cc93908b7ff969ae2546862a3a79ce), "Avantime?","Joker 2000 (Avantime?) (MPU4) (set 2)" )
@ -791,7 +806,7 @@ GAME_CUSTOM( 199?, m4jok2k__b, m4jok2k, "joker2000.dat", 0x0000, 0x020000
ROM_LOAD( name, offset, length, hash ) \
M4MJP_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4avan_machines_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME_CUSTOM( 199?, m4mjp, 0, "code.bin", 0x0000, 0x020000, CRC(c57d0148) SHA1(4d21a501ea64eb4fcf22ae9fba81b8982a55730e), "Avantime?","Mega Jackpot (Avantime?) (MPU4) (set 1)" )
GAME_CUSTOM( 199?, m4mjp__a, m4mjp, "mjl02.bin", 0x0000, 0x010000, CRC(014d1765) SHA1(5cc4039e574b3a68be6d639453b217ce9a0841f0), "Avantime?","Mega Jackpot (Avantime?) (MPU4) (set 2)" )
@ -813,7 +828,7 @@ GAME_CUSTOM( 199?, m4mjp__g, m4mjp, "tl01.bin", 0x0000, 0x010000, CRC(a36a
ROM_LOAD( name, offset, length, hash ) \
M4MILROU_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4avan_machines_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME_CUSTOM( 199?, m4milrou, 0, "nonp1.dat", 0x0000, 0x020000, CRC(b7503d57) SHA1(dc0ba6073ae278b8406cc7e30e4b4fed21df61c8), "Avantime?","Millennium Roulette (Avantime?) (MPU4) (set 1)" )
GAME_CUSTOM( 199?, m4milrou__a, m4milrou, "p1.dat", 0x0000, 0x020000, CRC(b3f4a2b0) SHA1(01ee5ef5eea0f83791d68b2d9bdb5be6c6495a28), "Avantime?","Millennium Roulette (Avantime?) (MPU4) (set 2)" )
@ -830,7 +845,7 @@ GAME_CUSTOM( 199?, m4milrou__a, m4milrou, "p1.dat", 0x0000, 0x020000,
ROM_LOAD( name, offset, length, hash ) \
M4KINGG_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4avan_machines_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME_CUSTOM( 199?, m4kingg, 0, "kgiha101.bin", 0x0000, 0x010000, CRC(4da8bea1) SHA1(63fbad82877f772f3f559026eaddb69e09d6556b), "Avantime?","King George (Avantime?) (MPU4) (set 1)" )
GAME_CUSTOM( 199?, m4kingg__a, m4kingg, "kgiha102.bin", 0x0000, 0x010000, CRC(573687b0) SHA1(eafc90120297201fc1ba40029b592ec25d972690), "Avantime?","King George (Avantime?) (MPU4) (set 2)" )

File diff suppressed because it is too large Load Diff

View File

@ -5,13 +5,26 @@
#include "emu.h"
#include "includes/mpu4.h"
INPUT_PORTS_EXTERN( mpu4 );
namespace {
class mpu4concept_machines_state : public mpu4_state
{
public:
mpu4concept_machines_state(const machine_config& mconfig, device_type type, const char* tag) :
mpu4_state(mconfig, type, tag)
{
}
};
} // anonymous namespace
#define GAME_FLAGS (MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK|MACHINE_MECHANICAL)
#define M4RHFEVC_EXTRA_ROMS \
ROM_REGION( 0x080000, "msm6376", 0 ) \
ROM_LOAD( "rhfs1.bin", 0x0000, 0x03de5e, CRC(0dddd05f) SHA1(908a58752fb1cf76667695a40bcaa7778201c3a2) )
#undef GAME_CUSTOM
#define GAME_CUSTOM(year, setname,parent,name,offset,length,hash,company,title) \
ROM_START( setname ) \
@ -19,7 +32,7 @@ INPUT_PORTS_EXTERN( mpu4 );
ROM_LOAD( name, offset, length, hash ) \
M4RHFEVC_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4concept_machines_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME_CUSTOM( 199?, m4rhfevc, 0, "rhb6a58e.bin", 0x0000, 0x010000, CRC(c5a1ec02) SHA1(3a4dc552fffc34673e590e903a5c15a409f9aeec), "Concept Games Ltd","Red Hot Fever (Concept Games Ltd) (MPU4) (set 1)" )
@ -54,6 +67,7 @@ GAME_CUSTOM( 199?, m4rhfevc__y, m4rhfevc, "lxled1.bin", 0x0000, 0x010000,
#define M4PULWNC_EXTRA_ROMS \
ROM_REGION( 0x080000, "msm6376", 0 ) \
ROM_LOAD( "paws1.bin", 0x0000, 0x03e72f, CRC(124b14ba) SHA1(b6b84c306c83b3159d88992ad88a10aff161fce8) )
#undef GAME_CUSTOM
#define GAME_CUSTOM(year, setname,parent,name,offset,length,hash,company,title) \
ROM_START( setname ) \
@ -61,7 +75,7 @@ GAME_CUSTOM( 199?, m4rhfevc__y, m4rhfevc, "lxled1.bin", 0x0000, 0x010000,
ROM_LOAD( name, offset, length, hash ) \
M4PULWNC_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4concept_machines_state, init_m4default, ROT0, company, title, GAME_FLAGS )
@ -103,6 +117,7 @@ GAME_CUSTOM( 199?, m4pulwnc__4, m4pulwnc, "tchm02.bin", 0x0000, 0x010000,
#define M4SPNWNC_EXTRA_ROMS \
ROM_REGION( 0x080000, "msm6376", 0 ) \
ROM_LOAD( "sawsnd1", 0x0000, 0x080000, CRC(7957381f) SHA1(8fd45e5bf67248607f7d98032e08516ded493d74) )
#undef GAME_CUSTOM
#define GAME_CUSTOM(year, setname,parent,name,offset,length,hash,company,title) \
ROM_START( setname ) \
@ -110,7 +125,7 @@ GAME_CUSTOM( 199?, m4pulwnc__4, m4pulwnc, "tchm02.bin", 0x0000, 0x010000,
ROM_LOAD( name, offset, length, hash ) \
M4SPNWNC_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4concept_machines_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME_CUSTOM( 199?, m4spnwnc, 0, "saw01.bin", 0x0000, 0x010000, CRC(5350e50e) SHA1(0d7ba3280eddb4400545729c55bcfaff7918d553), "Concept Games Ltd","Spin-A-Win (Concept Games Ltd) (MPU4) (set 1)" )
GAME_CUSTOM( 199?, m4spnwnc__a, m4spnwnc, "saw02.bin", 0x0000, 0x010000, CRC(daf85100) SHA1(ff89adb0d6530bcf5ff0807f48c6008198948d50), "Concept Games Ltd","Spin-A-Win (Concept Games Ltd) (MPU4) (set 2)" )
@ -119,6 +134,7 @@ GAME_CUSTOM( 199?, m4spnwnc__b, m4spnwnc, "saw03.bin", 0x0000, 0x010000, CR
#define M4NUDGWC_EXTRA_ROMS \
ROM_REGION( 0x180000, "msm6376", ROMREGION_ERASE00 ) \
ROM_LOAD( "naws1.bin", 0x0000, 0x02373f, CRC(b2ea8c50) SHA1(a02181f8f4636e69287073f4ffb8604ff2f14b9c) )
#undef GAME_CUSTOM
#define GAME_CUSTOM(year, setname,parent,name,offset,length,hash,company,title) \
ROM_START( setname ) \
@ -126,7 +142,7 @@ GAME_CUSTOM( 199?, m4spnwnc__b, m4spnwnc, "saw03.bin", 0x0000, 0x010000, CR
ROM_LOAD( name, offset, length, hash ) \
M4NUDGWC_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4concept_machines_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME_CUSTOM( 199?, m4nudgwc, 0, "naw02.bin", 0x0000, 0x010000, CRC(eb3ff27d) SHA1(ff0a80a75162380c6cc2d1b31f0bb0579faa1a2c), "Concept Games Ltd","Nudge-A-Win (Concept Games Ltd) (MPU4) (set 1)" )
GAME_CUSTOM( 199?, m4nudgwc__a, m4nudgwc, "nawhc6.bin", 0x0000, 0x010000, CRC(f9389823) SHA1(e1db35200c9ed9d59cf817901cf75bdbb48507b2), "Concept Games Ltd","Nudge-A-Win (Concept Games Ltd) (MPU4) (set 2)" )

View File

@ -7,7 +7,18 @@
#include "emu.h"
#include "includes/mpu4.h"
INPUT_PORTS_EXTERN( mpu4 );
namespace {
class mpu4crystal_machines_state : public mpu4_state
{
public:
mpu4crystal_machines_state(const machine_config& mconfig, device_type type, const char* tag) :
mpu4_state(mconfig, type, tag)
{
}
};
#define M4FRKSTN_SOUND \
ROM_REGION( 0x40000, "upd", 0 ) \
@ -753,106 +764,136 @@ ROM_START( m4ndupc )
M4NDUP_SOUND
ROM_END
} // anonymous namespace
#define GAME_FLAGS (MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK|MACHINE_MECHANICAL)
GAME(199?, m4frkstn, 0, mpu4crys, mpu4, mpu4_state, init_m_frkstn, ROT0, "Crystal","Frank 'n' Stein (Crystal) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frkstna,m4frkstn, mpu4crys, mpu4, mpu4_state, init_m_frkstn, ROT0, "Crystal","Frank 'n' Stein (Crystal) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frkstnb,m4frkstn, mpu4crys, mpu4, mpu4_state, init_m_frkstn, ROT0, "Crystal","Frank 'n' Stein (Crystal) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frkstnc,m4frkstn, mpu4crys, mpu4, mpu4_state, init_m_frkstn, ROT0, "Crystal","Frank 'n' Stein (Crystal) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frkstnd,m4frkstn, mpu4crys, mpu4, mpu4_state, init_m_frkstn, ROT0, "Crystal","Frank 'n' Stein (Crystal) (MPU4, set 5)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frkstne,m4frkstn, mpu4crys, mpu4, mpu4_state, init_m_frkstn, ROT0, "Crystal","Frank 'n' Stein (Crystal) (MPU4, set 6)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frkstnf,m4frkstn, mpu4crys, mpu4, mpu4_state, init_m_frkstn, ROT0, "Crystal","Frank 'n' Stein (Crystal) (MPU4, set 7)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frkstng,m4frkstn, mpu4crys, mpu4, mpu4_state, init_m_frkstn, ROT0, "Crystal","Frank 'n' Stein (Crystal) (MPU4, set 8)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frkstnh,m4frkstn, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Frank 'n' Stein (Crystal) (MPU4, set 9)", GAME_FLAGS|MACHINE_NO_SOUND ) // this set is encrypted
GAME(199?, m4aladn, 0, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Aladdin's Cave (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4aladna, m4aladn, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Aladdin's Cave (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4aladnb, m4aladn, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Aladdin's Cave (Crystal) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4aladnc, m4aladn, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Aladdin's Cave (Crystal) (MPU4) (set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4aladnd, m4aladn, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Aladdin's Cave (Crystal) (MPU4) (set 5)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4aladne, m4aladn, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Aladdin's Cave (Crystal) (MPU4) (set 6)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4aladnf, m4aladn, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Aladdin's Cave (Crystal) (MPU4) (set 7)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4aladng, m4aladn, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Aladdin's Cave (Crystal) (MPU4) (set 8)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4aladnh, m4aladn, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Aladdin's Cave (Crystal) (MPU4) (set 9)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4aladni, m4aladn, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Aladdin's Cave (Crystal) (MPU4) (set 10)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bagcsh, 0, mpu4crys, mpu4, mpu4_state, init_m_frkstn, ROT0, "Crystal","Bags Of Cash Club (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bagcsha,m4bagcsh, mpu4crys, mpu4, mpu4_state, init_m_frkstn, ROT0, "Crystal","Bags Of Cash Club (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bucclb, 0, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Buccaneer Club (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bucclba,m4bucclb, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Buccaneer Club (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bucclbb,m4bucclb, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Buccaneer Club (Crystal) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bucclbc,m4bucclb, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Buccaneer Club (Crystal) (MPU4) (set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bullio, 0, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Bullion Club (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bullioa,m4bullio, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Bullion Club (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bulliob,m4bullio, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Bullion Club (Crystal) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4carou ,0, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Carousel Club (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4caroua, m4carou, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Carousel Club (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4caroub, m4carou, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Carousel Club (Crystal) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4carouc, m4carou, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Carousel Club (Crystal) (MPU4) (set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4cclimb, 0, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Crazy Climber (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4cclimba,m4cclimb, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Crazy Climber (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4crzcl, 0, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Crazy Climber Club (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4crzcla, m4crzcl, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Crazy Climber Club (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4crzclb, m4crzcl, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Crazy Climber Club (Crystal) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4crzclc, m4crzcl, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Crazy Climber Club (Crystal) (MPU4) (set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4crzcld, m4crzcl, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Crazy Climber Club (Crystal) (MPU4) (set 5)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4elitc, 0, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Elite Club (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4elitca, m4elitc, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Elite Club (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4fairg, 0, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Fairground (Crystal) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frmani, 0, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Fruit Mania (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frmania,m4frmani, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Fruit Mania (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frmanib,m4frmani, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Fruit Mania (Crystal) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frmanic,m4frmani, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Fruit Mania (Crystal) (MPU4) (set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4goldxc, 0, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Gold Exchange Club (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4goldxca,m4goldxc, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Gold Exchange Club (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4goldxcb,m4goldxc, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Gold Exchange Club (Crystal) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4goldxcc,m4goldxc, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Gold Exchange Club (Crystal) (MPU4) (set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4goldxcd,m4goldxc, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Gold Exchange Club (Crystal) (MPU4) (set 5)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4goldxce,m4goldxc, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Gold Exchange Club (Crystal) (MPU4) (set 6)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4goldfc, 0, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Gold Fever (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4goldfca,m4goldfc, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Gold Fever (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4goldfcb,m4goldfc, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Gold Fever (Crystal) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4hirol, 0, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Hi Roller Club (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4hirola, m4hirol, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Hi Roller Club (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4kingqn, 0, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Kings & Queens Club (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4kingqna,m4kingqn, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Kings & Queens Club (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4lotclb, 0, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Lottery Club (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4lotclba,m4lotclb, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Lottery Club (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4montrl, 0, mpu4crys, mpu4, mpu4_state, init_crystali, ROT0, "Crystal","Money Trail (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND ) // encryption is inverted!
GAME(199?, m4montrla,m4montrl, mpu4crys, mpu4, mpu4_state, init_crystali, ROT0, "Crystal","Money Trail (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND ) // encryption is inverted!
GAME(199?, m4montrlb,m4montrl, mpu4crys, mpu4, mpu4_state, init_crystali, ROT0, "Crystal","Money Trail (Crystal) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND ) // encryption is inverted!
GAME(199?, m4montrlc,m4montrl, mpu4crys, mpu4, mpu4_state, init_crystali, ROT0, "Crystal","Money Trail (Crystal) (MPU4) (set 4)", GAME_FLAGS|MACHINE_NO_SOUND ) // encryption is inverted!
GAME(199?, m4montrld,m4montrl, mpu4crys, mpu4, mpu4_state, init_crystali, ROT0, "Crystal","Money Trail (Crystal) (MPU4) (set 5)", GAME_FLAGS|MACHINE_NO_SOUND ) // encryption is inverted!
GAME(199?, m4mystiq, 0, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Mystique Club (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4mystiqa,m4mystiq, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Mystique Club (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4mystiqb,m4mystiq, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Mystique Club (Crystal) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4mystiqc,m4mystiq, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Mystique Club (Crystal) (MPU4) (set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4nudwin, 0, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Nudge & Win (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4nudwina,m4nudwin, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Nudge & Win (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4paracl, 0, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Paradise Club (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4paracla,m4paracl, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Paradise Club (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4rlpick, 0, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Reel Picks (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4rlpicka,m4rlpick, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Reel Picks (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4rlpickb,m4rlpick, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Reel Picks (Crystal) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4rlpickc,m4rlpick, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Reel Picks (Crystal) (MPU4) (set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4twstr, 0, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Twister (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4twstra, m4twstr, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Twister (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4twstrb, m4twstr, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Twister (Crystal) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4twstrc, m4twstr, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Twister (Crystal) (MPU4) (set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4twstrd, m4twstr, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Twister (Crystal) (MPU4) (set 5)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4twstcl, 0, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Twister Club (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4twstcla,m4twstcl, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Twister Club (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4twstclb,m4twstcl, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Twister Club (Crystal) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4dz, 0, mpu4crys, mpu4, mpu4_state, init_crystal, ROT0, "Crystal","Danger Zone (Crystal) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4tylb, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Crystal","Thank Your Lucky Bars (Crystal) (MPU4) (set 1)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )
GAME(199?, m4tylba, m4tylb, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Crystal","Thank Your Lucky Bars (Crystal) (MPU4) (set 2)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )
GAME(199?, m4magi7, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Crystal","Magic 7's (Crystal) (MPU4) (set 1)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )
GAME(199?, m4magi7a, m4magi7, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Crystal","Magic 7's (Crystal) (MPU4) (set 2)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )
GAME(199?, m4rags, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Crystal","Rags To Riches Club (Crystal) (MPU4) (set 1)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )
GAME(199?, m4ragsa, m4rags, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Crystal","Rags To Riches Club (Crystal) (MPU4) (set 2)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )
GAME(199?, m4ragsb, m4rags, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Crystal","Rags To Riches Club (Crystal) (MPU4) (set 3)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )
GAME(199?, m4ragsc, m4rags, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Crystal","Rags To Riches Club (Crystal) (MPU4) (set 4)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )
GAME(199?, m4riocr, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Crystal","Rio Grande (Crystal) (MPU4) (set 1)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )
GAME(199?, m4riocra, m4riocr, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Crystal","Rio Grande (Crystal) (MPU4) (set 2)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )
GAME(199?, m4ndup, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Crystal","Nudge Double Up Deluxe (Crystal) (MPU4) (set 1)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )
GAME(199?, m4ndupa, m4ndup, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Crystal","Nudge Double Up Deluxe (Crystal) (MPU4) (set 2)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )
GAME(199?, m4ndupb, m4ndup, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Crystal","Nudge Double Up Deluxe (Crystal) (MPU4) (set 3)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )
GAME(199?, m4ndupc, m4ndup, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Crystal","Nudge Double Up Deluxe (Crystal) (MPU4) (set 4)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )
GAME(199?, m4frkstn, 0, mpu4crys, mpu4, mpu4crystal_machines_state, init_m_frkstn, ROT0, "Crystal","Frank 'n' Stein (Crystal) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frkstna,m4frkstn, mpu4crys, mpu4, mpu4crystal_machines_state, init_m_frkstn, ROT0, "Crystal","Frank 'n' Stein (Crystal) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frkstnb,m4frkstn, mpu4crys, mpu4, mpu4crystal_machines_state, init_m_frkstn, ROT0, "Crystal","Frank 'n' Stein (Crystal) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frkstnc,m4frkstn, mpu4crys, mpu4, mpu4crystal_machines_state, init_m_frkstn, ROT0, "Crystal","Frank 'n' Stein (Crystal) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frkstnd,m4frkstn, mpu4crys, mpu4, mpu4crystal_machines_state, init_m_frkstn, ROT0, "Crystal","Frank 'n' Stein (Crystal) (MPU4, set 5)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frkstne,m4frkstn, mpu4crys, mpu4, mpu4crystal_machines_state, init_m_frkstn, ROT0, "Crystal","Frank 'n' Stein (Crystal) (MPU4, set 6)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frkstnf,m4frkstn, mpu4crys, mpu4, mpu4crystal_machines_state, init_m_frkstn, ROT0, "Crystal","Frank 'n' Stein (Crystal) (MPU4, set 7)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frkstng,m4frkstn, mpu4crys, mpu4, mpu4crystal_machines_state, init_m_frkstn, ROT0, "Crystal","Frank 'n' Stein (Crystal) (MPU4, set 8)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frkstnh,m4frkstn, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Frank 'n' Stein (Crystal) (MPU4, set 9)", GAME_FLAGS|MACHINE_NO_SOUND ) // this set is encrypted
GAME(199?, m4aladn, 0, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Aladdin's Cave (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4aladna, m4aladn, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Aladdin's Cave (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4aladnb, m4aladn, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Aladdin's Cave (Crystal) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4aladnc, m4aladn, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Aladdin's Cave (Crystal) (MPU4) (set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4aladnd, m4aladn, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Aladdin's Cave (Crystal) (MPU4) (set 5)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4aladne, m4aladn, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Aladdin's Cave (Crystal) (MPU4) (set 6)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4aladnf, m4aladn, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Aladdin's Cave (Crystal) (MPU4) (set 7)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4aladng, m4aladn, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Aladdin's Cave (Crystal) (MPU4) (set 8)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4aladnh, m4aladn, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Aladdin's Cave (Crystal) (MPU4) (set 9)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4aladni, m4aladn, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Aladdin's Cave (Crystal) (MPU4) (set 10)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bagcsh, 0, mpu4crys, mpu4, mpu4crystal_machines_state, init_m_frkstn, ROT0, "Crystal","Bags Of Cash Club (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bagcsha,m4bagcsh, mpu4crys, mpu4, mpu4crystal_machines_state, init_m_frkstn, ROT0, "Crystal","Bags Of Cash Club (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bucclb, 0, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Buccaneer Club (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bucclba,m4bucclb, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Buccaneer Club (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bucclbb,m4bucclb, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Buccaneer Club (Crystal) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bucclbc,m4bucclb, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Buccaneer Club (Crystal) (MPU4) (set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bullio, 0, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Bullion Club (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bullioa,m4bullio, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Bullion Club (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bulliob,m4bullio, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Bullion Club (Crystal) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4carou ,0, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Carousel Club (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4caroua, m4carou, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Carousel Club (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4caroub, m4carou, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Carousel Club (Crystal) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4carouc, m4carou, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Carousel Club (Crystal) (MPU4) (set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4cclimb, 0, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Crazy Climber (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4cclimba,m4cclimb, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Crazy Climber (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4crzcl, 0, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Crazy Climber Club (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4crzcla, m4crzcl, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Crazy Climber Club (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4crzclb, m4crzcl, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Crazy Climber Club (Crystal) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4crzclc, m4crzcl, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Crazy Climber Club (Crystal) (MPU4) (set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4crzcld, m4crzcl, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Crazy Climber Club (Crystal) (MPU4) (set 5)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4elitc, 0, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Elite Club (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4elitca, m4elitc, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Elite Club (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4fairg, 0, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Fairground (Crystal) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frmani, 0, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Fruit Mania (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frmania,m4frmani, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Fruit Mania (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frmanib,m4frmani, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Fruit Mania (Crystal) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frmanic,m4frmani, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Fruit Mania (Crystal) (MPU4) (set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4goldxc, 0, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Gold Exchange Club (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4goldxca,m4goldxc, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Gold Exchange Club (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4goldxcb,m4goldxc, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Gold Exchange Club (Crystal) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4goldxcc,m4goldxc, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Gold Exchange Club (Crystal) (MPU4) (set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4goldxcd,m4goldxc, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Gold Exchange Club (Crystal) (MPU4) (set 5)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4goldxce,m4goldxc, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Gold Exchange Club (Crystal) (MPU4) (set 6)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4goldfc, 0, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Gold Fever (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4goldfca,m4goldfc, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Gold Fever (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4goldfcb,m4goldfc, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Gold Fever (Crystal) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4hirol, 0, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Hi Roller Club (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4hirola, m4hirol, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Hi Roller Club (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4kingqn, 0, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Kings & Queens Club (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4kingqna,m4kingqn, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Kings & Queens Club (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4lotclb, 0, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Lottery Club (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4lotclba,m4lotclb, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Lottery Club (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4montrl, 0, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystali, ROT0, "Crystal","Money Trail (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND ) // encryption is inverted!
GAME(199?, m4montrla,m4montrl, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystali, ROT0, "Crystal","Money Trail (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND ) // encryption is inverted!
GAME(199?, m4montrlb,m4montrl, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystali, ROT0, "Crystal","Money Trail (Crystal) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND ) // encryption is inverted!
GAME(199?, m4montrlc,m4montrl, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystali, ROT0, "Crystal","Money Trail (Crystal) (MPU4) (set 4)", GAME_FLAGS|MACHINE_NO_SOUND ) // encryption is inverted!
GAME(199?, m4montrld,m4montrl, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystali, ROT0, "Crystal","Money Trail (Crystal) (MPU4) (set 5)", GAME_FLAGS|MACHINE_NO_SOUND ) // encryption is inverted!
GAME(199?, m4mystiq, 0, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Mystique Club (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4mystiqa,m4mystiq, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Mystique Club (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4mystiqb,m4mystiq, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Mystique Club (Crystal) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4mystiqc,m4mystiq, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Mystique Club (Crystal) (MPU4) (set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4nudwin, 0, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Nudge & Win (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4nudwina,m4nudwin, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Nudge & Win (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4paracl, 0, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Paradise Club (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4paracla,m4paracl, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Paradise Club (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4rlpick, 0, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Reel Picks (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4rlpicka,m4rlpick, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Reel Picks (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4rlpickb,m4rlpick, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Reel Picks (Crystal) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4rlpickc,m4rlpick, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Reel Picks (Crystal) (MPU4) (set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4twstr, 0, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Twister (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4twstra, m4twstr, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Twister (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4twstrb, m4twstr, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Twister (Crystal) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4twstrc, m4twstr, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Twister (Crystal) (MPU4) (set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4twstrd, m4twstr, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Twister (Crystal) (MPU4) (set 5)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4twstcl, 0, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Twister Club (Crystal) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4twstcla,m4twstcl, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Twister Club (Crystal) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4twstclb,m4twstcl, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Twister Club (Crystal) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4dz, 0, mpu4crys, mpu4, mpu4crystal_machines_state, init_crystal, ROT0, "Crystal","Danger Zone (Crystal) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4tylb, 0, mod4oki, mpu4, mpu4crystal_machines_state, init_m4default, ROT0, "Crystal","Thank Your Lucky Bars (Crystal) (MPU4) (set 1)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )
GAME(199?, m4tylba, m4tylb, mod4oki, mpu4, mpu4crystal_machines_state, init_m4default, ROT0, "Crystal","Thank Your Lucky Bars (Crystal) (MPU4) (set 2)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )
GAME(199?, m4magi7, 0, mod4oki, mpu4, mpu4crystal_machines_state, init_m4default, ROT0, "Crystal","Magic 7's (Crystal) (MPU4) (set 1)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )
GAME(199?, m4magi7a, m4magi7, mod4oki, mpu4, mpu4crystal_machines_state, init_m4default, ROT0, "Crystal","Magic 7's (Crystal) (MPU4) (set 2)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )
GAME(199?, m4rags, 0, mod4oki, mpu4, mpu4crystal_machines_state, init_m4default, ROT0, "Crystal","Rags To Riches Club (Crystal) (MPU4) (set 1)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )
GAME(199?, m4ragsa, m4rags, mod4oki, mpu4, mpu4crystal_machines_state, init_m4default, ROT0, "Crystal","Rags To Riches Club (Crystal) (MPU4) (set 2)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )
GAME(199?, m4ragsb, m4rags, mod4oki, mpu4, mpu4crystal_machines_state, init_m4default, ROT0, "Crystal","Rags To Riches Club (Crystal) (MPU4) (set 3)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )
GAME(199?, m4ragsc, m4rags, mod4oki, mpu4, mpu4crystal_machines_state, init_m4default, ROT0, "Crystal","Rags To Riches Club (Crystal) (MPU4) (set 4)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )
GAME(199?, m4riocr, 0, mod4oki, mpu4, mpu4crystal_machines_state, init_m4default, ROT0, "Crystal","Rio Grande (Crystal) (MPU4) (set 1)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )
GAME(199?, m4riocra, m4riocr, mod4oki, mpu4, mpu4crystal_machines_state, init_m4default, ROT0, "Crystal","Rio Grande (Crystal) (MPU4) (set 2)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )
GAME(199?, m4ndup, 0, mod4oki, mpu4, mpu4crystal_machines_state, init_m4default, ROT0, "Crystal","Nudge Double Up Deluxe (Crystal) (MPU4) (set 1)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )
GAME(199?, m4ndupa, m4ndup, mod4oki, mpu4, mpu4crystal_machines_state, init_m4default, ROT0, "Crystal","Nudge Double Up Deluxe (Crystal) (MPU4) (set 2)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )
GAME(199?, m4ndupb, m4ndup, mod4oki, mpu4, mpu4crystal_machines_state, init_m4default, ROT0, "Crystal","Nudge Double Up Deluxe (Crystal) (MPU4) (set 3)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )
GAME(199?, m4ndupc, m4ndup, mod4oki, mpu4, mpu4crystal_machines_state, init_m4default, ROT0, "Crystal","Nudge Double Up Deluxe (Crystal) (MPU4) (set 4)",GAME_FLAGS|MACHINE_NO_SOUND|MACHINE_MECHANICAL )

View File

@ -211,10 +211,6 @@ MACHINE_RESET_MEMBER(mpu4dealem_state,dealem_vid)
m_IC23G1 = 1;
m_IC23G2A = 0;
m_IC23G2B = 0;
m_prot_col = 0;
m_chr_counter = 0;
m_chr_value = 0;
}

View File

@ -5,11 +5,27 @@
#include "emu.h"
#include "includes/mpu4.h"
INPUT_PORTS_EXTERN( mpu4 );
namespace {
class mpu4empire_machines_state : public mpu4_state
{
public:
mpu4empire_machines_state(const machine_config& mconfig, device_type type, const char* tag) :
mpu4_state(mconfig, type, tag)
{
}
void init_m4apachg();
};
#include "m4apachg.lh"
void mpu4_state::init_m4apachg()
} // anonymous namespace
void mpu4empire_machines_state::init_m4apachg()
{
init_m4default();
//Derived from Apache_Gold_(Empire)_[C02_800_25jp].gam
@ -675,7 +691,7 @@ ROM_END
ROM_START( m4hotcsh )
ROM_REGION( 0x010000, "maincpu", 0 )
ROM_LOAD( "hc3_0k.bin", 0x0000, 0x010000, CRC(e3cfa94a) SHA1(d21d2dac4edbf3fde9adab399bdd530e034af122) )
ROM_REGION( 0x48, "fakechr", 0 )
ROM_REGION( 0x48, "characteriser:fakechr", 0 )
ROM_LOAD( "db.chr", 0x00, 0x48, CRC(0fc2bb52) SHA1(0d0e47938f6e00166e7352732ddfb7c610f44db2) )
ROM_REGION( 0x100000, "msm6376", 0 )
@ -686,7 +702,7 @@ ROM_END
ROM_START( m4hotcsha )
ROM_REGION( 0x010000, "maincpu", 0 )
ROM_LOAD( "hc3_0ki.bin", 0x0000, 0x010000, CRC(646f8c29) SHA1(19d60faf77a7a83efc3ea4b614a4bc1dee53b8d8) )
ROM_REGION( 0x48, "fakechr", 0 )
ROM_REGION( 0x48, "characteriser:fakechr", 0 )
ROM_LOAD( "db.chr", 0x00, 0x48, CRC(0fc2bb52) SHA1(0d0e47938f6e00166e7352732ddfb7c610f44db2) )
ROM_REGION( 0x100000, "msm6376", 0 )
@ -698,7 +714,7 @@ ROM_START( m4hotcshb )
ROM_REGION( 0x010000, "maincpu", 0 )
ROM_LOAD( "hc3_0kx.bin", 0x0000, 0x010000, CRC(3abebe72) SHA1(fec09ca41e8e43628140456bb44ce6e7c66f5270) )
ROM_REGION( 0x48, "fakechr", 0 )
ROM_REGION( 0x48, "characteriser:fakechr", 0 )
ROM_LOAD( "db.chr", 0x00, 0x48, CRC(0fc2bb52) SHA1(0d0e47938f6e00166e7352732ddfb7c610f44db2) )
ROM_REGION( 0x100000, "msm6376", 0 )
@ -710,7 +726,7 @@ ROM_START( m4hotcshc )
ROM_REGION( 0x010000, "maincpu", 0 )
ROM_LOAD( "empire-hotcashv2-0.bin", 0x0000, 0x010000, CRC(b7ec5af3) SHA1(9454feecc7d7c533fed7134118acd2117ebe2591) )
ROM_REGION( 0x48, "fakechr", 0 )
ROM_REGION( 0x48, "characteriser:fakechr", 0 )
ROM_LOAD( "db.chr", 0x00, 0x48, CRC(0fc2bb52) SHA1(0d0e47938f6e00166e7352732ddfb7c610f44db2) )
ROM_REGION( 0x100000, "msm6376", 0 )
@ -860,87 +876,107 @@ ROM_END
most of these boot (after a single reset to initialize)
but have broken text, need to check VFD emulation */
GAMEL(199?, m4apachg, 0, mod4oki, mpu4, mpu4_state, init_m4apachg, ROT0, "Empire","Apache Gold (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND, layout_m4apachg )
GAMEL(199?, m4apachga, m4apachg, mod4oki, mpu4, mpu4_state, init_m4apachg, ROT0, "Empire","Apache Gold (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND, layout_m4apachg )
GAMEL(199?, m4apachgb, m4apachg, mod4oki, mpu4, mpu4_state, init_m4apachg, ROT0, "Empire","Apache Gold (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND, layout_m4apachg )
GAMEL(199?, m4apachgc, m4apachg, mod4oki, mpu4, mpu4_state, init_m4apachg, ROT0, "Empire","Apache Gold (Empire) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND, layout_m4apachg )
GAMEL(199?, m4apachgd, m4apachg, mod4oki, mpu4, mpu4_state, init_m4apachg, ROT0, "Empire","Apache Gold (Empire) (MPU4, set 5)", GAME_FLAGS|MACHINE_NO_SOUND, layout_m4apachg )
GAMEL(199?, m4apachge, m4apachg, mod4oki, mpu4, mpu4_state, init_m4apachg, ROT0, "Empire","Apache Gold (Empire) (MPU4, set 6)", GAME_FLAGS|MACHINE_NO_SOUND, layout_m4apachg )
GAMEL(199?, m4apachgf, m4apachg, mod4oki, mpu4, mpu4_state, init_m4apachg, ROT0, "Empire","Apache Gold (Empire) (MPU4, set 7)", GAME_FLAGS|MACHINE_NO_SOUND, layout_m4apachg )
GAMEL(199?, m4apachg, 0, mod4oki, mpu4, mpu4empire_machines_state, init_m4apachg, ROT0, "Empire","Apache Gold (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND, layout_m4apachg )
GAMEL(199?, m4apachga, m4apachg, mod4oki, mpu4, mpu4empire_machines_state, init_m4apachg, ROT0, "Empire","Apache Gold (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND, layout_m4apachg )
GAMEL(199?, m4apachgb, m4apachg, mod4oki, mpu4, mpu4empire_machines_state, init_m4apachg, ROT0, "Empire","Apache Gold (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND, layout_m4apachg )
GAMEL(199?, m4apachgc, m4apachg, mod4oki, mpu4, mpu4empire_machines_state, init_m4apachg, ROT0, "Empire","Apache Gold (Empire) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND, layout_m4apachg )
GAMEL(199?, m4apachgd, m4apachg, mod4oki, mpu4, mpu4empire_machines_state, init_m4apachg, ROT0, "Empire","Apache Gold (Empire) (MPU4, set 5)", GAME_FLAGS|MACHINE_NO_SOUND, layout_m4apachg )
GAMEL(199?, m4apachge, m4apachg, mod4oki, mpu4, mpu4empire_machines_state, init_m4apachg, ROT0, "Empire","Apache Gold (Empire) (MPU4, set 6)", GAME_FLAGS|MACHINE_NO_SOUND, layout_m4apachg )
GAMEL(199?, m4apachgf, m4apachg, mod4oki, mpu4, mpu4empire_machines_state, init_m4apachg, ROT0, "Empire","Apache Gold (Empire) (MPU4, set 7)", GAME_FLAGS|MACHINE_NO_SOUND, layout_m4apachg )
GAME(199?, m4bangrs, 0, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Bangers 'n' Cash (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bangrsa, m4bangrs, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Bangers 'n' Cash (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bangrsb, m4bangrs, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Bangers 'n' Cash (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bankrd, 0, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Bank Raid (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bankrda, m4bankrd, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Bank Raid (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bankrdb, m4bankrd, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Bank Raid (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bankrdc, m4bankrd, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Bank Raid (Empire) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bankrdd, m4bankrd, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Bank Raid (Empire) (MPU4, set 5)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bigchs, 0, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Big Cheese (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bigchsa, m4bigchs, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Big Cheese (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bigchsb, m4bigchs, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Big Cheese (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4cstrik, 0, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Cash Strike (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4cstrika, m4cstrik, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Cash Strike (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4cstrikb, m4cstrik, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Cash Strike (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4cstrikc, m4cstrik, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Cash Strike (Empire) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4chacec, 0, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Chase The Ace [Cards] (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4chaceca, m4chacec, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Chase The Ace [Cards] (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4chacef, 0, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Chase The Ace [Fruits] (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4chacefa, m4chacef, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Chase The Ace [Fruits] (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4chacefb, m4chacef, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Chase The Ace [Fruits] (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4chacefc, m4chacef, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Chase The Ace [Fruits] (Empire) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4crzcap, 0, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Crazy Capers (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4crzcapa, m4crzcap, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Crazy Capers (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4crzcapb, m4crzcap, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Crazy Capers (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4crzcapc, m4crzcap, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Crazy Capers (Empire) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4crfire, 0, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Crossfire (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND ) // doesn't boot, alarm
GAME(199?, m4crfirea, m4crfire, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Crossfire (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND ) // doesn't boot, alarm
GAME(199?, m4eureka, 0, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Eureka (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4eurekaa, m4eureka, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Eureka (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4eurekab, m4eureka, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Eureka (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4fright, 0, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Fright Night (Empire) (MPU4, v4.1X)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frighta, m4fright, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Fright Night (Empire) (MPU4, v4.1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frightb, m4fright, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Fright Night (Empire) (MPU4, v4.1i)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frightc, m4fright, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Fright Night (Empire) (MPU4, v?.?, set 1)", GAME_FLAGS|MACHINE_NO_SOUND ) // bad dump
GAME(199?, m4frightd, m4fright, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Fright Night (Empire) (MPU4, v3.3)",GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frighte, m4fright, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Fright Night (Empire) (MPU4, v3.0)",GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frightf, m4fright, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Fright Night (Empire) (MPU4, v?.?, set 2)",GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4gamblr, 0, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","The Gambler (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4gamblra, m4gamblr, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","The Gambler (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4gamblrb, m4gamblr, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","The Gambler (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4gtrain, 0, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Ghost Train (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4gtraina, m4gtrain, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Ghost Train (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4gtrainb, m4gtrain, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Ghost Train (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4gtrainc, m4gtrain, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Ghost Train (Empire) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4goldfv, 0, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Gold Fever (Empire) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4haunt, 0, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Haunted House (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4haunta, m4haunt, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Haunted House (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4hauntb, m4haunt, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Haunted House (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4hauntc, m4haunt, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Haunted House (Empire) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4hauntd, m4haunt, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Haunted House (Empire) (MPU4, set 5)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4hisprt, 0, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","High Spirits (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4hisprta, m4hisprt, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","High Spirits (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4hisprtb, m4hisprt, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","High Spirits (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4hisprtc, m4hisprt, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","High Spirits (Empire) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4hisprtd, m4hisprt, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","High Spirits (Empire) (MPU4, set 5)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4hisprte, m4hisprt, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","High Spirits (Empire) (MPU4, set 6)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(1996, m4hotcsh, 0, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Hot Cash (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(1996, m4hotcsha, m4hotcsh, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Hot Cash (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(1996, m4hotcshb, m4hotcsh, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Hot Cash (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(1996, m4hotcshc, m4hotcsh, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Hot Cash (Empire) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4monspn, 0, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Money Spinner (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4monspna, m4monspn, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Money Spinner (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4monspnb, m4monspn, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Money Spinner (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4pbnudg, 0, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Pinball Nudger (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4pbnudga, m4pbnudg, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Pinball Nudger (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4pbnudgb, m4pbnudg, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Pinball Nudger (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4pitfal, 0, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Pitfall (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND ) // doesn't boot, alarm
GAME(199?, m4pitfala, m4pitfal, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Pitfall (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND ) // doesn't boot, alarm
GAME(199?, m4pitfalb, m4pitfal, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Pitfall (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND ) // doesn't boot, alarm
GAME(199?, m4pitfalc, m4pitfal, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Pitfall (Empire) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND ) // doesn't boot, alarm
GAME(199?, m4ttrail, 0, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Treasure Trail (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4ttraila,m4ttrail, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Treasure Trail (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4ttrailb,m4ttrail, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","Treasure Trail (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bangrs, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Bangers 'n' Cash (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bangrsa, m4bangrs, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Bangers 'n' Cash (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bangrsb, m4bangrs, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Bangers 'n' Cash (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bankrd, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Bank Raid (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bankrda, m4bankrd, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Bank Raid (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bankrdb, m4bankrd, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Bank Raid (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bankrdc, m4bankrd, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Bank Raid (Empire) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bankrdd, m4bankrd, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Bank Raid (Empire) (MPU4, set 5)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bigchs, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Big Cheese (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bigchsa, m4bigchs, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Big Cheese (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bigchsb, m4bigchs, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Big Cheese (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4cstrik, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Cash Strike (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4cstrika, m4cstrik, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Cash Strike (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4cstrikb, m4cstrik, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Cash Strike (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4cstrikc, m4cstrik, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Cash Strike (Empire) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4chacec, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Chase The Ace [Cards] (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4chaceca, m4chacec, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Chase The Ace [Cards] (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4chacef, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Chase The Ace [Fruits] (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4chacefa, m4chacef, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Chase The Ace [Fruits] (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4chacefb, m4chacef, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Chase The Ace [Fruits] (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4chacefc, m4chacef, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Chase The Ace [Fruits] (Empire) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4crzcap, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Crazy Capers (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4crzcapa, m4crzcap, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Crazy Capers (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4crzcapb, m4crzcap, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Crazy Capers (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4crzcapc, m4crzcap, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Crazy Capers (Empire) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4crfire, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Crossfire (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND ) // doesn't boot, alarm
GAME(199?, m4crfirea, m4crfire, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Crossfire (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND ) // doesn't boot, alarm
GAME(199?, m4eureka, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Eureka (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4eurekaa, m4eureka, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Eureka (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4eurekab, m4eureka, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Eureka (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4fright, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Fright Night (Empire) (MPU4, v4.1X)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frighta, m4fright, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Fright Night (Empire) (MPU4, v4.1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frightb, m4fright, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Fright Night (Empire) (MPU4, v4.1i)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frightc, m4fright, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Fright Night (Empire) (MPU4, v?.?, set 1)", GAME_FLAGS|MACHINE_NO_SOUND ) // bad dump
GAME(199?, m4frightd, m4fright, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Fright Night (Empire) (MPU4, v3.3)",GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frighte, m4fright, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Fright Night (Empire) (MPU4, v3.0)",GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frightf, m4fright, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Fright Night (Empire) (MPU4, v?.?, set 2)",GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4gamblr, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","The Gambler (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4gamblra, m4gamblr, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","The Gambler (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4gamblrb, m4gamblr, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","The Gambler (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4gtrain, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Ghost Train (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4gtraina, m4gtrain, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Ghost Train (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4gtrainb, m4gtrain, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Ghost Train (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4gtrainc, m4gtrain, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Ghost Train (Empire) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4goldfv, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Gold Fever (Empire) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4haunt, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Haunted House (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4haunta, m4haunt, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Haunted House (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4hauntb, m4haunt, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Haunted House (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4hauntc, m4haunt, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Haunted House (Empire) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4hauntd, m4haunt, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Haunted House (Empire) (MPU4, set 5)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4hisprt, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","High Spirits (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4hisprta, m4hisprt, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","High Spirits (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4hisprtb, m4hisprt, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","High Spirits (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4hisprtc, m4hisprt, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","High Spirits (Empire) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4hisprtd, m4hisprt, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","High Spirits (Empire) (MPU4, set 5)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4hisprte, m4hisprt, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","High Spirits (Empire) (MPU4, set 6)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(1996, m4hotcsh, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Hot Cash (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(1996, m4hotcsha, m4hotcsh, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Hot Cash (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(1996, m4hotcshb, m4hotcsh, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Hot Cash (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(1996, m4hotcshc, m4hotcsh, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Hot Cash (Empire) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4monspn, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Money Spinner (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4monspna, m4monspn, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Money Spinner (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4monspnb, m4monspn, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Money Spinner (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4pbnudg, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Pinball Nudger (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4pbnudga, m4pbnudg, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Pinball Nudger (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4pbnudgb, m4pbnudg, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Pinball Nudger (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4pitfal, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Pitfall (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND ) // doesn't boot, alarm
GAME(199?, m4pitfala, m4pitfal, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Pitfall (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND ) // doesn't boot, alarm
GAME(199?, m4pitfalb, m4pitfal, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Pitfall (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND ) // doesn't boot, alarm
GAME(199?, m4pitfalc, m4pitfal, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Pitfall (Empire) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND ) // doesn't boot, alarm
GAME(199?, m4ttrail, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Treasure Trail (Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4ttraila,m4ttrail, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Treasure Trail (Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4ttrailb,m4ttrail, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","Treasure Trail (Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
// doesn't seem like the other Empire games (starts with RESETTING JNE, licensed, mislabeled?)
//Looks like the only one to have a proper protection routine, too so I'm guessing it's just a game they distributed, rather than made themselves
GAME(199?, m4jne, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Empire","The Jackpot's Not Enough (Empire) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4jne, 0, mod4oki, mpu4, mpu4empire_machines_state, init_m4default, ROT0, "Empire","The Jackpot's Not Enough (Empire) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )

View File

@ -5,7 +5,18 @@
#include "emu.h"
#include "includes/mpu4.h"
INPUT_PORTS_EXTERN( mpu4 );
namespace {
class mpu4mdm_machines_state : public mpu4_state
{
public:
mpu4mdm_machines_state(const machine_config &mconfig, device_type type, const char *tag) :
mpu4_state(mconfig, type, tag)
{
}
};
ROM_START( m42punlm )
ROM_REGION( 0x020000, "maincpu", 0 )
@ -413,52 +424,73 @@ ROM_START( m4ewshft )
ROM_LOAD( "each_way_shifter-snd2.bin", 0x080000, 0x080000, CRC(e3ce5ec5) SHA1(9c7eefa4042b1b1aca3d0fbefcad10db34992c43) )
ROM_END
} // anonymous namespace
#define GAME_FLAGS (MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK|MACHINE_MECHANICAL)
/* MDM
most of these boot and act similar to the Empire games (ie bad text, but run OK) */
GAME(199?, m42punlm, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","2p Unlimited (Mdm) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4silnud, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm?","Silver Nudger (Mdm?) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND ) // code is close to 2p Unlimited, same sound rom
GAME(199?, m4nud2p, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm?","2p Nudger (Mdm?) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND ) // code is close to 2p Unlimited, same sound rom
GAME(199?, m4ctn, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm?","Tuppenny Nudger Classic (Mdm?) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND ) // code is close to 2p Unlimited, same sound rom
GAME(199?, m4bigapl, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","The Big Apple (Mdm) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bigapla, m4bigapl, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","The Big Apple (Mdm) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bigaplb, m4bigapl, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","The Big Apple (Mdm) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bigaplc, m4bigapl, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","The Big Apple (Mdm) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bigapld, m4bigapl, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","The Big Apple (Mdm) (MPU4, set 5)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bigaple, m4bigapl, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","The Big Apple (Mdm) (MPU4, set 6)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4blztrl, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Blazing Trails (Mdm) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4blztrla, m4blztrl, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Blazing Trails (Mdm) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bodymt, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Body Match (Mdm) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND ) // doesn't boot, various alarms
GAME(199?, m4coloss, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Colossus (Mdm) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4colossa, m4coloss, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Colossus (Mdm) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4colossb, m4coloss, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Colossus (Mdm) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4colossc, m4coloss, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Colossus (Mdm) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4colossd, m4coloss, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Colossus (Mdm) (MPU4, set 5)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4colosse, m4coloss, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Colossus (Mdm) (MPU4, set 6)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4colossf, m4coloss, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Colossus (Mdm) (MPU4, set 7)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4colossg, m4coloss, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Colossus (Mdm) (MPU4, set 8)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4firebl, 0, mod2 ,mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Fireball (Mdm) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND ) // hangs after spin (sound status?)
GAME(199?, m4firebla, m4firebl, mod2 ,mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Fireball (Mdm) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND ) // hangs after spin (sound status?)
GAME(199?, m4fireblb, m4firebl, mod2 ,mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Fireball (Mdm) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND ) // hangs after spin (sound status?)
GAME(199?, m4fireblc, m4firebl, mod2 ,mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Fireball (Mdm) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND ) // hangs after spin (sound status?)
GAME(199?, m4firebld, m4firebl, mod2 ,mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Fireball (Mdm) (MPU4, set 5)", GAME_FLAGS|MACHINE_NO_SOUND ) // hangs after spin (sound status?)
GAME(199?, m4mayhem, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Mayhem (Mdm) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4mayhema, m4mayhem, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Mayhem (Mdm) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4themob, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","The Mob (Mdm) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4themoba, m4themob, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","The Mob (Mdm) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4themobb, m4themob, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","The Mob (Mdm) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4nudbon, 0, mod2 ,mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Nudge Bonanza (Mdm) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4nudbona, m4nudbon, mod2 ,mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Nudge Bonanza (Mdm) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4nudgem, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Nudge Gems (Mdm) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4smshgb, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Smash 'n' Grab (Mdm) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4smshgba,m4smshgb, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Smash 'n' Grab (Mdm) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4smshgbb,m4smshgb, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Smash 'n' Grab (Mdm) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4smshgbc,m4smshgb, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Smash 'n' Grab (Mdm) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4snklad, 0, mod2 ,mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Snakes & Ladders (Mdm) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4excam, 0, mod4oki ,mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Excalibur (Mdm) (MPU4, V1.4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4excamd,m4excam, mod4oki ,mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Excalibur (Mdm) (MPU4, V1.0D)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4front, 0, mod4oki ,mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Final Frontier (Mdm) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4safar, 0, mod4oki ,mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Safari Club (Mdm) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4snowbl, 0, mod2 ,mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Snowball Bingo (Mdm) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4ewshft, 0, mod4oki ,mpu4, mpu4_state, init_m4default, ROT0, "Mdm","Each Way Shifter (Mdm) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m42punlm, 0, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","2p Unlimited (Mdm) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4silnud, 0, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm?","Silver Nudger (Mdm?) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND ) // code is close to 2p Unlimited, same sound rom
GAME(199?, m4nud2p, 0, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm?","2p Nudger (Mdm?) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND ) // code is close to 2p Unlimited, same sound rom
GAME(199?, m4ctn, 0, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm?","Tuppenny Nudger Classic (Mdm?) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND ) // code is close to 2p Unlimited, same sound rom
GAME(199?, m4bigapl, 0, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","The Big Apple (Mdm) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bigapla, m4bigapl, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","The Big Apple (Mdm) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bigaplb, m4bigapl, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","The Big Apple (Mdm) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bigaplc, m4bigapl, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","The Big Apple (Mdm) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bigapld, m4bigapl, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","The Big Apple (Mdm) (MPU4, set 5)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bigaple, m4bigapl, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","The Big Apple (Mdm) (MPU4, set 6)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4blztrl, 0, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Blazing Trails (Mdm) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4blztrla, m4blztrl, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Blazing Trails (Mdm) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bodymt, 0, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Body Match (Mdm) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND ) // doesn't boot, various alarms
GAME(199?, m4coloss, 0, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Colossus (Mdm) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4colossa, m4coloss, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Colossus (Mdm) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4colossb, m4coloss, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Colossus (Mdm) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4colossc, m4coloss, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Colossus (Mdm) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4colossd, m4coloss, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Colossus (Mdm) (MPU4, set 5)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4colosse, m4coloss, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Colossus (Mdm) (MPU4, set 6)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4colossf, m4coloss, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Colossus (Mdm) (MPU4, set 7)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4colossg, m4coloss, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Colossus (Mdm) (MPU4, set 8)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4firebl, 0, mod2 ,mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Fireball (Mdm) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND ) // hangs after spin (sound status?)
GAME(199?, m4firebla, m4firebl, mod2 ,mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Fireball (Mdm) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND ) // hangs after spin (sound status?)
GAME(199?, m4fireblb, m4firebl, mod2 ,mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Fireball (Mdm) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND ) // hangs after spin (sound status?)
GAME(199?, m4fireblc, m4firebl, mod2 ,mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Fireball (Mdm) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND ) // hangs after spin (sound status?)
GAME(199?, m4firebld, m4firebl, mod2 ,mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Fireball (Mdm) (MPU4, set 5)", GAME_FLAGS|MACHINE_NO_SOUND ) // hangs after spin (sound status?)
GAME(199?, m4mayhem, 0, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Mayhem (Mdm) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4mayhema, m4mayhem, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Mayhem (Mdm) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4themob, 0, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","The Mob (Mdm) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4themoba, m4themob, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","The Mob (Mdm) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4themobb, m4themob, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","The Mob (Mdm) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4nudbon, 0, mod2 ,mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Nudge Bonanza (Mdm) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4nudbona, m4nudbon, mod2 ,mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Nudge Bonanza (Mdm) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4nudgem, 0, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Nudge Gems (Mdm) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4smshgb, 0, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Smash 'n' Grab (Mdm) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4smshgba,m4smshgb, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Smash 'n' Grab (Mdm) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4smshgbb,m4smshgb, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Smash 'n' Grab (Mdm) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4smshgbc,m4smshgb, mod4oki, mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Smash 'n' Grab (Mdm) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4snklad, 0, mod2 ,mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Snakes & Ladders (Mdm) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4excam, 0, mod4oki ,mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Excalibur (Mdm) (MPU4, V1.4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4excamd,m4excam, mod4oki ,mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Excalibur (Mdm) (MPU4, V1.0D)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4front, 0, mod4oki ,mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Final Frontier (Mdm) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4safar, 0, mod4oki ,mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Safari Club (Mdm) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4snowbl, 0, mod2 ,mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Snowball Bingo (Mdm) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4ewshft, 0, mod4oki ,mpu4, mpu4mdm_machines_state, init_m4default, ROT0, "Mdm","Each Way Shifter (Mdm) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )

View File

@ -5,13 +5,26 @@
#include "emu.h"
#include "includes/mpu4.h"
INPUT_PORTS_EXTERN( mpu4 );
namespace {
class mpu4misc_machines_state : public mpu4_state
{
public:
mpu4misc_machines_state(const machine_config &mconfig, device_type type, const char *tag) :
mpu4_state(mconfig, type, tag)
{
}
};
} // anonymous namespace
ROM_START( m4bangin )
ROM_REGION( 0x020000, "maincpu", 0 )
ROM_LOAD( "bang.hex", 0x0000, 0x020000, CRC(e40f21d3) SHA1(62319967882f01bbd4d10bca52daffd2fe3ec03a) )
ROM_REGION( 0x48, "fakechr", 0 )
ROM_REGION( 0x48, "characteriser:fakechr", 0 )
ROM_LOAD( "bang.chr", 0x0000, 0x000048, CRC(aacbab22) SHA1(1f394b8947486f319743c0703884ecd35214c433) )
ROM_REGION( 0x180000, "msm6376", 0 )
@ -23,7 +36,7 @@ ROM_END
ROM_START( m4bangina )
ROM_REGION( 0x020000, "maincpu", 0 )
ROM_LOAD( "bang1-5n.p1", 0x0000, 0x020000, CRC(dabb462a) SHA1(c02fa204bfab07d5edbc784ccaca50f119ce8d5a) )
ROM_REGION( 0x48, "fakechr", 0 )
ROM_REGION( 0x48, "characteriser:fakechr", 0 )
ROM_LOAD( "bang.chr", 0x0000, 0x000048, CRC(aacbab22) SHA1(1f394b8947486f319743c0703884ecd35214c433) )
ROM_REGION( 0x180000, "msm6376", 0 )
@ -35,7 +48,7 @@ ROM_END
ROM_START( m4banginb )
ROM_REGION( 0x020000, "maincpu", 0 )
ROM_LOAD( "bang1-5p.p1", 0x0000, 0x020000, CRC(84bb8da8) SHA1(ae601957a3cd0b7e4b176987a5592d0b7c9be19d) )
ROM_REGION( 0x48, "fakechr", 0 )
ROM_REGION( 0x48, "characteriser:fakechr", 0 )
ROM_LOAD( "bang.chr", 0x0000, 0x000048, CRC(aacbab22) SHA1(1f394b8947486f319743c0703884ecd35214c433) )
ROM_REGION( 0x180000, "msm6376", 0 )
@ -153,7 +166,7 @@ ROM_END
ROM_LOAD( name, offset, length, hash ) \
M4DCRLS_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4misc_machines_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
GAME_CUSTOM( 199?, m4dcrls, 0, "70000116.bin", 0x0000, 0x040000, CRC(27e5ad77) SHA1(83cabd8b52efc6c0d5530b55683295208f64abb6), "Qps","Double Crazy Reels (Qps) (MPU4) (set 1)" ) // dcr_std_340.bin
@ -174,6 +187,18 @@ GAME_CUSTOM( 199?, m4dcrls__n, m4dcrls, "dcr_mecca_340_lv.bin",
GAME_CUSTOM( 199?, m4dcrls__o, m4dcrls, "dcr_std_340_lv.bin", 0x0000, 0x040000, CRC(d9632301) SHA1(19ac680f00e085d94fc45f765c975f3da1ca1eb3), "Qps","Double Crazy Reels (Qps) (MPU4) (set 16)" )
GAME_CUSTOM( 199?, m4dcrls__p, m4dcrls, "70001115.bin", 0x0000, 0x040000, CRC(26432b07) SHA1(ef7303793252210f3fd07b12f5684b5d2cc828ab), "Qps","Double Crazy Reels (Qps) (MPU4) (set 17)" ) // dcr_data_340_lv.bin
GAME_CUSTOM( 199?, m4dcrls__q, m4dcrls, "70001116.bin", 0x0000, 0x040000, CRC(522191e8) SHA1(f80656290295b556d4b67c4458d8f856f8b937fb), "Qps","Double Crazy Reels (Qps) (MPU4) (set 18)" )
#undef GAME_CUSTOM
#define GAME_CUSTOM(year, setname,parent,name,offset,length,hash,company,title) \
ROM_START( setname ) \
ROM_REGION( length, "maincpu", 0 ) \
ROM_LOAD( name, offset, length, hash ) \
M4DCRLS_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4misc_machines_state, init_m4default, ROT0, company, title, GAME_FLAGS )
GAME_CUSTOM( 199?, m4dcrls__r, m4dcrls, "dcr_data_340.bin", 0x0000, 0x010000, CRC(fc12e68f) SHA1(f07a42323651ef9aefac24c3b9296a98068c2dc2), "Qps","Double Crazy Reels (Qps) (MPU4) (set 19)" ) // too small?
@ -189,7 +214,7 @@ GAME_CUSTOM( 199?, m4dcrls__r, m4dcrls, "dcr_data_340.bin",
ROM_LOAD( name, offset, length, hash ) \
M4JUNGJK_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4misc_machines_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
@ -213,7 +238,7 @@ GAME_CUSTOM( 199?, m4jungjk__e, m4jungjk, "jungle.p1", 0
ROM_LOAD( name, offset, length, hash ) \
M4RHNOTE_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4misc_machines_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
GAME_CUSTOM( 199?, m4rhnote, 0, "70000120.bin", 0x0000, 0x040000, CRC(d1ce1e1c) SHA1(2fc2b041b4e9fcade4b2ce6a0bc709f4174e2d88), "Qps","Red Hot Notes (Qps) (MPU4) (set 1)" )
GAME_CUSTOM( 199?, m4rhnote__a, m4rhnote, "70000121.bin", 0x0000, 0x040000, CRC(1e1a26c0) SHA1(8a80a94d280c82887a0f7da607988597df23e1fb), "Qps","Red Hot Notes (Qps) (MPU4) (set 2)" )
GAME_CUSTOM( 199?, m4rhnote__b, m4rhnote, "70000125.bin", 0x0000, 0x080000, CRC(67a617a2) SHA1(3900c0cc3f8e4d52105096c1e21903cb83b8c1b7), "Qps","Red Hot Notes (Qps) (MPU4) (set 3)" )
@ -243,8 +268,8 @@ GAME_CUSTOM( 199?, m4rhnote__y, m4rhnote, "rhn_std_110_lv.bin", 0
#define M4RHROCK_EXTRA_ROMS \
ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) /* 71000200.hi padded with 0xff as original IntelHex was undersize */ \
ROM_LOAD( "71000200.hi", 0x0000, 0x80000, CRC(3054ff83) SHA1(241ab9b634c83d5b388eff2d598e7897aa7dd703) ) \
ROM_LOAD( "71000200.lo", 0x0000, 0x80000, CRC(b426e83f) SHA1(c30b3868f2c6a4f84a678e2c5151861619b27905) )
ROM_LOAD( "71000200.lo", 0x00000, 0x80000, CRC(b426e83f) SHA1(c30b3868f2c6a4f84a678e2c5151861619b27905) ) \
ROM_LOAD( "71000200.hi", 0x80000, 0x80000, CRC(3054ff83) SHA1(241ab9b634c83d5b388eff2d598e7897aa7dd703) )
#undef GAME_CUSTOM
#define GAME_CUSTOM(year, setname,parent,name,offset,length,hash,company,title) \
@ -253,7 +278,7 @@ GAME_CUSTOM( 199?, m4rhnote__y, m4rhnote, "rhn_std_110_lv.bin", 0
ROM_LOAD( name, offset, length, hash ) \
M4RHROCK_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4misc_machines_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
GAME_CUSTOM( 199?, m4rhrock, 0, "rhr_v200_1625_da8c_nlv.bin", 0x0000, 0x040000, CRC(dd67f5b3) SHA1(19b7b57ef20a2ad7997cf748396b246fda87db70), "Qps","Red Hot Rocks (Qps) (MPU4) (set 1)" )
@ -263,8 +288,8 @@ GAME_CUSTOM( 199?, m4rhrock__a, m4rhrock, "rhr_v300_1216_ce52_nlv.bin", 0x0
// 71000180.lo.hex and 71000180.hi.hex converted
#define M4RHWHL_EXTRA_ROMS \
ROM_REGION( 0x200000, "msm6376", ROMREGION_ERASE00 ) \
ROM_LOAD( "redhotwheelssnd.p1", 0x0000, 0x080000, CRC(7b274a71) SHA1(38ba69084819133253b41f2eb1d784104e5f10f7) ) \
ROM_LOAD( "redhotwheelssnd.p2", 0x0000, 0x080000, CRC(e36e19e2) SHA1(204554622c9020479b095acd4fbab1f21f829137) )
ROM_LOAD( "redhotwheelssnd.p1", 0x000000, 0x080000, CRC(7b274a71) SHA1(38ba69084819133253b41f2eb1d784104e5f10f7) ) \
ROM_LOAD( "redhotwheelssnd.p2", 0x080000, 0x080000, CRC(e36e19e2) SHA1(204554622c9020479b095acd4fbab1f21f829137) )
#undef GAME_CUSTOM
#define GAME_CUSTOM(year, setname,parent,name,offset,length,hash,company,title) \
@ -273,7 +298,7 @@ GAME_CUSTOM( 199?, m4rhrock__a, m4rhrock, "rhr_v300_1216_ce52_nlv.bin", 0x0
ROM_LOAD( name, offset, length, hash ) \
M4RHWHL_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4misc_machines_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
GAME_CUSTOM( 199?, m4rhwhl, 0, "70001184.bin", 0x0000, 0x080000, CRC(8792d95b) SHA1(24b4f78728db7ee95d1fcd3ba38b49a20baaae6b), "Qps","Red Hot Wheels (Qps) (MPU4) (set 1)" )
GAME_CUSTOM( 199?, m4rhwhl__a, m4rhwhl, "rhw_v100_1333_6d40_lv.bin", 0x0000, 0x080000, CRC(9ef7b655) SHA1(605822eaee44bebf554218ef7346192a6a84077e), "Qps","Red Hot Wheels (Qps) (MPU4) (set 2)" )
GAME_CUSTOM( 199?, m4rhwhl__b, m4rhwhl, "rhw_v310_0925_0773_lv_p.bin", 0x0000, 0x080000, CRC(11880908) SHA1(0165bacf73dd54959975b3f186e256fd8d690d34), "Qps","Red Hot Wheels (Qps) (MPU4) (set 3)" )
@ -291,7 +316,7 @@ GAME_CUSTOM( 199?, m4rhwhl__c, m4rhwhl, "rhw_v310_0931_fa02_lv.bin", 0x00
ROM_LOAD( name, offset, length, hash ) \
M4RDEAL_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4misc_machines_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
GAME_CUSTOM( 199?, m4rdeal, 0, "70000703.bin", 0x0000, 0x080000, CRC(11e51311) SHA1(71a4327fa01cd7e899d423adc34c732ed56118d8), "Qps","Reel Deal (Qps) (MPU4) (set 1)" )
GAME_CUSTOM( 199?, m4rdeal__a, m4rdeal, "70000704.bin", 0x0000, 0x080000, CRC(b161c08b) SHA1(bb914eb900aff0f6eeec33ff8a595a288306e073), "Qps","Reel Deal (Qps) (MPU4) (set 2)" )
@ -318,7 +343,7 @@ GAME_CUSTOM( 199?, m4rdeal__i, m4rdeal, "70001745.bin", 0x0000, 0x080000, CR
ROM_LOAD( name, offset, length, hash ) \
M4SHOKNR_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4misc_machines_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
GAME_CUSTOM( 199?, m4shoknr, 0, "snr_v300_1218_3019_lv.bin", 0x0000, 0x040000, CRC(bec80497) SHA1(08de5e29a063b01fb904a156170a3063633115ab), "Qps","Shock 'n' Roll (Qps) (MPU4) (set 1)" )
GAME_CUSTOM( 199?, m4shoknr__a, m4shoknr, "snr_v300_1221_c8ff_nlv.bin", 0x0000, 0x040000, CRC(d191b361) SHA1(4146e509e77878a51e32de877768504b3c85e6f8), "Qps","Shock 'n' Roll (Qps) (MPU4) (set 2)" )
@ -338,7 +363,7 @@ GAME_CUSTOM( 199?, m4shoknr__c, m4shoknr, "snr_v200_1655_5a69_nlv.bin", 0
ROM_LOAD( name, offset, length, hash ) \
M4TORNAD_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4misc_machines_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
GAME_CUSTOM( 199?, m4tornad, 0, "torn_v110_1146_979d_lv.bin", 0x0000, 0x040000, CRC(3160bddd) SHA1(4f36b081c8f6859a3fe55e1f177a0406c2480987), "Qps","Tornado (Qps) (MPU4) (set 1)" )
GAME_CUSTOM( 199?, m4tornad__a, m4tornad, "torn_v110_1153_955f_nlv.bin", 0x0000, 0x040000, CRC(c437040d) SHA1(50c5ba655989b7f6a2ee61af0ad007ce825f4364), "Qps","Tornado (Qps) (MPU4) (set 2)" )
@ -362,17 +387,18 @@ GAME_CUSTOM( 199?, m4tornad__g, m4tornad, "tornsp_v200_1626_ec93_lv.bin",
ROM_LOAD( name, offset, length, hash ) \
M4SHKWAV_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4misc_machines_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
GAME_CUSTOM( 199?, m4shkwav, 0, "swave_v210_1135_08dd_lv.bin", 0x0000, 0x040000, CRC(ca9d40a3) SHA1(65c9e4aa022eb6fe70d619f67638c37ad578ddbf), "Qps","Shockwave (Qps) (MPU4) (set 1)" )
GAME_CUSTOM( 199?, m4shkwav__a, m4shkwav, "swave_v210_11376_0bb3_nlv.bin", 0x0000, 0x040000, CRC(3fcaf973) SHA1(28258c8c60e6b542e1789cd8a4cfd530d1ed6084), "Qps","Shockwave (Qps) (MPU4) (set 2)" )
GAME_CUSTOM( 199?, m4shkwav__b, m4shkwav, "swsplv.bin", 0x0000, 0x040000, CRC(1e33e93f) SHA1(3e87f8ed35da776e1968c9574c140cc3984ea8de), "Qps","Shockwave (Qps) (MPU4) (set 3)" )
//This rom is possibly bad, data content isn't multiple of 0x800, padding with low bits rather than high
ROM_START( m4shkwav__c )
ROM_REGION( 0x080000, "maincpu", 0 )
ROM_LOAD( "sho1_0lv.bin", 0x0000, 0x080000, BAD_DUMP CRC(a76d8544) SHA1(8277a2ce311840b8405a087d3dc0bbf97054ad87) )
ROM_REGION( 0x040000, "maincpu", 0 )
ROM_LOAD( "sho1_0lv.bin", 0x0000, 0x040000, BAD_DUMP CRC(a76d8544) SHA1(8277a2ce311840b8405a087d3dc0bbf97054ad87) )
ROM_IGNORE(0x40000)
M4SHKWAV_EXTRA_ROMS
ROM_END
GAME(199?, m4shkwav__c, m4shkwav, mod4oki, mpu4, mpu4_state, init_m4default_big, ROT0, "Qps", "Shockwave (Qps) (MPU4) (set 4)", GAME_FLAGS )
GAME(199?, m4shkwav__c, m4shkwav, mod4oki, mpu4, mpu4misc_machines_state, init_m4default_big, ROT0, "Qps", "Shockwave (Qps) (MPU4) (set 4)", GAME_FLAGS )
GAME_CUSTOM( 199?, m4shkwav__d, m4shkwav, "swave_v300_1552_13ed_nlv.bin", 0x0000, 0x040000, CRC(b0e03f04) SHA1(fdd113af30fd9e87b171ecdf3be7e720366476b3), "Qps","Shockwave (Qps) (MPU4) (set 5)" )
GAME_CUSTOM( 199?, m4shkwav__e, m4shkwav, "swave_v300_1555_119d_lv.bin", 0x0000, 0x040000, CRC(45b786d4) SHA1(24fd4fdea684103334385ca329f384796b496e2c), "Qps","Shockwave (Qps) (MPU4) (set 6)" )
GAME_CUSTOM( 199?, m4shkwav__f, m4shkwav, "swsp_v300_1602_e1b2_nlv.bin", 0x0000, 0x040000, CRC(4ed74015) SHA1(0ab2167ba0ce6f1a1317c2087091187b9fa94c27), "Qps","Shockwave (Qps) (MPU4) (set 7)" )
@ -391,7 +417,7 @@ GAME_CUSTOM( 199?, m4shkwav__g, m4shkwav, "swsp_v300_1606_ded8_lv.bin",
ROM_LOAD( name, offset, length, hash ) \
M4CLAB_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4misc_machines_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
GAME_CUSTOM( 199?, m4clab, 0, "70000019.bin", 0x0000, 0x040000, CRC(23a12863) SHA1(4047cb8cbc03f96f2b8681b6276e100e8e9194a5), "Qps","Cash Lab (Qps) (MPU4) (set 1)" )
GAME_CUSTOM( 199?, m4clab__a, m4clab, "70000020.bin", 0x0000, 0x040000, CRC(88af7368) SHA1(14dea4267a4365286eea1e02b9b44d4053618cbe), "Qps","Cash Lab (Qps) (MPU4) (set 2)" )
@ -414,7 +440,7 @@ GAME_CUSTOM( 199?, m4clab__j, m4clab, "clabrom", 0x0
ROM_LOAD( name, offset, length, hash ) \
M4SDQUID_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4misc_machines_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
GAME_CUSTOM( 199?, m4sdquid, 0, "70000352.bin", 0x0000, 0x040000, CRC(303d6177) SHA1(aadff8a81244bfd62d1cc088caf01496e1ff61db), "Qps","Sundance Quid (Qps) (MPU4) (set 1)" )
GAME_CUSTOM( 199?, m4sdquid__a, m4sdquid, "70000353.bin", 0x0000, 0x040000, CRC(6e3a9dfc) SHA1(1d5d04140811e17267102c0618ffdaf70f71f717), "Qps","Sundance Quid (Qps) (MPU4) (set 2)" )
@ -441,7 +467,7 @@ GAME_CUSTOM( 199?, m4sdquid__k, m4sdquid, "70001461.bin", 0x0000, 0x080000,
ROM_LOAD( name, offset, length, hash ) \
M4LOOPLT_EXTRA_ROMS \
ROM_END \
GAME(year, setname, parent, mod4oki, mpu4, mpu4_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
GAME(year, setname, parent, mod4oki, mpu4, mpu4misc_machines_state, init_m4default_big, ROT0, company, title, GAME_FLAGS )
GAME_CUSTOM( 199?, m4looplt, 0, "70000500.bin", 0x0000, 0x080000, CRC(040699a5) SHA1(e1ebc23684c5bc1faaac7409d2179488c3022872), "Qps","Loop The Loot (Qps) (MPU4) (set 1)" )
GAME_CUSTOM( 199?, m4looplt__a, m4looplt, "70000500a.bin", 0x0000, 0x080000, CRC(0668f52d) SHA1(6560309facf0022e3c14421b848f212b18be7550), "Qps","Loop The Loot (Qps) (MPU4) (set 2)" )
@ -462,16 +488,20 @@ GAME_CUSTOM( 199?, m4looplt__m, m4looplt, "70001505.bin", 0x0000, 0x080
/* Global */
// boot to "Percent Change" then "*initializing*"
GAME(199?, m4bangin, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Global","Bangin' Away (Global) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bangina, m4bangin, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Global","Bangin' Away (Global) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4banginb, m4bangin, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Global","Bangin' Away (Global) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4wwc, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Global","Wacky Weekend Club (Global) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4wwca, m4wwc, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Global","Wacky Weekend Club (Global) (MPU4) (set 2)" , GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4wwcb, m4wwc, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Global","Wacky Weekend Club (Global) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4screw, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Global","Screwin' Around (Global) (MPU4, v0.8)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4screwp, m4screw, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Global","Screwin' Around (Global) (MPU4, v0.8) (Protocol)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4screwa, m4screw, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Global","Screwin' Around (Global) (MPU4, v0.7)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4screwb, m4screw, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Global","Screwin' Around (Global) (MPU4, v0.5)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4vfm, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Global","Value For Money (Global) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4jiggin, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Global","Jiggin' In The Riggin' (Global) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4jiggina, m4jiggin, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Global","Jiggin' In The Riggin' (Global) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bangin, 0, mod4oki, mpu4, mpu4misc_machines_state, init_m4default, ROT0, "Global","Bangin' Away (Global) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4bangina, m4bangin, mod4oki, mpu4, mpu4misc_machines_state, init_m4default, ROT0, "Global","Bangin' Away (Global) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4banginb, m4bangin, mod4oki, mpu4, mpu4misc_machines_state, init_m4default, ROT0, "Global","Bangin' Away (Global) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4wwc, 0, mod4oki, mpu4, mpu4misc_machines_state, init_m4default, ROT0, "Global","Wacky Weekend Club (Global) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4wwca, m4wwc, mod4oki, mpu4, mpu4misc_machines_state, init_m4default, ROT0, "Global","Wacky Weekend Club (Global) (MPU4) (set 2)" , GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4wwcb, m4wwc, mod4oki, mpu4, mpu4misc_machines_state, init_m4default, ROT0, "Global","Wacky Weekend Club (Global) (MPU4) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4screw, 0, mod4oki, mpu4, mpu4misc_machines_state, init_m4default, ROT0, "Global","Screwin' Around (Global) (MPU4, v0.8)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4screwp, m4screw, mod4oki, mpu4, mpu4misc_machines_state, init_m4default, ROT0, "Global","Screwin' Around (Global) (MPU4, v0.8) (Protocol)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4screwa, m4screw, mod4oki, mpu4, mpu4misc_machines_state, init_m4default, ROT0, "Global","Screwin' Around (Global) (MPU4, v0.7)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4screwb, m4screw, mod4oki, mpu4, mpu4misc_machines_state, init_m4default, ROT0, "Global","Screwin' Around (Global) (MPU4, v0.5)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4vfm, 0, mod4oki, mpu4, mpu4misc_machines_state, init_m4default, ROT0, "Global","Value For Money (Global) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4jiggin, 0, mod4oki, mpu4, mpu4misc_machines_state, init_m4default, ROT0, "Global","Jiggin' In The Riggin' (Global) (MPU4) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4jiggina, m4jiggin, mod4oki, mpu4, mpu4misc_machines_state, init_m4default, ROT0, "Global","Jiggin' In The Riggin' (Global) (MPU4) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND )

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -4,6 +4,7 @@
/* the Plasma was an oversized DMD, but was rarely used, Big Chief might be the only game with it, at least it's the only dump we have? */
// http://www.youtube.com/watch?v=PAs8p48u0Jc
// code currently uses a 'screen' but it has been since decided this is not how to handle such display types in MAME.
#include "emu.h"
#include "includes/mpu4.h"
@ -11,8 +12,7 @@
#include "cpu/m68000/m68000.h"
#include "screen.h"
#include "mpu4plasma.lh"
namespace {
class mpu4plasma_state : public mpu4_state
{
@ -40,7 +40,7 @@ private:
void mpu4plasma_map(address_map &map);
};
INPUT_PORTS_EXTERN( mpu4 );
#include "mpu4plasma.lh"
void mpu4plasma_state::mpu4plasma_map(address_map &map)
{
@ -96,6 +96,12 @@ void mpu4plasma_state::mpu4plasma(machine_config &config)
screen.set_palette(m_palette);
PALETTE(config, m_palette).set_entries(0x200);
MPU4_CHARACTERISER_PAL(config, m_characteriser, 0);
m_characteriser->set_cpu_tag("maincpu");
m_characteriser->set_allow_6809_cheat(true);
m_characteriser->set_lamp_table(nullptr);
}
// plasma v0.1
@ -189,16 +195,22 @@ ROM_START( m4elite )
M4ELITE_PLASMA
ROM_END
} // anonymous namespace
#define GAME_FLAGS (MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK|MACHINE_MECHANICAL)
// 00 50 40 14 4c 80 34 44 5c 9c 9c 9c dc 9c dc 94 2c cc ec a8 ec a0 30 40 54 (m435)
GAMEL(199?, m4bigchf, 0, mpu4plasma, mpu4, mpu4plasma_state, init_m4default, ROT0, "Barcrest","Big Chief (Barcrest) (MPU4 w/ Plasma DMD) (set 1)", GAME_FLAGS|MACHINE_NO_SOUND,layout_mpu4plasma )
GAMEL(199?, m4bigchfa, m4bigchf, mpu4plasma, mpu4, mpu4plasma_state, init_m4default, ROT0, "Barcrest","Big Chief (Barcrest) (MPU4 w/ Plasma DMD) (set 2)", GAME_FLAGS|MACHINE_NO_SOUND,layout_mpu4plasma )
GAMEL(199?, m4bigchfb, m4bigchf, mpu4plasma, mpu4, mpu4plasma_state, init_m4default, ROT0, "Barcrest","Big Chief (Barcrest) (MPU4 w/ Plasma DMD) (set 3)", GAME_FLAGS|MACHINE_NO_SOUND,layout_mpu4plasma )
GAMEL(199?, m4bigchfc, m4bigchf, mpu4plasma, mpu4, mpu4plasma_state, init_m4default, ROT0, "Barcrest","Big Chief (Barcrest) (MPU4 w/ Plasma DMD) (set 4)", GAME_FLAGS|MACHINE_NO_SOUND,layout_mpu4plasma )
// 00 44 44 c4 70 04 c4 50 a4 d4 30 a0 54 20 64 40 64 e4 f4 14 80
GAMEL(199?, m4click, 0, mpu4plasma, mpu4, mpu4plasma_state, init_m4default, ROT0, "Barcrest","Clickity Click (Barcrest) (MPU4 w/ Plasma DMD)", GAME_FLAGS|MACHINE_NO_SOUND,layout_mpu4plasma )
// not confirmed to be plasma, is this an alt version of big chief? maybe it uses the same plasma roms?
// 00 24 24 2c 70 20 0c 60 3c 5c 5c 5c 7c 4c 68 40 34 38 7c 54 (m4duty sequence)
GAMEL(199?, m4apach, 0, mpu4plasma, mpu4, mpu4plasma_state, init_m4default, ROT0, "Barcrest","Apache (Barcrest) (MPU4 w/ Plasma DMD?)", GAME_FLAGS|MACHINE_NO_SOUND,layout_mpu4plasma )
// not confirmed to be plasma, but acts like it
// 00 30 20 14 2c a0 54 24 3c 9c 9c 9c bc 94 6c 80 58 bc bc 98 9c 9c (m441)
GAMEL(199?, m4elite, 0, mpu4plasma, mpu4, mpu4plasma_state, init_m4default, ROT0, "Barcrest","Elite (Barcrest) (MPU4 w/ Plasma DMD?)", GAME_FLAGS|MACHINE_NO_SOUND,layout_mpu4plasma )

View File

@ -5,7 +5,17 @@
#include "emu.h"
#include "includes/mpu4.h"
INPUT_PORTS_EXTERN( mpu4 );
namespace {
class mpu4union_machines_state : public mpu4_state
{
public:
mpu4union_machines_state(const machine_config &mconfig, device_type type, const char *tag) :
mpu4_state(mconfig, type, tag)
{
}
};
ROM_START( m4cwalk )
ROM_REGION( 0x010000, "maincpu", 0 )
@ -249,6 +259,7 @@ ROM_START( m4rckrolb )
ROM_LOAD( "rocksnd.bin", 0x0000, 0x080000, CRC(c3e96650) SHA1(71952267d3149786cfef1dd49cc070664bb007a4) )
ROM_END
} // anonymous namespace
#define GAME_FLAGS (MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK|MACHINE_MECHANICAL)
@ -256,37 +267,53 @@ ROM_END
/* Union
these don't boot, at best you get a 'CLEAR' message */
GAME(199?, m4cwalk, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Union","Cake Walk (Union) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4eezee, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Union","Eezee Fruits (Union) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frdrop, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Union","Fruit Drop (Union) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4gobana, 0, mod2 ,mpu4, mpu4_state, init_m4default, ROT0, "Union","Go Bananas (Union) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4gobanaa, m4gobana, mod2 ,mpu4, mpu4_state, init_m4default, ROT0, "Union","Go Bananas (Union) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4gobanab, m4gobana, mod2 ,mpu4, mpu4_state, init_m4default, ROT0, "Union","Go Bananas (Union) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4gobanac, m4gobana, mod2 ,mpu4, mpu4_state, init_m4default, ROT0, "Union","Go Bananas (Union) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4gobanad, m4gobana, mod2 ,mpu4, mpu4_state, init_m4default, ROT0, "Union","Go Bananas (Union) (MPU4, set 5)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4lotty, 0, mod2 ,mpu4, mpu4_state, init_m4default, ROT0, "Union","Lotty Time (Union) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4maxmze, 0, mod2 ,mpu4, mpu4_state, init_m4default, ROT0, "Union","Maximize (Union) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4maxmzea, m4maxmze, mod2 ,mpu4, mpu4_state, init_m4default, ROT0, "Union","Maximize (Union) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4maxmzeb, m4maxmze, mod2 ,mpu4, mpu4_state, init_m4default, ROT0, "Union","Maximize (Union) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4maxmzec, m4maxmze, mod2 ,mpu4, mpu4_state, init_m4default, ROT0, "Union","Maximize (Union) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4maxmzed, m4maxmze, mod2 ,mpu4, mpu4_state, init_m4default, ROT0, "Union","Maximize (Union) (MPU4, set 5)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4mecca, 0, mod2 ,mpu4, mpu4_state, init_m4default, ROT0, "Union","Mecca Money (Union) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4purmad, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Union","Pure Madness (Union)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4revolv, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Union","Revolva (Union) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4rotex, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Union","Rotex (Union) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4select, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Union","Select (Union) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4supfru, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Union","Supafruits (Union) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4supfrua,m4supfru, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Union","Supafruits (Union) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4trimad, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Union","Triple Madness (Union) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4unibox, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Union","Unibox (Union) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4uniboxa,m4unibox, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Union","Unibox (Union) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4unique, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Union","Unique (Union) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4uniquep,m4unique, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Union","Unique (Union) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4crzbn, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Union","Crazy Bingo (Union) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4cwalk, 0, mod4oki, mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union","Cake Walk (Union) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4eezee, 0, mod4oki, mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union","Eezee Fruits (Union) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4frdrop, 0, mod4oki, mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union","Fruit Drop (Union) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4gobana, 0, mod2 ,mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union","Go Bananas (Union) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4gobanaa, m4gobana, mod2 ,mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union","Go Bananas (Union) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4gobanab, m4gobana, mod2 ,mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union","Go Bananas (Union) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4gobanac, m4gobana, mod2 ,mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union","Go Bananas (Union) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4gobanad, m4gobana, mod2 ,mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union","Go Bananas (Union) (MPU4, set 5)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4lotty, 0, mod2 ,mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union","Lotty Time (Union) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4maxmze, 0, mod2 ,mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union","Maximize (Union) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4maxmzea, m4maxmze, mod2 ,mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union","Maximize (Union) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4maxmzeb, m4maxmze, mod2 ,mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union","Maximize (Union) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4maxmzec, m4maxmze, mod2 ,mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union","Maximize (Union) (MPU4, set 4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4maxmzed, m4maxmze, mod2 ,mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union","Maximize (Union) (MPU4, set 5)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4mecca, 0, mod2 ,mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union","Mecca Money (Union) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4purmad, 0, mod4oki, mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union","Pure Madness (Union)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4revolv, 0, mod4oki, mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union","Revolva (Union) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4rotex, 0, mod4oki, mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union","Rotex (Union) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4select, 0, mod4oki, mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union","Select (Union) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4supfru, 0, mod4oki, mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union","Supafruits (Union) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4supfrua,m4supfru, mod4oki, mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union","Supafruits (Union) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4trimad, 0, mod4oki, mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union","Triple Madness (Union) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4unibox, 0, mod4oki, mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union","Unibox (Union) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4uniboxa,m4unibox, mod4oki, mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union","Unibox (Union) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4unique, 0, mod4oki, mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union","Unique (Union) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4uniquep,m4unique, mod4oki, mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union","Unique (Union) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4crzbn, 0, mod4oki, mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union","Crazy Bingo (Union) (MPU4)", GAME_FLAGS|MACHINE_NO_SOUND )
/* Union + Empire
same as Union above */
GAME(199?, m4gvibes, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Union / Empire","Good Vibrations (Union - Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4gvibesa, m4gvibes, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Union / Empire","Good Vibrations (Union - Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4rckrol, 0, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Union / Empire","Rock 'n' Roll (Union - Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4rckrola, m4rckrol, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Union / Empire","Rock 'n' Roll (Union - Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4rckrolb, m4rckrol, mod4oki, mpu4, mpu4_state, init_m4default, ROT0, "Union / Empire","Rock 'n' Roll (Union - Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4gvibes, 0, mod4oki, mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union / Empire","Good Vibrations (Union - Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4gvibesa, m4gvibes, mod4oki, mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union / Empire","Good Vibrations (Union - Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4rckrol, 0, mod4oki, mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union / Empire","Rock 'n' Roll (Union - Empire) (MPU4, set 1)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4rckrola, m4rckrol, mod4oki, mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union / Empire","Rock 'n' Roll (Union - Empire) (MPU4, set 2)", GAME_FLAGS|MACHINE_NO_SOUND )
GAME(199?, m4rckrolb, m4rckrol, mod4oki, mpu4, mpu4union_machines_state, init_m4default, ROT0, "Union / Empire","Rock 'n' Roll (Union - Empire) (MPU4, set 3)", GAME_FLAGS|MACHINE_NO_SOUND )

File diff suppressed because it is too large Load Diff

View File

@ -227,17 +227,19 @@ public:
m_trackx_port(*this, "TRACKX"),
m_tracky_port(*this, "TRACKY"),
m_gfxdecode(*this, "gfxdecode"),
m_ef9369(*this, "ef9369"),
m_4krow(0),
m_4ktable(nullptr)
m_ef9369(*this, "ef9369")
{
}
void mpu4_vid(machine_config &config);
void mpu4_vid_strike(machine_config &config);
void mpu4_vid_cheatchr(machine_config &config);
void bwbvid(machine_config &config);
void crmaze_base(machine_config &config);
void crmaze(machine_config &config);
void bwbvid_oki(machine_config &config);
void bwbvid_oki_bt471(machine_config &config);
@ -246,28 +248,25 @@ public:
void mating(machine_config &config);
void vid_oki(machine_config &config);
void init_crmazea();
void init_v4barqst2();
void init_quidgrid();
void init_v4barqst();
void init_timemchn();
void init_crmaze2a();
void init_v4opt3();
void init_eyesdown();
void init_v4cmazeb();
void init_crmaze2();
void init_crmaze();
void init_crmaze_flutter();
void init_prizeinv();
void init_strikeit();
void init_v4wize();
void init_turnover();
//void init_adders();
void init_mating();
void init_crmaze3a();
void init_skiltrek();
void init_crmaze3();
void init_cybcas();
void init_v4frfact();
void init_bwbhack();
protected:
@ -303,7 +302,6 @@ private:
DECLARE_WRITE_LINE_MEMBER(vid_o2_callback);
DECLARE_WRITE_LINE_MEMBER(vid_o3_callback);
uint8_t pia_ic5_porta_track_r();
void mpu4vid_char_cheat( int address);
DECLARE_WRITE_LINE_MEMBER(update_mpu68_interrupts);
uint16_t mpu4_vid_vidram_r(offs_t offset);
void mpu4_vid_vidram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
@ -329,10 +327,8 @@ private:
void mpu4_6809_map(address_map &map);
void mpu4_6809_german_map(address_map &map);
void vidcharacteriser_4k_lookup_w(offs_t offset, uint8_t data);
uint8_t vidcharacteriser_4k_lookup_r(offs_t offset);
uint8_t m_4krow;
uint8_t *m_4ktable;
void hack_bwb_startup_protection();
uint8_t mpu4_vid_bt_a00004_r(offs_t offset);
@ -1889,9 +1885,9 @@ void mpu4vid_state::machine_reset()
m_IC23G2A = 0;
m_IC23G2B = 0;
m_prot_col = 0;
m_chr_counter = 0;
m_chr_value = 0;
//m_prot_col = 0;
//m_chr_counter = 0;
//m_chr_value = 0;
m_m6840_irq_state = 0;
m_m6850_irq_state = 0;
@ -1922,7 +1918,7 @@ void mpu4vid_state::mpu4_68k_map(address_map& map)
void mpu4vid_state::mpu4_68k_map_strike(address_map& map)
{
mpu4_68k_map_base(map);
map(0xffd000, 0xffd00f).rw(FUNC(mpu4vid_state::vidcharacteriser_4k_lookup_r), FUNC(mpu4vid_state::vidcharacteriser_4k_lookup_w)).umask16(0x00ff);
map(0xffd000, 0xffd00f).rw(FUNC(mpu4vid_state::vidcharacteriser_4k_lookup_r), FUNC(mpu4vid_state::vidcharacteriser_w)).umask16(0x00ff);
}
@ -2172,13 +2168,28 @@ void mpu4vid_state::mpu4_vid(machine_config &config)
m_acia_1->irq_handler().set(FUNC(mpu4vid_state::m68k_acia_irq));
}
void mpu4vid_state::mpu4_vid_cheatchr(machine_config &config)
{
mpu4_vid(config);
MPU4_CHARACTERISER_PAL(config, m_characteriser, 0);
m_characteriser->set_cpu_tag("video");
m_characteriser->set_allow_68k_cheat(true);
}
void mpu4vid_state::mpu4_vid_strike(machine_config& config)
{
mpu4_vid(config);
m_videocpu->set_addrmap(AS_PROGRAM, &mpu4vid_state::mpu4_68k_map_strike);
MPU4_CHARACTERISER_PAL(config, m_characteriser, 0);
m_characteriser->set_use_4k_table_sim(true);
}
void mpu4vid_state::crmaze(machine_config &config)
void mpu4vid_state::crmaze_base(machine_config &config)
{
mpu4_vid(config);
m_pia5->readpa_handler().set(FUNC(mpu4vid_state::pia_ic5_porta_track_r));
@ -2186,6 +2197,15 @@ void mpu4vid_state::crmaze(machine_config &config)
m_pia5->writepb_handler().set_nop();
}
void mpu4vid_state::crmaze(machine_config& config)
{
crmaze_base(config);
MPU4_CHARACTERISER_PAL(config, m_characteriser, 0);
m_characteriser->set_cpu_tag("video");
m_characteriser->set_allow_68k_cheat(true);
}
void mpu4vid_state::vid_oki(machine_config &config)
{
//On MPU4 Video, the sound board is clocked via the 68k E clock,
@ -2249,96 +2269,32 @@ void mpu4vid_state::bwbvid_oki_bt471_german(machine_config &config)
}
/*
Characteriser (CHR)
The question data on the quiz games gets passed through the characteriser, the tables tested at startup are just a
very specific test with known responses to make sure the device functions properly. Unless there is extra encryption
applied to just the question ROMs then the assumptions made here are wrong, because the questions don't decode.
Perhaps the address lines for the question ROMS are scrambled somehow to make things decode, but how?
It seems more likely that the Characteriser (PAL) acts as a challenge / response system, but various writes cause
'latching' behavior because if you study the sequence written at startup you can see that the same write value should
generate different responses.
Note:
the 'challenge' part of the startup check is always the same
*/
void mpu4vid_state::vidcharacteriser_w(offs_t offset, uint8_t data)
{
int x;
int call=(data&0xff);
LOG_CHR_FULL(("%04x Characteriser write offset %02X data %02X", m_videocpu->pcbase(),offset,data));
if (!m_current_chr_table)
{
logerror("No Characteriser Table @ %04x\n", m_videocpu->pcbase());
return;
}
for (x = m_prot_col; x < 64; x++)
{
if (call == 0)
{
m_prot_col = 0;
}
else
{
if (m_current_chr_table[(x)].call == call)
{
m_prot_col = x;
LOG_CHR(("Characteriser find column %02X\n",m_prot_col));
break;
}
}
}
if (m_characteriser)
m_characteriser->write(offset, data);
}
uint8_t mpu4vid_state::vidcharacteriser_r(offs_t offset)
{
LOG_CHR_FULL(("%04x Characteriser read offset %02X,data %02X", m_videocpu->pcbase(),offset,m_current_chr_table[m_prot_col].response));
LOG_CHR(("Characteriser read offset %02X \n",offset));
LOG_CHR(("Characteriser read data %02X \n",m_current_chr_table[m_prot_col].response));
if (!m_current_chr_table)
{
logerror("No Characteriser Table @ %04x\n", m_videocpu->pcbase());
return 0x00;
}
uint8_t ret = 0x00;
if (m_characteriser)
ret = m_characteriser->read(offset);
/* hack for 'invalid questions' error on time machine.. I guess it wants them to decode properly for startup check? */
if (m_videocpu->pcbase()==0x283a)
{
return 0x00;
ret = 0x00;
}
return m_current_chr_table[m_prot_col].response;
return ret;
}
void mpu4vid_state::vidcharacteriser_4k_lookup_w(offs_t offset, uint8_t data)
{
logerror("%04x write to characteriser %02x - %02x\n", m_videocpu->pcbase(), offset, data);
if (data == 0x00) // reset?
{
m_4krow = 0;
m_prot_col = 0;
}
else
{
m_prot_col = data & 0x3f; // 6-bit writes (upper 2 bits unused)
}
}
uint8_t mpu4vid_state::vidcharacteriser_4k_lookup_r(offs_t offset)
{
uint8_t ret = m_4ktable[m_4krow * 64 + m_prot_col];
m_4krow = ret;
uint8_t ret = m_characteriser->read(offset);
// hack for v4strike, otherwise it reports questions as invalid, even if they decode properly
// is this a secondary security check, or are they mismatched for the version?
// it writes '03' to the characteriser, (the question revision or coincidence?)
@ -2350,185 +2306,10 @@ uint8_t mpu4vid_state::vidcharacteriser_4k_lookup_r(offs_t offset)
ret = 0x00;
}
logerror("%04x read from characteriser %02x - %02x\n", m_videocpu->pcbase(), offset, ret);
return ret << 2; // 6-bit reads (lower 2 bits unused)
return ret;
}
/*
static mpu4_chr_table adders_data[64] = {
{0x00, 0x00}, {0x1A, 0x8C}, {0x04, 0x64}, {0x10, 0x84}, {0x18, 0x84}, {0x0F, 0xC4}, {0x13, 0x84}, {0x1B, 0x84},
{0x03, 0x9C}, {0x07, 0xF4}, {0x17, 0x04}, {0x1D, 0xCC}, {0x36, 0x24}, {0x35, 0x84}, {0x2B, 0xC4}, {0x28, 0x94},
{0x39, 0x54}, {0x21, 0x0C}, {0x22, 0x74}, {0x25, 0x0C}, {0x2C, 0x34}, {0x29, 0x04}, {0x31, 0x84}, {0x34, 0x84},
{0x0A, 0xC4}, {0x1F, 0x84}, {0x06, 0x9C}, {0x0E, 0xE4}, {0x1C, 0x84}, {0x12, 0x84}, {0x1E, 0x84}, {0x0D, 0xD4},
{0x14, 0x44}, {0x0A, 0x84}, {0x19, 0xC4}, {0x15, 0x84}, {0x06, 0x9C}, {0x0F, 0xE4}, {0x08, 0x84}, {0x1B, 0x84},
{0x1E, 0x84}, {0x04, 0x8C}, {0x01, 0x60}, {0x0C, 0x84}, {0x18, 0x84}, {0x1A, 0x84}, {0x11, 0x84}, {0x0B, 0xC4},
{0x03, 0x9C}, {0x17, 0xF4}, {0x10, 0x04}, {0x1D, 0xCC}, {0x0E, 0x24}, {0x07, 0x9C}, {0x12, 0xF4}, {0x09, 0x04},
{0x0D, 0x94}, {0x1F, 0x14}, {0x16, 0x44}, {0x05, 0x8C}, {0x13, 0x34}, {0x1C, 0x04}, {0x02, 0x9C}, {0x00, 0x00}
};
*/
static mpu4_chr_table crmaze_data[64] = {
{0x00, 0x00}, {0x1A, 0x34}, {0x04, 0x14}, {0x10, 0x0C}, {0x18, 0x54}, {0x0F, 0x04}, {0x13, 0x24}, {0x1B, 0x34},
{0x03, 0x94}, {0x07, 0x94}, {0x17, 0x0C}, {0x1D, 0x5C}, {0x36, 0x6C}, {0x35, 0x44}, {0x2B, 0x24}, {0x28, 0x24},
{0x39, 0x3C}, {0x21, 0x6C}, {0x22, 0xCC}, {0x25, 0x4C}, {0x2C, 0xC4}, {0x29, 0xA4}, {0x31, 0x24}, {0x34, 0x24},
{0x0A, 0x34}, {0x1F, 0x84}, {0x06, 0xB4}, {0x0E, 0x1C}, {0x1C, 0x64}, {0x12, 0x24}, {0x1E, 0x34}, {0x0D, 0x04},
{0x14, 0x24}, {0x0A, 0x34}, {0x19, 0x8C}, {0x15, 0xC4}, {0x06, 0xB4}, {0x0F, 0x1C}, {0x08, 0xE4}, {0x1B, 0x24},
{0x1E, 0x34}, {0x04, 0x14}, {0x01, 0x10}, {0x0C, 0x84}, {0x18, 0x24}, {0x1A, 0x34}, {0x11, 0x04}, {0x0B, 0x24},
{0x03, 0xB4}, {0x17, 0x04}, {0x10, 0x24}, {0x1D, 0x3C}, {0x0E, 0x74}, {0x07, 0x94}, {0x12, 0x0C}, {0x09, 0xC4},
{0x0D, 0xA4}, {0x1F, 0x24}, {0x16, 0x24}, {0x05, 0x34}, {0x13, 0x04}, {0x1C, 0x34}, {0x02, 0x94}, {0x00, 0x00}
};
static mpu4_chr_table crmazea_data[64] = {
{0x00, 0x00}, {0x1A, 0x0C}, {0x04, 0x90}, {0x10, 0xE0}, {0x18, 0xA4}, {0x0F, 0xAC}, {0x13, 0x78}, {0x1B, 0x5C},
{0x03, 0xDC}, {0x07, 0xD4}, {0x17, 0xA0}, {0x1D, 0xEC}, {0x36, 0x78}, {0x35, 0x54}, {0x2B, 0x48}, {0x28, 0x50},
{0x39, 0xC8}, {0x21, 0xF8}, {0x22, 0xDC}, {0x25, 0x94}, {0x2C, 0xE0}, {0x29, 0x24}, {0x31, 0x0C}, {0x34, 0xD8},
{0x0A, 0x5C}, {0x1F, 0xD4}, {0x06, 0x68}, {0x0E, 0x18}, {0x1C, 0x14}, {0x12, 0xC8}, {0x1E, 0x38}, {0x0D, 0x5C},
{0x14, 0xDC}, {0x0A, 0x5C}, {0x19, 0xDC}, {0x15, 0xD4}, {0x06, 0x68}, {0x0F, 0x18}, {0x08, 0xD4}, {0x1B, 0x60},
{0x1E, 0x0C}, {0x04, 0x90}, {0x01, 0xE8}, {0x0C, 0xF8}, {0x18, 0xD4}, {0x1A, 0x60}, {0x11, 0x44}, {0x0B, 0x4C},
{0x03, 0xD8}, {0x17, 0xD4}, {0x10, 0xE8}, {0x1D, 0xF8}, {0x0E, 0x9C}, {0x07, 0xD4}, {0x12, 0xE8}, {0x09, 0x30},
{0x0D, 0x48}, {0x1F, 0xD8}, {0x16, 0xDC}, {0x05, 0x94}, {0x13, 0xE8}, {0x1C, 0x38}, {0x02, 0xDC}, {0x00, 0x00}
};
static mpu4_chr_table crmaze2_data[64] = {
{0x00, 0x00}, {0x1A, 0x88}, {0x04, 0x54}, {0x10, 0x40}, {0x18, 0x88}, {0x0F, 0x54}, {0x13, 0x40}, {0x1B, 0x88},
{0x03, 0x74}, {0x07, 0x28}, {0x17, 0x30}, {0x1D, 0x60}, {0x36, 0x80}, {0x35, 0x84}, {0x2B, 0xC4}, {0x28, 0xA4},
{0x39, 0xC4}, {0x21, 0x8C}, {0x22, 0x74}, {0x25, 0x08}, {0x2C, 0x30}, {0x29, 0x00}, {0x31, 0x80}, {0x34, 0x84},
{0x0A, 0xC4}, {0x1F, 0x84}, {0x06, 0xAC}, {0x0E, 0x5C}, {0x1C, 0x90}, {0x12, 0x44}, {0x1E, 0x88}, {0x0D, 0x74},
{0x14, 0x00}, {0x0A, 0x80}, {0x19, 0xC4}, {0x15, 0x84}, {0x06, 0xAC}, {0x0F, 0x5C}, {0x08, 0xB0}, {0x1B, 0x24},
{0x1E, 0x88}, {0x04, 0x54}, {0x01, 0x08}, {0x0C, 0x30}, {0x18, 0x00}, {0x1A, 0x88}, {0x11, 0x34}, {0x0B, 0x08},
{0x03, 0x70}, {0x17, 0x00}, {0x10, 0x80}, {0x1D, 0xC4}, {0x0E, 0x84}, {0x07, 0xAC}, {0x12, 0x34}, {0x09, 0x00},
{0x0D, 0xA0}, {0x1F, 0x84}, {0x16, 0x84}, {0x05, 0x8C}, {0x13, 0x34}, {0x1C, 0x00}, {0x02, 0xA8}, {0x00, 0x00}
};
static mpu4_chr_table crmaze3_data[64] = {
{0x00, 0x00}, {0x1A, 0x84}, {0x04, 0x94}, {0x10, 0x3C}, {0x18, 0xEC}, {0x0F, 0x5C}, {0x13, 0xEC}, {0x1B, 0x50},
{0x03, 0x2C}, {0x07, 0x68}, {0x17, 0x60}, {0x1D, 0xAC}, {0x36, 0x74}, {0x35, 0x00}, {0x2B, 0xAC}, {0x28, 0x58},
{0x39, 0xEC}, {0x21, 0x7C}, {0x22, 0xEC}, {0x25, 0x58}, {0x2C, 0xE0}, {0x29, 0x90}, {0x31, 0x18}, {0x34, 0xEC},
{0x0A, 0x54}, {0x1F, 0x28}, {0x06, 0x68}, {0x0E, 0x44}, {0x1C, 0x84}, {0x12, 0xB4}, {0x1E, 0x10}, {0x0D, 0x20},
{0x14, 0x84}, {0x0A, 0xBC}, {0x19, 0xE8}, {0x15, 0x70}, {0x06, 0x24}, {0x0F, 0x84}, {0x08, 0xB8}, {0x1B, 0xE0},
{0x1E, 0x94}, {0x04, 0x14}, {0x01, 0x2C}, {0x0C, 0x64}, {0x18, 0x8C}, {0x1A, 0x50}, {0x11, 0x28}, {0x0B, 0x4C},
{0x03, 0x6C}, {0x17, 0x60}, {0x10, 0xA0}, {0x1D, 0xBC}, {0x0E, 0xCC}, {0x07, 0x78}, {0x12, 0xE8}, {0x09, 0x50},
{0x0D, 0x20}, {0x1F, 0xAC}, {0x16, 0x74}, {0x05, 0x04}, {0x13, 0xA4}, {0x1C, 0x94}, {0x02, 0x3C}, {0x00, 0x00}
};
static mpu4_chr_table crmaze3a_data[64] = {
{0x00, 0x00}, {0x1A, 0x0C}, {0x04, 0x60}, {0x10, 0x84}, {0x18, 0x34}, {0x0F, 0x08}, {0x13, 0xC0}, {0x1B, 0x14},
{0x03, 0xA8}, {0x07, 0xF0}, {0x17, 0x10}, {0x1D, 0xA0}, {0x36, 0x1C}, {0x35, 0xE4}, {0x2B, 0x1C}, {0x28, 0xE4},
{0x39, 0x34}, {0x21, 0xA8}, {0x22, 0xF8}, {0x25, 0x64}, {0x2C, 0x8C}, {0x29, 0xF0}, {0x31, 0x30}, {0x34, 0x08},
{0x0A, 0xE8}, {0x1F, 0xF8}, {0x06, 0xE4}, {0x0E, 0x3C}, {0x1C, 0x44}, {0x12, 0x8C}, {0x1E, 0x58}, {0x0D, 0xC4},
{0x14, 0x3C}, {0x0A, 0x6C}, {0x19, 0x68}, {0x15, 0xC0}, {0x06, 0x9C}, {0x0F, 0x64}, {0x08, 0x04}, {0x1B, 0x0C},
{0x1E, 0x48}, {0x04, 0x60}, {0x01, 0xAC}, {0x0C, 0xF8}, {0x18, 0xE4}, {0x1A, 0x14}, {0x11, 0xA8}, {0x0B, 0x78},
{0x03, 0xEC}, {0x17, 0xD0}, {0x10, 0xB0}, {0x1D, 0xB0}, {0x0E, 0x38}, {0x07, 0xE4}, {0x12, 0x9C}, {0x09, 0xE4},
{0x0D, 0xBC}, {0x1F, 0xE4}, {0x16, 0x1C}, {0x05, 0x64}, {0x13, 0x8C}, {0x1C, 0x58}, {0x02, 0xEC}, {0x00, 0x00}
};
static mpu4_chr_table mating_data[64] = {
{0x00, 0x00}, {0x1A, 0x18}, {0x04, 0xC8}, {0x10, 0xA4}, {0x18, 0x0C}, {0x0F, 0x80}, {0x13, 0x0C}, {0x1B, 0x90},
{0x03, 0x34}, {0x07, 0x30}, {0x17, 0x00}, {0x1D, 0x58}, {0x36, 0xC8}, {0x35, 0x84}, {0x2B, 0x4C}, {0x28, 0xA0},
{0x39, 0x4C}, {0x21, 0xC0}, {0x22, 0x3C}, {0x25, 0xC8}, {0x2C, 0xA4}, {0x29, 0x4C}, {0x31, 0x80}, {0x34, 0x0C},
{0x0A, 0x80}, {0x1F, 0x0C}, {0x06, 0xE0}, {0x0E, 0x1C}, {0x1C, 0x88}, {0x12, 0xA4}, {0x1E, 0x0C}, {0x0D, 0xA0},
{0x14, 0x0C}, {0x0A, 0x80}, {0x19, 0x4C}, {0x15, 0xA0}, {0x06, 0x3C}, {0x0F, 0x98}, {0x08, 0xEC}, {0x1B, 0x84},
{0x1E, 0x0C}, {0x04, 0xC0}, {0x01, 0x1C}, {0x0C, 0xA8}, {0x18, 0x84}, {0x1A, 0x0C}, {0x11, 0xA0}, {0x0B, 0x5C},
{0x03, 0xE8}, {0x17, 0xA4}, {0x10, 0x0C}, {0x1D, 0xD0}, {0x0E, 0x04}, {0x07, 0x38}, {0x12, 0xA8}, {0x09, 0xC4},
{0x0D, 0x2C}, {0x1F, 0x90}, {0x16, 0x44}, {0x05, 0x18}, {0x13, 0xE8}, {0x1C, 0x84}, {0x02, 0x3C}, {0x00, 0x00}
};
static mpu4_chr_table skiltrek_data[64] = {
{0x00, 0x00}, {0x1A, 0x1C}, {0x04, 0xCC}, {0x10, 0x64}, {0x18, 0x1C}, {0x0F, 0x4C}, {0x13, 0x64}, {0x1B, 0x1C},
{0x03, 0xEC}, {0x07, 0xE4}, {0x17, 0x0C}, {0x1D, 0xD4}, {0x36, 0x84}, {0x35, 0x0C}, {0x2B, 0x44}, {0x28, 0x2C},
{0x39, 0xD4}, {0x21, 0x14}, {0x22, 0x34}, {0x25, 0x14}, {0x2C, 0x24}, {0x29, 0x0C}, {0x31, 0x44}, {0x34, 0x0C},
{0x0A, 0x44}, {0x1F, 0x1C}, {0x06, 0xEC}, {0x0E, 0x54}, {0x1C, 0x04}, {0x12, 0x0C}, {0x1E, 0x54}, {0x0D, 0x24},
{0x14, 0x0C}, {0x0A, 0x44}, {0x19, 0x9C}, {0x15, 0xEC}, {0x06, 0xE4}, {0x0F, 0x1C}, {0x08, 0x6C}, {0x1B, 0x54},
{0x1E, 0x04}, {0x04, 0x1C}, {0x01, 0xC8}, {0x0C, 0x64}, {0x18, 0x1C}, {0x1A, 0x4C}, {0x11, 0x64}, {0x0B, 0x1C},
{0x03, 0xEC}, {0x17, 0x64}, {0x10, 0x0C}, {0x1D, 0xD4}, {0x0E, 0x04}, {0x07, 0x3C}, {0x12, 0x6C}, {0x09, 0x44},
{0x0D, 0x2C}, {0x1F, 0x54}, {0x16, 0x84}, {0x05, 0x1C}, {0x13, 0xEC}, {0x1C, 0x44}, {0x02, 0x3C}, {0x00, 0x00}
};
static mpu4_chr_table timemchn_data[64] = {
{0x00, 0x00}, {0x1A, 0x2C}, {0x04, 0x94}, {0x10, 0x14}, {0x18, 0x04}, {0x0F, 0x0C}, {0x13, 0xC4}, {0x1B, 0x0C},
{0x03, 0xD4}, {0x07, 0x64}, {0x17, 0x0C}, {0x1D, 0xB4}, {0x36, 0x04}, {0x35, 0x0C}, {0x2B, 0x84}, {0x28, 0x5C},
{0x39, 0xDC}, {0x21, 0x9C}, {0x22, 0xDC}, {0x25, 0x9C}, {0x2C, 0xDC}, {0x29, 0xCC}, {0x31, 0x84}, {0x34, 0x0C},
{0x0A, 0x84}, {0x1F, 0x0C}, {0x06, 0xD4}, {0x0E, 0x04}, {0x1C, 0x2C}, {0x12, 0xC4}, {0x1E, 0x0C}, {0x0D, 0xC4},
{0x14, 0x0C}, {0x0A, 0x84}, {0x19, 0x1C}, {0x15, 0xDC}, {0x06, 0xDC}, {0x0F, 0x8C}, {0x08, 0xD4}, {0x1B, 0x44},
{0x1E, 0x2C}, {0x04, 0x94}, {0x01, 0x20}, {0x0C, 0x0C}, {0x18, 0xA4}, {0x1A, 0x0C}, {0x11, 0xC4}, {0x0B, 0x0C},
{0x03, 0xD4}, {0x17, 0x14}, {0x10, 0x14}, {0x1D, 0x54}, {0x0E, 0x04}, {0x07, 0x6C}, {0x12, 0xC4}, {0x09, 0x4C},
{0x0D, 0xC4}, {0x1F, 0x0C}, {0x16, 0xC4}, {0x05, 0x2C}, {0x13, 0xC4}, {0x1C, 0x0C}, {0x02, 0xD4}, {0x00, 0x00}
};
/*
static mpu4_chr_table strikeit_data[64] = {
{0x00, 0x00}, {0x1A, 0xC4}, {0x04, 0xC4}, {0x10, 0x44}, {0x18, 0xC4}, {0x0F, 0x44}, {0x13, 0x44}, {0x1B, 0xC4},
{0x03, 0xCC}, {0x07, 0x3C}, {0x17, 0x5C}, {0x1D, 0x7C}, {0x36, 0x54}, {0x35, 0x24}, {0x2B, 0xC4}, {0x28, 0x4C},
{0x39, 0xB4}, {0x21, 0x84}, {0x22, 0xCC}, {0x25, 0x34}, {0x2C, 0x04}, {0x29, 0x4C}, {0x31, 0x14}, {0x34, 0x24},
{0x0A, 0xC4}, {0x1F, 0x44}, {0x06, 0xCC}, {0x0E, 0x14}, {0x1C, 0x04}, {0x12, 0x44}, {0x1E, 0xC4}, {0x0D, 0x4C},
{0x14, 0x1C}, {0x0A, 0x54}, {0x19, 0x2C}, {0x15, 0x1C}, {0x06, 0x7C}, {0x0F, 0xD4}, {0x08, 0x0C}, {0x1B, 0x94},
{0x1E, 0x04}, {0x04, 0xC4}, {0x01, 0xC0}, {0x0C, 0x4C}, {0x18, 0x94}, {0x1A, 0x04}, {0x11, 0x44}, {0x0B, 0x44},
{0x03, 0xCC}, {0x17, 0x1C}, {0x10, 0x7C}, {0x1D, 0x7C}, {0x0E, 0xD4}, {0x07, 0x8C}, {0x12, 0x1C}, {0x09, 0x5C},
{0x0D, 0x5C}, {0x1F, 0x5C}, {0x16, 0x7C}, {0x05, 0x74}, {0x13, 0x04}, {0x1C, 0xC4}, {0x02, 0xCC}, {0x00, 0x00}
};
*/
static mpu4_chr_table turnover_data[64] = {
{0x00, 0x00}, {0x1A, 0x1C}, {0x04, 0x6C}, {0x10, 0xA4}, {0x18, 0x0C}, {0x0F, 0x24}, {0x13, 0x0C}, {0x1B, 0x34},
{0x03, 0x94}, {0x07, 0x94}, {0x17, 0x44}, {0x1D, 0x5C}, {0x36, 0x6C}, {0x35, 0x24}, {0x2B, 0x1C}, {0x28, 0xAC},
{0x39, 0x64}, {0x21, 0x1C}, {0x22, 0xEC}, {0x25, 0x64}, {0x2C, 0x0C}, {0x29, 0xA4}, {0x31, 0x0C}, {0x34, 0x24},
{0x0A, 0x1C}, {0x1F, 0xAC}, {0x06, 0xE4}, {0x0E, 0x1C}, {0x1C, 0x2C}, {0x12, 0xA4}, {0x1E, 0x0C}, {0x0D, 0xA4},
{0x14, 0x0C}, {0x0A, 0x24}, {0x19, 0x5C}, {0x15, 0xEC}, {0x06, 0xE4}, {0x0F, 0x1C}, {0x08, 0xAC}, {0x1B, 0x24},
{0x1E, 0x1C}, {0x04, 0x6C}, {0x01, 0x60}, {0x0C, 0x0C}, {0x18, 0x34}, {0x1A, 0x04}, {0x11, 0x0C}, {0x0B, 0x24},
{0x03, 0x9C}, {0x17, 0xEC}, {0x10, 0xA4}, {0x1D, 0x4C}, {0x0E, 0x24}, {0x07, 0x9C}, {0x12, 0xEC}, {0x09, 0x24},
{0x0D, 0x0C}, {0x1F, 0x34}, {0x16, 0x04}, {0x05, 0x1C}, {0x13, 0xEC}, {0x1C, 0x24}, {0x02, 0x9C}, {0x00, 0x00}
};
static mpu4_chr_table eyesdown_data[64] = {
{0x00, 0x00}, {0x1A, 0x8C}, {0x04, 0x64}, {0x10, 0x0C}, {0x18, 0xC4}, {0x0F, 0x0C}, {0x13, 0x54}, {0x1B, 0x14},
{0x03, 0x94}, {0x07, 0x94}, {0x17, 0x24}, {0x1D, 0xAC}, {0x36, 0x44}, {0x35, 0x0C}, {0x2B, 0x44}, {0x28, 0x1C},
{0x39, 0x7C}, {0x21, 0x6C}, {0x22, 0x74}, {0x25, 0x84}, {0x2C, 0x3C}, {0x29, 0x4C}, {0x31, 0x44}, {0x34, 0x0C},
{0x0A, 0x44}, {0x1F, 0x8C}, {0x06, 0x74}, {0x0E, 0x84}, {0x1C, 0x0C}, {0x12, 0x54}, {0x1E, 0x04}, {0x0D, 0x1C},
{0x14, 0x7C}, {0x0A, 0xCC}, {0x19, 0x64}, {0x15, 0x0C}, {0x06, 0x74}, {0x0F, 0x84}, {0x08, 0x3C}, {0x1B, 0x5C},
{0x1E, 0x4C}, {0x04, 0x64}, {0x01, 0x88}, {0x0C, 0x74}, {0x18, 0x04}, {0x1A, 0x8C}, {0x11, 0x54}, {0x0B, 0x04},
{0x03, 0x9C}, {0x17, 0x7C}, {0x10, 0x5C}, {0x1D, 0x7C}, {0x0E, 0xCC}, {0x07, 0x74}, {0x12, 0x04}, {0x09, 0x1C},
{0x0D, 0x5C}, {0x1F, 0x5C}, {0x16, 0x7C}, {0x05, 0x6C}, {0x13, 0x54}, {0x1C, 0x04}, {0x02, 0x9C}, {0x00, 0x00}
};
static mpu4_chr_table quidgrid_data[64] = {
{0x00, 0x00}, {0x1A, 0x64}, {0x04, 0x64}, {0x10, 0x24}, {0x18, 0x64}, {0x0F, 0x64}, {0x13, 0x24}, {0x1B, 0x64},
{0x03, 0x74}, {0x07, 0x54}, {0x17, 0x84}, {0x1D, 0xA4}, {0x36, 0x24}, {0x35, 0x24}, {0x2B, 0x64}, {0x28, 0x24},
{0x39, 0xE4}, {0x21, 0x64}, {0x22, 0x74}, {0x25, 0x44}, {0x2C, 0x34}, {0x29, 0x04}, {0x31, 0x24}, {0x34, 0x24},
{0x0A, 0x64}, {0x1F, 0x64}, {0x06, 0x74}, {0x0E, 0x44}, {0x1C, 0x64}, {0x12, 0x24}, {0x1E, 0x64}, {0x0D, 0x24},
{0x14, 0x24}, {0x0A, 0x64}, {0x19, 0xE4}, {0x15, 0x24}, {0x06, 0x74}, {0x0F, 0x44}, {0x08, 0x34}, {0x1B, 0x14},
{0x1E, 0x04}, {0x04, 0x64}, {0x01, 0x60}, {0x0C, 0x24}, {0x18, 0x64}, {0x1A, 0x64}, {0x11, 0x24}, {0x0B, 0x64},
{0x03, 0x74}, {0x17, 0x04}, {0x10, 0x24}, {0x1D, 0xE4}, {0x0E, 0x64}, {0x07, 0x74}, {0x12, 0x04}, {0x09, 0x34},
{0x0D, 0x04}, {0x1F, 0x64}, {0x16, 0x24}, {0x05, 0x64}, {0x13, 0x24}, {0x1C, 0x64}, {0x02, 0x74}, {0x00, 0x00}
};
static mpu4_chr_table blank_data[72] = {
{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},
{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},
{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},
{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},
{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},
{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},
{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},
{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},
{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},{0xff, 0xff},
};
#if 0
static const bwb_chr_table prizeinv_data1[5] = {
//This is all wrong, but without BWB Vid booting,
//I can't find the right values. These should be close though
{0x67},{0x17},{0x0f},{0x24},{0x3c},
};
#endif
static mpu4_chr_table prizeinv_data[8] = {
{0xEF, 0x02},{0x81, 0x00},{0xCE, 0x00},{0x00, 0x2e},
{0x06, 0x20},{0xC6, 0x0f},{0xF8, 0x24},{0x8E, 0x3c},
};
/*
void mpu4vid_state::init_adders()
{
@ -2540,90 +2321,57 @@ void mpu4vid_state::init_adders()
void mpu4vid_state::init_crmaze()
{
m_reels = 0;//currently no hybrid games
m_current_chr_table = crmaze_data;
}
void mpu4vid_state::init_crmazea()
{
m_reels = 0;//currently no hybrid games
m_current_chr_table = crmazea_data;
}
void mpu4vid_state::init_crmaze2()
{
m_reels = 0;//currently no hybrid games
m_current_chr_table = crmaze2_data;
}
void mpu4vid_state::init_crmaze2a()
{
m_reels = 0;//currently no hybrid games
}
void mpu4vid_state::init_crmaze3()
void mpu4vid_state::init_crmaze_flutter()
{
m_reels = 0;//currently no hybrid games
m_reel_mux = FLUTTERBOX;
m_current_chr_table = crmaze3_data;
}
void mpu4vid_state::init_crmaze3a()
{
m_reels = 0;//currently no hybrid games
m_reel_mux = FLUTTERBOX;
m_current_chr_table = crmaze3a_data;
}
void mpu4vid_state::init_mating()
{
m_reels = 0;//currently no hybrid games
m_current_chr_table = mating_data;
// TODOxx: m_current_chr_table = mating_data;
}
void mpu4vid_state::init_skiltrek()
{
m_reels = 0;//currently no hybrid games
m_current_chr_table = skiltrek_data;
// TODOxx: m_current_chr_table = skiltrek_data;
}
void mpu4vid_state::init_timemchn()
{
m_reels = 0;//currently no hybrid games
m_current_chr_table = timemchn_data;
// TODOxx: m_current_chr_table = timemchn_data;
}
void mpu4vid_state::init_strikeit()
{
m_led_extender = SIMPLE_CARD;
m_reels = 0;//currently no hybrid games
m_current_chr_table = nullptr;
m_4ktable = memregion( "video_prot" )->base();
m_4krow = 0;
}
void mpu4vid_state::init_turnover()
{
m_reels = 0;//currently no hybrid games
m_current_chr_table = turnover_data;
// TODOxx: m_current_chr_table = turnover_data;
}
void mpu4vid_state::init_eyesdown()
{
m_reels = 0;//currently no hybrid games
m_current_chr_table = eyesdown_data;
// TODOxx: m_current_chr_table = eyesdown_data;
}
void mpu4vid_state::init_quidgrid()
{
m_reels = 0;//currently no hybrid games
m_current_chr_table = quidgrid_data;
// TODOxx: m_current_chr_table = quidgrid_data;
}
void mpu4vid_state::init_v4frfact()
{
mpu4vid_char_cheat(0x4f6);
}
void mpu4vid_state::hack_bwb_startup_protection()
{
@ -2662,7 +2410,7 @@ void mpu4vid_state::hack_bwb_startup_protection()
void mpu4vid_state::init_prizeinv()
{
m_reels = 0;//currently no hybrid games
m_current_chr_table = prizeinv_data;
// TODOxx: m_current_chr_table = prizeinv_data;
hack_bwb_startup_protection();
}
@ -2744,26 +2492,12 @@ void mpu4vid_state::init_bwbhack()
}
static const bwb_chr_table cybcas_data1[5] = {
//Magic num4ber 724A
// PAL Codes
// 0 1 2 3 4 5 6 7 8
// ?? ?? 20 0F 24 3C 36 27 09
{0x67},{0x17},{0x0f},{0x24},{0x3c},
};
static mpu4_chr_table cybcas_data[8] = {
{0xEF, 0x02},{0x81, 0x00},{0xCE, 0x00},{0x00, 0x2e},
{0x06, 0x20},{0xC6, 0x0f},{0xF8, 0x24},{0x8E, 0x3c},
};
void mpu4vid_state::init_cybcas()
{
//no idea what this should be, use blues boys table for now
m_bwb_chr_table1 = cybcas_data1;
m_current_chr_table = cybcas_data;
// TODOxx: m_bwb_chr_table1 = cybcas_data1;
// TODOxx: m_current_chr_table = cybcas_data;
hack_bwb_startup_protection();
@ -2775,40 +2509,22 @@ void mpu4vid_state::init_cybcas()
}
void mpu4vid_state::mpu4vid_char_cheat( int address)
{
uint8_t* cheattable = memregion( "video" )->base()+address;
m_current_chr_table = blank_data;
for (int i=0;i<72;i++)
{
m_current_chr_table[i].response = cheattable++[0];
m_current_chr_table[i].call = cheattable++[0];
}
}
void mpu4vid_state::init_v4barqst()
{
mpu4vid_char_cheat(0x154);
}
void mpu4vid_state::init_v4barqst2()
{
mpu4vid_char_cheat(0x15c);
}
void mpu4vid_state::init_v4wize()
{
mpu4vid_char_cheat(0x16c);
}
void mpu4vid_state::init_v4cmazeb()
{
mpu4vid_char_cheat(0x4c6);
}
void mpu4vid_state::init_v4opt3()
{
mpu4vid_char_cheat(0x164);
}
@ -4528,7 +4244,7 @@ ROM_START( v4addlad )
ROM_LOAD16_BYTE( "al.q9", 0x0c0000, 0x10000, CRC(22274191) SHA1(9bee5709edcd853e96408f37447c0f5324610903) )
ROM_LOAD16_BYTE( "al.qa", 0x0c0001, 0x10000, CRC(1fe98b4d) SHA1(533afeaea42903905f6f1206bba1a023b141bdd9) )
ROM_REGION( 0x1000, "video_prot", 0 )
ROM_REGION( 0x1000, "characteriser:fakechr", 0 )
// this is a state result dump of the PAL, a 64x64 table of 6-bit values, where a write sets the column index
// and the result of the previous read sets the row index, and a write of 00 resets the state machine?
ROM_LOAD( "addersandladders_video_mpu4.chr", 0x0000, 0x1000, CRC(2e191981) SHA1(09d57291f73bea6d87007256137d039f5d279235) )
@ -4554,7 +4270,7 @@ ROM_START( v4addladd )
ROM_LOAD16_BYTE( "al.q9", 0x0c0000, 0x10000, CRC(22274191) SHA1(9bee5709edcd853e96408f37447c0f5324610903) )
ROM_LOAD16_BYTE( "al.qa", 0x0c0001, 0x10000, CRC(1fe98b4d) SHA1(533afeaea42903905f6f1206bba1a023b141bdd9) )
ROM_REGION( 0x1000, "video_prot", 0 )
ROM_REGION( 0x1000, "characteriser:fakechr", 0 )
// this is a state result dump of the PAL, a 64x64 table of 6-bit values, where a write sets the column index
// and the result of the previous read sets the row index, and a write of 00 resets the state machine?
ROM_LOAD( "addersandladders_video_mpu4.chr", 0x0000, 0x1000, CRC(2e191981) SHA1(09d57291f73bea6d87007256137d039f5d279235) )
@ -4580,7 +4296,7 @@ ROM_START( v4addlad20 )
ROM_LOAD16_BYTE( "al.q9", 0x0c0000, 0x10000, CRC(22274191) SHA1(9bee5709edcd853e96408f37447c0f5324610903) )
ROM_LOAD16_BYTE( "al.qa", 0x0c0001, 0x10000, CRC(1fe98b4d) SHA1(533afeaea42903905f6f1206bba1a023b141bdd9) )
ROM_REGION( 0x1000, "video_prot", 0 )
ROM_REGION( 0x1000, "characteriser:fakechr", 0 )
// this is a state result dump of the PAL, a 64x64 table of 6-bit values, where a write sets the column index
// and the result of the previous read sets the row index, and a write of 00 resets the state machine?
ROM_LOAD( "addersandladders_video_mpu4.chr", 0x0000, 0x1000, CRC(2e191981) SHA1(09d57291f73bea6d87007256137d039f5d279235) )
@ -4610,7 +4326,7 @@ ROM_START( v4strike )
ROM_LOAD16_BYTE( "silq-7.bin", 0x180000, 0x020000, CRC(122f2327) SHA1(5c83f473cbfb7624f6eedd6d6521020b2b838da4) ) // ISSUE3 Q1 v3.1 ('T' questions) (true)
ROM_LOAD16_BYTE( "silq-6.bin", 0x1c0000, 0x020000, CRC(0ea36fd5) SHA1(e0649c77007c092fef4cb11fdd71682c88ca82e6) ) // ISSUE3 Q1 v3.1 ('F' questions) (false)
ROM_REGION( 0x1000, "video_prot", 0 )
ROM_REGION( 0x1000, "characteriser:fakechr", 0 )
// this is a state result dump of the PAL, a 64x64 table of 6-bit values, where a write sets the column index
// and the result of the previous read sets the row index, and a write of 00 resets the state machine?
ROM_LOAD( "strikeitlucky_video_mpu4.chr", 0x0000, 0x1000, CRC(ec529c9f) SHA1(9eb2b08afb2955b0a8fe736500888b63f07ace63) )
@ -4636,7 +4352,7 @@ ROM_START( v4striked )
ROM_LOAD16_BYTE( "silq-7.bin", 0x180000, 0x020000, CRC(122f2327) SHA1(5c83f473cbfb7624f6eedd6d6521020b2b838da4) ) // ISSUE3 Q1 v3.1 ('T' questions) (true)
ROM_LOAD16_BYTE( "silq-6.bin", 0x1c0000, 0x020000, CRC(0ea36fd5) SHA1(e0649c77007c092fef4cb11fdd71682c88ca82e6) ) // ISSUE3 Q1 v3.1 ('F' questions) (false)
ROM_REGION( 0x1000, "video_prot", 0 )
ROM_REGION( 0x1000, "characteriser:fakechr", 0 )
// this is a state result dump of the PAL, a 64x64 table of 6-bit values, where a write sets the column index
// and the result of the previous read sets the row index, and a write of 00 resets the state machine?
ROM_LOAD( "strikeitlucky_video_mpu4.chr", 0x0000, 0x1000, CRC(ec529c9f) SHA1(9eb2b08afb2955b0a8fe736500888b63f07ace63) )
@ -4662,7 +4378,7 @@ ROM_START( v4strike2 )
ROM_LOAD16_BYTE( "silq-7.bin", 0x180000, 0x020000, CRC(122f2327) SHA1(5c83f473cbfb7624f6eedd6d6521020b2b838da4) ) // ISSUE3 Q1 v3.1 ('T' questions) (true)
ROM_LOAD16_BYTE( "silq-6.bin", 0x1c0000, 0x020000, CRC(0ea36fd5) SHA1(e0649c77007c092fef4cb11fdd71682c88ca82e6) ) // ISSUE3 Q1 v3.1 ('F' questions) (false)
ROM_REGION( 0x1000, "video_prot", 0 )
ROM_REGION( 0x1000, "characteriser:fakechr", 0 )
// this is a state result dump of the PAL, a 64x64 table of 6-bit values, where a write sets the column index
// and the result of the previous read sets the row index, and a write of 00 resets the state machine?
ROM_LOAD( "strikeitlucky_video_mpu4.chr", 0x0000, 0x1000, CRC(ec529c9f) SHA1(9eb2b08afb2955b0a8fe736500888b63f07ace63) )
@ -4688,7 +4404,7 @@ ROM_START( v4strike2d )
ROM_LOAD16_BYTE( "silq-7.bin", 0x180000, 0x020000, CRC(122f2327) SHA1(5c83f473cbfb7624f6eedd6d6521020b2b838da4) ) // ISSUE3 Q1 v3.1 ('T' questions) (true)
ROM_LOAD16_BYTE( "silq-6.bin", 0x1c0000, 0x020000, CRC(0ea36fd5) SHA1(e0649c77007c092fef4cb11fdd71682c88ca82e6) ) // ISSUE3 Q1 v3.1 ('F' questions) (false)
ROM_REGION( 0x1000, "video_prot", 0 )
ROM_REGION( 0x1000, "characteriser:fakechr", 0 )
// this is a state result dump of the PAL, a 64x64 table of 6-bit values, where a write sets the column index
// and the result of the previous read sets the row index, and a write of 00 resets the state machine?
ROM_LOAD( "strikeitlucky_video_mpu4.chr", 0x0000, 0x1000, CRC(ec529c9f) SHA1(9eb2b08afb2955b0a8fe736500888b63f07ace63) )
@ -4791,7 +4507,7 @@ ROM_START( v4barqst )
ROM_LOAD16_BYTE( "bq-iss4.p9", 0x0a0000, 0x010000, CRC(2971f5ca) SHA1(0de9b1d743243d6e127f5417485f1a9fa76d5399) )
ROM_LOAD16_BYTE( "bq-iss4.p10", 0x0a0001, 0x010000, CRC(d54f961f) SHA1(14273cf78371550dd525843b388915df567342ce) )
ROM_REGION( 0x1000, "video_prot", 0 )
ROM_REGION( 0x1000, "characteriser:fakechr", 0 )
// this is a state result dump of the PAL, a 64x64 table of 6-bit values, where a write sets the column index
// and the result of the previous read sets the row index, and a write of 00 resets the state machine?
ROM_LOAD( "barquest.chr", 0x0000, 0x1000, CRC(bc9971fe) SHA1(902684318ad0755ee062a7f10e2c3171b5c4933f) )
@ -4815,7 +4531,7 @@ ROM_START( v4barqstd )
ROM_LOAD16_BYTE( "bq-iss4.p9", 0x0a0000, 0x010000, CRC(2971f5ca) SHA1(0de9b1d743243d6e127f5417485f1a9fa76d5399) )
ROM_LOAD16_BYTE( "bq-iss4.p10", 0x0a0001, 0x010000, CRC(d54f961f) SHA1(14273cf78371550dd525843b388915df567342ce) )
ROM_REGION( 0x1000, "video_prot", 0 )
ROM_REGION( 0x1000, "characteriser:fakechr", 0 )
// this is a state result dump of the PAL, a 64x64 table of 6-bit values, where a write sets the column index
// and the result of the previous read sets the row index, and a write of 00 resets the state machine?
ROM_LOAD( "barquest.chr", 0x0000, 0x1000, CRC(bc9971fe) SHA1(902684318ad0755ee062a7f10e2c3171b5c4933f) )
@ -8997,27 +8713,27 @@ GAME( 199?, v4bios, 0, mod2, mpu4vid, mpu4_state, init_
#define GAME_FLAGS MACHINE_NOT_WORKING
#define GAME_FLAGS_OK (MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND)
GAMEL( 1993, v4cmaze, v4bios, crmaze, crmaze, mpu4vid_state, init_crmaze, ROT0, "Barcrest","The Crystal Maze (v1.3) (MPU4 Video)",GAME_FLAGS_OK,layout_crmaze2p )//SWP 0.9
GAMEL( 1993, v4cmazedat, v4cmaze, crmaze, crmaze, mpu4vid_state, init_crmaze, ROT0, "Barcrest","The Crystal Maze (v1.3, Datapak) (MPU4 Video)",GAME_FLAGS,layout_crmaze2p )//SWP 0.9D
GAMEL( 1993, v4cmazeb, v4cmaze, crmaze, crmaze, mpu4vid_state, init_v4cmazeb, ROT0, "Barcrest","The Crystal Maze (v1.2) (MPU4 Video)",GAME_FLAGS_OK,layout_crmaze2p )//SWP 0.9
GAMEL( 1993, v4cmazec, v4cmaze, crmaze, crmaze, mpu4vid_state, init_v4cmazeb, ROT0, "Barcrest","The Crystal Maze (v1.3 alt) (MPU4 Video)",GAME_FLAGS,layout_crmaze2p )//SWP 0.9
GAMEL( 1993, v4cmazed, v4cmaze, crmaze, crmaze, mpu4vid_state, init_v4cmazeb, ROT0, "Barcrest","The Crystal Maze (v1.1) (MPU4 Video)",GAME_FLAGS_OK,layout_crmaze2p )//SWP 0.6
GAMEL( 1993, v4cmaze, v4bios, crmaze, crmaze, mpu4vid_state, init_crmaze, ROT0, "Barcrest","The Crystal Maze (v1.3) (MPU4 Video)",GAME_FLAGS_OK,layout_crmaze2p )//SWP 0.9
GAMEL( 1993, v4cmazedat, v4cmaze, crmaze, crmaze, mpu4vid_state, init_crmaze, ROT0, "Barcrest","The Crystal Maze (v1.3, Datapak) (MPU4 Video)",GAME_FLAGS,layout_crmaze2p )//SWP 0.9D
GAMEL( 1993, v4cmazeb, v4cmaze, crmaze, crmaze, mpu4vid_state, init_crmaze, ROT0, "Barcrest","The Crystal Maze (v1.2) (MPU4 Video)",GAME_FLAGS_OK,layout_crmaze2p )//SWP 0.9
GAMEL( 1993, v4cmazec, v4cmaze, crmaze, crmaze, mpu4vid_state, init_crmaze, ROT0, "Barcrest","The Crystal Maze (v1.3 alt) (MPU4 Video)",GAME_FLAGS,layout_crmaze2p )//SWP 0.9
GAMEL( 1993, v4cmazed, v4cmaze, crmaze, crmaze, mpu4vid_state, init_crmaze, ROT0, "Barcrest","The Crystal Maze (v1.1) (MPU4 Video)",GAME_FLAGS_OK,layout_crmaze2p )//SWP 0.6
GAMEL( 1993, v4cmaze_amld, v4cmaze, crmaze, crmaze, mpu4vid_state, init_crmazea, ROT0, "Barcrest","The Crystal Maze (v0.1, AMLD) (MPU4 Video)",GAME_FLAGS_OK,layout_crmaze2p )//SWP 0.9 (actually newer than the 1.1 set then??)
GAMEL( 1993, v4cmaze_amld, v4cmaze, crmaze, crmaze, mpu4vid_state, init_crmaze, ROT0, "Barcrest","The Crystal Maze (v0.1, AMLD) (MPU4 Video)",GAME_FLAGS_OK,layout_crmaze2p )//SWP 0.9 (actually newer than the 1.1 set then??)
GAMEL( 1993, v4cmaze2, v4bios, crmaze, crmaze, mpu4vid_state, init_crmaze2, ROT0, "Barcrest","The New Crystal Maze Featuring Ocean Zone (v2.2) (MPU4 Video)",GAME_FLAGS_OK,layout_crmaze4p )//SWP 1.0
GAMEL( 1993, v4cmaze2d, v4cmaze2, crmaze, crmaze, mpu4vid_state, init_crmaze2, ROT0, "Barcrest","The New Crystal Maze Featuring Ocean Zone (v2.2, Datapak) (MPU4 Video)",GAME_FLAGS,layout_crmaze4p )//SWP 1.0D
GAMEL( 1993, v4cmaze2b, v4cmaze2, crmaze, crmaze, mpu4vid_state, init_crmaze2, ROT0, "Barcrest","The New Crystal Maze Featuring Ocean Zone (v2.0) (MPU4 Video)",GAME_FLAGS_OK,layout_crmaze4p )//SWP 1.0
GAMEL( 1993, v4cmaze2c, v4cmaze2, crmaze, crmaze, mpu4vid_state, init_crmaze2, ROT0, "Barcrest","The New Crystal Maze Featuring Ocean Zone (v?.?) (MPU4 Video)",GAME_FLAGS,layout_crmaze4p )// bad rom?
GAMEL( 1993, v4cmaze2, v4bios, crmaze, crmaze, mpu4vid_state, init_crmaze, ROT0, "Barcrest","The New Crystal Maze Featuring Ocean Zone (v2.2) (MPU4 Video)",GAME_FLAGS_OK,layout_crmaze4p )//SWP 1.0
GAMEL( 1993, v4cmaze2d, v4cmaze2, crmaze, crmaze, mpu4vid_state, init_crmaze, ROT0, "Barcrest","The New Crystal Maze Featuring Ocean Zone (v2.2, Datapak) (MPU4 Video)",GAME_FLAGS,layout_crmaze4p )//SWP 1.0D
GAMEL( 1993, v4cmaze2b, v4cmaze2, crmaze, crmaze, mpu4vid_state, init_crmaze, ROT0, "Barcrest","The New Crystal Maze Featuring Ocean Zone (v2.0) (MPU4 Video)",GAME_FLAGS_OK,layout_crmaze4p )//SWP 1.0
GAMEL( 1993, v4cmaze2c, v4cmaze2, crmaze, crmaze, mpu4vid_state, init_crmaze, ROT0, "Barcrest","The New Crystal Maze Featuring Ocean Zone (v?.?) (MPU4 Video)",GAME_FLAGS,layout_crmaze4p )// bad rom?
GAMEL( 1993, v4cmaze2_amld, v4cmaze2, crmaze, crmaze, mpu4vid_state, init_crmaze2a, ROT0, "Barcrest","The New Crystal Maze Featuring Ocean Zone (v0.1, AMLD) (MPU4 Video)",GAME_FLAGS_OK,layout_crmaze4p )//SWP 1.0 /* unprotected? proto? */
GAMEL( 1993, v4cmaze2_amld, v4cmaze2, crmaze, crmaze, mpu4vid_state, init_crmaze, ROT0, "Barcrest","The New Crystal Maze Featuring Ocean Zone (v0.1, AMLD) (MPU4 Video)",GAME_FLAGS_OK,layout_crmaze4p )//SWP 1.0 /* unprotected? proto? */
GAMEL( 1994, v4cmaze3, v4bios, crmaze, crmaze, mpu4vid_state, init_crmaze3, ROT0, "Barcrest","The Crystal Maze Team Challenge (v0.9) (MPU4 Video)",GAME_FLAGS_OK,layout_crmaze4p )//SWP 0.7
GAMEL( 1994, v4cmaze3d, v4cmaze3, crmaze, crmaze, mpu4vid_state, init_crmaze3, ROT0, "Barcrest","The Crystal Maze Team Challenge (v0.9, Datapak) (MPU4 Video)",GAME_FLAGS,layout_crmaze4p )//SWP 0.7D
GAMEL( 1994, v4cmaze3b, v4cmaze3, crmaze, crmaze, mpu4vid_state, init_v4cmazeb, ROT0, "Barcrest","The Crystal Maze Team Challenge (v0.8) (MPU4 Video)",GAME_FLAGS_OK,layout_crmaze4p )//SWP 0.7
GAMEL( 1994, v4cmaze3c, v4cmaze3, crmaze, crmaze, mpu4vid_state, init_v4cmazeb, ROT0, "Barcrest","The Crystal Maze Team Challenge (v0.6) (MPU4 Video)",GAME_FLAGS,layout_crmaze4p )// missing one program rom
GAMEL( 1994, v4cmaze3, v4bios, crmaze, crmaze, mpu4vid_state, init_crmaze_flutter, ROT0, "Barcrest","The Crystal Maze Team Challenge (v0.9) (MPU4 Video)",GAME_FLAGS_OK,layout_crmaze4p )//SWP 0.7
GAMEL( 1994, v4cmaze3d, v4cmaze3, crmaze, crmaze, mpu4vid_state, init_crmaze_flutter, ROT0, "Barcrest","The Crystal Maze Team Challenge (v0.9, Datapak) (MPU4 Video)",GAME_FLAGS,layout_crmaze4p )//SWP 0.7D
GAMEL( 1994, v4cmaze3b, v4cmaze3, crmaze, crmaze, mpu4vid_state, init_crmaze_flutter, ROT0, "Barcrest","The Crystal Maze Team Challenge (v0.8) (MPU4 Video)",GAME_FLAGS_OK,layout_crmaze4p )//SWP 0.7
GAMEL( 1994, v4cmaze3c, v4cmaze3, crmaze, crmaze, mpu4vid_state, init_crmaze_flutter, ROT0, "Barcrest","The Crystal Maze Team Challenge (v0.6) (MPU4 Video)",GAME_FLAGS,layout_crmaze4p )// missing one program rom
GAMEL( 1994, v4cmaze3_amld, v4cmaze3, crmaze, crmaze, mpu4vid_state, init_crmaze3a, ROT0, "Barcrest","The Crystal Maze Team Challenge (v1.2, AMLD) (MPU4 Video)",GAME_FLAGS_OK,layout_crmaze4p )//SWP 0.7
GAMEL( 1994, v4cmaze3_amld, v4cmaze3, crmaze, crmaze, mpu4vid_state, init_crmaze_flutter, ROT0, "Barcrest","The Crystal Maze Team Challenge (v1.2, AMLD) (MPU4 Video)",GAME_FLAGS_OK,layout_crmaze4p )//SWP 0.7
//Year is a guess, based on the use of the 'Coin Man' logo
GAME( 1996?,v4mate, v4bios, mating, mating, mpu4vid_state, init_mating, ROT0, "Barcrest","The Mating Game (v0.4) (MPU4 Video)",GAME_FLAGS_OK )//SWP 0.2
@ -9025,62 +8741,77 @@ GAME( 1996?,v4mated, v4mate, mating, mating, mpu4vid_state, init_mat
/* Quiz games - Questions decoded */
// the v4addlad / v4addladd sets don't do the usual protection check, but still have the device for scrambling questions
// same sequence as bankrollerclub
// 00 8c 64 84 84 c4 84 84 9c f4 04 cc 24 84 c4 94 54 0c 74 0c 34 04 84 84 c4 84 9c e4 84 84 84 d4 44 84 c4 84 9c e4 84 84 84 8c 60 84 84 84 84 c4 9c f4 04 cc 24 9c f4 04 94 14 44 8c 34 04 9c 00
GAMEL( 1989, v4addlad, v4bios, mpu4_vid_strike, adders, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Adders and Ladders (v2.1) (MPU4 Video)",GAME_FLAGS_OK,layout_v4addlad )
GAMEL( 1989, v4addladd, v4addlad, mpu4_vid_strike, adders, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Adders and Ladders (v2.1d) (MPU4 Video)",GAME_FLAGS_OK,layout_v4addlad )
GAMEL( 1989, v4addlad20, v4addlad, mpu4_vid_strike, adders, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Adders and Ladders (v2.0) (MPU4 Video)",GAME_FLAGS_OK,layout_v4addlad )
// 00 c4 c4 44 c4 44 44 c4 cc 3c 5c 7c 54 24 c4 4c b4 84 cc 34 04 4c 14 24 c4 44 cc 14 04 44 c4 4c 1c 54 2c 1c 7c d4 0c 94 04 c4 c0 4c 94 04 44 44 cc 1c 7c 7c d4 8c 1c 5c 5c 5c 7c 74 04 c4 cc 00
GAMEL( 199?, v4strike, v4bios, mpu4_vid_strike, strike, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Strike it Lucky (v0.5) (MPU4 Video)",GAME_FLAGS_OK,layout_v4strike )
GAMEL( 199?, v4striked, v4strike, mpu4_vid_strike, strike, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Strike it Lucky (v0.5, Datapak) (MPU4 Video)",GAME_FLAGS_OK,layout_v4strike )
GAMEL( 199?, v4strike2, v4strike, mpu4_vid_strike, strike, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Strike it Lucky (v0.53) (MPU4 Video)",GAME_FLAGS_OK,layout_v4strike ) // The '3' is likely a machine type, not a 'version', 68k Pair ROM doesn't change
GAMEL( 199?, v4strike2d, v4strike, mpu4_vid_strike, strike, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Strike it Lucky (v0.53, Datapak) (MPU4 Video)",GAME_FLAGS_OK,layout_v4strike )
// 00 34 14 0c 54 04 24 34 94 94 0c 5c 6c 44 24 24 3c 6c cc 4c c4 a4 24 24 34 84 b4 1c 64 24 34 04 24 34 8c c4 b4 1c e4 24 34 14 10 84 24 34 04 24 b4 04 24 3c 74 94 0c c4 a4 24 24 34 04 34 94 00
GAMEL( 199?, v4barqst, v4bios, mpu4_vid_strike, barquest, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Barquest (v2.6) (MPU4 Video)",GAME_FLAGS_OK,layout_v4barqst )
GAMEL( 199?, v4barqstd, v4barqst, mpu4_vid_strike, barquest, mpu4vid_state, init_strikeit, ROT0, "Barcrest","Barquest (v2.6d) (MPU4 Video)",GAME_FLAGS_OK,layout_v4barqst )
/* Quiz games - Questions not decoded properly on games below (no complete characteriser table) */
GAME( 199?, v4turnov, v4bios, mpu4_vid, turnover, mpu4vid_state, init_turnover, ROT0, "Barcrest","Turnover (v2.3) (MPU4 Video)",GAME_FLAGS )
GAME( 199?, v4turnova, v4turnov, mpu4_vid, turnover, mpu4vid_state, init_turnover, ROT0, "Barcrest","Turnover (v2.33) (MPU4 Video)",GAME_FLAGS ) // the 2nd 3 is likely be a machine type, because much like Strike It Lucky and Wize Move the pairing 68k ROM doesn't change
GAME( 199?, v4turnovc, v4turnov, mpu4_vid, turnover, mpu4vid_state, init_turnover, ROT0, "Barcrest","Turnover (v2.3O) (MPU4 Video)",GAME_FLAGS )
GAME( 199?, v4turnovd, v4turnov, mpu4_vid, turnover, mpu4vid_state, init_turnover, ROT0, "Barcrest","Turnover (v?.?) (MPU4 Video)",GAME_FLAGS ) // only have a single program ROM
// 00 1c 6c a4 0c 24 0c 34 94 94 44 5c 6c 24 1c ac 64 1c ec 64 0c a4 0c 24 1c ac e4 1c 2c a4 0c a4 0c 24 5c ec e4 1c ac 24 1c 6c 60 0c 34 04 0c 24 9c ec a4 4c 24 9c ec 24 0c 34 04 1c ec 24 9c 00
GAME( 199?, v4turnov, v4bios, mpu4_vid_cheatchr, turnover, mpu4vid_state, init_turnover, ROT0, "Barcrest","Turnover (v2.3) (MPU4 Video)",GAME_FLAGS )
GAME( 199?, v4turnova, v4turnov, mpu4_vid_cheatchr, turnover, mpu4vid_state, init_turnover, ROT0, "Barcrest","Turnover (v2.33) (MPU4 Video)",GAME_FLAGS ) // the 2nd 3 is likely be a machine type, because much like Strike It Lucky and Wize Move the pairing 68k ROM doesn't change
GAME( 199?, v4turnovc, v4turnov, mpu4_vid_cheatchr, turnover, mpu4vid_state, init_turnover, ROT0, "Barcrest","Turnover (v2.3O) (MPU4 Video)",GAME_FLAGS )
GAME( 199?, v4turnovd, v4turnov, mpu4_vid_cheatchr, turnover, mpu4vid_state, init_turnover, ROT0, "Barcrest","Turnover (v?.?) (MPU4 Video)",GAME_FLAGS ) // only have a single program ROM
GAME( 1990, v4skltrk, v4bios, mpu4_vid, skiltrek, mpu4vid_state, init_skiltrek, ROT0, "Barcrest","Skill Trek (v1.1) (MPU4 Video, set 1)",GAME_FLAGS ) // 10 pound max
GAME( 1990, v4skltrka, v4skltrk, mpu4_vid, skiltrek, mpu4vid_state, init_skiltrek, ROT0, "Barcrest","Skill Trek (v1.1) (MPU4 Video, set 2)",GAME_FLAGS ) // 12 pound max
// 00 1c cc 64 1c 4c 64 1c ec e4 0c d4 84 0c 44 2c d4 14 34 14 24 0c 44 0c 44 1c ec 54 04 0c 54 24 0c 44 9c ec e4 1c 6c 54 04 1c c8 64 1c 4c 64 1c ec 64 0c d4 04 3c 6c 44 2c 54 84 1c ec 44 3c 00
GAME( 1990, v4skltrk, v4bios, mpu4_vid_cheatchr, skiltrek, mpu4vid_state, init_skiltrek, ROT0, "Barcrest","Skill Trek (v1.1) (MPU4 Video, set 1)",GAME_FLAGS ) // 10 pound max
GAME( 1990, v4skltrka, v4skltrk, mpu4_vid_cheatchr, skiltrek, mpu4vid_state, init_skiltrek, ROT0, "Barcrest","Skill Trek (v1.1) (MPU4 Video, set 2)",GAME_FLAGS ) // 12 pound max
GAME( 1989, v4tmach, v4bios, mpu4_vid, skiltrek, mpu4vid_state, init_timemchn, ROT0, "Barcrest","Time Machine (v2.0) (Issue 3 Questions) (MPU4 Video)",GAME_FLAGS )
GAME( 1989, v4tmachd, v4tmach, mpu4_vid, skiltrek, mpu4vid_state, init_timemchn, ROT0, "Barcrest","Time Machine (v2.0) (Issue 3 Questions) (Datapak) (MPU4 Video)",GAME_FLAGS )
GAME( 1989, v4tmach1, v4tmach, mpu4_vid, skiltrek, mpu4vid_state, init_timemchn, ROT0, "Barcrest","Time Machine (v2.0) (Issue 1 Questions) (MPU4 Video)",GAME_FLAGS )
GAME( 1989, v4tmach1d, v4tmach, mpu4_vid, skiltrek, mpu4vid_state, init_timemchn, ROT0, "Barcrest","Time Machine (v2.0) (Issue 1 Questions) (Datapak) (MPU4 Video)",GAME_FLAGS )
GAME( 1989, v4tmach2, v4tmach, mpu4_vid, skiltrek, mpu4vid_state, init_timemchn, ROT0, "Barcrest","Time Machine (v2.0) (Issue 2 Questions) (MPU4 Video)",GAME_FLAGS )
GAME( 1989, v4tmach2d, v4tmach, mpu4_vid, skiltrek, mpu4vid_state, init_timemchn, ROT0, "Barcrest","Time Machine (v2.0) (Issue 2 Questions) (Datapak) (MPU4 Video)",GAME_FLAGS )
// 00 2c 94 14 04 0c c4 0c d4 64 0c b4 04 0c 84 5c dc 9c dc 9c dc cc 84 0c 84 0c d4 04 2c c4 0c c4 0c 84 1c dc dc 8c d4 44 2c 94 20 0c a4 0c c4 0c d4 14 14 54 04 6c c4 4c c4 0c c4 2c c4 0c d4 00
GAME( 1989, v4tmach, v4bios, mpu4_vid_cheatchr, skiltrek, mpu4vid_state, init_timemchn, ROT0, "Barcrest","Time Machine (v2.0) (Issue 3 Questions) (MPU4 Video)",GAME_FLAGS )
GAME( 1989, v4tmachd, v4tmach, mpu4_vid_cheatchr, skiltrek, mpu4vid_state, init_timemchn, ROT0, "Barcrest","Time Machine (v2.0) (Issue 3 Questions) (Datapak) (MPU4 Video)",GAME_FLAGS )
GAME( 1989, v4tmach1, v4tmach, mpu4_vid_cheatchr, skiltrek, mpu4vid_state, init_timemchn, ROT0, "Barcrest","Time Machine (v2.0) (Issue 1 Questions) (MPU4 Video)",GAME_FLAGS )
GAME( 1989, v4tmach1d, v4tmach, mpu4_vid_cheatchr, skiltrek, mpu4vid_state, init_timemchn, ROT0, "Barcrest","Time Machine (v2.0) (Issue 1 Questions) (Datapak) (MPU4 Video)",GAME_FLAGS )
GAME( 1989, v4tmach2, v4tmach, mpu4_vid_cheatchr, skiltrek, mpu4vid_state, init_timemchn, ROT0, "Barcrest","Time Machine (v2.0) (Issue 2 Questions) (MPU4 Video)",GAME_FLAGS )
GAME( 1989, v4tmach2d, v4tmach, mpu4_vid_cheatchr, skiltrek, mpu4vid_state, init_timemchn, ROT0, "Barcrest","Time Machine (v2.0) (Issue 2 Questions) (Datapak) (MPU4 Video)",GAME_FLAGS )
/* Quiz games - Games below are missing question ROMs */
GAME( 1990, v4sklcsh, v4bios, mpu4_vid, skiltrek, mpu4vid_state, init_v4barqst, ROT0, "Barcrest","Skill Cash (v1.1) (MPU4 Video)",GAME_FLAGS )
// winner takes all sequence?
// 00 64 64 24 64 64 24 64 6c 9c bc bc a4 24 64 24 74 44 6c 94 1c ac 84 24 64 64 6c c4 24 24 64 24 24 64 74 04 6c c4 2c c4 24 64 60 24 64 64 24 64 6c 8c 8c 94 14 4c 8c 9c bc ac 8c 94 14 04 6c 00
GAME( 1990, v4sklcsh, v4bios, mpu4_vid_cheatchr, skiltrek, mpu4vid_state, init_v4barqst, ROT0, "Barcrest","Skill Cash (v1.1) (MPU4 Video)",GAME_FLAGS )
GAME( 199?, v4eyedwn, v4bios, mpu4_vid, mpu4vid, mpu4vid_state, init_eyesdown, ROT0, "Barcrest","Eyes Down (v1.3) (MPU4 Video)",GAME_FLAGS )
GAME( 199?, v4eyedwnd, v4eyedwn, mpu4_vid, mpu4vid, mpu4vid_state, init_eyesdown, ROT0, "Barcrest","Eyes Down (v1.3, Datapak) (MPU4 Video)",GAME_FLAGS )
// 00 8c 64 0c c4 0c 54 14 94 94 24 ac 44 0c 44 1c 7c 6c 74 84 3c 4c 44 0c 44 8c 74 84 0c 54 04 1c 7c cc 64 0c 74 84 3c 5c 4c 64 88 74 04 8c 54 04 9c 7c 5c 7c cc 74 04 1c 5c 5c 7c 6c 54 04 9c 00
GAME( 199?, v4eyedwn, v4bios, mpu4_vid_cheatchr, mpu4vid, mpu4vid_state, init_eyesdown, ROT0, "Barcrest","Eyes Down (v1.3) (MPU4 Video)",GAME_FLAGS )
GAME( 199?, v4eyedwnd, v4eyedwn, mpu4_vid_cheatchr, mpu4vid, mpu4vid_state, init_eyesdown, ROT0, "Barcrest","Eyes Down (v1.3, Datapak) (MPU4 Video)",GAME_FLAGS )
GAME( 199?, v4quidgr, v4bios, mpu4_vid, mpu4vid, mpu4vid_state, init_quidgrid, ROT0, "Barcrest","Ten Quid Grid (v1.2) (MPU4 Video)",GAME_FLAGS )
GAME( 199?, v4quidgrd, v4quidgr, mpu4_vid, mpu4vid, mpu4vid_state, init_quidgrid, ROT0, "Barcrest","Ten Quid Grid (v1.2, Datapak) (MPU4 Video)",GAME_FLAGS )
GAME( 199?, v4quidgr2, v4quidgr, mpu4_vid, mpu4vid, mpu4vid_state, init_quidgrid, ROT0, "Barcrest","Ten Quid Grid (v2.4) (MPU4 Video)",GAME_FLAGS )
GAME( 199?, v4quidgr2d, v4quidgr, mpu4_vid, mpu4vid, mpu4vid_state, init_quidgrid, ROT0, "Barcrest","Ten Quid Grid (v2.4, Datapak) (MPU4 Video)",GAME_FLAGS )
// similar to the 'Winner Takes All' sequence but not the same
// 00 64 64 24 64 64 24 64 74 54 84 a4 24 24 64 24 e4 64 74 44 34 04 24 24 64 64 74 44 64 24 64 24 24 64 e4 24 74 44 34 14 04 64 60 24 64 64 24 64 74 04 24 e4 64 74 04 34 04 64 24 64 24 64 74 00
GAME( 199?, v4quidgr, v4bios, mpu4_vid_cheatchr, mpu4vid, mpu4vid_state, init_quidgrid, ROT0, "Barcrest","Ten Quid Grid (v1.2) (MPU4 Video)",GAME_FLAGS )
GAME( 199?, v4quidgrd, v4quidgr, mpu4_vid_cheatchr, mpu4vid, mpu4vid_state, init_quidgrid, ROT0, "Barcrest","Ten Quid Grid (v1.2, Datapak) (MPU4 Video)",GAME_FLAGS )
GAME( 199?, v4quidgr2, v4quidgr, mpu4_vid_cheatchr, mpu4vid, mpu4vid_state, init_quidgrid, ROT0, "Barcrest","Ten Quid Grid (v2.4) (MPU4 Video)",GAME_FLAGS )
GAME( 199?, v4quidgr2d, v4quidgr, mpu4_vid_cheatchr, mpu4vid, mpu4vid_state, init_quidgrid, ROT0, "Barcrest","Ten Quid Grid (v2.4, Datapak) (MPU4 Video)",GAME_FLAGS )
GAMEL( 199?, v4barqs2, v4bios, mpu4_vid, barquest, mpu4vid_state, init_v4barqst2, ROT0, "Barcrest","Barquest 2 (v0.3) (MPU4 Video)",GAME_FLAGS,layout_v4barqst )
// 00 34 14 0c 54 04 24 34 94 94 0c 5c 6c 44 24 24 3c 6c cc 4c c4 a4 24 24 34 84 b4 1c 64 24 34 04 24 34 8c c4 b4 1c e4 24 34 14 10 84 24 34 04 24 b4 04 24 3c 74 94 0c c4 a4 24 24 34 04 34 94 00
GAMEL( 199?, v4barqs2, v4bios, mpu4_vid_cheatchr, barquest, mpu4vid_state, init_v4barqst2, ROT0, "Barcrest","Barquest 2 (v0.3) (MPU4 Video)",GAME_FLAGS,layout_v4barqst )
// 00 34 14 84 24 34 04 34 54 54 84 a4 24 24 34 04 b4 14 54 14 44 64 24 24 34 44 74 14 04 24 34 04 24 34 c4 24 74 14 44 34 04 34 10 44 34 04 24 34 54 84 24 b4 94 54 84 e4 24 34 04 34 04 34 54 00
// again the 2nd '3' seems to indicate a machine type, not a version
GAME( 199?, v4wize, v4bios, mpu4_vid, mpu4vid, mpu4vid_state, init_v4wize, ROT0, "Barcrest","Wize Move (v1.3) (MPU4 Video)",GAME_FLAGS )
GAME( 199?, v4wized, v4wize, mpu4_vid, mpu4vid, mpu4vid_state, init_v4wize, ROT0, "Barcrest","Wize Move (v1.3d) (Datapak) (MPU4 Video)",GAME_FLAGS )
GAME( 199?, v4wizeb, v4wize, mpu4_vid, mpu4vid, mpu4vid_state, init_v4wize, ROT0, "Barcrest","Wize Move (v1.33) (MPU4 Video)",GAME_FLAGS )
GAME( 199?, v4wizec, v4wize, mpu4_vid, mpu4vid, mpu4vid_state, init_v4wize, ROT0, "Barcrest","Wize Move (v1.3d3) (Datapak) (MPU4 Video)",GAME_FLAGS )
GAME( 199?, v4wize, v4bios, mpu4_vid_cheatchr, mpu4vid, mpu4vid_state, init_v4wize, ROT0, "Barcrest","Wize Move (v1.3) (MPU4 Video)",GAME_FLAGS )
GAME( 199?, v4wized, v4wize, mpu4_vid_cheatchr, mpu4vid, mpu4vid_state, init_v4wize, ROT0, "Barcrest","Wize Move (v1.3d) (Datapak) (MPU4 Video)",GAME_FLAGS )
GAME( 199?, v4wizeb, v4wize, mpu4_vid_cheatchr, mpu4vid, mpu4vid_state, init_v4wize, ROT0, "Barcrest","Wize Move (v1.33) (MPU4 Video)",GAME_FLAGS )
GAME( 199?, v4wizec, v4wize, mpu4_vid_cheatchr, mpu4vid, mpu4vid_state, init_v4wize, ROT0, "Barcrest","Wize Move (v1.3d3) (Datapak) (MPU4 Video)",GAME_FLAGS )
// older code, 1x 68k ROM is missing in addition to questions being missing
GAME( 199?, v4wizeo, v4wize, mpu4_vid, mpu4vid, mpu4vid_state, init_v4wize, ROT0, "Barcrest","Wize Move (v1.2) (MPU4 Video)",GAME_FLAGS )
GAME( 199?, v4wizeo, v4wize, mpu4_vid_cheatchr, mpu4vid, mpu4vid_state, init_v4wize, ROT0, "Barcrest","Wize Move (v1.2) (MPU4 Video)",GAME_FLAGS )
// newer? code, only 1x 68k ROM is dumped (and it appears to be slightly corrupt)
GAME( 199?, v4wizen, v4wize, mpu4_vid, mpu4vid, mpu4vid_state, init_v4wize, ROT0, "Barcrest","Wize Move (v?.?) (MPU4 Video)",GAME_FLAGS )
GAME( 199?, v4wizen, v4wize, mpu4_vid_cheatchr, mpu4vid, mpu4vid_state, init_v4wize, ROT0, "Barcrest","Wize Move (v?.?) (MPU4 Video)",GAME_FLAGS )
GAME( 1991, v4opt3, v4bios, mpu4_vid, mpu4vid, mpu4vid_state, init_v4opt3, ROT0, "Barcrest","Option 3 (v1.0) (MPU4 Video)",GAME_FLAGS )
GAME( 1991, v4opt3d, v4opt3, mpu4_vid, mpu4vid, mpu4vid_state, init_v4opt3, ROT0, "Barcrest","Option 3 (v1.0) (Datapak) (MPU4 Video)",GAME_FLAGS )
// 00 34 14 0c 54 04 24 34 94 94 0c 5c 6c 44 24 24 3c 6c cc 4c c4 a4 24 24 34 84 b4 1c 64 24 34 04 24 34 8c c4 b4 1c e4 24 34 14 10 84 24 34 04 24 b4 04 24 3c 74 94 0c c4 a4 24 24 34 04 34 94 00
GAME( 1991, v4opt3, v4bios, mpu4_vid_cheatchr, mpu4vid, mpu4vid_state, init_v4opt3, ROT0, "Barcrest","Option 3 (v1.0) (MPU4 Video)",GAME_FLAGS )
GAME( 1991, v4opt3d, v4opt3, mpu4_vid_cheatchr, mpu4vid, mpu4vid_state, init_v4opt3, ROT0, "Barcrest","Option 3 (v1.0) (Datapak) (MPU4 Video)",GAME_FLAGS )
/* ---------------------------------------------------------------- */
/* Games below are newer BWB games and use their own game and revision specific MPU4 base ROMs (which must be correctly paired with video ROMs of the same revision) and sometimes differing hardware setups */
@ -9499,13 +9230,14 @@ GAME( 199?, v4rencasi, v4rencas, bwbvid, mpu4, mpu4vid_state, init_bwb
/* Uncertain BIOS */
// has a Barcrest style Characteriser check, not a BWB one?
GAME( 199?, v4frfact, v4bios, crmaze, bwbvid, mpu4vid_state, init_v4frfact, ROT0, "BWB","Fruit Factory (BWB) (set 1) (MPU4 Video)", GAME_FLAGS )
GAME( 199?, v4frfacta, v4frfact, crmaze, bwbvid, mpu4vid_state, init_v4frfact, ROT0, "BWB","Fruit Factory (BWB) (set 2) (MPU4 Video)", GAME_FLAGS )
GAME( 199?, v4frfactb, v4frfact, crmaze, bwbvid, mpu4vid_state, init_v4frfact, ROT0, "BWB","Fruit Factory (BWB) (set 3) (MPU4 Video)", GAME_FLAGS )
GAME( 199?, v4frfactc, v4frfact, crmaze, bwbvid, mpu4vid_state, init_v4frfact, ROT0, "BWB","Fruit Factory (BWB) (set 4) (MPU4 Video)", GAME_FLAGS )
GAME( 199?, v4frfactd, v4frfact, crmaze, bwbvid, mpu4vid_state, init_v4frfact, ROT0, "BWB","Fruit Factory (BWB) (set 5) (MPU4 Video)", GAME_FLAGS )
GAME( 199?, v4frfacte, v4frfact, crmaze, bwbvid, mpu4vid_state, init_v4frfact, ROT0, "BWB","Fruit Factory (BWB) (set 6) (MPU4 Video)", GAME_FLAGS )
GAME( 199?, v4frfactf, v4frfact, crmaze, bwbvid, mpu4vid_state, init_v4frfact, ROT0, "BWB","Fruit Factory (BWB) (set 7) (MPU4 Video)", GAME_FLAGS )
// 00 44 44 54 58 24 54 50 58 3c 34 18 7c 34 48 30 58 7c 7c 2c 70 00 04 4c 70 18 3c 64 44 54 00 14 48 70 58 3c 3c 64 04 44 44 44 5c 34 58 74 58 74 58 3c 7c 3c 64 54 58 34 50 18 7c 2c 70 00 5c 00
GAME( 199?, v4frfact, v4bios, crmaze, bwbvid, mpu4vid_state, empty_init, ROT0, "BWB","Fruit Factory (BWB) (set 1) (MPU4 Video)", GAME_FLAGS )
GAME( 199?, v4frfacta, v4frfact, crmaze, bwbvid, mpu4vid_state, empty_init, ROT0, "BWB","Fruit Factory (BWB) (set 2) (MPU4 Video)", GAME_FLAGS )
GAME( 199?, v4frfactb, v4frfact, crmaze, bwbvid, mpu4vid_state, empty_init, ROT0, "BWB","Fruit Factory (BWB) (set 3) (MPU4 Video)", GAME_FLAGS )
GAME( 199?, v4frfactc, v4frfact, crmaze, bwbvid, mpu4vid_state, empty_init, ROT0, "BWB","Fruit Factory (BWB) (set 4) (MPU4 Video)", GAME_FLAGS )
GAME( 199?, v4frfactd, v4frfact, crmaze, bwbvid, mpu4vid_state, empty_init, ROT0, "BWB","Fruit Factory (BWB) (set 5) (MPU4 Video)", GAME_FLAGS )
GAME( 199?, v4frfacte, v4frfact, crmaze, bwbvid, mpu4vid_state, empty_init, ROT0, "BWB","Fruit Factory (BWB) (set 6) (MPU4 Video)", GAME_FLAGS )
GAME( 199?, v4frfactf, v4frfact, crmaze, bwbvid, mpu4vid_state, empty_init, ROT0, "BWB","Fruit Factory (BWB) (set 7) (MPU4 Video)", GAME_FLAGS )
/* Nova - is this the same video board? One of the games displays 'Resetting' but the others do nothing interesting and access strange addresses */
/* All contain BWB video in the BIOS rom tho, Cyber Casino also needs a Jackpot link? */

View File

@ -3,6 +3,7 @@
#include "machine/6821pia.h"
#include "machine/6840ptm.h"
#include "machine/mc68681.h"
#include "machine/nvram.h"
#include "machine/timer.h"
@ -11,11 +12,15 @@
#include "sound/okim6376.h"
#include "sound/upd7759.h"
#include "sound/ymopl.h"
#include "machine/steppers.h"
#include "machine/roc10937.h"
#include "machine/meters.h"
#include "machine/bacta_datalogger.h"
#include "machine/meters.h"
#include "machine/mpu4_characteriser_bootleg.h"
#include "machine/mpu4_characteriser_pal.h"
#include "machine/mpu4_characteriser_pal_bwb.h"
#include "machine/roc10937.h"
#include "machine/steppers.h"
#include "emupal.h"
@ -47,14 +52,6 @@
#define LOG_SS(x) do { if (MPU4VERBOSE) logerror x; } while (0)
static const uint8_t reel_mux_table[8]= {0,4,2,6,1,5,3,7};//include 7, although I don't think it's used, this is basically a wire swap
static const uint8_t reel_mux_table7[8]= {3,1,5,6,4,2,0,7};
static const uint8_t bwb_chr_table_common[10]= {0x00,0x04,0x04,0x0c,0x0c,0x1c,0x14,0x2c,0x5c,0x2c};
//reel info
#define STANDARD_REEL 0 // As originally designed 3/4 reels
#define FIVE_REEL_5TO8 1 // Interfaces to meter port, allows some mechanical metering, but there is significant 'bounce' in the extra reel
@ -87,19 +84,19 @@ static const uint8_t bwb_chr_table_common[10]= {0x00,0x04,0x04,0x0c,0x0c,0x1c,0x
#define HOPPER_NONDUART_A 4
#define HOPPER_NONDUART_B 5
/* Lookup table for CHR data */
struct mpu4_chr_table
{
uint8_t call;
uint8_t response;
};
struct bwb_chr_table//dynamically populated table for BwB protection
{
uint8_t response = 0;
};
INPUT_PORTS_EXTERN( mpu4 );
INPUT_PORTS_EXTERN( mpu4_invcoin );
INPUT_PORTS_EXTERN( mpu4_impcoin );
INPUT_PORTS_EXTERN( mpu4_invimpcoin );
INPUT_PORTS_EXTERN( mpu4_cw );
INPUT_PORTS_EXTERN( mpu420p );
INPUT_PORTS_EXTERN( mpu4jackpot8per );
INPUT_PORTS_EXTERN( mpu4jackpot8tkn );
INPUT_PORTS_EXTERN( mpu4jackpot8tkn20p );
INPUT_PORTS_EXTERN( mpu4jackpot8tkn20p90pc );
// currently in mpu4.cpp this may get moved into the driver, or renamed to something more generic based on the setup
INPUT_PORTS_EXTERN( grtecp );
class mpu4_state : public driver_device
{
@ -128,26 +125,35 @@ public:
, m_ym2413(*this, "ym2413")
, m_ay8913(*this, "ay8913")
, m_dataport(*this, "dataport")
, m_characteriser(*this, "characteriser")
, m_characteriser_bl(*this, "characteriser_bl")
, m_characteriser_blastbank(*this, "characteriser_blastbank")
, m_characteriser_bwb(*this, "characteriser_bwb")
, m_duart68681(*this, "duart68681")
, m_lamps(*this, "lamp%u", 0U)
, m_mpu4leds(*this, "mpu4led%u", 0U)
, m_digits(*this, "digit%u", 0U)
, m_triacs(*this, "triac%u", 0U)
, m_current_chr_table(nullptr)
{ }
void init_m4default_alt();
void init_m4default();
void init_m4default_big();
void init_m4default_big_low();
void init_m4default_big_aux2inv();
void init_m4default_806prot();
void init_crystali();
void init_m4tst2();
void init_crystal();
void init_m_frkstn();
void init_m4default_big();
void init_m4default();
void init_m4default_banks();
void init_m4default_reels();
void init_m4_low_volt_alt();
void init_m4_aux1_invert();
void init_m4_aux2_invert();
void init_m4_door_invert();
void init_m4_five_reel_std();
void init_m4_five_reel_rev();
void init_m4_five_reel_alt();
@ -155,7 +161,6 @@ public:
void init_m4_six_reel_alt();
void init_m4_seven_reel();
void init_m4_small_extender();
void init_m4_large_extender_a();
void init_m4_large_extender_b();
void init_m4_large_extender_c();
void init_m4_hopper_tubes();
@ -168,76 +173,208 @@ public:
void init_m4_led_b();
void init_m4_led_c();
void init_m4_led_simple();
void init_m4_andycp10c();
void init_m_blsbys();
void init_m_oldtmr();
void init_m4tst();
void init_m_ccelbr();
void init_m4gambal();
void init_m4debug();
void init_m4_showstring();
void init_m4_showstring_mod4yam();
void init_m4_debug_mod4yam();
void init_m4_showstring_mod2();
void init_m4_showstring_big();
void init_connect4();
void init_big_extenda();
void init_m4altreels();//legacy, will be removed once things are sorted out
void init_m_grtecp();//legacy, will be removed once things are sorted out RE: CHR
void init_m4tenten();
void init_m4actbnk();
void init_m4actclb();
void init_m4actpak();
void init_m4addr();
void init_m4aao();
void init_m4alladv();
void init_m4alpha();
void init_m4andycp();
void init_m4andybt();
void init_m4andyfh();
void init_m4andyge();
void init_m4apachg();
void init_m4altreels_big();
void bwboki(machine_config &config);
void bwboki_chr(machine_config &config);
template<const uint32_t* Key> void bwboki_chr_cheat(machine_config &config)
{
bwboki(config);
m_maincpu->set_addrmap(AS_PROGRAM, &mpu4_state::mpu4_memmap_characteriser_bwb);
MPU4_CHARACTERISER_PAL_BWB(config, m_characteriser_bwb, 0);
m_characteriser_bwb->set_common_key(Key[0] & 0xff);
m_characteriser_bwb->set_other_key(Key[1]);
}
void mod2(machine_config &config);
void mod2_cheatchr(machine_config &config);
void mod2_chr(machine_config &config);
template<const uint8_t ReelNo, uint8_t Type>
void mpu4_add_reel(machine_config& config);
template<uint8_t Type, uint8_t NumberOfReels>
void mpu4_reels(machine_config &config);
template<const uint8_t* Table> void mod2_cheatchr_pal(machine_config &config)
{
mod2(config);
m_maincpu->set_addrmap(AS_PROGRAM, &mpu4_state::mpu4_memmap_characteriser);
MPU4_CHARACTERISER_PAL(config, m_characteriser, 0);
m_characteriser->set_cpu_tag("maincpu");
m_characteriser->set_allow_6809_cheat(true);
m_characteriser->set_lamp_table(Table);
}
template<const uint8_t* Table> void mod2_alt_cheatchr_pal(machine_config &config)
{
mod2_alt(config);
m_maincpu->set_addrmap(AS_PROGRAM, &mpu4_state::mpu4_memmap_characteriser);
MPU4_CHARACTERISER_PAL(config, m_characteriser, 0);
m_characteriser->set_cpu_tag("maincpu");
m_characteriser->set_allow_6809_cheat(true);
m_characteriser->set_lamp_table(Table);
}
template<const uint8_t* Table> void mod4oki_cheatchr_pal(machine_config &config)
{
mod4oki(config);
m_maincpu->set_addrmap(AS_PROGRAM, &mpu4_state::mpu4_memmap_characteriser);
MPU4_CHARACTERISER_PAL(config, m_characteriser, 0);
m_characteriser->set_cpu_tag("maincpu");
m_characteriser->set_allow_6809_cheat(true);
m_characteriser->set_lamp_table(Table);
}
template<const uint8_t* Table> void mod4oki_alt_cheatchr_pal(machine_config &config)
{
mod4oki_alt(config);
m_maincpu->set_addrmap(AS_PROGRAM, &mpu4_state::mpu4_memmap_characteriser);
MPU4_CHARACTERISER_PAL(config, m_characteriser, 0);
m_characteriser->set_cpu_tag("maincpu");
m_characteriser->set_allow_6809_cheat(true);
m_characteriser->set_lamp_table(Table);
}
template<const uint8_t* Table> void mod4yam_cheatchr_pal(machine_config &config)
{
mod4yam(config);
m_maincpu->set_addrmap(AS_PROGRAM, &mpu4_state::mpu4_memmap_characteriser);
MPU4_CHARACTERISER_PAL(config, m_characteriser, 0);
m_characteriser->set_cpu_tag("maincpu");
m_characteriser->set_allow_6809_cheat(true);
m_characteriser->set_lamp_table(Table);
}
template<const uint8_t* Table> void mod4oki_5r_cheatchr_pal(machine_config &config)
{
mod4oki_5r(config);
m_maincpu->set_addrmap(AS_PROGRAM, &mpu4_state::mpu4_memmap_characteriser);
MPU4_CHARACTERISER_PAL(config, m_characteriser, 0);
m_characteriser->set_cpu_tag("maincpu");
m_characteriser->set_allow_6809_cheat(true);
m_characteriser->set_lamp_table(Table);
}
template<uint8_t Fixed> void mod4oki_5r_bootleg_fixedret(machine_config &config)
{
mod4oki_5r(config);
m_maincpu->set_addrmap(AS_PROGRAM, &mpu4_state::mpu4_memmap_bootleg_characteriser);
MPU4_CHARACTERISER_BL(config, m_characteriser_bl, 0);
m_characteriser_bl->set_bl_fixed_return(Fixed);
}
void mod2_cheatchr_table(machine_config &config, const uint8_t* table);
// bootleg mod2
template<uint8_t Fixed> void mod2_bootleg_fixedret(machine_config &config)
{
mod2(config);
m_maincpu->set_addrmap(AS_PROGRAM, &mpu4_state::mpu4_memmap_bootleg_characteriser);
MPU4_CHARACTERISER_BL(config, m_characteriser_bl, 0);
m_characteriser_bl->set_bl_fixed_return(Fixed);
}
template<uint8_t Fixed> void mod4yam_bootleg_fixedret(machine_config &config)
{
mod4yam(config);
m_maincpu->set_addrmap(AS_PROGRAM, &mpu4_state::mpu4_memmap_bootleg_characteriser);
MPU4_CHARACTERISER_BL(config, m_characteriser_bl, 0);
m_characteriser_bl->set_bl_fixed_return(Fixed);
}
template<uint8_t Fixed> void mod4oki_bootleg_fixedret(machine_config &config)
{
mod4oki(config);
m_maincpu->set_addrmap(AS_PROGRAM, &mpu4_state::mpu4_memmap_bootleg_characteriser);
MPU4_CHARACTERISER_BL(config, m_characteriser_bl, 0);
m_characteriser_bl->set_bl_fixed_return(Fixed);
}
template<uint8_t Fixed> void mod4oki_alt_bootleg_fixedret(machine_config &config)
{
mod4oki_alt(config);
m_maincpu->set_addrmap(AS_PROGRAM, &mpu4_state::mpu4_memmap_bootleg_characteriser);
MPU4_CHARACTERISER_BL(config, m_characteriser_bl, 0);
m_characteriser_bl->set_bl_fixed_return(Fixed);
}
void mod2_chr_blastbnk(machine_config &config);
void mod2_chr_copcash(machine_config &config);
void mod2_alt(machine_config &config);
void mod4oki(machine_config &config);
void mod2_alt_cheatchr(machine_config &config);
void mod2_alt_cheatchr_table(machine_config &config, const uint8_t* table);
void mod4oki_5r(machine_config &config);
void mod4oki_5r_chr(machine_config &config);
void mod4oki_5r_cheatchr(machine_config &config);
void mod4oki_5r_cheatchr_table(machine_config &config, const uint8_t* table);
void mod4oki_alt(machine_config &config);
void mod4oki_alt_cheatchr(machine_config &config);
void mod4oki_alt_cheatchr_table(machine_config& config, const uint8_t* table);
void mod4oki(machine_config &config);
void mod4oki_cheatchr(machine_config &config);
void mod4oki_cheatchr_table(machine_config &config, const uint8_t* table);
void mod4oki_chr(machine_config &config);
void mod4yam(machine_config &config);
void mod4yam_cheatchr(machine_config &config);
void mod4yam_cheatchr_table(machine_config& config, const uint8_t* table);
void mod4yam_chr(machine_config &config);
void mpu4_common(machine_config &config);
void mpu4_common2(machine_config &config);
void mpu4crys(machine_config &config);
void mpu4_std_3reel(machine_config &config);
void mpu4_type2_3reel(machine_config &config);
void mpu4_type3_3reel(machine_config &config);
void mpu4_type4_3reel(machine_config &config);
void mpu4_bwb_3reel(machine_config &config);
void mpu4_std_4reel(machine_config &config);
void mpu4_type2_4reel(machine_config &config);
void mpu4_type3_4reel(machine_config &config);
void mpu4_type4_4reel(machine_config &config);
void mpu4_bwb_4reel(machine_config &config);
void mpu4_std_5reel(machine_config &config);
void mpu4_type2_5reel(machine_config &config);
void mpu4_type3_5reel(machine_config &config);
void mpu4_type4_5reel(machine_config &config);
void mpu4_bwb_5reel(machine_config &config);
void mpu4_std_6reel(machine_config &config);
void mpu4_type2_6reel(machine_config &config);
void mpu4_type3_6reel(machine_config &config);
void mpu4_type4_6reel(machine_config &config);
void mpu4_bwb_6reel(machine_config &config);
void mpu4_std_7reel(machine_config &config);
void mpu4_type2_7reel(machine_config &config);
void mpu4_type3_7reel(machine_config &config);
void mpu4_type4_7reel(machine_config &config);
void mpu4_bwb_7reel(machine_config &config);
void mpu4base(machine_config &config);
protected:
TIMER_CALLBACK_MEMBER(update_ic24);
void mpu4_memmap(address_map &map);
void mpu4_memmap_characteriser(address_map &map);
void mpu4_memmap_bootleg_characteriser(address_map &map);
void mpu4_memmap_bl_characteriser_blastbank(address_map &map);
void mpu4_memmap_characteriser_bwb(address_map &map);
void lamp_extend_small(int data);
void lamp_extend_large(int data,int column,int active);
void led_write_extender(int latch, int data, int column);
@ -250,29 +387,22 @@ protected:
void mpu4_install_mod4oki_space(address_space &space);
void mpu4_install_mod4bwb_space(address_space &space);
void mpu4_config_common();
DECLARE_MACHINE_START(mod2);
DECLARE_MACHINE_RESET(mpu4);
DECLARE_MACHINE_START(mpu4yam);
DECLARE_MACHINE_START(mpu4oki);
DECLARE_MACHINE_START(mpu4oki_alt);
DECLARE_MACHINE_START(mod4oki_5r);
DECLARE_MACHINE_START(mod2_alt);
DECLARE_MACHINE_START(mpu4bwb);
DECLARE_MACHINE_START(mpu4cry);
TIMER_DEVICE_CALLBACK_MEMBER(gen_50hz);
template <unsigned N> DECLARE_WRITE_LINE_MEMBER(reel_optic_cb) { if (state) m_optic_pattern |= (1 << N); else m_optic_pattern &= ~(1 << N); }
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
return 0;
}
void bankswitch_w(uint8_t data);
uint8_t bankswitch_r();
void bankset_w(uint8_t data);
void characteriser_w(offs_t offset, uint8_t data);
uint8_t characteriser_r(address_space &space, offs_t offset);
void bwb_characteriser_w(offs_t offset, uint8_t data);
uint8_t bwb_characteriser_r(offs_t offset);
void mpu4_ym2413_w(offs_t offset, uint8_t data);
uint8_t mpu4_ym2413_r(offs_t offset);
uint8_t crystal_sound_r();
@ -318,6 +448,13 @@ protected:
DECLARE_WRITE_LINE_MEMBER(dataport_rxd);
uint8_t hack_duart_r()
{
return machine().rand() & 0x10;
}
uint8_t bootleg806_r(address_space &space, offs_t offset);
required_device<cpu_device> m_maincpu;
optional_device<rocvfd_device> m_vfd;
optional_device<ptm6840_device> m_6840ptm;
@ -340,6 +477,12 @@ protected:
optional_device<ym2413_device> m_ym2413;
optional_device<ay8913_device> m_ay8913;
optional_device<bacta_datalogger_device> m_dataport;
optional_device<mpu4_characteriser_pal> m_characteriser;
optional_device<mpu4_characteriser_bl> m_characteriser_bl;
optional_device<mpu4_characteriser_bl_blastbank> m_characteriser_blastbank;
optional_device<mpu4_characteriser_pal_bwb> m_characteriser_bwb;
optional_device<mc68681_device> m_duart68681;
// not all systems have this many lamps/LEDs/digits but the driver is too much of a mess to split up now
@ -378,17 +521,12 @@ protected:
int m_IC23GC = 0;
int m_IC23GB = 0;
int m_IC23GA = 0;
int m_prot_col = 0;
int m_lamp_col = 0;
int m_init_col = 0;
int m_reel_flag = 0;
int m_ic23_active = 0;
int m_led_lamp = 0;
int m_link7a_connected = 0;
int m_low_volt_detect_disable = 0;
int m_aux1_invert = 0;
int m_aux2_invert = 0;
int m_door_invert = 0;
emu_timer *m_ic24_timer = nullptr;
int m_expansion_latch = 0;
int m_global_volume = 0;
@ -411,10 +549,8 @@ protected:
int m_card_live = 0;
int m_led_extender = 0;
int m_bwb_bank = 0;
int m_chr_state = 0;
int m_chr_counter = 0;
int m_chr_value = 0;
int m_bwb_return = 0;
bool m_default_to_low_bank = false;
int m_pageval = 0;
int m_pageset = 0;
int m_hopper = 0;
@ -424,8 +560,8 @@ protected:
int m_t3l = 0;
int m_t3h = 0;
uint8_t m_numbanks = 0;
mpu4_chr_table* m_current_chr_table = nullptr;
const bwb_chr_table* m_bwb_chr_table1 = nullptr;
static constexpr uint8_t reel_mux_table[8]= {0,4,2,6,1,5,3,7};//include 7, although I don't think it's used, this is basically a wire swap
static constexpr uint8_t reel_mux_table7[8]= {3,1,5,6,4,2,0,7};
};
INPUT_PORTS_EXTERN( mpu4 );

File diff suppressed because it is too large Load Diff

View File

@ -30,6 +30,264 @@ license:CC0
</led16segsc>
</element>
<element name="text0"><text string="0"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text1"><text string="1"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text2"><text string="2"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text3"><text string="3"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text4"><text string="4"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text5"><text string="5"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text6"><text string="6"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text7"><text string="7"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text8"><text string="8"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text9"><text string="9"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text10"><text string="10"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text11"><text string="11"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text12"><text string="12"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text13"><text string="13"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text14"><text string="14"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text15"><text string="15"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text16"><text string="16"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text17"><text string="17"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text18"><text string="18"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text19"><text string="19"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text20"><text string="20"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text21"><text string="21"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text22"><text string="22"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text23"><text string="23"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text24"><text string="24"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text25"><text string="25"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text26"><text string="26"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text27"><text string="27"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text28"><text string="28"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text29"><text string="29"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text30"><text string="30"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text31"><text string="31"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text32"><text string="32"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text33"><text string="33"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text34"><text string="34"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text35"><text string="35"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text36"><text string="36"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text37"><text string="37"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text38"><text string="38"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text39"><text string="39"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text40"><text string="40"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text41"><text string="41"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text42"><text string="42"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text43"><text string="43"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text44"><text string="44"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text45"><text string="45"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text46"><text string="46"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text47"><text string="47"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text48"><text string="48"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text49"><text string="49"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text50"><text string="50"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text51"><text string="51"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text52"><text string="52"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text53"><text string="53"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text54"><text string="54"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text55"><text string="55"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text56"><text string="56"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text57"><text string="57"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text58"><text string="58"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text59"><text string="59"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text60"><text string="60"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text61"><text string="61"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text62"><text string="62"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text63"><text string="63"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text64"><text string="64"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text65"><text string="65"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text66"><text string="66"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text67"><text string="67"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text68"><text string="68"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text69"><text string="69"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text70"><text string="70"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text71"><text string="71"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text72"><text string="72"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text73"><text string="73"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text74"><text string="74"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text75"><text string="75"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text76"><text string="76"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text77"><text string="77"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text78"><text string="78"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text79"><text string="79"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text80"><text string="80"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text81"><text string="81"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text82"><text string="82"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text83"><text string="83"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text84"><text string="84"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text85"><text string="85"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text86"><text string="86"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text87"><text string="87"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text88"><text string="88"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text89"><text string="89"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text90"><text string="90"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text91"><text string="91"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text92"><text string="92"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text93"><text string="93"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text94"><text string="94"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text95"><text string="95"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text96"><text string="96"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text97"><text string="97"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text98"><text string="98"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text99"><text string="99"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text100"><text string="100"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text101"><text string="101"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text102"><text string="102"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text103"><text string="103"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text104"><text string="104"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text105"><text string="105"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text106"><text string="106"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text107"><text string="107"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text108"><text string="108"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text109"><text string="109"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text110"><text string="110"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text111"><text string="111"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text112"><text string="112"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text113"><text string="113"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text114"><text string="114"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text115"><text string="115"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text116"><text string="116"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text117"><text string="117"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text118"><text string="118"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text119"><text string="119"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text120"><text string="120"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text121"><text string="121"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text122"><text string="122"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text123"><text string="123"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text124"><text string="124"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text125"><text string="125"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text126"><text string="126"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text127"><text string="127"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text128"><text string="128"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text129"><text string="129"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text130"><text string="130"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text131"><text string="131"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text132"><text string="132"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text133"><text string="133"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text134"><text string="134"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text135"><text string="135"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text136"><text string="136"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text137"><text string="137"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text138"><text string="138"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text139"><text string="139"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text140"><text string="140"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text141"><text string="141"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text142"><text string="142"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text143"><text string="143"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text144"><text string="144"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text145"><text string="145"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text146"><text string="146"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text147"><text string="147"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text148"><text string="148"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text149"><text string="149"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text150"><text string="150"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text151"><text string="151"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text152"><text string="152"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text153"><text string="153"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text154"><text string="154"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text155"><text string="155"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text156"><text string="156"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text157"><text string="157"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text158"><text string="158"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text159"><text string="159"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text160"><text string="160"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text161"><text string="161"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text162"><text string="162"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text163"><text string="163"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text164"><text string="164"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text165"><text string="165"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text166"><text string="166"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text167"><text string="167"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text168"><text string="168"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text169"><text string="169"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text170"><text string="170"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text171"><text string="171"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text172"><text string="172"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text173"><text string="173"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text174"><text string="174"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text175"><text string="175"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text176"><text string="176"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text177"><text string="177"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text178"><text string="178"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text179"><text string="179"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text180"><text string="180"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text181"><text string="181"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text182"><text string="182"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text183"><text string="183"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text184"><text string="184"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text185"><text string="185"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text186"><text string="186"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text187"><text string="187"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text188"><text string="188"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text189"><text string="189"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text190"><text string="190"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text191"><text string="191"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text192"><text string="192"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text193"><text string="193"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text194"><text string="194"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text195"><text string="195"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text196"><text string="196"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text197"><text string="197"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text198"><text string="198"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text199"><text string="199"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text200"><text string="200"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text201"><text string="201"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text202"><text string="202"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text203"><text string="203"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text204"><text string="204"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text205"><text string="205"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text206"><text string="206"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text207"><text string="207"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text208"><text string="208"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text209"><text string="209"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text210"><text string="210"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text211"><text string="211"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text212"><text string="212"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text213"><text string="213"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text214"><text string="214"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text215"><text string="215"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text216"><text string="216"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text217"><text string="217"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text218"><text string="218"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text219"><text string="219"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text220"><text string="220"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text221"><text string="221"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text222"><text string="222"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text223"><text string="223"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text224"><text string="224"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text225"><text string="225"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text226"><text string="226"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text227"><text string="227"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text228"><text string="228"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text229"><text string="229"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text230"><text string="230"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text231"><text string="231"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text232"><text string="232"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text233"><text string="233"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text234"><text string="234"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text235"><text string="235"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text236"><text string="236"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text237"><text string="237"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text238"><text string="238"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text239"><text string="239"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text240"><text string="240"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text241"><text string="241"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text242"><text string="242"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text243"><text string="243"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text244"><text string="244"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text245"><text string="245"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text246"><text string="246"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text247"><text string="247"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text248"><text string="248"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text249"><text string="249"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text250"><text string="250"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text251"><text string="251"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text252"><text string="252"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text253"><text string="253"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text254"><text string="254"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<element name="text255"><text string="255"><color red="0.03" green="0.03" blue="0.03" /></text></element>
<group name="vfd">
<repeat count="16">
<param name="n" start="15" increment="-1" />
@ -57,22 +315,44 @@ license:CC0
<element name="reel6" ref="Steppers" state="0">
<bounds x="280" y="300" width="50" height="50"/>
</element>
<!-- standard lamps -->
<repeat count="16">
<param name="s" start="0" increment="8" />
<param name="x" start="0" increment="8" />
<param name="x" start="0" increment="24" />
<repeat count="8">
<param name="n" start="~s~" increment="1" />
<param name="y" start="0" increment="8" />
<param name="y" start="0" increment="16" />
<element name="lamp~n~" ref="matrixlamp" state="0" blend="add">
<bounds x="~x~" y="~y~" width="7" height="7" />
<bounds x="~x~" y="~y~" width="23" height="15" />
</element>
<element name="text~n~" ref="text~n~">
<bounds x="~x~" y="~y~" width="23" height="15" />
</element>
</repeat>
</repeat>
<!-- extender board lamps (not always used) -->
<repeat count="16">
<param name="s" start="128" increment="8" />
<param name="x" start="0" increment="24" />
<repeat count="8">
<param name="n" start="~s~" increment="1" />
<param name="y" start="140" increment="16" />
<element name="lamp~n~" ref="matrixlamp" state="0" blend="add">
<bounds x="~x~" y="~y~" width="23" height="15" />
</element>
<element name="text~n~" ref="text~n~">
<bounds x="~x~" y="~y~" width="23" height="15" />
</element>
</repeat>
</repeat>
<repeat count="8">
<param name="n" start="0" increment="1" />
<param name="x" start="300" increment="8" />
<element name="digit~n~" ref="digit" state="0">
<bounds x="~x~" y="200" width="8" height="10" />
<bounds x="~x~" y="280" width="8" height="10" />
</element>
</repeat>
<group ref="vfd">

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,78 @@
// license:BSD-3-Clause
// copyright-holders:David Haywood
#include "emu.h"
#include "mpu4_characteriser_bootleg.h"
// many bootlegs have an initial protection check reading 0x814 or 0x812
// if it passes, other checks are skipped.
//
// this could be a trap, maybe this one is meant to fail and the others are meant to pass
DEFINE_DEVICE_TYPE(MPU4_CHARACTERISER_BL, mpu4_characteriser_bl, "xmpu4chrpalboot19", "MPU4 bootleg Characteriser (fixed returns)")
DEFINE_DEVICE_TYPE(MPU4_CHARACTERISER_BL_BLASTBANK, mpu4_characteriser_bl_blastbank, "mpu4chrboot_blast", "MPU4 bootleg Characteriser (Bank A Blast)")
mpu4_characteriser_bl::mpu4_characteriser_bl(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: mpu4_characteriser_bl(mconfig, MPU4_CHARACTERISER_BL, tag, owner, clock)
{
}
mpu4_characteriser_bl::mpu4_characteriser_bl(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, type, tag, owner, clock),
m_cpu(*this, finder_base::DUMMY_TAG),
m_allow_6809_cheat(false)
{
}
void mpu4_characteriser_bl::device_start()
{
}
void mpu4_characteriser_bl::device_reset()
{
}
mpu4_characteriser_bl_blastbank::mpu4_characteriser_bl_blastbank(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, MPU4_CHARACTERISER_BL_BLASTBANK, tag, owner, clock)
{
}
void mpu4_characteriser_bl_blastbank::device_start()
{
}
void mpu4_characteriser_bl_blastbank::device_reset()
{
}
uint8_t mpu4_characteriser_bl_blastbank::read(offs_t offset)
{
uint8_t ret = 0x00;
switch (m_prot_col)
{
case 0x00: ret = 0xb8; break;
case 0x01: ret = 0xa8; break;
case 0x02: ret = 0x88; break;
case 0x03: ret = 0x8c; break;
case 0x04: ret = 0x9c; break;
case 0x05: ret = 0xbc; break;
}
ret ^= m_retxor;
logerror("%s: bootleg Characteriser read offset %02x returning %02x\n", machine().describe_context(), offset, ret);
return ret;
}
void mpu4_characteriser_bl_blastbank::write(offs_t offset, uint8_t data)
{
logerror("%s: bootleg Characteriser write offset %02x data %02x\n", machine().describe_context(), offset, data);
m_prot_col = data;
}

View File

@ -0,0 +1,81 @@
// license:BSD-3-Clause
// copyright-holders:David Haywood
#ifndef MAME_MACHINE_MPU4_CHARACTERISER_BL_H
#define MAME_MACHINE_MPU4_CHARACTERISER_BL_H
#pragma once
#include "cpu/m6809/m6809.h"
// bootleg protection
DECLARE_DEVICE_TYPE(MPU4_CHARACTERISER_BL, mpu4_characteriser_bl)
// is this a bootleg, or a much earlier official protection, it's more than just a fixed return value at least
// but has only been seen on 2 games
DECLARE_DEVICE_TYPE(MPU4_CHARACTERISER_BL_BLASTBANK, mpu4_characteriser_bl_blastbank)
class mpu4_characteriser_bl : public device_t
{
public:
// construction/destruction
mpu4_characteriser_bl(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
mpu4_characteriser_bl(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
template <typename T> void set_cpu_tag(T&& tag)
{
m_cpu.set_tag(std::forward<T>(tag));
}
void set_allow_6809_cheat(bool allow)
{
m_allow_6809_cheat = allow;
}
void set_bl_fixed_return(uint8_t ret)
{
m_blfixedreturn = ret;
}
uint8_t read(offs_t offset)
{
logerror("%s: bootleg Characteriser read offset %02x\n", machine().describe_context(), offset);
return m_blfixedreturn;
}
void write(offs_t offset, uint8_t data)
{
logerror("%s: bootleg Characteriser write offset %02x data %02x\n", machine().describe_context(), offset, data);
}
protected:
virtual void device_start() override;
virtual void device_reset() override;
private:
optional_device<cpu_device> m_cpu; // needed for some of the protection 'cheats'
bool m_allow_6809_cheat;
uint8_t m_blfixedreturn = 0;
};
class mpu4_characteriser_bl_blastbank : public device_t
{
public:
// construction/destruction
mpu4_characteriser_bl_blastbank(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual uint8_t read(offs_t offset);
virtual void write(offs_t offset, uint8_t data);
void set_retxor(uint8_t retxor) { m_retxor = retxor; }
protected:
virtual void device_start() override;
virtual void device_reset() override;
uint8_t m_retxor = 0x00;
int m_prot_col = 0;
};
#endif // MAME_MACHINE_MPU4_CHARACTERISER_BL_H

View File

@ -0,0 +1,288 @@
// license:BSD-3-Clause
// copyright-holders:David Haywood, James Wallace
/*
Characteriser (CHR)
As built, the CHR is a PAL which can perform basic bit manipulation according to
an as yet unknown unique key. However, the programmers decided to best use this protection device in read/write/compare
cycles, storing almost the entire 'hidden' data table in the ROMs in plain sight. Only later rebuilds by BwB
avoided this 'feature' of the development kit, and will need a different setup.
This information has been used to generate the CHR tables loaded by the programs, until a key can be determined.
For most Barcrest games, the following method was used:
The initial 'PALTEST' routine as found in the Barcrest programs simply writes the first 'call' to the CHR space,
to read back the 'response'. There is no attempt to alter the order or anything else, just
a simple runthrough of the entire data table. The only 'catch' in this is to note that the CHR chip always scans
through the table starting at the last accessed data value, unless 00 is used to reset to the beginning. This is obviously
a simplification, in fact the PAL does bit manipulation with some latching.
However, a final 8 byte row, that controls the lamp matrix is not tested - to date, no-one outside of Barcrest knows
how this is generated, and currently trial and error is the only sensible method. It is noted that the default,
of all 00, is sometimes the correct answer, particularly in non-Barcrest use of the CHR chip, though when used normally,
there are again fixed call values.
Apparently, just before the characteriser is checked bit 1 at 0x61DF is checked and if zero the characteriser
check is bypassed. This may be something to look at for prototype ROMs and hacks.
*/
#include "emu.h"
#include "mpu4_characteriser_pal.h"
DEFINE_DEVICE_TYPE(MPU4_CHARACTERISER_PAL, mpu4_characteriser_pal, "mpu4chrpal", "Barcrest MPU4 Characteriser PAL")
mpu4_characteriser_pal::mpu4_characteriser_pal(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: mpu4_characteriser_pal(mconfig, MPU4_CHARACTERISER_PAL, tag, owner, clock)
{
}
mpu4_characteriser_pal::mpu4_characteriser_pal(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, type, tag, owner, clock),
m_current_chr_table(nullptr),
m_prot_col(0),
m_cpu(*this, finder_base::DUMMY_TAG),
m_allow_6809_cheat(false),
m_allow_68k_cheat(false),
m_current_lamp_table(nullptr),
m_lamp_col(0),
m_4krow(0),
m_is_4ksim(false),
m_protregion(*this, "fakechr")
{
}
void mpu4_characteriser_pal::device_start()
{
for (int i=0;i<64;i++)
m_temp_debug_table[i] = 0x00;
m_temp_debug_write_count = 0;
}
void mpu4_characteriser_pal::device_reset()
{
}
// this is the challenge table used for all official Barcrest games
// NOTE: some values are repeated, response search continues from last found value
static uint8_t challenge_table[64] = { 0x00, 0x1A, 0x04, 0x10, 0x18, 0x0F, 0x13, 0x1B, 0x03, 0x07, 0x17, 0x1D, 0x36, 0x35, 0x2B, 0x28,
0x39, 0x21, 0x22, 0x25, 0x2C, 0x29, 0x31, 0x34, 0x0A, 0x1F, 0x06, 0x0E, 0x1C, 0x12, 0x1E, 0x0D,
0x14, 0x0A, 0x19, 0x15, 0x06, 0x0F, 0x08, 0x1B, 0x1E, 0x04, 0x01, 0x0C, 0x18, 0x1A, 0x11, 0x0B,
0x03, 0x17, 0x10, 0x1D, 0x0E, 0x07, 0x12, 0x09, 0x0D, 0x1F, 0x16, 0x05, 0x13, 0x1C, 0x02, 0x00 };
// some earlier games use this challenge table, where bit 0x20 is never set..
// is there a difference in behavior?
#if 0
static uint8_t challenge_table2[64] = { 0x00, 0x1A, 0x04, 0x10, 0x18, 0x0F, 0x13, 0x1B, 0x03, 0x07, 0x17, 0x1D, 0x16, 0x15, 0x0B, 0x08,
0x19, 0x01, 0x02, 0x05, 0x0C, 0x09, 0x11, 0x14, 0x0A, 0x1F, 0x06, 0x0E, 0x1C, 0x12, 0x1E, 0x0D,
0x14, 0x0A, 0x19, 0x15, 0x06, 0x0F, 0x08, 0x1B, 0x1E, 0x04, 0x01, 0x0C, 0x18, 0x1A, 0x11, 0x0B,
0x03, 0x17, 0x10, 0x1D, 0x0E, 0x07, 0x12, 0x09, 0x0D, 0x1F, 0x16, 0x05, 0x13, 0x1C, 0x02, 0x00, };
#endif
void mpu4_characteriser_pal::protection_w(uint8_t data)
{
logerror("%s Characteriser protection_w data %02x\n", machine().describe_context(), data);
if (data == 0)
{
m_prot_col = 0;
m_4krow = 0;
}
else
{
if (m_is_4ksim)
{
m_prot_col = data & 0x3f; // 6-bit writes (upper 2 bits unused)
}
else
{
for (int x = m_prot_col; x < 64; x++)
{
uint8_t call = challenge_table[x];
// ignore bit 0x20 and above (see note above about alt challenge table)
// note, the 4k tables used by the quiz games suggest this bit DOES change the sequence
// at least on some of the PALs, maybe later ones had an extra input line?
if ((call & 0x1f) == (data & 0x1f))
{
m_prot_col = x;
logerror("Characteriser find column %02x\n", m_prot_col);
break;
}
}
}
}
}
void mpu4_characteriser_pal::lamp_scramble_w(uint8_t data)
{
switch (data)
{
case 0x00:
m_lamp_col = 0;
break;
case 0x01:
m_lamp_col = 1;
break;
case 0x04:
m_lamp_col = 2;
break;
case 0x09:
m_lamp_col = 3;
break;
case 0x10:
m_lamp_col = 4;
break;
case 0x19:
m_lamp_col = 5;
break;
case 0x24:
m_lamp_col = 6;
break;
case 0x31:
m_lamp_col = 7;
break;
}
logerror("%s Characteriser lamp_scramble_w data %02X (picking column %d)\n", machine().describe_context(), data, m_lamp_col);
}
void mpu4_characteriser_pal::write(offs_t offset, uint8_t data)
{
switch (offset)
{
case 0x00:
protection_w(data);
break;
case 0x02:
lamp_scramble_w(data);
break;
}
}
uint8_t mpu4_characteriser_pal::protection_r()
{
if (m_allow_6809_cheat || m_allow_68k_cheat)
{
uint8_t ret = 0x00;
if (m_allow_6809_cheat)
{
/* a cheat ... many early games use a standard check */
int addr = m_cpu->state_int(M6809_X);
if ((addr >= 0x800) && (addr <= 0xfff)) return 0x00; // prevent recursion, only care about ram/rom areas for this cheat.
ret = m_cpu->space(AS_PROGRAM).read_byte(addr);
logerror("%s: Characteriser protection_r WITH 6809 CHEAT (col is %02x returning %02x from addr %04x)\n", machine().describe_context(), m_prot_col, ret, addr);
}
else if (m_allow_68k_cheat)
{
ret = m_cpu->state_int(M68K_D0) & 0xff;
logerror("%s: Characteriser protection_r WITH 68000 CHEAT (col is %02x returning %02x)\n", machine().describe_context(), m_prot_col, ret);
}
if (IDENTIFICATION_HELPER)
{
m_temp_debug_table[m_prot_col] = ret;
if (m_temp_debug_write_count <= 64)
m_temp_debug_write_count++;
if (m_temp_debug_write_count == 64)
{
logerror("Characteriser Sequence:\n");
for (int i = 0; i < 64; i++)
{
logerror("%02x ", m_temp_debug_table[i]);
}
logerror("\n");
}
}
return ret;
}
// not cheating, but no table set
if (!m_current_chr_table && !m_protregion)
{
logerror("%s: Characteriser protection_r WITH NO TABLE\n", machine().describe_context());
return 0x00;
}
// use table
uint8_t ret = 0x00;
if (m_current_chr_table)
{
ret = m_current_chr_table[m_prot_col];
logerror("%s: Characteriser protection_r WITH PASSED TABLE (returning %02x)\n", machine().describe_context(), ret);
}
else if (m_protregion)
{
ret = m_protregion[m_4krow * 64 + m_prot_col];
// if we're simulating with a 4k table, the previous write selects
// the next set of 64 values to use.
if (m_is_4ksim)
{
m_4krow = ret;
ret <<= 2;
}
logerror("%s: Characteriser protection_r WITH FAKE ROM (returning %02x)\n", machine().describe_context(), ret);
}
return ret;
}
uint8_t mpu4_characteriser_pal::lamp_scramble_r()
{
if (!m_current_lamp_table && !m_protregion)
{
uint8_t ret = machine().rand();
logerror("%s: Characteriser lamp_scramble_r WITH NO TABLE (table offset %02x, returning %02x)\n", machine().describe_context(), m_lamp_col, ret);
return ret;
}
else
{
uint8_t ret = 0x00;
if (m_current_lamp_table)
{
ret = m_current_lamp_table[m_lamp_col];
logerror("%s: Characteriser lamp_scramble_r WITH PASSED TABLE (table offset %02x, returning %02x)\n", machine().describe_context(), m_lamp_col, ret);
}
else if (m_protregion)
{
ret = m_protregion[m_lamp_col + 64];
logerror("%s: Characteriser lamp_scramble_r WITH FAKE ROM (table offset %02x, returning %02x)\n", machine().describe_context(), m_lamp_col, ret);
}
return ret;
}
}
uint8_t mpu4_characteriser_pal::read(offs_t offset)
{
switch (offset)
{
case 0x00: return protection_r();
case 0x03: return lamp_scramble_r();
}
return 0;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,134 @@
// license:BSD-3-Clause
// copyright-holders:David Haywood, James Wallace
/*
BwB Characteriser (CHR)
The BwB method of protection is considerably different to the Barcrest one, with any
incorrect behaviour manifesting in ridiculously large payouts. The hardware is the
same, however the main weakness of the software has been eliminated.
In fact, the software seems deliberately designed to mislead, but is (fortunately for
us) prone to similar weaknesses that allow a per game solution.
Project Amber performed a source analysis (available on request) which appears to make things work.
Said weaknesses (A Cheats Guide according to Project Amber)
The common initialisation sequence is "00 04 04 0C 0C 1C 14 2C 5C 2C"
0 1 2 3 4 5 6 7 8
Using debug search for the first read from said string (best to find it first).
- in m4blsbys this string is at 0x17383 in ROM, which is banked into memory at 0x7383
- this is first accessed by the code at 50c3, a CMPA $0138,X opcode, where X is 0x724B (0x724B + 0x138 = 0x7383)
At this point, the X index on the CPU is at the magic number address.
The subsequent calls for each can be found based on the magic address
(0) = ( (BWBMagicAddress))
(1) = ( (BWBMagicAddress + 1))
(2) = ( (BWBMagicAddress + 2))
(3) = ( (BWBMagicAddress + 4))
(4) = ( (BWBMagicAddress - 5))
(5) = ( (BWBMagicAddress - 4))
(6) = ( (BWBMagicAddress - 3))
(7) = ( (BWBMagicAddress - 2))
(8) = ( (BWBMagicAddress - 1))
These return the standard init sequence as above.
For ease of understanding, we use three tables, one holding the common responses
and two holding the appropriate call and response pairs for the two stages of operation
*/
#include "emu.h"
#include "mpu4_characteriser_pal_bwb.h"
DEFINE_DEVICE_TYPE(MPU4_CHARACTERISER_PAL_BWB, mpu4_characteriser_pal_bwb, "mpu4chrpal_bwb", "BWB MPU4 Characteriser PAL")
mpu4_characteriser_pal_bwb::mpu4_characteriser_pal_bwb(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: mpu4_characteriser_pal_bwb(mconfig, MPU4_CHARACTERISER_PAL_BWB, tag, owner, clock)
{
}
mpu4_characteriser_pal_bwb::mpu4_characteriser_pal_bwb(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, type, tag, owner, clock)
{
}
void mpu4_characteriser_pal_bwb::device_start()
{
}
void mpu4_characteriser_pal_bwb::device_reset()
{
}
void mpu4_characteriser_pal_bwb::write(offs_t offset, uint8_t data)
{
m_call = data;
logerror("%s Characteriser write offset %02x data %02x\n", machine().describe_context(), offset, data);
m_initval_ready = true;
if (m_chr_counter > 35)
{
m_chr_counter = 36;
}
else
{
m_chr_counter++;
}
if (m_call == ((m_otherkey >> 16) & 0xff))
m_bwb_return = 0;
if ((m_call == m_commonkey) || (m_call == ((m_otherkey >> 16) & 0xff)) || (m_call == ((m_otherkey >> 8) & 0xff)) || (m_call == ((m_otherkey >> 0) & 0xff)))
{
if (m_bwb_return < 16)
{
m_chr_value = bwb_chr_table_common[m_bwb_return];
}
m_bwb_return++;
}
else
{
m_chr_value = machine().rand();
m_bwb_return = 0;
}
}
uint8_t mpu4_characteriser_pal_bwb::read(offs_t offset)
{
logerror("%s Characteriser read offset %02x\n", machine().describe_context(), offset);
if ((offset == 0) && m_initval_ready)
{
m_initval_ready = false;
switch (m_chr_counter)
{
case 7:
case 14:
case 21:
case 28:
case 35:
logerror("m_call %02x\n", m_call);
// it is unclear what we actually need to return here for normal operation
return machine().rand();
default:
return m_chr_value;
}
}
else
{
return m_chr_value;
}
}

View File

@ -0,0 +1,51 @@
// license:BSD-3-Clause
// copyright-holders:David Haywood, James Wallace
#ifndef MAME_MACHINE_MPU4_CHARACTERISER_PAL_BWB_H
#define MAME_MACHINE_MPU4_CHARACTERISER_PAL_BWB_H
#pragma once
#include "cpu/m6809/m6809.h"
#include "cpu/m68000/m68000.h"
DECLARE_DEVICE_TYPE(MPU4_CHARACTERISER_PAL_BWB, mpu4_characteriser_pal_bwb)
class mpu4_characteriser_pal_bwb : public device_t
{
public:
// construction/destruction
mpu4_characteriser_pal_bwb(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
void set_common_key(uint8_t commonkey)
{
m_commonkey = commonkey;
}
void set_other_key(uint32_t otherkey)
{
m_otherkey = otherkey;
}
virtual uint8_t read(offs_t offset);
virtual void write(offs_t offset, uint8_t data);
constexpr static uint8_t bwb_chr_table_common[16] = {0x00,0x04,0x04,0x0c,0x0c,0x1c,0x14,0x2c,0x5c,0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
protected:
mpu4_characteriser_pal_bwb(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override;
virtual void device_reset() override;
private:
int m_chr_counter = 0;
int m_chr_value = 0;
int m_bwb_return = 0;
uint8_t m_call = 0;
bool m_initval_ready = false;
uint8_t m_commonkey = 0x00;
uint32_t m_otherkey = 0x00000000;
};
#endif // MAME_MACHINE_MPU4_CHARACTERISER_PAL_BWB_H

File diff suppressed because it is too large Load Diff