summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/includes/nbmj9195.h
blob: 5b7359da55405499a25e754d0d19228604e1472d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
// license:BSD-3-Clause
// copyright-holders:Takahiro Nogi
/******************************************************************************

    nbmj9195 - Nichibutsu Mahjong games for years 1991-1995

******************************************************************************/

#include "cpu/z80/tmpz84c011.h"
#include "machine/nb1413m3.h"      // needed for mahjong input controller
#include "machine/gen_latch.h"
#include "screen.h"

#define VRAM_MAX    2

#define SCANLINE_MIN    0
#define SCANLINE_MAX    512


class nbmj9195_state : public driver_device
{
public:
	enum
	{
		TIMER_BLITTER
	};

	nbmj9195_state(const machine_config &mconfig, device_type type, const char *tag)
		: driver_device(mconfig, type, tag) ,
		m_maincpu(*this, "maincpu"),
		m_screen(*this, "screen"),
		m_palette(*this, "palette"),
		m_soundlatch(*this, "soundlatch"),
		m_palette_ptr(*this, "paletteram")
	{ }

	required_device<tmpz84c011_device> m_maincpu;
	required_device<screen_device> m_screen;
	required_device<palette_device> m_palette;
	required_device<generic_latch_8_device> m_soundlatch;

	optional_shared_ptr<uint8_t> m_palette_ptr; //shabdama doesn't use it at least for now

	int m_inputport;
	int m_dipswbitsel;
	int m_outcoin_flag;
	int m_mscoutm_inputport;
	int m_scrollx[VRAM_MAX];
	int m_scrolly[VRAM_MAX];
	int m_scrollx_raster[VRAM_MAX][SCANLINE_MAX];
	int m_scanline[VRAM_MAX];
	int m_blitter_destx[VRAM_MAX];
	int m_blitter_desty[VRAM_MAX];
	int m_blitter_sizex[VRAM_MAX];
	int m_blitter_sizey[VRAM_MAX];
	int m_blitter_src_addr[VRAM_MAX];
	int m_blitter_direction_x[VRAM_MAX];
	int m_blitter_direction_y[VRAM_MAX];
	int m_dispflag[VRAM_MAX];
	int m_flipscreen[VRAM_MAX];
	int m_clutmode[VRAM_MAX];
	int m_transparency[VRAM_MAX];
	int m_clutsel;
	int m_screen_refresh;
	int m_gfxflag2;
	int m_gfxdraw_mode;
	int m_nb19010_busyctr;
	int m_nb19010_busyflag;
	bitmap_ind16 m_tmpbitmap[VRAM_MAX];
	std::unique_ptr<uint16_t[]> m_videoram[VRAM_MAX];
	std::unique_ptr<uint16_t[]> m_videoworkram[VRAM_MAX];
	std::unique_ptr<uint8_t[]> m_clut[VRAM_MAX];
	int m_flipscreen_old[VRAM_MAX];
	emu_timer *m_blitter_timer;

	DECLARE_WRITE8_MEMBER(soundbank_w);
	DECLARE_WRITE8_MEMBER(inputportsel_w);
	DECLARE_READ8_MEMBER(mscoutm_dipsw_0_r);
	DECLARE_READ8_MEMBER(mscoutm_dipsw_1_r);
	DECLARE_READ8_MEMBER(mscoutm_cpu_portb_r);
	DECLARE_READ8_MEMBER(mscoutm_cpu_portc_r);
	DECLARE_READ8_MEMBER(others_cpu_porta_r);
	DECLARE_READ8_MEMBER(others_cpu_portb_r);
	DECLARE_READ8_MEMBER(others_cpu_portc_r);
	DECLARE_WRITE8_MEMBER(soundcpu_porte_w);
	DECLARE_WRITE8_MEMBER(palette_w);
	DECLARE_WRITE8_MEMBER(nb22090_palette_w);
	DECLARE_WRITE8_MEMBER(blitter_0_w);
	DECLARE_WRITE8_MEMBER(blitter_1_w);
	DECLARE_READ8_MEMBER(blitter_0_r);
	DECLARE_READ8_MEMBER(blitter_1_r);
	DECLARE_WRITE8_MEMBER(clut_0_w);
	DECLARE_WRITE8_MEMBER(clut_1_w);
	DECLARE_WRITE8_MEMBER(clutsel_w);
	DECLARE_WRITE8_MEMBER(gfxflag2_w);
	DECLARE_WRITE8_MEMBER(outcoin_flag_w);
	DECLARE_WRITE8_MEMBER(dipswbitsel_w);
	DECLARE_WRITE8_MEMBER(mscoutm_inputportsel_w);

