void vic_change_timing(void) { int mode; resources_get_int("MachineVideoStandard", &mode); switch (mode) { case MACHINE_SYNC_NTSC: vic.screen_height = VIC20_NTSC_SCREEN_LINES; vic.screen_width = VIC_NTSC_SCREEN_WIDTH; vic.display_width = VIC_NTSC_DISPLAY_WIDTH; vic.first_displayed_line = VIC20_NTSC_FIRST_DISPLAYED_LINE; vic.last_displayed_line = VIC20_NTSC_LAST_DISPLAYED_LINE; vic.cycles_per_line = VIC20_NTSC_CYCLES_PER_LINE; vic.cycle_offset = VIC20_NTSC_CYCLE_OFFSET; vic.max_text_cols = VIC_NTSC_MAX_TEXT_COLS; break; case MACHINE_SYNC_PAL: default: vic.screen_height = VIC20_PAL_SCREEN_LINES; vic.screen_width = VIC_PAL_SCREEN_WIDTH; vic.display_width = VIC_PAL_DISPLAY_WIDTH; vic.first_displayed_line = VIC20_PAL_FIRST_DISPLAYED_LINE; vic.last_displayed_line = VIC20_PAL_LAST_DISPLAYED_LINE; vic.cycles_per_line = VIC20_PAL_CYCLES_PER_LINE; vic.cycle_offset = VIC20_PAL_CYCLE_OFFSET; vic.max_text_cols = VIC_PAL_MAX_TEXT_COLS; break; } if (vic.initialized) { vic_set_geometry(); raster_mode_change(); } }
void ted_change_timing(machine_timing_t *machine_timing, int bordermode) { ted_timing_set(machine_timing, bordermode); if (ted.initialized) { ted_set_geometry(); raster_mode_change(); } }
/* Redraw the current raster line. */ static void vdc_raster_draw_alarm_handler(CLOCK offset, void *data) { int in_visible_area, in_idle_state; in_visible_area = (vdc.raster.current_line >= vdc.first_displayed_line && vdc.raster.current_line <= vdc.last_displayed_line); in_idle_state = (vdc.raster.current_line < vdc.border_height) || (vdc.raster.current_line > (vdc.border_height + vdc.screen_ypix)); if (vdc.raster.current_line == vdc.first_displayed_line * 2 + 1) { vdc.screen_adr = ((vdc.regs[12] << 8) | vdc.regs[13]) & vdc.vdc_address_mask; vdc.attribute_adr = ((vdc.regs[20] << 8) | vdc.regs[21]) & vdc.vdc_address_mask; } if (vdc.raster.current_line == 0) { vdc.mem_counter = 0; vdc.bitmap_counter = 0; vdc.raster.ycounter = 0; vdc.frame_counter++; if (vdc.regs[24] & 0x20) vdc.attribute_blink = vdc.frame_counter & 16; else vdc.attribute_blink = vdc.frame_counter & 8; if (vdc.update_geometry) { vdc_update_geometry(); vdc.force_resize = 1; vdc.force_repaint = 1; /* Screen height has changed, so do not invalidate cache with the new value. It will be recreated by resize anyway. */ vdc.force_cache_flush = 0; } else { if (vdc.force_cache_flush) { vdc_invalidate_cache(&vdc.raster, vdc.screen_height); vdc.force_cache_flush = 0; } } if (vdc.force_resize) { if (vdc.initialized) { vdc_set_geometry(); raster_mode_change(); } vdc.force_resize = 0; } if (vdc.force_repaint) { vdc.force_repaint = 0; raster_force_repaint(&vdc.raster); } } raster_line_emulate(&vdc.raster); #ifdef __MSDOS__ if (vdc.raster.canvas->viewport->update_canvas) canvas_set_border_color(vdc.raster.canvas, vdc.raster.border_color); #endif if (in_visible_area && !in_idle_state) { vdc_increment_memory_pointer(); vdc_set_video_mode(); } vdc_set_next_alarm(offset); }