From 1c09558bcb5c0621f4fc7838f13e5d08d609186e Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Fri, 18 Aug 2023 04:50:02 +1000 Subject: midway/williams.cpp: Added support for Sinistar cockpit sound. New working clones ------------------ Sinistar (revision 2, cockpit) [SynaMax] Sinistar (revision 3, cockpit) [SynaMax] --- src/mame/mame.lst | 2 + src/mame/midway/williams.cpp | 125 +++++++++++++++++++++++++++++++++-------- src/mame/midway/williams.h | 12 ++-- src/mame/midway/williams_m.cpp | 19 ++++++- 4 files changed, 128 insertions(+), 30 deletions(-) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 5e805cf422d..5d1de005f20 100755 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -27511,6 +27511,8 @@ robotron12 // robotrontd // sinistar // (c) 1982 sinistar2 // (c) 1982 +sinistarc // (c) 1982 +sinistarc2 // (c) 1982 sinistarp // (c) 1982 prototype (shown at AMOA 1982 show) spdball // (c) 1985 splat // (c) 1982 diff --git a/src/mame/midway/williams.cpp b/src/mame/midway/williams.cpp index 34f6b56eea6..1bbd9886e61 100644 --- a/src/mame/midway/williams.cpp +++ b/src/mame/midway/williams.cpp @@ -705,7 +705,7 @@ void williams_state::sound_map(address_map &map) } /* Same as above, but for second sound board */ -void blaster_state::sound2_map(address_map &map) +void williams_state::sound2_map(address_map &map) { map(0x0000, 0x007f).ram(); // internal RAM map(0x0080, 0x00ff).ram(); // MC6810 RAM @@ -1680,7 +1680,7 @@ void williams_state::lottofun(machine_config &config) TICKET_DISPENSER(config, "ticket", attotime::from_msec(70), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_HIGH); } -void sinistar_state::sinistar(machine_config &config) +void sinistar_state::upright(machine_config &config) { williams_b1(config); m_blitter_clip_address = 0x7400; @@ -1695,6 +1695,33 @@ void sinistar_state::sinistar(machine_config &config) HC55516(config, "cvsd", 0).add_route(ALL_OUTPUTS, "speaker", 0.8); } +void sinistar_state::cockpit(machine_config &config) +{ + upright(config); + + // basic machine hardware + auto &soundcpu_b(M6808(config, "soundcpu_b", SOUND_CLOCK)); // internal clock divider of 4, effective frequency is 894.886kHz + soundcpu_b.set_addrmap(AS_PROGRAM, &sinistar_state::sound2_map); + + // additional sound hardware + SPEAKER(config, "rspeaker").rear_center(); + MC1408(config, "rdac").add_route(ALL_OUTPUTS, "rspeaker", 0.25); // unknown DAC + + // uncomment this to route front/rear to left/right + //subdevice("speaker")->front_left(); + //subdevice("rspeaker")->front_right(); + + // pia + INPUT_MERGER_ANY_HIGH(config, "soundirq_b").output_handler().set_inputline("soundcpu_b", M6808_IRQ_LINE); + + m_pia[1]->writepb_handler().set(FUNC(sinistar_state::cockpit_snd_cmd_w)); + + PIA6821(config, m_pia[3], 0); + m_pia[3]->writepa_handler().set("rdac", FUNC(dac_byte_interface::data_w)); + m_pia[3]->irqa_handler().set("soundirq_b", FUNC(input_merger_any_high_device::in_w<0>)); + m_pia[3]->irqb_handler().set("soundirq_b", FUNC(input_merger_any_high_device::in_w<1>)); +} + void playball_state::playball(machine_config &config) { williams_b1(config); @@ -1734,8 +1761,8 @@ void blaster_state::blaster(machine_config &config) blastkit(config); // basic machine hardware - M6808(config, m_soundcpu_b, SOUND_CLOCK); // internal clock divider of 4, effective frequency is 894.886kHz - m_soundcpu_b->set_addrmap(AS_PROGRAM, &blaster_state::sound2_map); + auto &soundcpu_b(M6808(config, "soundcpu_b", SOUND_CLOCK)); // internal clock divider of 4, effective frequency is 894.886kHz + soundcpu_b.set_addrmap(AS_PROGRAM, &blaster_state::sound2_map); // pia m_pia[0]->readpb_handler().set("mux_b", FUNC(ls157_device::output_r)).mask(0x0f); @@ -1751,7 +1778,7 @@ void blaster_state::blaster(machine_config &config) m_muxb->a_in_callback().set_ioport("INP1"); m_muxb->b_in_callback().set_ioport("INP2"); - INPUT_MERGER_ANY_HIGH(config, "soundirq_b").output_handler().set_inputline(m_soundcpu_b, M6808_IRQ_LINE); + INPUT_MERGER_ANY_HIGH(config, "soundirq_b").output_handler().set_inputline("soundcpu_b", M6808_IRQ_LINE); m_pia[1]->writepb_handler().set(FUNC(blaster_state::blaster_snd_cmd_w)); m_pia[2]->writepa_handler().set("ldac", FUNC(dac_byte_interface::data_w)); @@ -3131,6 +3158,14 @@ There is known to be a "perfect" version of Sinistar, that being the original ve dev team. The dev team thought this version had the best game play while Williams decided it was too easy (IE: it could be played too long on one quarter) +Sinistar's cockpit cabinet features two sound boards, one for the front speakers and another for the rear. The rear + sound board uses a different ROM, Video Sound ROM 10. It adds a slight delay to some of the sound effects, + producing a reverberation effect, and ignores the extra ship and bounce effects. It has no speech ROMs. + +If you disconnect the speech ROMs from the upright sound board, Video Sound ROM 9 will play two replacement sound + effects for the Sinistar's missing audio. Any line of dialogue will be replaced by a generic alarm noise, + while the Sinistar roar is replaced by a loud square wave synth noise that attempts to emulate the "sini-scream". + Video Sound Rom 10 disables this functionality so that it doesn't play placeholder sounds in place of speech. */ ROM_START( sinistar ) // rev. 3 ROM_REGION( 0x19000, "maincpu", 0 ) // solid RED labels with final production part numbers @@ -3153,14 +3188,34 @@ ROM_START( sinistar ) // rev. 3 ROM_LOAD( "3004_speech_ic4_r1_16-3004-49.ic4", 0xe000, 0x1000, CRC(4b56a626) SHA1(44430cd5c110ec751b0bfb8ae99b26d443350db1) ) ROM_LOAD( "video_sound_rom_9_std.808.ic12", 0xf000, 0x1000, CRC(b82f4ddb) SHA1(c70c7dd6e88897920d7709a260f27810f66aade1) ) -/* - ROM_REGION( 0x10000, "soundcpu_b", 0 ) // Stereo sound requires 2nd sound board as used in the cockpit version - ROM_LOAD( "3004_speech_ic7_r1_16-3004-52.ic7", 0xb000, 0x1000, CRC(e1019568) SHA1(442f4f3ccd2e1db2136d2ffb121ea442921f87ca) ) - ROM_LOAD( "3004_speech_ic5_r1_16-3004-50.ic5", 0xc000, 0x1000, CRC(cf3b5ffd) SHA1(d5d51c550581c9d46ab331dd4fd32541a2ef598e) ) - ROM_LOAD( "3004_speech_ic6_r1_16-3004-51.ic6", 0xd000, 0x1000, CRC(ff8d2645) SHA1(16fa2a602acbbc182dd96bab113ab18356f3daf0) ) - ROM_LOAD( "3004_speech_ic4_r1_16-3004-49.ic4", 0xe000, 0x1000, CRC(4b56a626) SHA1(44430cd5c110ec751b0bfb8ae99b26d443350db1) ) - ROM_LOAD( "video_sound_rom_10_std.ic12", 0xf000, 0x1000, CRC(b5c70082) SHA1(643af087b57da3a71c68372c79c5777e0c1fbef7) ) // not sure if all speech ROMs need to be here too -*/ + ROM_REGION( 0x0400, "proms", 0 ) + ROM_LOAD( "decoder_rom_4.3g", 0x0000, 0x0200, CRC(e6631c23) SHA1(9988723269367fb44ef83f627186a1c88cf7877e) ) // Universal Horizontal decoder ROM - 7641-5 BPROM - P/N A-5342-09694 + ROM_LOAD( "decoder_rom_6.3c", 0x0200, 0x0200, CRC(83faf25e) SHA1(30002643d08ed983a6701a7c4b5ee74a2f4a1adb) ) // Universal Vertical decoder ROM - 7641-5 BPROM - P/N A-5342-09821 +ROM_END + +ROM_START( sinistarc ) // rev. 3 + ROM_REGION( 0x19000, "maincpu", 0 ) // solid RED labels with final production part numbers + ROM_LOAD( "sinistar_rom_10-b_16-3004-62.4c", 0x0e000, 0x1000, CRC(3d670417) SHA1(81802622bee8dbea5c0f08019d87d941dcdbe292) ) + ROM_LOAD( "sinistar_rom_11-b_16-3004-63.4a", 0x0f000, 0x1000, CRC(3162bc50) SHA1(2f38e572ab9c731e38dfe9bad3cc8222a775c5ea) ) + ROM_LOAD( "sinistar_rom_1-b_16-3004-53.1d", 0x10000, 0x1000, CRC(f6f3a22c) SHA1(026d8cab07734fa294a5645edbe65a904bcbc302) ) + ROM_LOAD( "sinistar_rom_2-b_16-3004-54.1c", 0x11000, 0x1000, CRC(cab3185c) SHA1(423d1e3b0c07333ec582529bc4d0b7baf591820a) ) + ROM_LOAD( "sinistar_rom_3-b_16-3004-55.1a", 0x12000, 0x1000, CRC(1ce1b3cc) SHA1(5bc03d7249529d827dc60c087e074ab3e4ea7361) ) + ROM_LOAD( "sinistar_rom_4-b_16-3004-56.2d", 0x13000, 0x1000, CRC(6da632ba) SHA1(72c0c3d5a5ca87ca4d95fcedaf834206e4633950) ) + ROM_LOAD( "sinistar_rom_5-b_16-3004-57.2c", 0x14000, 0x1000, CRC(b662e8fc) SHA1(828a89d2ea13d8a362dae708f86bff54cb231887) ) + ROM_LOAD( "sinistar_rom_6-b_16-3004-58.2a", 0x15000, 0x1000, CRC(2306183d) SHA1(703e29e6446856615760a4897c0f5d79cc7bdfb2) ) + ROM_LOAD( "sinistar_rom_7-b_16-3004-59.3d", 0x16000, 0x1000, CRC(e5dd918e) SHA1(bf4e2ada6a59d246218544d822ba5355da925924) ) + ROM_LOAD( "sinistar_rom_8-b_16-3004-60.3c", 0x17000, 0x1000, CRC(4785a787) SHA1(8c7eca656b2c23b0da41a8c7ce51a2735cab85a4) ) + ROM_LOAD( "sinistar_rom_9-b_16-3004-61.3a", 0x18000, 0x1000, CRC(50cb63ad) SHA1(96e28e4fef98fff2649741a266fa590e0313e3b0) ) + + ROM_REGION( 0x10000, "soundcpu", 0 ) + ROM_LOAD( "3004_speech_ic7_r1_16-3004-52.ic7", 0xb000, 0x1000, CRC(e1019568) SHA1(442f4f3ccd2e1db2136d2ffb121ea442921f87ca) ) + ROM_LOAD( "3004_speech_ic5_r1_16-3004-50.ic5", 0xc000, 0x1000, CRC(cf3b5ffd) SHA1(d5d51c550581c9d46ab331dd4fd32541a2ef598e) ) + ROM_LOAD( "3004_speech_ic6_r1_16-3004-51.ic6", 0xd000, 0x1000, CRC(ff8d2645) SHA1(16fa2a602acbbc182dd96bab113ab18356f3daf0) ) + ROM_LOAD( "3004_speech_ic4_r1_16-3004-49.ic4", 0xe000, 0x1000, CRC(4b56a626) SHA1(44430cd5c110ec751b0bfb8ae99b26d443350db1) ) + ROM_LOAD( "video_sound_rom_9_std.808.ic12", 0xf000, 0x1000, CRC(b82f4ddb) SHA1(c70c7dd6e88897920d7709a260f27810f66aade1) ) + + ROM_REGION( 0x10000, "soundcpu_b", 0 ) // Stereo sound requires 2nd sound board as used in the cockpit version + ROM_LOAD( "video_sound_rom_10_std.ic12", 0xf000, 0x1000, CRC(b5c70082) SHA1(643af087b57da3a71c68372c79c5777e0c1fbef7) ) // no speech board is connected ROM_REGION( 0x0400, "proms", 0 ) ROM_LOAD( "decoder_rom_4.3g", 0x0000, 0x0200, CRC(e6631c23) SHA1(9988723269367fb44ef83f627186a1c88cf7877e) ) // Universal Horizontal decoder ROM - 7641-5 BPROM - P/N A-5342-09694 @@ -3188,14 +3243,34 @@ ROM_START( sinistar2 ) // rev. 2 ROM_LOAD( "3004_speech_ic4_r1_16-3004-49.ic4", 0xe000, 0x1000, CRC(4b56a626) SHA1(44430cd5c110ec751b0bfb8ae99b26d443350db1) ) ROM_LOAD( "video_sound_rom_9_std.808.ic12", 0xf000, 0x1000, CRC(b82f4ddb) SHA1(c70c7dd6e88897920d7709a260f27810f66aade1) ) -/* - ROM_REGION( 0x10000, "soundcpu_b", 0 ) // Stereo sound requires 2nd sound board as used in the cockpit version - ROM_LOAD( "3004_speech_ic7_r1_16-3004-52.ic7", 0xb000, 0x1000, CRC(e1019568) SHA1(442f4f3ccd2e1db2136d2ffb121ea442921f87ca) ) - ROM_LOAD( "3004_speech_ic5_r1_16-3004-50.ic5", 0xc000, 0x1000, CRC(cf3b5ffd) SHA1(d5d51c550581c9d46ab331dd4fd32541a2ef598e) ) - ROM_LOAD( "3004_speech_ic6_r1_16-3004-51.ic6", 0xd000, 0x1000, CRC(ff8d2645) SHA1(16fa2a602acbbc182dd96bab113ab18356f3daf0) ) - ROM_LOAD( "3004_speech_ic4_r1_16-3004-49.ic4", 0xe000, 0x1000, CRC(4b56a626) SHA1(44430cd5c110ec751b0bfb8ae99b26d443350db1) ) - ROM_LOAD( "video_sound_rom_10_std.ic12", 0xf000, 0x1000, CRC(b5c70082) SHA1(643af087b57da3a71c68372c79c5777e0c1fbef7) ) // not sure if all speech ROMs need to be here too -*/ + ROM_REGION( 0x0400, "proms", 0 ) + ROM_LOAD( "decoder_rom_4.3g", 0x0000, 0x0200, CRC(e6631c23) SHA1(9988723269367fb44ef83f627186a1c88cf7877e) ) // Universal Horizontal decoder ROM - 7641-5 BPROM - P/N A-5342-09694 + ROM_LOAD( "decoder_rom_6.3c", 0x0200, 0x0200, CRC(83faf25e) SHA1(30002643d08ed983a6701a7c4b5ee74a2f4a1adb) ) // Universal Vertical decoder ROM - 7641-5 BPROM - P/N A-5342-09821 +ROM_END + +ROM_START( sinistarc2 ) // rev. 2 + ROM_REGION( 0x19000, "maincpu", 0 ) // solid RED labels with final production part numbers + ROM_LOAD( "sinistar_rom_10-b_16-3004-47.4c", 0x0e000, 0x1000, CRC(3d670417) SHA1(81802622bee8dbea5c0f08019d87d941dcdbe292) ) // == rev. 3 PN 16-3004-62 + ROM_LOAD( "sinistar_rom_11-b_16-3004-48.4a", 0x0f000, 0x1000, CRC(792c8b00) SHA1(1f847ca8a67595927c36d69cead02813c2431c7b) ) // unique to rev. 2 + ROM_LOAD( "sinistar_rom_1-b_16-3004-38.1d", 0x10000, 0x1000, CRC(f6f3a22c) SHA1(026d8cab07734fa294a5645edbe65a904bcbc302) ) // == rev. 3 PN 16-3004-53 + ROM_LOAD( "sinistar_rom_2-b_16-3004-39.1c", 0x11000, 0x1000, CRC(cab3185c) SHA1(423d1e3b0c07333ec582529bc4d0b7baf591820a) ) // == rev. 3 PN 16-3004-54 + ROM_LOAD( "sinistar_rom_3-b_16-3004-40.1a", 0x12000, 0x1000, CRC(1ce1b3cc) SHA1(5bc03d7249529d827dc60c087e074ab3e4ea7361) ) // == rev. 3 PN 16-3004-55 + ROM_LOAD( "sinistar_rom_4-b_16-3004-41.2d", 0x13000, 0x1000, CRC(6da632ba) SHA1(72c0c3d5a5ca87ca4d95fcedaf834206e4633950) ) // == rev. 3 PN 16-3004-56 + ROM_LOAD( "sinistar_rom_5-b_16-3004-42.2c", 0x14000, 0x1000, CRC(b662e8fc) SHA1(828a89d2ea13d8a362dae708f86bff54cb231887) ) // == rev. 3 PN 16-3004-57 + ROM_LOAD( "sinistar_rom_6-b_16-3004-43.2a", 0x15000, 0x1000, CRC(2306183d) SHA1(703e29e6446856615760a4897c0f5d79cc7bdfb2) ) // == rev. 3 PN 16-3004-57 + ROM_LOAD( "sinistar_rom_7-b_16-3004-44.3d", 0x16000, 0x1000, CRC(e5dd918e) SHA1(bf4e2ada6a59d246218544d822ba5355da925924) ) // == rev. 3 PN 16-3004-59 + ROM_LOAD( "sinistar_rom_8-b_16-3004-45.3c", 0x17000, 0x1000, CRC(d7ecee45) SHA1(f9552035409bce0a36ed93a677b28f8cd361f8f1) ) // unique to rev. 2 + ROM_LOAD( "sinistar_rom_9-b_16-3004-46.3a", 0x18000, 0x1000, CRC(50cb63ad) SHA1(96e28e4fef98fff2649741a266fa590e0313e3b0) ) // == rev. 3 PN 16-3004-61 + + ROM_REGION( 0x10000, "soundcpu", 0 ) + ROM_LOAD( "3004_speech_ic7_r1_16-3004-52.ic7", 0xb000, 0x1000, CRC(e1019568) SHA1(442f4f3ccd2e1db2136d2ffb121ea442921f87ca) ) + ROM_LOAD( "3004_speech_ic5_r1_16-3004-50.ic5", 0xc000, 0x1000, CRC(cf3b5ffd) SHA1(d5d51c550581c9d46ab331dd4fd32541a2ef598e) ) + ROM_LOAD( "3004_speech_ic6_r1_16-3004-51.ic6", 0xd000, 0x1000, CRC(ff8d2645) SHA1(16fa2a602acbbc182dd96bab113ab18356f3daf0) ) + ROM_LOAD( "3004_speech_ic4_r1_16-3004-49.ic4", 0xe000, 0x1000, CRC(4b56a626) SHA1(44430cd5c110ec751b0bfb8ae99b26d443350db1) ) + ROM_LOAD( "video_sound_rom_9_std.808.ic12", 0xf000, 0x1000, CRC(b82f4ddb) SHA1(c70c7dd6e88897920d7709a260f27810f66aade1) ) + + ROM_REGION( 0x10000, "soundcpu_b", 0 ) // Stereo sound requires 2nd sound board as used in the cockpit version + ROM_LOAD( "video_sound_rom_10_std.ic12", 0xf000, 0x1000, CRC(b5c70082) SHA1(643af087b57da3a71c68372c79c5777e0c1fbef7) ) // no speech board is connected ROM_REGION( 0x0400, "proms", 0 ) ROM_LOAD( "decoder_rom_4.3g", 0x0000, 0x0200, CRC(e6631c23) SHA1(9988723269367fb44ef83f627186a1c88cf7877e) ) // Universal Horizontal decoder ROM - 7641-5 BPROM - P/N A-5342-09694 @@ -3784,9 +3859,11 @@ GAME( 1982, bubblesp, bubbles, williams_b1, bubbles, bubbles_state, emp GAME( 1982, splat, 0, splat, splat, wms_muxed_state, empty_init, ROT0, "Williams", "Splat!", MACHINE_SUPPORTS_SAVE ) -GAME( 1982, sinistar, 0, sinistar, sinistar, sinistar_state, empty_init, ROT270, "Williams", "Sinistar (revision 3)", MACHINE_SUPPORTS_SAVE ) -GAME( 1982, sinistar2, sinistar, sinistar, sinistar, sinistar_state, empty_init, ROT270, "Williams", "Sinistar (revision 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1982, sinistarp, sinistar, sinistar, sinistar, sinistar_state, empty_init, ROT270, "Williams", "Sinistar (AMOA-82 prototype)", MACHINE_SUPPORTS_SAVE ) +GAME( 1982, sinistar, 0, upright, sinistar, sinistar_state, empty_init, ROT270, "Williams", "Sinistar (revision 3, upright)", MACHINE_SUPPORTS_SAVE ) +GAME( 1982, sinistarc, sinistar, cockpit, sinistar, sinistar_state, empty_init, ROT270, "Williams", "Sinistar (revision 3, cockpit)", MACHINE_SUPPORTS_SAVE ) +GAME( 1982, sinistar2, sinistar, upright, sinistar, sinistar_state, empty_init, ROT270, "Williams", "Sinistar (revision 2, upright)", MACHINE_SUPPORTS_SAVE ) +GAME( 1982, sinistarc2, sinistar, cockpit, sinistar, sinistar_state, empty_init, ROT270, "Williams", "Sinistar (revision 2, cockpit)", MACHINE_SUPPORTS_SAVE ) +GAME( 1982, sinistarp, sinistar, upright, sinistar, sinistar_state, empty_init, ROT270, "Williams", "Sinistar (AMOA-82 prototype)", MACHINE_SUPPORTS_SAVE ) GAME( 1983, playball, 0, playball, playball, playball_state, empty_init, ROT270, "Williams", "PlayBall! (prototype)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/midway/williams.h b/src/mame/midway/williams.h index 2e61b97fe9f..8d949ea3747 100644 --- a/src/mame/midway/williams.h +++ b/src/mame/midway/williams.h @@ -120,8 +120,9 @@ protected: optional_shared_ptr m_paletteram; optional_device_array m_pia; - virtual void sound_map(address_map &map); virtual void main_map(address_map &map); + virtual void sound_map(address_map &map); + void sound2_map(address_map &map); // for Blaster and Sinistar cockpit }; // Defender @@ -176,11 +177,15 @@ public: williams_state(mconfig, type, tag) { } - void sinistar(machine_config &config); + void upright(machine_config &config); + void cockpit(machine_config &config); private: virtual void vram_select_w(u8 data) override; virtual void main_map(address_map &map) override; + + TIMER_CALLBACK_MEMBER(cockpit_deferred_snd_cmd_w); + void cockpit_snd_cmd_w(u8 data); }; // Playball: more soundlatch bits @@ -267,7 +272,6 @@ class blaster_state : public williams_state public: blaster_state(const machine_config &mconfig, device_type type, const char *tag) : williams_state(mconfig, type, tag), - m_soundcpu_b(*this, "soundcpu_b"), m_bankb(*this, "blaster_bankb"), m_muxa(*this, "mux_a"), m_muxb(*this, "mux_b") @@ -280,7 +284,6 @@ private: virtual void machine_start() override; virtual void video_start() override; - optional_device m_soundcpu_b; optional_memory_bank m_bankb; required_device m_muxa; optional_device m_muxb; @@ -302,7 +305,6 @@ private: inline void update_blaster_banking(); virtual void main_map(address_map &map) override; - void sound2_map(address_map &map); }; // base Williams 2nd gen hardware diff --git a/src/mame/midway/williams_m.cpp b/src/mame/midway/williams_m.cpp index a28a0f4cabd..6582a504250 100644 --- a/src/mame/midway/williams_m.cpp +++ b/src/mame/midway/williams_m.cpp @@ -359,6 +359,23 @@ void sinistar_state::vram_select_w(u8 data) } +TIMER_CALLBACK_MEMBER(sinistar_state::cockpit_deferred_snd_cmd_w) +{ + m_pia[2]->portb_w(param); + m_pia[2]->cb1_w((param == 0xff) ? 0 : 1); + + m_pia[3]->portb_w(param); + m_pia[3]->cb1_w((param == 0xff) ? 0 : 1); +} + + +void sinistar_state::cockpit_snd_cmd_w(u8 data) +{ + /* the high two bits are set externally, and should be 1 */ + machine().scheduler().synchronize(timer_expired_delegate(FUNC(sinistar_state::cockpit_deferred_snd_cmd_w), this), data | 0xc0); +} + + /************************************* * @@ -424,7 +441,7 @@ TIMER_CALLBACK_MEMBER(blaster_state::deferred_snd_cmd_w) void blaster_state::blaster_snd_cmd_w(u8 data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(blaster_state::deferred_snd_cmd_w),this), data); + machine().scheduler().synchronize(timer_expired_delegate(FUNC(blaster_state::deferred_snd_cmd_w), this), data); } -- cgit v1.2.3