Previous 199869 Revisions Next

r18405 Wednesday 10th October, 2012 at 10:36:04 UTC by hap
Removed protection hack patches and emulated protection routines for Caveman Ninja [IQ_132 & JackC]
[src/mame/drivers]cninja.c
[src/mame/machine]decoprot.c

trunk/src/mame/drivers/cninja.c
r18404r18405
5656
5757WRITE16_MEMBER(cninja_state::cninja_sound_w)
5858{
59
6059   soundlatch_byte_w(space, 0, data & 0xff);
6160   m_audiocpu->set_input_line(0, HOLD_LINE);
6261}
6362
6463WRITE16_MEMBER(cninja_state::stoneage_sound_w)
6564{
66
6765   soundlatch_byte_w(space, 0, data & 0xff);
6866   m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
6967}
r18404r18405
7674
7775READ16_MEMBER(cninja_state::cninja_irq_r)
7876{
79
8077   switch (offset)
8178   {
8279
r18404r18405
9592
9693WRITE16_MEMBER(cninja_state::cninja_irq_w)
9794{
98
9995   switch (offset)
10096   {
10197   case 0:
r18404r18405
721717
722718WRITE8_MEMBER(cninja_state::sound_bankswitch_w)
723719{
724
725720   /* the second OKIM6295 ROM is bank switched */
726721   m_oki2->set_bank_base((data & 1) * 0x40000);
727722}
r18404r18405
869864
870865void cninja_state::machine_start()
871866{
872
873867   save_item(NAME(m_scanline));
874868   save_item(NAME(m_irq_mask));
875869
r18404r18405
878872
879873void cninja_state::machine_reset()
880874{
881
882875   m_scanline = 0;
883876   m_irq_mask = 0;
884877}
r18404r18405
951944   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
952945MACHINE_CONFIG_END
953946
947
954948static MACHINE_CONFIG_START( stoneage, cninja_state )
955949
956950   /* basic machine hardware */
r18404r18405
10981092   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
10991093MACHINE_CONFIG_END
11001094
1095
11011096static MACHINE_CONFIG_START( robocop2, cninja_state )
11021097
11031098   /* basic machine hardware */
r18404r18405
11531148   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.60)
11541149MACHINE_CONFIG_END
11551150
1151
11561152static MACHINE_CONFIG_START( mutantf, cninja_state )
11571153
11581154   /* basic machine hardware */
r18404r18405
20512047
20522048/**********************************************************************************/
20532049
2054static void cninja_patch( running_machine &machine )
2055{
2056   UINT16 *RAM = (UINT16 *)machine.root_device().memregion("maincpu")->base();
2057   int i;
2058
2059   for (i = 0; i < 0x80000 / 2; i++)
2060   {
2061      int aword = RAM[i];
2062
2063      if (aword == 0x66ff || aword == 0x67ff)
2064      {
2065         UINT16 doublecheck = RAM[i - 4];
2066
2067         /* Cmpi + btst controlling opcodes */
2068         if (doublecheck == 0xc39 || doublecheck == 0x839)
2069         {
2070            RAM[i]     = 0x4e71;
2071            RAM[i - 1] = 0x4e71;
2072            RAM[i - 2] = 0x4e71;
2073            RAM[i - 3] = 0x4e71;
2074            RAM[i - 4] = 0x4e71;
2075         }
2076      }
2077   }
2078}
2079
2080/**********************************************************************************/
2081
20822050DRIVER_INIT_MEMBER(cninja_state,cninja)
20832051{
20842052   machine().device("maincpu")->memory().space(AS_PROGRAM).install_write_handler(0x1bc0a8, 0x1bc0a9, write16_delegate(FUNC(cninja_state::cninja_sound_w),this));
2085   cninja_patch(machine());
20862053}
20872054
20882055DRIVER_INIT_MEMBER(cninja_state,stoneage)
trunk/src/mame/machine/decoprot.c
r18404r18405
623623
624624READ16_HANDLER( deco16_104_cninja_prot_r )
625625{
626   switch (offset<<1) {
626   switch (offset<<1)
627   {
627628      case 0x80: /* Master level control */
628629         return deco16_prot_ram[0];
629630
r18404r18405
662663
663664      case 0x22c: /* Player 1 & 2 input ports */
664665         return space.machine().root_device().ioport("IN0")->read();
666
667      case 0x2b2: return deco16_prot_ram[0x0fc/2]; // 0xad65
668      case 0x42a: return deco16_prot_ram[0x092/2]; // 0xb2b7
669      case 0x436: return deco16_prot_ram[0x088/2]; // 0xea5a
670      case 0x440: return deco16_prot_ram[0x098/2]; // 0x7aa0
671      case 0x446: return deco16_prot_ram[0x090/2]; // 0x5fdf
672      case 0x458: return deco16_prot_ram[0x082/2]; // 0x108d
673      case 0x480: return deco16_prot_ram[0x09a/2]; // 0xfbe4
674      case 0x48e: return deco16_prot_ram[0x08a/2]; // 0x67a2
675      case 0x49c: return deco16_prot_ram[0x094/2]; // 0xb62a
676      case 0x4b0: return deco16_prot_ram[0x096/2]; // 0x3555
677      case 0x4c0: return deco16_prot_ram[0x09e/2]; // 0x6a34
678      case 0x4c6: return deco16_prot_ram[0x08c/2]; // 0xc6ef
679      case 0x4ea: return deco16_prot_ram[0x086/2]; // 0x9feb
680      case 0x4fa: return deco16_prot_ram[0x09c/2]; // 0x1dcb
681      case 0x508: return deco16_prot_ram[0x08e/2]; // 0xed9c
682      case 0x514: return deco16_prot_ram[0x080/2]; // 0xf6e2
683      case 0x51c: return deco16_prot_ram[0x084/2]; // 0xbdb9
684      case 0x524: return deco16_prot_ram[0x0b8/2]; // 0x5d26
685      case 0x526: return deco16_prot_ram[0x0a2/2]; // 0x4770
686      case 0x552: return deco16_prot_ram[0x0ac/2]; // 0x0843
687      case 0x554: return deco16_prot_ram[0x0ba/2]; // 0x9b79
688      case 0x56e: return deco16_prot_ram[0x0a0/2]; // 0xd1be
689      case 0x570: return deco16_prot_ram[0x0b4/2]; // 0xc950
690      case 0x580: return deco16_prot_ram[0x0b2/2]; // 0xa600
691      case 0x59a: return deco16_prot_ram[0x0ae/2]; // 0x2b24
692      case 0x5d8: return deco16_prot_ram[0x0b6/2]; // 0x17c1
693      case 0x5f4: return deco16_prot_ram[0x0aa/2]; // 0xf152
694      case 0x5f6: return deco16_prot_ram[0x0be/2]; // 0x97ce
695      case 0x5f8: return deco16_prot_ram[0x0bc/2]; // 0xa485
696      case 0x604: return deco16_prot_ram[0x0a4/2]; // 0x0e88
697      case 0x60c: return deco16_prot_ram[0x0b0/2]; // 0xab89
698      case 0x61a: return deco16_prot_ram[0x0a6/2]; // 0x64ba
699      case 0x64a: return deco16_prot_ram[0x0cc/2]; // 0x0ae9
700      case 0x670: return deco16_prot_ram[0x0d4/2]; // 0x4ec2
701      case 0x67e: return deco16_prot_ram[0x0ca/2]; // 0x61c3
702      case 0x694: return deco16_prot_ram[0x0d2/2]; // 0x3b4f
703      case 0x6a8: return deco16_prot_ram[0x0d6/2]; // 0x0c27
704      case 0x6ae: return deco16_prot_ram[0x0da/2]; // 0x3a72
705      case 0x6b4: return deco16_prot_ram[0x0de/2]; // 0x15d2
706      case 0x6c4: return deco16_prot_ram[0x0c8/2]; // 0x5849
707      case 0x6c8: return deco16_prot_ram[0x0d0/2]; // 0x186c
708      case 0x6cc: return deco16_prot_ram[0x0c0/2]; // 0x713e
709      case 0x6de: return deco16_prot_ram[0x0c2/2]; // 0xa87e
710      case 0x6f8: return deco16_prot_ram[0x0d8/2]; // 0x9a31
711      case 0x6fe: return deco16_prot_ram[0x0c6/2]; // 0xec69
712      case 0x700: return deco16_prot_ram[0x0ce/2]; // 0x82d9
713      case 0x70a: return deco16_prot_ram[0x0dc/2]; // 0x628c
714      case 0x714: return deco16_prot_ram[0x0c4/2]; // 0xda45
715      case 0x74c: return deco16_prot_ram[0x0e4/2]; // 0x8e3d
716      case 0x764: return deco16_prot_ram[0x0fe/2]; // 0xdef7
717      case 0x770: return deco16_prot_ram[0x0f4/2]; // 0xe7fe
718      case 0x772: return deco16_prot_ram[0x0ec/2]; // 0x23ca
719      case 0x774: return deco16_prot_ram[0x0e2/2]; // 0xe62c
720      case 0x77e: return deco16_prot_ram[0x0e8/2]; // 0x6683
721      case 0x788: return deco16_prot_ram[0x0e0/2]; // 0xd60b
722      case 0x798: return deco16_prot_ram[0x0fa/2]; // 0x9e1a
723      case 0x7a4: return deco16_prot_ram[0x0f0/2]; // 0x578f
724      case 0x7c2: return deco16_prot_ram[0x0f8/2]; // 0x0503
725      case 0x7ea: return deco16_prot_ram[0x0e6/2]; // 0x8654
726      case 0x7ec: return deco16_prot_ram[0x0f6/2]; // 0xa1e1
727      case 0x7fa: return deco16_prot_ram[0x0ea/2]; // 0x5146
728      case 0x7fe: return deco16_prot_ram[0x0f2/2]; // 0x91d4
665729   }
666730
667731   logerror("Protection PC %06x: warning - read unmapped memory address %04x\n",space.device().safe_pc(),offset);

Previous 199869 Revisions Next


© 1997-2024 The MAME Team