mirror of
https://github.com/holub/mame
synced 2025-10-05 08:41:31 +03:00
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:
parent
aceb75fe8c
commit
1ec8c616eb
@ -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 )
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user