1 // license:BSD-3-Clause
2 // copyright-holders:R. Belmont
3 /*************************************************************************
4 
5    Run and Gun / Slam Dunk
6    (c) 1993 Konami
7 
8    Driver by R. Belmont.
9 
10    This hardware uses the 55673 sprite chip like PreGX and System GX, but in a 4 bit
11    per pixel layout.  There is also an all-TTL front overlay tilemap and a rotating
12    scaling background done with the PSAC2 ('936).
13 
14    Status: Front tilemap should be complete, sprites are mostly correct, controls
15    should be fine.
16 
17    Known Issues:
18    - CRTC and video registers needs syncronization with current video draw state, it's very noticeable if for example scroll values are in very different states between screens.
19    - Current draw state could be improved optimization-wise (for example by supporting it in the core in some way).
20    - sprite palettes are not entirely right (fixed?)
21    - sound volume mixing, handtune with set_gain() with m_k054539 devices.
22      Also notice that "volume" in sound options is for k054539_1 (SFX)
23 
24    Change Log:
25 
26    (AT070703)
27    drivers\rungun.cpp (this file)
28      - mem maps, device settings, component communications, I/O's, sound...etc.
29 
30    video\rungun.cpp
31      - general clean-up, clipping, alignment
32 
33    video\konamiic.cpp
34      - missing sprites and priority
35 
36 
37 *************************************************************************/
38 
39 #include "emu.h"
40 #include "includes/rungun.h"
41 #include "includes/konamipt.h"
42 
43 #include "cpu/m68000/m68000.h"
44 #include "cpu/z80/z80.h"
45 #include "machine/eepromser.h"
46 #include "sound/k054539.h"
47 #include "speaker.h"
48 
49 #include "rungun_dual.lh"
50 
51 
52 
sysregs_r(offs_t offset,uint16_t mem_mask)53 uint16_t rungun_state::sysregs_r(offs_t offset, uint16_t mem_mask)
54 {
55 	uint16_t data = 0;
56 
57 	switch (offset)
58 	{
59 		case 0x00/2:
60 			return (ioport("P1")->read() | ioport("P3")->read() << 8);
61 
62 		case 0x02/2:
63 			return (ioport("P2")->read() | ioport("P4")->read() << 8);
64 
65 
66 		case 0x04/2:
67 			/*
68 			    bit0-7: coin mechs and services
69 			    bit8 : freeze
70 			    bit9 : screen output select
71 			*/
72 			{
73 				uint8_t field_bit = m_screen->frame_number() & 1;
74 				if(m_single_screen_mode == true)
75 					field_bit = 1;
76 				return (ioport("SYSTEM")->read() & 0xfdff) | (field_bit << 9);
77 			}
78 		case 0x06/2:
79 			if (ACCESSING_BITS_0_7)
80 			{
81 				data = ioport("DSW")->read();
82 			}
83 			return ((m_sysreg[0x06 / 2] & 0xff00) | data);
84 	}
85 
86 	return m_sysreg[offset];
87 }
88 
sysregs_w(offs_t offset,uint16_t data,uint16_t mem_mask)89 void rungun_state::sysregs_w(offs_t offset, uint16_t data, uint16_t mem_mask)
90 {
91 	COMBINE_DATA(m_sysreg + offset);
92 
93 	switch (offset)
94 	{
95 		case 0x08/2:
96 			/*
97 			    bit0  : eeprom_di_write
98 			    bit1  : eeprom_cs_write
99 			    bit2  : eeprom_clk_write
100 			    bit3  : coin counter #1
101 			    bit4  : coin counter #2 (when coin slot "common" is selected)
102 			    bit7  : set before massive memory writes (video chip select?)
103 			    bit10 : IRQ5 ACK
104 			    bit12 : if set, forces screen output to 1 monitor.
105 			    bit14 : (0) sprite on top of PSAC2 layer (1) other way around (title screen)
106 			*/
107 			if (ACCESSING_BITS_0_7)
108 			{
109 				membank("spriteram_bank")->set_entry((data & 0x80) >> 7);
110 				m_video_mux_bank = ((data & 0x80) >> 7) ^ 1;
111 				ioport("EEPROMOUT")->write(data, 0xff);
112 
113 				machine().bookkeeping().coin_counter_w(0, data & 0x08);
114 				machine().bookkeeping().coin_counter_w(1, data & 0x10);
115 			}
116 			if (ACCESSING_BITS_8_15)
117 			{
118 				m_single_screen_mode = (data & 0x1000) == 0x1000;
119 				m_video_priority_mode = (data & 0x4000) == 0x4000;
120 				if (!(data & 0x400)) // actually a 0 -> 1 transition
121 					m_maincpu->set_input_line(M68K_IRQ_5, CLEAR_LINE);
122 			}
123 		break;
124 
125 		case 0x0c/2:
126 			/*
127 			    bit 0  : also enables IRQ???
128 			    bit 1  : disable PSAC2 input?
129 			    bit 2  : OBJCHA
130 			    bit 3  : enable IRQ 5
131 			    bit 7-4: base address for 53936 ROM readback.
132 			*/
133 			m_k055673->k053246_set_objcha_line((data & 0x04) ? ASSERT_LINE : CLEAR_LINE);
134 			m_roz_rombase = (data & 0xf0) >> 4;
135 		break;
136 	}
137 }
138 
sound_irq_w(offs_t offset,uint16_t data,uint16_t mem_mask)139 void rungun_state::sound_irq_w(offs_t offset, uint16_t data, uint16_t mem_mask)
140 {
141 	if (ACCESSING_BITS_8_15)
142 		m_soundcpu->set_input_line(0, HOLD_LINE);
143 }
144 
INTERRUPT_GEN_MEMBER(rungun_state::rng_interrupt)145 INTERRUPT_GEN_MEMBER(rungun_state::rng_interrupt)
146 {
147 	// send to sprite device current state (i.e. bread & butter sprite DMA)
148 	// TODO: firing this in screen update causes sprites to desync badly ...
149 	sprite_dma_trigger();
150 
151 	if (m_sysreg[0x0c / 2] & 0x09)
152 		device.execute().set_input_line(M68K_IRQ_5, ASSERT_LINE);
153 }
154 
k53936_rom_r(offs_t offset)155 uint8_t rungun_state::k53936_rom_r(offs_t offset)
156 {
157 	// TODO: odd addresses returns ...?
158 	uint32_t rom_addr = offset;
159 	rom_addr+= (m_roz_rombase)*0x20000;
160 	return m_roz_rom[rom_addr];
161 }
162 
palette_read(offs_t offset)163 uint16_t rungun_state::palette_read(offs_t offset)
164 {
165 	return m_pal_ram[offset + m_video_mux_bank*0x800/2];
166 }
167 
palette_write(offs_t offset,uint16_t data,uint16_t mem_mask)168 void rungun_state::palette_write(offs_t offset, uint16_t data, uint16_t mem_mask)
169 {
170 	palette_device &cur_paldevice = m_video_mux_bank == 0 ? *m_palette : *m_palette2;
171 	uint32_t addr = offset + m_video_mux_bank*0x800/2;
172 	COMBINE_DATA(&m_pal_ram[addr]);
173 
174 	uint8_t r,g,b;
175 
176 	r = m_pal_ram[addr] & 0x1f;
177 	g = (m_pal_ram[addr] & 0x3e0) >> 5;
178 	b = (m_pal_ram[addr] & 0x7e00) >> 10;
179 
180 	cur_paldevice.set_pen_color(offset,pal5bit(r),pal5bit(g),pal5bit(b));
181 }
182 
rungun_map(address_map & map)183 void rungun_state::rungun_map(address_map &map)
184 {
185 	map(0x000000, 0x2fffff).rom();                                         // main program + data
186 	map(0x300000, 0x3007ff).rw(FUNC(rungun_state::palette_read), FUNC(rungun_state::palette_write));
187 	map(0x380000, 0x39ffff).ram();                                         // work RAM
188 	map(0x400000, 0x43ffff).r(FUNC(rungun_state::k53936_rom_r)).umask16(0x00ff);               // '936 ROM readback window
189 	map(0x480000, 0x48001f).rw(FUNC(rungun_state::sysregs_r), FUNC(rungun_state::sysregs_w)).share("sysreg");
190 	map(0x4c0000, 0x4c001f).rw(m_k053252, FUNC(k053252_device::read), FUNC(k053252_device::write)).umask16(0x00ff);                        // CCU (for scanline and vblank polling)
191 	map(0x540000, 0x540001).w(FUNC(rungun_state::sound_irq_w));
192 	map(0x580000, 0x58001f).m(m_k054321, FUNC(k054321_device::main_map)).umask16(0xff00);
193 	map(0x5c0000, 0x5c000f).r(m_k055673, FUNC(k055673_device::k055673_rom_word_r));                       // 246A ROM readback window
194 	map(0x5c0010, 0x5c001f).w(m_k055673, FUNC(k055673_device::k055673_reg_word_w));
195 	map(0x600000, 0x601fff).bankrw("spriteram_bank");                                                // OBJ RAM
196 	map(0x640000, 0x640007).w(m_k055673, FUNC(k055673_device::k053246_w));                      // '246A registers
197 	map(0x680000, 0x68001f).w(m_k053936, FUNC(k053936_device::ctrl_w));          // '936 registers
198 	map(0x6c0000, 0x6cffff).rw(FUNC(rungun_state::psac2_videoram_r), FUNC(rungun_state::psac2_videoram_w)); // PSAC2 ('936) RAM (34v + 35v)
199 	map(0x700000, 0x7007ff).rw(m_k053936, FUNC(k053936_device::linectrl_r), FUNC(k053936_device::linectrl_w));          // PSAC "Line RAM"
200 	map(0x740000, 0x741fff).rw(FUNC(rungun_state::ttl_ram_r), FUNC(rungun_state::ttl_ram_w));     // text plane RAM
201 	map(0x7c0000, 0x7c0001).nopw();                                    // watchdog
202 }
203 
204 
205 /**********************************************************************************/
206 
sound_status_w(uint8_t data)207 void rungun_state::sound_status_w(uint8_t data)
208 {
209 	m_sound_status = data;
210 }
211 
sound_ctrl_w(uint8_t data)212 void rungun_state::sound_ctrl_w(uint8_t data)
213 {
214 	/*
215 	    .... xxxx - Z80 ROM bank
216 	    ...x .... - NMI enable/acknowledge
217 	    xx.. .... - BLT2/1 (?)
218 	*/
219 
220 	membank("bank2")->set_entry(data & 0x07);
221 
222 	if (!(data & 0x10))
223 		m_soundcpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
224 
225 	m_sound_ctrl = data;
226 }
227 
WRITE_LINE_MEMBER(rungun_state::k054539_nmi_gen)228 WRITE_LINE_MEMBER(rungun_state::k054539_nmi_gen)
229 {
230 	if (m_sound_ctrl & 0x10)
231 	{
232 		// Trigger an /NMI on the rising edge
233 		if (!m_sound_nmi_clk && state)
234 		{
235 			m_soundcpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
236 		}
237 	}
238 
239 	m_sound_nmi_clk = state;
240 }
241 
242 /* sound (this should be split into audio/xexex.cpp or pregx.cpp or so someday) */
243 
rungun_sound_map(address_map & map)244 void rungun_state::rungun_sound_map(address_map &map)
245 {
246 	map(0x0000, 0x7fff).rom();
247 	map(0x8000, 0xbfff).bankr("bank2");
248 	map(0xc000, 0xdfff).ram();
249 	map(0xe000, 0xe22f).rw(m_k054539_1, FUNC(k054539_device::read), FUNC(k054539_device::write));
250 	map(0xe230, 0xe3ff).ram();
251 	map(0xe400, 0xe62f).rw(m_k054539_2, FUNC(k054539_device::read), FUNC(k054539_device::write));
252 	map(0xe630, 0xe7ff).ram();
253 	map(0xf000, 0xf003).m(m_k054321, FUNC(k054321_device::sound_map));
254 	map(0xf800, 0xf800).w(FUNC(rungun_state::sound_ctrl_w));
255 	map(0xfff0, 0xfff3).nopw();
256 }
257 
258 
259 static INPUT_PORTS_START( rng )
260 	PORT_START("SYSTEM")
261 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
262 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
263 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 )
264 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN4 )
265 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 )
266 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE2 )
267 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE3 )
268 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE4 )
269 	PORT_DIPNAME( 0x0100, 0x0000, "Freeze" )
270 	PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
271 	PORT_DIPSETTING( 0x0100, DEF_STR( On ) )
272 	PORT_DIPNAME( 0x0200, 0x0200, "Field Bit (DEBUG)" )
273 	PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
274 	PORT_DIPSETTING( 0x0200, DEF_STR( On ) )
275 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN )
276 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN )
277 
278 	PORT_START("DSW")
279 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read)
280 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read)
281 	PORT_DIPNAME( 0x04, 0x04, "Bit2 (Unknown)" )
282 	PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
283 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
284 	PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW )
285 	PORT_DIPNAME( 0x10, 0x00, "Monitors" )
286 	PORT_DIPSETTING(    0x00, "1" )
287 	PORT_DIPSETTING(    0x10, "2" )
288 	PORT_DIPNAME( 0x20, 0x00, "Number of players" )
289 	PORT_DIPSETTING(    0x00, "2" )
290 	PORT_DIPSETTING(    0x20, "4" )
291 	PORT_DIPNAME( 0x40, 0x00, "Sound Output" )
292 	PORT_DIPSETTING(    0x40, DEF_STR( Mono ) )
293 	PORT_DIPSETTING(    0x00, DEF_STR( Stereo ) )
294 	PORT_DIPNAME( 0x80, 0x80, "Bit7 (Unknown)" )
295 	PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
296 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
297 
298 	PORT_START( "EEPROMOUT" )
299 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write)
300 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write)
301 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write)
302 
303 	PORT_START("P1")
304 	KONAMI8_B123_START(1)
305 
306 	PORT_START("P2")
307 	KONAMI8_B123_START(2)
308 
309 	PORT_START("P3")
310 	KONAMI8_B123_START(3)
311 
312 	PORT_START("P4")
313 	KONAMI8_B123_START(4)
314 INPUT_PORTS_END
315 
316 static INPUT_PORTS_START( rng_dual )
317 	PORT_INCLUDE(rng)
318 
319 	PORT_MODIFY("DSW")
320 	PORT_DIPNAME( 0x10, 0x10, "Monitors" )
321 	PORT_DIPSETTING(    0x00, "1" )
322 	PORT_DIPSETTING(    0x10, "2" )
323 	PORT_DIPNAME( 0x20, 0x20, "Number of players" )
324 	PORT_DIPSETTING(    0x00, "2" )
325 	PORT_DIPSETTING(    0x20, "4" )
326 INPUT_PORTS_END
327 
328 
329 static INPUT_PORTS_START( rng_nodip )
330 	PORT_INCLUDE(rng)
331 
332 	PORT_MODIFY("DSW")
333 	PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
334 	PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
335 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
336 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
337 	PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
338 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
339 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
340 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
341 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
342 INPUT_PORTS_END
343 
344 /**********************************************************************************/
345 
346 static const gfx_layout bglayout =
347 {
348 	16,16,
349 	RGN_FRAC(1,1),
350 	4,
351 	{ 0, 1, 2, 3 },
352 	{ 0*4, 1*4, 2*4, 3*4, 4*4, 5*4, 6*4, 7*4, 8*4,
353 		9*4, 10*4, 11*4, 12*4, 13*4, 14*4, 15*4 },
354 	{ 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64,
355 			8*64, 9*64, 10*64, 11*64, 12*64, 13*64, 14*64, 15*64 },
356 	128*8
357 };
358 
359 static GFXDECODE_START( gfx_rungun )
360 	GFXDECODE_ENTRY( "gfx1", 0, bglayout, 0x0000, 64 )
361 GFXDECODE_END
362 
363 
machine_start()364 void rungun_state::machine_start()
365 {
366 	uint8_t *ROM = memregion("soundcpu")->base();
367 
368 	m_roz_rom = memregion("gfx1")->base();
369 	membank("bank2")->configure_entries(0, 8, &ROM[0x10000], 0x4000);
370 
371 	m_banked_ram = make_unique_clear<uint16_t[]>(0x2000);
372 	m_pal_ram = make_unique_clear<uint16_t[]>(0x800*2);
373 	membank("spriteram_bank")->configure_entries(0,2,&m_banked_ram[0],0x2000);
374 
375 	save_item(NAME(m_sound_ctrl));
376 	save_item(NAME(m_sound_status));
377 	save_item(NAME(m_sound_nmi_clk));
378 	//save_item(NAME(m_ttl_vram));
379 }
380 
machine_reset()381 void rungun_state::machine_reset()
382 {
383 	memset(m_sysreg, 0, 0x20);
384 	//memset(m_ttl_vram, 0, 0x1000 * sizeof(uint16_t));
385 
386 	m_sound_ctrl = 0;
387 	m_sound_status = 0;
388 }
389 
rng(machine_config & config)390 void rungun_state::rng(machine_config &config)
391 {
392 	/* basic machine hardware */
393 	M68000(config, m_maincpu, 16000000);
394 	m_maincpu->set_addrmap(AS_PROGRAM, &rungun_state::rungun_map);
395 	m_maincpu->set_vblank_int("screen", FUNC(rungun_state::rng_interrupt));
396 
397 	Z80(config, m_soundcpu, 8000000);
398 	m_soundcpu->set_addrmap(AS_PROGRAM, &rungun_state::rungun_sound_map);
399 
400 	config.set_maximum_quantum(attotime::from_hz(6000)); // higher if sound stutters
401 
402 	GFXDECODE(config, m_gfxdecode, m_palette, gfx_rungun);
403 
404 	EEPROM_ER5911_8BIT(config, "eeprom");
405 
406 	/* video hardware */
407 	SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
408 	m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
409 	m_screen->set_refresh_hz(59.185606);
410 	m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
411 	m_screen->set_size(64*8, 32*8);
412 	m_screen->set_visarea(88, 88+416-1, 24, 24+224-1);
413 	m_screen->set_screen_update(FUNC(rungun_state::screen_update_rng));
414 	m_screen->set_palette(m_palette);
415 	m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE);
416 
417 	PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 1024);
418 	m_palette->enable_shadows();
419 	m_palette->enable_hilights();
420 
421 	K053936(config, m_k053936, 0);
422 	m_k053936->set_offsets(34, 9);
423 
424 	K055673(config, m_k055673, 0);
425 	m_k055673->set_sprite_callback(FUNC(rungun_state::sprite_callback));
426 	m_k055673->set_config(K055673_LAYOUT_RNG, -8, 15);
427 	m_k055673->set_palette(m_palette);
428 	m_k055673->set_screen(m_screen);
429 
430 	K053252(config, m_k053252, 16000000/2);
431 	m_k053252->set_offsets(9*8, 24);
432 	m_k053252->set_screen("screen");
433 
434 	PALETTE(config, m_palette2).set_format(palette_device::xBGR_555, 1024);
435 	m_palette->enable_shadows();
436 	m_palette->enable_hilights();
437 
438 	/* sound hardware */
439 	SPEAKER(config, "lspeaker").front_left();
440 	SPEAKER(config, "rspeaker").front_right();
441 
442 	K054321(config, m_k054321, "lspeaker", "rspeaker");
443 
444 	// SFX
445 	K054539(config, m_k054539_1, 18.432_MHz_XTAL);
446 	m_k054539_1->set_device_rom_tag("k054539");
447 	m_k054539_1->timer_handler().set(FUNC(rungun_state::k054539_nmi_gen));
448 	m_k054539_1->add_route(0, "rspeaker", 1.0);
449 	m_k054539_1->add_route(1, "lspeaker", 1.0);
450 
451 	// BGM, volumes handtuned to make SFXs audible (still not 100% right tho)
452 	K054539(config, m_k054539_2, 18.432_MHz_XTAL);
453 	m_k054539_2->set_device_rom_tag("k054539");
454 	m_k054539_2->add_route(0, "rspeaker", 0.6);
455 	m_k054539_2->add_route(1, "lspeaker", 0.6);
456 }
457 
458 // for dual-screen output Run and Gun requires the video de-multiplexer board connected to the Jamma output, this gives you 2 Jamma connectors, one for each screen.
459 // this means when operated as a single dedicated cabinet the game runs at 60fps, and has smoother animations than when operated as a twin setup where each
460 // screen only gets an update every other frame.
rng_dual(machine_config & config)461 void rungun_state::rng_dual(machine_config &config)
462 {
463 	rng(config);
464 
465 	m_screen->set_screen_update(FUNC(rungun_state::screen_update_rng_dual_left));
466 
467 	screen_device &demultiplex2(SCREEN(config, "demultiplex2", SCREEN_TYPE_RASTER));
468 	demultiplex2.set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
469 	demultiplex2.set_refresh_hz(59.185606);
470 	demultiplex2.set_vblank_time(ATTOSECONDS_IN_USEC(0));
471 	demultiplex2.set_size(64*8, 32*8);
472 	demultiplex2.set_visarea(88, 88+416-1, 24, 24+224-1);
473 	demultiplex2.set_screen_update(FUNC(rungun_state::screen_update_rng_dual_right));
474 	demultiplex2.set_palette(m_palette2);
475 
476 	m_k053252->set_slave_screen("demultiplex2");
477 }
478 
479 
480 // Older non-US 53936/A13 roms were all returning bad from the mask ROM check. Using the US ROM on non-US reports good therefore I guess that data matches for that
481 // across all sets.
482 
483 ROM_START( rungun )
484 	/* main program Europe Version AA  1993, 10.8 */
485 	ROM_REGION( 0x300000, "maincpu", 0)
486 	ROM_LOAD16_BYTE( "247eaa03.bin", 0x000000, 0x80000, CRC(f5c91ec0) SHA1(298926ea30472fa8d2c0578dfeaf9a93509747ef) )
487 	ROM_LOAD16_BYTE( "247eaa04.bin", 0x000001, 0x80000, CRC(0e62471f) SHA1(2861b7a4e78ff371358d318a1b13a6488c0ac364) )
488 
489 	/* data (Guru 1 megabyte redump) */
490 	ROM_LOAD16_BYTE( "247b01.23n", 0x200000, 0x80000, CRC(2d774f27) SHA1(c48de9cb9daba25603b8278e672f269807aa0b20) )
491 	ROM_CONTINUE(                  0x100000, 0x80000)
492 	ROM_LOAD16_BYTE( "247b02.21n", 0x200001, 0x80000, CRC(d088c9de) SHA1(19d7ad4120f7cfed9cae862bb0c799fdad7ab15c) )
493 	ROM_CONTINUE(                  0x100001, 0x80000)
494 
495 	/* sound program */
496 	ROM_REGION( 0x030000, "soundcpu", 0 )
497 	ROM_LOAD("247a05",  0x000000, 0x20000, CRC(64e85430) SHA1(542919c3be257c8f118fc21d3835d7b6426a22ed) )
498 	ROM_RELOAD(         0x010000, 0x20000 )
499 
500 	/* '936 tiles */
501 	ROM_REGION( 0x400000, "gfx1", 0)
502 	//ROM_LOAD( "247-a13", 0x000000, 0x200000, BAD_DUMP CRC(cc194089) SHA1(b5af94f5f583d282ac1499b371bbaac8b2fedc03) )
503 	ROM_LOAD( "247a13", 0x000000, 0x200000, CRC(c5a8ef29) SHA1(23938b8093bc0b9eef91f6d38127ca7acbdc06a6) )
504 
505 	/* sprites */
506 	ROM_REGION( 0x800000, "k055673", 0)
507 	ROM_LOAD64_WORD( "247-a11", 0x000000, 0x200000, CRC(c3f60854) SHA1(cbee7178ab9e5aa6a5aeed0511e370e29001fb01) )  // 5y
508 	ROM_LOAD64_WORD( "247-a08", 0x000002, 0x200000, CRC(3e315eef) SHA1(898bc4d5ad244e5f91cbc87820b5d0be99ef6662) )  // 2u
509 	ROM_LOAD64_WORD( "247-a09", 0x000004, 0x200000, CRC(5ca7bc06) SHA1(83c793c68227399f93bd1ed167dc9ed2aaac4167) )  // 2y
510 	ROM_LOAD64_WORD( "247-a10", 0x000006, 0x200000, CRC(a5ccd243) SHA1(860b88ade1a69f8b6c5b8206424814b386343571) )  // 5u
511 
512 	/* TTL text plane ("fix layer") */
513 	ROM_REGION( 0x20000, "gfx3", 0)
514 	ROM_LOAD( "247-a12", 0x000000, 0x20000, CRC(57a8d26e) SHA1(0431d10b76d77c26a1f6f2b55d9dbcfa959e1cd0) )
515 
516 	/* sound data */
517 	ROM_REGION( 0x400000, "k054539", 0)
518 	ROM_LOAD( "247-a06", 0x000000, 0x200000, CRC(b8b2a67e) SHA1(a873d32f4b178c714743664fa53c0dca29cb3ce4) )
519 	ROM_LOAD( "247-a07", 0x200000, 0x200000, CRC(0108142d) SHA1(4dc6a36d976dad9c0da5a5b1f01f2eb3b369c99d) )
520 
521 	ROM_REGION( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with error
522 	ROM_LOAD( "rungun.nv", 0x0000, 0x080, CRC(7bbf0e3c) SHA1(0fd3c9400e9b97a06517e0c8620f773a383100fd) )
523 ROM_END
524 
525 ROM_START( rungund ) // same as above set, but with demux adapter connected
526 	/* main program Europe Version AA  1993, 10.8 */
527 	ROM_REGION( 0x300000, "maincpu", 0)
528 	ROM_LOAD16_BYTE( "247eaa03.bin", 0x000000, 0x80000, CRC(f5c91ec0) SHA1(298926ea30472fa8d2c0578dfeaf9a93509747ef) )
529 	ROM_LOAD16_BYTE( "247eaa04.bin", 0x000001, 0x80000, CRC(0e62471f) SHA1(2861b7a4e78ff371358d318a1b13a6488c0ac364) )
530 
531 	/* data (Guru 1 megabyte redump) */
532 	ROM_LOAD16_BYTE( "247b01.23n", 0x200000, 0x80000, CRC(2d774f27) SHA1(c48de9cb9daba25603b8278e672f269807aa0b20) )
533 	ROM_CONTINUE(                  0x100000, 0x80000)
534 	ROM_LOAD16_BYTE( "247b02.21n", 0x200001, 0x80000, CRC(d088c9de) SHA1(19d7ad4120f7cfed9cae862bb0c799fdad7ab15c) )
535 	ROM_CONTINUE(                  0x100001, 0x80000)
536 
537 	/* sound program */
538 	ROM_REGION( 0x030000, "soundcpu", 0 )
539 	ROM_LOAD("247a05",  0x000000, 0x20000, CRC(64e85430) SHA1(542919c3be257c8f118fc21d3835d7b6426a22ed) )
540 	ROM_RELOAD(         0x010000, 0x20000 )
541 
542 	/* '936 tiles */
543 	ROM_REGION( 0x400000, "gfx1", 0)
544 	//ROM_LOAD( "247-a13", 0x000000, 0x200000, BAD_DUMP CRC(cc194089) SHA1(b5af94f5f583d282ac1499b371bbaac8b2fedc03) )
545 	ROM_LOAD( "247a13", 0x000000, 0x200000, CRC(c5a8ef29) SHA1(23938b8093bc0b9eef91f6d38127ca7acbdc06a6) )
546 
547 	/* sprites */
548 	ROM_REGION( 0x800000, "k055673", 0)
549 	ROM_LOAD64_WORD( "247-a11", 0x000000, 0x200000, CRC(c3f60854) SHA1(cbee7178ab9e5aa6a5aeed0511e370e29001fb01) )  // 5y
550 	ROM_LOAD64_WORD( "247-a08", 0x000002, 0x200000, CRC(3e315eef) SHA1(898bc4d5ad244e5f91cbc87820b5d0be99ef6662) )  // 2u
551 	ROM_LOAD64_WORD( "247-a09", 0x000004, 0x200000, CRC(5ca7bc06) SHA1(83c793c68227399f93bd1ed167dc9ed2aaac4167) )  // 2y
552 	ROM_LOAD64_WORD( "247-a10", 0x000006, 0x200000, CRC(a5ccd243) SHA1(860b88ade1a69f8b6c5b8206424814b386343571) )  // 5u
553 
554 	/* TTL text plane ("fix layer") */
555 	ROM_REGION( 0x20000, "gfx3", 0)
556 	ROM_LOAD( "247-a12", 0x000000, 0x20000, CRC(57a8d26e) SHA1(0431d10b76d77c26a1f6f2b55d9dbcfa959e1cd0) )
557 
558 	/* sound data */
559 	ROM_REGION( 0x400000, "k054539", 0)
560 	ROM_LOAD( "247-a06", 0x000000, 0x200000, CRC(b8b2a67e) SHA1(a873d32f4b178c714743664fa53c0dca29cb3ce4) )
561 	ROM_LOAD( "247-a07", 0x200000, 0x200000, CRC(0108142d) SHA1(4dc6a36d976dad9c0da5a5b1f01f2eb3b369c99d) )
562 
563 	ROM_REGION( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with error
564 	ROM_LOAD( "rungun.nv", 0x0000, 0x080, CRC(7bbf0e3c) SHA1(0fd3c9400e9b97a06517e0c8620f773a383100fd) )
565 ROM_END
566 
567 ROM_START( runguna )
568 	/* main program Europe Version AA 1993, 10.4 */
569 	ROM_REGION( 0x300000, "maincpu", 0)
570 	ROM_LOAD16_BYTE( "247eaa03.rom", 0x000000, 0x80000, CRC(fec3e1d6) SHA1(cd89dc32ad06308134d277f343a7e8b5fe381f69) )
571 	ROM_LOAD16_BYTE( "247eaa04.rom", 0x000001, 0x80000, CRC(1b556af9) SHA1(c8351ebd595307d561d089c66cd6ed7f6111d996) )
572 
573 	/* data (Guru 1 megabyte redump) */
574 	ROM_LOAD16_BYTE( "247b01.23n", 0x200000, 0x80000, CRC(2d774f27) SHA1(c48de9cb9daba25603b8278e672f269807aa0b20) )
575 	ROM_CONTINUE(                  0x100000, 0x80000)
576 	ROM_LOAD16_BYTE( "247b02.21n", 0x200001, 0x80000, CRC(d088c9de) SHA1(19d7ad4120f7cfed9cae862bb0c799fdad7ab15c) )
577 	ROM_CONTINUE(                  0x100001, 0x80000)
578 
579 	/* sound program */
580 	ROM_REGION( 0x030000, "soundcpu", 0 )
581 	ROM_LOAD("1.13g",  0x000000, 0x20000, CRC(c0b35df9) SHA1(a0c73d993eb32bd0cd192351b5f86794efd91949) )
582 	ROM_RELOAD(         0x010000, 0x20000 )
583 
584 	/* '936 tiles */
585 	ROM_REGION( 0x400000, "gfx1", 0)
586 	//ROM_LOAD( "247-a13", 0x000000, 0x200000, BAD_DUMP CRC(cc194089) SHA1(b5af94f5f583d282ac1499b371bbaac8b2fedc03) )
587 	ROM_LOAD( "247a13", 0x000000, 0x200000, CRC(c5a8ef29) SHA1(23938b8093bc0b9eef91f6d38127ca7acbdc06a6) )
588 
589 	/* sprites */
590 	ROM_REGION( 0x800000, "k055673", 0)
591 	ROM_LOAD64_WORD( "247-a11", 0x000000, 0x200000, CRC(c3f60854) SHA1(cbee7178ab9e5aa6a5aeed0511e370e29001fb01) )  // 5y
592 	ROM_LOAD64_WORD( "247-a08", 0x000002, 0x200000, CRC(3e315eef) SHA1(898bc4d5ad244e5f91cbc87820b5d0be99ef6662) )  // 2u
593 	ROM_LOAD64_WORD( "247-a09", 0x000004, 0x200000, CRC(5ca7bc06) SHA1(83c793c68227399f93bd1ed167dc9ed2aaac4167) )  // 2y
594 	ROM_LOAD64_WORD( "247-a10", 0x000006, 0x200000, CRC(a5ccd243) SHA1(860b88ade1a69f8b6c5b8206424814b386343571) )  // 5u
595 
596 	/* TTL text plane ("fix layer") */
597 	ROM_REGION( 0x20000, "gfx3", 0)
598 	ROM_LOAD( "247-a12", 0x000000, 0x20000, CRC(57a8d26e) SHA1(0431d10b76d77c26a1f6f2b55d9dbcfa959e1cd0) )
599 
600 	/* sound data */
601 	ROM_REGION( 0x400000, "k054539", 0)
602 	ROM_LOAD( "247-a06", 0x000000, 0x200000, CRC(b8b2a67e) SHA1(a873d32f4b178c714743664fa53c0dca29cb3ce4) )
603 	ROM_LOAD( "247-a07", 0x200000, 0x200000, CRC(0108142d) SHA1(4dc6a36d976dad9c0da5a5b1f01f2eb3b369c99d) )
604 
605 	ROM_REGION( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with error
606 	ROM_LOAD( "runguna.nv", 0x0000, 0x080, CRC(7bbf0e3c) SHA1(0fd3c9400e9b97a06517e0c8620f773a383100fd) )
607 ROM_END
608 
609 
610 ROM_START( rungunad ) // same as above set, but with demux adapter connected
611 	/* main program Europe Version AA 1993, 10.4 */
612 	ROM_REGION( 0x300000, "maincpu", 0)
613 	ROM_LOAD16_BYTE( "247eaa03.rom", 0x000000, 0x80000, CRC(fec3e1d6) SHA1(cd89dc32ad06308134d277f343a7e8b5fe381f69) )
614 	ROM_LOAD16_BYTE( "247eaa04.rom", 0x000001, 0x80000, CRC(1b556af9) SHA1(c8351ebd595307d561d089c66cd6ed7f6111d996) )
615 
616 	/* data (Guru 1 megabyte redump) */
617 	ROM_LOAD16_BYTE( "247b01.23n", 0x200000, 0x80000, CRC(2d774f27) SHA1(c48de9cb9daba25603b8278e672f269807aa0b20) )
618 	ROM_CONTINUE(                  0x100000, 0x80000)
619 	ROM_LOAD16_BYTE( "247b02.21n", 0x200001, 0x80000, CRC(d088c9de) SHA1(19d7ad4120f7cfed9cae862bb0c799fdad7ab15c) )
620 	ROM_CONTINUE(                  0x100001, 0x80000)
621 
622 	/* sound program */
623 	ROM_REGION( 0x030000, "soundcpu", 0 )
624 	ROM_LOAD("1.13g",  0x000000, 0x20000, CRC(c0b35df9) SHA1(a0c73d993eb32bd0cd192351b5f86794efd91949) )
625 	ROM_RELOAD(         0x010000, 0x20000 )
626 
627 	/* '936 tiles */
628 	ROM_REGION( 0x400000, "gfx1", 0)
629 	//ROM_LOAD( "247-a13", 0x000000, 0x200000, BAD_DUMP CRC(cc194089) SHA1(b5af94f5f583d282ac1499b371bbaac8b2fedc03) )
630 	ROM_LOAD( "247a13", 0x000000, 0x200000, CRC(c5a8ef29) SHA1(23938b8093bc0b9eef91f6d38127ca7acbdc06a6) )
631 
632 	/* sprites */
633 	ROM_REGION( 0x800000, "k055673", 0)
634 	ROM_LOAD64_WORD( "247-a11", 0x000000, 0x200000, CRC(c3f60854) SHA1(cbee7178ab9e5aa6a5aeed0511e370e29001fb01) )  // 5y
635 	ROM_LOAD64_WORD( "247-a08", 0x000002, 0x200000, CRC(3e315eef) SHA1(898bc4d5ad244e5f91cbc87820b5d0be99ef6662) )  // 2u
636 	ROM_LOAD64_WORD( "247-a09", 0x000004, 0x200000, CRC(5ca7bc06) SHA1(83c793c68227399f93bd1ed167dc9ed2aaac4167) )  // 2y
637 	ROM_LOAD64_WORD( "247-a10", 0x000006, 0x200000, CRC(a5ccd243) SHA1(860b88ade1a69f8b6c5b8206424814b386343571) )  // 5u
638 
639 	/* TTL text plane ("fix layer") */
640 	ROM_REGION( 0x20000, "gfx3", 0)
641 	ROM_LOAD( "247-a12", 0x000000, 0x20000, CRC(57a8d26e) SHA1(0431d10b76d77c26a1f6f2b55d9dbcfa959e1cd0) )
642 
643 	/* sound data */
644 	ROM_REGION( 0x400000, "k054539", 0)
645 	ROM_LOAD( "247-a06", 0x000000, 0x200000, CRC(b8b2a67e) SHA1(a873d32f4b178c714743664fa53c0dca29cb3ce4) )
646 	ROM_LOAD( "247-a07", 0x200000, 0x200000, CRC(0108142d) SHA1(4dc6a36d976dad9c0da5a5b1f01f2eb3b369c99d) )
647 
648 	ROM_REGION( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with error
649 	ROM_LOAD( "runguna.nv", 0x0000, 0x080, CRC(7bbf0e3c) SHA1(0fd3c9400e9b97a06517e0c8620f773a383100fd) )
650 ROM_END
651 
652 // This set fails the rom checks on 18n,16n and 21n even on real hardware but is clearly a different code revision to the above sets.
653 // The rom at 21N is the same between all sets so it failing makes very little sense.
654 // The date code places this at month before the other EAA sets, so maybe it's a prototype and the checksums in the ROM hadn't
655 // been finalized yet.
656 
657 ROM_START( rungunb )
658 	/* main program Europe Version AA 1993, 9.10 */
659 	ROM_REGION( 0x300000, "maincpu", 0)
660 	ROM_LOAD16_BYTE( "4.18n", 0x000000, 0x80000, CRC(d6515edb) SHA1(4c30c5df231945027a7d3c54e250b0a246ae3b17))
661 	ROM_LOAD16_BYTE( "5.16n", 0x000001, 0x80000, CRC(f2f03eec) SHA1(081fd43b83e148694d34349b826bd02e0a1f85c9))
662 
663 	/* data (Guru 1 megabyte redump) */
664 	ROM_LOAD16_BYTE( "247b01.23n", 0x200000, 0x80000, CRC(2d774f27) SHA1(c48de9cb9daba25603b8278e672f269807aa0b20) )
665 	ROM_CONTINUE(                  0x100000, 0x80000)
666 	ROM_LOAD16_BYTE( "247b02.21n", 0x200001, 0x80000, CRC(d088c9de) SHA1(19d7ad4120f7cfed9cae862bb0c799fdad7ab15c) )
667 	ROM_CONTINUE(                  0x100001, 0x80000)
668 
669 	/* sound program */
670 	ROM_REGION( 0x030000, "soundcpu", 0 )
671 	ROM_LOAD("1.13g",  0x000000, 0x20000, CRC(c0b35df9) SHA1(a0c73d993eb32bd0cd192351b5f86794efd91949) )
672 	ROM_RELOAD(         0x010000, 0x20000 )
673 
674 	/* '936 tiles */
675 	ROM_REGION( 0x400000, "gfx1", 0)
676 	//ROM_LOAD( "247-a13", 0x000000, 0x200000, BAD_DUMP CRC(cc194089) SHA1(b5af94f5f583d282ac1499b371bbaac8b2fedc03) )
677 	ROM_LOAD( "247a13", 0x000000, 0x200000, CRC(c5a8ef29) SHA1(23938b8093bc0b9eef91f6d38127ca7acbdc06a6) )
678 
679 	/* sprites */
680 	ROM_REGION( 0x800000, "k055673", 0)
681 	ROM_LOAD64_WORD( "247-a11", 0x000000, 0x200000, CRC(c3f60854) SHA1(cbee7178ab9e5aa6a5aeed0511e370e29001fb01) )  // 5y
682 	ROM_LOAD64_WORD( "247-a08", 0x000002, 0x200000, CRC(3e315eef) SHA1(898bc4d5ad244e5f91cbc87820b5d0be99ef6662) )  // 2u
683 	ROM_LOAD64_WORD( "247-a09", 0x000004, 0x200000, CRC(5ca7bc06) SHA1(83c793c68227399f93bd1ed167dc9ed2aaac4167) )  // 2y
684 	ROM_LOAD64_WORD( "247-a10", 0x000006, 0x200000, CRC(a5ccd243) SHA1(860b88ade1a69f8b6c5b8206424814b386343571) )  // 5u
685 
686 	/* TTL text plane ("fix layer") */
687 	ROM_REGION( 0x20000, "gfx3", 0)
688 	ROM_LOAD( "247-a12", 0x000000, 0x20000, CRC(57a8d26e) SHA1(0431d10b76d77c26a1f6f2b55d9dbcfa959e1cd0) )
689 
690 	/* sound data */
691 	ROM_REGION( 0x400000, "k054539", 0)
692 	ROM_LOAD( "247-a06", 0x000000, 0x200000, CRC(b8b2a67e) SHA1(a873d32f4b178c714743664fa53c0dca29cb3ce4) )
693 	ROM_LOAD( "247-a07", 0x200000, 0x200000, CRC(0108142d) SHA1(4dc6a36d976dad9c0da5a5b1f01f2eb3b369c99d) )
694 
695 	ROM_REGION( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with error
696 	ROM_LOAD( "runguna.nv", 0x0000, 0x080, CRC(7bbf0e3c) SHA1(0fd3c9400e9b97a06517e0c8620f773a383100fd) )
697 ROM_END
698 
699 
700 ROM_START( rungunbd ) // same as above set, but with demux adapter connected
701 	/* main program Europe Version AA 1993, 9.10 */
702 	ROM_REGION( 0x300000, "maincpu", 0)
703 	ROM_LOAD16_BYTE( "4.18n", 0x000000, 0x80000, CRC(d6515edb) SHA1(4c30c5df231945027a7d3c54e250b0a246ae3b17))
704 	ROM_LOAD16_BYTE( "5.16n", 0x000001, 0x80000, CRC(f2f03eec) SHA1(081fd43b83e148694d34349b826bd02e0a1f85c9))
705 
706 	/* data (Guru 1 megabyte redump) */
707 	ROM_LOAD16_BYTE( "247b01.23n", 0x200000, 0x80000, CRC(2d774f27) SHA1(c48de9cb9daba25603b8278e672f269807aa0b20) )
708 	ROM_CONTINUE(                  0x100000, 0x80000)
709 	ROM_LOAD16_BYTE( "247b02.21n", 0x200001, 0x80000, CRC(d088c9de) SHA1(19d7ad4120f7cfed9cae862bb0c799fdad7ab15c) )
710 	ROM_CONTINUE(                  0x100001, 0x80000)
711 
712 	/* sound program */
713 	ROM_REGION( 0x030000, "soundcpu", 0 )
714 	ROM_LOAD("1.13g",  0x000000, 0x20000, CRC(c0b35df9) SHA1(a0c73d993eb32bd0cd192351b5f86794efd91949) )
715 	ROM_RELOAD(         0x010000, 0x20000 )
716 
717 	/* '936 tiles */
718 	ROM_REGION( 0x400000, "gfx1", 0)
719 	//ROM_LOAD( "247-a13", 0x000000, 0x200000, BAD_DUMP CRC(cc194089) SHA1(b5af94f5f583d282ac1499b371bbaac8b2fedc03) )
720 	ROM_LOAD( "247a13", 0x000000, 0x200000, CRC(c5a8ef29) SHA1(23938b8093bc0b9eef91f6d38127ca7acbdc06a6) )
721 
722 	/* sprites */
723 	ROM_REGION( 0x800000, "k055673", 0)
724 	ROM_LOAD64_WORD( "247-a11", 0x000000, 0x200000, CRC(c3f60854) SHA1(cbee7178ab9e5aa6a5aeed0511e370e29001fb01) )  // 5y
725 	ROM_LOAD64_WORD( "247-a08", 0x000002, 0x200000, CRC(3e315eef) SHA1(898bc4d5ad244e5f91cbc87820b5d0be99ef6662) )  // 2u
726 	ROM_LOAD64_WORD( "247-a09", 0x000004, 0x200000, CRC(5ca7bc06) SHA1(83c793c68227399f93bd1ed167dc9ed2aaac4167) )  // 2y
727 	ROM_LOAD64_WORD( "247-a10", 0x000006, 0x200000, CRC(a5ccd243) SHA1(860b88ade1a69f8b6c5b8206424814b386343571) )  // 5u
728 
729 	/* TTL text plane ("fix layer") */
730 	ROM_REGION( 0x20000, "gfx3", 0)
731 	ROM_LOAD( "247-a12", 0x000000, 0x20000, CRC(57a8d26e) SHA1(0431d10b76d77c26a1f6f2b55d9dbcfa959e1cd0) )
732 
733 	/* sound data */
734 	ROM_REGION( 0x400000, "k054539", 0)
735 	ROM_LOAD( "247-a06", 0x000000, 0x200000, CRC(b8b2a67e) SHA1(a873d32f4b178c714743664fa53c0dca29cb3ce4) )
736 	ROM_LOAD( "247-a07", 0x200000, 0x200000, CRC(0108142d) SHA1(4dc6a36d976dad9c0da5a5b1f01f2eb3b369c99d) )
737 
738 	ROM_REGION( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with error
739 	ROM_LOAD( "runguna.nv", 0x0000, 0x080, CRC(7bbf0e3c) SHA1(0fd3c9400e9b97a06517e0c8620f773a383100fd) )
740 ROM_END
741 
742 ROM_START( rungunua )
743 	/* main program US Version BA 1993 10.8 */
744 	ROM_REGION( 0x300000, "maincpu", 0)
745 	ROM_LOAD16_BYTE( "247uba03.bin", 0x000000, 0x80000, CRC(c24d7500) SHA1(38e6ae9fc00bf8f85549be4733992336c46fe1f3) )
746 	ROM_LOAD16_BYTE( "247uba04.bin", 0x000001, 0x80000, CRC(3f255a4a) SHA1(3a4d50ecec8546933ad8dabe21682ba0951eaad0) )
747 
748 	/* data (Guru 1 megabyte redump) */
749 	ROM_LOAD16_BYTE( "247b01.23n", 0x200000, 0x80000, CRC(2d774f27) SHA1(c48de9cb9daba25603b8278e672f269807aa0b20) )
750 	ROM_CONTINUE(                  0x100000, 0x80000)
751 	ROM_LOAD16_BYTE( "247b02.21n", 0x200001, 0x80000, CRC(d088c9de) SHA1(19d7ad4120f7cfed9cae862bb0c799fdad7ab15c) )
752 	ROM_CONTINUE(                  0x100001, 0x80000)
753 
754 	/* sound program */
755 	ROM_REGION( 0x030000, "soundcpu", 0 )
756 	ROM_LOAD("247a05", 0x000000, 0x20000, CRC(64e85430) SHA1(542919c3be257c8f118fc21d3835d7b6426a22ed) )
757 	ROM_RELOAD(        0x010000, 0x20000 )
758 
759 	/* '936 tiles */
760 	ROM_REGION( 0x400000, "gfx1", 0)
761 	ROM_LOAD( "247a13", 0x000000, 0x200000, CRC(c5a8ef29) SHA1(23938b8093bc0b9eef91f6d38127ca7acbdc06a6) )
762 
763 	/* sprites */
764 	ROM_REGION( 0x800000, "k055673", 0)
765 	ROM_LOAD64_WORD( "247-a11", 0x000000, 0x200000, CRC(c3f60854) SHA1(cbee7178ab9e5aa6a5aeed0511e370e29001fb01) )  // 5y
766 	ROM_LOAD64_WORD( "247-a08", 0x000002, 0x200000, CRC(3e315eef) SHA1(898bc4d5ad244e5f91cbc87820b5d0be99ef6662) )  // 2u
767 	ROM_LOAD64_WORD( "247-a09", 0x000004, 0x200000, CRC(5ca7bc06) SHA1(83c793c68227399f93bd1ed167dc9ed2aaac4167) )  // 2y
768 	ROM_LOAD64_WORD( "247-a10", 0x000006, 0x200000, CRC(a5ccd243) SHA1(860b88ade1a69f8b6c5b8206424814b386343571) )  // 5u
769 
770 	/* TTL text plane ("fix layer") */
771 	ROM_REGION( 0x20000, "gfx3", 0)
772 	ROM_LOAD( "247-a12", 0x000000, 0x20000, CRC(57a8d26e) SHA1(0431d10b76d77c26a1f6f2b55d9dbcfa959e1cd0) )
773 
774 	/* sound data */
775 	ROM_REGION( 0x400000, "k054539", 0)
776 	ROM_LOAD( "247-a06", 0x000000, 0x200000, CRC(b8b2a67e) SHA1(a873d32f4b178c714743664fa53c0dca29cb3ce4) )
777 	ROM_LOAD( "247-a07", 0x200000, 0x200000, CRC(0108142d) SHA1(4dc6a36d976dad9c0da5a5b1f01f2eb3b369c99d) )
778 
779 	ROM_REGION( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with error
780 	ROM_LOAD( "rungunua.nv", 0x0000, 0x080, CRC(9890d304) SHA1(c94a77d1d45e372350456cf8eaa7e7ebd3cdbb84) )
781 ROM_END
782 
783 
784 ROM_START( rungunuad )  // same as above set, but with demux adapter connected
785 	/* main program US Version BA 1993 10.8 */
786 	ROM_REGION( 0x300000, "maincpu", 0)
787 	ROM_LOAD16_BYTE( "247uba03.bin", 0x000000, 0x80000, CRC(c24d7500) SHA1(38e6ae9fc00bf8f85549be4733992336c46fe1f3) )
788 	ROM_LOAD16_BYTE( "247uba04.bin", 0x000001, 0x80000, CRC(3f255a4a) SHA1(3a4d50ecec8546933ad8dabe21682ba0951eaad0) )
789 
790 	/* data (Guru 1 megabyte redump) */
791 	ROM_LOAD16_BYTE( "247b01.23n", 0x200000, 0x80000, CRC(2d774f27) SHA1(c48de9cb9daba25603b8278e672f269807aa0b20) )
792 	ROM_CONTINUE(                  0x100000, 0x80000)
793 	ROM_LOAD16_BYTE( "247b02.21n", 0x200001, 0x80000, CRC(d088c9de) SHA1(19d7ad4120f7cfed9cae862bb0c799fdad7ab15c) )
794 	ROM_CONTINUE(                  0x100001, 0x80000)
795 
796 	/* sound program */
797 	ROM_REGION( 0x030000, "soundcpu", 0 )
798 	ROM_LOAD("247a05", 0x000000, 0x20000, CRC(64e85430) SHA1(542919c3be257c8f118fc21d3835d7b6426a22ed) )
799 	ROM_RELOAD(        0x010000, 0x20000 )
800 
801 	/* '936 tiles */
802 	ROM_REGION( 0x400000, "gfx1", 0)
803 	ROM_LOAD( "247a13", 0x000000, 0x200000, CRC(c5a8ef29) SHA1(23938b8093bc0b9eef91f6d38127ca7acbdc06a6) )
804 
805 	/* sprites */
806 	ROM_REGION( 0x800000, "k055673", 0)
807 	ROM_LOAD64_WORD( "247-a11", 0x000000, 0x200000, CRC(c3f60854) SHA1(cbee7178ab9e5aa6a5aeed0511e370e29001fb01) )  // 5y
808 	ROM_LOAD64_WORD( "247-a08", 0x000002, 0x200000, CRC(3e315eef) SHA1(898bc4d5ad244e5f91cbc87820b5d0be99ef6662) )  // 2u
809 	ROM_LOAD64_WORD( "247-a09", 0x000004, 0x200000, CRC(5ca7bc06) SHA1(83c793c68227399f93bd1ed167dc9ed2aaac4167) )  // 2y
810 	ROM_LOAD64_WORD( "247-a10", 0x000006, 0x200000, CRC(a5ccd243) SHA1(860b88ade1a69f8b6c5b8206424814b386343571) )  // 5u
811 
812 	/* TTL text plane ("fix layer") */
813 	ROM_REGION( 0x20000, "gfx3", 0)
814 	ROM_LOAD( "247-a12", 0x000000, 0x20000, CRC(57a8d26e) SHA1(0431d10b76d77c26a1f6f2b55d9dbcfa959e1cd0) )
815 
816 	/* sound data */
817 	ROM_REGION( 0x400000, "k054539", 0)
818 	ROM_LOAD( "247-a06", 0x000000, 0x200000, CRC(b8b2a67e) SHA1(a873d32f4b178c714743664fa53c0dca29cb3ce4) )
819 	ROM_LOAD( "247-a07", 0x200000, 0x200000, CRC(0108142d) SHA1(4dc6a36d976dad9c0da5a5b1f01f2eb3b369c99d) )
820 
821 	ROM_REGION( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with error
822 	ROM_LOAD( "rungunua.nv", 0x0000, 0x080, CRC(9890d304) SHA1(c94a77d1d45e372350456cf8eaa7e7ebd3cdbb84) )
823 ROM_END
824 
825 ROM_START( slmdunkj )
826 	/* main program Japan Version AA 1993 10.8 */
827 	ROM_REGION( 0x300000, "maincpu", 0)
828 	ROM_LOAD16_BYTE( "247jaa03.bin", 0x000000, 0x20000, CRC(87572078) SHA1(cfa784eb40ed8b3bda9d57abb6022bbe92056206) )
829 	ROM_LOAD16_BYTE( "247jaa04.bin", 0x000001, 0x20000, CRC(aa105e00) SHA1(617ac14535048b6e0da43cc98c4b67c8e306bef1) )
830 
831 	/* data (Guru 1 megabyte redump) */
832 	ROM_LOAD16_BYTE( "247b01.23n", 0x200000, 0x80000, CRC(2d774f27) SHA1(c48de9cb9daba25603b8278e672f269807aa0b20) )
833 	ROM_CONTINUE(                  0x100000, 0x80000)
834 	ROM_LOAD16_BYTE( "247b02.21n", 0x200001, 0x80000, CRC(d088c9de) SHA1(19d7ad4120f7cfed9cae862bb0c799fdad7ab15c) )
835 	ROM_CONTINUE(                  0x100001, 0x80000)
836 
837 	/* sound program */
838 	ROM_REGION( 0x030000, "soundcpu", 0 )
839 	ROM_LOAD("247a05",  0x000000, 0x20000, CRC(64e85430) SHA1(542919c3be257c8f118fc21d3835d7b6426a22ed) )
840 	ROM_RELOAD(         0x010000, 0x20000 )
841 
842 	/* '936 tiles */
843 	ROM_REGION( 0x400000, "gfx1", 0)
844 	//ROM_LOAD( "247-a13", 0x000000, 0x200000, BAD_DUMP CRC(cc194089) SHA1(b5af94f5f583d282ac1499b371bbaac8b2fedc03) )
845 	ROM_LOAD( "247a13", 0x000000, 0x200000, CRC(c5a8ef29) SHA1(23938b8093bc0b9eef91f6d38127ca7acbdc06a6) )
846 
847 	/* sprites */
848 	ROM_REGION( 0x800000, "k055673", 0)
849 	ROM_LOAD64_WORD( "247-a11", 0x000000, 0x200000, CRC(c3f60854) SHA1(cbee7178ab9e5aa6a5aeed0511e370e29001fb01) )  // 5y
850 	ROM_LOAD64_WORD( "247-a08", 0x000002, 0x200000, CRC(3e315eef) SHA1(898bc4d5ad244e5f91cbc87820b5d0be99ef6662) )  // 2u
851 	ROM_LOAD64_WORD( "247-a09", 0x000004, 0x200000, CRC(5ca7bc06) SHA1(83c793c68227399f93bd1ed167dc9ed2aaac4167) )  // 2y
852 	ROM_LOAD64_WORD( "247-a10", 0x000006, 0x200000, CRC(a5ccd243) SHA1(860b88ade1a69f8b6c5b8206424814b386343571) )  // 5u
853 
854 	/* TTL text plane ("fix layer") */
855 	ROM_REGION( 0x20000, "gfx3", 0)
856 	ROM_LOAD( "247-a12", 0x000000, 0x20000, CRC(57a8d26e) SHA1(0431d10b76d77c26a1f6f2b55d9dbcfa959e1cd0) )
857 
858 	/* sound data */
859 	ROM_REGION( 0x400000, "k054539", 0)
860 	ROM_LOAD( "247-a06", 0x000000, 0x200000, CRC(b8b2a67e) SHA1(a873d32f4b178c714743664fa53c0dca29cb3ce4) )
861 	ROM_LOAD( "247-a07", 0x200000, 0x200000, CRC(0108142d) SHA1(4dc6a36d976dad9c0da5a5b1f01f2eb3b369c99d) )
862 
863 	ROM_REGION( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with error
864 	ROM_LOAD( "slmdunkj.nv", 0x0000, 0x080, CRC(531d27bd) SHA1(42251272691c66c1f89f99e6e5e2f300c1a7d69d) )
865 ROM_END
866 
867 ROM_START( slmdunkjd ) // same as above set, but with demux adapter connected
868 	/* main program Japan Version AA 1993 10.8 */
869 	ROM_REGION( 0x300000, "maincpu", 0)
870 	ROM_LOAD16_BYTE( "247jaa03.bin", 0x000000, 0x20000, CRC(87572078) SHA1(cfa784eb40ed8b3bda9d57abb6022bbe92056206) )
871 	ROM_LOAD16_BYTE( "247jaa04.bin", 0x000001, 0x20000, CRC(aa105e00) SHA1(617ac14535048b6e0da43cc98c4b67c8e306bef1) )
872 
873 	/* data (Guru 1 megabyte redump) */
874 	ROM_LOAD16_BYTE( "247b01.23n", 0x200000, 0x80000, CRC(2d774f27) SHA1(c48de9cb9daba25603b8278e672f269807aa0b20) )
875 	ROM_CONTINUE(                  0x100000, 0x80000)
876 	ROM_LOAD16_BYTE( "247b02.21n", 0x200001, 0x80000, CRC(d088c9de) SHA1(19d7ad4120f7cfed9cae862bb0c799fdad7ab15c) )
877 	ROM_CONTINUE(                  0x100001, 0x80000)
878 
879 	/* sound program */
880 	ROM_REGION( 0x030000, "soundcpu", 0 )
881 	ROM_LOAD("247a05",  0x000000, 0x20000, CRC(64e85430) SHA1(542919c3be257c8f118fc21d3835d7b6426a22ed) )
882 	ROM_RELOAD(         0x010000, 0x20000 )
883 
884 	/* '936 tiles */
885 	ROM_REGION( 0x400000, "gfx1", 0)
886 	//ROM_LOAD( "247-a13", 0x000000, 0x200000, BAD_DUMP CRC(cc194089) SHA1(b5af94f5f583d282ac1499b371bbaac8b2fedc03) )
887 	ROM_LOAD( "247a13", 0x000000, 0x200000, CRC(c5a8ef29) SHA1(23938b8093bc0b9eef91f6d38127ca7acbdc06a6) )
888 
889 	/* sprites */
890 	ROM_REGION( 0x800000, "k055673", 0)
891 	ROM_LOAD64_WORD( "247-a11", 0x000000, 0x200000, CRC(c3f60854) SHA1(cbee7178ab9e5aa6a5aeed0511e370e29001fb01) )  // 5y
892 	ROM_LOAD64_WORD( "247-a08", 0x000002, 0x200000, CRC(3e315eef) SHA1(898bc4d5ad244e5f91cbc87820b5d0be99ef6662) )  // 2u
893 	ROM_LOAD64_WORD( "247-a09", 0x000004, 0x200000, CRC(5ca7bc06) SHA1(83c793c68227399f93bd1ed167dc9ed2aaac4167) )  // 2y
894 	ROM_LOAD64_WORD( "247-a10", 0x000006, 0x200000, CRC(a5ccd243) SHA1(860b88ade1a69f8b6c5b8206424814b386343571) )  // 5u
895 
896 	/* TTL text plane ("fix layer") */
897 	ROM_REGION( 0x20000, "gfx3", 0)
898 	ROM_LOAD( "247-a12", 0x000000, 0x20000, CRC(57a8d26e) SHA1(0431d10b76d77c26a1f6f2b55d9dbcfa959e1cd0) )
899 
900 	/* sound data */
901 	ROM_REGION( 0x400000, "k054539", 0)
902 	ROM_LOAD( "247-a06", 0x000000, 0x200000, CRC(b8b2a67e) SHA1(a873d32f4b178c714743664fa53c0dca29cb3ce4) )
903 	ROM_LOAD( "247-a07", 0x200000, 0x200000, CRC(0108142d) SHA1(4dc6a36d976dad9c0da5a5b1f01f2eb3b369c99d) )
904 
905 	ROM_REGION( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with error
906 	ROM_LOAD( "slmdunkj.nv", 0x0000, 0x080, CRC(531d27bd) SHA1(42251272691c66c1f89f99e6e5e2f300c1a7d69d) )
907 ROM_END
908 
909 
910 
911 ROM_START( rungunud ) // dual cabinet setup ONLY
912 	/* main program US Version AB 1993 10.12 */
913 	ROM_REGION( 0x300000, "maincpu", 0)
914 	ROM_LOAD16_BYTE( "247uab03.bin", 0x000000, 0x80000, CRC(f259fd11) SHA1(60381a3fa7f78022dcb3e2f3d13ea32a10e4e36e) )
915 	ROM_LOAD16_BYTE( "247uab04.bin", 0x000001, 0x80000, CRC(b918cf5a) SHA1(4314c611ef600ec081f409c78218de1639f8b463) )
916 
917 	/* data */
918 	ROM_LOAD16_BYTE( "247a01", 0x100000, 0x80000, CRC(8341cf7d) SHA1(372c147c4a5d54aed2a16b0ed258247e65dda563) )
919 	ROM_LOAD16_BYTE( "247a02", 0x100001, 0x80000, CRC(f5ef3f45) SHA1(2e1d8f672c130dbfac4365dc1301b47beee10161) )
920 
921 	/* sound program */
922 	ROM_REGION( 0x030000, "soundcpu", 0 )
923 	ROM_LOAD("247a05", 0x000000, 0x20000, CRC(64e85430) SHA1(542919c3be257c8f118fc21d3835d7b6426a22ed) )
924 	ROM_RELOAD(        0x010000, 0x20000 )
925 
926 	/* '936 tiles */
927 	ROM_REGION( 0x400000, "gfx1", 0)
928 	ROM_LOAD( "247a13", 0x000000, 0x200000, CRC(c5a8ef29) SHA1(23938b8093bc0b9eef91f6d38127ca7acbdc06a6) )
929 
930 	/* sprites */
931 	ROM_REGION( 0x800000, "k055673", 0)
932 	ROM_LOAD64_WORD( "247-a11", 0x000000, 0x200000, CRC(c3f60854) SHA1(cbee7178ab9e5aa6a5aeed0511e370e29001fb01) )  // 5y
933 	ROM_LOAD64_WORD( "247-a08", 0x000002, 0x200000, CRC(3e315eef) SHA1(898bc4d5ad244e5f91cbc87820b5d0be99ef6662) )  // 2u
934 	ROM_LOAD64_WORD( "247-a09", 0x000004, 0x200000, CRC(5ca7bc06) SHA1(83c793c68227399f93bd1ed167dc9ed2aaac4167) )  // 2y
935 	ROM_LOAD64_WORD( "247-a10", 0x000006, 0x200000, CRC(a5ccd243) SHA1(860b88ade1a69f8b6c5b8206424814b386343571) )  // 5u
936 
937 	/* TTL text plane ("fix layer") */
938 	ROM_REGION( 0x20000, "gfx3", 0)
939 	ROM_LOAD( "247-a12", 0x000000, 0x20000, CRC(57a8d26e) SHA1(0431d10b76d77c26a1f6f2b55d9dbcfa959e1cd0) )
940 
941 	/* sound data */
942 	ROM_REGION( 0x400000, "k054539", 0)
943 	ROM_LOAD( "247-a06", 0x000000, 0x200000, CRC(b8b2a67e) SHA1(a873d32f4b178c714743664fa53c0dca29cb3ce4) )
944 	ROM_LOAD( "247-a07", 0x200000, 0x200000, CRC(0108142d) SHA1(4dc6a36d976dad9c0da5a5b1f01f2eb3b369c99d) )
945 
946 	ROM_REGION( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with error
947 	ROM_LOAD( "rungunu.nv", 0x0000, 0x080, CRC(d501f579) SHA1(9e01d9a6a8cdc782dd2a92fbf2295e8df732f892) )
948 ROM_END
949 
950 
951 // these sets operate as single screen / dual screen depending on if you have the video de-multiplexer plugged in, and the dipswitch set to 1 or 2 monitors
952 
953 // the 2nd letter of the code indicates the cabinet type, this is why the selectable (single/dual) screen version of Run and Gun for the USA is 'UBA' because the first release there 'UAA' was dual screen only.
954 // it appears that all other regions were switchable from the first release, so use the 'A' code.
955 
956 // these are running WITHOUT the demux adapter, on a single screen
957 GAME( 1993, rungun,   0,      rng, rng, rungun_state, empty_init, ROT0, "Konami", "Run and Gun (ver EAA 1993 10.8)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_SOUND )
958 GAME( 1993, runguna,  rungun, rng, rng, rungun_state, empty_init, ROT0, "Konami", "Run and Gun (ver EAA 1993 10.4)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_SOUND )
959 GAME( 1993, rungunb,  rungun, rng, rng, rungun_state, empty_init, ROT0, "Konami", "Run and Gun (ver EAA 1993 9.10, prototype?)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_SOUND )
960 GAME( 1993, rungunua, rungun, rng, rng, rungun_state, empty_init, ROT0, "Konami", "Run and Gun (ver UBA 1993 10.8)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_SOUND )
961 GAME( 1993, slmdunkj, rungun, rng, rng, rungun_state, empty_init, ROT0, "Konami", "Slam Dunk (ver JAA 1993 10.8)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_SOUND )
962 
963 // these sets have the demux adapter connected, and output to 2 screens (as the adapter represents a physical hardware difference, albeit a minor one, use clone sets)
964 GAMEL( 1993, rungund,  rungun, rng_dual, rng_dual, rungun_state, empty_init, ROT0, "Konami", "Run and Gun (ver EAA 1993 10.8) (dual screen with demux adapter)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_SOUND, layout_rungun_dual )
965 GAMEL( 1993, rungunad, rungun, rng_dual, rng_dual, rungun_state, empty_init, ROT0, "Konami", "Run and Gun (ver EAA 1993 10.4) (dual screen with demux adapter)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_SOUND, layout_rungun_dual )
966 GAMEL( 1993, rungunbd, rungun, rng_dual, rng_dual, rungun_state, empty_init, ROT0, "Konami", "Run and Gun (ver EAA 1993 9.10, prototype?) (dual screen with demux adapter)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_SOUND, layout_rungun_dual )
967 GAMEL( 1993, rungunuad,rungun, rng_dual, rng_dual, rungun_state, empty_init, ROT0, "Konami", "Run and Gun (ver UBA 1993 10.8) (dual screen with demux adapter)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_SOUND, layout_rungun_dual )
968 GAMEL( 1993, slmdunkjd,rungun, rng_dual, rng_dual, rungun_state, empty_init, ROT0, "Konami", "Slam Dunk (ver JAA 1993 10.8) (dual screen with demux adapter)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_SOUND, layout_rungun_dual )
969 
970 // this set has no dipswitches to select single screen mode (they're not even displayed in test menu) it's twin cabinet ONLY
971 GAMEL( 1993, rungunud, rungun, rng_dual, rng_nodip, rungun_state, empty_init, ROT0, "Konami", "Run and Gun (ver UAB 1993 10.12, dedicated twin cabinet)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_SOUND, layout_rungun_dual )
972