trunk/src/mame/drivers/inder.c
| r31936 | r31937 | |
| 15 | 15 | - Brave Team: working |
| 16 | 16 | - Canasta '86: working |
| 17 | 17 | - Lap by Lap: working |
| 18 | | - Moon Light: sound and switches to be fixed |
| 18 | - Moon Light: dips don't always work. No mechanical sounds. |
| 19 | 19 | - Clown: sound and switches to be fixed |
| 20 | 20 | - Corsario: sound and switches to be fixed |
| 21 | 21 | - Mundial 90: sound and switches to be fixed |
| r31936 | r31937 | |
| 73 | 73 | DECLARE_WRITE_LINE_MEMBER(q9a_w); |
| 74 | 74 | DECLARE_WRITE_LINE_MEMBER(qc9b_w); |
| 75 | 75 | DECLARE_DRIVER_INIT(inder); |
| 76 | DECLARE_DRIVER_INIT(inder1); |
| 76 | 77 | private: |
| 77 | 78 | bool m_pc0; |
| 79 | UINT8 m_game; |
| 78 | 80 | UINT8 m_portc; |
| 79 | 81 | UINT8 m_row; |
| 80 | 82 | UINT8 m_segment[8]; |
| 81 | 83 | UINT8 m_sndcmd; |
| 84 | UINT8 m_sndbank; |
| 82 | 85 | UINT32 m_sound_addr; |
| 83 | 86 | UINT8 *m_p_speech; |
| 84 | 87 | virtual void machine_reset(); |
| r31936 | r31937 | |
| 147 | 150 | AM_RANGE(0x6c00, 0x6c03) AM_MIRROR(0x131c) AM_DEVREADWRITE("ppi6c", i8255_device, read, write) |
| 148 | 151 | AM_RANGE(0x6c20, 0x6c3f) AM_MIRROR(0x1300) AM_WRITE(sndcmd_w) |
| 149 | 152 | AM_RANGE(0x6c60, 0x6c7f) AM_MIRROR(0x1300) AM_WRITE(disp_w) |
| 153 | AM_RANGE(0x6ce0, 0x6ce0) AM_WRITENOP |
| 150 | 154 | ADDRESS_MAP_END |
| 151 | 155 | |
| 152 | 156 | static ADDRESS_MAP_START( inder_sub_map, AS_PROGRAM, 8, inder_state ) |
| r31936 | r31937 | |
| 382 | 386 | PORT_DIPNAME( 0x40, 0x40, "Bola Extra En Rampa??") //nfi // sw R |
| 383 | 387 | PORT_DIPSETTING( 0x00, "Derribo Completo") |
| 384 | 388 | PORT_DIPSETTING( 0x40, "Derribo Lateral") |
| 385 | | PORT_DIPNAME( 0x80, 0x80, "Apagado??") //nfi // sw Q |
| 386 | | PORT_DIPSETTING( 0x00, DEF_STR(Hard)) // "Facil" |
| 387 | | PORT_DIPSETTING( 0x80, DEF_STR(Easy)) // "Dificil" |
| 389 | PORT_DIPNAME( 0x80, 0x80, "Apagado de dianas") // sw Q |
| 390 | PORT_DIPSETTING( 0x80, DEF_STR(Easy)) // "Facil" |
| 391 | PORT_DIPSETTING( 0x00, DEF_STR(Hard)) // "Dificil" |
| 388 | 392 | PORT_BIT( 0x3c, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 389 | 393 | |
| 390 | 394 | PORT_START("SW.3") |
| r31936 | r31937 | |
| 449 | 453 | |
| 450 | 454 | static INPUT_PORTS_START( inder ) |
| 451 | 455 | PORT_START("SW.0") |
| 452 | | PORT_DIPNAME( 0x03, 0x03, "Coin Slot 1") // sw G,H |
| 453 | | PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C )) // slot 2: 1 moneda 4 partidas |
| 456 | PORT_DIPNAME( 0x80, 0x80, "Balls") |
| 457 | PORT_DIPSETTING( 0x80, "3") |
| 458 | PORT_DIPSETTING( 0x00, "5") |
| 459 | PORT_DIPNAME( 0x30, 0x30, "Coin Slot 1") |
| 460 | PORT_DIPSETTING( 0x30, DEF_STR( 1C_1C )) // slot 2: 1 moneda 4 partidas |
| 454 | 461 | PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C )) // and 4c_3c; slot 2: 1 moneda 3 partidas |
| 455 | | PORT_DIPNAME( 0x08, 0x08, "Balls") // sw E |
| 456 | | PORT_DIPSETTING( 0x08, "3") |
| 457 | | PORT_DIPSETTING( 0x00, "5") |
| 458 | | PORT_DIPNAME( 0x30, 0x20, "Points for free game") // sw C,D |
| 459 | | PORT_DIPSETTING( 0x00, "2900000") |
| 460 | | PORT_DIPSETTING( 0x10, "2700000") |
| 461 | | PORT_DIPSETTING( 0x20, "2500000") |
| 462 | | PORT_DIPSETTING( 0x30, "2300000") |
| 463 | | PORT_BIT( 0xc4, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 462 | PORT_DIPNAME( 0x0c, 0x0c, "Points for free game") |
| 463 | PORT_DIPSETTING( 0x0c, "2600000") |
| 464 | PORT_DIPSETTING( 0x08, "3000000") |
| 465 | PORT_DIPSETTING( 0x04, "3400000") |
| 466 | PORT_DIPSETTING( 0x00, "3800000") |
| 464 | 467 | |
| 465 | 468 | PORT_START("SW.1") |
| 466 | | PORT_DIPNAME( 0x03, 0x03, "High Score") //"Handicap" // sw O,P |
| 467 | | PORT_DIPSETTING( 0x00, "4600000") |
| 468 | | PORT_DIPSETTING( 0x01, "4400000") |
| 469 | | PORT_DIPSETTING( 0x02, "4200000") |
| 470 | | PORT_DIPSETTING( 0x03, "4000000") |
| 471 | | PORT_DIPNAME( 0x0c, 0x08, "Extra Ball Award??") //"Comienzo Secuenzia Diana Bola Extra" // sw M,N |
| 472 | | PORT_DIPSETTING( 0x04, "50000") |
| 473 | | PORT_DIPSETTING( 0x08, "25000") |
| 474 | | PORT_DIPSETTING( 0x0c, "10000") |
| 475 | | PORT_DIPNAME( 0x10, 0x10, "Extra Ball Derribo??") //"Bola Extra en 1st Derribo Completo" // sw L |
| 476 | | PORT_DIPSETTING( 0x00, DEF_STR(No)) |
| 477 | | PORT_DIPSETTING( 0x10, DEF_STR(Yes)) // "Si" |
| 478 | | PORT_DIPNAME( 0x20, 0x20, "Especiales Laterales??") //need help here guys... // sw K |
| 479 | | PORT_DIPSETTING( 0x00, "Derribo Lateral Dianas") |
| 480 | | PORT_DIPSETTING( 0x20, "Derribo Completo Dianas Laterales") |
| 481 | | PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 469 | PORT_DIPNAME( 0x30, 0x30, "High Score") //"Handicap" |
| 470 | PORT_DIPSETTING( 0x30, "4800000") |
| 471 | PORT_DIPSETTING( 0x20, "5000000") |
| 472 | PORT_DIPSETTING( 0x10, "5200000") |
| 473 | PORT_DIPSETTING( 0x00, "5400000") |
| 474 | PORT_DIPNAME( 0x08, 0x08, "Especial en Picabolas") |
| 475 | PORT_DIPSETTING( 0x08, "1st Derribo") |
| 476 | PORT_DIPSETTING( 0x00, "2nd Derribo") |
| 477 | PORT_DIPNAME( 0x04, 0x04, "Bola Extra En Rampas") |
| 478 | PORT_DIPSETTING( 0x04, "4 dianas") |
| 479 | PORT_DIPSETTING( 0x00, "2 dianas") |
| 480 | PORT_BIT( 0xc3, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 482 | 481 | |
| 483 | 482 | PORT_START("SW.2") |
| 484 | | PORT_DIPNAME( 0x03, 0x03, "High Score Returns??") //"Handicap de Vueltas" // sw W,X |
| 485 | | PORT_DIPSETTING( 0x00, "40") |
| 486 | | PORT_DIPSETTING( 0x01, "35") |
| 487 | | PORT_DIPSETTING( 0x02, "30") |
| 488 | | PORT_DIPSETTING( 0x03, "25") |
| 489 | | PORT_DIPNAME( 0x40, 0x40, "Bola Extra En Rampa??") //nfi // sw R |
| 490 | | PORT_DIPSETTING( 0x00, "Derribo Completo") |
| 491 | | PORT_DIPSETTING( 0x40, "Derribo Lateral") |
| 492 | | PORT_DIPNAME( 0x80, 0x80, "Apagado??") //nfi // sw Q |
| 493 | | PORT_DIPSETTING( 0x00, DEF_STR(Hard)) // "Facil" |
| 494 | | PORT_DIPSETTING( 0x80, DEF_STR(Easy)) // "Dificil" |
| 495 | | PORT_BIT( 0x3c, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 483 | PORT_DIPNAME( 0x30, 0x30, "High Score Returns??") //"Handicap de Vueltas" |
| 484 | PORT_DIPSETTING( 0x30, "20") |
| 485 | PORT_DIPSETTING( 0x20, "25") |
| 486 | PORT_DIPSETTING( 0x10, "30") |
| 487 | PORT_DIPSETTING( 0x00, "35") |
| 488 | PORT_DIPNAME( 0x01, 0x01, "Apagado de dianas") |
| 489 | PORT_DIPSETTING( 0x01, DEF_STR(Easy)) // "Facil" |
| 490 | PORT_DIPSETTING( 0x00, DEF_STR(Hard)) // "Dificil" |
| 491 | PORT_BIT( 0xce, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 496 | 492 | |
| 497 | 493 | PORT_START("SW.3") |
| 498 | 494 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) // "Monedero A" |
| r31936 | r31937 | |
| 511 | 507 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_R) |
| 512 | 508 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Y) |
| 513 | 509 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_U) |
| 514 | | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 510 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_I) |
| 515 | 511 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_O) |
| 516 | 512 | |
| 517 | 513 | PORT_START("SW.5") |
| 518 | 514 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_A) |
| 519 | 515 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_S) |
| 520 | | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_D) |
| 521 | | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_F) |
| 516 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_D) |
| 517 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_F) |
| 522 | 518 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_G) |
| 523 | 519 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_H) |
| 524 | 520 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_J) |
| r31936 | r31937 | |
| 669 | 665 | { |
| 670 | 666 | data ^= 15; // now 7 to 0 |
| 671 | 667 | for (i = 0; i < 5; i++) |
| 668 | { |
| 669 | if ((m_game==1) && (i == 4)) // mundial,clown,250cc,atleta have credit and ball displays swapped |
| 670 | data ^= 4; |
| 672 | 671 | output_set_digit_value(i*10+data, m_segment[i]); |
| 672 | } |
| 673 | 673 | } |
| 674 | 674 | } |
| 675 | 675 | |
| 676 | 676 | WRITE8_MEMBER( inder_state::sndbank_w ) |
| 677 | 677 | { |
| 678 | m_sndbank = data; |
| 678 | 679 | UINT8 i; |
| 679 | 680 | // look for last rom enabled |
| 680 | | for (i = 0; i < 2; i++) |
| 681 | for (i = 0; i < 4; i++) |
| 681 | 682 | if (!(BIT(data, i))) |
| 682 | 683 | m_sound_addr = (m_sound_addr & 0x0ffff) | (i << 16); |
| 683 | 684 | } |
| r31936 | r31937 | |
| 688 | 689 | m_9b->clock_w(0); |
| 689 | 690 | m_9a->clock_w(1); |
| 690 | 691 | m_9b->clock_w(1); |
| 691 | | if (!m_pc0) |
| 692 | | m_msm->data_w(m_p_speech[m_sound_addr] & 15); |
| 692 | |
| 693 | if ((m_sound_addr < 0x40000) && (m_sndbank != 0xff)) |
| 694 | { |
| 695 | if (!m_pc0) |
| 696 | m_msm->data_w(m_p_speech[m_sound_addr] & 15); |
| 697 | else |
| 698 | m_msm->data_w(m_p_speech[m_sound_addr] >> 4); |
| 699 | } |
| 693 | 700 | else |
| 694 | | m_msm->data_w(m_p_speech[m_sound_addr] >> 4); |
| 701 | m_msm->data_w(0); |
| 695 | 702 | } |
| 696 | 703 | |
| 697 | 704 | WRITE_LINE_MEMBER( inder_state::qc7a_w ) |
| r31936 | r31937 | |
| 724 | 731 | |
| 725 | 732 | WRITE8_MEMBER( inder_state::ppib_w ) |
| 726 | 733 | { |
| 727 | | // data &= 0x7f; |
| 728 | | // m_sound_addr = (m_sound_addr & 0x380ff) | (data << 8); |
| 729 | 734 | m_sound_addr = (m_sound_addr & 0x300ff) | (data << 8); |
| 730 | 735 | } |
| 731 | 736 | |
| r31936 | r31937 | |
| 744 | 749 | void inder_state::machine_reset() |
| 745 | 750 | { |
| 746 | 751 | m_sound_addr = 0; |
| 752 | m_sndbank = 0xff; |
| 747 | 753 | m_row = 0; |
| 748 | 754 | if (m_7a) |
| 749 | 755 | m_7a->clear_w(1); |
| r31936 | r31937 | |
| 758 | 764 | m_7a->clear_w(0); |
| 759 | 765 | m_9b->preset_w(1); |
| 760 | 766 | } |
| 767 | m_game = 0; |
| 761 | 768 | } |
| 762 | 769 | |
| 770 | DRIVER_INIT_MEMBER( inder_state, inder1 ) |
| 771 | { |
| 772 | m_p_speech = memregion("speech")->base(); |
| 773 | if (m_7a) |
| 774 | { |
| 775 | m_7a->d_w(0); |
| 776 | m_7a->clear_w(0); |
| 777 | m_9b->preset_w(1); |
| 778 | } |
| 779 | m_game = 1; |
| 780 | } |
| 781 | |
| 763 | 782 | static MACHINE_CONFIG_START( brvteam, inder_state ) |
| 764 | 783 | /* basic machine hardware */ |
| 765 | 784 | MCFG_CPU_ADD("maincpu", Z80, XTAL_5MHz / 2) |
| r31936 | r31937 | |
| 1051 | 1070 | |
| 1052 | 1071 | |
| 1053 | 1072 | // old cpu board, 6 digits, sn76489 |
| 1054 | | GAME(1985, brvteam, 0, brvteam, brvteam, inder_state, inder, ROT0, "Inder", "Brave Team", GAME_MECHANICAL) |
| 1073 | GAME(1985, brvteam, 0, brvteam, brvteam, driver_device, 0, ROT0, "Inder", "Brave Team", GAME_MECHANICAL) |
| 1055 | 1074 | |
| 1056 | 1075 | // old cpu board, 7 digits, ay8910 |
| 1057 | | GAME(1986, canasta, 0, canasta, canasta, inder_state, inder, ROT0, "Inder", "Canasta '86'", GAME_MECHANICAL) |
| 1076 | GAME(1986, canasta, 0, canasta, canasta, driver_device, 0, ROT0, "Inder", "Canasta '86'", GAME_MECHANICAL) |
| 1058 | 1077 | |
| 1059 | 1078 | // old cpu board, 7 digits, sound cpu with 2x ay8910 |
| 1060 | | GAME(1986, lapbylap, 0, lapbylap, lapbylap, inder_state, inder, ROT0, "Inder", "Lap By Lap", GAME_MECHANICAL) |
| 1079 | GAME(1986, lapbylap, 0, lapbylap, lapbylap, driver_device, 0, ROT0, "Inder", "Lap By Lap", GAME_MECHANICAL) |
| 1061 | 1080 | |
| 1062 | 1081 | // new cpu board, sound board with msm5205 |
| 1063 | | GAME(1987, pinmoonl, 0, inder, inder, inder_state, inder, ROT0, "Inder", "Moon Light (Inder)", GAME_IS_SKELETON_MECHANICAL) |
| 1064 | | GAME(1988, pinclown, 0, inder, inder, inder_state, inder, ROT0, "Inder", "Clown (Inder)", GAME_IS_SKELETON_MECHANICAL) |
| 1065 | | GAME(1989, corsario, 0, inder, inder, inder_state, inder, ROT0, "Inder", "Corsario", GAME_IS_SKELETON_MECHANICAL) |
| 1066 | | GAME(1990, mundial, 0, inder, inder, inder_state, inder, ROT0, "Inder", "Mundial 90", GAME_IS_SKELETON_MECHANICAL) |
| 1067 | | GAME(1991, atleta, 0, inder, inder, inder_state, inder, ROT0, "Inder", "Atleta", GAME_IS_SKELETON_MECHANICAL) |
| 1068 | | GAME(1992, ind250cc, 0, inder, inder, inder_state, inder, ROT0, "Inder", "250 CC", GAME_IS_SKELETON_MECHANICAL) |
| 1082 | GAME(1987, pinmoonl, 0, inder, inder, inder_state, inder, ROT0, "Inder", "Moon Light (Inder)", GAME_MECHANICAL) |
| 1083 | GAME(1988, pinclown, 0, inder, inder, inder_state, inder1, ROT0, "Inder", "Clown (Inder)", GAME_IS_SKELETON_MECHANICAL) |
| 1084 | GAME(1989, corsario, 0, inder, inder, inder_state, inder1, ROT0, "Inder", "Corsario", GAME_IS_SKELETON_MECHANICAL) |
| 1085 | GAME(1990, mundial, 0, inder, inder, inder_state, inder1, ROT0, "Inder", "Mundial 90", GAME_IS_SKELETON_MECHANICAL) |
| 1086 | GAME(1991, atleta, 0, inder, inder, inder_state, inder1, ROT0, "Inder", "Atleta", GAME_IS_SKELETON_MECHANICAL) |
| 1087 | GAME(1992, ind250cc, 0, inder, inder, inder_state, inder1, ROT0, "Inder", "250 CC", GAME_IS_SKELETON_MECHANICAL) |
| 1088 | |
| 1089 | // new cpu board, later revision of msm5205 sound board |
| 1069 | 1090 | GAME(1992, metalman, 0, inder, inder, inder_state, inder, ROT0, "Inder", "Metal Man", GAME_IS_SKELETON_MECHANICAL) |