1 // license:BSD-3-Clause
2 // copyright-holders:S. Smith,David Haywood,Fabio Priuli
3 
4 #ifndef MAME_BUS_NEOGEO_PROT_CMC_H
5 #define MAME_BUS_NEOGEO_PROT_CMC_H
6 
7 #pragma once
8 
9 
DECLARE_DEVICE_TYPE(NG_CMC_PROT,cmc_prot_device)10 DECLARE_DEVICE_TYPE(NG_CMC_PROT, cmc_prot_device)
11 
12 // cmc42
13 #define KOF99_GFX_KEY (0x00)
14 #define GAROU_GFX_KEY (0x06)
15 #define MSLUG3_GFX_KEY (0xad)
16 #define ZUPAPA_GFX_KEY (0xbd)
17 #define GANRYU_GFX_KEY (0x07)
18 #define S1945P_GFX_KEY (0x05)
19 #define PREISLE2_GFX_KEY (0x9f)
20 #define BANGBEAD_GFX_KEY (0xf8)
21 #define NITD_GFX_KEY (0xff)
22 #define SENGOKU3_GFX_KEY (0xfe)
23 
24 // cmc50
25 #define KOF2000_GFX_KEY (0x00)
26 #define KOF2001_GFX_KEY (0x1e)
27 #define MSLUG4_GFX_KEY (0x31)
28 #define ROTD_GFX_KEY (0x3f)
29 #define PNYAA_GFX_KEY (0x2e)
30 #define KOF2002_GFX_KEY (0xec)
31 #define MATRIM_GFX_KEY (0x6a)
32 #define SAMSHO5_GFX_KEY (0x0f)
33 #define SAMSHO5SP_GFX_KEY (0x0d)
34 #define MSLUG5_GFX_KEY (0x19)
35 #define SVC_GFX_KEY (0x57)
36 #define KOF2003_GFX_KEY (0x9d)
37 #define JOCKEYGP_GFX_KEY (0xac)
38 
39 
40 class cmc_prot_device :  public device_t
41 {
42 public:
43 	// construction/destruction
44 	cmc_prot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
45 
46 	void decrypt(uint8_t *r0, uint8_t *r1,
47 		uint8_t c0, uint8_t c1,
48 		const uint8_t *table0hi,
49 		const uint8_t *table0lo,
50 		const uint8_t *table1,
51 		int base,
52 		int invert);
53 
54 	void gfx_decrypt(uint8_t* rom, uint32_t rom_size, int extra_xor);
55 	void kof99_neogeo_gfx_decrypt(uint8_t* rom, uint32_t rom_size, uint8_t* fixed, uint32_t fixed_size, int extra_xor);
56 	void kof2000_neogeo_gfx_decrypt(uint8_t* rom, uint32_t rom_size, uint8_t* fixed, uint32_t fixed_size, int extra_xor);
57 	void cmc42_gfx_decrypt(uint8_t* rom, uint32_t rom_size, int extra_xor);
58 	void cmc50_gfx_decrypt(uint8_t* rom, uint32_t rom_size, int extra_xor);
59 
60 	void sfix_decrypt(uint8_t* rom, uint32_t rom_size, uint8_t* fixed, uint32_t fixed_size);
61 
62 	uint16_t generate_cs16(uint8_t *rom, int size);
63 	int m1_address_scramble(int address, uint16_t key);
64 	void cmc50_m1_decrypt(uint8_t* romcrypt, uint32_t romcrypt_size, uint8_t* romaudio, uint32_t romaudio_size);
65 
66 protected:
67 	virtual void device_start() override;
68 	virtual void device_reset() override;
69 
70 	const uint8_t *type0_t03;
71 	const uint8_t *type0_t12;
72 	const uint8_t *type1_t03;
73 	const uint8_t *type1_t12;
74 	const uint8_t *address_8_15_xor1;
75 	const uint8_t *address_8_15_xor2;
76 	const uint8_t *address_16_23_xor1;
77 	const uint8_t *address_16_23_xor2;
78 	const uint8_t *address_0_7_xor;
79 };
80 
81 #endif // MAME_BUS_NEOGEO_PROT_CMC_H
82