1 /*
2  * Signetics 2650 CPU Games
3  *
4  * Zaccaria - The Invaders
5  * Zaccaria - Super Invader Attack
6  * Zaccaria - Dodgem
7  *
8  * mike@the-coates.com
9  */
10 
11 #include "driver.h"
12 #include "artwork.h"
13 #include "vidhrdw/generic.h"
14 #include "cpu/s2650/s2650.h"
15 
16 extern UINT8 *s2636ram;
17 
18 extern WRITE_HANDLER( tinvader_videoram_w );
19 extern WRITE_HANDLER( zac_s2636_w );
20 extern WRITE_HANDLER( tinvader_sound_w );
21 extern READ_HANDLER( zac_s2636_r );
22 extern READ_HANDLER( tinvader_port_0_r );
23 
24 extern VIDEO_START( tinvader );
25 extern VIDEO_UPDATE( tinvader );
26 
27 #define WHITE           MAKE_ARGB(0x04,0xff,0xff,0xff)
28 #define GREEN 			MAKE_ARGB(0x04,0x20,0xff,0x20)
29 #define PURPLE			MAKE_ARGB(0x04,0xff,0x20,0xff)
30 
31 OVERLAY_START( tinv2650_overlay )
32 	OVERLAY_RECT(   0,   0, 720, 768, WHITE )
33 	OVERLAY_RECT(  48,   0, 216, 768, GREEN )
34 	OVERLAY_RECT(   0, 144,  48, 402, GREEN )
35 	OVERLAY_RECT( 576,   0, 627, 768, PURPLE )
36 OVERLAY_END
37 
MEMORY_READ_START(readmem)38 static MEMORY_READ_START( readmem )
39 	{ 0x0000, 0x17ff, MRA_ROM },
40     { 0x1800, 0x1bff, MRA_RAM },
41 	{ 0x1c00, 0x1cff, MRA_RAM },
42 	{ 0x1d00, 0x1dff, MRA_RAM },
43     { 0x1e80, 0x1e80, tinvader_port_0_r },
44     { 0x1e81, 0x1e81, input_port_1_r },
45     { 0x1e82, 0x1e82, input_port_2_r },
46 	{ 0x1e85, 0x1e85, input_port_4_r },			/* Dodgem Only */
47 	{ 0x1e86, 0x1e86, input_port_5_r },			/* Dodgem Only */
48     { 0x1f00, 0x1fff, zac_s2636_r },			/* S2636 Chip */
49 MEMORY_END
50 
51 
52 static MEMORY_WRITE_START( writemem )
53 	{ 0x0000, 0x17ff, MWA_ROM },
54 	{ 0x1800, 0x1bff, tinvader_videoram_w, &videoram },
55 	{ 0x1c00, 0x1cff, MWA_RAM },
56     { 0x1d00, 0x1dff, MWA_RAM },
57     { 0x1e80, 0x1e80, tinvader_sound_w },
58 	{ 0x1e86, 0x1e86, MWA_NOP },				/* Dodgem Only */
59     { 0x1f00, 0x1fff, zac_s2636_w, &s2636ram },
60 MEMORY_END
61 
62 static PORT_READ_START( readport )
63     { S2650_SENSE_PORT, S2650_SENSE_PORT, input_port_3_r },
64 PORT_END
65 
66 INPUT_PORTS_START( tinvader )
67 
68 	PORT_START /* 1E80 */
69 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
70 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
71 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 )
72 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 )
73 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE2 )
74 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 )
75 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED  )
76 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )	/* Missile-Background Collision */
77 
78     PORT_START /* 1E81 */
79 	PORT_DIPNAME( 0x01, 0x00, DEF_STR( Lives ) )
80 	PORT_DIPSETTING(    0x00, "3" )
81 	PORT_DIPSETTING(    0x01, "4" )
82     PORT_DIPNAME( 0x02, 0x00, "Lightning Speed" )	/* Velocita Laser Inv */
83 	PORT_DIPSETTING(    0x00, "Slow" )
84 	PORT_DIPSETTING(    0x02, "Fast" )
85 	PORT_DIPNAME( 0x1C, 0x04, DEF_STR( Coinage ) )
86 	PORT_DIPSETTING(	0x00, DEF_STR( 2C_1C ) )
87 	PORT_DIPSETTING(	0x04, DEF_STR( 1C_1C ) )
88 	PORT_DIPSETTING(	0x08, DEF_STR( 1C_2C ) )
89 	PORT_DIPSETTING(	0x0C, DEF_STR( 1C_3C ) )
90 	PORT_DIPSETTING(	0x10, DEF_STR( 1C_4C ) )
91 	PORT_DIPSETTING(	0x14, DEF_STR( 1C_5C ) )
92 	PORT_DIPSETTING(	0x18, DEF_STR( 1C_6C ) )
93 	PORT_DIPSETTING(	0x1C, DEF_STR( 1C_7C ) )
94 	PORT_DIPNAME( 0x20, 0x00, DEF_STR( Bonus_Life ) )
95 	PORT_DIPSETTING(    0x00, "1000" )
96 	PORT_DIPSETTING(    0x20, "1500" )
97     PORT_DIPNAME( 0x40, 0x00, "Extended Play" )
98 	PORT_DIPSETTING(    0x00, DEF_STR( No ) )
99 	PORT_DIPSETTING(    0x40, DEF_STR( Yes ) )
100 
101 	PORT_START /* 1E82 */
102 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
103 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
104 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
105 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
106 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY )
107 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_4WAY )
108 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
109 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
110 
111 	PORT_START	/* SENSE */
112 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_VBLANK )
113 
114 INPUT_PORTS_END
115 
116 /* Almost identical, no number of bases selection */
117 
118 INPUT_PORTS_START( sinvader )
119 
120 	PORT_START /* 1E80 */
121 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
122 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
123 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 )
124 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 )
125 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
126 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 )
127 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED  )
128 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )	/* Missile-Background Collision */
129 
130     PORT_START /* 1E81 */
131 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED  )
132     PORT_DIPNAME( 0x02, 0x00, "Lightning Speed" )	/* Velocita Laser Inv */
133 	PORT_DIPSETTING(    0x00, "Slow" )
134 	PORT_DIPSETTING(    0x02, "Fast" )
135 	PORT_DIPNAME( 0x1C, 0x04, DEF_STR( Coinage ) )
136 	PORT_DIPSETTING(	0x00, DEF_STR( 2C_1C ) )
137 	PORT_DIPSETTING(	0x04, DEF_STR( 1C_1C ) )
138 	PORT_DIPSETTING(	0x08, DEF_STR( 1C_2C ) )
139 	PORT_DIPSETTING(	0x0C, DEF_STR( 1C_3C ) )
140 	PORT_DIPSETTING(	0x10, DEF_STR( 1C_4C ) )
141 	PORT_DIPSETTING(	0x14, DEF_STR( 1C_5C ) )
142 	PORT_DIPSETTING(	0x18, DEF_STR( 1C_6C ) )
143 	PORT_DIPSETTING(	0x1C, DEF_STR( 1C_7C ) )
144 	PORT_DIPNAME( 0x20, 0x00, DEF_STR( Bonus_Life ) )
145 	PORT_DIPSETTING(    0x00, "1000" )
146 	PORT_DIPSETTING(    0x20, "1500" )
147     PORT_DIPNAME( 0x40, 0x00, "Extended Play" )
148 	PORT_DIPSETTING(    0x00, DEF_STR( No ) )
149 	PORT_DIPSETTING(    0x40, DEF_STR( Yes ) )
150 
151 	PORT_START /* 1E82 */
152 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
153 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
154 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
155 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
156 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY )
157 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_4WAY )
158 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
159 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
160 
161 	PORT_START	/* SENSE */
162 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_VBLANK )
163 
164 INPUT_PORTS_END
165 
166 INPUT_PORTS_START( dodgem )
167 
168 	PORT_START /* 1E80 */
169 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
170 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
171 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 )
172 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 )
173 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
174 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 )
175 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED  )
176 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )	/* Missile-Background Collision */
177 
178     PORT_START /* 1E81 */
179 	PORT_DIPNAME( 0x01, 0x00, DEF_STR( Lives ) )
180 	PORT_DIPSETTING(    0x00, "3" )
181 	PORT_DIPSETTING(    0x01, "4" )
182 	PORT_DIPNAME( 0x02, 0x00, "Time" )
183 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
184 	PORT_DIPSETTING(    0x02, DEF_STR( On ) )
185 	PORT_DIPNAME( 0x1C, 0x04, DEF_STR( Coinage ) )
186 	PORT_DIPSETTING(	0x00, DEF_STR( 2C_1C ) )
187 	PORT_DIPSETTING(	0x04, DEF_STR( 1C_1C ) )
188 	PORT_DIPSETTING(	0x08, DEF_STR( 1C_2C ) )
189 	PORT_DIPSETTING(	0x0C, DEF_STR( 1C_3C ) )
190 	PORT_DIPSETTING(	0x10, DEF_STR( 1C_4C ) )
191 	PORT_DIPSETTING(	0x14, DEF_STR( 1C_5C ) )
192 	PORT_DIPSETTING(	0x18, DEF_STR( 1C_6C ) )
193 	PORT_DIPSETTING(	0x1C, DEF_STR( 1C_7C ) )
194 	PORT_DIPNAME( 0x20, 0x00, "Show High Scores" )
195 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
196 	PORT_DIPSETTING(    0x20, DEF_STR( On ) )
197 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
198 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
199 	PORT_DIPSETTING(    0x40, DEF_STR( On ) )
200 	PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
201 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
202 	PORT_DIPSETTING(    0x80, DEF_STR( On ) )
203 
204 	PORT_START /* 1E82 */
205 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP	  | IPF_4WAY )
206 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_4WAY )
207 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
208 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
209 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY )
210 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_4WAY )
211 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
212 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
213 
214 	PORT_START	/* SENSE */
215 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_VBLANK )
216 
217 	PORT_START /* 1E85 */
218 	PORT_DIPNAME( 0x03, 0x00, DEF_STR( Difficulty ) )
219 	PORT_DIPSETTING(    0x00, "Very Easy" )
220 	PORT_DIPSETTING(    0x01, "Easy" )
221 	PORT_DIPSETTING(    0x02, "Medium" )
222 	PORT_DIPSETTING(    0x03, "Hard" )
223 	PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
224 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
225 	PORT_DIPSETTING(    0x04, DEF_STR( On ) )
226 	PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
227 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
228 	PORT_DIPSETTING(    0x08, DEF_STR( On ) )
229 	PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
230 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
231 	PORT_DIPSETTING(    0x10, DEF_STR( On ) )
232 	PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
233 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
234 	PORT_DIPSETTING(    0x20, DEF_STR( On ) )
235 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
236 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
237 	PORT_DIPSETTING(    0x40, DEF_STR( On ) )
238 	PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
239 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
240 	PORT_DIPSETTING(    0x80, DEF_STR( On ) )
241 
242 	PORT_START /* 1E86 */
243 	PORT_BITX(    0x01, 0x01, IPT_DIPSWITCH_NAME | IPF_CHEAT, "Collision Detection", IP_KEY_NONE, IP_JOY_NONE )
244 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
245 	PORT_DIPSETTING(    0x01, DEF_STR( On ) )
246 
247 INPUT_PORTS_END
248 
249 
250 static PALETTE_INIT( zac2650 )
251 {
252 	palette_set_color(0,0x00,0x00,0x00); /* BLACK */
253 	palette_set_color(1,0xff,0xff,0xff); /* WHITE */
254 	colortable[0] = 0;
255 	colortable[1] = 1;
256 	colortable[2] = 0;
257 	colortable[3] = 0;
258 }
259 
260 /************************************************************************************************
261 
262  Video is slightly odd on these zac boards
263 
264  background is 256 x 240 pixels, but the sprite chips run at a different frequency, which means
265  that the output of 196x240 is stretched to fill the same screen space.
266 
267  to 'properly' accomplish this, we set the screen up as 768x720 and do the background at 3 times
268  the size, and the sprites as 4 times the size - everything then matches up correctly.
269 
270 ************************************************************************************************/
271 
272 
273 static struct GfxLayout tinvader_character =
274 {
275 	24,24,
276 	128,
277 	1,
278 	{ 0 },
279 	{ 0,0,0,1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7 },
280    	{ 0*8, 0*8, 0*8, 1*8, 1*8, 1*8, 2*8, 2*8, 2*8, 3*8, 3*8, 3*8, 4*8, 4*8, 4*8,
281 	  5*8, 5*8, 5*8, 6*8, 6*8, 6*8, 7*8, 7*8, 7*8 },
282 	8*8
283 };
284 
285 
286 static struct GfxLayout s2636_character8 =
287 {
288 	32,30,
289 	16,
290 	1,
291 	{ 0 },
292 	{ 0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7 },
293    	{ 0*8, 0*8, 0*8, 1*8, 1*8, 1*8, 2*8, 2*8, 2*8, 3*8, 3*8, 3*8,
294 	  4*8, 4*8, 4*8, 5*8, 5*8, 5*8, 6*8, 6*8, 6*8, 7*8, 7*8, 7*8,
295 	  8*8, 8*8, 8*8, 9*8, 9*8, 9*8 	} ,
296 	8*8
297 };
298 
299 static struct GfxLayout s2636_character16 =
300 {
301 	64,60,
302 	16,
303 	1,
304 	{ 0 },
305 	{ 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,
306 	  4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7 },
307    	{ 0*8, 0*8, 0*8, 0*8, 0*8, 0*8, 1*8, 1*8, 1*8, 1*8, 1*8, 1*8,
308 	  2*8, 2*8, 2*8, 2*8, 2*8, 2*8, 3*8, 3*8, 3*8, 3*8, 3*8, 3*8,
309 	  4*8, 4*8, 4*8, 4*8, 4*8, 4*8, 5*8, 5*8, 5*8, 5*8, 5*8, 5*8,
310 	  6*8, 6*8, 6*8, 6*8, 6*8, 6*8, 7*8, 7*8, 7*8, 7*8, 7*8, 7*8,
311 	  8*8, 8*8, 8*8, 8*8, 8*8, 8*8, 9*8, 9*8, 9*8, 9*8, 9*8, 9*8 	} ,
312 	8*8
313 };
314 
315 static struct GfxDecodeInfo tinvader_gfxdecodeinfo[] =
316 {
317 	{ REGION_GFX1, 0, &tinvader_character,  0, 2 },
318   	{ REGION_CPU1, 0x1F00, &s2636_character8, 0, 2 },	/* dynamic */
319   	{ REGION_CPU1, 0x1F00, &s2636_character16, 0, 2 },	/* dynamic */
320 	{ -1 } /* end of array */
321 };
322 
323 static MACHINE_DRIVER_START( tinvader )
324 
325 	/* basic machine hardware */
326 	MDRV_CPU_ADD(S2650, 3800000/4/3)
MDRV_CPU_MEMORY(readmem,writemem)327 	MDRV_CPU_MEMORY(readmem,writemem)
328 	MDRV_CPU_PORTS(readport,0)
329 
330 	MDRV_FRAMES_PER_SECOND(55)
331 	MDRV_VBLANK_DURATION(1041)
332 
333 	/* video hardware */
334 	MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
335 	MDRV_SCREEN_SIZE(30*24, 32*24)
336 	MDRV_VISIBLE_AREA(0, 719, 0, 767)
337 	MDRV_GFXDECODE(tinvader_gfxdecodeinfo)
338 	MDRV_PALETTE_LENGTH(2)
339 	MDRV_COLORTABLE_LENGTH(4)
340 
341 	MDRV_PALETTE_INIT(zac2650)
342 	MDRV_VIDEO_START(tinvader)
343 	MDRV_VIDEO_UPDATE(tinvader)
344 
345 	/* sound hardware */
346 MACHINE_DRIVER_END
347 
348 WRITE_HANDLER( tinvader_sound_w )
349 {
350     /* sounds are NOT the same as space invaders */
351 
352 	log_cb(RETRO_LOG_DEBUG, LOGPRE "Register %x = Data %d\n",data & 0xfe,data & 0x01);
353 
354     /* 08 = hit invader */
355     /* 20 = bonus (extra base) */
356     /* 40 = saucer */
357 	/* 84 = fire */
358     /* 90 = die */
359     /* c4 = hit saucer */
360 }
361 
362 ROM_START( sia2650 )
363 	ROM_REGION( 0x2000, REGION_CPU1, 0 )
CRC(a85550a9)364 	ROM_LOAD( "42_1.bin",   0x0000, 0x0800, CRC(a85550a9) SHA1(3f1e6b8e61894ff997e31b9c5ff819aa4678394e) )
365 	ROM_LOAD( "44_2.bin",   0x0800, 0x0800, CRC(48d5a3ed) SHA1(7f6421ba8225d49c1038595517f31b076d566586) )
366 	ROM_LOAD( "46_3.bin",   0x1000, 0x0800, CRC(d766e784) SHA1(88c113855c4cde8cefbe862d3e5abf80bd17aaa0) )
367 
368 	ROM_REGION( 0x400, REGION_GFX1, ROMREGION_DISPOSE )
369 	ROM_LOAD( "06_inv.bin", 0x0000, 0x0400, CRC(7bfed23e) SHA1(f754f0a4d6c8f9812bf333c30fa433b63d49a750) )
370 ROM_END
371 
372 ROM_START( tinv2650 )
373 	ROM_REGION( 0x2000, REGION_CPU1, 0 )
374 	ROM_LOAD( "42_1.bin",   0x0000, 0x0800, CRC(a85550a9) SHA1(3f1e6b8e61894ff997e31b9c5ff819aa4678394e) )
375 	ROM_LOAD( "44_2t.bin",  0x0800, 0x0800, CRC(083c8621) SHA1(d9b33d532903b0e6dee2357b9e3b329856505a73) )
376 	ROM_LOAD( "46_3t.bin",  0x1000, 0x0800, CRC(12c0934f) SHA1(9fd67d425c533b0e09b201301020639eb9e452f7) )
377 
378 	ROM_REGION( 0x400, REGION_GFX1, ROMREGION_DISPOSE )
379 	ROM_LOAD( "06_inv.bin", 0x0000, 0x0400, CRC(7bfed23e) SHA1(f754f0a4d6c8f9812bf333c30fa433b63d49a750) )
380 ROM_END
381 
382 ROM_START( dodgem )
383 	ROM_REGION( 0x2000, REGION_CPU1, 0 )
384 	ROM_LOAD( "rom1.bin",     0x0000, 0x0400, CRC(a327b57d) SHA1(a9cb17e60ab7b4ed9d5a9e7f8451a8f29bb7d00d) )
385 	ROM_LOAD( "rom2.bin",     0x0400, 0x0400, CRC(2a06ec74) SHA1(34fd3cbb1ddadb81abde54046bf245e2285bb740) )
386 	ROM_LOAD( "rom3.bin",     0x0800, 0x0400, CRC(e9ed656d) SHA1(a36ec04fd7cdf26aa7fa36e18cd44b159ed53906) )
387 	ROM_LOAD( "rom4.bin",     0x0c00, 0x0400, CRC(ecbfd906) SHA1(89f921a3d69b30977cd09a62dff4be02e6604550) )
388 	ROM_LOAD( "rom5.bin",     0x1000, 0x0400, CRC(bdae09fe) SHA1(76517d432d9bff5a2eea438f6edc3e04b889448a) )
389 	ROM_LOAD( "rom6.bin",     0x1400, 0x0400, CRC(e131eacf) SHA1(6f5244a9d27b3c5696ed83843e46079d579f7b39) )
390 
391 	ROM_REGION( 0x400, REGION_GFX1, ROMREGION_DISPOSE )
392 	ROM_LOAD( "93451.bin",	  0x0000, 0x0400, CRC(004b26d2) SHA1(0b825510e7a8afa9db589f87ec93467ab8c73f93) )
393 
394 	/* unknown */
395 	ROM_REGION( 0x0200, REGION_PROMS, 0 )
396 	ROM_LOAD( "74s571",		  0x0000, 0x0200, CRC(cc0b407e) SHA1(e675e3d7ff82e1cff9001e367620208bffa8b42f) )
397 ROM_END
398 
399 
400 static DRIVER_INIT( tinvader )
401 {
402 	artwork_set_overlay(tinv2650_overlay);
403 }
404 
405 
406 GAMEX( 1978, sia2650,  0,       tinvader, sinvader, 0,        ROT270, "Zaccaria/Zelco", "Super Invader Attack", GAME_NO_SOUND )
407 GAMEX( 1978, tinv2650, sia2650, tinvader, tinvader, tinvader, ROT270, "Zaccaria/Zelco", "The Invaders",			GAME_NO_SOUND )
408 GAMEX( 1979, dodgem,   0,       tinvader, dodgem,   0,        ROT0,   "Zaccaria",		"Dodgem",				GAME_NO_SOUND )
409