1 // license:BSD-3-Clause
2 // copyright-holders:David Graves
3 // thanks-to:Richard Bush
4 /***************************************************************************
5 
6 Taito Triple Screen Games
7 =========================
8 
9 Ninja Warriors (c) 1987 Taito
10 Darius 2       (c) 1989 Taito
11 
12 David Graves
13 
14 (this is based on the F2 driver by Bryan McPhail, Brad Oliver, Andrew Prime,
15 Nicola Salmoria. Thanks to Richard Bush and the Raine team, whose open
16 source was very helpful in many areas particularly the sprites.)
17 
18                 *****
19 
20 The triple screen games operate on hardware with various similarities to
21 the Taito F2 system, as they share some custom ics e.g. the TC0100SCN.
22 
23 According to Sixtoe: "The multi-monitor systems had 2 or 3 13" screens;
24 one in the middle facing the player, and the other 1 or 2 on either side
25 mounted below and facing directly up reflecting off special semi-reflecting
26 mirrors, with about 1" of the graphics being overlapped on each screen.
27 This was the only way to get uninterrupted screens and to be able to see
28 through both ways. Otherwise you`d have the monitors' edges visible.
29 You can tell if your arcade has been cheap (like one near me) when you
30 look at the screens and can see black triangles on the left or right, this
31 means they bought ordinary mirrors and you can't see through them the
32 wrong way, as the semi-reflecting mirrors were extremely expensive."
33 
34 For each screen the games have 3 separate layers of graphics:- one
35 128x64 tiled scrolling background plane of 8x8 tiles, a similar
36 foreground plane, and a 128x32 text plane with character definitions
37 held in ram.
38 
39 Writing to the first TC0100SCN "writes through" to the two subsidiary
40 chips so that all three have identical contents. The subsidiary ones are
41 only addressed individually during initial memory checks, I think. (?)
42 
43 There is a single sprite plane which covers all 3 screens.
44 The sprites are 16x16 and are not zoomable.
45 
46 Twin 68000 processors are used; both have access to sprite ram and
47 the tilemap areas, and they communicate via 64K of shared ram.
48 
49 Sound is dealt with by a Z80 controlling a YM2610. Sound commands
50 are written to the Z80 by the 68000 (the same as in Taito F2 games).
51 
52 
53 Tilemaps
54 ========
55 
56 TC0100SCN has tilemaps twice as wide as usual. The two BG tilemaps take
57 up twice the usual space, $8000 bytes each. The text tilemap takes up
58 the usual space, because its height is halved.
59 
60 The triple palette generator (one for each screen) is probably just a
61 result of the way the hardware works: the colors in each are the same.
62 
63 
64 Ninja Warriors
65 Taito, 1987
66 
67 PCB Layout
68 ----------
69 
70 J1100136A
71 K1100313A
72 SOUND BOARD
73 |------------------------------|
74 |  Z80     16MHz        YM2610 |
75 |M      B31-37.11              |
76 |  TMM2063           TC0140SYT |
77 |  TC0060DCA                   |
78 |  TC0060DCA  YM3016-F         |
79 |  TL074 TL074 TL074           |
80 |                     B31-08.19|
81 |                     B31-09.18|
82 |  MB3735   MB3735    B31-10.17|
83 |                     B31-11.16|
84 |  VOL1     VOL2               |
85 |                        S     |
86 |------------------------------|
87 Notes:
88       Z80        - clock 4.000MHz [16/4]
89       YM2610     - clock 8.000MHz [16/2]
90       MB3735     - Audio power AMP
91       TC006DCA   - Taito custom ceramic DAC/filter module (SIL20)
92       TC0140SYT  - Taito custom sound control IC (QFP120)
93       YM3016F    - Yamaha stereo audio DAC (DOIC16)
94       TL074      - Texas Instruments low noise quad J-Fet op-amp (DIP14)
95       M          - 25 pin connector
96       S          - 30 pin flat cable joining to CPU BOARD
97       TMM2063    - 8kx8 SRAM (DIP28)
98       B31-37     - TC541000 mask ROM (DIP32)
99       Other B31* - 234000 mask ROM (DIP40)
100 
101 
102 K1100311B
103 J1100134B
104 CPU BOARD
105 |--------------------------------------------------------------|
106 |                     2018                              2063   |
107 |                    TC0070RGB   TC0110PCR    B31-02.29 43256  |
108 |     68000             2018        TC0100SCN B31-01.28 43256  |
109 |                           26.686MHz                   2063   |
110 |                B31-16.68  16MHZ                              |
111 |H                     2018                             2063   |
112 |  B31-36.97 B31-33.87  TC0070RGB  TC011PCR   B31-02.27 43256  |
113 |  B31-35.96 B31-32.86  2018       TC0100SCN  B31-01.26 43256  |
114 |  B31-34.95 B31-31.85  B31-15.62                       2063   |
115 |J    DIP28     DIP28                                          |
116 |   43256     43256                                            |
117 |                                                       2063   |
118 |                 2018            TC0100SCN  B31-02.24  43256  |
119 |     B31-17.82   TC0070RGB   TC0110PCR      B31-01.24  43256  |
120 |                     B31-14-1.54                       2063   |
121 |                                                              |
122 |                 2018                                  43256  |
123 |G                                                      43256  |
124 |                                43256     43256     B31-13.20 |
125 |                         3771   B31-45.35 B31-47.32    68000  |
126 |     PC050CM    TC0040IOC  DSWA B31-29.34 B31-27.31           |
127 |                           DSWB    DIP40             B31-12.1 |
128 |--------------------------------------------------------------|
129 Notes:
130       43256 - 32kx8 SRAM (DIP28)
131       2063  - 8kx8 SRAM (NDIP28)
132       DIP28 - Empty socket(s)
133       DIP40 - Socket for mounting 'ROM 5 BOARD'
134       2018  - 2kx8 SRAM (NDIP24)
135       H     - 12 pin connector for power input
136       J     - 15 pin connector
137       G     - 22-way edge connector
138       B31-12 to B31-17 - PALs
139 
140 
141 K9100162A
142 J9100118A
143 ROM 5 BOARD
144 |-----------------|
145 |B31-38.3 B31-40.6|
146 |B31-39.2 B31-41.5|
147 |                 |
148 | DIP40     74F139|
149 |-----------------|
150 
151 
152 K1100312A
153 J1100135A
154 OBJECT BOARD
155 |--------------------------------------------------------------|
156 |                                                              |
157 |                    B31-18.IC78                               |
158 |                                    TMM2064   TMM2064 TMM2064 |
159 |                    B31-19.IC80                               |
160 |                                    TMM2064                   |
161 |                                                              |
162 |                                                              |
163 |                             B31-20.IC119                     |
164 |                             B31-21.IC120                     |
165 |                             B31-22.IC121                     |
166 |                                                  B31-04.IC173|
167 |                                     B31-23.IC143 B31-05.IC174|
168 |                                     B31-24.IC144 B31-06.IC175|
169 |                                                  B31-07.IC176|
170 |                  MB81461 MB81461 MB81461 MB81461             |
171 |                  MB81461 MB81461 MB81461 MB81461             |
172 |                  MB81461 MB81461 MB81461 MB81461             |
173 |H                 MB81461 MB81461 MB81461 MB81461   TC0120SHT |
174 |                  MB81461 MB81461 MB81461 MB81461             |
175 |                  MB81461 MB81461 MB81461 MB81461             |
176 |                  MB81461 MB81461 MB81461 MB81461             |
177 |                  MB81461 MB81461 MB81461 MB81461             |
178 |--------------------------------------------------------------|
179 Notes:
180       B31-04 to 06   - 234000 mask ROM (DIP40)
181       B31-18 to 24   - PALs
182       MB81461        - 64kx4 dual-port DRAM (ZIP24)
183       TMM2064        - 8kx8 SRAM (DIP28)
184 
185 Dumpers Notes
186 -------------
187 
188 Ninja Warriors (JPN Ver.)
189 (c)1987 Taito
190 
191 Sound Board
192 K1100313A
193 CPU     :Z80
194 Sound   :YM2610
195 OSC     :16000.00KHz
196 Other   :TC0140SYT,TC0060DCA x2
197 -----------------------
198 B31-08.19
199 B31-09.18
200 B31-10.17
201 B31-11.16
202 B31_37.11
203 -----------------------
204 CPU Board
205 M4300086A
206 K1100311A
207 CPU     :TS68000CP8 x2
208 Sound   :YM2610
209 OSC     :26686.00KHz,16000.00KHz
210 Other   :TC0040IOC,TC0070RGB x3,TC0110PCR x3,TC0100SCN x3
211 -----------------------
212 B31-01.23
213 B31-01.26
214 B31-01.28
215 B31-02.24
216 B31-02.27
217 B31-02.29
218 B31_27.31
219 B31_28.32
220 B31_29.34
221 B31_30.35
222 B31_31.85
223 B31_32.86
224 B31_33.87
225 B31_34.95
226 B31_35.96
227 B31_36.97
228 B31_38.3
229 B31_39.2
230 B31_40.6
231 B31_41.5
232 -----------------------
233 OBJECT Board
234 K1100312A
235 Other   :TC0120SHT
236 -----------------------
237 B31-04.173
238 B31-05.174
239 B31-06.175
240 B31-07.176
241 B31-25.38
242 B31-26.58
243 
244 
245 Stephh's notes (based on the game M68000 code and some tests) :
246 
247 1) 'ninjaw*'
248 
249   - Region stored at 0x01fffe.w
250   - Sets :
251       * 'ninjaw'  : region = 0x0003
252       * 'ninjawu' : region = 0x0004
253       * 'ninjawj' : region = 0x0000
254   - Coinage relies on the region (code at 0x0013bc) :
255       * 0x0000 (Japan), 0x0001 (?) and 0x0002 (US) use TAITO_COINAGE_JAPAN_OLD
256       * 0x0003 (World) and 0x0004 (licensed to xxx) use TAITO_COINAGE_WORLD
257   - Notice screen only if region = 0x0000
258   - According to the manual, DSWB bit 6 determines continue pricing :
259                                                    ("Not Used" on Japanese manual)
260 
261     PORT_DIPNAME( 0x40, 0x00, DEF_STR( Continue_Price ) ) PORT_DIPLOCATION("SW2:7")
262     PORT_DIPSETTING(    0x40, DEF_STR( 1C_1C ) )
263     PORT_DIPSETTING(    0x00, "Same as Start" )
264 
265     However, many conditions are required to make it work due to code at 0x001404 :
266       * region must not be 0x0000
267       * coinage must be the same for both slots
268       * coinage must be 2C_1C
269     This is why this Dip Switch has NO effect in the sets we have :
270       * 'ninjaw' : coinage is always different for the 2 slots
271       * 'ninjawj' : region = 0x0000
272 
273 
274 2) 'darius2'
275 
276   - Region stored at 0x03fffe.w
277   - Sets :
278       * 'darius2' : region = 0x0001
279   - Coinage relies on the region (code at 0x00f37a) :
280       * 0x0000 (?), 0x0001 (Japan) and 0x0002 (US) use TAITO_COINAGE_JAPAN_OLD
281       * 0x0002 (US, licensed to ROMSTAR) uses slighlty different TAITO_COINAGE_US :
282         4C_3C instead of 4C_1C, same other settings otherwise
283       * 0x0003 (World) uses TAITO_COINAGE_WORLD
284   - Texts and game name rely on the region :
285       * 0x0001 : some texts in Japanese - game name is "Darius II"
286       * other : all texts in English - game name is "Sagaia"
287   - Notice screen only if region = 0x0001
288   - FBI logo only if region = 0x0002
289   - Japan version resets score on continue, other versions don't
290 
291 
292 TODO
293 ====
294 
295 Verify 68000 clock rates. Unknown sprite bits.
296 
297 
298 Ninjaw
299 ------
300 
301 "Subwoofer" sound filtering isn't perfect.
302 
303 Some enemies slide relative to the background when they should
304 be standing still. High cpu interleaving doesn't help much.
305 
306 
307 Darius 2
308 --------
309 
310 "Subwoofer" sound filtering isn't perfect.
311 
312 (When you lose a life or big enemies appear it's meant to create
313 rumbling on a subwoofer in the cabinet.)
314 
315 
316 ***************************************************************************/
317 
318 #include "emu.h"
319 #include "includes/ninjaw.h"
320 #include "includes/taitoipt.h"
321 
322 #include "cpu/z80/z80.h"
323 #include "cpu/m68000/m68000.h"
324 #include "sound/2610intf.h"
325 #include "screen.h"
326 #include "speaker.h"
327 
328 #include "ninjaw.lh"
329 
parse_control()330 void ninjaw_state::parse_control()   /* assumes Z80 sandwiched between 68Ks */
331 {
332 	/* bit 0 enables cpu B */
333 	/* however this fails when recovering from a save state
334 	   if cpu B is disabled !! */
335 	m_subcpu->set_input_line(INPUT_LINE_RESET, (m_cpua_ctrl & 0x1) ? CLEAR_LINE : ASSERT_LINE);
336 
337 }
338 
cpua_ctrl_w(u16 data)339 void ninjaw_state::cpua_ctrl_w(u16 data)
340 {
341 	if ((data &0xff00) && ((data &0xff) == 0))
342 		data = data >> 8;
343 	m_cpua_ctrl = data;
344 
345 	parse_control();
346 
347 	logerror("CPU #0 PC %06x: write %04x to cpu control\n", m_maincpu->pc(), data);
348 }
349 
350 
coin_control_w(u8 data)351 void ninjaw_state::coin_control_w(u8 data)
352 {
353 	machine().bookkeeping().coin_lockout_w(0, ~data & 0x01);
354 	machine().bookkeeping().coin_lockout_w(1, ~data & 0x02);
355 	machine().bookkeeping().coin_counter_w(0, data & 0x04);
356 	machine().bookkeeping().coin_counter_w(1, data & 0x08);
357 }
358 
359 
360 /*****************************************
361             SOUND
362 *****************************************/
363 
sound_bankswitch_w(u8 data)364 void ninjaw_state::sound_bankswitch_w(u8 data)
365 {
366 	m_z80bank->set_entry(data & 7);
367 }
368 
369 
370 /**** sound pan control ****/
371 
pancontrol_w(offs_t offset,u8 data)372 void ninjaw_state::pancontrol_w(offs_t offset, u8 data)
373 {
374 	filter_volume_device *flt = nullptr;
375 	offset &= 3;
376 	offset ^= 1;
377 
378 	switch (offset)
379 	{
380 		case 0: flt = m_2610_l[0]; break;
381 		case 1: flt = m_2610_r[0]; break;
382 		case 2: flt = m_2610_l[1]; break;
383 		case 3: flt = m_2610_r[1]; break;
384 	}
385 
386 	m_pandata[offset] = (float)data * (100.f / 255.0f);
387 	//popmessage(" pan %02x %02x %02x %02x", m_pandata[0], m_pandata[1], m_pandata[2], m_pandata[3] );
388 	flt->flt_volume_set_volume(m_pandata[offset] / 100.0);
389 }
390 
391 
tc0100scn_triple_screen_w(offs_t offset,u16 data,u16 mem_mask)392 void ninjaw_state::tc0100scn_triple_screen_w(offs_t offset, u16 data, u16 mem_mask)
393 {
394 	m_tc0100scn[0]->ram_w(offset, data, mem_mask);
395 	m_tc0100scn[1]->ram_w(offset, data, mem_mask);
396 	m_tc0100scn[2]->ram_w(offset, data, mem_mask);
397 }
398 
399 /***********************************************************
400              MEMORY STRUCTURES
401 ***********************************************************/
402 
ninjaw_master_map(address_map & map)403 void ninjaw_state::ninjaw_master_map(address_map &map)
404 {
405 	map(0x000000, 0x0bffff).rom();
406 	map(0x0c0000, 0x0cffff).ram();                                                     /* main ram */
407 	map(0x200000, 0x200003).rw("tc0040ioc", FUNC(tc0040ioc_device::read), FUNC(tc0040ioc_device::write)).umask16(0x00ff);
408 	map(0x210000, 0x210001).w(FUNC(ninjaw_state::cpua_ctrl_w));
409 	map(0x220001, 0x220001).w(m_tc0140syt, FUNC(tc0140syt_device::master_port_w));
410 	map(0x220003, 0x220003).rw(m_tc0140syt, FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
411 	map(0x240000, 0x24ffff).ram().share("share1");
412 	map(0x260000, 0x263fff).ram().share("spriteram");
413 	map(0x280000, 0x293fff).r(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r)).w(FUNC(ninjaw_state::tc0100scn_triple_screen_w)); /* tilemaps (1st screen/all screens) */
414 	map(0x2a0000, 0x2a000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
415 	map(0x2c0000, 0x2d3fff).rw(m_tc0100scn[1], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w));      /* tilemaps (2nd screen) */
416 	map(0x2e0000, 0x2e000f).rw(m_tc0100scn[1], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
417 	map(0x300000, 0x313fff).rw(m_tc0100scn[2], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w));      /* tilemaps (3rd screen) */
418 	map(0x320000, 0x32000f).rw(m_tc0100scn[2], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
419 	map(0x340000, 0x340007).rw(m_tc0110pcr[0], FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_word_w));        /* palette (1st screen) */
420 	map(0x350000, 0x350007).rw(m_tc0110pcr[1], FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_word_w));        /* palette (2nd screen) */
421 	map(0x360000, 0x360007).rw(m_tc0110pcr[2], FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_word_w));        /* palette (3rd screen) */
422 }
423 
424 // NB there could be conflicts between which cpu writes what to the
425 // palette, as our interleaving won't match the original board.
426 
ninjaw_slave_map(address_map & map)427 void ninjaw_state::ninjaw_slave_map(address_map &map)
428 {
429 	map(0x000000, 0x05ffff).rom();
430 	map(0x080000, 0x08ffff).ram(); /* main ram */
431 	map(0x200000, 0x200003).rw("tc0040ioc", FUNC(tc0040ioc_device::read), FUNC(tc0040ioc_device::write)).umask16(0x00ff);
432 	map(0x240000, 0x24ffff).ram().share("share1");
433 	map(0x260000, 0x263fff).ram().share("spriteram");
434 	map(0x280000, 0x293fff).r(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r)).w(FUNC(ninjaw_state::tc0100scn_triple_screen_w)); /* tilemaps (1st screen/all screens) */
435 	map(0x340000, 0x340007).rw(m_tc0110pcr[0], FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_word_w));        /* palette (1st screen) */
436 	map(0x350000, 0x350007).rw(m_tc0110pcr[1], FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_word_w));        /* palette (2nd screen) */
437 	map(0x360000, 0x360007).rw(m_tc0110pcr[2], FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_word_w));        /* palette (3rd screen) */
438 }
439 
darius2_master_map(address_map & map)440 void ninjaw_state::darius2_master_map(address_map &map)
441 {
442 	map(0x000000, 0x0bffff).rom();
443 	map(0x0c0000, 0x0cffff).ram();                         /* main ram */
444 	map(0x200000, 0x200003).rw("tc0040ioc", FUNC(tc0040ioc_device::read), FUNC(tc0040ioc_device::write)).umask16(0x00ff);
445 	map(0x210000, 0x210001).w(FUNC(ninjaw_state::cpua_ctrl_w));
446 	map(0x220001, 0x220001).w(m_tc0140syt, FUNC(tc0140syt_device::master_port_w));
447 	map(0x220003, 0x220003).rw(m_tc0140syt, FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
448 	map(0x240000, 0x24ffff).ram().share("share1");
449 	map(0x260000, 0x263fff).ram().share("spriteram");
450 	map(0x280000, 0x293fff).r(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r)).w(FUNC(ninjaw_state::tc0100scn_triple_screen_w)); /* tilemaps (1st screen/all screens) */
451 	map(0x2a0000, 0x2a000f).rw(m_tc0100scn[0], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
452 	map(0x2c0000, 0x2d3fff).rw(m_tc0100scn[1], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w));      /* tilemaps (2nd screen) */
453 	map(0x2e0000, 0x2e000f).rw(m_tc0100scn[1], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
454 	map(0x300000, 0x313fff).rw(m_tc0100scn[2], FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w));      /* tilemaps (3rd screen) */
455 	map(0x320000, 0x32000f).rw(m_tc0100scn[2], FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
456 	map(0x340000, 0x340007).rw(m_tc0110pcr[0], FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_word_w));        /* palette (1st screen) */
457 	map(0x350000, 0x350007).rw(m_tc0110pcr[1], FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_word_w));        /* palette (2nd screen) */
458 	map(0x360000, 0x360007).rw(m_tc0110pcr[2], FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_word_w));        /* palette (3rd screen) */
459 }
460 
darius2_slave_map(address_map & map)461 void ninjaw_state::darius2_slave_map(address_map &map)
462 {
463 	map(0x000000, 0x05ffff).rom();
464 	map(0x080000, 0x08ffff).ram();                                                     /* main ram */
465 	map(0x200000, 0x200003).rw("tc0040ioc", FUNC(tc0040ioc_device::read), FUNC(tc0040ioc_device::write)).umask16(0x00ff);
466 	map(0x240000, 0x24ffff).ram().share("share1");
467 	map(0x260000, 0x263fff).ram().share("spriteram");
468 	map(0x280000, 0x293fff).r(m_tc0100scn[0], FUNC(tc0100scn_device::ram_r)).w(FUNC(ninjaw_state::tc0100scn_triple_screen_w)); /* tilemaps (1st screen/all screens) */
469 }
470 
471 
472 /***************************************************************************/
473 
sound_map(address_map & map)474 void ninjaw_state::sound_map(address_map &map)
475 {
476 	map(0x0000, 0x3fff).rom();
477 	map(0x4000, 0x7fff).bankr("z80bank");
478 	map(0xc000, 0xdfff).ram();
479 	map(0xe000, 0xe003).rw("ymsnd", FUNC(ym2610_device::read), FUNC(ym2610_device::write));
480 	map(0xe200, 0xe200).nopr().w(m_tc0140syt, FUNC(tc0140syt_device::slave_port_w));
481 	map(0xe201, 0xe201).rw(m_tc0140syt, FUNC(tc0140syt_device::slave_comm_r), FUNC(tc0140syt_device::slave_comm_w));
482 	map(0xe400, 0xe403).w(FUNC(ninjaw_state::pancontrol_w)); /* pan */
483 	map(0xea00, 0xea00).nopr();
484 	map(0xee00, 0xee00).nopw(); /* ? */
485 	map(0xf000, 0xf000).nopw(); /* ? */
486 	map(0xf200, 0xf200).w(FUNC(ninjaw_state::sound_bankswitch_w));
487 }
488 
489 
490 /***********************************************************
491              INPUT PORTS, DIPs
492 ***********************************************************/
493 
494 static INPUT_PORTS_START( ninjaw )
495 	/* 0x200000 (port 0) -> 0x0c2291.b and 0x24122c (shared RAM) */
496 	PORT_START("DSWA")
497 	PORT_DIPNAME( 0x01, 0x01, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW1:1")
498 	PORT_DIPSETTING(    0x00, DEF_STR( No ) )
499 	PORT_DIPSETTING(    0x01, DEF_STR( Yes ) )
500 	PORT_DIPUNUSED_DIPLOC( 0x02, IP_ACTIVE_LOW, "SW1:2" )
501 	TAITO_DSWA_BITS_2_TO_3_LOC(SW1)
502 	TAITO_COINAGE_WORLD_LOC(SW1)
503 
504 	/* 0x200000 (port 1) -> 0x0c2290.b and 0x24122e (shared RAM) */
505 	PORT_START("DSWB")
506 	TAITO_DIFFICULTY_LOC(SW2)
507 	PORT_DIPUNUSED_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW2:3" )        /* Manual shows switches 3, 4, 5, 6 & 8 as not used */
508 	PORT_DIPUNUSED_DIPLOC( 0x08, IP_ACTIVE_LOW, "SW2:4" )
509 	PORT_DIPUNUSED_DIPLOC( 0x10, IP_ACTIVE_LOW, "SW2:5" )
510 	PORT_DIPUNUSED_DIPLOC( 0x20, IP_ACTIVE_LOW, "SW2:6" )
511 	PORT_DIPUNUSED_DIPLOC( 0x40, IP_ACTIVE_LOW, "SW2:7" )        /* see notes */
512 	PORT_DIPUNUSED_DIPLOC( 0x80, IP_ACTIVE_LOW, "SW2:8" )
513 
514 	PORT_START("IN0")
515 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN )                /* Stops working if this is high */
516 	PORT_BIT( 0x02, IP_ACTIVE_LOW,  IPT_UNKNOWN )
517 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN1 )
518 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN2 )
519 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Freeze") PORT_CODE(KEYCODE_F1)
520 	PORT_BIT( 0x20, IP_ACTIVE_LOW,  IPT_UNKNOWN )
521 	PORT_BIT( 0x40, IP_ACTIVE_LOW,  IPT_UNKNOWN )
522 	PORT_BIT( 0x80, IP_ACTIVE_LOW,  IPT_UNKNOWN )
523 
524 	PORT_START("IN1")
525 	TAITO_JOY_DUAL_UDRL( 1, 2 )
526 
527 	PORT_START("IN2")
528 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 )
529 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_TILT )
530 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
531 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 )
532 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
533 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
534 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
535 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
536 INPUT_PORTS_END
537 
538 /* Can't use PORT_INCLUDE because of PORT_DIPLOCATION */
539 static INPUT_PORTS_START( ninjawj )
540 	PORT_INCLUDE(ninjaw)
541 
542 	PORT_MODIFY("DSWA")
543 	TAITO_COINAGE_JAPAN_OLD_LOC(SW1)
544 INPUT_PORTS_END
545 
546 /* Can't use PORT_INCLUDE because of PORT_DIPLOCATION */
547 static INPUT_PORTS_START( darius2 )
548 	PORT_INCLUDE(ninjaw)
549 
550 	/* 0x200000 (port 0) -> 0x0c2002 (-$5ffe,A5) and 0x0c2006 (-$5ffa,A5) */
551 	PORT_MODIFY("DSWA")
552 	PORT_DIPNAME( 0x01, 0x01, "Difficulty Enhancement" ) PORT_DIPLOCATION("SW1:1")    /* code at 0x00c20e */
553 	PORT_DIPSETTING(    0x01, DEF_STR( Off ) ) // Easy  Medium  Hard  Hardest  // Japan factory default = "Off"
554 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )  // Easy- Medium+ Hard+ Hardest+ // "Easy-" is easier than "Easy". "Medium+","Hard+" and "hardest+" are harder than "Medium","Hard" and "hardest".
555 	PORT_DIPNAME( 0x02, 0x02, "Auto Fire" ) PORT_DIPLOCATION("SW1:2")
556 	PORT_DIPSETTING(    0x02, DEF_STR( Normal ) )
557 	PORT_DIPSETTING(    0x00, "Fast" )
558 	TAITO_DSWA_BITS_2_TO_3_LOC(SW1)
559 	TAITO_COINAGE_JAPAN_OLD_LOC(SW1)
560 
561 	/* 0x200000 (port 1) -> 0x0c2004 (-$5ffc,A5) and 0x0c2008 (-$5ff8,A5) */
562 	PORT_MODIFY("DSWB")
563 	TAITO_DIFFICULTY_LOC(SW2)
564 	PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:3,4")
565 	PORT_DIPSETTING(    0x0c, "every 700k" )
566 	PORT_DIPSETTING(    0x08, "every 800k" )
567 	PORT_DIPSETTING(    0x04, "every 900k" )
568 	PORT_DIPSETTING(    0x00, "every 1000k" )
569 	PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
570 	PORT_DIPSETTING(    0x30, "3" )
571 	PORT_DIPSETTING(    0x20, "4" )
572 	PORT_DIPSETTING(    0x10, "5" )
573 	PORT_DIPSETTING(    0x00, "6" )
574 	PORT_DIPNAME( 0x40, 0x40, "Invulnerability (Cheat)") PORT_DIPLOCATION("SW2:7")
575 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
576 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
577 	PORT_DIPNAME( 0x80, 0x80, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:8")
578 	PORT_DIPSETTING(    0x00, DEF_STR( No ) )
579 	PORT_DIPSETTING(    0x80, DEF_STR( Yes ) )
580 INPUT_PORTS_END
581 
582 
583 /***********************************************************
584                 GFX DECODING
585 
586     (Thanks to Raine for the obj decoding)
587 ***********************************************************/
588 
589 static const gfx_layout tilelayout =
590 {
591 	16,16,  /* 16*16 sprites */
592 	RGN_FRAC(1,1),
593 	4,  /* 4 bits per pixel */
594 	{ STEP4(0,4) },    /* pixel bits separated, jump 4 to get to next one */
595 	{ STEP4(3,-1), STEP4(4*4+3,-1), STEP4(4*4*2*8+3,-1), STEP4(4*4*2*8+4*4+3,-1) },
596 	{ STEP8(0,4*4*2), STEP8(4*4*2*8*2,4*4*2) },
597 	128*8   /* every sprite takes 128 consecutive bytes */
598 };
599 
600 static GFXDECODE_START( gfx_ninjaw )
601 	GFXDECODE_ENTRY( "sprites", 0, tilelayout, 0, 256 )   /* sprites */
602 GFXDECODE_END
603 
604 
605 /**************************************************************
606                  SUBWOOFER (SOUND)
607 **************************************************************/
608 #if 0
609 
610 class subwoofer_device : public device_t,
611 									public device_sound_interface
612 {
613 public:
614 	subwoofer_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
615 	~subwoofer_device() {}
616 
617 protected:
618 	// device-level overrides
619 	virtual void device_start();
620 
621 	// sound stream update overrides
622 	virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
623 
624 private:
625 	// internal state
626 
627 };
628 
629 extern const device_type SUBWOOFER;
630 
631 const device_type SUBWOOFER = device_creator<subwoofer_device>;
632 
633 subwoofer_device::subwoofer_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
634 	: device_t(mconfig, SUBWOOFER, "Subwoofer", tag, owner, clock),
635 		device_sound_interface(mconfig, *this)
636 {
637 }
638 
639 //-------------------------------------------------
640 //  device_start - device-specific startup
641 //-------------------------------------------------
642 
643 void subwoofer_device::device_start()
644 {
645 	/* Adjust the lowpass filter of the first three YM2610 channels */
646 
647 	/* The 150 Hz is a common top frequency played by a generic */
648 	/* subwoofer, the real Arcade Machine may differs */
649 
650 	mixer_set_lowpass_frequency(0, 20);
651 	mixer_set_lowpass_frequency(1, 20);
652 	mixer_set_lowpass_frequency(2, 20);
653 
654 	return 0;
655 }
656 
657 //-------------------------------------------------
658 //  sound_stream_update - handle a stream update
659 //-------------------------------------------------
660 
661 void subwoofer_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
662 {
663 	outputs[0].fill(0);
664 }
665 
666 
667 #endif
668 
669 
670 /*************************************************************
671                  MACHINE DRIVERS
672 
673 Ninjaw: high interleaving of 100, but doesn't stop enemies
674 "sliding" when they should be standing still relative
675 to the scrolling background.
676 
677 Darius2: arbitrary interleaving of 10 to keep cpus synced.
678 *************************************************************/
679 
device_post_load()680 void ninjaw_state::device_post_load()
681 {
682 	parse_control();
683 }
684 
machine_start()685 void ninjaw_state::machine_start()
686 {
687 	m_z80bank->configure_entries(0, 8, memregion("audiocpu")->base(), 0x4000);
688 
689 	save_item(NAME(m_cpua_ctrl));
690 	save_item(NAME(m_pandata));
691 }
692 
machine_reset()693 void ninjaw_state::machine_reset()
694 {
695 	m_cpua_ctrl = 0xff;
696 	memset(m_pandata, 0, sizeof(m_pandata));
697 
698 	/**** mixer control enable ****/
699 	machine().sound().system_enable(true);  /* mixer enabled */
700 }
701 
ninjaw(machine_config & config)702 void ninjaw_state::ninjaw(machine_config &config)
703 {
704 	/* basic machine hardware */
705 	M68000(config, m_maincpu, 16000000/2);  /* 8 MHz ? */
706 	m_maincpu->set_addrmap(AS_PROGRAM, &ninjaw_state::ninjaw_master_map);
707 	m_maincpu->set_vblank_int("lscreen", FUNC(ninjaw_state::irq4_line_hold));
708 
709 	z80_device &audiocpu(Z80(config, "audiocpu", 16000000/4));    /* 16/4 MHz ? */
710 	audiocpu.set_addrmap(AS_PROGRAM, &ninjaw_state::sound_map);
711 
712 	M68000(config, m_subcpu, 16000000/2);  /* 8 MHz ? */
713 	m_subcpu->set_addrmap(AS_PROGRAM, &ninjaw_state::ninjaw_slave_map);
714 	m_subcpu->set_vblank_int("lscreen", FUNC(ninjaw_state::irq4_line_hold));
715 
716 	// TODO: if CPUs are unsynched then seldomly stages loads up with no enemies
717 	//       Let's use a better timer (was 6000 before) based off actual CPU timing.
718 	//       Might as well bump the divider in case the bug still occurs before resorting to perfect CPU.
719 	config.set_maximum_quantum(attotime::from_hz(16000000/1024));  /* CPU slices */
720 	//config.m_perfect_cpu_quantum = subtag("maincpu");
721 
722 	tc0040ioc_device &tc0040ioc(TC0040IOC(config, "tc0040ioc", 0));
723 	tc0040ioc.read_0_callback().set_ioport("DSWA");
724 	tc0040ioc.read_1_callback().set_ioport("DSWB");
725 	tc0040ioc.read_2_callback().set_ioport("IN0");
726 	tc0040ioc.read_3_callback().set_ioport("IN1");
727 	tc0040ioc.write_4_callback().set(FUNC(ninjaw_state::coin_control_w));
728 	tc0040ioc.read_7_callback().set_ioport("IN2");
729 
730 	/* video hardware */
731 	GFXDECODE(config, m_gfxdecode[0], m_tc0110pcr[0], gfx_ninjaw);
732 	GFXDECODE(config, m_gfxdecode[1], m_tc0110pcr[1], gfx_ninjaw);
733 	GFXDECODE(config, m_gfxdecode[2], m_tc0110pcr[2], gfx_ninjaw);
734 
735 	config.set_default_layout(layout_ninjaw);
736 
737 	screen_device &lscreen(SCREEN(config, "lscreen", SCREEN_TYPE_RASTER));
738 	lscreen.set_refresh_hz(60);
739 	lscreen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
740 	lscreen.set_size(36*8, 32*8);
741 	lscreen.set_visarea(0*8, 36*8-1, 3*8, 31*8-1);
742 	lscreen.set_screen_update(FUNC(ninjaw_state::screen_update_left));
743 	lscreen.set_palette(m_tc0110pcr[0]);
744 
745 	screen_device &mscreen(SCREEN(config, "mscreen", SCREEN_TYPE_RASTER));
746 	mscreen.set_refresh_hz(60);
747 	mscreen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
748 	mscreen.set_size(36*8, 32*8);
749 	mscreen.set_visarea(0*8, 36*8-1, 3*8, 31*8-1);
750 	mscreen.set_screen_update(FUNC(ninjaw_state::screen_update_middle));
751 	mscreen.set_palette(m_tc0110pcr[1]);
752 
753 	screen_device &rscreen(SCREEN(config, "rscreen", SCREEN_TYPE_RASTER));
754 	rscreen.set_refresh_hz(60);
755 	rscreen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
756 	rscreen.set_size(36*8, 32*8);
757 	rscreen.set_visarea(0*8, 36*8-1, 3*8, 31*8-1);
758 	rscreen.set_screen_update(FUNC(ninjaw_state::screen_update_right));
759 	rscreen.set_palette(m_tc0110pcr[2]);
760 
761 	TC0100SCN(config, m_tc0100scn[0], 0);
762 	m_tc0100scn[0]->set_offsets(22, 0);
763 	m_tc0100scn[0]->set_multiscr_xoffs(0);
764 	m_tc0100scn[0]->set_multiscr_hack(0);
765 	m_tc0100scn[0]->set_palette(m_tc0110pcr[0]);
766 
767 	TC0110PCR(config, m_tc0110pcr[0], 0);
768 
769 	TC0100SCN(config, m_tc0100scn[1], 0);
770 	m_tc0100scn[1]->set_offsets(22, 0);
771 	m_tc0100scn[1]->set_multiscr_xoffs(2);
772 	m_tc0100scn[1]->set_multiscr_hack(1);
773 	m_tc0100scn[1]->set_palette(m_tc0110pcr[1]);
774 
775 	TC0110PCR(config, m_tc0110pcr[1], 0);
776 
777 	TC0100SCN(config, m_tc0100scn[2], 0);
778 	m_tc0100scn[2]->set_offsets(22, 0);
779 	m_tc0100scn[2]->set_multiscr_xoffs(4);
780 	m_tc0100scn[2]->set_multiscr_hack(1);
781 	m_tc0100scn[2]->set_palette(m_tc0110pcr[2]);
782 
783 	TC0110PCR(config, m_tc0110pcr[2], 0);
784 
785 	/* sound hardware */
786 	SPEAKER(config, "lspeaker").front_left();
787 	SPEAKER(config, "rspeaker").front_right();
788 	SPEAKER(config, "subwoofer").seat();
789 
790 	ym2610_device &ymsnd(YM2610(config, "ymsnd", 16000000/2));
791 	ymsnd.irq_handler().set_inputline("audiocpu", 0);
792 	ymsnd.add_route(0, "subwoofer", 0.25);
793 	ymsnd.add_route(1, "2610.1.l", 1.0);
794 	ymsnd.add_route(1, "2610.1.r", 1.0);
795 	ymsnd.add_route(2, "2610.2.l", 1.0);
796 	ymsnd.add_route(2, "2610.2.r", 1.0);
797 
798 	FILTER_VOLUME(config, "2610.1.l").add_route(ALL_OUTPUTS, "lspeaker", 1.0);
799 	FILTER_VOLUME(config, "2610.1.r").add_route(ALL_OUTPUTS, "rspeaker", 1.0);
800 	FILTER_VOLUME(config, "2610.2.l").add_route(ALL_OUTPUTS, "lspeaker", 1.0);
801 	FILTER_VOLUME(config, "2610.2.r").add_route(ALL_OUTPUTS, "rspeaker", 1.0);
802 
803 //  SUBWOOFER(config, "subwoofer", 0);
804 
805 	TC0140SYT(config, m_tc0140syt, 0);
806 	m_tc0140syt->set_master_tag(m_maincpu);
807 	m_tc0140syt->set_slave_tag("audiocpu");
808 }
809 
810 
darius2(machine_config & config)811 void ninjaw_state::darius2(machine_config &config)
812 {
813 	/* basic machine hardware */
814 	M68000(config, m_maincpu, 16000000/2);  /* 8 MHz ? */
815 	m_maincpu->set_addrmap(AS_PROGRAM, &ninjaw_state::darius2_master_map);
816 	m_maincpu->set_vblank_int("lscreen", FUNC(ninjaw_state::irq4_line_hold));
817 
818 	z80_device &audiocpu(Z80(config, "audiocpu", 16000000/4));    /* 4 MHz ? */
819 	audiocpu.set_addrmap(AS_PROGRAM, &ninjaw_state::sound_map);
820 
821 	M68000(config, m_subcpu, 16000000/2);  /* 8 MHz ? */
822 	m_subcpu->set_addrmap(AS_PROGRAM, &ninjaw_state::darius2_slave_map);
823 	m_subcpu->set_vblank_int("lscreen", FUNC(ninjaw_state::irq4_line_hold));
824 
825 	config.set_maximum_quantum(attotime::from_hz(16000000/1024));  /* CPU slices */
826 	//config.m_perfect_cpu_quantum = subtag("maincpu");
827 
828 	tc0040ioc_device &tc0040ioc(TC0040IOC(config, "tc0040ioc", 0));
829 	tc0040ioc.read_0_callback().set_ioport("DSWA");
830 	tc0040ioc.read_1_callback().set_ioport("DSWB");
831 	tc0040ioc.read_2_callback().set_ioport("IN0");
832 	tc0040ioc.read_3_callback().set_ioport("IN1");
833 	tc0040ioc.write_4_callback().set(FUNC(ninjaw_state::coin_control_w));
834 	tc0040ioc.read_7_callback().set_ioport("IN2");
835 
836 	/* video hardware */
837 	GFXDECODE(config, m_gfxdecode[0], m_tc0110pcr[0], gfx_ninjaw);
838 	GFXDECODE(config, m_gfxdecode[1], m_tc0110pcr[1], gfx_ninjaw);
839 	GFXDECODE(config, m_gfxdecode[2], m_tc0110pcr[2], gfx_ninjaw);
840 
841 	config.set_default_layout(layout_ninjaw);
842 
843 	screen_device &lscreen(SCREEN(config, "lscreen", SCREEN_TYPE_RASTER));
844 	lscreen.set_refresh_hz(60);
845 	lscreen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
846 	lscreen.set_size(36*8, 32*8);
847 	lscreen.set_visarea(0*8, 36*8-1, 3*8, 31*8-1);
848 	lscreen.set_screen_update(FUNC(ninjaw_state::screen_update_left));
849 	lscreen.set_palette(m_tc0110pcr[0]);
850 
851 	screen_device &mscreen(SCREEN(config, "mscreen", SCREEN_TYPE_RASTER));
852 	mscreen.set_refresh_hz(60);
853 	mscreen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
854 	mscreen.set_size(36*8, 32*8);
855 	mscreen.set_visarea(0*8, 36*8-1, 3*8, 31*8-1);
856 	mscreen.set_screen_update(FUNC(ninjaw_state::screen_update_middle));
857 	mscreen.set_palette(m_tc0110pcr[1]);
858 
859 	screen_device &rscreen(SCREEN(config, "rscreen", SCREEN_TYPE_RASTER));
860 	rscreen.set_refresh_hz(60);
861 	rscreen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
862 	rscreen.set_size(36*8, 32*8);
863 	rscreen.set_visarea(0*8, 36*8-1, 3*8, 31*8-1);
864 	rscreen.set_screen_update(FUNC(ninjaw_state::screen_update_right));
865 	rscreen.set_palette(m_tc0110pcr[2]);
866 
867 	TC0100SCN(config, m_tc0100scn[0], 0);
868 	m_tc0100scn[0]->set_offsets(22, 0);
869 	m_tc0100scn[0]->set_multiscr_xoffs(0);
870 	m_tc0100scn[0]->set_multiscr_hack(0);
871 	m_tc0100scn[0]->set_palette(m_tc0110pcr[0]);
872 
873 	TC0110PCR(config, m_tc0110pcr[0], 0);
874 
875 	TC0100SCN(config, m_tc0100scn[1], 0);
876 	m_tc0100scn[1]->set_offsets(22, 0);
877 	m_tc0100scn[1]->set_multiscr_xoffs(2);
878 	m_tc0100scn[1]->set_multiscr_hack(1);
879 	m_tc0100scn[1]->set_palette(m_tc0110pcr[1]);
880 
881 	TC0110PCR(config, m_tc0110pcr[1], 0);
882 
883 	TC0100SCN(config, m_tc0100scn[2], 0);
884 	m_tc0100scn[2]->set_offsets(22, 0);
885 	m_tc0100scn[2]->set_multiscr_xoffs(4);
886 	m_tc0100scn[2]->set_multiscr_hack(1);
887 	m_tc0100scn[2]->set_palette(m_tc0110pcr[2]);
888 
889 	TC0110PCR(config, m_tc0110pcr[2], 0);
890 
891 	/* sound hardware */
892 	SPEAKER(config, "lspeaker").front_left();
893 	SPEAKER(config, "rspeaker").front_right();
894 	SPEAKER(config, "subwoofer").seat();
895 
896 	ym2610_device &ymsnd(YM2610(config, "ymsnd", 16000000/2));
897 	ymsnd.irq_handler().set_inputline("audiocpu", 0);
898 	ymsnd.add_route(0, "subwoofer", 0.25);
899 	ymsnd.add_route(1, "2610.1.l", 1.0);
900 	ymsnd.add_route(1, "2610.1.r", 1.0);
901 	ymsnd.add_route(2, "2610.2.l", 1.0);
902 	ymsnd.add_route(2, "2610.2.r", 1.0);
903 
904 	FILTER_VOLUME(config, "2610.1.l").add_route(ALL_OUTPUTS, "lspeaker", 1.0);
905 	FILTER_VOLUME(config, "2610.1.r").add_route(ALL_OUTPUTS, "rspeaker", 1.0);
906 	FILTER_VOLUME(config, "2610.2.l").add_route(ALL_OUTPUTS, "lspeaker", 1.0);
907 	FILTER_VOLUME(config, "2610.2.r").add_route(ALL_OUTPUTS, "rspeaker", 1.0);
908 
909 //  SUBWOOFER(config, "subwoofer", 0);
910 
911 	TC0140SYT(config, m_tc0140syt, 0);
912 	m_tc0140syt->set_master_tag(m_maincpu);
913 	m_tc0140syt->set_slave_tag("audiocpu");
914 }
915 
916 
917 /***************************************************************************
918                     DRIVERS
919 ***************************************************************************/
920 
921 ROM_START( ninjaw )
922 	ROM_REGION( 0xc0000, "maincpu", 0 ) /* 256K for 68000 CPUA code */
923 	ROM_LOAD16_BYTE( "b31_45.35", 0x00000, 0x10000, CRC(107902c3) SHA1(026f71a918059e3374ae262304a2ee1270f5c5bd) ) /* For these 2 roms:   Revised code base compared to the Japanese set below? */
924 	ROM_LOAD16_BYTE( "b31_47.32", 0x00001, 0x10000, CRC(bd536b1e) SHA1(39c86cbb3a33fc77a0141b5648a1aca862e0a5fd) ) /* For these 2 roms:   higher rom numbers seem to indicate that is the case  */
925 	ROM_LOAD16_BYTE( "b31_29.34", 0x20000, 0x10000, CRC(f2941a37) SHA1(cf1f231d9caddc903116a8b654f49181ca459697) )
926 	ROM_LOAD16_BYTE( "b31_27.31", 0x20001, 0x10000, CRC(2f3ff642) SHA1(7d6775b51d96b459b163d8fde2385b0e3f5242ca) )
927 
928 	ROM_LOAD16_BYTE( "b31_41.5", 0x40000, 0x20000, CRC(0daef28a) SHA1(7c7e16b0eebc589ab99f62ddb98b372596ff5ae6) )   /* data roms ? */
929 	ROM_LOAD16_BYTE( "b31_39.2", 0x40001, 0x20000, CRC(e9197c3c) SHA1(a7f0ef2b3c4258c09edf05284fec45832a8fb147) )
930 	ROM_LOAD16_BYTE( "b31_40.6", 0x80000, 0x20000, CRC(2ce0f24e) SHA1(39632397ac7e8457607c32c31fccf1c08d4b2621) )
931 	ROM_LOAD16_BYTE( "b31_38.3", 0x80001, 0x20000, CRC(bc68cd99) SHA1(bb31ea589339c9f9b61e312e1024b5c8410cdb43) )
932 
933 	ROM_REGION( 0x60000, "sub", 0 ) /* 384K for 68000 CPUB code */
934 	ROM_LOAD16_BYTE( "b31_33.87", 0x00000, 0x10000, CRC(6ce9af44) SHA1(486e332af238c211c3f64f7ead114282661687c4) )
935 	ROM_LOAD16_BYTE( "b31_36.97", 0x00001, 0x10000, CRC(ba20b0d4) SHA1(fb3dcb7681a95087afac9aa9393765d786243486) )
936 	ROM_LOAD16_BYTE( "b31_32.86", 0x20000, 0x10000, CRC(e6025fec) SHA1(071f83a9ddebe67bd6c6c2505318e177895163ee) )
937 	ROM_LOAD16_BYTE( "b31_35.96", 0x20001, 0x10000, CRC(70d9a89f) SHA1(20f846beb052fd8cddcf00c3e42e3304e102a87b) )
938 	ROM_LOAD16_BYTE( "b31_31.85", 0x40000, 0x10000, CRC(837f47e2) SHA1(88d596f01566456ba18a01afd0a6a7c121d3ca88) )
939 	ROM_LOAD16_BYTE( "b31_34.95", 0x40001, 0x10000, CRC(d6b5fb2a) SHA1(e3ae0d7ec62740465a90e4939b10341d3866d860) )
940 
941 	ROM_REGION( 0x20000, "audiocpu", 0 )    /* sound cpu */
942 	ROM_LOAD( "b31_37.11",  0x00000, 0x20000, CRC(0ca5799d) SHA1(6485dde076d15b69b9ee65880dda57ad4f8d129c) )
943 
944 	ROM_REGION( 0x200000, "sprites", 0 )
945 	ROM_LOAD16_WORD_SWAP( "b31-07.176", 0x000000, 0x80000, CRC(33568cdb) SHA1(87abf56bbbd3659a1bd3e6ce9e43176be7950b41) )   /* OBJ */
946 	ROM_LOAD16_WORD_SWAP( "b31-06.175", 0x080000, 0x80000, CRC(0d59439e) SHA1(54d844492888e7fe2c3bc61afe64f8d47fdee8dc) )
947 	ROM_LOAD16_WORD_SWAP( "b31-05.174", 0x100000, 0x80000, CRC(0a1fc9fb) SHA1(a5d6975fd4f7e689c8cafd7c9cd3787797955779) )
948 	ROM_LOAD16_WORD_SWAP( "b31-04.173", 0x180000, 0x80000, CRC(2e1e4cb5) SHA1(4733cfc015a68e021108a9e1e8ea807b0e7eac7a) )
949 
950 	ROM_REGION( 0x100000, "tc0100scn_1", 0 )
951 	ROM_LOAD16_WORD_SWAP( "b31-01.23", 0x00000, 0x80000, CRC(8e8237a7) SHA1(3e181a153d9b4b7f6a620614ea9022285583a5b5) ) /* SCR (screen 1) */
952 	ROM_LOAD16_WORD_SWAP( "b31-02.24", 0x80000, 0x80000, CRC(4c3b4e33) SHA1(f99b379be1af085bf102d4d7cf35803e002fe80b) )
953 
954 	ROM_REGION( 0x100000, "tc0100scn_2", 0 )
955 	ROM_LOAD16_WORD_SWAP( "b31-01.26", 0x00000, 0x80000, CRC(8e8237a7) SHA1(3e181a153d9b4b7f6a620614ea9022285583a5b5) ) /* SCR (screen 2) */
956 	ROM_LOAD16_WORD_SWAP( "b31-02.27", 0x80000, 0x80000, CRC(4c3b4e33) SHA1(f99b379be1af085bf102d4d7cf35803e002fe80b) )
957 
958 	ROM_REGION( 0x100000, "tc0100scn_3", 0 )
959 	ROM_LOAD16_WORD_SWAP( "b31-01.28", 0x00000, 0x80000, CRC(8e8237a7) SHA1(3e181a153d9b4b7f6a620614ea9022285583a5b5) ) /* SCR (screen 3) */
960 	ROM_LOAD16_WORD_SWAP( "b31-02.29", 0x80000, 0x80000, CRC(4c3b4e33) SHA1(f99b379be1af085bf102d4d7cf35803e002fe80b) )
961 
962 	ROM_REGION( 0x180000, "ymsnd", 0 )  /* ADPCM samples */
963 	ROM_LOAD( "b31-09.18", 0x000000, 0x80000, CRC(60a73382) SHA1(0ddeb86fcd4d19a58e62bf8564f996d17e36e5c5) )
964 	ROM_LOAD( "b31-10.17", 0x080000, 0x80000, CRC(c6434aef) SHA1(3348ce87882e3f668aa85bbb517975ec1fc9b6fd) )
965 	ROM_LOAD( "b31-11.16", 0x100000, 0x80000, CRC(8da531d4) SHA1(525dfab0a0729e9fb6f0e4c8187bf4ce16321b20) )
966 
967 	ROM_REGION( 0x80000, "ymsnd.deltat", 0 )    /* Delta-T samples */
968 	ROM_LOAD( "b31-08.19", 0x000000, 0x80000, CRC(a0a1f87d) SHA1(6b0f8094f3a3ef1ced76984e333e22a17c51af29) )
969 
970 	ROM_REGION( 0x01000, "user1", 0 )   /* unknown roms */
971 	ROM_LOAD( "b31-25.38", 0x00000, 0x200, CRC(a0b4ba48) SHA1(dc9a46366a0cbf63a609f177c3d3ba9675416662) )
972 	ROM_LOAD( "b31-26.58", 0x00000, 0x200, CRC(13e5fe15) SHA1(c973c7965954a2a0b427908f099592ed89cf0ff0) )
973 ROM_END
974 
975 ROM_START( ninjaw1 )
976 	ROM_REGION( 0xc0000, "maincpu", 0 ) /* 256K for 68000 CPUA code */
977 	ROM_LOAD16_BYTE( "b31_30.35", 0x00000, 0x10000, CRC(056edd9f) SHA1(8922cede80b31ce0f7a00c8cab13d835464c6058) ) /* For these 2 roms:  Same code base as the Japanese set below */
978 	ROM_LOAD16_BYTE( "b31_43.32", 0x00001, 0x10000, CRC(56ae37a6) SHA1(ddd5be455682df2c63721facee813be652863aa5) ) /* For these 2 roms:  original Taito rom, 1 byte region change */
979 	ROM_LOAD16_BYTE( "b31_29.34", 0x20000, 0x10000, CRC(f2941a37) SHA1(cf1f231d9caddc903116a8b654f49181ca459697) )
980 	ROM_LOAD16_BYTE( "b31_27.31", 0x20001, 0x10000, CRC(2f3ff642) SHA1(7d6775b51d96b459b163d8fde2385b0e3f5242ca) )
981 
982 	ROM_LOAD16_BYTE( "b31_41.5", 0x40000, 0x20000, CRC(0daef28a) SHA1(7c7e16b0eebc589ab99f62ddb98b372596ff5ae6) )   /* data roms ? */
983 	ROM_LOAD16_BYTE( "b31_39.2", 0x40001, 0x20000, CRC(e9197c3c) SHA1(a7f0ef2b3c4258c09edf05284fec45832a8fb147) )
984 	ROM_LOAD16_BYTE( "b31_40.6", 0x80000, 0x20000, CRC(2ce0f24e) SHA1(39632397ac7e8457607c32c31fccf1c08d4b2621) )
985 	ROM_LOAD16_BYTE( "b31_38.3", 0x80001, 0x20000, CRC(bc68cd99) SHA1(bb31ea589339c9f9b61e312e1024b5c8410cdb43) )
986 
987 	ROM_REGION( 0x60000, "sub", 0 ) /* 384K for 68000 CPUB code */
988 	ROM_LOAD16_BYTE( "b31_33.87", 0x00000, 0x10000, CRC(6ce9af44) SHA1(486e332af238c211c3f64f7ead114282661687c4) )
989 	ROM_LOAD16_BYTE( "b31_36.97", 0x00001, 0x10000, CRC(ba20b0d4) SHA1(fb3dcb7681a95087afac9aa9393765d786243486) )
990 	ROM_LOAD16_BYTE( "b31_32.86", 0x20000, 0x10000, CRC(e6025fec) SHA1(071f83a9ddebe67bd6c6c2505318e177895163ee) )
991 	ROM_LOAD16_BYTE( "b31_35.96", 0x20001, 0x10000, CRC(70d9a89f) SHA1(20f846beb052fd8cddcf00c3e42e3304e102a87b) )
992 	ROM_LOAD16_BYTE( "b31_31.85", 0x40000, 0x10000, CRC(837f47e2) SHA1(88d596f01566456ba18a01afd0a6a7c121d3ca88) )
993 	ROM_LOAD16_BYTE( "b31_34.95", 0x40001, 0x10000, CRC(d6b5fb2a) SHA1(e3ae0d7ec62740465a90e4939b10341d3866d860) )
994 
995 	ROM_REGION( 0x20000, "audiocpu", 0 )    /* sound cpu */
996 	ROM_LOAD( "b31_37.11",  0x00000, 0x20000, CRC(0ca5799d) SHA1(6485dde076d15b69b9ee65880dda57ad4f8d129c) )
997 
998 	ROM_REGION( 0x200000, "sprites", 0 )
999 	ROM_LOAD16_WORD_SWAP( "b31-07.176", 0x000000, 0x80000, CRC(33568cdb) SHA1(87abf56bbbd3659a1bd3e6ce9e43176be7950b41) )   /* OBJ */
1000 	ROM_LOAD16_WORD_SWAP( "b31-06.175", 0x080000, 0x80000, CRC(0d59439e) SHA1(54d844492888e7fe2c3bc61afe64f8d47fdee8dc) )
1001 	ROM_LOAD16_WORD_SWAP( "b31-05.174", 0x100000, 0x80000, CRC(0a1fc9fb) SHA1(a5d6975fd4f7e689c8cafd7c9cd3787797955779) )
1002 	ROM_LOAD16_WORD_SWAP( "b31-04.173", 0x180000, 0x80000, CRC(2e1e4cb5) SHA1(4733cfc015a68e021108a9e1e8ea807b0e7eac7a) )
1003 
1004 	ROM_REGION( 0x100000, "tc0100scn_1", 0 )
1005 	ROM_LOAD16_WORD_SWAP( "b31-01.23", 0x00000, 0x80000, CRC(8e8237a7) SHA1(3e181a153d9b4b7f6a620614ea9022285583a5b5) ) /* SCR (screen 1) */
1006 	ROM_LOAD16_WORD_SWAP( "b31-02.24", 0x80000, 0x80000, CRC(4c3b4e33) SHA1(f99b379be1af085bf102d4d7cf35803e002fe80b) )
1007 
1008 	ROM_REGION( 0x100000, "tc0100scn_2", 0 )
1009 	ROM_LOAD16_WORD_SWAP( "b31-01.26", 0x00000, 0x80000, CRC(8e8237a7) SHA1(3e181a153d9b4b7f6a620614ea9022285583a5b5) ) /* SCR (screen 2) */
1010 	ROM_LOAD16_WORD_SWAP( "b31-02.27", 0x80000, 0x80000, CRC(4c3b4e33) SHA1(f99b379be1af085bf102d4d7cf35803e002fe80b) )
1011 
1012 	ROM_REGION( 0x100000, "tc0100scn_3", 0 )
1013 	ROM_LOAD16_WORD_SWAP( "b31-01.28", 0x00000, 0x80000, CRC(8e8237a7) SHA1(3e181a153d9b4b7f6a620614ea9022285583a5b5) ) /* SCR (screen 3) */
1014 	ROM_LOAD16_WORD_SWAP( "b31-02.29", 0x80000, 0x80000, CRC(4c3b4e33) SHA1(f99b379be1af085bf102d4d7cf35803e002fe80b) )
1015 
1016 	ROM_REGION( 0x180000, "ymsnd", 0 )  /* ADPCM samples */
1017 	ROM_LOAD( "b31-09.18", 0x000000, 0x80000, CRC(60a73382) SHA1(0ddeb86fcd4d19a58e62bf8564f996d17e36e5c5) )
1018 	ROM_LOAD( "b31-10.17", 0x080000, 0x80000, CRC(c6434aef) SHA1(3348ce87882e3f668aa85bbb517975ec1fc9b6fd) )
1019 	ROM_LOAD( "b31-11.16", 0x100000, 0x80000, CRC(8da531d4) SHA1(525dfab0a0729e9fb6f0e4c8187bf4ce16321b20) )
1020 
1021 	ROM_REGION( 0x80000, "ymsnd.deltat", 0 )    /* Delta-T samples */
1022 	ROM_LOAD( "b31-08.19", 0x000000, 0x80000, CRC(a0a1f87d) SHA1(6b0f8094f3a3ef1ced76984e333e22a17c51af29) )
1023 
1024 	ROM_REGION( 0x01000, "user1", 0 )   /* unknown roms */
1025 	ROM_LOAD( "b31-25.38", 0x00000, 0x200, CRC(a0b4ba48) SHA1(dc9a46366a0cbf63a609f177c3d3ba9675416662) )
1026 	ROM_LOAD( "b31-26.58", 0x00000, 0x200, CRC(13e5fe15) SHA1(c973c7965954a2a0b427908f099592ed89cf0ff0) )
1027 ROM_END
1028 
1029 ROM_START( ninjawu )
1030 	ROM_REGION( 0xc0000, "maincpu", 0 ) /* 256K for 68000 CPUA code */
1031 	ROM_LOAD16_BYTE( "b31_49.35", 0x00000, 0x10000, CRC(d38b6391) SHA1(4711e059531566b779e95619c47621fdbfba2e56) ) /* For these 2 roms:   Revised code base compared to the Japanese set below? */
1032 	ROM_LOAD16_BYTE( "b31_48.32", 0x00001, 0x10000, CRC(4b5bb3d8) SHA1(b0e2059e0fe682ef8152690d93392bdd4fda8149) ) /* For these 2 roms:   higher rom numbers seem to indicate that is the case  */
1033 	ROM_LOAD16_BYTE( "b31_29.34", 0x20000, 0x10000, CRC(f2941a37) SHA1(cf1f231d9caddc903116a8b654f49181ca459697) )
1034 	ROM_LOAD16_BYTE( "b31_27.31", 0x20001, 0x10000, CRC(2f3ff642) SHA1(7d6775b51d96b459b163d8fde2385b0e3f5242ca) )
1035 
1036 	ROM_LOAD16_BYTE( "b31_41.5", 0x40000, 0x20000, CRC(0daef28a) SHA1(7c7e16b0eebc589ab99f62ddb98b372596ff5ae6) )   /* data roms ? */
1037 	ROM_LOAD16_BYTE( "b31_39.2", 0x40001, 0x20000, CRC(e9197c3c) SHA1(a7f0ef2b3c4258c09edf05284fec45832a8fb147) )
1038 	ROM_LOAD16_BYTE( "b31_40.6", 0x80000, 0x20000, CRC(2ce0f24e) SHA1(39632397ac7e8457607c32c31fccf1c08d4b2621) )
1039 	ROM_LOAD16_BYTE( "b31_38.3", 0x80001, 0x20000, CRC(bc68cd99) SHA1(bb31ea589339c9f9b61e312e1024b5c8410cdb43) )
1040 
1041 	ROM_REGION( 0x60000, "sub", 0 ) /* 384K for 68000 CPUB code */
1042 	ROM_LOAD16_BYTE( "b31_33.87", 0x00000, 0x10000, CRC(6ce9af44) SHA1(486e332af238c211c3f64f7ead114282661687c4) )
1043 	ROM_LOAD16_BYTE( "b31_36.97", 0x00001, 0x10000, CRC(ba20b0d4) SHA1(fb3dcb7681a95087afac9aa9393765d786243486) )
1044 	ROM_LOAD16_BYTE( "b31_32.86", 0x20000, 0x10000, CRC(e6025fec) SHA1(071f83a9ddebe67bd6c6c2505318e177895163ee) )
1045 	ROM_LOAD16_BYTE( "b31_35.96", 0x20001, 0x10000, CRC(70d9a89f) SHA1(20f846beb052fd8cddcf00c3e42e3304e102a87b) )
1046 	ROM_LOAD16_BYTE( "b31_31.85", 0x40000, 0x10000, CRC(837f47e2) SHA1(88d596f01566456ba18a01afd0a6a7c121d3ca88) )
1047 	ROM_LOAD16_BYTE( "b31_34.95", 0x40001, 0x10000, CRC(d6b5fb2a) SHA1(e3ae0d7ec62740465a90e4939b10341d3866d860) )
1048 
1049 	ROM_REGION( 0x20000, "audiocpu", 0 )    /* sound cpu */
1050 	ROM_LOAD( "b31_37.11",  0x00000, 0x20000, CRC(0ca5799d) SHA1(6485dde076d15b69b9ee65880dda57ad4f8d129c) )
1051 
1052 	ROM_REGION( 0x200000, "sprites", 0 )
1053 	ROM_LOAD16_WORD_SWAP( "b31-07.176", 0x000000, 0x80000, CRC(33568cdb) SHA1(87abf56bbbd3659a1bd3e6ce9e43176be7950b41) )   /* OBJ */
1054 	ROM_LOAD16_WORD_SWAP( "b31-06.175", 0x080000, 0x80000, CRC(0d59439e) SHA1(54d844492888e7fe2c3bc61afe64f8d47fdee8dc) )
1055 	ROM_LOAD16_WORD_SWAP( "b31-05.174", 0x100000, 0x80000, CRC(0a1fc9fb) SHA1(a5d6975fd4f7e689c8cafd7c9cd3787797955779) )
1056 	ROM_LOAD16_WORD_SWAP( "b31-04.173", 0x180000, 0x80000, CRC(2e1e4cb5) SHA1(4733cfc015a68e021108a9e1e8ea807b0e7eac7a) )
1057 
1058 	ROM_REGION( 0x100000, "tc0100scn_1", 0 )
1059 	ROM_LOAD16_WORD_SWAP( "b31-01.23", 0x00000, 0x80000, CRC(8e8237a7) SHA1(3e181a153d9b4b7f6a620614ea9022285583a5b5) ) /* SCR (screen 1) */
1060 	ROM_LOAD16_WORD_SWAP( "b31-02.24", 0x80000, 0x80000, CRC(4c3b4e33) SHA1(f99b379be1af085bf102d4d7cf35803e002fe80b) )
1061 
1062 	ROM_REGION( 0x100000, "tc0100scn_2", 0 )
1063 	ROM_LOAD16_WORD_SWAP( "b31-01.26", 0x00000, 0x80000, CRC(8e8237a7) SHA1(3e181a153d9b4b7f6a620614ea9022285583a5b5) ) /* SCR (screen 2) */
1064 	ROM_LOAD16_WORD_SWAP( "b31-02.27", 0x80000, 0x80000, CRC(4c3b4e33) SHA1(f99b379be1af085bf102d4d7cf35803e002fe80b) )
1065 
1066 	ROM_REGION( 0x100000, "tc0100scn_3", 0 )
1067 	ROM_LOAD16_WORD_SWAP( "b31-01.28", 0x00000, 0x80000, CRC(8e8237a7) SHA1(3e181a153d9b4b7f6a620614ea9022285583a5b5) ) /* SCR (screen 3) */
1068 	ROM_LOAD16_WORD_SWAP( "b31-02.29", 0x80000, 0x80000, CRC(4c3b4e33) SHA1(f99b379be1af085bf102d4d7cf35803e002fe80b) )
1069 
1070 	ROM_REGION( 0x180000, "ymsnd", 0 )  /* ADPCM samples */
1071 	ROM_LOAD( "b31-09.18", 0x000000, 0x80000, CRC(60a73382) SHA1(0ddeb86fcd4d19a58e62bf8564f996d17e36e5c5) )
1072 	ROM_LOAD( "b31-10.17", 0x080000, 0x80000, CRC(c6434aef) SHA1(3348ce87882e3f668aa85bbb517975ec1fc9b6fd) )
1073 	ROM_LOAD( "b31-11.16", 0x100000, 0x80000, CRC(8da531d4) SHA1(525dfab0a0729e9fb6f0e4c8187bf4ce16321b20) )
1074 
1075 	ROM_REGION( 0x80000, "ymsnd.deltat", 0 )    /* Delta-T samples */
1076 	ROM_LOAD( "b31-08.19", 0x000000, 0x80000, CRC(a0a1f87d) SHA1(6b0f8094f3a3ef1ced76984e333e22a17c51af29) )
1077 
1078 	ROM_REGION( 0x01000, "user1", 0 )   /* unknown roms */
1079 	ROM_LOAD( "b31-25.38", 0x00000, 0x200, CRC(a0b4ba48) SHA1(dc9a46366a0cbf63a609f177c3d3ba9675416662) )
1080 	ROM_LOAD( "b31-26.58", 0x00000, 0x200, CRC(13e5fe15) SHA1(c973c7965954a2a0b427908f099592ed89cf0ff0) )
1081 ROM_END
1082 
1083 ROM_START( ninjawj )
1084 	ROM_REGION( 0xc0000, "maincpu", 0 ) /* 256K for 68000 CPUA code */
1085 	ROM_LOAD16_BYTE( "b31_30.35", 0x00000, 0x10000, CRC(056edd9f) SHA1(8922cede80b31ce0f7a00c8cab13d835464c6058) )
1086 	ROM_LOAD16_BYTE( "b31_28.32", 0x00001, 0x10000, CRC(cfa7661c) SHA1(a7a6abb33a514d910e3198d5acbd4c31b2434b6c) )
1087 	ROM_LOAD16_BYTE( "b31_29.34", 0x20000, 0x10000, CRC(f2941a37) SHA1(cf1f231d9caddc903116a8b654f49181ca459697) )
1088 	ROM_LOAD16_BYTE( "b31_27.31", 0x20001, 0x10000, CRC(2f3ff642) SHA1(7d6775b51d96b459b163d8fde2385b0e3f5242ca) )
1089 
1090 	ROM_LOAD16_BYTE( "b31_41.5", 0x40000, 0x20000, CRC(0daef28a) SHA1(7c7e16b0eebc589ab99f62ddb98b372596ff5ae6) )   /* data roms ? */
1091 	ROM_LOAD16_BYTE( "b31_39.2", 0x40001, 0x20000, CRC(e9197c3c) SHA1(a7f0ef2b3c4258c09edf05284fec45832a8fb147) )
1092 	ROM_LOAD16_BYTE( "b31_40.6", 0x80000, 0x20000, CRC(2ce0f24e) SHA1(39632397ac7e8457607c32c31fccf1c08d4b2621) )
1093 	ROM_LOAD16_BYTE( "b31_38.3", 0x80001, 0x20000, CRC(bc68cd99) SHA1(bb31ea589339c9f9b61e312e1024b5c8410cdb43) )
1094 
1095 	ROM_REGION( 0x60000, "sub", 0 ) /* 384K for 68000 CPUB code */
1096 	ROM_LOAD16_BYTE( "b31_33.87", 0x00000, 0x10000, CRC(6ce9af44) SHA1(486e332af238c211c3f64f7ead114282661687c4) )
1097 	ROM_LOAD16_BYTE( "b31_36.97", 0x00001, 0x10000, CRC(ba20b0d4) SHA1(fb3dcb7681a95087afac9aa9393765d786243486) )
1098 	ROM_LOAD16_BYTE( "b31_32.86", 0x20000, 0x10000, CRC(e6025fec) SHA1(071f83a9ddebe67bd6c6c2505318e177895163ee) )
1099 	ROM_LOAD16_BYTE( "b31_35.96", 0x20001, 0x10000, CRC(70d9a89f) SHA1(20f846beb052fd8cddcf00c3e42e3304e102a87b) )
1100 	ROM_LOAD16_BYTE( "b31_31.85", 0x40000, 0x10000, CRC(837f47e2) SHA1(88d596f01566456ba18a01afd0a6a7c121d3ca88) )
1101 	ROM_LOAD16_BYTE( "b31_34.95", 0x40001, 0x10000, CRC(d6b5fb2a) SHA1(e3ae0d7ec62740465a90e4939b10341d3866d860) )
1102 
1103 	ROM_REGION( 0x20000, "audiocpu", 0 )    /* sound cpu */
1104 	ROM_LOAD( "b31_37.11",  0x00000, 0x20000, CRC(0ca5799d) SHA1(6485dde076d15b69b9ee65880dda57ad4f8d129c) )
1105 
1106 	ROM_REGION( 0x200000, "sprites", 0 )
1107 	ROM_LOAD16_WORD_SWAP( "b31-07.176", 0x000000, 0x80000, CRC(33568cdb) SHA1(87abf56bbbd3659a1bd3e6ce9e43176be7950b41) )   /* OBJ */
1108 	ROM_LOAD16_WORD_SWAP( "b31-06.175", 0x080000, 0x80000, CRC(0d59439e) SHA1(54d844492888e7fe2c3bc61afe64f8d47fdee8dc) )
1109 	ROM_LOAD16_WORD_SWAP( "b31-05.174", 0x100000, 0x80000, CRC(0a1fc9fb) SHA1(a5d6975fd4f7e689c8cafd7c9cd3787797955779) )
1110 	ROM_LOAD16_WORD_SWAP( "b31-04.173", 0x180000, 0x80000, CRC(2e1e4cb5) SHA1(4733cfc015a68e021108a9e1e8ea807b0e7eac7a) )
1111 
1112 	ROM_REGION( 0x100000, "tc0100scn_1", 0 )
1113 	ROM_LOAD16_WORD_SWAP( "b31-01.23", 0x00000, 0x80000, CRC(8e8237a7) SHA1(3e181a153d9b4b7f6a620614ea9022285583a5b5) ) /* SCR (screen 1) */
1114 	ROM_LOAD16_WORD_SWAP( "b31-02.24", 0x80000, 0x80000, CRC(4c3b4e33) SHA1(f99b379be1af085bf102d4d7cf35803e002fe80b) )
1115 
1116 	ROM_REGION( 0x100000, "tc0100scn_2", 0 )
1117 	ROM_LOAD16_WORD_SWAP( "b31-01.26", 0x00000, 0x80000, CRC(8e8237a7) SHA1(3e181a153d9b4b7f6a620614ea9022285583a5b5) ) /* SCR (screen 2) */
1118 	ROM_LOAD16_WORD_SWAP( "b31-02.27", 0x80000, 0x80000, CRC(4c3b4e33) SHA1(f99b379be1af085bf102d4d7cf35803e002fe80b) )
1119 
1120 	ROM_REGION( 0x100000, "tc0100scn_3", 0 )
1121 	ROM_LOAD16_WORD_SWAP( "b31-01.28", 0x00000, 0x80000, CRC(8e8237a7) SHA1(3e181a153d9b4b7f6a620614ea9022285583a5b5) ) /* SCR (screen 3) */
1122 	ROM_LOAD16_WORD_SWAP( "b31-02.29", 0x80000, 0x80000, CRC(4c3b4e33) SHA1(f99b379be1af085bf102d4d7cf35803e002fe80b) )
1123 
1124 	ROM_REGION( 0x180000, "ymsnd", 0 )  /* ADPCM samples */
1125 	ROM_LOAD( "b31-09.18", 0x000000, 0x80000, CRC(60a73382) SHA1(0ddeb86fcd4d19a58e62bf8564f996d17e36e5c5) )
1126 	ROM_LOAD( "b31-10.17", 0x080000, 0x80000, CRC(c6434aef) SHA1(3348ce87882e3f668aa85bbb517975ec1fc9b6fd) )
1127 	ROM_LOAD( "b31-11.16", 0x100000, 0x80000, CRC(8da531d4) SHA1(525dfab0a0729e9fb6f0e4c8187bf4ce16321b20) )
1128 
1129 	ROM_REGION( 0x80000, "ymsnd.deltat", 0 )    /* Delta-T samples */
1130 	ROM_LOAD( "b31-08.19", 0x000000, 0x80000, CRC(a0a1f87d) SHA1(6b0f8094f3a3ef1ced76984e333e22a17c51af29) )
1131 
1132 	ROM_REGION( 0x01000, "user1", 0 )   /* unknown roms */
1133 	ROM_LOAD( "b31-25.38", 0x00000, 0x200, CRC(a0b4ba48) SHA1(dc9a46366a0cbf63a609f177c3d3ba9675416662) )
1134 	ROM_LOAD( "b31-26.58", 0x00000, 0x200, CRC(13e5fe15) SHA1(c973c7965954a2a0b427908f099592ed89cf0ff0) )
1135 ROM_END
1136 
1137 ROM_START( darius2 )
1138 	ROM_REGION( 0xc0000, "maincpu", 0 ) /* 256K for 68000 CPUA code */
1139 	ROM_LOAD16_BYTE( "c07-32-1", 0x00000, 0x10000, CRC(216c8f6a) SHA1(493b0779b99a228911f56ef9d2d4a3945683bec0) )
1140 	ROM_LOAD16_BYTE( "c07-29-1", 0x00001, 0x10000, CRC(48de567f) SHA1(cdf50052933cd2603fd4374e8bae8b30a6c690b5) )
1141 	ROM_LOAD16_BYTE( "c07-31-1", 0x20000, 0x10000, CRC(8279d2f8) SHA1(bd3c80a024a58e4b554f4867f56d7f5741eb3031) )
1142 	ROM_LOAD16_BYTE( "c07-30-1", 0x20001, 0x10000, CRC(6122e400) SHA1(2f68a423f9db8d69ab74453f8cef755f703cc94c) )
1143 
1144 	ROM_LOAD16_BYTE( "c07-27",   0x40000, 0x20000, CRC(0a6f7b6c) SHA1(0ed915201fbc0bf94fdcbef8dfd021cebe87474f) )   /* data roms ? */
1145 	ROM_LOAD16_BYTE( "c07-25",   0x40001, 0x20000, CRC(059f40ce) SHA1(b05a96580edb66221af2f222df74a020366ce3ea) )
1146 	ROM_LOAD16_BYTE( "c07-26",   0x80000, 0x20000, CRC(1f411242) SHA1(0fca5d864c1925473d0058e4cf81ad926f56cb14) )
1147 	ROM_LOAD16_BYTE( "c07-24",   0x80001, 0x20000, CRC(486c9c20) SHA1(9e98fcc1777f044d69cc93eda674501b3be26097) )
1148 
1149 	ROM_REGION( 0x60000, "sub", 0 ) /* 384K for 68000 CPUB code */
1150 	ROM_LOAD16_BYTE( "c07-35-1", 0x00000, 0x10000, CRC(dd8c4723) SHA1(e17159f894ee661a84ccd53e2d00ee78f2b46196) )
1151 	ROM_LOAD16_BYTE( "c07-38-1", 0x00001, 0x10000, CRC(46afb85c) SHA1(a08fb9fd2bf0929a5599ab015680fa663f1d4fe6) )
1152 	ROM_LOAD16_BYTE( "c07-34-1", 0x20000, 0x10000, CRC(296984b8) SHA1(3ba28e293c9d3ce01ee2f8ae2c2aa450fe021d30) )
1153 	ROM_LOAD16_BYTE( "c07-37-1", 0x20001, 0x10000, CRC(8b7d461f) SHA1(c783491ca23223dc58fa7e8f408407b9a10cbce4) )
1154 	ROM_LOAD16_BYTE( "c07-33-1", 0x40000, 0x10000, CRC(2da03a3f) SHA1(f1f2de82e0addc5e19c8935e4f5810896691118f) )
1155 	ROM_LOAD16_BYTE( "c07-36-1", 0x40001, 0x10000, CRC(02cf2b1c) SHA1(c94a64f26f94f182cfe2b6edb37e4ce35a0f681b) )
1156 
1157 	ROM_REGION( 0x20000, "audiocpu", 0 )    /* sound cpu */
1158 	ROM_LOAD( "c07-28",  0x00000, 0x20000, CRC(da304bc5) SHA1(689b4f329d9a640145f82e12dff3dd1fcf8a28c8) )
1159 
1160 	ROM_REGION( 0x100000, "sprites", 0 )
1161 	ROM_LOAD16_WORD_SWAP( "c07-01", 0x00000, 0x80000, CRC(3cf0f050) SHA1(f5a1f7e327a2617fb95ce2837e72945fd7447346) )    /* OBJ */
1162 	ROM_LOAD16_WORD_SWAP( "c07-02", 0x80000, 0x80000, CRC(75d16d4b) SHA1(795423278b66eca41accce1f8a4425d65af7b629) )
1163 
1164 	ROM_REGION( 0x100000, "tc0100scn_1", 0 )
1165 	ROM_LOAD16_WORD_SWAP( "c07-03.12", 0x00000, 0x80000, CRC(189bafce) SHA1(d885e444523489fe24269b90dec58e0d92cfbd6e) ) /* SCR (screen 1) */
1166 	ROM_LOAD16_WORD_SWAP( "c07-04.11", 0x80000, 0x80000, CRC(50421e81) SHA1(27ac420602f1dac00dc32903543a518e6f47fb2f) )
1167 
1168 	// The actual board duplicates the SCR gfx ROMs for each TC0100SCNs; TODO : ic position
1169 	ROM_REGION( 0x100000, "tc0100scn_2", 0 )
1170 	ROM_COPY( "tc0100scn_1", 0x000000, 0x000000, 0x100000 )    /* SCR (screen 2) */
1171 
1172 	ROM_REGION( 0x100000, "tc0100scn_3", 0 )
1173 	ROM_COPY( "tc0100scn_1", 0x000000, 0x000000, 0x100000 )    /* SCR (screen 3) */
1174 
1175 	ROM_REGION( 0x100000, "ymsnd", 0 )  /* ADPCM samples */
1176 	ROM_LOAD( "c07-10.95", 0x00000, 0x80000, CRC(4bbe0ed9) SHA1(081b73c4e4d4fa548445e5548573099bcb1e9213) )
1177 	ROM_LOAD( "c07-11.96", 0x80000, 0x80000, CRC(3c815699) SHA1(0471ff5b0c0da905267f2cee52fd68c8661cccc9) )
1178 
1179 	ROM_REGION( 0x80000, "ymsnd.deltat", 0 )    /* Delta-T samples */
1180 	ROM_LOAD( "c07-12.107", 0x00000, 0x80000, CRC(e0b71258) SHA1(0258e308b643d723475824752ebffc4ea29d1ac4) )
1181 ROM_END
1182 
1183 
1184 /* Working Games */
1185 
1186 //    YEAR, NAME,     PARENT, MACHINE, INPUT,   STATE         INIT,MONITOR,COMPANY,                     FULLNAME,FLAGS
1187 GAME( 1987, ninjaw,   0,      ninjaw,  ninjaw,  ninjaw_state, empty_init, ROT0,   "Taito Corporation Japan",   "The Ninja Warriors (World, later version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
1188 GAME( 1987, ninjaw1,  ninjaw, ninjaw,  ninjaw,  ninjaw_state, empty_init, ROT0,   "Taito Corporation Japan",   "The Ninja Warriors (World, earlier version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
1189 GAME( 1987, ninjawj,  ninjaw, ninjaw,  ninjawj, ninjaw_state, empty_init, ROT0,   "Taito Corporation",         "The Ninja Warriors (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
1190 GAME( 1987, ninjawu,  ninjaw, ninjaw,  ninjawj, ninjaw_state, empty_init, ROT0,   "Taito Corporation America (licensed to Romstar)", "The Ninja Warriors (US, Romstar license)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) /* Uses same coinage as World, see notes */
1191 GAME( 1989, darius2,  0,      darius2, darius2, ninjaw_state, empty_init, ROT0,   "Taito Corporation",         "Darius II (triple screen) (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
1192