1 // license:BSD-3-Clause
2 // copyright-holders:Angelo Salese, David Haywood
3 /*************************************************************************************
4 
5 Submarine (c) 1985 Sigma
6 
7 *************************************************************************************/
8 #ifndef MAME_INCLUDES_SUB_H
9 #define MAME_INCLUDES_SUB_H
10 
11 #pragma once
12 
13 #include "cpu/z80/z80.h"
14 #include "machine/74259.h"
15 #include "machine/gen_latch.h"
16 #include "machine/watchdog.h"
17 #include "sound/ay8910.h"
18 #include "emupal.h"
19 #include "screen.h"
20 #include "speaker.h"
21 #include "tilemap.h"
22 
23 #define MASTER_CLOCK            XTAL(18'432'000)
24 
25 class sub_state : public driver_device
26 {
27 public:
sub_state(const machine_config & mconfig,device_type type,const char * tag)28 	sub_state(const machine_config &mconfig, device_type type, const char *tag) :
29 		driver_device(mconfig, type, tag),
30 		m_maincpu(*this, "maincpu"),
31 		m_soundcpu(*this, "soundcpu"),
32 		m_gfxdecode(*this, "gfxdecode"),
33 		m_palette(*this, "palette"),
34 		m_soundlatch(*this, "soundlatch"),
35 		m_vram(*this, "vram"),
36 		m_attr(*this, "attr"),
37 		m_spriteram(*this, "spriteram"),
38 		m_spriteram2(*this, "spriteram2"),
39 		m_scrolly(*this, "scrolly")
40 	{ }
41 
42 	void sub(machine_config &config);
43 
44 private:
45 	bool m_int_en;
46 	bool m_nmi_en;
47 
48 	DECLARE_WRITE_LINE_MEMBER(int_mask_w);
49 	DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
50 	void nmi_mask_w(uint8_t data);
51 
52 	void sub_palette(palette_device &palette) const;
53 	TILE_GET_INFO_MEMBER(get_tile_info);
54 	void attr_w(offs_t offset, uint8_t data);
55 	void vram_w(offs_t offset, uint8_t data);
56 	void scrolly_w(offs_t offset, uint8_t data);
57 
58 	uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
59 	DECLARE_WRITE_LINE_MEMBER(main_irq);
60 	INTERRUPT_GEN_MEMBER(sound_irq);
61 	void subm_io(address_map &map);
62 	void subm_map(address_map &map);
63 	void subm_sound_io(address_map &map);
64 	void subm_sound_map(address_map &map);
65 
66 	virtual void machine_start() override;
67 	virtual void video_start() override;
68 
69 	tilemap_t *m_tilemap;
70 
71 	required_device<cpu_device> m_maincpu;
72 	required_device<cpu_device> m_soundcpu;
73 	required_device<gfxdecode_device> m_gfxdecode;
74 	required_device<palette_device> m_palette;
75 	required_device<generic_latch_8_device> m_soundlatch;
76 
77 	required_shared_ptr<uint8_t> m_vram;
78 	required_shared_ptr<uint8_t> m_attr;
79 	required_shared_ptr<uint8_t> m_spriteram;
80 	required_shared_ptr<uint8_t> m_spriteram2;
81 	required_shared_ptr<uint8_t> m_scrolly;
82 
83 	void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
84 };
85 
86 #endif // MAME_INCLUDES_SUB_H
87