summaryrefslogtreecommitdiffstats
path: root/docs/release/src/hbmame/bus/neogeo/prot.h
diff options
context:
space:
mode:
Diffstat (limited to 'docs/release/src/hbmame/bus/neogeo/prot.h')
-rw-r--r--docs/release/src/hbmame/bus/neogeo/prot.h384
1 files changed, 384 insertions, 0 deletions
diff --git a/docs/release/src/hbmame/bus/neogeo/prot.h b/docs/release/src/hbmame/bus/neogeo/prot.h
new file mode 100644
index 00000000000..57d3a702621
--- /dev/null
+++ b/docs/release/src/hbmame/bus/neogeo/prot.h
@@ -0,0 +1,384 @@
+// license:BSD-3-Clause
+// copyright-holders:S. Smith,David Haywood
+
+
+#pragma once
+
+#include "banked_cart.h"
+
+#ifndef __NEOGEO_PROT__
+#define __NEOGEO_PROT__
+
+DECLARE_DEVICE_TYPE(NGBOOTLEG_PROT, ngbootleg_prot_device)
+
+
+class ngbootleg_prot_device : public device_t
+{
+public:
+ // construction/destruction
+ ngbootleg_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
+
+ void neogeo_bootleg_cx_decrypt(u8*sprrom, u32 sprrom_size);
+ void neogeo_bootleg_sx_decrypt(u8* fixed, u32 fixed_size, int value);
+ void kof97oro_px_decode(u8* cpurom, u32 cpurom_size);
+ void kof10thBankswitch(u16 nBank);
+ u16 kof10th_RAM2_r(offs_t offset);
+ u16 kof10th_RAMB_r(offs_t offset);
+ void kof10th_custom_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void kof10th_bankswitch_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void install_kof10th_protection(cpu_device* maincpu, neogeo_banked_cart_device* bankdev, u8* cpurom, u32 cpurom_size, u8* fixedrom, u32 fixedrom_size);
+ void decrypt_kof10th(u8* cpurom, u32 cpurom_size);
+ void kf10thep_px_decrypt(u8* cpurom, u32 cpurom_size);
+ void kf2k5uni_px_decrypt(u8* cpurom, u32 cpurom_size);
+ void kf2k5uni_sx_decrypt(u8* fixedrom, u32 fixedrom_size);
+ void kf2k5uni_mx_decrypt(u8* audiorom, u32 audiorom_size);
+ void decrypt_kf2k5uni(u8* cpurom, u32 cpurom_size, u8* audiorom, u32 audiorom_size, u8* fixedrom, u32 fixedrom_size);
+ void kof2002b_gfx_decrypt(u8 *src, int size);
+ void kf2k2mp_decrypt(u8* cpurom, u32 cpurom_size);
+ void kf2k2mp2_px_decrypt(u8* cpurom, u32 cpurom_size);
+ void cthd2003_neogeo_gfx_address_fix_do(u8* sprrom, u32 sprrom_size, int start, int end, int bit3shift, int bit2shift, int bit1shift, int bit0shift);
+ void cthd2003_neogeo_gfx_address_fix(u8* sprrom, u32 sprrom_size, int start, int end);
+ void cthd2003_c(u8* sprrom, u32 sprrom_size, int pow);
+ void decrypt_cthd2003(u8* sprrom, u32 sprrom_size, u8* audiorom, u32 audiorom_size, u8* fixedrom, u32 fixedrom_size);
+ void cthd2003_bankswitch_w(offs_t offset, u16 data);
+ void patch_cthd2003(cpu_device* maincpu, neogeo_banked_cart_device* bankdev, u8* cpurom, u32 cpurom_size);
+ void ct2k3sp_sx_decrypt(u8* fixedrom, u32 fixedrom_size);
+ void decrypt_ct2k3sp(u8* sprrom, u32 sprrom_size, u8* audiorom, u32 audiorom_size, u8* fixedrom, u32 fixedrom_size);
+ void decrypt_ct2k3sa(u8* sprrom, u32 sprrom_size, u8* audiorom, u32 audiorom_size);
+ void patch_ct2k3sa(u8* cpurom, u32 cpurom_size);
+ void decrypt_kof2k4se_68k(u8* cpurom, u32 cpurom_size);
+ void lans2004_vx_decrypt(u8* ymsndrom, u32 ymsndrom_size);
+ void lans2004_decrypt_68k(u8* cpurom, u32 cpurom_size);
+ u16 mslug5_prot_r();
+ void ms5plus_bankswitch_w(offs_t offset, u16 data);
+ void install_ms5plus_protection(cpu_device* maincpu, neogeo_banked_cart_device* bankdev);
+ void svcboot_px_decrypt(u8* cpurom, u32 cpurom_size);
+ void svcboot_cx_decrypt(u8*sprrom, u32 sprrom_size);
+ void svcplus_px_decrypt(u8* cpurom, u32 cpurom_size);
+ void svcplus_px_hack(u8* cpurom, u32 cpurom_size);
+ void svcplusa_px_decrypt(u8* cpurom, u32 cpurom_size);
+ void svcsplus_px_decrypt(u8* cpurom, u32 cpurom_size);
+ void svcsplus_px_hack(u8* cpurom, u32 cpurom_size);
+ u16 kof2003_r(offs_t offset);
+ void kof2003_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void kof2003p_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ u16 kof2003_overlay_r();
+ void kf2k3bl_px_decrypt(u8* cpurom, u32 cpurom_size);
+ void kf2k3bl_install_protection(cpu_device* maincpu, neogeo_banked_cart_device* bankdev, u8* cpurom, u32 cpurom_size);
+ void kf2k3pl_px_decrypt(u8* cpurom, u32 cpurom_size);
+ void kf2k3pl_install_protection(cpu_device* maincpu, neogeo_banked_cart_device* bankdev, u8* cpurom, u32 cpurom_size);
+ u16 kof2k3_overlay;
+
+ void kf2k3upl_px_decrypt(u8* cpurom, u32 cpurom_size);
+ void samsho5b_px_decrypt(u8* cpurom, u32 cpurom_size);
+ void samsho5b_vx_decrypt(u8* ymsndrom, u32 ymsndrom_size);
+ void matrimbl_decrypt(u8* sprrom, u32 sprrom_size, u8* audiorom, u32 audiorom_size);
+
+ u16 m_cartridge_ram[0x1000]; // bootlegs
+
+ // for kof10th
+ u8* m_mainrom = nullptr;
+ u8* m_fixedrom = nullptr;
+ neogeo_banked_cart_device* m_bankdev;
+ u16 m_cartridge_ram2[0x10000]{};
+
+protected:
+ virtual void device_start() override;
+ virtual void device_reset() override;
+};
+
+
+DECLARE_DEVICE_TYPE(KOG_PROT, kog_prot_device)
+
+
+class kog_prot_device : public device_t
+{
+public:
+ // construction/destruction
+ kog_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
+
+ void kog_install_protection(cpu_device* maincpu);
+ void kog_px_decrypt(u8* cpurom, u32 cpurom_size);
+ u16 read_jumper();
+
+ required_ioport m_jumper;
+
+protected:
+ virtual void device_start() override;
+ virtual void device_reset() override;
+ virtual ioport_constructor device_input_ports() const override;
+};
+
+
+DECLARE_DEVICE_TYPE(CMC_PROT, cmc_prot_device)
+
+// cmc42
+#define KOF99_GFX_KEY (0x00)
+#define GAROU_GFX_KEY (0x06)
+#define MSLUG3_GFX_KEY (0xad)
+#define ZUPAPA_GFX_KEY (0xbd)
+#define GANRYU_GFX_KEY (0x07)
+#define S1945P_GFX_KEY (0x05)
+#define PREISLE2_GFX_KEY (0x9f)
+#define BANGBEAD_GFX_KEY (0xf8)
+#define NITD_GFX_KEY (0xff)
+#define SENGOKU3_GFX_KEY (0xfe)
+
+// cmc50
+#define KOF2000_GFX_KEY (0x00)
+#define KOF2001_GFX_KEY (0x1e)
+#define MSLUG4_GFX_KEY (0x31)
+#define ROTD_GFX_KEY (0x3f)
+#define PNYAA_GFX_KEY (0x2e)
+#define KOF2002_GFX_KEY (0xec)
+#define MATRIM_GFX_KEY (0x6a)
+#define SAMSHO5_GFX_KEY (0x0f)
+#define SAMSHO5SP_GFX_KEY (0x0d)
+#define MSLUG5_GFX_KEY (0x19)
+#define SVC_GFX_KEY (0x57)
+#define KOF2003_GFX_KEY (0x9d)
+#define JOCKEYGP_GFX_KEY (0xac)
+
+
+class cmc_prot_device : public device_t
+{
+public:
+ // construction/destruction
+ cmc_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
+
+ void decrypt(u8 *r0, u8 *r1,
+ u8 c0, u8 c1,
+ const u8 *table0hi,
+ const u8 *table0lo,
+ const u8 *table1,
+ int base,
+ int invert);
+
+ void neogeo_gfx_decrypt(u8* rom, u32 rom_size, int extra_xor);
+ void neogeo_sfix_decrypt(u8* rom, u32 rom_size, u8* fixed, u32 fixed_size);
+ void cmc42_neogeo_gfx_decrypt(u8* rom, u32 rom_size, int extra_xor);
+ void cmc50_neogeo_gfx_decrypt(u8* rom, u32 rom_size, int extra_xor);
+
+ u16 generate_cs16(u8 *rom, int size);
+ int m1_address_scramble(int address, u16 key);
+ void neogeo_cmc50_m1_decrypt(u8* romcrypt, u32 romcrypt_size, u8* romaudio, u32 romaudio_size);
+
+protected:
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ const u8 *type0_t03;
+ const u8 *type0_t12;
+ const u8 *type1_t03;
+ const u8 *type1_t12;
+ const u8 *address_8_15_xor1;
+ const u8 *address_8_15_xor2;
+ const u8 *address_16_23_xor1;
+ const u8 *address_16_23_xor2;
+ const u8 *address_0_7_xor;
+};
+
+
+DECLARE_DEVICE_TYPE(FATFURY2_PROT, fatfury2_prot_device)
+
+
+class fatfury2_prot_device : public device_t
+{
+public:
+ // construction/destruction
+ fatfury2_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
+
+ u16 fatfury2_protection_16_r(offs_t offset);
+ void fatfury2_protection_16_w(offs_t offset, u16 data);
+ void fatfury2_install_protection(cpu_device* maincpu, neogeo_banked_cart_device* bankdev);
+
+
+ neogeo_banked_cart_device* m_bankdev;
+ u32 m_fatfury2_prot_data = 0U;
+
+protected:
+ virtual void device_start() override;
+ virtual void device_reset() override;
+};
+
+
+DECLARE_DEVICE_TYPE(KOF2002_PROT, kof2002_prot_device)
+
+
+class kof2002_prot_device : public device_t
+{
+public:
+ // construction/destruction
+ kof2002_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
+
+ void kof2002_decrypt_68k(u8* cpurom, u32 cpurom_size);
+ void matrim_decrypt_68k(u8* cpurom, u32 cpurom_size);
+ void samsho5_decrypt_68k(u8* cpurom, u32 cpurom_size);
+ void samsh5sp_decrypt_68k(u8* cpurom, u32 cpurom_size);
+
+protected:
+ virtual void device_start() override;
+ virtual void device_reset() override;
+};
+
+
+DECLARE_DEVICE_TYPE(KOF98_PROT, kof98_prot_device)
+
+
+class kof98_prot_device : public device_t
+{
+public:
+ // construction/destruction
+ kof98_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
+
+ void kof98_decrypt_68k(u8* cpurom, u32 cpurom_size);
+ void install_kof98_protection(cpu_device* maincpu);
+ void kof98_prot_w(u16 data);
+ u16 kof98_prot_r(offs_t offset);
+ int kof98_prot_state;
+ u16 m_default_rom[2]{};
+
+protected:
+ virtual void device_start() override;
+ virtual void device_reset() override;
+};
+
+
+DECLARE_DEVICE_TYPE(MSLUGX_PROT, mslugx_prot_device)
+
+
+class mslugx_prot_device : public device_t
+{
+public:
+ // construction/destruction
+ mslugx_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
+
+
+ void mslugx_protection_16_w(offs_t offset, u16 data);
+ u16 mslugx_protection_16_r(address_space &space, offs_t offset);
+ void mslugx_install_protection(cpu_device* maincpu);
+
+ u16 m_mslugx_counter = 0U;
+ u16 m_mslugx_command = 0U;
+
+protected:
+ virtual void device_start() override;
+ virtual void device_reset() override;
+};
+
+
+DECLARE_DEVICE_TYPE(PCM2_PROT, pcm2_prot_device)
+
+
+class pcm2_prot_device : public device_t
+{
+public:
+ // construction/destruction
+ pcm2_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
+
+ void neo_pcm2_snk_1999(u8* ymrom, u32 ymsize, int value);
+ void neo_pcm2_swap(u8* ymrom, u32 ymsize, int value);
+
+protected:
+ virtual void device_start() override;
+ virtual void device_reset() override;
+};
+
+
+DECLARE_DEVICE_TYPE(PVC_PROT, pvc_prot_device)
+
+
+class pvc_prot_device : public device_t
+{
+public:
+ // construction/destruction
+ pvc_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
+
+ void pvc_write_unpack_color();
+ void pvc_write_pack_color();
+ void pvc_write_bankswitch();
+ u16 pvc_prot_r(offs_t offset);
+ void pvc_prot_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void install_pvc_protection(cpu_device* maincpu, neogeo_banked_cart_device* bankdev);
+ neogeo_banked_cart_device* m_bankdev;
+
+ u16 m_cartridge_ram[0x1000]{};
+
+ void mslug5_decrypt_68k(u8* rom, u32 size);
+ void svc_px_decrypt(u8* rom, u32 size);
+ void kf2k3pcb_decrypt_68k(u8* rom, u32 size);
+ void kof2003_decrypt_68k(u8* rom, u32 size);
+ void kof2003h_decrypt_68k(u8* rom, u32 size);
+
+protected:
+ virtual void device_start() override;
+ virtual void device_reset() override;
+};
+
+
+DECLARE_DEVICE_TYPE(SBP_PROT, sbp_prot_device)
+
+
+class sbp_prot_device : public device_t
+{
+public:
+ // construction/destruction
+ sbp_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
+
+
+ u8* m_mainrom = nullptr;
+
+ void sbp_install_protection(cpu_device* maincpu, u8* cpurom, u32 cpurom_size);
+ void sbp_lowerrom_w(offs_t offset, u16 data);
+ u16 sbp_lowerrom_r(offs_t offset);
+
+protected:
+ virtual void device_start() override;
+ virtual void device_reset() override;
+};
+
+DECLARE_DEVICE_TYPE(SMA_PROT, sma_prot_device)
+
+
+class sma_prot_device : public device_t
+{
+public:
+ // construction/destruction
+ sma_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
+
+
+ void kof99_bankswitch_w(u16 data);
+ void garou_bankswitch_w(u16 data);
+ void garouh_bankswitch_w(u16 data);
+ void mslug3_bankswitch_w(u16 data);
+ void kof2000_bankswitch_w(u16 data);
+ u16 prot_9a37_r();
+ u16 sma_random_r();
+ void reset_sma_rng();
+ void sma_install_random_read_handler(cpu_device* maincpu, int addr1, int addr2 );
+ void kof99_install_protection(cpu_device* maincpu, neogeo_banked_cart_device* bankdev);
+ void garou_install_protection(cpu_device* maincpu, neogeo_banked_cart_device* bankdev);
+ void garouh_install_protection(cpu_device* maincpu, neogeo_banked_cart_device* bankdev);
+ void mslug3_install_protection(cpu_device* maincpu, neogeo_banked_cart_device* bankdev);
+ void kof2000_install_protection(cpu_device* maincpu, neogeo_banked_cart_device* bankdev);
+ neogeo_banked_cart_device* m_bankdev;
+ void kof99_decrypt_68k(u8* base);
+ void garou_decrypt_68k(u8* base);
+ void garouh_decrypt_68k(u8* base);
+ void mslug3_decrypt_68k(u8* base);
+ void kof2000_decrypt_68k(u8* base);
+
+ // PCB decrypts (not sma)
+ void svcpcb_gfx_decrypt(u8* rom, u32 rom_size);
+ void svcpcb_s1data_decrypt(u8* rom, u32 rom_size);
+ void kf2k3pcb_gfx_decrypt(u8* rom, u32 rom_size);
+ void kf2k3pcb_decrypt_s1data(u8* rom, u32 rom_size, u8* fixed, u32 fixed_size);
+ void kf2k3pcb_sp1_decrypt(u16* rom);
+
+ u16 m_sma_rng = 0U;
+protected:
+ virtual void device_start() override;
+ virtual void device_reset() override;
+};
+
+#endif