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