summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/includes/cps3.h
blob: eba68c89c02943b9a08491b961f9dd12e53b3050 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
// license:BSD-3-Clause
// copyright-holders:David Haywood, Andreas Naive, Tomasz Slanina, ElSemi
/***************************************************************************

    Capcom CPS-3 Hardware

****************************************************************************/

#include "machine/intelfsh.h"
#include "cpu/sh/sh2.h"
#include "audio/cps3.h"


class cps3_state : public driver_device
{
public:
	cps3_state(const machine_config &mconfig, device_type type, const char *tag)
		: driver_device(mconfig, type, tag)
		, m_maincpu(*this, "maincpu")
		, m_gfxdecode(*this, "gfxdecode")
		, m_palette(*this, "palette")
		, m_cps3sound(*this, "cps3sound")
		, m_mainram(*this, "mainram")
		, m_spriteram(*this, "spriteram")
		, m_colourram(*this, "colourram")
		, m_tilemap20_regs_base(*this, "tmap20_regs")
		, m_tilemap30_regs_base(*this, "tmap30_regs")
		, m_tilemap40_regs_base(*this, "tmap40_regs")
		, m_tilemap50_regs_base(*this, "tmap50_regs")
		, m_fullscreenzoom(*this, "fullscreenzoom")
		, m_0xc0000000_ram(*this, "0xc0000000_ram")
		, m_decrypted_gamerom(*this, "decrypted_gamerom")
		, m_0xc0000000_ram_decrypted(*this, "0xc0000000_ram_decrypted")
		, m_user4_region(*this, "user4")
		, m_user5_region(*this, "user5")
	{
	}

	required_device<sh2_device> m_maincpu;
	required_device<gfxdecode_device> m_gfxdecode;
	required_device<palette_device> m_palette;
	required_device<cps3_sound_device> m_cps3sound;

	required_shared_ptr<uint32_t> m_mainram;
	required_shared_ptr<uint32_t> m_spriteram;
	required_shared_ptr<uint32_t> m_colourram;
	required_shared_ptr<uint32_t> m_tilemap20_regs_base;
	required_shared_ptr<uint32_t> m_tilemap30_regs_base;
	required_shared_ptr<uint32_t> m_tilemap40_regs_base;
	required_shared_ptr<uint32_t> m_tilemap50_regs_base;
	required_shared_ptr<uint32_t> m_fullscreenzoom;
	required_shared_ptr<uint32_t> m_0xc0000000_ram;
	required_shared_ptr<uint32_t> m_decrypted_gamerom;
	required_shared_ptr<uint32_t> m_0xc0000000_ram_decrypted;

	optional_memory_region      m_user4_region;
	optional_memory_region      m_user5_region;

	fujitsu_29f016a_device *m_simm[7][8];
	uint32_t m_cram_gfxflash_bank;
	std::unique_ptr<uint32_t[]> m_char_ram;
	std::unique_ptr<uint32_t[]> m_eeprom;
	uint32_t m_ss_pal_base;
	uint32_t m_unk_vidregs[0x20/4];
	uint32_t m_ss_bank_base;
	uint32_t m_screenwidth;
	std::unique_ptr<uint32_t[]> m_mame_colours;
	bitmap_rgb32 m_renderbuffer_bitmap;
	rectangle m_renderbuffer_clip;
	uint8_t* m_user4;
	uint32_t m_key1;
	uint32_t m_key2;
	int m_altEncryption;
	std::unique_ptr<uint32_t[]> m_ss_ram;
	uint32_t m_cram_bank;
	uint16_t m_current_eeprom_read;
	uint32_t m_paldma_source;
	uint32_t m_paldma_realsource;
	uint32_t m_paldma_dest;
	uint32_t m_paldma_fade;
	uint32_t m_paldma_other2;
	uint32_t m_paldma_length;
	uint32_t m_chardma_source;
	uint32_t m_chardma_other;
	uint32_t m_current_table_address;
	int m_rle_length;
	int m_last_normal_byte;
	unsigned short m_lastb;
	unsigned short m_lastb2;
	uint8_t* m_user5;

