extracted protection data for Ma Cheon Ru [system11]

(note , one of the minigames doesn't work as no inputs respond, I'm wondering if it's broken on the original PCB too)
This commit is contained in:
mamehaze 2015-04-14 00:39:09 +01:00
parent aceb75fe8c
commit 1ec8c616eb
2 changed files with 85 additions and 378 deletions

View File

@ -1111,6 +1111,86 @@ static INPUT_PORTS_START( moremore )
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
static INPUT_PORTS_START( mcheonru )
PORT_START("DSW1") /* 500000.w */
PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_SERVICE_DIPLOC( 0x0080, IP_ACTIVE_LOW, "SW1:8" )
PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)
PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_START("DSW2") /* 500002.w */
PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0002, 0x0002, "Tile Type" )
PORT_DIPSETTING( 0x0002, "Picture" )
PORT_DIPSETTING( 0x0000, "Traditional" )
PORT_DIPNAME( 0x0004, 0x0004, "Mini Game Frequency" )
PORT_DIPSETTING( 0x0004, "Every 3 Rounds" )
PORT_DIPSETTING( 0x0000, "Every Round" )
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_START("SYSTEM") /* 500004.w */
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
INPUT_PORTS_END
static INPUT_PORTS_START( twinkle )
PORT_START("DSW1") /* 500000.w */
PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:1")
@ -2290,7 +2370,6 @@ ROM_START( mcheonru ) /* SemiCom Ser-4331-4 PCB */
ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "u52", 0x00001, 0x40000, CRC(63fd8a9b) SHA1(53054d8072322842c32625ab38e7d62dc0e75627) )
ROM_LOAD16_BYTE( "u74", 0x00000, 0x40000, CRC(3edb17ce) SHA1(0c6ea239f57eca114d75c173b77b2c8ef43d63a2) )
ROM_LOAD( "hackprot", 0x7fe00, 0x200 , CRC(2c685396) SHA1(c3bc7940bb2b4394a6b6663b92a656995f6011fe) ) // hack, decrypted data from 3in1semi
ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
ROM_LOAD( "u35", 0x00000, 0x10000 , CRC(79e965b4) SHA1(268df67ec6ea828ae01a6e4d2da9ad2a08a837f1) )
@ -2301,7 +2380,7 @@ ROM_START( mcheonru ) /* SemiCom Ser-4331-4 PCB */
ROM_REGION16_BE( 0x200, "user1", 0 ) /* Data from Shared RAM */
/* this is not a real rom but instead the data extracted from
shared ram, the MCU puts it there */
ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200 , NO_DUMP )
ROM_LOAD( "protdata.bin", 0x00000, 0x200 , CRC(d61f4f07) SHA1(29485bce6e3a7ed2ace540bb81fe028456ae1ae9) )
ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
ROM_LOAD( "u14", 0x00000, 0x40000, CRC(28a62d23) SHA1(24dbe6229647032599e02225de57650205dce5c3) )
@ -2490,364 +2569,10 @@ ROM_START( suhosong )
ROM_LOAD( "su_ho_sung.ua6", 0x100000, 0x80000, CRC(92fea02c) SHA1(946c7bf55354875a1581ce484cb185b640f74166) )
ROM_END
READ16_MEMBER(snowbros_state::moremorp_0a_read)
{
return 0x000a;
}
DRIVER_INIT_MEMBER(snowbros_state,moremorp)
{
// UINT16 *PROTDATA = (UINT16*)memregion("user1")->base();
// int i;
// for (i = 0;i < 0x200/2;i++)
// m_hyperpac_ram[0xf000/2 + i] = PROTDATA[i];
/* explicit check in the code */
m_maincpu->space(AS_PROGRAM).install_read_handler(0x200000, 0x200001, read16_delegate(FUNC(snowbros_state::moremorp_0a_read),this));
}
DRIVER_INIT_MEMBER(snowbros_state,cookbib2)
{
// UINT16 *HCROM = (UINT16*)memregion("maincpu")->base();
// UINT16 *PROTDATA = (UINT16*)memregion("user1")->base();
// int i;
// m_hyperpac_ram[0xf000/2] = 0x46fc;
// m_hyperpac_ram[0xf002/2] = 0x2700;
// verified on real hardware, need to move this to a file really
// static UINT16 cookbib2_mcu68k[] =
// {
// // moved to protdata.bin
// };
//for (i = 0;i < ARRAY_LENGTH(cookbib2_mcu68k);i++)
// m_hyperpac_ram[0xf000/2 + i] = cookbib2_mcu68k[i];
// for (i = 0;i < 0x200/2;i++)
// m_hyperpac_ram[0xf000/2 + i] = PROTDATA[i];
// trojan is actually buggy and gfx flicker like crazy
// but we can pause the system after bootup with HALT line of 68k to get the table before
// it goes nuts
// m_hyperpac_ram[0xf07a/2] = 0x4e73;
// m_hyperpac_ram[0xf000/2] = 0x4e73;
#if 0
/* interrupt wait loop? */
HCROM[0x014942/2] = 0x4eb9;
HCROM[0x014944/2] = 0x0004;
HCROM[0x014946/2] = 0x8000;
HCROM[0x014948/2] = 0x4e71;
/* interrupt wait loop? */
HCROM[0x014968/2] = 0x4eb9;
HCROM[0x01496a/2] = 0x0004;
HCROM[0x01496c/2] = 0x8100;
HCROM[0x01496e/2] = 0x4e71;
/* interrupt wait loop? */
HCROM[0x014560/2] = 0x4eb9;
HCROM[0x014562/2] = 0x0004;
HCROM[0x014564/2] = 0x8200;
HCROM[0x014566/2] = 0x4e71;
/* new code for interrupt wait */
HCROM[0x048000/2] = 0x4a79;
HCROM[0x048002/2] = 0x0010;
HCROM[0x048004/2] = 0x2462;
HCROM[0x048006/2] = 0x66f8;
HCROM[0x048008/2] = 0x4eb9;
HCROM[0x04800a/2] = 0x0004;
HCROM[0x04800c/2] = 0x8300;
HCROM[0x04800e/2] = 0x4e75;
/* new code for interrupt wait */
HCROM[0x048100/2] = 0x4a79;
HCROM[0x048102/2] = 0x0010;
HCROM[0x048104/2] = 0x2460;
HCROM[0x048106/2] = 0x66f8;
HCROM[0x048108/2] = 0x4eb9;
HCROM[0x04810a/2] = 0x0004;
HCROM[0x04810c/2] = 0x8300;
HCROM[0x04810e/2] = 0x4e75;
/* new code for interrupt wait */
HCROM[0x048200/2] = 0x4a79;
HCROM[0x048202/2] = 0x0010;
HCROM[0x048204/2] = 0x2490;
HCROM[0x048206/2] = 0x66f8;
HCROM[0x048208/2] = 0x4eb9;
HCROM[0x04820a/2] = 0x0004;
HCROM[0x04820c/2] = 0x8300;
HCROM[0x04820e/2] = 0x4e75;
/* put registers on stack */
HCROM[0x048300/2] = 0x48e7;
HCROM[0x048302/2] = 0xfffe;
/* wipe sprite ram (fill with 0x0002) */
/* put the address we want to write TO in A2 */
HCROM[0x048304/2] = 0x45f9;
HCROM[0x048306/2] = 0x0070;
HCROM[0x048308/2] = 0x0000;
/* put the number of words we want to clear into D0 */
HCROM[0x04830a/2] = 0x203c;
HCROM[0x04830c/2] = 0x0000;
HCROM[0x04830e/2] = 0x1000;
/* write 0x0002 to A2 */
HCROM[0x048310/2] = 0x34bc;
HCROM[0x048312/2] = 0x0002;
/* add 1 to write address a2 */
HCROM[0x048314/2] = 0xd5fc;
HCROM[0x048316/2] = 0x0000;
HCROM[0x048318/2] = 0x0002;
/* decrease counter d0 */
HCROM[0x04831a/2] = 0x5380;
/* compare d0 to 0 */
HCROM[0x04831c/2] = 0x0c80;
HCROM[0x04831e/2] = 0x0000;
HCROM[0x048320/2] = 0x0000;
/* if its not 0 then branch back */
HCROM[0x048322/2] = 0x66ec;
/* ram has been wiped */
/* put the address we want to read protection data in A2 */
HCROM[0x048324/2] = 0x45f9;
HCROM[0x048326/2] = 0x0010;
// HCROM[0x048328/2] = 0xf000;
// HCROM[0x048328/2] = 0xf000+0xb4;
HCROM[0x048328/2] = 0xf000+0xb4+0xb4;
/* put the address of spriteram in A0 */
HCROM[0x04832a/2] = 0x41f9;
HCROM[0x04832c/2] = 0x0070;
HCROM[0x04832e/2] = 0x0000;
/* put the number of rows into D3 */
HCROM[0x048330/2] = 0x263c;
HCROM[0x048332/2] = 0x0000;
HCROM[0x048334/2] = 0x0012;
/* put the y co-ordinate of rows into D6 */
HCROM[0x048336/2] = 0x2c3c;
HCROM[0x048338/2] = 0x0000;
HCROM[0x04833a/2] = 0x0014;
/* put the number of bytes per row into D2 */
HCROM[0x04833c/2] = 0x243c;
HCROM[0x04833e/2] = 0x0000;
HCROM[0x048340/2] = 0x000a;
/* put the x co-ordinate of rows into D5 */
HCROM[0x048342/2] = 0x2a3c;
HCROM[0x048344/2] = 0x0000;
HCROM[0x048346/2] = 0x0010;
// move content of a2 to d4 (byte)
HCROM[0x048348/2] = 0x1812;
HCROM[0x04834a/2] = 0xe84c; // shift d4 right by 4
HCROM[0x04834c/2] = 0x0244; // mask with 0x000f
HCROM[0x04834e/2] = 0x000f; //
/* jump to character draw to draw first bit */
HCROM[0x048350/2] = 0x4eb9;
HCROM[0x048352/2] = 0x0004;
HCROM[0x048354/2] = 0x8600;
// increase x-cord
HCROM[0x048356/2] = 0x0645;
HCROM[0x048358/2] = 0x000a;
/* add 0x10 to draw address a0 */
HCROM[0x04835a/2] = 0xd1fc;
HCROM[0x04835c/2] = 0x0000;
HCROM[0x04835e/2] = 0x0010;
// move content of a2 to d4 (byte)
HCROM[0x048360/2] = 0x1812;
HCROM[0x048362/2] = 0x0244; // mask with 0x000f
HCROM[0x048364/2] = 0x000f; //
/* jump to character draw to draw second bit */
HCROM[0x048366/2] = 0x4eb9;
HCROM[0x048368/2] = 0x0004;
HCROM[0x04836a/2] = 0x8600;
// increase x-cord
HCROM[0x04836c/2] = 0x0645;
HCROM[0x04836e/2] = 0x000c;
/* add 0x10 to draw address a0 */
HCROM[0x048370/2] = 0xd1fc;
HCROM[0x048372/2] = 0x0000;
HCROM[0x048374/2] = 0x0010;
// newcode
/* add 1 to read address a2 */
HCROM[0x048376/2] = 0xd5fc;
HCROM[0x048378/2] = 0x0000;
HCROM[0x04837a/2] = 0x0001;
/* decrease counter d2 (row count)*/
HCROM[0x04837c/2] = 0x5382;
/* compare d2 to 0 */
HCROM[0x04837e/2] = 0x0c82;
HCROM[0x048380/2] = 0x0000;
HCROM[0x048382/2] = 0x0000;
/* if its not 0 then branch back */
HCROM[0x048384/2] = 0x66c2;
// increase y-cord d6
HCROM[0x048386/2] = 0x0646;
HCROM[0x048388/2] = 0x000c;
/* decrease counter d3 */
HCROM[0x04838a/2] = 0x5383;
/* compare d3 to 0 */
HCROM[0x04838c/2] = 0x0c83;
HCROM[0x04838e/2] = 0x0000;
HCROM[0x048390/2] = 0x0000;
/* if its not 0 then branch back */
HCROM[0x048392/2] = 0x66a8;
/* get back registers from stack*/
HCROM[0x048394/2] = 0x4cdf;
HCROM[0x048396/2] = 0x7fff;
/* rts */
HCROM[0x048398/2] = 0x4e75;
/* Draw a character! */
/* D6 = y-coordinate
D5 = x-coordinate
D4 = value to draw
A0 = spriteram base */
// 0002 0002 0002 0010 00xx 00yy 00nn 000n
// 357c 0020 000c
// 337c = a1
// move.w #$20, (#$c, A2)
HCROM[0x048600/2] = 0x317c;
HCROM[0x048602/2] = 0x0010;
HCROM[0x048604/2] = 0x0006;
HCROM[0x048606/2] = 0x3145;
HCROM[0x048608/2] = 0x0008;
HCROM[0x04860a/2] = 0x3146;
HCROM[0x04860c/2] = 0x000a;
/* get true value */
/* put lookuptable address in A3 */
HCROM[0x04860e/2] = 0x47f9;
HCROM[0x048610/2] = 0x0004;
HCROM[0x048612/2] = 0x8800;
HCROM[0x048614/2] = 0x3004; // d4 -> d0
HCROM[0x048616/2] = 0xe348;
HCROM[0x048618/2] = 0x3173;
HCROM[0x04861a/2] = 0x0000;
HCROM[0x04861c/2] = 0x000c;
/* not value */
HCROM[0x04861e/2] = 0x317c;
HCROM[0x048620/2] = 0x0000;
HCROM[0x048622/2] = 0x000e;
/* rts */
HCROM[0x048624/2] = 0x4e75;
/* table used for lookup by the draw routine to get real tile numbers */
HCROM[0x048800/2] = 0x0010;
HCROM[0x048802/2] = 0x0011;
HCROM[0x048804/2] = 0x0012;
HCROM[0x048806/2] = 0x0013;
HCROM[0x048808/2] = 0x0014;
HCROM[0x04880a/2] = 0x0015;
HCROM[0x04880c/2] = 0x0016;
HCROM[0x04880e/2] = 0x0017;
HCROM[0x048810/2] = 0x0018;
HCROM[0x048812/2] = 0x0019;
HCROM[0x048814/2] = 0x0021;
HCROM[0x048816/2] = 0x0022;
HCROM[0x048818/2] = 0x0023;
HCROM[0x04881a/2] = 0x0024;
HCROM[0x04881c/2] = 0x0025;
HCROM[0x04881e/2] = 0x0026;
/*
10 0
11 1
12 2
13 3
14 4
15 5
16 6
17 7
18 8
19 9
21 a
22 b
23 c
24 d
25 e
26 f
*/
{
FILE *fp;
fp=fopen("cookie", "w+b");
if (fp)
{
fwrite(HCROM, 0x80000, 1, fp);
fclose(fp);
}
}
#endif
}
@ -2906,7 +2631,7 @@ DRIVER_INIT_MEMBER(snowbros_state,snowbro3)
READ16_MEMBER(snowbros_state::_3in1_read)
{
return 0x0a0a;
return 0x000a;
}
DRIVER_INIT_MEMBER(snowbros_state,3in1semi)
@ -2914,20 +2639,6 @@ DRIVER_INIT_MEMBER(snowbros_state,3in1semi)
m_maincpu->space(AS_PROGRAM).install_read_handler(0x200000, 0x200001, read16_delegate(FUNC(snowbros_state::_3in1_read),this));
}
DRIVER_INIT_MEMBER(snowbros_state,mcheonru_hack)
{
m_maincpu->space(AS_PROGRAM).install_read_handler(0x200000, 0x200001, read16_delegate(FUNC(snowbros_state::_3in1_read),this));
UINT16 *HCROM = (UINT16*)memregion("maincpu")->base();
HCROM[0x68/ 2] = 0x0007;
HCROM[0x6a/ 2] = 0xfe00;
HCROM[0x6c/ 2] = 0x0007;
HCROM[0x6e/ 2] = 0xff1a;
HCROM[0x70/ 2] = 0x0007;
HCROM[0x72/ 2] = 0xff4c;
}
READ16_MEMBER(snowbros_state::cookbib3_read)
{
@ -3007,9 +2718,9 @@ GAME( 1997, pzlbreak, 0, semiprot, pzlbreak, snowbros_state, pzlbreak
GAME( 1997, suhosong, 0, semiprot, suhosong, driver_device, 0, ROT0, "SemiCom", "Su Ho Seong", GAME_SUPPORTS_SAVE )
GAME( 1997, twinkle, 0, semiprot, twinkle, driver_device, 0, ROT0, "SemiCom", "Twinkle", GAME_SUPPORTS_SAVE )
GAME( 1998, 3in1semi, 0, semiprot, moremore, snowbros_state, 3in1semi, ROT0, "SemiCom", "XESS - The New Revolution (SemiCom 3-in-1)", GAME_SUPPORTS_SAVE )
GAME( 1999, mcheonru, 0, semiprot, moremore, snowbros_state, mcheonru_hack, ROT0, "SemiCom", "Ma Cheon Ru", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
GAME( 1999, moremore, 0, semiprot, moremore, snowbros_state, moremorp, ROT0, "SemiCom / Exit", "More More", GAME_SUPPORTS_SAVE )
GAME( 1999, moremorp, 0, semiprot, moremore, snowbros_state, moremorp, ROT0, "SemiCom / Exit", "More More Plus", GAME_SUPPORTS_SAVE )
GAME( 1999, mcheonru, 0, semiprot, mcheonru, snowbros_state, 3in1semi, ROT0, "SemiCom", "Ma Cheon Ru", GAME_SUPPORTS_SAVE ) // the 'electrified maze' minigame seems to be broken, controls don't work, is it an original game bug?
GAME( 1999, moremore, 0, semiprot, moremore, snowbros_state, 3in1semi, ROT0, "SemiCom / Exit", "More More", GAME_SUPPORTS_SAVE )
GAME( 1999, moremorp, 0, semiprot, moremore, snowbros_state, 3in1semi, ROT0, "SemiCom / Exit", "More More Plus", GAME_SUPPORTS_SAVE )
// This is very similar to the SemiCom titles, but unprotected.
GAME( 2002, 4in1boot, 0, _4in1, 4in1boot, snowbros_state, 4in1boot, ROT0, "K1 Soft", "Puzzle King (PacMan 2, Tetris, HyperMan 2, Snow Bros.)" , GAME_SUPPORTS_SAVE )

View File

@ -42,7 +42,6 @@ public:
DECLARE_WRITE8_MEMBER(prot_io_w);
DECLARE_WRITE16_MEMBER(twinadv_68000_sound_w);
DECLARE_READ16_MEMBER(sb3_sound_r);
DECLARE_READ16_MEMBER(moremorp_0a_read);
DECLARE_READ16_MEMBER(_4in1_02_read);
DECLARE_READ16_MEMBER(_3in1_read);
DECLARE_READ16_MEMBER(cookbib3_read);
@ -50,10 +49,7 @@ public:
DECLARE_WRITE16_MEMBER(sb3_sound_w);
DECLARE_READ16_MEMBER(toto_read);
DECLARE_DRIVER_INIT(mcheonru_hack);
DECLARE_DRIVER_INIT(pzlbreak);
DECLARE_DRIVER_INIT(moremorp);
DECLARE_DRIVER_INIT(snowbro3);
DECLARE_DRIVER_INIT(cookbib3);
DECLARE_DRIVER_INIT(4in1boot);