/* Initialization. */ raster_t *vic_init(void) { vic.log = log_open("VIC"); vic.raster_draw_alarm = alarm_new(maincpu_alarm_context, "VicIRasterDraw", vic_raster_draw_alarm_handler, NULL); clk_guard_add_callback(maincpu_clk_guard, clk_overflow_callback, NULL); vic_change_timing(); if (init_raster() < 0) return NULL; vic.auxiliary_color = 0; vic.mc_border_color = 0; vic.color_ptr = mem_ram; vic.screen_ptr = mem_ram; vic.chargen_ptr = vic20memrom_chargen_rom + 0x400; /* FIXME: Where do these values come from? */ vic.light_pen.triggered = 0; vic.light_pen.x = 87; vic.light_pen.y = 234; /* FIXME */ vic.char_height = 8; vic.row_increase_line = 8; vic.text_cols = 22; vic.text_lines = 23; vic_reset(); vic_draw_init(); vic_update_memory_ptrs(); vic.initialized = 1; resources_touch("VICDoubleSize"); /*vic_resize();*/ return &vic.raster; }
void machine_change_timing(int timeval) { switch (timeval) { case MACHINE_SYNC_PAL: machine_timing.cycles_per_sec = VIC20_PAL_CYCLES_PER_SEC; machine_timing.cycles_per_rfsh = VIC20_PAL_CYCLES_PER_RFSH; machine_timing.rfsh_per_sec = VIC20_PAL_RFSH_PER_SEC; machine_timing.cycles_per_line = VIC20_PAL_CYCLES_PER_LINE; machine_timing.screen_lines = VIC20_PAL_SCREEN_LINES; break; case MACHINE_SYNC_NTSC: machine_timing.cycles_per_sec = VIC20_NTSC_CYCLES_PER_SEC; machine_timing.cycles_per_rfsh = VIC20_NTSC_CYCLES_PER_RFSH; machine_timing.rfsh_per_sec = VIC20_NTSC_RFSH_PER_SEC; machine_timing.cycles_per_line = VIC20_NTSC_CYCLES_PER_LINE; machine_timing.screen_lines = VIC20_NTSC_SCREEN_LINES; break; default: log_error(vic20_log, "Unknown machine timing."); } vsync_set_machine_parameter(machine_timing.rfsh_per_sec, machine_timing.cycles_per_sec); sound_set_machine_parameter(machine_timing.cycles_per_sec, machine_timing.cycles_per_rfsh); sid_set_machine_parameter(machine_timing.cycles_per_sec); debug_set_machine_parameter(machine_timing.cycles_per_line, machine_timing.screen_lines); drive_set_machine_parameter(machine_timing.cycles_per_sec); serial_iec_device_set_machine_parameter(machine_timing.cycles_per_sec); clk_guard_set_clk_base(maincpu_clk_guard, machine_timing.cycles_per_rfsh); vic_change_timing(); mem_patch_kernal(); machine_trigger_reset(MACHINE_RESET_MODE_HARD); }
void machine_change_timing(int timeval) { int border_mode; switch (timeval) { default: case MACHINE_SYNC_PAL ^ VIC_BORDER_MODE(VIC_NORMAL_BORDERS): case MACHINE_SYNC_NTSC ^ VIC_BORDER_MODE(VIC_NORMAL_BORDERS): timeval ^= VIC_BORDER_MODE(VIC_NORMAL_BORDERS); border_mode = VIC_NORMAL_BORDERS; break; case MACHINE_SYNC_PAL ^ VIC_BORDER_MODE(VIC_FULL_BORDERS): case MACHINE_SYNC_NTSC ^ VIC_BORDER_MODE(VIC_FULL_BORDERS): timeval ^= VIC_BORDER_MODE(VIC_FULL_BORDERS); border_mode = VIC_FULL_BORDERS; break; case MACHINE_SYNC_PAL ^ VIC_BORDER_MODE(VIC_DEBUG_BORDERS): case MACHINE_SYNC_NTSC ^ VIC_BORDER_MODE(VIC_DEBUG_BORDERS): timeval ^= VIC_BORDER_MODE(VIC_DEBUG_BORDERS); border_mode = VIC_DEBUG_BORDERS; break; case MACHINE_SYNC_PAL ^ VIC_BORDER_MODE(VIC_NO_BORDERS): case MACHINE_SYNC_NTSC ^ VIC_BORDER_MODE(VIC_NO_BORDERS): timeval ^= VIC_BORDER_MODE(VIC_NO_BORDERS); border_mode = VIC_NO_BORDERS; break; } switch (timeval) { case MACHINE_SYNC_PAL: machine_timing.cycles_per_sec = VIC20_PAL_CYCLES_PER_SEC; machine_timing.cycles_per_rfsh = VIC20_PAL_CYCLES_PER_RFSH; machine_timing.rfsh_per_sec = VIC20_PAL_RFSH_PER_SEC; machine_timing.cycles_per_line = VIC20_PAL_CYCLES_PER_LINE; machine_timing.screen_lines = VIC20_PAL_SCREEN_LINES; machine_timing.power_freq = 50; break; case MACHINE_SYNC_NTSC: machine_timing.cycles_per_sec = VIC20_NTSC_CYCLES_PER_SEC; machine_timing.cycles_per_rfsh = VIC20_NTSC_CYCLES_PER_RFSH; machine_timing.rfsh_per_sec = VIC20_NTSC_RFSH_PER_SEC; machine_timing.cycles_per_line = VIC20_NTSC_CYCLES_PER_LINE; machine_timing.screen_lines = VIC20_NTSC_SCREEN_LINES; machine_timing.power_freq = 60; break; default: log_error(vic20_log, "Unknown machine timing."); } vsync_set_machine_parameter(machine_timing.rfsh_per_sec, machine_timing.cycles_per_sec); sound_set_machine_parameter(machine_timing.cycles_per_sec, machine_timing.cycles_per_rfsh); sid_set_machine_parameter(machine_timing.cycles_per_sec); debug_set_machine_parameter(machine_timing.cycles_per_line, machine_timing.screen_lines); drive_set_machine_parameter(machine_timing.cycles_per_sec); serial_iec_device_set_machine_parameter(machine_timing.cycles_per_sec); #ifdef HAVE_MOUSE neos_mouse_set_machine_parameter(machine_timing.cycles_per_sec); #endif clk_guard_set_clk_base(maincpu_clk_guard, machine_timing.cycles_per_rfsh); vic_change_timing(&machine_timing, border_mode); mem_patch_kernal(); machine_trigger_reset(MACHINE_RESET_MODE_HARD); }