summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/a800/cassette.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/a800/cassette.cpp')
-rw-r--r--src/devices/bus/a800/cassette.cpp42
1 files changed, 18 insertions, 24 deletions
diff --git a/src/devices/bus/a800/cassette.cpp b/src/devices/bus/a800/cassette.cpp
index 6a409611bbb..50feed49c5c 100644
--- a/src/devices/bus/a800/cassette.cpp
+++ b/src/devices/bus/a800/cassette.cpp
@@ -25,8 +25,7 @@ TODO:
// GLOBAL VARIABLES
//**************************************************************************
-DEFINE_DEVICE_TYPE(A8SIO_CASSETTE, a8sio_cassette_device, "a8sio_cass", "Atari 8 bit cassette")
-const device_timer_id TIMER_CASSETTE_READ = 1;
+DEFINE_DEVICE_TYPE(A8SIO_CASSETTE, a8sio_cassette_device, "a8sio_cass", "Atari 8-bit cassette")
void a8sio_cassette_device::device_add_mconfig(machine_config &config)
{
@@ -60,14 +59,14 @@ void a8sio_cassette_device::device_start()
save_item(NAME(m_old_cass_signal));
save_item(NAME(m_signal_count));
- m_read_timer = timer_alloc(TIMER_CASSETTE_READ);
+ m_read_timer = timer_alloc(FUNC(a8sio_cassette_device::read_tick), this);
}
void a8sio_cassette_device::device_reset()
{
}
-WRITE_LINE_MEMBER( a8sio_cassette_device::motor_w )
+void a8sio_cassette_device::motor_w(int state)
{
//printf("a8sio_cassette::motor_w %d\n", state);
if (!state)
@@ -82,27 +81,22 @@ WRITE_LINE_MEMBER( a8sio_cassette_device::motor_w )
}
}
-void a8sio_cassette_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+TIMER_CALLBACK_MEMBER(a8sio_cassette_device::read_tick)
{
- switch (id)
+ uint8_t cass_signal = m_cassette->input() < 0 ? 0 : 1;
+
+ if (m_signal_count < 20)
+ {
+ m_signal_count++;
+ }
+
+ if (cass_signal != m_old_cass_signal)
{
- case TIMER_CASSETTE_READ:
- uint8_t cass_signal = m_cassette->input() < 0 ? 0 : 1;
-
- if (m_signal_count < 20)
- {
- m_signal_count++;
- }
-
- if (cass_signal != m_old_cass_signal)
- {
- //printf("cass_signal: %d, count: %d, data: %d\n", cass_signal, m_signal_count, m_signal_count < 5 ? 1 : 0);
- // ~4 kHz -> 0
- // ~5 kHz -> 1
- m_a8sio->data_in_w((m_signal_count < 5) ? 1 : 0);
- m_signal_count = 0;
- m_old_cass_signal = cass_signal;
- }
- break;
+ //printf("cass_signal: %d, count: %d, data: %d\n", cass_signal, m_signal_count, m_signal_count < 5 ? 1 : 0);
+ // ~4 kHz -> 0
+ // ~5 kHz -> 1
+ m_a8sio->data_in_w((m_signal_count < 5) ? 1 : 0);
+ m_signal_count = 0;
+ m_old_cass_signal = cass_signal;
}
}