trunk/src/mame/drivers/s3.c
| r18639 | r18640 | |
| 48 | 48 | DECLARE_WRITE8_MEMBER(switch_w); |
| 49 | 49 | DECLARE_READ_LINE_MEMBER(cb1_r); |
| 50 | 50 | TIMER_DEVICE_CALLBACK_MEMBER(irq); |
| 51 | DECLARE_MACHINE_RESET(s3); |
| 52 | DECLARE_MACHINE_RESET(s3a); |
| 51 | 53 | protected: |
| 52 | 54 | |
| 53 | 55 | // devices |
| 54 | 56 | required_device<cpu_device> m_maincpu; |
| 55 | | required_device<dac_device> m_dac; |
| 57 | optional_device<dac_device> m_dac; |
| 56 | 58 | required_device<pia6821_device> m_pia0; |
| 57 | 59 | required_device<pia6821_device> m_pia1; |
| 58 | 60 | required_device<pia6821_device> m_pia2; |
| 59 | 61 | required_device<pia6821_device> m_pia3; |
| 60 | | required_device<pia6821_device> m_pia4; |
| 61 | | |
| 62 | | // driver_device overrides |
| 63 | | virtual void machine_reset(); |
| 62 | optional_device<pia6821_device> m_pia4; |
| 64 | 63 | private: |
| 65 | 64 | UINT8 m_t_c; |
| 66 | 65 | UINT8 m_sound_data; |
| r18639 | r18640 | |
| 68 | 67 | UINT8 m_kbdrow; |
| 69 | 68 | bool m_cb1; |
| 70 | 69 | bool m_data_ok; |
| 70 | bool m_chimes; |
| 71 | 71 | }; |
| 72 | 72 | |
| 73 | 73 | static ADDRESS_MAP_START( s3_main_map, AS_PROGRAM, 8, s3_state ) |
| r18639 | r18640 | |
| 164 | 164 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Music") PORT_CODE(KEYCODE_9) PORT_TOGGLE |
| 165 | 165 | INPUT_PORTS_END |
| 166 | 166 | |
| 167 | | void s3_state::machine_reset() |
| 167 | MACHINE_RESET_MEMBER( s3_state, s3 ) |
| 168 | 168 | { |
| 169 | 169 | m_t_c = 0; |
| 170 | m_chimes = 1; |
| 170 | 171 | } |
| 171 | 172 | |
| 173 | MACHINE_RESET_MEMBER( s3_state, s3a ) |
| 174 | { |
| 175 | m_t_c = 0; |
| 176 | m_chimes = 0; |
| 177 | } |
| 178 | |
| 172 | 179 | WRITE8_MEMBER( s3_state::sol0_w ) |
| 173 | 180 | { |
| 174 | | |
| 175 | 181 | } |
| 176 | 182 | |
| 177 | 183 | WRITE8_MEMBER( s3_state::sol1_w ) |
| 178 | 184 | { |
| 179 | | m_sound_data = ioport("SND")->read(); // 0xff or 0xbf |
| 180 | | if (BIT(data, 0)) |
| 181 | | m_sound_data &= 0xfe; |
| 182 | | else |
| 183 | | if (BIT(data, 1)) |
| 184 | | m_sound_data &= 0xfd; |
| 185 | | else |
| 186 | | if (BIT(data, 2)) |
| 187 | | m_sound_data &= 0xfb; |
| 188 | | else |
| 189 | | if (BIT(data, 3)) |
| 190 | | m_sound_data &= 0xf7; |
| 191 | | else |
| 192 | | if (BIT(data, 4)) |
| 193 | | m_sound_data &= 0x7f; |
| 194 | | else |
| 195 | | if (BIT(data, 5)) |
| 196 | | m_samples->start(0, 6); // knocker |
| 197 | | |
| 198 | | if ((m_sound_data & 0xbf) == 0xbf) |
| 185 | if (m_chimes) |
| 199 | 186 | { |
| 200 | | m_cb1 = 0; |
| 201 | | m_pia4->cb1_w(0); |
| 187 | if (BIT(data, 0)) |
| 188 | m_samples->start(1, 1); // 10 chime |
| 189 | else |
| 190 | if (BIT(data, 1)) |
| 191 | m_samples->start(2, 2); // 100 chime |
| 192 | else |
| 193 | if (BIT(data, 2)) |
| 194 | m_samples->start(3, 3); // 1000 chime |
| 195 | // we don't have a 10k chime in samples yet |
| 196 | //else |
| 197 | //if (BIT(data, 3)) |
| 198 | //m_samples->start(1, x); // 10k chime |
| 202 | 199 | } |
| 203 | 200 | else |
| 204 | 201 | { |
| 205 | | m_cb1 = 1; |
| 206 | | m_pia4->cb1_w(1); |
| 202 | m_sound_data = ioport("SND")->read(); // 0xff or 0xbf |
| 203 | if (BIT(data, 0)) |
| 204 | m_sound_data &= 0xfe; |
| 205 | else |
| 206 | if (BIT(data, 1)) |
| 207 | m_sound_data &= 0xfd; |
| 208 | else |
| 209 | if (BIT(data, 2)) |
| 210 | m_sound_data &= 0xfb; |
| 211 | else |
| 212 | if (BIT(data, 3)) |
| 213 | m_sound_data &= 0xf7; |
| 214 | else |
| 215 | if (BIT(data, 4)) |
| 216 | m_sound_data &= 0x7f; |
| 217 | |
| 218 | if ((m_sound_data & 0xbf) == 0xbf) |
| 219 | { |
| 220 | m_cb1 = 0; |
| 221 | m_pia4->cb1_w(0); |
| 222 | } |
| 223 | else |
| 224 | { |
| 225 | m_cb1 = 1; |
| 226 | m_pia4->cb1_w(1); |
| 227 | } |
| 207 | 228 | } |
| 229 | |
| 230 | if (BIT(data, 5)) |
| 231 | m_samples->start(0, 6); // knocker |
| 208 | 232 | } |
| 209 | 233 | |
| 210 | 234 | static const pia6821_interface pia0_intf = |
| r18639 | r18640 | |
| 230 | 254 | |
| 231 | 255 | WRITE8_MEMBER( s3_state::lamp1_w ) |
| 232 | 256 | { |
| 233 | | |
| 234 | 257 | } |
| 235 | 258 | |
| 236 | 259 | static const pia6821_interface pia1_intf = |
| r18639 | r18640 | |
| 353 | 376 | /* basic machine hardware */ |
| 354 | 377 | MCFG_CPU_ADD("maincpu", M6800, 3580000) |
| 355 | 378 | MCFG_CPU_PROGRAM_MAP(s3_main_map) |
| 356 | | MCFG_CPU_ADD("audiocpu", M6802, 3580000) |
| 357 | | MCFG_CPU_PROGRAM_MAP(s3_audio_map) |
| 358 | 379 | MCFG_TIMER_DRIVER_ADD_PERIODIC("irq", s3_state, irq, attotime::from_hz(1000)) |
| 380 | MCFG_MACHINE_RESET_OVERRIDE(s3_state, s3) |
| 359 | 381 | |
| 360 | 382 | /* Video */ |
| 361 | 383 | MCFG_DEFAULT_LAYOUT(layout_s3) |
| 362 | 384 | |
| 363 | 385 | /* Sound */ |
| 364 | 386 | MCFG_FRAGMENT_ADD( genpin_audio ) |
| 365 | | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 366 | | MCFG_SOUND_ADD("dac", DAC, 0) |
| 367 | | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) |
| 368 | 387 | |
| 369 | 388 | /* Devices */ |
| 370 | 389 | MCFG_PIA6821_ADD("pia0", pia0_intf) |
| 371 | 390 | MCFG_PIA6821_ADD("pia1", pia1_intf) |
| 372 | 391 | MCFG_PIA6821_ADD("pia2", pia2_intf) |
| 373 | 392 | MCFG_PIA6821_ADD("pia3", pia3_intf) |
| 374 | | MCFG_PIA6821_ADD("pia4", pia4_intf) |
| 375 | 393 | MCFG_NVRAM_ADD_1FILL("nvram") |
| 376 | 394 | MACHINE_CONFIG_END |
| 377 | 395 | |
| 396 | static MACHINE_CONFIG_DERIVED( s3a, s3 ) |
| 397 | /* Add the soundcard */ |
| 398 | MCFG_CPU_ADD("audiocpu", M6802, 3580000) |
| 399 | MCFG_CPU_PROGRAM_MAP(s3_audio_map) |
| 400 | MCFG_MACHINE_RESET_OVERRIDE(s3_state, s3a) |
| 401 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 402 | MCFG_SOUND_ADD("dac", DAC, 0) |
| 403 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) |
| 404 | MCFG_PIA6821_ADD("pia4", pia4_intf) |
| 405 | MACHINE_CONFIG_END |
| 406 | |
| 407 | |
| 378 | 408 | /*------------------------------------- |
| 379 | 409 | / Contact - Sys.3 (Game #482) |
| 380 | 410 | /-------------------------------------*/ |
| r18639 | r18640 | |
| 409 | 439 | ROM_LOAD("gamerom.716", 0x6000, 0x0800, CRC(b1d4fd9b) SHA1(e55ecf1328a55979c4cf8f3fb4e6761747e0abc4)) |
| 410 | 440 | ROM_LOAD("white1.716", 0x7000, 0x0800, CRC(9bbbf14f) SHA1(b0542ffdd683fa0ea4a9819576f3789cd5a4b2eb)) |
| 411 | 441 | ROM_LOAD("white2.716", 0x7800, 0x0800, CRC(4d4010dd) SHA1(11221124fef3b7bf82d353d65ce851495f6946a7)) |
| 412 | | |
| 413 | | ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF) |
| 414 | 442 | ROM_END |
| 415 | 443 | |
| 416 | 444 | /*--------------------------------- |
| r18639 | r18640 | |
| 421 | 449 | ROM_LOAD("gamerom.716", 0x6000, 0x0800, CRC(7cfbd4c7) SHA1(825e2245fd1615e932973f5e2b5ed5f2da9309e7)) |
| 422 | 450 | ROM_LOAD("white1.716", 0x7000, 0x0800, CRC(9bbbf14f) SHA1(b0542ffdd683fa0ea4a9819576f3789cd5a4b2eb)) |
| 423 | 451 | ROM_LOAD("white2.716", 0x7800, 0x0800, CRC(4d4010dd) SHA1(11221124fef3b7bf82d353d65ce851495f6946a7)) |
| 424 | | |
| 425 | | ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF) |
| 426 | 452 | ROM_END |
| 427 | 453 | |
| 428 | 454 | /*------------------------------------- |
| r18639 | r18640 | |
| 439 | 465 | ROM_END |
| 440 | 466 | |
| 441 | 467 | |
| 442 | | GAME( 1977, httip_l1, 0, s3, s3, driver_device, 0, ROT0, "Williams", "Hot Tip (L-1)", GAME_MECHANICAL | GAME_NO_SOUND) |
| 443 | | GAME( 1977, lucky_l1, 0, s3, s3, driver_device, 0, ROT0, "Williams", "Lucky Seven (L-1)", GAME_MECHANICAL | GAME_NO_SOUND) |
| 444 | | GAME( 1978, wldcp_l1, 0, s3, s3, driver_device, 0, ROT0, "Williams", "World Cup Soccer (L-1)", GAME_MECHANICAL | GAME_NOT_WORKING) |
| 445 | | GAME( 1978, cntct_l1, 0, s3, s3, driver_device, 0, ROT0, "Williams", "Contact (L-1)", GAME_MECHANICAL) |
| 446 | | GAME( 1978, disco_l1, 0, s3, s3, driver_device, 0, ROT0, "Williams", "Disco Fever (L-1)", GAME_MECHANICAL) |
| 468 | GAME( 1977, httip_l1, 0, s3, s3, driver_device, 0, ROT0, "Williams", "Hot Tip (L-1)", GAME_MECHANICAL ) |
| 469 | GAME( 1977, lucky_l1, 0, s3, s3, driver_device, 0, ROT0, "Williams", "Lucky Seven (L-1)", GAME_MECHANICAL ) |
| 470 | GAME( 1978, wldcp_l1, 0, s3a, s3, driver_device, 0, ROT0, "Williams", "World Cup Soccer (L-1)", GAME_MECHANICAL | GAME_NOT_WORKING) |
| 471 | GAME( 1978, cntct_l1, 0, s3a, s3, driver_device, 0, ROT0, "Williams", "Contact (L-1)", GAME_MECHANICAL) |
| 472 | GAME( 1978, disco_l1, 0, s3a, s3, driver_device, 0, ROT0, "Williams", "Disco Fever (L-1)", GAME_MECHANICAL) |