	DECLARE_READ32_MEMBER(cps3_ssram_r);
	DECLARE_WRITE32_MEMBER(cps3_ssram_w);
	DECLARE_WRITE32_MEMBER(cps3_0xc0000000_ram_w);
	DECLARE_WRITE32_MEMBER(cram_bank_w);
	DECLARE_READ32_MEMBER(cram_data_r);
	DECLARE_WRITE32_MEMBER(cram_data_w);
	DECLARE_READ32_MEMBER(cps3_gfxflash_r);
	DECLARE_WRITE32_MEMBER(cps3_gfxflash_w);
	DECLARE_READ32_MEMBER(cps3_flash1_r);
	DECLARE_READ32_MEMBER(cps3_flash2_r);
	DECLARE_WRITE32_MEMBER(cps3_flash1_w);
	DECLARE_WRITE32_MEMBER(cps3_flash2_w);
	DECLARE_WRITE32_MEMBER(cram_gfxflash_bank_w);
	DECLARE_READ32_MEMBER(cps3_vbl_r);
	DECLARE_READ32_MEMBER(cps3_unk_io_r);
	DECLARE_READ32_MEMBER(cps3_40C0000_r);
	DECLARE_READ32_MEMBER(cps3_40C0004_r);
	DECLARE_READ32_MEMBER(cps3_eeprom_r);
	DECLARE_WRITE32_MEMBER(cps3_eeprom_w);
	DECLARE_WRITE32_MEMBER(cps3_ss_bank_base_w);
	DECLARE_WRITE32_MEMBER(cps3_ss_pal_base_w);
	DECLARE_WRITE32_MEMBER(cps3_palettedma_w);
	DECLARE_WRITE32_MEMBER(cps3_characterdma_w);
	DECLARE_WRITE32_MEMBER(cps3_irq10_ack_w);
	DECLARE_WRITE32_MEMBER(cps3_irq12_ack_w);
	DECLARE_WRITE32_MEMBER(cps3_unk_vidregs_w);
	DECLARE_READ32_MEMBER(cps3_colourram_r);
	DECLARE_WRITE32_MEMBER(cps3_colourram_w);
	void init_sfiii3();
	void init_sfiii();
	void init_redearth();
	void init_jojo();
	void init_jojoba();
	void init_sfiii2();
	void init_cps3boot();
	SH2_DMA_KLUDGE_CB(dma_callback);
	virtual void machine_reset() override;
	virtual void video_start() override;
	uint32_t screen_update_cps3(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
	INTERRUPT_GEN_MEMBER(cps3_vbl_interrupt);
	INTERRUPT_GEN_MEMBER(cps3_other_interrupt);
	uint16_t rotate_left(uint16_t value, int n);
	uint16_t rotxor(uint16_t val, uint16_t xorval);
	uint32_t cps3_mask(uint32_t address, uint32_t key1, uint32_t key2);
	void cps3_decrypt_bios();
	void init_common(void);
	void init_crypt(uint32_t key1, uint32_t key2, int altEncryption);
	void cps3_set_mame_colours(int colournum, uint16_t data, uint32_t fadeval);
	void cps3_draw_tilemapsprite_line(int tmnum, int drawline, bitmap_rgb32 &bitmap, const rectangle &cliprect );
	uint32_t cps3_flashmain_r(address_space &space, int which, uint32_t offset, uint32_t mem_mask);
	void cps3_flashmain_w(int which, uint32_t offset, uint32_t data, uint32_t mem_mask);
	uint32_t process_byte( uint8_t real_byte, uint32_t destination, int max_length );
	void cps3_do_char_dma( uint32_t real_source, uint32_t real_destination, uint32_t real_length );
	uint32_t ProcessByte8(uint8_t b,uint32_t dst_offset);
	void cps3_do_alt_char_dma( uint32_t src, uint32_t real_dest, uint32_t real_length );
	void cps3_process_character_dma(uint32_t address);
	void copy_from_nvram();
	inline void cps3_drawgfxzoom(bitmap_rgb32 &dest_bmp, const rectangle &clip, gfx_element *gfx,
		unsigned int code, unsigned int color, int flipx, int flipy, int sx, int sy,
		int transparency, int transparent_color,
		int scalex, int scaley, bitmap_ind8 *pri_buffer, uint32_t pri_mask);
	void cps3(machine_config &config);
	void jojo(machine_config &config);
	void redearth(machine_config &config);
	void sfiii2(machine_config &config);
	void sfiii3(machine_config &config);
	void sfiii(machine_config &config);
	void jojoba(machine_config &config);
	void simm1_64mbit(machine_config &config);
	void simm2_64mbit(machine_config &config);
	void simm3_128mbit(machine_config &config);
	void simm4_128mbit(machine_config &config);
	void simm5_128mbit(machine_config &config);
	void simm5_32mbit(machine_config &config);
	void simm6_128mbit(machine_config &config);
	void cps3_map(address_map &map);
	void decrypted_opcodes_map(address_map &map);
};