1 // license:BSD-3-Clause
2 // copyright-holders:David Graves, Brian Troha
3 // thanks-to:Richard Bush
4 /***************************************************************************
5 
6 Asuka & Asuka  (+ Taito/Visco games on similar hardware)
7 =============
8 
9 David Graves, Brian Troha
10 
11 Made out of:    Rastan driver by Jarek Burczynski
12                 MAME Taito F2 driver
13                 Raine source - very special thanks to
14                   Richard Bush and the Raine Team.
15                 two different drivers for Bonze Adventure that were
16                   written at the same time by Yochizo and Frotz
17 
18     Bonze Adventure (c) 1988 Taito Corporation
19     Asuka & Asuka   (c) 1988 Taito Corporation
20     Maze of Flott   (c) 1989 Taito Corporation
21     Galmedes        (c) 1992 Visco Corporation
22     Earth Joker     (c) 1993 Visco Corporation
23     Kokontouzai Eto Monogatari (c) 1994 Visco Corporation
24 
25 Main CPU: MC68000 uses irq 5 (4 in bonze, 4&5 in cadash).
26 Sound   : Z80 & YM2151 + MSM5205 (YM2610 in bonze)
27 Chips   : TC0100SCN + TC0002OBJ + TC0110PCR (+ C-Chip in bonze)
28 (Bryan McPhail:  My Bonze uses TC0100SCN + PC0900J (OBJ) + TC0110PCR + TC0140SYT (SND))
29 
30 Memory map for Asuka & Asuka
31 ----------------------------
32 
33 The other games seem identical but Eto is slightly different.
34 
35 0x000000 - 0x0fffff : ROM (not all used for each game)
36 0x100000 - 0x103fff : 16k of RAM
37 0x200000 - 0x20000f : palette generator
38 0x400000 - 0x40000f : input ports and dipswitches
39 0x3a0000 - 0x3a0003 : sprite control
40 0x3e0000 - 0x3e0003 : communication with sound CPU
41 0xc00000 - 0xc2000f : TC0100SCN (see video/tc0100scn.cpp)
42 0xd00000 - 0xd007ff : sprite RAM
43 
44 
45 Cadashu Info (Malcor)
46 ---------------------
47 
48 Main PCB (JAMMA) K1100528A
49 Main processor  - 68000 12MHz
50                 - HD64180RP8 8MHz (8 bit processor, dual channel DMAC,
51                              memory mapped I/O, used for multigame link)
52 Misc custom ICs including three PQFPs, one PGA, and one SIP
53 
54 
55 From "garmedes.txt"
56 -------------------
57 
58 The following cord is written, on PCB:  K1100388A   J1100169A   M6100708A
59 There are the parts that were written as B68 on this PCB.
60 The original title of the game called B68 is unknown.
61 This PCB is the same as the one that is used with EARTH-JOKER.
62 <B68 is the verified Taito ROM id# for Asuka & Asuka - B.Troha>
63 
64 
65 Use of TC0100SCN
66 ----------------
67 
68 Asuka & Asuka: $e6a init code clearing TC0100SCN areas is erroneous.
69 It only clears 1/8 of the BG layers; then it clears too much of the
70 rowscroll areas [0xc000, 0xc400] causing overrun into next 64K block.
71 
72 Asuka is one of the early Taito games using the TC0100SCN. (Ninja
73 Warriors was probably the first.) They didn't bother using its FG (text)
74 layer facility, instead placing text in the BG / sprite layers.
75 
76 Maze of Flott [(c) one year later] and most other games with the
77 TC0100SCN do use the FG layer for text (Driftout is an exception).
78 
79 
80 Stephh's notes (based on the game M68000 code and some tests) :
81 
82 1) 'bonzeadv', 'jigkmgri' and 'bonzeadvu'
83 
84   - Region stored at 0x03fffe.w
85   - Sets :
86       * 'bonzeadv' : region = 0x0002
87       * 'jigkmgri' : region = 0x0000
88       * 'bonzeadvu': region = 0x0001
89   - These 3 games are 100% the same, only region differs !
90   - Coinage relies on the region (code at 0x02d344) :
91       * 0x0000 (Japan) and 0x0001 (US) use TAITO_COINAGE_JAPAN_OLD_LOC()
92       * 0x0002 (World) uses TAITO_COINAGE_WORLD_LOC()
93   - Notice screen only if region = 0x0000
94   - Texts and game name rely on the region :
95       * 0x0000 : most texts in Japanese - game name is "Jigoku Meguri"
96       * other : all texts in English - game name is "Bonze Adventure"
97   - Bonus lives aren't awarded correctly due to bogus code at 0x00961e :
98 
99       00961E: 302D 0B7E                  move.w  ($b7e,A5), D0
100       009622: 0240 0018                  andi.w  #$18, D0
101       009626: E648                       lsr.w   #3, D0
102 
103     Here is what the correct code should be :
104 
105       00961E: 302D 0B7E                  move.w  ($b7e,A5), D0
106       009622: 0240 0030                  andi.w  #$30, D0
107       009626: E848                       lsr.w   #4, D0
108 
109   - DSWB bit 7 was previously used to allow map viewing (C-Chip test ?),
110     but it is now unused due to "bra" instruction at 0x007572
111 
112 
113 2) 'bonzeadvo'
114 
115   - Region stored at 0x03fffe.w
116   - Sets :
117       * 'bonzeadvo' : region = 0x0002
118   - The only difference is that the following code is missing :
119 
120       00D218: 08AD 0004 15DE             bclr    #$4, ($15de,A5)
121 
122     So the "crouch" bit wasn't always reset, which may cause you
123     to consume all your magic powers in less than 4 frames !
124     See bonzeadv0107u1ora full report on MAME Testers site
125   - Same other notes as for 'bonzeadv'
126 
127 
128 3) 'asuka*'
129 
130   - No region
131   - BOTH sets use TAITO_COINAGE_JAPAN_OLD_LOC() for coinage,
132     so I wonder if the World version isn't a US version
133   - Additional notice screen in 'asukaj'
134 
135 
136 4) 'mofflott'
137 
138   - Region stored at 0x03fffe.w
139   - Sets :
140       * 'mofflott' : region = 0x0001
141   - Coinage relies on the region (code at 0x0145ec) :
142       * 0x0001 (Japan) and 0x0002 (US ?) use TAITO_COINAGE_JAPAN_OLD_LOC()
143       * 0x0003 (World) uses TAITO_COINAGE_WORLD_LOC()
144   - Notice screen only if region = 0x0001
145 
146 
147 5) 'cadash*'
148 
149   - Region stored at 0x07fffe.w
150   - Sets :
151       * 'cadash'   : region = 0x0003
152       * 'cadashj'  : region = 0x0001
153       * 'cadashu'  : region = 0x0002
154       * 'cadashfr' : region = 0x0003
155       * 'cadashit' : region = 0x0003
156   - These 5 games are 100% the same, only region differs !
157     However each version requires its specific texts
158   - Coinage relies on the region (code at 0x0013d6) :
159       * 0x0001 (Japan) uses TAITO_COINAGE_JAPAN_OLD_LOC()
160       * 0x0002 (US) uses TAITO_COINAGE_US_LOC()
161       * 0x0003 (World) uses TAITO_COINAGE_WORLD_LOC()
162   - Notice screen only if region = 0x0001 or region = 0x0002
163   - FBI logo only if region = 0x0002
164   - I can't tell about the Italian and Japanese versions,
165     but translation in the French version is really poor !
166 
167 
168 6) 'galmedes'
169 
170   - No region (not a Taito game anyway)
171   - Coinage relies on "Coin Mode" Dip Switch (code at 0x0801c0) :
172       * "Mode A" uses TAITO_COINAGE_JAPAN_OLD_LOC()
173       * "Mode B" uses TAITO_COINAGE_WORLD_LOC()
174   - Notice screen
175 
176 
177 7) 'earthjkr'
178 
179   - No region (not a Taito game anyway)
180   - Game uses TAITO_COINAGE_JAPAN_OLD_LOC()
181   - Notice screen only if "Copyright" Dip Switch set to "Visco"
182 
183 
184 8) 'eto'
185 
186   - No region (not a Taito game anyway)
187   - Game uses TAITO_COINAGE_JAPAN_OLD_LOC()
188   - No notice screen
189 
190 
191 TODO
192 ----
193 
194 Mofflot: $14c46 sub inits sound system: in a pause loop during this
195 it reads a dummy address.
196 
197 Earthjkr: Wrong screen size? Left edge of green blueprints in
198 attract looks like it's incorrectly off screen.
199 
200 Cadash: Hooks for twin arcade machine setup: will involve emulating an extra
201 microcontroller, the 07 ROM might be the program for it. Cadash background
202 colors don't reinitialize properly with save states.
203 
204 Galmedes: Test mode has select1/2 stuck at on.
205 
206 Eto: $76d0 might be a protection check? It reads to and writes from
207 the program ROM. Doesn't seem to cause problems though.
208 
209 DIP locations verified for:
210     - bonzeadv (manual)
211     - cadash (manual)
212     - asuka (manual)
213     - mofflott (manual)
214     - galmedes (manual)
215 
216 ***************************************************************************/
217 
218 #include "emu.h"
219 #include "includes/asuka.h"
220 #include "includes/taitoipt.h"
221 #include "audio/taitosnd.h"
222 
223 #include "cpu/m68000/m68000.h"
224 #include "cpu/z180/z180.h"
225 #include "cpu/z80/z80.h"
226 #include "machine/watchdog.h"
227 #include "sound/2610intf.h"
228 #include "sound/msm5205.h"
229 #include "sound/ym2151.h"
230 #include "screen.h"
231 #include "speaker.h"
232 
233 
234 /***********************************************************
235                 INTERRUPTS
236 ***********************************************************/
237 
device_timer(emu_timer & timer,device_timer_id id,int param,void * ptr)238 void asuka_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
239 {
240 	switch (id)
241 	{
242 	case TIMER_CADASH_INTERRUPT5:
243 		m_maincpu->set_input_line(5, HOLD_LINE);
244 		break;
245 	default:
246 		throw emu_fatalerror("Unknown id in asuka_state::device_timer");
247 	}
248 }
249 
250 
INTERRUPT_GEN_MEMBER(asuka_state::cadash_interrupt)251 INTERRUPT_GEN_MEMBER(asuka_state::cadash_interrupt)
252 {
253 	m_cadash_int5_timer->adjust(m_maincpu->cycles_to_attotime(500));
254 	device.execute().set_input_line(4, HOLD_LINE);  /* interrupt vector 4 */
255 }
256 
257 
258 /************************************************
259             SOUND
260 ************************************************/
261 
sound_bankswitch_w(u8 data)262 void asuka_state::sound_bankswitch_w(u8 data)
263 {
264 	m_audiobank->set_entry(data & 0x03);
265 }
266 
267 
WRITE_LINE_MEMBER(asuka_state::asuka_msm5205_vck)268 WRITE_LINE_MEMBER(asuka_state::asuka_msm5205_vck)
269 {
270 	if (!state)
271 		return;
272 
273 	m_adpcm_ff = !m_adpcm_ff;
274 	m_adpcm_select->select_w(m_adpcm_ff);
275 
276 	if (m_adpcm_ff)
277 	{
278 		m_adpcm_select->ba_w(m_sound_data[m_adpcm_pos]);
279 		m_adpcm_pos = (m_adpcm_pos + 1) & 0xffff;
280 	}
281 }
282 
msm5205_address_w(u8 data)283 void asuka_state::msm5205_address_w(u8 data)
284 {
285 	m_adpcm_pos = (m_adpcm_pos & 0x00ff) | (data << 8);
286 }
287 
msm5205_start_w(u8 data)288 void asuka_state::msm5205_start_w(u8 data)
289 {
290 	m_msm->reset_w(0);
291 	m_adpcm_ff = false;
292 }
293 
msm5205_stop_w(u8 data)294 void asuka_state::msm5205_stop_w(u8 data)
295 {
296 	m_msm->reset_w(1);
297 	m_adpcm_pos &= 0xff00;
298 }
299 
cadash_share_r(offs_t offset)300 u16 asuka_state::cadash_share_r(offs_t offset)
301 {
302 	return m_cadash_shared_ram[offset];
303 }
304 
cadash_share_w(offs_t offset,u16 data)305 void asuka_state::cadash_share_w(offs_t offset, u16 data)
306 {
307 	m_cadash_shared_ram[offset] = data & 0xff;
308 }
309 
310 
coin_control_w(u8 data)311 void asuka_state::coin_control_w(u8 data)
312 {
313 	machine().bookkeeping().coin_lockout_w(0, ~data & 0x01);
314 	machine().bookkeeping().coin_lockout_w(1, ~data & 0x02);
315 	machine().bookkeeping().coin_counter_w(0, data & 0x04);
316 	machine().bookkeeping().coin_counter_w(1, data & 0x08);
317 }
318 
319 
320 /***********************************************************
321              MEMORY STRUCTURES
322 ***********************************************************/
323 
bonzeadv_map(address_map & map)324 void asuka_state::bonzeadv_map(address_map &map)
325 {
326 	map(0x000000, 0x03ffff).rom();
327 	map(0x080000, 0x0fffff).rom();
328 	map(0x10c000, 0x10ffff).ram();
329 	map(0x200000, 0x200007).rw(m_tc0110pcr, FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_word_w));
330 	map(0x390000, 0x390001).portr("DSWA");
331 	map(0x3a0000, 0x3a0001).w(m_pc090oj, FUNC(pc090oj_device::sprite_ctrl_w));
332 	map(0x3b0000, 0x3b0001).portr("DSWB");
333 	map(0x3c0000, 0x3c0001).w("watchdog", FUNC(watchdog_timer_device::reset16_w));
334 	map(0x3d0000, 0x3d0001).nopr();
335 	map(0x3e0001, 0x3e0001).w("tc0140syt", FUNC(tc0140syt_device::master_port_w));
336 	map(0x3e0003, 0x3e0003).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w));
337 	map(0x800000, 0x8007ff).rw(m_cchip, FUNC(taito_cchip_device::mem68_r), FUNC(taito_cchip_device::mem68_w)).umask16(0x00ff);
338 	map(0x800800, 0x800fff).rw(m_cchip, FUNC(taito_cchip_device::asic_r), FUNC(taito_cchip_device::asic68_w)).umask16(0x00ff);
339 	map(0xc00000, 0xc0ffff).rw(m_tc0100scn, FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w));    /* tilemaps */
340 	map(0xc20000, 0xc2000f).rw(m_tc0100scn, FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
341 	map(0xd00000, 0xd03fff).rw(m_pc090oj, FUNC(pc090oj_device::word_r), FUNC(pc090oj_device::word_w));  /* sprite ram */
342 }
343 
asuka_map(address_map & map)344 void asuka_state::asuka_map(address_map &map)
345 {
346 	map(0x000000, 0x0fffff).rom();
347 	map(0x100000, 0x103fff).ram();
348 	map(0x1076f0, 0x1076f1).nopr(); /* Mofflott init does dummy reads here */
349 	map(0x200000, 0x20000f).rw(m_tc0110pcr, FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_word_w));
350 	map(0x3a0000, 0x3a0003).w(m_pc090oj, FUNC(pc090oj_device::sprite_ctrl_w));
351 	map(0x3e0000, 0x3e0001).nopr();
352 	map(0x3e0001, 0x3e0001).w("ciu", FUNC(pc060ha_device::master_port_w));
353 	map(0x3e0003, 0x3e0003).rw("ciu", FUNC(pc060ha_device::master_comm_r), FUNC(pc060ha_device::master_comm_w));
354 	map(0x400000, 0x40000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0x00ff);
355 	map(0xc00000, 0xc0ffff).rw(m_tc0100scn, FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w));    /* tilemaps */
356 	map(0xc10000, 0xc103ff).nopw();    /* error in Asuka init code */
357 	map(0xc20000, 0xc2000f).rw(m_tc0100scn, FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
358 	map(0xd00000, 0xd03fff).rw(m_pc090oj, FUNC(pc090oj_device::word_r), FUNC(pc090oj_device::word_w));  /* sprite ram */
359 }
360 
cadash_map(address_map & map)361 void asuka_state::cadash_map(address_map &map)
362 {
363 	map(0x000000, 0x07ffff).rom();
364 	map(0x080000, 0x080003).w(m_pc090oj, FUNC(pc090oj_device::sprite_ctrl_w));
365 	map(0x0c0000, 0x0c0001).nopr();
366 	map(0x0c0001, 0x0c0001).w("ciu", FUNC(pc060ha_device::master_port_w));
367 	map(0x0c0003, 0x0c0003).rw("ciu", FUNC(pc060ha_device::master_comm_r), FUNC(pc060ha_device::master_comm_w));
368 	map(0x100000, 0x107fff).ram();
369 	map(0x800000, 0x800fff).rw(FUNC(asuka_state::cadash_share_r), FUNC(asuka_state::cadash_share_w));    /* network ram */
370 	map(0x900000, 0x90000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0x00ff);
371 	map(0xa00000, 0xa0000f).rw(m_tc0110pcr, FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_4bpg_word_w));
372 	map(0xb00000, 0xb03fff).rw(m_pc090oj, FUNC(pc090oj_device::word_r), FUNC(pc090oj_device::word_w));  /* sprite ram */
373 	map(0xc00000, 0xc0ffff).rw(m_tc0100scn, FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w));    /* tilemaps */
374 	map(0xc20000, 0xc2000f).rw(m_tc0100scn, FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
375 }
376 
eto_map(address_map & map)377 void asuka_state::eto_map(address_map &map)
378 { /* N.B. tc100scn mirror overlaps spriteram */
379 	map(0x000000, 0x0fffff).rom();
380 	map(0x100000, 0x10000f).rw(m_tc0110pcr, FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_word_w));
381 	map(0x200000, 0x203fff).ram();
382 	map(0x300000, 0x30000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0x00ff);
383 	map(0x400000, 0x40000f).r(m_tc0220ioc, FUNC(tc0220ioc_device::read)).umask16(0x00ff);   /* service mode mirror */
384 	map(0x4a0000, 0x4a0003).w(m_pc090oj, FUNC(pc090oj_device::sprite_ctrl_w));
385 	map(0x4e0000, 0x4e0001).nopr();
386 	map(0x4e0001, 0x4e0001).w("ciu", FUNC(pc060ha_device::master_port_w));
387 	map(0x4e0003, 0x4e0003).rw("ciu", FUNC(pc060ha_device::master_comm_r), FUNC(pc060ha_device::master_comm_w));
388 	map(0xc00000, 0xc0ffff).w(m_tc0100scn, FUNC(tc0100scn_device::ram_w));
389 	map(0xc00000, 0xc03fff).rw(m_pc090oj, FUNC(pc090oj_device::word_r), FUNC(pc090oj_device::word_w));  /* sprite ram */
390 	map(0xd00000, 0xd0ffff).rw(m_tc0100scn, FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w));    /* tilemaps */
391 	map(0xd20000, 0xd2000f).rw(m_tc0100scn, FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w));
392 }
393 
394 
395 /***************************************************************************/
396 
bonzeadv_z80_map(address_map & map)397 void asuka_state::bonzeadv_z80_map(address_map &map)
398 {
399 	map(0x0000, 0x3fff).rom();
400 	map(0x4000, 0x7fff).bankr("audiobank");
401 	map(0xc000, 0xdfff).ram();
402 	map(0xe000, 0xe003).rw("ymsnd", FUNC(ym2610_device::read), FUNC(ym2610_device::write));
403 	map(0xe200, 0xe200).w("tc0140syt", FUNC(tc0140syt_device::slave_port_w));
404 	map(0xe201, 0xe201).rw("tc0140syt", FUNC(tc0140syt_device::slave_comm_r), FUNC(tc0140syt_device::slave_comm_w));
405 	map(0xe400, 0xe403).nopw(); /* pan */
406 	map(0xe600, 0xe600).nopw();
407 	map(0xee00, 0xee00).nopw();
408 	map(0xf000, 0xf000).nopw();
409 	map(0xf200, 0xf200).w(FUNC(asuka_state::sound_bankswitch_w));
410 }
411 
412 /* no MSM5205 */
cadash_z80_map(address_map & map)413 void asuka_state::cadash_z80_map(address_map &map)
414 {
415 	map(0x0000, 0x3fff).rom();
416 	map(0x4000, 0x7fff).bankr("audiobank");
417 	map(0x8000, 0x8fff).ram();
418 	map(0x9000, 0x9001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write));
419 	map(0xa000, 0xa000).w("ciu", FUNC(pc060ha_device::slave_port_w));
420 	map(0xa001, 0xa001).rw("ciu", FUNC(pc060ha_device::slave_comm_r), FUNC(pc060ha_device::slave_comm_w));
421 }
422 
z80_map(address_map & map)423 void asuka_state::z80_map(address_map &map)
424 {
425 	cadash_z80_map(map);
426 //  map(0x9002, 0x9100).nopr();
427 	map(0xb000, 0xb000).w(FUNC(asuka_state::msm5205_address_w));
428 	map(0xc000, 0xc000).w(FUNC(asuka_state::msm5205_start_w));
429 	map(0xd000, 0xd000).w(FUNC(asuka_state::msm5205_stop_w));
430 }
431 
432 /*
433 Cadash communication CPU is a z180.
434 [0x8000]: at pc=31, z180 checks a byte ... if it's equal to 0x4d ("M") then the board is in master mode, otherwise it's in slave mode.
435 Right now, the z180 is too fast, so it never checks it properly ... maybe I'm missing a z180 halt line that's lying to somewhere on m68k side.
436 [0x8002]: puts T in master mode, R in slave mode ... looks a rather obvious flag that says the current Tx / Rx state
437 [0x8080-0x80ff]: slave data
438 [0x8100-0x817f]: master data
439 
440 Internal I/O Asynchronous SCI regs are then checked ... we can't emulate this at the current time, needs two MAME instances.
441 
442 m68k M communicates with z180 M through shared ram, then the z180 M communicates with z180 S through these ASCI regs ... finally, the z180 S
443 communicates with m68k S with its own shared ram. In short:
444 
445 m68k M -> z180 M <-> z180 S <- m68k S
446 */
447 
cadash_sub_map(address_map & map)448 void asuka_state::cadash_sub_map(address_map &map)
449 {
450 	map(0x0000, 0x7fff).rom();
451 	map(0x8000, 0x87ff).ram().share("sharedram");
452 }
453 
cadash_sub_io(address_map & map)454 void asuka_state::cadash_sub_io(address_map &map)
455 {
456 	map(0x00, 0x3f).ram(); // z180 internal I/O regs
457 }
458 
459 /***********************************************************
460              INPUT PORTS, DIPs
461 ***********************************************************/
462 
463 #define CADASH_PLAYERS_INPUT( player ) \
464 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) \
465 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) \
466 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(player) \
467 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(player) \
468 	INPUT_GENERIC_JOY_HIGH_NIBBLE(player, IP_ACTIVE_LOW, PORT_8WAY, RIGHT, LEFT, DOWN, UP)
469 
470 
471 /* different players and system inputs than 'asuka' */
472 static INPUT_PORTS_START( bonzeadv )
473 	/* 0x390000 -> 0x10cb7c ($b7c,A5) */
474 	PORT_START("DSWA")
TAITO_MACHINE_COCKTAIL_LOC(SWA)475 	TAITO_MACHINE_COCKTAIL_LOC(SWA)
476 	TAITO_COINAGE_WORLD_LOC(SWA)
477 
478 	/* 0x3b0000 -> 0x10cb7e ($b7e,A5) */
479 	PORT_START("DSWB")
480 	TAITO_DIFFICULTY_LOC(SWB)
481 	PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) )       PORT_DIPLOCATION("SWB:3,4") /* see notes */
482 	PORT_DIPSETTING(    0x08, "40k 100k" )                  /* 300k 1000k 1500k 2000k 2500k 3000k 3500k 5000k */
483 	PORT_DIPSETTING(    0x0c, "50k 150k" )                  /* 500k 1000k 2000k 3000k 4000k 5000k 6000k 7000k */
484 	PORT_DIPSETTING(    0x04, "60k 200k" )                  /* 500k 1000k 2000k 3000k 4000k 5000k 6000k 7000k */
485 	PORT_DIPSETTING(    0x00, "80k 250k" )                  /* 500k 1000k 2000k 3000k 4000k 5000k 6000k 7000k */
486 	PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) )            PORT_DIPLOCATION("SWB:5,6")
487 	PORT_DIPSETTING(    0x20, "2" )
488 	PORT_DIPSETTING(    0x30, "3" )
489 	PORT_DIPSETTING(    0x10, "4" )
490 	PORT_DIPSETTING(    0x00, "5" )
491 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Allow_Continue ) )   PORT_DIPLOCATION("SWB:7")
492 	PORT_DIPSETTING(    0x40, DEF_STR( No ) )
493 	PORT_DIPSETTING(    0x00, DEF_STR( Yes ) )
494 	PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SWB:8" )            /* see notes */
495 
496 	PORT_START("800007")
497 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
498 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 )
499 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 )
500 
501 	PORT_START("800009")
502 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(1)
503 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(1)
504 
505 	PORT_START("80000B")
506 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_TILT )
507 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
508 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
509 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
510 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
511 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
512 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 )
513 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 )
514 
515 	PORT_START("80000D")
516 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
517 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
518 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
519 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL // as with all c-chip through ADC reads this ends up on 0x80 instead of 0x08
520 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
521 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
522 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
523 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
524 INPUT_PORTS_END
525 
526 static INPUT_PORTS_START( jigkmgri )
527 	PORT_INCLUDE(bonzeadv)
528 
529 	PORT_MODIFY("DSWA")
530 	TAITO_COINAGE_JAPAN_OLD_LOC(SWA)
531 INPUT_PORTS_END
532 
533 static INPUT_PORTS_START( asuka )
534 	/* 0x400000 -> 0x103618 */
535 	PORT_START("DSWA")
536 	TAITO_MACHINE_NO_COCKTAIL_LOC(SWA)
537 	TAITO_COINAGE_JAPAN_OLD_LOC(SWA)
538 
539 	/* 0x400002 -> 0x10361c */
540 	PORT_START("DSWB")
541 	TAITO_DIFFICULTY_LOC(SWB)
542 	PORT_DIPNAME( 0x0c, 0x0c, "Bonus Points" )              PORT_DIPLOCATION("SWB:3,4") /* for each plane shot after each end of level boss */
543 	PORT_DIPSETTING(    0x0c, "500" )
544 	PORT_DIPSETTING(    0x08, "1500" )
545 	PORT_DIPSETTING(    0x04, "2000" )
546 	PORT_DIPSETTING(    0x00, "2500" )
547 	PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) )            PORT_DIPLOCATION("SWB:5,6")
548 	PORT_DIPSETTING(    0x10, "1" )
549 	PORT_DIPSETTING(    0x20, "2" )
550 	PORT_DIPSETTING(    0x30, "3" )
551 	PORT_DIPSETTING(    0x00, "4" )
552 	PORT_DIPNAME( 0xc0, 0x80, DEF_STR( Allow_Continue ) )   PORT_DIPLOCATION("SWB:7,8")
553 	PORT_DIPSETTING(    0x00, DEF_STR( No ) )
554 	PORT_DIPSETTING(    0xc0, "Up To Level 2" )
555 	PORT_DIPSETTING(    0x80, "Up To Level 3" )
556 	PORT_DIPSETTING(    0x40, DEF_STR( Yes ) )
557 
558 	PORT_START("IN0")
559 	TAITO_JOY_UDLR_2_BUTTONS( 1 )
560 
561 	PORT_START("IN1")
562 	TAITO_JOY_UDLR_2_BUTTONS( 2 )
563 
564 	PORT_START("IN2")
565 	PORT_BIT( 0x01, IP_ACTIVE_LOW,  IPT_TILT )
566 	PORT_BIT( 0x02, IP_ACTIVE_LOW,  IPT_SERVICE1 )
567 	PORT_BIT( 0x04, IP_ACTIVE_LOW,  IPT_COIN1 )
568 	PORT_BIT( 0x08, IP_ACTIVE_LOW,  IPT_COIN2 )
569 	PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
570 	PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
571 	PORT_BIT( 0x40, IP_ACTIVE_LOW,  IPT_START1 )
572 	PORT_BIT( 0x80, IP_ACTIVE_LOW,  IPT_START2 )
573 INPUT_PORTS_END
574 
575 static INPUT_PORTS_START( mofflott )
576 	PORT_INCLUDE(asuka)
577 
578 	/* 0x400000 -> 0x100a92.b */
579 	PORT_MODIFY("DSWA")
580 	TAITO_MACHINE_COCKTAIL_LOC(SWA)
581 
582 	/* 0x400002 -> 0x100a93.b */
583 	PORT_MODIFY("DSWB")
584 	TAITO_DIFFICULTY_LOC(SWB)
585 	PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) )       PORT_DIPLOCATION("SWB:3,4")
586 	PORT_DIPSETTING(    0x0c, "20k And Every 50k" )
587 	PORT_DIPSETTING(    0x08, "50k And Every 100k" )
588 	PORT_DIPSETTING(    0x04, "100k Only" )
589 	PORT_DIPSETTING(    0x00, DEF_STR( None ) )
590 	PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) )            PORT_DIPLOCATION("SWB:5,6")
591 	PORT_DIPSETTING(    0x00, "2" )
592 	PORT_DIPSETTING(    0x30, "3" )
593 	PORT_DIPSETTING(    0x10, "4" )
594 	PORT_DIPSETTING(    0x20, "5" )
595 	PORT_DIPNAME( 0x40, 0x40, "Invulnerability (Cheat)")    PORT_DIPLOCATION("SWB:7")
596 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
597 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
598 	PORT_DIPNAME( 0x80, 0x80, "Number Of Keys" )            PORT_DIPLOCATION("SWB:8")
599 	PORT_DIPSETTING(    0x00, "B 14" )                      /* Hard */
600 	PORT_DIPSETTING(    0x80, "A 16" )                      /* Easy */
601 INPUT_PORTS_END
602 
603 /* different players and system inputs than 'asuka' */
604 static INPUT_PORTS_START( cadash )
605 	/* 0x900000 -> 0x10317a ($317a,A5) */
606 	PORT_START("DSWA")
607 	TAITO_MACHINE_NO_COCKTAIL_LOC(SWA)
608 	TAITO_COINAGE_WORLD_LOC(SWA)
609 
610 	/* 0x900002 -> 0x10317c ($317c,A5) */
611 	PORT_START("DSWB")
612 	TAITO_DIFFICULTY_LOC(SWB)
613 	PORT_DIPNAME( 0x0c, 0x0c, "Starting Time" )         PORT_DIPLOCATION("SWB:3,4")
614 	PORT_DIPSETTING(    0x00, "5:00" )
615 	PORT_DIPSETTING(    0x04, "6:00" )
616 	PORT_DIPSETTING(    0x0c, "7:00" )
617 	PORT_DIPSETTING(    0x08, "8:00" )
618 	/* Round cleared   Added time   */
619 	/*       1            8:00  */
620 	/*       2           10:00  */
621 	/*       3            8:00  */
622 	/*       4            7:00  */
623 	/*       5            9:00  */
624 	PORT_DIPNAME( 0x30, 0x30, "Added Time (after round clear)" ) PORT_DIPLOCATION("SWB:5,6")
625 	PORT_DIPSETTING(    0x00, "Default - 2:00" )
626 	PORT_DIPSETTING(    0x10, "Default - 1:00" )
627 	PORT_DIPSETTING(    0x30, "Default" )
628 	PORT_DIPSETTING(    0x20, "Default + 1:00" )
629 	PORT_DIPNAME( 0xc0, 0xc0, "Communication Mode" )    PORT_DIPLOCATION("SWB:7,8")
630 	PORT_DIPSETTING(    0xc0, "Stand alone" )
631 	PORT_DIPSETTING(    0x80, "Master" )
632 	PORT_DIPSETTING(    0x00, "Slave" )
633 //  PORT_DIPSETTING(    0x40, "Stand alone" )
634 
635 	PORT_START("IN0")
636 	CADASH_PLAYERS_INPUT( 1 )
637 
638 	PORT_START("IN1")
639 	CADASH_PLAYERS_INPUT( 2 )
640 
641 	PORT_START("IN2")
642 	PORT_BIT( 0x01, IP_ACTIVE_LOW,  IPT_COIN1 )
643 	PORT_BIT( 0x02, IP_ACTIVE_LOW,  IPT_COIN2 )
644 	PORT_BIT( 0x04, IP_ACTIVE_LOW,  IPT_START2 )
645 	PORT_BIT( 0x08, IP_ACTIVE_LOW,  IPT_START1 )
646 	PORT_BIT( 0x10, IP_ACTIVE_LOW,  IPT_SERVICE1 )
647 	PORT_BIT( 0x20, IP_ACTIVE_LOW,  IPT_TILT )
648 	PORT_BIT( 0x40, IP_ACTIVE_LOW,  IPT_UNKNOWN )
649 	PORT_BIT( 0x80, IP_ACTIVE_LOW,  IPT_UNKNOWN )
650 INPUT_PORTS_END
651 
652 static INPUT_PORTS_START( cadashj )
653 	PORT_INCLUDE(cadash)
654 
655 	PORT_MODIFY("DSWA")
656 	TAITO_COINAGE_JAPAN_OLD_LOC(SWA)
657 INPUT_PORTS_END
658 
659 static INPUT_PORTS_START( cadashu )
660 	PORT_INCLUDE(cadash)
661 
662 	PORT_MODIFY("DSWA")
663 	TAITO_COINAGE_US_LOC(SWA)
664 INPUT_PORTS_END
665 
666 static INPUT_PORTS_START( galmedes )
667 	PORT_INCLUDE(asuka)
668 
669 	/* 0x400000 -> 0x100982 */
670 	PORT_MODIFY("DSWA")
671 	PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) )  PORT_DIPLOCATION("SWA:4")
672 	PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
673 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
674 	PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coin_A ) )       PORT_DIPLOCATION("SWA:5,6")
675 	PORT_DIPSETTING(    0x00, DEF_STR( 4C_1C ) ) PORT_CONDITION("DSWB",0x80,EQUALS,0x00)
676 	PORT_DIPSETTING(    0x10, DEF_STR( 3C_1C ) ) PORT_CONDITION("DSWB",0x80,EQUALS,0x00)
677 	PORT_DIPSETTING(    0x10, DEF_STR( 2C_1C ) ) PORT_CONDITION("DSWB",0x80,EQUALS,0x80)
678 	PORT_DIPSETTING(    0x20, DEF_STR( 2C_1C ) ) PORT_CONDITION("DSWB",0x80,EQUALS,0x00)
679 	PORT_DIPSETTING(    0x30, DEF_STR( 1C_1C ) ) PORT_CONDITION("DSWB",0x80,EQUALS,0x80)
680 	PORT_DIPSETTING(    0x30, DEF_STR( 1C_1C ) ) PORT_CONDITION("DSWB",0x80,EQUALS,0x00)
681 	PORT_DIPSETTING(    0x00, DEF_STR( 2C_3C ) ) PORT_CONDITION("DSWB",0x80,EQUALS,0x80)
682 	PORT_DIPSETTING(    0x20, DEF_STR( 1C_2C ) ) PORT_CONDITION("DSWB",0x80,EQUALS,0x80)
683 	PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coin_B ) )       PORT_DIPLOCATION("SWA:7,8")
684 	PORT_DIPSETTING(    0x40, DEF_STR( 2C_1C ) ) PORT_CONDITION("DSWB",0x80,EQUALS,0x80)
685 	PORT_DIPSETTING(    0xc0, DEF_STR( 1C_1C ) ) PORT_CONDITION("DSWB",0x80,EQUALS,0x80)
686 	PORT_DIPSETTING(    0x00, DEF_STR( 2C_3C ) ) PORT_CONDITION("DSWB",0x80,EQUALS,0x80)
687 	PORT_DIPSETTING(    0x80, DEF_STR( 1C_2C ) ) PORT_CONDITION("DSWB",0x80,EQUALS,0x80)
688 	PORT_DIPSETTING(    0xc0, DEF_STR( 1C_2C ) ) PORT_CONDITION("DSWB",0x80,EQUALS,0x00)
689 	PORT_DIPSETTING(    0x80, DEF_STR( 1C_3C ) ) PORT_CONDITION("DSWB",0x80,EQUALS,0x00)
690 	PORT_DIPSETTING(    0x40, DEF_STR( 1C_4C ) ) PORT_CONDITION("DSWB",0x80,EQUALS,0x00)
691 	PORT_DIPSETTING(    0x00, DEF_STR( 1C_6C ) ) PORT_CONDITION("DSWB",0x80,EQUALS,0x00)
692 
693 	/* 0x400002 -> 0x100984 */
694 	PORT_MODIFY("DSWB")
695 	TAITO_DIFFICULTY_LOC(SWB)
696 	PORT_DIPNAME( 0x0c, 0x08, DEF_STR( Bonus_Life ) )   PORT_DIPLOCATION("SWB:3,4")
697 	PORT_DIPSETTING(    0x08, "Every 100k" )
698 	PORT_DIPSETTING(    0x0c, "100k And Every 200k" )
699 	PORT_DIPSETTING(    0x04, "150k And Every 200k" )
700 	PORT_DIPSETTING(    0x00, "Every 200k" )
701 	PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) )        PORT_DIPLOCATION("SWB:5,6")
702 	PORT_DIPSETTING(    0x20, "1" )
703 	PORT_DIPSETTING(    0x10, "2" )
704 	PORT_DIPSETTING(    0x30, "3" )
705 	PORT_DIPSETTING(    0x00, "4" )
706 	PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SWB:7" )        /* Listed as "Unused" */
707 	PORT_DIPNAME( 0x80, 0x80, "Coin Mode" )             PORT_DIPLOCATION("SWB:8")
708 	PORT_DIPSETTING(    0x80, "Mode A (Japan)" )        /* Mode A is TAITO_COINAGE_JAPAN_OLD */
709 	PORT_DIPSETTING(    0x00, "Mode B (World)" )        /* Mode B is TAITO_COINAGE_WORLD */
710 INPUT_PORTS_END
711 
712 static INPUT_PORTS_START( earthjkr )
713 	PORT_INCLUDE(asuka)
714 	/* DSWA: 0x400000 -> 0x100932 */
715 
716 	/* 0x400002 -> 0x1009842 */
717 	PORT_MODIFY("DSWB")
718 	PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Bonus_Life ) )   PORT_DIPLOCATION("SWB:3,4")
719 	PORT_DIPSETTING(    0x00, "100k and 300k" )
720 	PORT_DIPSETTING(    0x08, "100k only" )
721 	PORT_DIPSETTING(    0x04, "200k only" )
722 	PORT_DIPSETTING(    0x0c, DEF_STR( None ) )
723 	PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) )        PORT_DIPLOCATION("SWB:5,6")
724 	PORT_DIPSETTING(    0x00, "1" )
725 	PORT_DIPSETTING(    0x30, "2" )
726 	PORT_DIPSETTING(    0x20, "3" )
727 	PORT_DIPSETTING(    0x10, "4" )
728 	PORT_DIPNAME( 0x40, 0x40, "Copyright" )             PORT_DIPLOCATION("SWB:7") /* code at 0x00b982 and 0x00dbce */
729 	PORT_DIPSETTING(    0x40, "Visco" )                          /* Japan notice screen ON */
730 	PORT_DIPSETTING(    0x00, "Visco (distributed by Romstar)" ) /* Japan notice screen OFF */
731 	PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SWB:8" )
732 INPUT_PORTS_END
733 
734 static INPUT_PORTS_START( earthjkrp )
735 	PORT_INCLUDE(asuka)
736 
737 	PORT_MODIFY("DSWB")
738 	PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SWB:7" )
739 	PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SWB:8" )
740 INPUT_PORTS_END
741 
742 
743 static INPUT_PORTS_START( eto )
744 	PORT_INCLUDE(asuka)
745 	/* DSWA: 0x300000 -> 0x200914 */
746 
747 	/* 0x300002 -> 0x200916 */
748 	PORT_MODIFY("DSWB")
749 	PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SWB:3" )
750 	PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SWB:4" )
751 	PORT_DIPUNUSED_DIPLOC( 0x10, 0x10, "SWB:5" )
752 	PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SWB:6" )    /* value stored at 0x20090a but not read back */
753 	PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SWB:7" )
754 	PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SWB:8" )
755 INPUT_PORTS_END
756 
757 
758 /***********************************************************
759                  MACHINE DRIVERS
760 ***********************************************************/
761 
762 void asuka_state::machine_start()
763 {
764 	/* configure the banks */
765 	m_audiobank->configure_entries(0, 4, memregion("audiocpu")->base(), 0x04000);
766 
767 	save_item(NAME(m_adpcm_pos));
768 	save_item(NAME(m_adpcm_ff));
769 }
770 
machine_reset()771 void asuka_state::machine_reset()
772 {
773 	m_adpcm_pos = 0;
774 	m_adpcm_ff = false;
775 }
776 
WRITE_LINE_MEMBER(asuka_state::screen_vblank)777 WRITE_LINE_MEMBER(asuka_state::screen_vblank)
778 {
779 	// rising edge
780 	if (state)
781 	{
782 		m_pc090oj->eof_callback();
783 	}
784 }
785 
INTERRUPT_GEN_MEMBER(asuka_state::bonze_interrupt)786 INTERRUPT_GEN_MEMBER(asuka_state::bonze_interrupt)
787 {
788 	m_maincpu->set_input_line(4, HOLD_LINE);
789 	if (m_cchip) m_cchip->ext_interrupt(ASSERT_LINE);
790 	if (m_cchip_irq_clear) m_cchip_irq_clear->adjust(attotime::zero);
791 }
792 
TIMER_DEVICE_CALLBACK_MEMBER(asuka_state::cchip_irq_clear_cb)793 TIMER_DEVICE_CALLBACK_MEMBER(asuka_state::cchip_irq_clear_cb)
794 {
795 	m_cchip->ext_interrupt(CLEAR_LINE);
796 }
797 
counters_w(u8 data)798 void asuka_state::counters_w(u8 data)
799 {
800 	machine().bookkeeping().coin_lockout_w(1, data & 0x80);
801 	machine().bookkeeping().coin_lockout_w(0, data & 0x40);
802 	machine().bookkeeping().coin_counter_w(1, data & 0x20);
803 	machine().bookkeeping().coin_counter_w(0, data & 0x10);
804 }
805 
bonzeadv(machine_config & config)806 void asuka_state::bonzeadv(machine_config &config)
807 {
808 	/* basic machine hardware */
809 	M68000(config, m_maincpu, XTAL(16'000'000)/2);    /* checked on PCB */
810 	m_maincpu->set_addrmap(AS_PROGRAM, &asuka_state::bonzeadv_map);
811 	m_maincpu->set_vblank_int("screen", FUNC(asuka_state::bonze_interrupt));
812 
813 	Z80(config, m_audiocpu, XTAL(16'000'000)/4);    /* sound CPU, also required for test mode */
814 	m_audiocpu->set_addrmap(AS_PROGRAM, &asuka_state::bonzeadv_z80_map);
815 
816 	TAITO_CCHIP(config, m_cchip, 12_MHz_XTAL); // 12MHz OSC near C-Chip
817 	m_cchip->in_pa_callback().set_ioport("800007");
818 	m_cchip->in_pb_callback().set_ioport("800009");
819 	m_cchip->in_pc_callback().set_ioport("80000B");
820 	m_cchip->in_ad_callback().set_ioport("80000D");
821 	m_cchip->out_pb_callback().set(FUNC(asuka_state::counters_w));
822 
823 	TIMER(config, "cchip_irq_clear").configure_generic(FUNC(asuka_state::cchip_irq_clear_cb));
824 
825 	config.set_maximum_quantum(attotime::from_hz(600));
826 
827 	WATCHDOG_TIMER(config, "watchdog");
828 
829 	/* video hardware */
830 	screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
831 	screen.set_refresh_hz(60);
832 	screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
833 	screen.set_size(40*8, 32*8);
834 	screen.set_visarea(0*8, 40*8-1, 3*8, 31*8-1);
835 	screen.set_screen_update(FUNC(asuka_state::screen_update));
836 	screen.screen_vblank().set(FUNC(asuka_state::screen_vblank));
837 	screen.set_palette(m_tc0110pcr);
838 
839 	PC090OJ(config, m_pc090oj, 0);
840 	m_pc090oj->set_offsets(0, 8);
841 	m_pc090oj->set_palette(m_tc0110pcr);
842 	m_pc090oj->set_colpri_callback(FUNC(asuka_state::bonzeadv_colpri_cb));
843 
844 	TC0100SCN(config, m_tc0100scn, 0);
845 	m_tc0100scn->set_palette(m_tc0110pcr);
846 
847 	TC0110PCR(config, m_tc0110pcr, 0);
848 
849 	/* sound hardware */
850 	SPEAKER(config, "mono").front_center();
851 
852 	ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(16'000'000)/2));
853 	ymsnd.irq_handler().set_inputline("audiocpu", 0);
854 	ymsnd.add_route(0, "mono", 0.25);
855 	ymsnd.add_route(1, "mono", 1.0);
856 	ymsnd.add_route(2, "mono", 1.0);
857 
858 	tc0140syt_device &tc0140syt(TC0140SYT(config, "tc0140syt", 0));
859 	tc0140syt.set_master_tag(m_maincpu);
860 	tc0140syt.set_slave_tag(m_audiocpu);
861 }
862 
asuka(machine_config & config)863 void asuka_state::asuka(machine_config &config)
864 {
865 	/* basic machine hardware */
866 	M68000(config, m_maincpu, XTAL(16'000'000)/2);   /* verified on pcb */
867 	m_maincpu->set_addrmap(AS_PROGRAM, &asuka_state::asuka_map);
868 	m_maincpu->set_vblank_int("screen", FUNC(asuka_state::irq5_line_hold));
869 
870 	Z80(config, m_audiocpu, XTAL(16'000'000)/4); /* verified on pcb */
871 	m_audiocpu->set_addrmap(AS_PROGRAM, &asuka_state::z80_map);
872 
873 	config.set_maximum_quantum(attotime::from_hz(600));
874 
875 	TC0220IOC(config, m_tc0220ioc, 0);
876 	m_tc0220ioc->read_0_callback().set_ioport("DSWA");
877 	m_tc0220ioc->read_1_callback().set_ioport("DSWB");
878 	m_tc0220ioc->read_2_callback().set_ioport("IN0");
879 	m_tc0220ioc->read_3_callback().set_ioport("IN1");
880 	m_tc0220ioc->write_4_callback().set(FUNC(asuka_state::coin_control_w));
881 	m_tc0220ioc->read_7_callback().set_ioport("IN2");
882 
883 	/* video hardware */
884 	screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
885 	screen.set_refresh_hz(60);
886 	screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
887 	screen.set_size(40*8, 32*8);
888 	screen.set_visarea(0*8, 40*8-1, 2*8, 32*8-1);
889 	screen.set_screen_update(FUNC(asuka_state::screen_update));
890 	screen.screen_vblank().set(FUNC(asuka_state::screen_vblank));
891 	screen.set_palette(m_tc0110pcr);
892 
893 	PC090OJ(config, m_pc090oj, 0);
894 	m_pc090oj->set_offsets(0, 8);
895 	m_pc090oj->set_usebuffer(true);
896 	m_pc090oj->set_palette(m_tc0110pcr);
897 	m_pc090oj->set_colpri_callback(FUNC(asuka_state::asuka_colpri_cb));
898 
899 	TC0100SCN(config, m_tc0100scn, 0);
900 	m_tc0100scn->set_palette(m_tc0110pcr);
901 
902 	TC0110PCR(config, m_tc0110pcr, 0);
903 
904 	/* sound hardware */
905 	SPEAKER(config, "mono").front_center();
906 
907 	ym2151_device &ymsnd(YM2151(config, "ymsnd", 16_MHz_XTAL/4)); // verified on PCB
908 	ymsnd.irq_handler().set_inputline(m_audiocpu, 0);
909 	ymsnd.port_write_handler().set_membank(m_audiobank).mask(0x03);
910 	ymsnd.add_route(0, "mono", 0.25);
911 	ymsnd.add_route(1, "mono", 0.25);
912 
913 	MSM5205(config, m_msm, XTAL(384'000)); /* verified on pcb */
914 	m_msm->vck_legacy_callback().set(FUNC(asuka_state::asuka_msm5205_vck));  /* VCK function */
915 	m_msm->set_prescaler_selector(msm5205_device::S48_4B);      /* 8 kHz */
916 	m_msm->add_route(ALL_OUTPUTS, "mono", 0.5);
917 
918 	LS157(config, m_adpcm_select, 0);
919 	m_adpcm_select->out_callback().set("msm", FUNC(msm5205_device::data_w));
920 
921 	pc060ha_device &ciu(PC060HA(config, "ciu", 0));
922 	ciu.set_master_tag(m_maincpu);
923 	ciu.set_slave_tag(m_audiocpu);
924 }
925 
cadash(machine_config & config)926 void asuka_state::cadash(machine_config &config)
927 {
928 	/* basic machine hardware */
929 	M68000(config, m_maincpu, XTAL(32'000'000)/2);   /* 68000p12 running at 16Mhz, verified on pcb  */
930 	m_maincpu->set_addrmap(AS_PROGRAM, &asuka_state::cadash_map);
931 	m_maincpu->set_vblank_int("screen", FUNC(asuka_state::cadash_interrupt));
932 
933 	Z80(config, m_audiocpu, XTAL(8'000'000)/2);  /* verified on pcb */
934 	m_audiocpu->set_addrmap(AS_PROGRAM, &asuka_state::cadash_z80_map);
935 
936 	z180_device &subcpu(HD64180RP(config, "subcpu", XTAL(8'000'000)));   /* 8MHz HD64180RP8 Z180 */
937 	subcpu.set_addrmap(AS_PROGRAM, &asuka_state::cadash_sub_map);
938 	subcpu.set_addrmap(AS_IO, &asuka_state::cadash_sub_io);
939 
940 	config.set_maximum_quantum(attotime::from_hz(600));
941 
942 	TC0220IOC(config, m_tc0220ioc, 0);
943 	m_tc0220ioc->read_0_callback().set_ioport("DSWA");
944 	m_tc0220ioc->read_1_callback().set_ioport("DSWB");
945 	m_tc0220ioc->read_2_callback().set_ioport("IN0");
946 	m_tc0220ioc->read_3_callback().set_ioport("IN1");
947 	m_tc0220ioc->write_4_callback().set(FUNC(asuka_state::coin_control_w));
948 	m_tc0220ioc->read_7_callback().set_ioport("IN2");
949 
950 	/* video hardware */
951 	screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
952 	screen.set_refresh_hz(60);
953 	screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
954 	screen.set_size(40*8, 32*8);
955 	screen.set_visarea(0*8, 40*8-1, 2*8, 32*8-1);
956 	screen.set_screen_update(FUNC(asuka_state::screen_update));
957 	screen.screen_vblank().set(FUNC(asuka_state::screen_vblank));
958 	screen.set_palette(m_tc0110pcr);
959 
960 	PC090OJ(config, m_pc090oj, 0);
961 	m_pc090oj->set_offsets(0, 8);
962 	m_pc090oj->set_usebuffer(true);
963 	m_pc090oj->set_palette(m_tc0110pcr);
964 	m_pc090oj->set_colpri_callback(FUNC(asuka_state::bonzeadv_colpri_cb));
965 
966 	TC0100SCN(config, m_tc0100scn, 0);
967 	m_tc0100scn->set_offsets(1, 0);
968 	m_tc0100scn->set_palette(m_tc0110pcr);
969 
970 	TC0110PCR(config, m_tc0110pcr, 0);
971 
972 	/* sound hardware */
973 	SPEAKER(config, "mono").front_center();
974 
975 	ym2151_device &ymsnd(YM2151(config, "ymsnd", 8_MHz_XTAL/2)); // verified on PCB
976 	ymsnd.irq_handler().set_inputline(m_audiocpu, 0);
977 	ymsnd.port_write_handler().set_membank(m_audiobank).mask(0x03);
978 	ymsnd.add_route(0, "mono", 0.50);
979 	ymsnd.add_route(1, "mono", 0.50);
980 
981 	pc060ha_device &ciu(PC060HA(config, "ciu", 0));
982 	ciu.set_master_tag(m_maincpu);
983 	ciu.set_slave_tag(m_audiocpu);
984 }
985 
mofflott(machine_config & config)986 void asuka_state::mofflott(machine_config &config)
987 {
988 	/* basic machine hardware */
989 	M68000(config, m_maincpu, 8000000);    /* 8 MHz ??? */
990 	m_maincpu->set_addrmap(AS_PROGRAM, &asuka_state::asuka_map);
991 	m_maincpu->set_vblank_int("screen", FUNC(asuka_state::irq5_line_hold));
992 
993 	Z80(config, m_audiocpu, 4000000);  /* 4 MHz ??? */
994 	m_audiocpu->set_addrmap(AS_PROGRAM, &asuka_state::z80_map);
995 
996 	config.set_maximum_quantum(attotime::from_hz(600));
997 
998 	TC0220IOC(config, m_tc0220ioc, 0);
999 	m_tc0220ioc->read_0_callback().set_ioport("DSWA");
1000 	m_tc0220ioc->read_1_callback().set_ioport("DSWB");
1001 	m_tc0220ioc->read_2_callback().set_ioport("IN0");
1002 	m_tc0220ioc->read_3_callback().set_ioport("IN1");
1003 	m_tc0220ioc->write_4_callback().set(FUNC(asuka_state::coin_control_w));
1004 	m_tc0220ioc->read_7_callback().set_ioport("IN2");
1005 
1006 	/* video hardware */
1007 	screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
1008 	screen.set_refresh_hz(60);
1009 	screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
1010 	screen.set_size(40*8, 32*8);
1011 	screen.set_visarea(0*8, 40*8-1, 2*8, 32*8-1);
1012 	screen.set_screen_update(FUNC(asuka_state::screen_update));
1013 	screen.screen_vblank().set(FUNC(asuka_state::screen_vblank));
1014 	screen.set_palette(m_tc0110pcr);
1015 
1016 	PC090OJ(config, m_pc090oj, 0);
1017 	m_pc090oj->set_offsets(0, 8);
1018 	m_pc090oj->set_palette(m_tc0110pcr);
1019 	m_pc090oj->set_colpri_callback(FUNC(asuka_state::asuka_colpri_cb));
1020 
1021 	TC0100SCN(config, m_tc0100scn, 0);
1022 	m_tc0100scn->set_offsets(1, 0);
1023 	m_tc0100scn->set_palette(m_tc0110pcr);
1024 
1025 	TC0110PCR(config, m_tc0110pcr, 0);
1026 
1027 	/* sound hardware */
1028 	SPEAKER(config, "mono").front_center();
1029 
1030 	ym2151_device &ymsnd(YM2151(config, "ymsnd", 4000000));
1031 	ymsnd.irq_handler().set_inputline(m_audiocpu, 0);
1032 	ymsnd.port_write_handler().set_membank(m_audiobank).mask(0x03);
1033 	ymsnd.add_route(0, "mono", 0.25);
1034 	ymsnd.add_route(1, "mono", 0.25);
1035 
1036 	MSM5205(config, m_msm, 384000);
1037 	m_msm->vck_legacy_callback().set(FUNC(asuka_state::asuka_msm5205_vck));  /* VCK function */
1038 	m_msm->set_prescaler_selector(msm5205_device::S48_4B);      /* 8 kHz */
1039 	m_msm->add_route(ALL_OUTPUTS, "mono", 0.5);
1040 
1041 	LS157(config, m_adpcm_select, 0);
1042 	m_adpcm_select->out_callback().set("msm", FUNC(msm5205_device::data_w));
1043 
1044 	pc060ha_device &ciu(PC060HA(config, "ciu", 0));
1045 	ciu.set_master_tag(m_maincpu);
1046 	ciu.set_slave_tag(m_audiocpu);
1047 }
1048 
eto(machine_config & config)1049 void asuka_state::eto(machine_config &config)
1050 {
1051 	/* basic machine hardware */
1052 	M68000(config, m_maincpu, 8000000);    /* 8 MHz ??? */
1053 	m_maincpu->set_addrmap(AS_PROGRAM, &asuka_state::eto_map);
1054 	m_maincpu->set_vblank_int("screen", FUNC(asuka_state::irq5_line_hold));
1055 
1056 	Z80(config, m_audiocpu, 4000000);  /* 4 MHz ??? */
1057 	m_audiocpu->set_addrmap(AS_PROGRAM, &asuka_state::cadash_z80_map);
1058 
1059 	config.set_maximum_quantum(attotime::from_hz(600));
1060 
1061 	TC0220IOC(config, m_tc0220ioc, 0);
1062 	m_tc0220ioc->read_0_callback().set_ioport("DSWA");
1063 	m_tc0220ioc->read_1_callback().set_ioport("DSWB");
1064 	m_tc0220ioc->read_2_callback().set_ioport("IN0");
1065 	m_tc0220ioc->read_3_callback().set_ioport("IN1");
1066 	m_tc0220ioc->write_4_callback().set(FUNC(asuka_state::coin_control_w));
1067 	m_tc0220ioc->read_7_callback().set_ioport("IN2");
1068 
1069 	/* video hardware */
1070 	screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
1071 	screen.set_refresh_hz(60);
1072 	screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
1073 	screen.set_size(40*8, 32*8);
1074 	screen.set_visarea(0*8, 40*8-1, 2*8, 32*8-1);
1075 	screen.set_screen_update(FUNC(asuka_state::screen_update));
1076 	screen.screen_vblank().set(FUNC(asuka_state::screen_vblank));
1077 	screen.set_palette(m_tc0110pcr);
1078 
1079 	PC090OJ(config, m_pc090oj, 0);
1080 	m_pc090oj->set_offsets(0, 8);
1081 	m_pc090oj->set_palette(m_tc0110pcr);
1082 	m_pc090oj->set_colpri_callback(FUNC(asuka_state::asuka_colpri_cb));
1083 
1084 	TC0100SCN(config, m_tc0100scn, 0);
1085 	m_tc0100scn->set_offsets(1, 0);
1086 	m_tc0100scn->set_palette(m_tc0110pcr);
1087 
1088 	TC0110PCR(config, m_tc0110pcr, 0);
1089 
1090 	/* sound hardware */
1091 	SPEAKER(config, "mono").front_center();
1092 
1093 	ym2151_device &ymsnd(YM2151(config, "ymsnd", 4000000));
1094 	ymsnd.irq_handler().set_inputline(m_audiocpu, 0);
1095 	ymsnd.port_write_handler().set_membank(m_audiobank).mask(0x03);
1096 	ymsnd.add_route(0, "mono", 0.50);
1097 	ymsnd.add_route(1, "mono", 0.50);
1098 
1099 	pc060ha_device &ciu(PC060HA(config, "ciu", 0));
1100 	ciu.set_master_tag(m_maincpu);
1101 	ciu.set_slave_tag(m_audiocpu);
1102 }
1103 
1104 
1105 /***************************************************************************
1106                     DRIVERS
1107 ***************************************************************************/
1108 
1109 ROM_START( bonzeadv )
1110 	ROM_REGION( 0x100000, "maincpu", 0 )     /* 68000 code */
CRC(af821fbc)1111 	ROM_LOAD16_BYTE( "b41-09-1.17", 0x00000, 0x10000, CRC(af821fbc) SHA1(55bc13742033a31c92d6268d6b8344062ca78633) )
1112 	ROM_LOAD16_BYTE( "b41-11-1.26", 0x00001, 0x10000, CRC(823fff00) SHA1(b8b8cafbe860136c202d8d9f3ed5a54e2f4df363) )
1113 	ROM_LOAD16_BYTE( "b41-10.16",   0x20000, 0x10000, CRC(4ca94d77) SHA1(69a9f6bcb6d5e4132eed50860bdfe8d6b6d914cd) )
1114 	ROM_LOAD16_BYTE( "b41-15.25",   0x20001, 0x10000, CRC(aed7a0d0) SHA1(99ffc0b0e88b81231756610bf48df5365e12603b) )
1115 	/* 0x040000 - 0x7ffff is intentionally empty */
1116 	ROM_LOAD16_WORD_SWAP( "b41-01.15", 0x80000, 0x80000, CRC(5d072fa4) SHA1(6ffe1b8531381eb6dd3f1fec18c91294a6aca9f6) )
1117 
1118 	ROM_REGION( 0x2000, "cchip:cchip_eprom", 0 )
1119 	ROM_LOAD( "cchip_b41-05.43", 0x0000, 0x2000, CRC(75c52553) SHA1(87bbaefab90e7d43f63556fbae3e937baf9d397b) )
1120 
1121 	ROM_REGION( 0x80000, "tc0100scn", 0 )
1122 	ROM_LOAD16_WORD_SWAP( "b41-03.1",  0x00000, 0x80000, CRC(736d35d0) SHA1(7d41a7d71e117714bbd2cdda2953589cda6e763a) ) /* SCR tiles (8 x 8) */
1123 
1124 	ROM_REGION( 0x80000, "pc090oj", 0 )
1125 	ROM_LOAD16_WORD_SWAP( "b41-02.7",  0x00000, 0x80000, CRC(29f205d9) SHA1(9e9f0c2755a9aa5acfe2601911bfa07d8d61164c) ) /* Sprites (16 x 16) */
1126 
1127 	ROM_REGION( 0x10000, "audiocpu", 0 )     /* sound cpu */
1128 	ROM_LOAD( "b41-13.20", 0x00000, 0x10000, CRC(9e464254) SHA1(b6f6126b54c15320ecaa652d0eeabaa4cd94bd26) ) /* banked */
1129 
1130 	ROM_REGION( 0x80000, "ymsnd", 0 )     /* ADPCM samples */
1131 	ROM_LOAD( "b41-04.48",  0x00000, 0x80000, CRC(c668638f) SHA1(07238a6cb4d93ffaf6351657163b5d80f0dbf688) )
1132 ROM_END
1133 
1134 ROM_START( bonzeadvo )
1135 	ROM_REGION( 0x100000, "maincpu", 0 )     /* 68000 code */
1136 	ROM_LOAD16_BYTE( "b41-09.17",   0x00000, 0x10000, CRC(06818710) SHA1(b8045f4e15246231a5645d22bb965953f7fb47a3) )
1137 	ROM_LOAD16_BYTE( "b41-11.26",   0x00001, 0x10000, CRC(33c4c2f4) SHA1(3f1e76932d8f7e06e976b968a711177d25254bef) )
1138 	ROM_LOAD16_BYTE( "b41-10.16",   0x20000, 0x10000, CRC(4ca94d77) SHA1(69a9f6bcb6d5e4132eed50860bdfe8d6b6d914cd) )
1139 	ROM_LOAD16_BYTE( "b41-15.25",   0x20001, 0x10000, CRC(aed7a0d0) SHA1(99ffc0b0e88b81231756610bf48df5365e12603b) )
1140 	/* 0x040000 - 0x7ffff is intentionally empty */
1141 	ROM_LOAD16_WORD_SWAP( "b41-01.15", 0x80000, 0x80000, CRC(5d072fa4) SHA1(6ffe1b8531381eb6dd3f1fec18c91294a6aca9f6) )
1142 
1143 	ROM_REGION( 0x2000, "cchip:cchip_eprom", 0 )
1144 	ROM_LOAD( "cchip_b41-05.43", 0x0000, 0x2000, CRC(75c52553) SHA1(87bbaefab90e7d43f63556fbae3e937baf9d397b) )
1145 
1146 	ROM_REGION( 0x80000, "tc0100scn", 0 )
1147 	ROM_LOAD16_WORD_SWAP( "b41-03.1",  0x00000, 0x80000, CRC(736d35d0) SHA1(7d41a7d71e117714bbd2cdda2953589cda6e763a) ) /* SCR tiles (8 x 8) */
1148 
1149 	ROM_REGION( 0x80000, "pc090oj", 0 )
1150 	ROM_LOAD16_WORD_SWAP( "b41-02.7",  0x00000, 0x80000, CRC(29f205d9) SHA1(9e9f0c2755a9aa5acfe2601911bfa07d8d61164c) ) /* Sprites (16 x 16) */
1151 
1152 	ROM_REGION( 0x10000, "audiocpu", 0 )     /* sound cpu */
1153 	ROM_LOAD( "b41-13.20", 0x00000, 0x10000, CRC(9e464254) SHA1(b6f6126b54c15320ecaa652d0eeabaa4cd94bd26) ) /* banked */
1154 
1155 	ROM_REGION( 0x80000, "ymsnd", 0 )     /* ADPCM samples */
1156 	ROM_LOAD( "b41-04.48",  0x00000, 0x80000, CRC(c668638f) SHA1(07238a6cb4d93ffaf6351657163b5d80f0dbf688) )
1157 ROM_END
1158 
1159 ROM_START( bonzeadvu )
1160 	ROM_REGION( 0x100000, "maincpu", 0 )     /* 68000 code */
1161 	ROM_LOAD16_BYTE( "b41-09-1.17", 0x00000, 0x10000, CRC(af821fbc) SHA1(55bc13742033a31c92d6268d6b8344062ca78633) )
1162 	ROM_LOAD16_BYTE( "b41-11-1.26", 0x00001, 0x10000, CRC(823fff00) SHA1(b8b8cafbe860136c202d8d9f3ed5a54e2f4df363) )
1163 	ROM_LOAD16_BYTE( "b41-10.16",   0x20000, 0x10000, CRC(4ca94d77) SHA1(69a9f6bcb6d5e4132eed50860bdfe8d6b6d914cd) )
1164 	ROM_LOAD16_BYTE( "b41-14.25",   0x20001, 0x10000, CRC(37def16a) SHA1(b0a3b7206db55e29454672fffadf4e2a64eed873) )
1165 	/* 0x040000 - 0x7ffff is intentionally empty */
1166 	ROM_LOAD16_WORD_SWAP( "b41-01.15", 0x80000, 0x80000, CRC(5d072fa4) SHA1(6ffe1b8531381eb6dd3f1fec18c91294a6aca9f6) )
1167 
1168 	ROM_REGION( 0x2000, "cchip:cchip_eprom", 0 )
1169 	ROM_LOAD( "cchip_b41-05.43", 0x0000, 0x2000, CRC(75c52553) SHA1(87bbaefab90e7d43f63556fbae3e937baf9d397b) )
1170 
1171 	ROM_REGION( 0x80000, "tc0100scn", 0 )
1172 	ROM_LOAD16_WORD_SWAP( "b41-03.1",  0x00000, 0x80000, CRC(736d35d0) SHA1(7d41a7d71e117714bbd2cdda2953589cda6e763a) ) /* SCR tiles (8 x 8) */
1173 
1174 	ROM_REGION( 0x80000, "pc090oj", 0 )
1175 	ROM_LOAD16_WORD_SWAP( "b41-02.7",  0x00000, 0x80000, CRC(29f205d9) SHA1(9e9f0c2755a9aa5acfe2601911bfa07d8d61164c) ) /* Sprites (16 x 16) */
1176 
1177 	ROM_REGION( 0x10000, "audiocpu", 0 )     /* sound cpu */
1178 	ROM_LOAD( "b41-13.20", 0x00000, 0x10000, CRC(9e464254) SHA1(b6f6126b54c15320ecaa652d0eeabaa4cd94bd26) ) /* banked */
1179 
1180 	ROM_REGION( 0x80000, "ymsnd", 0 )     /* ADPCM samples */
1181 	ROM_LOAD( "b41-04.48",  0x00000, 0x80000, CRC(c668638f) SHA1(07238a6cb4d93ffaf6351657163b5d80f0dbf688) )
1182 ROM_END
1183 
1184 ROM_START( jigkmgri )
1185 	ROM_REGION( 0x100000, "maincpu", 0 )     /* 68000 code */
1186 	ROM_LOAD16_BYTE( "b41-09-1.17", 0x00000, 0x10000, CRC(af821fbc) SHA1(55bc13742033a31c92d6268d6b8344062ca78633) )
1187 	ROM_LOAD16_BYTE( "b41-11-1.26", 0x00001, 0x10000, CRC(823fff00) SHA1(b8b8cafbe860136c202d8d9f3ed5a54e2f4df363) )
1188 	ROM_LOAD16_BYTE( "b41-10.16",   0x20000, 0x10000, CRC(4ca94d77) SHA1(69a9f6bcb6d5e4132eed50860bdfe8d6b6d914cd) )
1189 	ROM_LOAD16_BYTE( "b41-12.25",   0x20001, 0x10000, CRC(40d9c1fc) SHA1(6f03d263e10559988aaa2be00d9bbf55f2fb864e) )
1190 	/* 0x040000 - 0x7ffff is intentionally empty */
1191 	ROM_LOAD16_WORD_SWAP( "b41-01.15", 0x80000, 0x80000, CRC(5d072fa4) SHA1(6ffe1b8531381eb6dd3f1fec18c91294a6aca9f6) )
1192 
1193 	ROM_REGION( 0x2000, "cchip:cchip_eprom", 0 )
1194 	ROM_LOAD( "cchip_b41-05.43", 0x0000, 0x2000, CRC(75c52553) SHA1(87bbaefab90e7d43f63556fbae3e937baf9d397b) )
1195 
1196 	ROM_REGION( 0x80000, "tc0100scn", 0 )
1197 	ROM_LOAD16_WORD_SWAP( "b41-03.1",  0x00000, 0x80000, CRC(736d35d0) SHA1(7d41a7d71e117714bbd2cdda2953589cda6e763a) ) /* Tiles (8 x 8) */
1198 
1199 	ROM_REGION( 0x80000, "pc090oj", 0 )
1200 	ROM_LOAD16_WORD_SWAP( "b41-02.7",  0x00000, 0x80000, CRC(29f205d9) SHA1(9e9f0c2755a9aa5acfe2601911bfa07d8d61164c) ) /* Sprites (16 x 16) */
1201 
1202 	ROM_REGION( 0x10000, "audiocpu", 0 )     /* sound cpu */
1203 	ROM_LOAD( "b41-13.20", 0x00000, 0x10000, CRC(9e464254) SHA1(b6f6126b54c15320ecaa652d0eeabaa4cd94bd26) ) /* banked */
1204 
1205 	ROM_REGION( 0x80000, "ymsnd", 0 )     /* ADPCM samples */
1206 	ROM_LOAD( "b41-04.48",  0x00000, 0x80000, CRC(c668638f) SHA1(07238a6cb4d93ffaf6351657163b5d80f0dbf688) )
1207 ROM_END
1208 
1209 ROM_START( bonzeadvp ) /* Labels consists of hand written checksum values of the ROMs */
1210 	ROM_REGION( 0x100000, "maincpu", 0 )     /* 68000 code */
1211 	ROM_LOAD16_BYTE( "0l.ic17", 0x00000, 0x10000, CRC(9e046e6f) SHA1(a05ed46930bcfa8f59fda6f1d370b841ad261258) )
1212 	ROM_LOAD16_BYTE( "0h.ic26", 0x00001, 0x10000, CRC(3e2b2628) SHA1(66ee0e5d2c38c467edc3f22b83b73643764ae8f0) )
1213 	ROM_LOAD16_BYTE( "1h.ic16", 0x20000, 0x10000, CRC(52f31b98) SHA1(8a20a79350073438522361d3f598afa42f0f62ed) )
1214 	ROM_LOAD16_BYTE( "1l.ic25", 0x20001, 0x10000, CRC(c7e79b98) SHA1(1d92861c6337362cdd9d31a2da944d8eb3171170) )
1215 	/* 0x040000 - 0x7ffff is intentionally empty */
1216 	ROM_LOAD16_BYTE( "fd65.ic20",  0x80001, 0x20000, CRC(c32f3bd5) SHA1(d9db14ec26cac5504a61058e87da4e404647ca94) ) // these 4 == b41-01.15 but split
1217 	ROM_LOAD16_BYTE( "49eb.ic26",  0x80000, 0x20000, CRC(c747650b) SHA1(ef03931d233ec1f9e61d45d02abb23e69edd8c15) ) // ^
1218 	ROM_LOAD16_BYTE( "a418.ic23",  0xc0001, 0x20000, CRC(51b02be6) SHA1(20e3423aea359f3ca92dd24f4f87351d93c279b6) ) // ^
1219 	ROM_LOAD16_BYTE( "0e7e.ic28",  0xc0000, 0x20000, CRC(dc1f9fd0) SHA1(88addfa2c3bb854efd88a3556d23a7607b6ec848) ) // ^
1220 
1221 	ROM_REGION( 0x2000, "cchip:cchip_eprom", 0 )
1222 	ROM_LOAD( "cchip_b41-05.43", 0x0000, 0x2000, CRC(75c52553) SHA1(87bbaefab90e7d43f63556fbae3e937baf9d397b) ) /* is the C-Chip the same as the final? */
1223 
1224 	ROM_REGION( 0x80000, "tc0100scn", 0 )
1225 	ROM_LOAD16_BYTE( "abbe.ic9",   0x00001, 0x20000, CRC(50e6581c) SHA1(230724d65c9b1ea5d72117dca077464dd599ad68) ) // first 2 == first half b41-03.1 but split
1226 	ROM_LOAD16_BYTE( "0ac8.ic15",  0x00000, 0x20000, CRC(29002fc4) SHA1(5ddbefc0d173865802362990e99a3b542c096412) ) // ^
1227 	ROM_LOAD16_BYTE( "5ebf.ic5",   0x40001, 0x20000, CRC(dac6f11f) SHA1(8c79d05ca539ebfbec35c7426c207937745c1949) ) // these 2 have differences
1228 	ROM_LOAD16_BYTE( "77c8.ic12",  0x40000, 0x20000, CRC(d8aaae12) SHA1(240dda7d7e74ffc6a084c39ca19903fd35ad0157) ) // ^
1229 
1230 	ROM_REGION( 0x80000, "pc090oj", 0 )
1231 	ROM_LOAD16_BYTE( "9369.ic19",  0x00001, 0x20000, CRC(a9dd7f90) SHA1(c3acf2dcd9325b9a74967d4b9cfff59bdb4045c6) ) // these 4 == b41-02.7 but split
1232 	ROM_LOAD16_BYTE( "e3ed.ic25",  0x00000, 0x20000, CRC(7cc66ee2) SHA1(145d3bd0e3ef765874fc679e709391d516e74ef0) ) // ^
1233 	ROM_LOAD16_BYTE( "03eb.ic16",  0x40001, 0x20000, CRC(39f32715) SHA1(5c555fde1ae0bb1e796e0122157bc694392122f3) ) // ^
1234 	ROM_LOAD16_BYTE( "b8e1.ic22",  0x40000, 0x20000, CRC(15b836cf) SHA1(0f7e5cb6a57c336125909e28af664fe7387947d4) ) // ^
1235 
1236 	ROM_REGION( 0x10000, "audiocpu", 0 )     /* sound cpu */
1237 	ROM_LOAD( "b41-13.20", 0x00000, 0x10000, CRC(9e464254) SHA1(b6f6126b54c15320ecaa652d0eeabaa4cd94bd26) ) // missing from dump /* banked */
1238 
1239 	ROM_REGION( 0x80000, "ymsnd", 0 )     /* ADPCM samples */
1240 	ROM_LOAD( "6089.ic17",  0x00000, 0x20000, CRC(b092783c) SHA1(e13f765e2884b6194926bf982595de18376ffef9) ) // these 4 == b41-04.48 but split
1241 	ROM_LOAD( "2e1f.ic14",  0x20000, 0x20000, CRC(df1f87c0) SHA1(ad3df38c22f1bb7bdc449922bd3c2a5c78aa87f8) ) // ^
1242 	ROM_LOAD( "f66e.ic11",  0x40000, 0x20000, CRC(c6df1b3e) SHA1(84d6ad3e3af565060aa4324c6e3e91e4dc5089b6) ) // ^
1243 	ROM_LOAD( "49d7.ic7",   0x60000, 0x20000, CRC(5584c02c) SHA1(00402df66debb257c97a609a37de0f8eeeb6e9f0) ) // ^
1244 ROM_END
1245 
1246 ROM_START( asuka ) /* Taito PCB: ASKA&ASKA - K1100388A / J1100169A */
1247 	ROM_REGION( 0x100000, "maincpu", 0 )     /* 1024k for 68000 code */
1248 	ROM_LOAD16_BYTE( "b68-13.ic23", 0x00000, 0x20000, CRC(855efb3e) SHA1(644e02e207adeaec7839c824688d88ab8d046418) )
1249 	ROM_LOAD16_BYTE( "b68-12.ic8",  0x00001, 0x20000, CRC(271eeee9) SHA1(c08e347be4aae929c0ab95ff7618edaa1a7d6da9) )
1250 	/* 0x040000 - 0x7ffff is intentionally empty */
1251 	ROM_LOAD16_WORD( "b68-03.ic30", 0x80000, 0x80000, CRC(d3a59b10) SHA1(35a2ff18b64e73ac5e17484354c0cc58bc2cd7fc) )    /* Fix ROM */
1252 
1253 	ROM_REGION( 0x80000, "tc0100scn", 0 )
1254 	ROM_LOAD16_WORD_SWAP( "b68-01.ic3", 0x00000, 0x80000, CRC(89f32c94) SHA1(74fbb699e05e2336509cb5ac06ed94335ff870d5) )   /* SCR tiles (8 x 8) */
1255 
1256 	ROM_REGION( 0xa0000, "pc090oj", 0 )
1257 	ROM_LOAD16_WORD_SWAP( "b68-02.ic6", 0x00000, 0x80000, CRC(f5018cd3) SHA1(860ce140ae369556d03d5d78987b87c0d6070df5) ) /* Sprites (16 x 16) */
1258 	ROM_LOAD16_BYTE     ( "b68-07.ic5", 0x80001, 0x10000, CRC(c113acc8) SHA1(613c61a78df73dcb0b9c9018ae829e865baac772) )
1259 	ROM_LOAD16_BYTE     ( "b68-06.ic4", 0x80000, 0x10000, CRC(f517e64d) SHA1(8be491bfe0f7eed58521de9d31da677acf635c23) )
1260 
1261 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound cpu */
1262 	ROM_LOAD( "b68-11.ic27", 0x00000, 0x10000, CRC(c378b508) SHA1(1b145fe736b924f298e02532cf9f26cc18b42ca7) ) /* banked */
1263 
1264 	ROM_REGION( 0x10000, "msm", 0 )   /* ADPCM samples */
1265 	ROM_LOAD( "b68-10.ic24", 0x00000, 0x10000, CRC(387aaf40) SHA1(47c583564ef1d49ece15f97221b2e073e8fb0544) )
1266 
1267 	ROM_REGION( 0x144, "pals", 0 )
1268 	ROM_LOAD( "b68-04.ic32", 0x00000, 0x144, CRC(9be618d1) SHA1(61ee33c3db448a05ff8f455e77fe17d51106baec) )
1269 	ROM_LOAD( "b68-05.ic43", 0x00000, 0x104, CRC(d6524ccc) SHA1(f3b56253692aebb63278d47832fc27b8b212b59c) )
1270 ROM_END
1271 
1272 ROM_START( asukaj ) /* Known to exist but not dumped: revision 1 with B68 08-1 & B68 09-1 program ROMs */
1273 	ROM_REGION( 0x100000, "maincpu", 0 )     /* 1024k for 68000 code */
1274 	ROM_LOAD16_BYTE( "b68-09.ic23", 0x00000, 0x20000, CRC(1eaa1bbb) SHA1(01ca6a5f3c47dab49654b84601119714eb329cc5) )
1275 	ROM_LOAD16_BYTE( "b68-08.ic8",  0x00001, 0x20000, CRC(8cc96e60) SHA1(dc94f3fd48c0407ec72e8330bc688e9e16d39213) )
1276 	/* 0x040000 - 0x7ffff is intentionally empty */
1277 	ROM_LOAD16_WORD( "b68-03.ic30", 0x80000, 0x80000, CRC(d3a59b10) SHA1(35a2ff18b64e73ac5e17484354c0cc58bc2cd7fc) )    /* Fix ROM */
1278 
1279 	ROM_REGION( 0x80000, "tc0100scn", 0 )
1280 	ROM_LOAD16_WORD_SWAP( "b68-01.ic3", 0x00000, 0x80000, CRC(89f32c94) SHA1(74fbb699e05e2336509cb5ac06ed94335ff870d5) )   /* SCR tiles (8 x 8) */
1281 
1282 	ROM_REGION( 0xa0000, "pc090oj", 0 )
1283 	ROM_LOAD16_WORD_SWAP( "b68-02.ic6", 0x00000, 0x80000, CRC(f5018cd3) SHA1(860ce140ae369556d03d5d78987b87c0d6070df5) ) /* Sprites (16 x 16) */
1284 	ROM_LOAD16_BYTE     ( "b68-07.ic5", 0x80001, 0x10000, CRC(c113acc8) SHA1(613c61a78df73dcb0b9c9018ae829e865baac772) )
1285 	ROM_LOAD16_BYTE     ( "b68-06.ic4", 0x80000, 0x10000, CRC(f517e64d) SHA1(8be491bfe0f7eed58521de9d31da677acf635c23) )
1286 
1287 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound cpu */
1288 	ROM_LOAD( "b68-11.ic27", 0x00000, 0x10000, CRC(c378b508) SHA1(1b145fe736b924f298e02532cf9f26cc18b42ca7) ) /* banked */
1289 
1290 	ROM_REGION( 0x10000, "msm", 0 )   /* ADPCM samples */
1291 	ROM_LOAD( "b68-10.ic24", 0x00000, 0x10000, CRC(387aaf40) SHA1(47c583564ef1d49ece15f97221b2e073e8fb0544) )
1292 
1293 	ROM_REGION( 0x144, "pals", 0 )
1294 	ROM_LOAD( "b68-04.ic32", 0x00000, 0x144, CRC(9be618d1) SHA1(61ee33c3db448a05ff8f455e77fe17d51106baec) )
1295 	ROM_LOAD( "b68-05.ic43", 0x00000, 0x104, CRC(d6524ccc) SHA1(f3b56253692aebb63278d47832fc27b8b212b59c) )
1296 ROM_END
1297 
1298 ROM_START( mofflott )
1299 	ROM_REGION( 0x100000, "maincpu", 0 )     /* 1024k for 68000 code */
1300 	ROM_LOAD16_BYTE( "c17-09.bin",  0x00000, 0x20000, CRC(05ee110f) SHA1(8cedd911d3fdcca1e409260d12dd03a2fb35ef86) )
1301 	ROM_LOAD16_BYTE( "c17-08.bin",  0x00001, 0x20000, CRC(d0aacffd) SHA1(2c5ec4020aad2c1cd3a004dc70a12e0d77eb6aa7) )
1302 	/* 0x40000 - 0x7ffff is intentionally empty */
1303 	ROM_LOAD16_WORD( "c17-03.bin",  0x80000, 0x80000, CRC(27047fc3) SHA1(1f88a7a42a94bac0e164a69896ae168ab821fbb3) )    /* Fix ROM */
1304 
1305 	ROM_REGION( 0x80000, "tc0100scn", 0 )
1306 	ROM_LOAD16_WORD_SWAP( "c17-01.bin",  0x00000, 0x80000, CRC(e9466d42) SHA1(93d533a9a992e3ff537e914577ede41729235826) )   /* SCR tiles (8 x 8) */
1307 
1308 	ROM_REGION( 0xa0000, "pc090oj", 0 )
1309 	ROM_LOAD16_WORD_SWAP( "c17-02.bin", 0x00000, 0x80000, CRC(8860a8db) SHA1(372adea8835a9524ece30ab71181ef9d05b120e9) ) /* Sprites (16 x 16) */
1310 	ROM_LOAD16_BYTE     ( "c17-05.bin", 0x80001, 0x10000, CRC(57ac4741) SHA1(3188ff0866324c68fba8e9745a0cb186784cb53d) )
1311 	ROM_LOAD16_BYTE     ( "c17-04.bin", 0x80000, 0x10000, CRC(f4250410) SHA1(1f5f6baca4aa695ce2ae5c65adcb460da872a239) )
1312 
1313 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound cpu */
1314 	ROM_LOAD( "c17-07.bin", 0x00000, 0x10000, CRC(cdb7bc2c) SHA1(5113055c954a39918436db75cc06b53c29c60728) ) /* banked */
1315 
1316 	ROM_REGION( 0x10000, "msm", 0 )   /* ADPCM samples */
1317 	ROM_LOAD( "c17-06.bin", 0x00000, 0x10000, CRC(5c332125) SHA1(408f42df18b38347c8a4e177a9484162a66877e1) )
1318 ROM_END
1319 
1320 ROM_START( cadash )
1321 	ROM_REGION( 0x80000, "maincpu", 0 )     /* 512k for 68000 code */
1322 	ROM_LOAD16_BYTE( "c21_14.ic11",  0x00000, 0x20000, CRC(5daf13fb) SHA1(c2be42b2cdc90b6463ce87211cf711c951b17fab) )
1323 	ROM_LOAD16_BYTE( "c21_16.ic15",  0x00001, 0x20000, CRC(cbaa2e75) SHA1(c41ea71f2b0e72bf993dfcfd30f1994cae9f52a0) )
1324 	ROM_LOAD16_BYTE( "c21_13.ic10",  0x40000, 0x20000, CRC(6b9e0ee9) SHA1(06314b9c0be19314e6b6ecb5274a63eb36b642f5) )
1325 	ROM_LOAD16_BYTE( "c21_17.ic14",  0x40001, 0x20000, CRC(bf9a578a) SHA1(42bde46081db6be2f61eaf171438ecc9264d18be) )
1326 
1327 	ROM_REGION( 0x80000, "tc0100scn", 0 )
1328 	ROM_LOAD16_WORD_SWAP( "c21-02.9",  0x00000, 0x80000, CRC(205883b9) SHA1(5aafee8cab3f949a7db91bcc26912f331041b51e) ) /* SCR tiles (8 x 8) */
1329 
1330 	ROM_REGION( 0x80000, "pc090oj", 0 )
1331 	ROM_LOAD16_WORD_SWAP( "c21-01.1",  0x00000, 0x80000, CRC(1ff6f39c) SHA1(742f296efc8073fafa73da2c8d7d26ca9514b6bf) ) /* Sprites (16 x 16) */
1332 
1333 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound cpu */
1334 	ROM_LOAD( "c21-08.38",   0x00000, 0x10000, CRC(dca495a0) SHA1(4e0f401f1b967da75f33fd7294860ad0b4bf2dce) ) /* banked */
1335 
1336 	ROM_REGION( 0x08000, "subcpu", 0 )  /* HD64180RP8 code (link) */
1337 	ROM_LOAD( "c21-07.57",   0x00000, 0x08000, CRC(f02292bd) SHA1(0a5c06a048ad67f90e0d766b504582e9eef035f7) )
1338 
1339 	ROM_REGION( 0x0800, "plds", 0 )
1340 	ROM_LOAD( "pal16l8b-c21-09.ic34",   0x0000, 0x0104, CRC(4b296700) SHA1(79d6c8fb13e30795d9c1f49885ada658f9722b68) )
1341 	ROM_LOAD( "pal16l8b-c21-10.ic45",   0x0200, 0x0104, CRC(35642f00) SHA1(a04403536b0ef7e8e7251dfc47274a6c8772fd2d) )
1342 	ROM_LOAD( "pal16l8b-c21-11-1.ic46", 0x0400, 0x0104, CRC(f4791e24) SHA1(7e3bbffec7b8f9171e6e09706e5622fef3c99ca0) )
1343 	ROM_LOAD( "pal20l8b-c21-12.ic47",   0x0600, 0x0144, CRC(bbc2cc97) SHA1(d4a68f28e0d3f5a3b39ecc25640bc9197ad0260b) )
1344 ROM_END
1345 
1346 ROM_START( cadashp )
1347 	ROM_REGION( 0x80000, "maincpu", 0 )     /* 512k for 68000 code */
1348 	ROM_LOAD16_BYTE( "euro main h.ic11",  0x00000, 0x20000, CRC(9dae00ca) SHA1(e80a069d1afbc624fa3e9cbe9c18bcd0364b3889) )
1349 	ROM_LOAD16_BYTE( "euro main l.ic15",  0x00001, 0x20000, CRC(ba66b6a5) SHA1(26040c847209c2fd25805eefb99c280b12564a17) )
1350 	ROM_LOAD16_BYTE( "euro data h.bin",   0x40000, 0x20000, CRC(bcce9d44) SHA1(e20a79e1e1c3367f92d05a2313cbeee122c1d3c5) )
1351 	ROM_LOAD16_BYTE( "euro data l.bin",   0x40001, 0x20000, CRC(21f5b591) SHA1(6ff70f79bca705407ab9a4825466826bc2dbab32) )
1352 
1353 	ROM_REGION( 0x08000, "subcpu", 0 )  /* HD64180RP8 code (link) */
1354 	ROM_LOAD( "com.ic57",   0x00000, 0x08000, CRC(bae1a92f) SHA1(dbe10a02a294dfa7d6052a692c3a49aad85d6ffd) )
1355 
1356 	// all other ROMs are under some kind of epoxy, assuming to be the same..
1357 	ROM_REGION( 0x80000, "tc0100scn", 0 )
1358 	ROM_LOAD16_WORD_SWAP( "c21-02.9",  0x00000, 0x80000, CRC(205883b9) SHA1(5aafee8cab3f949a7db91bcc26912f331041b51e) ) /* SCR tiles (8 x 8) */
1359 
1360 	ROM_REGION( 0x80000, "pc090oj", 0 )
1361 	ROM_LOAD16_WORD_SWAP( "c21-01.1",  0x00000, 0x80000, CRC(1ff6f39c) SHA1(742f296efc8073fafa73da2c8d7d26ca9514b6bf) ) /* Sprites (16 x 16) */
1362 
1363 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound cpu */
1364 	ROM_LOAD( "c21-08.38",   0x00000, 0x10000, CRC(dca495a0) SHA1(4e0f401f1b967da75f33fd7294860ad0b4bf2dce) ) /* banked */
1365 
1366 	ROM_REGION( 0x0800, "plds", 0 )
1367 	ROM_LOAD( "pal16l8b-c21-09.ic34",   0x0000, 0x0104, CRC(4b296700) SHA1(79d6c8fb13e30795d9c1f49885ada658f9722b68) )
1368 	ROM_LOAD( "pal16l8b-c21-10.ic45",   0x0200, 0x0104, CRC(35642f00) SHA1(a04403536b0ef7e8e7251dfc47274a6c8772fd2d) )
1369 	ROM_LOAD( "pal16l8b-c21-11-1.ic46", 0x0400, 0x0104, CRC(f4791e24) SHA1(7e3bbffec7b8f9171e6e09706e5622fef3c99ca0) )
1370 	ROM_LOAD( "pal20l8b-c21-12.ic47",   0x0600, 0x0144, CRC(bbc2cc97) SHA1(d4a68f28e0d3f5a3b39ecc25640bc9197ad0260b) )
1371 ROM_END
1372 
1373 ROM_START( cadashj )
1374 	ROM_REGION( 0x80000, "maincpu", 0 )     /* 512k for 68000 code */
1375 	ROM_LOAD16_BYTE( "c21_04-2.ic11",  0x00000, 0x20000, CRC(7a9c1828) SHA1(491eea29efc47159ad904e734a980c444bfbd8aa) )
1376 	ROM_LOAD16_BYTE( "c21_06-2.ic15",  0x00001, 0x20000, CRC(c9d6440a) SHA1(2555af4c4043811a53e9f069d97571672237c18e) )
1377 	ROM_LOAD16_BYTE( "c21_03-2.ic10",  0x40000, 0x20000, CRC(30afc320) SHA1(d4c1d1ef30be633244c6b71b24491d6eb3562cef) )
1378 	ROM_LOAD16_BYTE( "c21_05-2.ic14",  0x40001, 0x20000, CRC(2bc93209) SHA1(3352659ea9364ca9462343f03e26dd10087d6834) )
1379 
1380 	ROM_REGION( 0x80000, "tc0100scn", 0 )
1381 	ROM_LOAD16_WORD_SWAP( "c21-02.9",  0x00000, 0x80000, CRC(205883b9) SHA1(5aafee8cab3f949a7db91bcc26912f331041b51e) ) /* SCR tiles (8 x 8) */
1382 
1383 	ROM_REGION( 0x80000, "pc090oj", 0 )
1384 	ROM_LOAD16_WORD_SWAP( "c21-01.1",  0x00000, 0x80000, CRC(1ff6f39c) SHA1(742f296efc8073fafa73da2c8d7d26ca9514b6bf) ) /* Sprites (16 x 16) */
1385 
1386 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound cpu */
1387 	ROM_LOAD( "c21-08.38",   0x00000, 0x10000, CRC(dca495a0) SHA1(4e0f401f1b967da75f33fd7294860ad0b4bf2dce) ) /* banked */
1388 
1389 	ROM_REGION( 0x08000, "subcpu", ROMREGION_ERASE00 )  /* HD64180RP8 code (link) */
1390 	ROM_LOAD( "c21-07.57",   0x00000, 0x08000, CRC(f02292bd) SHA1(0a5c06a048ad67f90e0d766b504582e9eef035f7) )
1391 
1392 	ROM_REGION( 0x0800, "plds", 0 )
1393 	ROM_LOAD( "pal16l8b-c21-09.ic34",   0x0000, 0x0104, CRC(4b296700) SHA1(79d6c8fb13e30795d9c1f49885ada658f9722b68) )
1394 	ROM_LOAD( "pal16l8b-c21-10.ic45",   0x0200, 0x0104, CRC(35642f00) SHA1(a04403536b0ef7e8e7251dfc47274a6c8772fd2d) )
1395 	ROM_LOAD( "pal16l8b-c21-11-1.ic46", 0x0400, 0x0104, CRC(f4791e24) SHA1(7e3bbffec7b8f9171e6e09706e5622fef3c99ca0) )
1396 	ROM_LOAD( "pal20l8b-c21-12.ic47",   0x0600, 0x0144, CRC(bbc2cc97) SHA1(d4a68f28e0d3f5a3b39ecc25640bc9197ad0260b) )
1397 ROM_END
1398 
1399 ROM_START( cadashj1 )
1400 	ROM_REGION( 0x80000, "maincpu", 0 )     /* 512k for 68000 code */
1401 	ROM_LOAD16_BYTE( "c21_04-1.ic11",  0x00000, 0x20000, CRC(cc22ebe5) SHA1(170787e7ab2055af593f3f2596cab44feb53b060) )
1402 	ROM_LOAD16_BYTE( "c21_06-1.ic15",  0x00001, 0x20000, CRC(26e03304) SHA1(c8b271e455dde312c8871dc8dd4d3f0f063fa894) )
1403 	ROM_LOAD16_BYTE( "c21_03-1.ic10",  0x40000, 0x20000, CRC(c54888ed) SHA1(8a58da25eb8986a1c6496290e82344840badef0a) )
1404 	ROM_LOAD16_BYTE( "c21_05-1.ic14",  0x40001, 0x20000, CRC(834018d2) SHA1(0b1a29316f90a98478b47d7fa3f05c68e5ddd9b3) )
1405 
1406 	ROM_REGION( 0x80000, "tc0100scn", 0 )
1407 	ROM_LOAD16_WORD_SWAP( "c21-02.9",  0x00000, 0x80000, CRC(205883b9) SHA1(5aafee8cab3f949a7db91bcc26912f331041b51e) ) /* SCR tiles (8 x 8) */
1408 
1409 	ROM_REGION( 0x80000, "pc090oj", 0 )
1410 	ROM_LOAD16_WORD_SWAP( "c21-01.1",  0x00000, 0x80000, CRC(1ff6f39c) SHA1(742f296efc8073fafa73da2c8d7d26ca9514b6bf) ) /* Sprites (16 x 16) */
1411 
1412 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound cpu */
1413 	ROM_LOAD( "c21-08.38",   0x00000, 0x10000, CRC(dca495a0) SHA1(4e0f401f1b967da75f33fd7294860ad0b4bf2dce) ) /* banked */
1414 
1415 	ROM_REGION( 0x08000, "subcpu", ROMREGION_ERASE00 )  /* HD64180RP8 code (link) */ // the board this set was from did not have the link section populated
1416 	ROM_LOAD( "c21-07.57",   0x00000, 0x08000, CRC(f02292bd) SHA1(0a5c06a048ad67f90e0d766b504582e9eef035f7) )
1417 
1418 	ROM_REGION( 0x0800, "plds", 0 )
1419 	ROM_LOAD( "pal16l8b-c21-09.ic34",   0x0000, 0x0104, CRC(4b296700) SHA1(79d6c8fb13e30795d9c1f49885ada658f9722b68) )
1420 	ROM_LOAD( "pal16l8b-c21-10.ic45",   0x0200, 0x0104, CRC(35642f00) SHA1(a04403536b0ef7e8e7251dfc47274a6c8772fd2d) )
1421 	ROM_LOAD( "pal16l8b-c21-11-1.ic46", 0x0400, 0x0104, CRC(f4791e24) SHA1(7e3bbffec7b8f9171e6e09706e5622fef3c99ca0) )
1422 	ROM_LOAD( "pal20l8b-c21-12.ic47",   0x0600, 0x0144, CRC(bbc2cc97) SHA1(d4a68f28e0d3f5a3b39ecc25640bc9197ad0260b) )
1423 ROM_END
1424 
1425 ROM_START( cadashjo )
1426 	ROM_REGION( 0x80000, "maincpu", 0 )     /* 512k for 68000 code */
1427 	ROM_LOAD16_BYTE( "c21_04.ic11",  0x00000, 0x20000, CRC(be7d3f12) SHA1(16e445317d053a19fc430625743f4afa54ce1d8e) )
1428 	ROM_LOAD16_BYTE( "c21_06.ic15",  0x00001, 0x20000, CRC(1db3fe02) SHA1(3abb341596eed8f991ed2002d2e7b71fa2dd099d) )
1429 	ROM_LOAD16_BYTE( "c21_03.ic10",  0x40000, 0x20000, CRC(7e31c5a3) SHA1(a0abc5862d594800934a4792de4ec655f60c1f23) )
1430 	ROM_LOAD16_BYTE( "c21_05.ic14",  0x40001, 0x20000, CRC(a4f4901d) SHA1(a3e8d9ad033e6fb1c8383669e6e59f2f79386e32) )
1431 
1432 	ROM_REGION( 0x80000, "tc0100scn", 0 )
1433 	ROM_LOAD16_WORD_SWAP( "c21-02.9",  0x00000, 0x80000, CRC(205883b9) SHA1(5aafee8cab3f949a7db91bcc26912f331041b51e) ) /* SCR tiles (8 x 8) */
1434 
1435 	ROM_REGION( 0x80000, "pc090oj", 0 )
1436 	ROM_LOAD16_WORD_SWAP( "c21-01.1",  0x00000, 0x80000, CRC(1ff6f39c) SHA1(742f296efc8073fafa73da2c8d7d26ca9514b6bf) ) /* Sprites (16 x 16) */
1437 
1438 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound cpu */
1439 	ROM_LOAD( "c21-08.38",   0x00000, 0x10000, CRC(dca495a0) SHA1(4e0f401f1b967da75f33fd7294860ad0b4bf2dce) ) /* banked */
1440 
1441 	ROM_REGION( 0x08000, "subcpu", ROMREGION_ERASE00 )  /* HD64180RP8 code (link) */ // the board this set was from did not have the link section populated
1442 	ROM_LOAD( "c21-07.57",   0x00000, 0x08000, CRC(f02292bd) SHA1(0a5c06a048ad67f90e0d766b504582e9eef035f7) )
1443 
1444 	ROM_REGION( 0x0800, "plds", 0 )
1445 	ROM_LOAD( "pal16l8b-c21-09.ic34",   0x0000, 0x0104, CRC(4b296700) SHA1(79d6c8fb13e30795d9c1f49885ada658f9722b68) )
1446 	ROM_LOAD( "pal16l8b-c21-10.ic45",   0x0200, 0x0104, CRC(35642f00) SHA1(a04403536b0ef7e8e7251dfc47274a6c8772fd2d) )
1447 	ROM_LOAD( "pal16l8b-c21-11-1.ic46", 0x0400, 0x0104, CRC(f4791e24) SHA1(7e3bbffec7b8f9171e6e09706e5622fef3c99ca0) )
1448 	ROM_LOAD( "pal20l8b-c21-12.ic47",   0x0600, 0x0144, CRC(bbc2cc97) SHA1(d4a68f28e0d3f5a3b39ecc25640bc9197ad0260b) )
1449 ROM_END
1450 
1451 ROM_START( cadashu )
1452 	ROM_REGION( 0x80000, "maincpu", 0 )     /* 512k for 68000 code */
1453 	ROM_LOAD16_BYTE( "c21_14-2.ic11",  0x00000, 0x20000, CRC(f823d418) SHA1(5b4a0b42fb5a2e1ba1e25465762cdc24c41b33f8) )
1454 	ROM_LOAD16_BYTE( "c21_16-2.ic15",  0x00001, 0x20000, CRC(90165577) SHA1(b8e163cf60933aaaa53873fbc866d8d1750240ab) )
1455 	ROM_LOAD16_BYTE( "c21_13-2.ic10",  0x40000, 0x20000, CRC(92dcc3ae) SHA1(7d11c6d8b54468f0c56b4f58adc176e4d46a62eb) )
1456 	ROM_LOAD16_BYTE( "c21_15-2.ic14",  0x40001, 0x20000, CRC(f915d26a) SHA1(cdc7e6a35077ebff937350aee1eee332352e9383) )
1457 
1458 	ROM_REGION( 0x80000, "tc0100scn", 0 )
1459 	ROM_LOAD16_WORD_SWAP( "c21-02.9",  0x00000, 0x80000, CRC(205883b9) SHA1(5aafee8cab3f949a7db91bcc26912f331041b51e) ) /* SCR tiles (8 x 8) */
1460 
1461 	ROM_REGION( 0x80000, "pc090oj", 0 )
1462 	ROM_LOAD16_WORD_SWAP( "c21-01.1",  0x00000, 0x80000, CRC(1ff6f39c) SHA1(742f296efc8073fafa73da2c8d7d26ca9514b6bf) ) /* Sprites (16 x 16) */
1463 
1464 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound cpu */
1465 	ROM_LOAD( "c21-08.38",   0x00000, 0x10000, CRC(dca495a0) SHA1(4e0f401f1b967da75f33fd7294860ad0b4bf2dce) ) /* banked */
1466 
1467 	ROM_REGION( 0x08000, "subcpu", 0 )  /* HD64180RP8 code (link) */
1468 	ROM_LOAD( "c21-07.57",   0x00000, 0x08000, CRC(f02292bd) SHA1(0a5c06a048ad67f90e0d766b504582e9eef035f7) )
1469 
1470 	ROM_REGION( 0x0800, "plds", 0 )
1471 	ROM_LOAD( "pal16l8b-c21-09.ic34",   0x0000, 0x0104, CRC(4b296700) SHA1(79d6c8fb13e30795d9c1f49885ada658f9722b68) )
1472 	ROM_LOAD( "pal16l8b-c21-10.ic45",   0x0200, 0x0104, CRC(35642f00) SHA1(a04403536b0ef7e8e7251dfc47274a6c8772fd2d) )
1473 	ROM_LOAD( "pal16l8b-c21-11-1.ic46", 0x0400, 0x0104, CRC(f4791e24) SHA1(7e3bbffec7b8f9171e6e09706e5622fef3c99ca0) )
1474 	ROM_LOAD( "pal20l8b-c21-12.ic47",   0x0600, 0x0144, CRC(bbc2cc97) SHA1(d4a68f28e0d3f5a3b39ecc25640bc9197ad0260b) )
1475 ROM_END
1476 
1477 ROM_START( cadashi )
1478 	ROM_REGION( 0x80000, "maincpu", 0 )     /* 512k for 68000 code */
1479 	ROM_LOAD16_BYTE( "c21_27-1.ic11",  0x00000, 0x20000, CRC(d1d9e613) SHA1(296c188daec962bdb4e78e20f1cc4c7d1f4dda09) )
1480 	ROM_LOAD16_BYTE( "c21_29-1.ic15",  0x00001, 0x20000, CRC(142256ef) SHA1(9ffc64d7c900bfa0300de9e6d18c7458f4c76ed7) )
1481 	ROM_LOAD16_BYTE( "c21_26-1.ic10",  0x40000, 0x20000, CRC(c9cf6e30) SHA1(872c871cd60e0aa7149660277f67f90748d82743) )
1482 	ROM_LOAD16_BYTE( "c21_28-1.ic14",  0x40001, 0x20000, CRC(641fc9dd) SHA1(1497e39f6b250de39ef2785aaca7e68a803612fa) )
1483 
1484 	ROM_REGION( 0x80000, "tc0100scn", 0 )
1485 	ROM_LOAD16_WORD_SWAP( "c21-02.9",  0x00000, 0x80000, CRC(205883b9) SHA1(5aafee8cab3f949a7db91bcc26912f331041b51e) ) /* SCR tiles (8 x 8) */
1486 
1487 	ROM_REGION( 0x80000, "pc090oj", 0 )
1488 	ROM_LOAD16_WORD_SWAP( "c21-01.1",  0x00000, 0x80000, CRC(1ff6f39c) SHA1(742f296efc8073fafa73da2c8d7d26ca9514b6bf) ) /* Sprites (16 x 16) */
1489 
1490 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound cpu */
1491 	ROM_LOAD( "c21-08.38",   0x00000, 0x10000, CRC(dca495a0) SHA1(4e0f401f1b967da75f33fd7294860ad0b4bf2dce) ) /* banked */
1492 
1493 	ROM_REGION( 0x08000, "subcpu", 0 )  /* HD64180RP8 code (link) */
1494 	ROM_LOAD( "c21-07.57",   0x00000, 0x08000, CRC(f02292bd) SHA1(0a5c06a048ad67f90e0d766b504582e9eef035f7) )
1495 
1496 	ROM_REGION( 0x0800, "plds", 0 )
1497 	ROM_LOAD( "pal16l8b-c21-09.ic34",   0x0000, 0x0104, CRC(4b296700) SHA1(79d6c8fb13e30795d9c1f49885ada658f9722b68) )
1498 	ROM_LOAD( "pal16l8b-c21-10.ic45",   0x0200, 0x0104, CRC(35642f00) SHA1(a04403536b0ef7e8e7251dfc47274a6c8772fd2d) )
1499 	ROM_LOAD( "pal16l8b-c21-11-1.ic46", 0x0400, 0x0104, CRC(f4791e24) SHA1(7e3bbffec7b8f9171e6e09706e5622fef3c99ca0) )
1500 	ROM_LOAD( "pal20l8b-c21-12.ic47",   0x0600, 0x0144, CRC(bbc2cc97) SHA1(d4a68f28e0d3f5a3b39ecc25640bc9197ad0260b) )
1501 ROM_END
1502 
1503 ROM_START( cadashf )
1504 	ROM_REGION( 0x80000, "maincpu", 0 )     /* 512k for 68000 code */
1505 	ROM_LOAD16_BYTE( "c21_19.ic11",  0x00000, 0x20000, CRC(4d70543b) SHA1(4fc8d4a9f978232a484af3d91bf8eea2afc839a7) )
1506 	ROM_LOAD16_BYTE( "c21_21.ic15",  0x00001, 0x20000, CRC(0e5b9950) SHA1(872919bab057fc9e5baffe5dfe35b1b8c1ed0105) )
1507 	ROM_LOAD16_BYTE( "c21_18.ic10",  0x40000, 0x20000, CRC(8a19e59b) SHA1(b42a0c8273ca6f202a5dc6e33965423da3b074d8) )
1508 	ROM_LOAD16_BYTE( "c21_20.ic14",  0x40001, 0x20000, CRC(b96acfd9) SHA1(d05b55fd5bbf8fd0e5a7272d1951f27a4900371f) )
1509 
1510 	ROM_REGION( 0x80000, "tc0100scn", 0 )
1511 	ROM_LOAD16_WORD_SWAP( "c21-02.9",  0x00000, 0x80000, CRC(205883b9) SHA1(5aafee8cab3f949a7db91bcc26912f331041b51e) ) /* SCR tiles (8 x 8) */
1512 
1513 	ROM_REGION( 0x80000, "pc090oj", 0 )
1514 	ROM_LOAD16_WORD_SWAP( "c21-01.1",  0x00000, 0x80000, CRC(1ff6f39c) SHA1(742f296efc8073fafa73da2c8d7d26ca9514b6bf) ) /* Sprites (16 x 16) */
1515 
1516 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound cpu */
1517 	ROM_LOAD( "c21-08.38",   0x00000, 0x10000, CRC(dca495a0) SHA1(4e0f401f1b967da75f33fd7294860ad0b4bf2dce) ) /* banked */
1518 
1519 	ROM_REGION( 0x08000, "subcpu", 0 )  /* HD64180RP8 code (link) */
1520 	ROM_LOAD( "c21-07.57",   0x00000, 0x08000, CRC(f02292bd) SHA1(0a5c06a048ad67f90e0d766b504582e9eef035f7) )
1521 
1522 	ROM_REGION( 0x0800, "plds", 0 )
1523 	ROM_LOAD( "pal16l8b-c21-09.ic34",   0x0000, 0x0104, CRC(4b296700) SHA1(79d6c8fb13e30795d9c1f49885ada658f9722b68) )
1524 	ROM_LOAD( "pal16l8b-c21-10.ic45",   0x0200, 0x0104, CRC(35642f00) SHA1(a04403536b0ef7e8e7251dfc47274a6c8772fd2d) )
1525 	ROM_LOAD( "pal16l8b-c21-11-1.ic46", 0x0400, 0x0104, CRC(f4791e24) SHA1(7e3bbffec7b8f9171e6e09706e5622fef3c99ca0) )
1526 	ROM_LOAD( "pal20l8b-c21-12.ic47",   0x0600, 0x0144, CRC(bbc2cc97) SHA1(d4a68f28e0d3f5a3b39ecc25640bc9197ad0260b) )
1527 ROM_END
1528 
1529 ROM_START( cadashg )
1530 	ROM_REGION( 0x80000, "maincpu", 0 )     /* 512k for 68000 code */
1531 	ROM_LOAD16_BYTE( "c21_23-1.ic11",  0x00000, 0x20000, CRC(30ddbabe) SHA1(f48ea6fe36c4d9fe291232fd7adddb8f3547270f) )
1532 	ROM_LOAD16_BYTE( "c21_25-1.ic15",  0x00001, 0x20000, CRC(24e10611) SHA1(6f406267777dd693a3869ccb34fe3f2f8dea857d) )
1533 	ROM_LOAD16_BYTE( "c21_22-1.ic10",  0x40000, 0x20000, CRC(daf58b2d) SHA1(7a64df848f46f27bb6f9757ce0cc81311c2f172f) )
1534 	ROM_LOAD16_BYTE( "c21_24-1.ic14",  0x40001, 0x20000, CRC(2359b93e) SHA1(9a5ce34dd8667a987ab8b6e6246f0ad032af868f) )
1535 
1536 	ROM_REGION( 0x80000, "tc0100scn", 0 )
1537 	ROM_LOAD16_WORD_SWAP( "c21-02.9",  0x00000, 0x80000, CRC(205883b9) SHA1(5aafee8cab3f949a7db91bcc26912f331041b51e) ) /* SCR tiles (8 x 8) */
1538 
1539 	ROM_REGION( 0x80000, "pc090oj", 0 )
1540 	ROM_LOAD16_WORD_SWAP( "c21-01.1",  0x00000, 0x80000, CRC(1ff6f39c) SHA1(742f296efc8073fafa73da2c8d7d26ca9514b6bf) ) /* Sprites (16 x 16) */
1541 
1542 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound cpu */
1543 	ROM_LOAD( "c21-08.38",   0x00000, 0x10000, CRC(dca495a0) SHA1(4e0f401f1b967da75f33fd7294860ad0b4bf2dce) ) /* banked */
1544 
1545 	ROM_REGION( 0x08000, "subcpu", 0 )  /* HD64180RP8 code (link) */
1546 	ROM_LOAD( "c21-07.57",   0x00000, 0x08000, CRC(f02292bd) SHA1(0a5c06a048ad67f90e0d766b504582e9eef035f7) )
1547 
1548 	ROM_REGION( 0x0800, "plds", 0 )
1549 	ROM_LOAD( "pal16l8b-c21-09.ic34",   0x0000, 0x0104, CRC(4b296700) SHA1(79d6c8fb13e30795d9c1f49885ada658f9722b68) )
1550 	ROM_LOAD( "pal16l8b-c21-10.ic45",   0x0200, 0x0104, CRC(35642f00) SHA1(a04403536b0ef7e8e7251dfc47274a6c8772fd2d) )
1551 	ROM_LOAD( "pal16l8b-c21-11-1.ic46", 0x0400, 0x0104, CRC(f4791e24) SHA1(7e3bbffec7b8f9171e6e09706e5622fef3c99ca0) )
1552 	ROM_LOAD( "pal20l8b-c21-12.ic47",   0x0600, 0x0144, CRC(bbc2cc97) SHA1(d4a68f28e0d3f5a3b39ecc25640bc9197ad0260b) )
1553 ROM_END
1554 
1555 ROM_START( cadashs ) // no labels on the program ROMs
1556 	ROM_REGION( 0x80000, "maincpu", 0 )     /* 512k for 68000 code */
1557 	ROM_LOAD16_BYTE( "ic11",  0x00000, 0x20000, CRC(6c11743e) SHA1(847266a04090b34e20985d65f4d1f7e7776efa02) )
1558 	ROM_LOAD16_BYTE( "ic15",  0x00001, 0x20000, CRC(73224356) SHA1(28f8fa58bf62d8f9aa94115b84568f20810f5342) )
1559 	ROM_LOAD16_BYTE( "ic10",  0x40000, 0x20000, CRC(57d659d9) SHA1(6bf0c7d514a65bd1a0d51fe1c6bb208419d016e6) )
1560 	ROM_LOAD16_BYTE( "ic14",  0x40001, 0x20000, CRC(53c1b195) SHA1(5985304fa65a3f33a26fbd5dcccb153de6860841) )
1561 
1562 	ROM_REGION( 0x80000, "tc0100scn", 0 )
1563 	ROM_LOAD16_WORD_SWAP( "c21-02.9",  0x00000, 0x80000, CRC(205883b9) SHA1(5aafee8cab3f949a7db91bcc26912f331041b51e) ) /* SCR tiles (8 x 8) */
1564 
1565 	ROM_REGION( 0x80000, "pc090oj", 0 )
1566 	ROM_LOAD16_WORD_SWAP( "c21-01.1",  0x00000, 0x80000, CRC(1ff6f39c) SHA1(742f296efc8073fafa73da2c8d7d26ca9514b6bf) ) /* Sprites (16 x 16) */
1567 
1568 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound cpu */
1569 	ROM_LOAD( "c21-08.38",   0x00000, 0x10000, CRC(dca495a0) SHA1(4e0f401f1b967da75f33fd7294860ad0b4bf2dce) ) /* banked */
1570 
1571 	ROM_REGION( 0x08000, "subcpu", 0 )  /* HD64180RP8 code (link) */
1572 	ROM_LOAD( "c21-07.57",   0x00000, 0x08000, CRC(f02292bd) SHA1(0a5c06a048ad67f90e0d766b504582e9eef035f7) )
1573 
1574 	ROM_REGION( 0x0800, "plds", 0 )
1575 	ROM_LOAD( "pal16l8b-c21-09.ic34",   0x0000, 0x0104, CRC(4b296700) SHA1(79d6c8fb13e30795d9c1f49885ada658f9722b68) )
1576 	ROM_LOAD( "pal16l8b-c21-10.ic45",   0x0200, 0x0104, CRC(35642f00) SHA1(a04403536b0ef7e8e7251dfc47274a6c8772fd2d) )
1577 	ROM_LOAD( "pal16l8b-c21-11-1.ic46", 0x0400, 0x0104, CRC(f4791e24) SHA1(7e3bbffec7b8f9171e6e09706e5622fef3c99ca0) )
1578 	ROM_LOAD( "pal20l8b-c21-12.ic47",   0x0600, 0x0144, CRC(bbc2cc97) SHA1(d4a68f28e0d3f5a3b39ecc25640bc9197ad0260b) )
1579 ROM_END
1580 
1581 ROM_START( galmedes ) /* Taito PCB: K1100388A / J1100169A */
1582 	ROM_REGION( 0x100000, "maincpu", 0 )     /* 1024k for 68000 code */
1583 	ROM_LOAD16_BYTE( "gm-prg1.ic23", 0x00000, 0x20000, CRC(32a70753) SHA1(3bd094b7ae600dbc87ba74e8b2d6b86a68346f4f) )
1584 	ROM_LOAD16_BYTE( "gm-prg0.ic8",  0x00001, 0x20000, CRC(fae546a4) SHA1(484cad5287daa495b347f6b5b065f3b3d02d8f0e) )
1585 	/* 0x40000 - 0x7ffff is intentionally empty */
1586 	ROM_LOAD16_WORD( "gm-30.ic30",   0x80000, 0x80000, CRC(4da2a407) SHA1(7bd0eb629dd7022a16e328612c786c544267f7bc) )   /* Fix ROM */
1587 
1588 	ROM_REGION( 0x80000, "tc0100scn", 0 )
1589 	ROM_LOAD16_WORD_SWAP( "gm-scn.ic3", 0x00000, 0x80000, CRC(3bab0581) SHA1(56b79a4ffd9f4880a63450b7d1b79f029de75e20) )    /* SCR tiles (8 x 8) */
1590 
1591 	ROM_REGION( 0x80000, "pc090oj", 0 )
1592 	ROM_LOAD16_WORD_SWAP( "gm-obj.ic6", 0x00000, 0x80000, CRC(7a4a1315) SHA1(e2010ee4222415fd55ba3102003be4151d29e39b) )    /* Sprites (16 x 16) */
1593 
1594 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound cpu */
1595 	ROM_LOAD( "gm-snd.ic27", 0x00000, 0x10000, CRC(d6f56c21) SHA1(ff9743448ac8ce57a2f8c33a26145e7b92cbe3c3) ) /* banked */
1596 
1597 	ROM_REGION( 0x10000, "msm", ROMREGION_ERASEFF )   /* ADPCM samples */
1598 	/* Empty socket on Galmedes - but sound chips present */
1599 
1600 	ROM_REGION( 0x144, "pals", 0 )
1601 	ROM_LOAD( "b68-04.ic32", 0x00000, 0x144, CRC(9be618d1) SHA1(61ee33c3db448a05ff8f455e77fe17d51106baec) )
1602 	ROM_LOAD( "b68-05.ic43", 0x00000, 0x104, CRC(d6524ccc) SHA1(f3b56253692aebb63278d47832fc27b8b212b59c) )
1603 ROM_END
1604 
1605 ROM_START( earthjkr ) /* Taito PCB: K1100388A / J1100169A */
1606 	ROM_REGION( 0x100000, "maincpu", 0 )     /* 1024k for 68000 code */
1607 	ROM_LOAD16_BYTE( "ej_3b.ic23",  0x00000, 0x20000, BAD_DUMP CRC(bdd86fc2) SHA1(96578860ed03718f8a68847b367eac6c81b79ca2) )
1608 	ROM_LOAD16_BYTE( "ej_3a.ic8",   0x00001, 0x20000, CRC(9c8050c6) SHA1(076c882f75787e8120de66ff0dcd2cb820513c45) )
1609 	/* 0x40000 - 0x7ffff is intentionally empty */
1610 	ROM_LOAD16_WORD( "ej_30e.ic30", 0x80000, 0x80000, CRC(49d1f77f) SHA1(f6c9b2fc88b77cc9baa5be48da5c3eb72310e471) ) /* Fix ROM */
1611 
1612 	ROM_REGION( 0x80000, "tc0100scn", 0 )
1613 	ROM_LOAD16_WORD_SWAP( "ej_chr-0.ic3", 0x00000, 0x80000, CRC(ac675297) SHA1(2a34e1eae3a4be84dbf709053f5e8a781b1073fc) )    /* SCR tiles (8 x 8) - mask ROM */
1614 
1615 	ROM_REGION( 0xa0000, "pc090oj", 0 )
1616 	ROM_LOAD16_WORD_SWAP( "ej_obj-0.ic6", 0x00000, 0x80000, CRC(5f21ac47) SHA1(45c94ffb53ee9b822b0676f6fb151fed4ce6d967) ) /* Sprites (16 x 16) - mask ROM */
1617 	ROM_LOAD16_BYTE     ( "ej_1.ic5",     0x80001, 0x10000, CRC(cb4891db) SHA1(af1112608cdd897ef6028ef617f5ca69d7964861) )
1618 	ROM_LOAD16_BYTE     ( "ej_0.ic4",     0x80000, 0x10000, CRC(b612086f) SHA1(625748fcb698ec57b7b3ce46019cf85de99aaaa1) )
1619 
1620 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound cpu */
1621 	ROM_LOAD( "ej_2.ic27", 0x00000, 0x10000, CRC(42ba2566) SHA1(c437388684b565c7504d6bad6accd73aa000faca) ) /* banked */
1622 
1623 	ROM_REGION( 0x10000, "msm", ROMREGION_ERASEFF )   /* ADPCM samples */
1624 	/* Empty socket on U.N. Defense Force: Earth Joker - but sound chips present */
1625 
1626 	ROM_REGION( 0x144, "pals", 0 )
1627 	ROM_LOAD( "b68-04.ic32", 0x00000, 0x144, CRC(9be618d1) SHA1(61ee33c3db448a05ff8f455e77fe17d51106baec) )
1628 	ROM_LOAD( "b68-05.ic43", 0x00000, 0x104, CRC(d6524ccc) SHA1(f3b56253692aebb63278d47832fc27b8b212b59c) )
1629 ROM_END
1630 
1631 ROM_START( earthjkra )
1632 	ROM_REGION( 0x100000, "maincpu", 0 )     /* 1024k for 68000 code */
1633 	/* Blank ROM labels, might be for the Korean market, although region handling is unchanged. Very close to parent set, but some clearly additional intentional changes that can't be attributed to the bitrot in the parent */
1634 	ROM_LOAD16_BYTE( "ejok_ic23",  0x00000, 0x20000, CRC(cbd29731) SHA1(4cbbdc9352cb203b6b5ec37c1b11c09d827960fc) ) /* ejok_ic23 vs ej_3b.ic23 99.945831% similar (71 changed bytes) */
1635 	ROM_LOAD16_BYTE( "ejok_ic8",   0x00001, 0x20000, CRC(cfd4953c) SHA1(6aa91ebca4444070841c1f8307430bc787656df3) ) /* ejok_ic8  vs ej_3a.ic8  99.945831% similar (71 changed bytes) */
1636 	/* 0x40000 - 0x7ffff is intentionally empty */
1637 	ROM_LOAD16_WORD( "ejok_ic30", 0x80000, 0x80000, CRC(49d1f77f) SHA1(f6c9b2fc88b77cc9baa5be48da5c3eb72310e471) ) /* Fix ROM */
1638 
1639 	ROM_REGION( 0x80000, "tc0100scn", 0 )
1640 	ROM_LOAD16_WORD_SWAP( "ej_chr-0.ic3", 0x00000, 0x80000, CRC(ac675297) SHA1(2a34e1eae3a4be84dbf709053f5e8a781b1073fc) )    /* SCR tiles (8 x 8) - mask ROM */
1641 
1642 	ROM_REGION( 0xa0000, "pc090oj", 0 )
1643 	ROM_LOAD16_WORD_SWAP( "ej_obj-0.ic6", 0x00000, 0x80000, CRC(5f21ac47) SHA1(45c94ffb53ee9b822b0676f6fb151fed4ce6d967) ) /* Sprites (16 x 16) - mask ROM */
1644 	ROM_LOAD16_BYTE     ( "ejok_ic5",     0x80001, 0x10000, CRC(cb4891db) SHA1(af1112608cdd897ef6028ef617f5ca69d7964861) )
1645 	ROM_LOAD16_BYTE     ( "ejok_ic4",     0x80000, 0x10000, CRC(b612086f) SHA1(625748fcb698ec57b7b3ce46019cf85de99aaaa1) )
1646 
1647 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound cpu */
1648 	ROM_LOAD( "ejok_ic28", 0x00000, 0x10000, CRC(42ba2566) SHA1(c437388684b565c7504d6bad6accd73aa000faca) ) /* banked */
1649 
1650 	ROM_REGION( 0x10000, "msm", ROMREGION_ERASEFF )   /* ADPCM samples */
1651 	/* Empty socket on U.N. Defense Force: Earth Joker - but sound chips present */
1652 
1653 	ROM_REGION( 0x144, "pals", 0 )
1654 	ROM_LOAD( "b68-04.ic32", 0x00000, 0x144, CRC(9be618d1) SHA1(61ee33c3db448a05ff8f455e77fe17d51106baec) )
1655 	ROM_LOAD( "b68-05.ic43", 0x00000, 0x104, CRC(d6524ccc) SHA1(f3b56253692aebb63278d47832fc27b8b212b59c) )
1656 ROM_END
1657 
1658 // Known to exist (not dumped) a Japanese version with ROMs 3 & 4 also stamped "A" same as above or different version??
1659 // Also known to exist (not dumped) a US version of Earth Joker, title screen shows "DISTRIBUTED BY ROMSTAR, INC."  ROMs were numbered
1660 // from 0 through 4 and the fix ROM at IC30 is labeled 1 even though IC5 is also labled as 1 similar to the below set:
1661 // (ROMSTAR license is set by a dipswitch, is set mentioned above really undumped?)
1662 
1663 ROM_START( earthjkrp ) // was production PCB complete with mask ROM, could just be an early revision, not proto
1664 	ROM_REGION( 0x100000, "maincpu", 0 )     /* 1024k for 68000 code */
1665 	ROM_LOAD16_BYTE( "3.ic23", 0x00001, 0x20000, CRC(26c33225) SHA1(b039c47d0776c90813ab52c867e95989cab2c567) )
1666 	ROM_LOAD16_BYTE( "4.ic8",  0x00000, 0x20000, CRC(e9b1ef0c) SHA1(5e104146d37922a8c7e93696c2c156223653025b) )
1667 	/* 0x40000 - 0x7ffff is intentionally empty */
1668 	ROM_LOAD16_WORD( "5.ic30", 0x80000, 0x80000, CRC(bf760b2d) SHA1(4aff36623e5a31ab86c77461fa93e40e77f08edd) ) /* Fix ROM */
1669 
1670 	ROM_REGION( 0x80000, "tc0100scn", 0 )
1671 	ROM_LOAD16_WORD_SWAP( "ej_chr-0.ic3", 0x00000, 0x80000, CRC(ac675297) SHA1(2a34e1eae3a4be84dbf709053f5e8a781b1073fc) )    /* SCR tiles (8 x 8) - mask ROM */
1672 
1673 	ROM_REGION( 0xa0000, "pc090oj", 0 )
1674 	ROM_LOAD16_WORD_SWAP( "ej_obj-0.ic6", 0x00000, 0x80000, CRC(5f21ac47) SHA1(45c94ffb53ee9b822b0676f6fb151fed4ce6d967) ) /* Sprites (16 x 16) - mask ROM */
1675 	ROM_LOAD16_BYTE     ( "1.ic5",        0x80001, 0x10000, CRC(cb4891db) SHA1(af1112608cdd897ef6028ef617f5ca69d7964861) )
1676 	ROM_LOAD16_BYTE     ( "0.ic4",        0x80000, 0x10000, CRC(b612086f) SHA1(625748fcb698ec57b7b3ce46019cf85de99aaaa1) )
1677 
1678 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound cpu */
1679 	ROM_LOAD( "2.ic27", 0x00000, 0x10000, CRC(42ba2566) SHA1(c437388684b565c7504d6bad6accd73aa000faca) ) /* banked */
1680 
1681 	ROM_REGION( 0x10000, "msm", ROMREGION_ERASEFF )   /* ADPCM samples */
1682 	/* Empty socket on U.N. Defense Force: Earth Joker - but sound chips present */
1683 
1684 	ROM_REGION( 0x144, "pals", 0 )
1685 	ROM_LOAD( "b68-04.ic32", 0x00000, 0x144, CRC(9be618d1) SHA1(61ee33c3db448a05ff8f455e77fe17d51106baec) )
1686 	ROM_LOAD( "b68-05.ic43", 0x00000, 0x104, CRC(d6524ccc) SHA1(f3b56253692aebb63278d47832fc27b8b212b59c) )
1687 ROM_END
1688 
1689 ROM_START( eto )
1690 	ROM_REGION( 0x100000, "maincpu", 0 )     /* 1024k for 68000 code */
1691 	ROM_LOAD16_BYTE( "eto-1.ic23",  0x00000, 0x20000, CRC(44286597) SHA1(ac37e5edbf9d187f60232adc5e9ebed45b3d2fe2) )
1692 	ROM_LOAD16_BYTE( "eto-0.ic8",   0x00001, 0x20000, CRC(57b79370) SHA1(25f83eada982ef654260fe92016d42a90005a05c) )
1693 	/* 0x40000 - 0x7ffff is intentionally empty */
1694 	ROM_LOAD16_WORD( "eto-2.ic30",    0x80000, 0x80000, CRC(12f46fb5) SHA1(04db8b6ccd0051668bd2930275efa0265c0cfd2b) )    /* Fix ROM */
1695 
1696 	ROM_REGION( 0x80000, "tc0100scn", 0 )
1697 	ROM_LOAD16_WORD_SWAP( "eto-4.ic3", 0x00000, 0x80000, CRC(a8768939) SHA1(a2cbbd3e10ed48ba32a680b2e40ea03900cf33fa) )   /* Sprites (16 x 16) */
1698 
1699 	ROM_REGION( 0x80000, "pc090oj", 0 )
1700 	ROM_LOAD16_WORD_SWAP( "eto-3.ic6", 0x00000, 0x80000, CRC(dd247397) SHA1(53a7bf877fd7e5f3daf295a698f4012447b6f113) )   /* SCR tiles (8 x 8) */
1701 
1702 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound cpu */
1703 	ROM_LOAD( "eto-5.ic27", 0x00000, 0x10000, CRC(b3689da0) SHA1(812d2e0a794403df9f0a5035784f14cd070ea080) ) /* banked */
1704 ROM_END
1705 
1706 void asuka_state::init_cadash()
1707 {
1708 	m_cadash_int5_timer = timer_alloc(TIMER_CADASH_INTERRUPT5);
1709 }
1710 
init_earthjkr()1711 void asuka_state::init_earthjkr()
1712 {
1713 	u16 *rom = (u16 *)memregion("maincpu")->base();
1714 	// 357c -> 317c, I think this is bitrot, see ROM loading for which ROM needs redumping, causes rowscroll to be broken on final stage (writes to ROM area instead)
1715 	// code is correct in the 'prototype?' set
1716 	rom[0x7aaa/2] = 0x317c;
1717 }
1718 
1719 GAME( 1988, bonzeadv,  0,        bonzeadv, bonzeadv, asuka_state, empty_init,    ROT0,   "Taito Corporation Japan",   "Bonze Adventure (World, Newer)", MACHINE_SUPPORTS_SAVE )
1720 GAME( 1988, bonzeadvo, bonzeadv, bonzeadv, bonzeadv, asuka_state, empty_init,    ROT0,   "Taito Corporation Japan",   "Bonze Adventure (World, Older)", MACHINE_SUPPORTS_SAVE )
1721 GAME( 1988, bonzeadvu, bonzeadv, bonzeadv, jigkmgri, asuka_state, empty_init,    ROT0,   "Taito America Corporation", "Bonze Adventure (US)", MACHINE_SUPPORTS_SAVE )
1722 GAME( 1988, jigkmgri,  bonzeadv, bonzeadv, jigkmgri, asuka_state, empty_init,    ROT0,   "Taito Corporation",         "Jigoku Meguri (Japan)", MACHINE_SUPPORTS_SAVE )
1723 GAME( 1988, bonzeadvp, bonzeadv, bonzeadv, jigkmgri, asuka_state, empty_init,    ROT0,   "Taito Corporation Japan",   "Bonze Adventure (World, prototype)", MACHINE_SUPPORTS_SAVE )
1724 
1725 GAME( 1988, asuka,     0,        asuka,    asuka,    asuka_state, empty_init,    ROT270, "Taito Corporation",         "Asuka & Asuka (World)", MACHINE_SUPPORTS_SAVE )
1726 GAME( 1988, asukaj,    asuka,    asuka,    asuka,    asuka_state, empty_init,    ROT270, "Taito Corporation",         "Asuka & Asuka (Japan)", MACHINE_SUPPORTS_SAVE )
1727 
1728 GAME( 1989, mofflott,  0,        mofflott, mofflott, asuka_state, empty_init,    ROT270, "Taito Corporation",         "Maze of Flott (Japan)", MACHINE_SUPPORTS_SAVE )
1729 
1730 GAME( 1989, cadash,    0,        cadash,   cadash,   asuka_state, init_cadash,   ROT0,   "Taito Corporation Japan",   "Cadash (World)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN )
1731 GAME( 1989, cadashj,   cadash,   cadash,   cadashj,  asuka_state, init_cadash,   ROT0,   "Taito Corporation",         "Cadash (Japan, version 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN )
1732 GAME( 1989, cadashj1,  cadash,   cadash,   cadashj,  asuka_state, init_cadash,   ROT0,   "Taito Corporation",         "Cadash (Japan, version 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN )
1733 GAME( 1989, cadashjo,  cadash,   cadash,   cadashj,  asuka_state, init_cadash,   ROT0,   "Taito Corporation",         "Cadash (Japan, oldest version)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN )
1734 GAME( 1989, cadashu,   cadash,   cadash,   cadashu,  asuka_state, init_cadash,   ROT0,   "Taito America Corporation", "Cadash (US, version 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN )
1735 GAME( 1989, cadashi,   cadash,   cadash,   cadash,   asuka_state, init_cadash,   ROT0,   "Taito Corporation Japan",   "Cadash (Italy)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN )
1736 GAME( 1989, cadashf,   cadash,   cadash,   cadash,   asuka_state, init_cadash,   ROT0,   "Taito Corporation Japan",   "Cadash (France)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN )
1737 GAME( 1989, cadashg,   cadash,   cadash,   cadash,   asuka_state, init_cadash,   ROT0,   "Taito Corporation Japan",   "Cadash (Germany, version 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN )
1738 GAME( 1989, cadashp,   cadash,   cadash,   cadashj,  asuka_state, init_cadash,   ROT0,   "Taito Corporation Japan",   "Cadash (World, prototype)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN)
1739 GAME( 1989, cadashs,   cadash,   cadash,   cadash,   asuka_state, init_cadash,   ROT0,   "Taito Corporation Japan",   "Cadash (Spain, version 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN )
1740 
1741 GAME( 1992, galmedes,  0,        asuka,    galmedes, asuka_state, empty_init,    ROT270, "Visco",                     "Galmedes (Japan)", MACHINE_SUPPORTS_SAVE )
1742 
1743 GAME( 1993, earthjkr,  0,        asuka,    earthjkr, asuka_state, init_earthjkr, ROT270, "Visco",                     "U.N. Defense Force: Earth Joker (US / Japan, set 1)", MACHINE_SUPPORTS_SAVE ) // sets 1 + 2 have ROMSTAR (US?) license and no region disclaimer if you change the dipswitch
1744 GAME( 1993, earthjkra, earthjkr, asuka,    earthjkr, asuka_state, empty_init,    ROT270, "Visco",                     "U.N. Defense Force: Earth Joker (US / Japan, set 2)", MACHINE_SUPPORTS_SAVE )
1745 GAME( 1993, earthjkrp, earthjkr, asuka,    earthjkrp,asuka_state, empty_init,    ROT270, "Visco",                     "U.N. Defense Force: Earth Joker (Japan, prototype?)", MACHINE_SUPPORTS_SAVE )
1746 
1747 GAME( 1994, eto,       0,        eto,      eto,      asuka_state, empty_init,    ROT0,   "Visco",                     "Kokontouzai Eto Monogatari (Japan)", MACHINE_SUPPORTS_SAVE )
1748