1 // license:BSD-3-Clause
2 // copyright-holders:Zsolt Vasvari
3 #ifndef MAME_INCLUDES_MARINEB_H
4 #define MAME_INCLUDES_MARINEB_H
5 
6 #pragma once
7 
8 #include "machine/74259.h"
9 #include "emupal.h"
10 #include "tilemap.h"
11 
12 class marineb_state : public driver_device
13 {
14 public:
marineb_state(const machine_config & mconfig,device_type type,const char * tag)15 	marineb_state(const machine_config &mconfig, device_type type, const char *tag) :
16 		driver_device(mconfig, type, tag),
17 		m_videoram(*this, "videoram"),
18 		m_spriteram(*this, "spriteram"),
19 		m_colorram(*this, "colorram"),
20 		m_maincpu(*this, "maincpu"),
21 		m_audiocpu(*this, "audiocpu"),
22 		m_gfxdecode(*this, "gfxdecode"),
23 		m_palette(*this, "palette"),
24 		m_outlatch(*this, "outlatch")
25 	{ }
26 
27 	void springer(machine_config &config);
28 	void wanted(machine_config &config);
29 	void hopprobo(machine_config &config);
30 	void marineb(machine_config &config);
31 	void bcruzm12(machine_config &config);
32 	void hoccer(machine_config &config);
33 	void changes(machine_config &config);
34 
35 private:
36 	required_shared_ptr<uint8_t> m_videoram;
37 	required_shared_ptr<uint8_t> m_spriteram;
38 	required_shared_ptr<uint8_t> m_colorram;
39 
40 	/* video-related */
41 	tilemap_t   *m_bg_tilemap;
42 	tilemap_t   *m_fg_tilemap;
43 	uint8_t     m_palette_bank;
44 	uint8_t     m_column_scroll;
45 	uint8_t     m_flipscreen_x;
46 	uint8_t     m_flipscreen_y;
47 
48 	/* devices */
49 	required_device<cpu_device> m_maincpu;
50 	optional_device<cpu_device> m_audiocpu;
51 	required_device<gfxdecode_device> m_gfxdecode;
52 	required_device<palette_device> m_palette;
53 	required_device<ls259_device> m_outlatch;
54 
55 	bool     m_irq_mask;
56 	DECLARE_WRITE_LINE_MEMBER(irq_mask_w);
57 	DECLARE_WRITE_LINE_MEMBER(nmi_mask_w);
58 	void marineb_videoram_w(offs_t offset, uint8_t data);
59 	void marineb_colorram_w(offs_t offset, uint8_t data);
60 	void marineb_column_scroll_w(uint8_t data);
61 	void marineb_palette_bank_0_w(uint8_t data);
62 	void marineb_palette_bank_1_w(uint8_t data);
63 	DECLARE_WRITE_LINE_MEMBER(flipscreen_x_w);
64 	DECLARE_WRITE_LINE_MEMBER(flipscreen_y_w);
65 	TILE_GET_INFO_MEMBER(get_tile_info);
66 	virtual void machine_start() override;
67 	virtual void machine_reset() override;
68 	virtual void video_start() override;
69 	void marineb_palette(palette_device &palette) const;
70 	uint32_t screen_update_marineb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
71 	uint32_t screen_update_changes(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
72 	uint32_t screen_update_springer(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
73 	uint32_t screen_update_hoccer(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
74 	uint32_t screen_update_hopprobo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
75 	DECLARE_WRITE_LINE_MEMBER(marineb_vblank_irq);
76 	DECLARE_WRITE_LINE_MEMBER(wanted_vblank_irq);
77 	void set_tilemap_scrolly( int cols );
78 	void marineb_io_map(address_map &map);
79 	void marineb_map(address_map &map);
80 	void wanted_io_map(address_map &map);
81 };
82 
83 #endif // MAME_INCLUDES_MARINEB_H
84