1 // license:BSD-3-Clause
2 // copyright-holders:Bryan McPhail
3 /***************************************************************************
4 
5   The Main Event, (c) 1988 Konami
6   Devastators, (c) 1988 Konami
7 
8 Emulation by Bryan McPhail, mish@tendril.co.uk
9 
10 Notes:
11 - Schematics show a palette/work RAM bank selector, but this doesn't seem
12   to be used?
13 
14 - Devastators: has player-trench collision detection issues, player isn't
15   supposed to go through them.
16 
17 - Devastators: shadows don't work. Bit 7 of the sprite attribute is always 0,
18   could there be a global enable flag in the 051960?
19   This is particularly evident in level 2 where plane shadows cover other sprites.
20   The priority/shadow encoder PROM is quite complex, however bits 5-7 of the sprite
21   attribute don't seem to be used, at least not in the first two levels, so the
22   PROM just maps to the fixed priority order currently implemented.
23 
24 - Devastators: sprite zooming for the planes in level 2 is particularly bad.
25 
26 - Devastators: title screen white backdrop is always supposed to flicker,
27   it currently do that only from second/fourth attract cycles (supposed to always
28   flicker from PCB video);
29 
30 Both games run on Konami's PWB351024A PCB
31   The Main Event uses a uPD7759 + 640KHz resonator plus sample ROM, for Devastators this area is unpopulated
32   Devastators uses a YM2151 + YM3012 and the 051733, for The Main Event these chips are unpopulated
33 
34 ***************************************************************************/
35 
36 #include "emu.h"
37 #include "includes/mainevt.h"
38 #include "includes/konamipt.h"
39 
40 #include "cpu/z80/z80.h"
41 #include "cpu/m6809/hd6309.h"
42 #include "cpu/m6809/m6809.h"
43 #include "machine/gen_latch.h"
44 #include "sound/ym2151.h"
45 #include "emupal.h"
46 #include "screen.h"
47 #include "speaker.h"
48 
49 
dv_nmienable_w(uint8_t data)50 void mainevt_state::dv_nmienable_w(uint8_t data)
51 {
52 	m_nmi_enable = data;
53 }
54 
WRITE_LINE_MEMBER(mainevt_state::dv_vblank_w)55 WRITE_LINE_MEMBER(mainevt_state::dv_vblank_w)
56 {
57 	if (state && m_nmi_enable)
58 		m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
59 }
60 
61 
mainevt_bankswitch_w(uint8_t data)62 void mainevt_state::mainevt_bankswitch_w(uint8_t data)
63 {
64 	/* bit 0-1 ROM bank select */
65 	m_rombank->set_entry(data & 0x03);
66 
67 	/* TODO: bit 5 = select work RAM or palette? */
68 	//palette_selected = data & 0x20;
69 
70 	/* bit 6 = enable char ROM reading through the video RAM */
71 	m_k052109->set_rmrd_line((data & 0x40) ? ASSERT_LINE : CLEAR_LINE);
72 
73 	/* bit 7 = NINITSET (unknown) */
74 
75 	/* other bits unused */
76 }
77 
mainevt_coin_w(uint8_t data)78 void mainevt_state::mainevt_coin_w(uint8_t data)
79 {
80 	machine().bookkeeping().coin_counter_w(0, data & 0x10);
81 	machine().bookkeeping().coin_counter_w(1, data & 0x20);
82 	m_leds[0] = BIT(data, 0);
83 	m_leds[1] = BIT(data, 1);
84 	m_leds[2] = BIT(data, 2);
85 	m_leds[3] = BIT(data, 3);
86 }
87 
mainevt_sh_irqtrigger_w(uint8_t data)88 void mainevt_state::mainevt_sh_irqtrigger_w(uint8_t data)
89 {
90 	m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); // Z80
91 }
92 
mainevt_sh_busy_r()93 uint8_t mainevt_state::mainevt_sh_busy_r()
94 {
95 	return m_upd7759->busy_r();
96 }
97 
mainevt_sh_irqcontrol_w(uint8_t data)98 void mainevt_state::mainevt_sh_irqcontrol_w(uint8_t data)
99 {
100 	m_upd7759->reset_w(data & 2);
101 	m_upd7759->start_w(data & 1);
102 
103 	m_sound_irq_mask = data & 4;
104 }
105 
devstor_sh_irqcontrol_w(uint8_t data)106 void mainevt_state::devstor_sh_irqcontrol_w(uint8_t data)
107 {
108 	m_sound_irq_mask = data & 4;
109 }
110 
mainevt_sh_bankswitch_w(uint8_t data)111 void mainevt_state::mainevt_sh_bankswitch_w(uint8_t data)
112 {
113 	int bank_A, bank_B;
114 
115 //logerror("CPU #1 PC: %04x bank switch = %02x\n", m_audiocpu->pc(),data);
116 
117 	/* bits 0-3 select the 007232 banks */
118 	bank_A = (data & 0x3);
119 	bank_B = ((data >> 2) & 0x3);
120 	m_k007232->set_bank(bank_A, bank_B);
121 
122 	/* bits 4-5 select the UPD7759 bank */
123 	m_upd7759->set_rom_bank((data >> 4) & 0x03);
124 }
125 
dv_sh_bankswitch_w(uint8_t data)126 void mainevt_state::dv_sh_bankswitch_w(uint8_t data)
127 {
128 	int bank_A, bank_B;
129 
130 //logerror("CPU #1 PC: %04x bank switch = %02x\n",m_audiocpu->pc(),data);
131 
132 	/* bits 0-3 select the 007232 banks */
133 	bank_A = (data & 0x3);
134 	bank_B = ((data >> 2) & 0x3);
135 	m_k007232->set_bank(bank_A, bank_B);
136 }
137 
k052109_051960_r(offs_t offset)138 uint8_t mainevt_state::k052109_051960_r(offs_t offset)
139 {
140 	if (m_k052109->get_rmrd_line() == CLEAR_LINE)
141 	{
142 		if (offset >= 0x3800 && offset < 0x3808)
143 			return m_k051960->k051937_r(offset - 0x3800);
144 		else if (offset < 0x3c00)
145 			return m_k052109->read(offset);
146 		else
147 			return m_k051960->k051960_r(offset - 0x3c00);
148 	}
149 	else
150 		return m_k052109->read(offset);
151 }
152 
k052109_051960_w(offs_t offset,uint8_t data)153 void mainevt_state::k052109_051960_w(offs_t offset, uint8_t data)
154 {
155 	if (offset >= 0x3800 && offset < 0x3808)
156 		m_k051960->k051937_w(offset - 0x3800, data);
157 	else if (offset < 0x3c00)
158 		m_k052109->write(offset, data);
159 	else
160 		m_k051960->k051960_w(offset - 0x3c00, data);
161 }
162 
163 
mainevt_map(address_map & map)164 void mainevt_state::mainevt_map(address_map &map)
165 {
166 	map(0x0000, 0x3fff).rw(FUNC(mainevt_state::k052109_051960_r), FUNC(mainevt_state::k052109_051960_w));
167 
168 	map(0x1f80, 0x1f80).w(FUNC(mainevt_state::mainevt_bankswitch_w));
169 	map(0x1f84, 0x1f84).w("soundlatch", FUNC(generic_latch_8_device::write)); /* probably */
170 	map(0x1f88, 0x1f88).w(FUNC(mainevt_state::mainevt_sh_irqtrigger_w));  /* probably */
171 	map(0x1f8c, 0x1f8d).nopw();    /* ??? */
172 	map(0x1f90, 0x1f90).w(FUNC(mainevt_state::mainevt_coin_w));   /* coin counters + lamps */
173 
174 	map(0x1f94, 0x1f94).portr("SYSTEM");
175 	map(0x1f95, 0x1f95).portr("P1");
176 	map(0x1f96, 0x1f96).portr("P2");
177 	map(0x1f97, 0x1f97).portr("DSW1");
178 	map(0x1f98, 0x1f98).portr("DSW3");
179 	map(0x1f99, 0x1f99).portr("P3");
180 	map(0x1f9a, 0x1f9a).portr("P4");
181 	map(0x1f9b, 0x1f9b).portr("DSW2");
182 
183 	map(0x4000, 0x5dff).ram();
184 	map(0x5e00, 0x5fff).ram().w("palette", FUNC(palette_device::write8)).share("palette");
185 	map(0x6000, 0x7fff).bankr("rombank");
186 	map(0x8000, 0xffff).rom();
187 }
188 
189 
devstors_map(address_map & map)190 void mainevt_state::devstors_map(address_map &map)
191 {
192 	map(0x0000, 0x3fff).rw(FUNC(mainevt_state::k052109_051960_r), FUNC(mainevt_state::k052109_051960_w));
193 
194 	map(0x1f80, 0x1f80).w(FUNC(mainevt_state::mainevt_bankswitch_w));
195 	map(0x1f84, 0x1f84).w("soundlatch", FUNC(generic_latch_8_device::write)); /* probably */
196 	map(0x1f88, 0x1f88).w(FUNC(mainevt_state::mainevt_sh_irqtrigger_w));  /* probably */
197 	map(0x1f90, 0x1f90).w(FUNC(mainevt_state::mainevt_coin_w));   /* coin counters + lamps */
198 
199 	map(0x1f94, 0x1f94).portr("SYSTEM");
200 	map(0x1f95, 0x1f95).portr("P1");
201 	map(0x1f96, 0x1f96).portr("P2");
202 	map(0x1f97, 0x1f97).portr("DSW1");
203 	map(0x1f98, 0x1f98).portr("DSW3");
204 	map(0x1f9b, 0x1f9b).portr("DSW2");
205 	map(0x1fa0, 0x1fbf).rw("k051733", FUNC(k051733_device::read), FUNC(k051733_device::write));
206 	map(0x1fb2, 0x1fb2).w(FUNC(mainevt_state::dv_nmienable_w));
207 
208 	map(0x4000, 0x5dff).ram();
209 	map(0x5e00, 0x5fff).ram().w("palette", FUNC(palette_device::write8)).share("palette");
210 	map(0x6000, 0x7fff).bankr("rombank");
211 	map(0x8000, 0xffff).rom();
212 }
213 
214 
mainevt_sound_map(address_map & map)215 void mainevt_state::mainevt_sound_map(address_map &map)
216 {
217 	map(0x0000, 0x7fff).rom();
218 	map(0x8000, 0x83ff).ram();
219 	map(0x9000, 0x9000).w(m_upd7759, FUNC(upd7759_device::port_w));
220 	map(0xa000, 0xa000).r("soundlatch", FUNC(generic_latch_8_device::read));
221 	map(0xb000, 0xb00d).rw(m_k007232, FUNC(k007232_device::read), FUNC(k007232_device::write));
222 	map(0xd000, 0xd000).r(FUNC(mainevt_state::mainevt_sh_busy_r));
223 	map(0xe000, 0xe000).w(FUNC(mainevt_state::mainevt_sh_irqcontrol_w));
224 	map(0xf000, 0xf000).w(FUNC(mainevt_state::mainevt_sh_bankswitch_w));
225 }
226 
devstors_sound_map(address_map & map)227 void mainevt_state::devstors_sound_map(address_map &map)
228 {
229 	map(0x0000, 0x7fff).rom();
230 	map(0x8000, 0x83ff).ram();
231 	map(0xa000, 0xa000).r("soundlatch", FUNC(generic_latch_8_device::read));
232 	map(0xb000, 0xb00d).rw(m_k007232, FUNC(k007232_device::read), FUNC(k007232_device::write));
233 	map(0xc000, 0xc001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write));
234 	map(0xe000, 0xe000).w(FUNC(mainevt_state::devstor_sh_irqcontrol_w));
235 	map(0xf000, 0xf000).w(FUNC(mainevt_state::dv_sh_bankswitch_w));
236 }
237 
238 
239 /*****************************************************************************/
240 
241 static INPUT_PORTS_START( mainevt )
242 	PORT_START("SYSTEM")
243 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
244 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
245 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 )
246 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN4 )
247 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 )
248 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE2 )
249 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE3 )
250 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE4 )
251 
252 	PORT_START("P1")
253 	KONAMI8_B12_UNK(1)
254 
255 	PORT_START("P2")
256 	KONAMI8_B12_UNK(2)
257 
258 	PORT_START("P3")
259 	KONAMI8_B12_UNK(3)
260 
261 	PORT_START("P4")
262 	KONAMI8_B12_UNK(4)
263 
264 	PORT_START("DSW1")
DEF_STR(Coinage)265 	PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coinage ) )      PORT_DIPLOCATION("SW1:1,2,3,4")
266 	PORT_DIPSETTING(    0x02, DEF_STR( 4C_1C ) )
267 	PORT_DIPSETTING(    0x05, DEF_STR( 3C_1C ) )
268 	PORT_DIPSETTING(    0x08, DEF_STR( 2C_1C ) )
269 	PORT_DIPSETTING(    0x04, DEF_STR( 3C_2C ) )
270 	PORT_DIPSETTING(    0x01, DEF_STR( 4C_3C ) )
271 	PORT_DIPSETTING(    0x0f, DEF_STR( 1C_1C ) )
272 	PORT_DIPSETTING(    0x00, DEF_STR( 4C_5C ) )
273 	PORT_DIPSETTING(    0x03, DEF_STR( 3C_4C ) )
274 	PORT_DIPSETTING(    0x07, DEF_STR( 2C_3C ) )
275 	PORT_DIPSETTING(    0x0e, DEF_STR( 1C_2C ) )
276 	PORT_DIPSETTING(    0x06, DEF_STR( 2C_5C ) )
277 	PORT_DIPSETTING(    0x0d, DEF_STR( 1C_3C ) )
278 	PORT_DIPSETTING(    0x0c, DEF_STR( 1C_4C ) )
279 	PORT_DIPSETTING(    0x0b, DEF_STR( 1C_5C ) )
280 	PORT_DIPSETTING(    0x0a, DEF_STR( 1C_6C ) )
281 	PORT_DIPSETTING(    0x09, DEF_STR( 1C_7C ) )
282 	PORT_DIPUNUSED_DIPLOC( 0x10, 0x10, "SW1:5" )        /* Listed as "Unused" */
283 	PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SW1:6" )        /* Listed as "Unused" */
284 	PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW1:7" )        /* Listed as "Unused" */
285 	PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW1:8" )        /* Listed as "Unused" */
286 
287 	PORT_START("DSW2")
288 	PORT_DIPUNUSED_DIPLOC( 0x01, 0x01, "SW2:1" )        /* Listed as "Unused" */
289 	PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SW2:2" )        /* Listed as "Unused" */
290 	PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW2:3" )        /* Listed as "Unused" */
291 	PORT_DIPNAME( 0x18, 0x10, "Bonus Energy" )      PORT_DIPLOCATION("SW2:4,5") // Typo on US manual "SW2:1,2"
292 	PORT_DIPSETTING(    0x00, "60" )
293 	PORT_DIPSETTING(    0x08, "70" )
294 	PORT_DIPSETTING(    0x10, "80" )    // factory default
295 	PORT_DIPSETTING(    0x18, "90" )
296 	PORT_DIPNAME( 0x60, 0x40, DEF_STR( Difficulty ) )   PORT_DIPLOCATION("SW2:6,7")
297 	PORT_DIPSETTING(    0x60, DEF_STR( Easy ) )
298 	PORT_DIPSETTING(    0x40, DEF_STR( Normal ) )   // factory default
299 	PORT_DIPSETTING(    0x20, DEF_STR( Hard ) )
300 	PORT_DIPSETTING(    0x00, DEF_STR( Very_Hard ) )
301 	PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) )  PORT_DIPLOCATION("SW2:8")
302 	PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
303 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
304 
305 	PORT_START("DSW3")
306 	PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) )  PORT_DIPLOCATION("SW3:1")
307 	PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
308 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
309 	PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SW3:2" )        /* Listed as "Unused" */
310 	PORT_SERVICE_DIPLOC(  0x04, IP_ACTIVE_LOW, "SW3:3" )
311 	PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW3:4" )        /* Listed as "Unused" */
312 	PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
313 INPUT_PORTS_END
314 
315 static INPUT_PORTS_START( mainev2p )
316 	PORT_INCLUDE( mainevt )
317 
318 	PORT_MODIFY("SYSTEM")
319 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )    /* no keys for P3 & P4 */
320 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
321 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
322 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
323 
324 	PORT_MODIFY("P1")
325 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
326 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
327 
328 	PORT_MODIFY("P2")
329 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
330 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
331 
332 	PORT_MODIFY("P3")
333 	PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
334 
335 	PORT_MODIFY("P4")
336 	PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
337 
338 	PORT_MODIFY("DSW1")
339 	KONAMI_COINAGE_ALT
340 INPUT_PORTS_END
341 
342 static INPUT_PORTS_START( devstors )
343 	PORT_INCLUDE( mainev2p )
344 
345 	PORT_MODIFY("SYSTEM")
346 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )    /* no service2 */
347 
348 	PORT_MODIFY("P1")
349 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )    /* no 3rd button */
350 
351 	PORT_MODIFY("P2")
352 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )    /* no 3rd button */
353 
354 	PORT_MODIFY("P3")
355 	PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
356 
357 	PORT_MODIFY("P4")
358 	PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
359 
360 	PORT_MODIFY("DSW1")     /* like mainevt, but different 0x00 settings */
361 	KONAMI_COINAGE_LOC(DEF_STR( Free_Play ), "Invalid", SW1)
362 	/* "Invalid" = both coin slots disabled */
363 
364 	PORT_MODIFY("DSW2")
365 	PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) )        PORT_DIPLOCATION("SW2:1,2")
366 	PORT_DIPSETTING(    0x03, "2" )
367 	PORT_DIPSETTING(    0x02, "3" )     // factory default
368 	PORT_DIPSETTING(    0x01, "5" )
369 	PORT_DIPSETTING(    0x00, "7" )
370 	PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW2:3" )        /* Listed as "Unused" */
371 	PORT_DIPNAME( 0x18, 0x10, DEF_STR( Bonus_Life ) )   PORT_DIPLOCATION("SW2:4,5")
372 	PORT_DIPSETTING(    0x18, "150 and every 200" )
373 	PORT_DIPSETTING(    0x10, "150 and every 250" ) // factory default
374 	PORT_DIPSETTING(    0x08, "150 Only" )
375 	PORT_DIPSETTING(    0x00, "200 Only" )
376 INPUT_PORTS_END
377 
378 /* Same as 'devstors', but additional "Cocktail" Dip Switch (even if I don't see the use) */
379 static INPUT_PORTS_START( devstors_ct )
380 	PORT_INCLUDE( devstors )
381 
382 	PORT_MODIFY("DSW2")
383 	PORT_DIPNAME( 0x04, 0x00, DEF_STR( Cabinet ) )      PORT_DIPLOCATION("SW2:3")
384 	PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
385 	PORT_DIPSETTING(    0x04, DEF_STR( Cocktail ) )
386 INPUT_PORTS_END
387 
388 /*****************************************************************************/
389 
390 void mainevt_state::volume_callback(uint8_t data)
391 {
392 	m_k007232->set_volume(0, (data >> 4) * 0x11, 0);
393 	m_k007232->set_volume(1, 0, (data & 0x0f) * 0x11);
394 }
395 
machine_start()396 void mainevt_state::machine_start()
397 {
398 	m_leds.resolve();
399 	m_rombank->configure_entries(0, 4, memregion("maincpu")->base(), 0x2000);
400 
401 	save_item(NAME(m_nmi_enable));
402 }
403 
machine_reset()404 void mainevt_state::machine_reset()
405 {
406 	m_nmi_enable = 0;
407 }
408 
INTERRUPT_GEN_MEMBER(mainevt_state::mainevt_sound_timer_irq)409 INTERRUPT_GEN_MEMBER(mainevt_state::mainevt_sound_timer_irq)
410 {
411 	if(m_sound_irq_mask)
412 		m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
413 }
414 
INTERRUPT_GEN_MEMBER(mainevt_state::devstors_sound_timer_irq)415 INTERRUPT_GEN_MEMBER(mainevt_state::devstors_sound_timer_irq)
416 {
417 	if(m_sound_irq_mask)
418 		m_audiocpu->set_input_line(0, HOLD_LINE);
419 }
420 
mainevt(machine_config & config)421 void mainevt_state::mainevt(machine_config &config)
422 {
423 	/* basic machine hardware */
424 	HD6309E(config, m_maincpu, 24_MHz_XTAL / 8); // E & Q generated by 052109
425 	m_maincpu->set_addrmap(AS_PROGRAM, &mainevt_state::mainevt_map);
426 
427 	Z80(config, m_audiocpu, 3.579545_MHz_XTAL);  /* 3.579545 MHz */
428 	m_audiocpu->set_addrmap(AS_PROGRAM, &mainevt_state::mainevt_sound_map);
429 	m_audiocpu->set_periodic_int(FUNC(mainevt_state::mainevt_sound_timer_irq), attotime::from_hz(8*60));  /* ??? */
430 
431 	/* video hardware */
432 	screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
433 //  screen.set_refresh_hz(60);
434 //  screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
435 //  screen.set_size(64*8, 32*8);
436 //  screen.set_visarea(14*8, (64-14)*8-1, 2*8, 30*8-1);
437 	screen.set_raw(XTAL(24'000'000)/3, 528, 14*8, (64-14)*8, 256, 16, 240); // same hardware as Devastators so assume 59.17
438 	screen.set_screen_update(FUNC(mainevt_state::screen_update_mainevt));
439 	screen.set_palette("palette");
440 
441 	PALETTE(config, "palette").set_format(palette_device::xBGR_555, 256).enable_shadows();
442 
443 	K052109(config, m_k052109, 24_MHz_XTAL);
444 	m_k052109->set_palette("palette");
445 	m_k052109->set_screen("screen");
446 	m_k052109->set_tile_callback(FUNC(mainevt_state::mainevt_tile_callback));
447 	m_k052109->irq_handler().set_inputline(m_maincpu, M6809_IRQ_LINE);
448 
449 	K051960(config, m_k051960, 24_MHz_XTAL);
450 	m_k051960->set_palette("palette");
451 	m_k051960->set_screen("screen");
452 	m_k051960->set_sprite_callback(FUNC(mainevt_state::mainevt_sprite_callback));
453 
454 	/* sound hardware */
455 	SPEAKER(config, "mono").front_center();
456 
457 	GENERIC_LATCH_8(config, "soundlatch");
458 
459 	K007232(config, m_k007232, 3.579545_MHz_XTAL);
460 	m_k007232->port_write().set(FUNC(mainevt_state::volume_callback));
461 	m_k007232->add_route(0, "mono", 0.20);
462 	m_k007232->add_route(1, "mono", 0.20);
463 
464 	UPD7759(config, m_upd7759);
465 	m_upd7759->add_route(ALL_OUTPUTS, "mono", 0.50);
466 }
467 
468 
devstors(machine_config & config)469 void mainevt_state::devstors(machine_config &config)
470 {
471 	/* basic machine hardware */
472 	HD6309E(config, m_maincpu, 24_MHz_XTAL / 8); // E & Q generated by 052109
473 	m_maincpu->set_addrmap(AS_PROGRAM, &mainevt_state::devstors_map);
474 
475 	Z80(config, m_audiocpu, 3.579545_MHz_XTAL);
476 	m_audiocpu->set_addrmap(AS_PROGRAM, &mainevt_state::devstors_sound_map);
477 	m_audiocpu->set_periodic_int(FUNC(mainevt_state::devstors_sound_timer_irq), attotime::from_hz(4*60)); /* ??? */
478 
479 	/* video hardware */
480 	screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
481 //  screen.set_refresh_hz(60);
482 //  screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
483 //  screen.set_size(64*8, 32*8);
484 //  screen.set_visarea(13*8, (64-13)*8-1, 2*8, 30*8-1);
485 	screen.set_raw(XTAL(24'000'000)/3, 528, 13*8, (64-13)*8, 256, 16, 240); // measured 59.17
486 	screen.set_screen_update(FUNC(mainevt_state::screen_update_dv));
487 	screen.set_palette("palette");
488 	screen.screen_vblank().set(FUNC(mainevt_state::dv_vblank_w));
489 
490 	PALETTE(config, "palette").set_format(palette_device::xBGR_555, 256).enable_shadows();
491 
492 	K052109(config, m_k052109, 24_MHz_XTAL);
493 	m_k052109->set_palette("palette");
494 	m_k052109->set_screen("screen");
495 	m_k052109->set_tile_callback(FUNC(mainevt_state::dv_tile_callback));
496 	m_k052109->irq_handler().set_inputline(m_maincpu, M6809_IRQ_LINE);
497 
498 	K051960(config, m_k051960, 24_MHz_XTAL);
499 	m_k051960->set_palette("palette");
500 	m_k051960->set_screen("screen");
501 	m_k051960->set_sprite_callback(FUNC(mainevt_state::dv_sprite_callback));
502 
503 	K051733(config, "k051733", 0);
504 
505 	/* sound hardware */
506 	SPEAKER(config, "mono").front_center();
507 
508 	GENERIC_LATCH_8(config, "soundlatch");
509 
510 	YM2151(config, "ymsnd", 3.579545_MHz_XTAL).add_route(0, "mono", 0.30).add_route(1, "mono", 0.30);
511 
512 	K007232(config, m_k007232, 3.579545_MHz_XTAL);
513 	m_k007232->port_write().set(FUNC(mainevt_state::volume_callback));
514 	m_k007232->add_route(0, "mono", 0.20);
515 	m_k007232->add_route(1, "mono", 0.20);
516 }
517 
518 
519 
520 /***************************************************************************
521 
522   Game driver(s)
523 
524 ***************************************************************************/
525 
526 
527 ROM_START( mainevt )    /* 4 players - English title screen - No "Warning" message in the ROM */
528 	ROM_REGION( 0x10000, "maincpu", 0 )
529 	ROM_LOAD( "799y02.k11",   0x00000, 0x10000, CRC(e2e7dbd5) SHA1(80314cd42a9f47f7bb82a2160fb5ef2ddc6dff30) )
530 
531 	ROM_REGION( 0x8000, "audiocpu", 0 )
532 	ROM_LOAD( "799c01.f7",    0x00000, 0x08000, CRC(447c4c5c) SHA1(86e42132793c59cc6feece143516f7ecd4ed14e8) )
533 
534 	ROM_REGION( 0x20000, "k052109", 0 )    /* tiles */
535 	ROM_LOAD32_BYTE( "799c06.f22",   0x00000, 0x08000, CRC(f839cb58) SHA1(b36202ca2b68b6249c3f972ad09501e28a0162f7) )
536 	ROM_LOAD32_BYTE( "799c07.h22",   0x00001, 0x08000, CRC(176df538) SHA1(379e1de81afb85b1559de170cd2ab9f4af2b137e) )
537 	ROM_LOAD32_BYTE( "799c08.j22",   0x00002, 0x08000, CRC(d01e0078) SHA1(7ac242eb24271ac2783ec4d9e97ae051f1f3363a) )
538 	ROM_LOAD32_BYTE( "799c09.k22",   0x00003, 0x08000, CRC(9baec75e) SHA1(a8f6102c8fd46f18678f336bc44be31458ca9256) )
539 
540 	ROM_REGION( 0x100000, "k051960", 0 )   /* sprites */
541 	ROM_LOAD32_WORD( "799b04.h4",    0x00000, 0x80000, CRC(323e0c2b) SHA1(c108d656b6ceff13c910739e4ca760acbb640de3) )
542 	ROM_LOAD32_WORD( "799b05.k4",    0x00002, 0x80000, CRC(571c5831) SHA1(2a18f0bcf6946ada6e0bde7edbd11afd4db1c170) )
543 
544 	ROM_REGION( 0x0100, "proms", 0 )
545 	ROM_LOAD( "63s141n.k14",  0x0000, 0x0100, CRC(61f6c8d1) SHA1(c70f1f8e434aaaffb89e30e2230a08374ef324ad) )    /* priority encoder (not used) */
546 
547 	ROM_REGION( 0x80000, "k007232", 0 ) /* 512k for 007232 samples */
548 	ROM_LOAD( "799b03.d4",    0x00000, 0x80000, CRC(f1cfd342) SHA1(079afc5c631de7f5b652d0ce6fd44b3aacd14a1b) )
549 
550 	ROM_REGION( 0x80000, "upd", 0 ) /* 512k for the UPD7759C samples */
551 	ROM_LOAD( "799b06.c22",   0x00000, 0x80000, CRC(2c8c47d7) SHA1(18a899767177ddfd870df9ed156d8bbc04b58a19) )
552 ROM_END
553 
554 ROM_START( mainevto )   /* 4 players - English title screen - No "Warning" message in the ROM */
555 	ROM_REGION( 0x10000, "maincpu", 0 )
556 	ROM_LOAD( "799f02.k11",   0x00000, 0x10000, CRC(c143596b) SHA1(5da7efaf0f7c7a493cc242eae115f278bc9c134b) )
557 
558 	ROM_REGION( 0x8000, "audiocpu", 0 )
559 	ROM_LOAD( "799c01.f7",    0x00000, 0x08000, CRC(447c4c5c) SHA1(86e42132793c59cc6feece143516f7ecd4ed14e8) )
560 
561 	ROM_REGION( 0x20000, "k052109", 0 )    /* tiles */
562 	ROM_LOAD32_BYTE( "799c06.f22",   0x00000, 0x08000, CRC(f839cb58) SHA1(b36202ca2b68b6249c3f972ad09501e28a0162f7) )
563 	ROM_LOAD32_BYTE( "799c07.h22",   0x00001, 0x08000, CRC(176df538) SHA1(379e1de81afb85b1559de170cd2ab9f4af2b137e) )
564 	ROM_LOAD32_BYTE( "799c08.j22",   0x00002, 0x08000, CRC(d01e0078) SHA1(7ac242eb24271ac2783ec4d9e97ae051f1f3363a) )
565 	ROM_LOAD32_BYTE( "799c09.k22",   0x00003, 0x08000, CRC(9baec75e) SHA1(a8f6102c8fd46f18678f336bc44be31458ca9256) )
566 
567 	ROM_REGION( 0x100000, "k051960", 0 )   /* sprites */
568 	ROM_LOAD32_WORD( "799b04.h4",    0x00000, 0x80000, CRC(323e0c2b) SHA1(c108d656b6ceff13c910739e4ca760acbb640de3) )
569 	ROM_LOAD32_WORD( "799b05.k4",    0x00002, 0x80000, CRC(571c5831) SHA1(2a18f0bcf6946ada6e0bde7edbd11afd4db1c170) )
570 
571 	ROM_REGION( 0x0100, "proms", 0 )
572 	ROM_LOAD( "63s141n.k14",  0x0000, 0x0100, CRC(61f6c8d1) SHA1(c70f1f8e434aaaffb89e30e2230a08374ef324ad) )    /* priority encoder (not used) */
573 
574 	ROM_REGION( 0x80000, "k007232", 0 ) /* 512k for 007232 samples */
575 	ROM_LOAD( "799b03.d4",    0x00000, 0x80000, CRC(f1cfd342) SHA1(079afc5c631de7f5b652d0ce6fd44b3aacd14a1b) )
576 
577 	ROM_REGION( 0x80000, "upd", 0 ) /* 512k for the UPD7759C samples */
578 	ROM_LOAD( "799b06.c22",   0x00000, 0x80000, CRC(2c8c47d7) SHA1(18a899767177ddfd870df9ed156d8bbc04b58a19) )
579 ROM_END
580 
581 ROM_START( mainevt2p )  /* 2 players - English title screen - "Warning" message in the ROM (not displayed) */
582 	ROM_REGION( 0x10000, "maincpu", 0 )
583 	ROM_LOAD( "799x02.k11",   0x00000, 0x10000, CRC(42cfc650) SHA1(2d1918ebc0d93a2356ad995a6854dbde7c3b8daf) )
584 
585 	ROM_REGION( 0x8000, "audiocpu", 0 )
586 	ROM_LOAD( "799c01.f7",    0x00000, 0x08000, CRC(447c4c5c) SHA1(86e42132793c59cc6feece143516f7ecd4ed14e8) )
587 
588 	ROM_REGION( 0x20000, "k052109", 0 )    /* tiles */
589 	ROM_LOAD32_BYTE( "799c06.f22",   0x00000, 0x08000, CRC(f839cb58) SHA1(b36202ca2b68b6249c3f972ad09501e28a0162f7) )
590 	ROM_LOAD32_BYTE( "799c07.h22",   0x00001, 0x08000, CRC(176df538) SHA1(379e1de81afb85b1559de170cd2ab9f4af2b137e) )
591 	ROM_LOAD32_BYTE( "799c08.j22",   0x00002, 0x08000, CRC(d01e0078) SHA1(7ac242eb24271ac2783ec4d9e97ae051f1f3363a) )
592 	ROM_LOAD32_BYTE( "799c09.k22",   0x00003, 0x08000, CRC(9baec75e) SHA1(a8f6102c8fd46f18678f336bc44be31458ca9256) )
593 
594 	ROM_REGION( 0x100000, "k051960", 0 )   /* sprites */
595 	ROM_LOAD32_WORD( "799b04.h4",    0x00000, 0x80000, CRC(323e0c2b) SHA1(c108d656b6ceff13c910739e4ca760acbb640de3) )
596 	ROM_LOAD32_WORD( "799b05.k4",    0x00002, 0x80000, CRC(571c5831) SHA1(2a18f0bcf6946ada6e0bde7edbd11afd4db1c170) )
597 
598 	ROM_REGION( 0x0100, "proms", 0 )
599 	ROM_LOAD( "63s141n.k14",  0x0000, 0x0100, CRC(61f6c8d1) SHA1(c70f1f8e434aaaffb89e30e2230a08374ef324ad) )    /* priority encoder (not used) */
600 
601 	ROM_REGION( 0x80000, "k007232", 0 ) /* 512k for 007232 samples */
602 	ROM_LOAD( "799b03.d4",    0x00000, 0x80000, CRC(f1cfd342) SHA1(079afc5c631de7f5b652d0ce6fd44b3aacd14a1b) )
603 
604 	ROM_REGION( 0x80000, "upd", 0 ) /* 512k for the UPD7759C samples */
605 	ROM_LOAD( "799b06.c22",   0x00000, 0x80000, CRC(2c8c47d7) SHA1(18a899767177ddfd870df9ed156d8bbc04b58a19) )
606 ROM_END
607 
608 ROM_START( ringohja )   /* 2 players - Japan title screen - "Warning" message in the ROM (displayed) */
609 	ROM_REGION( 0x10000, "maincpu", 0 )
610 	ROM_LOAD( "799n02.k11",   0x00000, 0x10000, CRC(f9305dd0) SHA1(7135053be9d46ac9c09ab63eca1eb71825a71a13) )
611 
612 	ROM_REGION( 0x8000, "audiocpu", 0 )
613 	ROM_LOAD( "799c01.f7",    0x00000, 0x08000, CRC(447c4c5c) SHA1(86e42132793c59cc6feece143516f7ecd4ed14e8) )
614 
615 	ROM_REGION( 0x20000, "k052109", 0 )    /* tiles */
616 	ROM_LOAD32_BYTE( "799c06.f22",   0x00000, 0x08000, CRC(f839cb58) SHA1(b36202ca2b68b6249c3f972ad09501e28a0162f7) )
617 	ROM_LOAD32_BYTE( "799c07.h22",   0x00001, 0x08000, CRC(176df538) SHA1(379e1de81afb85b1559de170cd2ab9f4af2b137e) )
618 	ROM_LOAD32_BYTE( "799c08.j22",   0x00002, 0x08000, CRC(d01e0078) SHA1(7ac242eb24271ac2783ec4d9e97ae051f1f3363a) )
619 	ROM_LOAD32_BYTE( "799c09.k22",   0x00003, 0x08000, CRC(9baec75e) SHA1(a8f6102c8fd46f18678f336bc44be31458ca9256) )
620 
621 	ROM_REGION( 0x100000, "k051960", 0 )   /* sprites */
622 	ROM_LOAD32_WORD( "799b04.h4",    0x00000, 0x80000, CRC(323e0c2b) SHA1(c108d656b6ceff13c910739e4ca760acbb640de3) )
623 	ROM_LOAD32_WORD( "799b05.k4",    0x00002, 0x80000, CRC(571c5831) SHA1(2a18f0bcf6946ada6e0bde7edbd11afd4db1c170) )
624 
625 	ROM_REGION( 0x0100, "proms", 0 )
626 	ROM_LOAD( "63s141n.k14",  0x0000, 0x0100, CRC(61f6c8d1) SHA1(c70f1f8e434aaaffb89e30e2230a08374ef324ad) )    /* priority encoder (not used) */
627 
628 	ROM_REGION( 0x80000, "k007232", 0 ) /* 512k for 007232 samples */
629 	ROM_LOAD( "799b03.d4",    0x00000, 0x80000, CRC(f1cfd342) SHA1(079afc5c631de7f5b652d0ce6fd44b3aacd14a1b) )
630 
631 	ROM_REGION( 0x80000, "upd", 0 ) /* 512k for the UPD7759C samples */
632 	ROM_LOAD( "799b06.c22",   0x00000, 0x80000, CRC(2c8c47d7) SHA1(18a899767177ddfd870df9ed156d8bbc04b58a19) )
633 ROM_END
634 
635 
636 ROM_START( devstors )
637 	ROM_REGION( 0x10000, "maincpu", 0 )
638 	ROM_LOAD( "890z02.k11",  0x00000, 0x10000, CRC(ebeb306f) SHA1(838fcfe95dfedd61f21f34301d48e337db765ab2) )
639 
640 	ROM_REGION( 0x8000, "audiocpu", 0 )
641 	ROM_LOAD( "890k01.f7",  0x00000, 0x08000, CRC(d44b3eb0) SHA1(26109fc56668b65f1a5aa6d8ec2c08fd70ca7c51) )
642 
643 	ROM_REGION( 0x40000, "k052109", 0 )    /* tiles */
644 	ROM_LOAD32_BYTE( "890f06.f22",  0x00000, 0x10000, CRC(26592155) SHA1(aa1f8662f091ca1eb495223e41a35edd861ae9e9) )
645 	ROM_LOAD32_BYTE( "890f07.h22",  0x00001, 0x10000, CRC(6c74fa2e) SHA1(419a2ad31d269fafe4c474bf512e935d5e018846) )
646 	ROM_LOAD32_BYTE( "890f08.j22",  0x00002, 0x10000, CRC(29e12e80) SHA1(6d09e190055218e2dfd07838f1446dfb5f801206) )
647 	ROM_LOAD32_BYTE( "890f09.k22",  0x00003, 0x10000, CRC(67ca40d5) SHA1(ff719f55d2534ff076fbdd2bcb7d12c683bfe958) )
648 
649 	ROM_REGION( 0x100000, "k051960", 0 )   /* sprites */
650 	ROM_LOAD32_WORD( "890f04.h4",  0x00000, 0x80000, CRC(f16cd1fa) SHA1(60ea19c19918a71aded3c9ea398c956908e217f1) )
651 	ROM_LOAD32_WORD( "890f05.k4",  0x00002, 0x80000, CRC(da37db05) SHA1(0b48d1021cf0dec78dae0ef183b4c61fea783533) )
652 
653 	ROM_REGION( 0x0100, "proms", 0 )
654 	ROM_LOAD( "63s141n.k14", 0x0000, 0x0100, CRC(d3620106) SHA1(528a0a34754902d0f262a9619c6105da6de99354) ) /* priority encoder (not used) */
655 
656 	ROM_REGION( 0x80000, "k007232", 0 ) /* 512k for 007232 samples */
657 	ROM_LOAD( "890f03.d4",  0x00000, 0x80000, CRC(19065031) SHA1(12c47fbe28f85fa2f901fe52601188a5e9633f22) )
658 ROM_END
659 
660 ROM_START( devstorsx )
661 	ROM_REGION( 0x10000, "maincpu", 0 )
662 	ROM_LOAD( "890x02.k11",  0x00000, 0x10000, CRC(e58ebb35) SHA1(4253b6a7128534cc0866bc910a271d91ac8b40fd) )
663 
664 	ROM_REGION( 0x8000, "audiocpu", 0 )
665 	ROM_LOAD( "890k01.f7",  0x00000, 0x08000, CRC(d44b3eb0) SHA1(26109fc56668b65f1a5aa6d8ec2c08fd70ca7c51) )
666 
667 	ROM_REGION( 0x40000, "k052109", 0 )    /* tiles */
668 	ROM_LOAD32_BYTE( "890f06.f22",  0x00000, 0x10000, CRC(26592155) SHA1(aa1f8662f091ca1eb495223e41a35edd861ae9e9) )
669 	ROM_LOAD32_BYTE( "890f07.h22",  0x00001, 0x10000, CRC(6c74fa2e) SHA1(419a2ad31d269fafe4c474bf512e935d5e018846) )
670 	ROM_LOAD32_BYTE( "890f08.j22",  0x00002, 0x10000, CRC(29e12e80) SHA1(6d09e190055218e2dfd07838f1446dfb5f801206) )
671 	ROM_LOAD32_BYTE( "890f09.k22",  0x00003, 0x10000, CRC(67ca40d5) SHA1(ff719f55d2534ff076fbdd2bcb7d12c683bfe958) )
672 
673 	ROM_REGION( 0x100000, "k051960", 0 )   /* sprites */
674 	ROM_LOAD32_WORD( "890f04.h4",  0x00000, 0x80000, CRC(f16cd1fa) SHA1(60ea19c19918a71aded3c9ea398c956908e217f1) )
675 	ROM_LOAD32_WORD( "890f05.k4",  0x00002, 0x80000, CRC(da37db05) SHA1(0b48d1021cf0dec78dae0ef183b4c61fea783533) )
676 
677 	ROM_REGION( 0x0100, "proms", 0 )
678 	ROM_LOAD( "63s141n.k14", 0x0000, 0x0100, CRC(d3620106) SHA1(528a0a34754902d0f262a9619c6105da6de99354) ) /* priority encoder (not used) */
679 
680 	ROM_REGION( 0x80000, "k007232", 0 ) /* 512k for 007232 samples */
681 	ROM_LOAD( "890f03.d4",  0x00000, 0x80000, CRC(19065031) SHA1(12c47fbe28f85fa2f901fe52601188a5e9633f22) )
682 ROM_END
683 
684 ROM_START( devstorsv )
685 	ROM_REGION( 0x10000, "maincpu", 0 )
686 	ROM_LOAD( "890v02.k11",   0x00000, 0x10000, CRC(52f4ccdd) SHA1(074e526ed170a5f2083c8c0808734291a2ea7403) )
687 
688 	ROM_REGION( 0x8000, "audiocpu", 0 )
689 	ROM_LOAD( "890k01.f7",  0x00000, 0x08000, CRC(d44b3eb0) SHA1(26109fc56668b65f1a5aa6d8ec2c08fd70ca7c51) )
690 
691 	ROM_REGION( 0x40000, "k052109", 0 )    /* tiles */
692 	ROM_LOAD32_BYTE( "890f06.f22",  0x00000, 0x10000, CRC(26592155) SHA1(aa1f8662f091ca1eb495223e41a35edd861ae9e9) )
693 	ROM_LOAD32_BYTE( "890f07.h22",  0x00001, 0x10000, CRC(6c74fa2e) SHA1(419a2ad31d269fafe4c474bf512e935d5e018846) )
694 	ROM_LOAD32_BYTE( "890f08.j22",  0x00002, 0x10000, CRC(29e12e80) SHA1(6d09e190055218e2dfd07838f1446dfb5f801206) )
695 	ROM_LOAD32_BYTE( "890f09.k22",  0x00003, 0x10000, CRC(67ca40d5) SHA1(ff719f55d2534ff076fbdd2bcb7d12c683bfe958) )
696 
697 	ROM_REGION( 0x100000, "k051960", 0 )   /* sprites */
698 	ROM_LOAD32_WORD( "890f04.h4",  0x00000, 0x80000, CRC(f16cd1fa) SHA1(60ea19c19918a71aded3c9ea398c956908e217f1) )
699 	ROM_LOAD32_WORD( "890f05.k4",  0x00002, 0x80000, CRC(da37db05) SHA1(0b48d1021cf0dec78dae0ef183b4c61fea783533) )
700 
701 	ROM_REGION( 0x0100, "proms", 0 )
702 	ROM_LOAD( "63s141n.k14", 0x0000, 0x0100, CRC(d3620106) SHA1(528a0a34754902d0f262a9619c6105da6de99354) ) /* priority encoder (not used) */
703 
704 	ROM_REGION( 0x80000, "k007232", 0 ) /* 512k for 007232 samples */
705 	ROM_LOAD( "890f03.d4",  0x00000, 0x80000, CRC(19065031) SHA1(12c47fbe28f85fa2f901fe52601188a5e9633f22) )
706 ROM_END
707 
708 ROM_START( devstors2 )
709 	ROM_REGION( 0x10000, "maincpu", 0 )
710 	ROM_LOAD( "890_202.k11",   0x00000, 0x10000, CRC(afbf0951) SHA1(6eb5d7e1de58058bd50d184d4c7e8dbea9cce13d) )
711 
712 	ROM_REGION( 0x8000, "audiocpu", 0 )
713 	ROM_LOAD( "890k01.f7",  0x00000, 0x08000, CRC(d44b3eb0) SHA1(26109fc56668b65f1a5aa6d8ec2c08fd70ca7c51) )
714 
715 	ROM_REGION( 0x40000, "k052109", 0 )    /* tiles */
716 	ROM_LOAD32_BYTE( "890f06.f22",  0x00000, 0x10000, CRC(26592155) SHA1(aa1f8662f091ca1eb495223e41a35edd861ae9e9) )
717 	ROM_LOAD32_BYTE( "890f07.h22",  0x00001, 0x10000, CRC(6c74fa2e) SHA1(419a2ad31d269fafe4c474bf512e935d5e018846) )
718 	ROM_LOAD32_BYTE( "890f08.j22",  0x00002, 0x10000, CRC(29e12e80) SHA1(6d09e190055218e2dfd07838f1446dfb5f801206) )
719 	ROM_LOAD32_BYTE( "890f09.k22",  0x00003, 0x10000, CRC(67ca40d5) SHA1(ff719f55d2534ff076fbdd2bcb7d12c683bfe958) )
720 
721 	ROM_REGION( 0x100000, "k051960", 0 )   /* sprites */
722 	ROM_LOAD32_WORD( "890f04.h4",  0x00000, 0x80000, CRC(f16cd1fa) SHA1(60ea19c19918a71aded3c9ea398c956908e217f1) )
723 	ROM_LOAD32_WORD( "890f05.k4",  0x00002, 0x80000, CRC(da37db05) SHA1(0b48d1021cf0dec78dae0ef183b4c61fea783533) )
724 
725 	ROM_REGION( 0x0100, "proms", 0 )
726 	ROM_LOAD( "63s141n.k14", 0x0000, 0x0100, CRC(d3620106) SHA1(528a0a34754902d0f262a9619c6105da6de99354) ) /* priority encoder (not used) */
727 
728 	ROM_REGION( 0x80000, "k007232", 0 ) /* 512k for 007232 samples */
729 	ROM_LOAD( "890f03.d4",  0x00000, 0x80000, CRC(19065031) SHA1(12c47fbe28f85fa2f901fe52601188a5e9633f22) )
730 ROM_END
731 
732 ROM_START( garuka )
733 	ROM_REGION( 0x10000, "maincpu", 0 )
734 	ROM_LOAD( "890w02.k11",   0x00000, 0x10000, CRC(b2f6f538) SHA1(95dad3258a2e4c5648d0fc22c06fa3e2da3b5ed1) )
735 
736 	ROM_REGION( 0x8000, "audiocpu", 0 )
737 	ROM_LOAD( "890k01.f7",  0x00000, 0x08000, CRC(d44b3eb0) SHA1(26109fc56668b65f1a5aa6d8ec2c08fd70ca7c51) )
738 
739 	ROM_REGION( 0x40000, "k052109", 0 )    /* tiles */
740 	ROM_LOAD32_BYTE( "890f06.f22",  0x00000, 0x10000, CRC(26592155) SHA1(aa1f8662f091ca1eb495223e41a35edd861ae9e9) )
741 	ROM_LOAD32_BYTE( "890f07.h22",  0x00001, 0x10000, CRC(6c74fa2e) SHA1(419a2ad31d269fafe4c474bf512e935d5e018846) )
742 	ROM_LOAD32_BYTE( "890f08.j22",  0x00002, 0x10000, CRC(29e12e80) SHA1(6d09e190055218e2dfd07838f1446dfb5f801206) )
743 	ROM_LOAD32_BYTE( "890f09.k22",  0x00003, 0x10000, CRC(67ca40d5) SHA1(ff719f55d2534ff076fbdd2bcb7d12c683bfe958) )
744 
745 	ROM_REGION( 0x100000, "k051960", 0 )   /* sprites */
746 	ROM_LOAD32_WORD( "890f04.h4",  0x00000, 0x80000, CRC(f16cd1fa) SHA1(60ea19c19918a71aded3c9ea398c956908e217f1) )
747 	ROM_LOAD32_WORD( "890f05.k4",  0x00002, 0x80000, CRC(da37db05) SHA1(0b48d1021cf0dec78dae0ef183b4c61fea783533) )
748 
749 	ROM_REGION( 0x0100, "proms", 0 )
750 	ROM_LOAD( "63s141n.k14", 0x0000, 0x0100, CRC(d3620106) SHA1(528a0a34754902d0f262a9619c6105da6de99354) ) /* priority encoder (not used) */
751 
752 	ROM_REGION( 0x80000, "k007232", 0 ) /* 512k for 007232 samples */
753 	ROM_LOAD( "890f03.d4",  0x00000, 0x80000, CRC(19065031) SHA1(12c47fbe28f85fa2f901fe52601188a5e9633f22) )
754 ROM_END
755 
756 
757 
758 GAME( 1988, mainevt,   0,        mainevt,  mainevt,     mainevt_state, empty_init, ROT0,  "Konami", "The Main Event (4 Players ver. Y)",     MACHINE_SUPPORTS_SAVE )
759 GAME( 1988, mainevto,  mainevt,  mainevt,  mainevt,     mainevt_state, empty_init, ROT0,  "Konami", "The Main Event (4 Players ver. F)",     MACHINE_SUPPORTS_SAVE )
760 GAME( 1988, mainevt2p, mainevt,  mainevt,  mainev2p,    mainevt_state, empty_init, ROT0,  "Konami", "The Main Event (2 Players ver. X)",     MACHINE_SUPPORTS_SAVE )
761 GAME( 1988, ringohja,  mainevt,  mainevt,  mainev2p,    mainevt_state, empty_init, ROT0,  "Konami", "Ring no Ohja (Japan 2 Players ver. N)", MACHINE_SUPPORTS_SAVE )
762 GAME( 1988, devstors,  0,        devstors, devstors,    mainevt_state, empty_init, ROT90, "Konami", "Devastators (ver. Z)",                  MACHINE_SUPPORTS_SAVE | MACHINE_UNEMULATED_PROTECTION )
763 GAME( 1988, devstorsx, devstors, devstors, devstors_ct, mainevt_state, empty_init, ROT90, "Konami", "Devastators (ver. X)",                  MACHINE_SUPPORTS_SAVE | MACHINE_UNEMULATED_PROTECTION )
764 GAME( 1988, devstorsv, devstors, devstors, devstors,    mainevt_state, empty_init, ROT90, "Konami", "Devastators (ver. V)",                  MACHINE_SUPPORTS_SAVE | MACHINE_UNEMULATED_PROTECTION )
765 GAME( 1988, devstors2, devstors, devstors, devstors_ct, mainevt_state, empty_init, ROT90, "Konami", "Devastators (ver. 2)",                  MACHINE_SUPPORTS_SAVE | MACHINE_UNEMULATED_PROTECTION )
766 GAME( 1988, garuka,    devstors, devstors, devstors_ct, mainevt_state, empty_init, ROT90, "Konami", "Garuka (Japan ver. W)",                 MACHINE_SUPPORTS_SAVE | MACHINE_UNEMULATED_PROTECTION )
767