trunk/src/mame/drivers/inder.c
| r31917 | r31918 | |
| 31 | 31 | #include "machine/i8255.h" |
| 32 | 32 | #include "sound/sn76496.h" |
| 33 | 33 | #include "sound/ay8910.h" |
| 34 | #include "sound/msm5205.h" |
| 35 | #include "machine/7474.h" |
| 34 | 36 | #include "inder.lh" |
| 35 | 37 | |
| 36 | 38 | class inder_state : public genpin_class |
| r31917 | r31918 | |
| 41 | 43 | , m_maincpu(*this, "maincpu") |
| 42 | 44 | , m_audiocpu(*this, "audiocpu") |
| 43 | 45 | , m_sn(*this, "sn") |
| 46 | , m_msm(*this, "msm") |
| 47 | , m_7a(*this, "7a") |
| 48 | , m_9a(*this, "9a") |
| 49 | , m_9b(*this, "9b") |
| 44 | 50 | , m_switches(*this, "SW") |
| 45 | 51 | { } |
| 46 | 52 | |
| 53 | DECLARE_READ8_MEMBER(ppic_r); |
| 54 | DECLARE_WRITE8_MEMBER(ppia_w); |
| 55 | DECLARE_WRITE8_MEMBER(ppib_w); |
| 56 | DECLARE_WRITE8_MEMBER(ppic_w); |
| 47 | 57 | DECLARE_WRITE8_MEMBER(ppi60a_w); |
| 48 | 58 | DECLARE_WRITE8_MEMBER(ppi60b_w); |
| 49 | 59 | DECLARE_WRITE8_MEMBER(ppi64c_w); |
| r31917 | r31918 | |
| 53 | 63 | DECLARE_WRITE8_MEMBER(sol_canasta_w); |
| 54 | 64 | DECLARE_WRITE8_MEMBER(sn_w); |
| 55 | 65 | DECLARE_READ8_MEMBER(sndcmd_r); |
| 66 | DECLARE_WRITE8_MEMBER(sndbank_w); |
| 56 | 67 | DECLARE_WRITE8_MEMBER(sndcmd_w); |
| 57 | 68 | DECLARE_WRITE8_MEMBER(sndcmd_lapbylap_w); |
| 58 | 69 | DECLARE_WRITE8_MEMBER(lamp_w) { }; |
| 59 | 70 | DECLARE_WRITE8_MEMBER(disp_w); |
| 71 | DECLARE_WRITE_LINE_MEMBER(vck_w); |
| 72 | DECLARE_WRITE_LINE_MEMBER(qc7a_w); |
| 73 | DECLARE_WRITE_LINE_MEMBER(q9a_w); |
| 74 | DECLARE_WRITE_LINE_MEMBER(qc9b_w); |
| 60 | 75 | DECLARE_DRIVER_INIT(inder); |
| 61 | 76 | private: |
| 77 | bool m_pc0; |
| 78 | UINT8 m_portc; |
| 62 | 79 | UINT8 m_row; |
| 63 | 80 | UINT8 m_segment[8]; |
| 64 | 81 | UINT8 m_sndcmd; |
| 82 | UINT32 m_sound_addr; |
| 83 | UINT8 *m_p_speech; |
| 65 | 84 | virtual void machine_reset(); |
| 66 | 85 | required_device<cpu_device> m_maincpu; |
| 67 | 86 | optional_device<cpu_device> m_audiocpu; |
| 68 | 87 | optional_device<sn76489_device> m_sn; |
| 88 | optional_device<msm5205_device> m_msm; |
| 89 | optional_device<ttl7474_device> m_7a; |
| 90 | optional_device<ttl7474_device> m_9a; |
| 91 | optional_device<ttl7474_device> m_9b; |
| 69 | 92 | required_ioport_array<11> m_switches; |
| 70 | 93 | }; |
| 71 | 94 | |
| r31917 | r31918 | |
| 130 | 153 | AM_RANGE(0x0000, 0x1fff) AM_ROM |
| 131 | 154 | AM_RANGE(0x2000, 0x27ff) AM_MIRROR(0x1800) AM_RAM // 6116 |
| 132 | 155 | AM_RANGE(0x4000, 0x4003) AM_MIRROR(0x1ffc) AM_DEVREADWRITE("ppi", i8255_device, read, write) |
| 133 | | AM_RANGE(0x6000, 0x6000) AM_WRITENOP //(sndctl_w) enable sound data roms |
| 156 | AM_RANGE(0x6000, 0x6000) AM_WRITE(sndbank_w) |
| 134 | 157 | AM_RANGE(0x8000, 0x8000) AM_READ(sndcmd_r) |
| 135 | 158 | ADDRESS_MAP_END |
| 136 | 159 | |
| r31917 | r31918 | |
| 621 | 644 | } |
| 622 | 645 | } |
| 623 | 646 | |
| 624 | | WRITE8_MEMBER(inder_state::ppi60a_w) |
| 647 | WRITE8_MEMBER( inder_state::ppi60a_w ) |
| 625 | 648 | { |
| 626 | 649 | if (data) |
| 627 | 650 | for (UINT8 i = 0; i < 8; i++) |
| r31917 | r31918 | |
| 630 | 653 | } |
| 631 | 654 | |
| 632 | 655 | // always 0 but we'll support it anyway |
| 633 | | WRITE8_MEMBER(inder_state::ppi60b_w) |
| 656 | WRITE8_MEMBER( inder_state::ppi60b_w ) |
| 634 | 657 | { |
| 635 | 658 | if (data & 7) |
| 636 | 659 | for (UINT8 i = 0; i < 3; i++) |
| r31917 | r31918 | |
| 638 | 661 | m_row = i+8; |
| 639 | 662 | } |
| 640 | 663 | |
| 641 | | WRITE8_MEMBER(inder_state::ppi64c_w) |
| 664 | WRITE8_MEMBER( inder_state::ppi64c_w ) |
| 642 | 665 | { |
| 643 | 666 | UINT8 i; |
| 644 | 667 | data &= 15; |
| r31917 | r31918 | |
| 650 | 673 | } |
| 651 | 674 | } |
| 652 | 675 | |
| 676 | WRITE8_MEMBER( inder_state::sndbank_w ) |
| 677 | { |
| 678 | UINT8 i; |
| 679 | // look for last rom enabled |
| 680 | for (i = 0; i < 2; i++) |
| 681 | if (!(BIT(data, i))) |
| 682 | m_sound_addr = (m_sound_addr & 0x0ffff) | (i << 16); |
| 683 | } |
| 684 | |
| 685 | WRITE_LINE_MEMBER( inder_state::vck_w ) |
| 686 | { |
| 687 | m_9a->clock_w(0); |
| 688 | m_9b->clock_w(0); |
| 689 | m_9a->clock_w(1); |
| 690 | m_9b->clock_w(1); |
| 691 | if (!m_pc0) |
| 692 | m_msm->data_w(m_p_speech[m_sound_addr] & 15); |
| 693 | else |
| 694 | m_msm->data_w(m_p_speech[m_sound_addr] >> 4); |
| 695 | } |
| 696 | |
| 697 | WRITE_LINE_MEMBER( inder_state::qc7a_w ) |
| 698 | { |
| 699 | m_msm->reset_w(state); |
| 700 | m_9a->clear_w(!state); |
| 701 | m_9b->clear_w(!state); |
| 702 | } |
| 703 | |
| 704 | WRITE_LINE_MEMBER( inder_state::q9a_w ) |
| 705 | { |
| 706 | m_pc0 = state; |
| 707 | } |
| 708 | |
| 709 | WRITE_LINE_MEMBER( inder_state::qc9b_w ) |
| 710 | { |
| 711 | m_9a->d_w(state); |
| 712 | m_9b->d_w(state); |
| 713 | } |
| 714 | |
| 715 | READ8_MEMBER( inder_state::ppic_r ) |
| 716 | { |
| 717 | return m_pc0 | m_portc; |
| 718 | } |
| 719 | |
| 720 | WRITE8_MEMBER( inder_state::ppia_w ) |
| 721 | { |
| 722 | m_sound_addr = (m_sound_addr & 0x3ff00) | data; |
| 723 | } |
| 724 | |
| 725 | WRITE8_MEMBER( inder_state::ppib_w ) |
| 726 | { |
| 727 | // data &= 0x7f; |
| 728 | // m_sound_addr = (m_sound_addr & 0x380ff) | (data << 8); |
| 729 | m_sound_addr = (m_sound_addr & 0x300ff) | (data << 8); |
| 730 | } |
| 731 | |
| 732 | WRITE8_MEMBER( inder_state::ppic_w ) |
| 733 | { |
| 734 | // pc4 - READY line back to cpu board, but not used |
| 735 | if (BIT(data, 5) != BIT(m_portc, 5)) |
| 736 | m_msm->set_prescaler_selector(m_msm, BIT(data, 5) ? MSM5205_S48_4B : MSM5205_S96_4B); // S1 pin |
| 737 | m_7a->clock_w(BIT(data, 6)); |
| 738 | m_7a->preset_w(!BIT(data, 7)); |
| 739 | m_9a->preset_w(!BIT(data, 7)); |
| 740 | m_portc = data & 0xfe; |
| 741 | } |
| 742 | |
| 743 | |
| 653 | 744 | void inder_state::machine_reset() |
| 654 | 745 | { |
| 746 | m_sound_addr = 0; |
| 655 | 747 | m_row = 0; |
| 748 | if (m_7a) |
| 749 | m_7a->clear_w(1); |
| 656 | 750 | } |
| 657 | 751 | |
| 658 | 752 | DRIVER_INIT_MEMBER( inder_state, inder ) |
| 659 | 753 | { |
| 754 | m_p_speech = memregion("speech")->base(); |
| 755 | if (m_7a) |
| 756 | { |
| 757 | m_7a->d_w(0); |
| 758 | m_7a->clear_w(0); |
| 759 | m_9b->preset_w(1); |
| 760 | } |
| 660 | 761 | } |
| 661 | 762 | |
| 662 | 763 | static MACHINE_CONFIG_START( brvteam, inder_state ) |
| r31917 | r31918 | |
| 735 | 836 | |
| 736 | 837 | /* Sound */ |
| 737 | 838 | MCFG_FRAGMENT_ADD( genpin_audio ) |
| 839 | MCFG_SPEAKER_STANDARD_MONO("msmvol") |
| 840 | MCFG_SOUND_ADD("msm", MSM5205, XTAL_384kHz) |
| 841 | MCFG_MSM5205_VCLK_CB(WRITELINE(inder_state, vck_w)) |
| 842 | MCFG_MSM5205_PRESCALER_SELECTOR(MSM5205_S48_4B) /* 4KHz 4-bit */ |
| 843 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "msmvol", 1.0) |
| 738 | 844 | |
| 739 | 845 | /* Devices */ |
| 740 | 846 | MCFG_DEVICE_ADD("ppi60", I8255A, 0 ) |
| r31917 | r31918 | |
| 771 | 877 | |
| 772 | 878 | MCFG_DEVICE_ADD("ppi", I8255A, 0 ) |
| 773 | 879 | //MCFG_I8255_IN_PORTA_CB(READ8(inder_state, ppia_r)) |
| 774 | | //MCFG_I8255_OUT_PORTA_CB(WRITE8(inder_state, ppia_w)) |
| 880 | MCFG_I8255_OUT_PORTA_CB(WRITE8(inder_state, ppia_w)) |
| 775 | 881 | //MCFG_I8255_IN_PORTB_CB(READ8(inder_state, ppib_r)) |
| 776 | | //MCFG_I8255_OUT_PORTB_CB(WRITE8(inder_state, ppib_w)) |
| 777 | | //MCFG_I8255_IN_PORTC_CB(READ8(inder_state, ppic_r)) |
| 778 | | //MCFG_I8255_OUT_PORTC_CB(WRITE8(inder_state, ppic_w)) |
| 882 | MCFG_I8255_OUT_PORTB_CB(WRITE8(inder_state, ppib_w)) |
| 883 | MCFG_I8255_IN_PORTC_CB(READ8(inder_state, ppic_r)) |
| 884 | MCFG_I8255_OUT_PORTC_CB(WRITE8(inder_state, ppic_w)) |
| 885 | |
| 886 | MCFG_DEVICE_ADD("7a", TTL7474, 0) |
| 887 | MCFG_7474_COMP_OUTPUT_CB(WRITELINE(inder_state, qc7a_w)) |
| 888 | |
| 889 | MCFG_DEVICE_ADD("9a", TTL7474, 0) |
| 890 | MCFG_7474_OUTPUT_CB(WRITELINE(inder_state, q9a_w)) |
| 891 | |
| 892 | MCFG_DEVICE_ADD("9b", TTL7474, 0) |
| 893 | MCFG_7474_COMP_OUTPUT_CB(WRITELINE(inder_state, qc9b_w)) |
| 779 | 894 | MACHINE_CONFIG_END |
| 780 | 895 | |
| 781 | 896 | |
| r31917 | r31918 | |
| 819 | 934 | ROM_REGION(0x2000, "audiocpu", 0) |
| 820 | 935 | ROM_LOAD("ci-11.bin", 0x0000, 0x2000, CRC(a0732fe4) SHA1(54f62cd81bdb7e1924acb67ddbe43eb3d0a4eab0)) |
| 821 | 936 | |
| 822 | | ROM_REGION(0x40000, "user1", 0) |
| 937 | ROM_REGION(0x40000, "speech", 0) |
| 823 | 938 | ROM_LOAD("ci-24.bin", 0x00000, 0x10000, CRC(6406bd18) SHA1(ae45ed9e8b1fd278a36a68b780352dbbb6ee781e)) |
| 824 | 939 | ROM_LOAD("ci-23.bin", 0x10000, 0x10000, CRC(eac346da) SHA1(7c4c26ae089dda0dcd7300fd1ecabf5a91099c41)) |
| 825 | 940 | ROM_LOAD("ci-22.bin", 0x20000, 0x10000, CRC(379740da) SHA1(83ad13ab7f1f37c78397d8e830bd74c5a7aea758)) |
| r31917 | r31918 | |
| 836 | 951 | ROM_REGION(0x2000, "audiocpu", 0) |
| 837 | 952 | ROM_LOAD("clown_b.bin", 0x0000, 0x2000, CRC(81a66302) SHA1(3d1243ae878747f20e54cd3322c5a54ded45ce21)) |
| 838 | 953 | |
| 839 | | ROM_REGION(0x40000, "user1", 0) |
| 954 | ROM_REGION(0x40000, "speech", 0) |
| 840 | 955 | ROM_LOAD("clown_c.bin", 0x00000, 0x10000, CRC(dff89319) SHA1(3745a02c3755d11ea7fb552f7a5df2e8bbee2c29)) |
| 841 | 956 | ROM_LOAD("clown_d.bin", 0x10000, 0x10000, CRC(cce4e1dc) SHA1(561c9331d2d110d34cf250cd7b25be16a72a1d79)) |
| 842 | 957 | ROM_LOAD("clown_e.bin", 0x20000, 0x10000, CRC(98263526) SHA1(509764e65847637824ba93f7e6ce926501c431ce)) |
| r31917 | r31918 | |
| 853 | 968 | ROM_REGION(0x2000, "audiocpu", 0) |
| 854 | 969 | ROM_LOAD("a-corsar.bin", 0x0000, 0x2000, CRC(e14b7918) SHA1(5a5fc308b0b70fe041b81071ba4820782b6ff988)) |
| 855 | 970 | |
| 856 | | ROM_REGION(0x40000, "user1", 0) |
| 971 | ROM_REGION(0x40000, "speech", 0) |
| 857 | 972 | ROM_LOAD("b-corsar.bin", 0x00000, 0x10000, CRC(7f155828) SHA1(e459c81b2c2e47d4276344d8d6a08c2c6242f941)) |
| 858 | 973 | ROM_LOAD("c-corsar.bin", 0x10000, 0x10000, CRC(047fd722) SHA1(2385507459f85c68141adc7084cb51dfa02462f6)) |
| 859 | 974 | ROM_LOAD("d-corsar.bin", 0x20000, 0x10000, CRC(10d8b448) SHA1(ed1918e6c55eba07dde31b9755c9403e073cad98)) |
| r31917 | r31918 | |
| 870 | 985 | ROM_REGION(0x2000, "audiocpu", 0) |
| 871 | 986 | ROM_LOAD("snd11.bin", 0x0000, 0x2000, CRC(2cebc1a5) SHA1(e0dae2b1ce31ff436b55ceb1ec71d39fc56694da)) |
| 872 | 987 | |
| 873 | | ROM_REGION(0x40000, "user1", 0) |
| 988 | ROM_REGION(0x40000, "speech", 0) |
| 874 | 989 | ROM_LOAD("snd24.bin", 0x00000, 0x10000, CRC(603bfc3c) SHA1(8badd9731243270ce5b8003373ed09ec7eac6ca6)) |
| 875 | 990 | ROM_LOAD("snd23.bin", 0x10000, 0x10000, CRC(2868ce6f) SHA1(317457763f764be08cbe6a5dd4008ba2257c9d78)) |
| 876 | 991 | ROM_LOAD("snd22.bin", 0x20000, 0x10000, CRC(2559f874) SHA1(cbf57f29e394d5dc320e7dcbd2625f6c96412a06)) |
| r31917 | r31918 | |
| 888 | 1003 | ROM_REGION(0x2000, "audiocpu", 0) |
| 889 | 1004 | ROM_LOAD("atletaa.snd", 0x0000, 0x2000, CRC(051c5329) SHA1(339115af4a2e3f1f2c31073cbed1842518d5916e)) |
| 890 | 1005 | |
| 891 | | ROM_REGION(0x40000, "user1", 0) |
| 1006 | ROM_REGION(0x40000, "speech", 0) |
| 892 | 1007 | ROM_LOAD("atletab.snd", 0x00000, 0x10000, CRC(7f155828) SHA1(e459c81b2c2e47d4276344d8d6a08c2c6242f941)) |
| 893 | 1008 | ROM_LOAD("atletac.snd", 0x10000, 0x10000, CRC(20456363) SHA1(b226400dac35dedc039a7e03cb525c6033b24ebc)) |
| 894 | 1009 | ROM_LOAD("atletad.snd", 0x20000, 0x10000, CRC(6518e3a4) SHA1(6b1d852005dabb76c7c65b87ecc9ee1422f16737)) |
| r31917 | r31918 | |
| 905 | 1020 | ROM_REGION(0x2000, "audiocpu", 0) |
| 906 | 1021 | ROM_LOAD("a-250cc.bin", 0x0000, 0x2000, CRC(b64bdafb) SHA1(eab6d54d34b44187d454c1999e4bcf455183d5a0)) |
| 907 | 1022 | |
| 908 | | ROM_REGION(0x40000, "user1", 0) |
| 1023 | ROM_REGION(0x40000, "speech", 0) |
| 909 | 1024 | ROM_LOAD("b-250cc.bin", 0x00000, 0x10000, CRC(884c31c8) SHA1(23a838f1f0cb4905fa8552579b5452134f0fc9cc)) |
| 910 | 1025 | ROM_LOAD("c-250cc.bin", 0x10000, 0x10000, CRC(5a1dfa1d) SHA1(4957431d87be0bb6d27910b718f7b7edcd405fff)) |
| 911 | 1026 | ROM_LOAD("d-250cc.bin", 0x20000, 0x10000, CRC(a0940387) SHA1(0e06483e3e823bf4673d8e0bd120b0a6b802035d)) |
| r31917 | r31918 | |
| 923 | 1038 | ROM_REGION(0x2000, "audiocpu", 0) |
| 924 | 1039 | ROM_LOAD("sound_e1.bin", 0x0000, 0x2000, CRC(55e889e8) SHA1(0a240868c1b17762588c0ed9a14f568a6e50f409)) |
| 925 | 1040 | |
| 926 | | ROM_REGION(0x80000, "user1", 0) |
| 1041 | ROM_REGION(0x80000, "speech", 0) |
| 927 | 1042 | ROM_LOAD("sound_e2.bin", 0x00000, 0x20000, CRC(5ac61535) SHA1(75b9a805f8639554251192e3777073c29952c78f)) |
| 928 | 1043 | |
| 929 | 1044 | ROM_REGION(0x10000, "soundcpu2", 0) |