From 0636e54bb60192652efeeeb7732103b9134a31eb Mon Sep 17 00:00:00 2001 From: hap Date: Mon, 12 Feb 2024 01:12:13 +0100 Subject: companion2: update notes about concord, microvsn: get rid of timer device --- src/mame/miltonbradley/microvsn.cpp | 25 +++++++++++++------------ src/mame/saitek/companion2.cpp | 13 ++++++------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/mame/miltonbradley/microvsn.cpp b/src/mame/miltonbradley/microvsn.cpp index 4f97a4dbc2c..4a935bba780 100644 --- a/src/mame/miltonbradley/microvsn.cpp +++ b/src/mame/miltonbradley/microvsn.cpp @@ -33,7 +33,6 @@ TODO: #include "bus/generic/slot.h" #include "cpu/mcs48/mcs48.h" #include "cpu/tms1000/tms1100.h" -#include "machine/timer.h" #include "sound/dac.h" #include "video/hlcd0488.h" #include "video/pwm.h" @@ -59,7 +58,6 @@ public: m_lcd_pwm(*this, "lcd_pwm"), m_dac( *this, "dac" ), m_cart(*this, "cartslot"), - m_paddle_timer(*this, "paddle_timer"), m_inputs(*this, "COL%u", 0), m_paddle(*this, "PADDLE"), m_conf(*this, "CONF") @@ -81,7 +79,6 @@ private: required_device m_lcd_pwm; required_device m_dac; required_device m_cart; - required_device m_paddle_timer; required_ioport_array<3> m_inputs; required_ioport m_paddle; required_ioport m_conf; @@ -95,6 +92,7 @@ private: u16 m_button_mask = 0; bool m_paddle_auto = false; bool m_paddle_on = false; + attotime m_paddle_delay; uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); void lcd_output_w(offs_t offset, u16 data) { m_lcd_pwm->matrix(offset, data); } @@ -120,6 +118,7 @@ private: void microvision_state::machine_start() { // register for savestates + save_item(NAME(m_paddle_delay)); save_item(NAME(m_r)); save_item(NAME(m_p0)); save_item(NAME(m_p2)); @@ -297,8 +296,8 @@ u8 microvision_state::tms1100_k_r() data |= m_inputs[i]->read() & (m_button_mask >> (i * 4) & 0xf); // K8: paddle capacitor - if (m_paddle_on) - data |= (m_paddle_timer->enabled() ? 0 : BIT(m_r, 2)) << 3; + if (m_paddle_on && m_paddle_delay < machine().time()) + data |= BIT(m_r, 2) << 3; return data; } @@ -316,7 +315,7 @@ void microvision_state::tms1100_r_w(u32 data) { // note that the games don't use the whole range, so there's a deadzone around the edges const float step = (2000 - 500) / 255.0f; // approximation - m_paddle_timer->adjust(attotime::from_usec(500 + m_paddle->read() * step)); + m_paddle_delay = machine().time() + attotime::from_usec(500 + m_paddle->read() * step); } // R0: speaker lead 2 @@ -383,7 +382,7 @@ void microvision_state::i8021_p2_w(u8 data) if (m_p2 & 0xc && (data & 0xc) == 0 && m_paddle_on) { const float step = (1000 - 10) / 255.0f; // approximation - m_paddle_timer->adjust(attotime::from_usec(10 + (m_paddle->read() ^ 0xff) * step)); + m_paddle_delay = machine().time() + attotime::from_usec(10 + (m_paddle->read() ^ 0xff) * step); } m_p2 = data; @@ -392,9 +391,13 @@ void microvision_state::i8021_p2_w(u8 data) int microvision_state::i8021_t1_r() { // T1: paddle capacitor (active low) - int active = (m_p2 & 0xc) ? 1 : 0; - active |= m_paddle_timer->enabled() ? 1 : 0; - return (m_paddle_on) ? active : 1; + if (m_paddle_on) + { + bool active = (m_p2 & 0xc) || m_paddle_delay > machine().time(); + return active ? 1 : 0; + } + else + return 1; } @@ -462,8 +465,6 @@ void microvision_state::microvision(machine_config &config) m_i8021->p2_out_cb().set(FUNC(microvision_state::i8021_p2_w)); m_i8021->t1_in_cb().set(FUNC(microvision_state::i8021_t1_r)); - TIMER(config, "paddle_timer").configure_generic(nullptr); - // video hardware HLCD0488(config, m_lcd); m_lcd->write_cols().set(FUNC(microvision_state::lcd_output_w)); diff --git a/src/mame/saitek/companion2.cpp b/src/mame/saitek/companion2.cpp index ecd6e2c8789..4214b11cb80 100644 --- a/src/mame/saitek/companion2.cpp +++ b/src/mame/saitek/companion2.cpp @@ -13,8 +13,6 @@ If this is not done, NVRAM won't save properly. TODO: - if/when MAME supports an exit callback, hook up power-off switch to that -- verify Concord II MCU speed, the only videos online (for hearing sound pitch) - are from the Tandy 1650 ones ******************************************************************************** @@ -30,9 +28,10 @@ Explorer Chess: - portable, peg board instead of button board - rest is same as compan2 -Concord II: +Concord / Concord II: - PCB label: SCISYS ST3 REV.E -- MCU clock frequency is around twice higher than Concord, again no XTAL +- MCU clock frequency is around twice higher than Companion II (measured ~7.32MHz + on a Concord model 251, again no XTAL) - rest is same as compan2, it just has the buttons/status leds at the bottom instead of at the right @@ -47,7 +46,7 @@ is either VCC or GND to distinguish between the two. - SciSys Concord II - SciSys Electronic Chess Mark 8 - Tandy 1650 Portable Sensory Chess (Tandy brand Explorer Chess) -- Tandy 1650 (Fast Response Time) Computerized Chess (Tandy brand Concord II) +- Tandy 1650 (Fast Response Time) Computerized Chess (Tandy brand Concord) The Tandy clones run at a lower clock frequency, 3MHz and 6MHz respectively. @@ -147,7 +146,7 @@ void compan2_state::machine_start() INPUT_CHANGED_MEMBER(compan2_state::change_cpu_freq) { - // Concord II MCU speed is around twice higher + // Concord MCU speed is around twice higher m_maincpu->set_unscaled_clock((newval & 1) ? 7'200'000 : 4'000'000); } @@ -329,7 +328,7 @@ static INPUT_PORTS_START( compan2 ) PORT_START("CPU") PORT_CONFNAME( 0x01, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, compan2_state, change_cpu_freq, 0) // factory set PORT_CONFSETTING( 0x00, "4MHz (original)" ) - PORT_CONFSETTING( 0x01, "7.2MHz (Concord II)" ) + PORT_CONFSETTING( 0x01, "7.2MHz (Concord)" ) INPUT_PORTS_END -- cgit v1.2.3