1 #include "../machine/superpac.c"
2 #include "../vidhrdw/superpac.c"
3 
4 /***************************************************************************
5 
6 Super Pac-Man memory map (preliminary)
7 
8 driver by Aaron Giles
9 
10 CPU #1:
11 0000-03ff video RAM
12 0400-07ff color RAM
13 0800-0f7f RAM
14 0f80-0fff sprite data 1 (sprite number & color)
15 1000-177f RAM
16 1780-17ff sprite data 2 (x, y position)
17 1800-1f7f RAM
18 1f80-1fff sprite data 3 (high bit of y, flip flags, double-size flags)
19 2000      flip screen
20 4040-43ff RAM shared with CPU #2
21 4800-480f custom I/O chip #1
22 4810-481f custom I/O chip #2
23 5000      reset CPU #2
24 5002-5003 IRQ enable
25 5008-5009 sound enable
26 500a-500b CPU #2 enable
27 8000      watchdog timer
28 c000-ffff ROM
29 
30 CPU #2:
31 0000-0040 sound registers
32 0040-03ff RAM shared with CPU #1
33 f000-ffff ROM
34 
35 Interrupts:
36 CPU #1 IRQ generated by VBLANK
37 CPU #2 uses no interrupts
38 
39 ***************************************************************************/
40 
41 #include "driver.h"
42 #include "vidhrdw/generic.h"
43 
44 
45 extern unsigned char *mappy_soundregs;
46 WRITE_HANDLER( mappy_sound_enable_w );
47 WRITE_HANDLER( mappy_sound_w );
48 
49 extern unsigned char *superpac_sharedram;
50 extern unsigned char *superpac_customio_1,*superpac_customio_2;
51 READ_HANDLER( superpac_customio_r );
52 READ_HANDLER( superpac_sharedram_r );
53 WRITE_HANDLER( superpac_sharedram_w );
54 READ_HANDLER( superpac_customio_1_r );
55 READ_HANDLER( superpac_customio_2_r );
56 WRITE_HANDLER( superpac_interrupt_enable_w );
57 WRITE_HANDLER( superpac_cpu_enable_w );
58 WRITE_HANDLER( superpac_reset_2_w );
59 
60 int superpac_vh_start(void);
61 void superpac_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
62 void superpac_init_machine(void);
63 void superpac_vh_convert_color_prom(unsigned char *palette, unsigned short *colortable,const unsigned char *color_prom);
64 READ_HANDLER( superpac_flipscreen_r );
65 WRITE_HANDLER( superpac_flipscreen_w );
66 
67 
68 /* CPU 1 read addresses */
69 static struct MemoryReadAddress readmem_cpu1[] =
70 {
71 	{ 0x0000, 0x1fff, MRA_RAM },
72 	{ 0x2000, 0x2000, superpac_flipscreen_r },
73 	{ 0x4040, 0x43ff, superpac_sharedram_r },	/* Pac'n Pal only */
74 	{ 0x4800, 0x480f, superpac_customio_1_r },
75 	{ 0x4810, 0x481f, superpac_customio_2_r },
76 	{ 0xa000, 0xffff, MRA_ROM },
77 	{ -1 }	/* end of table */
78 };
79 
80 
81 /* CPU 1 write addresses */
82 static struct MemoryWriteAddress writemem_cpu1[] =
83 {
84 	{ 0x0000, 0x03ff, videoram_w, &videoram, &videoram_size },
85 	{ 0x0400, 0x07ff, colorram_w, &colorram },
86 	{ 0x0800, 0x0f7f, MWA_RAM },
87 	{ 0x0f80, 0x0fff, MWA_RAM, &spriteram, &spriteram_size },
88 	{ 0x1000, 0x177f, MWA_RAM },
89 	{ 0x1780, 0x17ff, MWA_RAM, &spriteram_2 },
90 	{ 0x1800, 0x1f7f, MWA_RAM },
91 	{ 0x1f80, 0x1fff, MWA_RAM, &spriteram_3 },
92 	{ 0x2000, 0x2000, superpac_flipscreen_w },
93 	{ 0x4040, 0x43ff, superpac_sharedram_w, &superpac_sharedram },
94 	{ 0x4800, 0x480f, MWA_RAM, &superpac_customio_1 },
95 	{ 0x4810, 0x481f, MWA_RAM, &superpac_customio_2 },
96 	{ 0x5000, 0x5000, superpac_reset_2_w },
97 	{ 0x5002, 0x5003, superpac_interrupt_enable_w },
98 	{ 0x5008, 0x5009, mappy_sound_enable_w },
99 	{ 0x500a, 0x500b, superpac_cpu_enable_w },
100 	{ 0x8000, 0x8000, watchdog_reset_w },
101 	{ 0xa000, 0xffff, MWA_ROM },
102 	{ -1 }	/* end of table */
103 };
104 
105 
106 /* CPU 2 read addresses */
107 static struct MemoryReadAddress superpac_readmem_cpu2[] =
108 {
109 	{ 0x0040, 0x03ff, superpac_sharedram_r },
110 	{ 0xf000, 0xffff, MRA_ROM },
111 	{ -1 }	/* end of table */
112 };
113 
114 
115 /* CPU 2 write addresses */
116 static struct MemoryWriteAddress superpac_writemem_cpu2[] =
117 {
118 	{ 0x0000, 0x003f, mappy_sound_w, &mappy_soundregs },
119 	{ 0x0040, 0x03ff, superpac_sharedram_w },
120 	{ 0xf000, 0xffff, MWA_ROM },
121 	{ -1 }	/* end of table */
122 };
123 
124 
125 /* CPU 2 read addresses */
126 static struct MemoryReadAddress pacnpal_readmem_cpu2[] =
127 {
128 	{ 0x0040, 0x03ff, superpac_sharedram_r },
129 	{ 0xf000, 0xffff, MRA_ROM },
130 	{ -1 }	/* end of table */
131 };
132 
133 
134 /* CPU 2 write addresses */
135 static struct MemoryWriteAddress pacnpal_writemem_cpu2[] =
136 {
137 	{ 0x0000, 0x003f, mappy_sound_w, &mappy_soundregs },
138 	{ 0x0040, 0x03ff, superpac_sharedram_w },
139 	{ 0x2000, 0x2001, superpac_interrupt_enable_w },
140 	{ 0x2006, 0x2007, mappy_sound_enable_w },
141 	{ 0xf000, 0xffff, MWA_ROM },
142 	{ -1 }	/* end of table */
143 };
144 
145 
146 INPUT_PORTS_START( superpac )
147 	PORT_START	/* DSW0 */
148 	PORT_DIPNAME( 0x0f, 0x00, DEF_STR( Difficulty ) )
149 	PORT_DIPSETTING(    0x00, "Rank 0-Normal" )
150 	PORT_DIPSETTING(    0x01, "Rank 1-Easiest" )
151 	PORT_DIPSETTING(    0x02, "Rank 2" )
152 	PORT_DIPSETTING(    0x03, "Rank 3" )
153 	PORT_DIPSETTING(    0x04, "Rank 4" )
154 	PORT_DIPSETTING(    0x05, "Rank 5" )
155 	PORT_DIPSETTING(    0x06, "Rank 6-Medium" )
156 	PORT_DIPSETTING(    0x07, "Rank 7" )
157 	PORT_DIPSETTING(    0x08, "Rank 8-Default" )
158 	PORT_DIPSETTING(    0x09, "Rank 9" )
159 	PORT_DIPSETTING(    0x0a, "Rank A" )
160 	PORT_DIPSETTING(    0x0b, "Rank B-Hardest" )
161 	PORT_DIPSETTING(    0x0c, "Rank C-Easy Auto" )
162 	PORT_DIPSETTING(    0x0d, "Rank D-Auto" )
163 	PORT_DIPSETTING(    0x0e, "Rank E-Auto" )
164 	PORT_DIPSETTING(    0x0f, "Rank F-Hard Auto" )
165 	PORT_DIPNAME( 0x30, 0x00, DEF_STR( Coin_B ) )
166 	PORT_DIPSETTING(    0x20, DEF_STR( 2C_1C ) )
167 	PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )
168 	PORT_DIPSETTING(    0x30, DEF_STR( 2C_3C ) )
169 	PORT_DIPSETTING(    0x10, DEF_STR( 1C_2C ) )
170 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) )
171 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
172 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
173 	PORT_DIPNAME( 0x80, 0x00, "Freeze" )
174 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
175 	PORT_DIPSETTING(    0x80, DEF_STR( On ) )
176 
177 	PORT_START	/* DSW1 */
178 	PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coin_A ) )
179 	PORT_DIPSETTING(    0x07, DEF_STR( 3C_1C ) )
180 	PORT_DIPSETTING(    0x05, DEF_STR( 2C_1C ) )
181 	PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )
182 	PORT_DIPSETTING(    0x06, DEF_STR( 2C_3C ) )
183 	PORT_DIPSETTING(    0x01, DEF_STR( 1C_2C ) )
184 	PORT_DIPSETTING(    0x02, DEF_STR( 1C_3C ) )
185 	PORT_DIPSETTING(    0x03, DEF_STR( 1C_6C ) )
186 	PORT_DIPSETTING(    0x04, DEF_STR( 1C_7C ) )
187 	PORT_DIPNAME( 0x38, 0x00, DEF_STR( Bonus_Life ) )
188 	PORT_DIPSETTING(    0x38, "None" )
189 	PORT_DIPSETTING(    0x30, "30k" )
190 	PORT_DIPSETTING(    0x08, "30k 80k" )
191 	PORT_DIPSETTING(    0x00, "30k 100k" )
192 	PORT_DIPSETTING(    0x10, "30k 120k" )
193 	PORT_DIPSETTING(    0x18, "30k 80k 80k" )
194 	PORT_DIPSETTING(    0x20, "30k 100k 100k" )
195 	PORT_DIPSETTING(    0x28, "30k 120k 120k" )
196 /* TODO: bonus scores for 5 lives */
197 /* 	PORT_DIPNAME( 0x38, 0x00, DEF_STR( Bonus_Life ) )
198 	PORT_DIPSETTING(    0x38, "None" )
199 	PORT_DIPSETTING(    0x28, "30k" )
200 	PORT_DIPSETTING(    0x30, "40k" )
201 	PORT_DIPSETTING(    0x00, "30k 100k" )
202 	PORT_DIPSETTING(    0x08, "30k 120k" )
203 	PORT_DIPSETTING(    0x10, "40k 120k" )
204 	PORT_DIPSETTING(    0x18, "30k 100k 100k" )
205 	PORT_DIPSETTING(    0x20, "40k 120k 120k" ) */
206 	PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Lives ) )
207 	PORT_DIPSETTING(    0x40, "1" )
208 	PORT_DIPSETTING(    0x80, "2" )
209 	PORT_DIPSETTING(    0x00, "3" )
210 	PORT_DIPSETTING(    0xc0, "5" )
211 
212 	PORT_START	/* FAKE */
213 	/* The player inputs are not memory mapped, they are handled by an I/O chip. */
214 	/* These fake input ports are read by mappy_customio_data_r() */
215 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP | IPF_4WAY )
216 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_4WAY )
217 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN | IPF_4WAY )
218 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_4WAY )
219 	PORT_BIT_IMPULSE( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1, 1 )
220 	PORT_BITX(0x20, IP_ACTIVE_HIGH, IPT_BUTTON1, 0, IP_KEY_PREVIOUS, IP_JOY_PREVIOUS )
221 	PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNUSED )
222 
223 	PORT_START	/* FAKE */
224 	PORT_BIT_IMPULSE( 0x01, IP_ACTIVE_HIGH, IPT_COIN1, 1 )
225 	PORT_BIT_IMPULSE( 0x02, IP_ACTIVE_HIGH, IPT_COIN2, 1 )
226 	PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
227 	PORT_BIT_IMPULSE( 0x10, IP_ACTIVE_HIGH, IPT_START1, 1 )
228 	PORT_BIT_IMPULSE( 0x20, IP_ACTIVE_HIGH, IPT_START2, 1 )
229 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ) )
230 	PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
231 	PORT_DIPSETTING(    0x40, DEF_STR( Cocktail ) )
232 	PORT_SERVICE( 0x80, IP_ACTIVE_HIGH )
233 
234 	PORT_START	/* FAKE */
235 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP | IPF_4WAY | IPF_COCKTAIL )
236 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_COCKTAIL )
237 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN | IPF_4WAY | IPF_COCKTAIL )
238 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_4WAY | IPF_COCKTAIL )
239 	PORT_BIT_IMPULSE( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_COCKTAIL, 1 )
240 	PORT_BITX(0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_COCKTAIL, 0, IP_KEY_PREVIOUS, IP_JOY_PREVIOUS )
241 	PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNUSED )
242 INPUT_PORTS_END
243 
244 
245 INPUT_PORTS_START( pacnpal )
246 	PORT_START	/* DSW0 */
247 	PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coin_B ) )
248 	PORT_DIPSETTING(    0x02, DEF_STR( 2C_1C ) )
249 	PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )
250 	PORT_DIPSETTING(    0x03, DEF_STR( 2C_3C ) )
251 	PORT_DIPSETTING(    0x01, DEF_STR( 1C_2C ) )
252 	PORT_DIPNAME( 0x0c, 0x00, "Rank" )
253 	PORT_DIPSETTING(    0x00, "A" )
254 	PORT_DIPSETTING(    0x04, "B" )
255 	PORT_DIPSETTING(    0x08, "C" )
256 	PORT_DIPSETTING(    0x0c, "D" )
257 	PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED )
258 
259 	PORT_START	/* DSW1 */
260 	PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coin_A ) )
261 	PORT_DIPSETTING(    0x07, DEF_STR( 3C_1C ) )
262 	PORT_DIPSETTING(    0x05, DEF_STR( 2C_1C ) )
263 	PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )
264 	PORT_DIPSETTING(    0x06, DEF_STR( 2C_3C ) )
265 	PORT_DIPSETTING(    0x01, DEF_STR( 1C_2C ) )
266 	PORT_DIPSETTING(    0x02, DEF_STR( 1C_3C ) )
267 	PORT_DIPSETTING(    0x03, DEF_STR( 1C_6C ) )
268 	PORT_DIPSETTING(    0x04, DEF_STR( 1C_7C ) )
269 	PORT_DIPNAME( 0x38, 0x18, DEF_STR( Bonus_Life ) )
270 	PORT_DIPSETTING(    0x00, "None" )
271 	PORT_DIPSETTING(    0x38, "30k" )
272 	PORT_DIPSETTING(    0x18, "20k 70k" )
273 	PORT_DIPSETTING(    0x20, "30k 70k" )
274 	PORT_DIPSETTING(    0x28, "30k 80k" )
275 	PORT_DIPSETTING(    0x30, "30k 100k" )
276 	PORT_DIPSETTING(    0x08, "20k 70k 70k" )
277 	PORT_DIPSETTING(    0x10, "30k 80k 80k" )
278 	/* TODO: bonus scores are different for 5 lives */
279 /* 	PORT_DIPNAME( 0x38, 0x18, DEF_STR( Bonus_Life ) )
280 	PORT_DIPSETTING(    0x00, "None" )
281 	PORT_DIPSETTING(    0x30, "30k" )
282 	PORT_DIPSETTING(    0x38, "40k" )
283 	PORT_DIPSETTING(    0x18, "30k 80k" )
284 	PORT_DIPSETTING(    0x20, "30k 100k" )
285 	PORT_DIPSETTING(    0x28, "40k 120k" )
286 	PORT_DIPSETTING(    0x08, "30k 80k 80k" )
287 	PORT_DIPSETTING(    0x10, "40k 100k 100k" ) */
288 	PORT_DIPNAME( 0xc0, 0x80, DEF_STR( Lives ) )
289 	PORT_DIPSETTING(    0x00, "1" )
290 	PORT_DIPSETTING(    0x40, "2" )
291 	PORT_DIPSETTING(    0x80, "3" )
292 	PORT_DIPSETTING(    0xc0, "5" )
293 
294 	PORT_START	/* FAKE */
295 	/* The player inputs are not memory mapped, they are handled by an I/O chip. */
296 	/* These fake input ports are read by mappy_customio_data_r() */
297 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP | IPF_4WAY )
298 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_4WAY )
299 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN | IPF_4WAY )
300 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_4WAY )
301 	PORT_BIT_IMPULSE( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1, 2 )
302 	PORT_BIT_IMPULSE( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_COCKTAIL, 2 )
303 	PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_UNUSED )
304 
305 	PORT_START	/* FAKE */
306 	PORT_BIT_IMPULSE( 0x01, IP_ACTIVE_HIGH, IPT_COIN1, 2 )
307 	PORT_BIT_IMPULSE( 0x02, IP_ACTIVE_HIGH, IPT_COIN2, 2 )
308 	PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
309 	PORT_BIT_IMPULSE( 0x10, IP_ACTIVE_HIGH, IPT_START1, 2 )
310 	PORT_BIT_IMPULSE( 0x20, IP_ACTIVE_HIGH, IPT_START2, 2 )
311 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ) )
312 	PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
313 	PORT_DIPSETTING(    0x40, DEF_STR( Cocktail ) )
314 	PORT_SERVICE( 0x80, IP_ACTIVE_HIGH )
315 
316 	PORT_START	/* FAKE */
317 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP | IPF_4WAY | IPF_COCKTAIL )
318 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_COCKTAIL )
319 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN | IPF_4WAY | IPF_COCKTAIL )
320 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_4WAY | IPF_COCKTAIL )
321 	PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED )
322 INPUT_PORTS_END
323 
324 
325 static struct GfxLayout charlayout =
326 {
327 	8,8,                                           /* 8*8 characters */
328 	256,                                           /* 256 characters */
329 	2,                                             /* 2 bits per pixel */
330 	{ 0, 4 },                                      /* the two bitplanes for 4 pixels are packed into one byte */
331 	{ 8*8+0, 8*8+1, 8*8+2, 8*8+3, 0, 1, 2, 3 },    /* bits are packed in groups of four */
332 	{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },    /* characters are rotated 90 degrees */
333 	16*8                                           /* every char takes 16 bytes */
334 };
335 
336 
337 static struct GfxLayout spritelayout =
338 {
339 	16,16,                                         /* 16*16 sprites */
340 	128,                                           /* 128 sprites */
341 	2,                                             /* 2 bits per pixel */
342 	{ 0, 4 },                                      /* the two bitplanes for 4 pixels are packed into one byte */
343 	{ 0, 1, 2, 3, 8*8, 8*8+1, 8*8+2, 8*8+3,
344 			16*8+0, 16*8+1, 16*8+2, 16*8+3, 24*8+0, 24*8+1, 24*8+2, 24*8+3 },
345 	{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
346 			32*8, 33*8, 34*8, 35*8, 36*8, 37*8, 38*8, 39*8 },
347 	64*8                                           /* every sprite takes 64 bytes */
348 };
349 
350 
351 static struct GfxDecodeInfo gfxdecodeinfo[] =
352 {
353 	{ REGION_GFX1, 0, &charlayout,      0, 64 },
354 	{ REGION_GFX2, 0, &spritelayout, 64*4, 64 },
355 	{ -1 } /* end of array */
356 };
357 
358 
359 static struct namco_interface namco_interface =
360 {
361 	23920,	/* sample rate (approximate value) */
362 	8,		/* number of voices */
363 	100,	/* playback volume */
364 	REGION_SOUND1	/* memory region */
365 };
366 
367 
368 
369 static struct MachineDriver machine_driver_superpac =
370 {
371 	/* basic machine hardware  */
372 	{
373 		{
374 			CPU_M6809,
375 			1100000,             /* 1.1 Mhz */
376 			readmem_cpu1,writemem_cpu1,0,0,
377 			interrupt,1
378 		},
379 		{
380 			CPU_M6809,
381 			1100000,             /* 1.1 Mhz */
382 			superpac_readmem_cpu2,superpac_writemem_cpu2,0,0,
383 			ignore_interrupt,1
384 		}
385 	},
386 	60, DEFAULT_60HZ_VBLANK_DURATION,	/* frames per second, vblank duration */
387 	100,	/* 100 CPU slices per frame - an high value to ensure proper */
388 			/* synchronization of the CPUs */
389 	superpac_init_machine,
390 
391 	/* video hardware */
392 	36*8, 28*8,	{ 0*8, 36*8-1, 0*8, 28*8-1 },
393 	gfxdecodeinfo,
394 	32,	4*(64+64),
395 	superpac_vh_convert_color_prom,
396 
397 	VIDEO_TYPE_RASTER|VIDEO_SUPPORTS_DIRTY,
398 	0,
399 	generic_vh_start,
400 	generic_vh_stop,
401 	superpac_vh_screenrefresh,
402 
403 	/* sound hardware */
404 	0,0,0,0,
405 	{
406 		{
407 			SOUND_NAMCO,
408 			&namco_interface
409 		}
410 	}
411 };
412 
413 static struct MachineDriver machine_driver_pacnpal =
414 {
415 	/* basic machine hardware  */
416 	{
417 		{
418 			CPU_M6809,
419 			1100000,             /* 1.1 Mhz */
420 			readmem_cpu1,writemem_cpu1,0,0,
421 			interrupt,1
422 		},
423 		{
424 			CPU_M6809,
425 			1100000,             /* 1.1 Mhz */
426 			pacnpal_readmem_cpu2,pacnpal_writemem_cpu2,0,0,
427 			interrupt,1
428 		}
429 	},
430 	60, DEFAULT_60HZ_VBLANK_DURATION,	/* frames per second, vblank duration */
431 	100,	/* 100 CPU slices per frame - an high value to ensure proper */
432 			/* synchronization of the CPUs */
433 	superpac_init_machine,
434 
435 	/* video hardware */
436 	36*8, 28*8,	{ 0*8, 36*8-1, 0*8, 28*8-1 },
437 	gfxdecodeinfo,
438 	32,	4*(64+64),
439 	superpac_vh_convert_color_prom,
440 
441 	VIDEO_TYPE_RASTER|VIDEO_SUPPORTS_DIRTY,
442 	0,
443 	generic_vh_start,
444 	generic_vh_stop,
445 	superpac_vh_screenrefresh,
446 
447 	/* sound hardware */
448 	0,0,0,0,
449 	{
450 		{
451 			SOUND_NAMCO,
452 			&namco_interface
453 		}
454 	}
455 };
456 
457 
458 ROM_START( superpac )
459 	ROM_REGION( 0x10000, REGION_CPU1 )	/* 64k for code */
460 	ROM_LOAD( "sp1.2",        0xc000, 0x2000, 0x4bb33d9c )
461 	ROM_LOAD( "sp1.1",        0xe000, 0x2000, 0x846fbb4a )
462 
463 	ROM_REGION( 0x10000, REGION_CPU2 )	/* 64k for the second CPU */
464 	ROM_LOAD( "spc-3.1k",     0xf000, 0x1000, 0x04445ddb )
465 
466 	ROM_REGION( 0x1000, REGION_GFX1 | REGIONFLAG_DISPOSE )
467 	ROM_LOAD( "sp1.6",        0x0000, 0x1000, 0x91c5935c )
468 
469 	ROM_REGION( 0x2000, REGION_GFX2 | REGIONFLAG_DISPOSE )
470 	ROM_LOAD( "spv-2.3f",     0x0000, 0x2000, 0x670a42f2 )
471 
472 	ROM_REGION( 0x0220, REGION_PROMS )
473 	ROM_LOAD( "superpac.4c",  0x0000, 0x0020, 0x9ce22c46 ) /* palette */
474 	ROM_LOAD( "superpac.4e",  0x0020, 0x0100, 0x1253c5c1 ) /* chars */
475 	ROM_LOAD( "superpac.3l",  0x0120, 0x0100, 0xd4d7026f ) /* sprites */
476 
477 	ROM_REGION( 0x0100, REGION_SOUND1 )	/* sound prom */
478 	ROM_LOAD( "superpac.3m",  0x0000, 0x0100, 0xad43688f )
479 ROM_END
480 
481 ROM_START( superpcm )
482 	ROM_REGION( 0x10000, REGION_CPU1 )	/* 64k for code */
483 	ROM_LOAD( "spc-2.1c",     0xc000, 0x2000, 0x1a38c30e )
484 	ROM_LOAD( "spc-1.1b",     0xe000, 0x2000, 0x730e95a9 )
485 
486 	ROM_REGION( 0x10000, REGION_CPU2 )	/* 64k for the second CPU */
487 	ROM_LOAD( "spc-3.1k",     0xf000, 0x1000, 0x04445ddb )
488 
489 	ROM_REGION( 0x1000, REGION_GFX1 | REGIONFLAG_DISPOSE )
490 	ROM_LOAD( "spv-1.3c",     0x0000, 0x1000, 0x78337e74 )
491 
492 	ROM_REGION( 0x2000, REGION_GFX2 | REGIONFLAG_DISPOSE )
493 	ROM_LOAD( "spv-2.3f",     0x0000, 0x2000, 0x670a42f2 )
494 
495 	ROM_REGION( 0x0220, REGION_PROMS )
496 	ROM_LOAD( "superpac.4c",  0x0000, 0x0020, 0x9ce22c46 ) /* palette */
497 	ROM_LOAD( "superpac.4e",  0x0020, 0x0100, 0x1253c5c1 ) /* chars */
498 	ROM_LOAD( "superpac.3l",  0x0120, 0x0100, 0xd4d7026f ) /* sprites */
499 
500 	ROM_REGION( 0x0100, REGION_SOUND1 )	/* sound prom */
501 	ROM_LOAD( "superpac.3m",  0x0000, 0x0100, 0xad43688f )
502 ROM_END
503 
504 ROM_START( pacnpal )
505 	ROM_REGION( 0x10000, REGION_CPU1 )	/* 64k for code */
506 	ROM_LOAD( "pap13b.cpu",   0xa000, 0x2000, 0xed64a565 )
507 	ROM_LOAD( "pap12b.cpu",   0xc000, 0x2000, 0x15308bcf )
508 	ROM_LOAD( "pap11b.cpu",   0xe000, 0x2000, 0x3cac401c )
509 
510 	ROM_REGION( 0x10000, REGION_CPU2 )	/* 64k for the second CPU */
511 	ROM_LOAD( "pap14.cpu",    0xf000, 0x1000, 0x330e20de )
512 
513 	ROM_REGION( 0x1000, REGION_GFX1 | REGIONFLAG_DISPOSE )
514 	ROM_LOAD( "pap16.cpu",    0x0000, 0x1000, 0xa36b96cb )
515 
516 	ROM_REGION( 0x2000, REGION_GFX2 | REGIONFLAG_DISPOSE )
517 	ROM_LOAD( "pap15.vid",    0x0000, 0x2000, 0xfb6f56e3 )
518 
519 	ROM_REGION( 0x0220, REGION_PROMS )
520 	ROM_LOAD( "papi6.vid",    0x0000, 0x0020, 0x52634b41 ) /* palette */
521 	ROM_LOAD( "papi5.vid",    0x0020, 0x0100, 0xac46203c ) /* chars */
522 	ROM_LOAD( "papi4.vid",    0x0120, 0x0100, 0x686bde84 ) /* sprites */
523 
524 	ROM_REGION( 0x0100, REGION_SOUND1 )	/* sound prom */
525 	ROM_LOAD( "papi3.cpu",    0x0000, 0x0100, 0x83c31a98 )
526 ROM_END
527 
528 ROM_START( pacnpal2 )
529 	ROM_REGION( 0x10000, REGION_CPU1 )	/* 64k for code */
530 	ROM_LOAD( "pap1_3.1d",    0xa000, 0x2000, 0xd7ec2719 )
531 	ROM_LOAD( "pap1_2.1c",    0xc000, 0x2000, 0x0245396e )
532 	ROM_LOAD( "pap1_1.1b",    0xe000, 0x2000, 0x7f046b58 )
533 
534 	ROM_REGION( 0x10000, REGION_CPU2 )	/* 64k for the second CPU */
535 	ROM_LOAD( "pap14.cpu",    0xf000, 0x1000, 0x330e20de )
536 
537 	ROM_REGION( 0x1000, REGION_GFX1 | REGIONFLAG_DISPOSE )
538 	ROM_LOAD( "pap16.cpu",    0x0000, 0x1000, 0xa36b96cb )
539 
540 	ROM_REGION( 0x2000, REGION_GFX2 | REGIONFLAG_DISPOSE )
541 	ROM_LOAD( "pap15.vid",    0x0000, 0x2000, 0xfb6f56e3 )
542 
543 	ROM_REGION( 0x0220, REGION_PROMS )
544 	ROM_LOAD( "papi6.vid",    0x0000, 0x0020, 0x52634b41 ) /* palette */
545 	ROM_LOAD( "papi5.vid",    0x0020, 0x0100, 0xac46203c ) /* chars */
546 	ROM_LOAD( "papi4.vid",    0x0120, 0x0100, 0x686bde84 ) /* sprites */
547 
548 	ROM_REGION( 0x0100, REGION_SOUND1 )	/* sound prom */
549 	ROM_LOAD( "papi3.cpu",    0x0000, 0x0100, 0x83c31a98 )
550 ROM_END
551 
552 ROM_START( pacnchmp )
553 	ROM_REGION( 0x10000, REGION_CPU1 )	/* 64k for code */
554 	ROM_LOAD( "pap3.1d",      0xa000, 0x2000, 0x20a07d3d )
555 	ROM_LOAD( "pap3.1c",      0xc000, 0x2000, 0x505bae56 )
556 	ROM_LOAD( "pap11b.cpu",   0xe000, 0x2000, 0x3cac401c )
557 
558 	ROM_REGION( 0x10000, REGION_CPU2 )	/* 64k for the second CPU */
559 	ROM_LOAD( "pap14.cpu",    0xf000, 0x1000, 0x330e20de )
560 
561 	ROM_REGION( 0x1000, REGION_GFX1 | REGIONFLAG_DISPOSE )
562 	ROM_LOAD( "pap2.3c",      0x0000, 0x1000, 0x93d15c30 )
563 
564 	ROM_REGION( 0x2000, REGION_GFX2 | REGIONFLAG_DISPOSE )
565 	ROM_LOAD( "pap2.3f",      0x0000, 0x2000, 0x39f44aa4 )
566 
567 	ROM_REGION( 0x0220, REGION_PROMS )
568 	ROM_LOAD( "papi6.vid",    0x0000, 0x0020, BADCRC( 0x52634b41 ) ) /* palette */
569 	ROM_LOAD( "papi5.vid",    0x0020, 0x0100, BADCRC( 0xac46203c ) ) /* chars */
570 	ROM_LOAD( "papi4.vid",    0x0120, 0x0100, BADCRC( 0x686bde84 ) ) /* sprites */
571 
572 	ROM_REGION( 0x0100, REGION_SOUND1 )	/* sound prom */
573 	ROM_LOAD( "papi3.cpu",    0x0000, 0x0100, 0x83c31a98 )
574 ROM_END
575 
576 
577 
578 GAME( 1982, superpac, 0,        superpac, superpac, 0, ROT90, "Namco", "Super Pac-Man" )
579 GAME( 1982, superpcm, superpac, superpac, superpac, 0, ROT90, "[Namco] (Bally Midway license)", "Super Pac-Man (Midway)" )
580 GAME( 1983, pacnpal,  0,        pacnpal,  pacnpal,  0, ROT90, "Namco", "Pac & Pal" )
581 GAME( 1983, pacnpal2, pacnpal,  pacnpal,  pacnpal,  0, ROT90, "Namco", "Pac & Pal (older)" )
582 GAMEX(1983, pacnchmp, pacnpal,  pacnpal,  pacnpal,  0, ROT90, "Namco", "Pac-Man & Chomp Chomp", GAME_IMPERFECT_COLORS )
583