mirror of
https://github.com/holub/mame
synced 2025-06-25 22:04:15 +03:00
companion2: update notes about concord,
microvsn: get rid of timer device
This commit is contained in:
parent
9ef7ed7a49
commit
0636e54bb6
@ -33,7 +33,6 @@ TODO:
|
|||||||
#include "bus/generic/slot.h"
|
#include "bus/generic/slot.h"
|
||||||
#include "cpu/mcs48/mcs48.h"
|
#include "cpu/mcs48/mcs48.h"
|
||||||
#include "cpu/tms1000/tms1100.h"
|
#include "cpu/tms1000/tms1100.h"
|
||||||
#include "machine/timer.h"
|
|
||||||
#include "sound/dac.h"
|
#include "sound/dac.h"
|
||||||
#include "video/hlcd0488.h"
|
#include "video/hlcd0488.h"
|
||||||
#include "video/pwm.h"
|
#include "video/pwm.h"
|
||||||
@ -59,7 +58,6 @@ public:
|
|||||||
m_lcd_pwm(*this, "lcd_pwm"),
|
m_lcd_pwm(*this, "lcd_pwm"),
|
||||||
m_dac( *this, "dac" ),
|
m_dac( *this, "dac" ),
|
||||||
m_cart(*this, "cartslot"),
|
m_cart(*this, "cartslot"),
|
||||||
m_paddle_timer(*this, "paddle_timer"),
|
|
||||||
m_inputs(*this, "COL%u", 0),
|
m_inputs(*this, "COL%u", 0),
|
||||||
m_paddle(*this, "PADDLE"),
|
m_paddle(*this, "PADDLE"),
|
||||||
m_conf(*this, "CONF")
|
m_conf(*this, "CONF")
|
||||||
@ -81,7 +79,6 @@ private:
|
|||||||
required_device<pwm_display_device> m_lcd_pwm;
|
required_device<pwm_display_device> m_lcd_pwm;
|
||||||
required_device<dac_byte_interface> m_dac;
|
required_device<dac_byte_interface> m_dac;
|
||||||
required_device<generic_slot_device> m_cart;
|
required_device<generic_slot_device> m_cart;
|
||||||
required_device<timer_device> m_paddle_timer;
|
|
||||||
required_ioport_array<3> m_inputs;
|
required_ioport_array<3> m_inputs;
|
||||||
required_ioport m_paddle;
|
required_ioport m_paddle;
|
||||||
required_ioport m_conf;
|
required_ioport m_conf;
|
||||||
@ -95,6 +92,7 @@ private:
|
|||||||
u16 m_button_mask = 0;
|
u16 m_button_mask = 0;
|
||||||
bool m_paddle_auto = false;
|
bool m_paddle_auto = false;
|
||||||
bool m_paddle_on = false;
|
bool m_paddle_on = false;
|
||||||
|
attotime m_paddle_delay;
|
||||||
|
|
||||||
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
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); }
|
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()
|
void microvision_state::machine_start()
|
||||||
{
|
{
|
||||||
// register for savestates
|
// register for savestates
|
||||||
|
save_item(NAME(m_paddle_delay));
|
||||||
save_item(NAME(m_r));
|
save_item(NAME(m_r));
|
||||||
save_item(NAME(m_p0));
|
save_item(NAME(m_p0));
|
||||||
save_item(NAME(m_p2));
|
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);
|
data |= m_inputs[i]->read() & (m_button_mask >> (i * 4) & 0xf);
|
||||||
|
|
||||||
// K8: paddle capacitor
|
// K8: paddle capacitor
|
||||||
if (m_paddle_on)
|
if (m_paddle_on && m_paddle_delay < machine().time())
|
||||||
data |= (m_paddle_timer->enabled() ? 0 : BIT(m_r, 2)) << 3;
|
data |= BIT(m_r, 2) << 3;
|
||||||
|
|
||||||
return data;
|
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
|
// 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
|
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
|
// 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)
|
if (m_p2 & 0xc && (data & 0xc) == 0 && m_paddle_on)
|
||||||
{
|
{
|
||||||
const float step = (1000 - 10) / 255.0f; // approximation
|
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;
|
m_p2 = data;
|
||||||
@ -392,9 +391,13 @@ void microvision_state::i8021_p2_w(u8 data)
|
|||||||
int microvision_state::i8021_t1_r()
|
int microvision_state::i8021_t1_r()
|
||||||
{
|
{
|
||||||
// T1: paddle capacitor (active low)
|
// T1: paddle capacitor (active low)
|
||||||
int active = (m_p2 & 0xc) ? 1 : 0;
|
if (m_paddle_on)
|
||||||
active |= m_paddle_timer->enabled() ? 1 : 0;
|
{
|
||||||
return (m_paddle_on) ? active : 1;
|
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->p2_out_cb().set(FUNC(microvision_state::i8021_p2_w));
|
||||||
m_i8021->t1_in_cb().set(FUNC(microvision_state::i8021_t1_r));
|
m_i8021->t1_in_cb().set(FUNC(microvision_state::i8021_t1_r));
|
||||||
|
|
||||||
TIMER(config, "paddle_timer").configure_generic(nullptr);
|
|
||||||
|
|
||||||
// video hardware
|
// video hardware
|
||||||
HLCD0488(config, m_lcd);
|
HLCD0488(config, m_lcd);
|
||||||
m_lcd->write_cols().set(FUNC(microvision_state::lcd_output_w));
|
m_lcd->write_cols().set(FUNC(microvision_state::lcd_output_w));
|
||||||
|
@ -13,8 +13,6 @@ If this is not done, NVRAM won't save properly.
|
|||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
- if/when MAME supports an exit callback, hook up power-off switch to that
|
- 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
|
- portable, peg board instead of button board
|
||||||
- rest is same as compan2
|
- rest is same as compan2
|
||||||
|
|
||||||
Concord II:
|
Concord / Concord II:
|
||||||
- PCB label: SCISYS ST3 REV.E
|
- 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
|
- rest is same as compan2, it just has the buttons/status leds at the bottom
|
||||||
instead of at the right
|
instead of at the right
|
||||||
|
|
||||||
@ -47,7 +46,7 @@ is either VCC or GND to distinguish between the two.
|
|||||||
- SciSys Concord II
|
- SciSys Concord II
|
||||||
- SciSys Electronic Chess Mark 8
|
- SciSys Electronic Chess Mark 8
|
||||||
- Tandy 1650 Portable Sensory Chess (Tandy brand Explorer Chess)
|
- 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.
|
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)
|
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);
|
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_START("CPU")
|
||||||
PORT_CONFNAME( 0x01, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, compan2_state, change_cpu_freq, 0) // factory set
|
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( 0x00, "4MHz (original)" )
|
||||||
PORT_CONFSETTING( 0x01, "7.2MHz (Concord II)" )
|
PORT_CONFSETTING( 0x01, "7.2MHz (Concord)" )
|
||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user