1 // license:BSD-3-Clause
2 // copyright-holders:Nicola Salmoria
3 /*************************************************************************
4 
5     Gradius 3
6 
7 *************************************************************************/
8 #ifndef MAME_INCLUDES_GRADIUS3_H
9 #define MAME_INCLUDES_GRADIUS3_H
10 
11 #pragma once
12 
13 #include "machine/timer.h"
14 #include "sound/k007232.h"
15 #include "video/k052109.h"
16 #include "video/k051960.h"
17 #include "video/konami_helper.h"
18 
19 class gradius3_state : public driver_device
20 {
21 public:
gradius3_state(const machine_config & mconfig,device_type type,const char * tag)22 	gradius3_state(const machine_config &mconfig, device_type type, const char *tag) :
23 		driver_device(mconfig, type, tag),
24 		m_gfxram(*this, "k052109"),
25 		m_gfxrom(*this, "k051960"),
26 		m_maincpu(*this, "maincpu"),
27 		m_audiocpu(*this, "audiocpu"),
28 		m_subcpu(*this, "sub"),
29 		m_k007232(*this, "k007232"),
30 		m_k052109(*this, "k052109"),
31 		m_k051960(*this, "k051960")
32 	{ }
33 
34 	void gradius3(machine_config &config);
35 
36 private:
37 	/* memory pointers */
38 	required_shared_ptr<uint16_t> m_gfxram;
39 	required_region_ptr<uint8_t> m_gfxrom;
40 
41 	/* misc */
42 	int         m_priority;
43 	int         m_irqAen;
44 	int         m_irqBmask;
45 
46 	/* devices */
47 	required_device<cpu_device> m_maincpu;
48 	required_device<cpu_device> m_audiocpu;
49 	required_device<cpu_device> m_subcpu;
50 	required_device<k007232_device> m_k007232;
51 	required_device<k052109_device> m_k052109;
52 	required_device<k051960_device> m_k051960;
53 
54 	uint16_t k052109_halfword_r(offs_t offset);
55 	void k052109_halfword_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
56 	void cpuA_ctrl_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
57 	void cpuB_irqenable_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
58 	void cpuB_irqtrigger_w(uint16_t data);
59 	void sound_irq_w(uint16_t data);
60 	uint16_t gradius3_gfxrom_r(offs_t offset);
61 	void gradius3_gfxram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
62 	void sound_bank_w(uint8_t data);
63 	virtual void machine_start() override;
64 	virtual void machine_reset() override;
65 	virtual void video_start() override;
66 	uint32_t screen_update_gradius3(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
67 	INTERRUPT_GEN_MEMBER(cpuA_interrupt);
68 	TIMER_DEVICE_CALLBACK_MEMBER(gradius3_sub_scanline);
69 	void gradius3_postload();
70 	void volume_callback(uint8_t data);
71 	K052109_CB_MEMBER(tile_callback);
72 	K051960_CB_MEMBER(sprite_callback);
73 	void gradius3_map(address_map &map);
74 	void gradius3_map2(address_map &map);
75 	void gradius3_s_map(address_map &map);
76 };
77 
78 #endif // MAME_INCLUDES_GRADIUS3_H
79