From c2c4a2dd13a01decc087f6762e146a599bed0e1a Mon Sep 17 00:00:00 2001 From: Andrew Green Date: Sat, 23 Jul 2022 10:43:28 -0500 Subject: [PATCH] vectrex: Pass the new value with the timer param, so it ends up in the y integrator. (#10074) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Param now holds a value and a destination, so that we write the value that existed at send time, rather than whatever's in PORTA when receipt occurs. Fixes 45° vectors in Thrust and Moon Lander (and presumably others). --- src/mame/miltonbradley/vectrex_m.cpp | 5 ++++- src/mame/miltonbradley/vectrex_v.cpp | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/mame/miltonbradley/vectrex_m.cpp b/src/mame/miltonbradley/vectrex_m.cpp index 46206429a72..346424aa7a2 100644 --- a/src/mame/miltonbradley/vectrex_m.cpp +++ b/src/mame/miltonbradley/vectrex_m.cpp @@ -49,7 +49,10 @@ static const double unknown_game_angles[3] = {0,0.16666666, 0.33333333}; TIMER_CALLBACK_MEMBER(vectrex_base_state::update_analog) { update_vector(); - m_analog[param] = m_via_out[PORTA]; + if (param & 0x100) + m_analog[param & 0xff] = param >> 9; + else + m_analog[param] = m_via_out[PORTA]; } TIMER_CALLBACK_MEMBER(vectrex_base_state::update_blank) diff --git a/src/mame/miltonbradley/vectrex_v.cpp b/src/mame/miltonbradley/vectrex_v.cpp index c4dab8f31ba..dd23c8f8763 100644 --- a/src/mame/miltonbradley/vectrex_v.cpp +++ b/src/mame/miltonbradley/vectrex_v.cpp @@ -275,7 +275,7 @@ void vectrex_state::video_start() void vectrex_base_state::multiplexer(int mux) { - machine().scheduler().timer_set(attotime::from_nsec(ANALOG_DELAY), timer_expired_delegate(FUNC(vectrex_base_state::update_analog), this), mux); + machine().scheduler().timer_set(attotime::from_nsec(ANALOG_DELAY), timer_expired_delegate(FUNC(vectrex_base_state::update_analog), this), m_via_out[PORTA] << 9 | 0x100 | mux); if (mux == A_AUDIO) m_dac->write(m_via_out[PORTA] ^ 0x80); // not gate shown on schematic