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