Exemple #1
0
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();
    }
}
Exemple #2
0
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();
    }
}
Exemple #3
0
/* 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);
}