(MESS) ensure cassette-save timer is synchronised to cpu.

This commit is contained in:
Robbbert 2014-04-21 11:23:25 +00:00
parent 2f33e6c413
commit 4ff2daf1bf
8 changed files with 57 additions and 1 deletions

View File

@ -85,6 +85,7 @@ public:
private:
UINT8 m_cass_data[4];
bool m_cass_state;
bool m_cassold;
UINT8 m_video_index;
required_device<via6522_device> m_via;
required_device<cassette_image_device> m_cass;
@ -197,6 +198,12 @@ TIMER_DEVICE_CALLBACK_MEMBER(a6809_state::a6809_c)
{
m_cass_data[3]++;
if (m_cass_state != m_cassold)
{
m_cass_data[3] = 0;
m_cassold = m_cass_state;
}
if (m_cass_state)
m_cass->output(BIT(m_cass_data[3], 0) ? -1.0 : +1.0); // 2400Hz
else

View File

@ -78,6 +78,7 @@ private:
UINT8 m_digit;
UINT8 m_cass_data[4];
bool m_cass_state;
bool m_cassold;
};
@ -116,6 +117,12 @@ TIMER_DEVICE_CALLBACK_MEMBER(acrnsys1_state::acrnsys1_c)
{
m_cass_data[3]++;
if (m_cass_state != m_cassold)
{
m_cass_data[3] = 0;
m_cassold = m_cass_state;
}
if (m_cass_state)
m_cass->output(BIT(m_cass_data[3], 0) ? -1.0 : +1.0); // 2400Hz
else

View File

@ -86,6 +86,7 @@ private:
UINT8 m_timer_bit;
UINT8 m_cass_data[4];
bool m_cass_state;
bool m_cassold;
emu_timer* m_sys_timer;
virtual void video_start();
virtual void machine_start();
@ -434,6 +435,12 @@ TIMER_DEVICE_CALLBACK_MEMBER(alphatro_state::alphatro_c)
{
m_cass_data[3]++;
if (m_cass_state != m_cassold)
{
m_cass_data[3] = 0;
m_cassold = m_cass_state;
}
if (m_cass_state)
m_cass->output(BIT(m_cass_data[3], 0) ? -1.0 : +1.0); // 2400Hz
else
@ -494,7 +501,7 @@ static MACHINE_CONFIG_START( alphatro, alphatro_state )
MCFG_DEVICE_ADD("usart", I8251, 0)
MCFG_I8251_TXD_HANDLER(WRITELINE(alphatro_state, txdata_callback))
MCFG_DEVICE_ADD("usart_clock", CLOCK, 19225)
MCFG_DEVICE_ADD("usart_clock", CLOCK, 19200)
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(alphatro_state, write_usart_clock))
MCFG_CASSETTE_ADD("cassette", alphatro_cassette_interface)

View File

@ -94,6 +94,7 @@ protected:
private:
UINT8 m_rtc;
bool m_cb2;
bool m_cassold;
UINT8 m_cass_data[4];
UINT8 m_portb;
virtual void machine_start();
@ -212,6 +213,12 @@ TIMER_DEVICE_CALLBACK_MEMBER(d6800_state::d6800_c)
{
m_cass_data[3]++;
if (BIT(m_portb, 0) != m_cassold)
{
m_cass_data[3] = 0;
m_cassold = BIT(m_portb, 0);
}
if (BIT(m_portb, 0))
m_cass->output(BIT(m_cass_data[3], 0) ? -1.0 : +1.0); // 2400Hz
else

View File

@ -108,6 +108,7 @@ private:
UINT8 m_cass_data;
UINT8 m_last_key;
bool m_cass_state;
bool m_cassold;
bool m_speaker_state;
required_device<cpu_device> m_maincpu;
required_device<speaker_sound_device> m_speaker;
@ -165,6 +166,12 @@ TIMER_DEVICE_CALLBACK_MEMBER(dauphin_state::dauphin_c)
{
m_cass_data++;
if (m_cass_state != m_cassold)
{
m_cass_data = 0;
m_cassold = m_cass_state;
}
if (m_cass_state)
m_cass->output(BIT(m_cass_data, 1) ? -1.0 : +1.0); // 1000Hz
else

View File

@ -74,6 +74,7 @@ private:
UINT8 m_inv;
UINT8 m_cass_data[4];
bool m_cass_state;
bool m_cassold;
UINT8 m_kbd_count;
required_device<cpu_device> m_maincpu;
@ -373,6 +374,12 @@ TIMER_DEVICE_CALLBACK_MEMBER( fc100_state::timer_c )
{
m_cass_data[3]++;
if (m_cass_state != m_cassold)
{
m_cass_data[3] = 0;
m_cassold = m_cass_state;
}
if (m_cass_state)
m_cass->output(BIT(m_cass_data[3], 0) ? -1.0 : +1.0); // 2400Hz
else

View File

@ -84,6 +84,7 @@ private:
bool m_ff_b;
UINT8 m_cass_data[4];
bool m_cass_state;
bool m_cassold;
virtual void machine_reset();
required_device<cpu_device> m_maincpu;
required_device<i8251_device> m_uart;
@ -278,6 +279,12 @@ TIMER_DEVICE_CALLBACK_MEMBER(h8_state::h8_c)
{
m_cass_data[3]++;
if (m_cass_state != m_cassold)
{
m_cass_data[3] = 0;
m_cassold = m_cass_state;
}
if (m_cass_state)
m_cass->output(BIT(m_cass_data[3], 0) ? -1.0 : +1.0); // 2400Hz
else

View File

@ -120,6 +120,7 @@ private:
UINT8 m_digit;
UINT8 m_keydata;
bool m_cass_state;
bool m_cassold;
required_device<cpu_device> m_maincpu;
required_device<pia6821_device> m_pia_s;
required_device<pia6821_device> m_pia_u;
@ -329,6 +330,12 @@ TIMER_DEVICE_CALLBACK_MEMBER(mekd2_state::mekd2_c)
{
m_cass_data[3]++;
if (m_cass_state != m_cassold)
{
m_cass_data[3] = 0;
m_cassold = m_cass_state;
}
if (m_cass_state)
m_cass->output(BIT(m_cass_data[3], 0) ? -1.0 : +1.0); // 2400Hz
else