Previous 199869 Revisions Next

r37170 Monday 13th April, 2015 at 23:39:09 UTC by David Haywood
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)
[src/mame/drivers]snowbros.c
[src/mame/includes]snowbros.h

trunk/src/mame/drivers/snowbros.c
r245681r245682
11111111   PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
11121112INPUT_PORTS_END
11131113
1114
1115static INPUT_PORTS_START( mcheonru )
1116   PORT_START("DSW1")  /* 500000.w */
1117   PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) )
1118   PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
1119   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1120   PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
1121   PORT_DIPSETTING(      0x0002, DEF_STR( Off ) )
1122   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1123   PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
1124   PORT_DIPSETTING(      0x0004, DEF_STR( Off ) )
1125   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1126   PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
1127   PORT_DIPSETTING(      0x0008, DEF_STR( Off ) )
1128   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1129   PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
1130   PORT_DIPSETTING(      0x0010, DEF_STR( Off ) )
1131   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1132   PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
1133   PORT_DIPSETTING(      0x0020, DEF_STR( Off ) )
1134   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1135   PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
1136   PORT_DIPSETTING(      0x0040, DEF_STR( Off ) )
1137   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1138   PORT_SERVICE_DIPLOC(  0x0080, IP_ACTIVE_LOW, "SW1:8" )
1139   PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
1140   PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
1141   PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
1142   PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
1143   PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)
1144   PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)
1145   PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1)
1146   PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1147
1148   PORT_START("DSW2")  /* 500002.w */
1149   PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) )
1150   PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
1151   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1152   PORT_DIPNAME( 0x0002, 0x0002, "Tile Type" )
1153   PORT_DIPSETTING(      0x0002, "Picture" )
1154   PORT_DIPSETTING(      0x0000, "Traditional" )
1155   PORT_DIPNAME( 0x0004, 0x0004, "Mini Game Frequency" )
1156   PORT_DIPSETTING(      0x0004, "Every 3 Rounds" )
1157   PORT_DIPSETTING(      0x0000, "Every Round" )
1158   PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
1159   PORT_DIPSETTING(      0x0008, DEF_STR( Off ) )
1160   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1161   PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
1162   PORT_DIPSETTING(      0x0010, DEF_STR( Off ) )
1163   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1164   PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
1165   PORT_DIPSETTING(      0x0020, DEF_STR( Off ) )
1166   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1167   PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
1168   PORT_DIPSETTING(      0x0040, DEF_STR( Off ) )
1169   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1170   PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
1171   PORT_DIPSETTING(      0x0080, DEF_STR( Off ) )
1172   PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1173   PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
1174   PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
1175   PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
1176   PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
1177   PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
1178   PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)
1179   PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)
1180   PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1181
1182   PORT_START("SYSTEM")    /* 500004.w */
1183   PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1184   PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_START1 )
1185   PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_START2 )
1186   PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_COIN1 )
1187   PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_COIN2 )
1188   PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1189   PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1190   PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1191   PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1192INPUT_PORTS_END
1193
11141194static INPUT_PORTS_START( twinkle )
11151195   PORT_START("DSW1")  /* 500000.w */
11161196   PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Demo_Sounds ) )  PORT_DIPLOCATION("SW1:1")
r245681r245682
22902370   ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
22912371   ROM_LOAD16_BYTE( "u52",  0x00001, 0x40000, CRC(63fd8a9b) SHA1(53054d8072322842c32625ab38e7d62dc0e75627) )
22922372   ROM_LOAD16_BYTE( "u74",  0x00000, 0x40000, CRC(3edb17ce) SHA1(0c6ea239f57eca114d75c173b77b2c8ef43d63a2) )
2293   ROM_LOAD( "hackprot", 0x7fe00, 0x200 , CRC(2c685396) SHA1(c3bc7940bb2b4394a6b6663b92a656995f6011fe) ) // hack, decrypted data from 3in1semi
22942373
22952374   ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
22962375   ROM_LOAD( "u35", 0x00000, 0x10000 , CRC(79e965b4) SHA1(268df67ec6ea828ae01a6e4d2da9ad2a08a837f1) )
r245681r245682
23012380   ROM_REGION16_BE( 0x200, "user1", 0 ) /* Data from Shared RAM */
23022381   /* this is not a real rom but instead the data extracted from
23032382      shared ram, the MCU puts it there */
2304   ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200 , NO_DUMP )
2383   ROM_LOAD( "protdata.bin", 0x00000, 0x200 , CRC(d61f4f07) SHA1(29485bce6e3a7ed2ace540bb81fe028456ae1ae9) )
23052384
23062385   ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
23072386   ROM_LOAD( "u14", 0x00000, 0x40000, CRC(28a62d23) SHA1(24dbe6229647032599e02225de57650205dce5c3) )
r245681r245682
24902569   ROM_LOAD( "su_ho_sung.ua6", 0x100000, 0x80000, CRC(92fea02c) SHA1(946c7bf55354875a1581ce484cb185b640f74166) )
24912570ROM_END
24922571
2493READ16_MEMBER(snowbros_state::moremorp_0a_read)
2494{
2495   return 0x000a;
2496}
24972572
2498DRIVER_INIT_MEMBER(snowbros_state,moremorp)
2499{
2500//  UINT16 *PROTDATA = (UINT16*)memregion("user1")->base();
2501//  int i;
25022573
2503//  for (i = 0;i < 0x200/2;i++)
2504//      m_hyperpac_ram[0xf000/2 + i] = PROTDATA[i];
2505
2506   /* explicit check in the code */
2507   m_maincpu->space(AS_PROGRAM).install_read_handler(0x200000, 0x200001, read16_delegate(FUNC(snowbros_state::moremorp_0a_read),this));
2508}
2509
2510
25112574DRIVER_INIT_MEMBER(snowbros_state,cookbib2)
25122575{
2513//  UINT16 *HCROM = (UINT16*)memregion("maincpu")->base();
2514//  UINT16 *PROTDATA = (UINT16*)memregion("user1")->base();
2515//  int i;
2516//  m_hyperpac_ram[0xf000/2] = 0x46fc;
2517//  m_hyperpac_ram[0xf002/2] = 0x2700;
2518
2519// verified on real hardware, need to move this to a file really
2520
2521//  static UINT16 cookbib2_mcu68k[] =
2522//  {
2523//      // moved to protdata.bin
2524//  };
2525
2526
2527
2528
2529//for (i = 0;i < ARRAY_LENGTH(cookbib2_mcu68k);i++)
2530//      m_hyperpac_ram[0xf000/2 + i] = cookbib2_mcu68k[i];
2531
2532//  for (i = 0;i < 0x200/2;i++)
2533//      m_hyperpac_ram[0xf000/2 + i] = PROTDATA[i];
2534
2535
2536   // trojan is actually buggy and gfx flicker like crazy
2537   // but we can pause the system after bootup with HALT line of 68k to get the table before
2538   // it goes nuts
2539
2540   //  m_hyperpac_ram[0xf07a/2] = 0x4e73;
2541   //  m_hyperpac_ram[0xf000/2] = 0x4e73;
2542
2543#if 0
2544
2545   /* interrupt wait loop? */
2546   HCROM[0x014942/2] = 0x4eb9;
2547   HCROM[0x014944/2] = 0x0004;
2548   HCROM[0x014946/2] = 0x8000;
2549   HCROM[0x014948/2] = 0x4e71;
2550
2551   /* interrupt wait loop? */
2552   HCROM[0x014968/2] = 0x4eb9;
2553   HCROM[0x01496a/2] = 0x0004;
2554   HCROM[0x01496c/2] = 0x8100;
2555   HCROM[0x01496e/2] = 0x4e71;
2556
2557   /* interrupt wait loop? */
2558   HCROM[0x014560/2] = 0x4eb9;
2559   HCROM[0x014562/2] = 0x0004;
2560   HCROM[0x014564/2] = 0x8200;
2561   HCROM[0x014566/2] = 0x4e71;
2562
2563   /* new code for interrupt wait */
2564   HCROM[0x048000/2] = 0x4a79;
2565   HCROM[0x048002/2] = 0x0010;
2566   HCROM[0x048004/2] = 0x2462;
2567   HCROM[0x048006/2] = 0x66f8;
2568   HCROM[0x048008/2] = 0x4eb9;
2569   HCROM[0x04800a/2] = 0x0004;
2570   HCROM[0x04800c/2] = 0x8300;
2571   HCROM[0x04800e/2] = 0x4e75;
2572
2573   /* new code for interrupt wait */
2574   HCROM[0x048100/2] = 0x4a79;
2575   HCROM[0x048102/2] = 0x0010;
2576   HCROM[0x048104/2] = 0x2460;
2577   HCROM[0x048106/2] = 0x66f8;
2578   HCROM[0x048108/2] = 0x4eb9;
2579   HCROM[0x04810a/2] = 0x0004;
2580   HCROM[0x04810c/2] = 0x8300;
2581   HCROM[0x04810e/2] = 0x4e75;
2582
2583   /* new code for interrupt wait */
2584   HCROM[0x048200/2] = 0x4a79;
2585   HCROM[0x048202/2] = 0x0010;
2586   HCROM[0x048204/2] = 0x2490;
2587   HCROM[0x048206/2] = 0x66f8;
2588   HCROM[0x048208/2] = 0x4eb9;
2589   HCROM[0x04820a/2] = 0x0004;
2590   HCROM[0x04820c/2] = 0x8300;
2591   HCROM[0x04820e/2] = 0x4e75;
2592
2593
2594
2595   /* put registers on stack */
2596   HCROM[0x048300/2] = 0x48e7;
2597   HCROM[0x048302/2] = 0xfffe;
2598
2599   /* wipe sprite ram (fill with 0x0002) */
2600
2601   /* put the address we want to write TO in A2 */
2602   HCROM[0x048304/2] = 0x45f9;
2603   HCROM[0x048306/2] = 0x0070;
2604   HCROM[0x048308/2] = 0x0000;
2605
2606   /* put the number of words we want to clear into D0 */
2607   HCROM[0x04830a/2] = 0x203c;
2608   HCROM[0x04830c/2] = 0x0000;
2609   HCROM[0x04830e/2] = 0x1000;
2610
2611   /* write 0x0002 to A2 */
2612   HCROM[0x048310/2] = 0x34bc;
2613   HCROM[0x048312/2] = 0x0002;
2614
2615
2616   /* add 1 to write address a2 */
2617   HCROM[0x048314/2] = 0xd5fc;
2618   HCROM[0x048316/2] = 0x0000;
2619   HCROM[0x048318/2] = 0x0002;
2620
2621   /* decrease counter d0 */
2622   HCROM[0x04831a/2] = 0x5380;
2623
2624   /* compare d0 to 0 */
2625   HCROM[0x04831c/2] = 0x0c80;
2626   HCROM[0x04831e/2] = 0x0000;
2627   HCROM[0x048320/2] = 0x0000;
2628
2629   /* if its not 0 then branch back */
2630   HCROM[0x048322/2] = 0x66ec;
2631
2632   /* ram has been wiped */
2633
2634   /* put the address we want to read protection data  in A2 */
2635   HCROM[0x048324/2] = 0x45f9;
2636   HCROM[0x048326/2] = 0x0010;
2637//  HCROM[0x048328/2] = 0xf000;
2638//  HCROM[0x048328/2] = 0xf000+0xb4;
2639   HCROM[0x048328/2] = 0xf000+0xb4+0xb4;
2640
2641   /* put the address of spriteram  in A0 */
2642   HCROM[0x04832a/2] = 0x41f9;
2643   HCROM[0x04832c/2] = 0x0070;
2644   HCROM[0x04832e/2] = 0x0000;
2645
2646   /* put the number of rows into D3 */
2647   HCROM[0x048330/2] = 0x263c;
2648   HCROM[0x048332/2] = 0x0000;
2649   HCROM[0x048334/2] = 0x0012;
2650
2651   /* put the y co-ordinate of rows into D6 */
2652   HCROM[0x048336/2] = 0x2c3c;
2653   HCROM[0x048338/2] = 0x0000;
2654   HCROM[0x04833a/2] = 0x0014;
2655
2656   /* put the number of bytes per row into D2 */
2657   HCROM[0x04833c/2] = 0x243c;
2658   HCROM[0x04833e/2] = 0x0000;
2659   HCROM[0x048340/2] = 0x000a;
2660
2661   /* put the x co-ordinate of rows into D5 */
2662   HCROM[0x048342/2] = 0x2a3c;
2663   HCROM[0x048344/2] = 0x0000;
2664   HCROM[0x048346/2] = 0x0010;
2665
2666   // move content of a2 to d4 (byte)
2667   HCROM[0x048348/2] = 0x1812;
2668
2669   HCROM[0x04834a/2] = 0xe84c; // shift d4 right by 4
2670
2671   HCROM[0x04834c/2] = 0x0244; // mask with 0x000f
2672   HCROM[0x04834e/2] = 0x000f; //
2673
2674   /* jump to character draw to draw first bit */
2675   HCROM[0x048350/2] = 0x4eb9;
2676   HCROM[0x048352/2] = 0x0004;
2677   HCROM[0x048354/2] = 0x8600;
2678
2679   // increase x-cord
2680   HCROM[0x048356/2] = 0x0645;
2681   HCROM[0x048358/2] = 0x000a;
2682
2683
2684   /* add 0x10 to draw address a0 */
2685   HCROM[0x04835a/2] = 0xd1fc;
2686   HCROM[0x04835c/2] = 0x0000;
2687   HCROM[0x04835e/2] = 0x0010;
2688
2689
2690   // move content of a2 to d4 (byte)
2691   HCROM[0x048360/2] = 0x1812;
2692
2693   HCROM[0x048362/2] = 0x0244; // mask with 0x000f
2694   HCROM[0x048364/2] = 0x000f; //
2695
2696   /* jump to character draw to draw second bit */
2697   HCROM[0x048366/2] = 0x4eb9;
2698   HCROM[0x048368/2] = 0x0004;
2699   HCROM[0x04836a/2] = 0x8600;
2700
2701   // increase x-cord
2702   HCROM[0x04836c/2] = 0x0645;
2703   HCROM[0x04836e/2] = 0x000c;
2704
2705   /* add 0x10 to draw address a0 */
2706   HCROM[0x048370/2] = 0xd1fc;
2707   HCROM[0x048372/2] = 0x0000;
2708   HCROM[0x048374/2] = 0x0010;
2709
2710// newcode
2711   /* add 1 to read address a2 */
2712   HCROM[0x048376/2] = 0xd5fc;
2713   HCROM[0x048378/2] = 0x0000;
2714   HCROM[0x04837a/2] = 0x0001;
2715
2716   /* decrease counter d2 (row count)*/
2717   HCROM[0x04837c/2] = 0x5382;
2718
2719   /* compare d2 to 0 */
2720   HCROM[0x04837e/2] = 0x0c82;
2721   HCROM[0x048380/2] = 0x0000;
2722   HCROM[0x048382/2] = 0x0000;
2723
2724   /* if its not 0 then branch back */
2725   HCROM[0x048384/2] = 0x66c2;
2726
2727   // increase y-cord d6
2728   HCROM[0x048386/2] = 0x0646;
2729   HCROM[0x048388/2] = 0x000c;
2730
2731   /* decrease counter d3 */
2732   HCROM[0x04838a/2] = 0x5383;
2733
2734   /* compare d3 to 0 */
2735   HCROM[0x04838c/2] = 0x0c83;
2736   HCROM[0x04838e/2] = 0x0000;
2737   HCROM[0x048390/2] = 0x0000;
2738
2739   /* if its not 0 then branch back */
2740   HCROM[0x048392/2] = 0x66a8;
2741
2742   /* get back registers from stack*/
2743   HCROM[0x048394/2] = 0x4cdf;
2744   HCROM[0x048396/2] = 0x7fff;
2745
2746   /* rts */
2747   HCROM[0x048398/2] = 0x4e75;
2748
2749   /* Draw a character! */
2750   /* D6 = y-coordinate
2751      D5 = x-coordinate
2752      D4 = value to draw
2753
2754      A0 = spriteram base */
2755
2756   // 0002 0002 0002 0010 00xx 00yy 00nn 000n
2757
2758   // 357c 0020 000c
2759   // 337c = a1
2760   // move.w #$20, (#$c, A2)
2761
2762   HCROM[0x048600/2] = 0x317c;
2763   HCROM[0x048602/2] = 0x0010;
2764   HCROM[0x048604/2] = 0x0006;
2765
2766   HCROM[0x048606/2] = 0x3145;
2767   HCROM[0x048608/2] = 0x0008;
2768
2769   HCROM[0x04860a/2] = 0x3146;
2770   HCROM[0x04860c/2] = 0x000a;
2771
2772/* get true value */
2773
2774   /* put lookuptable address in  A3 */
2775   HCROM[0x04860e/2] = 0x47f9;
2776   HCROM[0x048610/2] = 0x0004;
2777   HCROM[0x048612/2] = 0x8800;
2778
2779   HCROM[0x048614/2] = 0x3004; // d4 -> d0
2780   HCROM[0x048616/2] = 0xe348;
2781
2782   HCROM[0x048618/2] = 0x3173;
2783   HCROM[0x04861a/2] = 0x0000;
2784   HCROM[0x04861c/2] = 0x000c;
2785
2786/* not value */
2787
2788   HCROM[0x04861e/2] = 0x317c;
2789   HCROM[0x048620/2] = 0x0000;
2790   HCROM[0x048622/2] = 0x000e;
2791
2792   /* rts */
2793   HCROM[0x048624/2] = 0x4e75;
2794
2795
2796   /* table used for lookup by the draw routine to get real tile numbers */
2797
2798   HCROM[0x048800/2] = 0x0010;
2799   HCROM[0x048802/2] = 0x0011;
2800   HCROM[0x048804/2] = 0x0012;
2801   HCROM[0x048806/2] = 0x0013;
2802   HCROM[0x048808/2] = 0x0014;
2803   HCROM[0x04880a/2] = 0x0015;
2804   HCROM[0x04880c/2] = 0x0016;
2805   HCROM[0x04880e/2] = 0x0017;
2806   HCROM[0x048810/2] = 0x0018;
2807   HCROM[0x048812/2] = 0x0019;
2808   HCROM[0x048814/2] = 0x0021;
2809   HCROM[0x048816/2] = 0x0022;
2810   HCROM[0x048818/2] = 0x0023;
2811   HCROM[0x04881a/2] = 0x0024;
2812   HCROM[0x04881c/2] = 0x0025;
2813   HCROM[0x04881e/2] = 0x0026;
2814
2815
2816
2817/*
281810 0
281911 1
282012 2
282113 3
282214 4
282315 5
282416 6
282517 7
282618 8
282719 9
282821 a
282922 b
283023 c
283124 d
283225 e
283326 f
2834*/
2835
2836
2837
2838
2839
2840   {
2841      FILE *fp;
2842
2843      fp=fopen("cookie", "w+b");
2844      if (fp)
2845      {
2846         fwrite(HCROM, 0x80000, 1, fp);
2847         fclose(fp);
2848      }
2849   }
2850#endif
28512576}
28522577
28532578
r245681r245682
29062631
29072632READ16_MEMBER(snowbros_state::_3in1_read)
29082633{
2909   return 0x0a0a;
2634   return 0x000a;
29102635}
29112636
29122637DRIVER_INIT_MEMBER(snowbros_state,3in1semi)
r245681r245682
29142639   m_maincpu->space(AS_PROGRAM).install_read_handler(0x200000, 0x200001, read16_delegate(FUNC(snowbros_state::_3in1_read),this));
29152640}
29162641
2917DRIVER_INIT_MEMBER(snowbros_state,mcheonru_hack)
2918{
2919   m_maincpu->space(AS_PROGRAM).install_read_handler(0x200000, 0x200001, read16_delegate(FUNC(snowbros_state::_3in1_read),this));
2920   
2921   UINT16 *HCROM = (UINT16*)memregion("maincpu")->base();
29222642
2923   HCROM[0x68/ 2] = 0x0007;
2924   HCROM[0x6a/ 2] = 0xfe00;
2925   HCROM[0x6c/ 2] = 0x0007;
2926   HCROM[0x6e/ 2] = 0xff1a;
2927   HCROM[0x70/ 2] = 0x0007;
2928   HCROM[0x72/ 2] = 0xff4c;
2929
2930}
2931
29322643READ16_MEMBER(snowbros_state::cookbib3_read)
29332644{
29342645   return 0x2a2a;
r245681r245682
30072718GAME( 1997, suhosong, 0,        semiprot,     suhosong, driver_device,  0,        ROT0, "SemiCom",              "Su Ho Seong", GAME_SUPPORTS_SAVE )
30082719GAME( 1997, twinkle,  0,        semiprot,     twinkle,  driver_device,  0,        ROT0, "SemiCom",              "Twinkle", GAME_SUPPORTS_SAVE )
30092720GAME( 1998, 3in1semi, 0,        semiprot,     moremore, snowbros_state, 3in1semi, ROT0, "SemiCom",              "XESS - The New Revolution (SemiCom 3-in-1)", GAME_SUPPORTS_SAVE )
3010GAME( 1999, mcheonru, 0,        semiprot,     moremore, snowbros_state, mcheonru_hack, ROT0, "SemiCom",              "Ma Cheon Ru", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
3011GAME( 1999, moremore, 0,        semiprot,     moremore, snowbros_state, moremorp, ROT0, "SemiCom / Exit",       "More More", GAME_SUPPORTS_SAVE )
3012GAME( 1999, moremorp, 0,        semiprot,     moremore, snowbros_state, moremorp, ROT0, "SemiCom / Exit",       "More More Plus", GAME_SUPPORTS_SAVE )
2721GAME( 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?
2722GAME( 1999, moremore, 0,        semiprot,     moremore, snowbros_state, 3in1semi, ROT0, "SemiCom / Exit",       "More More", GAME_SUPPORTS_SAVE )
2723GAME( 1999, moremorp, 0,        semiprot,     moremore, snowbros_state, 3in1semi, ROT0, "SemiCom / Exit",       "More More Plus", GAME_SUPPORTS_SAVE )
30132724// This is very similar to the SemiCom titles, but unprotected.
30142725GAME( 2002, 4in1boot, 0,        _4in1,    4in1boot, snowbros_state, 4in1boot, ROT0, "K1 Soft", "Puzzle King (PacMan 2, Tetris, HyperMan 2, Snow Bros.)" , GAME_SUPPORTS_SAVE )
30152726
trunk/src/mame/includes/snowbros.h
r245681r245682
4242   DECLARE_WRITE8_MEMBER(prot_io_w);
4343   DECLARE_WRITE16_MEMBER(twinadv_68000_sound_w);
4444   DECLARE_READ16_MEMBER(sb3_sound_r);
45   DECLARE_READ16_MEMBER(moremorp_0a_read);
4645   DECLARE_READ16_MEMBER(_4in1_02_read);
4746   DECLARE_READ16_MEMBER(_3in1_read);
4847   DECLARE_READ16_MEMBER(cookbib3_read);
r245681r245682
5049   DECLARE_WRITE16_MEMBER(sb3_sound_w);
5150   DECLARE_READ16_MEMBER(toto_read);
5251
53   DECLARE_DRIVER_INIT(mcheonru_hack);
54
5552   DECLARE_DRIVER_INIT(pzlbreak);
56   DECLARE_DRIVER_INIT(moremorp);
5753   DECLARE_DRIVER_INIT(snowbro3);
5854   DECLARE_DRIVER_INIT(cookbib3);
5955   DECLARE_DRIVER_INIT(4in1boot);


Previous 199869 Revisions Next


© 1997-2024 The MAME Team