void device_execute_interface::on_vblank_start(screen_device &screen) { // start the interrupt counter if (!suspended(SUSPEND_REASON_DISABLE)) m_iloops = 0; else m_iloops = -1; // the hack style VBLANK decleration always uses the first screen bool interested = false; if (m_execute_config.m_vblank_interrupts_per_frame > 1) interested = true; // for new style declaration, we need to compare the tags else if (m_execute_config.m_vblank_interrupt_screen != NULL) interested = (strcmp(screen.tag(), m_execute_config.m_vblank_interrupt_screen) == 0); // if interested, call the interrupt handler if (interested) { if (!suspended(SUSPEND_REASON_HALT | SUSPEND_REASON_RESET | SUSPEND_REASON_DISABLE)) (*m_execute_config.m_vblank_interrupt)(&m_device); // if we have more than one interrupt per frame, start the timer now to trigger the rest of them if (m_execute_config.m_vblank_interrupts_per_frame > 1 && !suspended(SUSPEND_REASON_DISABLE)) { m_partial_frame_period = device().machine->primary_screen->frame_period() / m_execute_config.m_vblank_interrupts_per_frame; m_partial_frame_timer->adjust(m_partial_frame_period); } } }
std::string machine_info::get_screen_desc(screen_device &screen) { if (screen_device_iterator(m_machine.root_device()).count() > 1) return string_format(_("Screen '%1$s'"), screen.tag()); else return _("Screen"); }
UINT32 coco3_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { bool result; if (!strcmp(screen.tag(), ":" COMPOSITE_SCREEN_TAG)) { /* composite screen */ result = m_gime->update_composite(bitmap, cliprect); } else if (!strcmp(screen.tag(), ":" RGB_SCREEN_TAG)) { /* rgb screen */ result = m_gime->update_rgb(bitmap, cliprect); } else { fatalerror("Called screen_update() with invalid tag '%s'", screen.tag()); } return result; }