1 // license:BSD-3-Clause
2 // copyright-holders:David Haywood
3 
4 /*************************************************************************
5 
6     Macross Plus
7 
8 *************************************************************************/
9 #ifndef MAME_INCLUDES_MACROSSP_H
10 #define MAME_INCLUDES_MACROSSP_H
11 
12 #pragma once
13 
14 #include "machine/gen_latch.h"
15 #include "emupal.h"
16 #include "screen.h"
17 #include "tilemap.h"
18 
19 class macrossp_state : public driver_device
20 {
21 public:
macrossp_state(const machine_config & mconfig,device_type type,const char * tag)22 	macrossp_state(const machine_config &mconfig, device_type type, const char *tag) :
23 		driver_device(mconfig, type, tag),
24 		m_spriteram(*this, "spriteram"),
25 		m_scra_videoram(*this, "scra_videoram"),
26 		m_scra_linezoom(*this, "scra_linezoom"),
27 		m_scra_videoregs(*this, "scra_videoregs"),
28 
29 		m_scrb_videoram(*this, "scrb_videoram"),
30 		m_scrb_linezoom(*this, "scrb_linezoom"),
31 		m_scrb_videoregs(*this, "scrb_videoregs"),
32 
33 		m_scrc_videoram(*this, "scrc_videoram"),
34 		m_scrc_linezoom(*this, "scrc_linezoom"),
35 		m_scrc_videoregs(*this, "scrc_videoregs"),
36 
37 		m_text_videoram(*this, "text_videoram"),
38 		m_text_linezoom(*this, "text_linezoom"),
39 		m_text_videoregs(*this, "text_videoregs"),
40 
41 		m_mainram(*this, "mainram"),
42 		m_maincpu(*this, "maincpu"),
43 		m_audiocpu(*this, "audiocpu"),
44 		m_screen(*this, "screen"),
45 		m_gfxdecode(*this, "gfxdecode"),
46 		m_palette(*this, "palette"),
47 		m_soundlatch(*this, "soundlatch")
48 	{
49 	}
50 
51 	void quizmoon(machine_config &config);
52 	void macrossp(machine_config &config);
53 
54 	void init_quizmoon();
55 	void init_macrossp();
56 
57 private:
58 	/* memory pointers */
59 	required_shared_ptr<uint32_t> m_spriteram;
60 	required_shared_ptr<uint32_t> m_scra_videoram;
61 	required_shared_ptr<uint32_t> m_scra_linezoom;
62 	required_shared_ptr<uint32_t> m_scra_videoregs;
63 	required_shared_ptr<uint32_t> m_scrb_videoram;
64 	required_shared_ptr<uint32_t> m_scrb_linezoom;
65 	required_shared_ptr<uint32_t> m_scrb_videoregs;
66 	required_shared_ptr<uint32_t> m_scrc_videoram;
67 	required_shared_ptr<uint32_t> m_scrc_linezoom;
68 	required_shared_ptr<uint32_t> m_scrc_videoregs;
69 	required_shared_ptr<uint32_t> m_text_videoram;
70 	required_shared_ptr<uint32_t> m_text_linezoom;
71 	required_shared_ptr<uint32_t> m_text_videoregs;
72 	required_shared_ptr<uint32_t> m_mainram;
73 	std::unique_ptr<uint32_t[]>         m_spriteram_old;
74 	std::unique_ptr<uint32_t[]>         m_spriteram_old2;
75 
76 	/* video-related */
77 	tilemap_t  *m_scra_tilemap;
78 	tilemap_t  *m_scrb_tilemap;
79 	tilemap_t  *m_scrc_tilemap;
80 	tilemap_t  *m_text_tilemap;
81 
82 	/* misc */
83 	int              m_sndpending;
84 	int              m_snd_toggle;
85 
86 	/* devices */
87 	required_device<cpu_device> m_maincpu;
88 	required_device<cpu_device> m_audiocpu;
89 	required_device<screen_device> m_screen;
90 	required_device<gfxdecode_device> m_gfxdecode;
91 	required_device<palette_device> m_palette;
92 	required_device<generic_latch_16_device> m_soundlatch;
93 
94 	uint32_t macrossp_soundstatus_r();
95 	void macrossp_soundcmd_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
96 	uint16_t macrossp_soundcmd_r();
97 	void palette_fade_w(uint16_t data);
98 	void macrossp_speedup_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
99 	void macrossp_scra_videoram_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
100 	void macrossp_scrb_videoram_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
101 	void macrossp_scrc_videoram_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
102 	void macrossp_text_videoram_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
103 	TILE_GET_INFO_MEMBER(get_macrossp_scra_tile_info);
104 	TILE_GET_INFO_MEMBER(get_macrossp_scrb_tile_info);
105 	TILE_GET_INFO_MEMBER(get_macrossp_scrc_tile_info);
106 	TILE_GET_INFO_MEMBER(get_macrossp_text_tile_info);
107 	virtual void machine_start() override;
108 	virtual void machine_reset() override;
109 	virtual void video_start() override;
110 	uint32_t screen_update_macrossp(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
111 	DECLARE_WRITE_LINE_MEMBER(screen_vblank_macrossp);
112 	void draw_sprites(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
113 	void draw_layer(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int layer, int linem, int pri);
114 	DECLARE_WRITE_LINE_MEMBER(irqhandler);
115 
116 	void macrossp_map(address_map &map);
117 	void macrossp_es5506_bank1_map(address_map &map);
118 	void macrossp_es5506_bank3_map(address_map &map);
119 	void macrossp_sound_map(address_map &map);
120 };
121 
122 #endif // MAME_INCLUDES_MACROSSP_H
123