summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/hp9845_io/98035.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/hp9845_io/98035.cpp')
-rw-r--r--src/devices/bus/hp9845_io/98035.cpp85
1 files changed, 43 insertions, 42 deletions
diff --git a/src/devices/bus/hp9845_io/98035.cpp b/src/devices/bus/hp9845_io/98035.cpp
index c4516bdbc37..79017edd4c2 100644
--- a/src/devices/bus/hp9845_io/98035.cpp
+++ b/src/devices/bus/hp9845_io/98035.cpp
@@ -186,8 +186,8 @@ void hp98035_io_card_device::device_start()
save_item(NAME(m_prev_clock_keys));
save_item(NAME(m_clock_key_cnt));
- m_msec_timer = timer_alloc(MSEC_TMR_ID);
- m_clock_timer = timer_alloc(CLOCK_TMR_ID);
+ m_msec_timer = timer_alloc(FUNC(hp98035_io_card_device::msec_tick), this);
+ m_clock_timer = timer_alloc(FUNC(hp98035_io_card_device::clock_tick), this);
}
void hp98035_io_card_device::device_reset()
@@ -207,50 +207,51 @@ void hp98035_io_card_device::device_reset()
half_init();
}
-void hp98035_io_card_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+TIMER_CALLBACK_MEMBER(hp98035_io_card_device::msec_tick)
{
- if (id == MSEC_TMR_ID) {
- // On real hw there's a full 4-bit decimal counter, but only the LSB is used to
- // generate interrupts
- m_np_irq = !m_np_irq;
- update_dc();
- } else if (id == CLOCK_TMR_ID) {
- // Update digit multiplexer
- if (m_clock_state == CLOCK_OFF) {
- m_clock_mux = 0;
- } else {
- m_clock_mux <<= 1;
- if ((m_clock_mux & 7) == 0) {
- m_clock_mux = 1;
- }
- }
- // Act on clock chip "keys"
- if (m_clock_keys == 0 || m_clock_keys != m_prev_clock_keys) {
- m_clock_key_cnt = 0;
- if (m_clock_keys == 0 && m_clock_state == CLOCK_HHMM) {
- // Keys released in HHMM state -> turn display off
- // In real hw there is probably 1 s delay
- m_clock_state = CLOCK_OFF;
- regen_clock_image();
- }
- } else if (m_clock_key_cnt < KEY_PRESS_LONG) {
- m_clock_key_cnt++;
- if (m_clock_key_cnt == KEY_PRESS_SHORT) {
- /// Short key press
- clock_short_press();
- } else if (m_clock_key_cnt == KEY_PRESS_LONG) {
- // Long key press
- clock_long_press();
- }
+ // On real hw there's a full 4-bit decimal counter, but only the LSB is used to
+ // generate interrupts
+ m_np_irq = !m_np_irq;
+ update_dc();
+}
+
+TIMER_CALLBACK_MEMBER(hp98035_io_card_device::clock_tick)
+{
+ // Update digit multiplexer
+ if (m_clock_state == CLOCK_OFF) {
+ m_clock_mux = 0;
+ } else {
+ m_clock_mux <<= 1;
+ if ((m_clock_mux & 7) == 0) {
+ m_clock_mux = 1;
}
- m_prev_clock_keys = m_clock_keys;
- // Count seconds
- m_clock_1s_div++;
- if (m_clock_1s_div >= DIGIT_MUX_FREQ.value()) {
- m_clock_1s_div = 0;
- advance_seconds();
+ }
+ // Act on clock chip "keys"
+ if (m_clock_keys == 0 || m_clock_keys != m_prev_clock_keys) {
+ m_clock_key_cnt = 0;
+ if (m_clock_keys == 0 && m_clock_state == CLOCK_HHMM) {
+ // Keys released in HHMM state -> turn display off
+ // In real hw there is probably 1 s delay
+ m_clock_state = CLOCK_OFF;
regen_clock_image();
}
+ } else if (m_clock_key_cnt < KEY_PRESS_LONG) {
+ m_clock_key_cnt++;
+ if (m_clock_key_cnt == KEY_PRESS_SHORT) {
+ /// Short key press
+ clock_short_press();
+ } else if (m_clock_key_cnt == KEY_PRESS_LONG) {
+ // Long key press
+ clock_long_press();
+ }
+ }
+ m_prev_clock_keys = m_clock_keys;
+ // Count seconds
+ m_clock_1s_div++;
+ if (m_clock_1s_div >= DIGIT_MUX_FREQ.value()) {
+ m_clock_1s_div = 0;
+ advance_seconds();
+ regen_clock_image();
}
}