1 // license:BSD-3-Clause
2 // copyright-holders:David Haywood
3 /*************************************************************************
4 
5     Angel Kids
6 
7 *************************************************************************/
8 #ifndef MAME_INCLUDES_ANGELKDS_H
9 #define MAME_INCLUDES_ANGELKDS_H
10 
11 #pragma once
12 
13 #include "tilemap.h"
14 
15 class angelkds_state : public driver_device
16 {
17 public:
angelkds_state(const machine_config & mconfig,device_type type,const char * tag)18 	angelkds_state(const machine_config &mconfig, device_type type, const char *tag) :
19 		driver_device(mconfig, type, tag),
20 		m_bgtopvideoram(*this, "bgtopvideoram"),
21 		m_bgbotvideoram(*this, "bgbotvideoram"),
22 		m_txvideoram(*this, "txvideoram"),
23 		m_spriteram(*this, "spriteram"),
24 		m_subcpu(*this, "sub"),
25 		m_maincpu(*this, "maincpu"),
26 		m_gfxdecode(*this, "gfxdecode"),
27 		m_decrypted_opcodes(*this, "decrypted_opcodes")
28 	{ }
29 
30 	/* memory pointers */
31 	required_shared_ptr<uint8_t> m_bgtopvideoram;
32 	required_shared_ptr<uint8_t> m_bgbotvideoram;
33 	required_shared_ptr<uint8_t> m_txvideoram;
34 	required_shared_ptr<uint8_t> m_spriteram;
35 
36 	tilemap_t    *m_tx_tilemap;
37 	tilemap_t    *m_bgbot_tilemap;
38 	tilemap_t    *m_bgtop_tilemap;
39 	int        m_txbank;
40 	int        m_bgbotbank;
41 	int        m_bgtopbank;
42 
43 	uint8_t      m_sound[4];
44 	uint8_t      m_sound2[4];
45 	uint8_t      m_layer_ctrl;
46 
47 	/* devices */
48 	required_device<cpu_device> m_subcpu;
angeklds_ff_r()49 	uint8_t angeklds_ff_r() { return 0xff; };
50 	void angelkds_cpu_bank_write(uint8_t data);
51 	void angelkds_main_sound_w(offs_t offset, uint8_t data);
52 	uint8_t angelkds_main_sound_r(offs_t offset);
53 	void angelkds_sub_sound_w(offs_t offset, uint8_t data);
54 	uint8_t angelkds_sub_sound_r(offs_t offset);
55 	void angelkds_txvideoram_w(offs_t offset, uint8_t data);
56 	void angelkds_txbank_write(uint8_t data);
57 	void angelkds_bgtopvideoram_w(offs_t offset, uint8_t data);
58 	void angelkds_bgtopbank_write(uint8_t data);
59 	void angelkds_bgtopscroll_write(uint8_t data);
60 	void angelkds_bgbotvideoram_w(offs_t offset, uint8_t data);
61 	void angelkds_bgbotbank_write(uint8_t data);
62 	void angelkds_bgbotscroll_write(uint8_t data);
63 	void angelkds_layer_ctrl_write(uint8_t data);
64 	void init_angelkds();
65 	TILE_GET_INFO_MEMBER(get_tx_tile_info);
66 	TILE_GET_INFO_MEMBER(get_bgtop_tile_info);
67 	TILE_GET_INFO_MEMBER(get_bgbot_tile_info);
68 	virtual void machine_start() override;
69 	virtual void machine_reset() override;
70 	virtual void video_start() override;
71 	uint32_t screen_update_angelkds(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
72 	void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int enable_n);
73 	required_device<cpu_device> m_maincpu;
74 	required_device<gfxdecode_device> m_gfxdecode;
75 	optional_shared_ptr<uint8_t> m_decrypted_opcodes;
76 	void angelkds(machine_config &config);
77 	void spcpostn(machine_config &config);
78 	void decrypted_opcodes_map(address_map &map);
79 	void main_map(address_map &map);
80 	void main_portmap(address_map &map);
81 	void sub_map(address_map &map);
82 	void sub_portmap(address_map &map);
83 };
84 
85 #endif // MAME_INCLUDES_ANGELKDS_H
86