	void init_nbmj9195();
	virtual void machine_start() override;
	virtual void machine_reset() override;
	virtual void video_start() override;
	DECLARE_VIDEO_START(_1layer);
	DECLARE_VIDEO_START(nb22090);

	uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
	int blitter_r(int offset, int vram);
	void blitter_w(int offset, int data, int vram);
	void clut_w(int offset, int data, int vram);
	void vramflip(int vram);
	void update_pixel(int vram, int x, int y);
	void gfxdraw(int vram);
	int dipsw_r();
	void postload();

	void NBMJDRV1_base(machine_config &config);
	void NBMJDRV1(machine_config &config);
	void NBMJDRV2(machine_config &config);
	void NBMJDRV3(machine_config &config);
	void patimono(machine_config &config);
	void mjuraden(machine_config &config);
	void psailor1(machine_config &config);
	void ngpgal(machine_config &config);
	void shabdama(machine_config &config);
	void mjgottsu(machine_config &config);
	void mkeibaou(machine_config &config);
	void gal10ren(machine_config &config);
	void mscoutm(machine_config &config);
	void imekura(machine_config &config);
	void mkoiuraa(machine_config &config);
	void mjkoiura(machine_config &config);
	void janbari(machine_config &config);
	void mjlaman(machine_config &config);
	void yosimotm(machine_config &config);
	void cmehyou(machine_config &config);
	void sailorwr(machine_config &config);
	void koinomp(machine_config &config);
	void sailorws(machine_config &config);
	void mjegolf(machine_config &config);
	void renaiclb(machine_config &config);
	void psailor2(machine_config &config);
	void yosimoto(machine_config &config);
	void pachiten(machine_config &config);
	void jituroku(machine_config &config);
	void mmehyou(machine_config &config);
	void bakuhatu(machine_config &config);
	void ultramhm(machine_config &config);
	void otatidai(machine_config &config);
	void cmehyou_io_map(address_map &map);
	void gal10ren_io_map(address_map &map);
	void imekura_io_map(address_map &map);
	void jituroku_io_map(address_map &map);
	void koinomp_io_map(address_map &map);
	void koinomp_map(address_map &map);
	void mjegolf_io_map(address_map &map);
	void mjegolf_map(address_map &map);
	void mjgottsu_io_map(address_map &map);
	void mjkoiura_io_map(address_map &map);
	void mjlaman_io_map(address_map &map);
	void mjuraden_io_map(address_map &map);
	void mjuraden_map(address_map &map);
	void mkeibaou_io_map(address_map &map);
	void mkoiuraa_io_map(address_map &map);
	void mmehyou_io_map(address_map &map);
	void mscoutm_io_map(address_map &map);
	void mscoutm_map(address_map &map);
	void ngpgal_io_map(address_map &map);
	void ngpgal_map(address_map &map);
	void otatidai_io_map(address_map &map);
	void pachiten_io_map(address_map &map);
	void patimono_io_map(address_map &map);
	void psailor1_io_map(address_map &map);
	void psailor2_io_map(address_map &map);
	void renaiclb_io_map(address_map &map);
	void sailorwr_io_map(address_map &map);
	void sailorws_io_map(address_map &map);
	void sailorws_map(address_map &map);
	void sailorws_sound_io_map(address_map &map);
	void sailorws_sound_map(address_map &map);
	void shabdama_io_map(address_map &map);
	void shabdama_map(address_map &map);
	void yosimotm_io_map(address_map &map);
	void yosimoto_io_map(address_map &map);
protected:
	virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
};