companion2: update notes about concord,

microvsn: get rid of timer device
This commit is contained in:
hap 2024-02-12 01:12:13 +01:00
parent 9ef7ed7a49
commit 0636e54bb6
2 changed files with 19 additions and 19 deletions

View File

@ -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<pwm_display_device> m_lcd_pwm;
required_device<dac_byte_interface> m_dac;
required_device<generic_slot_device> m_cart;
required_device<timer_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));

View File

@ -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