diff options
Diffstat (limited to 'src/mame/machine/deco156.cpp')
-rw-r--r-- | src/mame/machine/deco156.cpp | 135 |
1 files changed, 0 insertions, 135 deletions
diff --git a/src/mame/machine/deco156.cpp b/src/mame/machine/deco156.cpp deleted file mode 100644 index d763611d517..00000000000 --- a/src/mame/machine/deco156.cpp +++ /dev/null @@ -1,135 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Bryan McPhail -/* Deco 156 analysis - - Data East chip 156 is an encrypted ARM processor. - - The 156 Chip is used on the following games: - - deco_mlc.c - - Stadium Hero 96 (stadhr96, stadh96a) - Skull Fang (skullfng) - Dunk Dream '95 / Hoops '96 (ddream95, hoops96) - - deco32.c - - Night Slashers (nslasher, nslashej) - - simpl156 - - Charlie Ninja (charlien) - Magical Drop / Magical Drop Plus / Chain Reaction (magdrop, magdropp, chainrec) - Joe & Mac Returns (joemacr, joemacra) - Party Time / Ganbare! Gonta!! 2 (prtytime, gangonta) - - deco156.c - - Osman (osman) - Heavy Smash (hvysmsh) - World Cup Volly '95 (wcvol95) - Backfire!! (backfire, backfira) - -*/ - -#include "emu.h" -#include "machine/deco156.h" - - -static void decrypt(uint32_t *src, uint32_t *dst, int length) -{ - int a; - - for (a = 0; a < length/4; a++) - { - int addr, dword; - - addr = (a & 0xff0000) | 0x92c6; - - if (a & 0x0001) addr ^= 0xce4a; - if (a & 0x0002) addr ^= 0x4db2; - if (a & 0x0004) addr ^= 0xef60; - if (a & 0x0008) addr ^= 0x5737; - if (a & 0x0010) addr ^= 0x13dc; - if (a & 0x0020) addr ^= 0x4bd9; - if (a & 0x0040) addr ^= 0xa209; - if (a & 0x0080) addr ^= 0xd996; - if (a & 0x0100) addr ^= 0xa700; - if (a & 0x0200) addr ^= 0xeca0; - if (a & 0x0400) addr ^= 0x7529; - if (a & 0x0800) addr ^= 0x3100; - if (a & 0x1000) addr ^= 0x33b4; - if (a & 0x2000) addr ^= 0x6161; - if (a & 0x4000) addr ^= 0x1eef; - if (a & 0x8000) addr ^= 0xf5a5; - - dword = src[addr]; - - // note that each of the following lines affects exactly two bits - - if (a & 0x00004) dword ^= 0x04400000; - if (a & 0x00008) dword ^= 0x40000004; - if (a & 0x00010) dword ^= 0x00048000; - if (a & 0x00020) dword ^= 0x00000280; - if (a & 0x00040) dword ^= 0x00200040; - if (a & 0x00080) dword ^= 0x09000000; - if (a & 0x00100) dword ^= 0x00001100; - if (a & 0x00200) dword ^= 0x20002000; - if (a & 0x00400) dword ^= 0x00000022; - if (a & 0x00800) dword ^= 0x000a0000; - if (a & 0x01000) dword ^= 0x10004000; - if (a & 0x02000) dword ^= 0x00010400; - if (a & 0x04000) dword ^= 0x80000010; - if (a & 0x08000) dword ^= 0x00000009; - if (a & 0x10000) dword ^= 0x02100000; - if (a & 0x20000) dword ^= 0x00800800; - - switch (a & 3) - { - case 0: - dword = bitswap<32>( dword ^ 0xec63197a, - 1, 4, 7, 28, 22, 18, 20, 9, - 16, 10, 30, 2, 31, 24, 19, 29, - 6, 21, 23, 11, 12, 13, 5, 0, - 8, 26, 27, 15, 14, 17, 25, 3 ); - break; - - case 1: - dword = bitswap<32>( dword ^ 0x58a5a55f, - 14, 23, 28, 29, 6, 24, 10, 1, - 5, 16, 7, 2, 30, 8, 18, 3, - 31, 22, 25, 20, 17, 0, 19, 27, - 9, 12, 21, 15, 26, 13, 4, 11 ); - break; - - case 2: - dword = bitswap<32>( dword ^ 0xe3a65f16, - 19, 30, 21, 4, 2, 18, 15, 1, - 12, 25, 8, 0, 24, 20, 17, 23, - 22, 26, 28, 16, 9, 27, 6, 11, - 31, 10, 3, 13, 14, 7, 29, 5 ); - break; - - case 3: - dword = bitswap<32>( dword ^ 0x28d93783, - 30, 6, 15, 0, 31, 18, 26, 22, - 14, 23, 19, 17, 10, 8, 11, 20, - 1, 28, 2, 4, 9, 24, 25, 27, - 7, 21, 13, 29, 5, 3, 16, 12 ); - break; - } - - dst[a] = dword; - } -} - - -void deco156_decrypt(running_machine &machine) -{ - uint32_t *rom = (uint32_t *)machine.root_device().memregion("maincpu")->base(); - int length = machine.root_device().memregion("maincpu")->bytes(); - std::vector<uint32_t> buf(length/4); - - memcpy(&buf[0], rom, length); - decrypt(&buf[0], rom, length); -} |