diff --git a/src/mess/drivers/a6809.c b/src/mess/drivers/a6809.c index 59b13210a2e..55ac980a4e9 100644 --- a/src/mess/drivers/a6809.c +++ b/src/mess/drivers/a6809.c @@ -85,6 +85,7 @@ public: private: UINT8 m_cass_data[4]; bool m_cass_state; + bool m_cassold; UINT8 m_video_index; required_device m_via; required_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 diff --git a/src/mess/drivers/acrnsys1.c b/src/mess/drivers/acrnsys1.c index 3bf65b72396..f08d8ee8e8e 100644 --- a/src/mess/drivers/acrnsys1.c +++ b/src/mess/drivers/acrnsys1.c @@ -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 diff --git a/src/mess/drivers/alphatro.c b/src/mess/drivers/alphatro.c index f585d235a51..785a4b3d09d 100644 --- a/src/mess/drivers/alphatro.c +++ b/src/mess/drivers/alphatro.c @@ -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) diff --git a/src/mess/drivers/d6800.c b/src/mess/drivers/d6800.c index c19bc2100e1..97fc58b5f8c 100644 --- a/src/mess/drivers/d6800.c +++ b/src/mess/drivers/d6800.c @@ -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 diff --git a/src/mess/drivers/dolphunk.c b/src/mess/drivers/dolphunk.c index 11a1005d071..a829ac92feb 100644 --- a/src/mess/drivers/dolphunk.c +++ b/src/mess/drivers/dolphunk.c @@ -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 m_maincpu; required_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 diff --git a/src/mess/drivers/fc100.c b/src/mess/drivers/fc100.c index 7d32d59d60c..cd4b9683ea2 100644 --- a/src/mess/drivers/fc100.c +++ b/src/mess/drivers/fc100.c @@ -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 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 diff --git a/src/mess/drivers/h8.c b/src/mess/drivers/h8.c index ab75b43250b..8ae98ff76d8 100644 --- a/src/mess/drivers/h8.c +++ b/src/mess/drivers/h8.c @@ -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 m_maincpu; required_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 diff --git a/src/mess/drivers/mekd2.c b/src/mess/drivers/mekd2.c index b0edcda10fc..da01f1891cc 100644 --- a/src/mess/drivers/mekd2.c +++ b/src/mess/drivers/mekd2.c @@ -120,6 +120,7 @@ private: UINT8 m_digit; UINT8 m_keydata; bool m_cass_state; + bool m_cassold; required_device m_maincpu; required_device m_pia_s; required_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