raster_t *crtc_init(void) { raster_t *raster; DBG(("crtc_init")); crtc.log = log_open("CRTC"); crtc.raster_draw_alarm = alarm_new(maincpu_alarm_context, "CrtcRasterDraw", crtc_raster_draw_alarm_handler, NULL); clk_guard_add_callback(maincpu_clk_guard, clk_overflow_callback, NULL); raster = &crtc.raster; raster->sprite_status = NULL; raster_line_changes_init(raster); if (raster_init(raster, CRTC_NUM_VMODES) < 0) { return NULL; } raster_modes_set_idle_mode(raster->modes, CRTC_IDLE_MODE); resources_touch("CrtcVideoCache"); if (crtc_color_update_palette(raster->canvas) < 0) { log_error(crtc.log, "Cannot load palette."); return NULL; } if (!crtc.regs[0]) crtc.regs[0] = 49; if (!crtc.regs[1]) crtc.regs[1] = 40; if (!crtc.regs[2]) crtc.regs[2] = 45; if (!crtc.regs[4]) crtc.regs[4] = 30; if (!crtc.regs[6]) crtc.regs[6] = 25; if (!crtc.regs[9]) crtc.regs[9] = 7; /* FIXME */ crtc.screen_xoffset = 0; crtc.screen_yoffset = CRTC_SCREEN_BORDERHEIGHT; crtc.retrace_callback = NULL; crtc.hires_draw_callback = NULL; #if 0 log_debug("scr_width=%d, scr_height=%d", crtc.screen_width, crtc.screen_height); log_debug("tcols=%d, tlines=%d, bwidth=%d, bheight=%d", CRTC_SCREEN_TEXTCOLS(), CRTC_SCREEN_TEXTLINES(), CRTC_SCREEN_BORDERWIDTH, CRTC_SCREEN_BORDERHEIGHT); log_debug("displayed lines: first=%d, last=%d", CRTC_FIRST_DISPLAYED_LINE, CRTC_LAST_DISPLAYED_LINE); #endif crtc.initialized = 1; crtc_update_window(); raster_set_title(raster, machine_name); if (raster_realize(raster) < 0) { return NULL; } crtc_update_chargen_rel(); crtc_update_disp_char(); crtc_reset_screen_ptr(); crtc_draw_init(); crtc_reset(); /* raster->display_ystart = CRTC_SCREEN_BORDERHEIGHT; raster->display_ystop = crtc.screen_height - 2 * CRTC_SCREEN_BORDERHEIGHT; raster->display_xstart = CRTC_SCREEN_BORDERWIDTH; raster->display_xstop = crtc.screen_width - 2 * CRTC_SCREEN_BORDERWIDTH; */ resources_touch("CrtcDoubleSize"); return &crtc.raster; }
void c64_mem_init(void) { clk_guard_add_callback(maincpu_clk_guard, clk_overflow_callback, NULL); }
/* CBM-II-specific initialization. */ int machine_specific_init(void) { cbm2_log = log_open("CBM2"); cbm2_init_ok = 1; event_init(); /* Setup trap handling - must be before mem_load() */ traps_init(); if (mem_load() < 0) { return -1; } if (!video_disabled_mode) { joystick_init(); } gfxoutput_init(); #ifdef HAVE_MOUSE /* Initialize mouse support (if present). */ mouse_init(); #if 0 /* Initialize lightpen support and register VICII callbacks */ lightpen_init(); lightpen_register_timing_callback(vicii_lightpen_timing, 0); lightpen_register_trigger_callback(vicii_trigger_light_pen); #endif #endif rs232drv_init(); /* initialize print devices */ printer_init(); #ifdef USE_BEOS_UI /* Pre-init CBM-II-specific parts of the menus before vicii_init() creates a canvas window with a menubar at the top. This could also be used by other ports, e.g. GTK+... */ cbm5x0ui_init_early(); #endif if (vicii_init(VICII_STANDARD) == NULL) { return -1; } /* c500_set_phi1_bank(15); c500_set_phi2_bank(15); */ c500_powerline_clk_alarm = alarm_new(maincpu_alarm_context, "C500PowerlineClk", c500_powerline_clk_alarm_handler, NULL); clk_guard_add_callback(maincpu_clk_guard, c500_powerline_clk_overflow_callback, NULL); machine_timing.cycles_per_sec = C500_PAL_CYCLES_PER_SEC; machine_timing.rfsh_per_sec = C500_PAL_RFSH_PER_SEC; machine_timing.cycles_per_rfsh = C500_PAL_CYCLES_PER_RFSH; cia1_init(machine_context.cia1); acia1_init(); tpi1_init(machine_context.tpi1); tpi2_init(machine_context.tpi2); #ifndef COMMON_KBD /* Initialize the keyboard. */ if (cbm2_kbd_init() < 0) { return -1; } #endif /* Initialize the datasette emulation. */ datasette_init(); /* Fire up the hardware-level 1541 emulation. */ drive_init(); disk_image_init(); cbm2_monitor_init(); /* Initialize vsync and register our hook function. */ vsync_init(machine_vsync_hook); vsync_set_machine_parameter(machine_timing.rfsh_per_sec, machine_timing.cycles_per_sec); /* Initialize native sound chip */ sid_sound_chip_init(); drive_sound_init(); video_sound_init(); /* Initialize sound. Notice that this does not really open the audio device yet. */ sound_init(machine_timing.cycles_per_sec, machine_timing.cycles_per_rfsh); /* Initialize keyboard buffer. This appears to work but doesn't account for banking. */ kbdbuf_init(939, 209, 10, (CLOCK)(machine_timing.rfsh_per_sec * machine_timing.cycles_per_rfsh)); /* Initialize the CBM-II-specific part of the UI. */ cbm5x0ui_init(); cbm2iec_init(); machine_drive_stub(); /* Initialize the CBM5x0-specific I/O */ cbm5x0io_init(); #if defined (USE_XF86_EXTENSIONS) && (defined(USE_XF86_VIDMODE_EXT) || defined (HAVE_XRANDR)) { /* set fullscreen if user used `-fullscreen' on cmdline */ int fs; resources_get_int("UseFullscreen", &fs); if (fs) { resources_set_int("VICIIFullscreen", 1); } } #endif return 0; }
/* CBM-II-specific initialization. */ int machine_specific_init(void) { cbm2_log = log_open("CBM2"); cbm2_init_ok = 1; /* Setup trap handling - must be before mem_load() */ traps_init(); if (mem_load() < 0) return -1; rs232drv_init(); /* initialize print devices */ printer_init(); if (!cbm2_isC500) { if (crtc_init() == NULL) return -1; crtc_set_retrace_callback(cbm2_crtc_signal); crtc_set_retrace_type(0); crtc_set_hw_options(1, 0x7ff, 0x1000, 512, -0x2000); } else { if (vicii_init(VICII_STANDARD) == NULL) return -1; /* c500_set_phi1_bank(15); c500_set_phi2_bank(15); */ c500_powerline_clk_alarm = alarm_new(maincpu_alarm_context, "C500PowerlineClk", c500_powerline_clk_alarm_handler, NULL); clk_guard_add_callback(maincpu_clk_guard, c500_powerline_clk_overflow_callback, NULL); machine_timing.cycles_per_sec = C500_PAL_CYCLES_PER_SEC; machine_timing.rfsh_per_sec = C500_PAL_RFSH_PER_SEC; machine_timing.cycles_per_rfsh = C500_PAL_CYCLES_PER_RFSH; } cia1_init(machine_context.cia1); acia1_init(); tpi1_init(machine_context.tpi1); tpi2_init(machine_context.tpi2); #ifndef COMMON_KBD /* Initialize the keyboard. */ if (cbm2_kbd_init() < 0) return -1; #endif /* Initialize the datasette emulation. */ datasette_init(); /* Fire up the hardware-level 1541 emulation. */ drive_init(); cbm2_monitor_init(); /* Initialize vsync and register our hook function. */ vsync_init(machine_vsync_hook); vsync_set_machine_parameter(machine_timing.rfsh_per_sec, machine_timing.cycles_per_sec); /* Initialize sound. Notice that this does not really open the audio device yet. */ sound_init(machine_timing.cycles_per_sec, machine_timing.cycles_per_rfsh); /* Initialize the CBM-II-specific part of the UI. */ cbm2ui_init(); cbm2iec_init(); machine_drive_stub(); return 0; }