1 // license:BSD-3-Clause
2 // copyright-holders:Luca Elia
3 #ifndef MAME_INCLUDES_PARADISE_H
4 #define MAME_INCLUDES_PARADISE_H
5 
6 #pragma once
7 
8 #include "sound/okim6295.h"
9 #include "emupal.h"
10 #include "screen.h"
11 #include "tilemap.h"
12 
13 class paradise_state : public driver_device
14 {
15 public:
paradise_state(const machine_config & mconfig,device_type type,const char * tag)16 	paradise_state(const machine_config &mconfig, device_type type, const char *tag) :
17 		driver_device(mconfig, type, tag),
18 		m_maincpu(*this, "maincpu"),
19 		m_oki2(*this, "oki2"),
20 		m_gfxdecode(*this, "gfxdecode"),
21 		m_screen(*this, "screen"),
22 		m_palette(*this, "palette"),
23 		m_vram_0(*this, "vram_0"),
24 		m_vram_1(*this, "vram_1"),
25 		m_vram_2(*this, "vram_2"),
26 		m_videoram(*this, "videoram"),
27 		m_paletteram(*this, "paletteram"),
28 		m_spriteram(*this, "spriteram")
29 	{ }
30 
31 	void penkyi(machine_config &config);
32 	void tgtball(machine_config &config);
33 	void paradise(machine_config &config);
34 	void madball(machine_config &config);
35 	void torus(machine_config &config);
36 	void penky(machine_config &config);
37 
38 	void init_torus();
39 	void init_paradise();
40 	void init_tgtball();
41 
42 protected:
43 	virtual void machine_start() override;
44 	virtual void machine_reset() override;
45 	virtual void video_start() override;
46 
47 private:
48 	/* devices */
49 	required_device<cpu_device> m_maincpu;
50 	optional_device<okim6295_device> m_oki2;
51 	required_device<gfxdecode_device> m_gfxdecode;
52 	required_device<screen_device> m_screen;
53 	required_device<palette_device> m_palette;
54 
55 	/* memory pointers */
56 	required_shared_ptr<uint8_t> m_vram_0;
57 	required_shared_ptr<uint8_t> m_vram_1;
58 	required_shared_ptr<uint8_t> m_vram_2;
59 	required_shared_ptr<uint8_t> m_videoram;
60 	required_shared_ptr<uint8_t> m_paletteram;
61 	required_shared_ptr<uint8_t> m_spriteram;
62 
63 	/* video-related */
64 	tilemap_t *m_tilemap_0;
65 	tilemap_t *m_tilemap_1;
66 	tilemap_t *m_tilemap_2;
67 
68 	bitmap_ind16 m_tmpbitmap;
69 	uint8_t m_palbank;
70 	uint8_t m_priority;
71 	uint8_t m_pixbank;
72 	int m_sprite_inc;
73 	int m_irq_count;
74 
75 	// common
76 	void rombank_w(uint8_t data);
77 	void flipscreen_w(uint8_t data);
78 	void palette_w(offs_t offset, uint8_t data);
79 	void palbank_w(uint8_t data);
80 	void vram_0_w(offs_t offset, uint8_t data);
81 	void vram_1_w(offs_t offset, uint8_t data);
82 	void vram_2_w(offs_t offset, uint8_t data);
83 	void pixmap_w(offs_t offset, uint8_t data);
84 	void priority_w(uint8_t data);
85 
86 	// paradise specific
87 	void paradise_okibank_w(uint8_t data);
88 
89 	// torus specific
90 	void torus_coin_counter_w(uint8_t data);
91 
92 	// tgtball specific
93 	void tgtball_flipscreen_w(uint8_t data);
94 
95 	TILE_GET_INFO_MEMBER(get_tile_info_0);
96 	TILE_GET_INFO_MEMBER(get_tile_info_1);
97 	TILE_GET_INFO_MEMBER(get_tile_info_2);
98 
99 	uint32_t screen_update_paradise(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
100 	uint32_t screen_update_torus(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
101 	uint32_t screen_update_madball(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
102 
103 	INTERRUPT_GEN_MEMBER(irq);
104 
105 	void update_pix_palbank();
106 	void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
107 	void base_map(address_map &map);
108 	void paradise_io_map(address_map &map);
109 	void paradise_map(address_map &map);
110 	void tgtball_map(address_map &map);
111 	void torus_io_map(address_map &map);
112 	void torus_map(address_map &map);
113 };
114 
115 #endif // MAME_INCLUDES_PARADISE_H
116