1 // license:BSD-3-Clause
2 // copyright-holders:Nicola Salmoria,Vas Crabb
3 /***************************************************************************
4 
5 Dooyong games
6 
7 driver by Nicola Salmoria
8 
9 The Last Day   Z80     Z80 2xYM2203
10 Gulf Storm     Z80     Z80 2xYM2203
11 Pollux         Z80     Z80 2xYM2203
12 Blue Hawk      Z80     Z80 YM2151 OKI6295
13 Sadari         Z80     Z80 YM2151 OKI6295
14 Flying Tiger   Z80     Z80 YM2151 OKI6295
15 Gun Dealer '94 Z80     Z80 YM2151 OKI6295
16 Super-X        68000   Z80 YM2151 OKI6295
17 R-Shark        68000   Z80 YM2151 OKI6295
18 Pop Bingo      68000   Z80 YM2151 OKI6295
19 
20 These games all run on different but similar hardware. A common thing that they
21 all have is tilemaps hardcoded in ROM.
22 
23 TODO:
24 - port A of both of the YM2203 is constantly read and stored in memory -
25   function unknown
26 - bluehawk and flytiger main programs often write to the program ROM
27   area in the range 0x0000-0x001f.  They always write the same sequence
28   of values.  Is there a peripheral mapped here, or is it just the same
29   bug in two games?
30 - rshark main program regularly writes 0x0000 to 0x0C0018 and 0x0C001A -
31   is this a watchdog or some other peripheral, or just a bug?
32 - superx main program regularly writes 0x0000 to 0x080018 and 0x08001A -
33   is this a watchdog or some other peripheral, or just a bug (presumably
34   it's the same thing rshark has, but at a different address)?
35 - bluehawk flytiger, superx, rshark and popbingo sound programs write
36   regularly to the ROM area - 0x00 is written to 0x0003 and 0xF7 is
37   written to 0x0004 - is this just a bug, or is there something
38   connected there?  Possibly a watchdog?
39 Primella:
40 - does the game really support cocktail mode as service mode suggests?
41 - are buttons 2 and 3 used as service mode suggests?
42 Pop Bingo
43 - some unknown reads / writes
44 
45 18.02.2011. Tomasz Slanina
46 --------------------------
47 Few notes about the 2xYM2203 games:
48 
49 Interrupts are generated by both YM chips. Sound CPU checks interrupt source
50 (tests timer flag in 1st YM) and restarts appropriate timer
51 (and clears int line) then process sfx or music data.
52 
53 Due to bad timing/incorrect int line handling  - interrupt is skipped if
54 fires when another one is being processed and int line is still asserted
55 (and not cleared). This situation results in missing or incomplete audio,
56 because one of interrupt sources is _dead_ (timer never restarts).
57 
58 Music tempo and audio pitch depends on (unknown) YM clocks.
59 Sound cpu runs currently at 8 MHz to avoid jerky music when there's (too)
60 many SFX scheduled.
61 
62 Reference video:
63 - pollux : https://www.youtube.com/watch?v=SuUvX9U9dxo
64 
65 Currently there's some workaround implemented - both YM lines are OR-ed to
66 allow nested (and in fact - delayed) interrupts. It's temporary solution
67 until we find real PCB and verify clocks and trace int lines.
68 
69 Pollux:
70 Many (all? at least pollux, primella and flying tiger) use some kind of
71 banked palette RAM. Bit 1 at address 0xf008 controls banking (both palettes
72 are almost identical, except for much darker BG layer colors).
73 
74 
75 ***************************************************************************/
76 
77 #include "emu.h"
78 #include "video/dooyong.h"
79 
80 #include "cpu/m68000/m68000.h"
81 #include "cpu/z80/z80.h"
82 #include "machine/gen_latch.h"
83 #include "machine/input_merger.h"
84 #include "machine/timer.h"
85 #include "sound/2203intf.h"
86 #include "sound/okim6295.h"
87 #include "sound/ym2151.h"
88 
89 #include "emupal.h"
90 #include "screen.h"
91 #include "speaker.h"
92 
93 
94 namespace {
95 
96 class dooyong_state : public driver_device
97 {
98 protected:
dooyong_state(const machine_config & mconfig,device_type type,const char * tag)99 	dooyong_state(const machine_config &mconfig, device_type type, const char *tag)
100 		: driver_device(mconfig, type, tag)
101 		, m_maincpu(*this, "maincpu")
102 		, m_audiocpu(*this, "audiocpu")
103 		, m_gfxdecode(*this, "gfxdecode")
104 		, m_palette(*this, "palette")
105 		, m_bg(*this, "bg%u", 1U)
106 		, m_fg(*this, "fg%u", 1U)
107 	{
108 	}
109 
110 	void sound_2151_4mhz(machine_config &config);
111 	void bluehawk_sound_map(address_map &map);
112 
113 	required_device<cpu_device> m_maincpu;
114 	required_device<cpu_device> m_audiocpu;
115 	required_device<gfxdecode_device> m_gfxdecode;
116 	required_device<palette_device> m_palette;
117 	optional_device_array<dooyong_rom_tilemap_device, 2> m_bg;
118 	optional_device_array<dooyong_rom_tilemap_device, 2> m_fg;
119 };
120 
121 class dooyong_z80_state : public dooyong_state
122 {
123 public:
dooyong_z80_state(const machine_config & mconfig,device_type type,const char * tag)124 	dooyong_z80_state(const machine_config &mconfig, device_type type, const char *tag)
125 		: dooyong_state(mconfig, type, tag)
126 		, m_tx(*this, "tx")
127 		, m_spriteram(*this, "spriteram")
128 		, m_mainbank(*this, "mainbank")
129 	{
130 	}
131 
132 	void bluehawk(machine_config &config);
133 	void flytiger(machine_config &config);
134 	void primella(machine_config &config);
135 
136 protected:
137 	enum
138 	{
139 		SPRITE_12BIT = 0x01,
140 		SPRITE_HEIGHT = 0x02,
141 		SPRITE_YSHIFT_BLUEHAWK = 0x04,
142 		SPRITE_YSHIFT_FLYTIGER = 0x08
143 	};
144 
flip_screen_w(u8 data)145 	void flip_screen_w(u8 data)
146 	{
147 		flip_screen_set(data);
148 	}
149 
bankswitch_w(u8 data)150 	void bankswitch_w(u8 data)
151 	{
152 		m_mainbank->set_entry(data & 0x07);
153 		if (data & 0xf8) popmessage("bankswitch %02x",data);
154 	}
155 
lastday_tx_r(offs_t offset)156 	u8 lastday_tx_r(offs_t offset)
157 	{
158 		const bool lane(BIT(offset, 11));
159 		return m_tx->tileram_r(offset & 0x07ffU) >> (lane ? 8 : 0);
160 	}
161 
lastday_tx_w(offs_t offset,u8 data)162 	void lastday_tx_w(offs_t offset, u8 data)
163 	{
164 		const bool lane(BIT(offset, 11));
165 		m_tx->tileram_w(offset & 0x07ffU, u16(data) << (lane ? 8 : 0), lane ? 0xff00U : 0x00ffU);
166 	}
167 
bluehawk_tx_r(offs_t offset)168 	u8 bluehawk_tx_r(offs_t offset)
169 	{
170 		const bool lane(BIT(offset, 0));
171 		return m_tx->tileram_r(offset >> 1) >> (lane ? 8 : 0);
172 	}
173 
bluehawk_tx_w(offs_t offset,u8 data)174 	void bluehawk_tx_w(offs_t offset, u8 data)
175 	{
176 		const bool lane(BIT(offset, 0));
177 		m_tx->tileram_w(offset >> 1, u16(data) << (lane ? 8 : 0), lane ? 0xff00U : 0x00ffU);
178 	}
179 
paletteram_flytiger_r(offs_t offset)180 	u8 paletteram_flytiger_r(offs_t offset)
181 	{
182 		if (m_palette_bank) offset |= 0x800;
183 		return m_paletteram_flytiger[offset];
184 	}
185 
paletteram_flytiger_w(offs_t offset,u8 data)186 	void paletteram_flytiger_w(offs_t offset, u8 data)
187 	{
188 		if (m_palette_bank) offset |= 0x800;
189 		m_paletteram_flytiger[offset] = data;
190 		const u16 value = m_paletteram_flytiger[offset & ~1] | (m_paletteram_flytiger[offset | 1] << 8);
191 		m_palette->set_pen_color(offset/2, pal5bit(value >> 10), pal5bit(value >> 5), pal5bit(value >> 0));
192 	}
193 
194 	void primella_ctrl_w(u8 data);
195 	void flytiger_ctrl_w(u8 data);
196 
197 	u32 screen_update_bluehawk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
198 	u32 screen_update_flytiger(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
199 	u32 screen_update_primella(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
200 
DECLARE_MACHINE_START(cpu_z80)201 	DECLARE_MACHINE_START(cpu_z80)
202 	{
203 		m_mainbank->configure_entries(0, 8, memregion("maincpu")->base(), 0x4000);
204 	}
205 
DECLARE_VIDEO_START(bluehawk)206 	DECLARE_VIDEO_START(bluehawk)
207 	{
208 	}
209 
DECLARE_VIDEO_START(flytiger)210 	DECLARE_VIDEO_START(flytiger)
211 	{
212 		m_paletteram_flytiger = make_unique_clear<u8[]>(0x1000);
213 		save_pointer(NAME(m_paletteram_flytiger), 0x1000);
214 
215 		m_palette_bank = 0;
216 
217 		/* Register for save/restore */
218 		save_item(NAME(m_palette_bank));
219 		save_item(NAME(m_flytiger_pri));
220 	}
221 
DECLARE_VIDEO_START(primella)222 	DECLARE_VIDEO_START(primella)
223 	{
224 		/* Register for save/restore */
225 		save_item(NAME(m_tx_pri));
226 	}
227 
bluehawk_tile_callback(u16 attr,u32 & code,u32 & color)228 	void bluehawk_tile_callback(u16 attr, u32 &code, u32 &color)
229 	{
230 		code = attr & 0x3ff;
231 		color = (attr & 0x3c00) >> 10;
232 	}
233 
234 	void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, unsigned extensions = 0);
235 
236 	void sound_2151(machine_config &config);
237 	void bluehawk_map(address_map &map);
238 	void flytiger_map(address_map &map);
239 	void primella_map(address_map &map);
240 
241 	std::unique_ptr<u8[]> m_paletteram_flytiger;
242 	u8 m_sprites_disabled = 0;
243 	u8 m_flytiger_pri = 0;
244 	u8 m_tx_pri = 0;
245 	u8 m_palette_bank = 0;
246 
247 	required_device<dooyong_ram_tilemap_device> m_tx;
248 	optional_device<buffered_spriteram8_device> m_spriteram;
249 
250 	required_memory_bank m_mainbank;
251 };
252 
253 class dooyong_z80_ym2203_state : public dooyong_z80_state
254 {
255 public:
dooyong_z80_ym2203_state(const machine_config & mconfig,device_type type,const char * tag)256 	dooyong_z80_ym2203_state(const machine_config &mconfig, device_type type, const char *tag)
257 		: dooyong_z80_state(mconfig, type, tag)
258 	{
259 	}
260 
261 	void lastday(machine_config &config);
262 	void gulfstrm(machine_config &config);
263 	void pollux(machine_config &config);
264 
265 protected:
266 	void lastday_ctrl_w(u8 data);
267 	void pollux_ctrl_w(u8 data);
268 	u8 unk_r();
269 
270 	u32 screen_update_lastday(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
271 	u32 screen_update_gulfstrm(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
272 	u32 screen_update_pollux(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
273 
DECLARE_VIDEO_START(lastday)274 	DECLARE_VIDEO_START(lastday)
275 	{
276 		/* Register for save/restore */
277 		save_item(NAME(m_sprites_disabled));
278 	}
279 
DECLARE_VIDEO_START(gulfstrm)280 	DECLARE_VIDEO_START(gulfstrm)
281 	{
282 		m_palette_bank = 0;
283 
284 		/* Register for save/restore */
285 		save_item(NAME(m_palette_bank));
286 	}
287 
DECLARE_VIDEO_START(pollux)288 	DECLARE_VIDEO_START(pollux)
289 	{
290 		m_paletteram_flytiger = make_unique_clear<u8[]>(0x1000);
291 		save_pointer(NAME(m_paletteram_flytiger), 0x1000);
292 
293 		m_palette_bank = 0;
294 
295 		/* Register for save/restore */
296 		save_item(NAME(m_palette_bank));
297 	}
298 
299 	void sound_2203(machine_config &config);
300 
301 	void lastday_map(address_map &map);
302 	void gulfstrm_map(address_map &map);
303 	void pollux_map(address_map &map);
304 
305 	void lastday_sound_map(address_map &map);
306 	void pollux_sound_map(address_map &map);
307 };
308 
309 
310 class dooyong_68k_state : public dooyong_state
311 {
312 protected:
dooyong_68k_state(const machine_config & mconfig,device_type type,const char * tag)313 	dooyong_68k_state(const machine_config &mconfig, device_type type, const char *tag)
314 		: dooyong_state(mconfig, type, tag)
315 		, m_spriteram(*this, "spriteram")
316 	{
317 	}
318 
ctrl_w(u8 data)319 	void ctrl_w(u8 data)
320 	{
321 		/* bit 0 flips screen */
322 		flip_screen_set(data & 0x01);
323 
324 		/* bit 4 changes tilemaps priority */
325 		m_bg2_priority = data & 0x10;
326 
327 		/* bit 5 used but unknown */
328 	}
329 
330 	TIMER_DEVICE_CALLBACK_MEMBER(scanline);
331 
332 	void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
333 
334 	u16 m_bg2_priority = 0;
335 	required_device<buffered_spriteram16_device> m_spriteram;
336 };
337 
338 
339 class rshark_state : public dooyong_68k_state
340 {
341 public:
rshark_state(const machine_config & mconfig,device_type type,const char * tag)342 	rshark_state(const machine_config &mconfig, device_type type, const char *tag)
343 		: dooyong_68k_state(mconfig, type, tag)
344 	{
345 	}
346 
347 	void rshark(machine_config &config);
348 	void superx(machine_config &config);
349 
350 protected:
351 	u32 screen_update_rshark(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
352 
video_start()353 	virtual void video_start() override
354 	{
355 		/* Register for save/restore */
356 		save_item(NAME(m_bg2_priority));
357 	}
358 
rshark_tile_callback(u16 attr,u32 & code,u32 & color)359 	void rshark_tile_callback(u16 attr, u32 &code, u32 &color)
360 	{
361 		code = attr & 0x1fff; // uses more code bits; because rshark and superx are uses 16x16 tiles for tilemap instead 32x32 tiles
362 		color = 0; // use external ROM
363 	}
364 
365 	void dooyong_68k(machine_config &config);
366 
367 	void rshark_map(address_map &map);
368 	void superx_map(address_map &map);
369 };
370 
371 
372 class popbingo_state : public dooyong_68k_state
373 {
374 public:
popbingo_state(const machine_config & mconfig,device_type type,const char * tag)375 	popbingo_state(const machine_config &mconfig, device_type type, const char *tag)
376 		: dooyong_68k_state(mconfig, type, tag)
377 		, m_screen(*this, "screen")
378 	{
379 	}
380 
381 	void popbingo(machine_config &config);
382 
383 protected:
384 	u32 screen_update_popbingo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
385 
video_start()386 	virtual void video_start() override
387 	{
388 		m_screen->register_screen_bitmap(m_bg_bitmap[0]);
389 		m_screen->register_screen_bitmap(m_bg_bitmap[1]);
390 
391 		/* Register for save/restore */
392 		save_item(NAME(m_bg2_priority)); // Not used atm
393 	}
394 
popbingo_tile_callback(u16 attr,u32 & code,u32 & color)395 	void popbingo_tile_callback(u16 attr, u32 &code, u32 &color)
396 	{
397 		code = attr & 0x7ff;
398 		color = 0;
399 	}
400 
401 	void popbingo_map(address_map &map);
402 
403 private:
404 	bitmap_ind16 m_bg_bitmap[2];
405 
406 	required_device<screen_device> m_screen;
407 };
408 
409 
410 /* Control registers seem to be different on every game */
411 
lastday_ctrl_w(u8 data)412 void dooyong_z80_ym2203_state::lastday_ctrl_w(u8 data)
413 {
414 	/* bits 0 and 1 are coin counters */
415 	machine().bookkeeping().coin_counter_w(0, data & 0x01);
416 	machine().bookkeeping().coin_counter_w(1, data & 0x02);
417 
418 	/* bit 3 is used but unknown */
419 
420 	/* bit 4 disables sprites */
421 	m_sprites_disabled = data & 0x10;
422 
423 	/* bit 6 is flip screen */
424 	flip_screen_set(data & 0x40);
425 }
426 
pollux_ctrl_w(u8 data)427 void dooyong_z80_ym2203_state::pollux_ctrl_w(u8 data)
428 {
429 //  printf("pollux_ctrl_w %02x\n", data);
430 
431 	/* bit 0 is flip screen */
432 	flip_screen_set(data & 0x01);
433 
434 	/* bits 6 and 7 are coin counters */
435 	machine().bookkeeping().coin_counter_w(0, data & 0x80);
436 	machine().bookkeeping().coin_counter_w(1, data & 0x40);
437 
438 	/* bit 1 is used but unknown - palette banking (both write and display based on pollux bombs) */
439 	const u8 last_palbank = m_palette_bank;
440 	if (m_paletteram_flytiger) m_palette_bank = BIT(data, 1);
441 	if (last_palbank != m_palette_bank)
442 	{
443 		m_bg[0]->set_palette_bank(m_palette_bank << 6);
444 		m_fg[0]->set_palette_bank(m_palette_bank << 6);
445 		m_tx->set_palette_bank(m_palette_bank << 6);
446 	}
447 
448 	/* bit 2 is continuously toggled (unknown) */
449 
450 	/* bit 4 is used but unknown - display disable? */
451 }
452 
453 
primella_ctrl_w(u8 data)454 void dooyong_z80_state::primella_ctrl_w(u8 data)
455 {
456 	/* bits 0-2 select ROM bank */
457 	m_mainbank->set_entry(data & 0x07);
458 
459 	/* bit 3 disables tx layer */
460 	m_tx_pri = data & 0x08;
461 
462 	/* bit 4 flips screen */
463 	flip_screen_set(data & 0x10);
464 
465 	/* bit 5 used but unknown */
466 
467 //  logerror("%04x: bankswitch = %02x\n",m_maincpu->pc(),data&0xe0);
468 }
469 
470 
flytiger_ctrl_w(u8 data)471 void dooyong_z80_state::flytiger_ctrl_w(u8 data)
472 {
473 	/* bit 0 is flip screen */
474 	flip_screen_set(data & 0x01);
475 
476 	/* bits 1, 2 used but unknown */
477 
478 	/* bit 3 palette banking  */
479 	const u8 last_palbank = m_palette_bank;
480 	m_palette_bank = BIT(data, 3);
481 	if (last_palbank != m_palette_bank)
482 	{
483 		m_bg[0]->set_palette_bank(m_palette_bank << 6);
484 		m_fg[0]->set_palette_bank(m_palette_bank << 6);
485 		m_tx->set_palette_bank(m_palette_bank << 6);
486 	}
487 
488 	/* bit 4 changes tilemaps priority */
489 	m_flytiger_pri = data & 0x10;
490 }
491 
492 
draw_sprites(screen_device & screen,bitmap_ind16 & bitmap,const rectangle & cliprect,unsigned extensions)493 void dooyong_z80_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, unsigned extensions)
494 {
495 	/* Sprites take 32 bytes each in memory:
496 	                 MSB   LSB
497 	   [offs + 0x00] cccc cccc    (bits 7-0 of gfx code)
498 	   [offs + 0x01] cccx CCCC    (bits 10-8 of gfx code, bit 8 of x position, bits 3-0 of color code)
499 	   [offs + 0x02] yyyy yyyy
500 	   [offs + 0x03] xxxx xxxx    (bits 7-0 of x offset)
501 	   ...
502 	   [offs + 0x1c] ?hhh XY*c    (bits 2-0 of height, x flip, y flip, * see note, bit 11 of gfx code)
503 	   ...
504 	   ? = unused/unknown
505 	   E = enable
506 	   c = gfx code
507 	   x = x position
508 	   y = y position
509 	   C = color code
510 	   w = width
511 	   X = x flip
512 	   Y = y flip
513 	   * = alters y position in bluehawk and flytiger - see code below
514 	   bit 11 of gfx code only used by gulfstrm, pollux, bluehawk and flytiger
515 	   height only used by pollux, bluehawk and flytiger
516 	   x flip and y flip only used by pollux and flytiger */
517 
518 	const u8 *const buffered_spriteram = m_spriteram->buffer();
519 	for (int offs = 0; offs < m_spriteram->bytes(); offs += 32)
520 	{
521 		int sx = buffered_spriteram[offs+3] | ((buffered_spriteram[offs+1] & 0x10) << 4);
522 		int sy = buffered_spriteram[offs+2];
523 		int code = buffered_spriteram[offs] | ((buffered_spriteram[offs+1] & 0xe0) << 3);
524 		int color = buffered_spriteram[offs+1] & 0x0f;
525 
526 		//TODO: This priority mechanism works for known games, but seems a bit strange.
527 		//Are we missing something?  (The obvious spare palette bit isn't it.)
528 		const int pri = (((color == 0x00) || (color == 0x0f)) ? 0xfc : 0xf0);
529 
530 		bool flipx = false, flipy = false;
531 		int height = 0;
532 		if (extensions)
533 		{
534 			const u8 ext = buffered_spriteram[offs+0x1c];
535 
536 			if (extensions & SPRITE_12BIT)
537 				code |= ((ext & 0x01) << 11);
538 
539 			if (extensions & SPRITE_HEIGHT)
540 			{
541 				height = (ext & 0x70) >> 4;
542 				code &= ~height;
543 
544 				flipx = ext & 0x08;
545 				flipy = ext & 0x04;
546 			}
547 
548 			if (extensions & SPRITE_YSHIFT_BLUEHAWK)
549 				sy += 6 - ((~ext & 0x02) << 7);
550 
551 			if (extensions & SPRITE_YSHIFT_FLYTIGER)
552 				sy -=(ext & 0x02) << 7;
553 		}
554 
555 		if (flip_screen())
556 		{
557 			sx = 498 - sx;
558 			sy = 240 - (16 * height) - sy;
559 			flipx = !flipx;
560 			flipy = !flipy;
561 		}
562 
563 		color |= m_palette_bank << 6;
564 
565 		for (int y = 0; y <= height; y++)
566 		{
567 			m_gfxdecode->gfx(1)->prio_transpen(bitmap,cliprect,
568 					code + y,
569 					color,
570 					flipx, flipy,
571 					sx, sy + (16 * (flipy ? (height - y) : y)),
572 					screen.priority(),
573 					pri, 15);
574 		}
575 	}
576 }
577 
578 
screen_update_lastday(screen_device & screen,bitmap_ind16 & bitmap,const rectangle & cliprect)579 u32 dooyong_z80_ym2203_state::screen_update_lastday(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
580 {
581 	bitmap.fill(m_palette->black_pen(), cliprect);
582 	screen.priority().fill(0, cliprect);
583 
584 	/* Text layer is offset on this machine */
585 	m_tx->set_scrolly(flip_screen() ? -8 : 8);
586 
587 	m_bg[0]->draw(screen, bitmap, cliprect, 0, 1);
588 	m_fg[0]->draw(screen, bitmap, cliprect, 0, 2);
589 	m_tx->draw(screen, bitmap, cliprect, 0, 4);
590 
591 	if (!m_sprites_disabled)
592 		draw_sprites(screen, bitmap, cliprect);
593 
594 	return 0;
595 }
596 
screen_update_gulfstrm(screen_device & screen,bitmap_ind16 & bitmap,const rectangle & cliprect)597 u32 dooyong_z80_ym2203_state::screen_update_gulfstrm(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
598 {
599 	bitmap.fill(m_palette->black_pen(), cliprect);
600 	screen.priority().fill(0, cliprect);
601 
602 	/* Text layer is offset on this machine */
603 	m_tx->set_scrolly(flip_screen() ? -8 : 8);
604 
605 	m_bg[0]->draw(screen, bitmap, cliprect, 0, 1);
606 	m_fg[0]->draw(screen, bitmap, cliprect, 0, 2);
607 	m_tx->draw(screen, bitmap, cliprect, 0, 4);
608 
609 	draw_sprites(screen, bitmap, cliprect, SPRITE_12BIT);
610 
611 	return 0;
612 }
613 
screen_update_pollux(screen_device & screen,bitmap_ind16 & bitmap,const rectangle & cliprect)614 u32 dooyong_z80_ym2203_state::screen_update_pollux(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
615 {
616 	bitmap.fill(m_palette->black_pen(), cliprect);
617 	screen.priority().fill(0, cliprect);
618 
619 	m_bg[0]->draw(screen, bitmap, cliprect, 0, 1);
620 	m_fg[0]->draw(screen, bitmap, cliprect, 0, 2);
621 	m_tx->draw(screen, bitmap, cliprect, 0, 4);
622 
623 	draw_sprites(screen, bitmap, cliprect, SPRITE_12BIT | SPRITE_HEIGHT);
624 
625 	return 0;
626 }
627 
screen_update_flytiger(screen_device & screen,bitmap_ind16 & bitmap,const rectangle & cliprect)628 u32 dooyong_z80_state::screen_update_flytiger(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
629 {
630 	bitmap.fill(m_palette->black_pen(), cliprect);
631 	screen.priority().fill(0, cliprect);
632 
633 	if (m_flytiger_pri)
634 	{
635 		m_fg[0]->draw(screen, bitmap, cliprect, 0, 1);
636 		m_bg[0]->draw(screen, bitmap, cliprect, 0, 2);
637 	}
638 	else
639 	{
640 		m_bg[0]->draw(screen, bitmap, cliprect, 0, 1);
641 		m_fg[0]->draw(screen, bitmap, cliprect, 0, 2);
642 	}
643 	m_tx->draw(screen, bitmap, cliprect, 0, 4);
644 
645 	draw_sprites(screen, bitmap, cliprect, SPRITE_12BIT | SPRITE_HEIGHT | SPRITE_YSHIFT_FLYTIGER);
646 
647 	return 0;
648 }
649 
650 
screen_update_bluehawk(screen_device & screen,bitmap_ind16 & bitmap,const rectangle & cliprect)651 u32 dooyong_z80_state::screen_update_bluehawk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
652 {
653 	bitmap.fill(m_palette->black_pen(), cliprect);
654 	screen.priority().fill(0, cliprect);
655 
656 	m_bg[0]->draw(screen, bitmap, cliprect, 0, 1);
657 	m_fg[0]->draw(screen, bitmap, cliprect, 0, 2);
658 	m_fg[1]->draw(screen, bitmap, cliprect, 0, 4);
659 	m_tx->draw(screen, bitmap, cliprect, 0, 4);
660 
661 	draw_sprites(screen, bitmap, cliprect, SPRITE_12BIT | SPRITE_HEIGHT | SPRITE_YSHIFT_BLUEHAWK);
662 
663 	return 0;
664 }
665 
screen_update_primella(screen_device & screen,bitmap_ind16 & bitmap,const rectangle & cliprect)666 u32 dooyong_z80_state::screen_update_primella(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
667 {
668 	bitmap.fill(m_palette->black_pen(), cliprect);
669 
670 	m_bg[0]->draw(screen, bitmap, cliprect, 0, 0);
671 	if (m_tx_pri) m_tx->draw(screen, bitmap, cliprect, 0, 0);
672 	m_fg[0]->draw(screen, bitmap, cliprect, 0, 0);
673 	if (!m_tx_pri) m_tx->draw(screen, bitmap, cliprect, 0, 0);
674 
675 	return 0;
676 }
677 
678 
draw_sprites(screen_device & screen,bitmap_ind16 & bitmap,const rectangle & cliprect)679 void dooyong_68k_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
680 {
681 	/* Sprites take 8 16-bit words each in memory:
682 	              MSB             LSB
683 	   [offs + 0] ???? ???? ???? ???E
684 	   [offs + 1] ???? ???? hhhh wwww
685 	   [offs + 2] ???? ???? ???? ????
686 	   [offs + 3] cccc cccc cccc cccc
687 	   [offs + 4] ???? ???x xxxx xxxx
688 	   [offs + 5] ???? ???? ???? ????
689 	   [offs + 6] ???? ???y yyyy yyyy
690 	   [offs + 7] ???? ???? ???? CCCC
691 	   ? = unused/unknown
692 	   E = enable
693 	   c = gfx code
694 	   x = x offset
695 	   y = y offset (signed)
696 	   C = color code
697 	   w = width
698 	   h = height */
699 
700 	const u16 *const buffered_spriteram = m_spriteram->buffer();
701 	for (int offs = (m_spriteram->bytes() / 2) - 8; offs >= 0; offs -= 8)
702 	{
703 		if (buffered_spriteram[offs] & 0x0001)    /* enable */
704 		{
705 			int code = buffered_spriteram[offs+3];
706 			const int color = buffered_spriteram[offs+7] & 0x000f;
707 			//TODO: This priority mechanism works for known games, but seems a bit strange.
708 			//Are we missing something?  (The obvious spare palette bit isn't it.)
709 			const int pri = GFX_PMASK_4 | (((color == 0x00) || (color == 0x0f)) ? GFX_PMASK_2 : 0);
710 			const int width = buffered_spriteram[offs+1] & 0x000f;
711 			const int height = (buffered_spriteram[offs+1] & 0x00f0) >> 4;
712 
713 			const bool flip = flip_screen();
714 			int sx = buffered_spriteram[offs+4] & 0x01ff;
715 			int sy = (s16)buffered_spriteram[offs+6] & 0x01ff;
716 			if (sy & 0x0100) sy |= ~(int)0x01ff;    // Correctly sign-extend 9-bit number
717 			if (flip)
718 			{
719 				sx = 498 - (16 * width) - sx;
720 				sy = 240 - (16 * height) - sy;
721 			}
722 
723 			for (int y = 0; y <= height; y++)
724 			{
725 				const int _y = sy + (16 * (flip ? (height - y) : y));
726 				for (int x = 0; x <= width; x++)
727 				{
728 					const int _x = sx + (16 * (flip ? (width - x) : x));
729 					m_gfxdecode->gfx(0)->prio_transpen(bitmap,cliprect,
730 							code,
731 							color,
732 							flip, flip,
733 							_x, _y,
734 							screen.priority(),
735 							pri, 15);
736 					code++;
737 				}
738 			}
739 		}
740 	}
741 }
742 
743 
screen_update_rshark(screen_device & screen,bitmap_ind16 & bitmap,const rectangle & cliprect)744 u32 rshark_state::screen_update_rshark(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
745 {
746 	bitmap.fill(m_palette->black_pen(), cliprect);
747 	screen.priority().fill(0, cliprect);
748 
749 	m_bg[0]->draw(screen, bitmap, cliprect, 0, 1);
750 	m_bg[1]->draw(screen, bitmap, cliprect, 0, (m_bg2_priority ? 2 : 1));
751 	m_fg[0]->draw(screen, bitmap, cliprect, 0, 2);
752 	m_fg[1]->draw(screen, bitmap, cliprect, 0, 2);
753 
754 	draw_sprites(screen, bitmap, cliprect);
755 
756 	return 0;
757 }
758 
759 
screen_update_popbingo(screen_device & screen,bitmap_ind16 & bitmap,const rectangle & cliprect)760 u32 popbingo_state::screen_update_popbingo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
761 {
762 	bitmap.fill(m_palette->black_pen(), cliprect);
763 	screen.priority().fill(0, cliprect);
764 
765 	m_bg_bitmap[0].fill(m_palette->black_pen(), cliprect);
766 	m_bg[0]->draw(screen, m_bg_bitmap[0], cliprect, 0, 1);
767 
768 	m_bg_bitmap[1].fill(m_palette->black_pen(), cliprect);
769 	m_bg[1]->draw(screen, m_bg_bitmap[1], cliprect, 0, 1);
770 
771 	for (int y = cliprect.top(); cliprect.bottom() >= y; y++)
772 	{
773 		const u16 *const bg_src(&m_bg_bitmap[0].pix(y, 0));
774 		const u16 *const bg2_src(&m_bg_bitmap[1].pix(y, 0));
775 		u16 *const dst(&bitmap.pix(y, 0));
776 		for (int x = cliprect.left(); cliprect.right() >= x; x++)
777 			dst[x] = 0x100U | (bg_src[x] << 4) | bg2_src[x];
778 	}
779 
780 	draw_sprites(screen, bitmap, cliprect);
781 
782 	return 0;
783 }
784 
785 
786 /***************************************************************************
787 
788     Memory Structure(s)
789 
790 ***************************************************************************/
791 
lastday_map(address_map & map)792 void dooyong_z80_ym2203_state::lastday_map(address_map &map)
793 {
794 	map(0x0000, 0x7fff).rom();
795 	map(0x8000, 0xbfff).bankr(m_mainbank);
796 	map(0xc000, 0xc007).w(m_bg[0], FUNC(dooyong_rom_tilemap_device::ctrl_w));
797 	map(0xc008, 0xc00f).w(m_fg[0], FUNC(dooyong_rom_tilemap_device::ctrl_w));
798 	map(0xc010, 0xc010).portr("SYSTEM");
799 	map(0xc010, 0xc010).w(FUNC(dooyong_z80_ym2203_state::lastday_ctrl_w));   /* coin counter, flip screen */
800 	map(0xc011, 0xc011).portr("P1");
801 	map(0xc011, 0xc011).w(FUNC(dooyong_z80_ym2203_state::bankswitch_w));
802 	map(0xc012, 0xc012).portr("P2");
803 	map(0xc012, 0xc012).w("soundlatch", FUNC(generic_latch_8_device::write));
804 	map(0xc013, 0xc013).portr("DSWA");
805 	map(0xc014, 0xc014).portr("DSWB");
806 	map(0xc800, 0xcfff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette");
807 	map(0xd000, 0xdfff).rw(FUNC(dooyong_z80_ym2203_state::lastday_tx_r), FUNC(dooyong_z80_ym2203_state::lastday_tx_w));
808 	map(0xe000, 0xefff).ram();
809 	map(0xf000, 0xffff).ram().share("spriteram");
810 }
811 
pollux_map(address_map & map)812 void dooyong_z80_ym2203_state::pollux_map(address_map &map)
813 {
814 	map(0x0000, 0x7fff).rom();
815 	map(0x8000, 0xbfff).bankr(m_mainbank);
816 	map(0xc000, 0xcfff).ram();
817 	map(0xd000, 0xdfff).ram().share("spriteram");
818 	map(0xe000, 0xefff).rw(FUNC(dooyong_z80_ym2203_state::lastday_tx_r), FUNC(dooyong_z80_ym2203_state::lastday_tx_w));
819 	map(0xf000, 0xf000).portr("DSWA").w(FUNC(dooyong_z80_ym2203_state::bankswitch_w));
820 	map(0xf001, 0xf001).portr("DSWB");
821 	map(0xf002, 0xf002).portr("P1");
822 	map(0xf003, 0xf003).portr("P2");
823 	map(0xf004, 0xf004).portr("SYSTEM");
824 	map(0xf008, 0xf008).w(FUNC(dooyong_z80_ym2203_state::pollux_ctrl_w));    /* coin counter, flip screen */
825 	map(0xf010, 0xf010).w("soundlatch", FUNC(generic_latch_8_device::write));
826 	map(0xf018, 0xf01f).w(m_bg[0], FUNC(dooyong_rom_tilemap_device::ctrl_w));
827 	map(0xf020, 0xf027).w(m_fg[0], FUNC(dooyong_rom_tilemap_device::ctrl_w));
828 	map(0xf800, 0xffff).rw(FUNC(dooyong_z80_ym2203_state::paletteram_flytiger_r), FUNC(dooyong_z80_ym2203_state::paletteram_flytiger_w));
829 }
830 
gulfstrm_map(address_map & map)831 void dooyong_z80_ym2203_state::gulfstrm_map(address_map &map)
832 {
833 	map(0x0000, 0x7fff).rom();
834 	map(0x8000, 0xbfff).bankr(m_mainbank);
835 	map(0xc000, 0xcfff).ram();
836 	map(0xd000, 0xdfff).ram().share("spriteram");
837 	map(0xe000, 0xefff).rw(FUNC(dooyong_z80_ym2203_state::lastday_tx_r), FUNC(dooyong_z80_ym2203_state::lastday_tx_w));
838 	map(0xf000, 0xf000).portr("DSWA").w(FUNC(dooyong_z80_ym2203_state::bankswitch_w));
839 	map(0xf001, 0xf001).portr("DSWB");
840 	map(0xf002, 0xf002).portr("P2");
841 	map(0xf003, 0xf003).portr("P1");
842 	map(0xf004, 0xf004).portr("SYSTEM");
843 	map(0xf008, 0xf008).w(FUNC(dooyong_z80_ym2203_state::pollux_ctrl_w));    /* coin counter, flip screen */
844 	map(0xf010, 0xf010).w("soundlatch", FUNC(generic_latch_8_device::write));
845 	map(0xf018, 0xf01f).w(m_bg[0], FUNC(dooyong_rom_tilemap_device::ctrl_w));
846 	map(0xf020, 0xf027).w(m_fg[0], FUNC(dooyong_rom_tilemap_device::ctrl_w));
847 	map(0xf800, 0xffff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette");
848 }
849 
bluehawk_map(address_map & map)850 void dooyong_z80_state::bluehawk_map(address_map &map)
851 {
852 	map(0x0000, 0x7fff).rom();
853 	map(0x8000, 0xbfff).bankr(m_mainbank);
854 	map(0xc000, 0xc000).portr("DSWA");
855 	map(0xc000, 0xc000).w(FUNC(dooyong_z80_state::flip_screen_w));
856 	map(0xc001, 0xc001).portr("DSWB");
857 	map(0xc002, 0xc002).portr("P1");
858 	map(0xc003, 0xc003).portr("P2");
859 	map(0xc004, 0xc004).portr("SYSTEM");
860 	map(0xc008, 0xc008).w(FUNC(dooyong_z80_state::bankswitch_w));
861 	map(0xc010, 0xc010).w("soundlatch", FUNC(generic_latch_8_device::write));
862 	map(0xc018, 0xc01f).w(m_fg[1], FUNC(dooyong_rom_tilemap_device::ctrl_w));
863 	map(0xc040, 0xc047).w(m_bg[0], FUNC(dooyong_rom_tilemap_device::ctrl_w));
864 	map(0xc048, 0xc04f).w(m_fg[0], FUNC(dooyong_rom_tilemap_device::ctrl_w));
865 	map(0xc800, 0xcfff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette");
866 	map(0xd000, 0xdfff).rw(FUNC(dooyong_z80_state::bluehawk_tx_r), FUNC(dooyong_z80_state::bluehawk_tx_w));
867 	map(0xe000, 0xefff).ram().share("spriteram");
868 	map(0xf000, 0xffff).ram();
869 }
870 
flytiger_map(address_map & map)871 void dooyong_z80_state::flytiger_map(address_map &map)
872 {
873 	map(0x0000, 0x7fff).rom();
874 	map(0x8000, 0xbfff).bankr(m_mainbank);
875 	map(0xc000, 0xcfff).ram().share("spriteram");
876 	map(0xd000, 0xdfff).ram();
877 	map(0xe000, 0xe000).portr("P1");
878 	map(0xe000, 0xe000).w(FUNC(dooyong_z80_state::bankswitch_w));
879 	map(0xe002, 0xe002).portr("P2");
880 	map(0xe004, 0xe004).portr("SYSTEM");
881 	map(0xe006, 0xe006).portr("DSWA");
882 	map(0xe008, 0xe008).portr("DSWB");
883 	map(0xe010, 0xe010).w(FUNC(dooyong_z80_state::flytiger_ctrl_w));  /* coin counter, flip screen */
884 	map(0xe020, 0xe020).w("soundlatch", FUNC(generic_latch_8_device::write));
885 	map(0xe030, 0xe037).w(m_bg[0], FUNC(dooyong_rom_tilemap_device::ctrl_w));
886 	map(0xe040, 0xe047).w(m_fg[0], FUNC(dooyong_rom_tilemap_device::ctrl_w));
887 	map(0xe800, 0xefff).rw(FUNC(dooyong_z80_state::paletteram_flytiger_r), FUNC(dooyong_z80_state::paletteram_flytiger_w));
888 	map(0xf000, 0xffff).rw(FUNC(dooyong_z80_state::lastday_tx_r), FUNC(dooyong_z80_state::lastday_tx_w));
889 }
890 
primella_map(address_map & map)891 void dooyong_z80_state::primella_map(address_map &map)
892 {
893 	map(0x0000, 0x7fff).rom();
894 	map(0x8000, 0xbfff).bankr(m_mainbank);
895 	map(0xc000, 0xcfff).ram();
896 	map(0xd000, 0xd3ff).ram(); /* what is this? looks like a palette? scratchpad RAM maybe? */
897 	map(0xe000, 0xefff).rw(FUNC(dooyong_z80_state::bluehawk_tx_r), FUNC(dooyong_z80_state::bluehawk_tx_w));
898 	map(0xf000, 0xf7ff).w(m_palette, FUNC(palette_device::write8)).share("palette");
899 	map(0xf800, 0xf800).portr("DSWA");
900 	map(0xf800, 0xf800).w(FUNC(dooyong_z80_state::primella_ctrl_w));  /* bank switch, flip screen etc */
901 	map(0xf810, 0xf810).portr("DSWB");
902 	map(0xf810, 0xf810).w("soundlatch", FUNC(generic_latch_8_device::write));
903 	map(0xf820, 0xf820).portr("P1");
904 	map(0xf830, 0xf830).portr("P2");
905 	map(0xf840, 0xf840).portr("SYSTEM");
906 	map(0xfc00, 0xfc07).w(m_bg[0], FUNC(dooyong_rom_tilemap_device::ctrl_w));
907 	map(0xfc08, 0xfc0f).w(m_fg[0], FUNC(dooyong_rom_tilemap_device::ctrl_w));
908 }
909 
rshark_map(address_map & map)910 void rshark_state::rshark_map(address_map &map)
911 {
912 	map.global_mask(0xfffff);    /* super-x needs this and is similar */
913 	map(0x000000, 0x03ffff).rom();
914 	map(0x040000, 0x04cfff).ram();
915 	map(0x04d000, 0x04dfff).ram().share("spriteram");
916 	map(0x04e000, 0x04ffff).ram();
917 	map(0x0c0002, 0x0c0003).portr("DSW");
918 	map(0x0c0004, 0x0c0005).portr("P1_P2");
919 	map(0x0c0006, 0x0c0007).portr("SYSTEM");
920 	map(0x0c4000, 0x0c400f).w(m_bg[0], FUNC(dooyong_rom_tilemap_device::ctrl_w)).umask16(0x00ff);
921 	map(0x0c4010, 0x0c401f).w(m_bg[1], FUNC(dooyong_rom_tilemap_device::ctrl_w)).umask16(0x00ff);
922 	map(0x0c8000, 0x0c8fff).w(m_palette, FUNC(palette_device::write16)).share("palette");
923 	map(0x0c0013, 0x0c0013).w("soundlatch", FUNC(generic_latch_8_device::write));
924 	map(0x0c0015, 0x0c0015).w(FUNC(rshark_state::ctrl_w));    /* flip screen + unknown stuff */
925 	map(0x0cc000, 0x0cc00f).w(m_fg[0], FUNC(dooyong_rom_tilemap_device::ctrl_w)).umask16(0x00ff);
926 	map(0x0cc010, 0x0cc01f).w(m_fg[1], FUNC(dooyong_rom_tilemap_device::ctrl_w)).umask16(0x00ff);
927 }
928 
superx_map(address_map & map)929 void rshark_state::superx_map(address_map &map)
930 {
931 	map.global_mask(0xfffff);
932 	map(0x000000, 0x03ffff).rom();
933 	map(0x0d0000, 0x0dcfff).ram();
934 	map(0x0dd000, 0x0ddfff).ram().share("spriteram");
935 	map(0x0de000, 0x0dffff).ram();
936 	map(0x080002, 0x080003).portr("DSW");
937 	map(0x080004, 0x080005).portr("P1_P2");
938 	map(0x080006, 0x080007).portr("SYSTEM");
939 	map(0x084000, 0x08400f).w(m_bg[0], FUNC(dooyong_rom_tilemap_device::ctrl_w)).umask16(0x00ff);
940 	map(0x084010, 0x08401f).w(m_bg[1], FUNC(dooyong_rom_tilemap_device::ctrl_w)).umask16(0x00ff);
941 	map(0x088000, 0x088fff).w(m_palette, FUNC(palette_device::write16)).share("palette");
942 	map(0x080013, 0x080013).w("soundlatch", FUNC(generic_latch_8_device::write));
943 	map(0x080015, 0x080015).w(FUNC(rshark_state::ctrl_w));    /* flip screen + unknown stuff */
944 	map(0x08c000, 0x08c00f).w(m_fg[0], FUNC(dooyong_rom_tilemap_device::ctrl_w)).umask16(0x00ff);
945 	map(0x08c010, 0x08c01f).w(m_fg[1], FUNC(dooyong_rom_tilemap_device::ctrl_w)).umask16(0x00ff);
946 }
947 
popbingo_map(address_map & map)948 void popbingo_state::popbingo_map(address_map &map)
949 {
950 	map.global_mask(0xfffff);
951 	map(0x000000, 0x03ffff).rom();
952 	map(0x040000, 0x04cfff).ram();
953 	map(0x04d000, 0x04dfff).ram().share("spriteram");
954 	map(0x04e000, 0x04ffff).ram();
955 	map(0x0c0002, 0x0c0003).portr("DSW");
956 	map(0x0c0004, 0x0c0005).portr("P1_P2");
957 	map(0x0c0006, 0x0c0007).portr("SYSTEM");
958 	map(0x0c0013, 0x0c0013).w("soundlatch", FUNC(generic_latch_8_device::write));
959 	map(0x0c0015, 0x0c0015).w(FUNC(popbingo_state::ctrl_w));
960 	map(0x0c0018, 0x0c001b).nopw(); // ?
961 	map(0x0c4000, 0x0c400f).w(m_bg[0], FUNC(dooyong_rom_tilemap_device::ctrl_w)).umask16(0x00ff);
962 	map(0x0c4010, 0x0c401f).w(m_bg[1], FUNC(dooyong_rom_tilemap_device::ctrl_w)).umask16(0x00ff);
963 	map(0x0c8000, 0x0c8fff).w(m_palette, FUNC(palette_device::write16)).share("palette");
964 	//map(0x08c000, 0x08c00f).w(m_fg[0], FUNC(dooyong_rom_tilemap_device::ctrl_w)).umask16(0x00ff); apparently not present
965 	//map(0x08c010, 0x08c01f).w(m_fg[1], FUNC(dooyong_rom_tilemap_device::ctrl_w)).umask16(0x00ff); apparently not present
966 	map(0x0dc000, 0x0dc01f).ram(); // registers of some kind?
967 }
968 
lastday_sound_map(address_map & map)969 void dooyong_z80_ym2203_state::lastday_sound_map(address_map &map)
970 {
971 	map(0x0000, 0x7fff).rom();
972 	map(0xc000, 0xc7ff).ram();
973 	map(0xc800, 0xc800).r("soundlatch", FUNC(generic_latch_8_device::read));
974 	map(0xf000, 0xf001).rw("ym1", FUNC(ym2203_device::read), FUNC(ym2203_device::write));
975 	map(0xf002, 0xf003).rw("ym2", FUNC(ym2203_device::read), FUNC(ym2203_device::write));
976 }
977 
pollux_sound_map(address_map & map)978 void dooyong_z80_ym2203_state::pollux_sound_map(address_map &map)
979 {
980 	map(0x0000, 0xefff).rom();
981 	map(0xf000, 0xf7ff).ram();
982 	map(0xf800, 0xf800).r("soundlatch", FUNC(generic_latch_8_device::read));
983 	map(0xf802, 0xf803).rw("ym1", FUNC(ym2203_device::read), FUNC(ym2203_device::write));
984 	map(0xf804, 0xf805).rw("ym2", FUNC(ym2203_device::read), FUNC(ym2203_device::write));
985 }
986 
bluehawk_sound_map(address_map & map)987 void dooyong_state::bluehawk_sound_map(address_map &map)
988 {
989 	map(0x0000, 0xefff).rom();
990 	map(0xf000, 0xf7ff).ram();
991 	map(0xf800, 0xf800).r("soundlatch", FUNC(generic_latch_8_device::read));
992 	map(0xf808, 0xf809).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write));
993 	map(0xf80a, 0xf80a).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
994 }
995 
996 /***************************************************************************
997 
998     Z80 Generic port definitions
999 
1000 ***************************************************************************/
1001 
1002 INPUT_PORTS_START( dooyongz80_generic )
1003 	PORT_START("DSWA")
1004 	PORT_SERVICE_DIPLOC( 0x01, IP_ACTIVE_LOW, "SWA:1" )
1005 	PORT_DIPNAME( 0x02, 0x02, "Coin Type" )             PORT_DIPLOCATION("SWA:2")
1006 	PORT_DIPSETTING(    0x02, "A" )
1007 	PORT_DIPSETTING(    0x00, "B" )
1008 	PORT_DIPNAME( 0x04, 0x04, DEF_STR( Demo_Sounds ) )  PORT_DIPLOCATION("SWA:3")
1009 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
1010 	PORT_DIPSETTING(    0x04, DEF_STR( On ) )
1011 	PORT_DIPNAME( 0x08, 0x08, DEF_STR( Flip_Screen ) )  PORT_DIPLOCATION("SWA:4")
1012 	PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
1013 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1014 	PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coin_A ) )       PORT_DIPLOCATION("SWA:5,6")
1015 	PORT_DIPSETTING(    0x10, DEF_STR( 2C_1C ) )        PORT_CONDITION("DSWA", 0x02, EQUALS, 0x02)
1016 	PORT_DIPSETTING(    0x30, DEF_STR( 1C_1C ) )        PORT_CONDITION("DSWA", 0x02, EQUALS, 0x02)
1017 	PORT_DIPSETTING(    0x00, DEF_STR( 2C_3C ) )        PORT_CONDITION("DSWA", 0x02, EQUALS, 0x02)
1018 	PORT_DIPSETTING(    0x20, DEF_STR( 1C_2C ) )        PORT_CONDITION("DSWA", 0x02, EQUALS, 0x02)
1019 	PORT_DIPSETTING(    0x00, DEF_STR( 4C_1C ) )        PORT_CONDITION("DSWA", 0x02, NOTEQUALS, 0x02)
1020 	PORT_DIPSETTING(    0x10, DEF_STR( 3C_1C ) )        PORT_CONDITION("DSWA", 0x02, NOTEQUALS, 0x02)
1021 	PORT_DIPSETTING(    0x20, DEF_STR( 2C_1C ) )        PORT_CONDITION("DSWA", 0x02, NOTEQUALS, 0x02)
1022 	PORT_DIPSETTING(    0x30, DEF_STR( 1C_1C ) )        PORT_CONDITION("DSWA", 0x02, NOTEQUALS, 0x02)
1023 	PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coin_B ) )       PORT_DIPLOCATION("SWA:7,8")
1024 	PORT_DIPSETTING(    0x40, DEF_STR( 2C_1C ) )        PORT_CONDITION("DSWA", 0x02, EQUALS, 0x02)
1025 	PORT_DIPSETTING(    0xc0, DEF_STR( 1C_1C ) )        PORT_CONDITION("DSWA", 0x02, EQUALS, 0x02)
1026 	PORT_DIPSETTING(    0x00, DEF_STR( 2C_3C ) )        PORT_CONDITION("DSWA", 0x02, EQUALS, 0x02)
1027 	PORT_DIPSETTING(    0x80, DEF_STR( 1C_2C ) )        PORT_CONDITION("DSWA", 0x02, EQUALS, 0x02)
1028 	PORT_DIPSETTING(    0xc0, DEF_STR( 1C_2C ) )        PORT_CONDITION("DSWA", 0x02, NOTEQUALS, 0x02)
1029 	PORT_DIPSETTING(    0x80, DEF_STR( 1C_3C ) )        PORT_CONDITION("DSWA", 0x02, NOTEQUALS, 0x02)
1030 	PORT_DIPSETTING(    0x40, DEF_STR( 1C_4C ) )        PORT_CONDITION("DSWA", 0x02, NOTEQUALS, 0x02)
1031 	PORT_DIPSETTING(    0x00, DEF_STR( 1C_6C ) )        PORT_CONDITION("DSWA", 0x02, NOTEQUALS, 0x02)
1032 
1033 	PORT_START("DSWB")
1034 	PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) )        PORT_DIPLOCATION("SWB:1,2")
1035 	PORT_DIPSETTING(    0x00, "1" )
1036 	PORT_DIPSETTING(    0x02, "2" )
1037 	PORT_DIPSETTING(    0x03, "3" )
1038 	PORT_DIPSETTING(    0x01, "4" )
1039 	PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Difficulty ) )   PORT_DIPLOCATION("SWB:3,4")
1040 	PORT_DIPSETTING(    0x08, DEF_STR( Easy ) )
1041 	PORT_DIPSETTING(    0x0c, DEF_STR( Normal ) )
1042 	PORT_DIPSETTING(    0x04, DEF_STR( Hard ) )
1043 	PORT_DIPSETTING(    0x00, DEF_STR( Hardest ) )
1044 	PORT_DIPUNUSED_DIPLOC( 0x10, 0x10, "SWB:5" )
1045 	PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SWB:6" )
1046 	PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SWB:7" )
1047 	PORT_DIPNAME( 0x80, 0x80, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SWB:8")
1048 	PORT_DIPSETTING(    0x00, DEF_STR( No ) )
1049 	PORT_DIPSETTING(    0x80, DEF_STR( Yes ) )
1050 
1051 	PORT_START("P1")
1052 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
1053 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
1054 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
1055 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
1056 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
1057 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
1058 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
1059 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
1060 
1061 	PORT_START("P2")
1062 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
1063 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
1064 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
1065 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
1066 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
1067 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
1068 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
1069 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
1070 
1071 	PORT_START("SYSTEM")
1072 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
1073 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 )
1074 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN2 )
1075 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 )
1076 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 )
1077 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
1078 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
1079 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
1080 INPUT_PORTS_END
1081 
1082 /***************************************************************************
1083 
1084     M68 Generic port definitions
1085 
1086 ***************************************************************************/
1087 
1088 INPUT_PORTS_START( dooyongm68_generic )
1089 	PORT_START("DSW")
1090 	PORT_SERVICE_DIPLOC( 0x01, IP_ACTIVE_LOW, "SWA:1" )
1091 	PORT_DIPNAME( 0x0002, 0x0002, "Coin Type" )             PORT_DIPLOCATION("SWA:2")
1092 	PORT_DIPSETTING(      0x0002, "A" )
1093 	PORT_DIPSETTING(      0x0000, "B" )
1094 	PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Demo_Sounds ) )  PORT_DIPLOCATION("SWA:3")
1095 	PORT_DIPSETTING(      0x0000, DEF_STR( Off ) )
1096 	PORT_DIPSETTING(      0x0004, DEF_STR( On ) )
1097 	PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Flip_Screen ) )  PORT_DIPLOCATION("SWA:4")
1098 	PORT_DIPSETTING(      0x0008, DEF_STR( Off ) )
1099 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1100 	PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Coin_A ) )       PORT_DIPLOCATION("SWA:5,6")
1101 	PORT_DIPSETTING(      0x0010, DEF_STR( 2C_1C ) )        PORT_CONDITION("DSW", 0x0002, EQUALS, 0x0002)
1102 	PORT_DIPSETTING(      0x0030, DEF_STR( 1C_1C ) )        PORT_CONDITION("DSW", 0x0002, EQUALS, 0x0002)
1103 	PORT_DIPSETTING(      0x0000, DEF_STR( 2C_3C ) )        PORT_CONDITION("DSW", 0x0002, EQUALS, 0x0002)
1104 	PORT_DIPSETTING(      0x0020, DEF_STR( 1C_2C ) )        PORT_CONDITION("DSW", 0x0002, EQUALS, 0x0002)
1105 	PORT_DIPSETTING(      0x0000, DEF_STR( 4C_1C ) )        PORT_CONDITION("DSW", 0x0002, NOTEQUALS, 0x0002)
1106 	PORT_DIPSETTING(      0x0010, DEF_STR( 3C_1C ) )        PORT_CONDITION("DSW", 0x0002, NOTEQUALS, 0x0002)
1107 	PORT_DIPSETTING(      0x0020, DEF_STR( 2C_1C ) )        PORT_CONDITION("DSW", 0x0002, NOTEQUALS, 0x0002)
1108 	PORT_DIPSETTING(      0x0030, DEF_STR( 1C_1C ) )        PORT_CONDITION("DSW", 0x0002, NOTEQUALS, 0x0002)
1109 	PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Coin_B ) )       PORT_DIPLOCATION("SWA:7,8")
1110 	PORT_DIPSETTING(      0x0040, DEF_STR( 2C_1C ) )        PORT_CONDITION("DSW", 0x0002, EQUALS, 0x0002)
1111 	PORT_DIPSETTING(      0x00c0, DEF_STR( 1C_1C ) )        PORT_CONDITION("DSW", 0x0002, EQUALS, 0x0002)
1112 	PORT_DIPSETTING(      0x0000, DEF_STR( 2C_3C ) )        PORT_CONDITION("DSW", 0x0002, EQUALS, 0x0002)
1113 	PORT_DIPSETTING(      0x0080, DEF_STR( 1C_2C ) )        PORT_CONDITION("DSW", 0x0002, EQUALS, 0x0002)
1114 	PORT_DIPSETTING(      0x00c0, DEF_STR( 1C_1C ) )        PORT_CONDITION("DSW", 0x0002, NOTEQUALS, 0x0002)
1115 	PORT_DIPSETTING(      0x0080, DEF_STR( 1C_3C ) )        PORT_CONDITION("DSW", 0x0002, NOTEQUALS, 0x0002)
1116 	PORT_DIPSETTING(      0x0040, DEF_STR( 1C_4C ) )        PORT_CONDITION("DSW", 0x0002, NOTEQUALS, 0x0002)
1117 	PORT_DIPSETTING(      0x0000, DEF_STR( 1C_6C ) )        PORT_CONDITION("DSW", 0x0002, NOTEQUALS, 0x0002)
1118 	PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Lives ) )        PORT_DIPLOCATION("SWB:1,2")
1119 	PORT_DIPSETTING(      0x0000, "1" )
1120 	PORT_DIPSETTING(      0x0200, "2" )
1121 	PORT_DIPSETTING(      0x0300, "3" )
1122 	PORT_DIPSETTING(      0x0100, "4" )
1123 	PORT_DIPNAME( 0x0c00, 0x0c00, DEF_STR( Difficulty ) )   PORT_DIPLOCATION("SWB:3,4")
1124 	PORT_DIPSETTING(      0x0800, DEF_STR( Easy ) )
1125 	PORT_DIPSETTING(      0x0c00, DEF_STR( Normal ) )
1126 	PORT_DIPSETTING(      0x0400, DEF_STR( Hard ) )
1127 	PORT_DIPSETTING(      0x0000, DEF_STR( Hardest ) )
1128 	PORT_DIPUNUSED_DIPLOC( 0x1000, 0x1000, "SWB:5" )
1129 	PORT_DIPUNUSED_DIPLOC( 0x2000, 0x2000, "SWB:6" )
1130 	PORT_DIPUNUSED_DIPLOC( 0x4000, 0x4000, "SWB:7" )
1131 	PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SWB:8")
1132 	PORT_DIPSETTING(      0x0000, DEF_STR( No ) )
1133 	PORT_DIPSETTING(      0x8000, DEF_STR( Yes ) )
1134 
1135 	PORT_START("P1_P2")
1136 	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
1137 	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
1138 	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
1139 	PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
1140 	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
1141 	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
1142 	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
1143 	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
1144 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
1145 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
1146 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
1147 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
1148 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
1149 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
1150 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
1151 	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
1152 
1153 	PORT_START("SYSTEM")
1154 	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
1155 	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START1 )
1156 	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN2 )
1157 	PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START2 )
1158 	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE1 )
1159 	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
1160 	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
1161 	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
1162 INPUT_PORTS_END
1163 
1164 /***************************************************************************
1165 
1166     Game-specific port definitions
1167 
1168 ***************************************************************************/
1169 
1170 INPUT_PORTS_START( lastday )
1171 	PORT_INCLUDE( dooyongz80_generic )
1172 
1173 	PORT_MODIFY("DSWB")
1174 	PORT_DIPNAME( 0x30, 0x30, DEF_STR( Bonus_Life ) )   PORT_DIPLOCATION("SWB:5,6")
1175 	PORT_DIPSETTING(    0x30, "Every 200000" )
1176 	PORT_DIPSETTING(    0x20, "Every 240000" )
1177 	PORT_DIPSETTING(    0x10, "280000" )
1178 	PORT_DIPSETTING(    0x00, DEF_STR( None ) )
1179 	PORT_DIPNAME( 0x40, 0x40, "Speed" )                 PORT_DIPLOCATION("SWB:7")
1180 	PORT_DIPSETTING(    0x00, DEF_STR( Low ) )
1181 	PORT_DIPSETTING(    0x40, DEF_STR( High ) )
1182 
1183 	PORT_MODIFY("SYSTEM")
1184 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
1185 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
1186 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 )
1187 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_TILT )  /* maybe, but I'm not sure */
1188 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
1189 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 )
1190 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
1191 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
1192 INPUT_PORTS_END
1193 
1194 INPUT_PORTS_START( gulfstrm )
1195 	PORT_INCLUDE( dooyongz80_generic )
1196 
1197 	PORT_MODIFY("DSWB")
1198 	PORT_DIPNAME( 0x30, 0x30, DEF_STR( Bonus_Life ) )   PORT_DIPLOCATION("SWB:5,6")
1199 	PORT_DIPSETTING(    0x30, "Every 300,000" )
1200 	PORT_DIPSETTING(    0x20, "Every 400,000" )
1201 	PORT_DIPSETTING(    0x10, "Every 500,000" )
1202 	PORT_DIPSETTING(    0x00, DEF_STR( None ) )
1203 	PORT_DIPNAME( 0x40, 0x40, "Power Rise(?)" )         PORT_DIPLOCATION("SWB:7")
1204 	PORT_DIPSETTING(    0x40, "1" )
1205 	PORT_DIPSETTING(    0x00, "2" )
1206 
1207 	PORT_MODIFY("SYSTEM")
1208 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
1209 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
1210 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 )
1211 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
1212 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen")   /* ??? */
1213 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 )
1214 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 )
1215 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
1216 INPUT_PORTS_END
1217 
1218 INPUT_PORTS_START( pollux )
1219 	PORT_INCLUDE( dooyongz80_generic )
1220 
1221 	PORT_MODIFY("SYSTEM")
1222 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
1223 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
1224 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 )
1225 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
1226 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") // palette cycle effects need this to work
1227 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 )
1228 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 )
1229 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
1230 INPUT_PORTS_END
1231 
1232 INPUT_PORTS_START( bluehawk )
1233 	PORT_INCLUDE( dooyongz80_generic )
1234 INPUT_PORTS_END
1235 
1236 INPUT_PORTS_START( flytiger )
1237 	PORT_INCLUDE( dooyongz80_generic )
1238 
1239 	PORT_MODIFY("DSWB")
1240 	PORT_DIPNAME( 0x40, 0x40, "Auto Fire" )             PORT_DIPLOCATION("SWB:7") /* Mainly (only?) for 3-way charge */
1241 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
1242 	PORT_DIPSETTING(    0x40, DEF_STR( On ) )
1243 
1244 	PORT_MODIFY("SYSTEM")
1245 //  PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") // allows title screen + ending screen colours to cycle (but I'm not sure they're meant to, reference shots suggest not, maybe a debug port?)
1246 INPUT_PORTS_END
1247 
1248 INPUT_PORTS_START( sadari )
1249 	PORT_INCLUDE( dooyongz80_generic )
1250 
1251 	PORT_MODIFY("DSWB")
1252 	PORT_DIPNAME( 0x03, 0x01, "Show Girl" )             PORT_DIPLOCATION("SWB:1,2")
1253 	PORT_DIPSETTING(    0x00, "Skip Skip Skip" )
1254 	PORT_DIPSETTING(    0x03, "Dress Dress Dress" )
1255 	PORT_DIPSETTING(    0x02, "Dress Half Half" )
1256 	PORT_DIPSETTING(    0x01, "Dress Half Naked" )
1257 	PORT_DIPNAME( 0x10, 0x10, DEF_STR( Cabinet ) )      PORT_DIPLOCATION("SWB:5")
1258 	PORT_DIPSETTING(    0x10, DEF_STR( Upright ) )
1259 	PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ) )
1260 	PORT_DIPNAME( 0x40, 0x40, "Girl Show Point" )       PORT_DIPLOCATION("SWB:7")
1261 	PORT_DIPSETTING(    0x40, "Other Country" )
1262 	PORT_DIPSETTING(    0x00, DEF_STR( Asia ) )
1263 
1264 	PORT_MODIFY("P1")
1265 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
1266 
1267 	PORT_MODIFY("P2")
1268 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
1269 INPUT_PORTS_END
1270 
1271 INPUT_PORTS_START( primella )
1272 	PORT_INCLUDE( dooyongz80_generic )
1273 
1274 	PORT_MODIFY("DSWB")
1275 	PORT_DIPNAME( 0x03, 0x01, "Show Girl" )             PORT_DIPLOCATION("SWB:1,2")
1276 	PORT_DIPSETTING(    0x00, "Skip Skip Skip" )
1277 	PORT_DIPSETTING(    0x03, "Dress Dress Dress" )
1278 	PORT_DIPSETTING(    0x02, "Dress Half Half" )
1279 	PORT_DIPSETTING(    0x01, "Dress Half Naked" )
1280 	PORT_DIPNAME( 0x10, 0x10, DEF_STR( Cabinet ) )      PORT_DIPLOCATION("SWB:5")
1281 	PORT_DIPSETTING(    0x10, DEF_STR( Upright ) )
1282 	PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ) )
1283 INPUT_PORTS_END
1284 
1285 INPUT_PORTS_START( rshark )
1286 	PORT_INCLUDE( dooyongm68_generic )
1287 
1288 	PORT_MODIFY("DSW")
1289 	PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Coin_B ) )   PORT_DIPLOCATION("SWA:7,8")
1290 	PORT_DIPSETTING(      0x0040, DEF_STR( 2C_1C ) )    PORT_CONDITION("DSW", 0x0002, EQUALS, 0x0002)
1291 	PORT_DIPSETTING(      0x00c0, DEF_STR( 1C_1C ) )    PORT_CONDITION("DSW", 0x0002, EQUALS, 0x0002)
1292 	PORT_DIPSETTING(      0x0000, DEF_STR( 2C_3C ) )    PORT_CONDITION("DSW", 0x0002, EQUALS, 0x0002)
1293 	PORT_DIPSETTING(      0x0080, DEF_STR( 1C_2C ) )    PORT_CONDITION("DSW", 0x0002, EQUALS, 0x0002)
1294 	PORT_DIPSETTING(      0x00c0, DEF_STR( 1C_2C ) )    PORT_CONDITION("DSW", 0x0002, NOTEQUALS, 0x0002)
1295 	PORT_DIPSETTING(      0x0080, DEF_STR( 1C_3C ) )    PORT_CONDITION("DSW", 0x0002, NOTEQUALS, 0x0002)
1296 	PORT_DIPSETTING(      0x0040, DEF_STR( 1C_4C ) )    PORT_CONDITION("DSW", 0x0002, NOTEQUALS, 0x0002)
1297 	PORT_DIPSETTING(      0x0000, DEF_STR( 1C_6C ) )    PORT_CONDITION("DSW", 0x0002, NOTEQUALS, 0x0002)
1298 INPUT_PORTS_END
1299 
1300 INPUT_PORTS_START( superx )
1301 	PORT_INCLUDE( dooyongm68_generic )
1302 
1303 	PORT_MODIFY("DSW") /* In documentation this switch enables "service mode" but it never had any effect in game */
1304 	PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SWA:1")
1305 	PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
1306 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
1307 INPUT_PORTS_END
1308 
1309 INPUT_PORTS_START( popbingo )
1310 	PORT_INCLUDE( dooyongm68_generic )
1311 
1312 	PORT_MODIFY("DSW")
1313 	PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SWA:3")
1314 	PORT_DIPSETTING(      0x0004, DEF_STR( Off ) )
1315 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1316 	PORT_DIPNAME( 0x0100, 0x0100, "VS Max Round" )      PORT_DIPLOCATION("SWB:1")
1317 	PORT_DIPSETTING(      0x0100, "3" )
1318 	PORT_DIPSETTING(      0x0000, "1" )
1319 	PORT_DIPUNKNOWN_DIPLOC( 0x0200, 0x0200, "SWB:2" )
1320 	PORT_DIPNAME( 0x4000, 0x4000, "Blocks Don't Drop" ) PORT_DIPLOCATION("SWB:7")
1321 	PORT_DIPSETTING(      0x4000, DEF_STR( Off ) )
1322 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1323 	PORT_DIPUNKNOWN_DIPLOC( 0x8000, 0x8000, "SWB:8" )
1324 INPUT_PORTS_END
1325 
1326 /***************************************************************************
1327 
1328     Graphics definitions
1329 
1330 ***************************************************************************/
1331 
1332 const gfx_layout lastday_charlayout =
1333 {
1334 	8,8,
1335 	RGN_FRAC(1,2),
1336 	4,
1337 	{ STEP2(0,4), STEP2(RGN_FRAC(1,2), 4) },
1338 	{ STEP4(0,1), STEP4(8,1) },
1339 	{ STEP8(0,2*8) },
1340 	8*8*2
1341 };
1342 
1343 const gfx_layout bluehawk_charlayout =
1344 {
1345 	8,8,
1346 	RGN_FRAC(1,1),
1347 	4,
1348 	{ STEP4(0,1) },
1349 	{ STEP8(0,4) },
1350 	{ STEP8(0,4*8) },
1351 	8*8*4
1352 };
1353 
1354 const gfx_layout tilelayout =
1355 {
1356 	32,32,
1357 	RGN_FRAC(1,1),
1358 	4,
1359 	{ STEP4(0,4) },
1360 	{
1361 		STEP4(0,1), STEP4(16,1),
1362 		STEP4(4*8*32,1), STEP4(4*8*32+16,1),
1363 		STEP4(2*4*8*32,1), STEP4(2*4*8*32+16,1),
1364 		STEP4(3*4*8*32,1), STEP4(3*4*8*32+16,1)
1365 	},
1366 	{ STEP32(0,4*8) },
1367 	32*32*4
1368 };
1369 
1370 const gfx_layout spritelayout =
1371 {
1372 	16,16,
1373 	RGN_FRAC(1,1),
1374 	4,
1375 	{ STEP4(0,4) },
1376 	{ STEP4(0,1), STEP4(16,1), STEP4(4*8*16,1), STEP4(4*8*16+16,1) },
1377 	{ STEP16(0,4*8) },
1378 	128*8
1379 };
1380 
1381 const gfx_layout rshark_spritelayout =
1382 {
1383 	16,16,
1384 	RGN_FRAC(1,1),
1385 	4,
1386 	{ STEP4(0,1) },
1387 	{ STEP8(0,4), STEP8(4*8*16,4) },
1388 	{ STEP16(0,4*8) },
1389 	128*8
1390 };
1391 
1392 GFXDECODE_START( gfx_lastday )
1393 	GFXDECODE_ENTRY( "tx",     0, lastday_charlayout, 0, 16+64 )
1394 	GFXDECODE_ENTRY( "sprite", 0, spritelayout,     256, 16+64 )
1395 	GFXDECODE_ENTRY( "bg0",    0, tilelayout,       768, 16+64 )
1396 	GFXDECODE_ENTRY( "fg0",    0, tilelayout,       512, 16+64 )
1397 GFXDECODE_END
1398 
GFXDECODE_START(gfx_flytiger)1399 GFXDECODE_START( gfx_flytiger )
1400 	GFXDECODE_ENTRY( "tx",     0, lastday_charlayout, 0, 16+64 )
1401 	GFXDECODE_ENTRY( "sprite", 0, spritelayout,     256, 16+64 )
1402 	GFXDECODE_ENTRY( "bg0",    0, tilelayout,       768, 16+64 )
1403 	GFXDECODE_ENTRY( "fg0",    0, tilelayout,       512, 32+64 )
1404 GFXDECODE_END
1405 
1406 GFXDECODE_START( gfx_bluehawk )
1407 	GFXDECODE_ENTRY( "tx",     0, bluehawk_charlayout, 0, 16 )
1408 	GFXDECODE_ENTRY( "sprite", 0, spritelayout,      256, 16 )
1409 	GFXDECODE_ENTRY( "bg0",    0, tilelayout,        768, 16 )
1410 	GFXDECODE_ENTRY( "fg0",    0, tilelayout,        512, 16 )
1411 	GFXDECODE_ENTRY( "fg1",    0, tilelayout,          0, 16 )
1412 GFXDECODE_END
1413 
1414 GFXDECODE_START( gfx_primella )
1415 	GFXDECODE_ENTRY( "tx",  0, bluehawk_charlayout, 0, 16 )
1416 	/* no sprites */
1417 	GFXDECODE_ENTRY( "bg0", 0, tilelayout,        768, 16 )
1418 	GFXDECODE_ENTRY( "fg0", 0, tilelayout,        512, 16 )
1419 GFXDECODE_END
1420 
1421 GFXDECODE_START( gfx_rshark )
1422 	/* no chars */
1423 	GFXDECODE_ENTRY( "sprite", 0, rshark_spritelayout,  0, 16 )
1424 	GFXDECODE_ENTRY( "fg1",    0, spritelayout,       256, 16 )
1425 	GFXDECODE_ENTRY( "fg0",    0, spritelayout,       512, 16 )
1426 	GFXDECODE_ENTRY( "bg1",    0, spritelayout,       768, 16 )
1427 	GFXDECODE_ENTRY( "bg0",    0, spritelayout,      1024, 16 )
1428 GFXDECODE_END
1429 
1430 GFXDECODE_START( gfx_popbingo )
1431 	/* no chars */
1432 	GFXDECODE_ENTRY( "sprite", 0, rshark_spritelayout,  0, 16 )
1433 	GFXDECODE_ENTRY( "bg0",    0, tilelayout,           0,  1 )
1434 	GFXDECODE_ENTRY( "bg1",    0, tilelayout,           0,  1 )
1435 
1436 GFXDECODE_END
1437 
1438 u8 dooyong_z80_ym2203_state::unk_r()
1439 {
1440 	return 0;
1441 }
1442 
1443 
1444 /***************************************************************************
1445 
1446     Machine driver(s)
1447 
1448 ***************************************************************************/
1449 
sound_2203(machine_config & config)1450 void dooyong_z80_ym2203_state::sound_2203(machine_config &config)
1451 {
1452 	INPUT_MERGER_ANY_HIGH(config, "soundirq").output_handler().set_inputline(m_audiocpu, 0);
1453 
1454 	SPEAKER(config, "mono").front_center();
1455 
1456 	GENERIC_LATCH_8(config, "soundlatch");
1457 
1458 	ym2203_device &ym1(YM2203(config, "ym1", 1500000));
1459 	ym1.irq_handler().set("soundirq", FUNC(input_merger_any_high_device::in_w<0>));
1460 	ym1.port_a_read_callback().set(FUNC(dooyong_z80_ym2203_state::unk_r));
1461 	ym1.add_route(ALL_OUTPUTS, "mono", 0.40);
1462 
1463 	ym2203_device &ym2(YM2203(config, "ym2", 1500000));
1464 	ym2.irq_handler().set("soundirq", FUNC(input_merger_any_high_device::in_w<1>));
1465 	ym2.port_a_read_callback().set(FUNC(dooyong_z80_ym2203_state::unk_r));
1466 	ym2.add_route(ALL_OUTPUTS, "mono", 0.40);
1467 }
1468 
sound_2151(machine_config & config)1469 void dooyong_z80_state::sound_2151(machine_config &config)
1470 {
1471 	SPEAKER(config, "mono").front_center();
1472 
1473 	GENERIC_LATCH_8(config, "soundlatch");
1474 
1475 	ym2151_device &ymsnd(YM2151(config, "ymsnd", 3.579'545_MHz_XTAL));
1476 	ymsnd.irq_handler().set_inputline(m_audiocpu, 0);
1477 	ymsnd.add_route(0, "mono", 0.50);
1478 	ymsnd.add_route(1, "mono", 0.50);
1479 
1480 	OKIM6295(config, "oki", 1_MHz_XTAL, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.60);
1481 }
1482 
sound_2151_4mhz(machine_config & config)1483 void dooyong_state::sound_2151_4mhz(machine_config &config)
1484 {
1485 	SPEAKER(config, "mono").front_center();
1486 
1487 	GENERIC_LATCH_8(config, "soundlatch");
1488 
1489 	ym2151_device &ymsnd(YM2151(config, "ymsnd", 16_MHz_XTAL/4));  /* 4MHz (16MHz/4 for most, 8Mhz/2 for Super-X) */
1490 	ymsnd.irq_handler().set_inputline(m_audiocpu, 0);
1491 	ymsnd.add_route(0, "mono", 0.50);
1492 	ymsnd.add_route(1, "mono", 0.50);
1493 
1494 	OKIM6295(config, "oki", 16_MHz_XTAL/16, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.60);  /* 1MHz (16MHz/16 for most, 8Mhz/8 for Super-X) */
1495 }
1496 
lastday(machine_config & config)1497 void dooyong_z80_ym2203_state::lastday(machine_config &config)
1498 {
1499 	/* basic machine hardware */
1500 	Z80(config, m_maincpu, 16_MHz_XTAL/2);   /* 8MHz verified for Last Day / D-day */
1501 	m_maincpu->set_addrmap(AS_PROGRAM, &dooyong_z80_ym2203_state::lastday_map);
1502 	m_maincpu->set_vblank_int("screen", FUNC(dooyong_state::irq0_line_hold));
1503 
1504 	Z80(config, m_audiocpu, 16_MHz_XTAL/4);  /* 4MHz verified for Last Day / D-day */
1505 	m_audiocpu->set_addrmap(AS_PROGRAM, &dooyong_z80_ym2203_state::lastday_sound_map);
1506 
1507 	MCFG_MACHINE_START_OVERRIDE(dooyong_z80_ym2203_state, cpu_z80)
1508 
1509 	/* video hardware */
1510 	BUFFERED_SPRITERAM8(config, m_spriteram);
1511 
1512 	screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
1513 	screen.set_refresh_hz(60);
1514 	screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
1515 	screen.set_size(64*8, 32*8);
1516 	screen.set_visarea(8*8, (64-8)*8-1, 1*8, 31*8-1 );
1517 	screen.set_screen_update(FUNC(dooyong_z80_ym2203_state::screen_update_lastday));
1518 	screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram8_device::vblank_copy_rising));
1519 	screen.set_palette(m_palette);
1520 
1521 	GFXDECODE(config, m_gfxdecode, m_palette, gfx_lastday);
1522 	PALETTE(config, m_palette).set_format(palette_device::xBGR_444, 1024);
1523 	DOOYONG_ROM_TILEMAP(config, m_bg[0], m_gfxdecode, 2, "bg0_tmap", 0x00000, -1);
1524 	DOOYONG_ROM_TILEMAP(config, m_fg[0], m_gfxdecode, 3, "fg0_tmap", 0x00000, -1);
1525 	m_fg[0]->set_transparent_pen(15);
1526 	DOOYONG_RAM_TILEMAP(config, m_tx, m_gfxdecode, 0);
1527 
1528 	MCFG_VIDEO_START_OVERRIDE(dooyong_z80_ym2203_state, lastday)
1529 
1530 	/* sound hardware */
1531 	INPUT_MERGER_ANY_HIGH(config, "soundirq").output_handler().set_inputline(m_audiocpu, 0);
1532 
1533 	SPEAKER(config, "mono").front_center();
1534 
1535 	GENERIC_LATCH_8(config, "soundlatch");
1536 
1537 	ym2203_device &ym1(YM2203(config, "ym1", 16_MHz_XTAL/4));  /* 4MHz verified for Last Day / D-day */
1538 	ym1.irq_handler().set("soundirq", FUNC(input_merger_any_high_device::in_w<0>));
1539 	ym1.port_a_read_callback().set(FUNC(dooyong_z80_ym2203_state::unk_r));
1540 	ym1.add_route(ALL_OUTPUTS, "mono", 0.40);
1541 
1542 	ym2203_device &ym2(YM2203(config, "ym2", 16_MHz_XTAL/4));  /* 4MHz verified for Last Day / D-day */
1543 	ym2.irq_handler().set("soundirq", FUNC(input_merger_any_high_device::in_w<1>));
1544 	ym2.port_a_read_callback().set(FUNC(dooyong_z80_ym2203_state::unk_r));
1545 	ym2.add_route(ALL_OUTPUTS, "mono", 0.40);
1546 }
1547 
gulfstrm(machine_config & config)1548 void dooyong_z80_ym2203_state::gulfstrm(machine_config &config)
1549 {
1550 	/* basic machine hardware */
1551 	Z80(config, m_maincpu, 8000000);   /* ??? */
1552 	m_maincpu->set_addrmap(AS_PROGRAM, &dooyong_z80_ym2203_state::gulfstrm_map);
1553 	m_maincpu->set_vblank_int("screen", FUNC(dooyong_state::irq0_line_hold));
1554 
1555 	Z80(config, m_audiocpu, 8000000);  /* ??? */
1556 	m_audiocpu->set_addrmap(AS_PROGRAM, &dooyong_z80_ym2203_state::lastday_sound_map);
1557 
1558 	MCFG_MACHINE_START_OVERRIDE(dooyong_z80_ym2203_state, cpu_z80)
1559 
1560 	/* video hardware */
1561 	BUFFERED_SPRITERAM8(config, m_spriteram);
1562 
1563 	screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
1564 	screen.set_refresh_hz(60);
1565 	screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
1566 	screen.set_size(64*8, 32*8);
1567 	screen.set_visarea(8*8, (64-8)*8-1, 1*8, 31*8-1 );
1568 	screen.set_screen_update(FUNC(dooyong_z80_ym2203_state::screen_update_gulfstrm));
1569 	screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram8_device::vblank_copy_rising));
1570 	screen.set_palette(m_palette);
1571 
1572 	GFXDECODE(config, m_gfxdecode, m_palette, gfx_lastday);
1573 	PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 1024);
1574 	DOOYONG_ROM_TILEMAP(config, m_bg[0], m_gfxdecode, 2, "bg0_tmap", 0x00000, -1);
1575 	DOOYONG_ROM_TILEMAP(config, m_fg[0], m_gfxdecode, 3, "fg0_tmap", 0x00000, -1);
1576 	m_fg[0]->set_transparent_pen(15);
1577 	DOOYONG_RAM_TILEMAP(config, m_tx, m_gfxdecode, 0);
1578 
1579 	MCFG_VIDEO_START_OVERRIDE(dooyong_z80_ym2203_state, gulfstrm)
1580 
1581 	/* sound hardware */
1582 	sound_2203(config); /* 3.579545MHz */
1583 }
1584 
pollux(machine_config & config)1585 void dooyong_z80_ym2203_state::pollux(machine_config &config)
1586 {
1587 	/* basic machine hardware */
1588 	Z80(config, m_maincpu, 16_MHz_XTAL/2);   /* 8Mhz */
1589 	m_maincpu->set_addrmap(AS_PROGRAM, &dooyong_z80_ym2203_state::pollux_map);
1590 	m_maincpu->set_vblank_int("screen", FUNC(dooyong_state::irq0_line_hold));
1591 
1592 	Z80(config, m_audiocpu, 16_MHz_XTAL/4);  /* 4Mhz */
1593 	m_audiocpu->set_addrmap(AS_PROGRAM, &dooyong_z80_ym2203_state::pollux_sound_map);
1594 
1595 	MCFG_MACHINE_START_OVERRIDE(dooyong_z80_ym2203_state, cpu_z80)
1596 
1597 	/* video hardware */
1598 	BUFFERED_SPRITERAM8(config, m_spriteram);
1599 
1600 	screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
1601 	screen.set_refresh_hz(60);
1602 	screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
1603 	screen.set_size(64*8, 32*8);
1604 	screen.set_visarea(8*8, (64-8)*8-1, 1*8, 31*8-1 );
1605 	screen.set_screen_update(FUNC(dooyong_z80_ym2203_state::screen_update_pollux));
1606 	screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram8_device::vblank_copy_rising));
1607 	screen.set_palette(m_palette);
1608 
1609 	GFXDECODE(config, m_gfxdecode, m_palette, gfx_lastday);
1610 	PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 1024*2);
1611 	DOOYONG_ROM_TILEMAP(config, m_bg[0], m_gfxdecode, 2, "bg0_tmap", 0x00000, -1);
1612 	DOOYONG_ROM_TILEMAP(config, m_fg[0], m_gfxdecode, 3, "fg0_tmap", 0x00000, -1);
1613 	m_fg[0]->set_transparent_pen(15);
1614 	DOOYONG_RAM_TILEMAP(config, m_tx, m_gfxdecode, 0);
1615 
1616 	MCFG_VIDEO_START_OVERRIDE(dooyong_z80_ym2203_state, pollux)
1617 
1618 	/* sound hardware */
1619 	sound_2203(config); /* 1.5MHz verified */
1620 }
1621 
bluehawk(machine_config & config)1622 void dooyong_z80_state::bluehawk(machine_config &config)
1623 {
1624 	/* basic machine hardware */
1625 	Z80(config, m_maincpu, 8000000);   /* ??? */
1626 	m_maincpu->set_addrmap(AS_PROGRAM, &dooyong_z80_state::bluehawk_map);
1627 	m_maincpu->set_vblank_int("screen", FUNC(dooyong_state::irq0_line_hold));
1628 
1629 	Z80(config, m_audiocpu, 4000000);  /* ??? */
1630 	m_audiocpu->set_addrmap(AS_PROGRAM, &dooyong_z80_state::bluehawk_sound_map);
1631 
1632 	MCFG_MACHINE_START_OVERRIDE(dooyong_z80_state, cpu_z80)
1633 
1634 	/* video hardware */
1635 	BUFFERED_SPRITERAM8(config, m_spriteram);
1636 
1637 	screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
1638 	screen.set_refresh_hz(60);
1639 	screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
1640 	screen.set_size(64*8, 32*8);
1641 	screen.set_visarea(8*8, (64-8)*8-1, 1*8, 31*8-1 );
1642 	screen.set_screen_update(FUNC(dooyong_z80_state::screen_update_bluehawk));
1643 	screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram8_device::vblank_copy_rising));
1644 	screen.set_palette(m_palette);
1645 
1646 	GFXDECODE(config, m_gfxdecode, m_palette, gfx_bluehawk);
1647 	PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 1024);
1648 
1649 	DOOYONG_ROM_TILEMAP(config, m_bg[0], m_gfxdecode, 2, "bg0", 0x3c000, 0x4000);
1650 	m_bg[0]->set_tile_callback(FUNC(dooyong_z80_state::bluehawk_tile_callback));
1651 
1652 	DOOYONG_ROM_TILEMAP(config, m_fg[0], m_gfxdecode, 3, "fg0", 0x3c000, 0x4000);
1653 	m_fg[0]->set_transparent_pen(15);
1654 	m_fg[0]->set_tile_callback(FUNC(dooyong_z80_state::bluehawk_tile_callback));
1655 
1656 	DOOYONG_ROM_TILEMAP(config, m_fg[1], m_gfxdecode, 4, "fg1", 0x1c000, 0x4000);
1657 	m_fg[1]->set_transparent_pen(15);
1658 	m_fg[1]->set_tile_callback(FUNC(dooyong_z80_state::bluehawk_tile_callback));
1659 
1660 	DOOYONG_RAM_TILEMAP(config, m_tx, m_gfxdecode, 0);
1661 
1662 	MCFG_VIDEO_START_OVERRIDE(dooyong_z80_state, bluehawk)
1663 
1664 	/* sound hardware */
1665 	sound_2151(config); /* 3.579545MHz or 4Mhz ??? */
1666 }
1667 
flytiger(machine_config & config)1668 void dooyong_z80_state::flytiger(machine_config &config)
1669 {
1670 	/* basic machine hardware */
1671 	Z80(config, m_maincpu, 16_MHz_XTAL/2);   /* 8MHz */
1672 	m_maincpu->set_addrmap(AS_PROGRAM, &dooyong_z80_state::flytiger_map);
1673 	m_maincpu->set_vblank_int("screen", FUNC(dooyong_state::irq0_line_hold));
1674 
1675 	Z80(config, m_audiocpu, 16_MHz_XTAL/4);  /* 4Mhz */
1676 	m_audiocpu->set_addrmap(AS_PROGRAM, &dooyong_z80_state::bluehawk_sound_map);
1677 
1678 	MCFG_MACHINE_START_OVERRIDE(dooyong_z80_state, cpu_z80)
1679 
1680 	/* video hardware */
1681 	BUFFERED_SPRITERAM8(config, m_spriteram);
1682 
1683 	screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
1684 	screen.set_refresh_hz(60);
1685 	screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
1686 	screen.set_size(64*8, 32*8);
1687 	screen.set_visarea(8*8, (64-8)*8-1, 1*8, 31*8-1 );
1688 	screen.set_screen_update(FUNC(dooyong_z80_state::screen_update_flytiger));
1689 	screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram8_device::vblank_copy_rising));
1690 	screen.set_palette(m_palette);
1691 
1692 	GFXDECODE(config, m_gfxdecode, m_palette, gfx_flytiger);
1693 	PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 1024*2);
1694 	DOOYONG_ROM_TILEMAP(config, m_bg[0], m_gfxdecode, 2, "bg0", 0x3c000, 0x4000);
1695 	m_bg[0]->set_transparent_pen(15);
1696 	DOOYONG_ROM_TILEMAP(config, m_fg[0], m_gfxdecode, 3, "fg0", 0x3c000, 0x4000);
1697 	m_fg[0]->set_transparent_pen(15);
1698 	DOOYONG_RAM_TILEMAP(config, m_tx, m_gfxdecode, 0);
1699 
1700 	MCFG_VIDEO_START_OVERRIDE(dooyong_z80_state, flytiger)
1701 
1702 	/* sound hardware */
1703 	sound_2151(config);
1704 }
1705 
primella(machine_config & config)1706 void dooyong_z80_state::primella(machine_config &config)
1707 {
1708 	/* basic machine hardware */
1709 	Z80(config, m_maincpu, 16_MHz_XTAL/2);   /* 8MHz */
1710 	m_maincpu->set_addrmap(AS_PROGRAM, &dooyong_z80_state::primella_map);
1711 	m_maincpu->set_vblank_int("screen", FUNC(dooyong_state::irq0_line_hold));
1712 
1713 	Z80(config, m_audiocpu, 16_MHz_XTAL/4);   /* 4MHz */
1714 	m_audiocpu->set_addrmap(AS_PROGRAM, &dooyong_z80_state::bluehawk_sound_map);
1715 
1716 	MCFG_MACHINE_START_OVERRIDE(dooyong_z80_state, cpu_z80)
1717 
1718 	/* video hardware */
1719 	screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
1720 	screen.set_refresh_hz(60);
1721 	screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
1722 	screen.set_size(64*8, 32*8);
1723 	screen.set_visarea(8*8, (64-8)*8-1, 0*8, 32*8-1 );
1724 	screen.set_screen_update(FUNC(dooyong_z80_state::screen_update_primella));
1725 	screen.set_palette(m_palette);
1726 
1727 	GFXDECODE(config, m_gfxdecode, m_palette, gfx_primella);
1728 	PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 1024);
1729 
1730 	DOOYONG_ROM_TILEMAP(config, m_bg[0], m_gfxdecode, 1, "bg0", -0x4000, 0x4000);
1731 	m_bg[0]->set_tile_callback(FUNC(dooyong_z80_state::bluehawk_tile_callback));
1732 
1733 	DOOYONG_ROM_TILEMAP(config, m_fg[0], m_gfxdecode, 2, "fg0", -0x4000, 0x4000);
1734 	m_fg[0]->set_transparent_pen(15);
1735 	m_fg[0]->set_tile_callback(FUNC(dooyong_z80_state::bluehawk_tile_callback));
1736 
1737 	DOOYONG_RAM_TILEMAP(config, m_tx, m_gfxdecode, 0);
1738 
1739 	MCFG_VIDEO_START_OVERRIDE(dooyong_z80_state, primella)
1740 
1741 	/* sound hardware */
1742 	sound_2151_4mhz(config); /* PCB has only 1 OSC at 16Mhz */
1743 }
1744 
1745 
TIMER_DEVICE_CALLBACK_MEMBER(dooyong_68k_state::scanline)1746 TIMER_DEVICE_CALLBACK_MEMBER(dooyong_68k_state::scanline)
1747 {
1748 	int scanline = param;
1749 
1750 	if (scanline == 248) // vblank-out irq
1751 		m_maincpu->set_input_line(5, HOLD_LINE);
1752 
1753 	if (scanline == 120) // timer irq?
1754 		m_maincpu->set_input_line(6, HOLD_LINE);
1755 }
1756 
1757 
dooyong_68k(machine_config & config)1758 void rshark_state::dooyong_68k(machine_config &config)
1759 {
1760 	// basic machine hardware
1761 	M68000(config, m_maincpu, 8_MHz_XTAL);  // 8MHz measured on Super-X
1762 	TIMER(config, "scantimer").configure_scanline(FUNC(rshark_state::scanline), "screen", 0, 1);
1763 
1764 	Z80(config, m_audiocpu, 8_MHz_XTAL/2);  // 4MHz measured on Super-X
1765 	m_audiocpu->set_addrmap(AS_PROGRAM, &rshark_state::bluehawk_sound_map);
1766 
1767 	// video hardware
1768 	BUFFERED_SPRITERAM16(config, m_spriteram);
1769 
1770 	screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
1771 	screen.set_refresh_hz(60);
1772 	screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500));  // not accurate
1773 	screen.set_size(64*8, 32*8);
1774 	screen.set_visarea(8*8, (64-8)*8-1, 1*8, 31*8-1);
1775 	screen.set_screen_update(FUNC(rshark_state::screen_update_rshark));
1776 	screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising));
1777 	screen.set_palette(m_palette);
1778 
1779 	GFXDECODE(config, m_gfxdecode, m_palette, gfx_rshark);
1780 	PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 2048);
1781 
1782 	RSHARK_ROM_TILEMAP(config, m_bg[0], m_gfxdecode, 4, "bg0", 0x00000, 0x20000, "tmap_hi", 0x60000, 0x20000);
1783 	m_bg[0]->set_tile_callback(FUNC(rshark_state::rshark_tile_callback));
1784 
1785 	RSHARK_ROM_TILEMAP(config, m_bg[1], m_gfxdecode, 3, "bg1", 0x00000, 0x20000, "tmap_hi", 0x40000, 0x20000);
1786 	m_bg[1]->set_transparent_pen(15);
1787 	m_bg[1]->set_tile_callback(FUNC(rshark_state::rshark_tile_callback));
1788 
1789 	RSHARK_ROM_TILEMAP(config, m_fg[0], m_gfxdecode, 2, "fg0", 0x00000, 0x20000, "tmap_hi", 0x20000, 0x20000);
1790 	m_fg[0]->set_transparent_pen(15);
1791 	m_fg[0]->set_tile_callback(FUNC(rshark_state::rshark_tile_callback));
1792 
1793 	RSHARK_ROM_TILEMAP(config, m_fg[1], m_gfxdecode, 1, "fg1", 0x00000, 0x20000, "tmap_hi", 0x00000, 0x20000);
1794 	m_fg[1]->set_transparent_pen(15);
1795 	m_fg[1]->set_tile_callback(FUNC(rshark_state::rshark_tile_callback));
1796 
1797 	// sound hardware
1798 	sound_2151_4mhz(config);
1799 }
1800 
rshark(machine_config & config)1801 void rshark_state::rshark(machine_config &config)
1802 {
1803 	dooyong_68k(config);
1804 
1805 	m_maincpu->set_addrmap(AS_PROGRAM, &rshark_state::rshark_map);
1806 }
1807 
superx(machine_config & config)1808 void rshark_state::superx(machine_config &config)
1809 {
1810 	dooyong_68k(config);
1811 
1812 	m_maincpu->set_addrmap(AS_PROGRAM, &rshark_state::superx_map);
1813 }
1814 
popbingo(machine_config & config)1815 void popbingo_state::popbingo(machine_config &config)
1816 {
1817 	// basic machine hardware
1818 	M68000(config, m_maincpu, 20_MHz_XTAL/2);   // 10MHz measured
1819 	m_maincpu->set_addrmap(AS_PROGRAM, &popbingo_state::popbingo_map);
1820 	TIMER(config, "scantimer").configure_scanline(FUNC(popbingo_state::scanline), "screen", 0, 1);
1821 
1822 	Z80(config, m_audiocpu, 16_MHz_XTAL/4);     // 4MHz measured
1823 	m_audiocpu->set_addrmap(AS_PROGRAM, &popbingo_state::bluehawk_sound_map);
1824 
1825 	// video hardware
1826 	BUFFERED_SPRITERAM16(config, m_spriteram);
1827 
1828 	SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
1829 	m_screen->set_refresh_hz(60);
1830 	m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500));  // not accurate
1831 	m_screen->set_size(64*8, 32*8);
1832 	m_screen->set_visarea(8*8, (64-8)*8-1, 1*8, 31*8-1);
1833 	m_screen->set_screen_update(FUNC(popbingo_state::screen_update_popbingo));
1834 	m_screen->screen_vblank().set(m_spriteram, FUNC(buffered_spriteram16_device::vblank_copy_rising));
1835 	m_screen->set_palette(m_palette);
1836 
1837 	GFXDECODE(config, m_gfxdecode, m_palette, gfx_popbingo);
1838 	PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 2048);
1839 
1840 	DOOYONG_ROM_TILEMAP(config, m_bg[0], m_gfxdecode, 1, "bg0", 0x00000, 0x4000);
1841 	m_bg[0]->set_tile_callback(FUNC(popbingo_state::popbingo_tile_callback));
1842 
1843 	DOOYONG_ROM_TILEMAP(config, m_bg[1], m_gfxdecode, 2, "bg1", 0x00000, 0x4000);
1844 	m_bg[1]->set_tile_callback(FUNC(popbingo_state::popbingo_tile_callback));
1845 
1846 	// sound hardware
1847 	sound_2151_4mhz(config);
1848 }
1849 
1850 } // anonymous namespace
1851 
1852 
1853 /***************************************************************************
1854 
1855     ROM definition(s)
1856 
1857 ***************************************************************************/
1858 
1859 ROM_START( lastday ) /* 90030003 PCB */
1860 	ROM_REGION( 0x20000, "maincpu", 0 ) /* 64k for code + 128k for banks */
1861 	ROM_LOAD( "lday3.s5",     0x00000, 0x10000, CRC(a06dfb1e) SHA1(c6220eda8c01d55862700e369db7291dbbedc8c8) )
1862 	ROM_LOAD( "4.u5",         0x10000, 0x10000, CRC(70961ea6) SHA1(245d3da67abb4a511a024f030de461b9a2b4804e) )  /* banked at 0x8000-0xbfff */
1863 
1864 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound */
1865 	ROM_LOAD( "1.d3",         0x00000, 0x08000, CRC(dd4316fd) SHA1(496e6657bb76d91f488a2464d1af1be095ab9105) )    /* empty */
1866 	ROM_CONTINUE(             0x00000, 0x08000 )
1867 
1868 	ROM_REGION( 0x8000, "tx", 0 ) /* chars */
1869 	ROM_LOAD( "2.j4",         0x00000, 0x08000, CRC(83eb572c) SHA1(e915afd55d505bce202206c9ecfa89bad561ef6c) )    /* empty */
1870 	ROM_CONTINUE(             0x00000, 0x08000 )
1871 
1872 	ROM_REGION16_BE( 0x40000, "sprite", 0 )    /* sprites */
1873 	ROM_LOAD16_BYTE( "16.d14",   0x00000, 0x20000, CRC(df503504) SHA1(daa58a7bc24415b5f59b7c7cc918bc85de9702a3) )
1874 	ROM_LOAD16_BYTE( "15.a14",   0x00001, 0x20000, CRC(cd990442) SHA1(891b2163db23ab0bb40cbadce6e06fc067d0532f) )
1875 
1876 	ROM_REGION16_BE( 0x80000, "bg0", 0 )    /* tiles */
1877 	ROM_LOAD16_BYTE( "6.s9",     0x00000, 0x20000, CRC(1054361d) SHA1(52566786ca8177404be8b66fd7de94ac25fc49ea) )
1878 	ROM_LOAD16_BYTE( "9.s11",    0x00001, 0x20000, CRC(6952ef4d) SHA1(b4e5ec02e97df213fe0bd4cd8a2ca77d7ecf8ad5) )
1879 	ROM_LOAD16_BYTE( "7.u9",     0x40000, 0x20000, CRC(6e57a888) SHA1(8efe876ea3c788b83e8291f7fc6f55b90de158c8) )
1880 	ROM_LOAD16_BYTE( "10.u11",   0x40001, 0x20000, CRC(a5548dca) SHA1(9914e01c1739c3bfd868a01e53c9030726ced4ea) )
1881 
1882 	ROM_REGION16_BE( 0x40000, "fg0", 0 )    /* tiles */
1883 	ROM_LOAD16_BYTE( "12.s13",   0x00000, 0x20000, CRC(992bc4af) SHA1(94570ebd1ee6acf1871cf914907acd12dca4026e) )
1884 	ROM_LOAD16_BYTE( "14.s14",   0x00001, 0x20000, CRC(a79abc85) SHA1(3e63dad11db9b7420331403a1d551d8c041c4cc2) )
1885 
1886 	ROM_REGION16_BE( 0x20000, "bg0_tmap", 0 )    /* background tilemaps */
1887 	ROM_LOAD16_BYTE( "5.r9",     0x00000, 0x10000, CRC(4789bae8) SHA1(6ffecc16eb8c9c783b02c4ef68cb5098b01fafef) )
1888 	ROM_LOAD16_BYTE( "8.r11",    0x00001, 0x10000, CRC(92402b9a) SHA1(2ca8078d2687afbe7b6fc5412de16c6fbc11a650) )
1889 
1890 	ROM_REGION16_BE( 0x20000, "fg0_tmap", 0 )    /* fg tilemaps */
1891 	ROM_LOAD16_BYTE( "11.r13",   0x00000, 0x10000, CRC(04b961de) SHA1(7a94c9d0800d79048660cf3758708a346ead33f9) )
1892 	ROM_LOAD16_BYTE( "13.r14",   0x00001, 0x10000, CRC(6bdbd887) SHA1(a54f26f9ddd72b8b8f7a030610c1c4a5f94a3358) )
1893 ROM_END
1894 
1895 ROM_START( lastdaya ) /* 90030003 PCB */
1896 	ROM_REGION( 0x20000, "maincpu", 0 ) /* 64k for code + 128k for banks */
1897 	ROM_LOAD( "lday3.s5",     0x00000, 0x10000, CRC(a06dfb1e) SHA1(c6220eda8c01d55862700e369db7291dbbedc8c8) )
1898 	ROM_LOAD( "4.u5",         0x10000, 0x10000, CRC(70961ea6) SHA1(245d3da67abb4a511a024f030de461b9a2b4804e) )  /* banked at 0x8000-0xbfff */
1899 
1900 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound */
1901 	ROM_LOAD( "e1.d3",        0x00000, 0x08000, CRC(ce96e106) SHA1(5ef1f221618abd757e02db79c3d7016100f30c07) )    /* empty */
1902 	ROM_CONTINUE(             0x00000, 0x08000 )
1903 
1904 	ROM_REGION( 0x08000, "tx", 0 ) /* chars */
1905 	ROM_LOAD( "2.j4",         0x00000, 0x08000, CRC(83eb572c) SHA1(e915afd55d505bce202206c9ecfa89bad561ef6c) )    /* empty */
1906 	ROM_CONTINUE(             0x00000, 0x08000 )
1907 
1908 	ROM_REGION16_BE( 0x40000, "sprite", 0 )    /* sprites */
1909 	ROM_LOAD16_BYTE( "16.d14",   0x00000, 0x20000, CRC(df503504) SHA1(daa58a7bc24415b5f59b7c7cc918bc85de9702a3) )
1910 	ROM_LOAD16_BYTE( "15.a14",   0x00001, 0x20000, CRC(cd990442) SHA1(891b2163db23ab0bb40cbadce6e06fc067d0532f) )
1911 
1912 	ROM_REGION16_BE( 0x80000, "bg0", 0 )    /* tiles */
1913 	ROM_LOAD16_BYTE( "e6.s9",    0x00000, 0x20000, CRC(7623c443) SHA1(abfed648a8cc438dbb7de9c23a663082667ca366) )
1914 	ROM_LOAD16_BYTE( "e9.s11",   0x00001, 0x20000, CRC(717f6a0e) SHA1(0b2d98fa5b8734210df18bce7725972fd42a6e4a) )
1915 	ROM_LOAD16_BYTE( "7.u9",     0x40000, 0x20000, CRC(6e57a888) SHA1(8efe876ea3c788b83e8291f7fc6f55b90de158c8) )
1916 	ROM_LOAD16_BYTE( "10.u11",   0x40001, 0x20000, CRC(a5548dca) SHA1(9914e01c1739c3bfd868a01e53c9030726ced4ea) )
1917 
1918 	ROM_REGION16_BE( 0x40000, "fg0", 0 )    /* tiles */
1919 	ROM_LOAD16_BYTE( "12.s13",   0x00000, 0x20000, CRC(992bc4af) SHA1(94570ebd1ee6acf1871cf914907acd12dca4026e) )
1920 	ROM_LOAD16_BYTE( "14.s14",   0x00001, 0x20000, CRC(a79abc85) SHA1(3e63dad11db9b7420331403a1d551d8c041c4cc2) )
1921 
1922 	ROM_REGION16_BE( 0x20000, "bg0_tmap", 0 )    /* bg tilemaps */
1923 	ROM_LOAD16_BYTE( "e5.r9",    0x00000, 0x10000, CRC(5f801410) SHA1(382c1bcd69a6a5c245d2ba7603bc273fba840c8f) )
1924 	ROM_LOAD16_BYTE( "e8.r11",   0x00001, 0x10000, CRC(a7b8250b) SHA1(4bd79c09dacf69e1993353d7fcc7746d1324e9b0) )
1925 
1926 	ROM_REGION16_BE( 0x20000, "fg0_tmap", 0 )    /* fg tilemaps */
1927 	ROM_LOAD16_BYTE( "11.r13",   0x00000, 0x10000, CRC(04b961de) SHA1(7a94c9d0800d79048660cf3758708a346ead33f9) )
1928 	ROM_LOAD16_BYTE( "13.r14",   0x00001, 0x10000, CRC(6bdbd887) SHA1(a54f26f9ddd72b8b8f7a030610c1c4a5f94a3358) )
1929 ROM_END
1930 
1931 ROM_START( ddaydoo ) /* 90030003 PCB */
1932 	ROM_REGION( 0x20000, "maincpu", 0 ) /* 64k for code + 128k for banks */
1933 	ROM_LOAD( "3.s5",    0x00000, 0x10000, CRC(7817d4f3) SHA1(b85db234c04f248fd2927a2224380783780673f5)) /* closest to 'lastday' set */
1934 	ROM_LOAD( "4.u5",    0x10000, 0x10000, CRC(70961ea6) SHA1(245d3da67abb4a511a024f030de461b9a2b4804e) )  /* banked at 0x8000-0xbfff */
1935 
1936 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound */
1937 	ROM_LOAD( "1.d3",    0x00000, 0x08000, CRC(dd4316fd) SHA1(496e6657bb76d91f488a2464d1af1be095ab9105) )    /* empty */
1938 	ROM_CONTINUE(        0x00000, 0x08000 )
1939 
1940 	ROM_REGION( 0x08000, "tx", 0 ) /* chars */
1941 	ROM_LOAD( "2.j4",    0x00000, 0x08000, CRC(83eb572c) SHA1(e915afd55d505bce202206c9ecfa89bad561ef6c) )    /* empty */
1942 	ROM_CONTINUE(        0x00000, 0x08000 )
1943 
1944 	ROM_REGION16_BE( 0x40000, "sprite", 0 )    /* sprites */
1945 	ROM_LOAD16_BYTE( "16.d14",   0x00000, 0x20000, CRC(df503504) SHA1(daa58a7bc24415b5f59b7c7cc918bc85de9702a3) )
1946 	ROM_LOAD16_BYTE( "15.a14",   0x00001, 0x20000, CRC(cd990442) SHA1(891b2163db23ab0bb40cbadce6e06fc067d0532f) )
1947 
1948 	ROM_REGION16_BE( 0x80000, "bg0", 0 )    /* tiles */
1949 	ROM_LOAD16_BYTE( "6.s9",     0x00000, 0x20000, CRC(1054361d) SHA1(52566786ca8177404be8b66fd7de94ac25fc49ea) )
1950 	ROM_LOAD16_BYTE( "9.s11",    0x00001, 0x20000, CRC(6952ef4d) SHA1(b4e5ec02e97df213fe0bd4cd8a2ca77d7ecf8ad5) )
1951 	ROM_LOAD16_BYTE( "7.u9",     0x40000, 0x20000, CRC(6e57a888) SHA1(8efe876ea3c788b83e8291f7fc6f55b90de158c8) )
1952 	ROM_LOAD16_BYTE( "10.u11",   0x40001, 0x20000, CRC(a5548dca) SHA1(9914e01c1739c3bfd868a01e53c9030726ced4ea) )
1953 
1954 	ROM_REGION16_BE( 0x40000, "fg0", 0 )    /* tiles */
1955 	ROM_LOAD16_BYTE( "12.s13",   0x00000, 0x20000, CRC(992bc4af) SHA1(94570ebd1ee6acf1871cf914907acd12dca4026e) )
1956 	ROM_LOAD16_BYTE( "14.s14",   0x00001, 0x20000, CRC(a79abc85) SHA1(3e63dad11db9b7420331403a1d551d8c041c4cc2) )
1957 
1958 	ROM_REGION16_BE( 0x20000, "bg0_tmap", 0 )    /* background tilemaps */
1959 	ROM_LOAD16_BYTE( "5.r9",     0x00000, 0x10000, CRC(4789bae8) SHA1(6ffecc16eb8c9c783b02c4ef68cb5098b01fafef) )
1960 	ROM_LOAD16_BYTE( "8.r11",    0x00001, 0x10000, CRC(92402b9a) SHA1(2ca8078d2687afbe7b6fc5412de16c6fbc11a650) )
1961 
1962 	ROM_REGION16_BE( 0x20000, "fg0_tmap", 0 )    /* fg tilemaps */
1963 	ROM_LOAD16_BYTE( "11.r13",   0x00000, 0x10000, CRC(04b961de) SHA1(7a94c9d0800d79048660cf3758708a346ead33f9) )
1964 	ROM_LOAD16_BYTE( "13.r14",   0x00001, 0x10000, CRC(6bdbd887) SHA1(a54f26f9ddd72b8b8f7a030610c1c4a5f94a3358) )
1965 ROM_END
1966 
1967 ROM_START( gulfstrm )
1968 	ROM_REGION( 0x20000, "maincpu", 0 ) /* 64k for code + 128k for banks */
1969 	ROM_LOAD( "1.l4",         0x00000, 0x20000, CRC(59e0478b) SHA1(dd6e48c6e91ddb087d20336eab79bbadd968d4b1) )
1970 
1971 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound */
1972 	ROM_LOAD( "3.c5",         0x00000, 0x10000, CRC(c029b015) SHA1(86f8d4f6560cb99e25e8e8baf72dde743a7b9c4c) )
1973 
1974 	ROM_REGION( 0x08000, "tx", 0 ) /* chars */
1975 	ROM_LOAD( "2.s4",         0x00000, 0x08000, CRC(c2d65a25) SHA1(a198b42c0737b253aca5bab6fb58ab561ccc1d5c) )    /* empty */
1976 	ROM_CONTINUE(             0x00000, 0x08000 )
1977 
1978 	ROM_REGION16_BE( 0x80000, "sprite", 0 )    /* sprites */
1979 	ROM_LOAD16_BYTE( "14.b1",        0x00000, 0x20000, CRC(67bdf73d) SHA1(3e357448b6f255fdec731f143afa3d3149523ed2) )
1980 	ROM_LOAD16_BYTE( "16.c1",        0x00001, 0x20000, CRC(7770a76f) SHA1(4f9f5245f59008b26ed60e636285ea85271744e7) )
1981 	ROM_LOAD16_BYTE( "15.b1",        0x40000, 0x20000, CRC(84803f7e) SHA1(74b694c0d20c5b016b9d7258b0296229972151d5) )
1982 	ROM_LOAD16_BYTE( "17.e1",        0x40001, 0x20000, CRC(94706500) SHA1(8f4a6f7ce20b1b50577271601c2c2632b5a2292c) )
1983 
1984 	ROM_REGION16_BE( 0x80000, "bg0", 0 )    /* tiles */
1985 	ROM_LOAD16_BYTE( "4.d8",         0x00000, 0x20000, CRC(858fdbb6) SHA1(4c317ab6069a8509287d3df88cf4272f512a40a3) )
1986 	ROM_LOAD16_BYTE( "5.b9",         0x00001, 0x20000, CRC(c0a552e8) SHA1(31dcb14eb8815c609b0bf4d5f1ea17b26ab18aec) )
1987 	ROM_LOAD16_BYTE( "6.d8",         0x40000, 0x20000, CRC(20eedda3) SHA1(8c8b1284e07f5380037f8431f2649aa99fd47542) )
1988 	ROM_LOAD16_BYTE( "7.d9",         0x40001, 0x20000, CRC(294f8c40) SHA1(b7afb87510ab52682151ff2b13029427487589ec) )
1989 
1990 	ROM_REGION16_BE( 0x40000, "fg0", 0 )    /* tiles */
1991 	ROM_LOAD16_BYTE( "12.r8",        0x00000, 0x20000, CRC(ec3ad3e7) SHA1(276da309b788091cd6e5faada2ff9e5b0df2caea) )
1992 	ROM_LOAD16_BYTE( "13.r9",        0x00001, 0x20000, CRC(c64090cb) SHA1(5dab576e5f454c62c7826d477b3f699e979753ad) )
1993 
1994 	ROM_REGION16_BE( 0x20000, "bg0_tmap", 0 )    /* background tilemaps */
1995 	ROM_LOAD16_BYTE( "8.e8",         0x00000, 0x10000, CRC(8d7f4693) SHA1(a7c8573d9e54c8230decc3e88f76ae729d77b096) )
1996 	ROM_LOAD16_BYTE( "9.e9",         0x00001, 0x10000, CRC(34d440c4) SHA1(74b0e15e75f62106177234b6ea54a5d312628802) )
1997 
1998 	ROM_REGION16_BE( 0x20000, "fg0_tmap", 0 )    /* fg tilemaps */
1999 	ROM_LOAD16_BYTE( "10.n8",        0x00000, 0x10000, CRC(b4f15bf4) SHA1(cb203390c3f917f213807a23c442e43bc6bcfc67) )
2000 	ROM_LOAD16_BYTE( "11.n9",        0x00001, 0x10000, CRC(7dfe4a9c) SHA1(40982b5b266e4a928544ab5ec330080935588c57) )
2001 ROM_END
2002 
2003 ROM_START( gulfstrma )
2004 	ROM_REGION( 0x20000, "maincpu", 0 ) /* 64k for code + 128k for banks */
2005 	ROM_LOAD( "1.bin",       0x00000, 0x20000, CRC(d04fb06b) SHA1(bdf09ab692f90e3dea815605998f75b6478c8047) )
2006 
2007 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound */
2008 	ROM_LOAD( "3.c5",         0x00000, 0x10000, CRC(c029b015) SHA1(86f8d4f6560cb99e25e8e8baf72dde743a7b9c4c) )
2009 
2010 	ROM_REGION( 0x08000, "tx", 0 ) /* chars */
2011 	ROM_LOAD( "2.s4",         0x00000, 0x08000, CRC(c2d65a25) SHA1(a198b42c0737b253aca5bab6fb58ab561ccc1d5c) )    /* empty */
2012 	ROM_CONTINUE(             0x00000, 0x08000 )
2013 
2014 	ROM_REGION16_BE( 0x80000, "sprite", 0 )    /* sprites */
2015 	ROM_LOAD16_BYTE( "14.b1",        0x00000, 0x20000, CRC(67bdf73d) SHA1(3e357448b6f255fdec731f143afa3d3149523ed2) )
2016 	ROM_LOAD16_BYTE( "16.c1",        0x00001, 0x20000, CRC(7770a76f) SHA1(4f9f5245f59008b26ed60e636285ea85271744e7) )
2017 	ROM_LOAD16_BYTE( "15.b1",        0x40000, 0x20000, CRC(84803f7e) SHA1(74b694c0d20c5b016b9d7258b0296229972151d5) )
2018 	ROM_LOAD16_BYTE( "17.e1",        0x40001, 0x20000, CRC(94706500) SHA1(8f4a6f7ce20b1b50577271601c2c2632b5a2292c) )
2019 
2020 	ROM_REGION16_BE( 0x80000, "bg0", 0 )    /* tiles */
2021 	ROM_LOAD16_BYTE( "4.d8",         0x00000, 0x20000, CRC(858fdbb6) SHA1(4c317ab6069a8509287d3df88cf4272f512a40a3) )
2022 	ROM_LOAD16_BYTE( "5.b9",         0x00001, 0x20000, CRC(c0a552e8) SHA1(31dcb14eb8815c609b0bf4d5f1ea17b26ab18aec) )
2023 	ROM_LOAD16_BYTE( "6.d8",         0x40000, 0x20000, CRC(20eedda3) SHA1(8c8b1284e07f5380037f8431f2649aa99fd47542) )
2024 	ROM_LOAD16_BYTE( "7.d9",         0x40001, 0x20000, CRC(294f8c40) SHA1(b7afb87510ab52682151ff2b13029427487589ec) )
2025 
2026 	ROM_REGION16_BE( 0x40000, "fg0", 0 )    /* tiles */
2027 	ROM_LOAD16_BYTE( "12.bin",       0x00000, 0x20000, CRC(3e3d3b57) SHA1(398a6cac7144ba7bacaa36c593bcb4b3c051eb0f) )
2028 	ROM_LOAD16_BYTE( "13.bin",       0x00001, 0x20000, CRC(66fcce80) SHA1(6ab2b7cd49447d374cde40b98db0a6209dcad461) )
2029 
2030 	ROM_REGION16_BE( 0x20000, "bg0_tmap", 0 )    /* background tilemaps */
2031 	ROM_LOAD16_BYTE( "8.e8",         0x00000, 0x10000, CRC(8d7f4693) SHA1(a7c8573d9e54c8230decc3e88f76ae729d77b096) )
2032 	ROM_LOAD16_BYTE( "9.e9",         0x00001, 0x10000, CRC(34d440c4) SHA1(74b0e15e75f62106177234b6ea54a5d312628802) )
2033 
2034 	ROM_REGION16_BE( 0x20000, "fg0_tmap", 0 )    /* fg tilemaps */
2035 	ROM_LOAD16_BYTE( "10.bin",       0x00000, 0x10000, CRC(08149140) SHA1(ff0094883ca0fc81bae991d6ea62d0064d6f7c47) )
2036 	ROM_LOAD16_BYTE( "11.bin",       0x00001, 0x10000, CRC(2ed7545b) SHA1(6a70743bbb03ef694310f2b5531f384209db62a1) )
2037 ROM_END
2038 
2039 ROM_START( gulfstrmb )
2040 	ROM_REGION( 0x20000, "maincpu", 0 ) /* 64k for code + 128k for banks */
2041 	ROM_LOAD( "1.l4",        0x00000, 0x20000, CRC(aabd95a5) SHA1(f1d3ade952e96b288e2cd4b172931862b16b4af9) ) // sldh
2042 
2043 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound */
2044 	ROM_LOAD( "3.c5",         0x00000, 0x10000, CRC(c029b015) SHA1(86f8d4f6560cb99e25e8e8baf72dde743a7b9c4c) )
2045 
2046 	ROM_REGION( 0x08000, "tx", 0 ) /* chars */
2047 	ROM_LOAD( "2.s4",         0x00000, 0x08000, CRC(c2d65a25) SHA1(a198b42c0737b253aca5bab6fb58ab561ccc1d5c) )    /* empty */
2048 	ROM_CONTINUE(             0x00000, 0x08000 )
2049 
2050 	ROM_REGION16_BE( 0x80000, "sprite", 0 )    /* sprites */
2051 	ROM_LOAD16_BYTE( "14.b1",        0x00000, 0x20000, CRC(67bdf73d) SHA1(3e357448b6f255fdec731f143afa3d3149523ed2) )
2052 	ROM_LOAD16_BYTE( "16.c1",        0x00001, 0x20000, CRC(7770a76f) SHA1(4f9f5245f59008b26ed60e636285ea85271744e7) )
2053 	ROM_LOAD16_BYTE( "15.b1",        0x40000, 0x20000, CRC(84803f7e) SHA1(74b694c0d20c5b016b9d7258b0296229972151d5) )
2054 	ROM_LOAD16_BYTE( "17.e1",        0x40001, 0x20000, CRC(94706500) SHA1(8f4a6f7ce20b1b50577271601c2c2632b5a2292c) )
2055 
2056 	ROM_REGION16_BE( 0x80000, "bg0", 0 )    /* tiles */
2057 	ROM_LOAD16_BYTE( "4.d8",         0x00000, 0x20000, CRC(858fdbb6) SHA1(4c317ab6069a8509287d3df88cf4272f512a40a3) )
2058 	ROM_LOAD16_BYTE( "5.b9",         0x00001, 0x20000, CRC(c0a552e8) SHA1(31dcb14eb8815c609b0bf4d5f1ea17b26ab18aec) )
2059 	ROM_LOAD16_BYTE( "6.d8",         0x40000, 0x20000, CRC(20eedda3) SHA1(8c8b1284e07f5380037f8431f2649aa99fd47542) )
2060 	ROM_LOAD16_BYTE( "7.d9",         0x40001, 0x20000, CRC(294f8c40) SHA1(b7afb87510ab52682151ff2b13029427487589ec) )
2061 
2062 	ROM_REGION16_BE( 0x40000, "fg0", 0 )    /* tiles */
2063 	ROM_LOAD16_BYTE( "12.bin",       0x00000, 0x20000, CRC(3e3d3b57) SHA1(398a6cac7144ba7bacaa36c593bcb4b3c051eb0f) )
2064 	ROM_LOAD16_BYTE( "13.bin",       0x00001, 0x20000, CRC(66fcce80) SHA1(6ab2b7cd49447d374cde40b98db0a6209dcad461) )
2065 
2066 	ROM_REGION16_BE( 0x20000, "bg0_tmap", 0 )    /* background tilemaps */
2067 	ROM_LOAD16_BYTE( "8.e8",         0x00000, 0x10000, CRC(8d7f4693) SHA1(a7c8573d9e54c8230decc3e88f76ae729d77b096) )
2068 	ROM_LOAD16_BYTE( "9.e9",         0x00001, 0x10000, CRC(34d440c4) SHA1(74b0e15e75f62106177234b6ea54a5d312628802) )
2069 
2070 	ROM_REGION16_BE( 0x20000, "fg0_tmap", 0 )    /* fg tilemaps */
2071 	ROM_LOAD16_BYTE( "10.bin",       0x00000, 0x10000, CRC(08149140) SHA1(ff0094883ca0fc81bae991d6ea62d0064d6f7c47) )
2072 	ROM_LOAD16_BYTE( "11.bin",       0x00001, 0x10000, CRC(2ed7545b) SHA1(6a70743bbb03ef694310f2b5531f384209db62a1) )
2073 ROM_END
2074 
2075 ROM_START( gulfstrmm )
2076 	ROM_REGION( 0x20000, "maincpu", 0 ) /* 64k for code + 128k for banks */
2077 	ROM_LOAD( "18.l4",        0x00000, 0x20000, CRC(d38e2667) SHA1(3690d708c7be85871d6bb32a774d711a30782126) )
2078 
2079 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound */
2080 	ROM_LOAD( "3.c5",         0x00000, 0x10000, CRC(c029b015) SHA1(86f8d4f6560cb99e25e8e8baf72dde743a7b9c4c) )
2081 
2082 	ROM_REGION( 0x08000, "tx", 0 ) /* chars */
2083 	ROM_LOAD( "2.bin",        0x00000, 0x08000, CRC(cb555d96) SHA1(ebc1dee91a09a829db2ae6fc1616c7c989f7f1c2) )    /* empty */
2084 	ROM_CONTINUE(             0x00000, 0x08000 )
2085 
2086 	ROM_REGION16_BE( 0x80000, "sprite", 0 )    /* sprites */
2087 	ROM_LOAD16_BYTE( "14.b1",        0x00000, 0x20000, CRC(67bdf73d) SHA1(3e357448b6f255fdec731f143afa3d3149523ed2) )
2088 	ROM_LOAD16_BYTE( "16.c1",        0x00001, 0x20000, CRC(7770a76f) SHA1(4f9f5245f59008b26ed60e636285ea85271744e7) )
2089 	ROM_LOAD16_BYTE( "15.b1",        0x40000, 0x20000, CRC(84803f7e) SHA1(74b694c0d20c5b016b9d7258b0296229972151d5) )
2090 	ROM_LOAD16_BYTE( "17.e1",        0x40001, 0x20000, CRC(94706500) SHA1(8f4a6f7ce20b1b50577271601c2c2632b5a2292c) )
2091 
2092 	ROM_REGION16_BE( 0x80000, "bg0", 0 )    /* tiles */
2093 	ROM_LOAD16_BYTE( "4.d8",         0x00000, 0x20000, CRC(858fdbb6) SHA1(4c317ab6069a8509287d3df88cf4272f512a40a3) )
2094 	ROM_LOAD16_BYTE( "5.b9",         0x00001, 0x20000, CRC(c0a552e8) SHA1(31dcb14eb8815c609b0bf4d5f1ea17b26ab18aec) )
2095 	ROM_LOAD16_BYTE( "6.d8",         0x40000, 0x20000, CRC(20eedda3) SHA1(8c8b1284e07f5380037f8431f2649aa99fd47542) )
2096 	ROM_LOAD16_BYTE( "7.d9",         0x40001, 0x20000, CRC(294f8c40) SHA1(b7afb87510ab52682151ff2b13029427487589ec) )
2097 
2098 	ROM_REGION16_BE( 0x40000, "fg0", 0 )    /* tiles */
2099 	ROM_LOAD16_BYTE( "12.bin",       0x00000, 0x20000, CRC(3e3d3b57) SHA1(398a6cac7144ba7bacaa36c593bcb4b3c051eb0f) )
2100 	ROM_LOAD16_BYTE( "13.bin",       0x00001, 0x20000, CRC(66fcce80) SHA1(6ab2b7cd49447d374cde40b98db0a6209dcad461) )
2101 
2102 	ROM_REGION16_BE( 0x20000, "bg0_tmap", 0 )    /* background tilemaps */
2103 	ROM_LOAD16_BYTE( "8.e8",         0x00000, 0x10000, CRC(8d7f4693) SHA1(a7c8573d9e54c8230decc3e88f76ae729d77b096) )
2104 	ROM_LOAD16_BYTE( "9.e9",         0x00001, 0x10000, CRC(34d440c4) SHA1(74b0e15e75f62106177234b6ea54a5d312628802) )
2105 
2106 	ROM_REGION16_BE( 0x20000, "fg0_tmap", 0 )    /* fg tilemaps */
2107 	ROM_LOAD16_BYTE( "10.bin",       0x00000, 0x10000, CRC(08149140) SHA1(ff0094883ca0fc81bae991d6ea62d0064d6f7c47) )
2108 	ROM_LOAD16_BYTE( "11.bin",       0x00001, 0x10000, CRC(2ed7545b) SHA1(6a70743bbb03ef694310f2b5531f384209db62a1) )
2109 ROM_END
2110 
2111 ROM_START( gulfstrmk )
2112 	ROM_REGION( 0x20000, "maincpu", 0 ) /* 64k for code + 128k for banks */
2113 	ROM_LOAD( "18.4l",        0x00000, 0x20000, CRC(02bcf56d) SHA1(7f13710e9291ca6afd1a534489883607eee4e35a) )
2114 
2115 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound */
2116 	ROM_LOAD( "3.c5",         0x00000, 0x10000, CRC(c029b015) SHA1(86f8d4f6560cb99e25e8e8baf72dde743a7b9c4c) )
2117 
2118 	ROM_REGION( 0x08000, "tx", 0 ) /* chars */
2119 	ROM_LOAD( "2.bin",        0x00000, 0x08000, CRC(cb555d96) SHA1(ebc1dee91a09a829db2ae6fc1616c7c989f7f1c2) )    /* empty */
2120 	ROM_CONTINUE(             0x00000, 0x08000 )
2121 
2122 	ROM_REGION16_BE( 0x80000, "sprite", 0 )    /* sprites */
2123 	ROM_LOAD16_BYTE( "14.b1",        0x00000, 0x20000, CRC(67bdf73d) SHA1(3e357448b6f255fdec731f143afa3d3149523ed2) )
2124 	ROM_LOAD16_BYTE( "16.c1",        0x00001, 0x20000, CRC(7770a76f) SHA1(4f9f5245f59008b26ed60e636285ea85271744e7) )
2125 	ROM_LOAD16_BYTE( "15.b1",        0x40000, 0x20000, CRC(84803f7e) SHA1(74b694c0d20c5b016b9d7258b0296229972151d5) )
2126 	ROM_LOAD16_BYTE( "17.e1",        0x40001, 0x20000, CRC(94706500) SHA1(8f4a6f7ce20b1b50577271601c2c2632b5a2292c) )
2127 
2128 	ROM_REGION16_BE( 0x80000, "bg0", 0 )    /* tiles */
2129 	ROM_LOAD16_BYTE( "4.d8",         0x00000, 0x20000, CRC(858fdbb6) SHA1(4c317ab6069a8509287d3df88cf4272f512a40a3) )
2130 	ROM_LOAD16_BYTE( "5.b9",         0x00001, 0x20000, CRC(c0a552e8) SHA1(31dcb14eb8815c609b0bf4d5f1ea17b26ab18aec) )
2131 	ROM_LOAD16_BYTE( "6.d8",         0x40000, 0x20000, CRC(20eedda3) SHA1(8c8b1284e07f5380037f8431f2649aa99fd47542) )
2132 	ROM_LOAD16_BYTE( "7.d9",         0x40001, 0x20000, CRC(294f8c40) SHA1(b7afb87510ab52682151ff2b13029427487589ec) )
2133 
2134 	ROM_REGION16_BE( 0x40000, "fg0", 0 )    /* tiles */
2135 	ROM_LOAD16_BYTE( "12.bin",       0x00000, 0x20000, CRC(3e3d3b57) SHA1(398a6cac7144ba7bacaa36c593bcb4b3c051eb0f) )
2136 	ROM_LOAD16_BYTE( "13.bin",       0x00001, 0x20000, CRC(66fcce80) SHA1(6ab2b7cd49447d374cde40b98db0a6209dcad461) )
2137 
2138 	ROM_REGION16_BE( 0x20000, "bg0_tmap", 0 )    /* background tilemaps */
2139 	ROM_LOAD16_BYTE( "8.e8",         0x00000, 0x10000, CRC(8d7f4693) SHA1(a7c8573d9e54c8230decc3e88f76ae729d77b096) )
2140 	ROM_LOAD16_BYTE( "9.e9",         0x00001, 0x10000, CRC(34d440c4) SHA1(74b0e15e75f62106177234b6ea54a5d312628802) )
2141 
2142 	ROM_REGION16_BE( 0x20000, "fg0_tmap", 0 )    /* fg tilemaps */
2143 	ROM_LOAD16_BYTE( "10.bin",       0x00000, 0x10000, CRC(08149140) SHA1(ff0094883ca0fc81bae991d6ea62d0064d6f7c47) )
2144 	ROM_LOAD16_BYTE( "11.bin",       0x00001, 0x10000, CRC(2ed7545b) SHA1(6a70743bbb03ef694310f2b5531f384209db62a1) )
2145 ROM_END
2146 
2147 ROM_START( pollux )
2148 	ROM_REGION( 0x20000, "maincpu", 0 ) /* 64k for code + 128k for banks */
2149 	ROM_LOAD( "pollux2.bin",  0x00000, 0x10000, CRC(45e10d4e) SHA1(ece25fcc0acda9a8cfc00f3132a87469037b5a4e) )
2150 
2151 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound */
2152 	ROM_LOAD( "pollux3.bin",  0x00000, 0x10000, CRC(85a9dc98) SHA1(a349bfb05d870ba920469066ce5c007363aca348) )
2153 
2154 	ROM_REGION( 0x10000, "tx", 0 )    /* chars */
2155 	ROM_LOAD( "pollux1.bin",  0x08000, 0x08000, CRC(7f7135da) SHA1(0f77841e52b3d7e731d5142fba9ed5cd57343305) )
2156 	ROM_CONTINUE(             0x00000, 0x08000 )
2157 
2158 	ROM_REGION16_BE( 0x80000, "sprite", 0 )    /* sprites */
2159 	ROM_LOAD16_WORD_SWAP( "dy-pl-m2_be023.bin", 0x00000, 0x80000, CRC(bdea6f7d) SHA1(b418710a6d12aa53037acf7bbec85a26dfac9ebe) )
2160 
2161 	ROM_REGION16_BE( 0x80000, "bg0", 0 )    /* tiles */
2162 	ROM_LOAD16_WORD_SWAP( "dy-pl-m1_be015.bin", 0x00000, 0x80000, CRC(1d2dedd2) SHA1(9bcb1c80f05eabbca2c0738e409d3cadfc14b0c8) )
2163 
2164 	ROM_REGION16_BE( 0x80000, "fg0", 0 )    /* tiles */
2165 	ROM_LOAD16_BYTE( "pollux6.bin",  0x00000, 0x20000, CRC(b0391db5) SHA1(0c522c5074dc7c0a639ebfb7b9a9eddc90314081) )
2166 	ROM_LOAD16_BYTE( "pollux7.bin",  0x00001, 0x20000, CRC(632f6e10) SHA1(a3605cbe7a9dc04cd8c1ab50110f72d93c78208b) )
2167 	ROM_FILL(                        0x40000, 0x40000, 0xff )
2168 
2169 	ROM_REGION16_BE( 0x20000, "bg0_tmap", 0 )    /* bg tilemaps */
2170 	ROM_LOAD16_BYTE( "pollux9.bin",  0x00000, 0x10000, CRC(378d8914) SHA1(ef95903971673bc26774fe2aff17e1581a7f0eb9) )
2171 	ROM_LOAD16_BYTE( "pollux8.bin",  0x00001, 0x10000, CRC(8859fa70) SHA1(7b1b9edde3f762c7ae1f0b847aa17e30140e9ffa) )
2172 
2173 	ROM_REGION16_BE( 0x20000, "fg0_tmap", 0 )    /* fg tilemaps */
2174 	ROM_LOAD16_BYTE( "pollux5.bin",  0x00000, 0x10000, CRC(ac090d34) SHA1(6b554450d8d46165e25fd6f12ab4c4b9b63dcd35) )
2175 	ROM_LOAD16_BYTE( "pollux4.bin",  0x00001, 0x10000, CRC(2c6bd3be) SHA1(6648264be83588a01f264e7ec72d84e29e0d4795) )
2176 ROM_END
2177 
2178 ROM_START( polluxa )
2179 	ROM_REGION( 0x20000, "maincpu", 0 ) /* 64k for code + 128k for banks */
2180 	ROM_LOAD( "dooyong2.bin",  0x00000, 0x10000, CRC(e4ea8dbd) SHA1(19652261981672fae896e3065f1f5078f7ae93b6) )
2181 
2182 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound */
2183 	ROM_LOAD( "pollux3.bin",  0x00000, 0x10000, CRC(85a9dc98) SHA1(a349bfb05d870ba920469066ce5c007363aca348) )
2184 
2185 	ROM_REGION( 0x10000, "tx", 0 )    /* chars */
2186 	ROM_LOAD( "dooyong1.bin",  0x08000, 0x08000, CRC(a7d820b2) SHA1(bbcc3690f91a4bd4f0cff5da25cbfeceb7a19437) )
2187 	ROM_CONTINUE(              0x00000, 0x08000 )
2188 
2189 	ROM_REGION16_BE( 0x80000, "sprite", 0 )    /* sprites */
2190 	ROM_LOAD16_WORD_SWAP( "dy-pl-m2_be023.bin", 0x00000, 0x80000, CRC(bdea6f7d) SHA1(b418710a6d12aa53037acf7bbec85a26dfac9ebe) )
2191 
2192 	ROM_REGION16_BE( 0x80000, "bg0", 0 )    /* tiles */
2193 	ROM_LOAD16_WORD_SWAP( "dy-pl-m1_be015.bin", 0x00000, 0x80000, CRC(1d2dedd2) SHA1(9bcb1c80f05eabbca2c0738e409d3cadfc14b0c8) )
2194 
2195 	ROM_REGION16_BE( 0x80000, "fg0", 0 )    /* tiles */
2196 	ROM_LOAD16_BYTE( "pollux6.bin",  0x00000, 0x20000, CRC(b0391db5) SHA1(0c522c5074dc7c0a639ebfb7b9a9eddc90314081) )
2197 	ROM_LOAD16_BYTE( "pollux7.bin",  0x00001, 0x20000, CRC(632f6e10) SHA1(a3605cbe7a9dc04cd8c1ab50110f72d93c78208b) )
2198 	ROM_FILL(                        0x40000, 0x40000, 0xff )
2199 
2200 	ROM_REGION16_BE( 0x20000, "bg0_tmap", 0 )    /* bg tilemaps */
2201 	ROM_LOAD16_BYTE( "pollux9.bin",  0x00000, 0x10000, CRC(378d8914) SHA1(ef95903971673bc26774fe2aff17e1581a7f0eb9) )
2202 	ROM_LOAD16_BYTE( "pollux8.bin",  0x00001, 0x10000, CRC(8859fa70) SHA1(7b1b9edde3f762c7ae1f0b847aa17e30140e9ffa) )
2203 
2204 	ROM_REGION16_BE( 0x20000, "fg0_tmap", 0 )    /* fg tilemaps */
2205 	ROM_LOAD16_BYTE( "pollux5.bin",  0x00000, 0x10000, CRC(ac090d34) SHA1(6b554450d8d46165e25fd6f12ab4c4b9b63dcd35) )
2206 	ROM_LOAD16_BYTE( "pollux4.bin",  0x00001, 0x10000, CRC(2c6bd3be) SHA1(6648264be83588a01f264e7ec72d84e29e0d4795) )
2207 ROM_END
2208 
2209 ROM_START( polluxa2 )
2210 	ROM_REGION( 0x20000, "maincpu", 0 ) /* 64k for code + 128k for banks */
2211 	ROM_LOAD( "dooyong16_tms27c512.bin",  0x00000, 0x10000, CRC(dffe5173) SHA1(fec9b8198ae8a1b7c9b798b9317ed6d986c11e35) )
2212 
2213 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound */
2214 	ROM_LOAD( "pollux3.bin",  0x00000, 0x10000, CRC(85a9dc98) SHA1(a349bfb05d870ba920469066ce5c007363aca348) )
2215 
2216 	ROM_REGION( 0x10000, "tx", 0 )    /* chars */
2217 	ROM_LOAD( "dooyong1.bin",  0x08000, 0x08000, CRC(a7d820b2) SHA1(bbcc3690f91a4bd4f0cff5da25cbfeceb7a19437) )
2218 	ROM_CONTINUE(              0x00000, 0x08000 )
2219 
2220 	ROM_REGION16_BE( 0x80000, "sprite", 0 )    /* sprites */
2221 	ROM_LOAD16_WORD_SWAP( "dy-pl-m2_be023.bin", 0x00000, 0x80000, CRC(bdea6f7d) SHA1(b418710a6d12aa53037acf7bbec85a26dfac9ebe) )
2222 
2223 	ROM_REGION16_BE( 0x80000, "bg0", 0 )    /* tiles */
2224 	ROM_LOAD16_WORD_SWAP( "dy-pl-m1_be015.bin", 0x00000, 0x80000, CRC(1d2dedd2) SHA1(9bcb1c80f05eabbca2c0738e409d3cadfc14b0c8) )
2225 
2226 	ROM_REGION16_BE( 0x80000, "fg0", 0 )    /* tiles */
2227 	ROM_LOAD16_BYTE( "pollux6.bin",  0x00000, 0x20000, CRC(b0391db5) SHA1(0c522c5074dc7c0a639ebfb7b9a9eddc90314081) )
2228 	ROM_LOAD16_BYTE( "pollux7.bin",  0x00001, 0x20000, CRC(632f6e10) SHA1(a3605cbe7a9dc04cd8c1ab50110f72d93c78208b) )
2229 	ROM_FILL(                        0x40000, 0x40000, 0xff )
2230 
2231 	ROM_REGION16_BE( 0x20000, "bg0_tmap", 0 )    /* bg tilemaps */
2232 	ROM_LOAD16_BYTE( "pollux9.bin",  0x00000, 0x10000, CRC(378d8914) SHA1(ef95903971673bc26774fe2aff17e1581a7f0eb9) )
2233 	ROM_LOAD16_BYTE( "pollux8.bin",  0x00001, 0x10000, CRC(8859fa70) SHA1(7b1b9edde3f762c7ae1f0b847aa17e30140e9ffa) )
2234 
2235 	ROM_REGION16_BE( 0x20000, "fg0_tmap", 0 )    /* fg tilemaps */
2236 	ROM_LOAD16_BYTE( "pollux5.bin",  0x00000, 0x10000, CRC(ac090d34) SHA1(6b554450d8d46165e25fd6f12ab4c4b9b63dcd35) )
2237 	ROM_LOAD16_BYTE( "pollux4.bin",  0x00001, 0x10000, CRC(2c6bd3be) SHA1(6648264be83588a01f264e7ec72d84e29e0d4795) )
2238 ROM_END
2239 
2240 ROM_START( polluxn )
2241 	ROM_REGION( 0x20000, "maincpu", 0 ) /* 64k for code + 128k for banks */
2242 	ROM_LOAD( "polluxntc_2.3g",  0x00000, 0x10000, CRC(96d3e3af) SHA1(fc0e7a60bee0ed74c28d403a97a852eb677f8189) )
2243 
2244 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound */
2245 	ROM_LOAD( "polluxntc_3.6t",  0x00000, 0x10000, CRC(85a9dc98) SHA1(a349bfb05d870ba920469066ce5c007363aca348) )
2246 
2247 	ROM_REGION( 0x10000, "tx", 0 )    /* chars */
2248 	ROM_LOAD( "polluxntc_1.3r",  0x08000, 0x08000, CRC(7f7135da) SHA1(0f77841e52b3d7e731d5142fba9ed5cd57343305) )
2249 	ROM_CONTINUE(                0x00000, 0x08000 )
2250 
2251 	ROM_REGION16_BE( 0x80000, "sprite", 0 )    /* sprites */
2252 	ROM_LOAD16_WORD_SWAP( "polluxntc_dy-pl-m2_be023.3t", 0x00000, 0x80000, CRC(bdea6f7d) SHA1(b418710a6d12aa53037acf7bbec85a26dfac9ebe) )
2253 
2254 	ROM_REGION16_BE( 0x80000, "bg0", 0 )    /* tiles */
2255 	ROM_LOAD16_WORD_SWAP( "polluxntc_dy-pl-m1_be002.8a", 0x00000, 0x80000, CRC(1d2dedd2) SHA1(9bcb1c80f05eabbca2c0738e409d3cadfc14b0c8) )
2256 
2257 	ROM_REGION16_BE( 0x80000, "fg0", 0 )    /* tiles */
2258 	ROM_LOAD16_BYTE( "polluxntc_6.8m",  0x00000, 0x20000, CRC(b0391db5) SHA1(0c522c5074dc7c0a639ebfb7b9a9eddc90314081) )
2259 	ROM_LOAD16_BYTE( "polluxntc_7.8l",  0x00001, 0x20000, CRC(632f6e10) SHA1(a3605cbe7a9dc04cd8c1ab50110f72d93c78208b) )
2260 	ROM_FILL(                           0x40000, 0x40000, 0xff )
2261 
2262 	ROM_REGION16_BE( 0x20000, "bg0_tmap", 0 )    /* bg tilemaps */
2263 	ROM_LOAD16_BYTE( "polluxntc_9.8b",  0x00000, 0x10000, CRC(378d8914) SHA1(ef95903971673bc26774fe2aff17e1581a7f0eb9) )
2264 	ROM_LOAD16_BYTE( "polluxntc_8.8j",  0x00001, 0x10000, CRC(8859fa70) SHA1(7b1b9edde3f762c7ae1f0b847aa17e30140e9ffa) )
2265 
2266 	ROM_REGION16_BE( 0x20000, "fg0_tmap", 0 )    /* fg tilemaps */
2267 	ROM_LOAD16_BYTE( "polluxntc_5.8p",  0x00000, 0x10000, CRC(ac090d34) SHA1(6b554450d8d46165e25fd6f12ab4c4b9b63dcd35) )
2268 	ROM_LOAD16_BYTE( "polluxntc_4.8r",  0x00001, 0x10000, BAD_DUMP CRC(0195dc4e) SHA1(c87c90a38b382f11ee3377683c0becda745341e0) ) // need to confirm as bad, the same as other sets except it has some bits of data blanked out with 0xFF
2269 ROM_END
2270 
2271 
2272 ROM_START( bluehawk )
2273 	ROM_REGION( 0x20000, "maincpu", 0 ) /* 64k for code + 128k for banks */
2274 	ROM_LOAD( "rom19",        0x00000, 0x20000, CRC(24149246) SHA1(458fd429a895353b8636c717dcd58d57b8723012) )
2275 
2276 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound */
2277 	ROM_LOAD( "rom1",         0x00000, 0x10000, CRC(eef22920) SHA1(a3295ae7524df8c4d00ac3da422bbf66c959bf4f) )
2278 
2279 	ROM_REGION( 0x10000, "tx", 0 )    /* chars */
2280 	ROM_LOAD( "rom3",         0x00000, 0x10000, CRC(c192683f) SHA1(060372b21bf331671c135a074640868eeb5f13ec) )
2281 
2282 	ROM_REGION16_BE( 0x80000, "sprite", 0 )    /* sprites */
2283 	ROM_LOAD16_WORD_SWAP( "dy-bh-m3",     0x00000, 0x80000, CRC(8809d157) SHA1(7f86378f9fcb95ab83b68f37a29732bb8cb3d95a) )
2284 
2285 	ROM_REGION16_BE( 0x80000, "bg0", 0 )    /* tiles + tilemaps (together!) */
2286 	ROM_LOAD16_WORD_SWAP( "dy-bh-m1",     0x00000, 0x80000, CRC(51816b2c) SHA1(72fb055de7979e40195316ef38a2e8c54be12e2b) )
2287 
2288 	ROM_REGION16_BE( 0x80000, "fg0", 0 )    /* tiles + tilemaps (together!) */
2289 	ROM_LOAD16_WORD_SWAP( "dy-bh-m2",     0x00000, 0x80000, CRC(f9daace6) SHA1(5e7892bad170ab9bd52426629ad49843fbc31996) )
2290 
2291 	ROM_REGION16_BE( 0x40000, "fg1", 0 )    /* tiles + tilemaps (together!) */
2292 	ROM_LOAD16_BYTE( "rom6",         0x00000, 0x20000, CRC(e6bd9daa) SHA1(3b478fd02b145d13e49539df5260191a5254be19) )
2293 	ROM_LOAD16_BYTE( "rom5",         0x00001, 0x20000, CRC(5c654dc6) SHA1(f10f64d7114adf7f18ec37c193c524ec80236201) )
2294 
2295 	ROM_REGION( 0x40000, "oki", 0 ) /* OKI6295 samples */
2296 	ROM_LOAD( "rom4",         0x00000, 0x20000, CRC(f7318919) SHA1(8b7e2ffe77603142cf1b9440585f8dfa9199ed05) )
2297 ROM_END
2298 
2299 ROM_START( bluehawkn )
2300 	ROM_REGION( 0x20000, "maincpu", 0 ) /* 64k for code + 128k for banks */
2301 	ROM_LOAD( "rom19",        0x00000, 0x20000, CRC(24149246) SHA1(458fd429a895353b8636c717dcd58d57b8723012) )  // ROM2
2302 
2303 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound */
2304 	ROM_LOAD( "rom1",         0x00000, 0x10000, CRC(eef22920) SHA1(a3295ae7524df8c4d00ac3da422bbf66c959bf4f) )
2305 
2306 	ROM_REGION( 0x10000, "tx", 0 )    /* chars */
2307 	ROM_LOAD( "rom3ntc",      0x00000, 0x10000, CRC(31eb221a) SHA1(7b893972227047d2f609fd1f97cc006eba2c9579) )
2308 
2309 	ROM_REGION16_BE( 0x80000, "sprite", 0 )    /* sprites */
2310 	ROM_LOAD16_WORD_SWAP( "dy-bh-m3",     0x00000, 0x80000, CRC(8809d157) SHA1(7f86378f9fcb95ab83b68f37a29732bb8cb3d95a) )  // ROM7+ROM8+ROM13+ROM14
2311 
2312 	ROM_REGION16_BE( 0x80000, "bg0", 0 )    /* tiles + tilemaps (together!) */
2313 	ROM_LOAD16_WORD_SWAP( "dy-bh-m1",     0x00000, 0x80000, CRC(51816b2c) SHA1(72fb055de7979e40195316ef38a2e8c54be12e2b) )  // ROM9+ROM10+ROM15+ROM16
2314 
2315 	ROM_REGION16_BE( 0x80000, "fg0", 0 )    /* tiles + tilemaps (together!) */
2316 	ROM_LOAD16_WORD_SWAP( "dy-bh-m2",     0x00000, 0x80000, CRC(f9daace6) SHA1(5e7892bad170ab9bd52426629ad49843fbc31996) )  // ROM11+ROM12+ROM17+ROM18
2317 
2318 	ROM_REGION16_BE( 0x40000, "fg1", 0 )    /* tiles + tilemaps (together!) */
2319 	ROM_LOAD16_BYTE( "rom6",         0x00000, 0x20000, CRC(e6bd9daa) SHA1(3b478fd02b145d13e49539df5260191a5254be19) )
2320 	ROM_LOAD16_BYTE( "rom5",         0x00001, 0x20000, CRC(5c654dc6) SHA1(f10f64d7114adf7f18ec37c193c524ec80236201) )
2321 
2322 	ROM_REGION( 0x40000, "oki", 0 ) /* OKI6295 samples */
2323 	ROM_LOAD( "rom4",         0x00000, 0x20000, CRC(f7318919) SHA1(8b7e2ffe77603142cf1b9440585f8dfa9199ed05) )
2324 ROM_END
2325 
2326 /*
2327 
2328 Flying Tiger
2329 Dooyong, 1992
2330 
2331 PCB Layout
2332 ----------
2333 
2334 Bottom Board
2335 
2336 
2337 |----------------------------------------|
2338 |   TL084 YM3012 Z80B  3.579545MHz       |
2339 |                     1MHz M6295         |
2340 |   VOL   YM2151  3       4              |
2341 |        PAL   6116   |-------|          |
2342 |                     |DY001-A|  DY-FT-M1|
2343 |                     |       |          |
2344 |   DSW1  PAL 6264    |       |          |
2345 |J      |----|        |       |          |
2346 |A      |DY-2|  2     |-------|          |
2347 |M      |----|                           |
2348 |M  DSW2                                 |
2349 |A                    |-------|          |
2350 |                     |DY002-A|          |
2351 |                     |       |  DY-FT-M2|
2352 |                     |       |          |
2353 |                     |       |          |
2354 |         6264  PAL   |-------|          |
2355 |         1          PAL                 |
2356 |16MHz    Z80H       6116  6116          |
2357 |----------------------------------------|
2358 Notes:
2359       DY-2        : Unknown PLCC44 IC (FPGA/CPLD?) stamped 'DY-2'
2360       DY001/DY002 : Hyundai DOOYONG PLCC84 ICs (FPGA)
2361       Z80H clock  : 8.000MHz [16/2]
2362       Z80B clock  : 4.000MHz [16/4]
2363       M6295 clock : 1.000MHz. Sample Rate = 1000000 / 132
2364       YM2151 clock: 3.579545MHz
2365       VSync       : 60Hz
2366       HSync       : 15.68kHz
2367 
2368 
2369 Top Board
2370 
2371 |--------------------------|
2372 |                          |
2373 |    6116  PAL  PAL        |
2374 |                          |
2375 |                          |
2376 |                  6116    |
2377 |                          |
2378 |                  6116    |
2379 |     16    14             |
2380 |                          |
2381 |     15    13             |
2382 |                          |
2383 |                          |
2384 |  PAL                     |
2385 |                          |
2386 |                          |
2387 |          6116            |
2388 |                          |
2389 |                          |
2390 |          6116            |
2391 |--------------------------|
2392 
2393 */
2394 
2395 ROM_START( flytiger )
2396 	ROM_REGION( 0x20000, "maincpu", 0 ) /* 64k for code + 128k for banks */
2397 	ROM_LOAD( "1.3c",         0x00000, 0x20000, CRC(2d634c8e) SHA1(012ad31c0edc67d727d216e2ede321c1d1f27226) )
2398 
2399 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound */
2400 	ROM_LOAD( "3.6p",         0x00000, 0x10000, CRC(d238df5e) SHA1(428fd7abd78238089c0c0fd73de57102f4f65a74))
2401 
2402 	ROM_REGION( 0x10000, "tx", 0 )    /* chars */
2403 	ROM_LOAD( "2.4h",         0x08000, 0x08000, CRC(2fb72912) SHA1(34453e2b49cf3a6bc9e87a8400428d95f626b97a) )
2404 	ROM_CONTINUE(             0x00000, 0x08000 )
2405 
2406 	ROM_REGION16_BE( 0x80000, "sprite", 0 )    /* sprites */
2407 	ROM_LOAD16_BYTE( "16.4h", 0x00000, 0x20000, CRC(8a158b95) SHA1(ed09d9c40b76a27e06601381e463a00b16555f1e) )
2408 	ROM_LOAD16_BYTE( "15.2h", 0x00001, 0x20000, CRC(399f6043) SHA1(ea0debd6d0f8c61f0078809c2828734fc15e891d) )
2409 	ROM_LOAD16_BYTE( "14.4k", 0x40000, 0x20000, CRC(df66b6f3) SHA1(3a29ae69a09306c5a2a2786acbf227832b408152) )
2410 	ROM_LOAD16_BYTE( "13.2k", 0x40001, 0x20000, CRC(f24a5099) SHA1(408559057989a40ca298baa85d5fe7cbde72d2b8) )
2411 
2412 	ROM_REGION16_BE( 0x80000, "bg0",0 ) /* tiles + tilemaps */
2413 	ROM_LOAD16_WORD_SWAP( "dy-ft-m1.11n",  0x00000, 0x80000, CRC(f06589c2) SHA1(fb4aa12257e2e0162f2219ebea5177e8bb15e3f0) )
2414 
2415 	ROM_REGION16_BE( 0x80000, "fg0",0 ) /* tiles + tilemaps */
2416 	ROM_LOAD16_WORD_SWAP("dy-ft-m2.11g",   0x00000, 0x80000, CRC(7545f9c9) SHA1(dcab4d64a8fada5afd4a352f5a30c868676d2b57) )
2417 
2418 	ROM_REGION( 0x80000, "oki", 0 ) /* OKI6295 samples */
2419 	ROM_LOAD( "4.9n",         0x00000, 0x20000, CRC(cd95cf9a) SHA1(d79e3aeda6a13d7b87369453bcf668778135b7fe) )
2420 ROM_END
2421 
2422 ROM_START( flytigera ) // alt pcb type
2423 	ROM_REGION( 0x20000, "maincpu", 0 ) /* 64k for code + 128k for banks */
2424 	ROM_LOAD( "ftiger_1.3c",  0x00000, 0x20000, CRC(02acd1ce) SHA1(48167a317d3785bfe688bdda01ff344e72d3b138) )
2425 
2426 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound */
2427 	ROM_LOAD( "ftiger_11.6p", 0x00000, 0x10000, CRC(d238df5e) SHA1(428fd7abd78238089c0c0fd73de57102f4f65a74))
2428 
2429 	ROM_REGION( 0x10000, "tx", 0 )    /* chars */
2430 	ROM_LOAD( "ftiger_2.4h",  0x08000, 0x08000, CRC(ca9d6713) SHA1(645cccc06c7f6744b25e7917f414956856419b8a) )
2431 	ROM_CONTINUE(             0x00000, 0x08000 )
2432 
2433 	ROM_REGION16_BE( 0x80000, "sprite", 0 )    /* sprites */
2434 	ROM_LOAD16_BYTE( "ftiger_16.4h", 0x00000, 0x20000, CRC(8a158b95) SHA1(ed09d9c40b76a27e06601381e463a00b16555f1e) )
2435 	ROM_LOAD16_BYTE( "ftiger_15.2h", 0x00001, 0x20000, CRC(399f6043) SHA1(ea0debd6d0f8c61f0078809c2828734fc15e891d) )
2436 	ROM_LOAD16_BYTE( "ftiger_14.4k", 0x40000, 0x20000, CRC(df66b6f3) SHA1(3a29ae69a09306c5a2a2786acbf227832b408152) )
2437 	ROM_LOAD16_BYTE( "ftiger_13.2k", 0x40001, 0x20000, CRC(f24a5099) SHA1(408559057989a40ca298baa85d5fe7cbde72d2b8) )
2438 
2439 	ROM_REGION16_BE( 0x80000, "bg0",0 ) /* tiles + tilemaps */ // same data, but split
2440 	ROM_LOAD16_BYTE( "ftiger_3.10p", 0x00001, 0x20000, CRC(9fc12ebd) SHA1(c8f03a20da01bd61a27813564eb79bb2e8483f28) )
2441 	ROM_LOAD16_BYTE( "ftiger_5.10l", 0x00000, 0x20000, CRC(06c9dd2a) SHA1(20235b7d55b9bc73ddb1fec5fd68e5ba32508d1b) )
2442 	ROM_LOAD16_BYTE( "ftiger_4.11p", 0x40001, 0x20000, CRC(fb30e884) SHA1(1f01ed15ae6cdebb120cc1f03ac65465c824dc89) )
2443 	ROM_LOAD16_BYTE( "ftiger_6.11l", 0x40000, 0x20000, CRC(dfb85152) SHA1(03a07e016d400c1c0e7a59716c08a61e23e5d60f) )
2444 
2445 	ROM_REGION16_BE( 0x80000, "fg0",0 ) /* tiles + tilemaps */ // same data, but split
2446 	ROM_LOAD16_BYTE( "ftiger_8.11h", 0x00001, 0x20000, CRC(cbd8c22f) SHA1(e7e64c99990e99336abbdbd7ffadfa4c0f1a4c0f) )
2447 	ROM_LOAD16_BYTE( "ftiger_10.11f",0x00000, 0x20000, CRC(e2175f3b) SHA1(1ce17beb431bb3e8454bb1899f28d16c6a537183) )
2448 	ROM_LOAD16_BYTE( "ftiger_7.10h", 0x40001, 0x20000, CRC(be431c61) SHA1(3227912117700751370059c173e46d0a8367c5f8) )
2449 	ROM_LOAD16_BYTE( "ftiger_9.10f", 0x40000, 0x20000, CRC(91bcd84f) SHA1(3577b2d1d6ee4b560b75530ba9e9e6689c1e17e2) )
2450 
2451 	ROM_REGION( 0x80000, "oki", 0 ) /* OKI6295 samples */
2452 	ROM_LOAD( "ftiger_12.9n",         0x00000, 0x20000, CRC(cd95cf9a) SHA1(d79e3aeda6a13d7b87369453bcf668778135b7fe) )
2453 ROM_END
2454 
2455 ROM_START( sadari )
2456 	ROM_REGION( 0x20000, "maincpu", 0 ) /* 64k for code + 128k for banks */
2457 	ROM_LOAD( "1.3d",         0x00000, 0x20000, CRC(bd953217) SHA1(6e230103ea01744761ab8a194d0dde6921bee92e) )
2458 
2459 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound */
2460 	ROM_LOAD( "3.6r",         0x00000, 0x10000, CRC(4786fca6) SHA1(b2347e2f6bbe3dd9d1cc8d8a4af40e7997d5ab74) )
2461 
2462 	ROM_REGION( 0x20000, "tx", 0 )    /* chars */
2463 	ROM_LOAD( "2.4c",         0x00000, 0x20000, CRC(b2a3f1c6) SHA1(06f0038dc113c8001786157b9c9ee0eda76c2411) )
2464 
2465 	/* no sprites */
2466 
2467 	ROM_REGION16_BE( 0x80000, "bg0", 0 )    /* tiles + tilemaps (together!) */
2468 	ROM_LOAD16_BYTE( "10.10l",       0x00000, 0x20000, CRC(70269ab1) SHA1(055ff484da028f11bb3097652ef4713603870f89) )
2469 	ROM_LOAD16_BYTE( "5.8l",         0x00001, 0x20000, CRC(ceceb4c3) SHA1(db08bbe9d23eb50d5c0603893a6e0368e2b6bbba) )
2470 	ROM_LOAD16_BYTE( "9.10n",        0x40000, 0x20000, CRC(21bd1bda) SHA1(a5c9df8b45b05130374a83e45b3fb7cce76b58f8) )
2471 	ROM_LOAD16_BYTE( "4.8n",         0x40001, 0x20000, CRC(cd318ae5) SHA1(457ccaf1d841ff763878dca8e534b9738510899a) )
2472 
2473 	ROM_REGION16_BE( 0x80000, "fg0", 0 )    /* tiles + tilemaps (together!) */
2474 	ROM_LOAD16_BYTE( "11.10j",       0x00000, 0x20000, CRC(62a1d580) SHA1(4df60db9ad306a4d8776d10826e802cab27809f7) )
2475 	ROM_LOAD16_BYTE( "6.8j",         0x00001, 0x20000, CRC(c4b13ed7) SHA1(97a33d700a8372b0e4bb13e567afc5ef898e9351) )
2476 	ROM_LOAD16_BYTE( "12.10g",       0x40000, 0x20000, CRC(547b7645) SHA1(fdfe5cccdae1b88736aae702aa55fd642396ce01) )
2477 	ROM_LOAD16_BYTE( "7.8g",         0x40001, 0x20000, CRC(14f20fa3) SHA1(95aabb5a5de976fb62b5cffd3efb2a86b5d62c20) )
2478 
2479 	ROM_REGION( 0x40000, "oki", 0 ) /* OKI6295 samples */
2480 	ROM_LOAD( "8.10r",        0x00000, 0x20000, CRC(9c29a093) SHA1(b6252e0cb8e618cdc4a741ee7ab01058f929fd11) )
2481 ROM_END
2482 
2483 ROM_START( gundl94 )
2484 	ROM_REGION( 0x20000, "maincpu", 0 ) /* 64k for code + 128k for banks */
2485 	ROM_LOAD( "gd94_001.d3",  0x00000, 0x20000, CRC(3a5cc045) SHA1(182743458c36bb6254a39cf9a371fd2b0d72d145) )
2486 
2487 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound */
2488 	ROM_LOAD( "gd94_003.r6",  0x00000, 0x10000, CRC(ea41c4ad) SHA1(e39e0507f4f370432ef0ca11dbecef176716cec4) )
2489 
2490 	ROM_REGION( 0x20000, "tx", 0 )    /* chars */
2491 	ROM_LOAD( "gd94_002.c5",  0x00000, 0x20000, CRC(8575e64b) SHA1(08ef8af655a354c30ee3fe587554e418903147f5) )
2492 
2493 	/* no sprites */
2494 
2495 	ROM_REGION16_BE( 0x40000, "bg0", 0 )    /* tiles + tilemaps (together!) */
2496 	ROM_LOAD16_BYTE( "gd94_009.n9",  0x00000, 0x20000, CRC(40eabf55) SHA1(660f4318248001049369e1e715c7ff09d551c256) )
2497 	ROM_LOAD16_BYTE( "gd94_004.n7",  0x00001, 0x20000, CRC(0654abb9) SHA1(c0fcd8ba78db341f46acb523c670d053e3d82b16) )
2498 
2499 	ROM_REGION16_BE( 0x40000, "fg0", 0 )    /* tiles + tilemaps (together!) */
2500 	ROM_LOAD16_BYTE( "gd94_012.g9",  0x00000, 0x20000, CRC(117c693c) SHA1(e08bd6fbbae8ac657e6a1f9df36983ace941da3a) )
2501 	ROM_LOAD16_BYTE( "gd94_007.g7",  0x00001, 0x20000, CRC(96a72c6d) SHA1(b79a746fc114eb8977591f147e4ea4a4e4f14526) )
2502 
2503 	ROM_REGION( 0x40000, "oki", 0 ) /* OKI6295 samples */
2504 	ROM_LOAD( "gd94_008.r9",  0x00000, 0x20000, CRC(f92e5803) SHA1(69dd11469e9e6bdc7825a5a14994276b50c10a14) )
2505 
2506 	ROM_REGION( 0x30000, "cpu2", 0 )    /* extra z80 rom? this doesn't seem to belong to this game! */
2507 	ROM_LOAD( "gd94_011.j9",  0x00000, 0x20000, CRC(d8ad0208) SHA1(5df0f94ef86d7a03bde546e7aafdc0caf8a17076) )
2508 	ROM_RELOAD(               0x10000, 0x20000 )                /* banked at 0x8000-0xbfff */
2509 
2510 	ROM_REGION16_BE( 0x40000, "gfx4", 0 )    /* more tiles? they don't seem to belong to this game! */
2511 	ROM_LOAD16_BYTE( "gd94_006.j7",  0x00000, 0x20000, CRC(1d9536fe) SHA1(d72e66a529456c87217f9ba88f7f45aa2aa3e399) )
2512 	ROM_LOAD16_BYTE( "gd94_010.l7",  0x00001, 0x20000, CRC(4b74857f) SHA1(a4413369fdb165c0f12454592181675095f28145) )
2513 ROM_END
2514 
2515 ROM_START( primella )
2516 	ROM_REGION( 0x20000, "maincpu", 0 ) /* 64k for code + 128k for banks */
2517 	ROM_LOAD( "1_d3.bin",     0x00000, 0x20000, CRC(82fea4e0) SHA1(3603c0edda29868d5e282465880e1ad341365f6f) )
2518 
2519 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound */
2520 	ROM_LOAD( "gd94_003.r6",  0x00000, 0x10000, CRC(ea41c4ad) SHA1(e39e0507f4f370432ef0ca11dbecef176716cec4) )
2521 
2522 	ROM_REGION( 0x20000, "tx", 0 )    /* chars */
2523 	ROM_LOAD( "gd94_002.c5",  0x00000, 0x20000, CRC(8575e64b) SHA1(08ef8af655a354c30ee3fe587554e418903147f5) )
2524 
2525 	/* no sprites */
2526 
2527 	ROM_REGION16_BE( 0x40000, "bg0", 0 )    /* tiles + tilemaps (together!) */
2528 	ROM_LOAD16_BYTE( "7_n9.bin",     0x00000, 0x20000, CRC(20b6a574) SHA1(e180e8440bf2dc22c7d24707fc47d0c70433ecba) )
2529 	ROM_LOAD16_BYTE( "4_n7.bin",     0x00001, 0x20000, CRC(fe593666) SHA1(f511e4881f79de91c501b0026de2ac5b4a59f747) )
2530 
2531 	ROM_REGION16_BE( 0x40000, "fg0", 0 )    /* tiles + tilemaps (together!) */
2532 	ROM_LOAD16_BYTE( "8_g9.bin",     0x00000, 0x20000, CRC(542ecb83) SHA1(0a4decaad9dde4681f7b6cdab0ae0e4951efc83d) )
2533 	ROM_LOAD16_BYTE( "5_g7.bin",     0x00001, 0x20000, CRC(058ecac6) SHA1(12f70f78b882b6ce08c56f6fa9a1211c3464bf9d) )
2534 
2535 	ROM_REGION( 0x40000, "oki", 0 ) /* OKI6295 samples */
2536 	ROM_LOAD( "gd94_008.r9",  0x00000, 0x20000, CRC(f92e5803) SHA1(69dd11469e9e6bdc7825a5a14994276b50c10a14) )  /* 6_r9 */
2537 ROM_END
2538 
2539 /*
2540 
2541 Super X
2542 NTC, 1994
2543 
2544 This game runs on Dooyong hardware.
2545 
2546 PCB Layout
2547 ----------
2548 
2549 |-------------------------------------------------|
2550 |     YM3012  Z80            4.7V   62256  62256  |
2551 |     YM2151  1.5U  M6295    5.7U   62256  62256  |
2552 |             6116                                |
2553 |      PAL         -----------      62256  62256  |
2554 |                  |DY208    |      62256  62256  |
2555 |J   DSW1          |DY-OBJ-01|                    |
2556 |A                 -----------                    |
2557 |M       2.3M  62256                 SPXO-M05.10M |
2558 |M       3.3L  62256    6116                      |
2559 |A                      6116                      |
2560 |       68000  --------- SPXB-M03.8J SPXB-MS4.10J |
2561 |   DSW2       |DY160  |                          |
2562 |              |DY-PL-1| SPXB-M04.8F SPXB-MS3.10F |
2563 |              ---------                          |
2564 |    PAL  PAL                                     |
2565 |              --------- SPXB-M01.8C SPXB-MS1.10C |
2566 |     6116     |DY160  |                          |
2567 |8MHz 6116     |DY-PL-1| SPXB-M02.8A SPXB-MS2.10A |
2568 |-------------------------------------------------|
2569 
2570 Notes:
2571       68000 clock: 8.000MHz
2572         Z80 clock: 4.000MHz
2573      YM2151 clock: 4.000MHz
2574       M6295 clock: 1.000MHz, sample rate = /132
2575             VSync: 60Hz
2576             HSync: 15.68kHz
2577 
2578 ROMs:
2579      Filename     Type              Use
2580      --------------------------------------------
2581            1.5U   27C512            Sound program
2582 
2583            2.3M   27C1000         \ Main Program
2584            3.3L   27C1000         /
2585 
2586            4.7V   27C1000         \ M6295 samples
2587            5.5U   27C1000         /
2588 
2589      SPXO-M05.10M 16M MASK 42 pin \
2590      SPXB-M01.8C   8M MASK 42 pin |
2591      SPXB-M02.8A         "        | Gfx + Tilemaps
2592      SPXB-M03.8J         "        |
2593      SPXB-M04.8F         "        /
2594      SPXB-MS1.10C  1M MASK 28 pin \
2595      SPXB-MS2.10A        "        | Gfx (All have fixed bits, this is correct, they contain the upper 4 bits)
2596      SPXB-MS3.10F        "        |     (of the tilemap data)
2597      SPXB-MS4.10J        "        /
2598 
2599 */
2600 
2601 ROM_START( superx )
2602 	ROM_REGION( 0x40000, "maincpu", 0 ) /* 64k for code + 128k for banks */
2603 	ROM_LOAD16_BYTE( "2.3m",   0x00000, 0x20000, CRC(be7aebe7) SHA1(81934d861a15a96cf23721ad38f821e1f94ec980) )
2604 	ROM_LOAD16_BYTE( "3.3l",   0x00001, 0x20000, CRC(dc4a25fc) SHA1(660bf33a9ae7534c37353f9690af180268ce7f30) )
2605 
2606 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound */
2607 	ROM_LOAD( "1.5u",     0x0000, 0x10000, CRC(6894ce05) SHA1(9726fc3f1e9bebecf498c208ab03007f34936632) )
2608 
2609 	ROM_REGION16_BE( 0x200000, "sprite", 0 )   /* sprite */
2610 	ROM_LOAD16_WORD_SWAP( "spxo-m05.10m",   0x00000, 0x200000, CRC(9120dd84) SHA1(bcf1fdc860d51b9bcfec1e84940ef21dfc41b5dc) )
2611 
2612 	ROM_REGION16_BE( 0x100000, "fg1", 0 )   /* tiles + tilemaps (together!) */
2613 	ROM_LOAD16_WORD_SWAP( "spxb-m04.8f",    0x00000, 0x100000, CRC(91a7ac6e) SHA1(b7fb79c2e4f5eecb7128b86ee2b1070eed905d2a) ) // bomb
2614 	// 0x00000-0x3ffff tilemap infos
2615 
2616 	ROM_REGION16_BE( 0x100000, "fg0", 0 )   /* tiles + tilemaps (together!) */
2617 	ROM_LOAD16_WORD_SWAP( "spxb-m03.8j",    0x00000, 0x100000, CRC(8b42861b) SHA1(6eb1f6bfe0b8e987e624a6fe7e025c6918804cf9) ) // title logo
2618 	// 0x00000-0x3ffff tilemap infos
2619 
2620 	ROM_REGION16_BE( 0x100000, "bg1", 0 )   /* tiles + tilemaps (together!) */
2621 	ROM_LOAD16_WORD_SWAP( "spxb-m02.8a",    0x00000, 0x100000, CRC(21b8db78) SHA1(e7c51c9566ebce5b5db5af48f33e2194b518715f) ) // title screen upper background
2622 	// 0x00000-0x3ffff tilemap infos
2623 
2624 	ROM_REGION16_BE( 0x100000, "bg0", 0 )   /* tiles + tilemaps (together!) */
2625 	ROM_LOAD16_WORD_SWAP( "spxb-m01.8c",    0x00000, 0x100000, CRC(60c69129) SHA1(6871b08e354c7cf5fb16b0ed4562c537e2ce9194) ) // title screen lower background
2626 	// 0x00000-0x3ffff tilemap infos
2627 
2628 	ROM_REGION( 0x80000, "tmap_hi", 0 )    /* top 4 bits of tilemaps */
2629 	ROM_LOAD( "spxb-ms3.10f",    0x00000, 0x20000, CRC(8bf8c77d) SHA1(a89e50bd571e754cb56a17fe4ada6a804e74520b) ) // bomb
2630 	ROM_LOAD( "spxb-ms4.10j",    0x20000, 0x20000, CRC(d418a900) SHA1(0d69afa48d3072c7fecfc5d6dd63717b9f61c0fc) ) // title logo
2631 	ROM_LOAD( "spxb-ms2.10a",    0x40000, 0x20000, CRC(5ec87adf) SHA1(cdd0864ea23b2c6d8ace519fc66e77f59813e206) ) // title screen upper background
2632 	ROM_LOAD( "spxb-ms1.10c",    0x60000, 0x20000, CRC(40b4fe6c) SHA1(5ab63ce83522c32039ee33c59e713d2fb37aac44) ) // title screen lower background
2633 
2634 	ROM_REGION( 0x40000, "oki", 0 ) /* OKI6295 samples */
2635 	ROM_LOAD( "4.7v",     0x00000, 0x20000, CRC(434290b5) SHA1(3f2fb5aed1f109add17f00fe3a2364eedc7172ae) )
2636 	ROM_LOAD( "5.7u",     0x20000, 0x20000, CRC(ebe6abb4) SHA1(801b22845603f86c7bab77baa6946afc613aebdb) )
2637 ROM_END
2638 
2639 /* this set only had 68k roms, sound program, and samples */
2640 ROM_START( superxm )
2641 	ROM_REGION( 0x40000, "maincpu", 0 ) /* 64k for code + 128k for banks */
2642 	ROM_LOAD16_BYTE( "2_m.3m",   0x00000, 0x20000, CRC(41c50aac) SHA1(75f6470bde217e4b9139d8af97a17ca22c374944) )
2643 	ROM_LOAD16_BYTE( "3_m.3l",   0x00001, 0x20000, CRC(6738b703) SHA1(e37f5f76b1efbd2f5098014ca380d4340204e487) )
2644 
2645 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound */
2646 	ROM_LOAD( "1_m.5u",     0x0000, 0x10000,  CRC(319fa632) SHA1(b621ad080e8cf6611fc88d8fc2af5aa4e31e9e01) )
2647 
2648 	ROM_REGION16_BE( 0x200000, "sprite", 0 )   /* sprite */
2649 	ROM_LOAD16_WORD_SWAP( "spxo-m05.10m",   0x00000, 0x200000, CRC(9120dd84) SHA1(bcf1fdc860d51b9bcfec1e84940ef21dfc41b5dc) )
2650 
2651 	ROM_REGION16_BE( 0x100000, "fg1", 0 )   /* tiles + tilemaps (together!) */
2652 	ROM_LOAD16_WORD_SWAP( "spxb-m04.8f",    0x00000, 0x100000, CRC(91a7ac6e) SHA1(b7fb79c2e4f5eecb7128b86ee2b1070eed905d2a) ) // bomb
2653 	// 0x00000-0x3ffff tilemap infos
2654 
2655 	ROM_REGION16_BE( 0x100000, "fg0", 0 )   /* tiles + tilemaps (together!) */
2656 	ROM_LOAD16_WORD_SWAP( "spxb-m03.8j",    0x00000, 0x100000, CRC(8b42861b) SHA1(6eb1f6bfe0b8e987e624a6fe7e025c6918804cf9) ) // title logo
2657 	// 0x00000-0x3ffff tilemap infos
2658 
2659 	ROM_REGION16_BE( 0x100000, "bg1", 0 )   /* tiles + tilemaps (together!) */
2660 	ROM_LOAD16_WORD_SWAP( "spxb-m02.8a",    0x00000, 0x100000, CRC(21b8db78) SHA1(e7c51c9566ebce5b5db5af48f33e2194b518715f) ) // title screen upper background
2661 	// 0x00000-0x3ffff tilemap infos
2662 
2663 	ROM_REGION16_BE( 0x100000, "bg0", 0 )   /* tiles + tilemaps (together!) */
2664 	ROM_LOAD16_WORD_SWAP( "spxb-m01.8c",    0x00000, 0x100000, CRC(60c69129) SHA1(6871b08e354c7cf5fb16b0ed4562c537e2ce9194) ) // title screen lower background
2665 	// 0x00000-0x3ffff tilemap infos
2666 
2667 	ROM_REGION( 0x80000, "tmap_hi", 0 )    /* top 4 bits of tilemaps */
2668 	ROM_LOAD( "spxb-ms3.10f",    0x00000, 0x20000, CRC(8bf8c77d) SHA1(a89e50bd571e754cb56a17fe4ada6a804e74520b) ) // bomb
2669 	ROM_LOAD( "spxb-ms4.10j",    0x20000, 0x20000, CRC(d418a900) SHA1(0d69afa48d3072c7fecfc5d6dd63717b9f61c0fc) ) // title logo
2670 	ROM_LOAD( "spxb-ms2.10a",    0x40000, 0x20000, CRC(5ec87adf) SHA1(cdd0864ea23b2c6d8ace519fc66e77f59813e206) ) // title screen upper background
2671 	ROM_LOAD( "spxb-ms1.10c",    0x60000, 0x20000, CRC(40b4fe6c) SHA1(5ab63ce83522c32039ee33c59e713d2fb37aac44) ) // title screen lower background
2672 
2673 	ROM_REGION( 0x40000, "oki", 0 ) /* OKI6295 samples */
2674 	ROM_LOAD( "4.7v",     0x00000, 0x20000, CRC(434290b5) SHA1(3f2fb5aed1f109add17f00fe3a2364eedc7172ae) )
2675 	ROM_LOAD( "5.7u",     0x20000, 0x20000, CRC(ebe6abb4) SHA1(801b22845603f86c7bab77baa6946afc613aebdb) )
2676 ROM_END
2677 
2678 ROM_START( rshark )
2679 	ROM_REGION( 0x40000, "maincpu", 0 ) /* 64k for code + 128k for banks */
2680 	ROM_LOAD16_BYTE( "rspl00.bin",   0x00000, 0x20000, CRC(40356b9d) SHA1(28749a0d4c1ac8e094c551594033d47061071d8b) )
2681 	ROM_LOAD16_BYTE( "rspu00.bin",   0x00001, 0x20000, CRC(6635c668) SHA1(242d9c5828e142d5820c75c4e4696fcc5f5ffbb7) )
2682 
2683 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound */
2684 	ROM_LOAD( "rse3.bin",     0x0000, 0x10000, CRC(03c8fd17) SHA1(d59a3d8b731484572384a9d6f24ef4cd200ef661) )
2685 
2686 	ROM_REGION16_BE( 0x200000, "sprite", 0 )   /* sprite */
2687 	ROM_LOAD16_BYTE( "rse4.bin",     0x000000, 0x80000, CRC(b857e411) SHA1(14a8883243f3f1ee661395cbcce7d5d3c08caef8) )
2688 	ROM_LOAD16_BYTE( "rse5.bin",     0x000001, 0x80000, CRC(7822d77a) SHA1(25d34b508a25ab8052d3f73eeb60c7b9e6610db6) )
2689 	ROM_LOAD16_BYTE( "rse6.bin",     0x100000, 0x80000, CRC(80215c52) SHA1(6138804fc2f81cf1366cc1bcca7572e45845ca8a) )
2690 	ROM_LOAD16_BYTE( "rse7.bin",     0x100001, 0x80000, CRC(bd28bbdc) SHA1(b09ce8b21a08d129703f95b6fe9361e7f6614ee3) )
2691 
2692 	ROM_REGION16_BE( 0x100000, "fg1", 0 )   /* tiles + tilemaps (together!) */
2693 	ROM_LOAD16_BYTE( "rse11.bin",    0x00000, 0x80000, CRC(8a0c572f) SHA1(218c4e4aeacedf459c6c08cc47dd2154b7dd4279) ) // 0x00000-0x3ffff tilemap infos
2694 	ROM_LOAD16_BYTE( "rse10.bin",    0x00001, 0x80000, CRC(139d5947) SHA1(e371f27091924c605962f0a88d9f1f3deb0c954e) )
2695 
2696 	ROM_REGION16_BE( 0x100000, "fg0", 0 )   /* tiles + tilemaps (together!) */
2697 	ROM_LOAD16_BYTE( "rse15.bin",    0x00000, 0x80000, CRC(d188134d) SHA1(b0711657ad87166330b471fa449e95d63939b223) ) // 0x00000-0x3ffff tilemap infos
2698 	ROM_LOAD16_BYTE( "rse14.bin",    0x00001, 0x80000, CRC(0ef637a7) SHA1(827867831f751a5ed4022932b755e128fb5886b6) )
2699 
2700 	ROM_REGION16_BE( 0x100000, "bg1", 0 )   /* tiles + tilemaps (together!) */
2701 	ROM_LOAD16_BYTE( "rse17.bin",    0x00000, 0x80000, CRC(7ff0f3c7) SHA1(033722dbf69745676b71f7002b413abd3c7bdf3c) ) // 0x00000-0x3ffff tilemap infos
2702 	ROM_LOAD16_BYTE( "rse16.bin",    0x00001, 0x80000, CRC(c176c8bc) SHA1(98ef043befd2e067012d24299196964a0957b2ea) )
2703 
2704 	ROM_REGION16_BE( 0x100000, "bg0", 0 )   /* tiles + tilemaps (together!) */
2705 	ROM_LOAD16_BYTE( "rse21.bin",    0x00000, 0x80000, CRC(2ea665af) SHA1(67445e525016c0873bc2d831230f908388dabd4d) ) // 0x00000-0x3ffff tilemap infos
2706 	ROM_LOAD16_BYTE( "rse20.bin",    0x00001, 0x80000, CRC(ef93e3ac) SHA1(397afe70c8039eb073589353bd5a9f469e8a6776) )
2707 
2708 	ROM_REGION( 0x80000, "tmap_hi", 0 )    /* top 4 bits of tilemaps */
2709 	ROM_LOAD( "rse12.bin",    0x00000, 0x20000, CRC(fadbf947) SHA1(0d752c2499adca883f281aed95356a7fbf78fe5f) )
2710 	ROM_LOAD( "rse13.bin",    0x20000, 0x20000, CRC(323d4df6) SHA1(9ea0b84f7f565c7ca33335d286e8d4f812b216f2) )
2711 	ROM_LOAD( "rse18.bin",    0x40000, 0x20000, CRC(e00c9171) SHA1(10365ddbf4d60e99758ff0bb5042648c5f0f9c34) )
2712 	ROM_LOAD( "rse19.bin",    0x60000, 0x20000, CRC(d214d1d0) SHA1(98daf875fec0372c719efcfb4457db573261e9f4) )
2713 
2714 	ROM_REGION( 0x40000, "oki", 0 ) /* OKI6295 samples */
2715 	ROM_LOAD( "rse1.bin",     0x00000, 0x20000, CRC(0291166f) SHA1(7c4c80cfd921a07b8195306cfbd2f84947aa7d6f) )
2716 	ROM_LOAD( "rse2.bin",     0x20000, 0x20000, CRC(5a26ee72) SHA1(3ceed1f50510993354dd4def577af5cf4c4a4f7a) )
2717 ROM_END
2718 
2719 /*
2720 
2721 Pop Bingo
2722 Dooyong, 1996
2723 
2724 PCB Layout
2725 ----------
2726 
2727 |------------------------------------------------------|
2728 |        6295    *      62256      62256      62256    |
2729 |YM3016  6116  ROM4.4R  62256      62256      62256    |
2730 |                                                      |
2731 | Z80   ROM1.3P YM2151           |----------| 62256    |
2732 |        PAL                     |DOOYONG   | 62256    |
2733 |                                |DY-OBJ-01 |          |
2734 |                                |H2B34027  |          |
2735 |J          6116       PAL       |          |          |
2736 |A          6116                 |----------|          |
2737 |M                                            ROM5.9M  |
2738 |M       |------------------|    6116         ROM6.9L  |
2739 |A       |   MC68000P10     |    6116                  |
2740 |        |                  |                          |
2741 |        |------------------|                 ROM7.9H  |
2742 | DSWA     ROM2.3F  62256        |----------|          |
2743 | DSWB     ROM3.3E  62256        |DOOYONG   | ROM8.9E  |
2744 |          PAL   PAL   PAL       |DY-PL-1   |          |
2745 |                                |H2A32067  | ROM9.9C  |
2746 |                                |          |          |
2747 |16MHz  20MHz                    |----------| ROM10.9A |
2748 |------------------------------------------------------|
2749 Notes:
2750       68000 clock : 10.000MHz (20/2)
2751       Z80 clock   : 4.000MHz  (16/4)
2752       YM2151 clock: 4.000MHz  (16/4)
2753       M6295 clock : 1.000MHz (16/16). Sample Rate = 1000000 / 132
2754       VSync       : 60Hz
2755       *           : Unpopulated socket
2756 
2757 */
2758 
2759 ROM_START( popbingo )
2760 	ROM_REGION( 0x40000, "maincpu", 0 ) /* 64k for code + 128k for banks */
2761 	ROM_LOAD16_BYTE( "rom2.3f",   0x00000, 0x20000, CRC(b24513c6) SHA1(ddbdb99c8bc84d32b787691630c4cd2060f3d9d0) )
2762 	ROM_LOAD16_BYTE( "rom3.3e",   0x00001, 0x20000, CRC(48070081) SHA1(5efc585207eb2b6f631e496ee1acc1d593024367) )
2763 
2764 	ROM_REGION( 0x10000, "audiocpu", 0 )    /* sound */
2765 	ROM_LOAD( "rom1.3p",     0x0000, 0x10000, CRC(46e8d2c4) SHA1(a6fb55766e0bad321ac03977f33d3000ab7ab295) )
2766 
2767 	ROM_REGION16_BE( 0x100000, "sprite", 0 )   /* sprite */
2768 	ROM_LOAD16_BYTE( "rom5.9m",   0x00000, 0x80000, CRC(e8d73e07) SHA1(4ed647eaa6b32b9f159fc49d30962ad20f97b245) )
2769 	ROM_LOAD16_BYTE( "rom6.9l",   0x00001, 0x80000, CRC(c3db3975) SHA1(bb085c9339d640585b18992dc8b861870920559a) )
2770 
2771 	ROM_REGION16_BE( 0x100000, "bg0", 0 )   /* tiles + tilemaps (together!) */
2772 	ROM_LOAD16_BYTE( "rom10.9a",  0x00000, 0x80000, CRC(135ab90a) SHA1(5911923ccf579edd0bf3449945a434fbf37b51aa) ) // 0x00000-0x07fff Tilemap infos
2773 	ROM_LOAD16_BYTE( "rom9.9c",   0x00001, 0x80000, CRC(c9d90007) SHA1(ad457ef297797dcb9bb8dc1725fa207cd57eedfe) )
2774 
2775 	ROM_REGION16_BE( 0x100000, "bg1", 0 )   /* tiles + tilemaps (together!) */
2776 	ROM_LOAD16_BYTE( "rom7.9h",   0x00000, 0x80000, CRC(b2b4c13b) SHA1(37ddc9751860a85b809782c5cec4418bca71412c) ) // 0x00000-0x07fff Tilemap infos
2777 	ROM_LOAD16_BYTE( "rom8.9e",   0x00001, 0x80000, CRC(66c4b00f) SHA1(ed416ec594fe065c0f169008fb8ce553813f6260) )
2778 
2779 	ROM_REGION( 0x40000, "oki", 0 ) /* OKI6295 samples */
2780 	ROM_LOAD( "rom4.4r",     0x00000, 0x20000, CRC(0fdee034) SHA1(739d39b04c2e860c3c193ab32b30ccc39ff1a8c2) )
2781 ROM_END
2782 
2783 /***************************************************************************
2784 
2785     Game driver(s)
2786 
2787 ***************************************************************************/
2788 
2789 /* The differences between the two lastday sets are only in the sound program and graphics. The main program is the same. */
2790 
2791 GAME( 1990, lastday,   0,        lastday,  lastday,  dooyong_z80_ym2203_state, empty_init, ROT270, "Dooyong",                       "The Last Day (set 1)", MACHINE_SUPPORTS_SAVE )
2792 GAME( 1990, lastdaya,  lastday,  lastday,  lastday,  dooyong_z80_ym2203_state, empty_init, ROT270, "Dooyong",                       "The Last Day (set 2)", MACHINE_SUPPORTS_SAVE )
2793 GAME( 1990, ddaydoo,   lastday,  lastday,  lastday,  dooyong_z80_ym2203_state, empty_init, ROT270, "Dooyong",                       "Chulgyeok D-Day (Korea)", MACHINE_SUPPORTS_SAVE )
2794 
2795 GAME( 1991, gulfstrm,  0,        gulfstrm, gulfstrm, dooyong_z80_ym2203_state, empty_init, ROT270, "Dooyong",                       "Gulf Storm (set 1)",        MACHINE_SUPPORTS_SAVE )
2796 GAME( 1991, gulfstrma, gulfstrm, gulfstrm, gulfstrm, dooyong_z80_ym2203_state, empty_init, ROT270, "Dooyong",                       "Gulf Storm (set 2)",        MACHINE_SUPPORTS_SAVE )
2797 GAME( 1991, gulfstrmb, gulfstrm, gulfstrm, gulfstrm, dooyong_z80_ym2203_state, empty_init, ROT270, "Dooyong",                       "Gulf Storm (set 3)",        MACHINE_SUPPORTS_SAVE )
2798 GAME( 1991, gulfstrmm, gulfstrm, gulfstrm, gulfstrm, dooyong_z80_ym2203_state, empty_init, ROT270, "Dooyong (Media Shoji license)", "Gulf Storm (Japan, Media Shoji license)",  MACHINE_SUPPORTS_SAVE )
2799 GAME( 1991, gulfstrmk, gulfstrm, gulfstrm, gulfstrm, dooyong_z80_ym2203_state, empty_init, ROT270, "Dooyong",                       "Gulf Storm (Korea)",        MACHINE_SUPPORTS_SAVE )
2800 
2801 GAME( 1991, pollux,    0,        pollux,   pollux,   dooyong_z80_ym2203_state, empty_init, ROT270, "Dooyong",                       "Pollux (set 1)",       MACHINE_SUPPORTS_SAVE )
2802 GAME( 1991, polluxa,   pollux,   pollux,   pollux,   dooyong_z80_ym2203_state, empty_init, ROT270, "Dooyong",                       "Pollux (set 2)",       MACHINE_SUPPORTS_SAVE )
2803 GAME( 1991, polluxa2,  pollux,   pollux,   pollux,   dooyong_z80_ym2203_state, empty_init, ROT270, "Dooyong",                       "Pollux (set 3)",       MACHINE_SUPPORTS_SAVE ) // Original Dooyong Board distributed by TCH
2804 GAME( 1991, polluxn,   pollux,   pollux,   pollux,   dooyong_z80_ym2203_state, empty_init, ROT270, "Dooyong (NTC / Atlus license)", "Pollux (Japan, NTC license, distributed by Atlus)", MACHINE_SUPPORTS_SAVE )
2805 
2806 GAME( 1992, flytiger,  0,        flytiger, flytiger, dooyong_z80_state,        empty_init, ROT270, "Dooyong",                       "Flying Tiger (set 1)",         MACHINE_SUPPORTS_SAVE )
2807 GAME( 1992, flytigera, flytiger, flytiger, flytiger, dooyong_z80_state,        empty_init, ROT270, "Dooyong",                       "Flying Tiger (set 2)",         MACHINE_SUPPORTS_SAVE )
2808 
2809 GAME( 1993, bluehawk,  0,        bluehawk, bluehawk, dooyong_z80_state,        empty_init, ROT270, "Dooyong",                       "Blue Hawk",                      MACHINE_SUPPORTS_SAVE )
2810 GAME( 1993, bluehawkn, bluehawk, bluehawk, bluehawk, dooyong_z80_state,        empty_init, ROT270, "Dooyong (NTC license)",         "Blue Hawk (Japan, NTC license)", MACHINE_SUPPORTS_SAVE )
2811 
2812 GAME( 1993, sadari,    0,        primella, sadari,   dooyong_z80_state,        empty_init, ROT0,   "Dooyong (NTC license)",         "Sadari (Japan, NTC license)",  MACHINE_SUPPORTS_SAVE )
2813 
2814 GAME( 1994, gundl94,   0,        primella, primella, dooyong_z80_state,        empty_init, ROT0,   "Dooyong",                       "Gun Dealer '94",                MACHINE_SUPPORTS_SAVE )
2815 GAME( 1994, primella,  gundl94,  primella, primella, dooyong_z80_state,        empty_init, ROT0,   "Dooyong (NTC license)",         "Primella (Japan, NTC license)", MACHINE_SUPPORTS_SAVE )
2816 
2817 GAME( 1994, superx,    0,        superx,   superx,   rshark_state,             empty_init, ROT270, "Dooyong (NTC license)",         "Super-X (NTC)",      MACHINE_SUPPORTS_SAVE )
2818 GAME( 1994, superxm,   superx,   superx,   superx,   rshark_state,             empty_init, ROT270, "Dooyong (Mitchell license)",    "Super-X (Mitchell)", MACHINE_SUPPORTS_SAVE )
2819 
2820 GAME( 1995, rshark,    0,        rshark,   rshark,   rshark_state,             empty_init, ROT270, "Dooyong",                       "R-Shark",              MACHINE_SUPPORTS_SAVE )
2821 
2822 GAME( 1996, popbingo,  0,        popbingo, popbingo, popbingo_state,           empty_init, ROT0,   "Dooyong",                       "Pop Bingo",            MACHINE_SUPPORTS_SAVE )
2823