1 // license:BSD-3-Clause
2 // copyright-holders:Takahiro Nogi
3 
4 #include "machine/nb1413m3.h"
5 #include "emupal.h"
6 #include "screen.h"
7 
8 class nbmj8891_state : public driver_device
9 {
10 public:
11 	enum
12 	{
13 		TIMER_BLITTER
14 	};
15 
nbmj8891_state(const machine_config & mconfig,device_type type,const char * tag)16 	nbmj8891_state(const machine_config &mconfig, device_type type, const char *tag)
17 		: driver_device(mconfig, type, tag)
18 		, m_maincpu(*this, "maincpu")
19 		, m_nb1413m3(*this, "nb1413m3")
20 		, m_screen(*this, "screen")
21 		, m_palette(*this, "palette")
22 		, m_clut_ptr(*this, "protection")
23 	{
24 	}
25 
26 	void mjfocusm(machine_config &config);
27 	void mjfocus(machine_config &config);
28 	void bananadr(machine_config &config);
29 	void scandal(machine_config &config);
30 	void hanamomo(machine_config &config);
31 	void telmahjn(machine_config &config);
32 	void pairsten(machine_config &config);
33 	void club90s(machine_config &config);
34 	void mgion(machine_config &config);
35 	void chinmoku(machine_config &config);
36 	void msjiken(machine_config &config);
37 	void hnageman(machine_config &config);
38 	void mjcamerb(machine_config &config);
39 	void mjnanpas(machine_config &config);
40 	void mmcamera(machine_config &config);
41 	void pairsnb(machine_config &config);
42 	void taiwanmb(machine_config &config);
43 	void hanaoji(machine_config &config);
44 	void lovehous(machine_config &config);
45 	void hnxmasev(machine_config &config);
46 	void mmaiko(machine_config &config);
47 	void maiko(machine_config &config);
48 	void mladyhtr(machine_config &config);
49 	void omotesnd(machine_config &config);
50 	void abunai(machine_config &config);
51 	void gionbana(machine_config &config);
52 	void mgmen89(machine_config &config);
53 	void scandalm(machine_config &config);
54 
55 	void init_pairsten();
56 	void init_telmahjn();
57 	void init_gionbana();
58 	void init_omotesnd();
59 	void init_scandal();
60 	void init_mgmen89();
61 	void init_mjfocusm();
62 	void init_mjfocus();
63 	void init_pairsnb();
64 	void init_mjnanpas();
65 
66 	DECLARE_READ_LINE_MEMBER(nb1413m3_outcoin_flag_r);
67 
68 private:
69 	required_device<cpu_device> m_maincpu;
70 	required_device<nb1413m3_device> m_nb1413m3;
71 	required_device<screen_device> m_screen;
72 	required_device<palette_device> m_palette;
73 	optional_region_ptr<uint8_t> m_clut_ptr;
74 
75 	int m_scrolly;
76 	int m_blitter_destx;
77 	int m_blitter_desty;
78 	int m_blitter_sizex;
79 	int m_blitter_sizey;
80 	int m_blitter_src_addr;
81 	int m_blitter_direction_x;
82 	int m_blitter_direction_y;
83 	int m_vram;
84 	int m_gfxrom;
85 	int m_dispflag;
86 	int m_flipscreen;
87 	int m_clutsel;
88 	int m_screen_refresh;
89 	int m_gfxdraw_mode;
90 	bitmap_ind16 m_tmpbitmap0;
91 	bitmap_ind16 m_tmpbitmap1;
92 	std::unique_ptr<uint8_t[]> m_videoram0;
93 	std::unique_ptr<uint8_t[]> m_videoram1;
94 	std::unique_ptr<uint8_t[]> m_palette_ptr;
95 	std::unique_ptr<uint8_t[]> m_clut;
96 	int m_param_old[0x10];
97 	int m_param_cnt;
98 	int m_flipscreen_old;
99 	emu_timer *m_blitter_timer;
100 
101 	uint8_t palette_type1_r(offs_t offset);
102 	void palette_type1_w(offs_t offset, uint8_t data);
103 	uint8_t palette_type2_r(offs_t offset);
104 	void palette_type2_w(offs_t offset, uint8_t data);
105 	uint8_t palette_type3_r(offs_t offset);
106 	void palette_type3_w(offs_t offset, uint8_t data);
107 	void clutsel_w(uint8_t data);
108 	uint8_t clut_r(offs_t offset);
109 	void clut_w(offs_t offset, uint8_t data);
110 	void blitter_w(offs_t offset, uint8_t data);
111 	void scrolly_w(uint8_t data);
112 	void vramsel_w(uint8_t data);
113 	void romsel_w(uint8_t data);
114 
115 	uint8_t taiwanmb_unk_r();
116 	void taiwanmb_blitter_w(offs_t offset, uint8_t data);
117 	void taiwanmb_gfxdraw_w(uint8_t data);
118 	void taiwanmb_gfxflag_w(uint8_t data);
119 	void taiwanmb_mcu_w(uint8_t data);
120 
121 	virtual void video_start() override;
122 	DECLARE_VIDEO_START(_1layer);
123 
124 	uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
125 	void vramflip(int vram);
126 	void update_pixel0(int x, int y);
127 	void update_pixel1(int x, int y);
128 	void gfxdraw();
129 
130 	void common_save_state();
131 	void postload();
132 
133 	void bananadr_io_map(address_map &map);
134 	void club90s_map(address_map &map);
135 	void gionbana_io_map(address_map &map);
136 	void gionbana_map(address_map &map);
137 	void hanamomo_io_map(address_map &map);
138 	void hanamomo_map(address_map &map);
139 	void hanaoji_map(address_map &map);
140 	void hnageman_map(address_map &map);
141 	void hnxmasev_map(address_map &map);
142 	void lovehous_io_map(address_map &map);
143 	void lovehous_map(address_map &map);
144 	void maiko_io_map(address_map &map);
145 	void maiko_map(address_map &map);
146 	void mgion_io_map(address_map &map);
147 	void mgion_map(address_map &map);
148 	void mmaiko_map(address_map &map);
149 	void msjiken_io_map(address_map &map);
150 	void omotesnd_io_map(address_map &map);
151 	void omotesnd_map(address_map &map);
152 	void scandal_io_map(address_map &map);
153 	void scandalm_io_map(address_map &map);
154 	void scandalm_map(address_map &map);
155 	void taiwanmb_io_map(address_map &map);
156 	void taiwanmb_map(address_map &map);
157 
158 	virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
159 };
160