trunk/src/mame/drivers/s8.c
| r32525 | r32526 | |
| 40 | 40 | features a break-dancing toy and a spinning disk. |
| 41 | 41 | |
| 42 | 42 | ToDo: |
| 43 | | - Diagnostic buttons not working |
| 44 | 43 | |
| 45 | 44 | |
| 46 | 45 | ************************************************************************************/ |
| r32525 | r32526 | |
| 80 | 79 | DECLARE_READ8_MEMBER(switch_r); |
| 81 | 80 | DECLARE_WRITE8_MEMBER(switch_w); |
| 82 | 81 | DECLARE_READ_LINE_MEMBER(pia21_ca1_r); |
| 83 | | DECLARE_READ_LINE_MEMBER(pia28_ca1_r); |
| 84 | | DECLARE_READ_LINE_MEMBER(pia28_cb1_r); |
| 85 | 82 | DECLARE_WRITE_LINE_MEMBER(pia21_ca2_w); |
| 86 | 83 | DECLARE_WRITE_LINE_MEMBER(pia21_cb2_w) { }; // enable solenoids |
| 87 | 84 | DECLARE_WRITE_LINE_MEMBER(pia24_cb2_w) { }; // dummy to stop error log filling up |
| 88 | 85 | DECLARE_WRITE_LINE_MEMBER(pia28_ca2_w) { }; // comma3&4 |
| 89 | 86 | DECLARE_WRITE_LINE_MEMBER(pia28_cb2_w) { }; // comma1&2 |
| 90 | | TIMER_DEVICE_CALLBACK_MEMBER(irq); |
| 87 | DECLARE_WRITE_LINE_MEMBER(pia_irq); |
| 91 | 88 | DECLARE_INPUT_CHANGED_MEMBER(main_nmi); |
| 92 | 89 | DECLARE_INPUT_CHANGED_MEMBER(audio_nmi); |
| 93 | 90 | DECLARE_MACHINE_RESET(s8); |
| 91 | DECLARE_DRIVER_INIT(s8); |
| 94 | 92 | private: |
| 95 | | UINT8 m_t_c; |
| 96 | 93 | UINT8 m_sound_data; |
| 97 | 94 | UINT8 m_strobe; |
| 98 | 95 | UINT8 m_kbdrow; |
| 99 | 96 | bool m_data_ok; |
| 97 | emu_timer* m_irq_timer; |
| 98 | virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); |
| 99 | static const device_timer_id TIMER_IRQ = 0; |
| 100 | 100 | required_device<cpu_device> m_maincpu; |
| 101 | 101 | required_device<cpu_device> m_audiocpu; |
| 102 | 102 | required_device<dac_device> m_dac; |
| r32525 | r32526 | |
| 177 | 177 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Up/Down") PORT_CODE(KEYCODE_6_PAD) PORT_TOGGLE |
| 178 | 178 | INPUT_PORTS_END |
| 179 | 179 | |
| 180 | | MACHINE_RESET_MEMBER( s8_state, s8 ) |
| 181 | | { |
| 182 | | m_t_c = 0; |
| 183 | | } |
| 184 | | |
| 185 | 180 | INPUT_CHANGED_MEMBER( s8_state::main_nmi ) |
| 186 | 181 | { |
| 187 | 182 | // Diagnostic button sends a pulse to NMI pin |
| r32525 | r32526 | |
| 221 | 216 | |
| 222 | 217 | WRITE8_MEMBER( s8_state::lamp0_w ) |
| 223 | 218 | { |
| 224 | | m_maincpu->set_input_line(M6800_IRQ_LINE, CLEAR_LINE); |
| 225 | 219 | } |
| 226 | 220 | |
| 227 | | READ_LINE_MEMBER( s8_state::pia28_ca1_r ) |
| 228 | | { |
| 229 | | return BIT(ioport("DIAGS")->read(), 2); // advance button |
| 230 | | } |
| 231 | | |
| 232 | | READ_LINE_MEMBER( s8_state::pia28_cb1_r ) |
| 233 | | { |
| 234 | | return BIT(ioport("DIAGS")->read(), 3); // up/down switch |
| 235 | | } |
| 236 | | |
| 237 | 221 | WRITE8_MEMBER( s8_state::dig0_w ) |
| 238 | 222 | { |
| 239 | 223 | static const UINT8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0x58, 0x4c, 0x62, 0x69, 0x78, 0 }; // 7447 |
| r32525 | r32526 | |
| 271 | 255 | return m_sound_data; |
| 272 | 256 | } |
| 273 | 257 | |
| 274 | | TIMER_DEVICE_CALLBACK_MEMBER( s8_state::irq ) |
| 258 | WRITE_LINE_MEMBER( s8_state::pia_irq ) |
| 275 | 259 | { |
| 276 | | if (m_t_c > 0x70) |
| 277 | | m_maincpu->set_input_line(M6800_IRQ_LINE, ASSERT_LINE); |
| 260 | if(state == CLEAR_LINE) |
| 261 | { |
| 262 | // restart IRQ timer |
| 263 | m_irq_timer->adjust(attotime::from_ticks(980,1e6),1); |
| 264 | } |
| 278 | 265 | else |
| 279 | | m_t_c++; |
| 266 | { |
| 267 | // disable IRQ timer while other IRQs are being handled |
| 268 | // (counter is reset every 32 cycles while a PIA IRQ is handled) |
| 269 | m_irq_timer->adjust(attotime::zero); |
| 270 | } |
| 280 | 271 | } |
| 281 | 272 | |
| 273 | void s8_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) |
| 274 | { |
| 275 | switch(id) |
| 276 | { |
| 277 | case TIMER_IRQ: |
| 278 | if(param == 1) |
| 279 | { |
| 280 | m_maincpu->set_input_line(M6800_IRQ_LINE,ASSERT_LINE); |
| 281 | m_irq_timer->adjust(attotime::from_ticks(32,1e6),0); |
| 282 | m_pia28->ca1_w(BIT(ioport("DIAGS")->read(), 2)); // Advance |
| 283 | m_pia28->cb1_w(BIT(ioport("DIAGS")->read(), 3)); // Up/Down |
| 284 | } |
| 285 | else |
| 286 | { |
| 287 | m_maincpu->set_input_line(M6800_IRQ_LINE,CLEAR_LINE); |
| 288 | m_irq_timer->adjust(attotime::from_ticks(980,1e6),1); |
| 289 | m_pia28->ca1_w(1); |
| 290 | m_pia28->cb1_w(1); |
| 291 | } |
| 292 | break; |
| 293 | } |
| 294 | } |
| 295 | |
| 296 | MACHINE_RESET_MEMBER( s8_state, s8 ) |
| 297 | { |
| 298 | } |
| 299 | |
| 300 | DRIVER_INIT_MEMBER( s8_state, s8 ) |
| 301 | { |
| 302 | m_irq_timer = timer_alloc(TIMER_IRQ); |
| 303 | m_irq_timer->adjust(attotime::from_ticks(980,1e6),1); |
| 304 | } |
| 305 | |
| 282 | 306 | static MACHINE_CONFIG_START( s8, s8_state ) |
| 283 | 307 | /* basic machine hardware */ |
| 284 | 308 | MCFG_CPU_ADD("maincpu", M6802, XTAL_4MHz) |
| 285 | 309 | MCFG_CPU_PROGRAM_MAP(s8_main_map) |
| 286 | | MCFG_TIMER_DRIVER_ADD_PERIODIC("irq", s8_state, irq, attotime::from_hz(250)) |
| 287 | 310 | MCFG_MACHINE_RESET_OVERRIDE(s8_state, s8) |
| 288 | 311 | |
| 289 | 312 | /* Video */ |
| r32525 | r32526 | |
| 300 | 323 | MCFG_PIA_WRITEPB_HANDLER(WRITE8(s8_state, sol2_w)) |
| 301 | 324 | MCFG_PIA_CA2_HANDLER(WRITELINE(s8_state, pia21_ca2_w)) |
| 302 | 325 | MCFG_PIA_CB2_HANDLER(WRITELINE(s8_state, pia21_cb2_w)) |
| 303 | | MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("maincpu", m6802_cpu_device, irq_line)) |
| 304 | | MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("maincpu", m6802_cpu_device, irq_line)) |
| 326 | MCFG_PIA_IRQA_HANDLER(WRITELINE(s8_state, pia_irq)) |
| 327 | MCFG_PIA_IRQB_HANDLER(WRITELINE(s8_state, pia_irq)) |
| 305 | 328 | |
| 306 | 329 | MCFG_DEVICE_ADD("pia24", PIA6821, 0) |
| 307 | 330 | MCFG_PIA_WRITEPA_HANDLER(WRITE8(s8_state, lamp0_w)) |
| 308 | 331 | MCFG_PIA_WRITEPB_HANDLER(WRITE8(s8_state, lamp1_w)) |
| 309 | 332 | MCFG_PIA_CB2_HANDLER(WRITELINE(s8_state, pia24_cb2_w)) |
| 310 | | MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("maincpu", m6802_cpu_device, irq_line)) |
| 311 | | MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("maincpu", m6802_cpu_device, irq_line)) |
| 333 | MCFG_PIA_IRQA_HANDLER(WRITELINE(s8_state, pia_irq)) |
| 334 | MCFG_PIA_IRQB_HANDLER(WRITELINE(s8_state, pia_irq)) |
| 312 | 335 | |
| 313 | 336 | MCFG_DEVICE_ADD("pia28", PIA6821, 0) |
| 314 | | MCFG_PIA_READCA1_HANDLER(READLINE(s8_state, pia28_ca1_r)) |
| 315 | | MCFG_PIA_READCB1_HANDLER(READLINE(s8_state, pia28_cb1_r)) |
| 316 | 337 | MCFG_PIA_WRITEPA_HANDLER(WRITE8(s8_state, dig0_w)) |
| 317 | 338 | MCFG_PIA_WRITEPB_HANDLER(WRITE8(s8_state, dig1_w)) |
| 318 | 339 | MCFG_PIA_CA2_HANDLER(WRITELINE(s8_state, pia28_ca2_w)) |
| 319 | 340 | MCFG_PIA_CB2_HANDLER(WRITELINE(s8_state, pia28_cb2_w)) |
| 320 | | MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("maincpu", m6802_cpu_device, irq_line)) |
| 321 | | MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("maincpu", m6802_cpu_device, irq_line)) |
| 341 | MCFG_PIA_IRQA_HANDLER(WRITELINE(s8_state, pia_irq)) |
| 342 | MCFG_PIA_IRQB_HANDLER(WRITELINE(s8_state, pia_irq)) |
| 322 | 343 | |
| 323 | 344 | MCFG_DEVICE_ADD("pia30", PIA6821, 0) |
| 324 | 345 | MCFG_PIA_READPA_HANDLER(READ8(s8_state, switch_r)) |
| 325 | 346 | MCFG_PIA_WRITEPB_HANDLER(WRITE8(s8_state, switch_w)) |
| 326 | | MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("maincpu", m6802_cpu_device, irq_line)) |
| 327 | | MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("maincpu", m6802_cpu_device, irq_line)) |
| 347 | MCFG_PIA_IRQA_HANDLER(WRITELINE(s8_state, pia_irq)) |
| 348 | MCFG_PIA_IRQB_HANDLER(WRITELINE(s8_state, pia_irq)) |
| 328 | 349 | |
| 329 | | MCFG_NVRAM_ADD_1FILL("nvram") |
| 350 | MCFG_NVRAM_ADD_0FILL("nvram") |
| 330 | 351 | |
| 331 | 352 | /* Add the soundcard */ |
| 332 | 353 | MCFG_CPU_ADD("audiocpu", M6808, XTAL_4MHz) |
| r32525 | r32526 | |
| 364 | 385 | ROM_END |
| 365 | 386 | |
| 366 | 387 | |
| 367 | | GAME(1984,pfevr_l2, 0, s8, s8, driver_device, 0, ROT0, "Williams", "Pennant Fever (L-2)", GAME_MECHANICAL) |
| 368 | | GAME(1984,pfevr_p3, pfevr_l2, s8, s8, driver_device, 0, ROT0, "Williams", "Pennant Fever (P-3)", GAME_MECHANICAL) |
| 388 | GAME(1984,pfevr_l2, 0, s8, s8, s8_state, s8, ROT0, "Williams", "Pennant Fever (L-2)", GAME_MECHANICAL) |
| 389 | GAME(1984,pfevr_p3, pfevr_l2, s8, s8, s8_state, s8, ROT0, "Williams", "Pennant Fever (P-3)", GAME_MECHANICAL) |
trunk/src/mame/drivers/s8a.c
| r32525 | r32526 | |
| 17 | 17 | The score only has 5 digits, but the game stores the 100,000 digit internally. |
| 18 | 18 | |
| 19 | 19 | ToDo: |
| 20 | | - Diagnostic buttons not working |
| 21 | 20 | |
| 22 | 21 | ************************************************************************************/ |
| 23 | 22 | |
| r32525 | r32526 | |
| 56 | 55 | DECLARE_READ8_MEMBER(switch_r); |
| 57 | 56 | DECLARE_WRITE8_MEMBER(switch_w); |
| 58 | 57 | DECLARE_READ_LINE_MEMBER(pia21_ca1_r); |
| 59 | | DECLARE_READ_LINE_MEMBER(pia28_ca1_r); |
| 60 | | DECLARE_READ_LINE_MEMBER(pia28_cb1_r); |
| 61 | 58 | DECLARE_WRITE_LINE_MEMBER(pia21_ca2_w); |
| 62 | 59 | DECLARE_WRITE_LINE_MEMBER(pia21_cb2_w) { }; // enable solenoids |
| 63 | 60 | DECLARE_WRITE_LINE_MEMBER(pia24_cb2_w) { }; // dummy to stop error log filling up |
| 64 | 61 | DECLARE_WRITE_LINE_MEMBER(pia28_ca2_w) { }; // comma3&4 |
| 65 | 62 | DECLARE_WRITE_LINE_MEMBER(pia28_cb2_w) { }; // comma1&2 |
| 66 | | TIMER_DEVICE_CALLBACK_MEMBER(irq); |
| 63 | DECLARE_WRITE_LINE_MEMBER(pia_irq); |
| 67 | 64 | DECLARE_INPUT_CHANGED_MEMBER(main_nmi); |
| 68 | 65 | DECLARE_INPUT_CHANGED_MEMBER(audio_nmi); |
| 69 | 66 | DECLARE_MACHINE_RESET(s8a); |
| 67 | DECLARE_DRIVER_INIT(s8a); |
| 70 | 68 | private: |
| 71 | | UINT8 m_t_c; |
| 72 | 69 | UINT8 m_sound_data; |
| 73 | 70 | UINT8 m_strobe; |
| 74 | 71 | UINT8 m_kbdrow; |
| 75 | 72 | bool m_data_ok; |
| 73 | emu_timer* m_irq_timer; |
| 74 | virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); |
| 75 | static const device_timer_id TIMER_IRQ = 0; |
| 76 | 76 | required_device<cpu_device> m_maincpu; |
| 77 | 77 | required_device<cpu_device> m_audiocpu; |
| 78 | 78 | required_device<dac_device> m_dac; |
| r32525 | r32526 | |
| 83 | 83 | required_device<pia6821_device> m_pia30; |
| 84 | 84 | }; |
| 85 | 85 | |
| 86 | | static ADDRESS_MAP_START( s8_main_map, AS_PROGRAM, 8, s8a_state ) |
| 86 | static ADDRESS_MAP_START( s8a_main_map, AS_PROGRAM, 8, s8a_state ) |
| 87 | 87 | ADDRESS_MAP_GLOBAL_MASK(0x7fff) |
| 88 | 88 | AM_RANGE(0x0000, 0x07ff) AM_RAM AM_SHARE("nvram") |
| 89 | 89 | AM_RANGE(0x2100, 0x2103) AM_DEVREADWRITE("pia21", pia6821_device, read, write) // sound+solenoids |
| r32525 | r32526 | |
| 94 | 94 | AM_RANGE(0x6000, 0x7fff) AM_ROM AM_REGION("roms", 0) |
| 95 | 95 | ADDRESS_MAP_END |
| 96 | 96 | |
| 97 | | static ADDRESS_MAP_START( s8_audio_map, AS_PROGRAM, 8, s8a_state ) |
| 97 | static ADDRESS_MAP_START( s8a_audio_map, AS_PROGRAM, 8, s8a_state ) |
| 98 | 98 | AM_RANGE(0x0000, 0x00ff) AM_RAM |
| 99 | 99 | AM_RANGE(0x2000, 0x2003) AM_DEVREADWRITE("pias", pia6821_device, read, write) |
| 100 | 100 | AM_RANGE(0xc000, 0xffff) AM_ROM AM_REGION("audioroms", 0) |
| 101 | 101 | ADDRESS_MAP_END |
| 102 | 102 | |
| 103 | | static INPUT_PORTS_START( s8 ) |
| 103 | static INPUT_PORTS_START( s8a ) |
| 104 | 104 | PORT_START("X0") |
| 105 | 105 | PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 106 | 106 | |
| r32525 | r32526 | |
| 149 | 149 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Up/Down") PORT_CODE(KEYCODE_6_PAD) PORT_TOGGLE |
| 150 | 150 | INPUT_PORTS_END |
| 151 | 151 | |
| 152 | | MACHINE_RESET_MEMBER( s8a_state, s8a ) |
| 153 | | { |
| 154 | | m_t_c = 0; |
| 155 | | } |
| 156 | | |
| 157 | 152 | INPUT_CHANGED_MEMBER( s8a_state::main_nmi ) |
| 158 | 153 | { |
| 159 | 154 | // Diagnostic button sends a pulse to NMI pin |
| r32525 | r32526 | |
| 193 | 188 | |
| 194 | 189 | WRITE8_MEMBER( s8a_state::lamp0_w ) |
| 195 | 190 | { |
| 196 | | m_maincpu->set_input_line(M6800_IRQ_LINE, CLEAR_LINE); |
| 197 | 191 | } |
| 198 | 192 | |
| 199 | | READ_LINE_MEMBER( s8a_state::pia28_ca1_r ) |
| 200 | | { |
| 201 | | return BIT(ioport("DIAGS")->read(), 2); // advance button |
| 202 | | } |
| 203 | | |
| 204 | | READ_LINE_MEMBER( s8a_state::pia28_cb1_r ) |
| 205 | | { |
| 206 | | return BIT(ioport("DIAGS")->read(), 3); // up/down switch |
| 207 | | } |
| 208 | | |
| 209 | 193 | WRITE8_MEMBER( s8a_state::dig0_w ) |
| 210 | 194 | { |
| 211 | 195 | static const UINT8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0x58, 0x4c, 0x62, 0x69, 0x78, 0 }; // 7447 |
| r32525 | r32526 | |
| 243 | 227 | return m_sound_data; |
| 244 | 228 | } |
| 245 | 229 | |
| 246 | | TIMER_DEVICE_CALLBACK_MEMBER( s8a_state::irq ) |
| 230 | WRITE_LINE_MEMBER( s8a_state::pia_irq ) |
| 247 | 231 | { |
| 248 | | if (m_t_c > 0x70) |
| 249 | | m_maincpu->set_input_line(M6800_IRQ_LINE, ASSERT_LINE); |
| 232 | if(state == CLEAR_LINE) |
| 233 | { |
| 234 | // restart IRQ timer |
| 235 | m_irq_timer->adjust(attotime::from_ticks(980,1e6),1); |
| 236 | } |
| 250 | 237 | else |
| 251 | | m_t_c++; |
| 238 | { |
| 239 | // disable IRQ timer while other IRQs are being handled |
| 240 | // (counter is reset every 32 cycles while a PIA IRQ is handled) |
| 241 | m_irq_timer->adjust(attotime::zero); |
| 242 | } |
| 252 | 243 | } |
| 253 | 244 | |
| 254 | | static MACHINE_CONFIG_START( s8, s8a_state ) |
| 245 | void s8a_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) |
| 246 | { |
| 247 | switch(id) |
| 248 | { |
| 249 | case TIMER_IRQ: |
| 250 | if(param == 1) |
| 251 | { |
| 252 | m_maincpu->set_input_line(M6800_IRQ_LINE,ASSERT_LINE); |
| 253 | m_irq_timer->adjust(attotime::from_ticks(32,1e6),0); |
| 254 | m_pia28->ca1_w(BIT(ioport("DIAGS")->read(), 2)); // Advance |
| 255 | m_pia28->cb1_w(BIT(ioport("DIAGS")->read(), 3)); // Up/Down |
| 256 | } |
| 257 | else |
| 258 | { |
| 259 | m_maincpu->set_input_line(M6800_IRQ_LINE,CLEAR_LINE); |
| 260 | m_irq_timer->adjust(attotime::from_ticks(980,1e6),1); |
| 261 | m_pia28->ca1_w(1); |
| 262 | m_pia28->cb1_w(1); |
| 263 | } |
| 264 | break; |
| 265 | } |
| 266 | } |
| 267 | |
| 268 | MACHINE_RESET_MEMBER( s8a_state, s8a ) |
| 269 | { |
| 270 | } |
| 271 | |
| 272 | DRIVER_INIT_MEMBER( s8a_state, s8a ) |
| 273 | { |
| 274 | m_irq_timer = timer_alloc(TIMER_IRQ); |
| 275 | m_irq_timer->adjust(attotime::from_ticks(980,1e6),1); |
| 276 | } |
| 277 | |
| 278 | static MACHINE_CONFIG_START( s8a, s8a_state ) |
| 255 | 279 | /* basic machine hardware */ |
| 256 | 280 | MCFG_CPU_ADD("maincpu", M6802, XTAL_4MHz) |
| 257 | | MCFG_CPU_PROGRAM_MAP(s8_main_map) |
| 258 | | MCFG_TIMER_DRIVER_ADD_PERIODIC("irq", s8a_state, irq, attotime::from_hz(250)) |
| 281 | MCFG_CPU_PROGRAM_MAP(s8a_main_map) |
| 259 | 282 | MCFG_MACHINE_RESET_OVERRIDE(s8a_state, s8a) |
| 260 | 283 | |
| 261 | 284 | /* Video */ |
| r32525 | r32526 | |
| 272 | 295 | MCFG_PIA_WRITEPB_HANDLER(WRITE8(s8a_state, sol2_w)) |
| 273 | 296 | MCFG_PIA_CA2_HANDLER(WRITELINE(s8a_state, pia21_ca2_w)) |
| 274 | 297 | MCFG_PIA_CB2_HANDLER(WRITELINE(s8a_state, pia21_cb2_w)) |
| 275 | | MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("maincpu", m6802_cpu_device, irq_line)) |
| 276 | | MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("maincpu", m6802_cpu_device, irq_line)) |
| 298 | MCFG_PIA_IRQA_HANDLER(WRITELINE(s8a_state, pia_irq)) |
| 299 | MCFG_PIA_IRQB_HANDLER(WRITELINE(s8a_state, pia_irq)) |
| 277 | 300 | |
| 278 | 301 | MCFG_DEVICE_ADD("pia24", PIA6821, 0) |
| 279 | 302 | MCFG_PIA_WRITEPA_HANDLER(WRITE8(s8a_state, lamp0_w)) |
| 280 | 303 | MCFG_PIA_WRITEPB_HANDLER(WRITE8(s8a_state, lamp1_w)) |
| 281 | 304 | MCFG_PIA_CB2_HANDLER(WRITELINE(s8a_state, pia24_cb2_w)) |
| 282 | | MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("maincpu", m6802_cpu_device, irq_line)) |
| 283 | | MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("maincpu", m6802_cpu_device, irq_line)) |
| 305 | MCFG_PIA_IRQA_HANDLER(WRITELINE(s8a_state, pia_irq)) |
| 306 | MCFG_PIA_IRQB_HANDLER(WRITELINE(s8a_state, pia_irq)) |
| 284 | 307 | |
| 285 | 308 | MCFG_DEVICE_ADD("pia28", PIA6821, 0) |
| 286 | | MCFG_PIA_READCA1_HANDLER(READLINE(s8a_state, pia28_ca1_r)) |
| 287 | | MCFG_PIA_READCB1_HANDLER(READLINE(s8a_state, pia28_cb1_r)) |
| 288 | 309 | MCFG_PIA_WRITEPA_HANDLER(WRITE8(s8a_state, dig0_w)) |
| 289 | 310 | MCFG_PIA_WRITEPB_HANDLER(WRITE8(s8a_state, dig1_w)) |
| 290 | 311 | MCFG_PIA_CA2_HANDLER(WRITELINE(s8a_state, pia28_ca2_w)) |
| 291 | 312 | MCFG_PIA_CB2_HANDLER(WRITELINE(s8a_state, pia28_cb2_w)) |
| 292 | | MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("maincpu", m6802_cpu_device, irq_line)) |
| 293 | | MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("maincpu", m6802_cpu_device, irq_line)) |
| 313 | MCFG_PIA_IRQA_HANDLER(WRITELINE(s8a_state, pia_irq)) |
| 314 | MCFG_PIA_IRQB_HANDLER(WRITELINE(s8a_state, pia_irq)) |
| 294 | 315 | |
| 295 | 316 | MCFG_DEVICE_ADD("pia30", PIA6821, 0) |
| 296 | 317 | MCFG_PIA_READPA_HANDLER(READ8(s8a_state, switch_r)) |
| 297 | 318 | MCFG_PIA_WRITEPB_HANDLER(WRITE8(s8a_state, switch_w)) |
| 298 | | MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("maincpu", m6802_cpu_device, irq_line)) |
| 299 | | MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("maincpu", m6802_cpu_device, irq_line)) |
| 319 | MCFG_PIA_IRQA_HANDLER(WRITELINE(s8a_state, pia_irq)) |
| 320 | MCFG_PIA_IRQB_HANDLER(WRITELINE(s8a_state, pia_irq)) |
| 300 | 321 | |
| 301 | | MCFG_NVRAM_ADD_1FILL("nvram") |
| 322 | MCFG_NVRAM_ADD_0FILL("nvram") |
| 302 | 323 | |
| 303 | 324 | /* Add the soundcard */ |
| 304 | 325 | MCFG_CPU_ADD("audiocpu", M6808, XTAL_4MHz) |
| 305 | | MCFG_CPU_PROGRAM_MAP(s8_audio_map) |
| 326 | MCFG_CPU_PROGRAM_MAP(s8a_audio_map) |
| 306 | 327 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 307 | 328 | MCFG_SOUND_ADD("dac", DAC, 0) |
| 308 | 329 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) |
| r32525 | r32526 | |
| 327 | 348 | ROM_LOAD("ic49.bin", 0x0000, 0x4000, CRC(bcc8ccc4) SHA1(2312f9cc4f5a2dadfbfa61d13c31bb5838adf152) ) |
| 328 | 349 | ROM_END |
| 329 | 350 | |
| 330 | | GAME(1984,scrzy_l1, 0, s8, s8, driver_device, 0, ROT0, "Williams", "Still Crazy", GAME_MECHANICAL ) |
| 351 | GAME(1984,scrzy_l1, 0, s8a, s8a, s8a_state, s8a, ROT0, "Williams", "Still Crazy", GAME_MECHANICAL ) |