trunk/src/mame/drivers/s3.c
| r18598 | r18599 | |
| 34 | 34 | |
| 35 | 35 | DECLARE_READ8_MEMBER(dac_r); |
| 36 | 36 | DECLARE_WRITE8_MEMBER(dac_w); |
| 37 | DECLARE_WRITE8_MEMBER(dig0_w); |
| 38 | DECLARE_WRITE8_MEMBER(dig1_w); |
| 39 | DECLARE_WRITE8_MEMBER(lamp0_w); |
| 40 | DECLARE_WRITE8_MEMBER(lamp1_w); |
| 41 | DECLARE_READ8_MEMBER(switch_r); |
| 42 | DECLARE_WRITE8_MEMBER(switch_w); |
| 37 | 43 | DECLARE_READ_LINE_MEMBER(cb1_r); |
| 38 | 44 | TIMER_DEVICE_CALLBACK_MEMBER(irq); |
| 39 | 45 | protected: |
| r18598 | r18599 | |
| 52 | 58 | private: |
| 53 | 59 | UINT8 m_t_c; |
| 54 | 60 | UINT8 m_sound_data; |
| 61 | UINT8 m_strobe; |
| 55 | 62 | bool m_cb1; |
| 56 | 63 | }; |
| 57 | 64 | |
| r18598 | r18599 | |
| 85 | 92 | { |
| 86 | 93 | DEVCB_NULL, /* port A in */ |
| 87 | 94 | DEVCB_NULL, /* port B in */ |
| 88 | | DEVCB_NULL, /* line CA1 in */ |
| 89 | | DEVCB_NULL, /* line CB1 in */ |
| 95 | DEVCB_LINE_GND, /* line CA1 in */ |
| 96 | DEVCB_LINE_GND, /* line CB1 in */ |
| 90 | 97 | DEVCB_NULL, /* line CA2 in */ |
| 91 | 98 | DEVCB_NULL, /* line CB2 in */ |
| 92 | 99 | DEVCB_NULL, /* port A out */ |
| r18598 | r18599 | |
| 97 | 104 | DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE) /* IRQB */ |
| 98 | 105 | }; |
| 99 | 106 | |
| 107 | WRITE8_MEMBER( s3_state::lamp0_w ) |
| 108 | { |
| 109 | m_maincpu->set_input_line(M6800_IRQ_LINE, CLEAR_LINE); |
| 110 | } |
| 111 | |
| 112 | WRITE8_MEMBER( s3_state::lamp1_w ) |
| 113 | { |
| 114 | //printf("1=%X ",data); |
| 115 | } |
| 116 | |
| 100 | 117 | static const pia6821_interface pia1_intf = |
| 101 | 118 | { |
| 102 | 119 | DEVCB_NULL, /* port A in */ |
| 103 | 120 | DEVCB_NULL, /* port B in */ |
| 104 | | DEVCB_NULL, /* line CA1 in */ |
| 105 | | DEVCB_NULL, /* line CB1 in */ |
| 121 | DEVCB_LINE_GND, /* line CA1 in */ |
| 122 | DEVCB_LINE_GND, /* line CB1 in */ |
| 106 | 123 | DEVCB_NULL, /* line CA2 in */ |
| 107 | 124 | DEVCB_NULL, /* line CB2 in */ |
| 108 | | DEVCB_NULL, /* port A out */ |
| 109 | | DEVCB_NULL, /* port B out */ |
| 125 | DEVCB_DRIVER_MEMBER(s3_state, lamp0_w), /* port A out */ |
| 126 | DEVCB_DRIVER_MEMBER(s3_state, lamp1_w), /* port B out */ |
| 110 | 127 | DEVCB_NULL, /* line CA2 out */ |
| 111 | 128 | DEVCB_NULL, /* port CB2 out */ |
| 112 | 129 | DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE), /* IRQA */ |
| 113 | 130 | DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE) /* IRQB */ |
| 114 | 131 | }; |
| 115 | 132 | |
| 133 | WRITE8_MEMBER( s3_state::dig0_w ) |
| 134 | { |
| 135 | m_strobe = data; |
| 136 | } |
| 137 | |
| 138 | WRITE8_MEMBER( s3_state::dig1_w ) |
| 139 | { |
| 140 | static const UINT8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0, 0, 0, 0, 0, 0 }; // MC14558 |
| 141 | // player 1, 2, credits, balls |
| 142 | output_set_digit_value(m_strobe, patterns[data&15]); |
| 143 | // player 3 and 4 |
| 144 | output_set_digit_value(m_strobe+20, patterns[data>>4]); |
| 145 | } |
| 146 | |
| 116 | 147 | static const pia6821_interface pia2_intf = |
| 117 | 148 | { |
| 118 | 149 | DEVCB_NULL, /* port A in */ |
| r18598 | r18599 | |
| 121 | 152 | DEVCB_NULL, /* line CB1 in */ |
| 122 | 153 | DEVCB_NULL, /* line CA2 in */ |
| 123 | 154 | DEVCB_NULL, /* line CB2 in */ |
| 124 | | DEVCB_NULL, /* port A out */ |
| 125 | | DEVCB_NULL, /* port B out */ |
| 155 | DEVCB_DRIVER_MEMBER(s3_state, dig0_w), /* port A out */ |
| 156 | DEVCB_DRIVER_MEMBER(s3_state, dig1_w), /* port B out */ |
| 126 | 157 | DEVCB_NULL, /* line CA2 out */ |
| 127 | 158 | DEVCB_NULL, /* port CB2 out */ |
| 128 | 159 | DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE), /* IRQA */ |
| 129 | 160 | DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE) /* IRQB */ |
| 130 | 161 | }; |
| 131 | 162 | |
| 163 | READ8_MEMBER( s3_state::switch_r ) |
| 164 | { |
| 165 | return 0xff; |
| 166 | } |
| 167 | |
| 168 | WRITE8_MEMBER( s3_state::switch_w ) |
| 169 | { |
| 170 | |
| 171 | } |
| 172 | |
| 132 | 173 | static const pia6821_interface pia3_intf = |
| 133 | 174 | { |
| 134 | | DEVCB_NULL, /* port A in */ |
| 175 | DEVCB_DRIVER_MEMBER(s3_state, switch_r), /* port A in */ |
| 135 | 176 | DEVCB_NULL, /* port B in */ |
| 136 | | DEVCB_NULL, /* line CA1 in */ |
| 137 | | DEVCB_NULL, /* line CB1 in */ |
| 177 | DEVCB_LINE_GND, /* line CA1 in */ |
| 178 | DEVCB_LINE_GND, /* line CB1 in */ |
| 138 | 179 | DEVCB_NULL, /* line CA2 in */ |
| 139 | 180 | DEVCB_NULL, /* line CB2 in */ |
| 140 | 181 | DEVCB_NULL, /* port A out */ |
| 141 | | DEVCB_NULL, /* port B out */ |
| 182 | DEVCB_DRIVER_MEMBER(s3_state, switch_w), /* port B out */ |
| 142 | 183 | DEVCB_NULL, /* line CA2 out */ |
| 143 | 184 | DEVCB_NULL, /* port CB2 out */ |
| 144 | 185 | DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE), /* IRQA */ |
| r18598 | r18599 | |
| 165 | 206 | static const pia6821_interface pia4_intf = |
| 166 | 207 | { |
| 167 | 208 | DEVCB_NULL, /* port A in */ |
| 168 | | DEVCB_NULL, /* port B in */ |
| 209 | DEVCB_DRIVER_MEMBER(s3_state, dac_r), /* port B in */ |
| 169 | 210 | DEVCB_NULL, /* line CA1 in */ |
| 170 | 211 | DEVCB_DRIVER_LINE_MEMBER(s3_state, cb1_r), /* line CB1 in */ |
| 171 | 212 | DEVCB_NULL, /* line CA2 in */ |
| r18598 | r18599 | |
| 180 | 221 | |
| 181 | 222 | TIMER_DEVICE_CALLBACK_MEMBER( s3_state::irq) |
| 182 | 223 | { |
| 183 | | if (m_t_c > 0x10) |
| 224 | if (m_t_c > 0x70) |
| 184 | 225 | m_maincpu->set_input_line(M6800_IRQ_LINE, ASSERT_LINE); |
| 185 | 226 | else |
| 186 | 227 | m_t_c++; |
| 187 | | m_maincpu->set_input_line(M6800_IRQ_LINE, CLEAR_LINE); |
| 188 | 228 | } |
| 189 | 229 | |
| 190 | 230 | static MACHINE_CONFIG_START( s3, s3_state ) |