1 // license:BSD-3-Clause
2 // copyright-holders:Takahiro Nogi
3 
4 #include "machine/nb1413m3.h"
5 #include "machine/gen_latch.h"
6 #include "emupal.h"
7 #include "screen.h"
8 
9 class nbmj8991_state : public driver_device
10 {
11 public:
nbmj8991_state(const machine_config & mconfig,device_type type,const char * tag)12 	nbmj8991_state(const machine_config &mconfig, device_type type, const char *tag)
13 		: driver_device(mconfig, type, tag) ,
14 		m_maincpu(*this, "maincpu"),
15 		m_audiocpu(*this, "audiocpu"),
16 		m_nb1413m3(*this, "nb1413m3"),
17 		m_screen(*this, "screen"),
18 		m_palette(*this, "palette"),
19 		m_soundlatch(*this, "soundlatch"),
20 		m_generic_paletteram_8(*this, "paletteram") { }
21 
22 	void nbmjdrv1(machine_config &config);
23 	void nbmjdrv2(machine_config &config);
24 	void nbmjdrv3(machine_config &config);
25 	void tokyogal(machine_config &config);
26 	void finalbny(machine_config &config);
27 	void mjlstory(machine_config &config);
28 	void galkaika(machine_config &config);
29 	void pstadium(machine_config &config);
30 	void galkoku(machine_config &config);
31 	void av2mj2rg(machine_config &config);
32 	void av2mj1bb(machine_config &config);
33 	void vanilla(machine_config &config);
34 	void mcontest(machine_config &config);
35 	void triplew1(machine_config &config);
36 	void ntopstar(machine_config &config);
37 	void tokimbsj(machine_config &config);
38 	void triplew2(machine_config &config);
39 	void uchuuai(machine_config &config);
40 	void hyouban(machine_config &config);
41 	void qmhayaku(machine_config &config);
42 	void mjgottub(machine_config &config);
43 
44 	void init_galkaika();
45 	void init_tokimbsj();
46 	void init_tokyogal();
47 	void init_finalbny();
48 
49 private:
50 	required_device<cpu_device> m_maincpu;
51 	optional_device<cpu_device> m_audiocpu;
52 	required_device<nb1413m3_device> m_nb1413m3;
53 	required_device<screen_device> m_screen;
54 	required_device<palette_device> m_palette;
55 	optional_device<generic_latch_8_device> m_soundlatch;
56 
57 	required_shared_ptr<uint8_t> m_generic_paletteram_8;
58 
59 	enum
60 	{
61 		TIMER_BLITTER
62 	};
63 
64 	int m_scrollx;
65 	int m_scrolly;
66 	int m_blitter_destx;
67 	int m_blitter_desty;
68 	int m_blitter_sizex;
69 	int m_blitter_sizey;
70 	int m_blitter_src_addr;
71 	int m_blitter_direction_x;
72 	int m_blitter_direction_y;
73 	int m_gfxrom;
74 	int m_dispflag;
75 	int m_flipscreen;
76 	int m_clutsel;
77 	int m_screen_refresh;
78 	bitmap_ind16 m_tmpbitmap;
79 	std::unique_ptr<uint8_t[]> m_videoram;
80 	std::unique_ptr<uint8_t[]> m_clut;
81 	int m_flipscreen_old;
82 	emu_timer *m_blitter_timer;
83 
84 	void soundbank_w(uint8_t data);
85 	void palette_type1_w(offs_t offset, uint8_t data);
86 	void palette_type2_w(offs_t offset, uint8_t data);
87 	void palette_type3_w(offs_t offset, uint8_t data);
88 	void blitter_w(offs_t offset, uint8_t data);
89 	uint8_t clut_r(offs_t offset);
90 	void clut_w(offs_t offset, uint8_t data);
91 
92 	virtual void machine_reset() override;
93 	virtual void video_start() override;
94 
95 	uint32_t screen_update_type1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
96 	uint32_t screen_update_type2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
97 	void vramflip();
98 	void update_pixel(int x, int y);
99 	void gfxdraw();
100 
101 	void postload();
102 
103 	void av2mj1bb_io_map(address_map &map);
104 	void av2mj1bb_map(address_map &map);
105 	void av2mj2rg_map(address_map &map);
106 	void galkaika_map(address_map &map);
107 	void galkoku_io_map(address_map &map);
108 	void galkoku_map(address_map &map);
109 	void hyouban_io_map(address_map &map);
110 	void mjlstory_map(address_map &map);
111 	void nbmj8991_sound_io_map(address_map &map);
112 	void nbmj8991_sound_map(address_map &map);
113 	void pstadium_io_map(address_map &map);
114 	void pstadium_map(address_map &map);
115 	void tokyogal_map(address_map &map);
116 	void triplew1_map(address_map &map);
117 	void triplew2_map(address_map &map);
118 
119 	virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
120 };
121