summaryrefslogtreecommitdiffstats
path: root/src/mame/drivers/cmi.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/cmi.cpp')
-rw-r--r--src/mame/drivers/cmi.cpp53
1 files changed, 20 insertions, 33 deletions
diff --git a/src/mame/drivers/cmi.cpp b/src/mame/drivers/cmi.cpp
index 9f42eef286a..aaecd61bb13 100644
--- a/src/mame/drivers/cmi.cpp
+++ b/src/mame/drivers/cmi.cpp
@@ -224,15 +224,10 @@ public:
{
}
- void set_interrupt(int cpunum, int level, int state);
-
virtual void machine_reset() override;
virtual void machine_start() override;
- virtual void device_timer(emu_timer &timer, device_timer_id id, int param) override;
- static const device_timer_id TIMER_MAP_SWITCH = 0;
- static const device_timer_id TIMER_HBLANK = 1;
- static const device_timer_id TIMER_JAM_TIMEOUT = 2;
+ void set_interrupt(int cpunum, int level, int state);
void init_cmi2x();
@@ -413,11 +408,13 @@ private:
uint8_t m_video_data = 0;
// Memory
+ TIMER_CALLBACK_MEMBER(switch_map);
+ TIMER_CALLBACK_MEMBER(jam_timeout);
bool map_is_active(int cpunum, int map, uint8_t *map_info);
void update_address_space(int cpunum, uint8_t mapinfo);
// Video
- void hblank();
+ TIMER_CALLBACK_MEMBER(hblank);
template <int Y, int X, bool ByteSize> void update_video_pos();
// Floppy
@@ -514,7 +511,7 @@ uint32_t cmi_state::screen_update_cmi2x(screen_device &screen, bitmap_rgb32 &bit
return 0;
}
-void cmi_state::hblank()
+TIMER_CALLBACK_MEMBER(cmi_state::hblank)
{
int v = m_screen->vpos();
@@ -964,30 +961,20 @@ template<int cpunum> void cmi_state::irq_ram_w(offs_t offset, uint8_t data)
m_scratch_ram[cpunum][0xf8 + offset] = data;
}
-void cmi_state::device_timer(emu_timer &timer, device_timer_id id, int param)
+TIMER_CALLBACK_MEMBER(cmi_state::switch_map)
{
- switch (id)
- {
- case TIMER_MAP_SWITCH:
- {
- m_cpu_active_space[param] = m_cpu_map_switch[param];
- uint8_t map_info = (m_cpu_map_switch[param] == MAPPING_A) ?
- m_map_sel[param ? MAPSEL_P2_A : MAPSEL_P1_A] :
- m_map_sel[param ? MAPSEL_P2_B : MAPSEL_P1_B];
- update_address_space(param, map_info);
- m_map_switch_timer->adjust(attotime::never);
- break;
- }
-
- case TIMER_HBLANK:
- hblank();
- break;
+ m_cpu_active_space[param] = m_cpu_map_switch[param];
+ uint8_t map_info = (m_cpu_map_switch[param] == MAPPING_A) ?
+ m_map_sel[param ? MAPSEL_P2_A : MAPSEL_P1_A] :
+ m_map_sel[param ? MAPSEL_P2_B : MAPSEL_P1_B];
+ update_address_space(param, map_info);
+ m_map_switch_timer->adjust(attotime::never);
+}
- case TIMER_JAM_TIMEOUT:
- m_maincpu2->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
- m_jam_timeout_timer->adjust(attotime::never);
- break;
- }
+TIMER_CALLBACK_MEMBER(cmi_state::jam_timeout)
+{
+ m_maincpu2->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
+ m_jam_timeout_timer->adjust(attotime::never);
}
uint8_t cmi_state::atomic_r()
@@ -2066,9 +2053,9 @@ void cmi_state::machine_start()
m_q133_rom = (uint8_t *)m_q133_region->base();
// allocate timers for the built-in two channel timer
- m_map_switch_timer = timer_alloc(TIMER_MAP_SWITCH);
- m_hblank_timer = timer_alloc(TIMER_HBLANK);
- m_jam_timeout_timer = timer_alloc(TIMER_JAM_TIMEOUT);
+ m_map_switch_timer = timer_alloc(FUNC(cmi_state::switch_map), this);
+ m_hblank_timer = timer_alloc(FUNC(cmi_state::hblank), this);
+ m_jam_timeout_timer = timer_alloc(FUNC(cmi_state::jam_timeout), this);
m_map_switch_timer->adjust(attotime::never);
m_hblank_timer->adjust(attotime::never);