1 #include "../vidhrdw/phoenix.c"
2 #include "../sndhrdw/phoenix.c"
3 
4 /***************************************************************************
5 
6 Phoenix memory map
7 
8 driver by Richard Davies
9 
10 Note:
11    pleiads is using another sound driver, sndhrdw\pleiads.c
12  Andrew Scott (ascott@utkux.utcc.utk.edu)
13 
14 0000-3fff 16Kb Program ROM
15 4000-43ff 1Kb Video RAM Charset A (4340-43ff variables)
16 4800-4bff 1Kb Video RAM Charset B (4b40-4bff variables)
17 5000-53ff 1Kb Video Control write-only (mirrored)
18 5800-5bff 1Kb Video Scroll Register (mirrored)
19 6000-63ff 1Kb Sound Control A (mirrored)
20 6800-6bff 1Kb Sound Control B (mirrored)
21 7000-73ff 1Kb 8bit Game Control read-only (mirrored)
22 7800-7bff 1Kb 8bit Dip Switch read-only (mirrored)
23 
24 memory mapped ports:
25 
26 read-only:
27 7000-73ff IN
28 7800-7bff DSW
29 
30  * IN (all bits are inverted)
31  * bit 7 : Shield
32  * bit 6 : Left
33  * bit 5 : Right
34  * bit 4 : Fire
35  * bit 3 : -
36  * bit 2 : Start 2
37  * bit 1 : Start 1
38  * bit 0 : Coin
39 
40  * DSW
41  * bit 7 : VBlank
42  * bit 6 : free play (pleiads only)
43  * bit 5 : attract sound 0 = off 1 = on (pleiads only?)
44  * bit 4 : coins per play  0 = 1 coin  1 = 2 coins
45  * bit 3 :\ bonus
46  * bit 2 :/ 00 = 3000  01 = 4000  10 = 5000  11 = 6000
47  * bit 1 :\ number of lives
48  * bit 0 :/ 00 = 3	01 = 4	10 = 5	11 = 6
49 
50 ***************************************************************************/
51 
52 #include "driver.h"
53 
54 
55 READ_HANDLER( phoenix_paged_ram_r );
56 WRITE_HANDLER( phoenix_paged_ram_w );
57 WRITE_HANDLER( phoenix_videoreg_w );
58 WRITE_HANDLER( phoenix_scroll_w );
59 READ_HANDLER( phoenix_input_port_0_r );
60 void phoenix_vh_convert_color_prom(unsigned char *palette, unsigned short *colortable,const unsigned char *color_prom);
61 int  phoenix_vh_start(void);
62 void phoenix_vh_stop(void);
63 void phoenix_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
64 
65 WRITE_HANDLER( phoenix_sound_control_a_w );
66 WRITE_HANDLER( phoenix_sound_control_b_w );
67 int phoenix_sh_start(const struct MachineSound *msound);
68 void phoenix_sh_stop(void);
69 void phoenix_sh_update(void);
70 
71 WRITE_HANDLER( pleiads_sound_control_a_w );
72 WRITE_HANDLER( pleiads_sound_control_b_w );
73 int pleiads_sh_start(const struct MachineSound *msound);
74 void pleiads_sh_stop(void);
75 void pleiads_sh_update(void);
76 
77 
78 static struct MemoryReadAddress readmem[] =
79 {
80 	{ 0x0000, 0x3fff, MRA_ROM },
81 	{ 0x4000, 0x4fff, phoenix_paged_ram_r },	/* 2 pages selected by Bit 0 of videoregister */
82 	{ 0x7000, 0x73ff, phoenix_input_port_0_r }, /* IN0 */
83 	{ 0x7800, 0x7bff, input_port_1_r }, 		/* DSW */
84 	{ -1 }	/* end of table */
85 };
86 
87 
88 #define WRITEMEM(GAMENAME)										\
89 																\
90 static struct MemoryWriteAddress GAMENAME##_writemem[] =		\
91 {																\
92 	{ 0x0000, 0x3fff, MWA_ROM },								\
93 	{ 0x4000, 0x4fff, phoenix_paged_ram_w },  /* 2 pages selected by Bit 0 of the video register */ \
94 	{ 0x5000, 0x53ff, phoenix_videoreg_w }, 					\
95 	{ 0x5800, 0x5bff, phoenix_scroll_w },	/* the game sometimes writes at mirror addresses */ 	\
96 	{ 0x6000, 0x63ff, GAMENAME##_sound_control_a_w },			\
97 	{ 0x6800, 0x6bff, GAMENAME##_sound_control_b_w },			\
98 	{ -1 }	/* end of table */									\
99 };
100 
101 WRITEMEM(phoenix)
102 WRITEMEM(pleiads)
103 
104 
105 
106 INPUT_PORTS_START( phoenix )
107 	PORT_START		/* IN0 */
108 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
109 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 )
110 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 )
111 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
112 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
113 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_2WAY )
114 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_2WAY )
115 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 )
116 
117 	PORT_START		/* DSW0 */
118 	PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) )
119 	PORT_DIPSETTING(	0x00, "3" )
120 	PORT_DIPSETTING(	0x01, "4" )
121 	PORT_DIPSETTING(	0x02, "5" )
122 	PORT_DIPSETTING(	0x03, "6" )
123 	PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Bonus_Life ) )
124 	PORT_DIPSETTING(	0x00, "3000" )
125 	PORT_DIPSETTING(	0x04, "4000" )
126 	PORT_DIPSETTING(	0x08, "5000" )
127 	PORT_DIPSETTING(	0x0c, "6000" )
128 	PORT_DIPNAME( 0x10, 0x00, DEF_STR( Coinage ) )
129 	PORT_DIPSETTING(	0x10, DEF_STR( 2C_1C ) )
130 	PORT_DIPSETTING(	0x00, DEF_STR( 1C_1C ) )
131 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
132 	PORT_DIPSETTING(	0x20, DEF_STR( Off ) )
133 	PORT_DIPSETTING(	0x00, DEF_STR( On ) )
134 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
135 	PORT_DIPSETTING(	0x40, DEF_STR( Off ) )
136 	PORT_DIPSETTING(	0x00, DEF_STR( On ) )
137 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_VBLANK )
138 INPUT_PORTS_END
139 
140 INPUT_PORTS_START( phoenixa )
141 	PORT_START		/* IN0 */
142 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
143 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 )
144 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 )
145 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
146 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
147 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_2WAY )
148 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_2WAY )
149 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 )
150 
151 	PORT_START		/* DSW0 */
152 	PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) )
153 	PORT_DIPSETTING(	0x00, "3" )
154 	PORT_DIPSETTING(	0x01, "4" )
155 	PORT_DIPSETTING(	0x02, "5" )
156 	PORT_DIPSETTING(	0x03, "6" )
157 	PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Bonus_Life ) )
158 	PORT_DIPSETTING(	0x00, "3000" )
159 	PORT_DIPSETTING(	0x04, "4000" )
160 	PORT_DIPSETTING(	0x08, "5000" )
161 	PORT_DIPSETTING(	0x0c, "6000" )
162 	/* Coinage is backwards from phoenix (Amstar) */
163 	PORT_DIPNAME( 0x10, 0x10, DEF_STR( Coinage ) )
164 	PORT_DIPSETTING(	0x00, DEF_STR( 2C_1C ) )
165 	PORT_DIPSETTING(	0x10, DEF_STR( 1C_1C ) )
166 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
167 	PORT_DIPSETTING(	0x20, DEF_STR( Off ) )
168 	PORT_DIPSETTING(	0x00, DEF_STR( On ) )
169 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
170 	PORT_DIPSETTING(	0x40, DEF_STR( Off ) )
171 	PORT_DIPSETTING(	0x00, DEF_STR( On ) )
172 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_VBLANK )
173 INPUT_PORTS_END
174 
175 
176 INPUT_PORTS_START( phoenixt )
177 	PORT_START		/* IN0 */
178 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
179 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 )
180 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 )
181 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
182 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
183 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_2WAY )
184 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_2WAY )
185 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 )
186 
187 	PORT_START		/* DSW0 */
188 	PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) )
189 	PORT_DIPSETTING(	0x00, "3" )
190 	PORT_DIPSETTING(	0x01, "4" )
191 	PORT_DIPSETTING(	0x02, "5" )
192 	PORT_DIPSETTING(	0x03, "6" )
193 	PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Bonus_Life ) )
194 	PORT_DIPSETTING(	0x00, "3000" )
195 	PORT_DIPSETTING(	0x04, "4000" )
196 	PORT_DIPSETTING(	0x08, "5000" )
197 	PORT_DIPSETTING(	0x0c, "6000" )
198 	PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
199 	PORT_DIPSETTING(	0x10, DEF_STR( Off ) )
200 	PORT_DIPSETTING(	0x00, DEF_STR( On ) )
201 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
202 	PORT_DIPSETTING(	0x20, DEF_STR( Off ) )
203 	PORT_DIPSETTING(	0x00, DEF_STR( On ) )
204 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
205 	PORT_DIPSETTING(	0x40, DEF_STR( Off ) )
206 	PORT_DIPSETTING(	0x00, DEF_STR( On ) )
207 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_VBLANK )
208 INPUT_PORTS_END
209 
210 INPUT_PORTS_START( phoenix3 )
211 	PORT_START		/* IN0 */
212 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
213 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 )
214 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 )
215 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
216 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
217 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_2WAY )
218 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_2WAY )
219 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 )
220 	PORT_START		/* DSW0 */
221 	PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) )
222 	PORT_DIPSETTING(	0x00, "3" )
223 	PORT_DIPSETTING(	0x01, "4" )
224 	PORT_DIPSETTING(	0x02, "5" )
225 	PORT_DIPSETTING(	0x03, "6" )
226 	PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Bonus_Life ) )
227 	PORT_DIPSETTING(	0x00, "3000" )
228 	PORT_DIPSETTING(	0x04, "4000" )
229 	PORT_DIPSETTING(	0x08, "5000" )
230 	PORT_DIPSETTING(	0x0c, "6000" )
231 	PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
232 	PORT_DIPSETTING(	0x10, DEF_STR( Off ) )
233 	PORT_DIPSETTING(	0x00, DEF_STR( On ) )
234 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
235 	PORT_DIPSETTING(	0x20, DEF_STR( Off ) )
236 	PORT_DIPSETTING(	0x00, DEF_STR( On ) )
237 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Coinage ) )
238 	PORT_DIPSETTING(	0x40, DEF_STR( 2C_1C ) )
239 	PORT_DIPSETTING(	0x00, DEF_STR( 1C_1C ) )
240 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_VBLANK )
241 INPUT_PORTS_END
242 
243 
244 INPUT_PORTS_START( pleiads )
245 	PORT_START		/* IN0 */
246 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
247 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 )
248 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 )
249 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )	   /* Protection. See 0x0552 */
250 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
251 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_2WAY )
252 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_2WAY )
253 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 )
254 	PORT_START		/* DSW0 */
255 	PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) )
256 	PORT_DIPSETTING(	0x00, "3" )
257 	PORT_DIPSETTING(	0x01, "4" )
258 	PORT_DIPSETTING(	0x02, "5" )
259 	PORT_DIPSETTING(	0x03, "6" )
260 	PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Bonus_Life ) )
261 	PORT_DIPSETTING(	0x00, "3000" )
262 	PORT_DIPSETTING(	0x04, "4000" )
263 	PORT_DIPSETTING(	0x08, "5000" )
264 	PORT_DIPSETTING(	0x0c, "6000" )
265 	PORT_DIPNAME( 0x10, 0x00, DEF_STR( Coinage ) )
266 	PORT_DIPSETTING(	0x10, DEF_STR( 2C_1C ) )
267 	PORT_DIPSETTING(	0x00, DEF_STR( 1C_1C ) )
268 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
269 	PORT_DIPSETTING(	0x20, DEF_STR( Off ) )
270 	PORT_DIPSETTING(	0x00, DEF_STR( On ) )
271 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
272 	PORT_DIPSETTING(	0x40, DEF_STR( Off ) )
273 	PORT_DIPSETTING(	0x00, DEF_STR( On ) )
274 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_VBLANK )
275 INPUT_PORTS_END
276 
277 
278 static struct GfxLayout charlayout =
279 {
280 	8,8,	/* 8*8 characters */
281 	256,	/* 256 characters */
282 	2,	/* 2 bits per pixel */
283 	{ 256*8*8, 0 }, /* the two bitplanes are separated */
284 	{ 7, 6, 5, 4, 3, 2, 1, 0 }, /* pretty straightforward layout */
285 	{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
286 	8*8 /* every char takes 8 consecutive bytes */
287 };
288 
289 static struct GfxDecodeInfo gfxdecodeinfo[] =
290 {
291 	{ REGION_GFX1, 0, &charlayout,	  0, 16 },
292 	{ REGION_GFX2, 0, &charlayout, 16*4, 16 },
293 	{ -1 } /* end of array */
294 };
295 
296 
297 
298 static struct TMS36XXinterface phoenix_tms36xx_interface =
299 {
300 	1,
301 	{ 50 }, 		/* mixing levels */
302 	{ MM6221AA },	/* TMS36xx subtype(s) */
303 	{ 372  },		/* base frequency */
304 	{ {0.50,0,0,1.05,0,0} }, /* decay times of voices */
305     { 0.21 },       /* tune speed (time between beats) */
306 };
307 
308 static struct CustomSound_interface phoenix_custom_interface =
309 {
310 	phoenix_sh_start,
311 	phoenix_sh_stop,
312 	phoenix_sh_update
313 };
314 
315 static struct TMS36XXinterface pleiads_tms36xx_interface =
316 {
317 	1,
318 	{ 75		},	/* mixing levels */
319 	{ TMS3615	},	/* TMS36xx subtype(s) */
320 	{ 247		},	/* base frequencies (one octave below A) */
321 	/*
322 	 * Decay times of the voices; NOTE: it's unknown if
323 	 * the the TMS3615 mixes more than one voice internally.
324 	 * A wav taken from Pop Flamer sounds like there
325 	 * are at least no 'odd' harmonics (5 1/3' and 2 2/3')
326      */
327 	{ {0.33,0.33,0,0.33,0,0.33} }
328 };
329 
330 static struct CustomSound_interface pleiads_custom_interface =
331 {
332 	pleiads_sh_start,
333 	pleiads_sh_stop,
334 	pleiads_sh_update
335 };
336 
337 #define MACHINE_DRIVER(GAMENAME)									\
338 																	\
339 static struct MachineDriver machine_driver_##GAMENAME = 			\
340 {																	\
341 	/* basic machine hardware */									\
342 	{																\
343 		{															\
344 			CPU_8080,												\
345 			3072000,	/* 3 Mhz ? */								\
346 			readmem,GAMENAME##_writemem,0,0,						\
347 			ignore_interrupt,1										\
348 		}															\
349 	},																\
350 	60, DEFAULT_REAL_60HZ_VBLANK_DURATION,	/* frames per second, vblank duration */	\
351 	1,	/* single CPU, no need for interleaving */					\
352 	0,																\
353 																	\
354 	/* video hardware */											\
355 	32*8, 32*8, { 0*8, 31*8-1, 0*8, 26*8-1 },						\
356 	gfxdecodeinfo,													\
357 	256,16*4+16*4,													\
358 	phoenix_vh_convert_color_prom,									\
359 																	\
360 	VIDEO_TYPE_RASTER,												\
361 	0,																\
362 	phoenix_vh_start,												\
363 	phoenix_vh_stop,												\
364 	phoenix_vh_screenrefresh,										\
365 																	\
366 	/* sound hardware */											\
367 	0,0,0,0,														\
368 	{																\
369 		{															\
370 			SOUND_TMS36XX,											\
371 			&GAMENAME##_tms36xx_interface							\
372 		},															\
373 		{															\
374 			SOUND_CUSTOM,											\
375 			&GAMENAME##_custom_interface							\
376 		}															\
377 	}																\
378 };
379 
380 
381 MACHINE_DRIVER(phoenix)
382 MACHINE_DRIVER(pleiads)
383 
384 
385 
386 /***************************************************************************
387 
388   Game driver(s)
389 
390 ***************************************************************************/
391 
392 ROM_START( phoenix )
393 	ROM_REGION( 0x10000, REGION_CPU1 )	/* 64k for code */
394 	ROM_LOAD( "ic45",         0x0000, 0x0800, 0x9f68086b )
395 	ROM_LOAD( "ic46",         0x0800, 0x0800, 0x273a4a82 )
396 	ROM_LOAD( "ic47",         0x1000, 0x0800, 0x3d4284b9 )
397 	ROM_LOAD( "ic48",         0x1800, 0x0800, 0xcb5d9915 )
398 	ROM_LOAD( "ic49",         0x2000, 0x0800, 0xa105e4e7 )
399 	ROM_LOAD( "ic50",         0x2800, 0x0800, 0xac5e9ec1 )
400 	ROM_LOAD( "ic51",         0x3000, 0x0800, 0x2eab35b4 )
401 	ROM_LOAD( "ic52",         0x3800, 0x0800, 0xaff8e9c5 )
402 
403 	ROM_REGION( 0x1000, REGION_GFX1 | REGIONFLAG_DISPOSE )
404 	ROM_LOAD( "ic23",         0x0000, 0x0800, 0x3c7e623f )
405 	ROM_LOAD( "ic24",         0x0800, 0x0800, 0x59916d3b )
406 
407 	ROM_REGION( 0x1000, REGION_GFX2 | REGIONFLAG_DISPOSE )
408 	ROM_LOAD( "ic39",         0x0000, 0x0800, 0x53413e8f )
409 	ROM_LOAD( "ic40",         0x0800, 0x0800, 0x0be2ba91 )
410 
411 	ROM_REGION( 0x0200, REGION_PROMS )
412 	ROM_LOAD( "ic40_b.bin",   0x0000, 0x0100, 0x79350b25 )  /* palette low bits */
413 	ROM_LOAD( "ic41_a.bin",   0x0100, 0x0100, 0xe176b768 )  /* palette high bits */
414 ROM_END
415 
416 ROM_START( phoenixa )
417 	ROM_REGION( 0x10000, REGION_CPU1 )	/* 64k for code */
418 	ROM_LOAD( "ic45.k1",      0x0000, 0x0800, 0xc7a9b499 )
419 	ROM_LOAD( "ic46.k2",      0x0800, 0x0800, 0xd0e6ae1b )
420 	ROM_LOAD( "ic47.k3",      0x1000, 0x0800, 0x64bf463a )
421 	ROM_LOAD( "ic48.k4",      0x1800, 0x0800, 0x1b20fe62 )
422 	ROM_LOAD( "phoenixc.49",  0x2000, 0x0800, 0x1a1ce0d0 )
423 	ROM_LOAD( "ic50",         0x2800, 0x0800, 0xac5e9ec1 )
424 	ROM_LOAD( "ic51",         0x3000, 0x0800, 0x2eab35b4 )
425 	ROM_LOAD( "ic52",         0x3800, 0x0800, 0xaff8e9c5 )
426 
427 	ROM_REGION( 0x1000, REGION_GFX1 | REGIONFLAG_DISPOSE )
428 	ROM_LOAD( "ic23",         0x0000, 0x0800, 0x3c7e623f )
429 	ROM_LOAD( "ic24",         0x0800, 0x0800, 0x59916d3b )
430 
431 	ROM_REGION( 0x1000, REGION_GFX2 | REGIONFLAG_DISPOSE )
432 	ROM_LOAD( "phoenixc.39",  0x0000, 0x0800, 0xbb0525ed )
433 	ROM_LOAD( "phoenixc.40",  0x0800, 0x0800, 0x4178aa4f )
434 
435 	ROM_REGION( 0x0200, REGION_PROMS )
436 	ROM_LOAD( "ic40_b.bin",   0x0000, 0x0100, 0x79350b25 )  /* palette low bits */
437 	ROM_LOAD( "ic41_a.bin",   0x0100, 0x0100, 0xe176b768 )  /* palette high bits */
438 ROM_END
439 
440 ROM_START( phoenixt )
441 	ROM_REGION( 0x10000, REGION_CPU1 )	/* 64k for code */
442 	ROM_LOAD( "phoenix.45",   0x0000, 0x0800, 0x5b8c55a8 )
443 	ROM_LOAD( "phoenix.46",   0x0800, 0x0800, 0xdbc942fa )
444 	ROM_LOAD( "phoenix.47",   0x1000, 0x0800, 0xcbbb8839 )
445 	ROM_LOAD( "phoenix.48",   0x1800, 0x0800, 0xcb65eff8 )
446 	ROM_LOAD( "phoenix.49",   0x2000, 0x0800, 0xc8a5d6d6 )
447 	ROM_LOAD( "ic50",         0x2800, 0x0800, 0xac5e9ec1 )
448 	ROM_LOAD( "ic51",         0x3000, 0x0800, 0x2eab35b4 )
449 	ROM_LOAD( "phoenix.52",   0x3800, 0x0800, 0xb9915263 )
450 
451 	ROM_REGION( 0x1000, REGION_GFX1 | REGIONFLAG_DISPOSE )
452 	ROM_LOAD( "ic23",         0x0000, 0x0800, 0x3c7e623f )
453 	ROM_LOAD( "ic24",         0x0800, 0x0800, 0x59916d3b )
454 
455 	ROM_REGION( 0x1000, REGION_GFX2 | REGIONFLAG_DISPOSE )
456 	ROM_LOAD( "ic39",         0x0000, 0x0800, 0x53413e8f )
457 	ROM_LOAD( "ic40",         0x0800, 0x0800, 0x0be2ba91 )
458 
459 	ROM_REGION( 0x0200, REGION_PROMS )
460 	ROM_LOAD( "ic40_b.bin",   0x0000, 0x0100, 0x79350b25 )  /* palette low bits */
461 	ROM_LOAD( "ic41_a.bin",   0x0100, 0x0100, 0xe176b768 )  /* palette high bits */
462 ROM_END
463 
464 ROM_START( phoenix3 )
465 	ROM_REGION( 0x10000, REGION_CPU1 )	/* 64k for code */
466 	ROM_LOAD( "phoenix3.45",  0x0000, 0x0800, 0xa362cda0 )
467 	ROM_LOAD( "phoenix3.46",  0x0800, 0x0800, 0x5748f486 )
468 	ROM_LOAD( "phoenix.47",   0x1000, 0x0800, 0xcbbb8839 )
469 	ROM_LOAD( "phoenix3.48",  0x1800, 0x0800, 0xb5d97a4d )
470 	ROM_LOAD( "ic49",         0x2000, 0x0800, 0xa105e4e7 )
471 	ROM_LOAD( "ic50",         0x2800, 0x0800, 0xac5e9ec1 )
472 	ROM_LOAD( "ic51",         0x3000, 0x0800, 0x2eab35b4 )
473 	ROM_LOAD( "phoenix3.52",  0x3800, 0x0800, 0xd2c5c984 )
474 
475 	ROM_REGION( 0x1000, REGION_GFX1 | REGIONFLAG_DISPOSE )
476 	ROM_LOAD( "ic23",         0x0000, 0x0800, 0x3c7e623f )
477 	ROM_LOAD( "ic24",         0x0800, 0x0800, 0x59916d3b )
478 
479 	ROM_REGION( 0x1000, REGION_GFX2 | REGIONFLAG_DISPOSE )
480 	ROM_LOAD( "ic39",         0x0000, 0x0800, 0x53413e8f )
481 	ROM_LOAD( "ic40",         0x0800, 0x0800, 0x0be2ba91 )
482 
483 	ROM_REGION( 0x0200, REGION_PROMS )
484 	ROM_LOAD( "ic40_b.bin",   0x0000, 0x0100, 0x79350b25 )  /* palette low bits */
485 	ROM_LOAD( "ic41_a.bin",   0x0100, 0x0100, 0xe176b768 )  /* palette high bits */
486 ROM_END
487 
488 ROM_START( phoenixc )
489 	ROM_REGION( 0x10000, REGION_CPU1 )	/* 64k for code */
490 	ROM_LOAD( "phoenix.45",   0x0000, 0x0800, 0x5b8c55a8 )
491 	ROM_LOAD( "phoenix.46",   0x0800, 0x0800, 0xdbc942fa )
492 	ROM_LOAD( "phoenix.47",   0x1000, 0x0800, 0xcbbb8839 )
493 	ROM_LOAD( "phoenixc.48",  0x1800, 0x0800, 0x5ae0b215 )
494 	ROM_LOAD( "phoenixc.49",  0x2000, 0x0800, 0x1a1ce0d0 )
495 	ROM_LOAD( "ic50",         0x2800, 0x0800, 0xac5e9ec1 )
496 	ROM_LOAD( "ic51",         0x3000, 0x0800, 0x2eab35b4 )
497 	ROM_LOAD( "phoenixc.52",  0x3800, 0x0800, 0x8424d7c4 )
498 
499 	ROM_REGION( 0x1000, REGION_GFX1 | REGIONFLAG_DISPOSE )
500 	ROM_LOAD( "ic23",         0x0000, 0x0800, 0x3c7e623f )
501 	ROM_LOAD( "ic24",         0x0800, 0x0800, 0x59916d3b )
502 
503 	ROM_REGION( 0x1000, REGION_GFX2 | REGIONFLAG_DISPOSE )
504 	ROM_LOAD( "phoenixc.39",  0x0000, 0x0800, 0xbb0525ed )
505 	ROM_LOAD( "phoenixc.40",  0x0800, 0x0800, 0x4178aa4f )
506 
507 	ROM_REGION( 0x0200, REGION_PROMS )
508 	ROM_LOAD( "ic40_b.bin",   0x0000, 0x0100, 0x79350b25 )  /* palette low bits */
509 	ROM_LOAD( "ic41_a.bin",   0x0100, 0x0100, 0xe176b768 )  /* palette high bits */
510 ROM_END
511 
512 ROM_START( pleiads )
513 	ROM_REGION( 0x10000, REGION_CPU1 )	/* 64k for code */
514 	ROM_LOAD( "ic47.r1",      0x0000, 0x0800, 0x960212c8 )
515 	ROM_LOAD( "ic48.r2",      0x0800, 0x0800, 0xb254217c )
516 	ROM_LOAD( "ic47.bin",     0x1000, 0x0800, 0x87e700bb ) /* IC 49 on real board */
517 	ROM_LOAD( "ic48.bin",     0x1800, 0x0800, 0x2d5198d0 ) /* IC 50 on real board */
518 	ROM_LOAD( "ic51.r5",      0x2000, 0x0800, 0x49c629bc )
519 	ROM_LOAD( "ic50.bin",     0x2800, 0x0800, 0xf1a8a00d ) /* IC 52 on real board */
520 	ROM_LOAD( "ic53.r7",      0x3000, 0x0800, 0xb5f07fbc )
521 	ROM_LOAD( "ic52.bin",     0x3800, 0x0800, 0xb1b5a8a6 ) /* IC 54 on real board */
522 
523 	ROM_REGION( 0x1000, REGION_GFX1 | REGIONFLAG_DISPOSE )
524 	ROM_LOAD( "ic23.bin",     0x0000, 0x0800, 0x4e30f9e7 ) /* IC 45 on real board */
525 	ROM_LOAD( "ic24.bin",     0x0800, 0x0800, 0x5188fc29 ) /* IC 44 on real board */
526 
527 	ROM_REGION( 0x1000, REGION_GFX2 | REGIONFLAG_DISPOSE )
528 	ROM_LOAD( "ic39.bin",     0x0000, 0x0800, 0x85866607 ) /* IC 27 on real board */
529 	ROM_LOAD( "ic40.bin",     0x0800, 0x0800, 0xa841d511 ) /* IC 26 on real board */
530 
531 	ROM_REGION( 0x0200, REGION_PROMS )
532 	ROM_LOAD( "7611-5.26",   0x0000, 0x0100, 0x7a1bcb1e )   /* palette low bits */
533 	ROM_LOAD( "7611-5.33",   0x0100, 0x0100, 0xe38eeb83 )   /* palette high bits */
534 ROM_END
535 
536 ROM_START( pleiadbl )
537 	ROM_REGION( 0x10000, REGION_CPU1 )	/* 64k for code */
538 	ROM_LOAD( "ic45.bin",     0x0000, 0x0800, 0x93fc2958 )
539 	ROM_LOAD( "ic46.bin",     0x0800, 0x0800, 0xe2b5b8cd )
540 	ROM_LOAD( "ic47.bin",     0x1000, 0x0800, 0x87e700bb )
541 	ROM_LOAD( "ic48.bin",     0x1800, 0x0800, 0x2d5198d0 )
542 	ROM_LOAD( "ic49.bin",     0x2000, 0x0800, 0x9dc73e63 )
543 	ROM_LOAD( "ic50.bin",     0x2800, 0x0800, 0xf1a8a00d )
544 	ROM_LOAD( "ic51.bin",     0x3000, 0x0800, 0x6f56f317 )
545 	ROM_LOAD( "ic52.bin",     0x3800, 0x0800, 0xb1b5a8a6 )
546 
547 	ROM_REGION( 0x1000, REGION_GFX1 | REGIONFLAG_DISPOSE )
548 	ROM_LOAD( "ic23.bin",     0x0000, 0x0800, 0x4e30f9e7 )
549 	ROM_LOAD( "ic24.bin",     0x0800, 0x0800, 0x5188fc29 )
550 
551 	ROM_REGION( 0x1000, REGION_GFX2 | REGIONFLAG_DISPOSE )
552 	ROM_LOAD( "ic39.bin",     0x0000, 0x0800, 0x85866607 )
553 	ROM_LOAD( "ic40.bin",     0x0800, 0x0800, 0xa841d511 )
554 
555 	ROM_REGION( 0x0200, REGION_PROMS )
556 	ROM_LOAD( "7611-5.26",   0x0000, 0x0100, 0x7a1bcb1e )   /* palette low bits */
557 	ROM_LOAD( "7611-5.33",   0x0100, 0x0100, 0xe38eeb83 )   /* palette high bits */
558 ROM_END
559 
560 ROM_START( pleiadce )
561 	ROM_REGION( 0x10000, REGION_CPU1 )	/* 64k for code */
562 	ROM_LOAD( "pleiades.47",  0x0000, 0x0800, 0x711e2ba0 )
563 	ROM_LOAD( "pleiades.48",  0x0800, 0x0800, 0x93a36943 )
564 	ROM_LOAD( "ic47.bin",     0x1000, 0x0800, 0x87e700bb )
565 	ROM_LOAD( "pleiades.50",  0x1800, 0x0800, 0x5a9beba0 )
566 	ROM_LOAD( "pleiades.51",  0x2000, 0x0800, 0x1d828719 )
567 	ROM_LOAD( "ic50.bin",     0x2800, 0x0800, 0xf1a8a00d )
568 	ROM_LOAD( "pleiades.53",  0x3000, 0x0800, 0x037b319c )
569 	ROM_LOAD( "pleiades.54",  0x3800, 0x0800, 0xca264c7c )
570 
571 	ROM_REGION( 0x1000, REGION_GFX1 | REGIONFLAG_DISPOSE )
572 	ROM_LOAD( "pleiades.45",  0x0000, 0x0800, 0x8dbd3785 )
573 	ROM_LOAD( "pleiades.44",  0x0800, 0x0800, 0x0db3e436 )
574 
575 	ROM_REGION( 0x1000, REGION_GFX2 | REGIONFLAG_DISPOSE )
576 	ROM_LOAD( "ic39.bin",     0x0000, 0x0800, 0x85866607 )
577 	ROM_LOAD( "ic40.bin",     0x0800, 0x0800, 0xa841d511 )
578 
579 	ROM_REGION( 0x0200, REGION_PROMS )
580 	ROM_LOAD( "7611-5.26",   0x0000, 0x0100, 0x7a1bcb1e )   /* palette low bits */
581 	ROM_LOAD( "7611-5.33",   0x0100, 0x0100, 0xe38eeb83 )   /* palette high bits */
582 ROM_END
583 
584 
585 
586 GAMEX( 1980, phoenix,  0,	   phoenix, phoenix,  0, ROT90, "Amstar", "Phoenix (Amstar)", GAME_NO_COCKTAIL )
587 GAMEX( 1980, phoenixa, phoenix, phoenix, phoenixa, 0, ROT90, "Amstar (Centuri license)", "Phoenix (Centuri)", GAME_NO_COCKTAIL )
588 GAMEX( 1980, phoenixt, phoenix, phoenix, phoenixt, 0, ROT90, "Taito", "Phoenix (Taito)", GAME_NO_COCKTAIL )
589 GAMEX( 1980, phoenix3, phoenix, phoenix, phoenix3, 0, ROT90, "bootleg", "Phoenix (T.P.N.)", GAME_NO_COCKTAIL )
590 GAMEX( 1981, phoenixc, phoenix, phoenix, phoenixt, 0, ROT90, "bootleg?", "Phoenix (IRECSA, G.G.I Corp)", GAME_NO_COCKTAIL )
591 GAMEX( 1981, pleiads,  0,	   pleiads, pleiads,  0, ROT90, "Tehkan", "Pleiads (Tehkan)", GAME_NO_COCKTAIL )
592 GAMEX( 1981, pleiadbl, pleiads, pleiads, pleiads,  0, ROT90, "bootleg", "Pleiads (bootleg)", GAME_NO_COCKTAIL )
593 GAMEX( 1981, pleiadce, pleiads, pleiads, pleiads,  0, ROT90, "Tehkan (Centuri license)", "Pleiads (Centuri)", GAME_NO_COCKTAIL )
594 
595