1 // license:BSD-3-Clause
2 // copyright-holders:Bryan McPhail, Nicola Salmoria
3 /*************************************************************************
4 
5     Volfied
6 
7 *************************************************************************/
8 #ifndef MAME_INCLUDES_VOLFIED_H
9 #define MAME_INCLUDES_VOLFIED_H
10 
11 #pragma once
12 
13 #include "machine/taitocchip.h"
14 #include "video/pc090oj.h"
15 #include "screen.h"
16 #include "machine/timer.h"
17 
18 class volfied_state : public driver_device
19 {
20 public:
volfied_state(const machine_config & mconfig,device_type type,const char * tag)21 	volfied_state(const machine_config &mconfig, device_type type, const char *tag) :
22 		driver_device(mconfig, type, tag),
23 		m_maincpu(*this, "maincpu"),
24 		m_audiocpu(*this, "audiocpu"),
25 		m_cchip(*this, "cchip"),
26 		m_pc090oj(*this, "pc090oj"),
27 		m_screen(*this, "screen"),
28 		m_cchip_irq_clear(*this, "cchip_irq_clear")
29 	{ }
30 
31 	void volfied(machine_config &config);
32 
33 protected:
34 	enum
35 	{
36 		TIMER_VOLFIED
37 	};
38 
39 	virtual void machine_start() override;
40 	virtual void machine_reset() override;
41 	virtual void video_start() override;
42 
43 private:
44 	uint16_t video_ram_r(offs_t offset);
45 	void video_ram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
46 	void video_ctrl_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
47 	uint16_t video_ctrl_r();
48 	void video_mask_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
49 	void counters_w(uint8_t data);
50 	void volfied_colpri_cb(u32 &sprite_colbank, u32 &pri_mask, u16 sprite_ctrl);
51 	uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
52 	INTERRUPT_GEN_MEMBER(interrupt);
53 	TIMER_DEVICE_CALLBACK_MEMBER(cchip_irq_clear_cb);
54 
55 	void refresh_pixel_layer( bitmap_ind16 &bitmap );
56 
57 	void main_map(address_map &map);
58 	void z80_map(address_map &map);
59 
60 	/* memory pointers */
61 	std::unique_ptr<uint16_t[]>    m_video_ram;
62 
63 	/* video-related */
64 	uint16_t      m_video_ctrl;
65 	uint16_t      m_video_mask;
66 
67 	/* devices */
68 	required_device<cpu_device> m_maincpu;
69 	required_device<cpu_device> m_audiocpu;
70 	required_device<taito_cchip_device> m_cchip;
71 	required_device<pc090oj_device> m_pc090oj;
72 	required_device<screen_device> m_screen;
73 
74 	required_device<timer_device> m_cchip_irq_clear;
75 };
76 
77 #endif // MAME_INCLUDES_VOLFIED_H
78