1 // license:BSD-3-Clause
2 // copyright-holders:Nicola Salmoria
3 
4 /***************************************************************************
5 
6     Blockout
7 
8 ***************************************************************************/
9 
10 #include "machine/gen_latch.h"
11 #include "machine/timer.h"
12 #include "emupal.h"
13 #include "screen.h"
14 
15 class blockout_state : public driver_device
16 {
17 public:
blockout_state(const machine_config & mconfig,device_type type,const char * tag)18 	blockout_state(const machine_config &mconfig, device_type type, const char *tag)
19 		: driver_device(mconfig, type, tag),
20 		m_videoram(*this, "videoram", 16),
21 		m_frontvideoram(*this, "frontvideoram"),
22 		m_maincpu(*this, "maincpu"),
23 		m_audiocpu(*this, "audiocpu"),
24 		m_screen(*this, "screen"),
25 		m_palette(*this, "palette"),
26 		m_soundlatch(*this, "soundlatch") { }
27 
28 	/* memory pointers */
29 	required_shared_ptr<u8> m_videoram;
30 	required_shared_ptr<u16> m_frontvideoram;
31 
32 	/* video-related */
33 	bitmap_ind16 m_tmpbitmap;
34 	u16   m_color;
35 
36 	/* devices */
37 	required_device<cpu_device> m_maincpu;
38 	required_device<cpu_device> m_audiocpu;
39 	required_device<screen_device> m_screen;
40 	required_device<palette_device> m_palette;
41 	required_device<generic_latch_8_device> m_soundlatch;
42 
43 	DECLARE_WRITE_LINE_MEMBER(irq_handler);
44 	void blockout_irq6_ack_w(uint16_t data);
45 	void blockout_irq5_ack_w(uint16_t data);
46 	void frontcolor_w(offs_t offset, u16 data, u16 mem_mask = ~0);
47 	u8 videoram_r(offs_t offset);
48 	void videoram_w(offs_t offset, u8 data);
49 	void init_agress();
50 	virtual void machine_start() override;
51 	virtual void machine_reset() override;
52 	virtual void video_start() override;
53 	u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
54 	TIMER_DEVICE_CALLBACK_MEMBER(blockout_scanline);
55 	static rgb_t blockout_xBGR_444(u32 raw);
56 	void blockout(machine_config &config);
57 	void agress(machine_config &config);
58 	void agress_map(address_map &map);
59 	void audio_map(address_map &map);
60 	void main_map(address_map &map);
61 };
62