src/mame/machine/vsnes.c
| r7882 | r7883 | |
| 12 | 12 | #include "includes/vsnes.h" |
| 13 | 13 | |
| 14 | 14 | /* Globals */ |
| 15 | | static int vsnes_gun_controller; |
| 16 | 15 | static int vsnes_do_vrom_bank; |
| 17 | 16 | |
| 18 | 17 | /* Locals */ |
| 19 | 18 | static int input_latch[4]; |
| 20 | | static const UINT8 *remapped_colortable; |
| 21 | 19 | |
| 22 | 20 | static int sound_fix=0; |
| 23 | 21 | static UINT8 last_bank; |
| r7882 | r7883 | |
| 43 | 41 | |
| 44 | 42 | /************************************* |
| 45 | 43 | * |
| 46 | | * Color Mapping |
| 47 | | * |
| 48 | | *************************************/ |
| 49 | | |
| 50 | | /* RP2C04-001 */ |
| 51 | | /* check 0x08 */ |
| 52 | | static const UINT8 rp2c04001_colortable[] = |
| 53 | | { |
| 54 | | 0x35, 0xff, 0x16, 0x22, 0x1c, 0xff, 0xff, 0x15, /* 0x00 - 0x07 */ |
| 55 | | 0x20, 0x00, 0x27, 0x05, 0x04, 0x27, 0x08, 0x30, /* 0x08 - 0x0f */ |
| 56 | | 0x21, 0xff, 0xff, 0x29, 0x3c, 0xff, 0x36, 0x12, /* 0x10 - 0x17 */ |
| 57 | | 0xff, 0x2b, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, /* 0x18 - 0x1f */ |
| 58 | | 0xff, 0x31, 0xff, 0x2a, 0x2c, 0x0c, 0xff, 0xff, /* 0x20 - 0x27 */ |
| 59 | | 0xff, 0x07, 0x34, 0x06, 0x13, 0xff, 0x26, 0x0f, /* 0x28 - 0x2f */ |
| 60 | | 0xff, 0x19, 0x10, 0x0a, 0xff, 0xff, 0xff, 0x17, /* 0x30 - 0x37 */ |
| 61 | | 0xff, 0x11, 0x09, 0xff, 0xff, 0x25, 0x18, 0xff /* 0x38 - 0x3f */ |
| 62 | | }; |
| 63 | | |
| 64 | | /* RP2C04-002 */ |
| 65 | | /* 0x04, 0x24 */ |
| 66 | | static const UINT8 rp2c04002_colortable[] = |
| 67 | | { |
| 68 | | 0xff, 0x27, 0x18, 0xff, 0x3a, 0x25, 0x2b, 0x31, /* 0x00 - 0x07 */ |
| 69 | | 0x15, 0x13, 0x38, 0x34, 0x20, 0x23, 0xff, 0x0b, /* 0x08 - 0x0f */ |
| 70 | | 0xff, 0x21, 0x06, 0xff, 0x1b, 0x29, 0xff, 0x22, /* 0x10 - 0x17 */ |
| 71 | | 0xff, 0x24, 0xff, 0xff, 0xff, 0x08, 0xff, 0x03, /* 0x18 - 0x1f */ |
| 72 | | 0xff, 0x36, 0x26, 0x33, 0x11, 0xff, 0x10, 0x02, /* 0x20 - 0x27 */ |
| 73 | | 0x14, 0xff, 0x10, 0x09, 0x12, 0x0f, 0xff, 0x30, /* 0x28 - 0x2f */ |
| 74 | | 0xff, 0xff, 0x2a, 0x17, 0x0c, 0x11, 0x15, 0x19, /* 0x30 - 0x37 */ |
| 75 | | 0xff, 0x2c, 0x07, 0x37, 0xff, 0x05, 0x3a, 0xff /* 0x38 - 0x3f */ |
| 76 | | }; |
| 77 | | |
| 78 | | /* RP2C04-003 */ |
| 79 | | /* check 0x0f, 0x2e, 0x34 */ |
| 80 | | static const UINT8 rp2c04003_colortable[] = |
| 81 | | { |
| 82 | | 0xff, 0xff, 0xff, 0x10, 0x1a, 0x30, 0x31, 0x09, /* 0x00 - 0x07 */ |
| 83 | | 0x01, 0x0f, 0x36, 0x08, 0x15, 0xff, 0xff, 0x30, /* 0x08 - 0x0f */ |
| 84 | | 0x22, 0x1c, 0xff, 0x12, 0x19, 0x18, 0x17, 0x2a, /* 0x10 - 0x17 */ |
| 85 | | 0x00, 0xff, 0xff, 0x02, 0x06, 0x07, 0xff, 0x35, /* 0x18 - 0x1f */ |
| 86 | | 0x23, 0xff, 0x8b, 0xf7, 0xff, 0x27, 0x26, 0x20, /* 0x20 - 0x27 */ |
| 87 | | 0x29, 0x03, 0x21, 0x24, 0x11, 0xff, 0xff, 0xff, /* 0x28 - 0x2f */ |
| 88 | | 0x2c, 0xff, 0xff, 0xff, 0x07, 0xf9, 0x28, 0xff, /* 0x30 - 0x37 */ |
| 89 | | 0x0a, 0xff, 0x32, 0x37, 0x13, 0x3a, 0xff, 0x0b /* 0x38 - 0x3f */ |
| 90 | | }; |
| 91 | | |
| 92 | | /* RP2C05-004 */ |
| 93 | | /* check 0x03 0x1d, 0x38, 0x3b*/ |
| 94 | | static const UINT8 rp2c05004_colortable[] = |
| 95 | | { |
| 96 | | 0x18, 0xff, 0x1c, 0x89, 0xff, 0xff, 0x01, 0x17, /* 0x00 - 0x07 */ |
| 97 | | 0x10, 0x0f, 0x2a, 0xff, 0x36, 0x37, 0x1a, 0xff, /* 0x08 - 0x0f */ |
| 98 | | 0x25, 0xff, 0x12, 0xff, 0x0f, 0xff, 0xff, 0x26, /* 0x10 - 0x17 */ |
| 99 | | 0xff, 0xff, 0x22, 0xff, 0xff, 0x0f, 0x3a, 0x21, /* 0x18 - 0x1f */ |
| 100 | | 0x05, 0x0a, 0x07, 0xc2, 0x13, 0xff, 0x00, 0x15, /* 0x20 - 0x27 */ |
| 101 | | 0x0c, 0xff, 0x11, 0xff, 0xff, 0x38, 0xff, 0xff, /* 0x28 - 0x2f */ |
| 102 | | 0xff, 0xff, 0x08, 0x45, 0xff, 0xff, 0x30, 0x3c, /* 0x30 - 0x37 */ |
| 103 | | 0x0f, 0x27, 0xff, 0x60, 0x29, 0xff, 0x30, 0x09 /* 0x38 - 0x3f */ |
| 104 | | }; |
| 105 | | |
| 106 | | |
| 107 | | |
| 108 | | /* remap callback */ |
| 109 | | static int remap_colors( running_device *device, int addr, int data ) |
| 110 | | { |
| 111 | | /* this is the protection. color codes are shuffled around */ |
| 112 | | /* the ones with value 0xff are unknown */ |
| 113 | | |
| 114 | | if (addr >= 0x3f00) |
| 115 | | { |
| 116 | | int newdata = remapped_colortable[data & 0x3f]; |
| 117 | | |
| 118 | | if (newdata != 0xff) |
| 119 | | data = newdata; |
| 120 | | |
| 121 | | #ifdef MAME_DEBUG |
| 122 | | else |
| 123 | | popmessage("Unmatched color %02x, at address %04x", data & 0x3f, addr); |
| 124 | | #endif |
| 125 | | } |
| 126 | | |
| 127 | | return data; |
| 128 | | } |
| 129 | | |
| 130 | | /************************************* |
| 131 | | * |
| 132 | 44 | * Input Ports |
| 133 | 45 | * |
| 134 | 46 | *************************************/ |
| r7882 | r7883 | |
| 239 | 151 | |
| 240 | 152 | MACHINE_RESET( vsnes ) |
| 241 | 153 | { |
| 242 | | running_device *ppu = devtag_get_device(machine, "ppu1"); |
| 243 | 154 | |
| 244 | 155 | last_bank = 0xff; |
| 245 | 156 | sound_fix = 0; |
| 246 | 157 | input_latch[0] = input_latch[1] = 0; |
| 247 | 158 | input_latch[2] = input_latch[3] = 0; |
| 248 | 159 | |
| 249 | | /* if we need to remap, install the callback */ |
| 250 | | if (remapped_colortable) |
| 251 | | ppu2c0x_set_vidaccess_callback(ppu, remap_colors); |
| 252 | 160 | } |
| 253 | 161 | |
| 254 | 162 | /************************************* |
| r7882 | r7883 | |
| 259 | 167 | |
| 260 | 168 | MACHINE_RESET( vsdual ) |
| 261 | 169 | { |
| 262 | | running_device *ppu1 = devtag_get_device(machine, "ppu1"); |
| 263 | | running_device *ppu2 = devtag_get_device(machine, "ppu2"); |
| 264 | 170 | |
| 265 | 171 | input_latch[0] = input_latch[1] = 0; |
| 266 | 172 | input_latch[2] = input_latch[3] = 0; |
| 267 | 173 | |
| 268 | | /* if we need to remap, install the callback */ |
| 269 | | if (remapped_colortable) |
| 270 | | { |
| 271 | | ppu2c0x_set_vidaccess_callback(ppu1, remap_colors); |
| 272 | | ppu2c0x_set_vidaccess_callback(ppu2, remap_colors); |
| 273 | | } |
| 274 | 174 | } |
| 275 | 175 | |
| 276 | 176 | /************************************* |
| r7882 | r7883 | |
| 427 | 327 | } |
| 428 | 328 | } |
| 429 | 329 | |
| 430 | | /************************************* |
| 431 | | * |
| 432 | | * Common init for all games |
| 433 | | * |
| 434 | | *************************************/ |
| 435 | | |
| 436 | | static void init_vsnes(running_machine *machine) |
| 437 | | { |
| 438 | | /* set the controller to default */ |
| 439 | | vsnes_gun_controller = 0; |
| 440 | | |
| 441 | | /* no color remapping */ |
| 442 | | remapped_colortable = 0; |
| 443 | | } |
| 444 | | |
| 445 | 330 | /********************************************************************************** |
| 446 | 331 | * |
| 447 | 332 | * Game and Board-specific initialization |
| 448 | 333 | * |
| 449 | 334 | **********************************************************************************/ |
| 450 | 335 | |
| 336 | /**********************************************************************************/ |
| 337 | /* Most games: VROM Banking in controller 0 write */ |
| 338 | |
| 451 | 339 | static WRITE8_HANDLER( vsnormal_vrom_banking ) |
| 452 | 340 | { |
| 453 | 341 | /* switch vrom */ |
| r7882 | r7883 | |
| 459 | 347 | vsnes_in0_w(space, offset, data); |
| 460 | 348 | } |
| 461 | 349 | |
| 462 | | /* Most games switch VROM Banks in controller 0 write */ |
| 463 | | /* they dont do any other trickery */ |
| 464 | 350 | DRIVER_INIT( vsnormal ) |
| 465 | 351 | { |
| 466 | 352 | /* vrom switching is enabled with bit 2 of $4016 */ |
| 467 | 353 | memory_install_write8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x4016, 0x4016, 0, 0, vsnormal_vrom_banking); |
| 468 | 354 | } |
| 469 | 355 | |
| 470 | | static WRITE8_HANDLER( ppuRC2C05_protection ) |
| 471 | | { |
| 472 | | running_device *ppu1 = devtag_get_device(space->machine, "ppu1"); |
| 473 | | |
| 474 | | /* This PPU has registers mapped at $2000 and $2001 inverted */ |
| 475 | | /* and no remapped color */ |
| 476 | | if (offset == 0) |
| 477 | | { |
| 478 | | ppu2c0x_w(ppu1, 1, data); |
| 479 | | return; |
| 480 | | } |
| 481 | | |
| 482 | | ppu2c0x_w(ppu1, 0, data); |
| 483 | | } |
| 484 | | |
| 485 | 356 | /**********************************************************************************/ |
| 486 | | /* Super Mario Bros. Extra ram at $6000 (NV?) and remapped colors */ |
| 357 | /* Gun games: VROM Banking in controller 0 write */ |
| 487 | 358 | |
| 488 | | DRIVER_INIT( suprmrio ) |
| 489 | | { |
| 490 | | /* common init */ |
| 491 | | init_vsnes(machine); |
| 492 | | |
| 493 | | /* normal banking */ |
| 494 | | DRIVER_INIT_CALL(vsnormal); |
| 495 | | |
| 496 | | /* extra ram at $6000 is enabled with bit 1 of $4016 */ |
| 497 | | memory_install_ram(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x6000, 0x7fff, 0, 0, NULL); |
| 498 | | |
| 499 | | /* now override the vidaccess callback */ |
| 500 | | /* we need to remap color tables */ |
| 501 | | /* this *is* the VS games protection, I guess */ |
| 502 | | remapped_colortable = rp2c05004_colortable; |
| 503 | | } |
| 504 | | |
| 505 | | /**********************************************************************************/ |
| 506 | | /* Gun Games - VROM Banking in controller 0 write */ |
| 507 | | |
| 508 | 359 | static WRITE8_HANDLER( gun_in0_w ) |
| 509 | 360 | { |
| 510 | 361 | running_device *ppu1 = devtag_get_device(space->machine, "ppu1"); |
| r7882 | r7883 | |
| 524 | 375 | input_latch[0] = input_port_read(space->machine, "IN0"); |
| 525 | 376 | |
| 526 | 377 | /* do the gun thing */ |
| 527 | | if (vsnes_gun_controller) |
| 528 | | { |
| 529 | | int x = input_port_read(space->machine, "GUNX"); |
| 530 | | int y = input_port_read(space->machine, "GUNY"); |
| 531 | | UINT32 pix, color_base; |
| 378 | int x = input_port_read(space->machine, "GUNX"); |
| 379 | int y = input_port_read(space->machine, "GUNY"); |
| 380 | UINT32 pix, color_base; |
| 532 | 381 | |
| 533 | | /* get the pixel at the gun position */ |
| 534 | | pix = ppu2c0x_get_pixel(ppu1, x, y); |
| 382 | /* get the pixel at the gun position */ |
| 383 | pix = ppu2c0x_get_pixel(ppu1, x, y); |
| 535 | 384 | |
| 536 | | /* get the color base from the ppu */ |
| 537 | | color_base = ppu2c0x_get_colorbase(ppu1); |
| 385 | /* get the color base from the ppu */ |
| 386 | color_base = ppu2c0x_get_colorbase(ppu1); |
| 538 | 387 | |
| 539 | | /* look at the screen and see if the cursor is over a bright pixel */ |
| 540 | | if ((pix == color_base + 0x20 ) || (pix == color_base + 0x30) || |
| 541 | | (pix == color_base + 0x33 ) || (pix == color_base + 0x34)) |
| 542 | | { |
| 543 | | input_latch[0] |= 0x40; |
| 544 | | } |
| 388 | /* look at the screen and see if the cursor is over a bright pixel */ |
| 389 | if ((pix == color_base + 0x20 ) || (pix == color_base + 0x30) || |
| 390 | (pix == color_base + 0x33 ) || (pix == color_base + 0x34)) |
| 391 | { |
| 392 | input_latch[0] |= 0x40; |
| 545 | 393 | } |
| 546 | 394 | |
| 547 | 395 | input_latch[1] = input_port_read(space->machine, "IN1"); |
| r7882 | r7883 | |
| 556 | 404 | zapstore = data; |
| 557 | 405 | } |
| 558 | 406 | |
| 559 | | DRIVER_INIT( duckhunt ) |
| 407 | DRIVER_INIT( vsgun ) |
| 560 | 408 | { |
| 561 | | /* vrom switching is enabled with bit 2 of $4016 */ |
| 409 | /* VROM switching is enabled with bit 2 of $4016 */ |
| 562 | 410 | memory_install_readwrite8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x4016, 0x4016, 0, 0, gun_in0_r, gun_in0_w); |
| 563 | | |
| 564 | | /* common init */ |
| 565 | | init_vsnes(machine); |
| 566 | | |
| 567 | | /* enable gun controller */ |
| 568 | | vsnes_gun_controller = 1; |
| 569 | 411 | vsnes_do_vrom_bank = 1; |
| 570 | 412 | } |
| 571 | 413 | |
| 572 | 414 | /**********************************************************************************/ |
| 573 | | /* The Goonies, VS Gradius: ROMs bankings at $8000-$ffff */ |
| 415 | /* Konami games: ROMs bankings at $8000-$ffff */ |
| 574 | 416 | |
| 575 | | static WRITE8_HANDLER( goonies_rom_banking ) |
| 417 | static WRITE8_HANDLER( vskonami_rom_banking ) |
| 576 | 418 | { |
| 577 | 419 | int reg = (offset >> 12) & 0x07; |
| 578 | 420 | int bankoffset = (data & 7) * 0x2000 + 0x10000; |
| r7882 | r7883 | |
| 598 | 440 | } |
| 599 | 441 | } |
| 600 | 442 | |
| 601 | | DRIVER_INIT( goonies ) |
| 443 | DRIVER_INIT( vskonami ) |
| 602 | 444 | { |
| 603 | 445 | /* We do manual banking, in case the code falls through */ |
| 604 | 446 | /* Copy the initial banks */ |
| r7882 | r7883 | |
| 606 | 448 | memcpy(&prg[0x08000], &prg[0x18000], 0x8000); |
| 607 | 449 | |
| 608 | 450 | /* banking is done with writes to the $8000-$ffff area */ |
| 609 | | memory_install_write8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x8000, 0xffff, 0, 0, goonies_rom_banking); |
| 610 | | |
| 611 | | /* common init */ |
| 612 | | init_vsnes(machine); |
| 613 | | |
| 614 | | /* now override the vidaccess callback */ |
| 615 | | remapped_colortable = rp2c04003_colortable; |
| 451 | memory_install_write8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x8000, 0xffff, 0, 0, vskonami_rom_banking); |
| 616 | 452 | } |
| 617 | 453 | |
| 618 | | DRIVER_INIT( vsgradus ) |
| 619 | | { |
| 620 | | /* We do manual banking, in case the code falls through */ |
| 621 | | /* Copy the initial banks */ |
| 622 | | UINT8 *prg = memory_region(machine, "maincpu"); |
| 623 | | memcpy(&prg[0x08000], &prg[0x18000], 0x8000); |
| 624 | | |
| 625 | | /* banking is done with writes to the $8000-$ffff area */ |
| 626 | | memory_install_write8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x8000, 0xffff, 0, 0, goonies_rom_banking); |
| 627 | | |
| 628 | | /* common init */ |
| 629 | | init_vsnes(machine); |
| 630 | | |
| 631 | | /* now override the vidaccess callback */ |
| 632 | | remapped_colortable = rp2c04001_colortable; |
| 633 | | } |
| 634 | | |
| 635 | | DRIVER_INIT( vspinbal ) |
| 636 | | { |
| 637 | | /* common init */ |
| 638 | | init_vsnes(machine); |
| 639 | | |
| 640 | | /* normal banking */ |
| 641 | | DRIVER_INIT_CALL(vsnormal); |
| 642 | | |
| 643 | | /* now override the vidaccess callback */ |
| 644 | | remapped_colortable = rp2c04001_colortable; |
| 645 | | |
| 646 | | } |
| 647 | | |
| 648 | | DRIVER_INIT( hogalley ) |
| 649 | | { |
| 650 | | |
| 651 | | /* vrom switching is enabled with bit 2 of $4016 */ |
| 652 | | memory_install_readwrite8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x4016, 0x4016, 0, 0, gun_in0_r, gun_in0_w); |
| 653 | | |
| 654 | | /* common init */ |
| 655 | | init_vsnes(machine); |
| 656 | | |
| 657 | | /* enable gun controller */ |
| 658 | | vsnes_gun_controller = 1; |
| 659 | | vsnes_do_vrom_bank = 1; |
| 660 | | |
| 661 | | /* now override the vidaccess callback */ |
| 662 | | remapped_colortable = rp2c04001_colortable; |
| 663 | | } |
| 664 | | |
| 665 | 454 | /***********************************************************************/ |
| 666 | 455 | /* Vs. Gumshoe */ |
| 667 | 456 | |
| 668 | | static READ8_HANDLER( vsgshoe_security_r ) |
| 669 | | { |
| 670 | | /* low part must be 0x1c */ |
| 671 | | return ppu2c0x_r(devtag_get_device(space->machine, "ppu1"), 2) | 0x1c; |
| 672 | | } |
| 673 | | |
| 674 | 457 | static WRITE8_HANDLER( vsgshoe_gun_in0_w ) |
| 675 | 458 | { |
| 676 | 459 | static int old_bank = 0; |
| r7882 | r7883 | |
| 692 | 475 | UINT8 *prg = memory_region(machine, "maincpu"); |
| 693 | 476 | memcpy (&prg[0x08000], &prg[0x12000], 0x2000); |
| 694 | 477 | |
| 695 | | /* Protection */ |
| 696 | | memory_install_read8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x2002, 0x2002, 0, 0, vsgshoe_security_r); |
| 697 | | memory_install_write8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x2000, 0x2001, 0, 0, ppuRC2C05_protection); |
| 698 | | |
| 699 | 478 | /* vrom switching is enabled with bit 2 of $4016 */ |
| 700 | 479 | memory_install_readwrite8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x4016, 0x4016, 0, 0, gun_in0_r, vsgshoe_gun_in0_w); |
| 701 | 480 | |
| 702 | | /* common init */ |
| 703 | | init_vsnes(machine); |
| 704 | | |
| 705 | | vsnes_gun_controller = 1; |
| 706 | 481 | vsnes_do_vrom_bank = 1; |
| 707 | 482 | } |
| 708 | 483 | |
| r7882 | r7883 | |
| 837 | 612 | |
| 838 | 613 | drmario_shiftreg = 0; |
| 839 | 614 | drmario_shiftcount = 0; |
| 840 | | |
| 841 | | /* common init */ |
| 842 | | init_vsnes(machine); |
| 843 | | |
| 844 | | /* now override the vidaccess callback */ |
| 845 | | remapped_colortable = rp2c04003_colortable; |
| 846 | 615 | } |
| 847 | 616 | |
| 848 | | /***********************************************************************/ |
| 849 | | /* Excite Bike */ |
| 850 | | |
| 851 | | DRIVER_INIT( excitebk ) |
| 852 | | { |
| 853 | | /* common init */ |
| 854 | | init_vsnes(machine); |
| 855 | | |
| 856 | | /* normal banking */ |
| 857 | | DRIVER_INIT_CALL(vsnormal); |
| 858 | | |
| 859 | | /* now override the vidaccess callback */ |
| 860 | | /* we need to remap color tables */ |
| 861 | | /* this *is* the VS games protection, I guess */ |
| 862 | | remapped_colortable = rp2c04003_colortable; |
| 863 | | } |
| 864 | | |
| 865 | | DRIVER_INIT( excitbkj ) |
| 866 | | { |
| 867 | | /* common init */ |
| 868 | | init_vsnes(machine); |
| 869 | | |
| 870 | | /* normal banking */ |
| 871 | | DRIVER_INIT_CALL(vsnormal); |
| 872 | | |
| 873 | | /* now override the vidaccess callback */ |
| 874 | | /* we need to remap color tables */ |
| 875 | | /* this *is* the VS games protection, I guess */ |
| 876 | | remapped_colortable = rp2c05004_colortable; |
| 877 | | } |
| 878 | | |
| 879 | 617 | /**********************************************************************************/ |
| 880 | | /* Mach Rider */ |
| 618 | /* Games with VRAM instead of graphics ROMs: ROMs bankings at $8000-$ffff */ |
| 881 | 619 | |
| 882 | | DRIVER_INIT( machridr ) |
| 620 | static WRITE8_HANDLER( vsvram_rom_banking ) |
| 883 | 621 | { |
| 884 | | |
| 885 | | /* common init */ |
| 886 | | init_vsnes(machine); |
| 887 | | |
| 888 | | /* normal banking */ |
| 889 | | DRIVER_INIT_CALL(vsnormal); |
| 890 | | |
| 891 | | /* now override the vidaccess callback */ |
| 892 | | /* we need to remap color tables */ |
| 893 | | /* this *is* the VS games protection, I guess */ |
| 894 | | remapped_colortable = rp2c04002_colortable; |
| 895 | | } |
| 896 | | |
| 897 | | /**********************************************************************************/ |
| 898 | | /* VS Slalom */ |
| 899 | | |
| 900 | | DRIVER_INIT( vsslalom ) |
| 901 | | { |
| 902 | | /* common init */ |
| 903 | | init_vsnes(machine); |
| 904 | | |
| 905 | | /* now override the vidaccess callback */ |
| 906 | | /* we need to remap color tables */ |
| 907 | | /* this *is* the VS games protection, I guess */ |
| 908 | | remapped_colortable = rp2c04002_colortable; |
| 909 | | } |
| 910 | | |
| 911 | | /**********************************************************************************/ |
| 912 | | /* Castelvania: ROMs bankings at $8000-$ffff */ |
| 913 | | |
| 914 | | static WRITE8_HANDLER( castlevania_rom_banking ) |
| 915 | | { |
| 916 | 622 | int rombank = 0x10000 + (data & 7) * 0x4000; |
| 917 | 623 | UINT8 *prg = memory_region(space->machine, "maincpu"); |
| 918 | 624 | |
| 919 | 625 | memcpy(&prg[0x08000], &prg[rombank], 0x4000); |
| 920 | 626 | } |
| 921 | 627 | |
| 922 | | DRIVER_INIT( cstlevna ) |
| 628 | DRIVER_INIT( vsvram ) |
| 923 | 629 | { |
| 924 | 630 | /* when starting the game, the 1st 16k and the last 16k are loaded into the 2 banks */ |
| 925 | 631 | UINT8 *prg = memory_region(machine, "maincpu"); |
| 926 | 632 | memcpy(&prg[0x08000], &prg[0x28000], 0x8000); |
| 927 | 633 | |
| 928 | 634 | /* banking is done with writes to the $8000-$ffff area */ |
| 929 | | memory_install_write8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x8000, 0xffff, 0, 0, castlevania_rom_banking); |
| 635 | memory_install_write8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x8000, 0xffff, 0, 0, vsvram_rom_banking); |
| 930 | 636 | |
| 931 | | /* common init */ |
| 932 | | init_vsnes(machine); |
| 933 | | |
| 934 | | /* now override the vidaccess callback */ |
| 935 | | /* we need to remap color tables */ |
| 936 | | /* this *is* the VS games protection, I guess */ |
| 937 | | remapped_colortable = rp2c04002_colortable; |
| 938 | | |
| 939 | 637 | /* allocate vram */ |
| 940 | 638 | vram = auto_alloc_array(machine, UINT8, 0x2000); |
| 941 | 639 | } |
| 942 | 640 | |
| 943 | 641 | /**********************************************************************************/ |
| 944 | | /* VS Top Gun: ROMs bankings at $8000-$ffff, plus some protection */ |
| 945 | 642 | |
| 946 | | static READ8_HANDLER( topgun_security_r ) |
| 947 | | { |
| 948 | | /* low part must be 0x1b */ |
| 949 | | return ppu2c0x_r(devtag_get_device(space->machine, "ppu1"), 2) | 0x1b; |
| 950 | | } |
| 951 | | |
| 952 | | DRIVER_INIT( topgun ) |
| 953 | | { |
| 954 | | /* when starting the game, the 1st 16k and the last 16k are loaded into the 2 banks */ |
| 955 | | UINT8 *prg = memory_region(machine, "maincpu"); |
| 956 | | memcpy(&prg[0x08000], &prg[0x28000], 0x8000); |
| 957 | | |
| 958 | | /* banking is done with writes to the $8000-$ffff area */ |
| 959 | | memory_install_write8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x8000, 0xffff, 0, 0, castlevania_rom_banking); |
| 960 | | |
| 961 | | /* tap on the PPU, due to some tricky protection */ |
| 962 | | memory_install_read8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x2002, 0x2002, 0, 0, topgun_security_r); |
| 963 | | memory_install_write8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x2000, 0x2001, 0, 0, ppuRC2C05_protection); |
| 964 | | |
| 965 | | /* common init */ |
| 966 | | init_vsnes(machine); |
| 967 | | |
| 968 | | /* allocate vram */ |
| 969 | | vram = auto_alloc_array(machine, UINT8, 0x2000); |
| 970 | | |
| 971 | | } |
| 972 | | |
| 973 | | /**********************************************************************************/ |
| 974 | | |
| 975 | 643 | static int MMC3_cmd; |
| 976 | 644 | static int MMC3_prg_bank[4]; |
| 977 | 645 | static int MMC3_chr_bank[6]; |
| r7882 | r7883 | |
| 1132 | 800 | |
| 1133 | 801 | /* extra ram at $6000-$7fff */ |
| 1134 | 802 | memory_install_ram(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x6000, 0x7fff, 0, 0, NULL); |
| 1135 | | |
| 1136 | | /* common init */ |
| 1137 | | init_vsnes(machine); |
| 1138 | 803 | } |
| 1139 | 804 | |
| 1140 | 805 | /* Vs. RBI Baseball */ |
| r7882 | r7883 | |
| 1173 | 838 | |
| 1174 | 839 | /* RBI Base ball hack */ |
| 1175 | 840 | memory_install_read8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x5e00, 0x5e01, 0, 0, rbi_hack_r) ; |
| 1176 | | |
| 1177 | | remapped_colortable = rp2c04003_colortable; |
| 1178 | 841 | } |
| 1179 | 842 | |
| 1180 | 843 | /* Vs. Super Xevious */ |
| r7882 | r7883 | |
| 1226 | 889 | memory_install_read8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x5678, 0x5678, 0, 0, supxevs_read_prot_2_r); |
| 1227 | 890 | memory_install_read8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x578f, 0x578f, 0, 0, supxevs_read_prot_3_r); |
| 1228 | 891 | memory_install_read8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x5567, 0x5567, 0, 0, supxevs_read_prot_4_r); |
| 1229 | | |
| 1230 | | remapped_colortable = rp2c04001_colortable; |
| 1231 | 892 | } |
| 1232 | 893 | |
| 1233 | 894 | /* Vs. TKO Boxing */ |
| r7882 | r7883 | |
| 1258 | 919 | |
| 1259 | 920 | /* security device at $5e00-$5e01 */ |
| 1260 | 921 | memory_install_read8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x5e00, 0x5e01, 0, 0, tko_security_r); |
| 1261 | | |
| 1262 | | /* now override the vidaccess callback */ |
| 1263 | | /* we need to remap color tables */ |
| 1264 | | /* this *is* the VS games protection, I guess */ |
| 1265 | | remapped_colortable = rp2c04003_colortable; |
| 1266 | 922 | } |
| 1267 | 923 | |
| 1268 | 924 | /* Vs. Freedom Force */ |
| r7882 | r7883 | |
| 1273 | 929 | |
| 1274 | 930 | memory_install_readwrite8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x4016, 0x4016, 0, 0, gun_in0_r, gun_in0_w); |
| 1275 | 931 | |
| 1276 | | vsnes_gun_controller = 1; |
| 1277 | 932 | vsnes_do_vrom_bank = 0; |
| 1278 | | |
| 1279 | | remapped_colortable = rp2c04001_colortable; |
| 1280 | 933 | } |
| 1281 | 934 | |
| 1282 | 935 | /**********************************************************************************/ |
| r7882 | r7883 | |
| 1325 | 978 | memcpy(&prg[0x0c000], &prg[0x2c000], 0x4000); |
| 1326 | 979 | |
| 1327 | 980 | memory_install_write8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x8000, 0xffff, 0, 0, mapper68_rom_banking); |
| 1328 | | |
| 1329 | | init_vsnes(machine); |
| 1330 | | |
| 1331 | | remapped_colortable = rp2c04001_colortable; |
| 1332 | | |
| 1333 | 981 | } |
| 1334 | 982 | |
| 1335 | 983 | /**********************************************************************************/ |
| r7882 | r7883 | |
| 1358 | 1006 | |
| 1359 | 1007 | ret = 0; |
| 1360 | 1008 | |
| 1361 | | /* common init */ |
| 1362 | | init_vsnes(machine); |
| 1363 | | |
| 1364 | 1009 | /* normal banking */ |
| 1365 | 1010 | DRIVER_INIT_CALL(vsnormal); |
| 1366 | | |
| 1367 | | remapped_colortable = rp2c04002_colortable; |
| 1368 | 1011 | } |
| 1369 | 1012 | |
| 1370 | 1013 | /**********************************************************************************/ |
| 1371 | | /* Vs. Ninja Jajamaru Kun */ |
| 1014 | /* VS Dualsystem */ |
| 1372 | 1015 | |
| 1373 | | static READ8_HANDLER( jajamaru_security_r ) |
| 1016 | static WRITE8_HANDLER( vsdual_vrom_banking ) |
| 1374 | 1017 | { |
| 1375 | | /* low part must be 0x40 */ |
| 1376 | | return ppu2c0x_r(devtag_get_device(space->machine, "ppu1"), 2) | 0x40; |
| 1377 | | } |
| 1378 | | |
| 1379 | | DRIVER_INIT( jajamaru ) |
| 1380 | | { |
| 1381 | | // It executes an illegal opcode: 0x04 at 0x9e67 and 0x9e1c |
| 1382 | | // At 0x9e5d and 0x9e12 there is a conditional jump to it |
| 1383 | | // Maybe it should be a DOP (double NOP) |
| 1384 | | |
| 1385 | | /* Protection */ |
| 1386 | | memory_install_read8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x2002, 0x2002, 0, 0, jajamaru_security_r); |
| 1387 | | memory_install_write8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x2000, 0x2001, 0, 0, ppuRC2C05_protection); |
| 1388 | | |
| 1389 | | /* common init */ |
| 1390 | | init_vsnes(machine); |
| 1391 | | |
| 1392 | | /* normal banking */ |
| 1393 | | DRIVER_INIT_CALL(vsnormal); |
| 1394 | | } |
| 1395 | | |
| 1396 | | /***********************************************************************/ |
| 1397 | | /* Vs. Mighty Bomb Jack */ |
| 1398 | | |
| 1399 | | static READ8_HANDLER( mightybj_security_r ) |
| 1400 | | { |
| 1401 | | /* low part must be 0x3d */ |
| 1402 | | return ppu2c0x_r(devtag_get_device(space->machine, "ppu1"), 2) | 0x3d; |
| 1403 | | } |
| 1404 | | |
| 1405 | | DRIVER_INIT( mightybj ) |
| 1406 | | { |
| 1407 | | /* Protection */ |
| 1408 | | memory_install_read8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x2002, 0x2002, 0, 0, mightybj_security_r); |
| 1409 | | memory_install_write8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x2000, 0x2001, 0, 0, ppuRC2C05_protection); |
| 1410 | | |
| 1411 | | /* common init */ |
| 1412 | | init_vsnes(machine); |
| 1413 | | } |
| 1414 | | |
| 1415 | | /**********************************************************************************/ |
| 1416 | | /* VS Tennis */ |
| 1417 | | |
| 1418 | | static WRITE8_HANDLER( vstennis_vrom_banking ) |
| 1419 | | { |
| 1420 | 1018 | running_device *other_cpu = (space->cpu == devtag_get_device(space->machine, "maincpu")) ? devtag_get_device(space->machine, "sub") : devtag_get_device(space->machine, "maincpu"); |
| 1421 | 1019 | |
| 1422 | 1020 | /* switch vrom */ |
| r7882 | r7883 | |
| 1432 | 1030 | vsnes_in0_1_w(space, offset, data); |
| 1433 | 1031 | } |
| 1434 | 1032 | |
| 1435 | | DRIVER_INIT( vstennis ) |
| 1033 | DRIVER_INIT( vsdual ) |
| 1436 | 1034 | { |
| 1437 | 1035 | UINT8 *prg = memory_region(machine, "maincpu"); |
| 1438 | 1036 | |
| 1439 | 1037 | /* vrom switching is enabled with bit 2 of $4016 */ |
| 1440 | | memory_install_write8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x4016, 0x4016, 0, 0, vstennis_vrom_banking); |
| 1441 | | memory_install_write8_handler(cputag_get_address_space(machine, "sub", ADDRESS_SPACE_PROGRAM), 0x4016, 0x4016, 0, 0, vstennis_vrom_banking); |
| 1038 | memory_install_write8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x4016, 0x4016, 0, 0, vsdual_vrom_banking); |
| 1039 | memory_install_write8_handler(cputag_get_address_space(machine, "sub", ADDRESS_SPACE_PROGRAM), 0x4016, 0x4016, 0, 0, vsdual_vrom_banking); |
| 1442 | 1040 | |
| 1443 | 1041 | /* shared ram at $6000 */ |
| 1444 | 1042 | memory_install_ram(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x6000, 0x7fff, 0, 0, &prg[0x6000]); |
| 1445 | 1043 | memory_install_ram(cputag_get_address_space(machine, "sub", ADDRESS_SPACE_PROGRAM), 0x6000, 0x7fff, 0, 0, &prg[0x6000]); |
| 1446 | 1044 | } |
| 1447 | 1045 | |
| 1448 | | /**********************************************************************/ |
| 1449 | | /* VS Wrecking Crew */ |
| 1450 | | |
| 1451 | | DRIVER_INIT( wrecking ) |
| 1452 | | { |
| 1453 | | /* only differance between this and vstennis is the colors */ |
| 1454 | | DRIVER_INIT_CALL(vstennis); |
| 1455 | | remapped_colortable = rp2c04002_colortable; |
| 1456 | | } |
| 1457 | | |
| 1458 | | /**********************************************************************/ |
| 1459 | | /* VS Balloon Fight */ |
| 1460 | | |
| 1461 | | DRIVER_INIT( balonfgt ) |
| 1462 | | { |
| 1463 | | /* only differance between this and vstennis is the colors */ |
| 1464 | | DRIVER_INIT_CALL(vstennis); |
| 1465 | | |
| 1466 | | remapped_colortable = rp2c04003_colortable; |
| 1467 | | } |
| 1468 | | |
| 1469 | | |
| 1470 | | /**********************************************************************/ |
| 1471 | | /* VS Baseball */ |
| 1472 | | |
| 1473 | | DRIVER_INIT( vsbball ) |
| 1474 | | { |
| 1475 | | /* only differance between this and vstennis is the colors */ |
| 1476 | | DRIVER_INIT_CALL(vstennis); |
| 1477 | | |
| 1478 | | remapped_colortable = rp2c04001_colortable; |
| 1479 | | } |
| 1480 | | |
| 1481 | | |
| 1482 | | /**********************************************************************/ |
| 1483 | | /* Dual Ice Climber Jpn */ |
| 1484 | | |
| 1485 | | DRIVER_INIT( iceclmrj ) |
| 1486 | | { |
| 1487 | | /* only differance between this and vstennis is the colors */ |
| 1488 | | DRIVER_INIT_CALL(vstennis); |
| 1489 | | |
| 1490 | | remapped_colortable = rp2c05004_colortable; |
| 1491 | | } |
| 1492 | | |
| 1493 | | /**********************************************************************/ |
| 1494 | | /* Battle City */ |
| 1495 | | |
| 1496 | | DRIVER_INIT( btlecity ) |
| 1497 | | { |
| 1498 | | init_vsnes(machine); |
| 1499 | | DRIVER_INIT_CALL(vsnormal); |
| 1500 | | remapped_colortable = rp2c04003_colortable; |
| 1501 | | } |
| 1502 | | |
| 1503 | | /***********************************************************************/ |
| 1504 | | /* Tetris */ |
| 1505 | | |
| 1506 | | DRIVER_INIT( vstetris ) |
| 1507 | | { |
| 1508 | | /* extra ram at $6000 is enabled with bit 1 of $4016 */ |
| 1509 | | memory_install_ram(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x6000, 0x7fff, 0, 0, NULL); |
| 1510 | | |
| 1511 | | init_vsnes(machine); |
| 1512 | | DRIVER_INIT_CALL(vsnormal); |
| 1513 | | remapped_colortable = rp2c04003_colortable; |
| 1514 | | } |
src/mame/video/playmark.c
| r7882 | r7883 | |
| 2 | 2 | #include "includes/playmark.h" |
| 3 | 3 | |
| 4 | 4 | |
| 5 | | UINT16 *bigtwin_bgvideoram; |
| 6 | | UINT16 *wbeachvl_videoram1,*wbeachvl_videoram2,*wbeachvl_videoram3; |
| 7 | | UINT16 *wbeachvl_rowscroll; |
| 8 | | |
| 9 | | static int bgscrollx,bgscrolly,bg_enable,bg_full_size; |
| 10 | | static int fgscrollx,fg_rowscroll_enable; |
| 11 | | static tilemap_t *tx_tilemap,*fg_tilemap,*bg_tilemap; |
| 12 | | |
| 13 | | static int xoffset = 0; |
| 14 | | static int yoffset = 0; |
| 15 | | static int txt_tile_offset = 0; |
| 16 | | static int pri_masks[3]; |
| 17 | | static UINT16 playmark_scroll[7]; |
| 18 | | |
| 19 | | |
| 20 | 5 | /*************************************************************************** |
| 21 | 6 | |
| 22 | 7 | Callbacks for the TileMap code |
| r7882 | r7883 | |
| 25 | 10 | |
| 26 | 11 | static TILE_GET_INFO( bigtwin_get_tx_tile_info ) |
| 27 | 12 | { |
| 28 | | UINT16 code = wbeachvl_videoram1[2*tile_index]; |
| 29 | | UINT16 color = wbeachvl_videoram1[2*tile_index+1]; |
| 13 | playmark_state *state = (playmark_state *)machine->driver_data; |
| 14 | UINT16 code = state->videoram1[2 * tile_index]; |
| 15 | UINT16 color = state->videoram1[2 * tile_index + 1]; |
| 30 | 16 | SET_TILE_INFO( |
| 31 | 17 | 2, |
| 32 | 18 | code, |
| r7882 | r7883 | |
| 36 | 22 | |
| 37 | 23 | static TILE_GET_INFO( bigtwin_get_fg_tile_info ) |
| 38 | 24 | { |
| 39 | | UINT16 code = wbeachvl_videoram2[2*tile_index]; |
| 40 | | UINT16 color = wbeachvl_videoram2[2*tile_index+1]; |
| 25 | playmark_state *state = (playmark_state *)machine->driver_data; |
| 26 | UINT16 code = state->videoram2[2 * tile_index]; |
| 27 | UINT16 color = state->videoram2[2 * tile_index + 1]; |
| 41 | 28 | SET_TILE_INFO( |
| 42 | 29 | 1, |
| 43 | 30 | code, |
| r7882 | r7883 | |
| 47 | 34 | |
| 48 | 35 | static TILE_GET_INFO( wbeachvl_get_tx_tile_info ) |
| 49 | 36 | { |
| 50 | | UINT16 code = wbeachvl_videoram1[2*tile_index]; |
| 51 | | UINT16 color = wbeachvl_videoram1[2*tile_index+1]; |
| 37 | playmark_state *state = (playmark_state *)machine->driver_data; |
| 38 | UINT16 code = state->videoram1[2 * tile_index]; |
| 39 | UINT16 color = state->videoram1[2 * tile_index + 1]; |
| 52 | 40 | |
| 53 | 41 | SET_TILE_INFO( |
| 54 | 42 | 2, |
| r7882 | r7883 | |
| 59 | 47 | |
| 60 | 48 | static TILE_GET_INFO( wbeachvl_get_fg_tile_info ) |
| 61 | 49 | { |
| 62 | | UINT16 code = wbeachvl_videoram2[2*tile_index]; |
| 63 | | UINT16 color = wbeachvl_videoram2[2*tile_index+1]; |
| 50 | playmark_state *state = (playmark_state *)machine->driver_data; |
| 51 | UINT16 code = state->videoram2[2 * tile_index]; |
| 52 | UINT16 color = state->videoram2[2 * tile_index + 1]; |
| 64 | 53 | |
| 65 | 54 | SET_TILE_INFO( |
| 66 | 55 | 1, |
| r7882 | r7883 | |
| 71 | 60 | |
| 72 | 61 | static TILE_GET_INFO( wbeachvl_get_bg_tile_info ) |
| 73 | 62 | { |
| 74 | | UINT16 code = wbeachvl_videoram3[2*tile_index]; |
| 75 | | UINT16 color = wbeachvl_videoram3[2*tile_index+1]; |
| 63 | playmark_state *state = (playmark_state *)machine->driver_data; |
| 64 | UINT16 code = state->videoram3[2 * tile_index]; |
| 65 | UINT16 color = state->videoram3[2 * tile_index + 1]; |
| 76 | 66 | |
| 77 | 67 | SET_TILE_INFO( |
| 78 | 68 | 1, |
| r7882 | r7883 | |
| 83 | 73 | |
| 84 | 74 | static TILE_GET_INFO( hrdtimes_get_tx_tile_info ) |
| 85 | 75 | { |
| 86 | | int code = wbeachvl_videoram1[tile_index] & 0x03ff; |
| 87 | | int colr = wbeachvl_videoram1[tile_index] & 0xe000; |
| 76 | playmark_state *state = (playmark_state *)machine->driver_data; |
| 77 | int code = state->videoram1[tile_index] & 0x03ff; |
| 78 | int colr = state->videoram1[tile_index] & 0xe000; |
| 88 | 79 | |
| 89 | | SET_TILE_INFO(2,code + txt_tile_offset,colr >> 13,0); |
| 80 | SET_TILE_INFO(2,code + state->txt_tile_offset, colr >> 13, 0); |
| 90 | 81 | } |
| 91 | 82 | |
| 92 | 83 | static TILE_GET_INFO( hrdtimes_get_fg_tile_info ) |
| 93 | 84 | { |
| 94 | | int code = wbeachvl_videoram2[tile_index] & 0x1fff; |
| 95 | | int colr = wbeachvl_videoram2[tile_index] & 0xe000; |
| 85 | playmark_state *state = (playmark_state *)machine->driver_data; |
| 86 | int code = state->videoram2[tile_index] & 0x1fff; |
| 87 | int colr = state->videoram2[tile_index] & 0xe000; |
| 96 | 88 | |
| 97 | 89 | SET_TILE_INFO(1,code + 0x2000,(colr >> 13) + 8,0); |
| 98 | 90 | } |
| 99 | 91 | |
| 100 | 92 | static TILE_GET_INFO( hrdtimes_get_bg_tile_info ) |
| 101 | 93 | { |
| 102 | | int code = wbeachvl_videoram3[tile_index] & 0x1fff; |
| 103 | | int colr = wbeachvl_videoram3[tile_index] & 0xe000; |
| 94 | playmark_state *state = (playmark_state *)machine->driver_data; |
| 95 | int code = state->videoram3[tile_index] & 0x1fff; |
| 96 | int colr = state->videoram3[tile_index] & 0xe000; |
| 104 | 97 | |
| 105 | | SET_TILE_INFO(1,code,colr >> 13,0); |
| 98 | SET_TILE_INFO(1, code, colr >> 13, 0); |
| 106 | 99 | } |
| 107 | 100 | |
| 108 | 101 | /*************************************************************************** |
| r7882 | r7883 | |
| 113 | 106 | |
| 114 | 107 | VIDEO_START( bigtwin ) |
| 115 | 108 | { |
| 116 | | tx_tilemap = tilemap_create(machine, bigtwin_get_tx_tile_info,tilemap_scan_rows, 8, 8,64,32); |
| 117 | | fg_tilemap = tilemap_create(machine, bigtwin_get_fg_tile_info,tilemap_scan_rows, 16,16,32,32); |
| 109 | playmark_state *state = (playmark_state *)machine->driver_data; |
| 118 | 110 | |
| 119 | | tilemap_set_transparent_pen(tx_tilemap,0); |
| 111 | state->tx_tilemap = tilemap_create(machine, bigtwin_get_tx_tile_info, tilemap_scan_rows, 8, 8, 64, 32); |
| 112 | state->fg_tilemap = tilemap_create(machine, bigtwin_get_fg_tile_info, tilemap_scan_rows, 16, 16, 32, 32); |
| 120 | 113 | |
| 121 | | pri_masks[0] = 0; |
| 122 | | pri_masks[1] = 0; |
| 123 | | pri_masks[2] = 0; |
| 114 | tilemap_set_transparent_pen(state->tx_tilemap, 0); |
| 115 | |
| 116 | state->xoffset = 0; |
| 117 | state->yoffset = 0; |
| 118 | state->txt_tile_offset = 0; |
| 119 | |
| 120 | state->pri_masks[0] = 0; |
| 121 | state->pri_masks[1] = 0; |
| 122 | state->pri_masks[2] = 0; |
| 124 | 123 | } |
| 125 | 124 | |
| 126 | 125 | |
| 127 | 126 | VIDEO_START( wbeachvl ) |
| 128 | 127 | { |
| 129 | | tx_tilemap = tilemap_create(machine, wbeachvl_get_tx_tile_info,tilemap_scan_rows, 8, 8,64,32); |
| 130 | | fg_tilemap = tilemap_create(machine, wbeachvl_get_fg_tile_info,tilemap_scan_rows,16,16,64,32); |
| 131 | | bg_tilemap = tilemap_create(machine, wbeachvl_get_bg_tile_info,tilemap_scan_rows, 16,16,64,32); |
| 128 | playmark_state *state = (playmark_state *)machine->driver_data; |
| 132 | 129 | |
| 133 | | tilemap_set_transparent_pen(tx_tilemap,0); |
| 134 | | tilemap_set_transparent_pen(fg_tilemap,0); |
| 130 | state->tx_tilemap = tilemap_create(machine, wbeachvl_get_tx_tile_info, tilemap_scan_rows, 8, 8, 64, 32); |
| 131 | state->fg_tilemap = tilemap_create(machine, wbeachvl_get_fg_tile_info, tilemap_scan_rows, 16, 16, 64, 32); |
| 132 | state->bg_tilemap = tilemap_create(machine, wbeachvl_get_bg_tile_info, tilemap_scan_rows, 16, 16, 64, 32); |
| 135 | 133 | |
| 136 | | pri_masks[0] = 0xfff0; |
| 137 | | pri_masks[1] = 0xfffc; |
| 138 | | pri_masks[2] = 0; |
| 134 | tilemap_set_transparent_pen(state->tx_tilemap, 0); |
| 135 | tilemap_set_transparent_pen(state->fg_tilemap, 0); |
| 136 | |
| 137 | state->xoffset = 0; |
| 138 | state->yoffset = 0; |
| 139 | state->txt_tile_offset = 0; |
| 140 | |
| 141 | state->pri_masks[0] = 0xfff0; |
| 142 | state->pri_masks[1] = 0xfffc; |
| 143 | state->pri_masks[2] = 0; |
| 139 | 144 | } |
| 140 | 145 | |
| 141 | 146 | VIDEO_START( excelsr ) |
| 142 | 147 | { |
| 143 | | tx_tilemap = tilemap_create(machine, bigtwin_get_tx_tile_info,tilemap_scan_rows,16,16,32,32); |
| 144 | | fg_tilemap = tilemap_create(machine, bigtwin_get_fg_tile_info,tilemap_scan_rows, 16,16,32,32); |
| 148 | playmark_state *state = (playmark_state *)machine->driver_data; |
| 145 | 149 | |
| 146 | | tilemap_set_transparent_pen(tx_tilemap,0); |
| 150 | state->tx_tilemap = tilemap_create(machine, bigtwin_get_tx_tile_info, tilemap_scan_rows, 16, 16, 32, 32); |
| 151 | state->fg_tilemap = tilemap_create(machine, bigtwin_get_fg_tile_info, tilemap_scan_rows, 16, 16, 32, 32); |
| 147 | 152 | |
| 148 | | pri_masks[0] = 0; |
| 149 | | pri_masks[1] = 0xfffc; |
| 150 | | pri_masks[2] = 0xfff0; |
| 153 | tilemap_set_transparent_pen(state->tx_tilemap, 0); |
| 154 | |
| 155 | state->xoffset = 0; |
| 156 | state->yoffset = 0; |
| 157 | state->txt_tile_offset = 0; |
| 158 | |
| 159 | state->pri_masks[0] = 0; |
| 160 | state->pri_masks[1] = 0xfffc; |
| 161 | state->pri_masks[2] = 0xfff0; |
| 151 | 162 | } |
| 152 | 163 | |
| 153 | 164 | VIDEO_START( hotmind ) |
| 154 | 165 | { |
| 155 | | tx_tilemap = tilemap_create(machine, hrdtimes_get_tx_tile_info,tilemap_scan_rows, 8, 8,64,64); |
| 156 | | fg_tilemap = tilemap_create(machine, hrdtimes_get_fg_tile_info,tilemap_scan_rows,16,16,32,32); |
| 157 | | bg_tilemap = tilemap_create(machine, hrdtimes_get_bg_tile_info,tilemap_scan_rows, 16,16,32,32); |
| 166 | playmark_state *state = (playmark_state *)machine->driver_data; |
| 158 | 167 | |
| 159 | | tilemap_set_transparent_pen(tx_tilemap,0); |
| 160 | | tilemap_set_transparent_pen(fg_tilemap,0); |
| 168 | state->tx_tilemap = tilemap_create(machine, hrdtimes_get_tx_tile_info, tilemap_scan_rows, 8, 8, 64, 64); |
| 169 | state->fg_tilemap = tilemap_create(machine, hrdtimes_get_fg_tile_info, tilemap_scan_rows, 16, 16, 32, 32); |
| 170 | state->bg_tilemap = tilemap_create(machine, hrdtimes_get_bg_tile_info, tilemap_scan_rows, 16, 16, 32, 32); |
| 161 | 171 | |
| 162 | | tilemap_set_scrolldx(tx_tilemap, -14, -14); |
| 163 | | tilemap_set_scrolldx(fg_tilemap, -14, -14); |
| 164 | | tilemap_set_scrolldx(bg_tilemap, -14, -14); |
| 172 | tilemap_set_transparent_pen(state->tx_tilemap, 0); |
| 173 | tilemap_set_transparent_pen(state->fg_tilemap, 0); |
| 165 | 174 | |
| 166 | | xoffset = -9; |
| 167 | | yoffset = -8; |
| 168 | | txt_tile_offset = 0x9000; |
| 175 | tilemap_set_scrolldx(state->tx_tilemap, -14, -14); |
| 176 | tilemap_set_scrolldx(state->fg_tilemap, -14, -14); |
| 177 | tilemap_set_scrolldx(state->bg_tilemap, -14, -14); |
| 169 | 178 | |
| 170 | | pri_masks[0] = 0xfff0; |
| 171 | | pri_masks[1] = 0xfffc; |
| 172 | | pri_masks[2] = 0; |
| 179 | state->xoffset = -9; |
| 180 | state->yoffset = -8; |
| 181 | state->txt_tile_offset = 0x9000; |
| 182 | |
| 183 | state->pri_masks[0] = 0xfff0; |
| 184 | state->pri_masks[1] = 0xfffc; |
| 185 | state->pri_masks[2] = 0; |
| 173 | 186 | } |
| 174 | 187 | |
| 175 | 188 | VIDEO_START( hrdtimes ) |
| 176 | 189 | { |
| 177 | | tx_tilemap = tilemap_create(machine, hrdtimes_get_tx_tile_info,tilemap_scan_rows, 8, 8,64,64); |
| 178 | | fg_tilemap = tilemap_create(machine, hrdtimes_get_fg_tile_info,tilemap_scan_rows,16,16,32,32); |
| 179 | | bg_tilemap = tilemap_create(machine, hrdtimes_get_bg_tile_info,tilemap_scan_rows, 16,16,32,32); |
| 190 | playmark_state *state = (playmark_state *)machine->driver_data; |
| 180 | 191 | |
| 181 | | tilemap_set_transparent_pen(tx_tilemap,0); |
| 182 | | tilemap_set_transparent_pen(fg_tilemap,0); |
| 192 | state->tx_tilemap = tilemap_create(machine, hrdtimes_get_tx_tile_info,tilemap_scan_rows, 8, 8, 64, 64); |
| 193 | state->fg_tilemap = tilemap_create(machine, hrdtimes_get_fg_tile_info,tilemap_scan_rows, 16, 16, 32, 32); |
| 194 | state->bg_tilemap = tilemap_create(machine, hrdtimes_get_bg_tile_info,tilemap_scan_rows, 16, 16, 32, 32); |
| 183 | 195 | |
| 184 | | tilemap_set_scrolldx(tx_tilemap, -14, -14); |
| 185 | | tilemap_set_scrolldx(fg_tilemap, -10, -10); |
| 186 | | tilemap_set_scrolldx(bg_tilemap, -12, -12); |
| 196 | tilemap_set_transparent_pen(state->tx_tilemap, 0); |
| 197 | tilemap_set_transparent_pen(state->fg_tilemap, 0); |
| 187 | 198 | |
| 188 | | xoffset = -8; |
| 189 | | yoffset = -8; |
| 190 | | txt_tile_offset = 0xfc00; |
| 199 | tilemap_set_scrolldx(state->tx_tilemap, -14, -14); |
| 200 | tilemap_set_scrolldx(state->fg_tilemap, -10, -10); |
| 201 | tilemap_set_scrolldx(state->bg_tilemap, -12, -12); |
| 191 | 202 | |
| 192 | | pri_masks[0] = 0xfff0; |
| 193 | | pri_masks[1] = 0xfffc; |
| 194 | | pri_masks[2] = 0; |
| 203 | state->xoffset = -8; |
| 204 | state->yoffset = -8; |
| 205 | state->txt_tile_offset = 0xfc00; |
| 206 | |
| 207 | state->pri_masks[0] = 0xfff0; |
| 208 | state->pri_masks[1] = 0xfffc; |
| 209 | state->pri_masks[2] = 0; |
| 195 | 210 | } |
| 196 | 211 | |
| 197 | 212 | /*************************************************************************** |
| r7882 | r7883 | |
| 202 | 217 | |
| 203 | 218 | WRITE16_HANDLER( wbeachvl_txvideoram_w ) |
| 204 | 219 | { |
| 205 | | COMBINE_DATA(&wbeachvl_videoram1[offset]); |
| 206 | | tilemap_mark_tile_dirty(tx_tilemap,offset / 2); |
| 220 | playmark_state *state = (playmark_state *)space->machine->driver_data; |
| 221 | |
| 222 | COMBINE_DATA(&state->videoram1[offset]); |
| 223 | tilemap_mark_tile_dirty(state->tx_tilemap, offset / 2); |
| 207 | 224 | } |
| 208 | 225 | |
| 209 | 226 | WRITE16_HANDLER( wbeachvl_fgvideoram_w ) |
| 210 | 227 | { |
| 211 | | COMBINE_DATA(&wbeachvl_videoram2[offset]); |
| 212 | | tilemap_mark_tile_dirty(fg_tilemap,offset / 2); |
| 228 | playmark_state *state = (playmark_state *)space->machine->driver_data; |
| 229 | |
| 230 | COMBINE_DATA(&state->videoram2[offset]); |
| 231 | tilemap_mark_tile_dirty(state->fg_tilemap, offset / 2); |
| 213 | 232 | } |
| 214 | 233 | |
| 215 | 234 | WRITE16_HANDLER( wbeachvl_bgvideoram_w ) |
| 216 | 235 | { |
| 217 | | COMBINE_DATA(&wbeachvl_videoram3[offset]); |
| 218 | | tilemap_mark_tile_dirty(bg_tilemap,offset / 2); |
| 236 | playmark_state *state = (playmark_state *)space->machine->driver_data; |
| 237 | |
| 238 | COMBINE_DATA(&state->videoram3[offset]); |
| 239 | tilemap_mark_tile_dirty(state->bg_tilemap, offset / 2); |
| 219 | 240 | } |
| 220 | 241 | |
| 221 | 242 | WRITE16_HANDLER( hrdtimes_txvideoram_w ) |
| 222 | 243 | { |
| 223 | | COMBINE_DATA(&wbeachvl_videoram1[offset]); |
| 224 | | tilemap_mark_tile_dirty(tx_tilemap,offset); |
| 244 | playmark_state *state = (playmark_state *)space->machine->driver_data; |
| 245 | |
| 246 | COMBINE_DATA(&state->videoram1[offset]); |
| 247 | tilemap_mark_tile_dirty(state->tx_tilemap, offset); |
| 225 | 248 | } |
| 226 | 249 | |
| 227 | 250 | WRITE16_HANDLER( hrdtimes_fgvideoram_w ) |
| 228 | 251 | { |
| 229 | | COMBINE_DATA(&wbeachvl_videoram2[offset]); |
| 230 | | tilemap_mark_tile_dirty(fg_tilemap,offset); |
| 252 | playmark_state *state = (playmark_state *)space->machine->driver_data; |
| 253 | |
| 254 | COMBINE_DATA(&state->videoram2[offset]); |
| 255 | tilemap_mark_tile_dirty(state->fg_tilemap, offset); |
| 231 | 256 | } |
| 232 | 257 | |
| 233 | 258 | WRITE16_HANDLER( hrdtimes_bgvideoram_w ) |
| 234 | 259 | { |
| 235 | | COMBINE_DATA(&wbeachvl_videoram3[offset]); |
| 236 | | tilemap_mark_tile_dirty(bg_tilemap,offset); |
| 260 | playmark_state *state = (playmark_state *)space->machine->driver_data; |
| 261 | |
| 262 | COMBINE_DATA(&state->videoram3[offset]); |
| 263 | tilemap_mark_tile_dirty(state->bg_tilemap, offset); |
| 237 | 264 | } |
| 238 | 265 | |
| 239 | 266 | |
| 240 | 267 | WRITE16_HANDLER( bigtwin_paletteram_w ) |
| 241 | 268 | { |
| 242 | | int r,g,b,val; |
| 269 | int r, g, b, val; |
| 243 | 270 | |
| 244 | 271 | COMBINE_DATA(&space->machine->generic.paletteram.u16[offset]); |
| 245 | 272 | |
| r7882 | r7883 | |
| 252 | 279 | g |= ((val & 0x04) >> 2); |
| 253 | 280 | b |= ((val & 0x02) >> 1); |
| 254 | 281 | |
| 255 | | palette_set_color_rgb(space->machine,offset,pal5bit(r),pal5bit(g),pal5bit(b)); |
| 282 | palette_set_color_rgb(space->machine, offset, pal5bit(r), pal5bit(g), pal5bit(b)); |
| 256 | 283 | } |
| 257 | 284 | |
| 258 | 285 | WRITE16_HANDLER( bigtwin_scroll_w ) |
| 259 | 286 | { |
| 260 | | data = COMBINE_DATA(&playmark_scroll[offset]); |
| 287 | playmark_state *state = (playmark_state *)space->machine->driver_data; |
| 261 | 288 | |
| 289 | data = COMBINE_DATA(&state->scroll[offset]); |
| 290 | |
| 262 | 291 | switch (offset) |
| 263 | 292 | { |
| 264 | | case 0: tilemap_set_scrollx(tx_tilemap,0,data+2); break; |
| 265 | | case 1: tilemap_set_scrolly(tx_tilemap,0,data); break; |
| 266 | | case 2: bgscrollx = -(data+4); break; |
| 267 | | case 3: bgscrolly = (-data) & 0x1ff; |
| 268 | | bg_enable = data & 0x0200; |
| 269 | | bg_full_size = data & 0x0400; |
| 293 | case 0: tilemap_set_scrollx(state->tx_tilemap, 0, data + 2); break; |
| 294 | case 1: tilemap_set_scrolly(state->tx_tilemap, 0, data); break; |
| 295 | case 2: state->bgscrollx = -(data + 4); break; |
| 296 | case 3: state->bgscrolly = (-data) & 0x1ff; |
| 297 | state->bg_enable = data & 0x0200; |
| 298 | state->bg_full_size = data & 0x0400; |
| 270 | 299 | break; |
| 271 | | case 4: tilemap_set_scrollx(fg_tilemap,0,data+6); break; |
| 272 | | case 5: tilemap_set_scrolly(fg_tilemap,0,data); break; |
| 300 | case 4: tilemap_set_scrollx(state->fg_tilemap, 0, data + 6); break; |
| 301 | case 5: tilemap_set_scrolly(state->fg_tilemap, 0, data); break; |
| 273 | 302 | } |
| 274 | 303 | } |
| 275 | 304 | |
| 276 | 305 | WRITE16_HANDLER( wbeachvl_scroll_w ) |
| 277 | 306 | { |
| 278 | | data = COMBINE_DATA(&playmark_scroll[offset]); |
| 307 | playmark_state *state = (playmark_state *)space->machine->driver_data; |
| 279 | 308 | |
| 309 | data = COMBINE_DATA(&state->scroll[offset]); |
| 310 | |
| 280 | 311 | switch (offset) |
| 281 | 312 | { |
| 282 | | case 0: tilemap_set_scrollx(tx_tilemap,0,data+2); break; |
| 283 | | case 1: tilemap_set_scrolly(tx_tilemap,0,data); break; |
| 284 | | case 2: fgscrollx = data+4;break; |
| 285 | | case 3: tilemap_set_scrolly(fg_tilemap,0,data & 0x3ff); |
| 286 | | fg_rowscroll_enable = data & 0x0800; |
| 313 | case 0: tilemap_set_scrollx(state->tx_tilemap, 0, data + 2); break; |
| 314 | case 1: tilemap_set_scrolly(state->tx_tilemap, 0, data); break; |
| 315 | case 2: state->fgscrollx = data + 4;break; |
| 316 | case 3: tilemap_set_scrolly(state->fg_tilemap, 0, data & 0x3ff); |
| 317 | state->fg_rowscroll_enable = data & 0x0800; |
| 287 | 318 | break; |
| 288 | | case 4: tilemap_set_scrollx(bg_tilemap,0,data+6); break; |
| 289 | | case 5: tilemap_set_scrolly(bg_tilemap,0,data); break; |
| 319 | case 4: tilemap_set_scrollx(state->bg_tilemap, 0, data + 6); break; |
| 320 | case 5: tilemap_set_scrolly(state->bg_tilemap, 0, data); break; |
| 290 | 321 | } |
| 291 | 322 | } |
| 292 | 323 | |
| 293 | 324 | WRITE16_HANDLER( excelsr_scroll_w ) |
| 294 | 325 | { |
| 295 | | data = COMBINE_DATA(&playmark_scroll[offset]); |
| 326 | playmark_state *state = (playmark_state *)space->machine->driver_data; |
| 296 | 327 | |
| 328 | data = COMBINE_DATA(&state->scroll[offset]); |
| 329 | |
| 297 | 330 | switch (offset) |
| 298 | 331 | { |
| 299 | | case 0: tilemap_set_scrollx(tx_tilemap,0,data+2); break; |
| 300 | | case 1: tilemap_set_scrolly(tx_tilemap,0,data); break; |
| 301 | | case 2: bgscrollx = -data; break; |
| 302 | | case 3: bgscrolly = (-data+2)& 0x1ff; |
| 303 | | bg_enable = data & 0x0200; |
| 304 | | bg_full_size = data & 0x0400; |
| 332 | case 0: tilemap_set_scrollx(state->tx_tilemap, 0, data + 2); break; |
| 333 | case 1: tilemap_set_scrolly(state->tx_tilemap, 0, data); break; |
| 334 | case 2: state->bgscrollx = -data; break; |
| 335 | case 3: state->bgscrolly = (-data + 2)& 0x1ff; |
| 336 | state->bg_enable = data & 0x0200; |
| 337 | state->bg_full_size = data & 0x0400; |
| 305 | 338 | break; |
| 306 | | case 4: tilemap_set_scrollx(fg_tilemap,0,data+6); break; |
| 307 | | case 5: tilemap_set_scrolly(fg_tilemap,0,data); break; |
| 339 | case 4: tilemap_set_scrollx(state->fg_tilemap, 0, data + 6); break; |
| 340 | case 5: tilemap_set_scrolly(state->fg_tilemap, 0, data); break; |
| 308 | 341 | } |
| 309 | 342 | } |
| 310 | 343 | |
| 311 | 344 | WRITE16_HANDLER( hrdtimes_scroll_w ) |
| 312 | 345 | { |
| 313 | | data = COMBINE_DATA(&playmark_scroll[offset]); |
| 346 | playmark_state *state = (playmark_state *)space->machine->driver_data; |
| 314 | 347 | |
| 348 | data = COMBINE_DATA(&state->scroll[offset]); |
| 349 | |
| 315 | 350 | switch (offset) |
| 316 | 351 | { |
| 317 | | case 0: tilemap_set_scrollx(tx_tilemap,0,data); break; |
| 318 | | case 1: tilemap_set_scrolly(tx_tilemap,0,data); break; |
| 319 | | case 2: tilemap_set_scrollx(fg_tilemap,0,data); break; |
| 320 | | case 3: tilemap_set_scrolly(fg_tilemap,0,data); break; |
| 321 | | case 4: tilemap_set_scrollx(bg_tilemap,0,data); break; |
| 322 | | case 5: tilemap_set_scrolly(bg_tilemap,0,data); break; |
| 352 | case 0: tilemap_set_scrollx(state->tx_tilemap, 0, data); break; |
| 353 | case 1: tilemap_set_scrolly(state->tx_tilemap, 0, data); break; |
| 354 | case 2: tilemap_set_scrollx(state->fg_tilemap, 0, data); break; |
| 355 | case 3: tilemap_set_scrolly(state->fg_tilemap, 0, data); break; |
| 356 | case 4: tilemap_set_scrollx(state->bg_tilemap, 0, data); break; |
| 357 | case 5: tilemap_set_scrolly(state->bg_tilemap, 0, data); break; |
| 323 | 358 | } |
| 324 | 359 | } |
| 325 | 360 | |
| r7882 | r7883 | |
| 329 | 364 | |
| 330 | 365 | ***************************************************************************/ |
| 331 | 366 | |
| 332 | | static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect,int codeshift) |
| 367 | static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int codeshift ) |
| 333 | 368 | { |
| 334 | | int offs, start_offset = machine->generic.spriteram_size/2 - 4; |
| 369 | playmark_state *state = (playmark_state *)machine->driver_data; |
| 370 | int offs, start_offset = state->spriteram_size / 2 - 4; |
| 335 | 371 | int height = machine->gfx[0]->height; |
| 336 | 372 | int colordiv = machine->gfx[0]->color_granularity / 16; |
| 337 | | UINT16 *spriteram16 = machine->generic.spriteram.u16; |
| 373 | UINT16 *spriteram = state->spriteram; |
| 338 | 374 | |
| 339 | 375 | // find the "end of list" to draw the sprites in reverse order |
| 340 | | for (offs = 4;offs < machine->generic.spriteram_size/2;offs += 4) |
| 376 | for (offs = 4; offs < state->spriteram_size / 2; offs += 4) |
| 341 | 377 | { |
| 342 | | if (spriteram16[offs+3-4] == 0x2000) /* end of list marker */ |
| 378 | if (spriteram[offs + 3 - 4] == 0x2000) /* end of list marker */ |
| 343 | 379 | { |
| 344 | 380 | start_offset = offs - 4; |
| 345 | 381 | break; |
| 346 | 382 | } |
| 347 | 383 | } |
| 348 | 384 | |
| 349 | | for (offs = start_offset;offs >= 4;offs -= 4) |
| 385 | for (offs = start_offset; offs >= 4; offs -= 4) |
| 350 | 386 | { |
| 351 | | int sx,sy,code,color,flipx,pri; |
| 387 | int sx, sy, code, color, flipx, pri; |
| 352 | 388 | |
| 353 | | sy = spriteram16[offs+3-4]; /* -4? what the... ??? */ |
| 389 | sy = spriteram[offs + 3 - 4]; /* -4? what the... ??? */ |
| 354 | 390 | |
| 355 | 391 | flipx = sy & 0x4000; |
| 356 | | sx = (spriteram16[offs+1] & 0x01ff) - 16-7; |
| 357 | | sy = (256-8-height - sy) & 0xff; |
| 358 | | code = spriteram16[offs+2] >> codeshift; |
| 359 | | color = ((spriteram16[offs+1] & 0x3e00) >> 9) / colordiv; |
| 360 | | pri = (spriteram16[offs+1] & 0x8000) >> 15; |
| 392 | sx = (spriteram[offs + 1] & 0x01ff) - 16 - 7; |
| 393 | sy = (256 - 8 - height - sy) & 0xff; |
| 394 | code = spriteram[offs + 2] >> codeshift; |
| 395 | color = ((spriteram[offs + 1] & 0x3e00) >> 9) / colordiv; |
| 396 | pri = (spriteram[offs + 1] & 0x8000) >> 15; |
| 361 | 397 | |
| 362 | 398 | if(!pri && (color & 0x0c) == 0x0c) |
| 363 | 399 | pri = 2; |
| r7882 | r7883 | |
| 366 | 402 | code, |
| 367 | 403 | color, |
| 368 | 404 | flipx,0, |
| 369 | | sx + xoffset,sy + yoffset, |
| 370 | | machine->priority_bitmap,pri_masks[pri],0); |
| 405 | sx + state->xoffset,sy + state->yoffset, |
| 406 | machine->priority_bitmap,state->pri_masks[pri],0); |
| 371 | 407 | } |
| 372 | 408 | } |
| 373 | 409 | |
| 374 | | static void draw_bitmap(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect) |
| 410 | static void draw_bitmap( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect ) |
| 375 | 411 | { |
| 376 | | int x,y,count; |
| 412 | playmark_state *state = (playmark_state *)machine->driver_data; |
| 413 | int x, y, count; |
| 377 | 414 | int color; |
| 378 | 415 | UINT8 *pri; |
| 379 | 416 | |
| 380 | 417 | count = 0; |
| 381 | | for (y=0;y<512;y++) |
| 418 | for (y = 0; y < 512; y++) |
| 382 | 419 | { |
| 383 | | for (x=0;x<512;x++) |
| 420 | for (x = 0; x < 512; x++) |
| 384 | 421 | { |
| 385 | | color = bigtwin_bgvideoram[count] & 0xff; |
| 422 | color = state->bgvideoram[count] & 0xff; |
| 386 | 423 | |
| 387 | | if(color) |
| 424 | if (color) |
| 388 | 425 | { |
| 389 | | if(bg_full_size) |
| 426 | if (state->bg_full_size) |
| 390 | 427 | { |
| 391 | | *BITMAP_ADDR16(bitmap, (y + bgscrolly) & 0x1ff, (x + bgscrollx) & 0x1ff) = 0x100 + color; |
| 428 | *BITMAP_ADDR16(bitmap, (y + state->bgscrolly) & 0x1ff, (x + state->bgscrollx) & 0x1ff) = 0x100 + color; |
| 392 | 429 | |
| 393 | | pri = BITMAP_ADDR8(machine->priority_bitmap, (y + bgscrolly) & 0x1ff, 0); |
| 394 | | pri[(x + bgscrollx) & 0x1ff] |= 2; |
| 430 | pri = BITMAP_ADDR8(machine->priority_bitmap, (y + state->bgscrolly) & 0x1ff, 0); |
| 431 | pri[(x + state->bgscrollx) & 0x1ff] |= 2; |
| 395 | 432 | } |
| 396 | 433 | else |
| 397 | 434 | { |
| 398 | 435 | /* 50% size */ |
| 399 | 436 | if(!(x % 2) && !(y % 2)) |
| 400 | 437 | { |
| 401 | | *BITMAP_ADDR16(bitmap, (y / 2 + bgscrolly) & 0x1ff, (x / 2 + bgscrollx) & 0x1ff) = 0x100 + color; |
| 438 | *BITMAP_ADDR16(bitmap, (y / 2 + state->bgscrolly) & 0x1ff, (x / 2 + state->bgscrollx) & 0x1ff) = 0x100 + color; |
| 402 | 439 | |
| 403 | | pri = BITMAP_ADDR8(machine->priority_bitmap, (y / 2 + bgscrolly) & 0x1ff, 0); |
| 404 | | pri[(x / 2 + bgscrollx) & 0x1ff] |= 2; |
| 440 | pri = BITMAP_ADDR8(machine->priority_bitmap, (y / 2 + state->bgscrolly) & 0x1ff, 0); |
| 441 | pri[(x / 2 + state->bgscrollx) & 0x1ff] |= 2; |
| 405 | 442 | } |
| 406 | 443 | } |
| 407 | 444 | } |
| r7882 | r7883 | |
| 413 | 450 | |
| 414 | 451 | VIDEO_UPDATE( bigtwin ) |
| 415 | 452 | { |
| 416 | | bitmap_fill(screen->machine->priority_bitmap,cliprect,0); |
| 453 | playmark_state *state = (playmark_state *)screen->machine->driver_data; |
| 417 | 454 | |
| 418 | | tilemap_draw(bitmap,cliprect,fg_tilemap,0,0); |
| 419 | | if (bg_enable) |
| 455 | bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); |
| 456 | |
| 457 | tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 0); |
| 458 | if (state->bg_enable) |
| 420 | 459 | draw_bitmap(screen->machine, bitmap, cliprect); |
| 421 | | draw_sprites(screen->machine, bitmap,cliprect,4); |
| 422 | | tilemap_draw(bitmap,cliprect,tx_tilemap,0,0); |
| 460 | draw_sprites(screen->machine, bitmap, cliprect, 4); |
| 461 | tilemap_draw(bitmap, cliprect, state->tx_tilemap, 0, 0); |
| 423 | 462 | return 0; |
| 424 | 463 | } |
| 425 | 464 | |
| 426 | 465 | VIDEO_UPDATE( excelsr ) |
| 427 | 466 | { |
| 428 | | bitmap_fill(screen->machine->priority_bitmap,cliprect,0); |
| 467 | playmark_state *state = (playmark_state *)screen->machine->driver_data; |
| 429 | 468 | |
| 430 | | tilemap_draw(bitmap,cliprect,fg_tilemap,0,1); |
| 431 | | if (bg_enable) |
| 469 | bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); |
| 470 | |
| 471 | tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 1); |
| 472 | if (state->bg_enable) |
| 432 | 473 | draw_bitmap(screen->machine, bitmap, cliprect); |
| 433 | | tilemap_draw(bitmap,cliprect,tx_tilemap,0,4); |
| 434 | | draw_sprites(screen->machine,bitmap,cliprect,2); |
| 474 | tilemap_draw(bitmap, cliprect, state->tx_tilemap, 0, 4); |
| 475 | draw_sprites(screen->machine, bitmap, cliprect, 2); |
| 435 | 476 | return 0; |
| 436 | 477 | } |
| 437 | 478 | |
| 438 | 479 | VIDEO_UPDATE( wbeachvl ) |
| 439 | 480 | { |
| 440 | | if (fg_rowscroll_enable) |
| 481 | playmark_state *state = (playmark_state *)screen->machine->driver_data; |
| 482 | |
| 483 | if (state->fg_rowscroll_enable) |
| 441 | 484 | { |
| 442 | 485 | int i; |
| 443 | 486 | |
| 444 | | tilemap_set_scroll_rows(fg_tilemap,512); |
| 445 | | for (i = 0;i < 256;i++) |
| 446 | | tilemap_set_scrollx(fg_tilemap,i+1,wbeachvl_rowscroll[8*i]); |
| 487 | tilemap_set_scroll_rows(state->fg_tilemap, 512); |
| 488 | for (i = 0; i < 256; i++) |
| 489 | tilemap_set_scrollx(state->fg_tilemap, i + 1, state->rowscroll[8 * i]); |
| 447 | 490 | } |
| 448 | 491 | else |
| 449 | 492 | { |
| 450 | | tilemap_set_scroll_rows(fg_tilemap,1); |
| 451 | | tilemap_set_scrollx(fg_tilemap,0,fgscrollx); |
| 493 | tilemap_set_scroll_rows(state->fg_tilemap, 1); |
| 494 | tilemap_set_scrollx(state->fg_tilemap, 0, state->fgscrollx); |
| 452 | 495 | } |
| 453 | 496 | |
| 454 | | bitmap_fill(screen->machine->priority_bitmap,cliprect,0); |
| 497 | bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); |
| 455 | 498 | |
| 456 | | tilemap_draw(bitmap,cliprect,bg_tilemap,0,1); |
| 457 | | tilemap_draw(bitmap,cliprect,fg_tilemap,0,2); |
| 458 | | draw_sprites(screen->machine,bitmap,cliprect,0); |
| 459 | | tilemap_draw(bitmap,cliprect,tx_tilemap,0,0); |
| 499 | tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 1); |
| 500 | tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 2); |
| 501 | draw_sprites(screen->machine, bitmap, cliprect, 0); |
| 502 | tilemap_draw(bitmap, cliprect, state->tx_tilemap, 0, 0); |
| 460 | 503 | return 0; |
| 461 | 504 | } |
| 462 | 505 | |
| 463 | 506 | VIDEO_UPDATE( hrdtimes ) |
| 464 | 507 | { |
| 465 | | bitmap_fill(screen->machine->priority_bitmap,cliprect,0); |
| 508 | playmark_state *state = (playmark_state *)screen->machine->driver_data; |
| 466 | 509 | |
| 510 | bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); |
| 511 | |
| 467 | 512 | // video enabled |
| 468 | | if(playmark_scroll[6] & 1) |
| 513 | if (state->scroll[6] & 1) |
| 469 | 514 | { |
| 470 | | tilemap_draw(bitmap,cliprect,bg_tilemap,0,1); |
| 471 | | tilemap_draw(bitmap,cliprect,fg_tilemap,0,2); |
| 472 | | draw_sprites(screen->machine,bitmap,cliprect,2); |
| 473 | | tilemap_draw(bitmap,cliprect,tx_tilemap,0,0); |
| 515 | tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 1); |
| 516 | tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 2); |
| 517 | draw_sprites(screen->machine, bitmap, cliprect, 2); |
| 518 | tilemap_draw(bitmap, cliprect, state->tx_tilemap, 0, 0); |
| 474 | 519 | } |
| 475 | 520 | else |
| 476 | | bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine)); |
| 521 | bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine)); |
| 477 | 522 | return 0; |
| 478 | 523 | } |
src/mame/drivers/playmark.c
| r7882 | r7883 | |
| 47 | 47 | #include "includes/playmark.h" |
| 48 | 48 | |
| 49 | 49 | |
| 50 | | static UINT16 playmark_snd_command; |
| 51 | | static UINT16 playmark_snd_flag; |
| 52 | | static UINT8 playmark_oki_control; |
| 53 | | static UINT8 playmark_oki_command; |
| 54 | | |
| 55 | | |
| 56 | 50 | static WRITE16_HANDLER( coinctrl_w ) |
| 57 | 51 | { |
| 58 | 52 | if (ACCESSING_BITS_8_15) |
| 59 | 53 | { |
| 60 | | coin_counter_w(space->machine, 0,data & 0x0100); |
| 61 | | coin_counter_w(space->machine, 1,data & 0x0200); |
| 54 | coin_counter_w(space->machine, 0, data & 0x0100); |
| 55 | coin_counter_w(space->machine, 1, data & 0x0200); |
| 62 | 56 | } |
| 63 | 57 | if (data & 0xfcff) |
| 64 | | logerror("Writing %04x to unknown coin control bits\n",data); |
| 58 | logerror("Writing %04x to unknown coin control bits\n", data); |
| 65 | 59 | } |
| 66 | 60 | |
| 67 | 61 | |
| r7882 | r7883 | |
| 86 | 80 | |
| 87 | 81 | static WRITE16_HANDLER( wbeachvl_coin_eeprom_w ) |
| 88 | 82 | { |
| 83 | playmark_state *state = (playmark_state *)space->machine->driver_data; |
| 84 | |
| 89 | 85 | if (ACCESSING_BITS_0_7) |
| 90 | 86 | { |
| 91 | | running_device *eeprom = devtag_get_device(space->machine, "eeprom"); |
| 92 | | |
| 93 | 87 | /* bits 0-3 are coin counters? (only 0 used?) */ |
| 94 | | coin_counter_w(space->machine, 0,data & 0x01); |
| 95 | | coin_counter_w(space->machine, 1,data & 0x02); |
| 96 | | coin_counter_w(space->machine, 2,data & 0x04); |
| 97 | | coin_counter_w(space->machine, 3,data & 0x08); |
| 88 | coin_counter_w(space->machine, 0, data & 0x01); |
| 89 | coin_counter_w(space->machine, 1, data & 0x02); |
| 90 | coin_counter_w(space->machine, 2, data & 0x04); |
| 91 | coin_counter_w(space->machine, 3, data & 0x08); |
| 98 | 92 | |
| 99 | 93 | /* bits 5-7 control EEPROM */ |
| 100 | | eeprom_set_cs_line(eeprom, (data & 0x20) ? CLEAR_LINE : ASSERT_LINE); |
| 101 | | eeprom_write_bit(eeprom, data & 0x80); |
| 102 | | eeprom_set_clock_line(eeprom, (data & 0x40) ? CLEAR_LINE : ASSERT_LINE); |
| 94 | eeprom_set_cs_line(state->eeprom, (data & 0x20) ? CLEAR_LINE : ASSERT_LINE); |
| 95 | eeprom_write_bit(state->eeprom, data & 0x80); |
| 96 | eeprom_set_clock_line(state->eeprom, (data & 0x40) ? CLEAR_LINE : ASSERT_LINE); |
| 103 | 97 | } |
| 104 | 98 | } |
| 105 | 99 | |
| 106 | 100 | static WRITE16_HANDLER( hotmind_coin_eeprom_w ) |
| 107 | 101 | { |
| 102 | playmark_state *state = (playmark_state *)space->machine->driver_data; |
| 103 | |
| 108 | 104 | if (ACCESSING_BITS_0_7) |
| 109 | 105 | { |
| 110 | | running_device *eeprom = devtag_get_device(space->machine, "eeprom"); |
| 111 | 106 | coin_counter_w(space->machine, 0,data & 0x20); |
| 112 | 107 | |
| 113 | | eeprom_set_cs_line(eeprom, (data & 1) ? CLEAR_LINE : ASSERT_LINE); |
| 114 | | eeprom_write_bit(eeprom, data & 4); |
| 115 | | eeprom_set_clock_line(eeprom, (data & 2) ? ASSERT_LINE : CLEAR_LINE ); |
| 108 | eeprom_set_cs_line(state->eeprom, (data & 1) ? CLEAR_LINE : ASSERT_LINE); |
| 109 | eeprom_write_bit(state->eeprom, data & 4); |
| 110 | eeprom_set_clock_line(state->eeprom, (data & 2) ? ASSERT_LINE : CLEAR_LINE ); |
| 116 | 111 | } |
| 117 | 112 | } |
| 118 | 113 | |
| 119 | 114 | static WRITE16_HANDLER( hrdtimes_coin_w ) |
| 120 | 115 | { |
| 121 | | coin_counter_w(space->machine, 0,data & 0x01); |
| 122 | | coin_counter_w(space->machine, 1,data & 0x02); |
| 116 | coin_counter_w(space->machine, 0, data & 0x01); |
| 117 | coin_counter_w(space->machine, 1, data & 0x02); |
| 123 | 118 | } |
| 124 | 119 | |
| 125 | 120 | static WRITE16_HANDLER( playmark_snd_command_w ) |
| 126 | 121 | { |
| 127 | | if (ACCESSING_BITS_0_7) { |
| 128 | | playmark_snd_command = (data & 0xff); |
| 129 | | playmark_snd_flag = 1; |
| 122 | playmark_state *state = (playmark_state *)space->machine->driver_data; |
| 123 | |
| 124 | if (ACCESSING_BITS_0_7) |
| 125 | { |
| 126 | state->snd_command = (data & 0xff); |
| 127 | state->snd_flag = 1; |
| 130 | 128 | cpu_yield(space->cpu); |
| 131 | 129 | } |
| 132 | 130 | } |
| 133 | 131 | |
| 134 | 132 | static READ8_HANDLER( playmark_snd_command_r ) |
| 135 | 133 | { |
| 134 | playmark_state *state = (playmark_state *)space->machine->driver_data; |
| 136 | 135 | int data = 0; |
| 137 | 136 | |
| 138 | | if ((playmark_oki_control & 0x38) == 0x30) { |
| 139 | | data = playmark_snd_command; |
| 140 | | // logerror("PC$%03x PortB reading %02x from the 68K\n",cpu_get_previouspc(space->cpu),data); |
| 137 | if ((state->oki_control & 0x38) == 0x30) |
| 138 | { |
| 139 | data = state->snd_command; |
| 140 | // logerror("PC$%03x PortB reading %02x from the 68K\n", cpu_get_previouspc(space->cpu), data); |
| 141 | 141 | } |
| 142 | | else if ((playmark_oki_control & 0x38) == 0x28) { |
| 143 | | data = (okim6295_r(devtag_get_device(space->machine, "oki"),0) & 0x0f); |
| 144 | | // logerror("PC$%03x PortB reading %02x from the OKI status port\n",cpu_get_previouspc(space->cpu),data); |
| 142 | else if ((state->oki_control & 0x38) == 0x28) |
| 143 | { |
| 144 | data = (okim6295_r(state->oki, 0) & 0x0f); |
| 145 | // logerror("PC$%03x PortB reading %02x from the OKI status port\n", cpu_get_previouspc(space->cpu), data); |
| 145 | 146 | } |
| 146 | 147 | |
| 147 | 148 | return data; |
| r7882 | r7883 | |
| 149 | 150 | |
| 150 | 151 | static READ8_HANDLER( playmark_snd_flag_r ) |
| 151 | 152 | { |
| 152 | | if (playmark_snd_flag) { |
| 153 | | playmark_snd_flag = 0; |
| 153 | playmark_state *state = (playmark_state *)space->machine->driver_data; |
| 154 | |
| 155 | if (state->snd_flag) |
| 156 | { |
| 157 | state->snd_flag = 0; |
| 154 | 158 | return 0x00; |
| 155 | 159 | } |
| 156 | 160 | |
| r7882 | r7883 | |
| 160 | 164 | |
| 161 | 165 | static WRITE8_DEVICE_HANDLER( playmark_oki_banking_w ) |
| 162 | 166 | { |
| 163 | | static int old_bank = 0; |
| 167 | playmark_state *state = (playmark_state *)device->machine->driver_data; |
| 164 | 168 | |
| 165 | | if(old_bank != (data & 7)) |
| 169 | if (state->old_oki_bank != (data & 7)) |
| 166 | 170 | { |
| 167 | | old_bank = data & 7; |
| 171 | state->old_oki_bank = data & 7; |
| 168 | 172 | |
| 169 | | if(((old_bank - 1) * 0x40000) < memory_region_length(device->machine, "oki")) |
| 173 | if (((state->old_oki_bank - 1) * 0x40000) < memory_region_length(device->machine, "oki")) |
| 170 | 174 | { |
| 171 | | okim6295_set_bank_base(device, 0x40000 * (old_bank - 1)); |
| 175 | okim6295_set_bank_base(device, 0x40000 * (state->old_oki_bank - 1)); |
| 172 | 176 | } |
| 173 | 177 | } |
| 174 | 178 | } |
| 175 | 179 | |
| 176 | 180 | static WRITE8_HANDLER( playmark_oki_w ) |
| 177 | 181 | { |
| 178 | | playmark_oki_command = data; |
| 182 | playmark_state *state = (playmark_state *)space->machine->driver_data; |
| 183 | state->oki_command = data; |
| 179 | 184 | } |
| 180 | 185 | |
| 181 | 186 | static WRITE8_DEVICE_HANDLER( playmark_snd_control_w ) |
| 182 | 187 | { |
| 188 | playmark_state *state = (playmark_state *)device->machine->driver_data; |
| 183 | 189 | // const address_space *space = cputag_get_address_space(device->machine, "audiocpu", ADDRESS_SPACE_PROGRAM); |
| 184 | 190 | |
| 185 | 191 | /* This port controls communications to and from the 68K, and the OKI |
| r7882 | r7883 | |
| 195 | 201 | 1 Not used |
| 196 | 202 | 0 Not used |
| 197 | 203 | */ |
| 198 | | playmark_oki_control = data; |
| 204 | state->oki_control = data; |
| 199 | 205 | |
| 200 | 206 | if ((data & 0x38) == 0x18) |
| 201 | 207 | { |
| 202 | | // logerror("PC$%03x Writing %02x to OKI1, PortC=%02x, Code=%02x\n",cpu_get_previouspc(space->cpu),playmark_oki_command,playmark_oki_control,playmark_snd_command); |
| 203 | | okim6295_w(device, 0, playmark_oki_command); |
| 208 | // logerror("PC$%03x Writing %02x to OKI1, PortC=%02x, Code=%02x\n",cpu_get_previouspc(space->cpu),playmark_oki_command,playmark_oki_control,playmark_snd_command); |
| 209 | okim6295_w(device, 0, state->oki_command); |
| 204 | 210 | } |
| 205 | 211 | } |
| 206 | 212 | |
| r7882 | r7883 | |
| 216 | 222 | static ADDRESS_MAP_START( bigtwin_main_map, ADDRESS_SPACE_PROGRAM, 16 ) |
| 217 | 223 | AM_RANGE(0x000000, 0x0fffff) AM_ROM |
| 218 | 224 | AM_RANGE(0x304000, 0x304001) AM_NOP /* watchdog? irq ack? */ |
| 219 | | AM_RANGE(0x440000, 0x4403ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) |
| 220 | | AM_RANGE(0x500000, 0x500fff) AM_WRITE(wbeachvl_fgvideoram_w) AM_BASE(&wbeachvl_videoram2) |
| 225 | AM_RANGE(0x440000, 0x4403ff) AM_RAM AM_BASE_SIZE_MEMBER(playmark_state, spriteram, spriteram_size) |
| 226 | AM_RANGE(0x500000, 0x500fff) AM_WRITE(wbeachvl_fgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram2) |
| 221 | 227 | AM_RANGE(0x501000, 0x501fff) AM_WRITENOP /* unused RAM? */ |
| 222 | | AM_RANGE(0x502000, 0x503fff) AM_WRITE(wbeachvl_txvideoram_w) AM_BASE(&wbeachvl_videoram1) |
| 228 | AM_RANGE(0x502000, 0x503fff) AM_WRITE(wbeachvl_txvideoram_w) AM_BASE_MEMBER(playmark_state, videoram1) |
| 223 | 229 | AM_RANGE(0x504000, 0x50ffff) AM_WRITENOP /* unused RAM? */ |
| 224 | 230 | AM_RANGE(0x510000, 0x51000b) AM_WRITE(bigtwin_scroll_w) |
| 225 | 231 | AM_RANGE(0x51000c, 0x51000d) AM_WRITENOP /* always 3? */ |
| 226 | | AM_RANGE(0x600000, 0x67ffff) AM_RAM AM_BASE(&bigtwin_bgvideoram) |
| 232 | AM_RANGE(0x600000, 0x67ffff) AM_RAM AM_BASE_MEMBER(playmark_state, bgvideoram) |
| 227 | 233 | AM_RANGE(0x700010, 0x700011) AM_READ_PORT("SYSTEM") |
| 228 | 234 | AM_RANGE(0x700012, 0x700013) AM_READ_PORT("P1") |
| 229 | 235 | AM_RANGE(0x700014, 0x700015) AM_READ_PORT("P2") |
| r7882 | r7883 | |
| 238 | 244 | |
| 239 | 245 | static ADDRESS_MAP_START( wbeachvl_main_map, ADDRESS_SPACE_PROGRAM, 16 ) |
| 240 | 246 | AM_RANGE(0x000000, 0x07ffff) AM_ROM |
| 241 | | AM_RANGE(0x440000, 0x440fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) |
| 242 | | AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(wbeachvl_bgvideoram_w) AM_BASE(&wbeachvl_videoram3) |
| 243 | | AM_RANGE(0x504000, 0x505fff) AM_RAM_WRITE(wbeachvl_fgvideoram_w) AM_BASE(&wbeachvl_videoram2) |
| 244 | | AM_RANGE(0x508000, 0x509fff) AM_RAM_WRITE(wbeachvl_txvideoram_w) AM_BASE(&wbeachvl_videoram1) |
| 245 | | AM_RANGE(0x50f000, 0x50ffff) AM_RAM AM_BASE(&wbeachvl_rowscroll) |
| 247 | AM_RANGE(0x440000, 0x440fff) AM_RAM AM_BASE_SIZE_MEMBER(playmark_state, spriteram, spriteram_size) |
| 248 | AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(wbeachvl_bgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram3) |
| 249 | AM_RANGE(0x504000, 0x505fff) AM_RAM_WRITE(wbeachvl_fgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram2) |
| 250 | AM_RANGE(0x508000, 0x509fff) AM_RAM_WRITE(wbeachvl_txvideoram_w) AM_BASE_MEMBER(playmark_state, videoram1) |
| 251 | AM_RANGE(0x50f000, 0x50ffff) AM_RAM AM_BASE_MEMBER(playmark_state, rowscroll) |
| 246 | 252 | AM_RANGE(0x510000, 0x51000b) AM_WRITE(wbeachvl_scroll_w) |
| 247 | 253 | AM_RANGE(0x51000c, 0x51000d) AM_WRITENOP /* 2 and 3 */ |
| 248 | 254 | // AM_RANGE(0x700000, 0x700001) ?? written on startup |
| r7882 | r7883 | |
| 261 | 267 | static ADDRESS_MAP_START( excelsr_main_map, ADDRESS_SPACE_PROGRAM, 16 ) |
| 262 | 268 | AM_RANGE(0x000000, 0x2fffff) AM_ROM |
| 263 | 269 | AM_RANGE(0x304000, 0x304001) AM_WRITENOP /* watchdog? irq ack? */ |
| 264 | | AM_RANGE(0x440000, 0x440cff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) |
| 265 | | AM_RANGE(0x500000, 0x500fff) AM_RAM_WRITE(wbeachvl_fgvideoram_w) AM_BASE(&wbeachvl_videoram2) |
| 266 | | AM_RANGE(0x501000, 0x501fff) AM_RAM_WRITE(wbeachvl_txvideoram_w) AM_BASE(&wbeachvl_videoram1) |
| 270 | AM_RANGE(0x440000, 0x440cff) AM_RAM AM_BASE_SIZE_MEMBER(playmark_state, spriteram, spriteram_size) |
| 271 | AM_RANGE(0x500000, 0x500fff) AM_RAM_WRITE(wbeachvl_fgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram2) |
| 272 | AM_RANGE(0x501000, 0x501fff) AM_RAM_WRITE(wbeachvl_txvideoram_w) AM_BASE_MEMBER(playmark_state, videoram1) |
| 267 | 273 | AM_RANGE(0x510000, 0x51000b) AM_WRITE(excelsr_scroll_w) |
| 268 | 274 | AM_RANGE(0x51000c, 0x51000d) AM_WRITENOP /* 2 and 3 */ |
| 269 | | AM_RANGE(0x600000, 0x67ffff) AM_RAM AM_BASE(&bigtwin_bgvideoram) |
| 275 | AM_RANGE(0x600000, 0x67ffff) AM_RAM AM_BASE_MEMBER(playmark_state, bgvideoram) |
| 270 | 276 | AM_RANGE(0x700010, 0x700011) AM_READ_PORT("SYSTEM") |
| 271 | 277 | AM_RANGE(0x700012, 0x700013) AM_READ_PORT("P1") |
| 272 | 278 | AM_RANGE(0x700014, 0x700015) AM_READ_PORT("P2") |
| r7882 | r7883 | |
| 280 | 286 | |
| 281 | 287 | static ADDRESS_MAP_START( hotmind_main_map, ADDRESS_SPACE_PROGRAM, 16 ) |
| 282 | 288 | AM_RANGE(0x000000, 0x03ffff) AM_ROM |
| 283 | | AM_RANGE(0x100000, 0x103fff) AM_RAM_WRITE(hrdtimes_bgvideoram_w) AM_BASE(&wbeachvl_videoram3) |
| 284 | | AM_RANGE(0x104000, 0x107fff) AM_RAM_WRITE(hrdtimes_fgvideoram_w) AM_BASE(&wbeachvl_videoram2) |
| 285 | | AM_RANGE(0x108000, 0x10ffff) AM_RAM_WRITE(hrdtimes_txvideoram_w) AM_BASE(&wbeachvl_videoram1) |
| 289 | AM_RANGE(0x100000, 0x103fff) AM_RAM_WRITE(hrdtimes_bgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram3) |
| 290 | AM_RANGE(0x104000, 0x107fff) AM_RAM_WRITE(hrdtimes_fgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram2) |
| 291 | AM_RANGE(0x108000, 0x10ffff) AM_RAM_WRITE(hrdtimes_txvideoram_w) AM_BASE_MEMBER(playmark_state, videoram1) |
| 286 | 292 | AM_RANGE(0x110000, 0x11000d) AM_WRITE(hrdtimes_scroll_w) |
| 287 | | AM_RANGE(0x200000, 0x200fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) |
| 293 | AM_RANGE(0x200000, 0x200fff) AM_RAM AM_BASE_SIZE_MEMBER(playmark_state, spriteram, spriteram_size) |
| 288 | 294 | AM_RANGE(0x280000, 0x2807ff) AM_RAM_WRITE(bigtwin_paletteram_w) AM_BASE_GENERIC(paletteram) |
| 289 | 295 | AM_RANGE(0x300010, 0x300011) AM_READ_PORT("SYSTEM") |
| 290 | 296 | AM_RANGE(0x300012, 0x300013) AM_READ_PORT("P1") |
| r7882 | r7883 | |
| 300 | 306 | AM_RANGE(0x000000, 0x07ffff) AM_ROM |
| 301 | 307 | AM_RANGE(0x080000, 0x0bffff) AM_RAM |
| 302 | 308 | AM_RANGE(0x0c0000, 0x0fffff) AM_ROM AM_REGION("maincpu", 0x0c0000) |
| 303 | | AM_RANGE(0x100000, 0x103fff) AM_RAM_WRITE(hrdtimes_bgvideoram_w) AM_BASE(&wbeachvl_videoram3) |
| 304 | | AM_RANGE(0x104000, 0x107fff) AM_RAM_WRITE(hrdtimes_fgvideoram_w) AM_BASE(&wbeachvl_videoram2) |
| 305 | | AM_RANGE(0x108000, 0x10ffff) AM_RAM_WRITE(hrdtimes_txvideoram_w) AM_BASE(&wbeachvl_videoram1) |
| 309 | AM_RANGE(0x100000, 0x103fff) AM_RAM_WRITE(hrdtimes_bgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram3) |
| 310 | AM_RANGE(0x104000, 0x107fff) AM_RAM_WRITE(hrdtimes_fgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram2) |
| 311 | AM_RANGE(0x108000, 0x10ffff) AM_RAM_WRITE(hrdtimes_txvideoram_w) AM_BASE_MEMBER(playmark_state, videoram1) |
| 306 | 312 | AM_RANGE(0x110000, 0x11000d) AM_WRITE(hrdtimes_scroll_w) |
| 307 | | AM_RANGE(0x200000, 0x200fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) |
| 313 | AM_RANGE(0x200000, 0x200fff) AM_RAM AM_BASE_SIZE_MEMBER(playmark_state, spriteram, spriteram_size) |
| 308 | 314 | AM_RANGE(0x280000, 0x2807ff) AM_RAM_WRITE(bigtwin_paletteram_w) AM_BASE_GENERIC(paletteram) |
| 309 | 315 | AM_RANGE(0x280800, 0x280fff) AM_RAM // unused |
| 310 | 316 | AM_RANGE(0x300010, 0x300011) AM_READ_PORT("SYSTEM") |
| r7882 | r7883 | |
| 894 | 900 | |
| 895 | 901 | |
| 896 | 902 | static GFXDECODE_START( hrdtimes ) |
| 897 | | GFXDECODE_ENTRY( "gfx2", 0, hrdtimes_tilelayout, 0x200, 32 ) /* colors 0x200-0x2ff */ |
| 898 | | GFXDECODE_ENTRY( "gfx1", 0, hrdtimes_tilelayout, 0x000, 16 ) /* colors 0x000-0x0ff */ |
| 903 | GFXDECODE_ENTRY( "gfx2", 0, hrdtimes_tilelayout, 0x200, 32 ) /* colors 0x200-0x2ff */ |
| 904 | GFXDECODE_ENTRY( "gfx1", 0, hrdtimes_tilelayout, 0x000, 16 ) /* colors 0x000-0x0ff */ |
| 899 | 905 | GFXDECODE_ENTRY( "gfx1", 0, hrdtimes_charlayout, 0x100, 8 ) /* colors 0x100-0x17f */ |
| 900 | 906 | GFXDECODE_END |
| 901 | 907 | |
| 908 | static MACHINE_START( playmark ) |
| 909 | { |
| 910 | playmark_state *state = (playmark_state *)machine->driver_data; |
| 911 | |
| 912 | state->oki = devtag_get_device(machine, "oki"); |
| 913 | state->eeprom = devtag_get_device(machine, "eeprom"); |
| 914 | |
| 915 | state_save_register_global(machine, state->bgscrollx); |
| 916 | state_save_register_global(machine, state->bgscrolly); |
| 917 | state_save_register_global(machine, state->bg_enable); |
| 918 | state_save_register_global(machine, state->bg_full_size); |
| 919 | state_save_register_global(machine, state->fgscrollx); |
| 920 | state_save_register_global(machine, state->fg_rowscroll_enable); |
| 921 | state_save_register_global_array(machine, state->scroll); |
| 922 | |
| 923 | state_save_register_global(machine, state->snd_command); |
| 924 | state_save_register_global(machine, state->snd_flag); |
| 925 | state_save_register_global(machine, state->oki_control); |
| 926 | state_save_register_global(machine, state->oki_command); |
| 927 | state_save_register_global(machine, state->old_oki_bank); |
| 928 | } |
| 929 | |
| 930 | static MACHINE_RESET( playmark ) |
| 931 | { |
| 932 | playmark_state *state = (playmark_state *)machine->driver_data; |
| 933 | |
| 934 | state->bgscrollx = 0; |
| 935 | state->bgscrolly = 0; |
| 936 | state->bg_enable = 0; |
| 937 | state->bg_full_size = 0; |
| 938 | state->fgscrollx = 0; |
| 939 | state->fg_rowscroll_enable = 0; |
| 940 | memset(state->scroll, 0, ARRAY_LENGTH(state->scroll)); |
| 941 | |
| 942 | state->snd_command = 0; |
| 943 | state->oki_control = 0; |
| 944 | state->oki_command = 0; |
| 945 | state->old_oki_bank = 0; |
| 946 | } |
| 947 | |
| 902 | 948 | static MACHINE_DRIVER_START( bigtwin ) |
| 903 | 949 | |
| 950 | /* driver data */ |
| 951 | MDRV_DRIVER_DATA(playmark_state) |
| 952 | |
| 904 | 953 | /* basic machine hardware */ |
| 905 | 954 | MDRV_CPU_ADD("maincpu", M68000, 12000000) /* 12 MHz */ |
| 906 | 955 | MDRV_CPU_PROGRAM_MAP(bigtwin_main_map) |
| r7882 | r7883 | |
| 910 | 959 | /* Program and Data Maps are internal to the MCU */ |
| 911 | 960 | MDRV_CPU_IO_MAP(playmark_sound_io_map) |
| 912 | 961 | |
| 962 | MDRV_MACHINE_START(playmark) |
| 963 | MDRV_MACHINE_RESET(playmark) |
| 964 | |
| 913 | 965 | /* video hardware */ |
| 914 | 966 | MDRV_SCREEN_ADD("screen", RASTER) |
| 915 | 967 | MDRV_SCREEN_REFRESH_RATE(58) |
| r7882 | r7883 | |
| 935 | 987 | |
| 936 | 988 | static MACHINE_DRIVER_START( wbeachvl ) |
| 937 | 989 | |
| 990 | /* driver data */ |
| 991 | MDRV_DRIVER_DATA(playmark_state) |
| 992 | |
| 938 | 993 | /* basic machine hardware */ |
| 939 | 994 | MDRV_CPU_ADD("maincpu", M68000, 12000000) /* 12 MHz */ |
| 940 | 995 | MDRV_CPU_PROGRAM_MAP(wbeachvl_main_map) |
| r7882 | r7883 | |
| 947 | 1002 | MDRV_EEPROM_ADD("eeprom", eeprom_intf) |
| 948 | 1003 | MDRV_EEPROM_DEFAULT_VALUE(0) |
| 949 | 1004 | |
| 1005 | MDRV_MACHINE_START(playmark) |
| 1006 | MDRV_MACHINE_RESET(playmark) |
| 1007 | |
| 950 | 1008 | /* video hardware */ |
| 951 | 1009 | MDRV_SCREEN_ADD("screen", RASTER) |
| 952 | 1010 | MDRV_SCREEN_REFRESH_RATE(58) |
| r7882 | r7883 | |
| 971 | 1029 | |
| 972 | 1030 | static MACHINE_DRIVER_START( excelsr ) |
| 973 | 1031 | |
| 1032 | /* driver data */ |
| 1033 | MDRV_DRIVER_DATA(playmark_state) |
| 1034 | |
| 974 | 1035 | /* basic machine hardware */ |
| 975 | 1036 | MDRV_CPU_ADD("maincpu", M68000, 12000000) /* 12 MHz */ |
| 976 | 1037 | MDRV_CPU_PROGRAM_MAP(excelsr_main_map) |
| r7882 | r7883 | |
| 980 | 1041 | /* Program and Data Maps are internal to the MCU */ |
| 981 | 1042 | MDRV_CPU_IO_MAP(playmark_sound_io_map) |
| 982 | 1043 | |
| 1044 | MDRV_MACHINE_START(playmark) |
| 1045 | MDRV_MACHINE_RESET(playmark) |
| 1046 | |
| 983 | 1047 | /* video hardware */ |
| 984 | 1048 | MDRV_SCREEN_ADD("screen", RASTER) |
| 985 | 1049 | MDRV_SCREEN_REFRESH_RATE(58) |
| r7882 | r7883 | |
| 1004 | 1068 | |
| 1005 | 1069 | static MACHINE_DRIVER_START( hotmind ) |
| 1006 | 1070 | |
| 1071 | /* driver data */ |
| 1072 | MDRV_DRIVER_DATA(playmark_state) |
| 1073 | |
| 1007 | 1074 | /* basic machine hardware */ |
| 1008 | 1075 | MDRV_CPU_ADD("maincpu", M68000, XTAL_24MHz/2) /* verified on pcb */ |
| 1009 | 1076 | MDRV_CPU_PROGRAM_MAP(hotmind_main_map) |
| r7882 | r7883 | |
| 1016 | 1083 | MDRV_EEPROM_ADD("eeprom", eeprom_intf) |
| 1017 | 1084 | MDRV_EEPROM_DEFAULT_VALUE(0) |
| 1018 | 1085 | |
| 1086 | MDRV_MACHINE_START(playmark) |
| 1087 | MDRV_MACHINE_RESET(playmark) |
| 1088 | |
| 1019 | 1089 | /* video hardware */ |
| 1020 | 1090 | MDRV_SCREEN_ADD("screen", RASTER) |
| 1021 | 1091 | MDRV_SCREEN_REFRESH_RATE(58) |
| r7882 | r7883 | |
| 1040 | 1110 | |
| 1041 | 1111 | static MACHINE_DRIVER_START( hrdtimes ) |
| 1042 | 1112 | |
| 1113 | /* driver data */ |
| 1114 | MDRV_DRIVER_DATA(playmark_state) |
| 1115 | |
| 1043 | 1116 | /* basic machine hardware */ |
| 1044 | 1117 | MDRV_CPU_ADD("maincpu", M68000, XTAL_24MHz/2) /* verified on pcb */ |
| 1045 | 1118 | MDRV_CPU_PROGRAM_MAP(hrdtimes_main_map) |
| r7882 | r7883 | |
| 1049 | 1122 | /* Program and Data Maps are internal to the MCU */ |
| 1050 | 1123 | // MDRV_CPU_IO_MAP(playmark_sound_io_map) |
| 1051 | 1124 | |
| 1125 | MDRV_MACHINE_START(playmark) |
| 1126 | MDRV_MACHINE_RESET(playmark) |
| 1127 | |
| 1052 | 1128 | /* video hardware */ |
| 1053 | 1129 | MDRV_SCREEN_ADD("screen", RASTER) |
| 1054 | 1130 | MDRV_SCREEN_REFRESH_RATE(58) |
| r7882 | r7883 | |
| 1391 | 1467 | |
| 1392 | 1468 | static DRIVER_INIT( bigtwin ) |
| 1393 | 1469 | { |
| 1470 | playmark_state *state = (playmark_state *)machine->driver_data; |
| 1394 | 1471 | UINT8 *playmark_PICROM_HEX = memory_region(machine, "user1"); |
| 1395 | 1472 | UINT16 *playmark_PICROM = (UINT16 *)memory_region(machine, "audiocpu"); |
| 1396 | | INT32 offs, data; |
| 1397 | | UINT16 src_pos = 0; |
| 1398 | | UINT16 dst_pos = 0; |
| 1399 | | UINT8 data_hi, data_lo; |
| 1473 | INT32 offs, data; |
| 1474 | UINT16 src_pos = 0; |
| 1475 | UINT16 dst_pos = 0; |
| 1476 | UINT8 data_hi, data_lo; |
| 1400 | 1477 | |
| 1478 | state->snd_flag = 0; |
| 1401 | 1479 | |
| 1402 | | playmark_snd_flag = 0; |
| 1403 | | |
| 1404 | 1480 | /**** Convert the PIC16C57 ASCII HEX dumps to pure HEX ****/ |
| 1405 | 1481 | do |
| 1406 | 1482 | { |
| r7882 | r7883 | |
| 1414 | 1490 | { |
| 1415 | 1491 | data_hi = playmark_asciitohex((playmark_PICROM_HEX[src_pos + offs + 0])); |
| 1416 | 1492 | data_lo = playmark_asciitohex((playmark_PICROM_HEX[src_pos + offs + 1])); |
| 1417 | | if ((data_hi <= 0x0f) && (data_lo <= 0x0f)) { |
| 1418 | | data = (data_hi << 4) | (data_lo << 0); |
| 1493 | if ((data_hi <= 0x0f) && (data_lo <= 0x0f)) |
| 1494 | { |
| 1495 | data = (data_hi << 4) | (data_lo << 0); |
| 1419 | 1496 | data_hi = playmark_asciitohex((playmark_PICROM_HEX[src_pos + offs + 2])); |
| 1420 | 1497 | data_lo = playmark_asciitohex((playmark_PICROM_HEX[src_pos + offs + 3])); |
| 1421 | 1498 | |
| 1422 | | if ((data_hi <= 0x0f) && (data_lo <= 0x0f)) { |
| 1499 | if ((data_hi <= 0x0f) && (data_lo <= 0x0f)) |
| 1500 | { |
| 1423 | 1501 | data |= (data_hi << 12) | (data_lo << 8); |
| 1424 | 1502 | playmark_PICROM[dst_pos] = data; |
| 1425 | 1503 | dst_pos += 1; |
| r7882 | r7883 | |
| 1440 | 1518 | |
| 1441 | 1519 | data_hi = playmark_asciitohex((playmark_PICROM_HEX[src_pos + 0])); |
| 1442 | 1520 | data_lo = playmark_asciitohex((playmark_PICROM_HEX[src_pos + 1])); |
| 1443 | | data = (data_hi << 4) | (data_lo << 0); |
| 1521 | data = (data_hi << 4) | (data_lo << 0); |
| 1444 | 1522 | data_hi = playmark_asciitohex((playmark_PICROM_HEX[src_pos + 2])); |
| 1445 | 1523 | data_lo = playmark_asciitohex((playmark_PICROM_HEX[src_pos + 3])); |
| 1446 | 1524 | data |= (data_hi << 12) | (data_lo << 8); |
| r7882 | r7883 | |
| 1453 | 1531 | } while (src_pos < 0x2d4c); /* 0x2d4c is the size of the HEX rom loaded */ |
| 1454 | 1532 | } |
| 1455 | 1533 | |
| 1456 | | GAME( 1995, bigtwin, 0, bigtwin, bigtwin, bigtwin, ROT0, "Playmark", "Big Twin", GAME_NO_COCKTAIL ) |
| 1457 | | GAME( 1995, wbeachvl, 0, wbeachvl, wbeachvl, 0, ROT0, "Playmark", "World Beach Volley (set 1)", GAME_NO_COCKTAIL | GAME_NO_SOUND ) |
| 1458 | | GAME( 1995, wbeachvl2,wbeachvl, wbeachvl, wbeachvl, 0, ROT0, "Playmark", "World Beach Volley (set 2)", GAME_NO_COCKTAIL | GAME_NO_SOUND ) |
| 1459 | | GAME( 1996, excelsr, 0, excelsr, excelsr, bigtwin, ROT0, "Playmark", "Excelsior", 0 ) |
| 1460 | | GAME( 1995, hotmind, 0, hotmind, hotmind, bigtwin, ROT0, "Playmark", "Hot Mind", 0 ) |
| 1461 | | GAME( 1994, hrdtimes, 0, hrdtimes, hrdtimes, 0, ROT0, "Playmark", "Hard Times (set 1)", GAME_NO_SOUND ) |
| 1462 | | GAME( 1994, hrdtimesa,hrdtimes, hrdtimes, hrdtimes, 0, ROT0, "Playmark", "Hard Times (set 2)", GAME_NO_SOUND ) |
| 1534 | GAME( 1995, bigtwin, 0, bigtwin, bigtwin, bigtwin, ROT0, "Playmark", "Big Twin", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
| 1535 | GAME( 1995, wbeachvl, 0, wbeachvl, wbeachvl, 0, ROT0, "Playmark", "World Beach Volley (set 1)", GAME_NO_COCKTAIL | GAME_NO_SOUND | GAME_SUPPORTS_SAVE ) |
| 1536 | GAME( 1995, wbeachvl2, wbeachvl, wbeachvl, wbeachvl, 0, ROT0, "Playmark", "World Beach Volley (set 2)", GAME_NO_COCKTAIL | GAME_NO_SOUND | GAME_SUPPORTS_SAVE ) |
| 1537 | GAME( 1996, excelsr, 0, excelsr, excelsr, bigtwin, ROT0, "Playmark", "Excelsior", GAME_SUPPORTS_SAVE ) |
| 1538 | GAME( 1995, hotmind, 0, hotmind, hotmind, bigtwin, ROT0, "Playmark", "Hot Mind", GAME_SUPPORTS_SAVE ) |
| 1539 | GAME( 1994, hrdtimes, 0, hrdtimes, hrdtimes, 0, ROT0, "Playmark", "Hard Times (set 1)", GAME_NO_SOUND | GAME_SUPPORTS_SAVE ) |
| 1540 | GAME( 1994, hrdtimesa, hrdtimes, hrdtimes, hrdtimes, 0, ROT0, "Playmark", "Hard Times (set 2)", GAME_NO_SOUND | GAME_SUPPORTS_SAVE ) |
src/mame/drivers/vicdual.c
| r7882 | r7883 | |
| 609 | 609 | INPUT_PORTS_END |
| 610 | 610 | |
| 611 | 611 | |
| 612 | |
| 613 | |
| 612 | 614 | static INPUT_PORTS_START( supcrash ) |
| 613 | 615 | PORT_START("IN0") |
| 614 | 616 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY |
| r7882 | r7883 | |
| 1562 | 1564 | PORT_COIN |
| 1563 | 1565 | INPUT_PORTS_END |
| 1564 | 1566 | |
| 1567 | /* not verified */ |
| 1568 | static INPUT_PORTS_START( carnivalh ) |
| 1569 | PORT_START("IN0") |
| 1570 | PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) ) |
| 1571 | PORT_DIPSETTING( 0x00, "3" ) |
| 1572 | PORT_DIPSETTING( 0x01, "4" ) |
| 1573 | PORT_DIPSETTING( 0x02, "5" ) |
| 1574 | PORT_DIPSETTING( 0x03, "6" ) |
| 1575 | PORT_DIPNAME( 0x04, 0x00, DEF_STR( Demo_Sounds ) ) |
| 1576 | PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) |
| 1577 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1578 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) |
| 1579 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY |
| 1580 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY |
| 1581 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY |
| 1582 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY |
| 1565 | 1583 | |
| 1584 | PORT_START("IN1") |
| 1585 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(vicdual_get_64v, NULL) |
| 1586 | PORT_BIT( 0x7e, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
| 1587 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(vicdual_read_coin_status, NULL) |
| 1588 | |
| 1589 | PORT_CABINET_COLOR_OR_BW |
| 1590 | |
| 1591 | PORT_COIN |
| 1592 | INPUT_PORTS_END |
| 1593 | |
| 1594 | |
| 1566 | 1595 | static INPUT_PORTS_START( carnvckt ) |
| 1567 | 1596 | PORT_START("IN0") |
| 1568 | 1597 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */ |
| r7882 | r7883 | |
| 1901 | 1930 | |
| 1902 | 1931 | MACHINE_DRIVER_END |
| 1903 | 1932 | |
| 1933 | static MACHINE_DRIVER_START( carnivalh ) |
| 1904 | 1934 | |
| 1935 | /* basic machine hardware */ |
| 1936 | MDRV_IMPORT_FROM(vicdual_dualgame_root) |
| 1937 | MDRV_CPU_MODIFY("maincpu") |
| 1938 | MDRV_CPU_IO_MAP(headon_io_map) |
| 1939 | |
| 1940 | /* audio hardware */ |
| 1941 | MDRV_SPEAKER_STANDARD_MONO("mono") |
| 1942 | MDRV_IMPORT_FROM(carnival_audio) |
| 1943 | |
| 1944 | MACHINE_DRIVER_END |
| 1945 | |
| 1946 | |
| 1947 | |
| 1905 | 1948 | static MACHINE_DRIVER_START( tranqgun ) |
| 1906 | 1949 | |
| 1907 | 1950 | /* basic machine hardware */ |
| r7882 | r7883 | |
| 2430 | 2473 | |
| 2431 | 2474 | ROM_START( nsub ) |
| 2432 | 2475 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 2433 | | ROM_LOAD( "epr268.48", 0x0000, 0x0800, CRC(485b4704) SHA1(d3989cfe5f8d723bc1a6be185614d138666912d2) ) |
| 2434 | | ROM_LOAD( "epr269.47", 0x0800, 0x0800, CRC(32774ac9) SHA1(0a2c209f627a8d703c02e75c361c363272d1f435) ) |
| 2435 | | ROM_LOAD( "epr270.46", 0x1000, 0x0800, CRC(af7ca40a) SHA1(c0f5732079a51979758f3a159084b84be8b2ad3b) ) |
| 2436 | | ROM_LOAD( "epr271.45", 0x1800, 0x0800, CRC(3f9c180b) SHA1(7438454a348b36d1f5ea59f179f715b827244142) ) |
| 2437 | | ROM_LOAD( "epr272.44", 0x2000, 0x0800, CRC(d818aa51) SHA1(1d3ca550f597c4924b9a805fa955a4a8ff557769) ) |
| 2438 | | ROM_LOAD( "epr273.43", 0x2800, 0x0800, CRC(03a6f12a) SHA1(1eefd4607a718c291b29f1b0a6adf0367840b242) ) |
| 2439 | | ROM_LOAD( "epr274.42", 0x3000, 0x0800, CRC(d69eb098) SHA1(fd3e67d18b5891aa65aab5967d49810c5d88dcee) ) |
| 2440 | | ROM_LOAD( "epr275.41", 0x3800, 0x0800, CRC(1c7d90cc) SHA1(8483825d9811c925407328836ae10f98b011c3dd) ) |
| 2476 | ROM_LOAD( "epr-268.u48", 0x0000, 0x0800, CRC(485b4704) SHA1(d3989cfe5f8d723bc1a6be185614d138666912d2) ) |
| 2477 | ROM_LOAD( "epr-269.u47", 0x0800, 0x0800, CRC(32774ac9) SHA1(0a2c209f627a8d703c02e75c361c363272d1f435) ) |
| 2478 | ROM_LOAD( "epr-270.u46", 0x1000, 0x0800, CRC(af7ca40a) SHA1(c0f5732079a51979758f3a159084b84be8b2ad3b) ) |
| 2479 | ROM_LOAD( "epr-271.u45", 0x1800, 0x0800, CRC(3f9c180b) SHA1(7438454a348b36d1f5ea59f179f715b827244142) ) |
| 2480 | ROM_LOAD( "epr-272.u44", 0x2000, 0x0800, CRC(d818aa51) SHA1(1d3ca550f597c4924b9a805fa955a4a8ff557769) ) |
| 2481 | ROM_LOAD( "epr-273.u43", 0x2800, 0x0800, CRC(03a6f12a) SHA1(1eefd4607a718c291b29f1b0a6adf0367840b242) ) |
| 2482 | ROM_LOAD( "epr-274.u42", 0x3000, 0x0800, CRC(d69eb098) SHA1(fd3e67d18b5891aa65aab5967d49810c5d88dcee) ) |
| 2483 | ROM_LOAD( "epr-275.u41", 0x3800, 0x0800, CRC(1c7d90cc) SHA1(8483825d9811c925407328836ae10f98b011c3dd) ) |
| 2441 | 2484 | |
| 2442 | 2485 | ROM_REGION( 0x0020, "proms", 0 ) |
| 2443 | | ROM_LOAD( "pr69.11", 0x0000, 0x0020, CRC(c94dd091) SHA1(f88cfb033ff83adb7375652be1fa32ba489d8418) ) |
| 2486 | ROM_LOAD( "pr-69.u11", 0x0000, 0x0020, CRC(c94dd091) SHA1(f88cfb033ff83adb7375652be1fa32ba489d8418) ) |
| 2444 | 2487 | |
| 2445 | 2488 | ROM_REGION( 0x0040, "user1", 0 ) /* timing PROMs */ |
| 2446 | 2489 | ROM_LOAD( "pr33.u82", 0x0000, 0x0020, CRC(e60a7960) SHA1(b8b8716e859c57c35310efc4594262afedb84823) ) /* control PROM */ |
| r7882 | r7883 | |
| 2487 | 2530 | |
| 2488 | 2531 | ROM_START( sspaceat3 ) |
| 2489 | 2532 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 2490 | | ROM_LOAD( "epr115.u48", 0x0000, 0x0400, CRC(9bc36d80) SHA1(519b3f810b133ac82f066851626b73460956a807) ) |
| 2491 | | ROM_LOAD( "epr116.u47", 0x0400, 0x0400, CRC(2c2750b3) SHA1(eab297678e6ee45d6f723d8ff7e6a29086ad4c78) ) |
| 2492 | | ROM_LOAD( "epr117.u46", 0x0800, 0x0400, CRC(fa7c2cc0) SHA1(26e4f2c8599d16f1c7ec4bfb0a5a3dc709901045) ) |
| 2493 | | ROM_LOAD( "epr118.u45", 0x0c00, 0x0400, CRC(273884ae) SHA1(9efae4acb9ba9bdef0fb58c2a16e0092c6c1a2ba) ) |
| 2494 | | ROM_LOAD( "epr119.u44", 0x1000, 0x0400, CRC(1b53c6de) SHA1(7d8f3f5026e7d1a3b78a54c9c1acbb50a4f02c94) ) |
| 2495 | | ROM_LOAD( "epr120.u43", 0x1400, 0x0400, CRC(60add585) SHA1(01d78d5cbad680b8ad7eb39f53eefad148d48ee2) ) |
| 2496 | | ROM_LOAD( "epr121.u42", 0x1800, 0x0400, CRC(0979f72b) SHA1(244e80552b905df5484bb52100b2e46859fd2cf6) ) |
| 2497 | | ROM_LOAD( "epr122.u41", 0x1c00, 0x0400, CRC(45cb3486) SHA1(0e9d5e8dd43643588989354847483283487b9a75) ) |
| 2533 | ROM_LOAD( "epr-115.u48", 0x0000, 0x0400, CRC(9bc36d80) SHA1(519b3f810b133ac82f066851626b73460956a807) ) |
| 2534 | ROM_LOAD( "epr-116.u47", 0x0400, 0x0400, CRC(2c2750b3) SHA1(eab297678e6ee45d6f723d8ff7e6a29086ad4c78) ) |
| 2535 | ROM_LOAD( "epr-117.u46", 0x0800, 0x0400, CRC(fa7c2cc0) SHA1(26e4f2c8599d16f1c7ec4bfb0a5a3dc709901045) ) |
| 2536 | ROM_LOAD( "epr-118.u45", 0x0c00, 0x0400, CRC(273884ae) SHA1(9efae4acb9ba9bdef0fb58c2a16e0092c6c1a2ba) ) |
| 2537 | ROM_LOAD( "epr-119.u44", 0x1000, 0x0400, CRC(1b53c6de) SHA1(7d8f3f5026e7d1a3b78a54c9c1acbb50a4f02c94) ) |
| 2538 | ROM_LOAD( "epr-120.u43", 0x1400, 0x0400, CRC(60add585) SHA1(01d78d5cbad680b8ad7eb39f53eefad148d48ee2) ) |
| 2539 | ROM_LOAD( "epr-121.u42", 0x1800, 0x0400, CRC(0979f72b) SHA1(244e80552b905df5484bb52100b2e46859fd2cf6) ) |
| 2540 | ROM_LOAD( "epr-122.u41", 0x1c00, 0x0400, CRC(45cb3486) SHA1(0e9d5e8dd43643588989354847483283487b9a75) ) |
| 2498 | 2541 | |
| 2499 | 2542 | ROM_REGION( 0x0020, "proms", 0 ) |
| 2500 | 2543 | ROM_LOAD( "316-0138.u44", 0x0000, 0x0020, CRC(67104ea9) SHA1(26b6bd2a1973b83bb9af4e3385d8cb14cb3f62f2) ) |
| r7882 | r7883 | |
| 2811 | 2854 | |
| 2812 | 2855 | ROM_START( sspacaho ) |
| 2813 | 2856 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 2814 | | ROM_LOAD( "epr00001.bin", 0x0000, 0x0800, CRC(ba62f57a) SHA1(7cfc079c6afe317b6c389c06802fdf1f83858510) ) |
| 2815 | | ROM_LOAD( "epr00002.bin", 0x0800, 0x0800, CRC(94b3c59c) SHA1(e6ee1c25fb45d03d514421c231d794f9da05f47f) ) |
| 2816 | | ROM_LOAD( "epr00003.bin", 0x1000, 0x0800, CRC(df13aef2) SHA1(61d210eeb59fe132e14fdd7eb6a39ebc55168097) ) |
| 2817 | | ROM_LOAD( "epr00004.bin", 0x1800, 0x0800, CRC(8431e15e) SHA1(b028e718ee90f37c848e5f83494be61cb90338e2) ) |
| 2818 | | ROM_LOAD( "epr00005.bin", 0x2000, 0x0800, CRC(eec2b6e7) SHA1(4ed830755b4d1da6111afc6c16c7c633521ccb9c) ) |
| 2819 | | ROM_LOAD( "epr00006.bin", 0x2800, 0x0800, CRC(780e47ed) SHA1(533879b8abf0e69644fd8b784dbe9bf10cde6d9f) ) |
| 2820 | | ROM_LOAD( "epr00007.bin", 0x3000, 0x0800, CRC(8189a2fa) SHA1(3c13a394f48adb8f7c6b8203bd0749921461ea06) ) |
| 2821 | | ROM_LOAD( "epr00008.bin", 0x3800, 0x0800, CRC(34a64a80) SHA1(a588fae0ecaa80677887d8c95ef8896a4bdd77ee) ) |
| 2857 | ROM_LOAD( "epr-0001.bin", 0x0000, 0x0800, CRC(ba62f57a) SHA1(7cfc079c6afe317b6c389c06802fdf1f83858510) ) |
| 2858 | ROM_LOAD( "epr-0002.bin", 0x0800, 0x0800, CRC(94b3c59c) SHA1(e6ee1c25fb45d03d514421c231d794f9da05f47f) ) |
| 2859 | ROM_LOAD( "epr-0003.bin", 0x1000, 0x0800, CRC(df13aef2) SHA1(61d210eeb59fe132e14fdd7eb6a39ebc55168097) ) |
| 2860 | ROM_LOAD( "epr-0004.bin", 0x1800, 0x0800, CRC(8431e15e) SHA1(b028e718ee90f37c848e5f83494be61cb90338e2) ) |
| 2861 | ROM_LOAD( "epr-0005.bin", 0x2000, 0x0800, CRC(eec2b6e7) SHA1(4ed830755b4d1da6111afc6c16c7c633521ccb9c) ) |
| 2862 | ROM_LOAD( "epr-0006.bin", 0x2800, 0x0800, CRC(780e47ed) SHA1(533879b8abf0e69644fd8b784dbe9bf10cde6d9f) ) |
| 2863 | ROM_LOAD( "epr-0007.bin", 0x3000, 0x0800, CRC(8189a2fa) SHA1(3c13a394f48adb8f7c6b8203bd0749921461ea06) ) |
| 2864 | ROM_LOAD( "epr-0008.bin", 0x3800, 0x0800, CRC(34a64a80) SHA1(a588fae0ecaa80677887d8c95ef8896a4bdd77ee) ) |
| 2822 | 2865 | |
| 2823 | 2866 | ROM_REGION( 0x0020, "proms", 0 ) |
| 2824 | 2867 | ROM_LOAD( "316-0138.u44", 0x0000, 0x0020, CRC(67104ea9) SHA1(26b6bd2a1973b83bb9af4e3385d8cb14cb3f62f2) ) |
| r7882 | r7883 | |
| 2829 | 2872 | |
| 2830 | 2873 | ROM_START( samurai ) |
| 2831 | 2874 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 2832 | | ROM_LOAD( "epr289.u33", 0x0000, 0x0400, CRC(a1a9cb03) SHA1(1875a86ad5938295dd5db6bb045be46eba8638ba) ) |
| 2833 | | ROM_LOAD( "epr290.u32", 0x0400, 0x0400, CRC(49fede51) SHA1(58ab1779d555281ec436ae90dcdf4ada42625892) ) |
| 2834 | | ROM_LOAD( "epr291.u31", 0x0800, 0x0400, CRC(6503dd72) SHA1(e0a3f42418a13f38314ec6e7951cd45c686fecbc) ) |
| 2835 | | ROM_LOAD( "epr292.u30", 0x0c00, 0x0400, CRC(179c224f) SHA1(0a202718a9c2f5f4f1553d1dccd99bebb511363f) ) |
| 2836 | | ROM_LOAD( "epr366.u29", 0x1000, 0x0400, CRC(3df2abec) SHA1(f52182c93026de0f5e7a3c36fe4a35e386c95d0c) ) |
| 2837 | | ROM_LOAD( "epr355.u28", 0x1400, 0x0400, CRC(b24517a4) SHA1(51d613ac21e33c70705f1731b905af72dc561dbf) ) |
| 2838 | | ROM_LOAD( "epr367.u27", 0x1800, 0x0400, CRC(992a6e5a) SHA1(45ae4bf297d7ce52d879d3af5e26960c0dd5034c) ) |
| 2839 | | ROM_LOAD( "epr368.u26", 0x1c00, 0x0400, CRC(403c72ce) SHA1(eaa7a56a28b393db97fd6f1a62b7592cd47060f0) ) |
| 2840 | | ROM_LOAD( "epr369.u8", 0x2000, 0x0400, CRC(3cfd115b) SHA1(58d1d34605b75f0078eb7e61eca8d5897a8b8294) ) |
| 2841 | | ROM_LOAD( "epr370.u7", 0x2400, 0x0400, CRC(2c30db12) SHA1(9dcf8aa5cfdda5b350fc6b70524a15f970d98d91) ) |
| 2842 | | ROM_LOAD( "epr299.u6", 0x2800, 0x0400, CRC(87c71139) SHA1(10c273c2f6a58bba8b5891dfd851e18898b45fd1) ) |
| 2843 | | ROM_LOAD( "epr371.u5", 0x2c00, 0x0400, CRC(761f56cf) SHA1(0d63e8b0ac7bfe9f3cd08cea68eb941b1a5a536c) ) |
| 2844 | | ROM_LOAD( "epr301.u4", 0x3000, 0x0400, CRC(23de1ff7) SHA1(51bf437a62ee770918524c8d0e8b0e007a800021) ) |
| 2845 | | ROM_LOAD( "epr372.u3", 0x3400, 0x0400, CRC(292cfd89) SHA1(a8131f03e8e9f5009508813445bbea559bc27726) ) |
| 2875 | ROM_LOAD( "epr-289.u33", 0x0000, 0x0400, CRC(a1a9cb03) SHA1(1875a86ad5938295dd5db6bb045be46eba8638ba) ) |
| 2876 | ROM_LOAD( "epr-290.u32", 0x0400, 0x0400, CRC(49fede51) SHA1(58ab1779d555281ec436ae90dcdf4ada42625892) ) |
| 2877 | ROM_LOAD( "epr-291.u31", 0x0800, 0x0400, CRC(6503dd72) SHA1(e0a3f42418a13f38314ec6e7951cd45c686fecbc) ) |
| 2878 | ROM_LOAD( "epr-292.u30", 0x0c00, 0x0400, CRC(179c224f) SHA1(0a202718a9c2f5f4f1553d1dccd99bebb511363f) ) |
| 2879 | ROM_LOAD( "epr-366.u29", 0x1000, 0x0400, CRC(3df2abec) SHA1(f52182c93026de0f5e7a3c36fe4a35e386c95d0c) ) |
| 2880 | ROM_LOAD( "epr-355.u28", 0x1400, 0x0400, CRC(b24517a4) SHA1(51d613ac21e33c70705f1731b905af72dc561dbf) ) |
| 2881 | ROM_LOAD( "epr-367.u27", 0x1800, 0x0400, CRC(992a6e5a) SHA1(45ae4bf297d7ce52d879d3af5e26960c0dd5034c) ) |
| 2882 | ROM_LOAD( "epr-368.u26", 0x1c00, 0x0400, CRC(403c72ce) SHA1(eaa7a56a28b393db97fd6f1a62b7592cd47060f0) ) |
| 2883 | ROM_LOAD( "epr-369.u8", 0x2000, 0x0400, CRC(3cfd115b) SHA1(58d1d34605b75f0078eb7e61eca8d5897a8b8294) ) |
| 2884 | ROM_LOAD( "epr-370.u7", 0x2400, 0x0400, CRC(2c30db12) SHA1(9dcf8aa5cfdda5b350fc6b70524a15f970d98d91) ) |
| 2885 | ROM_LOAD( "epr-299.u6", 0x2800, 0x0400, CRC(87c71139) SHA1(10c273c2f6a58bba8b5891dfd851e18898b45fd1) ) |
| 2886 | ROM_LOAD( "epr-371.u5", 0x2c00, 0x0400, CRC(761f56cf) SHA1(0d63e8b0ac7bfe9f3cd08cea68eb941b1a5a536c) ) |
| 2887 | ROM_LOAD( "epr-301.u4", 0x3000, 0x0400, CRC(23de1ff7) SHA1(51bf437a62ee770918524c8d0e8b0e007a800021) ) |
| 2888 | ROM_LOAD( "epr-372.u3", 0x3400, 0x0400, CRC(292cfd89) SHA1(a8131f03e8e9f5009508813445bbea559bc27726) ) |
| 2846 | 2889 | |
| 2847 | 2890 | ROM_REGION( 0x0020, "proms", 0 ) |
| 2848 | 2891 | ROM_LOAD( "pr55.clr", 0x0000, 0x0020, CRC(975f5fb0) SHA1(d5917d68ad5549fe5cc997521c3b0a5a279d2231) ) |
| r7882 | r7883 | |
| 2977 | 3020 | |
| 2978 | 3021 | ROM_START( carnival ) |
| 2979 | 3022 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 2980 | | ROM_LOAD( "651u33.cpu", 0x0000, 0x0400, CRC(9f2736e6) SHA1(c3fb9197b5e83dc7d5335de2268e0acb30cf8328) ) |
| 2981 | | ROM_LOAD( "652u32.cpu", 0x0400, 0x0400, CRC(a1f58beb) SHA1(e027beca7bf3ef5ef67e2195f909332fd194b5dc) ) |
| 2982 | | ROM_LOAD( "653u31.cpu", 0x0800, 0x0400, CRC(67b17922) SHA1(46cdfd0371dec61a5440c2111660729c0f0ecdb8) ) |
| 2983 | | ROM_LOAD( "654u30.cpu", 0x0c00, 0x0400, CRC(befb09a5) SHA1(da44b6a869b5eb0705e01fee4478696f6bef9de8) ) |
| 2984 | | ROM_LOAD( "655u29.cpu", 0x1000, 0x0400, CRC(623fcdad) SHA1(35890964f5cf799c141002916641089ccec0fcc9) ) |
| 2985 | | ROM_LOAD( "656u28.cpu", 0x1400, 0x0400, CRC(53040332) SHA1(ff7a06d93cb890abf0616770774668396d128ba3) ) |
| 2986 | | ROM_LOAD( "657u27.cpu", 0x1800, 0x0400, CRC(f2537467) SHA1(262b859098f4f7e5e9bf2f83bda833044824226e) ) |
| 2987 | | ROM_LOAD( "658u26.cpu", 0x1c00, 0x0400, CRC(fcc3854e) SHA1(7adbd6ca6f636dec75fa6eccdf3381686e074bc6) ) |
| 2988 | | ROM_LOAD( "659u8.cpu", 0x2000, 0x0400, CRC(28be8d69) SHA1(2d9ac9a53f00fe2282e4317585e6bddadb676c0f) ) |
| 2989 | | ROM_LOAD( "660u7.cpu", 0x2400, 0x0400, CRC(3873ccdb) SHA1(56be81fdee8947758ba966915c0739e5560a7f94) ) |
| 2990 | | ROM_LOAD( "661u6.cpu", 0x2800, 0x0400, CRC(d9a96dff) SHA1(0366acf3418901bfeeda59d4cd51fe8ceaad4577) ) |
| 2991 | | ROM_LOAD( "662u5.cpu", 0x2c00, 0x0400, CRC(d893ca72) SHA1(564176ab7f3757d51db8eef9fbc4228fa2ce328f) ) |
| 2992 | | ROM_LOAD( "663u4.cpu", 0x3000, 0x0400, CRC(df8c63c5) SHA1(e8d0632b5cb5bd7f698485531f3edeb13efdc685) ) |
| 2993 | | ROM_LOAD( "664u3.cpu", 0x3400, 0x0400, CRC(689a73e8) SHA1(b4134e8d892df7ba3352e4d3f581923decae6e54) ) |
| 2994 | | ROM_LOAD( "665u2.cpu", 0x3800, 0x0400, CRC(28e7b2b6) SHA1(57eb5dd0f11da8ff8001e76036264246d6bc27d2) ) |
| 2995 | | ROM_LOAD( "666u1.cpu", 0x3c00, 0x0400, CRC(4eec7fae) SHA1(cdc858165136c55b01511805c9d4dc6bc598fe1f) ) |
| 3023 | ROM_LOAD( "epr-651.u33", 0x0000, 0x0400, CRC(9f2736e6) SHA1(c3fb9197b5e83dc7d5335de2268e0acb30cf8328) ) |
| 3024 | ROM_LOAD( "epr-652.u32", 0x0400, 0x0400, CRC(a1f58beb) SHA1(e027beca7bf3ef5ef67e2195f909332fd194b5dc) ) |
| 3025 | ROM_LOAD( "epr-653.u31", 0x0800, 0x0400, CRC(67b17922) SHA1(46cdfd0371dec61a5440c2111660729c0f0ecdb8) ) |
| 3026 | ROM_LOAD( "epr-654.u30", 0x0c00, 0x0400, CRC(befb09a5) SHA1(da44b6a869b5eb0705e01fee4478696f6bef9de8) ) |
| 3027 | ROM_LOAD( "epr-655.u29", 0x1000, 0x0400, CRC(623fcdad) SHA1(35890964f5cf799c141002916641089ccec0fcc9) ) |
| 3028 | ROM_LOAD( "epr-656.u28", 0x1400, 0x0400, CRC(53040332) SHA1(ff7a06d93cb890abf0616770774668396d128ba3) ) |
| 3029 | ROM_LOAD( "epr-657.u27", 0x1800, 0x0400, CRC(f2537467) SHA1(262b859098f4f7e5e9bf2f83bda833044824226e) ) |
| 3030 | ROM_LOAD( "epr-658.u26", 0x1c00, 0x0400, CRC(fcc3854e) SHA1(7adbd6ca6f636dec75fa6eccdf3381686e074bc6) ) |
| 3031 | ROM_LOAD( "epr-659.u8", 0x2000, 0x0400, CRC(28be8d69) SHA1(2d9ac9a53f00fe2282e4317585e6bddadb676c0f) ) |
| 3032 | ROM_LOAD( "epr-660.u7", 0x2400, 0x0400, CRC(3873ccdb) SHA1(56be81fdee8947758ba966915c0739e5560a7f94) ) |
| 3033 | ROM_LOAD( "epr-661.u6", 0x2800, 0x0400, CRC(d9a96dff) SHA1(0366acf3418901bfeeda59d4cd51fe8ceaad4577) ) |
| 3034 | ROM_LOAD( "epr-662.u5", 0x2c00, 0x0400, CRC(d893ca72) SHA1(564176ab7f3757d51db8eef9fbc4228fa2ce328f) ) |
| 3035 | ROM_LOAD( "epr-663.u4", 0x3000, 0x0400, CRC(df8c63c5) SHA1(e8d0632b5cb5bd7f698485531f3edeb13efdc685) ) |
| 3036 | ROM_LOAD( "epr-664.u3", 0x3400, 0x0400, CRC(689a73e8) SHA1(b4134e8d892df7ba3352e4d3f581923decae6e54) ) |
| 3037 | ROM_LOAD( "epr-665.u2", 0x3800, 0x0400, CRC(28e7b2b6) SHA1(57eb5dd0f11da8ff8001e76036264246d6bc27d2) ) |
| 3038 | ROM_LOAD( "epr-666.u1", 0x3c00, 0x0400, CRC(4eec7fae) SHA1(cdc858165136c55b01511805c9d4dc6bc598fe1f) ) |
| 2996 | 3039 | |
| 2997 | 3040 | ROM_REGION( 0x0020, "proms", 0 ) |
| 2998 | 3041 | ROM_LOAD( "316-633", 0x0000, 0x0020, CRC(f0084d80) SHA1(95ec912ac2c64cd58a50c68afc0993746841a531) ) |
| 2999 | 3042 | |
| 3000 | 3043 | ROM_REGION( 0x0800, "audiocpu", 0 ) /* sound ROM */ |
| 3001 | | ROM_LOAD( "crvl.snd", 0x0000, 0x0400, CRC(0dbaa2b0) SHA1(eae7fc362a0ff8f908c42e093c7dbb603659373c) ) |
| 3044 | ROM_LOAD( "epr-412", 0x0000, 0x0400, CRC(0dbaa2b0) SHA1(eae7fc362a0ff8f908c42e093c7dbb603659373c) ) |
| 3002 | 3045 | |
| 3003 | 3046 | ROM_REGION( 0x0020, "user1", 0 ) /* timing PROM */ |
| 3004 | 3047 | ROM_LOAD( "316-0206.u14", 0x0000, 0x0020, CRC(9617d796) SHA1(7cff2741866095ff42eadd8022bea349ec8d2f39) ) /* control PROM */ |
| r7882 | r7883 | |
| 3006 | 3049 | |
| 3007 | 3050 | ROM_START( carnivalc ) |
| 3008 | 3051 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 3009 | | ROM_LOAD( "epr501", 0x0000, 0x0400, CRC(688503d2) SHA1(a1fe03c23276d458ba74f7473524918eb9b7c7e5) ) |
| 3010 | | ROM_LOAD( "652u32.cpu", 0x0400, 0x0400, CRC(a1f58beb) SHA1(e027beca7bf3ef5ef67e2195f909332fd194b5dc) ) |
| 3011 | | ROM_LOAD( "653u31.cpu", 0x0800, 0x0400, CRC(67b17922) SHA1(46cdfd0371dec61a5440c2111660729c0f0ecdb8) ) |
| 3012 | | ROM_LOAD( "654u30.cpu", 0x0c00, 0x0400, CRC(befb09a5) SHA1(da44b6a869b5eb0705e01fee4478696f6bef9de8) ) |
| 3013 | | ROM_LOAD( "655u29.cpu", 0x1000, 0x0400, CRC(623fcdad) SHA1(35890964f5cf799c141002916641089ccec0fcc9) ) |
| 3014 | | ROM_LOAD( "epr506", 0x1400, 0x0400, CRC(ba916e97) SHA1(87e1ac8bd21bafb815b702048c6be24f410a8998) ) |
| 3015 | | ROM_LOAD( "epr507", 0x1800, 0x0400, CRC(d0bda4a5) SHA1(faf3f3c2a8f962c6c2901e5a4a31b452b506ee22) ) |
| 3016 | | ROM_LOAD( "epr508", 0x1c00, 0x0400, CRC(f0258cad) SHA1(065c90835dadeda7085422295cde09491c94b6e0) ) |
| 3017 | | ROM_LOAD( "epr509", 0x2000, 0x0400, CRC(dcc8a530) SHA1(2d1cac3b40f5afab5423d45ecc3f5565266f9c03) ) |
| 3018 | | ROM_LOAD( "epr510", 0x2400, 0x0400, CRC(92c2ba51) SHA1(c0c0c836d2aa6943bd808acc12161adf23cd0d21) ) |
| 3019 | | ROM_LOAD( "epr511", 0x2800, 0x0400, CRC(3af899a0) SHA1(540cbdc6a912cb325bbea33935bfa06e13f0021a) ) |
| 3020 | | ROM_LOAD( "epr512", 0x2c00, 0x0400, CRC(09f7b3e6) SHA1(18a58680500148e7a031e91230d73b2ce4dc712d) ) |
| 3021 | | ROM_LOAD( "epr513", 0x3000, 0x0400, CRC(8f41974c) SHA1(65e9c2378ad99f804590de36ffba4c60bfa1bfe3) ) |
| 3022 | | ROM_LOAD( "epr514", 0x3400, 0x0400, CRC(2788d140) SHA1(7341c44fb1f7eb8c4d25d3e1e75bcf3bfdb9a89c) ) |
| 3023 | | ROM_LOAD( "epr515", 0x3800, 0x0400, CRC(10decaa9) SHA1(4c980164dde275e1488ae74a7ad61e6acc75e608) ) |
| 3024 | | ROM_LOAD( "epr516", 0x3c00, 0x0400, CRC(7c32b352) SHA1(8cb472a7f71a301417c6a8e4a26a9bdcd43b6062) ) |
| 3052 | ROM_LOAD( "epr-501.u33", 0x0000, 0x0400, CRC(688503d2) SHA1(a1fe03c23276d458ba74f7473524918eb9b7c7e5) ) |
| 3053 | ROM_LOAD( "epr-652.u32", 0x0400, 0x0400, CRC(a1f58beb) SHA1(e027beca7bf3ef5ef67e2195f909332fd194b5dc) ) |
| 3054 | ROM_LOAD( "epr-653.u31", 0x0800, 0x0400, CRC(67b17922) SHA1(46cdfd0371dec61a5440c2111660729c0f0ecdb8) ) |
| 3055 | ROM_LOAD( "epr-654.u30", 0x0c00, 0x0400, CRC(befb09a5) SHA1(da44b6a869b5eb0705e01fee4478696f6bef9de8) ) |
| 3056 | ROM_LOAD( "epr-655.u29", 0x1000, 0x0400, CRC(623fcdad) SHA1(35890964f5cf799c141002916641089ccec0fcc9) ) |
| 3057 | ROM_LOAD( "epr-506.u28", 0x1400, 0x0400, CRC(ba916e97) SHA1(87e1ac8bd21bafb815b702048c6be24f410a8998) ) |
| 3058 | ROM_LOAD( "epr-507.u27", 0x1800, 0x0400, CRC(d0bda4a5) SHA1(faf3f3c2a8f962c6c2901e5a4a31b452b506ee22) ) |
| 3059 | ROM_LOAD( "epr-508.u26", 0x1c00, 0x0400, CRC(f0258cad) SHA1(065c90835dadeda7085422295cde09491c94b6e0) ) |
| 3060 | ROM_LOAD( "epr-509.u8", 0x2000, 0x0400, CRC(dcc8a530) SHA1(2d1cac3b40f5afab5423d45ecc3f5565266f9c03) ) |
| 3061 | ROM_LOAD( "epr-510.u7", 0x2400, 0x0400, CRC(92c2ba51) SHA1(c0c0c836d2aa6943bd808acc12161adf23cd0d21) ) |
| 3062 | ROM_LOAD( "epr-511.u6", 0x2800, 0x0400, CRC(3af899a0) SHA1(540cbdc6a912cb325bbea33935bfa06e13f0021a) ) |
| 3063 | ROM_LOAD( "epr-512.u5", 0x2c00, 0x0400, CRC(09f7b3e6) SHA1(18a58680500148e7a031e91230d73b2ce4dc712d) ) |
| 3064 | ROM_LOAD( "epr-513.u4", 0x3000, 0x0400, CRC(8f41974c) SHA1(65e9c2378ad99f804590de36ffba4c60bfa1bfe3) ) |
| 3065 | ROM_LOAD( "epr-514.u3", 0x3400, 0x0400, CRC(2788d140) SHA1(7341c44fb1f7eb8c4d25d3e1e75bcf3bfdb9a89c) ) |
| 3066 | ROM_LOAD( "epr-515.u2", 0x3800, 0x0400, CRC(10decaa9) SHA1(4c980164dde275e1488ae74a7ad61e6acc75e608) ) |
| 3067 | ROM_LOAD( "epr-516.u1", 0x3c00, 0x0400, CRC(7c32b352) SHA1(8cb472a7f71a301417c6a8e4a26a9bdcd43b6062) ) |
| 3025 | 3068 | |
| 3026 | 3069 | ROM_REGION( 0x0020, "proms", 0 ) |
| 3027 | 3070 | ROM_LOAD( "316-633", 0x0000, 0x0020, CRC(f0084d80) SHA1(95ec912ac2c64cd58a50c68afc0993746841a531) ) |
| 3028 | 3071 | |
| 3029 | 3072 | ROM_REGION( 0x0800, "audiocpu", 0 ) /* sound ROM */ |
| 3030 | | ROM_LOAD( "crvl.snd", 0x0000, 0x0400, CRC(0dbaa2b0) SHA1(eae7fc362a0ff8f908c42e093c7dbb603659373c) ) |
| 3073 | ROM_LOAD( "epr-412", 0x0000, 0x0400, CRC(0dbaa2b0) SHA1(eae7fc362a0ff8f908c42e093c7dbb603659373c) ) |
| 3031 | 3074 | |
| 3032 | 3075 | ROM_REGION( 0x0020, "user1", 0 ) /* timing PROM */ |
| 3033 | 3076 | ROM_LOAD( "316-0206.u14", 0x0000, 0x0020, CRC(9617d796) SHA1(7cff2741866095ff42eadd8022bea349ec8d2f39) ) /* control PROM */ |
| 3034 | 3077 | ROM_END |
| 3035 | 3078 | |
| 3079 | ROM_START( carnivalh ) |
| 3080 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 3081 | ROM_LOAD( "epr-155.u48", 0x0000, 0x0800, CRC(0a5f1f65) SHA1(7830157ad378f92a8069debf78d50b9deafb4d40) ) |
| 3082 | ROM_LOAD( "epr-156.u47", 0x0800, 0x0800, CRC(422221ff) SHA1(57180236dd1cf5838131b35256c3d46cb8015804) ) |
| 3083 | ROM_LOAD( "epr-157.u46", 0x1000, 0x0800, CRC(1551dffb) SHA1(f91563a14c5febee64b45579acf49518cd54bec3) ) |
| 3084 | ROM_LOAD( "epr-158.u45", 0x1800, 0x0800, CRC(9238b5c0) SHA1(673f4fedd2e7beef6bc5e6371b2ed7722f3c141c) ) |
| 3085 | ROM_LOAD( "epr-159.u44", 0x2000, 0x0800, CRC(5c2b9a33) SHA1(2cc57ceebd2938e589c07892b6587b8571678fcc) ) |
| 3086 | ROM_LOAD( "epr-160.u43", 0x2800, 0x0800, CRC(dd70471f) SHA1(2d987e946873955998c428930592ea7734970b16) ) |
| 3087 | ROM_LOAD( "epr-161.u42", 0x3000, 0x0800, CRC(42714a0d) SHA1(96f8904912d85b2e7037d129ff2443e90693fe22) ) |
| 3088 | ROM_LOAD( "epr-162.u41", 0x3800, 0x0800, CRC(56e1c120) SHA1(24816b6a9bc238571ab8ea79bb876cf249ed4d60) ) |
| 3089 | |
| 3090 | ROM_REGION( 0x0020, "proms", 0 ) |
| 3091 | ROM_LOAD( "pr-62.u44", 0x0000, 0x0020, CRC(f0084d80) SHA1(95ec912ac2c64cd58a50c68afc0993746841a531) ) /* Same as 316-633 */ |
| 3092 | |
| 3093 | ROM_REGION( 0x0800, "audiocpu", 0 ) /* sound ROM */ |
| 3094 | ROM_LOAD( "epr-412.u5", 0x0000, 0x0400, CRC(0dbaa2b0) SHA1(eae7fc362a0ff8f908c42e093c7dbb603659373c) ) |
| 3095 | |
| 3096 | ROM_REGION( 0x0040, "user1", 0 ) /* misc PROMs (type n82s123) */ |
| 3097 | ROM_LOAD( "316-043.u65", 0x0000, 0x0020, CRC(e60a7960) SHA1(b8b8716e859c57c35310efc4594262afedb84823) ) /* control PROM */ |
| 3098 | ROM_LOAD( "316-042.u66", 0x0020, 0x0020, CRC(a1506b9d) SHA1(037c3db2ea40eca459e8acba9d1506dd28d72d10) ) /* sequence PROM */ |
| 3099 | ROM_END |
| 3100 | |
| 3101 | ROM_START( carnivalha ) |
| 3102 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 3103 | ROM_LOAD( "epr-155.u48", 0x0000, 0x0800, CRC(0a5f1f65) SHA1(7830157ad378f92a8069debf78d50b9deafb4d40) ) |
| 3104 | ROM_LOAD( "epr-156.u47", 0x0800, 0x0800, CRC(422221ff) SHA1(57180236dd1cf5838131b35256c3d46cb8015804) ) |
| 3105 | ROM_LOAD( "epr-157.u46", 0x1000, 0x0800, CRC(1551dffb) SHA1(f91563a14c5febee64b45579acf49518cd54bec3) ) |
| 3106 | ROM_LOAD( "epr-158.u45", 0x1800, 0x0800, CRC(9238b5c0) SHA1(673f4fedd2e7beef6bc5e6371b2ed7722f3c141c) ) |
| 3107 | ROM_LOAD( "epr-159.u44", 0x2000, 0x0800, CRC(5c2b9a33) SHA1(2cc57ceebd2938e589c07892b6587b8571678fcc) ) |
| 3108 | ROM_LOAD( "epr-160.u43", 0x2800, 0x0800, CRC(dd70471f) SHA1(2d987e946873955998c428930592ea7734970b16) ) |
| 3109 | ROM_LOAD( "epr-161x.u42", 0x3000, 0x0800, CRC(8133ba08) SHA1(fc314e847810140d99ad071667c10a1a57c9f892) ) // rom marked with 161X, probably modified in some way |
| 3110 | ROM_LOAD( "epr-162.u41", 0x3800, 0x0800, CRC(56e1c120) SHA1(24816b6a9bc238571ab8ea79bb876cf249ed4d60) ) |
| 3111 | |
| 3112 | ROM_REGION( 0x0020, "proms", 0 ) |
| 3113 | ROM_LOAD( "pr-62.u44", 0x0000, 0x0020, CRC(f0084d80) SHA1(95ec912ac2c64cd58a50c68afc0993746841a531) ) /* Same as 316-633 */ |
| 3114 | |
| 3115 | ROM_REGION( 0x0800, "audiocpu", 0 ) /* sound ROM */ |
| 3116 | ROM_LOAD( "epr-412.u5", 0x0000, 0x0400, CRC(0dbaa2b0) SHA1(eae7fc362a0ff8f908c42e093c7dbb603659373c) ) |
| 3117 | |
| 3118 | ROM_REGION( 0x0040, "user1", 0 ) /* misc PROMs (type n82s123) */ |
| 3119 | ROM_LOAD( "316-043.u65", 0x0000, 0x0020, CRC(e60a7960) SHA1(b8b8716e859c57c35310efc4594262afedb84823) ) /* control PROM */ |
| 3120 | ROM_LOAD( "316-042.u66", 0x0020, 0x0020, CRC(a1506b9d) SHA1(037c3db2ea40eca459e8acba9d1506dd28d72d10) ) /* sequence PROM */ |
| 3121 | ROM_END |
| 3122 | |
| 3036 | 3123 | ROM_START( brdrline ) |
| 3037 | 3124 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 3038 | 3125 | ROM_LOAD( "b1.bin", 0x0000, 0x0400, CRC(df182769) SHA1(2b1b70c6282b32e0a4ed80ab4e6b20f90630e910) ) |
| r7882 | r7883 | |
| 3289 | 3376 | GAME( 1980, spacetrkc,spacetrk, spacetrk, sptrekct, 0, ROT270, "Sega", "Space Trek (cocktail)", GAME_NO_SOUND ) |
| 3290 | 3377 | GAME( 1980, carnival, 0, carnival, carnival, 0, ROT270, "Sega", "Carnival (upright)", GAME_IMPERFECT_SOUND ) |
| 3291 | 3378 | GAME( 1980, carnivalc,carnival, carnival, carnvckt, 0, ROT270, "Sega", "Carnival (cocktail)", GAME_IMPERFECT_SOUND ) |
| 3379 | GAME( 1980, carnivalh,carnival, carnivalh,carnivalh,0, ROT270, "Sega", "Carnival (Head On hardware, set 1)", GAME_IMPERFECT_SOUND ) |
| 3380 | GAME( 1980, carnivalha,carnival,carnivalh,carnivalh,0, ROT270, "Sega", "Carnival (Head On hardware, set 2)", GAME_IMPERFECT_SOUND ) |
| 3292 | 3381 | GAME( 1981, brdrline, 0, brdrline, brdrline, 0, ROT270, "Sega", "Borderline", GAME_NO_SOUND ) |
| 3293 | 3382 | GAME( 1981, brdrlins, brdrline, brdrline, brdrline, 0, ROT270, "[Sega] (Sidam bootleg)", "Borderline (Sidam bootleg)", GAME_NO_SOUND ) |
| 3294 | 3383 | GAME( 1981, brdrlinb, brdrline, brdrline, brdrline, 0, ROT270, "[Sega] (Karateco bootleg)", "Borderline (Karateco bootleg)", GAME_NO_SOUND ) |
src/mame/drivers/naomi.c
| r7882 | r7883 | |
| 1307 | 1307 | |
| 1308 | 1308 | /* Area 3 */ |
| 1309 | 1309 | AM_RANGE(0x0c000000, 0x0dffffff) AM_RAM AM_BASE(&naomi_ram64) AM_SHARE("share4") |
| 1310 | |
| 1310 | 1311 | AM_RANGE(0x0e000000, 0x0fffffff) AM_RAM AM_SHARE("share4")// mirror |
| 1311 | 1312 | |
| 1312 | 1313 | AM_RANGE(0x8c000000, 0x8dffffff) AM_RAM AM_SHARE("share4") // RAM access through cache |
| 1313 | 1314 | |
| 1315 | AM_RANGE(0xac000000, 0xadffffff) AM_RAM AM_SHARE("share4") // written here by totd |
| 1316 | |
| 1314 | 1317 | /* Area 4 */ |
| 1315 | 1318 | AM_RANGE(0x10000000, 0x107fffff) AM_WRITE( ta_fifo_poly_w ) |
| 1316 | 1319 | AM_RANGE(0x10800000, 0x10ffffff) AM_WRITE( ta_fifo_yuv_w ) |
| r7882 | r7883 | |
| 1515 | 1518 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \ |
| 1516 | 1519 | PORT_DIPSETTING( 0x01, DEF_STR( On ) ) \ |
| 1517 | 1520 | |
| 1521 | #define NAOMI_DIP_SW \ |
| 1522 | PORT_START("DSW") \ |
| 1523 | PORT_DIPNAME( 0x01, 0x00, "Monitor" ) PORT_DIPLOCATION("SW1:1") \ |
| 1524 | PORT_DIPSETTING( 0x01, "31 kHz" ) \ |
| 1525 | PORT_DIPSETTING( 0x00, "15 kHz" ) \ |
| 1526 | PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:2") \ |
| 1527 | PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) \ |
| 1528 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) \ |
| 1529 | PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:3") \ |
| 1530 | PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) \ |
| 1531 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) \ |
| 1532 | PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4") \ |
| 1533 | PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) \ |
| 1534 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) \ |
| 1518 | 1535 | |
| 1519 | 1536 | /* for now we hardwire a joystick + 6 buttons for every game.*/ |
| 1520 | 1537 | static INPUT_PORTS_START( naomi ) |
| 1538 | NAOMI_DIP_SW |
| 1539 | |
| 1521 | 1540 | PORT_START("IN0") |
| 1522 | 1541 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Service") |
| 1523 | 1542 | PORT_SERVICE_NO_TOGGLE( 0x01, IP_ACTIVE_LOW ) |
| r7882 | r7883 | |
| 1557 | 1576 | |
| 1558 | 1577 | /* JVS mahjong panel */ |
| 1559 | 1578 | static INPUT_PORTS_START( naomi_mp ) |
| 1579 | NAOMI_DIP_SW |
| 1580 | |
| 1560 | 1581 | PORT_START("IN0") |
| 1561 | 1582 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Service") |
| 1562 | 1583 | PORT_SERVICE_NO_TOGGLE( 0x01, IP_ACTIVE_LOW ) |
| r7882 | r7883 | |
| 1686 | 1707 | // COIN (1<<15) |
| 1687 | 1708 | |
| 1688 | 1709 | static INPUT_PORTS_START( aw ) |
| 1710 | NAOMI_DIP_SW //FIXME: check if it's the same. |
| 1711 | |
| 1689 | 1712 | PORT_START("P1L") |
| 1690 | 1713 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) |
| 1691 | 1714 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) |
| r7882 | r7883 | |
| 1923 | 1946 | |
| 1924 | 1947 | Airline Pilot specific Naomi BIOS roms: |
| 1925 | 1948 | |
| 1949 | EPR-21801 - NAOMI BOOT ROM 1999 03/11 1.30 (USA) |
| 1926 | 1950 | EPR-21802 - NAOMI BOOT ROM 1999 03/11 1.30 (Export) |
| 1927 | 1951 | |
| 1952 | 0x4D148 is the region byte (only one region byte) |
| 1953 | 0x1ffffa-0x1fffff is the BIOS checksum |
| 1928 | 1954 | |
| 1955 | |
| 1929 | 1956 | Region byte encoding is as follows: |
| 1930 | 1957 | |
| 1931 | 1958 | 0x00 = Japan |
| r7882 | r7883 | |
| 1943 | 1970 | /* bios e works, the newer japan one gives 'board malfunction' with some games?' */ |
| 1944 | 1971 | #define NAOMI_BIOS \ |
| 1945 | 1972 | ROM_SYSTEM_BIOS( 0, "bios0", "epr-21576e (Japan)" ) \ |
| 1946 | | ROM_LOAD16_WORD_SWAP_BIOS( 0, "epr-21576e.bin", 0x000000, 0x200000, CRC(08c0add7) SHA1(e7c1a7673cb2ccb21748ef44105e46d1bad7266d) ) \ |
| 1973 | ROM_LOAD16_WORD_SWAP_BIOS( 0, "epr-21576e.ic27", 0x000000, 0x200000, CRC(08c0add7) SHA1(e7c1a7673cb2ccb21748ef44105e46d1bad7266d) ) \ |
| 1947 | 1974 | ROM_SYSTEM_BIOS( 1, "bios1", "epr-21576g (Japan)" ) \ |
| 1948 | | ROM_LOAD16_WORD_SWAP_BIOS( 1, "epr-21576g.bin", 0x000000, 0x200000, CRC(d2a1c6bf) SHA1(6d27d71aec4dfba98f66316ae74a1426d567698a) ) \ |
| 1975 | ROM_LOAD16_WORD_SWAP_BIOS( 1, "epr-21576g.ic27", 0x000000, 0x200000, CRC(d2a1c6bf) SHA1(6d27d71aec4dfba98f66316ae74a1426d567698a) ) \ |
| 1949 | 1976 | ROM_SYSTEM_BIOS( 2, "bios2", "epr-21576h (Japan)" ) \ |
| 1950 | | ROM_LOAD16_WORD_SWAP_BIOS( 2, "epr-21576h.bin", 0x000000, 0x200000, CRC(d4895685) SHA1(91424d481ff99a8d3f4c45cea6d3f0eada049a6d) ) \ |
| 1977 | ROM_LOAD16_WORD_SWAP_BIOS( 2, "epr-21576h.ic27", 0x000000, 0x200000, CRC(d4895685) SHA1(91424d481ff99a8d3f4c45cea6d3f0eada049a6d) ) \ |
| 1951 | 1978 | ROM_SYSTEM_BIOS( 3, "bios3", "epr-21576d (Japan)" ) \ |
| 1952 | | ROM_LOAD16_WORD_SWAP_BIOS( 3, "epr-21576d.bin", 0x000000, 0x200000, CRC(3b2afa7b) SHA1(d007e1d321c198a38c5baff86eb2ab84385d150a) ) \ |
| 1979 | ROM_LOAD16_WORD_SWAP_BIOS( 3, "epr-21576d.ic27", 0x000000, 0x200000, CRC(3b2afa7b) SHA1(d007e1d321c198a38c5baff86eb2ab84385d150a) ) \ |
| 1953 | 1980 | ROM_SYSTEM_BIOS( 4, "bios4", "epr-21576b (Japan)" ) \ |
| 1954 | | ROM_LOAD16_WORD_SWAP_BIOS( 4, "epr-21576b.bin", 0x000000, 0x200000, CRC(755a6e07) SHA1(7e8b8ccfc063144d89668e7224dcd8a36c54f3b3) ) \ |
| 1981 | ROM_LOAD16_WORD_SWAP_BIOS( 4, "epr-21576b.ic27", 0x000000, 0x200000, CRC(755a6e07) SHA1(7e8b8ccfc063144d89668e7224dcd8a36c54f3b3) ) \ |
| 1955 | 1982 | ROM_SYSTEM_BIOS( 5, "bios5", "epr-21576 (Japan)" ) \ |
| 1956 | | ROM_LOAD16_WORD_SWAP_BIOS( 5, "epr-21576.bin", 0x000000, 0x200000, CRC(9dad3495) SHA1(5fb66f9a2b68d120f059c72758e65d34f461044a) ) \ |
| 1983 | ROM_LOAD16_WORD_SWAP_BIOS( 5, "epr-21576.ic27", 0x000000, 0x200000, CRC(9dad3495) SHA1(5fb66f9a2b68d120f059c72758e65d34f461044a) ) \ |
| 1957 | 1984 | ROM_SYSTEM_BIOS( 6, "bios6", "epr-21578h (Export)" ) \ |
| 1958 | 1985 | ROM_LOAD16_WORD_SWAP_BIOS( 6, "epr-21578h.ic27", 0x000000, 0x200000, CRC(7b452946) SHA1(8e9f153bbada24b37066dc45b64a7bf0d4f26a9b) ) \ |
| 1959 | 1986 | ROM_SYSTEM_BIOS( 7, "bios7", "epr-21578g (Export)" ) \ |
| 1960 | 1987 | ROM_LOAD16_WORD_SWAP_BIOS( 7, "epr-21578g.ic27", 0x000000, 0x200000, CRC(55413214) SHA1(bd2748365a9fc1821c9369aa7155d7c41c4df43e) ) \ |
| 1961 | 1988 | ROM_SYSTEM_BIOS( 8, "bios8", "epr-21578e (Export)" ) \ |
| 1962 | | ROM_LOAD16_WORD_SWAP_BIOS( 8, "epr-21578e.bin", 0x000000, 0x200000, CRC(087f09a3) SHA1(0418eb2cf9766f0b1b874a4e92528779e22c0a4a) ) \ |
| 1989 | ROM_LOAD16_WORD_SWAP_BIOS( 8, "epr-21578e.ic27", 0x000000, 0x200000, CRC(087f09a3) SHA1(0418eb2cf9766f0b1b874a4e92528779e22c0a4a) ) \ |
| 1963 | 1990 | ROM_SYSTEM_BIOS( 9, "bios9", "epr-21578d (Export)" ) \ |
| 1964 | | ROM_LOAD16_WORD_SWAP_BIOS( 9, "epr-21578d.bin", 0x000000, 0x200000, CRC(dfd5f42a) SHA1(614a0db4743a5e5a206190d6786ade24325afbfd) ) \ |
| 1991 | ROM_LOAD16_WORD_SWAP_BIOS( 9, "epr-21578d.ic27", 0x000000, 0x200000, CRC(dfd5f42a) SHA1(614a0db4743a5e5a206190d6786ade24325afbfd) ) \ |
| 1965 | 1992 | ROM_SYSTEM_BIOS( 10, "bios10", "epr-21578b (Export)" ) \ |
| 1966 | | ROM_LOAD16_WORD_SWAP_BIOS( 10, "epr-21578b.bin", 0x000000, 0x200000, CRC(6c9aad83) SHA1(555918de76d8dbee2a97d8a95297ef694b3e803f) ) \ |
| 1993 | ROM_LOAD16_WORD_SWAP_BIOS( 10, "epr-21578b.ic27", 0x000000, 0x200000, CRC(6c9aad83) SHA1(555918de76d8dbee2a97d8a95297ef694b3e803f) ) \ |
| 1967 | 1994 | ROM_SYSTEM_BIOS( 11, "bios11", "epr-21577g (USA)" ) \ |
| 1968 | | ROM_LOAD16_WORD_SWAP_BIOS( 11, "epr-21577g.bin", 0x000000, 0x200000, CRC(25f64af7) SHA1(99f9e6cc0642319bd2da492611220540add573e8) ) \ |
| 1995 | ROM_LOAD16_WORD_SWAP_BIOS( 11, "epr-21577g.ic27", 0x000000, 0x200000, CRC(25f64af7) SHA1(99f9e6cc0642319bd2da492611220540add573e8) ) \ |
| 1969 | 1996 | ROM_SYSTEM_BIOS( 12, "bios12", "epr-21577e (USA)" ) \ |
| 1970 | | ROM_LOAD16_WORD_SWAP_BIOS( 12, "epr-21577e.bin", 0x000000, 0x200000, CRC(cf36e97b) SHA1(b085305982e7572e58b03a9d35f17ae319c3bbc6) ) \ |
| 1997 | ROM_LOAD16_WORD_SWAP_BIOS( 12, "epr-21577e.ic27", 0x000000, 0x200000, CRC(cf36e97b) SHA1(b085305982e7572e58b03a9d35f17ae319c3bbc6) ) \ |
| 1971 | 1998 | ROM_SYSTEM_BIOS( 13, "bios13", "epr-21577d (USA)" ) \ |
| 1972 | | ROM_LOAD16_WORD_SWAP_BIOS( 13, "epr-21577d.bin", 0x000000, 0x200000, CRC(60ddcbbe) SHA1(58b15096d269d6df617ca1810b66b47deb184958) ) \ |
| 1999 | ROM_LOAD16_WORD_SWAP_BIOS( 13, "epr-21577d.ic27", 0x000000, 0x200000, CRC(60ddcbbe) SHA1(58b15096d269d6df617ca1810b66b47deb184958) ) \ |
| 1973 | 2000 | ROM_SYSTEM_BIOS( 14, "bios14", "Naomi Dev BIOS" ) \ |
| 1974 | 2001 | ROM_LOAD16_WORD_SWAP_BIOS( 14, "dcnaodev.bios", 0x000000, 0x080000, CRC(7a50fab9) SHA1(ef79f448e0bf735d1264ad4f051d24178822110f) ) /* This one comes from a dev / beta board. The eprom was a 27C4096 */ |
| 1975 | 2002 | |
| r7882 | r7883 | |
| 1982 | 2009 | |
| 1983 | 2010 | #define F355_BIOS \ |
| 1984 | 2011 | ROM_SYSTEM_BIOS( 0, "bios0", "Ferrari F355 (Export)" ) \ |
| 1985 | | ROM_LOAD16_WORD_SWAP_BIOS( 0, "epr-22851.bin", 0x000000, 0x200000, CRC(62483677) SHA1(3e3bcacf5f972c376b569f45307ee7fd0b5031b7) ) \ |
| 2012 | ROM_LOAD16_WORD_SWAP_BIOS( 0, "epr-22851.ic27", 0x000000, 0x200000, CRC(62483677) SHA1(3e3bcacf5f972c376b569f45307ee7fd0b5031b7) ) \ |
| 1986 | 2013 | ROM_SYSTEM_BIOS( 1, "bios1", "Ferrari F355 (USA)" ) \ |
| 1987 | | ROM_LOAD16_WORD_SWAP_BIOS( 1, "epr-22850.bin", 0x000000, 0x200000, CRC(28aa539d) SHA1(14485368656af80504b212da620179c49f84c1a2) ) |
| 2014 | ROM_LOAD16_WORD_SWAP_BIOS( 1, "epr-22850.ic27", 0x000000, 0x200000, CRC(28aa539d) SHA1(14485368656af80504b212da620179c49f84c1a2) ) \ |
| 1988 | 2015 | |
| 1989 | 2016 | #define AIRLINE_BIOS \ |
| 1990 | 2017 | ROM_SYSTEM_BIOS( 0, "bios0", "Airline Pilots Deluxe (Export)" ) \ |
| 1991 | | ROM_LOAD16_WORD_SWAP_BIOS( 0, "epr-21802.bin", 0x000000, 0x200000, CRC(a77c6b1c) SHA1(bd50a6bb8fa9bac121b076e21ea048a83a240a48) ) \ |
| 2018 | ROM_LOAD16_WORD_SWAP_BIOS( 0, "epr-21802.ic27", 0x000000, 0x200000, CRC(a77c6b1c) SHA1(bd50a6bb8fa9bac121b076e21ea048a83a240a48) ) \ |
| 2019 | ROM_SYSTEM_BIOS( 1, "bios1", "Airline Pilots Deluxe (USA)" ) \ |
| 2020 | ROM_LOAD16_WORD_SWAP_BIOS( 1, "epr-21801.ic27", 0x000000, 0x200000, CRC(a21bef24) SHA1(c6c6ed09772b63a9a84ef0678fc1b7527484038a) ) \ |
| 1992 | 2021 | |
| 1993 | 2022 | |
| 1994 | 2023 | /* only revisions d and higher support the GDROM, and there is an additional bios (and SH4!) on the DIMM board for the CD Controller */ |
| r7882 | r7883 | |
| 2537 | 2566 | |
| 2538 | 2567 | */ |
| 2539 | 2568 | |
| 2540 | | ROM_START( derbyoc ) |
| 2569 | ROM_START( derbyocb ) |
| 2541 | 2570 | ROM_REGION( 0x200000, "maincpu", 0) |
| 2542 | 2571 | NAOMI_BIOS |
| 2543 | 2572 | NAOMI_DEFAULT_EEPROM |
| r7882 | r7883 | |
| 2560 | 2589 | ROM_LOAD("mpr-22098.ic14", 0x7000000, 0x0800000, CRC(f9824d2e) SHA1(f20f8cc2b1bef9077ede1cb874da8f2a335d39de) ) |
| 2561 | 2590 | ROM_END |
| 2562 | 2591 | |
| 2592 | ROM_START( derbyoc ) |
| 2593 | ROM_REGION( 0x200000, "maincpu", 0) |
| 2594 | NAOMI_BIOS |
| 2595 | NAOMI_DEFAULT_EEPROM |
| 2596 | |
| 2597 | ROM_REGION( 0x7800000, "user1", ROMREGION_ERASEFF) |
| 2598 | ROM_LOAD( "epr-22336c.ic22", 0x000000, 0x400000, CRC(50053f82) SHA1(5b31abb480043ece3645b2479ba566ac6592acd8) ) |
| 2599 | ROM_LOAD( "mpr-22328.ic1", 0x0800000, 0x1000000, CRC(179cec02) SHA1(cbaba86082370a082d2e9f18427691d5cfa0e4f0) ) |
| 2600 | ROM_LOAD( "mpr-22329.ic2", 0x1800000, 0x1000000, CRC(e0d5b98c) SHA1(5bf1ac0d895fd7725d170a54f01cd717a5e54110) ) |
| 2601 | ROM_LOAD( "mpr-22330.ic3", 0x2800000, 0x1000000, CRC(6737cd62) SHA1(08429ca39fef3b36cb491813ddcd0feef3b24372) ) |
| 2602 | ROM_LOAD( "mpr-22331.ic4", 0x3800000, 0x1000000, CRC(8fb5cbcf) SHA1(c4e6cbbe7d3549e1841654b41b1946b9bc356e74) ) |
| 2603 | ROM_LOAD( "mpr-22332.ic5", 0x4800000, 0x1000000, CRC(c5e365a8) SHA1(5839ea24b8fd02552931175d35e2ceca75fca089) ) |
| 2604 | ROM_LOAD( "mpr-22333.ic6", 0x5800000, 0x1000000, CRC(96f324aa) SHA1(bc41e2097c1841771d786ba9ad1a31df1494a856) ) |
| 2605 | ROM_LOAD( "mpr-22334.ic7", 0x6800000, 0x1000000, CRC(5389b05a) SHA1(e206e4d82d7b1a59c33043ec0812eb69be08d9b3) ) |
| 2606 | ROM_END |
| 2607 | |
| 2563 | 2608 | /* |
| 2564 | 2609 | SYSTEMID: NAOMI |
| 2565 | 2610 | JAP: DERBY OWNERS CLUB II----------- |
| r7882 | r7883 | |
| 3413 | 3458 | ROM_LOAD( "epr-23000.ic8", 0x000000, 0x010000, CRC(e3b162f7) SHA1(52c7ad759c3c4a3148764e14d77ba5006bc8af48) ) |
| 3414 | 3459 | ROM_END |
| 3415 | 3460 | |
| 3461 | /* Sega Strike Fighter */ |
| 3462 | ROM_START( sstrkfgt ) |
| 3463 | ROM_REGION( 0x200000, "maincpu", 0) |
| 3464 | NAOMI_BIOS |
| 3465 | NAOMI_DEFAULT_EEPROM |
| 3466 | |
| 3467 | ROM_REGION( 0xb000000, "user1", ROMREGION_ERASEFF) |
| 3468 | ROM_LOAD( "epr-23323a.ic22", 0x0000000, 0x400000, CRC(f3fd304b) SHA1(012eefebd857200195d9e2d80c24a793b258d7e2) ) |
| 3469 | ROM_LOAD( "mpr-23302.ic1", 0x0800000, 0x800000, CRC(3429321b) SHA1(6fc1be2ca71a690a2ceca9dc968183a1222177f7) ) |
| 3470 | ROM_LOAD( "mpr-23303.ic2", 0x1000000, 0x800000, CRC(f7b3ada2) SHA1(d2caea852241cb0d91243d84d1c5523dfddac721) ) |
| 3471 | ROM_LOAD( "mpr-23304.ic3", 0x1800000, 0x800000, CRC(3bf145e9) SHA1(a000e135ad640472418de418b92dbdb83dcf872b) ) |
| 3472 | ROM_LOAD( "mpr-23305.ic4", 0x2000000, 0x800000, CRC(924ee9fd) SHA1(dd56f8cd7e9dda87968abb810694bddeeb31db5c) ) |
| 3473 | ROM_LOAD( "mpr-23306.ic5", 0x2800000, 0x800000, CRC(4021e805) SHA1(75988ff8d710da6d90608cef87fc8b4408a617fb) ) |
| 3474 | ROM_LOAD( "mpr-23307.ic6", 0x3000000, 0x800000, CRC(090c1812) SHA1(e3e32d5c1f42191e188f91dbd4a753030894aa6f) ) |
| 3475 | ROM_LOAD( "mpr-23308.ic7", 0x3800000, 0x800000, CRC(f23d2198) SHA1(9775796a388ab903102126fb190867a0d192903e) ) |
| 3476 | ROM_LOAD( "mpr-23309.ic8", 0x4000000, 0x800000, CRC(0d6a7c9d) SHA1(0df846289d598efdf5605ca8e09758eb8b5878f9) ) |
| 3477 | ROM_LOAD( "mpr-23310.ic9", 0x4800000, 0x800000, CRC(f4ec4baa) SHA1(77e2ea1c5747ced4951286142bd429780f9d4115) ) |
| 3478 | ROM_LOAD( "mpr-23311.ic10", 0x5000000, 0x800000, CRC(a1467573) SHA1(cf38527b0e812ba90e7402aa53e4557ce756cf43) ) |
| 3479 | ROM_LOAD( "mpr-23312.ic11", 0x5800000, 0x800000, CRC(9b0ae703) SHA1(35f0e3cdbc206b91dad4a97feb3c533bc12a77f1) ) |
| 3480 | ROM_LOAD( "mpr-23313.ic12s", 0x6000000, 0x800000, CRC(d309fea9) SHA1(2ba2da81976126f0a79b066d855706d800279150) ) |
| 3481 | ROM_LOAD( "mpr-23314.ic13s", 0x6800000, 0x800000, CRC(0aeedeac) SHA1(5e5086a7a51a9576e786911a2c7f4b509d5bc2f4) ) |
| 3482 | ROM_LOAD( "mpr-23315.ic14s", 0x7000000, 0x800000, CRC(88f22650) SHA1(3425433d233b458ae73e30cc0c7d25fca2a9d589) ) |
| 3483 | ROM_LOAD( "mpr-23316.ic15s", 0x7800000, 0x800000, CRC(38ff3a9d) SHA1(56978183fe61fd2ad59ab2979cb61fbf2cde07e6) ) |
| 3484 | ROM_LOAD( "mpr-23317.ic16s", 0x8000000, 0x800000, CRC(d6d45776) SHA1(102963243f6e127d4c35d150eeb09aa99a3738d4) ) |
| 3485 | ROM_LOAD( "mpr-23318.ic17s", 0x8800000, 0x800000, CRC(5f33207e) SHA1(6eceb6bb9171da8634fcba9dd7409794447fe069) ) |
| 3486 | ROM_LOAD( "mpr-23319.ic18s", 0x9000000, 0x800000, CRC(ff42857a) SHA1(adbc025c4e02ad3b15ead9340aee494c16005ad5) ) |
| 3487 | ROM_LOAD( "mpr-23320.ic19s", 0x9800000, 0x800000, CRC(5ec75a45) SHA1(696e5d14678c794dec67246507bd580f7e5b5043) ) |
| 3488 | ROM_LOAD( "mpr-23321.ic20s", 0xa000000, 0x800000, CRC(018627d4) SHA1(2519f39ad046d14f602648fed39bc3719185b55e) ) |
| 3489 | ROM_END |
| 3490 | |
| 3491 | |
| 3416 | 3492 | /* Sega Tetris */ |
| 3417 | 3493 | ROM_START( sgtetris ) |
| 3418 | 3494 | ROM_REGION( 0x200000, "maincpu", 0) |
| r7882 | r7883 | |
| 4272 | 4348 | ROM_LOAD( "01f169c0.bin", 0x000000, 0x000100, CRC(b0a330f4) SHA1(10c7a7f4d6c7f265a32887beaca73686c4cb1e03) ) |
| 4273 | 4349 | ROM_END |
| 4274 | 4350 | |
| 4351 | ROM_START( kick4csh ) |
| 4352 | ROM_REGION( 0x200000, "maincpu", 0) |
| 4353 | NAOMI_BIOS |
| 4354 | NAOMI_DEFAULT_EEPROM |
| 4275 | 4355 | |
| 4356 | ROM_REGION( 0x8800000, "user1", ROMREGION_ERASEFF) |
| 4357 | ROM_LOAD( "epr-24212.ic11", 0x0000000, 0x400000, CRC(935453e8) SHA1(b34b3ac976229cba941843ffac9db420068999de) ) |
| 4358 | ROM_LOAD32_WORD( "opr-24213a.ic17s", 0x0800000, 0x800000, CRC(2ea4810b) SHA1(67e6c4b246993ca775120d145e1b129cd743b358) ) |
| 4359 | ROM_LOAD32_WORD( "opr-24214a.ic18", 0x0800002, 0x800000, CRC(0f574308) SHA1(699be7296650dcdb955048f2f5696a3b6d117afc) ) |
| 4360 | ROM_LOAD32_WORD( "opr-24215a.ic19s", 0x1800000, 0x800000, CRC(e7fcb265) SHA1(ef05e330206adb0ebdba6df2ff7aaeb570c0c7e4) ) |
| 4361 | ROM_LOAD32_WORD( "opr-24216a.ic20", 0x1800002, 0x800000, CRC(5101acc8) SHA1(2fbb4c8a450ecd070e2f18792a510e2cd4f7decb) ) |
| 4362 | ROM_LOAD32_WORD( "opr-24224a.ic21s", 0x2800000, 0x800000, CRC(a5480237) SHA1(a250a45750d3d63428bf73c85cd510e4252da2c9) ) |
| 4363 | ROM_LOAD32_WORD( "opr-24225a.ic22", 0x2800002, 0x800000, CRC(6b7e2856) SHA1(5b4a107ad654510b8282f4afe0c3856ca5a0fdf0) ) |
| 4364 | ROM_LOAD32_WORD( "opr-24226a.ic23s", 0x3800000, 0x800000, CRC(5a7b85fa) SHA1(9b7ef6bbff01e83f14513d8ea42cdb66b74303d0) ) |
| 4365 | ROM_LOAD32_WORD( "opr-24227a.ic24", 0x3800002, 0x800000, CRC(2b174c17) SHA1(9990268baf0091aef6cb3953b4da7fc2525d95af) ) |
| 4366 | ROM_LOAD32_WORD( "opr-24228a.ic25s", 0x4800000, 0x800000, CRC(92690697) SHA1(5de562751305a385b929702fc3b3dfa4883be23b) ) |
| 4367 | ROM_LOAD32_WORD( "opr-24229a.ic26", 0x4800002, 0x800000, CRC(fc3a6fbb) SHA1(1da1c011028c5b860a3d30e77a8dbdaabe997b63) ) |
| 4368 | ROM_LOAD32_WORD( "opr-24230a.ic27s", 0x5800000, 0x800000, CRC(40da73c4) SHA1(c48e5d119f3f5c40cf78f6cc7fb5b62b153743a1) ) |
| 4369 | ROM_LOAD32_WORD( "opr-24231a.ic28", 0x5800002, 0x800000, CRC(d04e33ec) SHA1(f7ed569bac47056955cb67f4ce0c1d36960f0c63) ) |
| 4370 | ROM_LOAD32_WORD( "opr-24232a.ic29", 0x6800000, 0x800000, CRC(3bec96c6) SHA1(d228959dec168af1a1800e9b0f03692a68f10b99) ) |
| 4371 | ROM_LOAD32_WORD( "opr-24233a.ic30s", 0x6800002, 0x800000, CRC(fc5bffec) SHA1(a6d63d80d11536c96d873c4ce492837ed83e3c9e) ) |
| 4372 | ROM_LOAD32_WORD( "opr-24234a.ic31", 0x7800000, 0x800000, BAD_DUMP CRC(0dc58105) SHA1(524cad7019ba87db5ea13c3370082885fb09dd08) ) |
| 4373 | ROM_LOAD32_WORD( "opr-24235a.ic32s", 0x7800002, 0x800000, BAD_DUMP CRC(1c55e3eb) SHA1(17a23c28d866b12f6249d513aea201edb2c43a68) ) |
| 4374 | ROM_END |
| 4375 | |
| 4276 | 4376 | /* GD-ROM titles - a PIC supplies a decryption key |
| 4277 | 4377 | |
| 4278 | 4378 | PIC stuff |
| r7882 | r7883 | |
| 4415 | 4515 | /* 0011C */ GAME( 1999, toyfight, naomi, naomi, naomi, naomi, ROT0, "Sega", "Toy Fighter", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 4416 | 4516 | /* 0013C */ GAME( 1999, jambo, naomi, naomi, naomi, naomi, ROT0, "Sega", "Jambo! Safari (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 4417 | 4517 | /* 0015C */ GAME( 1999, vtennis, naomi, naomi, naomi, naomi, ROT0, "Sega", "Power Smash (JPN) / Virtua Tennis (USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 4418 | | /* 0016C */ GAME( 1999, derbyoc, naomi, naomi, naomi, naomi, ROT0, "Sega", "Derby Owners Club (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 4518 | /* 0016C */ GAME( 1999, derbyoc, naomi, naomi, naomi, naomi, ROT0, "Sega", "Derby Owners Club (JPN, USA, EXP, KOR, AUS Ver. C)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 4519 | /* 0016C */ GAME( 1999, derbyocb, derbyoc, naomi, naomi, naomi, ROT0, "Sega", "Derby Owners Club (JPN, USA, EXP, KOR, AUS Ver. B)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 4419 | 4520 | /* 0017C */ GAME( 1999, otrigger, naomi, naomi, naomi, naomi, ROT0, "Sega", "OutTrigger (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 4420 | 4521 | /* 0018C */ GAME( 1999, sgtetris, naomi, naomi, naomi, naomi, ROT0, "Sega", "Sega Tetris", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 4421 | 4522 | /* 0019C */ GAME( 1999, dybb99, naomi, naomi, naomi, naomi, ROT0, "Sega", "Dynamite Baseball '99 (JPN) / World Series '99 (USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| r7882 | r7883 | |
| 4426 | 4527 | /* 0026C */ GAME( 2000, totd, naomi, naomi, naomi, naomi, ROT0, "Sega", "The Typing of the Dead (JPN, USA, EXP, KOR, AUS)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 4427 | 4528 | /* 0027C */ GAME( 2000, smarinef, naomi, naomi, naomi, naomi, ROT0, "Sega", "Sega Marine Fishing", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 4428 | 4529 | /* 0030C */ GAME( 2000, qmegamis, naomi, naomi, naomi, qmegamis, ROT0, "Sega", "Quiz Ah Megamisama (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 4530 | /* 0035B */ GAME( 2000, sstrkfgt, naomi, naomi, naomi, naomi, ROT0, "Sega", "Sega Strike Fighter (rev. A)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 4429 | 4531 | /* 0037C */ GAME( 2000, 18wheelr, naomi, naomi, naomi, naomi, ROT0, "Sega", "18 Wheeler (JPN)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 4430 | 4532 | /* 0039C */ GAME( 2000, gram2000, naomi, naomi, naomi, gram2000, ROT0, "Sega", "Giant Gram 2000 (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 4431 | 4533 | /* 0040C */ GAME( 2000, wwfroyal, naomi, naomi, naomi, naomi, ROT0, "Sega", "WWF Royal Rumble (JPN, USA, EXP, KOR, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| r7882 | r7883 | |
| 4437 | 4539 | /* 0084C */ GAME( 2001, vtenis2c, naomi, naomi, naomi, naomi, ROT0, "Sega", "Power Smash 2 / Virtua Tennis 2 (cartridge)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 4438 | 4540 | /* 0098C */ GAME( 2001, shootopl, naomi, naomi, naomi, naomi, ROT0, "Sega", "Shootout Pool", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 4439 | 4541 | /* 0128C */ GAME( 2001, shootpl, naomi, naomi, naomi, naomi, ROT0, "Sega", "Shootout Pool (JPN, USA, KOR, AUS) / Shootout Pool Prize (EXP)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 4542 | /* 0140B */ GAME( 2004, kick4csh, naomi, naomi, naomi, kick4csh, ROT0, "Sega", "Kick '4' Cash", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 4440 | 4543 | |
| 4441 | 4544 | /* 841-xxxxx ("Licensed by Sega" games)*/ |
| 4442 | 4545 | /* 0001C */ GAME( 1999, pstone, naomi, naomi, naomi, naomi, ROT0, "Capcom", "Power Stone (JPN, USA, EUR, ASI, AUS)", GAME_UNEMULATED_PROTECTION|GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| r7882 | r7883 | |
| 4610 | 4713 | ROM_END |
| 4611 | 4714 | |
| 4612 | 4715 | |
| 4716 | ROM_START( cleoftp ) |
| 4717 | NAOMIGD_BIOS |
| 4718 | NAOMI_DEFAULT_EEPROM |
| 4719 | |
| 4720 | ROM_REGION( 0x10000000, "user1", ROMREGION_ERASE) // allocate max size in init instead? |
| 4721 | |
| 4722 | DISK_REGION( "gdrom" ) |
| 4723 | DISK_IMAGE_READONLY( "gdl-0012", 0, SHA1(aae4c1321fdee37d5405c6cbe648e0596624ed13) ) |
| 4724 | |
| 4725 | ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE) |
| 4726 | |
| 4727 | ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) |
| 4728 | //PIC16C622A (317-5083-COM) |
| 4729 | //(sticker 253-5509-5083) |
| 4730 | ROM_LOAD("317-5083-com.pic", 0x00, 0x4000, CRC(096a0fc2) SHA1(8498a0d489a8e075268c07e2c076673904b04be9) ) |
| 4731 | ROM_END |
| 4732 | |
| 4733 | |
| 4613 | 4734 | ROM_START( moeru ) |
| 4614 | 4735 | NAOMIGD_BIOS |
| 4615 | 4736 | NAOMI_DEFAULT_EEPROM |
| r7882 | r7883 | |
| 4626 | 4747 | //PIC16C622A (317-5084-JPN) |
| 4627 | 4748 | //(sticker 253-5509-5084J) |
| 4628 | 4749 | ROM_LOAD("317-5084-jpn.pic", 0x00, 0x4000, CRC(db7dac1e) SHA1(b6f7afe9d9d2681005c1abcd4fde24867e65d1e4) ) |
| 4629 | | |
| 4630 | 4750 | ROM_END |
| 4631 | 4751 | |
| 4632 | 4752 | |
| r7882 | r7883 | |
| 4900 | 5020 | ROM_REGION( 0x10000000, "user1", ROMREGION_ERASE) // allocate max size in init instead? |
| 4901 | 5021 | |
| 4902 | 5022 | DISK_REGION( "gdrom" ) |
| 5023 | DISK_IMAGE_READONLY( "gdl-0031", 0, SHA1(83697f45f0ffbb964f0504b19171c554499cd709) ) |
| 5024 | |
| 5025 | ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE) |
| 5026 | //ROM_LOAD("317-5108-jpn.data", 0x00, 0x50, CRC(6a2eb334) SHA1(cab407d2e994f33aa921d50f399b17e6fbf98eb0) ) |
| 5027 | |
| 5028 | ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) |
| 5029 | //PIC16C622A (317-5108-JPN) |
| 5030 | //(sticker 253-5509-5108J) |
| 5031 | ROM_LOAD("317-5108-jpn.pic", 0x00, 0x4000, CRC(4fa7dede) SHA1(f9011e951378364a12512d398f76be174dccce69) ) |
| 5032 | ROM_END |
| 5033 | |
| 5034 | |
| 5035 | ROM_START( ss2005a ) |
| 5036 | NAOMIGD_BIOS |
| 5037 | NAOMI_DEFAULT_EEPROM |
| 5038 | |
| 5039 | ROM_REGION( 0x10000000, "user1", ROMREGION_ERASE) // allocate max size in init instead? |
| 5040 | |
| 5041 | DISK_REGION( "gdrom" ) |
| 4903 | 5042 | DISK_IMAGE_READONLY( "gdl-0031a", 0, SHA1(6091525845fc2042ed43cae5a1b60c603e16cf97) ) |
| 4904 | 5043 | |
| 4905 | 5044 | ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE) |
| r7882 | r7883 | |
| 4989 | 5128 | ROM_END |
| 4990 | 5129 | |
| 4991 | 5130 | |
| 4992 | | ROM_START( meltyb ) |
| 5131 | ROM_START( trgheart ) |
| 4993 | 5132 | NAOMIGD_BIOS |
| 4994 | 5133 | NAOMI_DEFAULT_EEPROM |
| 4995 | 5134 | |
| 4996 | 5135 | ROM_REGION( 0x10000000, "user1", ROMREGION_ERASE) // allocate max size in init instead? |
| 4997 | 5136 | |
| 4998 | 5137 | DISK_REGION( "gdrom" ) |
| 4999 | | DISK_IMAGE_READONLY( "gdl-0039", 0, SHA1(ffc7f6e113ad69422a4f22f318bdf9b1dc5c25db) ) |
| 5138 | DISK_IMAGE_READONLY( "gdl-0036a", 0, SHA1(91f1e19136997cb1e2edfb1ad342b9427d1d3bfb) ) |
| 5000 | 5139 | |
| 5001 | 5140 | ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE) |
| 5002 | | //ROM_LOAD("317-5124-jpn.data", 0x00, 0x50, CRC(4d6e2c77) SHA1(3bed734c291140d0a61afa40f221395369a251a9) ) |
| 5141 | //ROM_LOAD("317-5121-jpn.data", 0x00, 0x50, CRC(a417b20f) SHA1(af6ed7ebf95948bff3e8df915b229189b8de1e46) ) |
| 5003 | 5142 | |
| 5004 | 5143 | ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) |
| 5005 | | //PIC16C622A (317-5124-JPN) |
| 5006 | | //(sticker 253-5509-5124J) |
| 5007 | | ROM_LOAD("317-5124-jpn.pic", 0x00, 0x4000, CRC(ad162bfa) SHA1(0e9740ba65a724eb7cd70fb897e5cd9ac17aa55c) ) |
| 5144 | //PIC16C622A (317-5121-JPN) |
| 5145 | //(sticker 253-5509-5121J) |
| 5146 | ROM_LOAD("317-5121-jpn.pic", 0x00, 0x4000, CRC(cdb9b179) SHA1(8f7d1e9a99ad90344449c6ebb623e2968f611ec0) ) |
| 5008 | 5147 | ROM_END |
| 5009 | 5148 | |
| 5010 | | ROM_START( meltyba ) |
| 5149 | |
| 5150 | ROM_START( jingystm ) |
| 5011 | 5151 | NAOMIGD_BIOS |
| 5012 | 5152 | NAOMI_DEFAULT_EEPROM |
| 5013 | 5153 | |
| 5014 | 5154 | ROM_REGION( 0x10000000, "user1", ROMREGION_ERASE) // allocate max size in init instead? |
| 5015 | 5155 | |
| 5016 | 5156 | DISK_REGION( "gdrom" ) |
| 5017 | | DISK_IMAGE_READONLY( "gdl-0039a", 0, SHA1(e6aa3d65b43a20606e6754bcb8665438770a1f8c) ) |
| 5157 | DISK_IMAGE_READONLY( "gdl-0037", 0, SHA1(99ffe2987e3002b3871daf276d2be45f2e9c6e74) ) |
| 5018 | 5158 | |
| 5159 | |
| 5019 | 5160 | ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE) |
| 5020 | | //ROM_LOAD("317-5124-jpn.data", 0x00, 0x50, CRC(4d6e2c77) SHA1(3bed734c291140d0a61afa40f221395369a251a9) ) |
| 5161 | //ROM_LOAD("317-5122-jpn.data", 0x00, 0x50, CRC(0b85b7e4) SHA1(f4e419682ddc4b98a330e5ae543f9276c9bde030) ) |
| 5021 | 5162 | |
| 5022 | 5163 | ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) |
| 5023 | | //PIC16C622A (317-5124-JPN) |
| 5024 | | //(sticker 253-5509-5124J) |
| 5025 | | ROM_LOAD("317-5124-jpn.pic", 0x00, 0x4000, CRC(ad162bfa) SHA1(0e9740ba65a724eb7cd70fb897e5cd9ac17aa55c) ) |
| 5164 | //PIC16C622A (317-5122-JPN) |
| 5165 | //(sticker 253-5509-5122J) |
| 5166 | ROM_LOAD("317-5122-jpn.pic", 0x00, 0x4000, CRC(88983220) SHA1(410ee292794c44d2249778c8b6adda023286eb04) ) |
| 5026 | 5167 | ROM_END |
| 5027 | 5168 | |
| 5028 | 5169 | |
| 5029 | | ROM_START( trgheart ) |
| 5170 | ROM_START( senkosp ) |
| 5030 | 5171 | NAOMIGD_BIOS |
| 5031 | 5172 | NAOMI_DEFAULT_EEPROM |
| 5032 | 5173 | |
| 5033 | 5174 | ROM_REGION( 0x10000000, "user1", ROMREGION_ERASE) // allocate max size in init instead? |
| 5034 | 5175 | |
| 5035 | 5176 | DISK_REGION( "gdrom" ) |
| 5036 | | DISK_IMAGE_READONLY( "gdl-0036a", 0, SHA1(91f1e19136997cb1e2edfb1ad342b9427d1d3bfb) ) |
| 5177 | DISK_IMAGE_READONLY( "gdl-0038", 0, SHA1(430572f7e76c4fe009e2de91bf891d85613366b7) ) |
| 5037 | 5178 | |
| 5179 | |
| 5038 | 5180 | ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE) |
| 5039 | | //ROM_LOAD("317-5121-jpn.data", 0x00, 0x50, CRC(a417b20f) SHA1(af6ed7ebf95948bff3e8df915b229189b8de1e46) ) |
| 5040 | 5181 | |
| 5041 | 5182 | ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) |
| 5042 | | //PIC16C622A (317-5121-JPN) |
| 5043 | | //(sticker 253-5509-5121J) |
| 5044 | | ROM_LOAD("317-5121-jpn.pic", 0x00, 0x4000, CRC(cdb9b179) SHA1(8f7d1e9a99ad90344449c6ebb623e2968f611ec0) ) |
| 5183 | //PIC16C622A (317-5123-COM) |
| 5184 | //(sticker 253-5509-5123) |
| 5185 | ROM_LOAD("317-5123-com.pic", 0x00, 0x4000, CRC(7340df6e) SHA1(003a94e986335e959f9b1e8905fea8cbfdb5b2a1) ) |
| 5045 | 5186 | ROM_END |
| 5046 | 5187 | |
| 5047 | 5188 | |
| 5048 | | ROM_START( jingystm ) |
| 5189 | ROM_START( meltyb ) |
| 5049 | 5190 | NAOMIGD_BIOS |
| 5050 | 5191 | NAOMI_DEFAULT_EEPROM |
| 5051 | 5192 | |
| 5052 | 5193 | ROM_REGION( 0x10000000, "user1", ROMREGION_ERASE) // allocate max size in init instead? |
| 5053 | 5194 | |
| 5054 | 5195 | DISK_REGION( "gdrom" ) |
| 5055 | | DISK_IMAGE_READONLY( "gdl-0037", 0, SHA1(99ffe2987e3002b3871daf276d2be45f2e9c6e74) ) |
| 5196 | DISK_IMAGE_READONLY( "gdl-0039", 0, SHA1(ffc7f6e113ad69422a4f22f318bdf9b1dc5c25db) ) |
| 5056 | 5197 | |
| 5198 | ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE) |
| 5199 | //ROM_LOAD("317-5124-jpn.data", 0x00, 0x50, CRC(4d6e2c77) SHA1(3bed734c291140d0a61afa40f221395369a251a9) ) |
| 5057 | 5200 | |
| 5201 | ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) |
| 5202 | //PIC16C622A (317-5124-JPN) |
| 5203 | //(sticker 253-5509-5124J) |
| 5204 | ROM_LOAD("317-5124-jpn.pic", 0x00, 0x4000, CRC(ad162bfa) SHA1(0e9740ba65a724eb7cd70fb897e5cd9ac17aa55c) ) |
| 5205 | ROM_END |
| 5206 | |
| 5207 | ROM_START( meltyba ) |
| 5208 | NAOMIGD_BIOS |
| 5209 | NAOMI_DEFAULT_EEPROM |
| 5210 | |
| 5211 | ROM_REGION( 0x10000000, "user1", ROMREGION_ERASE) // allocate max size in init instead? |
| 5212 | |
| 5213 | DISK_REGION( "gdrom" ) |
| 5214 | DISK_IMAGE_READONLY( "gdl-0039a", 0, SHA1(e6aa3d65b43a20606e6754bcb8665438770a1f8c) ) |
| 5215 | |
| 5058 | 5216 | ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE) |
| 5059 | | //ROM_LOAD("317-5122-jpn.data", 0x00, 0x50, CRC(0b85b7e4) SHA1(f4e419682ddc4b98a330e5ae543f9276c9bde030) ) |
| 5217 | //ROM_LOAD("317-5124-jpn.data", 0x00, 0x50, CRC(4d6e2c77) SHA1(3bed734c291140d0a61afa40f221395369a251a9) ) |
| 5060 | 5218 | |
| 5061 | 5219 | ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) |
| 5062 | | //PIC16C622A (317-5122-JPN) |
| 5063 | | //(sticker 253-5509-5122J) |
| 5064 | | ROM_LOAD("317-5122-jpn.pic", 0x00, 0x4000, CRC(88983220) SHA1(410ee292794c44d2249778c8b6adda023286eb04) ) |
| 5220 | //PIC16C622A (317-5124-JPN) |
| 5221 | //(sticker 253-5509-5124J) |
| 5222 | ROM_LOAD("317-5124-jpn.pic", 0x00, 0x4000, CRC(ad162bfa) SHA1(0e9740ba65a724eb7cd70fb897e5cd9ac17aa55c) ) |
| 5065 | 5223 | ROM_END |
| 5066 | 5224 | |
| 5067 | 5225 | |
| r7882 | r7883 | |
| 5083 | 5241 | ROM_LOAD("317-5125-com.pic", 0x00, 0x4000, CRC(918efc4f) SHA1(e32502b8df0b432eebaf0286176dd3bcd3f65dbb) ) |
| 5084 | 5242 | ROM_END |
| 5085 | 5243 | |
| 5244 | /* |
| 5086 | 5245 | |
| 5246 | Title GUILTY GEAR XX ACCENT CORE |
| 5247 | Media ID D0D2 |
| 5248 | Media Config GD-ROM1/1 |
| 5249 | Regions J |
| 5250 | Peripheral String 0000000 |
| 5251 | Product Number GDL-0041 |
| 5252 | Version V1.002 |
| 5253 | Release Date 20061107 |
| 5254 | |
| 5255 | TOC DISC |
| 5256 | Track Start Sector End Sector Track Size |
| 5257 | track01.bin 150 599 1058400 |
| 5258 | track02.raw 750 2882 5016816 |
| 5259 | track03.bin 45150 549299 1185760800 |
| 5260 | |
| 5261 | PIC16C621A-20 (317-5126-JPN) |
| 5262 | Sticker: 253-5509-5126J |
| 5263 | VER0001, TEST_OK, BMX.BIN, '70 1F 71 1F' 381F91D9624051F2 |
| 5264 | |
| 5265 | */ |
| 5266 | ROM_START( ggxxac ) |
| 5267 | NAOMIGD_BIOS |
| 5268 | NAOMI_DEFAULT_EEPROM |
| 5269 | |
| 5270 | ROM_REGION( 0x10000000, "user1", ROMREGION_ERASE) // allocate max size in init instead? |
| 5271 | |
| 5272 | DISK_REGION( "gdrom" ) |
| 5273 | DISK_IMAGE_READONLY( "gdl-0041", 0, SHA1(3a589e1c79ead971c821a7566032b0187e339684) ) |
| 5274 | |
| 5275 | ROM_REGION( 0x50, "picreturn", ROMREGION_ERASE) |
| 5276 | |
| 5277 | ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) |
| 5278 | //PIC16C621A (317-5126-JPN) |
| 5279 | //(sticker 253-5509-5126J) |
| 5280 | ROM_LOAD("317-5126-jpn.pic", 0x00, 0x4000, CRC(87c44284) SHA1(a53bcead58844fb877bc657dd5b09c1a380872ee) ) |
| 5281 | ROM_END |
| 5282 | |
| 5283 | |
| 5087 | 5284 | ROM_START( takoron ) |
| 5088 | 5285 | NAOMIGD_BIOS |
| 5089 | 5286 | NAOMI_DEFAULT_EEPROM |
| r7882 | r7883 | |
| 5552 | 5749 | //GDL-0009 |
| 5553 | 5750 | GAME( 2001, ikaruga, naomigd, naomigd, naomi, naomi, ROT270, "Treasure", "Ikaruga (GDL-0010)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 5554 | 5751 | GAME( 2002, ggxx, naomigd, naomigd, naomi, ggxx, ROT0, "Arc System Works", "Guilty Gear XX (GDL-0011)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 5555 | | //GDL-0012 Cleopatra Fortune Plus |
| 5752 | GAME( 2002, cleoftp, naomigd, naomigd, naomi, naomi, ROT0, "Altron", "Cleopatra Fortune Plus (GDL-0012)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 5556 | 5753 | GAME( 2002, moeru, naomigd, naomigd, naomi, naomi, ROT0, "Altron", "Moeru Casinyo (GDL-0013)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 5557 | 5754 | //GDL-0014 Musapey's Choco Marker |
| 5558 | 5755 | GAME( 2002, chocomk, naomigd, naomigd, naomi, naomi, ROT0, "Ecole Software", "Musapey's Choco Marker (Rev A) (GDL-0014A)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| r7882 | r7883 | |
| 5578 | 5775 | //GDL-0029 |
| 5579 | 5776 | GAME( 2005, senko, naomigd, naomigd, naomi, naomi, ROT0, "G-Rev", "Senko No Ronde NEW ver. (Rev A) (GDL-0030A)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 5580 | 5777 | GAME( 2005, senkoo, senko, naomigd, naomi, naomi, ROT0, "G-Rev", "Senko No Ronde (GDL-0030)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 5581 | | //GDL-0031 Super Shanghai 2005 |
| 5582 | | GAME( 2005, ss2005, naomigd, naomigd, naomi, naomi, ROT0, "Starfish", "Super Shanghai 2005 (Rev A) (GDL-0031A)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 5778 | GAME( 2005, ss2005, naomigd, naomigd, naomi, naomi, ROT0, "Starfish", "Super Shanghai 2005 (GDL-0031)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 5779 | GAME( 2005, ss2005a, ss2005, naomigd, naomi, naomi, ROT0, "Starfish", "Super Shanghai 2005 (Rev A) (GDL-0031A)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 5583 | 5780 | GAME( 2005, radirgy, naomigd, naomigd, naomi, naomi, ROT270, "Milestone", "Radirgy (GDL-0032)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 5584 | 5781 | //GDL-0033 Guilty Gear XX Slash |
| 5585 | 5782 | GAME( 2005, ggxxsla, naomigd, naomigd, naomi, ggxxsla, ROT0, "Arc System Works", "Guilty Gear XX Slash (Rev A) (GDL-0033A)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| r7882 | r7883 | |
| 5588 | 5785 | //GDL-0036 Trigger Heart Exelica |
| 5589 | 5786 | GAME( 2005, trgheart, naomigd, naomigd, naomi, naomi, ROT270, "Warashi", "Trigger Heart Exelica (Rev A) (GDL-0036A)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 5590 | 5787 | GAME( 2005, jingystm, naomigd, naomigd, naomi, naomi, ROT0, "Atrativa Japan", "Jingi Storm - The Arcade (GDL-0037)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 5591 | | //GDL-0038 Senko No Ronde Special |
| 5788 | GAME( 2006, senkosp, naomigd, naomigd, naomi, naomi, ROT0, "G-Rev", "Senko No Ronde Special (GDL-0038)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 5592 | 5789 | GAME( 2006, meltyb, naomigd, naomigd, naomi, naomi, ROT0, "Ecole Software", "Melty Blood Act Cadenza Ver B (GDL-0039)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 5593 | 5790 | GAME( 2006, meltyba, meltyb, naomigd, naomi, naomi, ROT0, "Ecole Software", "Melty Blood Act Cadenza Ver B (Rev A) (GDL-0039A)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 5594 | 5791 | GAME( 2006, karous, naomigd, naomigd, naomi, naomi, ROT270, "Milestone", "Karous (GDL-0040)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 5595 | | //GDL-0041 Guilty Gear XX Accent Core |
| 5792 | GAME( 2006, ggxxac, naomigd, naomigd, naomi, naomi, ROT0, "Arc System Works", "Guilty Gear XX Accent Core (GDL-0041)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 5596 | 5793 | GAME( 2006, takoron, naomigd, naomigd, naomi, naomi, ROT0, "Compile", "Noukone Puzzle Takoron (GDL-0042)", GAME_IMPERFECT_GRAPHICS|GAME_IMPERFECT_SOUND|GAME_NOT_WORKING ) |
| 5597 | 5794 | |
| 5598 | 5795 | |
src/mame/drivers/vsnes.c
| r7882 | r7883 | |
| 5 | 5 | Portions of this code are heavily based on |
| 6 | 6 | Brad Oliver's MESS implementation of the NES. |
| 7 | 7 | |
| 8 | RC2C03B: |
| 9 | - Duck Hunt |
| 10 | - Mahjang |
| 11 | - Pinball (Japan) |
| 12 | - Star Luster * |
| 13 | - Stroke & Match Golf (Japan) |
| 14 | - Tennis |
| 15 | |
| 8 | 16 | RP2C04-0001: |
| 17 | - Atari R.B.I. Baseball * |
| 9 | 18 | - Baseball |
| 19 | - Battle City * |
| 10 | 20 | - Freedom Force |
| 11 | 21 | - Gradius |
| 12 | 22 | - Hogan's Alley |
| 13 | 23 | - Mach Rider (Japan, Fighting Course) |
| 14 | 24 | - Pinball |
| 15 | 25 | - Platoon |
| 16 | | - Super Xevious |
| 26 | - Super Skykid * |
| 27 | - Super Xevious * |
| 28 | - Tetris * |
| 17 | 29 | |
| 18 | 30 | RP2C04-0002: |
| 19 | 31 | - Castlevania |
| 20 | | - Ladies golf |
| 21 | 32 | - Mach Rider (Endurance Course) |
| 22 | 33 | - Raid on Bungeling Bay (Japan) |
| 23 | 34 | - Slalom |
| 24 | | - Stroke N' Match Golf |
| 35 | - Soccer (Japan) |
| 36 | - Stroke & Match Golf |
| 37 | - Stroke & Match Golf (Ladies) |
| 25 | 38 | - Wrecking Crew |
| 26 | 39 | |
| 27 | 40 | RP2C04-0003: |
| 28 | | - Dr mario |
| 29 | | - Excite Bike |
| 41 | - Balloon Fight |
| 42 | - Dr. Mario |
| 43 | - Excitebike |
| 30 | 44 | - Goonies |
| 31 | 45 | - Soccer |
| 32 | | - TKO Boxing |
| 46 | - T.K.O. Boxing * |
| 33 | 47 | |
| 34 | 48 | RP2C04-0004: |
| 35 | 49 | - Clu Clu Land |
| 36 | | - Excite Bike (Japan) |
| 50 | - Excitebike (Japan) |
| 37 | 51 | - Ice Climber |
| 38 | 52 | - Ice Climber Dual (Japan) |
| 39 | 53 | - Super Mario Bros. |
| 40 | 54 | |
| 41 | | RC2C03B: |
| 42 | | - Battle City |
| 43 | | - Duck Hunt |
| 44 | | - Mahjang |
| 45 | | - Pinball (Japan) |
| 46 | | - Rbi Baseball |
| 47 | | - Star Luster |
| 48 | | - Stroke and Match Golf (Japan) |
| 49 | | - Super Skykid |
| 50 | | - Tennis |
| 51 | | - Tetris |
| 55 | - Games marked with a star are compatible with multiple PPU types, |
| 56 | but you need to set dipswitches corresponding to the PPU installed |
| 57 | or else the game will display incorrect colors. |
| 58 | Here the games are listed under the PPU type that works with the |
| 59 | PPU selection dipswitches all set to OFF. |
| 52 | 60 | |
| 53 | 61 | RC2C05-01: |
| 54 | 62 | - Ninja Jajamaru Kun (Japan) |
| r7882 | r7883 | |
| 63 | 71 | - Top Gun |
| 64 | 72 | |
| 65 | 73 | Graphic hack games: |
| 66 | | - Skate Kids (by Two-Bit Score, 1988; hack of Vs. Super Mario Bros.) |
| 74 | - Skate Kids (by Two-Bit Score, 1988; hack of Vs. Super Mario Bros.) |
| 67 | 75 | |
| 68 | 76 | Needed roms: |
| 69 | | - Babel no Tou (by Namco, 1986) |
| 70 | | - Family Boxing (by Namco/Woodplace, 1987) |
| 71 | | - Family Stadium '87 (by Namco, 1987) |
| 72 | | - Family Stadium '88 (by Namco, 1988) |
| 73 | | - Family Tennis (by Namco, 1987) |
| 74 | | - Head to Head Baseball (ever finished/released?, by Nintendo, 1986) |
| 75 | | - Lionex (prototype by Sunsoft, 1987) |
| 76 | | - Madura no Tsubasa (prototype by Sunsoft, 1987) |
| 77 | | - Predators (prototype by Williams, 1984) |
| 78 | | - Pro Yakyuu Family Stadium (by Namco, 1986) |
| 79 | | - Quest of Ki (by Namco/Game Studio, 1988) |
| 80 | | - Super Chinese (by Namco/Culture Brain, 1988) |
| 81 | | - Toukaidou 53tsugi (prototype by Sunsoft, 1985) |
| 82 | | - Trojan (by Capcom, 1987) |
| 83 | | - Urban Champion (1984) |
| 84 | | - Volleyball (1986) |
| 85 | | - Walkure no Bouken (by Namco, 1986) |
| 86 | | - Wild Gunman (1984, light gun game) |
| 77 | - Babel no Tou (by Namco, 1986) |
| 78 | - Family Boxing (by Namco/Woodplace, 1987; Japan version of TKO Boxing) |
| 79 | - Family Stadium '87 (by Namco, 1987; sequel to RBI Baseball) |
| 80 | - Family Stadium '88 (by Namco, 1988; sequel to RBI Baseball) |
| 81 | - Family Tennis (by Namco, 1987) |
| 82 | - Head to Head Baseball (ever finished/released?, by Nintendo, 1986) |
| 83 | - Lionex (prototype by Sunsoft, 1987) |
| 84 | - Madura no Tsubasa (prototype by Sunsoft, 1987) |
| 85 | - Predators (prototype by Williams, 1984) |
| 86 | - Pro Yakyuu Family Stadium (by Namco, 1986; Japan version of RBI Baseball) |
| 87 | - Quest of Ki (by Namco/Game Studio, 1988) |
| 88 | - Super Chinese (by Namco/Culture Brain, 1988) |
| 89 | - Toukaidou 53tsugi (prototype by Sunsoft, 1985) |
| 90 | - Trojan (by Capcom, 1987) |
| 91 | - Urban Champion (1984) |
| 92 | - Volleyball (1986) |
| 93 | - Walkure no Bouken (by Namco, 1986) |
| 94 | - Wild Gunman (1984, light gun game) |
| 87 | 95 | |
| 88 | 96 | TO DO: |
| 97 | - Merge mapper implementations in machine/vsnes.c with playch10 and MESS NES |
| 89 | 98 | - Check others bits in coin counter |
| 90 | 99 | - Check other values in bnglngby irq |
| 91 | 100 | - Top Gun: cpu #0 (PC=00008016): unmapped memory byte read from 00007FFF ??? |
| r7882 | r7883 | |
| 136 | 145 | #include "sound/nes_apu.h" |
| 137 | 146 | #include "includes/vsnes.h" |
| 138 | 147 | |
| 139 | | #define DUAL_RBI 1 |
| 140 | | |
| 141 | 148 | /******************************************************************************/ |
| 142 | 149 | |
| 143 | 150 | /* local stuff */ |
| r7882 | r7883 | |
| 231 | 238 | |
| 232 | 239 | |
| 233 | 240 | static INPUT_PORTS_START( vsnes ) |
| 234 | | PORT_START("IN0") /* IN0 */ |
| 241 | PORT_START("IN0") |
| 235 | 242 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) /* BUTTON A on a nes */ |
| 236 | 243 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) /* BUTTON B on a nes */ |
| 237 | 244 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 ) /* SELECT on a nes */ |
| r7882 | r7883 | |
| 241 | 248 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) |
| 242 | 249 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) |
| 243 | 250 | |
| 244 | | PORT_START("IN1") /* IN1 */ |
| 251 | PORT_START("IN1") |
| 245 | 252 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2) /* BUTTON A on a nes */ |
| 246 | 253 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) /* BUTTON B on a nes */ |
| 247 | 254 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START2 ) /* SELECT on a nes */ |
| r7882 | r7883 | |
| 251 | 258 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) |
| 252 | 259 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) |
| 253 | 260 | |
| 254 | | PORT_START("COINS") /* IN2 */ |
| 261 | PORT_START("COINS") |
| 255 | 262 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) /* serial pin from controller */ |
| 256 | 263 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 257 | 264 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_IMPULSE(1) /* service credit? */ |
| r7882 | r7883 | |
| 267 | 274 | static INPUT_PORTS_START( vsnes_rev ) |
| 268 | 275 | PORT_INCLUDE( vsnes ) |
| 269 | 276 | |
| 270 | | PORT_MODIFY("IN0") /* IN0 */ |
| 277 | PORT_MODIFY("IN0") |
| 271 | 278 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2) /* BUTTON A on a nes */ |
| 272 | 279 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) /* BUTTON B on a nes */ |
| 273 | 280 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2) |
| r7882 | r7883 | |
| 275 | 282 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) |
| 276 | 283 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) |
| 277 | 284 | |
| 278 | | PORT_MODIFY("IN1") /* IN1 */ |
| 285 | PORT_MODIFY("IN1") |
| 279 | 286 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) /* BUTTON A on a nes */ |
| 280 | 287 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) /* BUTTON B on a nes */ |
| 281 | 288 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1) |
| r7882 | r7883 | |
| 286 | 293 | |
| 287 | 294 | static INPUT_PORTS_START( vsnes_dual ) |
| 288 | 295 | /* Left Side Controls */ |
| 289 | | PORT_START("IN0") /* IN0 */ |
| 296 | PORT_START("IN0") |
| 290 | 297 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) /* BUTTON A on a nes */ |
| 291 | 298 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) /* BUTTON B on a nes */ |
| 292 | 299 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 ) /* SELECT on a nes */ |
| r7882 | r7883 | |
| 296 | 303 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) |
| 297 | 304 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) |
| 298 | 305 | |
| 299 | | PORT_START("IN1") /* IN1 */ |
| 306 | PORT_START("IN1") |
| 300 | 307 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2) /* BUTTON A on a nes */ |
| 301 | 308 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) /* BUTTON B on a nes */ |
| 302 | 309 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START2 ) /* SELECT on a nes */ |
| r7882 | r7883 | |
| 306 | 313 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) |
| 307 | 314 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) |
| 308 | 315 | |
| 309 | | PORT_START("COINS") /* IN2 */ |
| 316 | PORT_START("COINS") |
| 310 | 317 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) /* serial pin from controller */ |
| 311 | 318 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 312 | 319 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_IMPULSE(1) /* service credit? */ |
| r7882 | r7883 | |
| 317 | 324 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) /* this bit masks irqs - dont change */ |
| 318 | 325 | |
| 319 | 326 | /* Right Side Controls */ |
| 320 | | PORT_START("IN2") /* IN3 */ |
| 327 | PORT_START("IN2") |
| 321 | 328 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(3) /* BUTTON A on a nes */ |
| 322 | 329 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(3) /* BUTTON B on a nes */ |
| 323 | 330 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("2nd Side 1 Player Start") PORT_CODE(KEYCODE_MINUS) /* SELECT on a nes */ |
| r7882 | r7883 | |
| 327 | 334 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3) |
| 328 | 335 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(3) |
| 329 | 336 | |
| 330 | | PORT_START("IN3") /* IN4 */ |
| 337 | PORT_START("IN3") |
| 331 | 338 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(4) /* BUTTON A on a nes */ |
| 332 | 339 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(4) /* BUTTON B on a nes */ |
| 333 | 340 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("2nd Side 2 Player Start") PORT_CODE(KEYCODE_EQUALS) /* SELECT on a nes */ |
| r7882 | r7883 | |
| 337 | 344 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(4) |
| 338 | 345 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(4) |
| 339 | 346 | |
| 340 | | PORT_START("COINS2") /* IN5 */ |
| 347 | PORT_START("COINS2") |
| 341 | 348 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) /* serial pin from controller */ |
| 342 | 349 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 343 | 350 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE2 ) PORT_IMPULSE(1) /* service credit? */ |
| r7882 | r7883 | |
| 353 | 360 | static INPUT_PORTS_START( vsnes_dual_rev ) |
| 354 | 361 | PORT_INCLUDE( vsnes_dual ) |
| 355 | 362 | |
| 356 | | PORT_MODIFY("IN0") /* IN0 */ |
| 363 | PORT_MODIFY("IN0") |
| 357 | 364 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2) /* BUTTON A on a nes */ |
| 358 | 365 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) /* BUTTON B on a nes */ |
| 359 | 366 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2) |
| r7882 | r7883 | |
| 361 | 368 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) |
| 362 | 369 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) |
| 363 | 370 | |
| 364 | | PORT_MODIFY("IN1") /* IN1 */ |
| 371 | PORT_MODIFY("IN1") |
| 365 | 372 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) /* BUTTON A on a nes */ |
| 366 | 373 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) /* BUTTON B on a nes */ |
| 367 | 374 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1) |
| r7882 | r7883 | |
| 369 | 376 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) |
| 370 | 377 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) |
| 371 | 378 | |
| 372 | | PORT_MODIFY("IN2") /* IN3 */ |
| 379 | PORT_MODIFY("IN2") |
| 373 | 380 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(4) /* BUTTON A on a nes */ |
| 374 | 381 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(4) /* BUTTON B on a nes */ |
| 375 | 382 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(4) |
| r7882 | r7883 | |
| 377 | 384 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(4) |
| 378 | 385 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(4) |
| 379 | 386 | |
| 380 | | PORT_MODIFY("IN3") /* IN4 */ |
| 387 | PORT_MODIFY("IN3") |
| 381 | 388 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(3) /* BUTTON A on a nes */ |
| 382 | 389 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(3) /* BUTTON B on a nes */ |
| 383 | 390 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(3) |
| r7882 | r7883 | |
| 387 | 394 | INPUT_PORTS_END |
| 388 | 395 | |
| 389 | 396 | static INPUT_PORTS_START( vsnes_zapper ) |
| 390 | | PORT_START("IN0") /* IN0 */ |
| 397 | PORT_START("IN0") |
| 391 | 398 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 392 | 399 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 393 | 400 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| r7882 | r7883 | |
| 397 | 404 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) /* sprite hit */ |
| 398 | 405 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) /* gun trigger */ |
| 399 | 406 | |
| 400 | | PORT_START("IN1") /* IN1 */ |
| 407 | PORT_START("IN1") |
| 401 | 408 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 402 | 409 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 403 | 410 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| r7882 | r7883 | |
| 407 | 414 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 408 | 415 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 409 | 416 | |
| 410 | | PORT_START("COINS") /* IN2 */ |
| 417 | PORT_START("COINS") |
| 411 | 418 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) /* serial pin from controller */ |
| 412 | 419 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 413 | 420 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_IMPULSE(1) /* service credit? */ |
| r7882 | r7883 | |
| 417 | 424 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(1) |
| 418 | 425 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 419 | 426 | |
| 420 | | PORT_START("GUNX") /* IN4 - FAKE - Gun X pos */ |
| 427 | PORT_START("GUNX") /* FAKE - Gun X pos */ |
| 421 | 428 | PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(70) PORT_KEYDELTA(30) |
| 422 | 429 | |
| 423 | | PORT_START("GUNY") /* IN5 - FAKE - Gun Y pos */ |
| 430 | PORT_START("GUNY") /* FAKE - Gun Y pos */ |
| 424 | 431 | PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(30) |
| 425 | 432 | INPUT_PORTS_END |
| 426 | 433 | |
| r7882 | r7883 | |
| 428 | 435 | static INPUT_PORTS_START( topgun ) |
| 429 | 436 | PORT_INCLUDE( vsnes ) |
| 430 | 437 | |
| 431 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 438 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 432 | 439 | PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) ) |
| 433 | 440 | PORT_DIPSETTING( 0x03, DEF_STR( 5C_1C ) ) |
| 434 | 441 | PORT_DIPSETTING( 0x05, DEF_STR( 4C_1C ) ) |
| r7882 | r7883 | |
| 457 | 464 | static INPUT_PORTS_START( platoon ) |
| 458 | 465 | PORT_INCLUDE( vsnes ) |
| 459 | 466 | |
| 460 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 467 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 461 | 468 | PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unknown ) ) |
| 462 | 469 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 463 | 470 | PORT_DIPSETTING( 0x01, DEF_STR( On ) ) |
| r7882 | r7883 | |
| 503 | 510 | static INPUT_PORTS_START( golf ) |
| 504 | 511 | PORT_INCLUDE( vsnes_rev ) |
| 505 | 512 | |
| 506 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 513 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 507 | 514 | PORT_DIPNAME( 0x07, 0x01, DEF_STR( Coinage ) ) |
| 508 | 515 | PORT_DIPSETTING( 0x07, DEF_STR( 4C_1C ) ) |
| 509 | 516 | PORT_DIPSETTING( 0x03, DEF_STR( 3C_1C ) ) |
| r7882 | r7883 | |
| 543 | 550 | static INPUT_PORTS_START( vstennis ) |
| 544 | 551 | PORT_INCLUDE( vsnes_dual ) |
| 545 | 552 | |
| 546 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 553 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 547 | 554 | PORT_DIPNAME( 0x03, 0x00, "Difficulty Vs. Computer" ) |
| 548 | 555 | PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) |
| 549 | 556 | PORT_DIPSETTING( 0x02, DEF_STR( Normal ) ) |
| r7882 | r7883 | |
| 593 | 600 | static INPUT_PORTS_START( wrecking ) |
| 594 | 601 | PORT_INCLUDE( vsnes_dual ) |
| 595 | 602 | |
| 596 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 603 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 597 | 604 | PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) ) |
| 598 | 605 | PORT_DIPSETTING( 0x00, "3" ) |
| 599 | 606 | PORT_DIPSETTING( 0x02, "4" ) |
| r7882 | r7883 | |
| 618 | 625 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 619 | 626 | PORT_DIPSETTING( 0x80, DEF_STR( On ) ) |
| 620 | 627 | |
| 621 | | PORT_START("DSW1") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 628 | PORT_START("DSW1") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 622 | 629 | PORT_DIPNAME( 0x07, 0x01, DEF_STR( Coinage ) ) |
| 623 | 630 | PORT_DIPSETTING( 0x07, DEF_STR( 4C_1C ) ) |
| 624 | 631 | PORT_DIPSETTING( 0x03, DEF_STR( 3C_1C ) ) |
| r7882 | r7883 | |
| 648 | 655 | static INPUT_PORTS_START( balonfgt ) |
| 649 | 656 | PORT_INCLUDE( vsnes_dual ) |
| 650 | 657 | |
| 651 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 658 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 652 | 659 | PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) ) |
| 653 | 660 | PORT_DIPSETTING( 0x03, DEF_STR( 4C_1C ) ) |
| 654 | 661 | PORT_DIPSETTING( 0x05, DEF_STR( 3C_1C ) ) |
| r7882 | r7883 | |
| 672 | 679 | PORT_DIPSETTING( 0x40, DEF_STR( On ) ) |
| 673 | 680 | PORT_SERVICE( 0x80, IP_ACTIVE_HIGH ) |
| 674 | 681 | |
| 675 | | PORT_START("DSW1") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 682 | PORT_START("DSW1") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 676 | 683 | PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) ) |
| 677 | 684 | PORT_DIPSETTING( 0x00, "3" ) |
| 678 | 685 | PORT_DIPSETTING( 0x02, "4" ) |
| r7882 | r7883 | |
| 701 | 708 | static INPUT_PORTS_START( vsmahjng ) |
| 702 | 709 | PORT_INCLUDE( vsnes_dual ) |
| 703 | 710 | |
| 704 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 711 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 705 | 712 | PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unknown ) ) |
| 706 | 713 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 707 | 714 | PORT_DIPSETTING( 0x01, DEF_STR( On ) ) |
| r7882 | r7883 | |
| 726 | 733 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 727 | 734 | PORT_DIPSETTING( 0x80, DEF_STR( On ) ) |
| 728 | 735 | |
| 729 | | PORT_START("DSW1") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 736 | PORT_START("DSW1") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 730 | 737 | PORT_SERVICE( 0x01, IP_ACTIVE_HIGH ) |
| 731 | 738 | PORT_DIPNAME( 0x06, 0x00, DEF_STR( Coinage ) ) |
| 732 | 739 | PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) ) |
| r7882 | r7883 | |
| 752 | 759 | static INPUT_PORTS_START( vsbball ) |
| 753 | 760 | PORT_INCLUDE( vsnes_dual ) |
| 754 | 761 | |
| 755 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 762 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 756 | 763 | PORT_SERVICE( 0x01, IP_ACTIVE_HIGH ) |
| 757 | 764 | PORT_DIPNAME( 0x06, 0x00, DEF_STR( Coinage ) ) |
| 758 | 765 | PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) ) |
| r7882 | r7883 | |
| 775 | 782 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 776 | 783 | PORT_DIPSETTING( 0x80, DEF_STR( On ) ) |
| 777 | 784 | |
| 778 | | PORT_START("DSW1") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 785 | PORT_START("DSW1") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 779 | 786 | PORT_DIPNAME( 0x03, 0x02, "Player Defense Strenght" ) |
| 780 | 787 | PORT_DIPSETTING( 0x00, "Weak" ) |
| 781 | 788 | PORT_DIPSETTING( 0x02, DEF_STR( Normal ) ) |
| r7882 | r7883 | |
| 801 | 808 | static INPUT_PORTS_START( vsbballj ) |
| 802 | 809 | PORT_INCLUDE( vsnes_dual ) |
| 803 | 810 | |
| 804 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 811 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 805 | 812 | PORT_DIPNAME( 0x03, 0x02, "Player Defense Strenght" ) |
| 806 | 813 | PORT_DIPSETTING( 0x00, "Weak" ) |
| 807 | 814 | PORT_DIPSETTING( 0x02, DEF_STR( Normal ) ) |
| r7882 | r7883 | |
| 823 | 830 | PORT_DIPSETTING( 0x40, "Strong" ) |
| 824 | 831 | PORT_DIPSETTING( 0xc0, "Very Strong" ) |
| 825 | 832 | |
| 826 | | PORT_START("DSW1") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 833 | PORT_START("DSW1") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 827 | 834 | PORT_SERVICE( 0x01, IP_ACTIVE_HIGH ) |
| 828 | 835 | PORT_DIPNAME( 0x06, 0x00, DEF_STR( Coinage ) ) |
| 829 | 836 | PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) ) |
| r7882 | r7883 | |
| 851 | 858 | static INPUT_PORTS_START( iceclmrj ) |
| 852 | 859 | PORT_INCLUDE( vsnes_dual_rev ) |
| 853 | 860 | |
| 854 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 861 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 855 | 862 | PORT_DIPNAME( 0x07, 0x00, "Coinage (Left Side)" ) |
| 856 | 863 | PORT_DIPSETTING( 0x03, DEF_STR( 4C_1C ) ) |
| 857 | 864 | PORT_DIPSETTING( 0x05, DEF_STR( 3C_1C ) ) |
| r7882 | r7883 | |
| 876 | 883 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 877 | 884 | PORT_DIPSETTING( 0x80, DEF_STR( On ) ) |
| 878 | 885 | |
| 879 | | PORT_START("DSW1") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 886 | PORT_START("DSW1") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 880 | 887 | PORT_DIPNAME( 0x07, 0x00, "Coinage (Right Side)" ) |
| 881 | 888 | PORT_DIPSETTING( 0x03, DEF_STR( 4C_1C ) ) |
| 882 | 889 | PORT_DIPSETTING( 0x05, DEF_STR( 3C_1C ) ) |
| r7882 | r7883 | |
| 905 | 912 | static INPUT_PORTS_START( drmario ) |
| 906 | 913 | PORT_INCLUDE( vsnes_rev ) |
| 907 | 914 | |
| 908 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 915 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 909 | 916 | PORT_DIPNAME( 0x03, 0x00, "Drop Rate Increases After" ) |
| 910 | 917 | PORT_DIPSETTING( 0x00, "7 Pills" ) |
| 911 | 918 | PORT_DIPSETTING( 0x01, "8 Pills" ) |
| r7882 | r7883 | |
| 932 | 939 | static INPUT_PORTS_START( rbibb ) |
| 933 | 940 | PORT_INCLUDE( vsnes_rev ) |
| 934 | 941 | |
| 935 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 942 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 936 | 943 | PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coinage ) ) |
| 937 | 944 | PORT_DIPSETTING( 0x03, DEF_STR( 3C_1C ) ) |
| 938 | 945 | PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) ) |
| r7882 | r7883 | |
| 946 | 953 | PORT_DIPNAME( 0x10, 0x00, DEF_STR( Demo_Sounds ) ) |
| 947 | 954 | PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) |
| 948 | 955 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 949 | | PORT_DIPNAME( 0xe0, 0x80, "Color Palette" ) |
| 950 | | PORT_DIPSETTING( 0x80, DEF_STR( Normal ) ) |
| 951 | | PORT_DIPSETTING( 0x00, "Wrong 1" ) |
| 952 | | PORT_DIPSETTING( 0x40, "Wrong 2" ) |
| 953 | | PORT_DIPSETTING( 0x20, "Wrong 3" ) |
| 954 | | PORT_DIPSETTING( 0xc0, "Wrong 4" ) |
| 955 | | /* 0x60,0xa0,0xe0:again "Wrong 3" */ |
| 956 | PORT_DIPNAME( 0xe0, 0x00, "PPU Type" ) |
| 957 | PORT_DIPSETTING( 0x00, "RP2C04-0001" ) |
| 958 | PORT_DIPSETTING( 0x20, "RP2C03" ) |
| 959 | PORT_DIPSETTING( 0x40, "RP2C04-0002" ) |
| 960 | // PORT_DIPSETTING( 0x60, "RP2C03" ) |
| 961 | PORT_DIPSETTING( 0x80, "RP2C04-0003" ) |
| 962 | // PORT_DIPSETTING( 0xa0, "RP2C03" ) |
| 963 | PORT_DIPSETTING( 0xc0, "RP2C04-0004" ) |
| 964 | // PORT_DIPSETTING( 0xe0, "RP2C03" ) |
| 956 | 965 | INPUT_PORTS_END |
| 957 | 966 | |
| 958 | 967 | static INPUT_PORTS_START( btlecity ) |
| 959 | 968 | PORT_INCLUDE( vsnes_rev ) |
| 960 | 969 | |
| 961 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 970 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 962 | 971 | PORT_DIPNAME( 0x01, 0x01, "Credits for 2 Players" ) |
| 963 | 972 | PORT_DIPSETTING( 0x00, "1" ) |
| 964 | 973 | PORT_DIPSETTING( 0x01, "2" ) |
| r7882 | r7883 | |
| 977 | 986 | PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) |
| 978 | 987 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 979 | 988 | PORT_DIPSETTING( 0x20, DEF_STR( On ) ) |
| 980 | | PORT_DIPNAME( 0xc0, 0x80, "Color Palette" ) |
| 981 | | PORT_DIPSETTING( 0x80, DEF_STR( Normal ) ) |
| 982 | | PORT_DIPSETTING( 0x00, "Wrong 1" ) |
| 983 | | PORT_DIPSETTING( 0x40, "Wrong 2" ) |
| 984 | | PORT_DIPSETTING( 0xc0, "Wrong 3" ) |
| 989 | PORT_DIPNAME( 0xc0, 0x00, "PPU Type" ) |
| 990 | PORT_DIPSETTING( 0x00, "RP2C04-0001" ) |
| 991 | PORT_DIPSETTING( 0x40, "RP2C04-0002" ) |
| 992 | PORT_DIPSETTING( 0x80, "RP2C04-0003" ) |
| 993 | PORT_DIPSETTING( 0xc0, "RP2C04-0004" ) |
| 985 | 994 | INPUT_PORTS_END |
| 986 | 995 | |
| 987 | 996 | static INPUT_PORTS_START( cluclu ) |
| 988 | 997 | PORT_INCLUDE( vsnes_rev ) |
| 989 | 998 | |
| 990 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 999 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 991 | 1000 | PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) ) |
| 992 | 1001 | PORT_DIPSETTING( 0x03, DEF_STR( 4C_1C ) ) |
| 993 | 1002 | PORT_DIPSETTING( 0x05, DEF_STR( 3C_1C ) ) |
| r7882 | r7883 | |
| 1016 | 1025 | static INPUT_PORTS_START( cstlevna ) |
| 1017 | 1026 | PORT_INCLUDE( vsnes ) |
| 1018 | 1027 | |
| 1019 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1028 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1020 | 1029 | PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) ) |
| 1021 | 1030 | PORT_DIPSETTING( 0x03, DEF_STR( 5C_1C ) ) |
| 1022 | 1031 | PORT_DIPSETTING( 0x05, DEF_STR( 4C_1C ) ) |
| r7882 | r7883 | |
| 1045 | 1054 | static INPUT_PORTS_START( iceclimb ) |
| 1046 | 1055 | PORT_INCLUDE( vsnes_rev ) |
| 1047 | 1056 | |
| 1048 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1057 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1049 | 1058 | PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) ) |
| 1050 | 1059 | PORT_DIPSETTING( 0x03, DEF_STR( 4C_1C ) ) |
| 1051 | 1060 | PORT_DIPSETTING( 0x05, DEF_STR( 3C_1C ) ) |
| r7882 | r7883 | |
| 1090 | 1099 | static INPUT_PORTS_START( excitebk ) |
| 1091 | 1100 | PORT_INCLUDE( vsnes ) |
| 1092 | 1101 | |
| 1093 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1102 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1094 | 1103 | PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) ) |
| 1095 | 1104 | PORT_DIPSETTING( 0x03, DEF_STR( 4C_1C ) ) |
| 1096 | 1105 | PORT_DIPSETTING( 0x05, DEF_STR( 3C_1C ) ) |
| r7882 | r7883 | |
| 1130 | 1139 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN1 ) |
| 1131 | 1140 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 1132 | 1141 | |
| 1133 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1142 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1134 | 1143 | PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) ) |
| 1135 | 1144 | PORT_DIPSETTING( 0x03, DEF_STR( 4C_1C ) ) |
| 1136 | 1145 | PORT_DIPSETTING( 0x05, DEF_STR( 3C_1C ) ) |
| r7882 | r7883 | |
| 1158 | 1167 | static INPUT_PORTS_START( machridr ) |
| 1159 | 1168 | PORT_INCLUDE( vsnes ) |
| 1160 | 1169 | |
| 1161 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1170 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1162 | 1171 | PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) ) |
| 1163 | 1172 | PORT_DIPSETTING( 0x03, DEF_STR( 4C_1C ) ) |
| 1164 | 1173 | PORT_DIPSETTING( 0x05, DEF_STR( 3C_1C ) ) |
| r7882 | r7883 | |
| 1200 | 1209 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN1 ) |
| 1201 | 1210 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN2 ) |
| 1202 | 1211 | |
| 1203 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1212 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1204 | 1213 | PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) ) |
| 1205 | 1214 | PORT_DIPSETTING( 0x03, DEF_STR( 4C_1C ) ) |
| 1206 | 1215 | PORT_DIPSETTING( 0x05, DEF_STR( 3C_1C ) ) |
| r7882 | r7883 | |
| 1227 | 1236 | static INPUT_PORTS_START( suprmrio ) |
| 1228 | 1237 | PORT_INCLUDE( vsnes ) |
| 1229 | 1238 | |
| 1230 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1239 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1231 | 1240 | PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) ) |
| 1232 | 1241 | PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) ) |
| 1233 | 1242 | PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) ) |
| r7882 | r7883 | |
| 1371 | 1380 | static INPUT_PORTS_START( vstetris ) |
| 1372 | 1381 | PORT_INCLUDE( vsnes_rev ) |
| 1373 | 1382 | |
| 1374 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1383 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1375 | 1384 | PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unknown ) ) |
| 1376 | 1385 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 1377 | 1386 | PORT_DIPSETTING( 0x01, DEF_STR( On ) ) |
| r7882 | r7883 | |
| 1386 | 1395 | PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) |
| 1387 | 1396 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 1388 | 1397 | PORT_DIPSETTING( 0x10, DEF_STR( On ) ) |
| 1389 | | PORT_DIPNAME( 0xe0, 0x80, "Color Palette" ) |
| 1390 | | PORT_DIPSETTING( 0x80, DEF_STR( Normal ) ) |
| 1391 | | PORT_DIPSETTING( 0x00, "Wrong 1" ) |
| 1392 | | PORT_DIPSETTING( 0x40, "Wrong 2" ) |
| 1393 | | PORT_DIPSETTING( 0x20, "Wrong 3" ) |
| 1394 | | PORT_DIPSETTING( 0xc0, "Wrong 4" ) |
| 1395 | | /* 0x60,0xa0,0xe0:again "Wrong 3" */ |
| 1398 | PORT_DIPNAME( 0xe0, 0x00, "PPU Type" ) |
| 1399 | PORT_DIPSETTING( 0x00, "RP2C04-0001" ) |
| 1400 | PORT_DIPSETTING( 0x20, "RP2C03" ) |
| 1401 | PORT_DIPSETTING( 0x40, "RP2C04-0002" ) |
| 1402 | // PORT_DIPSETTING( 0x60, "RP2C03" ) |
| 1403 | PORT_DIPSETTING( 0x80, "RP2C04-0003" ) |
| 1404 | // PORT_DIPSETTING( 0xa0, "RP2C03" ) |
| 1405 | PORT_DIPSETTING( 0xc0, "RP2C04-0004" ) |
| 1406 | // PORT_DIPSETTING( 0xe0, "RP2C03" ) |
| 1396 | 1407 | INPUT_PORTS_END |
| 1397 | 1408 | |
| 1398 | 1409 | /* P2 Start is a different bit */ |
| r7882 | r7883 | |
| 1405 | 1416 | PORT_MODIFY("IN1") |
| 1406 | 1417 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* SELECT on a nes */ |
| 1407 | 1418 | |
| 1408 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1419 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1409 | 1420 | PORT_DIPNAME( 0x03, 0x01, DEF_STR( Difficulty ) ) |
| 1410 | 1421 | PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) |
| 1411 | 1422 | PORT_DIPSETTING( 0x01, DEF_STR( Normal ) ) |
| r7882 | r7883 | |
| 1419 | 1430 | PORT_DIPSETTING( 0x10, DEF_STR( 2C_1C ) ) |
| 1420 | 1431 | PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) |
| 1421 | 1432 | PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) |
| 1422 | | PORT_DIPNAME( 0xe0, 0x20, "Color Palette" ) // marked as MUST BE OFF |
| 1423 | | PORT_DIPSETTING( 0x20, DEF_STR( Normal ) ) |
| 1424 | | PORT_DIPSETTING( 0x00, "Wrong 1" ) |
| 1425 | | PORT_DIPSETTING( 0x40, "Wrong 2" ) |
| 1426 | | PORT_DIPSETTING( 0x80, "Wrong 3" ) |
| 1427 | | PORT_DIPSETTING( 0xc0, "Wrong 4" ) |
| 1428 | | /* 0x60,0xa0,0xe0:again DEF_STR( Normal ) */ |
| 1433 | PORT_DIPNAME( 0xe0, 0x00, "PPU Type" ) |
| 1434 | PORT_DIPSETTING( 0x00, "RP2C04-0001" ) |
| 1435 | PORT_DIPSETTING( 0x20, "RP2C03" ) |
| 1436 | PORT_DIPSETTING( 0x40, "RP2C04-0002" ) |
| 1437 | // PORT_DIPSETTING( 0x60, "RP2C03" ) |
| 1438 | PORT_DIPSETTING( 0x80, "RP2C04-0003" ) |
| 1439 | // PORT_DIPSETTING( 0xa0, "RP2C03" ) |
| 1440 | PORT_DIPSETTING( 0xc0, "RP2C04-0004" ) |
| 1441 | // PORT_DIPSETTING( 0xe0, "RP2C03" ) |
| 1429 | 1442 | INPUT_PORTS_END |
| 1430 | 1443 | |
| 1431 | 1444 | static INPUT_PORTS_START( vspinbal ) |
| 1432 | 1445 | PORT_INCLUDE( vsnes ) |
| 1433 | 1446 | |
| 1434 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1447 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1435 | 1448 | PORT_DIPNAME( 0x07, 0x01, DEF_STR( Coinage ) ) |
| 1436 | 1449 | PORT_DIPSETTING( 0x07, DEF_STR( 4C_1C ) ) |
| 1437 | 1450 | PORT_DIPSETTING( 0x03, DEF_STR( 3C_1C ) ) |
| r7882 | r7883 | |
| 1476 | 1489 | static INPUT_PORTS_START( goonies ) |
| 1477 | 1490 | PORT_INCLUDE( vsnes ) |
| 1478 | 1491 | |
| 1479 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1492 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1480 | 1493 | PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) ) |
| 1481 | 1494 | PORT_DIPSETTING( 0x03, DEF_STR( 5C_1C ) ) |
| 1482 | 1495 | PORT_DIPSETTING( 0x05, DEF_STR( 4C_1C ) ) |
| r7882 | r7883 | |
| 1505 | 1518 | static INPUT_PORTS_START( vssoccer ) |
| 1506 | 1519 | PORT_INCLUDE( vsnes_rev ) |
| 1507 | 1520 | |
| 1508 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1521 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1509 | 1522 | PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) ) |
| 1510 | 1523 | PORT_DIPSETTING( 0x03, DEF_STR( 4C_1C ) ) |
| 1511 | 1524 | PORT_DIPSETTING( 0x05, DEF_STR( 3C_1C ) ) |
| r7882 | r7883 | |
| 1533 | 1546 | static INPUT_PORTS_START( vsgradus ) |
| 1534 | 1547 | PORT_INCLUDE( vsnes_rev ) |
| 1535 | 1548 | |
| 1536 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1549 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1537 | 1550 | PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) ) |
| 1538 | 1551 | PORT_DIPSETTING( 0x03, DEF_STR( 5C_1C ) ) |
| 1539 | 1552 | PORT_DIPSETTING( 0x05, DEF_STR( 4C_1C ) ) |
| r7882 | r7883 | |
| 1562 | 1575 | static INPUT_PORTS_START( vsslalom ) |
| 1563 | 1576 | PORT_INCLUDE( vsnes ) |
| 1564 | 1577 | |
| 1565 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1578 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1566 | 1579 | PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) ) |
| 1567 | 1580 | PORT_DIPSETTING( 0x03, DEF_STR( 5C_1C ) ) |
| 1568 | 1581 | PORT_DIPSETTING( 0x05, DEF_STR( 4C_1C ) ) |
| r7882 | r7883 | |
| 1606 | 1619 | PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) |
| 1607 | 1620 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 1608 | 1621 | PORT_DIPSETTING( 0x10, DEF_STR( On ) ) |
| 1609 | | PORT_DIPNAME( 0x60, 0x40, "Palette Color" ) |
| 1610 | | PORT_DIPSETTING( 0x40, "Black" ) |
| 1611 | | PORT_DIPSETTING( 0x20, "Green" ) |
| 1612 | | PORT_DIPSETTING( 0x60, "Grey" ) |
| 1613 | | PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) |
| 1614 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 1615 | | PORT_DIPSETTING( 0x80, DEF_STR( On ) ) |
| 1622 | PORT_DIPNAME( 0xe0, 0x00, "PPU Type" ) |
| 1623 | PORT_DIPSETTING( 0x00, "RP2C03" ) |
| 1624 | PORT_DIPSETTING( 0x20, "RP2C04-0001" ) |
| 1625 | // PORT_DIPSETTING( 0x40, "RP2C03" ) |
| 1626 | PORT_DIPSETTING( 0x60, "RP2C04-0002" ) |
| 1627 | // PORT_DIPSETTING( 0x80, "RP2C03" ) |
| 1628 | PORT_DIPSETTING( 0xa0, "RP2C04-0003" ) |
| 1629 | // PORT_DIPSETTING( 0xc0, "RP2C03" ) |
| 1630 | PORT_DIPSETTING( 0xe0, "RP2C04-0004" ) |
| 1616 | 1631 | |
| 1617 | 1632 | PORT_START("DSW1") /* no DSW1? */ |
| 1618 | 1633 | PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) |
| r7882 | r7883 | |
| 1621 | 1636 | static INPUT_PORTS_START( tkoboxng ) |
| 1622 | 1637 | PORT_INCLUDE( vsnes ) |
| 1623 | 1638 | |
| 1624 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1639 | PORT_MODIFY("COINS") /* IN2 */ |
| 1640 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE1 ) /* service credit? */ |
| 1641 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN1 ) |
| 1642 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN2 ) |
| 1643 | |
| 1644 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1625 | 1645 | PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coinage ) ) |
| 1626 | 1646 | PORT_DIPSETTING( 0x03, DEF_STR( 3C_1C ) ) |
| 1627 | 1647 | PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) ) |
| r7882 | r7883 | |
| 1636 | 1656 | PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) |
| 1637 | 1657 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 1638 | 1658 | PORT_DIPSETTING( 0x10, DEF_STR( On ) ) |
| 1639 | | PORT_DIPNAME( 0x20, 0x00, "Palette Color" ) |
| 1640 | | PORT_DIPSETTING( 0x00, "Black" ) |
| 1641 | | PORT_DIPSETTING( 0x20, "White" ) |
| 1642 | | PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) |
| 1643 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 1644 | | PORT_DIPSETTING( 0x40, DEF_STR( On ) ) |
| 1645 | | PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) |
| 1646 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 1647 | | PORT_DIPSETTING( 0x80, DEF_STR( On ) ) |
| 1659 | PORT_DIPNAME( 0xe0, 0x00, "PPU Type" ) |
| 1660 | PORT_DIPSETTING( 0x00, "RP2C04-0003" ) |
| 1661 | // PORT_DIPSETTING( 0x20, "RP2C03" ) |
| 1662 | // PORT_DIPSETTING( 0x40, "RP2C03" ) |
| 1663 | // PORT_DIPSETTING( 0x60, "RP2C03" ) |
| 1664 | // PORT_DIPSETTING( 0x80, "RP2C03" ) |
| 1665 | // PORT_DIPSETTING( 0xa0, "RP2C03" ) |
| 1666 | // PORT_DIPSETTING( 0xc0, "RP2C03" ) |
| 1667 | PORT_DIPSETTING( 0xe0, "RP2C03" ) |
| 1648 | 1668 | INPUT_PORTS_END |
| 1649 | 1669 | |
| 1650 | 1670 | static INPUT_PORTS_START( bnglngby ) |
| r7882 | r7883 | |
| 1662 | 1682 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN2 ) |
| 1663 | 1683 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SPECIAL ) |
| 1664 | 1684 | |
| 1665 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1685 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1666 | 1686 | PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) ) |
| 1667 | 1687 | PORT_DIPSETTING( 0x03, DEF_STR( 4C_1C ) ) |
| 1668 | 1688 | PORT_DIPSETTING( 0x05, DEF_STR( 3C_1C ) ) |
| r7882 | r7883 | |
| 1689 | 1709 | static INPUT_PORTS_START( mightybj ) |
| 1690 | 1710 | PORT_INCLUDE( vsnes ) |
| 1691 | 1711 | |
| 1692 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1712 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1693 | 1713 | PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) ) |
| 1694 | 1714 | PORT_DIPSETTING( 0x07, DEF_STR( 5C_1C ) ) |
| 1695 | 1715 | PORT_DIPSETTING( 0x03, DEF_STR( 4C_1C ) ) |
| r7882 | r7883 | |
| 1726 | 1746 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN1 ) |
| 1727 | 1747 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 1728 | 1748 | |
| 1729 | | PORT_START("DSW0") /* DSW0 - bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1749 | PORT_START("DSW0") /* bit 0 and 1 read from bit 3 and 4 on $4016, rest of the bits read on $4017 */ |
| 1730 | 1750 | PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unknown ) ) |
| 1731 | 1751 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 1732 | 1752 | PORT_DIPSETTING( 0x01, DEF_STR( On ) ) |
| r7882 | r7883 | |
| 1744 | 1764 | PORT_DIPSETTING( 0x20, DEF_STR( 2C_1C ) ) |
| 1745 | 1765 | PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) |
| 1746 | 1766 | PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) ) |
| 1747 | | PORT_DIPNAME( 0xc0, 0x00, "Color Palette" ) |
| 1748 | | PORT_DIPSETTING( 0x00, DEF_STR( Normal ) ) |
| 1749 | | PORT_DIPSETTING( 0x40, "Wrong 1" ) |
| 1750 | | PORT_DIPSETTING( 0x80, "Wrong 2" ) |
| 1751 | | PORT_DIPSETTING( 0xc0, "Wrong 3" ) |
| 1767 | PORT_DIPNAME( 0xc0, 0x00, "PPU Type" ) |
| 1768 | PORT_DIPSETTING( 0x00, "RP2C04-0001" ) |
| 1769 | PORT_DIPSETTING( 0x40, "RP2C04-0002" ) |
| 1770 | PORT_DIPSETTING( 0x80, "RP2C04-0003" ) |
| 1771 | PORT_DIPSETTING( 0xc0, "RP2C04-0004" ) |
| 1752 | 1772 | INPUT_PORTS_END |
| 1753 | 1773 | |
| 1754 | 1774 | static const nes_interface nes_interface_1 = |
| r7882 | r7883 | |
| 1796 | 1816 | MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) |
| 1797 | 1817 | MACHINE_DRIVER_END |
| 1798 | 1818 | |
| 1819 | static MACHINE_DRIVER_START( jajamaru ) |
| 1820 | MDRV_IMPORT_FROM( vsnes ) |
| 1799 | 1821 | |
| 1822 | MDRV_DEVICE_REMOVE( "ppu1" ) |
| 1823 | MDRV_PPU2C05_01_ADD("ppu1", vsnes_ppu_interface_1) |
| 1824 | MACHINE_DRIVER_END |
| 1825 | |
| 1826 | static MACHINE_DRIVER_START( mightybj ) |
| 1827 | MDRV_IMPORT_FROM( vsnes ) |
| 1828 | |
| 1829 | MDRV_DEVICE_REMOVE( "ppu1" ) |
| 1830 | MDRV_PPU2C05_02_ADD("ppu1", vsnes_ppu_interface_1) |
| 1831 | MACHINE_DRIVER_END |
| 1832 | |
| 1833 | static MACHINE_DRIVER_START( vsgshoe ) |
| 1834 | MDRV_IMPORT_FROM( vsnes ) |
| 1835 | |
| 1836 | MDRV_DEVICE_REMOVE( "ppu1" ) |
| 1837 | MDRV_PPU2C05_03_ADD("ppu1", vsnes_ppu_interface_1) |
| 1838 | MACHINE_DRIVER_END |
| 1839 | |
| 1840 | static MACHINE_DRIVER_START( topgun ) |
| 1841 | MDRV_IMPORT_FROM( vsnes ) |
| 1842 | |
| 1843 | MDRV_DEVICE_REMOVE( "ppu1" ) |
| 1844 | MDRV_PPU2C05_04_ADD("ppu1", vsnes_ppu_interface_1) |
| 1845 | MACHINE_DRIVER_END |
| 1846 | |
| 1800 | 1847 | static MACHINE_DRIVER_START( vsdual ) |
| 1801 | 1848 | |
| 1802 | 1849 | /* basic machine hardware */ |
| r7882 | r7883 | |
| 1853 | 1900 | |
| 1854 | 1901 | /******************************************************************************/ |
| 1855 | 1902 | |
| 1903 | /* Palettes were obtained for each RGB PPU type by running a test program |
| 1904 | that fills the screen with a single color and analyzing the RGB output. |
| 1905 | The output of every PPU neatly quantizes to 8 levels, so the palettes |
| 1906 | are assumed to be stored using 3 bits per component in an internal ROM |
| 1907 | on each PPU. |
| 1908 | */ |
| 1909 | |
| 1910 | #define PALETTE_STANDARD \ |
| 1911 | ROM_REGION( 0xc0, "palette", 0 ) \ |
| 1912 | ROM_LOAD( "rp2c0x.pal", 0x00, 0xc0, CRC(48de65dc) SHA1(d10acafc8da9ff479c270ec01180cca61efe62f5) ) |
| 1913 | |
| 1914 | #define PALETTE_2C04_0001 \ |
| 1915 | ROM_REGION( 0xc0, "palette", 0 ) \ |
| 1916 | ROM_LOAD( "rp2c04-0001.pal", 0x00, 0xc0, CRC(a6293faa) SHA1(190a410a3d818e124b2b9d2ef9fb3da003bb5d4c) ) |
| 1917 | |
| 1918 | #define PALETTE_2C04_0002 \ |
| 1919 | ROM_REGION( 0xc0, "palette", 0 ) \ |
| 1920 | ROM_LOAD( "rp2c04-0002.pal", 0x00, 0xc0, CRC(fd19ae5e) SHA1(8ed14347c5a0b1a8a4d6365d6727e0951a00131c) ) |
| 1921 | |
| 1922 | #define PALETTE_2C04_0003 \ |
| 1923 | ROM_REGION( 0xc0, "palette", 0 ) \ |
| 1924 | ROM_LOAD( "rp2c04-0003.pal", 0x00, 0xc0, CRC(fd6c578b) SHA1(653182ce0cbaff66a8fc5788e32cc088b6735f2e) ) |
| 1925 | |
| 1926 | #define PALETTE_2C04_0004 \ |
| 1927 | ROM_REGION( 0xc0, "palette", 0 ) \ |
| 1928 | ROM_LOAD( "rp2c04-0004.pal", 0x00, 0xc0, CRC(0c2e8e4d) SHA1(0f9090225eb1f08ae5072d40af3e95547cbce05f) ) |
| 1929 | |
| 1856 | 1930 | /* correct label format. revision number is stamped(red), other letters are printed(black) |
| 1857 | 1931 | game code in line 1, ROM position in line 2 |
| 1858 | 1932 | i.e. |
| r7882 | r7883 | |
| 1860 | 1934 | 1B or 6B e |
| 1861 | 1935 | */ |
| 1862 | 1936 | |
| 1863 | | |
| 1864 | 1937 | ROM_START( suprmrio ) |
| 1865 | 1938 | ROM_REGION( 0x10000,"maincpu", 0 ) /* 6502 memory */ |
| 1866 | 1939 | ROM_LOAD( "mds-sm4.1d", 0x8000, 0x2000, CRC(be4d5436) SHA1(08162a7c987f1939d09bebdb676f596c86abf465) ) |
| r7882 | r7883 | |
| 1871 | 1944 | ROM_REGION( 0x4000,"gfx1", 0 ) /* PPU memory */ |
| 1872 | 1945 | ROM_LOAD( "mds-sm4.2b", 0x0000, 0x2000, CRC(42418d40) SHA1(22ab61589742cfa4cc6856f7205d7b4b8310bc4d) ) |
| 1873 | 1946 | ROM_LOAD( "mds-sm4.2a", 0x2000, 0x2000, CRC(15506b86) SHA1(69ecf7a3cc8bf719c1581ec7c0d68798817d416f) ) |
| 1947 | |
| 1948 | PALETTE_2C04_0004 |
| 1874 | 1949 | ROM_END |
| 1875 | 1950 | |
| 1876 | 1951 | ROM_START( suprmrioa ) |
| r7882 | r7883 | |
| 1883 | 1958 | ROM_REGION( 0x4000,"gfx1", 0 ) /* PPU memory */ |
| 1884 | 1959 | ROM_LOAD( "mds-sm4.2b", 0x0000, 0x2000, CRC(42418d40) SHA1(22ab61589742cfa4cc6856f7205d7b4b8310bc4d) ) |
| 1885 | 1960 | ROM_LOAD( "mds-sm4.2a", 0x2000, 0x2000, CRC(15506b86) SHA1(69ecf7a3cc8bf719c1581ec7c0d68798817d416f) ) |
| 1961 | |
| 1962 | PALETTE_2C04_0004 |
| 1886 | 1963 | ROM_END |
| 1887 | 1964 | |
| 1888 | 1965 | /* I don't know what the Z80 is for on these (located top-left of the PCB with rom 1) */ |
| r7882 | r7883 | |
| 1900 | 1977 | ROM_REGION( 0x4000,"gfx1", 0 ) /* PPU memory */ |
| 1901 | 1978 | ROM_LOAD( "2-2764.bin", 0x0000, 0x2000, CRC(42418d40) SHA1(22ab61589742cfa4cc6856f7205d7b4b8310bc4d) ) |
| 1902 | 1979 | ROM_LOAD( "5-2764.bin", 0x2000, 0x2000, CRC(15506b86) SHA1(69ecf7a3cc8bf719c1581ec7c0d68798817d416f) ) |
| 1980 | |
| 1981 | PALETTE_2C04_0004 |
| 1903 | 1982 | ROM_END |
| 1904 | 1983 | |
| 1905 | 1984 | ROM_START( suprmriobl ) |
| r7882 | r7883 | |
| 1929 | 2008 | ROM_LOAD( "pal16r6.5", 0x000, 0x104, CRC(ceff7c7c) SHA1(52fd344c591478469369cd0862d1facfe23e12fb) ) |
| 1930 | 2009 | ROM_LOAD( "pal16r8.6", 0x000, 0x104, CRC(bd76fb53) SHA1(2d0634e8edb3289a103719466465e9777606086e) ) |
| 1931 | 2010 | ROM_LOAD( "pal16r8a.7", 0x000, 0x104, CRC(bd76fb53) SHA1(2d0634e8edb3289a103719466465e9777606086e) ) |
| 2011 | |
| 2012 | PALETTE_2C04_0004 |
| 1932 | 2013 | ROM_END |
| 1933 | 2014 | |
| 1934 | 2015 | ROM_START( skatekds ) |
| r7882 | r7883 | |
| 1941 | 2022 | ROM_REGION( 0x4000,"gfx1", 0 ) /* PPU memory */ |
| 1942 | 2023 | ROM_LOAD( "mds-sm4.2b", 0x0000, 0x2000,CRC(f3980303) SHA1(b9a25c906d1861c89e2e40e878a34d318daf6619) ) |
| 1943 | 2024 | ROM_LOAD( "mds-sm4.2a", 0x2000, 0x2000,CRC(7a0ab7eb) SHA1(b6c32791481fafddc8504adb4eaed30a2fb3a03e) ) |
| 2025 | |
| 2026 | PALETTE_2C04_0004 |
| 1944 | 2027 | ROM_END |
| 1945 | 2028 | |
| 1946 | 2029 | ROM_START( iceclimb ) |
| r7882 | r7883 | |
| 1953 | 2036 | ROM_REGION( 0x4000,"gfx1", 0 ) /* PPU memory */ |
| 1954 | 2037 | ROM_LOAD( "ic-2b", 0x0000, 0x2000, CRC(331460b4) SHA1(4cf94d711cdb5715d14f1ab3cadec245e0adfb1e) ) |
| 1955 | 2038 | ROM_LOAD( "ic-2a", 0x2000, 0x2000, CRC(4ec44fb3) SHA1(676e0ab574dec08df562c6f278e8a9cc7c8afa41) ) |
| 2039 | |
| 2040 | PALETTE_2C04_0004 |
| 1956 | 2041 | ROM_END |
| 1957 | 2042 | |
| 1958 | 2043 | ROM_START( iceclimbj ) |
| r7882 | r7883 | |
| 1965 | 2050 | ROM_REGION( 0x4000,"gfx1", 0 ) /* PPU memory */ |
| 1966 | 2051 | ROM_LOAD( "mds-ic4-4_8b b.bin", 0x0000, 0x2000, CRC(331460b4) SHA1(4cf94d711cdb5715d14f1ab3cadec245e0adfb1e) ) |
| 1967 | 2052 | ROM_LOAD( "mds-ic4-4_8a b.bin", 0x2000, 0x2000, CRC(4ec44fb3) SHA1(676e0ab574dec08df562c6f278e8a9cc7c8afa41) ) |
| 2053 | |
| 2054 | PALETTE_2C04_0004 |
| 1968 | 2055 | ROM_END |
| 1969 | 2056 | |
| 1970 | 2057 | /* Gun games */ |
| r7882 | r7883 | |
| 1978 | 2065 | ROM_REGION( 0x4000, "gfx1", 0 ) /* PPU memory */ |
| 1979 | 2066 | ROM_LOAD( "mds-dh3_2b or 8b e.bin", 0x0000, 0x2000, CRC(0c52ec28) SHA1(c8fb6a5d4c13a7075d313326e2da9ce88780a88d) ) |
| 1980 | 2067 | ROM_LOAD( "mds-dh3_2a or 8a e.bin", 0x2000, 0x2000, CRC(3d238df3) SHA1(e868ef3d5357ef5294e4faeecc9dbf801c5253e8) ) |
| 2068 | |
| 2069 | PALETTE_STANDARD |
| 1981 | 2070 | ROM_END |
| 1982 | 2071 | |
| 1983 | 2072 | ROM_START( hogalley ) |
| r7882 | r7883 | |
| 1990 | 2079 | ROM_REGION( 0x4000,"gfx1", 0 ) /* PPU memory */ |
| 1991 | 2080 | ROM_LOAD( "mds-ha4-1_2b or 8b e-1.bin", 0x0000, 0x2000, CRC(fc5a91ad) SHA1(7ce6c64d81a9626d0b34bdc0a2a28fee457ebcb1) ) // there is another dump ( CRC 0x7623e954 ) where 0xFE1 = 04, the dump we use is probably the correct one |
| 1992 | 2081 | ROM_LOAD( "mds-ha4-1_2a or 8a e-1.bin", 0x2000, 0x2000, CRC(78c842b6) SHA1(39f2a7fc1f1cbe2378a369e45b5cbb05057db3f0) ) |
| 2082 | |
| 2083 | PALETTE_2C04_0001 |
| 1993 | 2084 | ROM_END |
| 1994 | 2085 | |
| 1995 | 2086 | ROM_START( vsgshoe ) |
| r7882 | r7883 | |
| 2003 | 2094 | ROM_REGION( 0x4000,"gfx1", 0 ) /* PPU memory */ |
| 2004 | 2095 | ROM_LOAD( "mds-gm5.2b", 0x0000, 0x2000, CRC(192c3360) SHA1(5ddbe007d8bc693a0b7c92f33e6ed6b27dc1c08e) ) |
| 2005 | 2096 | ROM_LOAD( "mds-gm5.2a", 0x2000, 0x2000, CRC(823dd178) SHA1(77578a48ded0c244d1ae30aafaa9259b7dd0dfc4) ) |
| 2097 | |
| 2098 | PALETTE_STANDARD |
| 2006 | 2099 | ROM_END |
| 2007 | 2100 | |
| 2008 | 2101 | ROM_START( vsfdf ) |
| r7882 | r7883 | |
| 2012 | 2105 | |
| 2013 | 2106 | ROM_REGION( 0x10000,"gfx1", 0 ) /* PPU memory */ |
| 2014 | 2107 | ROM_LOAD( "cha2.1", 0x00000, 0x10000, CRC(a2f88df0) SHA1(10ef432d3132b01a1fcb38d8f521edd2a029ac5e) ) |
| 2108 | |
| 2109 | PALETTE_2C04_0001 |
| 2015 | 2110 | ROM_END |
| 2016 | 2111 | |
| 2017 | 2112 | ROM_START( goonies ) |
| r7882 | r7883 | |
| 2020 | 2115 | |
| 2021 | 2116 | ROM_REGION( 0x10000,"gfx1", 0 ) /* PPU memory */ |
| 2022 | 2117 | ROM_LOAD( "chr.u4", 0x0000, 0x10000, CRC(4c4b61b0) SHA1(7221c2499531e591a5a99e2cb339ae3a76b662c2) ) |
| 2118 | |
| 2119 | PALETTE_2C04_0003 |
| 2023 | 2120 | ROM_END |
| 2024 | 2121 | |
| 2025 | 2122 | ROM_START( vsgradus ) |
| r7882 | r7883 | |
| 2028 | 2125 | |
| 2029 | 2126 | ROM_REGION( 0x10000,"gfx1", 0 ) /* PPU memory */ |
| 2030 | 2127 | ROM_LOAD( "chr.u4", 0x0000, 0x10000, CRC(23cf2fc3) SHA1(0a3f48aec529b92abc261952e632af7ff766b1ef) ) |
| 2128 | |
| 2129 | PALETTE_2C04_0001 |
| 2031 | 2130 | ROM_END |
| 2032 | 2131 | |
| 2033 | 2132 | ROM_START( btlecity ) |
| r7882 | r7883 | |
| 2040 | 2139 | ROM_REGION( 0x4000, "gfx1", 0 ) /* PPU memory */ |
| 2041 | 2140 | ROM_LOAD( "bc.2b", 0x0000, 0x2000, CRC(634f68bd) SHA1(db1a18083667fdaf6cdd9ed7666bec6bf6e39f29) ) |
| 2042 | 2141 | ROM_LOAD( "bc.2a", 0x2000, 0x2000, CRC(a9b49a05) SHA1(c14706e6a5524f81e79c101e32deef9f3d60de3f) ) |
| 2142 | |
| 2143 | /* also compatible with 2C04-0002, 2C04-0003, 2C04-0004 via dipswitches */ |
| 2144 | PALETTE_2C04_0001 |
| 2043 | 2145 | ROM_END |
| 2044 | 2146 | |
| 2045 | 2147 | ROM_START( cluclu ) |
| r7882 | r7883 | |
| 2052 | 2154 | ROM_REGION( 0x4000, "gfx1", 0 ) /* PPU memory */ |
| 2053 | 2155 | ROM_LOAD( "cl.8b", 0x0000, 0x2000, CRC(960d9a6c) SHA1(2569d59fd880cfc2eb4638294d1429ba749f5dcb) ) |
| 2054 | 2156 | ROM_LOAD( "cl.8a", 0x2000, 0x2000, CRC(e3139791) SHA1(33d9e6d2a3233ee311c2cef2d0a425ded2cf3b0f) ) |
| 2157 | |
| 2158 | PALETTE_2C04_0004 |
| 2055 | 2159 | ROM_END |
| 2056 | 2160 | |
| 2057 | 2161 | ROM_START( excitebk ) |
| r7882 | r7883 | |
| 2064 | 2168 | ROM_REGION( 0x4000,"gfx1", 0 ) /* PPU memory */ |
| 2065 | 2169 | ROM_LOAD( "mds-eb4.2b", 0x0000, 0x2000, CRC(80be1f50) SHA1(d8544b9a0a9d8719ab601fa9c68c4305385b14c7) ) |
| 2066 | 2170 | ROM_LOAD( "mds-eb4.2a", 0x2000, 0x2000, CRC(a9b49a05) SHA1(c14706e6a5524f81e79c101e32deef9f3d60de3f) ) |
| 2171 | |
| 2172 | PALETTE_2C04_0003 |
| 2067 | 2173 | ROM_END |
| 2068 | 2174 | |
| 2069 | 2175 | ROM_START( excitebkj ) |
| r7882 | r7883 | |
| 2076 | 2182 | ROM_REGION( 0x4000,"gfx1", 0 ) /* PPU memory */ |
| 2077 | 2183 | ROM_LOAD( "mds-eb4-4_8b a.bin", 0x0000, 0x2000, CRC(62a76c52) SHA1(7ebd0dac976abe8636f4f75a3b2a473d7a54934d) ) |
| 2078 | 2184 | ROM_LOAD( "mds-eb4-4_8a a.bin", 0x2000, 0x2000, CRC(a9b49a05) SHA1(c14706e6a5524f81e79c101e32deef9f3d60de3f) ) |
| 2185 | |
| 2186 | PALETTE_2C04_0004 |
| 2079 | 2187 | ROM_END |
| 2080 | 2188 | |
| 2081 | 2189 | ROM_START( jajamaru ) |
| r7882 | r7883 | |
| 2088 | 2196 | ROM_REGION( 0x4000,"gfx1", 0 ) /* PPU memory */ |
| 2089 | 2197 | ROM_LOAD( "12.bin", 0x0000, 0x2000, CRC(c91d536a) SHA1(8cb4b0819652df484553b9dd1f82391d51c90fcc) ) |
| 2090 | 2198 | ROM_LOAD( "11.bin", 0x2000, 0x2000, CRC(f0034c04) SHA1(402dcf6ad443baeee3038ecab12db008a1ad2787) ) |
| 2199 | |
| 2200 | PALETTE_STANDARD |
| 2091 | 2201 | ROM_END |
| 2092 | 2202 | |
| 2093 | 2203 | ROM_START( ladygolf ) |
| r7882 | r7883 | |
| 2100 | 2210 | ROM_REGION( 0x4000,"gfx1", 0 ) /* PPU memory */ |
| 2101 | 2211 | ROM_LOAD( "lg-2b", 0x0000, 0x2000, CRC(95618947) SHA1(e8f09bffa3fa1a1cac8fa25df9fba962951c1fb3) ) |
| 2102 | 2212 | ROM_LOAD( "lg-2a", 0x2000, 0x2000, CRC(d07407b1) SHA1(b998b46fe83e76fac3d7b71495d1da8580a731f9) ) |
| 2213 | |
| 2214 | PALETTE_2C04_0002 |
| 2103 | 2215 | ROM_END |
| 2104 | 2216 | |
| 2105 | 2217 | ROM_START( smgolfj ) |
| r7882 | r7883 | |
| 2112 | 2224 | ROM_REGION( 0x4000,"gfx1", 0 ) /* PPU memory */ |
| 2113 | 2225 | ROM_LOAD( "mds-gf3_8b b.bin", 0x0000, 0x2000, CRC(7ef68029) SHA1(a639e463fd0abfb1bff0dd17aa0c9f70a72ee139) ) |
| 2114 | 2226 | ROM_LOAD( "mds-gf3_8a b.bin", 0x2000, 0x2000, CRC(f2285878) SHA1(e0d34161a1879975f51c12222cf366228170b0e3) ) |
| 2227 | |
| 2228 | PALETTE_STANDARD |
| 2115 | 2229 | ROM_END |
| 2116 | 2230 | |
| 2117 | 2231 | ROM_START( machridr ) |
| r7882 | r7883 | |
| 2124 | 2238 | ROM_REGION( 0x4000,"gfx1" , 0) /* PPU memory */ |
| 2125 | 2239 | ROM_LOAD( "mr-2b", 0x0000, 0x2000, CRC(33a2b41a) SHA1(671f37bce742e63250296e62c143f8a82f860b04) ) |
| 2126 | 2240 | ROM_LOAD( "mr-2a", 0x2000, 0x2000, CRC(685899d8) SHA1(02b6a9bc21367c481d0091fa8a8f2d1b841244bf) ) |
| 2241 | |
| 2242 | PALETTE_2C04_0002 |
| 2127 | 2243 | ROM_END |
| 2128 | 2244 | |
| 2129 | 2245 | ROM_START( machridrj ) |
| r7882 | r7883 | |
| 2136 | 2252 | ROM_REGION( 0x4000,"gfx1" , 0) /* PPU memory */ |
| 2137 | 2253 | ROM_LOAD( "mds-mr4-1_2b or 8b a.bin", 0x0000, 0x2000, CRC(59867e36) SHA1(2b5546aa9f140277d611d6d5516b1343e5e672a0) ) |
| 2138 | 2254 | ROM_LOAD( "mds-mr4-1_2a or 8a a.bin", 0x2000, 0x2000, CRC(ccfedc5a) SHA1(3d6321681fbe256d7c71037205d45d22fc264569) ) |
| 2255 | |
| 2256 | PALETTE_2C04_0001 |
| 2139 | 2257 | ROM_END |
| 2140 | 2258 | |
| 2141 | 2259 | ROM_START( smgolf ) |
| r7882 | r7883 | |
| 2148 | 2266 | ROM_REGION( 0x4000, "gfx1", 0 ) /* PPU memory */ |
| 2149 | 2267 | ROM_LOAD( "golf-2b", 0x0000, 0x2000, CRC(2782a3e5) SHA1(4e57aab58fb250da951a9aecd21d6aa79e697bcb) ) |
| 2150 | 2268 | ROM_LOAD( "golf-2a", 0x2000, 0x2000, CRC(6e93fdef) SHA1(44f46421adabbc40135c681592cb5226b7c9012a) ) |
| 2269 | |
| 2270 | PALETTE_2C04_0002 |
| 2151 | 2271 | ROM_END |
| 2152 | 2272 | |
| 2153 | 2273 | ROM_START( smgolfb ) |
| r7882 | r7883 | |
| 2160 | 2280 | ROM_REGION( 0x4000, "gfx1", 0 ) /* PPU memory */ |
| 2161 | 2281 | ROM_LOAD( "gf4-2.2bf", 0x0000, 0x2000, NO_DUMP ) |
| 2162 | 2282 | ROM_LOAD( "gf4-2.2af", 0x2000, 0x2000, CRC(47e9b8c6) SHA1(2eee6eaf7d15e215816363c7bb7142a2bdc2d530) ) |
| 2283 | |
| 2284 | PALETTE_2C04_0002 |
| 2163 | 2285 | ROM_END |
| 2164 | 2286 | |
| 2165 | 2287 | ROM_START( vspinbal ) |
| r7882 | r7883 | |
| 2172 | 2294 | ROM_REGION( 0x4000,"gfx1", 0 ) /* PPU memory */ |
| 2173 | 2295 | ROM_LOAD( "pb-8b", 0x0000, 0x2000, CRC(8822ee9e) SHA1(950113952e6d356e45e03479ba5dd5a8cb131609) ) |
| 2174 | 2296 | ROM_LOAD( "pb-8a", 0x2000, 0x2000, CRC(cbe98a28) SHA1(c00c5f15a33611bfe3ad420b93b1cc2cae011c3e) ) |
| 2297 | |
| 2298 | PALETTE_2C04_0001 |
| 2175 | 2299 | ROM_END |
| 2176 | 2300 | |
| 2177 | 2301 | ROM_START( vspinbalj ) |
| r7882 | r7883 | |
| 2184 | 2308 | ROM_REGION( 0x4000,"gfx1", 0 ) /* PPU memory */ |
| 2185 | 2309 | ROM_LOAD( "mds-pn3_8b b.bin", 0x0000, 0x2000, CRC(1e3fec3e) SHA1(aef18cee358af202ec48c1c36986e42e134466b1) ) |
| 2186 | 2310 | ROM_LOAD( "mds-pn3_8a b.bin", 0x2000, 0x2000, CRC(6f963a65) SHA1(af69564b51aa42ef0815c952e0d0d0d928651685) ) |
| 2311 | |
| 2312 | PALETTE_STANDARD |
| 2187 | 2313 | ROM_END |
| 2188 | 2314 | |
| 2189 | 2315 | ROM_START( vsslalom ) |
| r7882 | r7883 | |
| 2195 | 2321 | |
| 2196 | 2322 | ROM_REGION( 0x2000,"gfx1", 0 ) /* PPU memory */ |
| 2197 | 2323 | ROM_LOAD( "mds-sl4.2a", 0x0000, 0x2000, CRC(977bb126) SHA1(9b12cd37246237c24a8077c6184a2f71d342ac47) ) |
| 2324 | |
| 2325 | PALETTE_2C04_0002 |
| 2198 | 2326 | ROM_END |
| 2199 | 2327 | |
| 2200 | 2328 | ROM_START( vssoccer ) |
| r7882 | r7883 | |
| 2207 | 2335 | ROM_REGION( 0x4000,"gfx1", 0 ) /* PPU memory */ |
| 2208 | 2336 | ROM_LOAD( "soccer2b", 0x0000, 0x2000, CRC(307b19ab) SHA1(b35ef4c2cf071db77cec1b4529b43a20cfcce172) ) |
| 2209 | 2337 | ROM_LOAD( "soccer2a", 0x2000, 0x2000, CRC(7263613a) SHA1(aa5673b57833d1f32c2cb0230a809397ec6103b4) ) |
| 2338 | |
| 2339 | PALETTE_2C04_0003 |
| 2210 | 2340 | ROM_END |
| 2211 | 2341 | |
| 2212 | 2342 | ROM_START( vssoccerj ) |
| r7882 | r7883 | |
| 2219 | 2349 | ROM_REGION( 0x4000,"gfx1", 0 ) /* PPU memory */ |
| 2220 | 2350 | ROM_LOAD( "mds-sc4-2_2b or 8b a.bin", 0x0000, 0x2000, CRC(307b19ab) SHA1(b35ef4c2cf071db77cec1b4529b43a20cfcce172) ) |
| 2221 | 2351 | ROM_LOAD( "mds-sc4-2_2a or 8a a.bin", 0x2000, 0x2000, CRC(7263613a) SHA1(aa5673b57833d1f32c2cb0230a809397ec6103b4) ) |
| 2352 | |
| 2353 | PALETTE_2C04_0002 |
| 2222 | 2354 | ROM_END |
| 2223 | 2355 | |
| 2224 | 2356 | ROM_START( starlstr ) |
| r7882 | r7883 | |
| 2231 | 2363 | ROM_REGION( 0x4000,"gfx1", 0 ) /* PPU memory */ |
| 2232 | 2364 | ROM_LOAD( "sl_06.2b", 0x0000, 0x2000, CRC(25f0e027) SHA1(4fcbe4bb959689948cb8f505d5c495dabb893f7b) ) |
| 2233 | 2365 | ROM_LOAD( "sl_05.2a", 0x2000, 0x2000, CRC(2bbb45fd) SHA1(53c3588bd25baa6b8ff41f4755db9e0e806c9719) ) |
| 2366 | |
| 2367 | /* also compatible with 2C04-0001, 2C04-0002, 2C04-0003, 2C04-0004 via dipswitches */ |
| 2368 | PALETTE_STANDARD |
| 2234 | 2369 | ROM_END |
| 2235 | 2370 | |
| 2236 | 2371 | ROM_START( vstetris ) |
| r7882 | r7883 | |
| 2241 | 2376 | |
| 2242 | 2377 | ROM_REGION( 0x2000,"gfx1", 0 ) /* PPU memory */ |
| 2243 | 2378 | ROM_LOAD( "char.8b", 0x0000, 0x2000, CRC(51e8d403) SHA1(ed734994d164c4b59794249a13bce333896b3ee5) ) |
| 2379 | |
| 2380 | /* also compatible with 2C03, 2C04-0002, 2C04-0003, 2C04-0004 via dipswitches */ |
| 2381 | PALETTE_2C04_0001 |
| 2244 | 2382 | ROM_END |
| 2245 | 2383 | |
| 2246 | 2384 | ROM_START( drmario ) |
| r7882 | r7883 | |
| 2249 | 2387 | |
| 2250 | 2388 | ROM_REGION( 0x8000,"gfx1", 0 ) /* PPU memory */ |
| 2251 | 2389 | ROM_LOAD( "dm-u3chr", 0x0000, 0x8000, CRC(91871aa5) SHA1(32a4299ead7b37f49877dc9597653b07a73ddbf3) ) |
| 2390 | |
| 2391 | PALETTE_2C04_0003 |
| 2252 | 2392 | ROM_END |
| 2253 | 2393 | |
| 2254 | 2394 | ROM_START( cstlevna ) |
| r7882 | r7883 | |
| 2256 | 2396 | ROM_LOAD( "mds-cv.prg", 0x10000, 0x20000, CRC(ffbef374) SHA1(9eb3b75e7b45df51b8bcd29df84689a7e8557f4f) ) |
| 2257 | 2397 | |
| 2258 | 2398 | /* No cart gfx - uses vram */ |
| 2399 | |
| 2400 | PALETTE_2C04_0002 |
| 2259 | 2401 | ROM_END |
| 2260 | 2402 | |
| 2261 | 2403 | ROM_START( topgun ) |
| r7882 | r7883 | |
| 2263 | 2405 | ROM_LOAD( "rc-003", 0x10000, 0x20000, CRC(8c0c2df5) SHA1(d9b1b87204e025a637821a0168475e1209ce0c8a) ) |
| 2264 | 2406 | |
| 2265 | 2407 | /* No cart gfx - uses vram */ |
| 2408 | |
| 2409 | PALETTE_STANDARD |
| 2266 | 2410 | ROM_END |
| 2267 | 2411 | |
| 2268 | 2412 | ROM_START( tkoboxng ) |
| r7882 | r7883 | |
| 2271 | 2415 | |
| 2272 | 2416 | ROM_REGION( 0x10000,"gfx1", 0 ) /* PPU memory */ |
| 2273 | 2417 | ROM_LOAD( "tkochr.bin", 0x0000, 0x10000, CRC(21275ba5) SHA1(160131586aeeca848deabff258a2ce5f62b17c5f) ) |
| 2418 | |
| 2419 | /* also compatible with 2C03 via dipswitches */ |
| 2420 | PALETTE_2C04_0003 |
| 2274 | 2421 | ROM_END |
| 2275 | 2422 | |
| 2276 | 2423 | ROM_START( rbibb ) |
| r7882 | r7883 | |
| 2279 | 2426 | |
| 2280 | 2427 | ROM_REGION( 0x8000,"gfx1", 0 ) /* PPU memory */ |
| 2281 | 2428 | ROM_LOAD( "rbi-cha", 0x0000, 0x8000, CRC(a3c14889) SHA1(ef00f4fbf21cf34e946957b9b6825b8e2cb16536) ) |
| 2429 | |
| 2430 | /* also compatible with 2C03, 2C04-0002, 2C04-0003, 2C04-0004 via dipswitches */ |
| 2431 | PALETTE_2C04_0001 |
| 2282 | 2432 | ROM_END |
| 2283 | 2433 | |
| 2284 | 2434 | ROM_START( rbibba ) |
| r7882 | r7883 | |
| 2287 | 2437 | |
| 2288 | 2438 | ROM_REGION( 0x8000,"gfx1", 0 ) /* PPU memory */ |
| 2289 | 2439 | ROM_LOAD( "rbi-cha", 0x0000, 0x8000, CRC(a3c14889) SHA1(ef00f4fbf21cf34e946957b9b6825b8e2cb16536) ) |
| 2440 | |
| 2441 | /* also compatible with 2C03, 2C04-0002, 2C04-0003, 2C04-0004 via dipswitches */ |
| 2442 | PALETTE_2C04_0001 |
| 2290 | 2443 | ROM_END |
| 2291 | 2444 | |
| 2292 | 2445 | ROM_START( vsskykid ) |
| r7882 | r7883 | |
| 2295 | 2448 | |
| 2296 | 2449 | ROM_REGION( 0x8000,"gfx1" , 0) /* PPU memory */ |
| 2297 | 2450 | ROM_LOAD( "sk-cha", 0x0000, 0x8000, CRC(9bd44dad) SHA1(bf33d175b6ab991d63a0acaf83ba22d5b7ab11b9) ) |
| 2451 | |
| 2452 | /* also compatible with 2C03, 2C04-0002, 2C04-0003, 2C04-0004 via dipswitches */ |
| 2453 | PALETTE_2C04_0001 |
| 2298 | 2454 | ROM_END |
| 2299 | 2455 | |
| 2300 | 2456 | ROM_START( platoon ) |
| r7882 | r7883 | |
| 2303 | 2459 | |
| 2304 | 2460 | ROM_REGION( 0x20000,"gfx1", 0 ) /* PPU memory */ |
| 2305 | 2461 | ROM_LOAD( "chrver0.ic6", 0x00000, 0x20000, CRC(689df57d) SHA1(854aaa9feb16e3f239fba6069fbf65e69858fe73) ) |
| 2462 | |
| 2463 | PALETTE_2C04_0001 |
| 2306 | 2464 | ROM_END |
| 2307 | 2465 | |
| 2308 | 2466 | ROM_START( bnglngby ) |
| r7882 | r7883 | |
| 2318 | 2476 | |
| 2319 | 2477 | ROM_REGION( 0x2000, "user1", 0 ) /* unknown */ |
| 2320 | 2478 | ROM_LOAD( "mds-rb4-2_1a b.bin", 0x0000, 0x2000, CRC(b49939ad) SHA1(ebaab2864d9ff9876e9d2666746c4bab57e49ec3) ) /* Unknown, maps at 0xe000, maybe from another set, but we have other roms? */ |
| 2479 | |
| 2480 | PALETTE_2C04_0002 |
| 2321 | 2481 | ROM_END |
| 2322 | 2482 | |
| 2323 | 2483 | ROM_START( supxevs ) |
| r7882 | r7883 | |
| 2327 | 2487 | |
| 2328 | 2488 | ROM_REGION( 0x8000,"gfx1", 0 ) /* PPU memory */ |
| 2329 | 2489 | ROM_LOAD( "cha", 0x00000, 0x08000, CRC(e27c7434) SHA1(a033bbaf0c28504ed2a641dea28f016a88ef03ac) ) |
| 2490 | |
| 2491 | /* also compatible with 2C04-0002, 2C04-0003, 2C04-0004 via dipswitches */ |
| 2492 | PALETTE_2C04_0001 |
| 2330 | 2493 | ROM_END |
| 2331 | 2494 | |
| 2332 | 2495 | ROM_START( mightybj ) |
| r7882 | r7883 | |
| 2338 | 2501 | |
| 2339 | 2502 | ROM_REGION( 0x2000, "gfx1", 0 ) /* PPU memory */ |
| 2340 | 2503 | ROM_LOAD( "2b.bin", 0x0000, 0x2000, CRC(5425a4d0) SHA1(09eb9d93b680c9eefde5ee6e16cf81de931cccb9) ) |
| 2504 | |
| 2505 | PALETTE_STANDARD |
| 2341 | 2506 | ROM_END |
| 2342 | 2507 | |
| 2343 | 2508 | /* Dual System */ |
| r7882 | r7883 | |
| 2362 | 2527 | ROM_REGION( 0x4000,"gfx2", 0 ) /* PPU memory */ |
| 2363 | 2528 | ROM_LOAD( "mds-bf4_8b a-3.bin", 0x0000, 0x2000, CRC(f27d9aa0) SHA1(429a1ad2a07947e4c4809495bfab55bf0f0e428f) ) |
| 2364 | 2529 | ROM_LOAD( "mds-bf4_8a a-3.bin", 0x2000, 0x2000, CRC(76e6bbf8) SHA1(a4cae3a129a787162050187453b1583c8735fb46) ) |
| 2530 | |
| 2531 | PALETTE_2C04_0003 |
| 2365 | 2532 | ROM_END |
| 2366 | 2533 | |
| 2367 | 2534 | ROM_START( vsmahjng ) |
| r7882 | r7883 | |
| 2380 | 2547 | |
| 2381 | 2548 | ROM_REGION( 0x4000,"gfx2", 0 ) /* PPU memory */ |
| 2382 | 2549 | ROM_LOAD( "mj.8b", 0x0000, 0x2000, CRC(9dae3502) SHA1(b7ffbc17af35eeac1b06c651f6c25f71827e9c3b) ) |
| 2550 | |
| 2551 | PALETTE_STANDARD |
| 2383 | 2552 | ROM_END |
| 2384 | 2553 | |
| 2385 | 2554 | ROM_START( vsbball ) |
| r7882 | r7883 | |
| 2402 | 2571 | ROM_REGION( 0x4000,"gfx2", 0 ) /* PPU memory */ |
| 2403 | 2572 | ROM_LOAD( "bb-8b", 0x0000, 0x2000, CRC(3ff8bec3) SHA1(28c1bf89ed1046243ca8cf122cefa0752c242577) ) |
| 2404 | 2573 | ROM_LOAD( "bb-8a", 0x2000, 0x2000, CRC(13b20cfd) SHA1(cb333cbea09557a9d2bdc351fabc61fc7760c35d) ) |
| 2574 | |
| 2575 | PALETTE_2C04_0001 |
| 2405 | 2576 | ROM_END |
| 2406 | 2577 | |
| 2407 | 2578 | ROM_START( vsbballj ) |
| r7882 | r7883 | |
| 2424 | 2595 | ROM_REGION( 0x4000,"gfx2", 0 ) /* PPU memory */ |
| 2425 | 2596 | ROM_LOAD( "mds-ba_8b a.bin", 0x0000, 0x2000, CRC(919147d0) SHA1(9fccdfccc2a3ec634e350880ded7053f36c377bc) ) |
| 2426 | 2597 | ROM_LOAD( "mds-ba_8a a.bin", 0x2000, 0x2000, CRC(3f7edb00) SHA1(f59d24f15bdb8903187eabc1578dcb60443614ed) ) |
| 2598 | |
| 2599 | PALETTE_2C04_0001 |
| 2427 | 2600 | ROM_END |
| 2428 | 2601 | |
| 2429 | 2602 | ROM_START( vsbballja ) |
| r7882 | r7883 | |
| 2446 | 2619 | ROM_REGION( 0x4000,"gfx2", 0 ) /* PPU memory */ |
| 2447 | 2620 | ROM_LOAD( "mds-ba_8b a.bin", 0x0000, 0x2000, CRC(919147d0) SHA1(9fccdfccc2a3ec634e350880ded7053f36c377bc) ) |
| 2448 | 2621 | ROM_LOAD( "mds-ba_8a a.bin", 0x2000, 0x2000, CRC(3f7edb00) SHA1(f59d24f15bdb8903187eabc1578dcb60443614ed) ) |
| 2622 | |
| 2623 | PALETTE_2C04_0001 |
| 2449 | 2624 | ROM_END |
| 2450 | 2625 | |
| 2451 | 2626 | ROM_START( vsbballjb ) |
| r7882 | r7883 | |
| 2468 | 2643 | ROM_REGION( 0x4000,"gfx2", 0 ) /* PPU memory */ |
| 2469 | 2644 | ROM_LOAD( "mds-ba_8b a.bin", 0x0000, 0x2000, CRC(919147d0) SHA1(9fccdfccc2a3ec634e350880ded7053f36c377bc) ) |
| 2470 | 2645 | ROM_LOAD( "mds-ba_8a a.bin", 0x2000, 0x2000, CRC(3f7edb00) SHA1(f59d24f15bdb8903187eabc1578dcb60443614ed) ) |
| 2646 | |
| 2647 | PALETTE_2C04_0001 |
| 2471 | 2648 | ROM_END |
| 2472 | 2649 | |
| 2473 | 2650 | ROM_START( vstennis ) |
| r7882 | r7883 | |
| 2490 | 2667 | ROM_REGION( 0x4000,"gfx2" , 0) /* PPU memory */ |
| 2491 | 2668 | ROM_LOAD( "mds-te.8b", 0x0000, 0x2000, CRC(c81e9260) SHA1(6d4809a05364cc05485ee1add833428529af2be6) ) |
| 2492 | 2669 | ROM_LOAD( "mds-te.8a", 0x2000, 0x2000, CRC(d91eb295) SHA1(6b69bcef5421a6bcde89a2d1f514853f9f7992c3) ) |
| 2670 | |
| 2671 | PALETTE_STANDARD |
| 2493 | 2672 | ROM_END |
| 2494 | 2673 | |
| 2495 | 2674 | ROM_START( vstennisj ) |
| r7882 | r7883 | |
| 2512 | 2691 | ROM_REGION( 0x4000,"gfx2" , 0) /* PPU memory */ |
| 2513 | 2692 | ROM_LOAD( "mds-te_8b a.bin", 0x0000, 0x2000, CRC(c81e9260) SHA1(6d4809a05364cc05485ee1add833428529af2be6) ) |
| 2514 | 2693 | ROM_LOAD( "mds-te_8a a.bin", 0x2000, 0x2000, CRC(d91eb295) SHA1(6b69bcef5421a6bcde89a2d1f514853f9f7992c3) ) |
| 2694 | |
| 2695 | PALETTE_STANDARD |
| 2515 | 2696 | ROM_END |
| 2516 | 2697 | |
| 2517 | 2698 | ROM_START( wrecking ) |
| r7882 | r7883 | |
| 2534 | 2715 | ROM_REGION( 0x4000,"gfx2", 0 ) /* PPU memory */ |
| 2535 | 2716 | ROM_LOAD( "wr.8b", 0x0000, 0x2000, CRC(455d77ac) SHA1(fa09d0be51cc780f6c16cd314facc84043e1e69b) ) |
| 2536 | 2717 | ROM_LOAD( "wr.8a", 0x2000, 0x2000, CRC(653350d8) SHA1(d9aa699394654deaf50fadd8a652f08a340377eb) ) |
| 2718 | |
| 2719 | PALETTE_2C04_0002 |
| 2537 | 2720 | ROM_END |
| 2538 | 2721 | |
| 2539 | 2722 | ROM_START( iceclmrj ) |
| r7882 | r7883 | |
| 2556 | 2739 | ROM_REGION( 0x4000,"gfx2", 0 ) /* PPU memory */ |
| 2557 | 2740 | ROM_LOAD( "mds-ic4-4_8b a.bin", 0x0000, 0x2000, CRC(331460b4) SHA1(4cf94d711cdb5715d14f1ab3cadec245e0adfb1e) ) |
| 2558 | 2741 | ROM_LOAD( "mds-ic4-4_8a a.bin", 0x2000, 0x2000, CRC(4ec44fb3) SHA1(676e0ab574dec08df562c6f278e8a9cc7c8afa41) ) |
| 2742 | |
| 2743 | PALETTE_2C04_0004 |
| 2559 | 2744 | ROM_END |
| 2560 | 2745 | |
| 2561 | 2746 | /******************************************************************************/ |
| 2562 | 2747 | |
| 2563 | | /* YEAR NAME PARENT MACHINE INPUT INIT MONITOR */ |
| 2564 | | GAME( 1985, btlecity, 0, vsnes, btlecity, btlecity, ROT0, "Namco", "Vs. Battle City", 0 ) |
| 2748 | /* YEAR NAME PARENT MACHINE INPUT INIT MONITOR */ |
| 2749 | GAME( 1985, btlecity, 0, vsnes, btlecity, vsnormal, ROT0, "Namco", "Vs. Battle City", 0 ) |
| 2565 | 2750 | GAME( 1985, starlstr, 0, vsnes, starlstr, vsnormal, ROT0, "Namco", "Vs. Star Luster", 0 ) |
| 2566 | | GAME( 1987, cstlevna, 0, vsnes, cstlevna, cstlevna, ROT0, "Konami", "Vs. Castlevania", 0 ) |
| 2567 | | GAME( 1984, cluclu, 0, vsnes, cluclu, suprmrio, ROT0, "Nintendo", "Vs. Clu Clu Land", 0 ) |
| 2751 | GAME( 1987, cstlevna, 0, vsnes, cstlevna, vsvram, ROT0, "Konami", "Vs. Castlevania", 0 ) |
| 2752 | GAME( 1984, cluclu, 0, vsnes, cluclu, vsnormal, ROT0, "Nintendo", "Vs. Clu Clu Land", 0 ) |
| 2568 | 2753 | GAME( 1990, drmario, 0, vsnes, drmario, drmario, ROT0, "Nintendo", "Vs. Dr. Mario", 0 ) |
| 2569 | | GAME( 1985, duckhunt, 0, vsnes, duckhunt, duckhunt, ROT0, "Nintendo", "Vs. Duck Hunt", 0 ) |
| 2570 | | GAME( 1984, excitebk, 0, vsnes, excitebk, excitebk, ROT0, "Nintendo", "Vs. Excitebike", 0 ) |
| 2571 | | GAME( 1984, excitebkj,excitebk, vsnes, excitebk, excitbkj, ROT0, "Nintendo", "Vs. Excitebike (Japan)", 0 ) |
| 2572 | | GAME( 1986, goonies, 0, vsnes, goonies, goonies, ROT0, "Konami", "Vs. The Goonies", 0 ) |
| 2573 | | GAME( 1985, hogalley, 0, vsnes, hogalley, hogalley, ROT0, "Nintendo", "Vs. Hogan's Alley", 0 ) |
| 2574 | | GAME( 1984, iceclimb, 0, vsnes, iceclimb, suprmrio, ROT0, "Nintendo", "Vs. Ice Climber", 0 ) |
| 2575 | | GAME( 1984, iceclimbj,iceclimb, vsnes, iceclmbj, suprmrio, ROT0, "Nintendo", "Vs. Ice Climber (Japan)", 0 ) |
| 2576 | | GAME( 1985, machridr, 0, vsnes, machridr, machridr, ROT0, "Nintendo", "Vs. Mach Rider (Endurance Course Version)", GAME_IMPERFECT_GRAPHICS ) |
| 2577 | | GAME( 1985, machridrj,machridr, vsnes, machridj, vspinbal, ROT0, "Nintendo", "Vs. Mach Rider (Japan, Fighting Course Version)", GAME_IMPERFECT_GRAPHICS ) |
| 2754 | GAME( 1985, duckhunt, 0, vsnes, duckhunt, vsgun, ROT0, "Nintendo", "Vs. Duck Hunt", 0 ) |
| 2755 | GAME( 1984, excitebk, 0, vsnes, excitebk, vsnormal, ROT0, "Nintendo", "Vs. Excitebike", 0 ) |
| 2756 | GAME( 1984, excitebkj,excitebk, vsnes, excitebk, vsnormal, ROT0, "Nintendo", "Vs. Excitebike (Japan)", 0 ) |
| 2757 | GAME( 1986, goonies, 0, vsnes, goonies, vskonami, ROT0, "Konami", "Vs. The Goonies", 0 ) |
| 2758 | GAME( 1985, hogalley, 0, vsnes, hogalley, vsgun, ROT0, "Nintendo", "Vs. Hogan's Alley", 0 ) |
| 2759 | GAME( 1984, iceclimb, 0, vsnes, iceclimb, vsnormal, ROT0, "Nintendo", "Vs. Ice Climber", 0 ) |
| 2760 | GAME( 1984, iceclimbj,iceclimb, vsnes, iceclmbj, vsnormal, ROT0, "Nintendo", "Vs. Ice Climber (Japan)", 0 ) |
| 2761 | GAME( 1985, machridr, 0, vsnes, machridr, vsnormal, ROT0, "Nintendo", "Vs. Mach Rider (Endurance Course Version)", GAME_IMPERFECT_GRAPHICS ) |
| 2762 | GAME( 1985, machridrj,machridr, vsnes, machridj, vsnormal, ROT0, "Nintendo", "Vs. Mach Rider (Japan, Fighting Course Version)", GAME_IMPERFECT_GRAPHICS ) |
| 2578 | 2763 | GAME( 1986, rbibb, 0, vsnes, rbibb, rbibb, ROT0, "Namco", "Vs. Atari R.B.I. Baseball (set 1)", 0 ) |
| 2579 | 2764 | GAME( 1986, rbibba, rbibb, vsnes, rbibb, rbibb, ROT0, "Namco", "Vs. Atari R.B.I. Baseball (set 2)", 0 ) |
| 2580 | | GAME( 1986, suprmrio, 0, vsnes, suprmrio, suprmrio, ROT0, "Nintendo", "Vs. Super Mario Bros.", 0 ) |
| 2581 | | GAME( 1986, suprmrioa,suprmrio, vsnes, suprmrio, suprmrio, ROT0, "Nintendo", "Vs. Super Mario Bros. (alt)", 0 ) |
| 2582 | | GAME( 1986, suprmriobl,suprmrio,vsnes, suprmrio, suprmrio, ROT0, "bootleg", "Vs. Super Mario Bros. (bootleg with Z80, set 1)", GAME_NOT_WORKING ) |
| 2583 | | GAME( 1986, suprmriobl2,suprmrio,vsnes, suprmrio, suprmrio, ROT0, "bootleg", "Vs. Super Mario Bros. (bootleg with Z80, set 2)", GAME_NOT_WORKING ) |
| 2584 | | GAME( 1988, skatekds, suprmrio, vsnes, suprmrio, suprmrio, ROT0, "hack", "Vs. Skate Kids. (Graphic hack of Super Mario Bros.)", 0 ) |
| 2765 | GAME( 1986, suprmrio, 0, vsnes, suprmrio, vsnormal, ROT0, "Nintendo", "Vs. Super Mario Bros.", 0 ) |
| 2766 | GAME( 1986, suprmrioa,suprmrio, vsnes, suprmrio, vsnormal, ROT0, "Nintendo", "Vs. Super Mario Bros. (alt)", 0 ) |
| 2767 | GAME( 1986, suprmriobl,suprmrio,vsnes, suprmrio, vsnormal, ROT0, "bootleg", "Vs. Super Mario Bros. (bootleg with Z80, set 1)", GAME_NOT_WORKING ) |
| 2768 | GAME( 1986, suprmriobl2,suprmrio,vsnes, suprmrio, vsnormal, ROT0, "bootleg", "Vs. Super Mario Bros. (bootleg with Z80, set 2)", GAME_NOT_WORKING ) |
| 2769 | GAME( 1988, skatekds, suprmrio, vsnes, suprmrio, vsnormal, ROT0, "hack", "Vs. Skate Kids. (Graphic hack of Super Mario Bros.)", 0 ) |
| 2585 | 2770 | GAME( 1985, vsskykid, 0, vsnes, vsskykid, MMC3, ROT0, "Namco", "Vs. Super SkyKid" , 0 ) |
| 2586 | | GAME( 1987, tkoboxng, 0, vsnes, tkoboxng, tkoboxng, ROT0, "Namco LTD.","Vs. TKO Boxing", GAME_WRONG_COLORS | GAME_IMPERFECT_GRAPHICS ) |
| 2587 | | GAME( 1984, smgolf, 0, vsnes, golf4s, machridr, ROT0, "Nintendo", "Vs. Stroke & Match Golf (Men Version, set 1)", 0 ) |
| 2771 | GAME( 1987, tkoboxng, 0, vsnes, tkoboxng, tkoboxng, ROT0, "Namco / Data East USA","Vs. T.K.O. Boxing", 0 ) |
| 2772 | GAME( 1984, smgolf, 0, vsnes, golf4s, vsnormal, ROT0, "Nintendo", "Vs. Stroke & Match Golf (Men Version, set 1)", 0 ) |
| 2588 | 2773 | GAME( 1984, smgolfj, smgolf, vsnes, golf, vsnormal, ROT0, "Nintendo", "Vs. Stroke & Match Golf (Men Version) (Japan)", 0 ) |
| 2589 | | GAME( 1984, ladygolf, smgolf, vsnes, golf, machridr, ROT0, "Nintendo", "Vs. Stroke & Match Golf (Ladies Version)", 0 ) |
| 2590 | | GAME( 1984, vspinbal, 0, vsnes, vspinbal, vspinbal, ROT0, "Nintendo", "Vs. Pinball", 0 ) |
| 2774 | GAME( 1984, ladygolf, smgolf, vsnes, golf, vsnormal, ROT0, "Nintendo", "Vs. Stroke & Match Golf (Ladies Version)", 0 ) |
| 2775 | GAME( 1984, vspinbal, 0, vsnes, vspinbal, vsnormal, ROT0, "Nintendo", "Vs. Pinball", 0 ) |
| 2591 | 2776 | GAME( 1984, vspinbalj,vspinbal, vsnes, vspinblj, vsnormal, ROT0, "Nintendo", "Vs. Pinball (Japan)", 0 ) |
| 2592 | | GAME( 1986, vsslalom, 0, vsnes, vsslalom, vsslalom, ROT0, "Rare LTD.", "Vs. Slalom", GAME_IMPERFECT_GRAPHICS ) |
| 2593 | | GAME( 1985, vssoccer, 0, vsnes, vssoccer, excitebk, ROT0, "Nintendo", "Vs. Soccer", 0 ) |
| 2777 | GAME( 1986, vsslalom, 0, vsnes, vsslalom, vsnormal, ROT0, "Rare LTD.", "Vs. Slalom", GAME_IMPERFECT_GRAPHICS ) |
| 2778 | GAME( 1985, vssoccer, 0, vsnes, vssoccer, vsnormal, ROT0, "Nintendo", "Vs. Soccer", 0 ) |
| 2594 | 2779 | GAME( 1985, vssoccerj,vssoccer, vsnes, vssoccer, bnglngby, ROT0, "Nintendo", "Vs. Soccer (Japan)", 0 ) |
| 2595 | | GAME( 1986, vsgradus, 0, vsnes, vsgradus, vsgradus, ROT0, "Konami", "Vs. Gradius", 0 ) |
| 2596 | | GAME( 1987, platoon, 0, vsnes, platoon, platoon, ROT0, "Ocean Software Limited", "Vs. Platoon", GAME_WRONG_COLORS ) |
| 2597 | | GAME( 1987, vstetris, 0, vsnes, vstetris, vstetris, ROT0, "Academysoft-Elory", "Vs. Tetris" , GAME_IMPERFECT_COLORS ) |
| 2598 | | GAME( 1986, mightybj, 0, vsnes, mightybj, mightybj, ROT0, "Tecmo", "Vs. Mighty Bomb Jack (Japan)", 0 ) |
| 2599 | | GAME( 1985, jajamaru, 0, vsnes, jajamaru, jajamaru, ROT0, "Jaleco", "Vs. Ninja Jajamaru Kun (Japan)", GAME_IMPERFECT_GRAPHICS ) |
| 2600 | | GAME( 1987, topgun, 0, vsnes, topgun, topgun, ROT0, "Konami", "Vs. Top Gun", 0) |
| 2780 | GAME( 1986, vsgradus, 0, vsnes, vsgradus, vskonami, ROT0, "Konami", "Vs. Gradius", 0 ) |
| 2781 | GAME( 1987, platoon, 0, vsnes, platoon, platoon, ROT0, "Ocean Software Limited", "Vs. Platoon", 0 ) |
| 2782 | GAME( 1987, vstetris, 0, vsnes, vstetris, vsnormal, ROT0, "Academysoft-Elory", "Vs. Tetris" , 0 ) |
| 2783 | GAME( 1986, mightybj, 0, mightybj,mightybj, vsnormal, ROT0, "Tecmo", "Vs. Mighty Bomb Jack (Japan)", 0 ) |
| 2784 | GAME( 1985, jajamaru, 0, jajamaru,jajamaru, vsnormal, ROT0, "Jaleco", "Vs. Ninja Jajamaru Kun (Japan)", 0 ) |
| 2785 | GAME( 1987, topgun, 0, topgun, topgun, vsvram, ROT0, "Konami", "Vs. Top Gun", 0) |
| 2601 | 2786 | GAME( 1985, bnglngby, 0, vsnes, bnglngby, bnglngby, ROT0, "Nintendo / Broderbund Software Inc.", "Vs. Raid on Bungeling Bay (Japan)", 0 ) |
| 2602 | 2787 | GAME( 1986, supxevs, 0, vsnes, supxevs, supxevs, ROT0, "Namco", "Vs. Super Xevious", 0 ) |
| 2603 | 2788 | GAME( 1988, vsfdf, 0, vsnes, vsfdf, vsfdf, ROT0, "Sunsoft", "Vs. Freedom Force", 0 ) |
| 2604 | | GAME( 1986, vsgshoe, 0, vsnes, vsgshoe, vsgshoe, ROT0, "Nintendo", "Vs. Gumshoe", 0 ) |
| 2789 | GAME( 1986, vsgshoe, 0, vsgshoe, vsgshoe, vsgshoe, ROT0, "Nintendo", "Vs. Gumshoe", 0 ) |
| 2605 | 2790 | |
| 2606 | 2791 | /* Dual games */ |
| 2607 | | GAME( 1984, vstennis, 0, vsdual, vstennis, vstennis, ROT0, "Nintendo", "Vs. Tennis" , 0 ) |
| 2608 | | GAME( 1984, vstennisj,vstennis, vsdual, vstennis, vstennis, ROT0, "Nintendo", "Vs. Tennis (Japan)" , 0 ) |
| 2609 | | GAME( 1984, wrecking, 0, vsdual, wrecking, wrecking, ROT0, "Nintendo", "Vs. Wrecking Crew", 0 ) |
| 2610 | | GAME( 1984, balonfgt, 0, vsdual, balonfgt, balonfgt, ROT0, "Nintendo", "Vs. Balloon Fight", 0 ) |
| 2611 | | GAME( 1984, vsmahjng, 0, vsdual, vsmahjng, vstennis, ROT0, "Nintendo", "Vs. Mahjang (Japan)" , 0 ) |
| 2612 | | GAME( 1984, vsbball, 0, vsdual, vsbball, vsbball, ROT0, "Nintendo of America", "Vs. BaseBall", 0 ) |
| 2613 | | GAME( 1984, vsbballj, vsbball, vsdual, vsbballj, vsbball, ROT0, "Nintendo", "Vs. BaseBall (Japan set 1)", 0 ) |
| 2614 | | GAME( 1984, vsbballja,vsbball, vsdual, vsbballj, vsbball, ROT0, "Nintendo", "Vs. BaseBall (Japan set 2)", 0 ) |
| 2615 | | GAME( 1984, vsbballjb,vsbball, vsdual, vsbballj, vsbball, ROT0, "Nintendo", "Vs. BaseBall (Japan set 3)", 0 ) |
| 2616 | | GAME( 1984, iceclmrj, 0, vsdual, iceclmrj, iceclmrj, ROT0, "Nintendo", "Vs. Ice Climber Dual (Japan)" , 0 ) |
| 2792 | GAME( 1984, vstennis, 0, vsdual, vstennis, vsdual, ROT0, "Nintendo", "Vs. Tennis" , 0 ) |
| 2793 | GAME( 1984, vstennisj,vstennis, vsdual, vstennis, vsdual, ROT0, "Nintendo", "Vs. Tennis (Japan)" , 0 ) |
| 2794 | GAME( 1984, wrecking, 0, vsdual, wrecking, vsdual, ROT0, "Nintendo", "Vs. Wrecking Crew", 0 ) |
| 2795 | GAME( 1984, balonfgt, 0, vsdual, balonfgt, vsdual, ROT0, "Nintendo", "Vs. Balloon Fight", 0 ) |
| 2796 | GAME( 1984, vsmahjng, 0, vsdual, vsmahjng, vsdual, ROT0, "Nintendo", "Vs. Mahjang (Japan)" , 0 ) |
| 2797 | GAME( 1984, vsbball, 0, vsdual, vsbball, vsdual, ROT0, "Nintendo of America", "Vs. BaseBall", 0 ) |
| 2798 | GAME( 1984, vsbballj, vsbball, vsdual, vsbballj, vsdual, ROT0, "Nintendo", "Vs. BaseBall (Japan set 1)", 0 ) |
| 2799 | GAME( 1984, vsbballja,vsbball, vsdual, vsbballj, vsdual, ROT0, "Nintendo", "Vs. BaseBall (Japan set 2)", 0 ) |
| 2800 | GAME( 1984, vsbballjb,vsbball, vsdual, vsbballj, vsdual, ROT0, "Nintendo", "Vs. BaseBall (Japan set 3)", 0 ) |
| 2801 | GAME( 1984, iceclmrj, 0, vsdual, iceclmrj, vsdual, ROT0, "Nintendo", "Vs. Ice Climber Dual (Japan)" , 0 ) |
| 2617 | 2802 | |
| 2618 | 2803 | /* Not Working (bad dumps) */ |
| 2619 | | GAME( 1985, smgolfb, smgolf, vsnes, golf, machridr, ROT0, "Nintendo", "Vs. Stroke & Match Golf (Men Version, set 2)", GAME_NOT_WORKING ) |
| 2804 | GAME( 1985, smgolfb, smgolf, vsnes, golf, vsnormal, ROT0, "Nintendo", "Vs. Stroke & Match Golf (Men Version, set 2)", GAME_NOT_WORKING ) |
src/mame/drivers/midas.c
| r7882 | r7883 | |
| 43 | 43 | |
| 44 | 44 | size 220(x)mm * 210(y)mm |
| 45 | 45 | |
| 46 | |
| 47 | Notes: |
| 48 | |
| 49 | - hammer: keep test button pressed during boot for hardware tests |
| 50 | |
| 46 | 51 | *************************************************************************************************************/ |
| 47 | 52 | |
| 48 | 53 | #include "emu.h" |
| 49 | 54 | #include "cpu/m68000/m68000.h" |
| 50 | 55 | #include "sound/ymz280b.h" |
| 51 | 56 | #include "machine/eeprom.h" |
| 57 | #include "machine/ticket.h" |
| 52 | 58 | |
| 53 | | #define MIDAS_DEBUG 0 |
| 59 | static UINT16 *midas_gfxram, *midas_gfxregs; |
| 54 | 60 | |
| 55 | | static UINT16 *livequiz_gfxram, *livequiz_gfxregs; |
| 61 | static VIDEO_START( midas ); |
| 62 | static VIDEO_UPDATE( midas ); |
| 56 | 63 | |
| 57 | | static VIDEO_START( livequiz ); |
| 58 | | static VIDEO_UPDATE( livequiz ); |
| 59 | | |
| 60 | 64 | static tilemap_t *tmap; |
| 61 | 65 | |
| 62 | 66 | static TILE_GET_INFO( get_tile_info ) |
| 63 | 67 | { |
| 64 | | UINT16 code = livequiz_gfxram[ tile_index + 0x7000 ]; |
| 68 | UINT16 code = midas_gfxram[ tile_index + 0x7000 ]; |
| 65 | 69 | SET_TILE_INFO(1, code & 0xfff, (code >> 12) & 0xf, TILE_FLIPXY( 0 )); |
| 66 | 70 | } |
| 67 | 71 | |
| 68 | | static VIDEO_START( livequiz ) |
| 72 | static VIDEO_START( midas ) |
| 69 | 73 | { |
| 74 | midas_gfxram = auto_alloc_array(machine, UINT16, 0x20000/2); |
| 75 | |
| 70 | 76 | tmap = tilemap_create( machine, get_tile_info, tilemap_scan_cols, |
| 71 | 77 | 8,8, 0x80,0x20 ); |
| 72 | 78 | |
| r7882 | r7883 | |
| 75 | 81 | |
| 76 | 82 | static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect) |
| 77 | 83 | { |
| 78 | | UINT16 *s = livequiz_gfxram + 0x8000; |
| 79 | | UINT16 *codes = livequiz_gfxram; |
| 84 | UINT16 *s = midas_gfxram + 0x8000; |
| 85 | UINT16 *codes = midas_gfxram; |
| 80 | 86 | |
| 81 | 87 | int sx_old = 0, sy_old = 0, ynum_old = 0, xzoom_old = 0; |
| 82 | 88 | int xdim, ydim, xscale, yscale; |
| r7882 | r7883 | |
| 156 | 162 | } |
| 157 | 163 | } |
| 158 | 164 | |
| 159 | | static VIDEO_UPDATE( livequiz ) |
| 165 | static VIDEO_UPDATE( midas ) |
| 160 | 166 | { |
| 161 | 167 | int layers_ctrl = -1; |
| 162 | 168 | |
| 163 | | #if MIDAS_DEBUG |
| 169 | #ifdef MAME_DEBUG |
| 164 | 170 | if ( input_code_pressed(screen->machine, KEYCODE_Z) ) |
| 165 | 171 | { |
| 166 | 172 | int msk = 0; |
| r7882 | r7883 | |
| 178 | 184 | return 0; |
| 179 | 185 | } |
| 180 | 186 | |
| 181 | | static WRITE16_DEVICE_HANDLER( livequiz_eeprom_w ) |
| 187 | static WRITE16_DEVICE_HANDLER( midas_eeprom_w ) |
| 182 | 188 | { |
| 183 | 189 | if (ACCESSING_BITS_0_7) |
| 184 | 190 | { |
| r7882 | r7883 | |
| 198 | 204 | return 0xffff; |
| 199 | 205 | } |
| 200 | 206 | |
| 201 | | static WRITE16_HANDLER( livequiz_gfxregs_w ) |
| 207 | static WRITE16_HANDLER( midas_gfxregs_w ) |
| 202 | 208 | { |
| 203 | | COMBINE_DATA( livequiz_gfxregs + offset ); |
| 209 | COMBINE_DATA( midas_gfxregs + offset ); |
| 204 | 210 | |
| 205 | 211 | switch( offset ) |
| 206 | 212 | { |
| 207 | 213 | case 1: |
| 208 | 214 | { |
| 209 | | UINT16 addr = livequiz_gfxregs[0]; |
| 210 | | livequiz_gfxram[addr] = data; |
| 211 | | livequiz_gfxregs[0] += livequiz_gfxregs[2]; |
| 215 | UINT16 addr = midas_gfxregs[0]; |
| 216 | midas_gfxram[addr] = data; |
| 217 | midas_gfxregs[0] += midas_gfxregs[2]; |
| 212 | 218 | |
| 213 | 219 | if ( addr >= 0x7000 && addr <= 0x7fff ) tilemap_mark_tile_dirty(tmap, addr - 0x7000); |
| 214 | 220 | |
| r7882 | r7883 | |
| 217 | 223 | } |
| 218 | 224 | } |
| 219 | 225 | |
| 220 | | static ADDRESS_MAP_START( mem_map, ADDRESS_SPACE_PROGRAM, 16 ) |
| 226 | /*************************************************************************************** |
| 227 | Live Quiz Show |
| 228 | ***************************************************************************************/ |
| 229 | |
| 230 | static WRITE16_HANDLER( livequiz_coin_w ) |
| 231 | { |
| 232 | if (ACCESSING_BITS_0_7) |
| 233 | { |
| 234 | coin_counter_w(space->machine, 0, data & 0x0001); |
| 235 | } |
| 236 | #ifdef MAME_DEBUG |
| 237 | // popmessage("coin %04X", data); |
| 238 | #endif |
| 239 | } |
| 240 | |
| 241 | static ADDRESS_MAP_START( livequiz_map, ADDRESS_SPACE_PROGRAM, 16 ) |
| 221 | 242 | AM_RANGE(0x000000, 0x1fffff) AM_ROM |
| 222 | 243 | |
| 223 | | AM_RANGE(0x900000, 0x900001) AM_READ_PORT("IN5") |
| 224 | | AM_RANGE(0x920000, 0x920001) AM_READ_PORT("IN2") |
| 244 | AM_RANGE(0x900000, 0x900001) AM_READ_PORT("DSW_PLAYER1") |
| 245 | AM_RANGE(0x920000, 0x920001) AM_READ_PORT("SERVICE") |
| 246 | AM_RANGE(0x940000, 0x940001) AM_READ_PORT("PLAYER2") |
| 247 | AM_RANGE(0x980000, 0x980001) AM_READ_PORT("START") |
| 248 | |
| 249 | AM_RANGE(0x980000, 0x980001) AM_WRITE( livequiz_coin_w ) |
| 250 | |
| 251 | AM_RANGE(0x9a0000, 0x9a0001) AM_DEVWRITE( "eeprom", midas_eeprom_w ) |
| 252 | |
| 253 | AM_RANGE(0x9c0000, 0x9c0005) AM_WRITE( midas_gfxregs_w ) AM_BASE( &midas_gfxregs ) |
| 254 | |
| 255 | AM_RANGE(0xa00000, 0xa3ffff) AM_RAM_WRITE( paletteram16_xrgb_word_be_w ) AM_BASE_GENERIC( paletteram ) |
| 256 | AM_RANGE(0xa40000, 0xa7ffff) AM_RAM |
| 257 | |
| 258 | AM_RANGE(0xb00000, 0xb00001) AM_READ( ret_ffff ) |
| 259 | AM_RANGE(0xb20000, 0xb20001) AM_READ( ret_ffff ) |
| 260 | AM_RANGE(0xb40000, 0xb40001) AM_READ( ret_ffff ) |
| 261 | AM_RANGE(0xb60000, 0xb60001) AM_READ( ret_ffff ) |
| 262 | |
| 263 | AM_RANGE(0xb80008, 0xb8000b) AM_DEVREADWRITE8( "ymz", ymz280b_r, ymz280b_w, 0x00ff ) |
| 264 | |
| 265 | AM_RANGE(0xba0000, 0xba0001) AM_READ_PORT("START3") |
| 266 | AM_RANGE(0xbc0000, 0xbc0001) AM_READ_PORT("PLAYER3") |
| 267 | |
| 268 | AM_RANGE(0xd00000, 0xd1ffff) AM_RAM // zoom table? |
| 269 | |
| 270 | AM_RANGE(0xe00000, 0xe3ffff) AM_RAM |
| 271 | ADDRESS_MAP_END |
| 272 | |
| 273 | /*************************************************************************************** |
| 274 | Hammer |
| 275 | ***************************************************************************************/ |
| 276 | |
| 277 | static READ16_HANDLER( hammer_sensor_r ) |
| 278 | { |
| 279 | if (input_port_read(space->machine, "HAMMER") & 0x80) |
| 280 | return 0xffff; |
| 281 | |
| 282 | return (input_port_read(space->machine, "SENSORY") << 8) | input_port_read(space->machine, "SENSORX"); |
| 283 | } |
| 284 | |
| 285 | static WRITE16_HANDLER( hammer_coin_w ) |
| 286 | { |
| 287 | if (ACCESSING_BITS_0_7) |
| 288 | { |
| 289 | coin_counter_w(space->machine, 0, data & 0x0001); |
| 290 | coin_counter_w(space->machine, 1, data & 0x0002); |
| 291 | } |
| 292 | #ifdef MAME_DEBUG |
| 293 | // popmessage("coin %04X", data); |
| 294 | #endif |
| 295 | } |
| 296 | |
| 297 | static WRITE16_HANDLER( hammer_motor_w ) |
| 298 | { |
| 299 | if (ACCESSING_BITS_0_7) |
| 300 | { |
| 301 | ticket_dispenser_w(devtag_get_device(space->machine, "prize1"), 0, (data & 0x0001) << 7); |
| 302 | ticket_dispenser_w(devtag_get_device(space->machine, "prize2"), 0, (data & 0x0002) << 6); |
| 303 | ticket_dispenser_w(devtag_get_device(space->machine, "ticket"), 0, (data & 0x0010) << 3); |
| 304 | // data & 0x0080 ? |
| 305 | } |
| 306 | #ifdef MAME_DEBUG |
| 307 | // popmessage("motor %04X", data); |
| 308 | #endif |
| 309 | } |
| 310 | |
| 311 | static WRITE16_HANDLER( hammer_led_w ) |
| 312 | { |
| 313 | #ifdef MAME_DEBUG |
| 314 | // popmessage("led %04X", data); |
| 315 | #endif |
| 316 | } |
| 317 | |
| 318 | static ADDRESS_MAP_START( hammer_map, ADDRESS_SPACE_PROGRAM, 16 ) |
| 319 | AM_RANGE(0x000000, 0x1fffff) AM_ROM |
| 320 | |
| 321 | AM_RANGE(0x900000, 0x900001) AM_READ_PORT("DSW") |
| 322 | AM_RANGE(0x920000, 0x920001) AM_READ_PORT("SERVICE") |
| 225 | 323 | AM_RANGE(0x940000, 0x940001) AM_READ_PORT("IN0") |
| 226 | | AM_RANGE(0x980000, 0x980001) AM_READ_PORT("IN1") |
| 324 | AM_RANGE(0x980000, 0x980001) AM_READ_PORT("TILT") |
| 227 | 325 | |
| 228 | | AM_RANGE(0x9a0000, 0x9a0001) AM_DEVWRITE( "eeprom", livequiz_eeprom_w ) |
| 326 | AM_RANGE(0x980000, 0x980001) AM_WRITE( hammer_coin_w ) |
| 327 | AM_RANGE(0x9c000c, 0x9c000d) AM_WRITENOP // IRQ Ack |
| 328 | AM_RANGE(0x9c000e, 0x9c000f) AM_WRITE( hammer_led_w ) |
| 229 | 329 | |
| 230 | | AM_RANGE(0x9c0000, 0x9c0005) AM_WRITE( livequiz_gfxregs_w ) AM_BASE( &livequiz_gfxregs ) |
| 330 | AM_RANGE(0x9a0000, 0x9a0001) AM_DEVWRITE( "eeprom", midas_eeprom_w ) |
| 231 | 331 | |
| 332 | AM_RANGE(0x9c0000, 0x9c0005) AM_WRITE( midas_gfxregs_w ) AM_BASE( &midas_gfxregs ) |
| 333 | |
| 232 | 334 | AM_RANGE(0xa00000, 0xa3ffff) AM_RAM_WRITE( paletteram16_xrgb_word_be_w ) AM_BASE_GENERIC( paletteram ) |
| 233 | 335 | AM_RANGE(0xa40000, 0xa7ffff) AM_RAM |
| 234 | 336 | |
| r7882 | r7883 | |
| 239 | 341 | |
| 240 | 342 | AM_RANGE(0xb80008, 0xb8000b) AM_DEVREADWRITE8( "ymz", ymz280b_r, ymz280b_w, 0x00ff ) |
| 241 | 343 | |
| 242 | | AM_RANGE(0xba0000, 0xba0001) AM_READ_PORT("IN4") |
| 243 | | AM_RANGE(0xbc0000, 0xbc0001) AM_READ_PORT("IN3") |
| 344 | AM_RANGE(0xba0000, 0xba0001) AM_READ_PORT("IN1") |
| 345 | AM_RANGE(0xbc0000, 0xbc0001) AM_READ_PORT("HAMMER") |
| 244 | 346 | |
| 245 | | AM_RANGE(0xd00000, 0xd1ffff) AM_RAM |
| 347 | AM_RANGE(0xbc0002, 0xbc0003) AM_WRITE( hammer_motor_w ) |
| 246 | 348 | |
| 349 | AM_RANGE(0xbc0004, 0xbc0005) AM_READ( hammer_sensor_r ) |
| 350 | |
| 351 | AM_RANGE(0xd00000, 0xd1ffff) AM_RAM // zoom table? |
| 352 | |
| 247 | 353 | AM_RANGE(0xe00000, 0xe3ffff) AM_RAM |
| 248 | | |
| 249 | | AM_RANGE(0xf90000, 0xfaffff) AM_RAM AM_BASE( &livequiz_gfxram ) |
| 250 | 354 | ADDRESS_MAP_END |
| 251 | 355 | |
| 252 | 356 | |
| 253 | | static const gfx_layout layout16x16 = |
| 357 | static const gfx_layout layout16x16x8 = |
| 254 | 358 | { |
| 255 | 359 | 16,16, |
| 256 | 360 | RGN_FRAC(1,4), |
| 257 | 361 | 8, |
| 258 | 362 | { |
| 259 | 363 | RGN_FRAC(3,4)+8,RGN_FRAC(3,4)+0, |
| 364 | RGN_FRAC(2,4)+8,RGN_FRAC(2,4)+0, |
| 260 | 365 | RGN_FRAC(1,4)+8,RGN_FRAC(1,4)+0, |
| 261 | | RGN_FRAC(2,4)+8,RGN_FRAC(2,4)+0, |
| 262 | 366 | RGN_FRAC(0,4)+8,RGN_FRAC(0,4)+0 |
| 263 | 367 | }, |
| 264 | 368 | { STEP8(8*16*2+7,-1), STEP8(7,-1) }, |
| r7882 | r7883 | |
| 266 | 370 | 16*16*2 |
| 267 | 371 | }; |
| 268 | 372 | |
| 269 | | static const gfx_layout layout8x8_2 = |
| 373 | static const gfx_layout layout8x8x8_2 = |
| 270 | 374 | { |
| 271 | | 8,8, /* 8 x 8 chars */ |
| 375 | 8,8, |
| 272 | 376 | RGN_FRAC(1,1), |
| 273 | | 8, /* 4 bits per pixel */ |
| 274 | | { 8,9,10,11, 0,1,2,3 }, /* planes are packed in a nibble */ |
| 377 | 8, |
| 378 | { 8,9,10,11, 0,1,2,3 }, |
| 275 | 379 | { (32*2+1)*4, 32*2*4, (48*2+1)*4, 48*2*4, (0+1)*4, 0*4, (16*2+1)*4, 16*2*4 }, |
| 276 | 380 | { 0*8*2, 1*8*2, 2*8*2, 3*8*2, 4*8*2, 5*8*2, 6*8*2, 7*8*2 }, |
| 277 | | 32*8*2 /* 32 bytes per char */ |
| 278 | | |
| 279 | | |
| 381 | 32*8*2 |
| 280 | 382 | }; |
| 281 | 383 | |
| 282 | 384 | static GFXDECODE_START( midas ) |
| 283 | | GFXDECODE_ENTRY( "gfx1", 0x000000, layout16x16, 0, 0x100 ) |
| 284 | | GFXDECODE_ENTRY( "gfx2", 0x000000, layout8x8_2, 0, 0x80 ) |
| 385 | GFXDECODE_ENTRY( "sprites", 0, layout16x16x8, 0, 0x100 ) |
| 386 | GFXDECODE_ENTRY( "tiles", 0, layout8x8x8_2, 0, 0x80 ) |
| 285 | 387 | GFXDECODE_END |
| 286 | 388 | |
| 287 | 389 | |
| 288 | 390 | static INPUT_PORTS_START( livequiz ) |
| 289 | 391 | |
| 290 | | PORT_START("IN0") // IN0 |
| 392 | PORT_START("DSW_PLAYER1") // 900000 |
| 393 | PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) |
| 394 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
| 395 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 396 | PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) |
| 397 | PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) |
| 398 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 399 | PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) |
| 400 | PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) |
| 401 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 402 | PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) |
| 403 | PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) |
| 404 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 405 | PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) |
| 406 | PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) |
| 407 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 408 | PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) |
| 409 | PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) |
| 410 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 411 | PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) |
| 412 | PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) |
| 413 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 414 | PORT_DIPNAME( 0x80, 0x80, "Freeze" ) |
| 415 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
| 416 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 417 | |
| 418 | PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) |
| 419 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) |
| 420 | PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) |
| 421 | PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) |
| 422 | PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 423 | PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 424 | PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 425 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 426 | |
| 427 | PORT_START("SERVICE") // 920000 |
| 428 | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) |
| 429 | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 430 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 431 | PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("eeprom", eeprom_read_bit) // EEPROM |
| 432 | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 433 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 434 | PORT_SERVICE_NO_TOGGLE( 0x0040, IP_ACTIVE_LOW ) |
| 435 | PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 436 | |
| 437 | PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 438 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 439 | PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 440 | PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 441 | PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 442 | PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 443 | PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 444 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 445 | |
| 446 | PORT_START("PLAYER2") // 940000 |
| 291 | 447 | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 292 | 448 | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 293 | 449 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| r7882 | r7883 | |
| 306 | 462 | PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 307 | 463 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 308 | 464 | |
| 309 | | PORT_START("IN1") // IN1 |
| 465 | PORT_START("START") // 980000 |
| 310 | 466 | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 311 | 467 | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 312 | 468 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| r7882 | r7883 | |
| 325 | 481 | PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 326 | 482 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 327 | 483 | |
| 328 | | PORT_START("IN2") // IN2 |
| 329 | | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) |
| 330 | | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 331 | | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 332 | | PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("eeprom", eeprom_read_bit) // EEPROM |
| 333 | | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 334 | | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 335 | | PORT_SERVICE_NO_TOGGLE( 0x0040, IP_ACTIVE_LOW ) |
| 336 | | PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 484 | PORT_START("START3") // ba0000 |
| 485 | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START3 ) |
| 486 | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 487 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 488 | PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 489 | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 490 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 491 | PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 492 | PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 337 | 493 | |
| 338 | 494 | PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 339 | 495 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| r7882 | r7883 | |
| 344 | 500 | PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 345 | 501 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 346 | 502 | |
| 347 | | PORT_START("IN3") // IN3 |
| 503 | PORT_START("PLAYER3") // bc0000 |
| 348 | 504 | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) |
| 349 | 505 | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) |
| 350 | 506 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3) |
| r7882 | r7883 | |
| 363 | 519 | PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 364 | 520 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 365 | 521 | |
| 366 | | PORT_START("IN4") // IN4 |
| 367 | | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START3 ) |
| 368 | | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 369 | | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 370 | | PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 371 | | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 372 | | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 373 | | PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 374 | | PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 522 | INPUT_PORTS_END |
| 375 | 523 | |
| 376 | | PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 377 | | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 378 | | PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 379 | | PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 380 | | PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 381 | | PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 382 | | PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 383 | | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 524 | static INPUT_PORTS_START( hammer ) |
| 384 | 525 | |
| 385 | | PORT_START("IN5") // IN5 - 900000 |
| 386 | | PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) |
| 526 | PORT_START("DSW") // 900000 |
| 527 | PORT_DIPNAME( 0x01, 0x01, "Debug Mode" ) |
| 387 | 528 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
| 388 | 529 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 389 | | PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) |
| 390 | | PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) |
| 391 | | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 392 | | PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) |
| 393 | | PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) |
| 394 | | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 395 | | PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) |
| 530 | PORT_DIPNAME( 0x06, 0x06, "Game Mode" ) |
| 531 | PORT_DIPSETTING( 0x06, "Prize Game" ) |
| 532 | PORT_DIPSETTING( 0x00, "Ticket Game 1" ) // not in manual, does not work (it requires a toggleable ticket dispenser) |
| 533 | PORT_DIPSETTING( 0x04, "Ticket Game 2" ) |
| 534 | PORT_DIPSETTING( 0x02, "Generic Game" ) |
| 535 | PORT_DIPNAME( 0x08, 0x08, "Warning Sound" ) |
| 396 | 536 | PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) |
| 397 | 537 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 398 | 538 | PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) |
| r7882 | r7883 | |
| 408 | 548 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
| 409 | 549 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 410 | 550 | |
| 411 | | PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) |
| 412 | | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) |
| 413 | | PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) |
| 414 | | PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) |
| 551 | PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 552 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 553 | PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 554 | PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 415 | 555 | PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 416 | 556 | PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 417 | 557 | PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 418 | 558 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 419 | 559 | |
| 560 | PORT_START("SERVICE") // 920000 |
| 561 | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) |
| 562 | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) |
| 563 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) |
| 564 | PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("eeprom", eeprom_read_bit) |
| 565 | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 566 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 567 | PORT_SERVICE_NO_TOGGLE( 0x0040, IP_ACTIVE_LOW ) |
| 568 | PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 569 | |
| 570 | PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 571 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 572 | PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 573 | PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 574 | PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 575 | PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 576 | PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 577 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 578 | |
| 579 | PORT_START("IN0") // 940000 |
| 580 | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 581 | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 582 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 583 | PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 584 | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 585 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 586 | PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 587 | PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 588 | |
| 589 | PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 590 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 591 | PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 592 | PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 593 | PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 594 | PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 595 | PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 596 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 597 | |
| 598 | PORT_START("TILT") // 980000 |
| 599 | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 600 | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 601 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 602 | PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 603 | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 604 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 605 | PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 606 | PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 607 | |
| 608 | PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_TILT ) |
| 609 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 610 | PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 611 | PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 612 | PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 613 | PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 614 | PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 615 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 616 | |
| 617 | PORT_START("IN1") // ba0000 |
| 618 | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 619 | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 620 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 621 | PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 622 | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 623 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 624 | PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 625 | PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 626 | |
| 627 | PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 628 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 629 | PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 630 | PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 631 | PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 632 | PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 633 | PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 634 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 635 | |
| 636 | PORT_START("HAMMER") // bc0000 |
| 637 | PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("prize1", ticket_dispenser_line_r) // prize 1 sensor ("tejisw 1") |
| 638 | PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("prize2", ticket_dispenser_line_r) // prize 2 sensor ("tejisw 2") |
| 639 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 640 | PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 641 | PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("ticket", ticket_dispenser_line_r) |
| 642 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 643 | PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 644 | PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_IMPULSE(5) PORT_NAME( "Hammer" ) |
| 645 | |
| 646 | PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 647 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 648 | PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 649 | PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 650 | PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 651 | PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 652 | PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 653 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 654 | |
| 655 | PORT_START("SENSORX") |
| 656 | PORT_BIT( 0xff, 0x20, IPT_LIGHTGUN_X ) PORT_MINMAX(0x00, 0x3f+1) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(35) PORT_KEYDELTA(8) |
| 657 | |
| 658 | PORT_START("SENSORY") |
| 659 | PORT_BIT( 0xff, 0x18, IPT_LIGHTGUN_Y ) PORT_MINMAX(0x00, 0x2f+1) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(35) PORT_KEYDELTA(8) |
| 660 | |
| 420 | 661 | INPUT_PORTS_END |
| 421 | 662 | |
| 422 | 663 | |
| r7882 | r7883 | |
| 433 | 674 | static MACHINE_DRIVER_START( livequiz ) |
| 434 | 675 | |
| 435 | 676 | /* basic machine hardware */ |
| 436 | | MDRV_CPU_ADD("maincpu", M68000, 24000000 / 2) |
| 437 | | MDRV_CPU_PROGRAM_MAP(mem_map) |
| 677 | MDRV_CPU_ADD("maincpu", M68000, XTAL_24MHz / 2) |
| 678 | MDRV_CPU_PROGRAM_MAP(livequiz_map) |
| 438 | 679 | MDRV_CPU_VBLANK_INT("screen", irq1_line_hold) |
| 439 | 680 | |
| 440 | 681 | MDRV_EEPROM_93C46_ADD("eeprom") |
| r7882 | r7883 | |
| 450 | 691 | MDRV_GFXDECODE(midas) |
| 451 | 692 | MDRV_PALETTE_LENGTH(0x10000) |
| 452 | 693 | |
| 453 | | MDRV_VIDEO_START(livequiz) |
| 454 | | MDRV_VIDEO_UPDATE(livequiz) |
| 694 | MDRV_VIDEO_START(midas) |
| 695 | MDRV_VIDEO_UPDATE(midas) |
| 455 | 696 | |
| 456 | 697 | /* sound hardware */ |
| 457 | 698 | MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| 458 | | MDRV_SOUND_ADD("ymz", YMZ280B, 16934400) |
| 699 | MDRV_SOUND_ADD("ymz", YMZ280B, XTAL_16_9344MHz) |
| 459 | 700 | MDRV_SOUND_CONFIG(ymz280b_config) |
| 460 | 701 | MDRV_SOUND_ROUTE(0, "lspeaker", 0.80) |
| 461 | 702 | MDRV_SOUND_ROUTE(1, "rspeaker", 0.80) |
| 462 | 703 | MACHINE_DRIVER_END |
| 463 | 704 | |
| 705 | static MACHINE_DRIVER_START( hammer ) |
| 464 | 706 | |
| 707 | /* basic machine hardware */ |
| 708 | MDRV_CPU_ADD("maincpu", M68000, XTAL_28MHz / 2) |
| 709 | MDRV_CPU_PROGRAM_MAP(hammer_map) |
| 710 | MDRV_CPU_VBLANK_INT("screen", irq1_line_hold) |
| 711 | |
| 712 | MDRV_EEPROM_93C46_ADD("eeprom") |
| 713 | |
| 714 | MDRV_TICKET_DISPENSER_ADD("prize1", 1000*5, TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW ) |
| 715 | MDRV_TICKET_DISPENSER_ADD("prize2", 1000*5, TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW ) |
| 716 | MDRV_TICKET_DISPENSER_ADD("ticket", 200, TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW ) |
| 717 | |
| 718 | /* video hardware */ |
| 719 | MDRV_SCREEN_ADD("screen", RASTER) |
| 720 | MDRV_SCREEN_REFRESH_RATE(60) |
| 721 | MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) |
| 722 | MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) |
| 723 | MDRV_SCREEN_SIZE(320, 256) |
| 724 | MDRV_SCREEN_VISIBLE_AREA(0, 320-1, 16, 256-16-1) |
| 725 | |
| 726 | MDRV_GFXDECODE(midas) |
| 727 | MDRV_PALETTE_LENGTH(0x10000) |
| 728 | |
| 729 | MDRV_VIDEO_START(midas) |
| 730 | MDRV_VIDEO_UPDATE(midas) |
| 731 | |
| 732 | /* sound hardware */ |
| 733 | MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| 734 | MDRV_SOUND_ADD("ymz", YMZ280B, XTAL_16_9344MHz) |
| 735 | MDRV_SOUND_CONFIG(ymz280b_config) |
| 736 | MDRV_SOUND_ROUTE(0, "lspeaker", 0.80) |
| 737 | MDRV_SOUND_ROUTE(1, "rspeaker", 0.80) |
| 738 | MACHINE_DRIVER_END |
| 739 | |
| 740 | |
| 465 | 741 | /*************************************************************************************** |
| 466 | 742 | |
| 467 | 743 | Live Quiz Show |
| r7882 | r7883 | |
| 554 | 830 | ROM_REGION( 0x200000, "maincpu", 0 ) |
| 555 | 831 | ROM_LOAD16_WORD_SWAP( "flash.u1", 0x000000, 0x200000, CRC(8ec44493) SHA1(a987886cb87ac0a744f01f2e4a7cc6d12efeaa04) ) |
| 556 | 832 | |
| 557 | | ROM_REGION( 0x200000, "user1", 0 ) |
| 833 | ROM_REGION( 0x200000, "pic", 0 ) |
| 558 | 834 | ROM_LOAD( "main_pic12c508a.u27", 0x000000, 0x000400, CRC(a84f0a7e) SHA1(fb27c05fb27b98ca603697e1be214dc6c8d5f884) ) |
| 559 | 835 | ROM_LOAD( "sub_pic12c508a.u4", 0x000000, 0x000400, CRC(e52ebdc4) SHA1(0f3af66b5ea184e49188e74a873699324a3930f1) ) |
| 560 | 836 | |
| 561 | | ROM_REGION( 0x800000, "gfx1", 0 ) |
| 837 | ROM_REGION( 0x800000, "sprites", 0 ) |
| 562 | 838 | ROM_LOAD( "flash.u15", 0x000000, 0x200000, CRC(d6eb56f1) SHA1(52d67bb25dd968c79eccb05159a578516b27e557) ) |
| 563 | | ROM_LOAD( "flash.u16", 0x200000, 0x200000, CRC(4c9fd873) SHA1(6e185304ce29771265d3c48b0ef0e840d8bed02d) ) |
| 564 | | ROM_LOAD( "flash.u19", 0x400000, 0x200000, CRC(daa81532) SHA1(9e66bb4639b92c3d76b7918535f55883f22f24b2) ) |
| 839 | ROM_LOAD( "flash.u19", 0x200000, 0x200000, CRC(daa81532) SHA1(9e66bb4639b92c3d76b7918535f55883f22f24b2) ) |
| 840 | ROM_LOAD( "flash.u16", 0x400000, 0x200000, CRC(4c9fd873) SHA1(6e185304ce29771265d3c48b0ef0e840d8bed02d) ) |
| 565 | 841 | ROM_LOAD( "flash.u20", 0x600000, 0x200000, CRC(b540a8c7) SHA1(25b9b30c7d5ff1e410ea30580017e45590542561) ) |
| 566 | 842 | |
| 567 | | ROM_REGION( 0x080000, "gfx2", 0 ) |
| 843 | ROM_REGION( 0x080000, "tiles", 0 ) |
| 568 | 844 | ROM_LOAD( "27c4096.u23", 0x000000, 0x080000, CRC(25121de8) SHA1(edf24d87551639b871baf3243b452a4e2ba84107) ) |
| 569 | 845 | |
| 570 | 846 | ROM_REGION( 0x200000, "ymz", 0 ) |
| r7882 | r7883 | |
| 579 | 855 | rom[0x13345a/2] = 0x4e75; |
| 580 | 856 | } |
| 581 | 857 | |
| 582 | | GAME( 1999, livequiz, 0, livequiz, livequiz, livequiz, ROT0, "Andamiro", "Live Quiz Show", GAME_IMPERFECT_GRAPHICS ) |
| 858 | /*************************************************************************************** |
| 859 | |
| 860 | Hammer |
| 861 | Andamiro 2000 |
| 862 | |
| 863 | PCB Layout |
| 864 | ---------- |
| 865 | |
| 866 | |------------------------------|-------------------| |
| 867 | |TDA1519 17358 YAC516 YMZ280B | CN1 | |
| 868 | | 17558 16.9344MHz ATMEL_ATF1500 | |
| 869 | | VOL 17358 | | |
| 870 | | | S0.U25 | |
| 871 | | MC68HC000CFN16 | |
| 872 | |TD62064 | S1.U26 | |
| 873 | | MIDAS-2 | | |
| 874 | | DSW(8) | P.U22 A0L.U44| |
| 875 | |J | LP621024 | |
| 876 | |A LP621024 | A0H.U46| |
| 877 | |M | LP621024 | |
| 878 | |M LP621024 | A1L.U48| |
| 879 | |A | LP621024 | |
| 880 | | LP621024 | A1H.U50| |
| 881 | | | | |
| 882 | | | A2L.U45| |
| 883 | | | | |
| 884 | | TESTSW | A2H.U47| |
| 885 | | 93C46 MIDAS-1 MIDAS-3 | |
| 886 | | LP621024 28MHz | A3L.U49| |
| 887 | | HM62H256 | | |
| 888 | | LP621024 HM62H256 | A3H.U51| |
| 889 | |------------------------------|-------------------| |
| 890 | Notes: |
| 891 | 68000 @ 14MHz [28/2] |
| 892 | YMZ280B @ 16.9344MHz |
| 893 | CN1 - connector for top board |
| 894 | |
| 895 | Top board |
| 896 | --------- |
| 897 | |
| 898 | HAMMER TOP PCB VER1.2 |
| 899 | AMO30803 |
| 900 | |------------------------------------------| |
| 901 | |CN19 CN14 CN15 CN13 CN22 CN23 CN20 CN21 | |
| 902 | | | |
| 903 | | | |
| 904 | | 17558 | |
| 905 | | TD62064 TD62064 17393 | |
| 906 | | | |
| 907 | | 24MHz CN2| |
| 908 | | AT89C52 17558 | |
| 909 | |PAL 17393 CN1| |
| 910 | | | |
| 911 | | MC7805 | |
| 912 | |------------------------------------------| |
| 913 | |
| 914 | ***************************************************************************************/ |
| 915 | |
| 916 | ROM_START( hammer ) |
| 917 | ROM_REGION( 0x200000, "maincpu", 0 ) |
| 918 | ROM_LOAD16_WORD_SWAP( "p.u22", 0x000000, 0x200000, CRC(687f1596) SHA1(3dc5fb0af1e8c4f3a42ce4aad39635b1111831d8) ) |
| 919 | |
| 920 | ROM_REGION( 0x1000000, "sprites", 0 ) |
| 921 | ROM_LOAD( "a0l.u44", 0x000000, 0x200000, CRC(b9cafd81) SHA1(24698970d1aea0907e2963c872ce61077f44c3af) ) |
| 922 | ROM_LOAD( "a0h.u46", 0x200000, 0x200000, CRC(f60f188b) SHA1(486f26c473b46efb402662b2f374e361cd7b4284) ) |
| 923 | |
| 924 | ROM_LOAD( "a1l.u48", 0x400000, 0x200000, CRC(82129cf9) SHA1(6d68e943854bc9e8ea555bf03107dc9e836ca4d9) ) |
| 925 | ROM_LOAD( "a1h.u50", 0x600000, 0x200000, CRC(76897c90) SHA1(aded60d3db834598cd54ad9140eee7be4129cb27) ) |
| 926 | |
| 927 | ROM_LOAD( "a2l.u45", 0x800000, 0x200000, CRC(d8086ee5) SHA1(9d5f2b3a0f903a69cfd1108ddf5ea61b571c3fe3) ) |
| 928 | ROM_LOAD( "a2h.u47", 0xa00000, 0x200000, CRC(a64aa2df) SHA1(7e4eb049cd6a5971a455488a484f225763921614) ) |
| 929 | |
| 930 | ROM_LOAD( "a3l.u49", 0xc00000, 0x200000, CRC(4e83cf00) SHA1(e66a0b4eae0f46bf36126be3795cfac3ad3d4282) ) |
| 931 | ROM_LOAD( "a3h.u51", 0xe00000, 0x200000, CRC(834de39f) SHA1(6e9867180ca20e64f60bad5cad82674ce8f45b7b) ) |
| 932 | |
| 933 | ROM_REGION( 0x080000, "tiles", ROMREGION_ERASE ) |
| 934 | // Use the tiles rom from livequiz (not present in this set) to show some debug text |
| 935 | // ROM_LOAD( "27c4096.u23", 0x000000, 0x080000, CRC(25121de8) SHA1(edf24d87551639b871baf3243b452a4e2ba84107) ) |
| 936 | |
| 937 | ROM_REGION( 0x400000, "ymz", 0 ) |
| 938 | ROM_LOAD( "s0.u25", 0x000000, 0x200000, CRC(c049a3e0) SHA1(0c7016c3128c170a84ad3f92fad1165775210e3d) ) |
| 939 | ROM_LOAD( "s1.u26", 0x200000, 0x200000, CRC(9cc4b3ec) SHA1(b91a8747074a1032eb7f70a015d394fe8e896d7e) ) |
| 940 | ROM_END |
| 941 | |
| 942 | GAME( 1999, livequiz, 0, livequiz, livequiz, livequiz, ROT0, "Andamiro", "Live Quiz Show", GAME_IMPERFECT_GRAPHICS ) |
| 943 | GAME( 2000, hammer, 0, hammer, hammer, 0, ROT0, "Andamiro", "Hammer", 0 ) |
src/mame/drivers/subsino.c
| r7882 | r7883 | |
| 6 | 6 | Additional work by David Haywood, Angelo Salese and Roberto Fresca. |
| 7 | 7 | |
| 8 | 8 | |
| 9 | | CPU: Z180 (in a black box) |
| 9 | CPU: Black epoxy box containing: |
| 10 | 1x CXK58257M (32768 x 8-Bit) High Speed CMOS SRAM. |
| 11 | 1x HD647180X0P6, HD643180X0P6 or HD641180X0P6 Z180-CPU. |
| 12 | 1x X-TAL (unknown frequency). |
| 13 | 1x Battery. |
| 14 | |
| 10 | 15 | GFX: 1 Tilemap (8x8 tiles, no scrolling) |
| 11 | 16 | CUSTOM: 2 x SUBSINO SS9100, SUBSINO SS9101 |
| 12 | 17 | SOUND: M6295, YM2413 or YM3812 |
| r7882 | r7883 | |
| 146 | 151 | - Some clean-ups... |
| 147 | 152 | |
| 148 | 153 | |
| 154 | 2010-04-20 |
| 155 | ---------- |
| 156 | |
| 157 | Shark Party (English, Alpha license): |
| 158 | |
| 159 | - Created complete inputs from the scratch. |
| 160 | - Added coin/keyin/keyout counters. |
| 161 | - Added main game and double-up rates DIP switches. |
| 162 | - Added minimum bet DIP switches. |
| 163 | - Added maximum bet DIP switches. |
| 164 | - Added complete coinage and remote credits DIP switches. |
| 165 | - Added jokers and demo sounds DIP switches. |
| 166 | - Figured out and documented all the game outputs. |
| 167 | - Created proper button-lamps layout. |
| 168 | |
| 169 | |
| 149 | 170 | ***************************************************************************/ |
| 150 | 171 | |
| 151 | 172 | #include "emu.h" |
| r7882 | r7883 | |
| 158 | 179 | #include "victor21.lh" |
| 159 | 180 | #include "crsbingo.lh" |
| 160 | 181 | #include "sharkpy.lh" |
| 182 | #include "sharkpye.lh" |
| 161 | 183 | #include "smoto.lh" |
| 162 | 184 | #include "tisub.lh" |
| 163 | 185 | |
| 186 | |
| 164 | 187 | /*************************************************************************** |
| 165 | 188 | * Video Hardware * |
| 166 | 189 | ***************************************************************************/ |
| r7882 | r7883 | |
| 176 | 199 | static UINT8* reel1_scroll; |
| 177 | 200 | static UINT8* reel2_scroll; |
| 178 | 201 | static UINT8* reel3_scroll; |
| 202 | static UINT8 subsino_out_c; |
| 203 | static UINT8* reel1_attr; |
| 204 | static UINT8* reel2_attr; |
| 205 | static UINT8* reel3_attr; |
| 179 | 206 | |
| 180 | | |
| 181 | 207 | static WRITE8_HANDLER( subsino_tiles_offset_w ) |
| 182 | 208 | { |
| 183 | 209 | tiles_offset = (data & 1) ? 0x1000: 0; |
| r7882 | r7883 | |
| 206 | 232 | SET_TILE_INFO(0, code, color, 0); |
| 207 | 233 | } |
| 208 | 234 | |
| 235 | static TILE_GET_INFO( get_stisub_tile_info ) |
| 236 | { |
| 237 | UINT16 code = videoram[ tile_index ] + (colorram[ tile_index ] << 8); |
| 238 | code&= 0x3fff; |
| 239 | SET_TILE_INFO(0, code, 0, 0); |
| 240 | } |
| 209 | 241 | |
| 210 | 242 | |
| 211 | 243 | static VIDEO_START( subsino ) |
| r7882 | r7883 | |
| 226 | 258 | static TILE_GET_INFO( get_subsino_reel1_tile_info ) |
| 227 | 259 | { |
| 228 | 260 | int code = reel1_ram[tile_index]; |
| 261 | int colour = (subsino_out_c&0x7) + 8; |
| 229 | 262 | |
| 230 | 263 | SET_TILE_INFO( |
| 231 | 264 | 1, |
| 232 | 265 | code, |
| 266 | colour, |
| 267 | 0); |
| 268 | } |
| 269 | |
| 270 | static TILE_GET_INFO( get_stisub_reel1_tile_info ) |
| 271 | { |
| 272 | int code = reel1_ram[tile_index]; |
| 273 | int attr = reel1_attr[tile_index]; |
| 274 | |
| 275 | SET_TILE_INFO( |
| 276 | 1, |
| 277 | code | (attr << 8), |
| 233 | 278 | 0, |
| 234 | 279 | 0); |
| 235 | 280 | } |
| r7882 | r7883 | |
| 244 | 289 | static TILE_GET_INFO( get_subsino_reel2_tile_info ) |
| 245 | 290 | { |
| 246 | 291 | int code = reel2_ram[tile_index]; |
| 292 | int colour = (subsino_out_c&0x7) + 8; |
| 247 | 293 | |
| 248 | 294 | SET_TILE_INFO( |
| 249 | 295 | 1, |
| 250 | 296 | code, |
| 297 | colour, |
| 298 | 0); |
| 299 | } |
| 300 | |
| 301 | static TILE_GET_INFO( get_stisub_reel2_tile_info ) |
| 302 | { |
| 303 | int code = reel2_ram[tile_index]; |
| 304 | int attr = reel2_attr[tile_index]; |
| 305 | |
| 306 | SET_TILE_INFO( |
| 307 | 1, |
| 308 | code | (attr << 8), |
| 251 | 309 | 0, |
| 252 | 310 | 0); |
| 253 | 311 | } |
| r7882 | r7883 | |
| 261 | 319 | static TILE_GET_INFO( get_subsino_reel3_tile_info ) |
| 262 | 320 | { |
| 263 | 321 | int code = reel3_ram[tile_index]; |
| 322 | int colour = (subsino_out_c&0x7) + 8; |
| 264 | 323 | |
| 265 | 324 | SET_TILE_INFO( |
| 266 | 325 | 1, |
| 267 | 326 | code, |
| 327 | colour, |
| 328 | 0); |
| 329 | } |
| 330 | |
| 331 | static TILE_GET_INFO( get_stisub_reel3_tile_info ) |
| 332 | { |
| 333 | int code = reel3_ram[tile_index]; |
| 334 | int attr = reel3_attr[tile_index]; |
| 335 | |
| 336 | SET_TILE_INFO( |
| 337 | 1, |
| 338 | code | (attr << 8), |
| 268 | 339 | 0, |
| 269 | 340 | 0); |
| 270 | 341 | } |
| 271 | 342 | |
| 272 | 343 | |
| 273 | | |
| 274 | 344 | static VIDEO_START( subsino_reels ) |
| 275 | 345 | { |
| 276 | 346 | VIDEO_START_CALL( subsino ); |
| r7882 | r7883 | |
| 285 | 355 | |
| 286 | 356 | } |
| 287 | 357 | |
| 358 | static VIDEO_START( stisub ) |
| 359 | { |
| 360 | tmap = tilemap_create( machine, get_stisub_tile_info, tilemap_scan_rows, 8,8, 0x40,0x20 ); |
| 361 | tilemap_set_transparent_pen( tmap, 0 ); |
| 362 | |
| 363 | reel1_tilemap = tilemap_create(machine,get_stisub_reel1_tile_info,tilemap_scan_rows, 8, 32, 64, 8); |
| 364 | reel2_tilemap = tilemap_create(machine,get_stisub_reel2_tile_info,tilemap_scan_rows, 8, 32, 64, 8); |
| 365 | reel3_tilemap = tilemap_create(machine,get_stisub_reel3_tile_info,tilemap_scan_rows, 8, 32, 64, 8); |
| 366 | |
| 367 | tilemap_set_scroll_cols(reel1_tilemap, 64); |
| 368 | tilemap_set_scroll_cols(reel2_tilemap, 64); |
| 369 | tilemap_set_scroll_cols(reel3_tilemap, 64); |
| 370 | |
| 371 | subsino_out_c = 0x08; |
| 372 | } |
| 373 | |
| 374 | |
| 288 | 375 | static VIDEO_UPDATE( subsino ) |
| 289 | 376 | { |
| 290 | 377 | bitmap_fill(bitmap,cliprect,0); |
| r7882 | r7883 | |
| 309 | 396 | tilemap_set_scrolly(reel3_tilemap, i, reel3_scroll[i]); |
| 310 | 397 | } |
| 311 | 398 | |
| 312 | | tilemap_draw(bitmap, &visible1, reel1_tilemap, 0, 0); |
| 313 | | tilemap_draw(bitmap, &visible2, reel2_tilemap, 0, 0); |
| 314 | | tilemap_draw(bitmap, &visible3, reel3_tilemap, 0, 0); |
| 399 | if (subsino_out_c&0x08) |
| 400 | { |
| 401 | tilemap_draw(bitmap, &visible1, reel1_tilemap, 0, 0); |
| 402 | tilemap_draw(bitmap, &visible2, reel2_tilemap, 0, 0); |
| 403 | tilemap_draw(bitmap, &visible3, reel3_tilemap, 0, 0); |
| 404 | } |
| 315 | 405 | |
| 316 | 406 | tilemap_draw(bitmap,cliprect, tmap, 0, 0); |
| 317 | 407 | return 0; |
| 318 | 408 | } |
| 319 | 409 | |
| 410 | // areas based on d-up game in attract mode |
| 411 | static const rectangle stisub_visible1 = { 0, 511, 0, 87 }; |
| 412 | static const rectangle stisub_visible2 = { 0, 511, 88, 143 }; |
| 413 | static const rectangle stisub_visible3 = { 0, 511, 144, 223 }; |
| 414 | |
| 415 | |
| 416 | static VIDEO_UPDATE( stisub_reels ) |
| 417 | { |
| 418 | int i; |
| 419 | bitmap_fill(bitmap,cliprect,0); |
| 420 | |
| 421 | if (reel1_attr) |
| 422 | { |
| 423 | tilemap_mark_all_tiles_dirty (reel1_tilemap); |
| 424 | tilemap_mark_all_tiles_dirty (reel2_tilemap); |
| 425 | tilemap_mark_all_tiles_dirty (reel3_tilemap); |
| 426 | } |
| 427 | |
| 428 | for (i= 0;i < 64;i++) |
| 429 | { |
| 430 | tilemap_set_scrolly(reel1_tilemap, i, reel1_scroll[i]); |
| 431 | tilemap_set_scrolly(reel2_tilemap, i, reel2_scroll[i]); |
| 432 | tilemap_set_scrolly(reel3_tilemap, i, reel3_scroll[i]); |
| 433 | } |
| 434 | |
| 435 | if (subsino_out_c&0x08) |
| 436 | { |
| 437 | tilemap_draw(bitmap, &stisub_visible1, reel1_tilemap, 0, 0); |
| 438 | tilemap_draw(bitmap, &stisub_visible2, reel2_tilemap, 0, 0); |
| 439 | tilemap_draw(bitmap, &stisub_visible3, reel3_tilemap, 0, 0); |
| 440 | } |
| 441 | |
| 442 | tilemap_draw(bitmap,cliprect, tmap, 0, 0); |
| 443 | return 0; |
| 444 | } |
| 445 | |
| 446 | |
| 447 | |
| 320 | 448 | static PALETTE_INIT( subsino_2proms ) |
| 321 | 449 | { |
| 322 | 450 | int i,r,g,b,val; |
| r7882 | r7883 | |
| 380 | 508 | /***** COIN PULSE: ***** |
| 381 | 509 | |
| 382 | 510 | |
| 383 | | * Victor 5, Victor 21, Poker Carnival (crsbingo). |
| 511 | * Victor 5, Victor 21, Poker Carnival (crsbingo), Shark Party (English, Alpha license). |
| 384 | 512 | |
| 385 | 513 | 7654 3210 |
| 386 | 514 | ---- ---x Coin pulse. |
| r7882 | r7883 | |
| 504 | 632 | -x-- ---- HOLD2. |
| 505 | 633 | x--- ---- HOLD5 / SMALL. |
| 506 | 634 | |
| 635 | |
| 636 | * Shark Party (English, Alpha license). |
| 637 | |
| 638 | 7654 3210 |
| 639 | ---- ---x ???. |
| 640 | ---- --x- HOLD3 / D-UP. |
| 641 | ---- -x-- START. |
| 642 | ---- x--- HOLD1 / BET. |
| 643 | ---x ---- ???. |
| 644 | --x- ---- HOLD2 / TAKE. |
| 645 | -x-- ---- ???. |
| 646 | x--- ---- HOLD4 & HOLD5. |
| 647 | |
| 507 | 648 | */ |
| 508 | 649 | |
| 509 | 650 | output_set_lamp_value(0, (data) & 1); /* Lamp 0 */ |
| r7882 | r7883 | |
| 715 | 856 | |
| 716 | 857 | ADDRESS_MAP_END |
| 717 | 858 | |
| 859 | WRITE8_HANDLER( subsino_out_c_w ) |
| 860 | { |
| 861 | // not 100% sure on this |
| 862 | |
| 863 | // ???? eccc |
| 864 | // e = enable reels? |
| 865 | // c = reel colour bank? |
| 866 | subsino_out_c = data; |
| 867 | |
| 868 | tilemap_mark_all_tiles_dirty (reel1_tilemap); |
| 869 | tilemap_mark_all_tiles_dirty (reel2_tilemap); |
| 870 | tilemap_mark_all_tiles_dirty (reel3_tilemap); |
| 871 | // popmessage("data %02x\n",data); |
| 872 | } |
| 873 | |
| 718 | 874 | static ADDRESS_MAP_START( tisub_map, ADDRESS_SPACE_PROGRAM, 8 ) |
| 719 | 875 | AM_RANGE( 0x09800, 0x09fff ) AM_RAM |
| 720 | 876 | |
| r7882 | r7883 | |
| 727 | 883 | AM_RANGE( 0x09006, 0x09006 ) AM_READ_PORT( "INB" ) |
| 728 | 884 | |
| 729 | 885 | /* 0x09008: is marked as OUTPUT C in the test mode. */ |
| 886 | AM_RANGE( 0x09008, 0x09008 ) AM_WRITE( subsino_out_c_w ) |
| 730 | 887 | AM_RANGE( 0x09009, 0x09009 ) AM_WRITE( subsino_out_b_w ) |
| 731 | 888 | AM_RANGE( 0x0900a, 0x0900a ) AM_WRITE( subsino_out_a_w ) |
| 732 | 889 | |
| r7882 | r7883 | |
| 755 | 912 | AM_RANGE( 0x15c00, 0x15dff ) AM_RAM_WRITE(subsino_reel3_ram_w) AM_BASE(&reel3_ram) |
| 756 | 913 | ADDRESS_MAP_END |
| 757 | 914 | |
| 915 | static int colordac_offs; |
| 916 | UINT8* stisub_colorram; |
| 917 | |
| 918 | static WRITE8_HANDLER(colordac_w) |
| 919 | { |
| 920 | switch ( offset ) |
| 921 | { |
| 922 | case 0: |
| 923 | colordac_offs = data * 3; |
| 924 | break; |
| 925 | |
| 926 | case 1: |
| 927 | stisub_colorram[colordac_offs] = data; |
| 928 | palette_set_color_rgb(space->machine, colordac_offs/3, |
| 929 | pal6bit(stisub_colorram[(colordac_offs/3)*3+0]), |
| 930 | pal6bit(stisub_colorram[(colordac_offs/3)*3+1]), |
| 931 | pal6bit(stisub_colorram[(colordac_offs/3)*3+2]) |
| 932 | ); |
| 933 | colordac_offs = (colordac_offs+1) % (256*3); |
| 934 | break; |
| 935 | |
| 936 | case 2: |
| 937 | // ff? |
| 938 | break; |
| 939 | |
| 940 | case 3: |
| 941 | break; |
| 942 | } |
| 943 | } |
| 944 | |
| 945 | UINT8 stisub_outc; |
| 946 | |
| 947 | WRITE8_HANDLER( stisub_out_c_w ) |
| 948 | { |
| 949 | stisub_outc = data; |
| 950 | |
| 951 | } |
| 952 | |
| 953 | // this stuff is banked.. |
| 954 | // not 100% sure on the bank bits.. other bits are also set |
| 955 | WRITE8_HANDLER( reel_scrollattr_w ) |
| 956 | { |
| 957 | if (stisub_outc&0x20) |
| 958 | { |
| 959 | if (offset<0x200) |
| 960 | { |
| 961 | reel1_attr[offset&0x1ff] = data; |
| 962 | } |
| 963 | else if (offset<0x400) |
| 964 | { |
| 965 | reel2_attr[offset&0x1ff] = data; |
| 966 | } |
| 967 | else if (offset<0x600) |
| 968 | { |
| 969 | reel3_attr[offset&0x1ff] = data; |
| 970 | } |
| 971 | else |
| 972 | { |
| 973 | // ?? |
| 974 | } |
| 975 | } |
| 976 | else |
| 977 | { |
| 978 | offset &=0xff; |
| 979 | |
| 980 | if (offset<0x40) |
| 981 | { |
| 982 | // ?? |
| 983 | } |
| 984 | else if (offset<0x80) |
| 985 | { |
| 986 | reel2_scroll[offset&0x3f] = data; |
| 987 | } |
| 988 | else if (offset<0xc0) |
| 989 | { |
| 990 | reel1_scroll[offset&0x3f] = data; |
| 991 | } |
| 992 | else |
| 993 | { |
| 994 | reel3_scroll[offset&0x3f] = data; |
| 995 | } |
| 996 | } |
| 997 | } |
| 998 | |
| 999 | READ8_HANDLER( reel_scrollattr_r ) |
| 1000 | { |
| 1001 | return reel1_attr[offset]; |
| 1002 | } |
| 1003 | |
| 1004 | static ADDRESS_MAP_START( stisub_map, ADDRESS_SPACE_PROGRAM, 8 ) |
| 1005 | AM_RANGE( 0x00000, 0x0bfff ) AM_ROM |
| 1006 | |
| 1007 | AM_RANGE( 0x0c000, 0x0cfff ) AM_RAM |
| 1008 | |
| 1009 | AM_RANGE( 0x0d000, 0x0d000 ) AM_READ_PORT( "SW1" ) |
| 1010 | AM_RANGE( 0x0d001, 0x0d001 ) AM_READ_PORT( "SW2" ) |
| 1011 | AM_RANGE( 0x0d002, 0x0d002 ) AM_READ_PORT( "SW3" ) |
| 1012 | |
| 1013 | AM_RANGE( 0x0d004, 0x0d004 ) AM_READ_PORT( "SW4" ) |
| 1014 | AM_RANGE( 0x0d005, 0x0d005 ) AM_READ_PORT( "INB" ) |
| 1015 | AM_RANGE( 0x0d006, 0x0d006 ) AM_READ_PORT( "INA" ) |
| 1016 | |
| 1017 | AM_RANGE( 0x0d008, 0x0d008 ) AM_WRITE( stisub_out_c_w ) |
| 1018 | |
| 1019 | AM_RANGE( 0x0d009, 0x0d009 ) AM_WRITE( subsino_out_b_w ) |
| 1020 | AM_RANGE( 0x0d00a, 0x0d00a ) AM_WRITE( subsino_out_a_w ) |
| 1021 | |
| 1022 | AM_RANGE( 0x0d00c, 0x0d00c ) AM_READ_PORT( "INC" ) |
| 1023 | |
| 1024 | AM_RANGE( 0x0d010, 0x0d013 ) AM_WRITE(colordac_w) |
| 1025 | |
| 1026 | AM_RANGE( 0x0d016, 0x0d017 ) AM_DEVWRITE( "ymsnd", ym3812_w ) |
| 1027 | |
| 1028 | // AM_RANGE( 0x0d01b, 0x0d01b ) AM_WRITE( subsino_tiles_offset_w ) |
| 1029 | |
| 1030 | AM_RANGE( 0x0e000, 0x0e7ff ) AM_RAM_WRITE( subsino_colorram_w ) AM_BASE( &colorram ) |
| 1031 | AM_RANGE( 0x0e800, 0x0efff ) AM_RAM_WRITE( subsino_videoram_w ) AM_BASE( &videoram ) |
| 1032 | |
| 1033 | AM_RANGE( 0xf000, 0xf7ff ) AM_READWRITE(reel_scrollattr_r, reel_scrollattr_w) |
| 1034 | |
| 1035 | AM_RANGE( 0xf800, 0xf9ff ) AM_RAM_WRITE(subsino_reel1_ram_w) AM_BASE(&reel1_ram) |
| 1036 | AM_RANGE( 0xfa00, 0xfbff ) AM_RAM_WRITE(subsino_reel2_ram_w) AM_BASE(&reel2_ram) |
| 1037 | AM_RANGE( 0xfc00, 0xfdff ) AM_RAM_WRITE(subsino_reel3_ram_w) AM_BASE(&reel3_ram) |
| 1038 | ADDRESS_MAP_END |
| 1039 | |
| 758 | 1040 | static ADDRESS_MAP_START( subsino_iomap, ADDRESS_SPACE_IO, 8 ) |
| 759 | 1041 | AM_RANGE( 0x0000, 0x003f ) AM_RAM // internal regs |
| 760 | 1042 | ADDRESS_MAP_END |
| r7882 | r7883 | |
| 1116 | 1398 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1117 | 1399 | INPUT_PORTS_END |
| 1118 | 1400 | |
| 1401 | static INPUT_PORTS_START( stisub ) |
| 1402 | PORT_START("SW1") |
| 1403 | PORT_DIPNAME( 0x01, 0x01, "SW1" ) |
| 1404 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
| 1405 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1406 | PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) |
| 1407 | PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) |
| 1408 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1409 | PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) |
| 1410 | PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) |
| 1411 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1412 | PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) |
| 1413 | PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) |
| 1414 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1415 | PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) |
| 1416 | PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) |
| 1417 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1418 | PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) |
| 1419 | PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) |
| 1420 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1421 | PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) |
| 1422 | PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) |
| 1423 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1424 | PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) |
| 1425 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
| 1426 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1119 | 1427 | |
| 1428 | PORT_START("SW2") |
| 1429 | PORT_DIPNAME( 0x01, 0x01, "SW2" ) |
| 1430 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
| 1431 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1432 | PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) |
| 1433 | PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) |
| 1434 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1435 | PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) |
| 1436 | PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) |
| 1437 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1438 | PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) |
| 1439 | PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) |
| 1440 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1441 | PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) |
| 1442 | PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) |
| 1443 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1444 | PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) |
| 1445 | PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) |
| 1446 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1447 | PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) |
| 1448 | PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) |
| 1449 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1450 | PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) |
| 1451 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
| 1452 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1453 | |
| 1454 | PORT_START("SW3") |
| 1455 | PORT_DIPNAME( 0x01, 0x01, "SW3" ) |
| 1456 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
| 1457 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1458 | PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) |
| 1459 | PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) |
| 1460 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1461 | PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) |
| 1462 | PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) |
| 1463 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1464 | PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) |
| 1465 | PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) |
| 1466 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1467 | PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) |
| 1468 | PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) |
| 1469 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1470 | PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) |
| 1471 | PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) |
| 1472 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1473 | PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) |
| 1474 | PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) |
| 1475 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1476 | PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) |
| 1477 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
| 1478 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1479 | |
| 1480 | PORT_START("SW4") |
| 1481 | PORT_DIPNAME( 0x01, 0x01, "SW4" ) |
| 1482 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
| 1483 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1484 | PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) |
| 1485 | PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) |
| 1486 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1487 | PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) |
| 1488 | PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) |
| 1489 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1490 | PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) |
| 1491 | PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) |
| 1492 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1493 | PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) |
| 1494 | PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) |
| 1495 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1496 | PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) |
| 1497 | PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) |
| 1498 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1499 | PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) |
| 1500 | PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) |
| 1501 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1502 | PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) |
| 1503 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
| 1504 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1505 | |
| 1506 | /* |
| 1507 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1") |
| 1508 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Big") |
| 1509 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3 / Small") |
| 1510 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1511 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_BET ) PORT_IMPULSE(3) |
| 1512 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1513 | */ |
| 1514 | |
| 1515 | PORT_START("INA") |
| 1516 | PORT_DIPNAME( 0x01, 0x01, "INA" ) |
| 1517 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
| 1518 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1519 | PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) |
| 1520 | PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) |
| 1521 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1522 | PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) |
| 1523 | PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) |
| 1524 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1525 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL ) PORT_NAME("Start") |
| 1526 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_BET ) PORT_IMPULSE(3) |
| 1527 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) PORT_NAME("Double / Info") |
| 1528 | PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) |
| 1529 | PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) |
| 1530 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1531 | PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) |
| 1532 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
| 1533 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1534 | |
| 1535 | PORT_START( "INB" ) |
| 1536 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(3) // coin |
| 1537 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) // key in |
| 1538 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1539 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1540 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_9) PORT_NAME("Stats / Test") // Bookkeeping. |
| 1541 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_0) PORT_NAME("Settings") // Current settings. |
| 1542 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // payout |
| 1543 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) // key out |
| 1544 | |
| 1545 | PORT_START("INC") |
| 1546 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH ) PORT_NAME("Black") |
| 1547 | PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) |
| 1548 | PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) |
| 1549 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1550 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset") // hard reset |
| 1551 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_LOW ) PORT_NAME("Red") |
| 1552 | PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) |
| 1553 | PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) |
| 1554 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1555 | PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) |
| 1556 | PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) |
| 1557 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1558 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) |
| 1559 | PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) |
| 1560 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
| 1561 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1562 | INPUT_PORTS_END |
| 1563 | |
| 1120 | 1564 | static INPUT_PORTS_START( crsbingo ) |
| 1121 | 1565 | |
| 1122 | 1566 | PORT_START( "SW1" ) |
| r7882 | r7883 | |
| 1344 | 1788 | INPUT_PORTS_END |
| 1345 | 1789 | |
| 1346 | 1790 | |
| 1791 | static INPUT_PORTS_START( sharkpye ) |
| 1792 | |
| 1793 | PORT_START( "SW1" ) |
| 1794 | PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) |
| 1795 | PORT_DIPSETTING( 0x06, DEF_STR( 1C_1C ) ) |
| 1796 | PORT_DIPSETTING( 0x05, DEF_STR( 1C_2C ) ) |
| 1797 | PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) ) |
| 1798 | PORT_DIPSETTING( 0x07, "1 Coin / 10 Credits" ) |
| 1799 | PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" ) |
| 1800 | PORT_DIPSETTING( 0x02, "1 Coin / 25 Credits" ) |
| 1801 | PORT_DIPSETTING( 0x01, "1 Coin / 50 Credits" ) |
| 1802 | PORT_DIPSETTING( 0x00, "1 Coin / 100 Credits" ) |
| 1803 | PORT_DIPNAME( 0x38, 0x38, "Remote Credits" ) |
| 1804 | PORT_DIPSETTING( 0x30, "1 Pulse / 1 Credits" ) |
| 1805 | PORT_DIPSETTING( 0x28, "1 Pulse / 2 Credits" ) |
| 1806 | PORT_DIPSETTING( 0x20, "1 Pulse / 5 Credits" ) |
| 1807 | PORT_DIPSETTING( 0x18, "1 Pulse / 10 Credits" ) |
| 1808 | PORT_DIPSETTING( 0x10, "1 Pulse / 50 Credits" ) |
| 1809 | PORT_DIPSETTING( 0x38, "1 Pulse / 100 Credits" ) |
| 1810 | PORT_DIPSETTING( 0x08, "1 Pulse / 200 Credits" ) |
| 1811 | PORT_DIPSETTING( 0x00, "1 Pulse / 500 Credits" ) |
| 1812 | PORT_DIPUNKNOWN( 0x40, 0x40 ) |
| 1813 | PORT_DIPUNKNOWN( 0x80, 0x80 ) |
| 1814 | |
| 1815 | PORT_START( "SW2" ) |
| 1816 | PORT_DIPNAME( 0x03, 0x03, "Minimum Bet" ) |
| 1817 | PORT_DIPSETTING( 0x03, "1" ) |
| 1818 | PORT_DIPSETTING( 0x02, "5" ) |
| 1819 | PORT_DIPSETTING( 0x01, "10" ) |
| 1820 | PORT_DIPSETTING( 0x00, "20" ) |
| 1821 | PORT_DIPNAME( 0x0c, 0x0c, "Max Bet" ) |
| 1822 | PORT_DIPSETTING( 0x08, "10" ) |
| 1823 | PORT_DIPSETTING( 0x04, "40" ) |
| 1824 | PORT_DIPSETTING( 0x0c, "50" ) |
| 1825 | PORT_DIPSETTING( 0x00, "80" ) |
| 1826 | PORT_DIPNAME( 0x10, 0x10, "Jokers" ) |
| 1827 | PORT_DIPSETTING( 0x10, DEF_STR( No ) ) |
| 1828 | PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) |
| 1829 | PORT_DIPUNKNOWN( 0x20, 0x20 ) |
| 1830 | PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) ) |
| 1831 | PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) |
| 1832 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 1833 | PORT_DIPUNKNOWN( 0x80, 0x80 ) |
| 1834 | |
| 1835 | PORT_START( "SW3" ) |
| 1836 | PORT_DIPNAME( 0x07, 0x07, "Main Game Rate" ) |
| 1837 | PORT_DIPSETTING( 0x00, "92%" ) |
| 1838 | PORT_DIPSETTING( 0x01, "93%" ) |
| 1839 | PORT_DIPSETTING( 0x02, "94%" ) |
| 1840 | PORT_DIPSETTING( 0x03, "95%" ) |
| 1841 | PORT_DIPSETTING( 0x04, "96%" ) |
| 1842 | PORT_DIPSETTING( 0x07, "97%" ) |
| 1843 | PORT_DIPSETTING( 0x05, "98%" ) |
| 1844 | PORT_DIPSETTING( 0x06, "99%" ) |
| 1845 | PORT_DIPNAME( 0x38, 0x38, "Double-Up Rate" ) |
| 1846 | PORT_DIPSETTING( 0x00, "82" ) |
| 1847 | PORT_DIPSETTING( 0x08, "84" ) |
| 1848 | PORT_DIPSETTING( 0x10, "86" ) |
| 1849 | PORT_DIPSETTING( 0x18, "88" ) |
| 1850 | PORT_DIPSETTING( 0x20, "90" ) |
| 1851 | PORT_DIPSETTING( 0x38, "92" ) |
| 1852 | PORT_DIPSETTING( 0x28, "94" ) |
| 1853 | PORT_DIPSETTING( 0x30, "96" ) |
| 1854 | PORT_DIPUNKNOWN( 0x40, 0x40 ) |
| 1855 | PORT_DIPUNKNOWN( 0x80, 0x80 ) |
| 1856 | |
| 1857 | PORT_START( "SW4" ) |
| 1858 | PORT_DIPUNKNOWN( 0x01, 0x01 ) |
| 1859 | PORT_DIPUNKNOWN( 0x02, 0x02 ) |
| 1860 | PORT_DIPUNKNOWN( 0x04, 0x04 ) |
| 1861 | PORT_DIPUNKNOWN( 0x08, 0x08 ) |
| 1862 | PORT_DIPUNKNOWN( 0x10, 0x10 ) |
| 1863 | PORT_DIPUNKNOWN( 0x20, 0x20 ) |
| 1864 | PORT_DIPUNKNOWN( 0x40, 0x40 ) |
| 1865 | PORT_DIPUNKNOWN( 0x80, 0x80 ) |
| 1866 | |
| 1867 | PORT_START( "INA" ) |
| 1868 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1869 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1870 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1871 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL ) PORT_NAME("Start") |
| 1872 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1 / Bet") |
| 1873 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3 / Double-Up") |
| 1874 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1875 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1876 | |
| 1877 | PORT_START( "INB" ) |
| 1878 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(3) // coin |
| 1879 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) |
| 1880 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1881 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1882 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_9) PORT_NAME("Stats / Test") // Bookkeeping. |
| 1883 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_0) PORT_NAME("Settings") // Game Rate & others. |
| 1884 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1885 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) |
| 1886 | |
| 1887 | PORT_START( "INC" ) |
| 1888 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 / Small") |
| 1889 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1890 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset Switch") // hard reset |
| 1891 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold 5 / Big") |
| 1892 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1893 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1894 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Take") |
| 1895 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1896 | INPUT_PORTS_END |
| 1897 | |
| 1898 | |
| 1347 | 1899 | static INPUT_PORTS_START( smoto16 ) |
| 1348 | 1900 | |
| 1349 | 1901 | PORT_START( "SW1" ) |
| r7882 | r7883 | |
| 1531 | 2083 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1532 | 2084 | INPUT_PORTS_END |
| 1533 | 2085 | |
| 1534 | | |
| 1535 | 2086 | /*************************************************************************** |
| 1536 | 2087 | * Graphics Layout * |
| 1537 | 2088 | ***************************************************************************/ |
| r7882 | r7883 | |
| 1569 | 2120 | 8*8*4 |
| 1570 | 2121 | }; |
| 1571 | 2122 | |
| 2123 | static const gfx_layout layout_8x8x8 = |
| 2124 | { |
| 2125 | 8, 8, |
| 2126 | RGN_FRAC(1,4), |
| 2127 | 8, |
| 2128 | { 0,1,2,3,4,5,6,7 }, |
| 2129 | { RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4), RGN_FRAC(0,4)+8, RGN_FRAC(1,4)+8, RGN_FRAC(2,4)+8, RGN_FRAC(3,4)+8 }, |
| 2130 | { 0*16,1*16,2*16,3*16,4*16,5*16,6*16,7*16 }, |
| 2131 | 8*16 |
| 2132 | }; |
| 1572 | 2133 | |
| 2134 | static const gfx_layout layout_8x32x8 = |
| 2135 | { |
| 2136 | 8, 32, |
| 2137 | RGN_FRAC(1,4), |
| 2138 | 8, |
| 2139 | { 0,1,2,3,4,5,6,7 }, |
| 2140 | { RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4), RGN_FRAC(0,4)+8, RGN_FRAC(1,4)+8, RGN_FRAC(2,4)+8, RGN_FRAC(3,4)+8 }, |
| 2141 | { 0*16,1*16,2*16,3*16,4*16,5*16,6*16,7*16, 8*16,9*16,10*16,11*16,12*16,13*16,14*16,15*16, |
| 2142 | 16*16,17*16,18*16,19*16,20*16,21*16,22*16,23*16,24*16,25*16,26*16,27*16,28*16,29*16,30*16,31*16}, |
| 2143 | 32*16 |
| 2144 | }; |
| 2145 | |
| 2146 | |
| 1573 | 2147 | static GFXDECODE_START( subsino_depth3 ) |
| 1574 | 2148 | GFXDECODE_ENTRY( "tilemap", 0, layout_8x8x3, 0, 16 ) |
| 1575 | 2149 | GFXDECODE_END |
| r7882 | r7883 | |
| 1583 | 2157 | GFXDECODE_ENTRY( "reels", 0, layout_8x32x4, 0, 16 ) |
| 1584 | 2158 | GFXDECODE_END |
| 1585 | 2159 | |
| 2160 | static GFXDECODE_START( subsino_stisub ) |
| 2161 | GFXDECODE_ENTRY( "tilemap", 0, layout_8x8x8, 0, 1 ) |
| 2162 | GFXDECODE_ENTRY( "reels", 0, layout_8x32x8, 0, 1 ) |
| 2163 | GFXDECODE_END |
| 2164 | |
| 1586 | 2165 | /*************************************************************************** |
| 1587 | 2166 | * Machine Drivers * |
| 1588 | 2167 | ***************************************************************************/ |
| r7882 | r7883 | |
| 1731 | 2310 | MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) |
| 1732 | 2311 | MACHINE_DRIVER_END |
| 1733 | 2312 | |
| 2313 | static MACHINE_DRIVER_START( stisub ) |
| 2314 | /* basic machine hardware */ |
| 2315 | MDRV_CPU_ADD("maincpu", Z180, XTAL_12MHz / 8) /* Unknown clock */ |
| 2316 | MDRV_CPU_PROGRAM_MAP(stisub_map) |
| 2317 | MDRV_CPU_IO_MAP(subsino_iomap) |
| 1734 | 2318 | |
| 2319 | /* video hardware */ |
| 2320 | MDRV_SCREEN_ADD("screen", RASTER) |
| 2321 | MDRV_SCREEN_REFRESH_RATE(60) |
| 2322 | MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) |
| 2323 | MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) |
| 2324 | MDRV_SCREEN_SIZE(512, 256) |
| 2325 | MDRV_SCREEN_VISIBLE_AREA(0, 512-1, 0+16, 256-16-1) |
| 2326 | |
| 2327 | MDRV_GFXDECODE(subsino_stisub) |
| 2328 | |
| 2329 | MDRV_PALETTE_LENGTH(0x100) |
| 2330 | //MDRV_PALETTE_INIT(subsino_3proms) |
| 2331 | |
| 2332 | MDRV_VIDEO_START(stisub) |
| 2333 | MDRV_VIDEO_UPDATE(stisub_reels) |
| 2334 | |
| 2335 | /* sound hardware */ |
| 2336 | MDRV_SPEAKER_STANDARD_MONO("mono") |
| 2337 | |
| 2338 | MDRV_SOUND_ADD("ymsnd", YM3812, XTAL_3_579545MHz) |
| 2339 | MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) |
| 2340 | MACHINE_DRIVER_END |
| 2341 | |
| 2342 | |
| 1735 | 2343 | /*************************************************************************** |
| 1736 | 2344 | * ROMs Loading * |
| 1737 | 2345 | ***************************************************************************/ |
| r7882 | r7883 | |
| 1857 | 2465 | ROM_COPY( "maincpu", 0x09000, 0x14000, 0x1000) |
| 1858 | 2466 | |
| 1859 | 2467 | ROM_REGION( 0x40000, "tilemap", 0 ) |
| 1860 | | ROM_LOAD( "rom_4.bin", 0x00000, 0x10000, CRC(37724fda) SHA1(084653662c9f77afef2a77c607e1fb093aaf3adf) ) |
| 1861 | | ROM_LOAD( "rom_5.bin", 0x10000, 0x10000, CRC(3d18acd8) SHA1(179545c18ad880097366c07c8e2fa821701a2758) ) |
| 1862 | | ROM_LOAD( "rom_6.bin", 0x20000, 0x10000, CRC(c2c226df) SHA1(39762b390d6b271c3252342e843a181dd152a0cc) ) |
| 2468 | ROM_LOAD( "rom_6.bin", 0x00000, 0x10000, CRC(c2c226df) SHA1(39762b390d6b271c3252342e843a181dd152a0cc) ) |
| 2469 | ROM_LOAD( "rom_4.bin", 0x10000, 0x10000, CRC(37724fda) SHA1(084653662c9f77afef2a77c607e1fb093aaf3adf) ) |
| 2470 | ROM_LOAD( "rom_5.bin", 0x20000, 0x10000, CRC(3d18acd8) SHA1(179545c18ad880097366c07c8e2fa821701a2758) ) |
| 1863 | 2471 | ROM_LOAD( "rom_7.bin", 0x30000, 0x10000, CRC(9d7d99d8) SHA1(a3df5e023c2102028a5186101dc0b19d91e8965e) ) |
| 1864 | 2472 | |
| 1865 | 2473 | ROM_REGION( 0x8000, "reels", 0 ) |
| r7882 | r7883 | |
| 1869 | 2477 | ROM_IGNORE(0x4000) |
| 1870 | 2478 | |
| 1871 | 2479 | ROM_REGION( 0x300, "proms", 0 ) |
| 1872 | | ROM_LOAD( "n82s129n.u39", 0x000, 0x100, NO_DUMP ) |
| 1873 | | ROM_LOAD( "n82s129n.u40", 0x100, 0x100, NO_DUMP ) |
| 1874 | | ROM_LOAD( "n82s129n.u41", 0x200, 0x100, NO_DUMP ) |
| 2480 | ROM_LOAD( "n82s129n.u39", 0x000, 0x100, CRC(971843e5) SHA1(4cb5fc1085503dae2f2f02eb49cca051ac84b890) ) |
| 2481 | ROM_LOAD( "n82s129n.u40", 0x100, 0x100, CRC(b4bd872c) SHA1(c0f9fe68186636d6d6bc6f81415459631cf38edd) ) |
| 2482 | ROM_LOAD( "n82s129n.u41", 0x200, 0x100, CRC(db99f6da) SHA1(d281a2fa06f1890ef0b1c4d099e6828827db14fd) ) |
| 1875 | 2483 | ROM_END |
| 1876 | 2484 | |
| 2485 | /* |
| 2486 | |
| 2487 | Treasure Island (Alt version)... |
| 2488 | |
| 2489 | ROMs 4 & 5 are missing. ROMs 6 & 7 are identical to parent set. |
| 2490 | So... Assuming that 4 & 5 should have the same bitplanes. |
| 2491 | |
| 2492 | ROM 3 is bad, but ROM 2 only has the first byte different, |
| 2493 | getting different values in each dump. The rest remains identical. |
| 2494 | |
| 2495 | Program ROM is different. |
| 2496 | |
| 2497 | Color PROMs are from this set. |
| 2498 | |
| 2499 | */ |
| 2500 | |
| 2501 | ROM_START( tisuba ) |
| 2502 | ROM_REGION( 0x18000, "maincpu", 0 ) |
| 2503 | ROM_LOAD( "01.bin", 0x10000, 0x4000, CRC(9967dd38) SHA1(63b74bc0c0952114b7321e8f399bd64dc293aade) ) |
| 2504 | ROM_CONTINUE(0x0000,0xc000) |
| 2505 | ROM_COPY( "maincpu", 0x09000, 0x14000, 0x1000) |
| 2506 | |
| 2507 | ROM_REGION( 0x40000, "tilemap", 0 ) |
| 2508 | ROM_LOAD( "rom_6.bin", 0x00000, 0x10000, CRC(c2c226df) SHA1(39762b390d6b271c3252342e843a181dd152a0cc) ) |
| 2509 | ROM_LOAD( "rom_4.bin", 0x10000, 0x10000, CRC(37724fda) SHA1(084653662c9f77afef2a77c607e1fb093aaf3adf) ) |
| 2510 | ROM_LOAD( "rom_5.bin", 0x20000, 0x10000, CRC(3d18acd8) SHA1(179545c18ad880097366c07c8e2fa821701a2758) ) |
| 2511 | ROM_LOAD( "rom_7.bin", 0x30000, 0x10000, CRC(9d7d99d8) SHA1(a3df5e023c2102028a5186101dc0b19d91e8965e) ) |
| 2512 | |
| 2513 | ROM_REGION( 0x8000, "reels", 0 ) |
| 2514 | ROM_LOAD( "rom_2.bin", 0x0000, 0x4000, CRC(836c756d) SHA1(fca1d5b600861eea30ed73ee13be735e7d167097) ) |
| 2515 | ROM_IGNORE(0x4000) |
| 2516 | ROM_LOAD( "rom_3.bin", 0x4000, 0x4000, CRC(2ad82222) SHA1(68780b9528393b28eaa2f90501efb5a8c39bed63) ) |
| 2517 | ROM_IGNORE(0x4000) |
| 2518 | |
| 2519 | ROM_REGION( 0x300, "proms", 0 ) |
| 2520 | ROM_LOAD( "n82s129n.u39", 0x000, 0x100, CRC(971843e5) SHA1(4cb5fc1085503dae2f2f02eb49cca051ac84b890) ) |
| 2521 | ROM_LOAD( "n82s129n.u40", 0x100, 0x100, CRC(b4bd872c) SHA1(c0f9fe68186636d6d6bc6f81415459631cf38edd) ) |
| 2522 | ROM_LOAD( "n82s129n.u41", 0x200, 0x100, CRC(db99f6da) SHA1(d281a2fa06f1890ef0b1c4d099e6828827db14fd) ) |
| 2523 | ROM_END |
| 2524 | |
| 1877 | 2525 | /*************************************************************************** |
| 1878 | 2526 | |
| 1879 | 2527 | Cross Bingo |
| r7882 | r7883 | |
| 2060 | 2708 | ROM_END |
| 2061 | 2709 | |
| 2062 | 2710 | |
| 2711 | /*************************************************************************** |
| 2712 | |
| 2713 | Shark Party (English, Alpha license) |
| 2714 | |
| 2715 | - Different inputs system. |
| 2716 | - Different DIP Switches. |
| 2717 | - Different Button-Lamps outputs. |
| 2718 | |
| 2719 | ***************************************************************************/ |
| 2720 | |
| 2063 | 2721 | ROM_START( sharkpye ) |
| 2064 | 2722 | ROM_REGION( 0x14000, "maincpu", 0 ) |
| 2065 | 2723 | ROM_LOAD( "sharkpye.u18", 0x0a000, 0x6000, CRC(12473814) SHA1(9c24ed41781aefee0161add912e730ba0d4f4d3e) ) |
| r7882 | r7883 | |
| 2068 | 2726 | |
| 2069 | 2727 | ROM_REGION( 0x40000, "tilemap", 0 ) |
| 2070 | 2728 | ROM_LOAD( "sharkpye.u16", 0x00000, 0x08000, CRC(90862185) SHA1(9d632bfa707d3449a87d7f370eb2b5c36e61aadd) ) |
| 2071 | | ROM_CONTINUE( 0x10000, 0x08000 ) |
| 2072 | | ROM_CONTINUE( 0x08000, 0x08000 ) |
| 2073 | | ROM_CONTINUE( 0x18000, 0x08000 ) |
| 2729 | ROM_CONTINUE( 0x10000, 0x08000 ) |
| 2730 | ROM_CONTINUE( 0x08000, 0x08000 ) |
| 2731 | ROM_CONTINUE( 0x18000, 0x08000 ) |
| 2074 | 2732 | ROM_LOAD( "sharkpye.u17", 0x20000, 0x08000, CRC(b7b6119a) SHA1(b61c77d2170d96fcb39ea31c4136387441b9037f) ) |
| 2075 | | ROM_CONTINUE( 0x30000, 0x08000 ) |
| 2076 | | ROM_CONTINUE( 0x28000, 0x08000 ) |
| 2077 | | ROM_CONTINUE( 0x38000, 0x08000 ) |
| 2733 | ROM_CONTINUE( 0x30000, 0x08000 ) |
| 2734 | ROM_CONTINUE( 0x28000, 0x08000 ) |
| 2735 | ROM_CONTINUE( 0x38000, 0x08000 ) |
| 2078 | 2736 | |
| 2079 | 2737 | ROM_REGION( 0x40000, "oki", 0 ) |
| 2080 | 2738 | ROM_LOAD( "sharkpye.u54", 0x00000, 0x20000, CRC(9f384c59) SHA1(d2b087b8370b40b6f0944de661ea6aebaebea06f) ) |
| r7882 | r7883 | |
| 2217 | 2875 | ROM_LOAD( "82s129.u13", 0x200, 0x100, CRC(9cb4a5c0) SHA1(0e0a368329c6d1cb685ed655d699a4894988fdb1) ) |
| 2218 | 2876 | ROM_END |
| 2219 | 2877 | |
| 2878 | /* Super Treasure Island |
| 2879 | - is this better here or in bishjan.c? |
| 2880 | */ |
| 2220 | 2881 | |
| 2882 | ROM_START( stisub ) |
| 2883 | ROM_REGION( 0x18000, "maincpu", 0 ) |
| 2884 | ROM_LOAD( "trbon-rlu16.u12", 0x00000, 0x10000, CRC(07771290) SHA1(c485943045396d8580271504a1fec7c88579f4a2) ) |
| 2885 | |
| 2886 | ROM_REGION( 0x100000, "tilemap", 0 ) |
| 2887 | ROM_LOAD( "sti-alpha_2-ver1.1.u30", 0x00000, 0x40000, CRC(3bc4c8c5) SHA1(12e868f4b4d4df6b59befcd785ab1fe5c1def58d) ) |
| 2888 | ROM_LOAD( "sti-alpha_3-ver1.1.u29", 0x40000, 0x40000, CRC(5473c41a) SHA1(94294887af8ffc4f2edbcbde1c51797f20c44efe) ) |
| 2889 | ROM_LOAD( "sti-alpha_4-ver1.1.u28", 0x80000, 0x40000, CRC(ccf895e1) SHA1(c12ecf0577b5b856d8202474f084003cc95da51c) ) |
| 2890 | ROM_LOAD( "sti-alpha_5-ver1.1.u27", 0xc0000, 0x40000, CRC(98eed855) SHA1(89291b1b143924caa79a6d694f10c14d93c57eac) ) |
| 2891 | |
| 2892 | ROM_REGION( 0x80000, "reels", 0 ) |
| 2893 | ROM_LOAD( "sti-alpha_6-ver1.1.u25", 0x00000, 0x20000, CRC(83471a70) SHA1(c63e4c1a8cfb6e7feae4fd97f7d77feaf63c949b) ) |
| 2894 | ROM_LOAD( "sti-alpha_7-ver1.1.u24", 0x20000, 0x20000, CRC(05bc7ed2) SHA1(23ae716cd149ee940ac4bdc114fbfeb290e91b11) ) |
| 2895 | ROM_LOAD( "sti-alpha_8-ver1.1.u23", 0x40000, 0x20000, CRC(d3c11545) SHA1(0383358d223c9bfe67c3b5de7a9cc3e43a9769b2) ) |
| 2896 | ROM_LOAD( "sti-alpha_9-ver1.1.u22", 0x60000, 0x20000, CRC(9710a223) SHA1(76ef6bd77ae33d91a9b6a9a615d07caee3356dfb) ) |
| 2897 | ROM_END |
| 2898 | |
| 2221 | 2899 | /*************************************************************************** |
| 2222 | 2900 | * Driver Init / Decryption * |
| 2223 | 2901 | ***************************************************************************/ |
| r7882 | r7883 | |
| 2362 | 3040 | rom[0x64cf] = 0x00; |
| 2363 | 3041 | } |
| 2364 | 3042 | |
| 3043 | static DRIVER_INIT( tisuba ) |
| 3044 | { |
| 3045 | UINT8 *rom = memory_region( machine, "maincpu" ); |
| 2365 | 3046 | |
| 3047 | DRIVER_INIT_CALL(victor5); |
| 3048 | |
| 3049 | /* this trips a z180 MMU core bug? It unmaps a region then the program code jumps to that region... */ |
| 3050 | rom[0x6491] = 0x00; |
| 3051 | rom[0x6492] = 0x00; |
| 3052 | rom[0x6493] = 0x00; |
| 3053 | rom[0x6496] = 0x00; |
| 3054 | rom[0x6497] = 0x00; |
| 3055 | rom[0x6498] = 0x00; |
| 3056 | } |
| 3057 | |
| 3058 | DRIVER_INIT( stisub ) |
| 3059 | { |
| 3060 | UINT8 *rom = memory_region( machine, "maincpu" ); |
| 3061 | rom[0x1005] = 0x1d; //patch protection check |
| 3062 | rom[0x7ab] = 0x18; //patch "winning protection" check |
| 3063 | rom[0x957] = 0x18; //patch "losing protection" check |
| 3064 | stisub_colorram = auto_alloc_array(machine, UINT8, 256*3); |
| 3065 | |
| 3066 | reel1_scroll = auto_alloc_array(machine, UINT8, 0x40); |
| 3067 | reel2_scroll = auto_alloc_array(machine, UINT8, 0x40); |
| 3068 | reel3_scroll = auto_alloc_array(machine, UINT8, 0x40); |
| 3069 | |
| 3070 | reel1_attr = auto_alloc_array(machine, UINT8, 0x200); |
| 3071 | reel2_attr = auto_alloc_array(machine, UINT8, 0x200); |
| 3072 | reel3_attr = auto_alloc_array(machine, UINT8, 0x200); |
| 3073 | |
| 3074 | } |
| 3075 | |
| 2366 | 3076 | /*************************************************************************** |
| 2367 | 3077 | * Game Drivers * |
| 2368 | 3078 | ***************************************************************************/ |
| 2369 | 3079 | |
| 2370 | | /* YEAR NAME PARENT MACHINE INPUT INIT ROT COMPANY FULLNAME FLAGS LAYOUT */ |
| 2371 | | GAMEL( 1990, victor21, 0, victor21, victor21, victor21, ROT0, "Subsino / Buffy", "Victor 21", 0, layout_victor21 ) |
| 2372 | | GAMEL( 1991, victor5, 0, victor5, victor5, victor5, ROT0, "Subsino", "G.E.A.", 0, layout_victor5 ) // PCB black-box was marked 'victor 5' - in-game says G.E.A with no manufacturer info? |
| 2373 | | GAMEL( 1991, tisub, 0, tisub, tisub, tisub, ROT0, "Subsino", "Treasure Island (Subsino)", GAME_WRONG_COLORS, layout_tisub ) |
| 2374 | | GAMEL( 1991, crsbingo, 0, crsbingo, crsbingo, crsbingo, ROT0, "Subsino", "Poker Carnival", 0, layout_crsbingo ) |
| 2375 | | GAMEL( 1996, sharkpy, 0, sharkpy, sharkpy, sharkpy, ROT0, "Subsino", "Shark Party (Italy, v1.3)", 0, layout_sharkpy ) // missing POST messages? |
| 2376 | | GAMEL( 1996, sharkpya, sharkpy, sharkpy, sharkpy, sharkpy, ROT0, "Subsino", "Shark Party (Italy, v1.6)", 0, layout_sharkpy ) // missing POST messages? |
| 2377 | | GAMEL( 1995, sharkpye, sharkpy, sharkpy, sharkpy, sharkpye, ROT0, "Alpha", "Shark Party (English, Alpha license)", 0, layout_sharkpy ) // PCB black-box was marked 'victor 6' |
| 2378 | | GAMEL( 1996, smoto20, 0, srider, smoto20, smoto20, ROT0, "Subsino", "Super Rider (Italy, v2.0)", 0, layout_smoto ) |
| 2379 | | GAMEL( 1996, smoto16, smoto20, srider, smoto16, smoto16, ROT0, "Subsino", "Super Moto (Italy, v1.6)", 0, layout_smoto ) |
| 3080 | /* YEAR NAME PARENT MACHINE INPUT INIT ROT COMPANY FULLNAME FLAGS LAYOUT */ |
| 3081 | GAMEL( 1990, victor21, 0, victor21, victor21, victor21, ROT0, "Subsino / Buffy", "Victor 21", 0, layout_victor21 ) |
| 3082 | GAMEL( 1991, victor5, 0, victor5, victor5, victor5, ROT0, "Subsino", "G.E.A.", 0, layout_victor5 ) // PCB black-box was marked 'victor 5' - in-game says G.E.A with no manufacturer info? |
| 3083 | GAMEL( 1992, tisub, 0, tisub, tisub, tisub, ROT0, "Subsino", "Treasure Island (Subsino, set 1)", 0, layout_tisub ) |
| 3084 | GAMEL( 1992, tisuba, tisub, tisub, tisub, tisuba, ROT0, "Subsino", "Treasure Island (Subsino, set 2)", 0, layout_tisub ) |
| 3085 | GAMEL( 1991, crsbingo, 0, crsbingo, crsbingo, crsbingo, ROT0, "Subsino", "Poker Carnival", 0, layout_crsbingo ) |
| 3086 | GAME( 1995, stisub, 0, stisub, stisub, stisub, ROT0, "Alpha", "Treasure Bonus (Subsino)", 0 ) // board CPU module marked 'Super Treasure Island' (alt title?) |
| 3087 | GAMEL( 1996, sharkpy, 0, sharkpy, sharkpy, sharkpy, ROT0, "Subsino", "Shark Party (Italy, v1.3)", 0, layout_sharkpy ) // missing POST messages? |
| 3088 | GAMEL( 1996, sharkpya, sharkpy, sharkpy, sharkpy, sharkpy, ROT0, "Subsino", "Shark Party (Italy, v1.6)", 0, layout_sharkpy ) // missing POST messages? |
| 3089 | GAMEL( 1995, sharkpye, sharkpy, sharkpy, sharkpye, sharkpye, ROT0, "Alpha", "Shark Party (English, Alpha license)", 0, layout_sharkpye ) // PCB black-box was marked 'victor 6' |
| 3090 | GAMEL( 1996, smoto20, 0, srider, smoto20, smoto20, ROT0, "Subsino", "Super Rider (Italy, v2.0)", 0, layout_smoto ) |
| 3091 | GAMEL( 1996, smoto16, smoto20, srider, smoto16, smoto16, ROT0, "Subsino", "Super Moto (Italy, v1.6)", 0, layout_smoto ) |
src/mame/drivers/mpu4drvr.c
| r7882 | r7883 | |
| 14 | 14 | The VIDEO BOARD is driven by a 10mhz 68000 processor, and contains a 6840PTM, 6850 serial IO |
| 15 | 15 | (the other end of the communications), an SAA1099 for stereo sound and SCN2674 gfx chip. |
| 16 | 16 | |
| 17 | | The VIDEO CARTRIDGE plugs into the video board, and contains the program roms for the video based game. |
| 17 | The VIDEO CARTRIDGE plugs into the video board, and contains the program ROMs for the video based game. |
| 18 | 18 | Like the MPU4 game card, in some cases an extra OKI sound chip is added to the video board's game card, |
| 19 | 19 | as well as extra RAM. |
| 20 | 20 | There is a protection chip similar to and replacing the MPU4 Characteriser, which is often fed question |
| r7882 | r7883 | |
| 26 | 26 | |
| 27 | 27 | Additional: 68k HALT line is tied to the reset circuit of the MPU4. |
| 28 | 28 | |
| 29 | | Everything here is preliminary... the boards are quite fussy with regards their self tests |
| 30 | | and the timing may have to be perfect for them to function correctly. (as the comms are |
| 31 | | timer driven, the video is capable of various raster effects etc.) |
| 32 | | |
| 33 | | Datasheets are available for the main components, The AGEMAME site mirrors a few of the harder-to-find ones. |
| 34 | | |
| 35 | 29 | --- Preliminary MPU4 Video Interface Card Memorymap --- |
| 36 | 30 | |
| 37 | 31 | hex |r/w| D D D D D D D D | |
| r7882 | r7883 | |
| 173 | 167 | C000-FFFF | R | D D D D D D D D | ROM |
| 174 | 168 | -----------+---+-----------------+-------------------------------------------------------------------------- |
| 175 | 169 | TODO: |
| 176 | | - MPU4 Master clock value taken from schematic, but 68k value is not. |
| 170 | - Correctly implement characteriser protection for each game. |
| 171 | - Hook up trackball control for The Crystal Maze and The Mating Game |
| 172 | - Improve AVDC implementation, adding split-screen interrupts (needed for mid-screen palette changes) |
| 173 | - Hook up OKIM6376 sound in The Mating Game |
| 174 | - Get the BwB games running |
| 175 | * They have a slightly different 68k memory map. The 6850 is at e00000 and the 6840 is at e01000 |
| 176 | - Find out what causes the games to reset in service mode (see jump taken at CPU1:c8e8) |
| 177 | 177 | - Deal 'Em lockouts vary on certain cabinets (normally connected to AUX2, but not there?) |
| 178 | 178 | - Deal 'Em has bad tiles (apostrophe, logo, bottom corner), black should actually be transparent |
| 179 | 179 | to give black on green. |
| 180 | 180 | ***********************************************************************************************************/ |
| 181 | | /* MPU4 Video */ |
| 181 | |
| 182 | 182 | #include "cpu/m68000/m68000.h" |
| 183 | 183 | #include "machine/6850acia.h" |
| 184 | 184 | #include "sound/saa1099.h" |
| r7882 | r7883 | |
| 193 | 193 | |
| 194 | 194 | #define LOGSTUFF(x) do { if (MPU4VIDVERBOSE) logerror x; } while (0) |
| 195 | 195 | |
| 196 | | #define VIDEO_MASTER_CLOCK (XTAL_10MHz) |
| 197 | 196 | |
| 197 | #define VIDEO_MASTER_CLOCK XTAL_10MHz |
| 198 | |
| 198 | 199 | /* IRQ states for 68k */ |
| 199 | 200 | static UINT8 m6840_irq_state; |
| 200 | 201 | static UINT8 m6850_irq_state; |
| r7882 | r7883 | |
| 222 | 223 | static UINT8 scn2674_screen2_l; |
| 223 | 224 | static UINT8 scn2674_screen2_h; |
| 224 | 225 | |
| 226 | static READ16_HANDLER( characteriser16_r ); |
| 227 | static WRITE16_HANDLER( characteriser16_w ); |
| 225 | 228 | |
| 226 | | /* called if board is reset */ |
| 227 | | static MACHINE_RESET( mpu4_vid ) |
| 228 | | { |
| 229 | | ROC10937_reset(0); |
| 230 | 229 | |
| 231 | | /* cputag_set_input_line(machine, "video", INPUT_LINE_HALT, ASSERT_LINE); */ |
| 232 | | mpu4_stepper_reset(); |
| 233 | | |
| 234 | | lamp_strobe = 0; |
| 235 | | lamp_strobe2 = 0; |
| 236 | | lamp_data = 0; |
| 237 | | |
| 238 | | IC23GC = 0; |
| 239 | | IC23GB = 0; |
| 240 | | IC23GA = 0; |
| 241 | | IC23G1 = 1; |
| 242 | | IC23G2A = 0; |
| 243 | | IC23G2B = 0; |
| 244 | | |
| 245 | | prot_col = 0; |
| 246 | | } |
| 247 | | |
| 248 | | |
| 249 | 230 | /************************************* |
| 250 | 231 | * |
| 251 | 232 | * Interrupt system |
| r7882 | r7883 | |
| 270 | 251 | static void update_mpu68_interrupts(running_machine *machine) |
| 271 | 252 | { |
| 272 | 253 | cputag_set_input_line(machine, "video", 1, m6840_irq_state ? ASSERT_LINE : CLEAR_LINE); |
| 273 | | cputag_set_input_line(machine, "video", 2, m6850_irq_state ? ASSERT_LINE : CLEAR_LINE); |
| 254 | cputag_set_input_line(machine, "video", 2, m6850_irq_state ? CLEAR_LINE : ASSERT_LINE); |
| 274 | 255 | cputag_set_input_line(machine, "video", 3, scn2674_irq_state ? ASSERT_LINE : CLEAR_LINE); |
| 275 | 256 | } |
| 276 | 257 | |
| r7882 | r7883 | |
| 304 | 285 | |
| 305 | 286 | static WRITE_LINE_DEVICE_HANDLER( m6809_acia_irq ) |
| 306 | 287 | { |
| 307 | | m68k_acia_cts = state; |
| 308 | | cputag_set_input_line(device->machine, "maincpu", M6809_IRQ_LINE, state?ASSERT_LINE:CLEAR_LINE); |
| 288 | m68k_acia_cts = !state; |
| 289 | cputag_set_input_line(device->machine, "maincpu", M6809_IRQ_LINE, state ? CLEAR_LINE : ASSERT_LINE); |
| 309 | 290 | } |
| 310 | 291 | |
| 311 | 292 | static ACIA6850_INTERFACE( m6809_acia_if ) |
| 312 | 293 | { |
| 313 | 294 | 0, |
| 314 | 295 | 0, |
| 315 | | DEVCB_LINE(m6809_acia_rx_r),/*&m68k_m6809_line,*/ |
| 316 | | DEVCB_LINE(m6809_acia_tx_w),/*&m6809_m68k_line,*/ |
| 317 | | DEVCB_LINE(m6809_acia_cts_r),/*&m6809_acia_cts,*/ |
| 318 | | DEVCB_LINE(m6809_acia_rts_w),/*&m6809_acia_rts,*/ |
| 319 | | DEVCB_LINE(m6809_acia_dcd_r),/*&m6809_acia_dcd,*/ |
| 296 | DEVCB_LINE(m6809_acia_rx_r), |
| 297 | DEVCB_LINE(m6809_acia_tx_w), |
| 298 | DEVCB_LINE(m6809_acia_cts_r), |
| 299 | DEVCB_LINE(m6809_acia_rts_w), |
| 300 | DEVCB_LINE(m6809_acia_dcd_r), |
| 320 | 301 | DEVCB_LINE(m6809_acia_irq) |
| 321 | 302 | }; |
| 322 | 303 | |
| r7882 | r7883 | |
| 347 | 328 | |
| 348 | 329 | static WRITE_LINE_DEVICE_HANDLER( m68k_acia_irq ) |
| 349 | 330 | { |
| 350 | | m6809_acia_cts = state; |
| 331 | m6809_acia_cts = !state; |
| 351 | 332 | m6850_irq_state = state; |
| 352 | 333 | update_mpu68_interrupts(device->machine); |
| 353 | 334 | } |
| r7882 | r7883 | |
| 356 | 337 | { |
| 357 | 338 | 0, |
| 358 | 339 | 0, |
| 359 | | DEVCB_LINE(m68k_acia_rx_r),/*&m6809_m68k_line,*/ |
| 360 | | DEVCB_LINE(m68k_acia_tx_w),/*&m68k_m6809_line,*/ |
| 361 | | DEVCB_LINE(m68k_acia_cts_r),/*&m68k_acia_cts,*/ |
| 362 | | DEVCB_LINE(m68k_acia_rts_w),/*&m6809_acia_dcd,*/ |
| 363 | | DEVCB_LINE(m68k_acia_dcd_r),/*&m6809_acia_rts,*/ |
| 340 | DEVCB_LINE(m68k_acia_rx_r), |
| 341 | DEVCB_LINE(m68k_acia_tx_w), |
| 342 | DEVCB_LINE(m68k_acia_cts_r), |
| 343 | DEVCB_LINE(m68k_acia_rts_w), |
| 344 | DEVCB_LINE(m68k_acia_dcd_r), |
| 364 | 345 | DEVCB_LINE(m68k_acia_irq) |
| 365 | 346 | }; |
| 366 | 347 | |
| r7882 | r7883 | |
| 411 | 392 | }; |
| 412 | 393 | |
| 413 | 394 | |
| 414 | | /* SCN2674 AVDC emulation */ |
| 395 | /************************************* |
| 396 | * |
| 397 | * SCN2674 AVDC |
| 398 | * |
| 399 | *************************************/ |
| 400 | |
| 415 | 401 | /* the chip is actually more complex than this.. character aren't limited to 8 rows high... but I |
| 416 | 402 | don't *think* the MPU4 stuff needs otherwise.. yet .. */ |
| 417 | 403 | |
| r7882 | r7883 | |
| 420 | 406 | 8,8, |
| 421 | 407 | 0x1000, /* 0x1000 tiles (128k of GFX RAM, 0x20 bytes per tile) */ |
| 422 | 408 | 4, |
| 423 | | { 0,8,16,24 }, |
| 409 | { 8,0,24,16 }, |
| 424 | 410 | { 0,1,2,3,4,5,6,7 }, |
| 425 | 411 | { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32}, |
| 426 | 412 | 8*32 |
| r7882 | r7883 | |
| 433 | 419 | 8,16, |
| 434 | 420 | 0x1000, /* 0x1000 tiles (128k of GFX RAM, 0x20 bytes per tile) */ |
| 435 | 421 | 4, |
| 436 | | { 0,8,16,24 }, |
| 422 | { 8,0,24,16 }, |
| 437 | 423 | { 0,1,2,3,4,5,6,7 }, |
| 438 | 424 | { 0*32, 0*32, 1*32, 1*32, 2*32, 2*32, 3*32, 3*32, 4*32, 4*32, 5*32, 5*32, 6*32, 6*32, 7*32, 7*32}, |
| 439 | 425 | 8*32 |
| r7882 | r7883 | |
| 446 | 432 | 16,8, |
| 447 | 433 | 0x1000, /* 0x1000 tiles (128k of GFX RAM, 0x20 bytes per tile) */ |
| 448 | 434 | 4, |
| 449 | | { 0,8,16,24 }, |
| 435 | { 8,0,24,16 }, |
| 450 | 436 | { 0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7 }, |
| 451 | 437 | { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32}, |
| 452 | 438 | 8*32 |
| r7882 | r7883 | |
| 459 | 445 | 16,16, |
| 460 | 446 | 0x1000, /* 0x1000 tiles (128k of GFX RAM, 0x20 bytes per tile) */ |
| 461 | 447 | 4, |
| 462 | | { 0,8,16,24 }, |
| 448 | { 8,0,24,16 }, |
| 463 | 449 | { 0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7 }, |
| 464 | 450 | { 0*32, 0*32, 1*32, 1*32, 2*32, 2*32, 3*32, 3*32, 4*32, 4*32, 5*32, 5*32, 6*32, 6*32, 7*32, 7*32}, |
| 465 | 451 | 8*32 |
| r7882 | r7883 | |
| 505 | 491 | /* we're in row table mode...thats why */ |
| 506 | 492 | for(y = 0; y <= IR4_scn2674_rows_per_screen; y++) |
| 507 | 493 | { |
| 508 | | int screen2_base = (scn2674_screen2_h<<8)|(scn2674_screen2_l); |
| 494 | int screen2_base = (scn2674_screen2_h << 8) | scn2674_screen2_l; |
| 509 | 495 | |
| 510 | 496 | UINT16 rowbase = (mpu4_vid_mainram[1+screen2_base+(y*2)]<<8)|mpu4_vid_mainram[screen2_base+(y*2)]; |
| 511 | 497 | int dbl_size; |
| r7882 | r7883 | |
| 518 | 504 | for(x = 0; x <= IR5_scn2674_character_per_row; x++) |
| 519 | 505 | { |
| 520 | 506 | UINT16 tiledat; |
| 521 | | UINT16 colattr; |
| 507 | UINT16 attr; |
| 522 | 508 | |
| 523 | 509 | tiledat = mpu4_vid_mainram[(rowbase+x)&0x7fff]; |
| 524 | | colattr = tiledat >>12; |
| 525 | | tiledat &= 0x0fff; |
| 510 | attr = tiledat >>12; |
| 526 | 511 | |
| 527 | | drawgfx_opaque(bitmap,cliprect,screen->machine->gfx[gfxregion],tiledat,colattr,0,0,x*8,y*8); |
| 512 | if (attr) |
| 513 | drawgfx_opaque(bitmap,cliprect,screen->machine->gfx[gfxregion],tiledat,0,0,0,x*8,y*8); |
| 528 | 514 | |
| 529 | 515 | //count++; |
| 530 | 516 | } |
| r7882 | r7883 | |
| 533 | 519 | |
| 534 | 520 | } |
| 535 | 521 | |
| 536 | | popmessage("%02x %02x %02x %02x %02x %02x",scn2674_screen1_l,scn2674_screen1_h,scn2674_cursor_l, scn2674_cursor_h,scn2674_screen2_l,scn2674_screen2_h); |
| 537 | | |
| 538 | 522 | for (i = 0; i < 8; i++) |
| 539 | 523 | mpu4_draw_led(i, led_segs[i]); |
| 540 | 524 | |
| r7882 | r7883 | |
| 1040 | 1024 | scn2675_IR_pointer = 0; |
| 1041 | 1025 | } |
| 1042 | 1026 | |
| 1027 | static INTERRUPT_GEN( mpu4_vid_irq ) |
| 1028 | { |
| 1029 | LOGSTUFF(("scn2674_irq_mask %02x\n",scn2674_irq_mask)); |
| 1030 | if (cpu_getiloops(device)==0) /* vbl */ |
| 1031 | { |
| 1032 | /* if (scn2674_display_enabled) ? */ |
| 1033 | { |
| 1034 | if (scn2674_irq_mask&0x10) |
| 1035 | { |
| 1036 | LOGSTUFF(("vblank irq\n")); |
| 1037 | scn2674_irq_state = 1; |
| 1038 | update_mpu68_interrupts(device->machine); |
| 1043 | 1039 | |
| 1040 | scn2674_irq_register |= 0x10; |
| 1041 | } |
| 1042 | } |
| 1043 | scn2674_status_register |= 0x10; |
| 1044 | } |
| 1045 | } |
| 1044 | 1046 | |
| 1047 | |
| 1045 | 1048 | /**************************** |
| 1046 | 1049 | * EF9369 color palette IC |
| 1047 | 1050 | * (16 colors from 4096) |
| r7882 | r7883 | |
| 1086 | 1089 | col = pal.clut[entry] & 0xfff; |
| 1087 | 1090 | |
| 1088 | 1091 | /* Update the MAME palette */ |
| 1089 | | palette_set_color_rgb(space->machine, entry, pal4bit(col >> 0), pal4bit(col >> 4), pal4bit(col >> 8)); |
| 1092 | palette_set_color_rgb(space->machine, entry, pal4bit(col >> 8), pal4bit(col >> 4), pal4bit(col >> 0)); |
| 1090 | 1093 | } |
| 1091 | 1094 | |
| 1092 | 1095 | /* Address register auto-increment */ |
| r7882 | r7883 | |
| 1114 | 1117 | } |
| 1115 | 1118 | } |
| 1116 | 1119 | |
| 1120 | |
| 1121 | /************************************* |
| 1122 | * |
| 1123 | * Input defintions |
| 1124 | * |
| 1125 | *************************************/ |
| 1126 | |
| 1117 | 1127 | static INPUT_PORTS_START( crmaze ) |
| 1118 | 1128 | PORT_START("ORANGE1") |
| 1129 | // PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("00") |
| 1130 | // PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("01") |
| 1131 | // PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("02") |
| 1132 | // PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("03") |
| 1133 | // PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("04") |
| 1134 | // PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("05") |
| 1135 | // PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("06") |
| 1136 | // PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("07") |
| 1137 | |
| 1138 | PORT_START("ORANGE2") |
| 1139 | // PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("08") |
| 1140 | // PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("09") |
| 1141 | // PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("10") |
| 1142 | // PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("11") |
| 1143 | // PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("12") |
| 1144 | // PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("13") |
| 1145 | // PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("14") |
| 1146 | // PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("200p?") |
| 1147 | |
| 1148 | PORT_START("BLACK1") |
| 1149 | // PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("16") |
| 1150 | // PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("17") |
| 1151 | // PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("18") |
| 1152 | // PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("19") |
| 1153 | // PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("20") |
| 1154 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_SERVICE) PORT_NAME("Test Switch") |
| 1155 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_SERVICE) PORT_NAME("Refill Key") PORT_CODE(KEYCODE_R) PORT_TOGGLE |
| 1156 | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Door Switch?") PORT_TOGGLE |
| 1157 | |
| 1158 | PORT_START("BLACK2") |
| 1159 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Right Yellow") |
| 1160 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Right Red") |
| 1161 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("26") |
| 1162 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Left Yellow") |
| 1163 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Left Red") |
| 1164 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Getout Yellow") |
| 1165 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Getout Red")/* Labelled Escape on cabinet */ |
| 1166 | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_SERVICE) PORT_NAME("100p Service?")PORT_IMPULSE(100) |
| 1167 | |
| 1168 | PORT_START("DIL1") |
| 1169 | PORT_DIPNAME( 0x01, 0x00, "DIL101" ) PORT_DIPLOCATION("DIL1:01") |
| 1170 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 1171 | PORT_DIPSETTING( 0x01, DEF_STR( On ) ) |
| 1172 | PORT_DIPNAME( 0x02, 0x00, "DIL102" ) PORT_DIPLOCATION("DIL1:02") |
| 1173 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 1174 | PORT_DIPSETTING( 0x02, DEF_STR( On ) ) |
| 1175 | PORT_DIPNAME( 0x04, 0x00, "DIL103" ) PORT_DIPLOCATION("DIL1:03") |
| 1176 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 1177 | PORT_DIPSETTING( 0x04, DEF_STR( On ) ) |
| 1178 | PORT_DIPNAME( 0x08, 0x00, "DIL104" ) PORT_DIPLOCATION("DIL1:04") |
| 1179 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 1180 | PORT_DIPSETTING( 0x08, DEF_STR( On ) ) |
| 1181 | PORT_DIPNAME( 0x10, 0x00, "DIL105" ) PORT_DIPLOCATION("DIL1:05") |
| 1182 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 1183 | PORT_DIPSETTING( 0x10, DEF_STR( On ) ) |
| 1184 | PORT_DIPNAME( 0x20, 0x00, "DIL106" ) PORT_DIPLOCATION("DIL1:06") |
| 1185 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 1186 | PORT_DIPSETTING( 0x20, DEF_STR( On ) ) |
| 1187 | PORT_DIPNAME( 0x40, 0x00, "DIL107" ) PORT_DIPLOCATION("DIL1:07") |
| 1188 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 1189 | PORT_DIPSETTING( 0x40, DEF_STR( On ) ) |
| 1190 | PORT_DIPNAME( 0x80, 0x00, "DIL108" ) PORT_DIPLOCATION("DIL1:08") |
| 1191 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 1192 | PORT_DIPSETTING( 0x80, DEF_STR( On ) ) |
| 1193 | |
| 1194 | PORT_START("DIL2") |
| 1195 | PORT_DIPNAME( 0x01, 0x00, "DIL201" ) PORT_DIPLOCATION("DIL2:01") |
| 1196 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 1197 | PORT_DIPSETTING( 0x01, DEF_STR( On ) ) |
| 1198 | PORT_DIPNAME( 0x02, 0x00, "DIL202" ) PORT_DIPLOCATION("DIL2:02") |
| 1199 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 1200 | PORT_DIPSETTING( 0x02, DEF_STR( On ) ) |
| 1201 | PORT_DIPNAME( 0x04, 0x00, "DIL203" ) PORT_DIPLOCATION("DIL2:03") |
| 1202 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 1203 | PORT_DIPSETTING( 0x04, DEF_STR( On ) ) |
| 1204 | PORT_DIPNAME( 0x08, 0x00, "DIL204" ) PORT_DIPLOCATION("DIL2:04") |
| 1205 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 1206 | PORT_DIPSETTING( 0x08, DEF_STR( On ) ) |
| 1207 | PORT_DIPNAME( 0x10, 0x00, "DIL205" ) PORT_DIPLOCATION("DIL2:05") |
| 1208 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 1209 | PORT_DIPSETTING( 0x10, DEF_STR( On ) ) |
| 1210 | PORT_DIPNAME( 0x20, 0x00, "DIL206" ) PORT_DIPLOCATION("DIL2:06") |
| 1211 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 1212 | PORT_DIPSETTING( 0x20, DEF_STR( On ) ) |
| 1213 | PORT_DIPNAME( 0x40, 0x00, "DIL207" ) PORT_DIPLOCATION("DIL2:07") |
| 1214 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 1215 | PORT_DIPSETTING( 0x40, DEF_STR( On ) ) |
| 1216 | PORT_DIPNAME( 0x80, 0x00, "DIL208" ) PORT_DIPLOCATION("DIL2:08") |
| 1217 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 1218 | PORT_DIPSETTING( 0x80, DEF_STR( On ) ) |
| 1219 | |
| 1220 | PORT_START("AUX1") |
| 1221 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("0") |
| 1222 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("1") |
| 1223 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("2") |
| 1224 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("3") |
| 1225 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("4") |
| 1226 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("5") |
| 1227 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("6") |
| 1228 | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("7") |
| 1229 | |
| 1230 | PORT_START("AUX2") |
| 1231 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_SPECIAL) |
| 1232 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_SPECIAL) |
| 1233 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_SPECIAL) |
| 1234 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_SPECIAL) |
| 1235 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_COIN1) PORT_NAME("10p") |
| 1236 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_COIN2) PORT_NAME("20p") |
| 1237 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_COIN3) PORT_NAME("50p") |
| 1238 | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_COIN4) PORT_NAME("100p") |
| 1239 | INPUT_PORTS_END |
| 1240 | |
| 1241 | static INPUT_PORTS_START( mating ) |
| 1242 | PORT_START("ORANGE1") |
| 1119 | 1243 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("00") |
| 1120 | 1244 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("01") |
| 1121 | 1245 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("02") |
| r7882 | r7883 | |
| 1141 | 1265 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("18") |
| 1142 | 1266 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("19") |
| 1143 | 1267 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("20") |
| 1144 | | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_SERVICE) PORT_NAME("Test Switch") |
| 1268 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_SERVICE) PORT_NAME("Test Button") PORT_CODE(KEYCODE_W) PORT_TOGGLE |
| 1145 | 1269 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_SERVICE) PORT_NAME("Refill Key") PORT_CODE(KEYCODE_R) PORT_TOGGLE |
| 1146 | | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Door Switch?") PORT_TOGGLE |
| 1270 | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_INTERLOCK) PORT_NAME("Cashbox Door") PORT_CODE(KEYCODE_Q) PORT_TOGGLE |
| 1147 | 1271 | |
| 1148 | 1272 | PORT_START("BLACK2") |
| 1149 | 1273 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Right Yellow") |
| r7882 | r7883 | |
| 1153 | 1277 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Left Red") |
| 1154 | 1278 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Getout Yellow") |
| 1155 | 1279 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Getout Red")/* Labelled Escape on cabinet */ |
| 1156 | | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_SERVICE) PORT_NAME("100p Service?")PORT_IMPULSE(100) |
| 1280 | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_SERVICE) PORT_NAME("100p Service?") |
| 1157 | 1281 | |
| 1158 | 1282 | PORT_START("DIL1") |
| 1159 | 1283 | PORT_DIPNAME( 0x01, 0x00, "DIL101" ) PORT_DIPLOCATION("DIL1:01") |
| r7882 | r7883 | |
| 1222 | 1346 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_SPECIAL) |
| 1223 | 1347 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_SPECIAL) |
| 1224 | 1348 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_SPECIAL) |
| 1225 | | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_COIN1) PORT_NAME("10p")PORT_IMPULSE(5) |
| 1226 | | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_COIN2) PORT_NAME("20p")PORT_IMPULSE(5) |
| 1227 | | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_COIN3) PORT_NAME("50p")PORT_IMPULSE(5) |
| 1228 | | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_COIN4) PORT_NAME("100p")PORT_IMPULSE(5) |
| 1349 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_COIN1) PORT_NAME("10p") |
| 1350 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_COIN2) PORT_NAME("20p") |
| 1351 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_COIN3) PORT_NAME("50p") |
| 1352 | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_COIN4) PORT_NAME("100p") |
| 1229 | 1353 | INPUT_PORTS_END |
| 1230 | 1354 | |
| 1355 | |
| 1231 | 1356 | static INPUT_PORTS_START( dealem ) |
| 1232 | 1357 | PORT_START("ORANGE1") |
| 1233 | 1358 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED) |
| r7882 | r7883 | |
| 1357 | 1482 | INPUT_PORTS_END |
| 1358 | 1483 | |
| 1359 | 1484 | |
| 1360 | | static INTERRUPT_GEN(mpu4_vid_irq) |
| 1485 | /* OKI M6376 (for Mating Game) FIXME */ |
| 1486 | static READ16_DEVICE_HANDLER( oki_r ) |
| 1361 | 1487 | { |
| 1362 | | LOGSTUFF(("scn2674_irq_mask %02x\n",scn2674_irq_mask)); |
| 1363 | | if (cpu_getiloops(device)==0) /* vbl */ |
| 1364 | | { |
| 1365 | | /* if (scn2674_display_enabled) ? */ |
| 1366 | | { |
| 1367 | | if (scn2674_irq_mask&0x10) |
| 1368 | | { |
| 1369 | | LOGSTUFF(("vblank irq\n")); |
| 1370 | | scn2674_irq_state = 1; |
| 1371 | | update_mpu68_interrupts(device->machine); |
| 1488 | return mame_rand(device->machine); |
| 1489 | } |
| 1372 | 1490 | |
| 1373 | | scn2674_irq_register |= 0x10; |
| 1374 | | } |
| 1375 | | } |
| 1376 | | scn2674_status_register |= 0x10; |
| 1377 | | } |
| 1491 | static WRITE16_DEVICE_HANDLER( oki_w ) |
| 1492 | { |
| 1493 | // 0x10: .xxx xxxx OKIM6736 I6-I0 |
| 1494 | // 0x12: .... ...x OKIM6736 /ST |
| 1378 | 1495 | } |
| 1379 | 1496 | |
| 1497 | static void video_reset(running_device *device) |
| 1498 | { |
| 1499 | devtag_get_device(device->machine, "6840ptm_68k")->reset(); |
| 1500 | devtag_get_device(device->machine, "acia6850_1")->reset(); |
| 1501 | } |
| 1380 | 1502 | |
| 1381 | 1503 | /* machine start (called only once) */ |
| 1382 | 1504 | static MACHINE_START( mpu4_vid ) |
| r7882 | r7883 | |
| 1390 | 1512 | Mechmtr_init(8); |
| 1391 | 1513 | |
| 1392 | 1514 | /* setup 4 reels (for hybrid machines) */ |
| 1393 | | |
| 1394 | 1515 | stepper_config(machine, 0, &barcrest_reel_interface); |
| 1395 | 1516 | stepper_config(machine, 1, &barcrest_reel_interface); |
| 1396 | 1517 | stepper_config(machine, 2, &barcrest_reel_interface); |
| 1397 | 1518 | stepper_config(machine, 3, &barcrest_reel_interface); |
| 1398 | 1519 | |
| 1399 | 1520 | /* setup the standard oki MSC1937 display */ |
| 1521 | ROC10937_init(0, MSC1937, 0); |
| 1400 | 1522 | |
| 1401 | | ROC10937_init(0, MSC1937, 0); |
| 1523 | /* Hook the reset line */ |
| 1524 | m68k_set_reset_callback(devtag_get_device(machine, "video"), video_reset); |
| 1402 | 1525 | } |
| 1403 | 1526 | |
| 1404 | | /* |
| 1405 | | Characteriser (CHR) |
| 1406 | | Despite the potential to radically overhaul the design, the 68k version of the chip appears to just be a |
| 1407 | | 16-bit version of the previous design, with some endian-swapping necessary. It is unclear, however, if it has any |
| 1408 | | capacity to affect lamp matrices in the same way as before, as no software seen makes any request for the 'lamp' row. |
| 1409 | | It has been left in the table, as it clearly exists, but is unused. |
| 1410 | | The 'quiz' games on the board did use an address-scrambling PAL for encryption, and the very last mod of this board had |
| 1411 | | a characteriser capable of scrambling the ROM address lines. |
| 1412 | | */ |
| 1413 | | |
| 1414 | | static WRITE16_HANDLER( characteriser16_w ) |
| 1527 | static MACHINE_RESET( mpu4_vid ) |
| 1415 | 1528 | { |
| 1416 | | int x; |
| 1417 | | int call=data; |
| 1418 | | LOG_CHR_FULL(("%04x Characteriser write offset %02X data %02X", cpu_get_previouspc(space->cpu),offset,data)); |
| 1419 | | for (x = prot_col; x < 64; x++) |
| 1420 | | { |
| 1421 | | if (call == 0) |
| 1422 | | { |
| 1423 | | prot_col = 0; |
| 1424 | | } |
| 1425 | | else |
| 1426 | | { |
| 1427 | | if (MPU4_chr_lut[(x)] == call) |
| 1428 | | { |
| 1429 | | prot_col = x; |
| 1430 | | LOG_CHR(("Characteriser find column %02X\n",prot_col)); |
| 1431 | | break; |
| 1432 | | } |
| 1433 | | } |
| 1434 | | } |
| 1435 | | } |
| 1529 | ROC10937_reset(0); |
| 1436 | 1530 | |
| 1531 | mpu4_stepper_reset(); |
| 1437 | 1532 | |
| 1438 | | static READ16_HANDLER( characteriser16_r ) |
| 1439 | | { |
| 1440 | | LOG_CHR_FULL(("%04x Characteriser read offset %02X,data %02X", cpu_get_previouspc(space->cpu),offset,MPU4_chr_data[prot_col])); |
| 1441 | | LOG_CHR(("Characteriser read offset %02X \n",offset)); |
| 1442 | | LOG_CHR(("Characteriser read data %02X \n",MPU4_chr_data[prot_col])); |
| 1443 | | return MPU4_chr_data[prot_col]; |
| 1533 | lamp_strobe = 0; |
| 1534 | lamp_strobe2 = 0; |
| 1535 | lamp_data = 0; |
| 1536 | |
| 1537 | IC23GC = 0; |
| 1538 | IC23GB = 0; |
| 1539 | IC23GA = 0; |
| 1540 | IC23G1 = 1; |
| 1541 | IC23G2A = 0; |
| 1542 | IC23G2B = 0; |
| 1543 | |
| 1544 | prot_col = 0; |
| 1444 | 1545 | } |
| 1445 | 1546 | |
| 1446 | | |
| 1447 | 1547 | static ADDRESS_MAP_START( mpu4_68k_map, ADDRESS_SPACE_PROGRAM, 16 ) |
| 1448 | 1548 | AM_RANGE(0x000000, 0x7fffff) AM_ROM |
| 1449 | | |
| 1450 | | /* AM_RANGE(0x600000, 0x63ffff) AM_RAM? In expanded games (mating) */ |
| 1451 | | |
| 1452 | | AM_RANGE(0x800000, 0x80ffff) AM_RAM AM_BASE(&mpu4_vid_mainram) /* mainram / char address ram? */ |
| 1453 | | |
| 1454 | | /* what is here, the sound chip? Assume so */ |
| 1455 | | AM_RANGE(0x900000, 0x900001) AM_DEVWRITE8("saa", saa1099_control_w, 0x00ff) |
| 1456 | | AM_RANGE(0x900002, 0x900003) AM_DEVWRITE8("saa", saa1099_data_w, 0x00ff) |
| 1457 | | |
| 1458 | | AM_RANGE(0xa00000, 0xa00003) AM_READWRITE(ef9369_r, ef9369_w) /* the palette chip */ |
| 1549 | AM_RANGE(0x800000, 0x80ffff) AM_RAM AM_BASE(&mpu4_vid_mainram) |
| 1550 | AM_RANGE(0x900000, 0x900001) AM_DEVWRITE8("saa", saa1099_data_w, 0x00ff) |
| 1551 | AM_RANGE(0x900002, 0x900003) AM_DEVWRITE8("saa", saa1099_control_w, 0x00ff) |
| 1552 | AM_RANGE(0xa00000, 0xa00003) AM_READWRITE(ef9369_r, ef9369_w) |
| 1459 | 1553 | /* AM_RANGE(0xa00004, 0xa0000f) AM_READWRITE(mpu4_vid_unmap_r, mpu4_vid_unmap_w) */ |
| 1460 | | |
| 1461 | 1554 | AM_RANGE(0xb00000, 0xb0000f) AM_READWRITE(mpu4_vid_scn2674_r, mpu4_vid_scn2674_w) |
| 1462 | | |
| 1463 | 1555 | AM_RANGE(0xc00000, 0xc1ffff) AM_READWRITE(mpu4_vid_vidram_r, mpu4_vid_vidram_w) |
| 1464 | | |
| 1465 | | /* comms with the MPU4 */ |
| 1466 | | AM_RANGE(0xff8000, 0xff8001) AM_DEVREADWRITE8("acia6850_1", acia6850_stat_r, acia6850_ctrl_w, 0xff) |
| 1467 | | AM_RANGE(0xff8002, 0xff8003) AM_DEVREADWRITE8("acia6850_1", acia6850_data_r, acia6850_data_w, 0xff) |
| 1468 | | |
| 1469 | | /* 6840PTM */ |
| 1556 | AM_RANGE(0xff8000, 0xff8001) AM_DEVREADWRITE8("acia6850_1", acia6850_stat_r, acia6850_ctrl_w, 0xff) |
| 1557 | AM_RANGE(0xff8002, 0xff8003) AM_DEVREADWRITE8("acia6850_1", acia6850_data_r, acia6850_data_w, 0xff) |
| 1470 | 1558 | AM_RANGE(0xff9000, 0xff900f) AM_DEVREADWRITE8("6840ptm_68k", ptm6840_read, ptm6840_write, 0xff) |
| 1471 | | |
| 1472 | | AM_RANGE(0xffd000, 0xffd00f) AM_READWRITE(characteriser16_r, characteriser16_w) /* characterizer */ |
| 1559 | AM_RANGE(0xffd000, 0xffd00f) AM_READWRITE(characteriser16_r, characteriser16_w) |
| 1473 | 1560 | ADDRESS_MAP_END |
| 1474 | 1561 | |
| 1475 | 1562 | /* TODO: Fix up MPU4 map*/ |
| 1476 | 1563 | static ADDRESS_MAP_START( mpu4_6809_map, ADDRESS_SPACE_PROGRAM, 8 ) |
| 1477 | 1564 | AM_RANGE(0x0000, 0x07ff) AM_RAM AM_BASE_SIZE_GENERIC(nvram) |
| 1478 | | |
| 1479 | 1565 | AM_RANGE(0x0800, 0x0800) AM_DEVREADWRITE("acia6850_0", acia6850_stat_r, acia6850_ctrl_w) |
| 1480 | 1566 | AM_RANGE(0x0801, 0x0801) AM_DEVREADWRITE("acia6850_0", acia6850_data_r, acia6850_data_w) |
| 1481 | | |
| 1482 | 1567 | AM_RANGE(0x0880, 0x0881) AM_NOP /* Could be a UART datalogger is here. */ |
| 1483 | | |
| 1484 | | AM_RANGE(0x0900, 0x0907) AM_DEVREADWRITE("6840ptm", ptm6840_read, ptm6840_write) /* 6840PTM */ |
| 1485 | | |
| 1486 | | AM_RANGE(0x0a00, 0x0a03) AM_DEVREADWRITE("pia_ic3", pia6821_r, pia6821_w) /* PIA6821 IC3 */ |
| 1487 | | AM_RANGE(0x0b00, 0x0b03) AM_DEVREADWRITE("pia_ic4", pia6821_r, pia6821_w) /* PIA6821 IC4 */ |
| 1488 | | AM_RANGE(0x0c00, 0x0c03) AM_DEVREADWRITE("pia_ic5", pia6821_r, pia6821_w) /* PIA6821 IC5 */ |
| 1489 | | AM_RANGE(0x0d00, 0x0d03) AM_DEVREADWRITE("pia_ic6", pia6821_r, pia6821_w) /* PIA6821 IC6 */ |
| 1490 | | AM_RANGE(0x0e00, 0x0e03) AM_DEVREADWRITE("pia_ic7", pia6821_r, pia6821_w) /* PIA6821 IC7 */ |
| 1491 | | AM_RANGE(0x0f00, 0x0f03) AM_DEVREADWRITE("pia_ic8", pia6821_r, pia6821_w) /* PIA6821 IC8 */ |
| 1492 | | |
| 1493 | | AM_RANGE(0x4000, 0x40ff) AM_RAM /* it actually runs code from here... */ |
| 1494 | | |
| 1495 | | AM_RANGE(0xbe00, 0xbfff) AM_RAM /* 00 written on startup */ |
| 1568 | AM_RANGE(0x0900, 0x0907) AM_DEVREADWRITE("6840ptm", ptm6840_read, ptm6840_write) |
| 1569 | AM_RANGE(0x0a00, 0x0a03) AM_DEVREADWRITE("pia_ic3", pia6821_r, pia6821_w) |
| 1570 | AM_RANGE(0x0b00, 0x0b03) AM_DEVREADWRITE("pia_ic4", pia6821_r, pia6821_w) |
| 1571 | AM_RANGE(0x0c00, 0x0c03) AM_DEVREADWRITE("pia_ic5", pia6821_r, pia6821_w) |
| 1572 | AM_RANGE(0x0d00, 0x0d03) AM_DEVREADWRITE("pia_ic6", pia6821_r, pia6821_w) |
| 1573 | AM_RANGE(0x0e00, 0x0e03) AM_DEVREADWRITE("pia_ic7", pia6821_r, pia6821_w) |
| 1574 | AM_RANGE(0x0f00, 0x0f03) AM_DEVREADWRITE("pia_ic8", pia6821_r, pia6821_w) |
| 1575 | AM_RANGE(0x4000, 0x7fff) AM_RAM |
| 1576 | AM_RANGE(0xbe00, 0xbfff) AM_RAM |
| 1496 | 1577 | AM_RANGE(0xc000, 0xffff) AM_ROM AM_REGION("maincpu",0) /* 64k EPROM on board, only this region read */ |
| 1497 | 1578 | ADDRESS_MAP_END |
| 1498 | 1579 | |
| 1499 | 1580 | static ADDRESS_MAP_START( vp_68k_map, ADDRESS_SPACE_PROGRAM, 16 ) |
| 1500 | 1581 | AM_RANGE(0x000000, 0x7fffff) AM_ROM |
| 1501 | | |
| 1502 | | /* AM_RANGE(0x600000, 0x63ffff) AM_RAM? In expanded games (mating) */ |
| 1503 | | |
| 1504 | | AM_RANGE(0x800000, 0x80ffff) AM_RAM AM_BASE(&mpu4_vid_mainram) /* mainram / char address ram? */ |
| 1505 | | |
| 1582 | AM_RANGE(0x800000, 0x80ffff) AM_RAM AM_BASE(&mpu4_vid_mainram) |
| 1506 | 1583 | AM_RANGE(0x810000, 0x81ffff) AM_RAM /* ? */ |
| 1507 | | |
| 1508 | | /* what is here, the sound chip? Assume so */ |
| 1509 | | AM_RANGE(0x900000, 0x900001) AM_DEVWRITE8("saa", saa1099_control_w, 0x00ff) |
| 1510 | | AM_RANGE(0x900002, 0x900003) AM_DEVWRITE8("saa", saa1099_data_w, 0x00ff) |
| 1511 | | |
| 1512 | | /* the palette chip */ |
| 1513 | | AM_RANGE(0xa00000, 0xa00003) AM_READWRITE(ef9369_r, ef9369_w) /* the palette chip */ |
| 1584 | AM_RANGE(0x900000, 0x900001) AM_DEVWRITE8("saa", saa1099_data_w, 0x00ff) |
| 1585 | AM_RANGE(0x900002, 0x900003) AM_DEVWRITE8("saa", saa1099_control_w, 0x00ff) |
| 1586 | AM_RANGE(0xa00000, 0xa00003) AM_READWRITE(ef9369_r, ef9369_w) |
| 1514 | 1587 | /* AM_RANGE(0xa00004, 0xa0000f) AM_READWRITE(mpu4_vid_unmap_r, mpu4_vid_unmap_w) */ |
| 1515 | | |
| 1516 | 1588 | AM_RANGE(0xb00000, 0xb0000f) AM_READWRITE(mpu4_vid_scn2674_r, mpu4_vid_scn2674_w) |
| 1517 | | |
| 1518 | 1589 | AM_RANGE(0xc00000, 0xc1ffff) AM_READWRITE(mpu4_vid_vidram_r, mpu4_vid_vidram_w) |
| 1519 | | |
| 1520 | 1590 | /* AM_RANGE(0xe05000, 0xe05001) AM_READWRITE(adpcm_r, adpcm_w) */ |
| 1521 | | |
| 1522 | | /* comms with the MPU4 */ |
| 1523 | | AM_RANGE(0xff8000, 0xff8001) AM_DEVREADWRITE8("acia6850_1", acia6850_stat_r, acia6850_ctrl_w, 0xff) |
| 1524 | | AM_RANGE(0xff8002, 0xff8003) AM_DEVREADWRITE8("acia6850_1", acia6850_data_r, acia6850_data_w, 0xff) |
| 1525 | | |
| 1526 | | /* 6840PTM */ |
| 1591 | AM_RANGE(0xff8000, 0xff8001) AM_DEVREADWRITE8("acia6850_1", acia6850_stat_r, acia6850_ctrl_w, 0xff) |
| 1592 | AM_RANGE(0xff8002, 0xff8003) AM_DEVREADWRITE8("acia6850_1", acia6850_data_r, acia6850_data_w, 0xff) |
| 1527 | 1593 | AM_RANGE(0xff9000, 0xff900f) AM_DEVREADWRITE8("6840ptm_68k", ptm6840_read, ptm6840_write, 0xff) |
| 1528 | | |
| 1529 | | /* characterizer */ |
| 1530 | 1594 | /* AM_RANGE(0xffd000, 0xffd00f) AM_READWRITE(characteriser16_r, characteriser16_w) Word-based version of old CHR??? */ |
| 1531 | 1595 | ADDRESS_MAP_END |
| 1532 | 1596 | |
| 1597 | |
| 1533 | 1598 | /* Deal 'Em */ |
| 1534 | 1599 | /* Deal 'Em was designed as an enhanced gamecard, to fit into an existing MPU4 cabinet |
| 1535 | 1600 | It's an unoffical addon, and does all its work through the existing 6809 CPU. |
| r7882 | r7883 | |
| 1638 | 1703 | cputag_set_input_line(device->machine, "maincpu", INPUT_LINE_NMI, state); |
| 1639 | 1704 | } |
| 1640 | 1705 | |
| 1706 | |
| 1641 | 1707 | /************************************* |
| 1642 | 1708 | * |
| 1643 | 1709 | * Machine driver |
| r7882 | r7883 | |
| 1718 | 1784 | |
| 1719 | 1785 | MDRV_PALETTE_LENGTH(16) |
| 1720 | 1786 | |
| 1721 | | /* 6840 PTM */ |
| 1722 | 1787 | MDRV_PTM6840_ADD("6840ptm_68k", ptm_vid_intf) |
| 1723 | 1788 | |
| 1724 | 1789 | MDRV_SPEAKER_STANDARD_MONO("mono") |
| r7882 | r7883 | |
| 1726 | 1791 | MDRV_SOUND_CONFIG(ay8910_config) |
| 1727 | 1792 | MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) |
| 1728 | 1793 | |
| 1729 | | MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")/* Present on all video cards */ |
| 1794 | /* Present on all video cards */ |
| 1795 | MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| 1730 | 1796 | MDRV_SOUND_ADD("saa", SAA1099, 8000000) |
| 1731 | | MDRV_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.00) |
| 1732 | | MDRV_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.00) |
| 1797 | MDRV_SOUND_ROUTE(0, "lspeaker", 0.5) |
| 1798 | MDRV_SOUND_ROUTE(1, "rspeaker", 0.5) |
| 1733 | 1799 | |
| 1734 | | /* ACIAs */ |
| 1735 | 1800 | MDRV_ACIA6850_ADD("acia6850_0", m6809_acia_if) |
| 1736 | 1801 | MDRV_ACIA6850_ADD("acia6850_1", m68k_acia_if) |
| 1737 | 1802 | MACHINE_DRIVER_END |
| 1738 | 1803 | |
| 1804 | static MACHINE_DRIVER_START( mating ) |
| 1805 | MDRV_IMPORT_FROM( mpu4_vid ) |
| 1806 | |
| 1807 | MDRV_SOUND_ADD("oki", OKIM6376, 64000) //? |
| 1808 | MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) |
| 1809 | MACHINE_DRIVER_END |
| 1810 | |
| 1739 | 1811 | static MACHINE_DRIVER_START( vgpoker ) |
| 1740 | 1812 | MDRV_IMPORT_FROM( mpu4_vid ) |
| 1741 | 1813 | MDRV_CPU_MODIFY("video") |
| r7882 | r7883 | |
| 1743 | 1815 | MACHINE_DRIVER_END |
| 1744 | 1816 | |
| 1745 | 1817 | |
| 1818 | |
| 1746 | 1819 | /* machine driver for Zenitone Deal 'Em board */ |
| 1747 | 1820 | static MACHINE_DRIVER_START( dealem ) |
| 1748 | 1821 | MDRV_MACHINE_START(mpu4mod2) /* main mpu4 board initialisation */ |
| r7882 | r7883 | |
| 1752 | 1825 | |
| 1753 | 1826 | MDRV_TIMER_ADD_PERIODIC("50hz",gen_50hz, HZ(100)) |
| 1754 | 1827 | |
| 1755 | | /* 6840 PTM */ |
| 1756 | 1828 | MDRV_PTM6840_ADD("6840ptm", ptm_ic2_intf) |
| 1757 | 1829 | |
| 1758 | 1830 | MDRV_PIA6821_ADD("pia_ic3", pia_ic3_intf) |
| r7882 | r7883 | |
| 1786 | 1858 | MACHINE_DRIVER_END |
| 1787 | 1859 | |
| 1788 | 1860 | |
| 1789 | | static DRIVER_INIT (crmaze) |
| 1861 | |
| 1862 | /* |
| 1863 | Characteriser (CHR) |
| 1864 | Despite the potential to radically overhaul the design, the 68k version of the chip appears to just be a |
| 1865 | 16-bit version of the previous design, with some endian-swapping necessary. It is unclear, however, if it has any |
| 1866 | capacity to affect lamp matrices in the same way as before, as no software seen makes any request for the 'lamp' row. |
| 1867 | It has been left in the table, as it clearly exists, but is unused. |
| 1868 | The 'quiz' games on the board did use an address-scrambling PAL for encryption, and the very last mod of this board had |
| 1869 | a characteriser capable of scrambling the ROM address lines. |
| 1870 | |
| 1871 | ^^ I think this is wrong (DH) |
| 1872 | |
| 1873 | The question data on the quiz games gets passed through the characterizer, the tables tested at startup are just a |
| 1874 | very specific test with known responses to make sure the device functions properly. Unless there is extra encryption |
| 1875 | applied to just the question ROMs then the assumptions made here are wrong, because the questions don't decode. |
| 1876 | |
| 1877 | It seems more likely that the Characterizer (PAL) acts as a challenge / response system, but various writes cause |
| 1878 | 'latching' behavior because if you study the sequence written at startup you can see that the same write value should |
| 1879 | generate different responses. |
| 1880 | |
| 1881 | Note: |
| 1882 | the 'challenge' part of the startup check is always the same |
| 1883 | |
| 1884 | |
| 1885 | */ |
| 1886 | |
| 1887 | struct mpu4_chr_table |
| 1790 | 1888 | { |
| 1889 | UINT8 call; |
| 1890 | UINT8 response; |
| 1891 | }; |
| 1892 | |
| 1893 | mpu4_chr_table* mpu4_current_chr_table; |
| 1894 | |
| 1895 | static WRITE16_HANDLER( characteriser16_w ) |
| 1896 | { |
| 1791 | 1897 | int x; |
| 1792 | | static const UINT8 chr_table[72]={0x00,0x84,0x94,0x3C,0xEC,0x5C,0xEC,0x50, |
| 1793 | | 0x2C,0x68,0x60,0xAC,0x74,0x00,0xAC,0x58, |
| 1794 | | 0xEC,0x7C,0xEC,0x58,0xE0,0x90,0x18,0xEC, |
| 1795 | | 0x54,0x28,0x68,0x44,0x84,0xB4,0x10,0x20, |
| 1796 | | 0x84,0xBC,0xE8,0x70,0x24,0x84,0xB8,0xE0, |
| 1797 | | 0x94,0x14,0x2C,0x64,0x8C,0x50,0x28,0x4C, |
| 1798 | | 0x6C,0x60,0xA0,0xBC,0xCC,0x78,0xE8,0x50, |
| 1799 | | 0x20,0xAC,0x74,0x04,0xA4,0x94,0x3C,0x00, |
| 1800 | | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; |
| 1898 | int call=data; |
| 1899 | LOG_CHR_FULL(("%04x Characteriser write offset %02X data %02X", cpu_get_previouspc(space->cpu),offset,data)); |
| 1900 | //printf("%04x Characteriser write offset %02X data %02X\n", cpu_get_previouspc(space->cpu),offset,data); |
| 1801 | 1901 | |
| 1802 | | for (x = 0; x < 72; x++) |
| 1902 | if (!mpu4_current_chr_table) |
| 1903 | fatalerror("No Characteriser Table @ %04x\n", cpu_get_previouspc(space->cpu)); |
| 1904 | |
| 1905 | for (x = prot_col; x < 64; x++) |
| 1803 | 1906 | { |
| 1804 | | MPU4_chr_data[(x)] = chr_table[(x)]; |
| 1907 | if (call == 0) |
| 1908 | { |
| 1909 | prot_col = 0; |
| 1910 | } |
| 1911 | else |
| 1912 | { |
| 1913 | if (mpu4_current_chr_table[(x)].call == call) |
| 1914 | { |
| 1915 | prot_col = x; |
| 1916 | LOG_CHR(("Characteriser find column %02X\n",prot_col)); |
| 1917 | //printf("Characteriser find column %02X\n",prot_col); |
| 1918 | |
| 1919 | break; |
| 1920 | } |
| 1921 | } |
| 1805 | 1922 | } |
| 1806 | 1923 | } |
| 1807 | 1924 | |
| 1808 | 1925 | |
| 1809 | | static DRIVER_INIT (mating) |
| 1926 | static READ16_HANDLER( characteriser16_r ) |
| 1810 | 1927 | { |
| 1811 | | int x; |
| 1812 | | static const UINT8 chr_table[72]={0x00,0x18,0xC8,0xA4,0x0C,0x80,0x0C,0x90, |
| 1813 | | 0x34,0x30,0x00,0x58,0xC8,0x84,0x4C,0xA0, |
| 1814 | | 0x4C,0xC0,0x3C,0xC8,0xA4,0x4C,0x80,0x0C, |
| 1815 | | 0x80,0x0C,0xE0,0x1C,0x88,0xA4,0x0C,0xA0, |
| 1816 | | 0x0C,0x80,0x4C,0xA0,0x3C,0x98,0xEC,0x84, |
| 1817 | | 0x0C,0xC0,0x1C,0xA8,0x84,0x0C,0xA0,0x5C, |
| 1818 | | 0xE8,0xA4,0x0C,0xD0,0x04,0x38,0xA8,0xC4, |
| 1819 | | 0x2C,0x90,0x44,0x18,0xE8,0x84,0x3C,0x00, |
| 1820 | | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; |
| 1928 | LOG_CHR_FULL(("%04x Characteriser read offset %02X,data %02X", cpu_get_previouspc(space->cpu),offset,mpu4_current_chr_table[prot_col].response)); |
| 1929 | LOG_CHR(("Characteriser read offset %02X \n",offset)); |
| 1930 | LOG_CHR(("Characteriser read data %02X \n",mpu4_current_chr_table[prot_col].response)); |
| 1821 | 1931 | |
| 1822 | | for (x = 0; x < 72; x++) |
| 1932 | // printf("%04x Characteriser read offset %02X,data %02X\n", cpu_get_previouspc(space->cpu),offset,mpu4_current_chr_table[prot_col].response); |
| 1933 | // printf("Characteriser read offset %02X \n",offset); |
| 1934 | // printf("Characteriser read data %02X \n",mpu4_current_chr_table[prot_col].response); |
| 1935 | |
| 1936 | if (!mpu4_current_chr_table) |
| 1937 | fatalerror("No Characteriser Table @ %04x\n", cpu_get_previouspc(space->cpu)); |
| 1938 | |
| 1939 | |
| 1940 | /* hack for 'invalid questions' error on time machine.. I guess it wants them to decode properly for startup check? */ |
| 1941 | if (cpu_get_previouspc(space->cpu)==0x283a) |
| 1823 | 1942 | { |
| 1824 | | MPU4_chr_data[(x)] = chr_table[(x)]; |
| 1943 | return 0x00; |
| 1825 | 1944 | } |
| 1945 | |
| 1946 | return mpu4_current_chr_table[prot_col].response; |
| 1826 | 1947 | } |
| 1827 | 1948 | |
| 1828 | 1949 | |
| 1950 | |
| 1951 | |
| 1952 | mpu4_chr_table adders_data[64] = { |
| 1953 | {0x00, 0x00}, {0x1A, 0x8C}, {0x04, 0x64}, {0x10, 0x84}, {0x18, 0x84}, {0x0F, 0xC4}, {0x13, 0x84}, {0x1B, 0x84}, |
| 1954 | {0x03, 0x9C}, {0x07, 0xF4}, {0x17, 0x04}, {0x1D, 0xCC}, {0x36, 0x24}, {0x35, 0x84}, {0x2B, 0xC4}, {0x28, 0x94}, |
| 1955 | {0x39, 0x54}, {0x21, 0x0C}, {0x22, 0x74}, {0x25, 0x0C}, {0x2C, 0x34}, {0x29, 0x04}, {0x31, 0x84}, {0x34, 0x84}, |
| 1956 | {0x0A, 0xC4}, {0x1F, 0x84}, {0x06, 0x9C}, {0x0E, 0xE4}, {0x1C, 0x84}, {0x12, 0x84}, {0x1E, 0x84}, {0x0D, 0xD4}, |
| 1957 | {0x14, 0x44}, {0x0A, 0x84}, {0x19, 0xC4}, {0x15, 0x84}, {0x06, 0x9C}, {0x0F, 0xE4}, {0x08, 0x84}, {0x1B, 0x84}, |
| 1958 | {0x1E, 0x84}, {0x04, 0x8C}, {0x01, 0x60}, {0x0C, 0x84}, {0x18, 0x84}, {0x1A, 0x84}, {0x11, 0x84}, {0x0B, 0xC4}, |
| 1959 | {0x03, 0x9C}, {0x17, 0xF4}, {0x10, 0x04}, {0x1D, 0xCC}, {0x0E, 0x24}, {0x07, 0x9C}, {0x12, 0xF4}, {0x09, 0x04}, |
| 1960 | {0x0D, 0x94}, {0x1F, 0x14}, {0x16, 0x44}, {0x05, 0x8C}, {0x13, 0x34}, {0x1C, 0x04}, {0x02, 0x9C}, {0x00, 0x00} |
| 1961 | }; |
| 1962 | |
| 1963 | mpu4_chr_table crmaze_data[64] = { |
| 1964 | {0x00, 0x00}, {0x1A, 0x84}, {0x04, 0x94}, {0x10, 0x3C}, {0x18, 0xEC}, {0x0F, 0x5C}, {0x13, 0xEC}, {0x1B, 0x50}, |
| 1965 | {0x03, 0x2C}, {0x07, 0x68}, {0x17, 0x60}, {0x1D, 0xAC}, {0x36, 0x74}, {0x35, 0x00}, {0x2B, 0xAC}, {0x28, 0x58}, |
| 1966 | {0x39, 0xEC}, {0x21, 0x7C}, {0x22, 0xEC}, {0x25, 0x58}, {0x2C, 0xE0}, {0x29, 0x90}, {0x31, 0x18}, {0x34, 0xEC}, |
| 1967 | {0x0A, 0x54}, {0x1F, 0x28}, {0x06, 0x68}, {0x0E, 0x44}, {0x1C, 0x84}, {0x12, 0xB4}, {0x1E, 0x10}, {0x0D, 0x20}, |
| 1968 | {0x14, 0x84}, {0x0A, 0xBC}, {0x19, 0xE8}, {0x15, 0x70}, {0x06, 0x24}, {0x0F, 0x84}, {0x08, 0xB8}, {0x1B, 0xE0}, |
| 1969 | {0x1E, 0x94}, {0x04, 0x14}, {0x01, 0x2C}, {0x0C, 0x64}, {0x18, 0x8C}, {0x1A, 0x50}, {0x11, 0x28}, {0x0B, 0x4C}, |
| 1970 | {0x03, 0x6C}, {0x17, 0x60}, {0x10, 0xA0}, {0x1D, 0xBC}, {0x0E, 0xCC}, {0x07, 0x78}, {0x12, 0xE8}, {0x09, 0x50}, |
| 1971 | {0x0D, 0x20}, {0x1F, 0xAC}, {0x16, 0x74}, {0x05, 0x04}, {0x13, 0xA4}, {0x1C, 0x94}, {0x02, 0x3C}, {0x00, 0x00} |
| 1972 | }; |
| 1973 | |
| 1974 | mpu4_chr_table crmazea_data[64] = { |
| 1975 | {0x00, 0x00}, {0x1A, 0x0C}, {0x04, 0x90}, {0x10, 0xE0}, {0x18, 0xA4}, {0x0F, 0xAC}, {0x13, 0x78}, {0x1B, 0x5C}, |
| 1976 | {0x03, 0xDC}, {0x07, 0xD4}, {0x17, 0xA0}, {0x1D, 0xEC}, {0x36, 0x78}, {0x35, 0x54}, {0x2B, 0x48}, {0x28, 0x50}, |
| 1977 | {0x39, 0xC8}, {0x21, 0xF8}, {0x22, 0xDC}, {0x25, 0x94}, {0x2C, 0xE0}, {0x29, 0x24}, {0x31, 0x0C}, {0x34, 0xD8}, |
| 1978 | {0x0A, 0x5C}, {0x1F, 0xD4}, {0x06, 0x68}, {0x0E, 0x18}, {0x1C, 0x14}, {0x12, 0xC8}, {0x1E, 0x38}, {0x0D, 0x5C}, |
| 1979 | {0x14, 0xDC}, {0x0A, 0x5C}, {0x19, 0xDC}, {0x15, 0xD4}, {0x06, 0x68}, {0x0F, 0x18}, {0x08, 0xD4}, {0x1B, 0x60}, |
| 1980 | {0x1E, 0x0C}, {0x04, 0x90}, {0x01, 0xE8}, {0x0C, 0xF8}, {0x18, 0xD4}, {0x1A, 0x60}, {0x11, 0x44}, {0x0B, 0x4C}, |
| 1981 | {0x03, 0xD8}, {0x17, 0xD4}, {0x10, 0xE8}, {0x1D, 0xF8}, {0x0E, 0x9C}, {0x07, 0xD4}, {0x12, 0xE8}, {0x09, 0x30}, |
| 1982 | {0x0D, 0x48}, {0x1F, 0xD8}, {0x16, 0xDC}, {0x05, 0x94}, {0x13, 0xE8}, {0x1C, 0x38}, {0x02, 0xDC}, {0x00, 0x00} |
| 1983 | }; |
| 1984 | |
| 1985 | mpu4_chr_table mating_data[64] = { |
| 1986 | {0x00, 0x00}, {0x1A, 0x18}, {0x04, 0xC8}, {0x10, 0xA4}, {0x18, 0x0C}, {0x0F, 0x80}, {0x13, 0x0C}, {0x1B, 0x90}, |
| 1987 | {0x03, 0x34}, {0x07, 0x30}, {0x17, 0x00}, {0x1D, 0x58}, {0x36, 0xC8}, {0x35, 0x84}, {0x2B, 0x4C}, {0x28, 0xA0}, |
| 1988 | {0x39, 0x4C}, {0x21, 0xC0}, {0x22, 0x3C}, {0x25, 0xC8}, {0x2C, 0xA4}, {0x29, 0x4C}, {0x31, 0x80}, {0x34, 0x0C}, |
| 1989 | {0x0A, 0x80}, {0x1F, 0x0C}, {0x06, 0xE0}, {0x0E, 0x1C}, {0x1C, 0x88}, {0x12, 0xA4}, {0x1E, 0x0C}, {0x0D, 0xA0}, |
| 1990 | {0x14, 0x0C}, {0x0A, 0x80}, {0x19, 0x4C}, {0x15, 0xA0}, {0x06, 0x3C}, {0x0F, 0x98}, {0x08, 0xEC}, {0x1B, 0x84}, |
| 1991 | {0x1E, 0x0C}, {0x04, 0xC0}, {0x01, 0x1C}, {0x0C, 0xA8}, {0x18, 0x84}, {0x1A, 0x0C}, {0x11, 0xA0}, {0x0B, 0x5C}, |
| 1992 | {0x03, 0xE8}, {0x17, 0xA4}, {0x10, 0x0C}, {0x1D, 0xD0}, {0x0E, 0x04}, {0x07, 0x38}, {0x12, 0xA8}, {0x09, 0xC4}, |
| 1993 | {0x0D, 0x2C}, {0x1F, 0x90}, {0x16, 0x44}, {0x05, 0x18}, {0x13, 0xE8}, {0x1C, 0x84}, {0x02, 0x3C}, {0x00, 0x00} |
| 1994 | }; |
| 1995 | |
| 1996 | mpu4_chr_table skiltrek_data[64] = { |
| 1997 | {0x00, 0x00}, {0x1A, 0x1C}, {0x04, 0xCC}, {0x10, 0x64}, {0x18, 0x1C}, {0x0F, 0x4C}, {0x13, 0x64}, {0x1B, 0x1C}, |
| 1998 | {0x03, 0xEC}, {0x07, 0xE4}, {0x17, 0x0C}, {0x1D, 0xD4}, {0x36, 0x84}, {0x35, 0x0C}, {0x2B, 0x44}, {0x28, 0x2C}, |
| 1999 | {0x39, 0xD4}, {0x21, 0x14}, {0x22, 0x34}, {0x25, 0x14}, {0x2C, 0x24}, {0x29, 0x0C}, {0x31, 0x44}, {0x34, 0x0C}, |
| 2000 | {0x0A, 0x44}, {0x1F, 0x1C}, {0x06, 0xEC}, {0x0E, 0x54}, {0x1C, 0x04}, {0x12, 0x0C}, {0x1E, 0x54}, {0x0D, 0x24}, |
| 2001 | {0x14, 0x0C}, {0x0A, 0x44}, {0x19, 0x9C}, {0x15, 0xEC}, {0x06, 0xE4}, {0x0F, 0x1C}, {0x08, 0x6C}, {0x1B, 0x54}, |
| 2002 | {0x1E, 0x04}, {0x04, 0x1C}, {0x01, 0xC8}, {0x0C, 0x64}, {0x18, 0x1C}, {0x1A, 0x4C}, {0x11, 0x64}, {0x0B, 0x1C}, |
| 2003 | {0x03, 0xEC}, {0x17, 0x64}, {0x10, 0x0C}, {0x1D, 0xD4}, {0x0E, 0x04}, {0x07, 0x3C}, {0x12, 0x6C}, {0x09, 0x44}, |
| 2004 | {0x0D, 0x2C}, {0x1F, 0x54}, {0x16, 0x84}, {0x05, 0x1C}, {0x13, 0xEC}, {0x1C, 0x44}, {0x02, 0x3C}, {0x00, 0x00} |
| 2005 | }; |
| 2006 | |
| 2007 | mpu4_chr_table timemchn_data[64] = { |
| 2008 | {0x00, 0x00}, {0x1A, 0x2C}, {0x04, 0x94}, {0x10, 0x14}, {0x18, 0x04}, {0x0F, 0x0C}, {0x13, 0xC4}, {0x1B, 0x0C}, |
| 2009 | {0x03, 0xD4}, {0x07, 0x64}, {0x17, 0x0C}, {0x1D, 0xB4}, {0x36, 0x04}, {0x35, 0x0C}, {0x2B, 0x84}, {0x28, 0x5C}, |
| 2010 | {0x39, 0xDC}, {0x21, 0x9C}, {0x22, 0xDC}, {0x25, 0x9C}, {0x2C, 0xDC}, {0x29, 0xCC}, {0x31, 0x84}, {0x34, 0x0C}, |
| 2011 | {0x0A, 0x84}, {0x1F, 0x0C}, {0x06, 0xD4}, {0x0E, 0x04}, {0x1C, 0x2C}, {0x12, 0xC4}, {0x1E, 0x0C}, {0x0D, 0xC4}, |
| 2012 | {0x14, 0x0C}, {0x0A, 0x84}, {0x19, 0x1C}, {0x15, 0xDC}, {0x06, 0xDC}, {0x0F, 0x8C}, {0x08, 0xD4}, {0x1B, 0x44}, |
| 2013 | {0x1E, 0x2C}, {0x04, 0x94}, {0x01, 0x20}, {0x0C, 0x0C}, {0x18, 0xA4}, {0x1A, 0x0C}, {0x11, 0xC4}, {0x0B, 0x0C}, |
| 2014 | {0x03, 0xD4}, {0x17, 0x14}, {0x10, 0x14}, {0x1D, 0x54}, {0x0E, 0x04}, {0x07, 0x6C}, {0x12, 0xC4}, {0x09, 0x4C}, |
| 2015 | {0x0D, 0xC4}, {0x1F, 0x0C}, {0x16, 0xC4}, {0x05, 0x2C}, {0x13, 0xC4}, {0x1C, 0x0C}, {0x02, 0xD4}, {0x00, 0x00} |
| 2016 | }; |
| 2017 | |
| 2018 | mpu4_chr_table strikeit_data[64] = { |
| 2019 | {0x00, 0x00}, {0x1A, 0xC4}, {0x04, 0xC4}, {0x10, 0x44}, {0x18, 0xC4}, {0x0F, 0x44}, {0x13, 0x44}, {0x1B, 0xC4}, |
| 2020 | {0x03, 0xCC}, {0x07, 0x3C}, {0x17, 0x5C}, {0x1D, 0x7C}, {0x36, 0x54}, {0x35, 0x24}, {0x2B, 0xC4}, {0x28, 0x4C}, |
| 2021 | {0x39, 0xB4}, {0x21, 0x84}, {0x22, 0xCC}, {0x25, 0x34}, {0x2C, 0x04}, {0x29, 0x4C}, {0x31, 0x14}, {0x34, 0x24}, |
| 2022 | {0x0A, 0xC4}, {0x1F, 0x44}, {0x06, 0xCC}, {0x0E, 0x14}, {0x1C, 0x04}, {0x12, 0x44}, {0x1E, 0xC4}, {0x0D, 0x4C}, |
| 2023 | {0x14, 0x1C}, {0x0A, 0x54}, {0x19, 0x2C}, {0x15, 0x1C}, {0x06, 0x7C}, {0x0F, 0xD4}, {0x08, 0x0C}, {0x1B, 0x94}, |
| 2024 | {0x1E, 0x04}, {0x04, 0xC4}, {0x01, 0xC0}, {0x0C, 0x4C}, {0x18, 0x94}, {0x1A, 0x04}, {0x11, 0x44}, {0x0B, 0x44}, |
| 2025 | {0x03, 0xCC}, {0x17, 0x1C}, {0x10, 0x7C}, {0x1D, 0x7C}, {0x0E, 0xD4}, {0x07, 0x8C}, {0x12, 0x1C}, {0x09, 0x5C}, |
| 2026 | {0x0D, 0x5C}, {0x1F, 0x5C}, {0x16, 0x7C}, {0x05, 0x74}, {0x13, 0x04}, {0x1C, 0xC4}, {0x02, 0xCC}, {0x00, 0x00} |
| 2027 | }; |
| 2028 | |
| 2029 | mpu4_chr_table turnover_data[64] = { |
| 2030 | {0x00, 0x00}, {0x1A, 0x1C}, {0x04, 0x6C}, {0x10, 0xA4}, {0x18, 0x0C}, {0x0F, 0x24}, {0x13, 0x0C}, {0x1B, 0x34}, |
| 2031 | {0x03, 0x94}, {0x07, 0x94}, {0x17, 0x44}, {0x1D, 0x5C}, {0x36, 0x6C}, {0x35, 0x24}, {0x2B, 0x1C}, {0x28, 0xAC}, |
| 2032 | {0x39, 0x64}, {0x21, 0x1C}, {0x22, 0xEC}, {0x25, 0x64}, {0x2C, 0x0C}, {0x29, 0xA4}, {0x31, 0x0C}, {0x34, 0x24}, |
| 2033 | {0x0A, 0x1C}, {0x1F, 0xAC}, {0x06, 0xE4}, {0x0E, 0x1C}, {0x1C, 0x2C}, {0x12, 0xA4}, {0x1E, 0x0C}, {0x0D, 0xA4}, |
| 2034 | {0x14, 0x0C}, {0x0A, 0x24}, {0x19, 0x5C}, {0x15, 0xEC}, {0x06, 0xE4}, {0x0F, 0x1C}, {0x08, 0xAC}, {0x1B, 0x24}, |
| 2035 | {0x1E, 0x1C}, {0x04, 0x6C}, {0x01, 0x60}, {0x0C, 0x0C}, {0x18, 0x34}, {0x1A, 0x04}, {0x11, 0x0C}, {0x0B, 0x24}, |
| 2036 | {0x03, 0x9C}, {0x17, 0xEC}, {0x10, 0xA4}, {0x1D, 0x4C}, {0x0E, 0x24}, {0x07, 0x9C}, {0x12, 0xEC}, {0x09, 0x24}, |
| 2037 | {0x0D, 0x0C}, {0x1F, 0x34}, {0x16, 0x04}, {0x05, 0x1C}, {0x13, 0xEC}, {0x1C, 0x24}, {0x02, 0x9C}, {0x00, 0x00} |
| 2038 | }; |
| 2039 | |
| 2040 | mpu4_chr_table eyesdown_data[64] = { |
| 2041 | {0x00, 0x00}, {0x1A, 0x8C}, {0x04, 0x64}, {0x10, 0x0C}, {0x18, 0xC4}, {0x0F, 0x0C}, {0x13, 0x54}, {0x1B, 0x14}, |
| 2042 | {0x03, 0x94}, {0x07, 0x94}, {0x17, 0x24}, {0x1D, 0xAC}, {0x36, 0x44}, {0x35, 0x0C}, {0x2B, 0x44}, {0x28, 0x1C}, |
| 2043 | {0x39, 0x7C}, {0x21, 0x6C}, {0x22, 0x74}, {0x25, 0x84}, {0x2C, 0x3C}, {0x29, 0x4C}, {0x31, 0x44}, {0x34, 0x0C}, |
| 2044 | {0x0A, 0x44}, {0x1F, 0x8C}, {0x06, 0x74}, {0x0E, 0x84}, {0x1C, 0x0C}, {0x12, 0x54}, {0x1E, 0x04}, {0x0D, 0x1C}, |
| 2045 | {0x14, 0x7C}, {0x0A, 0xCC}, {0x19, 0x64}, {0x15, 0x0C}, {0x06, 0x74}, {0x0F, 0x84}, {0x08, 0x3C}, {0x1B, 0x5C}, |
| 2046 | {0x1E, 0x4C}, {0x04, 0x64}, {0x01, 0x88}, {0x0C, 0x74}, {0x18, 0x04}, {0x1A, 0x8C}, {0x11, 0x54}, {0x0B, 0x04}, |
| 2047 | {0x03, 0x9C}, {0x17, 0x7C}, {0x10, 0x5C}, {0x1D, 0x7C}, {0x0E, 0xCC}, {0x07, 0x74}, {0x12, 0x04}, {0x09, 0x1C}, |
| 2048 | {0x0D, 0x5C}, {0x1F, 0x5C}, {0x16, 0x7C}, {0x05, 0x6C}, {0x13, 0x54}, {0x1C, 0x04}, {0x02, 0x9C}, {0x00, 0x00} |
| 2049 | }; |
| 2050 | |
| 2051 | mpu4_chr_table quidgrid_data[64] = { |
| 2052 | {0x00, 0x00}, {0x1A, 0x64}, {0x04, 0x64}, {0x10, 0x24}, {0x18, 0x64}, {0x0F, 0x64}, {0x13, 0x24}, {0x1B, 0x64}, |
| 2053 | {0x03, 0x74}, {0x07, 0x54}, {0x17, 0x84}, {0x1D, 0xA4}, {0x36, 0x24}, {0x35, 0x24}, {0x2B, 0x64}, {0x28, 0x24}, |
| 2054 | {0x39, 0xE4}, {0x21, 0x64}, {0x22, 0x74}, {0x25, 0x44}, {0x2C, 0x34}, {0x29, 0x04}, {0x31, 0x24}, {0x34, 0x24}, |
| 2055 | {0x0A, 0x64}, {0x1F, 0x64}, {0x06, 0x74}, {0x0E, 0x44}, {0x1C, 0x64}, {0x12, 0x24}, {0x1E, 0x64}, {0x0D, 0x24}, |
| 2056 | {0x14, 0x24}, {0x0A, 0x64}, {0x19, 0xE4}, {0x15, 0x24}, {0x06, 0x74}, {0x0F, 0x44}, {0x08, 0x34}, {0x1B, 0x14}, |
| 2057 | {0x1E, 0x04}, {0x04, 0x64}, {0x01, 0x60}, {0x0C, 0x24}, {0x18, 0x64}, {0x1A, 0x64}, {0x11, 0x24}, {0x0B, 0x64}, |
| 2058 | {0x03, 0x74}, {0x17, 0x04}, {0x10, 0x24}, {0x1D, 0xE4}, {0x0E, 0x64}, {0x07, 0x74}, {0x12, 0x04}, {0x09, 0x34}, |
| 2059 | {0x0D, 0x04}, {0x1F, 0x64}, {0x16, 0x24}, {0x05, 0x64}, {0x13, 0x24}, {0x1C, 0x64}, {0x02, 0x74}, {0x00, 0x00} |
| 2060 | }; |
| 2061 | |
| 2062 | static DRIVER_INIT (adders) |
| 2063 | { |
| 2064 | mpu4_current_chr_table = adders_data; |
| 2065 | } |
| 2066 | |
| 2067 | |
| 2068 | static DRIVER_INIT (crmaze) |
| 2069 | { |
| 2070 | mpu4_current_chr_table = crmaze_data; |
| 2071 | } |
| 2072 | |
| 2073 | |
| 2074 | static DRIVER_INIT (crmazea) |
| 2075 | { |
| 2076 | mpu4_current_chr_table = crmazea_data; |
| 2077 | } |
| 2078 | |
| 2079 | |
| 2080 | static DRIVER_INIT (mating) |
| 2081 | { |
| 2082 | const address_space *space = cputag_get_address_space(machine, "video", ADDRESS_SPACE_PROGRAM); |
| 2083 | running_device *device = devtag_get_device(machine, "oki"); |
| 2084 | |
| 2085 | /* The Mating Game has an extra 256kB RAM on the program card */ |
| 2086 | memory_install_ram(space, 0x600000, 0x63ffff, 0, 0, NULL); |
| 2087 | |
| 2088 | /* There is also an OKIM6376 present on the program card */ |
| 2089 | memory_install_readwrite16_device_handler(space, device, 0xffa040, 0xffa0ff, 0, 0, oki_r, oki_w ); |
| 2090 | |
| 2091 | mpu4_current_chr_table = mating_data; |
| 2092 | } |
| 2093 | |
| 2094 | |
| 2095 | static DRIVER_INIT (skiltrek) |
| 2096 | { |
| 2097 | mpu4_current_chr_table = skiltrek_data; |
| 2098 | } |
| 2099 | |
| 2100 | static DRIVER_INIT (timemchn) |
| 2101 | { |
| 2102 | mpu4_current_chr_table = timemchn_data; |
| 2103 | } |
| 2104 | |
| 2105 | static DRIVER_INIT (strikeit) |
| 2106 | { |
| 2107 | mpu4_current_chr_table = strikeit_data; |
| 2108 | } |
| 2109 | |
| 2110 | static DRIVER_INIT (turnover) |
| 2111 | { |
| 2112 | mpu4_current_chr_table = turnover_data; |
| 2113 | } |
| 2114 | |
| 2115 | static DRIVER_INIT (eyesdown) |
| 2116 | { |
| 2117 | mpu4_current_chr_table = eyesdown_data; |
| 2118 | } |
| 2119 | |
| 2120 | static DRIVER_INIT (quidgrid) |
| 2121 | { |
| 2122 | mpu4_current_chr_table = quidgrid_data; |
| 2123 | } |
| 2124 | |
| 2125 | |
| 2126 | |
| 1829 | 2127 | ROM_START( dealem ) |
| 1830 | 2128 | ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) |
| 1831 | 2129 | ROM_LOAD( "zenndlem.u6", 0x8000, 0x8000, CRC(571e5c05) SHA1(89b4c331407a04eae34bb187b036791e0a671533) ) |
| r7882 | r7883 | |
| 1854 | 2152 | VID_BIOS |
| 1855 | 2153 | ROM_END |
| 1856 | 2154 | |
| 2155 | ROM_START( prizeinv ) |
| 2156 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 2157 | ROM_LOAD("in220mpu4.p1", 0x00000, 0x04000, CRC(75ff4b1f) SHA1(a3adaad9a91c30fe6ff42dc2003c34a199b28807) ) |
| 2158 | |
| 2159 | ROM_REGION( 0x800000, "video", 0 ) |
| 2160 | ROM_LOAD16_BYTE( "in2-20p1.1", 0x000000, 0x10000, CRC(f34d9001) SHA1(2bae06f4a5a5510b15b918261ecb0de9e34a6b53) ) |
| 2161 | ROM_LOAD16_BYTE( "in2-20p1.2", 0x000001, 0x10000, CRC(1dc931b4) SHA1(c46626183edd52c7938c5edee2395aacb49e0730) ) |
| 2162 | ROM_LOAD16_BYTE( "in2-20p1.3", 0x020000, 0x10000, CRC(107aa448) SHA1(7b3d4053aaae3b97136cddefbc9edd5e61713ff7) ) |
| 2163 | ROM_LOAD16_BYTE( "in2-20p1.4", 0x020001, 0x10000, CRC(04933278) SHA1(97462aef782f7fe82b60f4bddcad0e6a6b50f3df) ) |
| 2164 | ROM_END |
| 2165 | |
| 2166 | ROM_START( blox ) |
| 2167 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 2168 | ROM_LOAD("blxv___2.0_0", 0x00000, 0x04000, CRC(b399b85e) SHA1(d36391fee4e3126754d6a0fa5f52fe05bc676930) ) |
| 2169 | |
| 2170 | ROM_REGION( 0x800000, "video", 0 ) |
| 2171 | ROM_LOAD16_BYTE( "blxv___2.0_1", 0x000000, 0x10000, CRC(68134eda) SHA1(b324ae1243164c7be7f5eced7ff93760e2176a4e) ) |
| 2172 | ROM_LOAD16_BYTE( "blxv___2.0_2", 0x000001, 0x10000, CRC(6b1f8588) SHA1(e8a443f062555f1ed228e1bfed2031927bcd7015) ) |
| 2173 | ROM_LOAD16_BYTE( "blxv___2.0_3", 0x020000, 0x10000, CRC(c62d704b) SHA1(bea0c9519063f1601f70372ccb49fb892fbd6e76) ) |
| 2174 | ROM_LOAD16_BYTE( "blxv___2.0_4", 0x020001, 0x10000, CRC(e431471a) SHA1(cf90dc48be3bc5e3c5a8efea5818dbc15fa442e9) ) |
| 2175 | ROM_LOAD16_BYTE( "blxv___2.0_5", 0x040001, 0x10000, CRC(98ac6bc7) SHA1(9575014ba21fa4330138a34f53e13d30d312bc8b) ) |
| 2176 | ROM_LOAD16_BYTE( "blxv___2.0_6", 0x040001, 0x10000, CRC(a3d92b5b) SHA1(1e7042d5eae4a19a01a3ef7d806c434886dc9f4d) ) |
| 2177 | ROM_END |
| 2178 | |
| 2179 | ROM_START( bloxd ) |
| 2180 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 2181 | ROM_LOAD("blxv_d_2.0_0", 0x00000, 0x04000, CRC(2e0891e1) SHA1(3e8ffd0d41227a8a1e311ca0c0bde7590e06dfbd) ) |
| 2182 | |
| 2183 | ROM_REGION( 0x800000, "video", 0 ) |
| 2184 | ROM_LOAD16_BYTE( "blxv___2.0_1", 0x000000, 0x10000, CRC(68134eda) SHA1(b324ae1243164c7be7f5eced7ff93760e2176a4e) ) |
| 2185 | ROM_LOAD16_BYTE( "blxv___2.0_2", 0x000001, 0x10000, CRC(6b1f8588) SHA1(e8a443f062555f1ed228e1bfed2031927bcd7015) ) |
| 2186 | ROM_LOAD16_BYTE( "blxv___2.0_3", 0x020000, 0x10000, CRC(c62d704b) SHA1(bea0c9519063f1601f70372ccb49fb892fbd6e76) ) |
| 2187 | ROM_LOAD16_BYTE( "blxv___2.0_4", 0x020001, 0x10000, CRC(e431471a) SHA1(cf90dc48be3bc5e3c5a8efea5818dbc15fa442e9) ) |
| 2188 | ROM_LOAD16_BYTE( "blxv___2.0_5", 0x040001, 0x10000, CRC(98ac6bc7) SHA1(9575014ba21fa4330138a34f53e13d30d312bc8b) ) |
| 2189 | ROM_LOAD16_BYTE( "blxv___2.0_6", 0x040001, 0x10000, CRC(a3d92b5b) SHA1(1e7042d5eae4a19a01a3ef7d806c434886dc9f4d) ) |
| 2190 | ROM_END |
| 2191 | |
| 2192 | |
| 1857 | 2193 | ROM_START( crmaze ) |
| 1858 | 2194 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 1859 | 2195 | VID_BIOS |
| r7882 | r7883 | |
| 1975 | 2311 | VID_BIOS |
| 1976 | 2312 | |
| 1977 | 2313 | ROM_REGION( 0x800000, "video", 0 ) |
| 1978 | | ROM_LOAD16_BYTE( "matd.p1", 0x000000, 0x080000, CRC(e660909f) SHA1(0acd990264fd7faf1f91a796d2438e8c2c7b83d1) ) |
| 1979 | | ROM_LOAD16_BYTE( "matd.p2", 0x000001, 0x080000, CRC(a4c7e9b4) SHA1(30148c0257181bb88159e02d2b7cd79995ee84a7) ) |
| 2314 | ROM_LOAD16_BYTE( "mats.p1", 0x000000, 0x080000, CRC(ebc7ea7e) SHA1(11015489a803ba5c8dbdafd632424bbd6080aece) ) |
| 2315 | ROM_LOAD16_BYTE( "mats.p2", 0x000001, 0x080000, CRC(a4c7e9b4) SHA1(30148c0257181bb88159e02d2b7cd79995ee84a7) ) |
| 1980 | 2316 | ROM_LOAD16_BYTE( "matg.p3", 0x100000, 0x080000, CRC(571f4e8e) SHA1(51babacb5d9fb1cc9e1e56a3b2a355597d04f178) ) |
| 1981 | 2317 | ROM_LOAD16_BYTE( "matg.p4", 0x100001, 0x080000, CRC(52d8657b) SHA1(e44e1db13c4abd4fedcd72df9dce1df594f74e44) ) |
| 1982 | 2318 | ROM_LOAD16_BYTE( "matg.p5", 0x200000, 0x080000, CRC(9f0c9552) SHA1(8b1197f20853e18841a8f64fd5ff58cdd0bd1dbd) ) |
| r7882 | r7883 | |
| 1994 | 2330 | ROM_LOAD( "matsnd.p4", 0x180000, 0x080000, CRC(d7e65c5b) SHA1(5575fb9f948158f2e94c986bf4bca9c9ee66a489) ) |
| 1995 | 2331 | ROM_END |
| 1996 | 2332 | |
| 1997 | | ROM_START( matinga ) |
| 2333 | ROM_START( matingd ) |
| 1998 | 2334 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 1999 | 2335 | VID_BIOS |
| 2000 | 2336 | |
| 2001 | 2337 | ROM_REGION( 0x800000, "video", 0 ) |
| 2002 | | ROM_LOAD16_BYTE( "mats.p1", 0x000000, 0x080000, CRC(ebc7ea7e) SHA1(11015489a803ba5c8dbdafd632424bbd6080aece) ) /* 3 bytes changed from above set...*/ |
| 2003 | | ROM_LOAD16_BYTE( "mats.p2", 0x000001, 0x080000, CRC(a4c7e9b4) SHA1(30148c0257181bb88159e02d2b7cd79995ee84a7) ) /* Just enough to disable the data logger */ |
| 2338 | ROM_LOAD16_BYTE( "matd.p1", 0x000000, 0x080000, CRC(e660909f) SHA1(0acd990264fd7faf1f91a796d2438e8c2c7b83d1) ) |
| 2339 | ROM_LOAD16_BYTE( "matd.p2", 0x000001, 0x080000, CRC(a4c7e9b4) SHA1(30148c0257181bb88159e02d2b7cd79995ee84a7) ) |
| 2004 | 2340 | ROM_LOAD16_BYTE( "matg.p3", 0x100000, 0x080000, CRC(571f4e8e) SHA1(51babacb5d9fb1cc9e1e56a3b2a355597d04f178) ) |
| 2005 | 2341 | ROM_LOAD16_BYTE( "matg.p4", 0x100001, 0x080000, CRC(52d8657b) SHA1(e44e1db13c4abd4fedcd72df9dce1df594f74e44) ) |
| 2006 | 2342 | ROM_LOAD16_BYTE( "matg.p5", 0x200000, 0x080000, CRC(9f0c9552) SHA1(8b1197f20853e18841a8f64fd5ff58cdd0bd1dbd) ) |
| r7882 | r7883 | |
| 2018 | 2354 | ROM_LOAD( "matsnd.p4", 0x180000, 0x080000, CRC(d7e65c5b) SHA1(5575fb9f948158f2e94c986bf4bca9c9ee66a489) ) |
| 2019 | 2355 | ROM_END |
| 2020 | 2356 | |
| 2021 | | /* Vegas Poker Protoype dumped by HIGHWAYMAN */ |
| 2357 | ROM_START( adders ) |
| 2358 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 2359 | VID_BIOS |
| 2360 | |
| 2361 | ROM_REGION( 0x800000, "video", 0 ) |
| 2362 | ROM_LOAD16_BYTE( "al.p1", 0x000000, 0x10000, CRC(97579eb2) SHA1(68f08ab73e0c8044de32f7eea1b3abc1fefff830) ) |
| 2363 | ROM_LOAD16_BYTE( "al.p2", 0x000001, 0x10000, CRC(ca877046) SHA1(7d0e1bb471b7acc89d04953ee5e0b34f64d58325) ) |
| 2364 | ROM_LOAD16_BYTE( "al.p3", 0x020000, 0x10000, CRC(92b5e1c4) SHA1(910126527ddb9d83f5c9c29caf2424ae4ebbc640) ) |
| 2365 | ROM_LOAD16_BYTE( "al.p4", 0x020001, 0x10000, CRC(5e0e3b23) SHA1(3862e7b873a1e2762032151289ce2ad886a8cc3c) ) |
| 2366 | ROM_LOAD16_BYTE( "al.q1", 0x040000, 0x10000, CRC(b9b50b70) SHA1(1887ab00ee004e3f27902d6880fa31277a981891) ) |
| 2367 | ROM_LOAD16_BYTE( "al.q2", 0x040001, 0x10000, CRC(1bed86ac) SHA1(8e6563b5441ad9ddd468a3d9ae906733fed7912a) ) |
| 2368 | ROM_LOAD16_BYTE( "al.q3", 0x060000, 0x10000, CRC(294d8f28) SHA1(9f9aca491ba6c4dc5cfb91da867990a9610c3a28) ) |
| 2369 | ROM_LOAD16_BYTE( "al.q4", 0x060001, 0x10000, CRC(aa3e9fbd) SHA1(59d0868f4c8b3f56ca31a11d2e6af83b202bb735) ) |
| 2370 | ROM_LOAD16_BYTE( "al.q5", 0x080000, 0x10000, CRC(503f4193) SHA1(86df379c736598ba59446961bf0666e155164e1d) ) |
| 2371 | ROM_LOAD16_BYTE( "al.q6", 0x080001, 0x10000, CRC(9fd77e52) SHA1(d8fdebb0fd57ab9ea9797dd386168581a45ebc62) ) |
| 2372 | ROM_LOAD16_BYTE( "al.q7", 0x0a0000, 0x10000, CRC(cf3fa7c7) SHA1(fa1edf09c6d3a8b5737474117b0306ef64f7741c) ) |
| 2373 | ROM_LOAD16_BYTE( "al.q8", 0x0a0001, 0x10000, CRC(55058a63) SHA1(cf9edef5264f4301be4ee11f221ab67a5183a603) ) |
| 2374 | ROM_LOAD16_BYTE( "al.q9", 0x0c0000, 0x10000, CRC(22274191) SHA1(9bee5709edcd853e96408f37447c0f5324610903) ) |
| 2375 | ROM_LOAD16_BYTE( "al.qa", 0x0c0001, 0x10000, CRC(1fe98b4d) SHA1(533afeaea42903905f6f1206bba1a023b141bdd9) ) |
| 2376 | ROM_END |
| 2377 | |
| 2378 | |
| 2379 | ROM_START( strikeit ) |
| 2380 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 2381 | VID_BIOS |
| 2382 | |
| 2383 | ROM_REGION( 0x800000, "video", 0 ) |
| 2384 | ROM_LOAD16_BYTE( "sils.p1", 0x000000, 0x020000, CRC(66ed6696) SHA1(a6aa68eb212254213db5573dfb9da1e9e06a8e39) ) |
| 2385 | ROM_LOAD16_BYTE( "sil.p2", 0x000001, 0x020000, CRC(1afc07b7) SHA1(38777d56192b640b003d8dbf4b793cee0c81d9b2) ) |
| 2386 | ROM_LOAD16_BYTE( "sil.p3", 0x040000, 0x020000, CRC(40f5851c) SHA1(0e3dc0dd2a257a955a1f250556d047481ae87269) ) |
| 2387 | ROM_LOAD16_BYTE( "sil.p4", 0x040001, 0x020000, CRC(657e297e) SHA1(306f40376115ca40099a0010650b5edc183a2c57) ) |
| 2388 | ROM_LOAD16_BYTE( "sil.p5", 0x080000, 0x020000, CRC(28bced09) SHA1(7ba5013f1e0f4e921581b23c4a1d4c005a043b66) ) |
| 2389 | ROM_LOAD16_BYTE( "sil.p6", 0x080001, 0x020000, CRC(6f5fc296) SHA1(bd32a937581df6b5a4f08e6ef40c37a2b4278936) ) |
| 2390 | |
| 2391 | ROM_LOAD( "strikeitlucky_questions", 0x0c0000, 0x020000, NO_DUMP ) // no dumps of question ROMs for this game.. |
| 2392 | ROM_END |
| 2393 | |
| 2394 | ROM_START( strikeitd ) |
| 2395 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 2396 | VID_BIOS |
| 2397 | |
| 2398 | ROM_REGION( 0x800000, "video", 0 ) |
| 2399 | ROM_LOAD16_BYTE( "sild.p1", 0x000000, 0x020000, CRC(6886e7c8) SHA1(9ef0895c9a8df762d17a3ea036bf0c6c2a440582) ) |
| 2400 | ROM_LOAD16_BYTE( "sil.p2", 0x000001, 0x020000, CRC(1afc07b7) SHA1(38777d56192b640b003d8dbf4b793cee0c81d9b2) ) |
| 2401 | ROM_LOAD16_BYTE( "sil.p3", 0x040000, 0x020000, CRC(40f5851c) SHA1(0e3dc0dd2a257a955a1f250556d047481ae87269) ) |
| 2402 | ROM_LOAD16_BYTE( "sil.p4", 0x040001, 0x020000, CRC(657e297e) SHA1(306f40376115ca40099a0010650b5edc183a2c57) ) |
| 2403 | ROM_LOAD16_BYTE( "sil.p5", 0x080000, 0x020000, CRC(28bced09) SHA1(7ba5013f1e0f4e921581b23c4a1d4c005a043b66) ) |
| 2404 | ROM_LOAD16_BYTE( "sil.p6", 0x080001, 0x020000, CRC(6f5fc296) SHA1(bd32a937581df6b5a4f08e6ef40c37a2b4278936) ) |
| 2405 | |
| 2406 | ROM_LOAD( "strikeitlucky_questions", 0x0c0000, 0x020000, NO_DUMP ) // no dumps of question ROMs for this game.. |
| 2407 | ROM_END |
| 2408 | |
| 2409 | ROM_START( strikeit2 ) |
| 2410 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 2411 | VID_BIOS |
| 2412 | |
| 2413 | ROM_REGION( 0x800000, "video", 0 ) |
| 2414 | ROM_LOAD16_BYTE( "sil3.p1", 0x000000, 0x020000, CRC(51c22f94) SHA1(dbdd30e67df4662d13b32a1df6cfabef2cf9471f) ) |
| 2415 | ROM_LOAD16_BYTE( "sil.p2", 0x000001, 0x020000, CRC(1afc07b7) SHA1(38777d56192b640b003d8dbf4b793cee0c81d9b2) ) |
| 2416 | ROM_LOAD16_BYTE( "sil.p3", 0x040000, 0x020000, CRC(40f5851c) SHA1(0e3dc0dd2a257a955a1f250556d047481ae87269) ) |
| 2417 | ROM_LOAD16_BYTE( "sil.p4", 0x040001, 0x020000, CRC(657e297e) SHA1(306f40376115ca40099a0010650b5edc183a2c57) ) |
| 2418 | ROM_LOAD16_BYTE( "sil.p5", 0x080000, 0x020000, CRC(28bced09) SHA1(7ba5013f1e0f4e921581b23c4a1d4c005a043b66) ) |
| 2419 | ROM_LOAD16_BYTE( "sil.p6", 0x080001, 0x020000, CRC(6f5fc296) SHA1(bd32a937581df6b5a4f08e6ef40c37a2b4278936) ) |
| 2420 | |
| 2421 | ROM_LOAD( "strikeitlucky_questions", 0x0c0000, 0x020000, NO_DUMP ) // no dumps of question ROMs for this game.. |
| 2422 | ROM_END |
| 2423 | |
| 2424 | ROM_START( strikeit2d ) |
| 2425 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 2426 | VID_BIOS |
| 2427 | |
| 2428 | ROM_REGION( 0x800000, "video", 0 ) |
| 2429 | ROM_LOAD16_BYTE( "sil3d.p1", 0x000000, 0x020000, CRC(82def1b5) SHA1(d3e90e8e4e905a3779889305bb6441907d9169f1) ) |
| 2430 | ROM_LOAD16_BYTE( "sil.p2", 0x000001, 0x020000, CRC(1afc07b7) SHA1(38777d56192b640b003d8dbf4b793cee0c81d9b2) ) |
| 2431 | ROM_LOAD16_BYTE( "sil.p3", 0x040000, 0x020000, CRC(40f5851c) SHA1(0e3dc0dd2a257a955a1f250556d047481ae87269) ) |
| 2432 | ROM_LOAD16_BYTE( "sil.p4", 0x040001, 0x020000, CRC(657e297e) SHA1(306f40376115ca40099a0010650b5edc183a2c57) ) |
| 2433 | ROM_LOAD16_BYTE( "sil.p5", 0x080000, 0x020000, CRC(28bced09) SHA1(7ba5013f1e0f4e921581b23c4a1d4c005a043b66) ) |
| 2434 | ROM_LOAD16_BYTE( "sil.p6", 0x080001, 0x020000, CRC(6f5fc296) SHA1(bd32a937581df6b5a4f08e6ef40c37a2b4278936) ) |
| 2435 | |
| 2436 | ROM_LOAD( "strikeitlucky_questions", 0x0c0000, 0x020000, NO_DUMP ) // no dumps of question ROMs for this game.. |
| 2437 | ROM_END |
| 2438 | |
| 2439 | ROM_START( eyesdown ) |
| 2440 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 2441 | VID_BIOS |
| 2442 | |
| 2443 | ROM_REGION( 0x800000, "video", 0 ) |
| 2444 | ROM_LOAD16_BYTE( "eds.p1", 0x000000, 0x010000, CRC(bd4f4c5d) SHA1(4ad34d92d45c0b8c70af8454525dd669cab94c5c) ) |
| 2445 | ROM_LOAD16_BYTE( "ed.p2", 0x000001, 0x010000, CRC(8804b926) SHA1(cf9d49ca090a435819f2cd2d32dec3a6767f9e10) ) |
| 2446 | ROM_LOAD16_BYTE( "ed.p3", 0x020000, 0x010000, CRC(969d2264) SHA1(b55f6881852f81ec9fb2c57c8137c872f4714710) ) |
| 2447 | ROM_LOAD16_BYTE( "ed.p4", 0x020001, 0x010000, CRC(80d9addd) SHA1(f6359354c928e69a90cdf6d4f514c4992d3fa64c) ) |
| 2448 | |
| 2449 | ROM_LOAD( "eyesdown_questions", 0x040000, 0x020000, NO_DUMP ) // no dumps of question ROMs for this game.. |
| 2450 | ROM_END |
| 2451 | |
| 2452 | ROM_START( eyesdownd ) |
| 2453 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 2454 | VID_BIOS |
| 2455 | |
| 2456 | ROM_REGION( 0x800000, "video", 0 ) |
| 2457 | ROM_LOAD16_BYTE( "edd.p1", 0x000000, 0x010000, CRC(369a145c) SHA1(c54305690798086b4f809f38d1a6454d1d34fd0c) ) |
| 2458 | ROM_LOAD16_BYTE( "ed.p2", 0x000001, 0x010000, CRC(8804b926) SHA1(cf9d49ca090a435819f2cd2d32dec3a6767f9e10) ) |
| 2459 | ROM_LOAD16_BYTE( "ed.p3", 0x020000, 0x010000, CRC(969d2264) SHA1(b55f6881852f81ec9fb2c57c8137c872f4714710) ) |
| 2460 | ROM_LOAD16_BYTE( "ed.p4", 0x020001, 0x010000, CRC(80d9addd) SHA1(f6359354c928e69a90cdf6d4f514c4992d3fa64c) ) |
| 2461 | |
| 2462 | ROM_LOAD( "eyesdown_questions", 0x040000, 0x020000, NO_DUMP ) // no dumps of question ROMs for this game.. |
| 2463 | ROM_END |
| 2464 | |
| 2465 | ROM_START( quidgrid ) |
| 2466 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 2467 | VID_BIOS |
| 2468 | |
| 2469 | ROM_REGION( 0x800000, "video", 0 ) |
| 2470 | ROM_LOAD16_BYTE( "qgs.p1", 0x000000, 0x010000, CRC(e6d072a9) SHA1(b2d656818c2fb12a26ef8a170152087336c00c66) ) |
| 2471 | ROM_LOAD16_BYTE( "qg.p2", 0x000001, 0x010000, CRC(e4d74b11) SHA1(d23ccc57c54823ffaa7869ca824e049dc80f8945) ) |
| 2472 | ROM_LOAD16_BYTE( "qg.p3", 0x020000, 0x010000, CRC(5dda7cd8) SHA1(246a801e862990aade98fa358477e53707714b42) ) |
| 2473 | ROM_LOAD16_BYTE( "qg.p4", 0x020001, 0x010000, CRC(2106cf5d) SHA1(2073589775139ad92daef05a67afb2c70ece168c) ) |
| 2474 | |
| 2475 | ROM_LOAD( "quidgrid_questions", 0x040000, 0x020000, NO_DUMP ) // no dumps of question ROMs for this game.. |
| 2476 | ROM_END |
| 2477 | |
| 2478 | ROM_START( quidgridd ) |
| 2479 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 2480 | VID_BIOS |
| 2481 | |
| 2482 | ROM_REGION( 0x800000, "video", 0 ) |
| 2483 | ROM_LOAD16_BYTE( "qgd.p1", 0x000000, 0x010000, CRC(c8d37bdf) SHA1(e39a41015dd551fd62efa52faf2c5106bf7d23ac) ) |
| 2484 | ROM_LOAD16_BYTE( "qg.p2", 0x000001, 0x010000, CRC(e4d74b11) SHA1(d23ccc57c54823ffaa7869ca824e049dc80f8945) ) |
| 2485 | ROM_LOAD16_BYTE( "qg.p3", 0x020000, 0x010000, CRC(5dda7cd8) SHA1(246a801e862990aade98fa358477e53707714b42) ) |
| 2486 | ROM_LOAD16_BYTE( "qg.p4", 0x020001, 0x010000, CRC(2106cf5d) SHA1(2073589775139ad92daef05a67afb2c70ece168c) ) |
| 2487 | |
| 2488 | ROM_LOAD( "quidgrid_questions", 0x040000, 0x020000, NO_DUMP ) // no dumps of question ROMs for this game.. |
| 2489 | ROM_END |
| 2490 | |
| 2491 | ROM_START( quidgrid2 ) |
| 2492 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 2493 | VID_BIOS |
| 2494 | |
| 2495 | ROM_REGION( 0x800000, "video", 0 ) |
| 2496 | ROM_LOAD16_BYTE( "q2gs.p1", 0x000000, 0x010000, CRC(6d4b92c0) SHA1(05777e0ecc8bf9f3564d8395bb7bfa245498d132) ) |
| 2497 | ROM_LOAD16_BYTE( "q2g.p2", 0x000001, 0x010000, CRC(9bf74ae3) SHA1(11e75acad496a9304f612714afbef90e48d1b9cb) ) |
| 2498 | ROM_LOAD16_BYTE( "q2g.p3", 0x020000, 0x010000, CRC(78555155) SHA1(e1218fc00f08c19a0cafb203e46044efa617ac16) ) |
| 2499 | ROM_LOAD16_BYTE( "q2g.p4", 0x020001, 0x010000, CRC(2a4295b6) SHA1(2aa0b5dbe6b934a7a4c8069c91fd6d85cae02836) ) |
| 2500 | |
| 2501 | ROM_LOAD( "quidgrid_questions", 0x040000, 0x020000, NO_DUMP ) // no dumps of question ROMs for this game.. |
| 2502 | ROM_END |
| 2503 | |
| 2504 | ROM_START( quidgrid2d ) |
| 2505 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 2506 | VID_BIOS |
| 2507 | |
| 2508 | ROM_REGION( 0x800000, "video", 0 ) |
| 2509 | ROM_LOAD16_BYTE( "q2gd.p1", 0x000000, 0x010000, CRC(26185449) SHA1(921d355020788d53e8ffa83af44223dbe5a2dd5e) ) |
| 2510 | ROM_LOAD16_BYTE( "q2g.p2", 0x000001, 0x010000, CRC(9bf74ae3) SHA1(11e75acad496a9304f612714afbef90e48d1b9cb) ) |
| 2511 | ROM_LOAD16_BYTE( "q2g.p3", 0x020000, 0x010000, CRC(78555155) SHA1(e1218fc00f08c19a0cafb203e46044efa617ac16) ) |
| 2512 | ROM_LOAD16_BYTE( "q2g.p4", 0x020001, 0x010000, CRC(2a4295b6) SHA1(2aa0b5dbe6b934a7a4c8069c91fd6d85cae02836) ) |
| 2513 | |
| 2514 | ROM_LOAD( "quidgrid_questions", 0x040000, 0x020000, NO_DUMP ) // no dumps of question ROMs for this game.. |
| 2515 | ROM_END |
| 2516 | |
| 2517 | |
| 2518 | /* Vegas Poker Prototype dumped by HIGHWAYMAN */ |
| 2022 | 2519 | ROM_START( vgpoker ) |
| 2023 | 2520 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 2024 | 2521 | ROM_LOAD("comms-v2.0.bin", 0x00000, 0x10000, CRC(1717581f) SHA1(40f8cae39a2ab0c89d2bbfd8a37725aaae229c96)) |
| r7882 | r7883 | |
| 2065 | 2562 | The real Deal 'Em ran on Summit Coin hardware, and was made by someone else. |
| 2066 | 2563 | A further different release was made in 2000, running on the Barcrest MPU4 Video, rather than this one. */ |
| 2067 | 2564 | |
| 2068 | | GAME( 1987, dealem, 0, dealem, dealem, 0, ROT0, "Zenitone", "Deal 'Em (MPU4 Conversion Kit, v7.0)", GAME_IMPERFECT_GRAPHICS ) |
| 2565 | GAME( 1987, dealem, 0, dealem, dealem, 0, ROT0, "Zenitone", "Deal 'Em (MPU4 Conversion Kit, v7.0)", GAME_IMPERFECT_GRAPHICS ) |
| 2069 | 2566 | |
| 2070 | | GAME( 199?, bctvidbs,0, mpu4mod2, mpu4, 0, ROT0, "Barcrest", "MPU4 Video Firmware", GAME_IS_BIOS_ROOT ) |
| 2567 | GAME( 199?, bctvidbs, 0, mpu4mod2, mpu4, 0, ROT0, "Barcrest", "MPU4 Video Firmware", GAME_IS_BIOS_ROOT ) |
| 2071 | 2568 | |
| 2072 | | GAME( 1994?,crmaze, bctvidbs,mpu4_vid, crmaze, crmaze,ROT0, "Barcrest", "The Crystal Maze Team Challenge (SWP)", GAME_NOT_WORKING|GAME_NO_SOUND ) |
| 2073 | | GAME( 1992?,crmazea, crmaze, mpu4_vid, crmaze, crmaze,ROT0, "Barcrest", "The Crystal Maze (AMLD Version)", GAME_NOT_WORKING|GAME_NO_SOUND ) |
| 2074 | | GAME( 1993?,crmazeb, crmaze, mpu4_vid, crmaze, 0, ROT0, "Barcrest", "The New Crystal Maze Featuring Ocean Zone (AMLD Version)", GAME_NOT_WORKING|GAME_NO_SOUND ) /* unprotected? */ |
| 2075 | | GAME( 1990, turnover,bctvidbs,mpu4_vid, mpu4, 0, ROT0, "Barcrest", "Turnover", GAME_NOT_WORKING|GAME_NO_SOUND ) /* unprotected? */ |
| 2076 | | GAME( 1992, skiltrek,bctvidbs,mpu4_vid, mpu4, 0, ROT0, "Barcrest", "Skill Trek", GAME_NOT_WORKING|GAME_NO_SOUND ) /* unprotected? */ |
| 2077 | | GAME( 1990, timemchn,bctvidbs,mpu4_vid, mpu4, 0, ROT0, "Barcrest", "Time Machine (v2.0)", GAME_NOT_WORKING|GAME_NO_SOUND ) /* unprotected? */ |
| 2078 | | GAME( 199?, mating, bctvidbs,mpu4_vid, mpu4, mating,ROT0, "Barcrest", "The Mating Game (Datapak)", GAME_NOT_WORKING|GAME_NO_SOUND ) |
| 2079 | | GAME( 199?, matinga, mating, mpu4_vid, mpu4, mating,ROT0, "Barcrest", "The Mating Game (Standard)", GAME_NOT_WORKING|GAME_NO_SOUND ) |
| 2080 | | GAME( 199?, vgpoker, 0, vgpoker, mpu4, 0, ROT0, "BwB", "Vegas Poker (Prototype)", GAME_NOT_WORKING|GAME_NO_SOUND ) |
| 2569 | /* Complete sets */ |
| 2570 | GAME( 1994, crmaze, bctvidbs, mpu4_vid, crmaze, crmaze, ROT0, "Barcrest", "The Crystal Maze Team Challenge (SWP)", GAME_NOT_WORKING ) |
| 2571 | GAME( 1993, crmazea, crmaze, mpu4_vid, crmaze, crmazea, ROT0, "Barcrest", "The Crystal Maze (AMLD Version)", GAME_NOT_WORKING ) |
| 2572 | GAME( 1993, crmazeb, crmaze, mpu4_vid, crmaze, 0, ROT0, "Barcrest", "The New Crystal Maze Featuring Ocean Zone (AMLD Version)", GAME_NOT_WORKING ) /* unprotected? bootleg? */ |
| 2081 | 2573 | |
| 2082 | | GAMEL(1989?,connect4,0, mpu4mod2, connect4, connect4, ROT0,"Dolbeck Systems", "Connect 4", GAME_IMPERFECT_GRAPHICS|GAME_REQUIRES_ARTWORK,layout_connect4 ) |
| 2083 | | GAME( 198?, mpu4utst,0, mpu4mod2, mpu4, 0, ROT0,"Barcrest", "MPU4 Unit Test (Program 4)", 0 ) |
| 2084 | | GAME( 198?, mpu4tst2,0, mpu4mod2, mpu4, 0, ROT0,"Barcrest", "MPU4 Unit Test (Program 2)", 0 ) |
| 2085 | | GAME( 198?, mpu4met0,0, mpu4mod2, mpu4, 0, ROT0,"Barcrest", "MPU4 Meter Clear ROM", 0 ) |
| 2574 | GAME( 199?, turnover, bctvidbs, mpu4_vid, mpu4, turnover, ROT0, "Barcrest", "Turnover (v2.3)", GAME_NOT_WORKING ) |
| 2575 | |
| 2576 | GAME( 1990, skiltrek, bctvidbs, mpu4_vid, mpu4, skiltrek, ROT0, "Barcrest", "Skill Trek (v1.1)", GAME_NOT_WORKING ) |
| 2577 | |
| 2578 | GAME( 1989, adders, bctvidbs, mpu4_vid, mpu4, adders, ROT0, "Barcrest", "Adders and Ladders (v2.0)", GAME_NOT_WORKING ) |
| 2579 | |
| 2580 | GAME( 1989, timemchn, bctvidbs, mpu4_vid, mpu4, timemchn, ROT0, "Barcrest", "Time Machine (v2.0)", GAME_NOT_WORKING ) |
| 2581 | |
| 2582 | GAME( 199?, mating, bctvidbs, mating, mpu4, mating, ROT0, "Barcrest", "The Mating Game (v0.2)", GAME_NOT_WORKING ) |
| 2583 | GAME( 199?, matingd, mating, mating, mpu4, mating, ROT0, "Barcrest", "The Mating Game (v0.2d)", GAME_NOT_WORKING ) |
| 2584 | |
| 2585 | /* Barquest */ |
| 2586 | /* Barquest II */ |
| 2587 | /* Wize Move */ |
| 2588 | |
| 2589 | /* Games below are missing question ROMs */ |
| 2590 | GAME( 199?, strikeit, bctvidbs, mpu4_vid, mpu4, strikeit, ROT0, "Barcrest", "Strike it Lucky (v0.5)", GAME_NOT_WORKING ) |
| 2591 | GAME( 199?, strikeitd, strikeit, mpu4_vid, mpu4, strikeit, ROT0, "Barcrest", "Strike it Lucky (v0.5d)", GAME_NOT_WORKING ) |
| 2592 | GAME( 199?, strikeit2, strikeit, mpu4_vid, mpu4, strikeit, ROT0, "Barcrest", "Strike it Lucky (v0.53)", GAME_NOT_WORKING ) |
| 2593 | GAME( 199?, strikeit2d,strikeit, mpu4_vid, mpu4, strikeit, ROT0, "Barcrest", "Strike it Lucky (v0.53d)", GAME_NOT_WORKING ) |
| 2594 | |
| 2595 | GAME( 199?, eyesdown, bctvidbs, mpu4_vid, mpu4, eyesdown, ROT0, "Barcrest", "Eyes Down (v1.3)", GAME_NOT_WORKING ) |
| 2596 | GAME( 199?, eyesdownd, eyesdown, mpu4_vid, mpu4, eyesdown, ROT0, "Barcrest", "Eyes Down (v1.3d)", GAME_NOT_WORKING ) |
| 2597 | |
| 2598 | GAME( 199?, quidgrid, bctvidbs, mpu4_vid, mpu4, quidgrid, ROT0, "Barcrest", "Ten Quid Grid (v1.2)", GAME_NOT_WORKING ) |
| 2599 | GAME( 199?, quidgridd, quidgrid, mpu4_vid, mpu4, quidgrid, ROT0, "Barcrest", "Ten Quid Grid (v1.2d)", GAME_NOT_WORKING ) |
| 2600 | GAME( 199?, quidgrid2, quidgrid, mpu4_vid, mpu4, quidgrid, ROT0, "Barcrest", "Ten Quid Grid (v2.4)", GAME_NOT_WORKING ) |
| 2601 | GAME( 199?, quidgrid2d,quidgrid, mpu4_vid, mpu4, quidgrid, ROT0, "Barcrest", "Ten Quid Grid (v2.4d)", GAME_NOT_WORKING ) |
| 2602 | |
| 2603 | /* Games below are newer BwB games and use their own BIOS ROMs */ |
| 2604 | GAME( 199?, vgpoker, 0, vgpoker, mpu4, 0, ROT0, "BwB", "Vegas Poker (prototype, release 2)", GAME_NOT_WORKING ) |
| 2605 | GAME( 199?, prizeinv, 0, mpu4_vid, mpu4, 0, ROT0, "BwB", "Prize Space Invaders (20\" v1.1)", GAME_NOT_WORKING ) |
| 2606 | GAME( 199?, blox, 0, mpu4_vid, mpu4, 0, ROT0, "BwB", "Blox (v2.0)", GAME_NOT_WORKING ) |
| 2607 | GAME( 199?, bloxd, blox, mpu4_vid, mpu4, 0, ROT0, "BwB", "Blox (v2.0, datapak)", GAME_NOT_WORKING ) |
| 2608 | |
| 2609 | /* Games below are non-video (why are they in this file? not mpu4.c?) */ |
| 2610 | GAMEL(1989?, connect4, 0, mpu4mod2, connect4, connect4, ROT0, "Dolbeck Systems","Connect 4", GAME_IMPERFECT_GRAPHICS|GAME_REQUIRES_ARTWORK,layout_connect4 ) |
| 2611 | GAME( 198?, mpu4utst, 0, mpu4mod2, mpu4, 0, ROT0, "Barcrest", "MPU4 Unit Test (Program 4)", 0 ) |
| 2612 | GAME( 198?, mpu4tst2, 0, mpu4mod2, mpu4, 0, ROT0, "Barcrest", "MPU4 Unit Test (Program 2)", 0 ) |
| 2613 | GAME( 198?, mpu4met0, 0, mpu4mod2, mpu4, 0, ROT0, "Barcrest", "MPU4 Meter Clear ROM", 0 ) |
src/mame/drivers/funworld.c
| r7882 | r7883 | |
| 36 | 36 | * Bottle 10 (italian, set 2), C.M.C., 1996. |
| 37 | 37 | * Royal Card (austrian, set 1), TAB-Austria, 1991. |
| 38 | 38 | * Royal Card (austrian, set 2), TAB-Austria, 1991. |
| 39 | * Royal Card (austrian/polish, set 3), TAB-Austria, 1991. |
| 40 | * Royal Card (austrian, set 4), TAB-Austria, 1991. |
| 41 | * Royal Card (austrian, set 5), TAB-Austria, 1991. |
| 42 | * Royal Card (austrian, set 6), TAB-Austria, 1991. |
| 39 | 43 | * Royal Card (slovak, encrypted), Evona Electronic, 1991. |
| 40 | 44 | * Royal Card Professional 2.0, Digital Dreams, 1993. |
| 41 | 45 | * Lucky Lady (3x3 deal), TAB-Austria, 1991. |
| r7882 | r7883 | |
| 701 | 705 | - Replaced the jolyc980 default NVRAM with one totally clean. |
| 702 | 706 | Temporal and total meters are cleared to zero. |
| 703 | 707 | |
| 708 | [2010/04/18] |
| 709 | - Replaced the Fun World Quiz bad ROMs with good ones. |
| 710 | - Fixed the Fun World Quiz graphics and colors. |
| 711 | - Cleaned-up the flags for non working games. |
| 712 | - Modified the default lamps layout to include the bet lamp. |
| 713 | - Cleaned-up the Fun World Quiz inputs. |
| 714 | - Added 4 new Royal Card sets. Reworked parent/clone relationship. |
| 715 | (delete the old .cfg and .nv files to have them working properly). |
| 716 | - Splitted the Royal Card machine driver. This is needed to access |
| 717 | different halves of the bipolar PROM. |
| 718 | - Now principal Royal Card sets have a working bet button. |
| 719 | - Added default NVRAM to the new sets. |
| 704 | 720 | |
| 705 | 721 | |
| 722 | |
| 706 | 723 | *** TO DO *** |
| 707 | 724 | |
| 708 | 725 | - Figure out the royalcdc, jokercrd and multiwin encryption. |
| r7882 | r7883 | |
| 1358 | 1375 | PORT_DIPNAME( 0x01, 0x01, "State" ) PORT_DIPLOCATION("SW1:8") |
| 1359 | 1376 | PORT_DIPSETTING( 0x00, "Keyboard Test" ) |
| 1360 | 1377 | PORT_DIPSETTING( 0x01, "Play" ) |
| 1361 | | PORT_DIPNAME( 0x02, 0x00, "Remote" ) PORT_DIPLOCATION("SW1:7") /* listed as 'Coin-C' in some sources */ |
| 1378 | PORT_DIPNAME( 0x02, 0x02, "Remote" ) PORT_DIPLOCATION("SW1:7") /* listed as 'Coin-C' in some sources */ |
| 1362 | 1379 | PORT_DIPSETTING( 0x00, "10 Points/Pulse" ) |
| 1363 | | PORT_DIPSETTING( 0x02, "50 Points/Pulse" ) |
| 1364 | | PORT_DIPNAME( 0x04, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:6") |
| 1380 | PORT_DIPSETTING( 0x02, "100 Points/Pulse" ) |
| 1381 | PORT_DIPNAME( 0x04, 0x04, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:6") |
| 1365 | 1382 | PORT_DIPSETTING( 0x00, "5 Points/Coin" ) |
| 1366 | 1383 | PORT_DIPSETTING( 0x04, "10 Points/Coin" ) |
| 1367 | | PORT_DIPNAME( 0x08, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:5") |
| 1384 | PORT_DIPNAME( 0x08, 0x08, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:5") |
| 1368 | 1385 | PORT_DIPSETTING( 0x00, "5 Points/Coin" ) |
| 1369 | 1386 | PORT_DIPSETTING( 0x08, "10 Points/Coin" ) |
| 1370 | | PORT_DIPNAME( 0x10, 0x00, "Insert" ) PORT_DIPLOCATION("SW1:4") |
| 1387 | PORT_DIPNAME( 0x10, 0x10, "Insert" ) PORT_DIPLOCATION("SW1:4") |
| 1371 | 1388 | PORT_DIPSETTING( 0x00, "Dattl Insert" ) |
| 1372 | 1389 | PORT_DIPSETTING( 0x10, "TAB Insert" ) |
| 1373 | 1390 | PORT_DIPNAME( 0x20, 0x00, "Joker" ) PORT_DIPLOCATION("SW1:3") |
| r7882 | r7883 | |
| 1379 | 1396 | |
| 1380 | 1397 | /* after nvram init, set the following one to 'manual' |
| 1381 | 1398 | to allow the remote credits mode to work */ |
| 1382 | | PORT_DIPNAME( 0x80, 0x00, "Payout" ) PORT_DIPLOCATION("SW1:1") |
| 1399 | PORT_DIPNAME( 0x80, 0x80, "Payout" ) PORT_DIPLOCATION("SW1:1") |
| 1383 | 1400 | PORT_DIPSETTING( 0x00, "Hopper" ) |
| 1384 | 1401 | PORT_DIPSETTING( 0x80, "Manual Payout SW" ) |
| 1385 | 1402 | INPUT_PORTS_END |
| r7882 | r7883 | |
| 1880 | 1897 | |
| 1881 | 1898 | static INPUT_PORTS_START( funquiz ) |
| 1882 | 1899 | PORT_START("IN0") |
| 1883 | | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-1") PORT_CODE(KEYCODE_Q) |
| 1900 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1884 | 1901 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 ) // start? |
| 1885 | 1902 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 ) // start? |
| 1886 | 1903 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START3 ) // start? |
| 1887 | 1904 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START4 ) // start or clear? |
| 1888 | | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-6") PORT_CODE(KEYCODE_W) |
| 1889 | | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("0-7") PORT_CODE(KEYCODE_E) |
| 1890 | | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY // joystick right, enter & exit bookkeeping??? |
| 1905 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1906 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1907 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY // joystick right |
| 1891 | 1908 | |
| 1892 | 1909 | PORT_START("IN1") |
| 1893 | 1910 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY // joystick left |
| 1894 | 1911 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY // joystick up |
| 1895 | 1912 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY // joystick down |
| 1896 | | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-4") PORT_CODE(KEYCODE_R) |
| 1897 | | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-5") PORT_CODE(KEYCODE_T) |
| 1898 | | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 ) // coin 2 |
| 1899 | | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-7") PORT_CODE(KEYCODE_Y) |
| 1900 | | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("1-8") PORT_CODE(KEYCODE_U) |
| 1913 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1914 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1915 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 ) // coin 2 |
| 1916 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1917 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1901 | 1918 | |
| 1902 | 1919 | PORT_START("IN2") |
| 1903 | | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) // coin 1 |
| 1904 | | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-2") PORT_CODE(KEYCODE_A) |
| 1905 | | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-3") PORT_CODE(KEYCODE_S) |
| 1906 | | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-4") PORT_CODE(KEYCODE_D) |
| 1907 | | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-5") PORT_CODE(KEYCODE_F) |
| 1908 | | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-6") PORT_CODE(KEYCODE_G) |
| 1909 | | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-7") PORT_CODE(KEYCODE_H) |
| 1910 | | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("2-8") PORT_CODE(KEYCODE_J) |
| 1920 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) // coin 1 |
| 1921 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1922 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1923 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1924 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1925 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1926 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1927 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1911 | 1928 | |
| 1912 | 1929 | PORT_START("DSW") |
| 1913 | 1930 | /* |
| r7882 | r7883 | |
| 2148 | 2165 | |
| 2149 | 2166 | static MACHINE_DRIVER_START( funquiz ) |
| 2150 | 2167 | MDRV_IMPORT_FROM(fw1stpal) |
| 2168 | // MDRV_IMPORT_FROM(fw2ndpal) |
| 2151 | 2169 | |
| 2152 | 2170 | MDRV_CPU_REPLACE("maincpu", M65C02, MASTER_CLOCK/8) /* 2MHz */ |
| 2153 | 2171 | MDRV_CPU_PROGRAM_MAP(funquiz_map) |
| r7882 | r7883 | |
| 2171 | 2189 | MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.5) /* analyzed to avoid clips */ |
| 2172 | 2190 | MACHINE_DRIVER_END |
| 2173 | 2191 | |
| 2174 | | static MACHINE_DRIVER_START( royalcrd ) |
| 2192 | static MACHINE_DRIVER_START( royalcd1 ) |
| 2175 | 2193 | MDRV_IMPORT_FROM(fw1stpal) |
| 2176 | 2194 | |
| 2177 | 2195 | MDRV_CPU_REPLACE("maincpu", M65C02, MASTER_CLOCK/8) /* (G65SC02P in pro version) 2MHz */ |
| 2178 | 2196 | MDRV_CPU_PROGRAM_MAP(magicrd2_map) |
| 2179 | 2197 | MACHINE_DRIVER_END |
| 2180 | 2198 | |
| 2199 | static MACHINE_DRIVER_START( royalcd2 ) |
| 2200 | MDRV_IMPORT_FROM(fw2ndpal) |
| 2201 | |
| 2202 | MDRV_CPU_REPLACE("maincpu", M65C02, MASTER_CLOCK/8) /* 2MHz */ |
| 2203 | MDRV_CPU_PROGRAM_MAP(magicrd2_map) |
| 2204 | MACHINE_DRIVER_END |
| 2205 | |
| 2181 | 2206 | static MACHINE_DRIVER_START( cuoreuno ) |
| 2182 | 2207 | MDRV_IMPORT_FROM(fw1stpal) |
| 2183 | 2208 | |
| r7882 | r7883 | |
| 2198 | 2223 | * Rom Load * |
| 2199 | 2224 | *************************/ |
| 2200 | 2225 | |
| 2226 | /******************************** Jolly Card sets ************************************/ |
| 2227 | |
| 2201 | 2228 | /* |
| 2202 | 2229 | Jolly Card, TAB Austria |
| 2203 | 2230 | ----------------------- |
| r7882 | r7883 | |
| 2584 | 2611 | ROM_END |
| 2585 | 2612 | |
| 2586 | 2613 | |
| 2614 | /******************************** Big Deal sets ************************************/ |
| 2615 | |
| 2587 | 2616 | /* |
| 2588 | 2617 | Big Deal (hungarian) |
| 2589 | 2618 | ------------------ |
| r7882 | r7883 | |
| 2651 | 2680 | ROM_END |
| 2652 | 2681 | |
| 2653 | 2682 | |
| 2683 | /******************************** C.M.C. sets ************************************/ |
| 2684 | |
| 2654 | 2685 | /* |
| 2655 | 2686 | Cuore Uno (italian) |
| 2656 | 2687 | ----------------------------------- |
| r7882 | r7883 | |
| 3065 | 3096 | ROM_END |
| 3066 | 3097 | |
| 3067 | 3098 | |
| 3099 | /******************************** Royal Card sets ************************************/ |
| 3100 | |
| 3068 | 3101 | /* |
| 3069 | | Royal Card (set 1) |
| 3102 | 1.bin NO MATCH |
| 3103 | 2.bin = 1.bin royalcrdd Royal Card (austrian, set 5) |
| 3104 | = u4_nmc27c256.bin royalcrdp Royal Card v2.0 Professional |
| 3105 | 3.bin NO MATCH |
| 3106 | |
| 3107 | This one works properly. Also Bet with Hold 5. |
| 3108 | |
| 3109 | */ |
| 3110 | |
| 3111 | ROM_START( royalcrd ) |
| 3112 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 3113 | ROM_LOAD( "1.bin", 0x8000, 0x8000, CRC(7f920318) SHA1(acbfed8d0a0984fd0c572a4de42d8dc08fb99a82) ) |
| 3114 | |
| 3115 | ROM_REGION( 0x10000, "gfx1", 0 ) |
| 3116 | ROM_LOAD( "3.bin", 0x0000, 0x8000, CRC(c46d804f) SHA1(b089821c7dae6714b49401d787f8bed859815763) ) |
| 3117 | ROM_LOAD( "2.bin", 0x8000, 0x8000, CRC(41f7a0b3) SHA1(9aff2b8832d2a4f868daa9849a0bfe5e44f88fc0) ) |
| 3118 | |
| 3119 | ROM_REGION( 0x0800, "nvram", 0 ) /* default NVRAM */ |
| 3120 | ROM_LOAD( "royalcrd_nvram.bin", 0x0000, 0x0800, CRC(1c775f61) SHA1(c810421eaa31a72e3f2fe9a1d82858e7cc2f6b93) ) |
| 3121 | |
| 3122 | ROM_REGION( 0x0200, "proms", 0 ) |
| 3123 | ROM_LOAD( "prom2.bin", 0x0000, 0x0200, CRC(7e5839e6) SHA1(5e8401d2b236f73cc017a73a369b3b3b821a1deb) ) |
| 3124 | ROM_END |
| 3125 | |
| 3126 | /* |
| 3127 | r.1 NO MATCH |
| 3128 | r.2 = 1a.bin royalcrde Royal Card (austrian, set 6) |
| 3129 | r.3 = 2a.bin royalcrde Royal Card (austrian, set 6) |
| 3130 | |
| 3131 | All ROMs are double sized, with identical halves. |
| 3132 | The set is working properly, with Bet (Hold 5) and normal payout. No Remote. |
| 3133 | */ |
| 3134 | ROM_START( royalcrda ) |
| 3135 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 3136 | ROM_LOAD( "r.1", 0x0000, 0x10000, CRC(761021ec) SHA1(3a00a1d2f74dbb06a0ab6605c32bef8013c93874) ) |
| 3137 | |
| 3138 | ROM_REGION( 0x10000, "gfx1", 0 ) |
| 3139 | ROM_LOAD( "r.3", 0x0000, 0x8000, CRC(3af71cf8) SHA1(3a0ce0d0abebf386573c5936545dada1d3558e55) ) |
| 3140 | ROM_IGNORE( 0x8000) |
| 3141 | ROM_LOAD( "r.2", 0x8000, 0x8000, CRC(8a66f22c) SHA1(67d6e8f8f5a0fd979dc498ba2cc67cf707ccdf95) ) |
| 3142 | ROM_IGNORE( 0x8000) |
| 3143 | |
| 3144 | ROM_REGION( 0x0800, "nvram", 0 ) /* default NVRAM */ |
| 3145 | ROM_LOAD( "royalcrda_nvram.bin", 0x0000, 0x0800, CRC(c42dbad4) SHA1(b38552192e3f5f6bc2a4b92bddd2f95ac17ecc8c) ) |
| 3146 | |
| 3147 | ROM_REGION( 0x0200, "proms", 0 ) |
| 3148 | ROM_LOAD( "prom3_r.bin", 0x0000, 0x0200, CRC(7e5839e6) SHA1(5e8401d2b236f73cc017a73a369b3b3b821a1deb) ) |
| 3149 | ROM_END |
| 3150 | |
| 3151 | /* |
| 3152 | rc_1_pl.bin NO MATCH |
| 3153 | rc_2_pl.bin = 1.bin royalcrdd Royal Card (austrian, set 5) |
| 3154 | = u4_nmc27c256.bin royalcrdp Royal Card v2.0 Professional |
| 3155 | rc_3_pl.bin = 2.bin royalcrdd Royal Card (austrian, set 5) |
| 3156 | |
| 3157 | Working properly, with Bet (Hold 5) and Hold 2 shown a credit screen that allow payout or clear. |
| 3158 | */ |
| 3159 | ROM_START( royalcrdb ) |
| 3160 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 3161 | ROM_LOAD( "rc_1_pl.bin", 0x8000, 0x8000, CRC(7a0ad63c) SHA1(7a1f6e0fd6e31f6950eeffc6a9ef073e909d85f9) ) |
| 3162 | |
| 3163 | ROM_REGION( 0x10000, "gfx1", 0 ) |
| 3164 | ROM_LOAD( "rc_3_pl.bin", 0x0000, 0x8000, CRC(85e77661) SHA1(7d7a765c1bfcfeb9eb91d2519b22d734f20eab24) ) |
| 3165 | ROM_LOAD( "rc_2_pl.bin", 0x8000, 0x8000, CRC(41f7a0b3) SHA1(9aff2b8832d2a4f868daa9849a0bfe5e44f88fc0) ) |
| 3166 | |
| 3167 | ROM_REGION( 0x0800, "nvram", 0 ) /* default NVRAM */ |
| 3168 | ROM_LOAD( "royalcrdb_nvram.bin", 0x0000, 0x0800, CRC(19bb3dea) SHA1(0965fbcec48ded99c5f6793efffb1d9329cc00eb) ) |
| 3169 | |
| 3170 | ROM_REGION( 0x0200, "proms", 0 ) |
| 3171 | ROM_LOAD( "prom_epoxy.bin", 0x0000, 0x0200, CRC(b1e15441) SHA1(eb9318dd08e12281bef27a75bfdf54ec5d97fad6) ) |
| 3172 | ROM_END |
| 3173 | |
| 3174 | /* |
| 3175 | roj.ic12 NO MATCH |
| 3176 | roj.ic25 NO MATCH |
| 3177 | roj.ic26 NO MATCH |
| 3178 | */ |
| 3179 | ROM_START( royalcrdc ) |
| 3180 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 3181 | ROM_LOAD( "roj.ic12", 0x8000, 0x8000, CRC(16923d58) SHA1(e865b91246ae5a21bdc9787e6e6e22be5182cabb) ) |
| 3182 | |
| 3183 | ROM_REGION( 0x20000, "gfx1", 0 ) |
| 3184 | ROM_LOAD( "roj.ic26", 0x0000, 0x10000, CRC(3883cdcb) SHA1(b71a786822fe8fcb2c6fcdc463facb2738ec8c01) ) |
| 3185 | // ROM_IGNORE( 0x8000) |
| 3186 | ROM_LOAD( "roj.ic25", 0x8000, 0x10000, CRC(c5b787e8) SHA1(be88aa901c1f96d171af45c3602e0ce72b8fff34) ) |
| 3187 | // ROM_IGNORE( 0x8000) |
| 3188 | |
| 3189 | ROM_REGION( 0x0800, "nvram", 0 ) /* default NVRAM */ |
| 3190 | ROM_LOAD( "royalcrdc_nvram.bin", 0x0000, 0x0800, CRC(eacb0c7b) SHA1(513816623aa3843dd5d0416fc012060c7a9f6c71) ) |
| 3191 | |
| 3192 | ROM_REGION( 0x0200, "proms", 0 ) |
| 3193 | ROM_LOAD( "prom1.bin", 0x0000, 0x0200, CRC(8f6a33b1) SHA1(3a2f97563b7f094ef8b13a4e47a18e4a1fcf51c3) ) |
| 3194 | ROM_END |
| 3195 | |
| 3196 | /* |
| 3197 | Royal Card (set 5) |
| 3070 | 3198 | ------------------ |
| 3071 | 3199 | |
| 3072 | 3200 | - 1x HM6264LP |
| r7882 | r7883 | |
| 3090 | 3218 | - 1x trimmer (volume) |
| 3091 | 3219 | */ |
| 3092 | 3220 | |
| 3093 | | ROM_START( royalcrd ) |
| 3221 | ROM_START( royalcrdd ) |
| 3094 | 3222 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 3095 | 3223 | ROM_LOAD( "r2.bin", 0x8000, 0x8000, CRC(25dfe0dc) SHA1(1a857a910d0c34b6b5bfc2b6ea2e08ed8ed0cae0) ) |
| 3096 | 3224 | |
| r7882 | r7883 | |
| 3099 | 3227 | ROM_LOAD( "1.bin", 0x8000, 0x8000, CRC(41f7a0b3) SHA1(9aff2b8832d2a4f868daa9849a0bfe5e44f88fc0) ) |
| 3100 | 3228 | |
| 3101 | 3229 | ROM_REGION( 0x0800, "nvram", 0 ) /* default NVRAM */ |
| 3102 | | ROM_LOAD( "royalcrd_nvram.bin", 0x0000, 0x0800, CRC(335bfa5a) SHA1(7e9cbb502f450c515ea03ffcf4b7fbae60af4e73) ) |
| 3230 | ROM_LOAD( "royalcrdd_nvram.bin", 0x0000, 0x0800, CRC(335bfa5a) SHA1(7e9cbb502f450c515ea03ffcf4b7fbae60af4e73) ) |
| 3103 | 3231 | |
| 3104 | 3232 | ROM_REGION( 0x0200, "proms", 0 ) |
| 3105 | 3233 | ROM_LOAD( "n82s147.bin", 0x0000, 0x0200, CRC(8bc86f48) SHA1(4c677ab9314a1f571e35104b22659e6811aeb194) ) |
| r7882 | r7883 | |
| 3112 | 3240 | |
| 3113 | 3241 | |
| 3114 | 3242 | /* |
| 3115 | | Royal Card (set 2) |
| 3243 | Royal Card (set 6) |
| 3116 | 3244 | ------------------ |
| 3117 | 3245 | |
| 3118 | 3246 | - CPU 1x R65C02P2 (main) |
| r7882 | r7883 | |
| 3130 | 3258 | - 1x trimmer (volume) |
| 3131 | 3259 | */ |
| 3132 | 3260 | |
| 3133 | | ROM_START( royalcdb ) /* both halves have different programs. we're using the 2nd one */ |
| 3261 | ROM_START( royalcrde ) /* both halves have different programs. we're using the 2nd one */ |
| 3134 | 3262 | ROM_REGION( 0x10000, "maincpu", 0 ) /* 1st half prg is testing RAM in offset $8600-$BF00...?? */ |
| 3135 | 3263 | ROM_LOAD( "rc.bin", 0x0000, 0x10000, CRC(8a9a6dd6) SHA1(04c3f9f17d5404ac1414c51ef8f930df54530e72) ) |
| 3136 | 3264 | |
| r7882 | r7883 | |
| 3141 | 3269 | ROM_IGNORE( 0x8000 ) /* Identical halves. Discarding 2nd half */ |
| 3142 | 3270 | |
| 3143 | 3271 | ROM_REGION( 0x0800, "nvram", 0 ) /* default NVRAM */ |
| 3144 | | ROM_LOAD( "royalcdb_nvram.bin", 0x0000, 0x0800, CRC(3b03440f) SHA1(49e51b8c9e1404d39c479a2d0619aab43f1a6529) ) |
| 3272 | ROM_LOAD( "royalcrde_nvram.bin", 0x0000, 0x0800, CRC(3b03440f) SHA1(49e51b8c9e1404d39c479a2d0619aab43f1a6529) ) |
| 3145 | 3273 | |
| 3146 | 3274 | ROM_REGION( 0x0200, "proms", 0 ) |
| 3147 | 3275 | ROM_LOAD( "n82s147.bin", 0x0000, 0x0200, CRC(8bc86f48) SHA1(4c677ab9314a1f571e35104b22659e6811aeb194) ) |
| r7882 | r7883 | |
| 3152 | 3280 | |
| 3153 | 3281 | |
| 3154 | 3282 | /* |
| 3155 | | Royal Card (set 3, encrypted) |
| 3283 | Royal Card (set 7, encrypted) |
| 3156 | 3284 | ----------------------------- |
| 3157 | 3285 | |
| 3158 | 3286 | - Custom/encrypted CPU (epoxy block labelled "EVONA EX9511" -> www.evona.sk ) |
| r7882 | r7883 | |
| 3174 | 3302 | - 2x 27256 - gfx - "2.bin", "3.bin" |
| 3175 | 3303 | */ |
| 3176 | 3304 | |
| 3177 | | ROM_START( royalcdc ) /* encrypted program rom */ |
| 3305 | ROM_START( royalcrdf ) /* encrypted program rom */ |
| 3178 | 3306 | ROM_REGION( 0x10000*2, "maincpu", 0 ) // *2 for decrypted opcodes (see init) |
| 3179 | 3307 | ROM_LOAD( "rc_1.bin", 0x8000, 0x8000, CRC(8cdcc978) SHA1(489b58760a7c8646399c8cdfb86ec4341823e7dd) ) |
| 3180 | 3308 | |
| r7882 | r7883 | |
| 3192 | 3320 | ROM_END |
| 3193 | 3321 | |
| 3194 | 3322 | |
| 3195 | | ROM_START( royalcdp ) |
| 3323 | ROM_START( royalcrdp ) |
| 3196 | 3324 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 3197 | 3325 | ROM_LOAD( "u16_m27c256b.bin", 0x8000, 0x8000, CRC(162996ff) SHA1(122c13ee9842e692d31490f216eb972df2321b7f) ) |
| 3198 | 3326 | |
| r7882 | r7883 | |
| 3208 | 3336 | ROM_END |
| 3209 | 3337 | |
| 3210 | 3338 | |
| 3339 | /******************************** Lucky Lady sets ************************************/ |
| 3340 | |
| 3211 | 3341 | ROM_START( lluck3x3 ) |
| 3212 | 3342 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 3213 | 3343 | ROM_LOAD( "l3x3.bin", 0x8000, 0x8000, CRC(dbdb07ff) SHA1(6be43aa0b2c10d83373f20f477606cb031bc6dd9) ) |
| r7882 | r7883 | |
| 3240 | 3370 | ROM_END |
| 3241 | 3371 | |
| 3242 | 3372 | |
| 3373 | /******************************** Magic Card II sets ************************************/ |
| 3374 | |
| 3243 | 3375 | /* |
| 3244 | 3376 | Magic Card II (bulgarian) |
| 3245 | 3377 | --------------------------------- |
| r7882 | r7883 | |
| 3316 | 3448 | ROM_END |
| 3317 | 3449 | |
| 3318 | 3450 | |
| 3451 | /******************************** Royal Vegas Joker Card sets ************************************/ |
| 3452 | |
| 3319 | 3453 | ROM_START( vegasslw ) |
| 3320 | 3454 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 3321 | 3455 | ROM_LOAD( "vslow.bin", 0x8000, 0x8000, CRC(9cb7861a) SHA1(f934eacd5b3573a6bbeaa827f521b4a498e5bcdf) ) |
| r7882 | r7883 | |
| 3379 | 3513 | ROM_LOAD( "jokercrd_prom.bin", 0x0000, 0x0200, CRC(e59fc06e) SHA1(88a3bb89f020fe2b20f768ca010a082e0b974831) ) |
| 3380 | 3514 | ROM_END |
| 3381 | 3515 | |
| 3516 | |
| 3517 | /******************************** Jolly Joker sets ************************************/ |
| 3518 | |
| 3382 | 3519 | /* |
| 3383 | 3520 | |
| 3384 | 3521 | Impera - Jolly Joker |
| r7882 | r7883 | |
| 3529 | 3666 | ROM_END |
| 3530 | 3667 | |
| 3531 | 3668 | |
| 3669 | /******************************** Other sets ************************************/ |
| 3670 | |
| 3532 | 3671 | /* |
| 3533 | 3672 | Title: MULTI WIN |
| 3534 | 3673 | Company: FUN WORLD |
| r7882 | r7883 | |
| 3824 | 3963 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 3825 | 3964 | ROM_LOAD( "kqu_6.bin", 0xc000, 0x4000, CRC(50f0e586) SHA1(85ce5b95283113e2ac94fd882c57ce1b26135ed0) ) |
| 3826 | 3965 | |
| 3966 | |
| 3827 | 3967 | ROM_REGION( 0x10000, "gfx1", 0 ) |
| 3828 | | ROM_FILL( 0x0000, 0x4000, 0xff) |
| 3829 | | ROM_LOAD( "q_3.bin", 0x4000, 0x4000, CRC(0dafa07a) SHA1(5d6fa842c617f92fad14a597396249d5a4d28c9a) ) |
| 3830 | | ROM_FILL( 0x8000, 0x4000, 0xff) |
| 3831 | | // ROM_LOAD( "q_2_nec.bin", 0xc000, 0x4000, BAD_DUMP CRC(8e3bfcc7) SHA1(81b35e786fab088a439a4423becf08a78a0b2df0) ) |
| 3968 | ROM_FILL( 0x0000, 0x4000, 0xff) |
| 3969 | ROM_LOAD( "q_3.bin", 0x4000, 0x4000, CRC(0dafa07a) SHA1(5d6fa842c617f92fad14a597396249d5a4d28c9a) ) |
| 3970 | ROM_FILL( 0x8000, 0x4000, 0xff) |
| 3971 | ROM_LOAD( "q_2.bin", 0xc000, 0x4000, CRC(ce07c6e1) SHA1(6b77a9198e29c195d983b856e8826e8174945321) ) |
| 3832 | 3972 | |
| 3833 | | ROM_REGION( 0x10000, "badgfx", 0 ) /* just a temporal container */ |
| 3834 | | ROM_LOAD( "q_2_nec.bin", 0xc000, 0x4000, BAD_DUMP CRC(8e3bfcc7) SHA1(81b35e786fab088a439a4423becf08a78a0b2df0) ) |
| 3835 | 3973 | |
| 3836 | 3974 | /* One unpopulated questions socket... Maybe sport_1 is missing */ |
| 3837 | 3975 | ROM_REGION( 0x100000, "questions", ROMREGION_ERASEFF ) |
| r7882 | r7883 | |
| 3861 | 3999 | ROM_LOAD( "pop_1.bin", 0x58000, 0x8000, CRC(5c74781e) SHA1(0a50a706fd397bb220e31f1a7adaa4204b242888) ) |
| 3862 | 4000 | ROM_LOAD( "pop_2.bin", 0x60000, 0x8000, CRC(10103648) SHA1(6fdc1aa4dcc8919e46def1c19adc2b9686c0f72d) ) |
| 3863 | 4001 | |
| 4002 | |
| 3864 | 4003 | ROM_REGION( 0x0200, "proms", 0 ) |
| 3865 | | ROM_LOAD( "82s147.bin", 0x0000, 0x0200, BAD_DUMP CRC(5ebc5659) SHA1(8d59011a181399682ab6e8ed14f83101e9bfa0c6) ) |
| 4004 | ROM_LOAD( "82s147.bin", 0x0000, 0x0200, CRC(f990a9ae) SHA1(f7133798b5f20dd5b8dbe5d1a6876341710d93a8) ) |
| 3866 | 4005 | ROM_END |
| 3867 | 4006 | |
| 3868 | 4007 | |
| r7882 | r7883 | |
| 4162 | 4301 | *************************/ |
| 4163 | 4302 | |
| 4164 | 4303 | /* YEAR NAME PARENT MACHINE INPUT INIT ROT COMPANY FULLNAME FLAGS LAYOUT */ |
| 4165 | | GAMEL( 1985, jollycrd, 0, fw1stpal, funworld, 0, ROT0, "TAB-Austria", "Jolly Card (austrian)", 0, layout_jollycrd ) |
| 4166 | | GAMEL( 1985, jolyc3x3, jollycrd, fw1stpal, funworld, 0, ROT0, "TAB-Austria", "Jolly Card (3x3 deal)", 0, layout_jollycrd ) |
| 4167 | | GAMEL( 1993, jolycmzs, jollycrd, cuoreuno, jolyc980, 0, ROT0, "MZS Tech", "Jolly Card Professional 2.0 (MZS Tech)", 0, layout_jollycrd ) |
| 4168 | | GAMEL( 2000, jolyc980, jollycrd, cuoreuno, jolyc980, 0, ROT0, "Spale-Soft", "Jolly Card Professional 2.0 (Spale Soft)", 0, layout_jollycrd ) |
| 4169 | | GAMEL( 1998, jolycdev, jollycrd, fw1stpal, funworld, 0, ROT0, "TAB/Evona", "Jolly Card (Evona Electronic)", 0, layout_jollycrd ) |
| 4170 | | GAMEL( 1985, jolyccra, jollycrd, cuoreuno, jolycdcr, 0, ROT0, "TAB-Austria", "Jolly Card (croatian, set 1)", 0, layout_jollycrd ) |
| 4171 | | GAMEL( 1993, jolyccrb, jollycrd, cuoreuno, jolycdcr, 0, ROT0, "Soft Design", "Jolly Card (croatian, set 2)", 0, layout_jollycrd ) |
| 4172 | | GAMEL( 199?, jolycdit, jollycrd, cuoreuno, jolycdit, tabblue, ROT0, "bootleg", "Jolly Card (italian, blue TAB board, encrypted)", 0, layout_royalcrd ) |
| 4173 | | GAMEL( 1990, jolycdib, jollycrd, cuoreuno, jolycdib, tabblue, ROT0, "bootleg", "Jolly Card (italian, encrypted bootleg)", 0, layout_jollycrd ) /* not a real TAB blue PCB */ |
| 4174 | | GAMEL( 1985, sjcd2kx3, jollycrd, fw1stpal, funworld, 0, ROT0, "M.P.", "Super Joly 2000 - 3x", 0, layout_jollycrd ) |
| 4304 | GAMEL( 1985, jollycrd, 0, fw1stpal, funworld, 0, ROT0, "TAB-Austria", "Jolly Card (austrian)", 0, layout_jollycrd ) |
| 4305 | GAMEL( 1985, jolyc3x3, jollycrd, fw1stpal, funworld, 0, ROT0, "TAB-Austria", "Jolly Card (3x3 deal)", 0, layout_jollycrd ) |
| 4306 | GAMEL( 1993, jolycmzs, jollycrd, cuoreuno, jolyc980, 0, ROT0, "MZS Tech", "Jolly Card Professional 2.0 (MZS Tech)", 0, layout_jollycrd ) |
| 4307 | GAMEL( 2000, jolyc980, jollycrd, cuoreuno, jolyc980, 0, ROT0, "Spale-Soft", "Jolly Card Professional 2.0 (Spale Soft)", 0, layout_jollycrd ) |
| 4308 | GAMEL( 1998, jolycdev, jollycrd, fw1stpal, funworld, 0, ROT0, "TAB/Evona", "Jolly Card (Evona Electronic)", 0, layout_jollycrd ) |
| 4309 | GAMEL( 1985, jolyccra, jollycrd, cuoreuno, jolycdcr, 0, ROT0, "TAB-Austria", "Jolly Card (croatian, set 1)", 0, layout_jollycrd ) |
| 4310 | GAMEL( 1993, jolyccrb, jollycrd, cuoreuno, jolycdcr, 0, ROT0, "Soft Design", "Jolly Card (croatian, set 2)", 0, layout_jollycrd ) |
| 4311 | GAMEL( 199?, jolycdit, jollycrd, cuoreuno, jolycdit, tabblue, ROT0, "bootleg", "Jolly Card (italian, blue TAB board, encrypted)", 0, layout_royalcrd ) |
| 4312 | GAMEL( 1990, jolycdib, jollycrd, cuoreuno, jolycdib, tabblue, ROT0, "bootleg", "Jolly Card (italian, encrypted bootleg)", 0, layout_jollycrd ) /* not a real TAB blue PCB */ |
| 4313 | GAMEL( 1985, sjcd2kx3, jollycrd, fw1stpal, funworld, 0, ROT0, "M.P.", "Super Joly 2000 - 3x", 0, layout_jollycrd ) |
| 4175 | 4314 | GAME( 1986, jolycdab, jollycrd, fw1stpal, funworld, 0, ROT0, "Inter Games", "Jolly Card (austrian, Funworld, bootleg)", GAME_NOT_WORKING ) |
| 4176 | | GAMEL( 1986, bigdeal, 0, fw2ndpal, bigdeal, 0, ROT0, "Funworld", "Big Deal (hungarian, set 1)", GAME_IMPERFECT_COLORS, layout_bigdeal ) |
| 4177 | | GAMEL( 1986, bigdealb, bigdeal, fw2ndpal, bigdeal, 0, ROT0, "Funworld", "Big Deal (hungarian, set 2)", GAME_IMPERFECT_COLORS, layout_bigdeal ) |
| 4178 | | GAMEL( 1986, jolycdat, bigdeal, fw2ndpal, bigdeal, 0, ROT0, "Funworld", "Jolly Card (austrian, Funworld)", GAME_IMPERFECT_COLORS, layout_bigdeal ) |
| 4179 | | GAMEL( 1996, cuoreuno, 0, cuoreuno, cuoreuno, 0, ROT0, "C.M.C.", "Cuore 1 (italian)", 0, layout_jollycrd ) |
| 4180 | | GAMEL( 1997, elephfam, 0, cuoreuno, cuoreuno, 0, ROT0, "C.M.C.", "Elephant Family (italian, new)", 0, layout_jollycrd ) |
| 4181 | | GAMEL( 1996, elephfmb, elephfam, cuoreuno, cuoreuno, 0, ROT0, "C.M.C.", "Elephant Family (italian, old)", 0, layout_jollycrd ) |
| 4182 | | GAMEL( 1996, pool10, 0, cuoreuno, pool10, 0, ROT0, "C.M.C.", "Pool 10 (italian, set 1)", 0, layout_jollycrd ) |
| 4183 | | GAMEL( 1996, pool10b, pool10, cuoreuno, cuoreuno, 0, ROT0, "C.M.C.", "Pool 10 (italian, set 2)", 0, layout_jollycrd ) |
| 4184 | | GAMEL( 1996, pool10c, pool10, cuoreuno, cuoreuno, 0, ROT0, "C.M.C.", "Pool 10 (italian, set 3)", 0, layout_jollycrd ) |
| 4185 | | GAMEL( 1997, pool10d, pool10, cuoreuno, cuoreuno, 0, ROT0, "C.M.C.", "Pool 10 (italian, set 4)", 0, layout_jollycrd ) |
| 4186 | | GAMEL( 1997, tortufam, 0, cuoreuno, cuoreuno, 0, ROT0, "C.M.C.", "Tortuga Family (italian)", 0, layout_jollycrd ) |
| 4187 | | GAMEL( 1996, potgame, 0, cuoreuno, cuoreuno, 0, ROT0, "C.M.C.", "Pot Game (italian)", 0, layout_jollycrd ) |
| 4188 | | GAMEL( 1996, bottle10, 0, cuoreuno, cuoreuno, 0, ROT0, "C.M.C.", "Bottle 10 (italian, set 1)", 0, layout_jollycrd ) |
| 4189 | | GAMEL( 1996, bottl10b, bottle10, cuoreuno, cuoreuno, 0, ROT0, "C.M.C.", "Bottle 10 (italian, set 2)", 0, layout_jollycrd ) |
| 4190 | | GAMEL( 1991, royalcrd, 0, royalcrd, royalcrd, 0, ROT0, "TAB-Austria", "Royal Card (austrian, set 1)", 0, layout_royalcrd ) |
| 4191 | | GAMEL( 1991, royalcdb, royalcrd, royalcrd, royalcrd, 0, ROT0, "TAB-Austria", "Royal Card (austrian, set 2)", 0, layout_jollycrd ) |
| 4192 | | GAME( 1991, royalcdc, royalcrd, royalcrd, royalcrd, royalcdc, ROT0, "Evona Electronic","Royal Card (slovak, encrypted)", GAME_WRONG_COLORS | GAME_NOT_WORKING ) |
| 4193 | | GAME( 1993, royalcdp, royalcrd, cuoreuno, royalcrd, 0, ROT0, "Digital Dreams", "Royal Card v2.0 Professional", GAME_NOT_WORKING ) |
| 4194 | | GAMEL( 1991, lluck3x3, royalcrd, cuoreuno, royalcrd, 0, ROT0, "TAB-Austria", "Lucky Lady (3x3 deal)", 0, layout_jollycrd ) |
| 4195 | | GAMEL( 1991, lluck4x1, royalcrd, royalcrd, royalcrd, 0, ROT0, "TAB-Austria", "Lucky Lady (4x1 aces)", 0, layout_jollycrd ) |
| 4196 | | GAMEL( 1996, magicrd2, 0, magicrd2, magicrd2, 0, ROT0, "Impera", "Magic Card II (bulgarian)", GAME_IMPERFECT_SOUND, layout_jollycrd ) |
| 4315 | GAMEL( 1986, bigdeal, 0, fw2ndpal, bigdeal, 0, ROT0, "Funworld", "Big Deal (hungarian, set 1)", GAME_IMPERFECT_COLORS, layout_bigdeal ) |
| 4316 | GAMEL( 1986, bigdealb, bigdeal, fw2ndpal, bigdeal, 0, ROT0, "Funworld", "Big Deal (hungarian, set 2)", GAME_IMPERFECT_COLORS, layout_bigdeal ) |
| 4317 | GAMEL( 1986, jolycdat, bigdeal, fw2ndpal, bigdeal, 0, ROT0, "Funworld", "Jolly Card (austrian, Funworld)", GAME_IMPERFECT_COLORS, layout_bigdeal ) |
| 4318 | GAMEL( 1996, cuoreuno, 0, cuoreuno, cuoreuno, 0, ROT0, "C.M.C.", "Cuore 1 (italian)", 0, layout_jollycrd ) |
| 4319 | GAMEL( 1997, elephfam, 0, cuoreuno, cuoreuno, 0, ROT0, "C.M.C.", "Elephant Family (italian, new)", 0, layout_jollycrd ) |
| 4320 | GAMEL( 1996, elephfmb, elephfam, cuoreuno, cuoreuno, 0, ROT0, "C.M.C.", "Elephant Family (italian, old)", 0, layout_jollycrd ) |
| 4321 | GAMEL( 1996, pool10, 0, cuoreuno, pool10, 0, ROT0, "C.M.C.", "Pool 10 (italian, set 1)", 0, layout_jollycrd ) |
| 4322 | GAMEL( 1996, pool10b, pool10, cuoreuno, cuoreuno, 0, ROT0, "C.M.C.", "Pool 10 (italian, set 2)", 0, layout_jollycrd ) |
| 4323 | GAMEL( 1996, pool10c, pool10, cuoreuno, cuoreuno, 0, ROT0, "C.M.C.", "Pool 10 (italian, set 3)", 0, layout_jollycrd ) |
| 4324 | GAMEL( 1997, pool10d, pool10, cuoreuno, cuoreuno, 0, ROT0, "C.M.C.", "Pool 10 (italian, set 4)", 0, layout_jollycrd ) |
| 4325 | GAMEL( 1997, tortufam, 0, cuoreuno, cuoreuno, 0, ROT0, "C.M.C.", "Tortuga Family (italian)", 0, layout_jollycrd ) |
| 4326 | GAMEL( 1996, potgame, 0, cuoreuno, cuoreuno, 0, ROT0, "C.M.C.", "Pot Game (italian)", 0, layout_jollycrd ) |
| 4327 | GAMEL( 1996, bottle10, 0, cuoreuno, cuoreuno, 0, ROT0, "C.M.C.", "Bottle 10 (italian, set 1)", 0, layout_jollycrd ) |
| 4328 | GAMEL( 1996, bottl10b, bottle10, cuoreuno, cuoreuno, 0, ROT0, "C.M.C.", "Bottle 10 (italian, set 2)", 0, layout_jollycrd ) |
| 4329 | GAMEL( 1991, royalcrd, 0, royalcd2, royalcrd, 0, ROT0, "TAB Austria", "Royal Card (austrian, set 1)", 0, layout_jollycrd ) |
| 4330 | GAMEL( 1991, royalcrda, royalcrd, royalcd2, royalcrd, 0, ROT0, "TAB Austria", "Royal Card (austrian, set 2)", 0, layout_jollycrd ) |
| 4331 | GAMEL( 1991, royalcrdb, royalcrd, royalcd1, royalcrd, 0, ROT0, "TAB Austria", "Royal Card (austrian/polish, set 3)", 0, layout_jollycrd ) |
| 4332 | GAMEL( 1991, royalcrdc, royalcrd, royalcd2, royalcrd, 0, ROT0, "TAB Austria", "Royal Card (austrian, set 4)", GAME_IMPERFECT_GRAPHICS, layout_jollycrd ) |
| 4333 | GAMEL( 1991, royalcrdd, royalcrd, royalcd1, royalcrd, 0, ROT0, "TAB-Austria", "Royal Card (austrian, set 5)", 0, layout_royalcrd ) |
| 4334 | GAMEL( 1991, royalcrde, royalcrd, royalcd1, royalcrd, 0, ROT0, "TAB-Austria", "Royal Card (austrian, set 6)", 0, layout_jollycrd ) |
| 4335 | GAME( 1991, royalcrdf, royalcrd, royalcd1, royalcrd, royalcdc, ROT0, "Evona Electronic","Royal Card (slovak, encrypted)", GAME_NOT_WORKING ) |
| 4336 | GAME( 1993, royalcrdp, royalcrd, cuoreuno, royalcrd, 0, ROT0, "Digital Dreams", "Royal Card v2.0 Professional", GAME_NOT_WORKING ) |
| 4337 | GAMEL( 1991, lluck3x3, royalcrd, cuoreuno, royalcrd, 0, ROT0, "TAB-Austria", "Lucky Lady (3x3 deal)", 0, layout_jollycrd ) |
| 4338 | GAMEL( 1991, lluck4x1, royalcrd, royalcd1, royalcrd, 0, ROT0, "TAB-Austria", "Lucky Lady (4x1 aces)", 0, layout_jollycrd ) |
| 4339 | GAMEL( 1996, magicrd2, 0, magicrd2, magicrd2, 0, ROT0, "Impera", "Magic Card II (bulgarian)", GAME_IMPERFECT_SOUND, layout_jollycrd ) |
| 4197 | 4340 | GAME( 1996, magicd2a, magicrd2, magicrd2, magicrd2, magicd2a, ROT0, "Impera", "Magic Card II (green TAB or Impera board)", GAME_NOT_WORKING ) |
| 4198 | 4341 | GAME( 1996, magicd2b, magicrd2, magicrd2, magicrd2, magicd2b, ROT0, "Impera", "Magic Card II (blue TAB board, encrypted)", GAME_NOT_WORKING ) |
| 4199 | | GAMEL( 1993, vegasslw, 0, fw2ndpal, vegasslw, 0, ROT0, "Funworld", "Royal Vegas Joker Card (slow deal)", 0, layout_jollycrd ) |
| 4200 | | GAMEL( 1993, vegasfst, vegasslw, fw2ndpal, vegasfst, 0, ROT0, "Soft Design", "Royal Vegas Joker Card (fast deal)", 0, layout_jollycrd ) |
| 4201 | | GAMEL( 1993, vegasfte, vegasslw, fw2ndpal, vegasfte, 0, ROT0, "Soft Design", "Royal Vegas Joker Card (fast deal, english gfx)", 0, layout_jollycrd ) |
| 4202 | | GAMEL( 1993, vegasmil, vegasslw, fw2ndpal, vegasmil, 0, ROT0, "Mile", "Royal Vegas Joker Card (fast deal, Mile)", 0, layout_jollycrd ) |
| 4203 | | GAMEL( 198?, jolyjokr, 0, fw1stpal, funworld, 0, ROT0, "Impera", "Jolly Joker (98bet, set 1)", 0, layout_jollycrd ) |
| 4204 | | GAMEL( 198?, jolyjokra, jolyjokr, fw1stpal, jolyjokra, 0, ROT0, "Impera", "Jolly Joker (98bet, set 2)", 0, layout_jollycrd ) |
| 4205 | | GAMEL( 198?, jolyjokrb, jolyjokr, fw1stpal, funworld, 0, ROT0, "Impera", "Jolly Joker (40bet, croatian hack)", 0, layout_jollycrd ) |
| 4206 | | GAME( 1992, multiwin, 0, fw1stpal, funworld, multiwin, ROT0, "Funworld", "Multi Win (Ver.0167, encrypted)", GAME_WRONG_COLORS | GAME_NOT_WORKING ) |
| 4207 | | GAME( 1993, jokercrd, 0, fw2ndpal, funworld, 0, ROT0, "Vesely Svet", "Joker Card (Ver.A267BC, encrypted)", GAME_WRONG_COLORS | GAME_NOT_WORKING ) |
| 4208 | | GAME( 199?, mongolnw, 0, royalcrd, royalcrd, 0, ROT0, "bootleg", "Mongolfier New (italian)", GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING ) |
| 4209 | | GAME( 199?, soccernw, 0, royalcrd, royalcrd, soccernw, ROT0, "bootleg", "Soccer New (italian)", GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING ) |
| 4210 | | GAME( 198?, saloon, 0, saloon, saloon, saloon, ROT0, "<unknown>", "Saloon (french, encrypted)", GAME_NO_SOUND | GAME_WRONG_COLORS | GAME_IMPERFECT_GRAPHICS | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING ) |
| 4211 | | GAME( 198?, funquiz, 0, funquiz, funquiz, 0, ROT0, "Funworld", "Fun World Quiz (austrian)", GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS ) |
| 4342 | GAMEL( 1993, vegasslw, 0, fw2ndpal, vegasslw, 0, ROT0, "Funworld", "Royal Vegas Joker Card (slow deal)", 0, layout_jollycrd ) |
| 4343 | GAMEL( 1993, vegasfst, vegasslw, fw2ndpal, vegasfst, 0, ROT0, "Soft Design", "Royal Vegas Joker Card (fast deal)", 0, layout_jollycrd ) |
| 4344 | GAMEL( 1993, vegasfte, vegasslw, fw2ndpal, vegasfte, 0, ROT0, "Soft Design", "Royal Vegas Joker Card (fast deal, english gfx)", 0, layout_jollycrd ) |
| 4345 | GAMEL( 1993, vegasmil, vegasslw, fw2ndpal, vegasmil, 0, ROT0, "Mile", "Royal Vegas Joker Card (fast deal, Mile)", 0, layout_jollycrd ) |
| 4346 | GAMEL( 198?, jolyjokr, 0, fw1stpal, funworld, 0, ROT0, "Impera", "Jolly Joker (98bet, set 1)", 0, layout_jollycrd ) |
| 4347 | GAMEL( 198?, jolyjokra, jolyjokr, fw1stpal, jolyjokra, 0, ROT0, "Impera", "Jolly Joker (98bet, set 2)", 0, layout_jollycrd ) |
| 4348 | GAMEL( 198?, jolyjokrb, jolyjokr, fw1stpal, funworld, 0, ROT0, "Impera", "Jolly Joker (40bet, croatian hack)", 0, layout_jollycrd ) |
| 4349 | GAME( 1992, multiwin, 0, fw1stpal, funworld, multiwin, ROT0, "Funworld", "Multi Win (Ver.0167, encrypted)", GAME_NOT_WORKING ) |
| 4350 | GAME( 1993, jokercrd, 0, fw2ndpal, funworld, 0, ROT0, "Vesely Svet", "Joker Card (Ver.A267BC, encrypted)", GAME_NOT_WORKING ) |
| 4351 | GAME( 199?, mongolnw, 0, royalcd1, royalcrd, 0, ROT0, "bootleg", "Mongolfier New (italian)", GAME_NOT_WORKING ) |
| 4352 | GAME( 199?, soccernw, 0, royalcd1, royalcrd, soccernw, ROT0, "bootleg", "Soccer New (italian)", GAME_NOT_WORKING ) |
| 4353 | GAME( 198?, saloon, 0, saloon, saloon, saloon, ROT0, "<unknown>", "Saloon (french, encrypted)", GAME_NOT_WORKING ) |
| 4354 | GAME( 198?, funquiz, 0, funquiz, funquiz, 0, ROT0, "Funworld", "Fun World Quiz (austrian)", 0 ) |
| 4212 | 4355 | |
src/emu/sound/tms5220.c
| r7882 | r7883 | |
| 11 | 11 | Various fixes by Lord Nightmare |
| 12 | 12 | Modularization by Lord Nightmare |
| 13 | 13 | Sub-interpolation-cycle parameter updating added by Lord Nightmare |
| 14 | Preliminary MASSIVE merge of tms5110 and tms5220 cores by Lord Nightmare |
| 15 | Lattice Filter, Multiplier, and clipping redone by Lord Nightmare |
| 16 | TMS5220C multi-rate feature added by Lord Nightmare |
| 14 | 17 | |
| 15 | 18 | Much information regarding these lpc encoding comes from US patent 4,209,844 |
| 16 | 19 | US patent 4,331,836 describes the complete 51xx chip |
| r7882 | r7883 | |
| 45 | 48 | cpu cores. |
| 46 | 49 | If a command is still executing, /READY will be kept high until the command has |
| 47 | 50 | finished if the next command is written. |
| 48 | | TMS5220C: see below. |
| 49 | 51 | tomcat has a 5220 which is not hooked up at all |
| 50 | 52 | |
| 53 | Progress list for drivers using old vs new interface: |
| 54 | starwars: uses new interface (couriersud) |
| 55 | gauntlet: uses new interface (couriersud |
| 56 | atarisy1: uses new interface (Lord Nightmare) |
| 57 | atarisy2: uses new interface (Lord Nightmare) |
| 58 | atarijsa: uses new interface (Lord Nightmare) |
| 59 | firefox: uses new interface (couriersud) |
| 60 | mhavoc: uses old interface, and is in the machine file instead of the driver. |
| 61 | monymony(zaccaria.c): uses new interface (couriersud) |
| 62 | victory(audio/exidy.c): uses new interface (couriersud) |
| 63 | looping: uses old interface |
| 64 | portraits: uses *NO* interface; the i/o cpu hasn't been hooked to anything! |
| 65 | dotron and midwayfb(mcr.c): uses old interface |
| 66 | |
| 51 | 67 | Notes: |
| 52 | 68 | Looping has the tms5220 hookep up directly to the cpu. However currently the |
| 53 | 69 | tms9900 cpu core does not support a ready line. |
| r7882 | r7883 | |
| 113 | 129 | serial chips); Street Electronics Corp.'s Apple II 'Echo 2' Speech |
| 114 | 130 | synthesizer (early cards only) |
| 115 | 131 | |
| 116 | | TMS5220: (mostly on things made between 1982 and 1984-1985 when supplies |
| 117 | | ran low) |
| 132 | TMS5220: (mostly on things made between 1982 and 1984-1985) |
| 118 | 133 | Arcade: Bally/Midway's 'NFL Football'; Atari's 'Star Wars', |
| 119 | 134 | 'Firefox', 'Return of the Jedi', 'Road Runner', 'The Empire Strikes |
| 120 | 135 | Back' (all verified with schematics); Venture Line's 'Looping' and 'Sky |
| r7882 | r7883 | |
| 136 | 151 | module (6511 based), IBM PS/2 Speech adapter (parallel port connection |
| 137 | 152 | device), PES Speech adapter (serial port connection) |
| 138 | 153 | |
| 154 | Changes by R. Nabet (from 2001) |
| 155 | * added Speech ROM support |
| 156 | * modified code so that the beast only start speaking at the start of next frame, like the data |
| 157 | sheet says |
| 139 | 158 | |
| 140 | 159 | ***********************************************************************************************/ |
| 141 | 160 | |
| r7882 | r7883 | |
| 143 | 162 | #include "streams.h" |
| 144 | 163 | #include "tms5220.h" |
| 145 | 164 | |
| 165 | /* *****optional defines***** */ |
| 146 | 166 | |
| 147 | | #define VERBOSE (0) |
| 148 | | #define LOG(x) do { if (VERBOSE) logerror x; } while (0) |
| 167 | /* this ignores pitch, and uses a sawtooth wave for the voiced and unvoiced waveforms as a test, if not set */ |
| 168 | #define NORMALMODE 1 |
| 149 | 169 | |
| 150 | | #define MAX_SAMPLE_CHUNK 512 |
| 151 | | #define FIFO_SIZE 16 |
| 170 | /* if not defined, output the waveform as if it was tapped on the i/o pin */ |
| 171 | #define DO_CLIP_AND_WRAP 1 |
| 152 | 172 | |
| 173 | /* if defined, interpolation is only using the said slot of the 8,8,8,4,4,4,2,1 slots |
| 174 | i.e. setting to 7 effectively disables interpolation, as it adds 1/1 of the difference |
| 175 | between current and target to the current each frame */ |
| 176 | #undef OVERRIDE_INTERPOLATION |
| 153 | 177 | |
| 154 | | enum _tms5220_variant |
| 155 | | { |
| 156 | | variant_tms5220c, /* TMS5220_IS_TMS5220C TMS5220_IS_TSP5220C */ |
| 157 | | variant_tms5220, /* TMS5220_IS_TMS5220 */ |
| 158 | | variant_tmc0285 /* TMS5220_IS_TMS5200, TMS5220_IS_CD2501 */ |
| 159 | | }; |
| 160 | | typedef enum _tms5220_variant tms5220_variant; |
| 178 | /* defines how many times to leftshift the chirp rom before feeding to the lattice filter. default is 0 */ |
| 179 | #define CHIRPROM_LEFTSHIFT 0 |
| 161 | 180 | |
| 181 | /* *****debugging defines***** */ |
| 182 | #undef VERBOSE |
| 183 | // above is general, somewhat obsolete |
| 184 | #undef DEBUG_FIFO |
| 185 | // above debugs fifo stuff: writes, reads and flag updates |
| 186 | #undef DEBUG_FRAME_DUMP |
| 187 | // above dumps the contents of each decoded speech frame as hex |
| 188 | #undef DEBUG_FRAME_INFO |
| 189 | // above dumps information about each decoded speech frame |
| 190 | #undef DEBUG_FRAME_ERRORS |
| 191 | // above dumps info if a frame ran out of data |
| 192 | #undef DEBUG_COMMAND_DUMP |
| 193 | // above dumps all non-speech-data command writes |
| 194 | #undef DEBUG_PIN_READS |
| 195 | // above spams the errorlog with i/o ready messages whenever the ready or irq pin is read |
| 196 | #undef DEBUG_GENERATION |
| 197 | // above dumps some debug information related to the sample generation loop, i.e. when ramp frames happen |
| 198 | #undef DEBUG_IO_READY |
| 199 | // above debugs the io ready callback |
| 200 | #undef DEBUG_RS_WS |
| 201 | // above debugs the new up-and-coming tms5220_data_r and data_w access methods which actually respect rs and ws |
| 162 | 202 | |
| 203 | #define MAX_SAMPLE_CHUNK 512 |
| 204 | #define FIFO_SIZE 16 |
| 163 | 205 | |
| 164 | | /* Pull in the ROM tables */ |
| 165 | | #include "tms5220r.c" |
| 206 | /* Variants */ |
| 166 | 207 | |
| 167 | | /* |
| 168 | | Changes by R. Nabet |
| 169 | | * added Speech ROM support |
| 170 | | * modified code so that the beast only start speaking at the start of next frame, like the data |
| 171 | | sheet says |
| 172 | | */ |
| 208 | #define TMS5220_IS_5220C (4) |
| 209 | #define TMS5220_IS_5200 (5) |
| 210 | #define TMS5220_IS_5220 (6) |
| 173 | 211 | |
| 212 | #define TMS5220_IS_TMC0285 TMS5220_IS_5200 |
| 174 | 213 | |
| 214 | UINT8 reload_table[4] = { 0, 50, 100, 150 }; //is the sample count reload for 5220c only; 5200 and 5220 always reload with 0 |
| 215 | |
| 175 | 216 | typedef struct _tms5220_state tms5220_state; |
| 176 | 217 | struct _tms5220_state |
| 177 | 218 | { |
| 219 | /* coefficient tables */ |
| 220 | int variant; /* Variant of the 5xxx - see tms5110r.h */ |
| 221 | |
| 222 | /* coefficient tables */ |
| 223 | const struct tms5100_coeffs *coeff; |
| 224 | |
| 178 | 225 | /* callbacks */ |
| 179 | 226 | devcb_resolved_write_line irq_func; |
| 180 | 227 | |
| r7882 | r7883 | |
| 189 | 236 | /* these contain global status bits */ |
| 190 | 237 | /* |
| 191 | 238 | R Nabet : speak_external is only set when a speak external command is going on. |
| 192 | | tms5220_speaking is set whenever a speak or speak external command is going on. |
| 239 | speaking_now is set whenever a speak or speak external command is going on. |
| 193 | 240 | Note that we really need to do anything in tms5220_process and play samples only when |
| 194 | | tms5220_speaking is true. Else, we can play nothing as well, which is a |
| 241 | speaking_now is true. Else, we can play nothing as well, which is a |
| 195 | 242 | speed-up... |
| 196 | 243 | */ |
| 197 | | UINT8 tms5220_speaking; /* Speak or Speak External command in progress */ |
| 198 | | UINT8 speak_external; /* Speak External command in progress */ |
| 199 | | UINT8 talk_status; /* tms5220 is really currently speaking */ |
| 200 | | UINT8 first_frame; /* we have just started speaking, and we are to parse the first frame */ |
| 201 | | UINT8 last_frame; /* we are doing the frame of sound */ |
| 244 | UINT8 speaking_now; /* Speak or Speak External command in progress */ |
| 245 | UINT8 speak_external; /* Speak External command in progress, writes go to FIFO. */ |
| 246 | UINT8 talk_status; /* TS status bit is 1, i.e. speak or speak external is in progress and we have not encountered a stop frame yet; talk_status differs from speaking_now in that speaking_now is set as soon as a speak or speak external command is started; talk_status does NOT go active until after 8 bytes are written to the fifo on a speak external command, otherwise the two are the same. TS is cleared when a STOP command has just been processed in the speech stream, and a new command is about to be processed. */ |
| 202 | 247 | UINT8 buffer_low; /* FIFO has less than 8 bytes in it */ |
| 203 | 248 | UINT8 buffer_empty; /* FIFO is empty*/ |
| 204 | 249 | UINT8 irq_pin; /* state of the IRQ pin (output) */ |
| 205 | 250 | |
| 206 | 251 | /* these contain data describing the current and previous voice frames */ |
| 207 | | UINT16 old_energy; |
| 208 | | UINT16 old_pitch; |
| 209 | | INT32 old_k[10]; |
| 252 | #define OLD_FRAME_STOP_FLAG (tms->old_frame_energy == COEFF_ENERGY_SENTINEL) // 1 if this was a stop (E = 0xF) frame |
| 253 | #define OLD_FRAME_SILENCE_FLAG (tms->old_frame_energy == 0) // 1 if this was a silence (E=0) frame |
| 254 | #define OLD_FRAME_UNVOICED_FLAG (tms->old_frame_pitch == 0) // 1 if unvoiced, 0 if voiced |
| 255 | UINT16 old_frame_energy; |
| 256 | UINT16 old_frame_pitch; |
| 257 | INT32 old_frame_k[10]; |
| 210 | 258 | |
| 211 | | UINT16 new_energy; |
| 212 | | UINT16 new_pitch; |
| 213 | | INT32 new_k[10]; |
| 259 | #define NEW_FRAME_STOP_FLAG (tms->new_frame_energy == COEFF_ENERGY_SENTINEL) // ditto as above |
| 260 | #define NEW_FRAME_SILENCE_FLAG (tms->new_frame_energy == 0) // ditto as above |
| 261 | #define NEW_FRAME_UNVOICED_FLAG (tms->new_frame_pitch == 0) // ditto as above |
| 262 | UINT16 new_frame_energy; |
| 263 | UINT16 new_frame_pitch; |
| 264 | INT32 new_frame_k[10]; |
| 214 | 265 | |
| 215 | 266 | |
| 216 | 267 | /* these are all used to contain the current state of the sound generation */ |
| r7882 | r7883 | |
| 224 | 275 | |
| 225 | 276 | UINT16 previous_energy; /* needed for lattice filter to match patent */ |
| 226 | 277 | |
| 278 | //UINT8 interp_period; /* TODO: the current interpolation period, counts 1,2,3,4,5,6,7,0 for divide by 8,8,8,4,4,4,2,1 */ |
| 227 | 279 | UINT8 interp_count; /* number of samples within each sub-interpolation period, ranges from 0-24 */ |
| 228 | 280 | UINT8 sample_count; /* number of samples within the ENTIRE interpolation period, ranges from 0-199 */ |
| 281 | UINT8 tms5220c_rate; /* only relevant for tms5220C's multi frame rate feature; is the actual 4 bit value written on a 0x2* or 0x0* command */ |
| 229 | 282 | UINT16 pitch_count; /* pitch counter; provides chirp rom address */ |
| 230 | 283 | |
| 231 | 284 | INT32 u[11]; |
| 232 | 285 | INT32 x[10]; |
| 233 | 286 | |
| 234 | 287 | INT32 RNG; /* the random noise generator configuration is: 1 + x + x^3 + x^4 + x^13 */ |
| 235 | | INT8 excitation_data; |
| 288 | INT16 excitation_data; |
| 236 | 289 | |
| 237 | 290 | /* R Nabet : These have been added to emulate speech Roms */ |
| 238 | 291 | UINT8 schedule_dummy_read; /* set after each load address, so that next read operation |
| r7882 | r7883 | |
| 256 | 309 | UINT8 read_latch; |
| 257 | 310 | UINT8 write_latch; |
| 258 | 311 | |
| 259 | | /* flag for variant tmc0285/tms5200 emulation */ |
| 260 | | /* The TMC0285 AKA TMS5200 is an earlier variant of the TMS5220 used in |
| 261 | | the early releases of the Speech Module for the TI-99/4(a) computer, |
| 262 | | in Zaccaria's 'Money Money', and in a few other places. |
| 263 | | The TMS5200 has a different set of LPC coefficients, and a different |
| 264 | | chirp table than the 5220 (which is not yet dumped) |
| 265 | | Due to the vast superiority of the quality of the TMS5220, TI may have |
| 266 | | sold the remaining stocks of TMS5200s at a discount, and provided a |
| 267 | | special encoder to use the older tables. |
| 268 | | Other than those differences, the two chips are identical. |
| 269 | | Another variant of the TMS5220 is the TMS5220C/TSP5220C, which replaces |
| 270 | | the X0X0 'NOP' opcode with an opcode to select the number of |
| 271 | | interpolations per frame to either be defined at each frame, or be fixed |
| 272 | | at either 8, 6, 4, or 2. The TMS5200/5220 is always fixed at 8. |
| 273 | | */ |
| 274 | | tms5220_variant variant; |
| 275 | 312 | /* The TMS52xx has two different ways of providing output data: the |
| 276 | 313 | analog speaker pin (which was usually used) and the Digital I/O pin. |
| 277 | 314 | The internal DAC used to feed the analog pin is only 8 bits, and has the |
| r7882 | r7883 | |
| 287 | 324 | }; |
| 288 | 325 | |
| 289 | 326 | |
| 327 | /* Pull in the ROM tables */ |
| 328 | #include "tms5110r.c" |
| 329 | |
| 330 | |
| 290 | 331 | INLINE tms5220_state *get_safe_token(running_device *device) |
| 291 | 332 | { |
| 292 | 333 | assert(device != NULL); |
| r7882 | r7883 | |
| 299 | 340 | return (tms5220_state *)device->token; |
| 300 | 341 | } |
| 301 | 342 | |
| 302 | | |
| 303 | | |
| 304 | 343 | /* Static function prototypes */ |
| 305 | | static void process_command(tms5220_state *tms); |
| 306 | | static int parse_frame(tms5220_state *tms, int the_first_frame); |
| 307 | | static void check_buffer_low(tms5220_state *tms); |
| 344 | static void process_command(tms5220_state *tms, unsigned char data); |
| 345 | static void parse_frame(tms5220_state *tms); |
| 346 | static void update_status_and_ints(tms5220_state *tms); |
| 308 | 347 | static void set_interrupt_state(tms5220_state *tms, int state); |
| 309 | 348 | static INT16 lattice_filter(tms5220_state *tms); |
| 310 | 349 | static INT16 clip_and_wrap(INT16 cliptemp); |
| 311 | 350 | static STREAM_UPDATE( tms5220_update ); |
| 312 | 351 | |
| 352 | void tms5220_set_variant(tms5220_state *tms, int variant) |
| 353 | { |
| 354 | switch (variant) |
| 355 | { |
| 356 | case TMS5220_IS_5220C: |
| 357 | tms->coeff = &tms5220c_coeff; |
| 358 | break; |
| 359 | case TMS5220_IS_5200: |
| 360 | tms->coeff = &tms5200_coeff; |
| 361 | break; |
| 362 | case TMS5220_IS_5220: |
| 363 | tms->coeff = &tms5220_coeff; |
| 364 | break; |
| 365 | default: |
| 366 | fatalerror("Unknown variant in tms5220_set_variant\n"); |
| 367 | } |
| 313 | 368 | |
| 369 | tms->variant = variant; |
| 370 | } |
| 371 | |
| 372 | |
| 314 | 373 | static void register_for_save_states(tms5220_state *tms) |
| 315 | 374 | { |
| 316 | 375 | state_save_register_device_item_array(tms->device, 0, tms->fifo); |
| r7882 | r7883 | |
| 319 | 378 | state_save_register_device_item(tms->device, 0, tms->fifo_count); |
| 320 | 379 | state_save_register_device_item(tms->device, 0, tms->fifo_bits_taken); |
| 321 | 380 | |
| 322 | | state_save_register_device_item(tms->device, 0, tms->tms5220_speaking); |
| 381 | state_save_register_device_item(tms->device, 0, tms->speaking_now); |
| 323 | 382 | state_save_register_device_item(tms->device, 0, tms->speak_external); |
| 324 | 383 | state_save_register_device_item(tms->device, 0, tms->talk_status); |
| 325 | | state_save_register_device_item(tms->device, 0, tms->first_frame); |
| 326 | | state_save_register_device_item(tms->device, 0, tms->last_frame); |
| 327 | 384 | state_save_register_device_item(tms->device, 0, tms->buffer_low); |
| 328 | 385 | state_save_register_device_item(tms->device, 0, tms->buffer_empty); |
| 329 | 386 | state_save_register_device_item(tms->device, 0, tms->irq_pin); |
| 330 | 387 | |
| 331 | | state_save_register_device_item(tms->device, 0, tms->old_energy); |
| 332 | | state_save_register_device_item(tms->device, 0, tms->old_pitch); |
| 333 | | state_save_register_device_item_array(tms->device, 0, tms->old_k); |
| 388 | state_save_register_device_item(tms->device, 0, tms->old_frame_energy); |
| 389 | state_save_register_device_item(tms->device, 0, tms->old_frame_pitch); |
| 390 | state_save_register_device_item_array(tms->device, 0, tms->old_frame_k); |
| 334 | 391 | |
| 335 | | state_save_register_device_item(tms->device, 0, tms->new_energy); |
| 336 | | state_save_register_device_item(tms->device, 0, tms->new_pitch); |
| 337 | | state_save_register_device_item_array(tms->device, 0, tms->new_k); |
| 392 | state_save_register_device_item(tms->device, 0, tms->new_frame_energy); |
| 393 | state_save_register_device_item(tms->device, 0, tms->new_frame_pitch); |
| 394 | state_save_register_device_item_array(tms->device, 0, tms->new_frame_k); |
| 338 | 395 | |
| 339 | 396 | state_save_register_device_item(tms->device, 0, tms->current_energy); |
| 340 | 397 | state_save_register_device_item(tms->device, 0, tms->current_pitch); |
| r7882 | r7883 | |
| 348 | 405 | |
| 349 | 406 | state_save_register_device_item(tms->device, 0, tms->interp_count); |
| 350 | 407 | state_save_register_device_item(tms->device, 0, tms->sample_count); |
| 408 | state_save_register_device_item(tms->device, 0, tms->tms5220c_rate); |
| 351 | 409 | state_save_register_device_item(tms->device, 0, tms->pitch_count); |
| 352 | 410 | |
| 353 | 411 | state_save_register_device_item_array(tms->device, 0, tms->u); |
| r7882 | r7883 | |
| 373 | 431 | |
| 374 | 432 | static void tms5220_data_write(tms5220_state *tms, int data) |
| 375 | 433 | { |
| 376 | | /* add this byte to the FIFO */ |
| 377 | | if (tms->fifo_count < FIFO_SIZE) |
| 378 | | { |
| 379 | | tms->fifo[tms->fifo_tail] = data; |
| 380 | | tms->fifo_tail = (tms->fifo_tail + 1) % FIFO_SIZE; |
| 381 | | tms->fifo_count++; |
| 434 | if (tms->speak_external) // If we're in speak external mode |
| 435 | { |
| 436 | /* add this byte to the FIFO */ |
| 437 | if (tms->fifo_count < FIFO_SIZE) |
| 438 | { |
| 439 | tms->fifo[tms->fifo_tail] = data; |
| 440 | tms->fifo_tail = (tms->fifo_tail + 1) % FIFO_SIZE; |
| 441 | tms->fifo_count++; |
| 382 | 442 | |
| 383 | | /* if we were speaking, then we're no longer empty */ |
| 384 | | if (tms->speak_external) |
| 385 | | tms->buffer_empty = 0; |
| 443 | /* if we were speaking, then we're no longer empty */ |
| 444 | if (tms->speak_external) |
| 445 | tms->buffer_empty = 0; |
| 446 | #ifdef DEBUG_FIFO |
| 447 | logerror("data_write: Added byte to FIFO (current count=%2d)\n", tms->fifo_count); |
| 448 | } |
| 449 | else |
| 450 | { |
| 386 | 451 | |
| 387 | | LOG(("Added byte to FIFO (size=%2d)\n", tms->fifo_count)); |
| 388 | | } |
| 389 | | else |
| 452 | logerror("data_write: Ran out of room in the FIFO!\n"); |
| 453 | // at this point, /READY should remain HIGH/inactive until the fifo has at least one byte open in it. |
| 454 | #endif |
| 455 | } |
| 456 | |
| 457 | update_status_and_ints(tms); |
| 458 | } |
| 459 | else //(! tms->speak_external) |
| 460 | /* R Nabet : we parse commands at once. It is necessary for such commands as read. */ |
| 461 | process_command(tms,data); |
| 462 | } |
| 463 | |
| 464 | /********************************************************************************************** |
| 465 | |
| 466 | update_status_and_ints -- check to see if the buffer low flag should be on or off |
| 467 | |
| 468 | ***********************************************************************************************/ |
| 469 | |
| 470 | static void update_status_and_ints(tms5220_state *tms) |
| 471 | { |
| 472 | /* update flags and set ints if needed */ |
| 473 | /* BL is set if neither byte 9 nor 8 of the fifo are in use; this |
| 474 | translates to having fifo_count (which ranges from 0 bytes in use to 16 |
| 475 | bytes used) being less than or equal to 8. Victory/Victorba depends on this. */ |
| 476 | if (tms->fifo_count <= 8) |
| 390 | 477 | { |
| 391 | | LOG(("Ran out of room in the FIFO!\n")); |
| 478 | /* generate an interrupt if necessary; if /BL was inactive and is now active, set int. */ |
| 479 | if (!tms->buffer_low) |
| 480 | set_interrupt_state(tms, 1); |
| 481 | tms->buffer_low = 1; |
| 482 | } |
| 483 | else |
| 484 | tms->buffer_low = 0; |
| 485 | |
| 486 | /* BE is set if neither byte 15 nor 14 of the fifo are in use; this |
| 487 | translates to having fifo_count equal to exactly 0 */ |
| 488 | if (tms->fifo_count == 0) |
| 489 | { |
| 490 | /* generate an interrupt if necessary; if /BE was inactive and is now active, set int. */ |
| 491 | if (!tms->buffer_empty) |
| 492 | set_interrupt_state(tms, 1); |
| 493 | tms->buffer_empty = 1; |
| 392 | 494 | } |
| 495 | else |
| 496 | tms->buffer_empty = 0; |
| 393 | 497 | |
| 394 | | /* update the buffer low state */ |
| 395 | | check_buffer_low(tms); |
| 498 | /* TS is talk status and is set elsewhere in the fifo parser and in |
| 499 | the SPEAK command handler; however, if /BE is true during speak external |
| 500 | mode, it is immediately unset here. */ |
| 501 | if ((tms->speak_external == 1) && (tms->buffer_empty == 1)) |
| 502 | { |
| 503 | /* generate an interrupt if necessary; if /TS was active and is now inactive, set int. */ |
| 504 | if (tms->talk_status == 1) |
| 505 | set_interrupt_state(tms, 1); |
| 506 | tms->talk_status = 0; |
| 507 | } |
| 508 | /* Note that TS being unset will also generate an interrupt when a STOP |
| 509 | frame is encountered; this is handled in the sample generator code and not here */ |
| 510 | } |
| 396 | 511 | |
| 397 | | if (! tms->speak_external) |
| 398 | | /* R Nabet : we parse commands at once. It is necessary for such commands as read. */ |
| 399 | | process_command (tms/*data*/); |
| 512 | /********************************************************************************************** |
| 513 | |
| 514 | extract_bits -- extract a specific number of bits from the current input stream (FIFO or VSM) |
| 515 | |
| 516 | ***********************************************************************************************/ |
| 517 | |
| 518 | static int extract_bits(tms5220_state *tms, int count) |
| 519 | { |
| 520 | int val = 0; |
| 521 | |
| 522 | if (tms->speak_external) |
| 523 | { |
| 524 | /* extract from FIFO */ |
| 525 | while (count--) |
| 526 | { |
| 527 | val = (val << 1) | ((tms->fifo[tms->fifo_head] >> tms->fifo_bits_taken) & 1); |
| 528 | tms->fifo_bits_taken++; |
| 529 | if (tms->fifo_bits_taken >= 8) |
| 530 | { |
| 531 | tms->fifo_count--; |
| 532 | tms->fifo[tms->fifo_head] = 0; // zero the newly depleted fifo head byte |
| 533 | tms->fifo_head = (tms->fifo_head + 1) % FIFO_SIZE; |
| 534 | tms->fifo_bits_taken = 0; |
| 535 | update_status_and_ints(tms); |
| 536 | } |
| 537 | } |
| 538 | } |
| 539 | else |
| 540 | { |
| 541 | /* extract from VSM (speech ROM) */ |
| 542 | if (tms->intf->read) |
| 543 | val = (* tms->intf->read)(tms->device, count); |
| 544 | } |
| 545 | |
| 546 | return val; |
| 400 | 547 | } |
| 401 | 548 | |
| 402 | | |
| 403 | 549 | /********************************************************************************************** |
| 404 | 550 | |
| 405 | 551 | tms5220_status_read -- read status or data from the TMS5220 |
| r7882 | r7883 | |
| 433 | 579 | else |
| 434 | 580 | { /* read status */ |
| 435 | 581 | |
| 436 | | /* clear the interrupt pin */ |
| 582 | /* clear the interrupt pin on status read */ |
| 437 | 583 | set_interrupt_state(tms, 0); |
| 584 | #ifdef DEBUG_PIN_READS |
| 585 | logerror("Status read: TS=%d BL=%d BE=%d\n", tms->talk_status, tms->buffer_low, tms->buffer_empty); |
| 586 | #endif |
| 438 | 587 | |
| 439 | | LOG(("Status read: TS=%d BL=%d BE=%d\n", tms->talk_status, tms->buffer_low, tms->buffer_empty)); |
| 440 | | |
| 441 | 588 | return (tms->talk_status << 7) | (tms->buffer_low << 6) | (tms->buffer_empty << 5); |
| 442 | 589 | } |
| 443 | 590 | } |
| r7882 | r7883 | |
| 452 | 599 | |
| 453 | 600 | static int tms5220_ready_read(tms5220_state *tms) |
| 454 | 601 | { |
| 455 | | LOG(("io_ready %d\n", tms->io_ready)); |
| 456 | | return (tms->fifo_count < FIFO_SIZE-1) && tms->io_ready; |
| 602 | #ifdef DEBUG_PIN_READS |
| 603 | logerror("ready_read: ready pin read, io_ready is %d, fifo count is %d\n", tms->io_ready, tms->fifo_count); |
| 604 | #endif |
| 605 | return ((tms->fifo_count < FIFO_SIZE)||(!tms->speak_external)) && tms->io_ready; |
| 457 | 606 | } |
| 458 | 607 | |
| 459 | 608 | |
| r7882 | r7883 | |
| 506 | 655 | |
| 507 | 656 | static int tms5220_int_read(tms5220_state *tms) |
| 508 | 657 | { |
| 658 | #ifdef DEBUG_PIN_READS |
| 659 | logerror("int_read: irq pin read, state is %d\n", tms->irq_pin); |
| 660 | #endif |
| 509 | 661 | return tms->irq_pin; |
| 510 | 662 | } |
| 511 | 663 | |
| r7882 | r7883 | |
| 522 | 674 | int buf_count=0; |
| 523 | 675 | int i, interp_period, bitout; |
| 524 | 676 | |
| 525 | | tryagain: |
| 677 | //tryagain: |
| 526 | 678 | |
| 527 | | /* if we're not speaking, parse commands */ |
| 528 | | /*while (!tms->speak_external && tms->fifo_count > 0) |
| 529 | | process_command(tms);*/ |
| 530 | | |
| 531 | 679 | /* if we're empty and still not speaking, fill with nothingness */ |
| 532 | | if ((!tms->tms5220_speaking) && (!tms->last_frame)) |
| 680 | if (!tms->speaking_now) |
| 533 | 681 | goto empty; |
| 534 | 682 | |
| 535 | | /* if we're to speak, but haven't started, wait for the 9th byte */ |
| 683 | /* if speak external is set, but talk status is not (yet) set, |
| 684 | wait for buffer low to clear */ |
| 536 | 685 | if (!tms->talk_status && tms->speak_external) |
| 537 | 686 | { |
| 538 | | if (tms->fifo_count < 9) |
| 687 | if (tms->buffer_low == 1) |
| 539 | 688 | goto empty; |
| 540 | 689 | |
| 690 | /* we now have enough bytes; clear out the new frame parameters (it will become old frame just before the first call to parse_frame() ) */ |
| 691 | tms->new_frame_energy = 0; |
| 692 | tms->new_frame_pitch = 0; |
| 693 | for (i = 0; i < tms->coeff->num_k; i++) |
| 694 | tms->new_frame_k[i] = 0; |
| 695 | |
| 541 | 696 | tms->talk_status = 1; |
| 542 | | tms->first_frame = 1; /* will cause the first frame to be parsed */ |
| 543 | | tms->buffer_empty = 0; |
| 544 | 697 | } |
| 545 | 698 | |
| 546 | 699 | /* loop until the buffer is full or we've stopped speaking */ |
| r7882 | r7883 | |
| 550 | 703 | /* if we're ready for a new frame */ |
| 551 | 704 | if ((tms->interp_count == 0) && (tms->sample_count == 0)) |
| 552 | 705 | { |
| 553 | | /* Parse a new frame */ |
| 554 | | if (!parse_frame(tms, tms->first_frame)) |
| 555 | | break; |
| 556 | | tms->first_frame = 0; |
| 557 | 706 | |
| 558 | | /* Set old target as new start of frame */ |
| 559 | | tms->current_energy = tms->old_energy; |
| 560 | | tms->current_pitch = tms->old_pitch; |
| 561 | | for (i = 0; i < 10; i++) |
| 562 | | tms->current_k[i] = tms->old_k[i]; |
| 707 | /* remember previous frame energy, pitch, and coefficients */ |
| 708 | tms->old_frame_energy = tms->new_frame_energy; |
| 709 | tms->old_frame_pitch = tms->new_frame_pitch; |
| 710 | for (i = 0; i < tms->coeff->num_k; i++) |
| 711 | tms->old_frame_k[i] = tms->new_frame_k[i]; |
| 563 | 712 | |
| 564 | | /* is this a zero energy frame? */ |
| 565 | | if (tms->current_energy == 0) |
| 566 | | { |
| 567 | | /*mame_printf_debug("processing frame: zero energy\n");*/ |
| 568 | | tms->target_energy = 0; |
| 569 | | tms->target_pitch = tms->current_pitch; |
| 570 | | for (i = 0; i < 10; i++) |
| 571 | | tms->target_k[i] = tms->current_k[i]; |
| 572 | | } |
| 713 | /* if the old frame was a stop frame, exit and do not process any more frames */ |
| 714 | if (OLD_FRAME_STOP_FLAG) |
| 715 | { |
| 716 | #ifdef DEBUG_GENERATION |
| 717 | logerror("tms5220_process: processing frame: stop frame\n"); |
| 718 | #endif |
| 719 | tms->speaking_now = tms->talk_status = tms->speak_external = 0; |
| 720 | set_interrupt_state(tms, 1); // TS went inactive, so int is raised |
| 721 | tms->sample_count = reload_table[tms->tms5220c_rate&0x3]; |
| 722 | update_status_and_ints(tms); |
| 723 | goto empty; |
| 724 | } |
| 573 | 725 | |
| 574 | | /* is this a stop frame? */ |
| 575 | | else if (tms->current_energy == (energytable[15] >> 6)) |
| 576 | | { |
| 577 | | /*mame_printf_debug("processing frame: stop frame\n");*/ |
| 578 | | tms->current_energy = energytable[0] >> 6; |
| 579 | | tms->target_energy = tms->current_energy; |
| 580 | | /*tms->interp_count = tms->sample_count =*/ tms->pitch_count = 0; |
| 581 | | tms->last_frame = 0; |
| 582 | | if (tms->tms5220_speaking) |
| 583 | | /* new speech command in progress */ |
| 584 | | tms->first_frame = 1; |
| 585 | | else |
| 586 | | { |
| 587 | | /* really stop speaking */ |
| 588 | | tms->talk_status = 0; |
| 589 | 726 | |
| 590 | | /* generate an interrupt if necessary */ |
| 591 | | set_interrupt_state(tms, 1); |
| 592 | | } |
| 727 | /* Parse a new frame into the new_target_energy, new_target_pitch and new_target_k[] */ |
| 728 | parse_frame(tms); |
| 593 | 729 | |
| 594 | | /* try to fetch commands again */ |
| 595 | | goto tryagain; |
| 596 | | } |
| 597 | | else |
| 598 | | { |
| 599 | | /* is this the ramp down frame? */ |
| 600 | | if (tms->new_energy == (energytable[15] >> 6)) |
| 601 | | { |
| 602 | | /*mame_printf_debug("processing frame: ramp down\n");*/ |
| 603 | | tms->target_energy = 0; |
| 604 | | tms->target_pitch = tms->current_pitch; |
| 605 | | for (i = 0; i < 10; i++) |
| 606 | | tms->target_k[i] = tms->current_k[i]; |
| 607 | | } |
| 608 | | /* Reset the step size */ |
| 609 | | else |
| 610 | | { |
| 611 | | /*mame_printf_debug("processing frame: Normal\n");*/ |
| 612 | | /*mame_printf_debug("*** Energy = %d\n",tms->current_energy);*/ |
| 613 | | /*mame_printf_debug("proc: %d %d\n",last_fbuf_head,fbuf_head);*/ |
| 614 | 730 | |
| 615 | | tms->target_energy = tms->new_energy; |
| 616 | | tms->target_pitch = tms->new_pitch; |
| 731 | /* Set old frame targets as starting point of new frame */ |
| 732 | tms->current_energy = tms->old_frame_energy; |
| 733 | tms->current_pitch = tms->old_frame_pitch; |
| 734 | for (i = 0; i < tms->coeff->num_k; i++) |
| 735 | tms->current_k[i] = tms->old_frame_k[i]; |
| 617 | 736 | |
| 618 | | for (i = 0; i < 4; i++) |
| 619 | | tms->target_k[i] = tms->new_k[i]; |
| 620 | | if (tms->current_pitch == 0) |
| 621 | | for (i = 4; i < 10; i++) |
| 622 | | { |
| 623 | | tms->target_k[i] = tms->current_k[i] = 0; |
| 624 | | } |
| 625 | | else |
| 626 | | for (i = 4; i < 10; i++) |
| 627 | | tms->target_k[i] = tms->new_k[i]; |
| 628 | | } |
| 629 | | } |
| 737 | |
| 738 | /* in all cases where interpolation would be inhibited, set the target |
| 739 | value equal to the current value. |
| 740 | Interpolation inhibit cases: |
| 741 | * Old frame was voiced, new is unvoiced |
| 742 | * Old frame was silence/zero energy, new is unvoiced |
| 743 | * Old frame was unvoiced, new is voiced |
| 744 | * New frame is a silence/zero energy frame - ? not sure |
| 745 | * New frame is a stop frame - ? not sure |
| 746 | */ |
| 747 | if ( ((NEW_FRAME_SILENCE_FLAG == 0) && (NEW_FRAME_STOP_FLAG == 0)) |
| 748 | && ( ((OLD_FRAME_UNVOICED_FLAG == 0) && (NEW_FRAME_UNVOICED_FLAG == 1)) |
| 749 | || ((OLD_FRAME_SILENCE_FLAG == 1) && (NEW_FRAME_UNVOICED_FLAG == 1)) |
| 750 | || ((OLD_FRAME_UNVOICED_FLAG == 1) && (NEW_FRAME_UNVOICED_FLAG == 0)) ) |
| 751 | ) |
| 752 | { |
| 753 | #ifdef DEBUG_GENERATION |
| 754 | logerror("processing frame: interpolation inhibited\n"); |
| 755 | logerror("*** current Energy = %d\n",tms->current_energy); |
| 756 | logerror("*** next frame Energy = %d\n",tms->new_frame_energy); |
| 757 | #endif |
| 758 | tms->target_energy = tms->current_energy; |
| 759 | tms->target_pitch = tms->current_pitch; |
| 760 | for (i = 0; i < tms->coeff->num_k; i++) |
| 761 | tms->target_k[i] = tms->current_k[i]; |
| 762 | } |
| 763 | /* in cases where the new frame is a STOP or SILENCE frame, |
| 764 | ramp the energy down to 0, leaving everything else alone. */ |
| 765 | else if ((NEW_FRAME_SILENCE_FLAG == 1) || (NEW_FRAME_STOP_FLAG == 1)) |
| 766 | { |
| 767 | #ifdef DEBUG_GENERATION |
| 768 | logerror("processing frame: ramp-down (energy = 0 or STOP)\n"; |
| 769 | #endif |
| 770 | tms->target_energy = 0; |
| 771 | tms->target_pitch = tms->current_pitch; |
| 772 | for (i = 0; i < tms->coeff->num_k; i++) |
| 773 | tms->target_k[i] = tms->current_k[i]; |
| 774 | } |
| 775 | else // normal frame, normal interpolation |
| 776 | { |
| 777 | #ifdef DEBUG_GENERATION |
| 778 | logerror("processing frame: Normal\n"); |
| 779 | logerror("*** current Energy = %d\n",tms->current_energy); |
| 780 | logerror("*** new (target) Energy = %d\n",tms->new_frame_energy); |
| 781 | #endif |
| 782 | |
| 783 | tms->target_energy = tms->new_frame_energy; |
| 784 | tms->target_pitch = tms->new_frame_pitch; |
| 785 | for (i = 0; i < tms->coeff->num_k; i++) |
| 786 | tms->target_k[i] = tms->new_frame_k[i]; |
| 787 | } |
| 788 | } |
| 789 | else // Not a new frame, just interpolate the existing frame. |
| 790 | { |
| 791 | #ifdef OVERRIDE_INTERPOLATION |
| 792 | interp_period = OVERRIDE_INTERPOLATION; |
| 793 | #else |
| 794 | interp_period = tms->sample_count / 25; |
| 795 | #endif |
| 796 | switch(tms->interp_count) |
| 797 | { |
| 798 | /* PC=X X cycle, rendering change (change for next cycle which chip is actually doing) */ |
| 799 | case 0: /* PC=0, A cycle, nothing happens (calc energy) */ |
| 800 | break; |
| 801 | case 1: /* PC=0, B cycle, nothing happens (update energy) */ |
| 802 | break; |
| 803 | case 2: /* PC=1, A cycle, update energy (calc pitch) */ |
| 804 | tms->current_energy += ((tms->target_energy - tms->current_energy) >> tms->coeff->interp_coeff[interp_period]); |
| 805 | break; |
| 806 | case 3: /* PC=1, B cycle, nothing happens (update pitch) */ |
| 807 | break; |
| 808 | case 4: /* PC=2, A cycle, update pitch (calc K1) */ |
| 809 | tms->current_pitch += ((tms->target_pitch - tms->current_pitch) >> tms->coeff->interp_coeff[interp_period]); |
| 810 | break; |
| 811 | case 5: /* PC=2, B cycle, nothing happens (update K1) */ |
| 812 | break; |
| 813 | case 6: /* PC=3, A cycle, update K1 (calc K2) */ |
| 814 | tms->current_k[0] += ((tms->target_k[0] - tms->current_k[0]) >> tms->coeff->interp_coeff[interp_period]); |
| 815 | break; |
| 816 | case 7: /* PC=3, B cycle, nothing happens (update K2) */ |
| 817 | break; |
| 818 | case 8: /* PC=4, A cycle, update K2 (calc K3) */ |
| 819 | tms->current_k[1] += ((tms->target_k[1] - tms->current_k[1]) >> tms->coeff->interp_coeff[interp_period]); |
| 820 | break; |
| 821 | case 9: /* PC=4, B cycle, nothing happens (update K3) */ |
| 822 | break; |
| 823 | case 10: /* PC=5, A cycle, update K3 (calc K4) */ |
| 824 | tms->current_k[2] += ((tms->target_k[2] - tms->current_k[2]) >> tms->coeff->interp_coeff[interp_period]); |
| 825 | break; |
| 826 | case 11: /* PC=5, B cycle, nothing happens (update K4) */ |
| 827 | break; |
| 828 | case 12: /* PC=6, A cycle, update K4 (calc K5) */ |
| 829 | tms->current_k[3] += ((tms->target_k[3] - tms->current_k[3]) >> tms->coeff->interp_coeff[interp_period]); |
| 830 | break; |
| 831 | case 13: /* PC=6, B cycle, nothing happens (update K5) */ |
| 832 | break; |
| 833 | case 14: /* PC=7, A cycle, update K5 (calc K6) */ |
| 834 | tms->current_k[4] += ((tms->target_k[4] - tms->current_k[4]) >> tms->coeff->interp_coeff[interp_period]); |
| 835 | break; |
| 836 | case 15: /* PC=7, B cycle, nothing happens (update K6) */ |
| 837 | break; |
| 838 | case 16: /* PC=8, A cycle, update K6 (calc K7) */ |
| 839 | tms->current_k[5] += ((tms->target_k[5] - tms->current_k[5]) >> tms->coeff->interp_coeff[interp_period]); |
| 840 | break; |
| 841 | case 17: /* PC=8, B cycle, nothing happens (update K7) */ |
| 842 | break; |
| 843 | case 18: /* PC=9, A cycle, update K7 (calc K8) */ |
| 844 | tms->current_k[6] += ((tms->target_k[6] - tms->current_k[6]) >> tms->coeff->interp_coeff[interp_period]); |
| 845 | break; |
| 846 | case 19: /* PC=9, B cycle, nothing happens (update K8) */ |
| 847 | break; |
| 848 | case 20: /* PC=10, A cycle, update K8 (calc K9) */ |
| 849 | tms->current_k[7] += ((tms->target_k[7] - tms->current_k[7]) >> tms->coeff->interp_coeff[interp_period]); |
| 850 | break; |
| 851 | case 21: /* PC=10, B cycle, nothing happens (update K9) */ |
| 852 | break; |
| 853 | case 22: /* PC=11, A cycle, update K9 (calc K10) */ |
| 854 | tms->current_k[8] += ((tms->target_k[8] - tms->current_k[8]) >> tms->coeff->interp_coeff[interp_period]); |
| 855 | break; |
| 856 | case 23: /* PC=11, B cycle, nothing happens (update K10) */ |
| 857 | break; |
| 858 | case 24: /* PC=12, A cycle, update K10 (do nothing) */ |
| 859 | tms->current_k[9] += ((tms->target_k[9] - tms->current_k[9]) >> tms->coeff->interp_coeff[interp_period]); |
| 860 | break; |
| 861 | } |
| 630 | 862 | } |
| 631 | | else |
| 632 | | { |
| 633 | | interp_period = tms->sample_count / 25; |
| 634 | | switch(tms->interp_count) |
| 635 | | { |
| 636 | | /* PC=X X cycle, rendering change (change for next cycle which chip is actually doing) */ |
| 637 | | case 0: /* PC=0, A cycle, nothing happens (calc energy) */ |
| 638 | | break; |
| 639 | | case 1: /* PC=0, B cycle, nothing happens (update energy) */ |
| 640 | | break; |
| 641 | | case 2: /* PC=1, A cycle, update energy (calc pitch) */ |
| 642 | | tms->current_energy += ((tms->target_energy - tms->current_energy) >> interp_coeff[interp_period]); |
| 643 | | break; |
| 644 | | case 3: /* PC=1, B cycle, nothing happens (update pitch) */ |
| 645 | | break; |
| 646 | | case 4: /* PC=2, A cycle, update pitch (calc K1) */ |
| 647 | | if (tms->old_pitch != 0) |
| 648 | | tms->current_pitch += ((tms->target_pitch - tms->current_pitch) >> interp_coeff[interp_period]); |
| 649 | | break; |
| 650 | | case 5: /* PC=2, B cycle, nothing happens (update K1) */ |
| 651 | | break; |
| 652 | | case 6: /* PC=3, A cycle, update K1 (calc K2) */ |
| 653 | | tms->current_k[0] += ((tms->target_k[0] - tms->current_k[0]) >> interp_coeff[interp_period]); |
| 654 | | break; |
| 655 | | case 7: /* PC=3, B cycle, nothing happens (update K2) */ |
| 656 | | break; |
| 657 | | case 8: /* PC=4, A cycle, update K2 (calc K3) */ |
| 658 | | tms->current_k[1] += ((tms->target_k[1] - tms->current_k[1]) >> interp_coeff[interp_period]); |
| 659 | | break; |
| 660 | | case 9: /* PC=4, B cycle, nothing happens (update K3) */ |
| 661 | | break; |
| 662 | | case 10: /* PC=5, A cycle, update K3 (calc K4) */ |
| 663 | | tms->current_k[2] += ((tms->target_k[2] - tms->current_k[2]) >> interp_coeff[interp_period]); |
| 664 | | break; |
| 665 | | case 11: /* PC=5, B cycle, nothing happens (update K4) */ |
| 666 | | break; |
| 667 | | case 12: /* PC=6, A cycle, update K4 (calc K5) */ |
| 668 | | tms->current_k[3] += ((tms->target_k[3] - tms->current_k[3]) >> interp_coeff[interp_period]); |
| 669 | | break; |
| 670 | | case 13: /* PC=6, B cycle, nothing happens (update K5) */ |
| 671 | | break; |
| 672 | | case 14: /* PC=7, A cycle, update K5 (calc K6) */ |
| 673 | | tms->current_k[4] += ((tms->target_k[4] - tms->current_k[4]) >> interp_coeff[interp_period]); |
| 674 | | break; |
| 675 | | case 15: /* PC=7, B cycle, nothing happens (update K6) */ |
| 676 | | break; |
| 677 | | case 16: /* PC=8, A cycle, update K6 (calc K7) */ |
| 678 | | tms->current_k[5] += ((tms->target_k[5] - tms->current_k[5]) >> interp_coeff[interp_period]); |
| 679 | | break; |
| 680 | | case 17: /* PC=8, B cycle, nothing happens (update K7) */ |
| 681 | | break; |
| 682 | | case 18: /* PC=9, A cycle, update K7 (calc K8) */ |
| 683 | | tms->current_k[6] += ((tms->target_k[6] - tms->current_k[6]) >> interp_coeff[interp_period]); |
| 684 | | break; |
| 685 | | case 19: /* PC=9, B cycle, nothing happens (update K8) */ |
| 686 | | break; |
| 687 | | case 20: /* PC=10, A cycle, update K8 (calc K9) */ |
| 688 | | tms->current_k[7] += ((tms->target_k[7] - tms->current_k[7]) >> interp_coeff[interp_period]); |
| 689 | | break; |
| 690 | | case 21: /* PC=10, B cycle, nothing happens (update K9) */ |
| 691 | | break; |
| 692 | | case 22: /* PC=11, A cycle, update K9 (calc K10) */ |
| 693 | | tms->current_k[8] += ((tms->target_k[8] - tms->current_k[8]) >> interp_coeff[interp_period]); |
| 694 | | break; |
| 695 | | case 23: /* PC=11, B cycle, nothing happens (update K10) */ |
| 696 | | break; |
| 697 | | case 24: /* PC=12, A cycle, update K10 (do nothing) */ |
| 698 | | tms->current_k[9] += ((tms->target_k[9] - tms->current_k[9]) >> interp_coeff[interp_period]); |
| 699 | | break; |
| 700 | | } |
| 701 | | } |
| 702 | 863 | |
| 703 | | if (tms->old_pitch == 0) |
| 704 | | { |
| 705 | | /* generate unvoiced samples here */ |
| 864 | /* calculate the output */ |
| 865 | if (OLD_FRAME_UNVOICED_FLAG == 1) |
| 866 | { |
| 867 | /* generate unvoiced samples here */ |
| 706 | 868 | if (tms->RNG & 1) |
| 707 | 869 | tms->excitation_data = -0x40; /* according to the patent it is (either + or -) half of the maximum value in the chirp table, so +-64 */ |
| 708 | 870 | else |
| r7882 | r7883 | |
| 718 | 880 | * disabled, forcing all samples beyond 50d to be == 50d |
| 719 | 881 | * (address 50d holds zeroes) |
| 720 | 882 | */ |
| 883 | #ifdef NORMALMODE |
| 721 | 884 | if (tms->pitch_count > 50) |
| 722 | | tms->excitation_data = chirptable[50]; |
| 885 | tms->excitation_data = tms->coeff->chirptable[50]<<CHIRPROM_LEFTSHIFT; |
| 723 | 886 | else /*tms->pitch_count <= 50*/ |
| 724 | | tms->excitation_data = chirptable[tms->pitch_count]; |
| 887 | tms->excitation_data = tms->coeff->chirptable[tms->pitch_count]<<CHIRPROM_LEFTSHIFT; |
| 888 | #else |
| 889 | tms->excitation_data = tms->pitch_count - 64; |
| 890 | #endif |
| 725 | 891 | } |
| 726 | 892 | |
| 727 | 893 | /* Update LFSR *20* times every sample, like patent shows */ |
| r7882 | r7883 | |
| 737 | 903 | |
| 738 | 904 | buffer[buf_count] = clip_and_wrap(lattice_filter(tms)); /* execute lattice filter and clipping/wrapping */ |
| 739 | 905 | |
| 740 | | if (tms->digital_select == 0) /* if digital is NOT selected... */ |
| 741 | | buffer[buf_count] &= 0xff00; /* mask out all but the 8 dac bits */ |
| 906 | //if (tms->digital_select == 0) /* if digital is NOT selected... */ |
| 907 | // buffer[buf_count] &= 0xff00; /* mask out all but the 8 dac bits */ |
| 742 | 908 | |
| 743 | 909 | /* Update all counts */ |
| 744 | 910 | |
| 745 | 911 | size--; |
| 746 | 912 | tms->sample_count = (tms->sample_count + 1) % 200; |
| 747 | | |
| 913 | #ifdef NORMALMODE |
| 748 | 914 | if (tms->current_pitch != 0) |
| 749 | 915 | tms->pitch_count = (tms->pitch_count + 1) % tms->current_pitch; |
| 750 | 916 | else |
| 751 | | tms->pitch_count = 0; |
| 917 | tms->pitch_count = 51; // blank spot in the chirp rom |
| 918 | #else |
| 919 | tms->pitch_count = (tms->pitch_count + 1) % 128; |
| 920 | #endif |
| 752 | 921 | |
| 753 | 922 | tms->interp_count = (tms->interp_count + 1) % 25; |
| 754 | 923 | buf_count++; |
| r7882 | r7883 | |
| 774 | 943 | |
| 775 | 944 | static INT16 clip_and_wrap(INT16 cliptemp) |
| 776 | 945 | { |
| 777 | | /* clipping & wrapping, just like the patent shows */ |
| 946 | /* clipping & wrapping, just like the patent shows: |
| 947 | first of all the result should be clamped to 14 bits, between -16384 and 16383 |
| 948 | */ |
| 949 | while (cliptemp > 16383) cliptemp -= 32768; |
| 950 | while (cliptemp < -16384) cliptemp += 32768; |
| 951 | /* the top 10 bits of this result are visible on the digital output IO pin. |
| 952 | next, if the top 3 bits of the 14 bit result are all the same, the lowest of those 3 bits plus the next 7 bits are the signed analog output, otherwise the low bits are all forced to match the inverse of the topmost bit, i.e.: |
| 953 | 1x xxxx xxxx xxxx -> 0b10000000 |
| 954 | 11 1bcd efgh xxxx -> 0b1bcdefgh |
| 955 | 00 0bcd efgh xxxx -> 0b0bcdefgh |
| 956 | 0x xxxx xxxx xxxx -> 0b01111111 |
| 957 | */ |
| 958 | #ifdef DO_CLIP_AND_WRAP |
| 959 | if (cliptemp > 2047) cliptemp = 2047; |
| 960 | else if (cliptemp < -2048) cliptemp = -2048; |
| 961 | /* at this point the analog output is tapped*/ |
| 962 | return cliptemp << 4; |
| 963 | #else |
| 964 | return cliptemp << 1; |
| 965 | #endif |
| 966 | } |
| 778 | 967 | |
| 779 | | if (cliptemp > 2047) cliptemp = -2048 + (cliptemp-2047); |
| 780 | | else if (cliptemp < -2048) cliptemp = 2047 - (cliptemp+2048); |
| 781 | 968 | |
| 782 | | if (cliptemp > 511) { |
| 783 | | mame_printf_debug ("cliptemp > 511\n"); |
| 784 | | return 127<<8; |
| 785 | | } |
| 786 | | else if (cliptemp < -512) { |
| 787 | | mame_printf_debug ("cliptemp < -512\n"); |
| 788 | | return -128<<8; |
| 789 | | } |
| 790 | | else |
| 791 | | return cliptemp << 6; |
| 969 | /********************************************************************************************** |
| 970 | |
| 971 | ti_matrix_multiply -- does the proper multiply and shift as the TI chips do. |
| 972 | a is the k coefficient and is clamped to 10 bits (9 bits plus a sign) |
| 973 | b is the running result and is clamped to 14 bits. |
| 974 | output is 14 bits, but note the result LSB bit is always 1. |
| 975 | |
| 976 | **********************************************************************************************/ |
| 977 | static INT16 matrix_multiply(INT16 a, INT16 b) |
| 978 | { |
| 979 | INT16 result; |
| 980 | while (a>511) { a-=1024; } |
| 981 | while (a<-512) { a+=1024; } |
| 982 | while (b>16383) { b-=32768; } |
| 983 | while (b<-16384) { b+=32768; } |
| 984 | result = ((a*b)>>9)|1; |
| 985 | #ifdef VERBOSE |
| 986 | if (result>16383) fprintf(stderr,"matrix multiplier overflowed! a: %x, b: %x", a, b); |
| 987 | if (result<-16384) fprintf(stderr,"matrix multiplier underflowed! a: %x, b: %x", a, b); |
| 988 | #endif |
| 989 | return result; |
| 792 | 990 | } |
| 793 | 991 | |
| 794 | | |
| 795 | 992 | /********************************************************************************************** |
| 796 | 993 | |
| 797 | 994 | lattice_filter -- executes one 'full run' of the lattice filter on a specific byte of |
| 798 | 995 | excitation data, and specific values of all the current k constants, and returns the |
| 799 | 996 | resulting sample. |
| 800 | | Note: the current_k processing here by dividing the result by 32768 is necessary, as the stored |
| 801 | | parameters in the lookup table are the 10 bit coefficients but are pre-multiplied by 512 for |
| 802 | | ease of storage. This is undone on the real chip by a shifter here, after the multiply. |
| 803 | 997 | |
| 804 | 998 | ***********************************************************************************************/ |
| 805 | 999 | |
| r7882 | r7883 | |
| 813 | 1007 | Kn = tms->current_k[n-1] |
| 814 | 1008 | bn = tms->x[n-1] |
| 815 | 1009 | */ |
| 816 | | tms->u[10] = (tms->excitation_data * tms->previous_energy) >> 8; /* Y(11) */ |
| 817 | | tms->u[9] = tms->u[10] - ((tms->current_k[9] * tms->x[9]) / 32768); |
| 818 | | tms->u[8] = tms->u[9] - ((tms->current_k[8] * tms->x[8]) / 32768); |
| 819 | | tms->x[9] = tms->x[8] + ((tms->current_k[8] * tms->u[8]) / 32768); |
| 820 | | tms->u[7] = tms->u[8] - ((tms->current_k[7] * tms->x[7]) / 32768); |
| 821 | | tms->x[8] = tms->x[7] + ((tms->current_k[7] * tms->u[7]) / 32768); |
| 822 | | tms->u[6] = tms->u[7] - ((tms->current_k[6] * tms->x[6]) / 32768); |
| 823 | | tms->x[7] = tms->x[6] + ((tms->current_k[6] * tms->u[6]) / 32768); |
| 824 | | tms->u[5] = tms->u[6] - ((tms->current_k[5] * tms->x[5]) / 32768); |
| 825 | | tms->x[6] = tms->x[5] + ((tms->current_k[5] * tms->u[5]) / 32768); |
| 826 | | tms->u[4] = tms->u[5] - ((tms->current_k[4] * tms->x[4]) / 32768); |
| 827 | | tms->x[5] = tms->x[4] + ((tms->current_k[4] * tms->u[4]) / 32768); |
| 828 | | tms->u[3] = tms->u[4] - ((tms->current_k[3] * tms->x[3]) / 32768); |
| 829 | | tms->x[4] = tms->x[3] + ((tms->current_k[3] * tms->u[3]) / 32768); |
| 830 | | tms->u[2] = tms->u[3] - ((tms->current_k[2] * tms->x[2]) / 32768); |
| 831 | | tms->x[3] = tms->x[2] + ((tms->current_k[2] * tms->u[2]) / 32768); |
| 832 | | tms->u[1] = tms->u[2] - ((tms->current_k[1] * tms->x[1]) / 32768); |
| 833 | | tms->x[2] = tms->x[1] + ((tms->current_k[1] * tms->u[1]) / 32768); |
| 834 | | tms->u[0] = tms->u[1] - ((tms->current_k[0] * tms->x[0]) / 32768); |
| 835 | | tms->x[1] = tms->x[0] + ((tms->current_k[0] * tms->u[0]) / 32768); |
| 1010 | tms->u[10] = matrix_multiply(tms->current_energy, (tms->excitation_data*64)); //Y(11) |
| 1011 | //tms->u[10] = matrix_multiply((tms->excitation_data*64), tms->current_energy); // wrong but sounds better |
| 1012 | tms->u[9] = tms->u[10] - matrix_multiply(tms->current_k[9], tms->x[9]); |
| 1013 | tms->u[8] = tms->u[9] - matrix_multiply(tms->current_k[8], tms->x[8]); |
| 1014 | tms->x[9] = tms->x[8] + matrix_multiply(tms->current_k[8], tms->u[8]); |
| 1015 | tms->u[7] = tms->u[8] - matrix_multiply(tms->current_k[7], tms->x[7]); |
| 1016 | tms->x[8] = tms->x[7] + matrix_multiply(tms->current_k[7], tms->u[7]); |
| 1017 | tms->u[6] = tms->u[7] - matrix_multiply(tms->current_k[6], tms->x[6]); |
| 1018 | tms->x[7] = tms->x[6] + matrix_multiply(tms->current_k[6], tms->u[6]); |
| 1019 | tms->u[5] = tms->u[6] - matrix_multiply(tms->current_k[5], tms->x[5]); |
| 1020 | tms->x[6] = tms->x[5] + matrix_multiply(tms->current_k[5], tms->u[5]); |
| 1021 | tms->u[4] = tms->u[5] - matrix_multiply(tms->current_k[4], tms->x[4]); |
| 1022 | tms->x[5] = tms->x[4] + matrix_multiply(tms->current_k[4], tms->u[4]); |
| 1023 | tms->u[3] = tms->u[4] - matrix_multiply(tms->current_k[3], tms->x[3]); |
| 1024 | tms->x[4] = tms->x[3] + matrix_multiply(tms->current_k[3], tms->u[3]); |
| 1025 | tms->u[2] = tms->u[3] - matrix_multiply(tms->current_k[2], tms->x[2]); |
| 1026 | tms->x[3] = tms->x[2] + matrix_multiply(tms->current_k[2], tms->u[2]); |
| 1027 | tms->u[1] = tms->u[2] - matrix_multiply(tms->current_k[1], tms->x[1]); |
| 1028 | tms->x[2] = tms->x[1] + matrix_multiply(tms->current_k[1], tms->u[1]); |
| 1029 | tms->u[0] = tms->u[1] - matrix_multiply(tms->current_k[0], tms->x[0]); |
| 1030 | tms->x[1] = tms->x[0] + matrix_multiply(tms->current_k[0], tms->u[0]); |
| 836 | 1031 | tms->x[0] = tms->u[0]; |
| 837 | 1032 | tms->previous_energy = tms->current_energy; |
| 838 | 1033 | return tms->u[0]; |
| r7882 | r7883 | |
| 845 | 1040 | |
| 846 | 1041 | ***********************************************************************************************/ |
| 847 | 1042 | |
| 848 | | static void process_command(tms5220_state *tms) |
| 1043 | static void process_command(tms5220_state *tms, unsigned char cmd) |
| 849 | 1044 | { |
| 850 | | unsigned char cmd; |
| 851 | | |
| 852 | | /* if there are stray bits, ignore them */ |
| 853 | | if (tms->fifo_bits_taken) |
| 854 | | { |
| 855 | | tms->fifo_bits_taken = 0; |
| 856 | | tms->fifo_count--; |
| 857 | | tms->fifo_head = (tms->fifo_head + 1) % FIFO_SIZE; |
| 858 | | } |
| 859 | | |
| 860 | | /* grab a full byte from the FIFO */ |
| 861 | | if (tms->fifo_count > 0) |
| 862 | | { |
| 863 | | cmd = tms->fifo[tms->fifo_head]; |
| 864 | | tms->fifo_count--; |
| 865 | | tms->fifo_head = (tms->fifo_head + 1) % FIFO_SIZE; |
| 866 | | |
| 1045 | #ifdef DEBUG_COMMAND_DUMP |
| 1046 | logerror("process_command called with parameter %02X\n",cmd); |
| 1047 | #endif |
| 867 | 1048 | /* parse the command */ |
| 868 | 1049 | switch (cmd & 0x70) |
| 869 | 1050 | { |
| 870 | 1051 | case 0x10 : /* read byte */ |
| 871 | | if (tms->schedule_dummy_read) |
| 1052 | if (tms->talk_status == 0) /* TALKST must be clear for RDBY */ |
| 872 | 1053 | { |
| 873 | | tms->schedule_dummy_read = FALSE; |
| 1054 | if (tms->schedule_dummy_read) |
| 1055 | { |
| 1056 | tms->schedule_dummy_read = FALSE; |
| 1057 | if (tms->intf->read) |
| 1058 | (*tms->intf->read)(tms->device, 1); |
| 1059 | } |
| 874 | 1060 | if (tms->intf->read) |
| 875 | | (*tms->intf->read)(tms->device, 1); |
| 1061 | tms->data_register = (*tms->intf->read)(tms->device, 8); /* read one byte from speech ROM... */ |
| 1062 | tms->RDB_flag = TRUE; |
| 876 | 1063 | } |
| 877 | | if (tms->intf->read) |
| 878 | | tms->data_register = (*tms->intf->read)(tms->device, 8); /* read one byte from speech ROM... */ |
| 879 | | tms->RDB_flag = TRUE; |
| 880 | 1064 | break; |
| 881 | 1065 | |
| 1066 | case 0x00: case 0x20: /* set rate (tms5220c only), otherwise NOP */ |
| 1067 | if (tms->variant == SUBTYPE_TMS5220C) |
| 1068 | { |
| 1069 | tms->tms5220c_rate = cmd&0x0F; |
| 1070 | } |
| 1071 | break; |
| 1072 | |
| 882 | 1073 | case 0x30 : /* read and branch */ |
| 883 | | LOG(("read and branch command received\n")); |
| 884 | | tms->RDB_flag = FALSE; |
| 885 | | if (tms->intf->read_and_branch) |
| 886 | | (*tms->intf->read_and_branch)(tms->device); |
| 1074 | if (tms->talk_status == 0) /* TALKST must be clear for RB */ |
| 1075 | { |
| 1076 | #ifdef VERBOSE |
| 1077 | logerror("read and branch command received\n"); |
| 1078 | #endif |
| 1079 | tms->RDB_flag = FALSE; |
| 1080 | if (tms->intf->read_and_branch) |
| 1081 | (*tms->intf->read_and_branch)(tms->device); |
| 1082 | } |
| 887 | 1083 | break; |
| 888 | 1084 | |
| 889 | 1085 | case 0x40 : /* load address */ |
| 890 | | /* tms5220 data sheet says that if we load only one 4-bit nibble, it won't work. |
| 891 | | This code does not care about this. */ |
| 892 | | if (tms->intf->load_address) |
| 893 | | (*tms->intf->load_address)(tms->device, cmd & 0x0f); |
| 894 | | tms->schedule_dummy_read = TRUE; |
| 1086 | if (tms->talk_status == 0) /* TALKST must be clear for LA */ |
| 1087 | { |
| 1088 | /* tms5220 data sheet says that if we load only one 4-bit nibble, it won't work. |
| 1089 | This code does not care about this. */ |
| 1090 | if (tms->intf->load_address) |
| 1091 | (*tms->intf->load_address)(tms->device, cmd & 0x0f); |
| 1092 | tms->schedule_dummy_read = TRUE; |
| 1093 | } |
| 895 | 1094 | break; |
| 896 | 1095 | |
| 897 | 1096 | case 0x50 : /* speak */ |
| r7882 | r7883 | |
| 901 | 1100 | if (tms->intf->read) |
| 902 | 1101 | (*tms->intf->read)(tms->device, 1); |
| 903 | 1102 | } |
| 904 | | tms->tms5220_speaking = 1; |
| 1103 | tms->speaking_now = 1; |
| 905 | 1104 | tms->speak_external = 0; |
| 906 | | if (! tms->last_frame) |
| 907 | | { |
| 908 | | tms->first_frame = 1; |
| 909 | | } |
| 910 | 1105 | tms->talk_status = 1; /* start immediately */ |
| 911 | 1106 | break; |
| 912 | 1107 | |
| 913 | 1108 | case 0x60 : /* speak external */ |
| 914 | | tms->tms5220_speaking = tms->speak_external = 1; |
| 915 | | tms->RDB_flag = FALSE; |
| 916 | | |
| 917 | | /* according to the datasheet, this will cause an interrupt due to a BE condition */ |
| 918 | | if (!tms->buffer_empty) |
| 919 | | { |
| 920 | | tms->buffer_empty = 1; |
| 921 | | set_interrupt_state(tms, 1); |
| 922 | | } |
| 923 | | |
| 924 | | tms->talk_status = 0; /* wait to have 8 bytes in buffer before starting */ |
| 1109 | if (tms->talk_status == 0) /* TALKST must be clear for SPKEXT */ |
| 1110 | { |
| 1111 | //SPKEXT going active activates SPKEE which clears the fifo |
| 1112 | tms->fifo_head = tms->fifo_tail = tms->fifo_count = tms->fifo_bits_taken = 0; |
| 1113 | tms->speaking_now = tms->speak_external = 1; |
| 1114 | tms->RDB_flag = FALSE; |
| 1115 | } |
| 925 | 1116 | break; |
| 926 | 1117 | |
| 927 | 1118 | case 0x70 : /* reset */ |
| r7882 | r7883 | |
| 933 | 1124 | } |
| 934 | 1125 | tms->device->reset(); |
| 935 | 1126 | break; |
| 936 | | } |
| 937 | 1127 | } |
| 938 | 1128 | |
| 939 | 1129 | /* update the buffer low state */ |
| 940 | | check_buffer_low(tms); |
| 1130 | update_status_and_ints(tms); |
| 941 | 1131 | } |
| 942 | 1132 | |
| 1133 | /****************************************************************************************** |
| 943 | 1134 | |
| 1135 | parse_frame -- parse a new frame's worth of data; returns 0 if not enough bits in buffer |
| 944 | 1136 | |
| 945 | | /********************************************************************************************** |
| 1137 | ******************************************************************************************/ |
| 946 | 1138 | |
| 947 | | extract_bits -- extract a specific number of bits from the FIFO |
| 948 | | |
| 949 | | ***********************************************************************************************/ |
| 950 | | |
| 951 | | static int extract_bits(tms5220_state *tms, int count) |
| 1139 | static void parse_frame(tms5220_state *tms) |
| 952 | 1140 | { |
| 953 | | int val = 0; |
| 1141 | int bits, indx, i, rep_flag; |
| 1142 | #ifdef DEBUG_FRAME_DUMP |
| 1143 | int ene; |
| 1144 | #endif |
| 954 | 1145 | |
| 1146 | // todo: we actually don't care how many bits are left in the fifo here; the frame subpart will be processed normally, and any bits extracted 'past the end' of the fifo will be read as zeroes; the fifo being emptied will set the /BE latch which will halt speech exactly as if a stop frame had been encountered (instead of whatever partial frame was read); the same exact circuitry is used for both on the real chip, see us patent 4335277 sheet 16, gates 232a (decode stop frame) and 232b (decode /BE plus DDIS (decode disable) which is active during speak external). |
| 955 | 1147 | if (tms->speak_external) |
| 956 | 1148 | { |
| 957 | | /* extract from FIFO */ |
| 958 | | while (count--) |
| 959 | | { |
| 960 | | val = (val << 1) | ((tms->fifo[tms->fifo_head] >> tms->fifo_bits_taken) & 1); |
| 961 | | tms->fifo_bits_taken++; |
| 962 | | if (tms->fifo_bits_taken >= 8) |
| 963 | | { |
| 964 | | tms->fifo_count--; |
| 965 | | tms->fifo_head = (tms->fifo_head + 1) % FIFO_SIZE; |
| 966 | | tms->fifo_bits_taken = 0; |
| 967 | | } |
| 968 | | } |
| 969 | | } |
| 1149 | /* count the total number of bits available */ |
| 1150 | bits = ((tms->fifo_count)*8)-tms->fifo_bits_taken; |
| 1151 | } |
| 970 | 1152 | else |
| 971 | 1153 | { |
| 972 | | /* extract from speech ROM */ |
| 973 | | if (tms->intf->read) |
| 974 | | val = (* tms->intf->read)(tms->device, count); |
| 1154 | /* we're talking out of a vsm rom, hence we have an effectively infinite number of bits which are pullable. extract_bits will toggle M0 for us and grab what bits are needed */ |
| 1155 | bits = 131072; // == arbitrary large number |
| 975 | 1156 | } |
| 1157 | /* if the chip is a tms5220C, and the rate mode is set to that each frame (0x04 bit set) |
| 1158 | has a 2 bit rate preceeding it, grab two bits here and store them as the rate; */ |
| 1159 | if ((tms->variant == SUBTYPE_TMS5220C) && (tms->tms5220c_rate & 0x04)) |
| 1160 | { |
| 1161 | bits -= 2; |
| 1162 | if (bits < 0) goto ranout; |
| 1163 | indx = extract_bits(tms, 2); |
| 1164 | tms->sample_count = reload_table[indx]; |
| 1165 | } |
| 1166 | else // non-5220C and 5220C in fixed rate mode |
| 1167 | tms->sample_count = reload_table[tms->tms5220c_rate&0x3]; |
| 976 | 1168 | |
| 977 | | return val; |
| 978 | | } |
| 1169 | /* attempt to extract the energy index */ |
| 1170 | bits -= tms->coeff->energy_bits; |
| 1171 | if (bits < 0) goto ranout; |
| 1172 | indx = extract_bits(tms,tms->coeff->energy_bits); |
| 1173 | tms->new_frame_energy = tms->coeff->energytable[indx]; |
| 1174 | #ifdef DEBUG_FRAME_DUMP |
| 1175 | ene = indx; |
| 1176 | #endif |
| 979 | 1177 | |
| 1178 | /* if the energy index is 0 or 15, we're done */ |
| 980 | 1179 | |
| 981 | | |
| 982 | | /********************************************************************************************** |
| 983 | | |
| 984 | | parse_frame -- parse a new frame's worth of data; returns 0 if not enough bits in buffer |
| 985 | | |
| 986 | | ***********************************************************************************************/ |
| 987 | | |
| 988 | | static int parse_frame(tms5220_state *tms, int the_first_frame) |
| 989 | | { |
| 990 | | int bits = 0; /* number of bits in FIFO (speak external only) */ |
| 991 | | int indx, i, rep_flag; |
| 992 | | |
| 993 | | if (! the_first_frame) |
| 1180 | if ((indx == 0) || (indx == 15)) |
| 994 | 1181 | { |
| 995 | | /* remember previous frame */ |
| 996 | | tms->old_energy = tms->new_energy; |
| 997 | | tms->old_pitch = tms->new_pitch; |
| 998 | | for (i = 0; i < 10; i++) |
| 999 | | tms->old_k[i] = tms->new_k[i]; |
| 1182 | #ifdef DEBUG_FRAME_INFO |
| 1183 | logerror(" (4-bit energy=%d frame)\n",tms->new_frame_energy); |
| 1184 | #endif |
| 1185 | return; |
| 1000 | 1186 | } |
| 1001 | 1187 | |
| 1002 | | /* clear out the new frame */ |
| 1003 | | tms->new_energy = 0; |
| 1004 | | tms->new_pitch = 0; |
| 1005 | | for (i = 0; i < 10; i++) |
| 1006 | | tms->new_k[i] = 0; |
| 1188 | /* attempt to extract the repeat flag */ |
| 1189 | bits -= 1; |
| 1190 | if (bits < 0) goto ranout; |
| 1191 | rep_flag = extract_bits(tms,1); |
| 1007 | 1192 | |
| 1008 | | /* if the previous frame was a stop frame, don't do anything */ |
| 1009 | | if ((! the_first_frame) && (tms->old_energy == (energytable[15] >> 6))) |
| 1010 | | return 1; |
| 1011 | | // WARNING: This code below breaks Victory's power-on test! If you change it |
| 1012 | | // make sure you test Victory. |
| 1013 | | // { |
| 1014 | | // LOG(("Buffer Empty set - Last frame stop frame\n"); |
| 1193 | /* attempt to extract the pitch */ |
| 1194 | bits -= tms->coeff->pitch_bits; |
| 1195 | if (bits < 0) goto ranout; |
| 1196 | indx = extract_bits(tms,tms->coeff->pitch_bits); |
| 1197 | tms->new_frame_pitch = tms->coeff->pitchtable[indx]; |
| 1015 | 1198 | |
| 1016 | | // tms->buffer_empty = 1; |
| 1017 | | // return 1; |
| 1018 | | // } |
| 1199 | /* if this is a repeat frame, just copy the k's */ |
| 1200 | if (rep_flag) |
| 1201 | { |
| 1202 | //actually, we do nothing because the k's were already loaded (on parsing the previous frame) |
| 1019 | 1203 | |
| 1020 | | if (tms->speak_external) |
| 1021 | | /* count the total number of bits available */ |
| 1022 | | bits = tms->fifo_count * 8 - tms->fifo_bits_taken; |
| 1023 | | |
| 1024 | | /* attempt to extract the energy index */ |
| 1025 | | if (tms->speak_external) |
| 1026 | | { |
| 1027 | | bits -= 4; |
| 1028 | | if (bits < 0) |
| 1029 | | goto ranout; |
| 1204 | #ifdef DEBUG_FRAME_INFO |
| 1205 | logerror(" (10-bit energy=%d pitch=%d rep=%d frame)\n", tms->new_frame_energy, tms->new_frame_pitch, rep_flag); |
| 1206 | #endif |
| 1207 | return; |
| 1030 | 1208 | } |
| 1031 | | indx = extract_bits(tms, 4); |
| 1032 | | tms->new_energy = energytable[indx] >> 6; |
| 1033 | 1209 | |
| 1034 | | /* if the index is 0 or 15, we're done */ |
| 1035 | | if (indx == 0 || indx == 15) |
| 1210 | |
| 1211 | /* if the pitch index was zero, we need 4 k's */ |
| 1212 | if (indx == 0) |
| 1036 | 1213 | { |
| 1037 | | LOG((" (4-bit energy=%d frame)\n",tms->new_energy)); |
| 1214 | /* attempt to extract 4 K's */ |
| 1215 | bits -= 18; |
| 1216 | if (bits < 0) goto ranout; |
| 1217 | for (i = 0; i < 4; i++) |
| 1218 | tms->new_frame_k[i] = tms->coeff->ktable[i][extract_bits(tms,tms->coeff->kbits[i])]; |
| 1038 | 1219 | |
| 1039 | | /* clear tms->fifo if stop frame encountered */ |
| 1040 | | if (indx == 15) |
| 1041 | | { |
| 1042 | | tms->fifo_head = tms->fifo_tail = tms->fifo_count = tms->fifo_bits_taken = 0; |
| 1043 | | tms->speak_external = tms->tms5220_speaking = 0; |
| 1044 | | tms->last_frame = 1; |
| 1045 | | } |
| 1046 | | goto done; |
| 1220 | /* and clear the rest of the new_frame_k[] */ |
| 1221 | for (i = 4; i < tms->coeff->num_k; i++) |
| 1222 | tms->new_frame_k[i] = 0; |
| 1223 | #ifdef DEBUG_FRAME_INFO |
| 1224 | logerror(" (29-bit energy=%d pitch=%d rep=%d 4K frame)\n", tms->new_frame_energy, tms->new_frame_pitch, rep_flag); |
| 1225 | #endif |
| 1226 | return; |
| 1047 | 1227 | } |
| 1048 | 1228 | |
| 1049 | | /* attempt to extract the repeat flag */ |
| 1050 | | if (tms->speak_external) |
| 1229 | /* else we need 10 K's */ |
| 1230 | bits -= 39; |
| 1231 | if (bits < 0) goto ranout; |
| 1232 | #ifdef DEBUG_FRAME_DUMP |
| 1233 | logerror("FrameDump %02d ", ene); |
| 1234 | for (i = 0; i < tms->coeff->num_k; i++) |
| 1051 | 1235 | { |
| 1052 | | bits -= 1; |
| 1053 | | if (bits < 0) |
| 1054 | | goto ranout; |
| 1236 | int x; |
| 1237 | x = extract_bits(tms, tms->coeff->kbits[i]); |
| 1238 | tms->new_frame_k[i] = tms->coeff->ktable[i][x]; |
| 1239 | logerror("%02d ", x); |
| 1055 | 1240 | } |
| 1056 | | rep_flag = extract_bits(tms, 1); |
| 1057 | | |
| 1058 | | /* attempt to extract the pitch */ |
| 1059 | | if (tms->speak_external) |
| 1241 | logerror("\n"); |
| 1242 | #else |
| 1243 | for (i = 0; i < tms->coeff->num_k; i++) |
| 1060 | 1244 | { |
| 1061 | | bits -= 6; |
| 1062 | | if (bits < 0) |
| 1063 | | goto ranout; |
| 1245 | int x; |
| 1246 | x = extract_bits(tms, tms->coeff->kbits[i]); |
| 1247 | tms->new_frame_k[i] = tms->coeff->ktable[i][x]; |
| 1064 | 1248 | } |
| 1065 | | indx = extract_bits(tms, 6); |
| 1066 | | tms->new_pitch = pitchtable[indx] / 256; |
| 1067 | | |
| 1068 | | /* if this is a repeat frame, just copy the k's */ |
| 1069 | | if (rep_flag) |
| 1070 | | { |
| 1071 | | for (i = 0; i < 10; i++) |
| 1072 | | tms->new_k[i] = tms->old_k[i]; |
| 1073 | | |
| 1074 | | LOG((" (11-bit energy=%d pitch=%d rep=%d frame)\n", tms->new_energy, tms->new_pitch, rep_flag)); |
| 1075 | | goto done; |
| 1076 | | } |
| 1077 | | |
| 1078 | | /* if the pitch index was zero, we need 4 k's */ |
| 1079 | | if (indx == 0) |
| 1080 | | { |
| 1081 | | /* attempt to extract 4 K's */ |
| 1082 | | if (tms->speak_external) |
| 1083 | | { |
| 1084 | | bits -= 18; |
| 1085 | | if (bits < 0) |
| 1086 | | goto ranout; |
| 1087 | | } |
| 1088 | | tms->new_k[0] = k1table[extract_bits(tms, 5)]; |
| 1089 | | tms->new_k[1] = k2table[extract_bits(tms, 5)]; |
| 1090 | | tms->new_k[2] = k3table[extract_bits(tms, 4)]; |
| 1091 | | if (tms->variant == variant_tmc0285) |
| 1092 | | tms->new_k[3] = k3table[extract_bits(tms, 4)]; /* ??? */ |
| 1093 | | else |
| 1094 | | tms->new_k[3] = k4table[extract_bits(tms, 4)]; |
| 1095 | | |
| 1096 | | LOG((" (29-bit energy=%d pitch=%d rep=%d 4K frame)\n", tms->new_energy, tms->new_pitch, rep_flag)); |
| 1097 | | goto done; |
| 1098 | | } |
| 1099 | | |
| 1100 | | /* else we need 10 K's */ |
| 1249 | #endif |
| 1250 | #ifdef DEBUG_FRAME_INFO |
| 1251 | logerror(" (50-bit energy=%d pitch=%d rep=%d 10K frame))\n", tms->new_frame_energy, tms->new_frame_pitch, rep_flag); |
| 1101 | 1252 | if (tms->speak_external) |
| 1102 | | { |
| 1103 | | bits -= 39; |
| 1104 | | if (bits < 0) |
| 1105 | | goto ranout; |
| 1106 | | } |
| 1107 | | |
| 1108 | | tms->new_k[0] = k1table[extract_bits(tms, 5)]; |
| 1109 | | tms->new_k[1] = k2table[extract_bits(tms, 5)]; |
| 1110 | | tms->new_k[2] = k3table[extract_bits(tms, 4)]; |
| 1111 | | if (tms->variant == variant_tmc0285) |
| 1112 | | tms->new_k[3] = k3table[extract_bits(tms, 4)]; /* ??? */ |
| 1253 | logerror("Parsed a frame successfully in FIFO - %d bits remaining\n", bits); |
| 1113 | 1254 | else |
| 1114 | | tms->new_k[3] = k4table[extract_bits(tms, 4)]; |
| 1115 | | tms->new_k[4] = k5table[extract_bits(tms, 4)]; |
| 1116 | | tms->new_k[5] = k6table[extract_bits(tms, 4)]; |
| 1117 | | tms->new_k[6] = k7table[extract_bits(tms, 4)]; |
| 1118 | | tms->new_k[7] = k8table[extract_bits(tms, 3)]; |
| 1119 | | tms->new_k[8] = k9table[extract_bits(tms, 3)]; |
| 1120 | | tms->new_k[9] = k10table[extract_bits(tms, 3)]; |
| 1255 | logerror("Parsed a frame successfully in ROM\n"); |
| 1256 | #endif |
| 1257 | return; |
| 1121 | 1258 | |
| 1122 | | LOG((" (50-bit energy=%d pitch=%d rep=%d 10K frame)\n", tms->new_energy, tms->new_pitch, rep_flag)); |
| 1123 | | |
| 1124 | | done: |
| 1125 | | if (tms->speak_external) |
| 1126 | | LOG(("Parsed a frame successfully in FIFO - %d bits remaining\n", bits)); |
| 1127 | | else |
| 1128 | | LOG(("Parsed a frame successfully in ROM\n")); |
| 1129 | | |
| 1130 | | if (the_first_frame) |
| 1131 | | { |
| 1132 | | /* if this is the first frame, no previous frame to take as a starting point */ |
| 1133 | | tms->old_energy = tms->new_energy; |
| 1134 | | tms->old_pitch = tms->new_pitch; |
| 1135 | | for (i = 0; i < 10; i++) |
| 1136 | | tms->old_k[i] = tms->new_k[i]; |
| 1137 | | } |
| 1138 | | |
| 1139 | | /* update the tms->buffer_low status */ |
| 1140 | | check_buffer_low(tms); |
| 1141 | | return 1; |
| 1142 | | |
| 1143 | | ranout: |
| 1144 | | |
| 1145 | | LOG(("Ran out of bits on a parse!\n")); |
| 1146 | | |
| 1259 | ranout: |
| 1260 | #ifdef DEBUG_FRAME_ERRORS |
| 1261 | logerror("Ran out of bits on a parse!\n"); |
| 1262 | #endif |
| 1147 | 1263 | /* this is an error condition; mark the buffer empty and turn off speaking */ |
| 1148 | 1264 | tms->buffer_empty = 1; |
| 1149 | | tms->talk_status = tms->speak_external = tms->tms5220_speaking = the_first_frame = tms->last_frame = 0; |
| 1265 | tms->talk_status = tms->speak_external = tms->speaking_now = 0; |
| 1150 | 1266 | tms->fifo_count = tms->fifo_head = tms->fifo_tail = 0; |
| 1151 | 1267 | |
| 1152 | 1268 | tms->RDB_flag = FALSE; |
| 1153 | 1269 | |
| 1154 | | /* generate an interrupt if necessary */ |
| 1270 | /* generate an interrupt since TS went low */ |
| 1155 | 1271 | set_interrupt_state(tms, 1); |
| 1156 | | return 0; |
| 1157 | | } |
| 1272 | return; |
| 1158 | 1273 | |
| 1159 | | |
| 1160 | | |
| 1161 | | /********************************************************************************************** |
| 1162 | | |
| 1163 | | check_buffer_low -- check to see if the buffer low flag should be on or off |
| 1164 | | |
| 1165 | | ***********************************************************************************************/ |
| 1166 | | |
| 1167 | | static void check_buffer_low(tms5220_state *tms) |
| 1168 | | { |
| 1169 | | /* did we just become low? */ |
| 1170 | | if (tms->fifo_count <= 8) |
| 1171 | | { |
| 1172 | | /* generate an interrupt if necessary */ |
| 1173 | | if (!tms->buffer_low) |
| 1174 | | set_interrupt_state(tms, 1); |
| 1175 | | tms->buffer_low = 1; |
| 1176 | | |
| 1177 | | LOG(("Buffer low set\n")); |
| 1178 | | } |
| 1179 | | |
| 1180 | | /* did we just become full? */ |
| 1181 | | else |
| 1182 | | { |
| 1183 | | tms->buffer_low = 0; |
| 1184 | | |
| 1185 | | LOG(("Buffer low cleared\n")); |
| 1186 | | } |
| 1187 | 1274 | } |
| 1188 | 1275 | |
| 1189 | | |
| 1190 | | |
| 1191 | 1276 | /********************************************************************************************** |
| 1192 | 1277 | |
| 1193 | 1278 | set_interrupt_state -- generate an interrupt |
| r7882 | r7883 | |
| 1196 | 1281 | |
| 1197 | 1282 | static void set_interrupt_state(tms5220_state *tms, int state) |
| 1198 | 1283 | { |
| 1284 | #ifdef DEBUG_PIN_READS |
| 1285 | logerror("irq pin set to state %d\n", state); |
| 1286 | #endif |
| 1199 | 1287 | if (tms->irq_func.write && state != tms->irq_pin) |
| 1200 | 1288 | devcb_call_write_line(&tms->irq_func, !state); |
| 1201 | 1289 | tms->irq_pin = state; |
| r7882 | r7883 | |
| 1213 | 1301 | static const tms5220_interface dummy = { DEVCB_NULL }; |
| 1214 | 1302 | tms5220_state *tms = get_safe_token(device); |
| 1215 | 1303 | |
| 1216 | | /* set the interface and device */ |
| 1217 | 1304 | tms->intf = device->baseconfig().static_config ? (const tms5220_interface *)device->baseconfig().static_config : &dummy; |
| 1305 | //tms->table = *device->region; |
| 1306 | |
| 1218 | 1307 | tms->device = device; |
| 1308 | tms5220_set_variant(tms, TMS5220_IS_5220); |
| 1219 | 1309 | tms->clock = device->clock; |
| 1220 | 1310 | |
| 1221 | | /* resolve */ |
| 1311 | assert_always(tms != NULL, "Error creating TMS5220 chip"); |
| 1222 | 1312 | |
| 1313 | /* resolve irq line */ |
| 1223 | 1314 | devcb_resolve_write_line(&tms->irq_func, &tms->intf->irq_func, device); |
| 1224 | 1315 | |
| 1225 | 1316 | /* initialize a stream */ |
| 1226 | 1317 | tms->stream = stream_create(device, 0, 1, device->clock / 80, tms, tms5220_update); |
| 1227 | 1318 | |
| 1319 | /*if (tms->table == NULL) |
| 1320 | { |
| 1321 | assert_always(tms->intf->M0_callback != NULL, "Missing _mandatory_ 'M0_callback' function pointer in the TMS5110 interface\n This function is used by TMS5220 to call for a new single bit\n needed to generate the speech when in VSM mode\n Aborting startup...\n"); |
| 1322 | tms->M0_callback = tms->intf->M0_callback; |
| 1323 | tms->set_load_address = tms->intf->load_address; |
| 1324 | } |
| 1325 | else |
| 1326 | { |
| 1327 | tms->M0_callback = speech_rom_read_bit; |
| 1328 | tms->set_load_address = speech_rom_set_addr; |
| 1329 | }*/ |
| 1330 | |
| 1228 | 1331 | /* not during reset which is called frm within a write! */ |
| 1229 | 1332 | tms->io_ready = 1; |
| 1230 | 1333 | tms->true_timing = 0; |
| 1334 | tms->rs_ws = 0x03; // rs and ws are assumed to be inactive on device startup |
| 1231 | 1335 | |
| 1232 | | tms->variant = variant_tms5220; |
| 1233 | 1336 | register_for_save_states(tms); |
| 1234 | 1337 | } |
| 1235 | 1338 | |
| r7882 | r7883 | |
| 1237 | 1340 | { |
| 1238 | 1341 | tms5220_state *tms = get_safe_token(device); |
| 1239 | 1342 | DEVICE_START_CALL( tms5220 ); |
| 1240 | | tms->variant = variant_tms5220c; |
| 1343 | tms5220_set_variant(tms, TMS5220_IS_5220C); |
| 1241 | 1344 | } |
| 1242 | 1345 | |
| 1243 | 1346 | static DEVICE_START( tmc0285 ) |
| 1244 | 1347 | { |
| 1245 | 1348 | tms5220_state *tms = get_safe_token(device); |
| 1246 | 1349 | DEVICE_START_CALL( tms5220 ); |
| 1247 | | tms->variant = variant_tmc0285; |
| 1350 | tms5220_set_variant(tms, TMS5220_IS_TMC0285); |
| 1248 | 1351 | } |
| 1249 | 1352 | |
| 1250 | 1353 | |
| r7882 | r7883 | |
| 1252 | 1355 | { |
| 1253 | 1356 | tms5220_state *tms = get_safe_token(device); |
| 1254 | 1357 | DEVICE_START_CALL( tms5220 ); |
| 1255 | | tms->variant = variant_tmc0285; |
| 1358 | tms5220_set_variant(tms, TMS5220_IS_5200); |
| 1256 | 1359 | } |
| 1257 | 1360 | |
| 1258 | 1361 | |
| r7882 | r7883 | |
| 1266 | 1369 | |
| 1267 | 1370 | /* initialize the chip state */ |
| 1268 | 1371 | /* Note that we do not actually clear IRQ on start-up : IRQ is even raised if tms->buffer_empty or tms->buffer_low are 0 */ |
| 1269 | | tms->tms5220_speaking = tms->speak_external = tms->talk_status = tms->first_frame = tms->last_frame = tms->irq_pin = 0; |
| 1372 | tms->speaking_now = tms->speak_external = tms->talk_status = tms->irq_pin = 0; |
| 1270 | 1373 | set_interrupt_state(tms, 0); |
| 1271 | 1374 | tms->buffer_empty = tms->buffer_low = 1; |
| 1272 | 1375 | |
| 1273 | 1376 | tms->RDB_flag = FALSE; |
| 1274 | 1377 | |
| 1275 | 1378 | /* initialize the energy/pitch/k states */ |
| 1276 | | tms->old_energy = tms->new_energy = tms->current_energy = tms->target_energy = 0; |
| 1277 | | tms->old_pitch = tms->new_pitch = tms->current_pitch = tms->target_pitch = 0; |
| 1278 | | memset(tms->old_k, 0, sizeof(tms->old_k)); |
| 1279 | | memset(tms->new_k, 0, sizeof(tms->new_k)); |
| 1379 | tms->old_frame_energy = tms->new_frame_energy = tms->current_energy = tms->target_energy = 0; |
| 1380 | tms->old_frame_pitch = tms->new_frame_pitch = tms->current_pitch = tms->target_pitch = 0; |
| 1381 | memset(tms->old_frame_k, 0, sizeof(tms->old_frame_k)); |
| 1382 | memset(tms->new_frame_k, 0, sizeof(tms->new_frame_k)); |
| 1280 | 1383 | memset(tms->current_k, 0, sizeof(tms->current_k)); |
| 1281 | 1384 | memset(tms->target_k, 0, sizeof(tms->target_k)); |
| 1282 | 1385 | |
| 1283 | 1386 | /* initialize the sample generators */ |
| 1284 | | tms->interp_count = tms->sample_count = tms->pitch_count = 0; |
| 1285 | | tms->RNG = 0x1FFF; |
| 1387 | tms->interp_count = tms->tms5220c_rate = tms->pitch_count = 0; |
| 1388 | tms->sample_count = reload_table[tms->tms5220c_rate&0x3]; |
| 1389 | tms->RNG = 0x1FFF; |
| 1286 | 1390 | memset(tms->u, 0, sizeof(tms->u)); |
| 1287 | 1391 | memset(tms->x, 0, sizeof(tms->x)); |
| 1288 | 1392 | |
| r7882 | r7883 | |
| 1308 | 1412 | case 0x02: |
| 1309 | 1413 | /* Write */ |
| 1310 | 1414 | /* bring up to date first */ |
| 1311 | | LOG(("Service write %02x\n", tms->write_latch)); |
| 1415 | #ifdef DEBUG_IO_READY |
| 1416 | logerror("Serviced write: %02x\n", tms->write_latch); |
| 1417 | //fprintf(stderr, "Processed write data: %02X\n", tms->write_latch); |
| 1418 | #endif |
| 1312 | 1419 | stream_update(tms->stream); |
| 1313 | 1420 | tms5220_data_write(tms, tms->write_latch); |
| 1314 | 1421 | break; |
| r7882 | r7883 | |
| 1335 | 1442 | |
| 1336 | 1443 | tms->true_timing = 1; |
| 1337 | 1444 | state &= 0x01; |
| 1338 | | |
| 1445 | #ifdef DEBUG_RS_WS |
| 1446 | logerror("/RS written with data: %d\n", state); |
| 1447 | #endif |
| 1339 | 1448 | new_val = (tms->rs_ws & 0x01) | (state<<1); |
| 1340 | 1449 | if (new_val != tms->rs_ws) |
| 1341 | 1450 | { |
| 1342 | 1451 | tms->rs_ws = new_val; |
| 1343 | 1452 | if (new_val == 0) |
| 1344 | 1453 | { |
| 1345 | | if (tms->variant == variant_tms5220c) |
| 1454 | if (tms->variant == SUBTYPE_TMS5220C) |
| 1346 | 1455 | device->reset(); |
| 1456 | #ifdef DEBUG_RS_WS |
| 1347 | 1457 | else |
| 1348 | 1458 | /* illegal */ |
| 1349 | | LOG(("tms5220_rs_w: illegal\n")); |
| 1459 | logerror("tms5220_rs_w: illegal\n"); |
| 1460 | #endif |
| 1350 | 1461 | return; |
| 1351 | 1462 | } |
| 1352 | 1463 | else if ( new_val == 3) |
| r7882 | r7883 | |
| 1362 | 1473 | else |
| 1363 | 1474 | { |
| 1364 | 1475 | /* high to low - schedule ready cycle*/ |
| 1365 | | LOG(("Schedule write ready\n")); |
| 1366 | | tms->io_ready = 1; |
| 1367 | | /* 100 nsec from data sheet */ |
| 1368 | | timer_set(tms->device->machine, ATTOTIME_IN_NSEC(100), tms, 0, io_ready_cb); |
| 1476 | #ifdef DEBUG_RS_WS |
| 1477 | logerror("Schedule write ready\n"); |
| 1478 | #endif |
| 1479 | //tms->io_ready = 1; |
| 1480 | ///* 100 nsec from data sheet */ |
| 1481 | //timer_set(tms->device->machine, ATTOTIME_IN_NSEC(100), tms, 0, io_ready_cb); |
| 1482 | tms->io_ready = 0; |
| 1369 | 1483 | /* 25 usec in datasheet, but zaccaria won't work */ |
| 1370 | 1484 | timer_set(tms->device->machine, ATTOTIME_IN_USEC(100), tms, 1, io_ready_cb); |
| 1371 | 1485 | } |
| r7882 | r7883 | |
| 1379 | 1493 | |
| 1380 | 1494 | tms->true_timing = 1; |
| 1381 | 1495 | state &= 0x01; |
| 1496 | #ifdef DEBUG_RS_WS |
| 1497 | logerror("/WS written with data: %d\n", state); |
| 1498 | #endif |
| 1382 | 1499 | new_val = (tms->rs_ws & 0x02) | (state<<0); |
| 1383 | 1500 | if (new_val != tms->rs_ws) |
| 1384 | 1501 | { |
| 1385 | 1502 | tms->rs_ws = new_val; |
| 1386 | 1503 | if (new_val == 0) |
| 1387 | 1504 | { |
| 1388 | | if (tms->variant == variant_tms5220c) |
| 1505 | if (tms->variant == SUBTYPE_TMS5220C) |
| 1389 | 1506 | device->reset(); |
| 1507 | #ifdef DEBUG_RS_WS |
| 1390 | 1508 | else |
| 1391 | 1509 | /* illegal */ |
| 1392 | | LOG(("tms5220_ws_w: illegal\n")); |
| 1510 | logerror("tms5220_ws_w: illegal\n"); |
| 1511 | #endif |
| 1393 | 1512 | return; |
| 1394 | 1513 | } |
| 1395 | 1514 | else if ( new_val == 3) |
| r7882 | r7883 | |
| 1404 | 1523 | } |
| 1405 | 1524 | else |
| 1406 | 1525 | { |
| 1407 | | /* high to low - schedule ready cycle*/ |
| 1408 | | tms->io_ready = 1; |
| 1409 | | timer_set(tms->device->machine, ATTOTIME_IN_NSEC(100), tms, 0, io_ready_cb); |
| 1526 | ///* high to low - schedule ready cycle*/ |
| 1527 | //tms->io_ready = 1; |
| 1528 | //timer_set(tms->device->machine, ATTOTIME_IN_NSEC(100), tms, 0, io_ready_cb); |
| 1529 | tms->io_ready = 0; |
| 1410 | 1530 | timer_set(tms->device->machine, ATTOTIME_IN_USEC(25), tms, 1, io_ready_cb); |
| 1411 | 1531 | } |
| 1412 | 1532 | } |
| r7882 | r7883 | |
| 1421 | 1541 | WRITE8_DEVICE_HANDLER( tms5220_data_w ) |
| 1422 | 1542 | { |
| 1423 | 1543 | tms5220_state *tms = get_safe_token(device); |
| 1424 | | |
| 1544 | #ifdef DEBUG_RS_WS |
| 1545 | logerror("tms5220_data_w: data %02x\n", data); |
| 1546 | #endif |
| 1425 | 1547 | if (!tms->true_timing) |
| 1426 | 1548 | { |
| 1427 | 1549 | /* bring up to date first */ |
| r7882 | r7883 | |
| 1431 | 1553 | else |
| 1432 | 1554 | { |
| 1433 | 1555 | /* actually in a write ? */ |
| 1556 | #ifdef DEBUG_RS_WS |
| 1434 | 1557 | if (!(tms->rs_ws == 0x02)) |
| 1435 | | LOG(("tms5220_data_w: data written outside ws, status: %02x!\n", tms->rs_ws)); |
| 1558 | logerror("tms5220_data_w: data written outside ws, status: %02x!\n", tms->rs_ws); |
| 1559 | #endif |
| 1436 | 1560 | tms->write_latch = data; |
| 1437 | 1561 | } |
| 1438 | 1562 | } |
| r7882 | r7883 | |
| 1459 | 1583 | /* actually in a read ? */ |
| 1460 | 1584 | if (tms->rs_ws == 0x01) |
| 1461 | 1585 | return tms->read_latch; |
| 1586 | #ifdef DEBUG_RS_WS |
| 1462 | 1587 | else |
| 1463 | | LOG(("tms5220_status_r: data read outside rs!\n")); |
| 1588 | logerror("tms5220_status_r: data read outside rs!\n"); |
| 1589 | #endif |
| 1464 | 1590 | return 0xff; |
| 1465 | 1591 | } |
| 1466 | 1592 | } |