1 // license:BSD-3-Clause
2 // copyright-holders:Takahiro Nogi
3 #ifndef MAME_INCLUDES_PASTELG_H
4 #define MAME_INCLUDES_PASTELG_H
5 
6 #pragma once
7 
8 #include "machine/nb1413m3.h"
9 #include "emupal.h"
10 #include "screen.h"
11 
12 class pastelg_common_state : public driver_device
13 {
14 public:
pastelg_common_state(const machine_config & mconfig,device_type type,const char * tag)15 	pastelg_common_state(const machine_config &mconfig, device_type type, const char *tag) :
16 		driver_device(mconfig, type, tag),
17 		m_maincpu(*this, "maincpu"),
18 		m_nb1413m3(*this, "nb1413m3"),
19 		m_screen(*this, "screen"),
20 		m_blitter_rom(*this, "blitter"),
21 		m_clut(*this, "clut")
22 	{ }
23 
24 protected:
25 	virtual void video_start() override;
26 
27 	required_device<cpu_device> m_maincpu;
28 	required_device<nb1413m3_device> m_nb1413m3;
29 	required_device<screen_device> m_screen;
30 	required_region_ptr<uint8_t> m_blitter_rom;
31 
32 	uint8_t m_gfxbank;
33 	uint8_t m_palbank;
34 	uint16_t m_blitter_src_addr;
35 
36 	uint8_t irq_ack_r();
37 	void blitter_w(offs_t offset, uint8_t data);
38 	void palette(palette_device &palette) const;
39 	uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
40 
41 	void prg_map(address_map &map);
42 
43 private:
44 	required_shared_ptr<uint8_t> m_clut;
45 
46 	uint8_t m_blitter_destx;
47 	uint8_t m_blitter_desty;
48 	uint8_t m_blitter_sizex;
49 	uint8_t m_blitter_sizey;
50 	bool m_dispflag;
51 	bool m_flipscreen;
52 	bool m_blitter_direction_x;
53 	bool m_blitter_direction_y;
54 	std::unique_ptr<uint8_t[]> m_videoram;
55 	bool m_flipscreen_old;
56 	emu_timer *m_blitter_timer;
57 
58 	void blitter_timer_callback(void *ptr, s32 param);
59 
60 	void vramflip();
61 	void gfxdraw();
62 };
63 
64 class pastelg_state : public pastelg_common_state
65 {
66 public:
pastelg_state(const machine_config & mconfig,device_type type,const char * tag)67 	pastelg_state(const machine_config &mconfig, device_type type, const char *tag) :
68 		pastelg_common_state(mconfig, type, tag),
69 		m_voice_rom(*this, "voice")
70 	{ }
71 
72 	void pastelg(machine_config &config);
73 
74 private:
75 	required_region_ptr<uint8_t> m_voice_rom;
76 
77 	uint8_t sndrom_r();
78 	void romsel_w(uint8_t data);
79 	uint16_t blitter_src_addr_r();
80 
81 	void io_map(address_map &map);
82 };
83 
84 class threeds_state : public pastelg_common_state
85 {
86 public:
threeds_state(const machine_config & mconfig,device_type type,const char * tag)87 	threeds_state(const machine_config &mconfig, device_type type, const char *tag) :
88 		pastelg_common_state(mconfig, type, tag),
89 		m_p1_keys(*this, "PL1_KEY%u", 0U),
90 		m_p2_keys(*this, "PL2_KEY%u", 0U)
91 	{ }
92 
93 	void threeds(machine_config &config);
94 
95 protected:
96 	virtual void machine_start() override;
97 
98 private:
99 	required_ioport_array<5> m_p1_keys;
100 	required_ioport_array<5> m_p2_keys;
101 
102 	uint8_t m_mux_data;
103 
104 	uint8_t inputport1_r();
105 	uint8_t inputport2_r();
106 	void inputportsel_w(uint8_t data);
107 	void romsel_w(uint8_t data);
108 	void output_w(uint8_t data);
109 	uint8_t rom_readback_r();
110 
111 	void io_map(address_map &map);
112 };
113 
114 #endif // MAME_INCLUDES_PASTELG_H
115