trunk/src/mame/drivers/cninja.c
| r18404 | r18405 | |
| 56 | 56 | |
| 57 | 57 | WRITE16_MEMBER(cninja_state::cninja_sound_w) |
| 58 | 58 | { |
| 59 | | |
| 60 | 59 | soundlatch_byte_w(space, 0, data & 0xff); |
| 61 | 60 | m_audiocpu->set_input_line(0, HOLD_LINE); |
| 62 | 61 | } |
| 63 | 62 | |
| 64 | 63 | WRITE16_MEMBER(cninja_state::stoneage_sound_w) |
| 65 | 64 | { |
| 66 | | |
| 67 | 65 | soundlatch_byte_w(space, 0, data & 0xff); |
| 68 | 66 | m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); |
| 69 | 67 | } |
| r18404 | r18405 | |
| 76 | 74 | |
| 77 | 75 | READ16_MEMBER(cninja_state::cninja_irq_r) |
| 78 | 76 | { |
| 79 | | |
| 80 | 77 | switch (offset) |
| 81 | 78 | { |
| 82 | 79 | |
| r18404 | r18405 | |
| 95 | 92 | |
| 96 | 93 | WRITE16_MEMBER(cninja_state::cninja_irq_w) |
| 97 | 94 | { |
| 98 | | |
| 99 | 95 | switch (offset) |
| 100 | 96 | { |
| 101 | 97 | case 0: |
| r18404 | r18405 | |
| 721 | 717 | |
| 722 | 718 | WRITE8_MEMBER(cninja_state::sound_bankswitch_w) |
| 723 | 719 | { |
| 724 | | |
| 725 | 720 | /* the second OKIM6295 ROM is bank switched */ |
| 726 | 721 | m_oki2->set_bank_base((data & 1) * 0x40000); |
| 727 | 722 | } |
| r18404 | r18405 | |
| 869 | 864 | |
| 870 | 865 | void cninja_state::machine_start() |
| 871 | 866 | { |
| 872 | | |
| 873 | 867 | save_item(NAME(m_scanline)); |
| 874 | 868 | save_item(NAME(m_irq_mask)); |
| 875 | 869 | |
| r18404 | r18405 | |
| 878 | 872 | |
| 879 | 873 | void cninja_state::machine_reset() |
| 880 | 874 | { |
| 881 | | |
| 882 | 875 | m_scanline = 0; |
| 883 | 876 | m_irq_mask = 0; |
| 884 | 877 | } |
| r18404 | r18405 | |
| 951 | 944 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60) |
| 952 | 945 | MACHINE_CONFIG_END |
| 953 | 946 | |
| 947 | |
| 954 | 948 | static MACHINE_CONFIG_START( stoneage, cninja_state ) |
| 955 | 949 | |
| 956 | 950 | /* basic machine hardware */ |
| r18404 | r18405 | |
| 1098 | 1092 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60) |
| 1099 | 1093 | MACHINE_CONFIG_END |
| 1100 | 1094 | |
| 1095 | |
| 1101 | 1096 | static MACHINE_CONFIG_START( robocop2, cninja_state ) |
| 1102 | 1097 | |
| 1103 | 1098 | /* basic machine hardware */ |
| r18404 | r18405 | |
| 1153 | 1148 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.60) |
| 1154 | 1149 | MACHINE_CONFIG_END |
| 1155 | 1150 | |
| 1151 | |
| 1156 | 1152 | static MACHINE_CONFIG_START( mutantf, cninja_state ) |
| 1157 | 1153 | |
| 1158 | 1154 | /* basic machine hardware */ |
| r18404 | r18405 | |
| 2051 | 2047 | |
| 2052 | 2048 | /**********************************************************************************/ |
| 2053 | 2049 | |
| 2054 | | static 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 | | |
| 2082 | 2050 | DRIVER_INIT_MEMBER(cninja_state,cninja) |
| 2083 | 2051 | { |
| 2084 | 2052 | 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()); |
| 2086 | 2053 | } |
| 2087 | 2054 | |
| 2088 | 2055 | DRIVER_INIT_MEMBER(cninja_state,stoneage) |
trunk/src/mame/machine/decoprot.c
| r18404 | r18405 | |
| 623 | 623 | |
| 624 | 624 | READ16_HANDLER( deco16_104_cninja_prot_r ) |
| 625 | 625 | { |
| 626 | | switch (offset<<1) { |
| 626 | switch (offset<<1) |
| 627 | { |
| 627 | 628 | case 0x80: /* Master level control */ |
| 628 | 629 | return deco16_prot_ram[0]; |
| 629 | 630 | |
| r18404 | r18405 | |
| 662 | 663 | |
| 663 | 664 | case 0x22c: /* Player 1 & 2 input ports */ |
| 664 | 665 | 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 |
| 665 | 729 | } |
| 666 | 730 | |
| 667 | 731 | logerror("Protection PC %06x: warning - read unmapped memory address %04x\n",space.device().safe_pc(),offset); |