1 // license:BSD-3-Clause
2 // copyright-holders:David Haywood, Sylvain Glaize, Paul Priest, Olivier Galibert
3 #ifndef MAME_INCLUDES_SUPRNOVA_H
4 #define MAME_INCLUDES_SUPRNOVA_H
5 
6 #pragma once
7 
8 #include "video/sknsspr.h"
9 
10 #include "cpu/sh/sh2.h"
11 #include "machine/timer.h"
12 
13 #include "emupal.h"
14 #include "screen.h"
15 #include "tilemap.h"
16 
17 
18 class skns_state : public driver_device
19 {
20 public:
skns_state(const machine_config & mconfig,device_type type,const char * tag)21 	skns_state(const machine_config &mconfig, device_type type, const char *tag) :
22 		driver_device(mconfig, type, tag),
23 		m_maincpu(*this,"maincpu"),
24 		m_spritegen(*this, "spritegen"),
25 		m_gfxdecode(*this, "gfxdecode"),
26 		m_palette(*this, "palette"),
27 		m_screen(*this, "screen"),
28 		m_spriteram(*this,"spriteram"),
29 		m_spc_regs(*this, "spc_regs"),
30 		m_v3_regs(*this, "v3_regs"),
31 		m_tilemapA_ram(*this, "tilemapa_ram"),
32 		m_tilemapB_ram(*this, "tilemapb_ram"),
33 		m_v3slc_ram(*this, "v3slc_ram"),
34 		m_pal_regs(*this, "pal_regs"),
35 		m_palette_ram(*this, "palette_ram"),
36 		m_v3t_ram(*this, "v3t_ram"),
37 		m_main_ram(*this, "main_ram"),
38 		m_cache_ram(*this, "cache_ram"),
39 		m_paddle(*this, "Paddle.%c", 'A')
40 	{ }
41 
42 	void sknsk(machine_config &config);
43 	void sknsu(machine_config &config);
44 	void sknsa(machine_config &config);
45 	void sknsj(machine_config &config);
46 	void sknse(machine_config &config);
47 	void skns(machine_config &config);
48 
49 	void init_sengekis();
50 	void init_cyvern();
51 	void init_puzzloopa();
52 	void init_teljan();
53 	void init_panicstr();
54 	void init_puzzloope();
55 	void init_sengekij();
56 	void init_puzzloopj();
57 	void init_sarukani();
58 	void init_gutsn();
59 	void init_jjparad2();
60 	void init_galpans3();
61 	void init_jjparads();
62 	void init_galpans2();
63 	void init_galpanis();
64 	void init_puzzloopu();
65 	void init_senknow();
66 	void init_galpani4();
67 	void init_ryouran();
68 
69 	template <int P> DECLARE_CUSTOM_INPUT_MEMBER(paddle_r);
70 
71 private:
72 	struct hit_t
73 	{
74 		uint16_t x1p, y1p, z1p, x1s, y1s, z1s;
75 		uint16_t x2p, y2p, z2p, x2s, y2s, z2s;
76 		uint16_t org;
77 
78 		uint16_t x1_p1, x1_p2, y1_p1, y1_p2, z1_p1, z1_p2;
79 		uint16_t x2_p1, x2_p2, y2_p1, y2_p2, z2_p1, z2_p2;
80 		uint16_t x1tox2, y1toy2, z1toz2;
81 		int16_t x_in, y_in, z_in;
82 		uint16_t flag;
83 
84 		uint8_t disconnect;
85 	};
86 
87 	required_device<sh2_device> m_maincpu;
88 	required_device<sknsspr_device> m_spritegen;
89 	required_device<gfxdecode_device> m_gfxdecode;
90 	required_device<palette_device> m_palette;
91 	required_device<screen_device> m_screen;
92 
93 	required_shared_ptr<uint32_t> m_spriteram;
94 	required_shared_ptr<uint32_t> m_spc_regs;
95 	required_shared_ptr<uint32_t> m_v3_regs;
96 	required_shared_ptr<uint32_t> m_tilemapA_ram;
97 	required_shared_ptr<uint32_t> m_tilemapB_ram;
98 	required_shared_ptr<uint32_t> m_v3slc_ram;
99 	required_shared_ptr<uint32_t> m_pal_regs;
100 	required_shared_ptr<uint32_t> m_palette_ram;
101 	required_shared_ptr<uint32_t> m_v3t_ram;
102 	required_shared_ptr<uint32_t> m_main_ram;
103 	required_shared_ptr<uint32_t> m_cache_ram;
104 
105 	optional_ioport_array<4> m_paddle;
106 
107 	hit_t m_hit;
108 	bitmap_ind16 m_sprite_bitmap;
109 	bitmap_ind16 m_tilemap_bitmap_lower;
110 	bitmap_ind8 m_tilemap_bitmapflags_lower;
111 	bitmap_ind16 m_tilemap_bitmap_higher;
112 	bitmap_ind8 m_tilemap_bitmapflags_higher;
113 	int m_depthA;
114 	int m_depthB;
115 	int m_use_spc_bright;
116 	int m_use_v3_bright;
117 	uint8_t m_bright_spc_b;
118 	uint8_t m_bright_spc_g;
119 	uint8_t m_bright_spc_r;
120 	uint8_t m_bright_spc_b_trans;
121 	uint8_t m_bright_spc_g_trans;
122 	uint8_t m_bright_spc_r_trans;
123 	uint8_t m_bright_v3_b;
124 	uint8_t m_bright_v3_g;
125 	uint8_t m_bright_v3_r;
126 	uint8_t m_bright_v3_b_trans;
127 	uint8_t m_bright_v3_g_trans;
128 	uint8_t m_bright_v3_r_trans;
129 	int m_spc_changed;
130 	int m_v3_changed;
131 	int m_palette_updated;
132 	int m_alt_enable_background;
133 	int m_alt_enable_sprites;
134 	tilemap_t *m_tilemap_A;
135 	tilemap_t *m_tilemap_B;
136 	uint8_t *m_btiles;
137 	uint8_t m_region;
138 
139 	void hit_w(offs_t offset, uint32_t data);
140 	void hit2_w(uint32_t data);
141 	uint32_t hit_r(offs_t offset);
142 	void io_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
143 	void v3t_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
144 	void pal_regs_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
145 	void palette_ram_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
146 	void tilemapA_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
147 	void tilemapB_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
148 	void v3_regs_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
149 
150 	uint32_t gutsn_speedup_r();
151 	uint32_t cyvern_speedup_r();
152 	uint32_t puzzloopj_speedup_r();
153 	uint32_t puzzloopa_speedup_r();
154 	uint32_t puzzloopu_speedup_r();
155 	uint32_t puzzloope_speedup_r();
156 	uint32_t senknow_speedup_r();
157 	uint32_t teljan_speedup_r();
158 	uint32_t jjparads_speedup_r();
159 	uint32_t jjparad2_speedup_r();
160 	uint32_t ryouran_speedup_r();
161 	uint32_t galpans2_speedup_r();
162 	uint32_t panicstr_speedup_r();
163 	uint32_t sengekis_speedup_r();
164 	uint32_t sengekij_speedup_r();
165 
166 	virtual void machine_start() override;
167 	virtual void machine_reset() override;
168 	virtual void video_start() override;
169 	virtual void video_reset() override;
170 	DECLARE_MACHINE_RESET(sknsa);
171 	DECLARE_MACHINE_RESET(sknsj);
172 	DECLARE_MACHINE_RESET(sknsu);
173 	DECLARE_MACHINE_RESET(sknse);
174 	DECLARE_MACHINE_RESET(sknsk);
175 
176 	TILE_GET_INFO_MEMBER(get_tilemap_A_tile_info);
177 	TILE_GET_INFO_MEMBER(get_tilemap_B_tile_info);
178 	uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
179 	DECLARE_WRITE_LINE_MEMBER(screen_vblank);
180 
181 	TIMER_DEVICE_CALLBACK_MEMBER(interrupt_callback);
182 	TIMER_DEVICE_CALLBACK_MEMBER(irq);
183 	void draw_roz(bitmap_ind16 &bitmap, bitmap_ind8& bitmapflags, const rectangle &cliprect, tilemap_t *tmap, uint32_t startx, uint32_t starty, int incxx, int incxy, int incyx, int incyy, int wraparound, int columnscroll, uint32_t* scrollram);
184 	void palette_set_rgb_brightness (int offset, uint8_t brightness_r, uint8_t brightness_g, uint8_t brightness_b);
185 	void palette_update();
186 	void draw_a( bitmap_ind16 &bitmap, bitmap_ind8 &bitmap_flags, const rectangle &cliprect, int tran );
187 	void draw_b( bitmap_ind16 &bitmap, bitmap_ind8 &bitmap_flags, const rectangle &cliprect, int tran );
188 	void hit_recalc();
189 	void init_drc();
190 	void set_drc_pcflush(uint32_t addr);
191 
192 	void skns_map(address_map &map);
193 };
194 
195 #endif // MAME_INCLUDES_SUPRNOVA_H
196