/* C64-specific initialization. */ int machine_specific_init(void) { #if defined(USE_SDLUI) || defined(USE_SDLUI2) if (console_mode) { video_disabled_mode = 1; } #else video_disabled_mode = 1; #endif c64_log = log_open("C64"); if (mem_load() < 0) { return -1; } if (vicii_init(VICII_STANDARD) == NULL && !video_disabled_mode) { return -1; } c64_mem_init(); cia1_init(machine_context.cia1); cia2_init(machine_context.cia2); c64_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(); /* 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. */ kbdbuf_init(631, 198, 10, (CLOCK)(machine_timing.rfsh_per_sec * machine_timing.cycles_per_rfsh)); /* Initialize the C64-specific part of the UI. */ if (!console_mode) { vsid_ui_init(); } /* Initialize glue logic. */ c64_glue_init(); machine_drive_stub(); return 0; }
/* C64-specific initialization. */ int machine_specific_init(void) { #ifdef USE_SDLUI if (console_mode) { video_disabled_mode = 1; } #else video_disabled_mode = 1; #endif c64_log = log_open("C64"); if (mem_load() < 0) { return -1; } if (vicii_init(VICII_STANDARD) == NULL && !video_disabled_mode) { return -1; } c64_mem_init(); cia1_init(machine_context.cia1); cia2_init(machine_context.cia2); c64_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(); /* 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. */ kbdbuf_init(631, 198, 10, (CLOCK)(machine_timing.rfsh_per_sec * machine_timing.cycles_per_rfsh)); /* Initialize the C64-specific I/O */ c64io_init(); /* Initialize the C64-specific part of the UI. */ if (!console_mode) { vsid_ui_init(); } /* Initialize glue logic. */ c64_glue_init(); machine_drive_stub(); #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; }
static void handle_wm_command(WPARAM wparam, LPARAM lparam, HWND hwnd) { TCHAR *st_name = NULL; char *name = NULL; int i; switch (wparam) { case IDM_LOAD_PSID_FILE: st_name = uilib_select_file(hwnd, translate_text(IDS_PSID_FILE), UILIB_FILTER_ALL, UILIB_SELECTOR_TYPE_FILE_LOAD, UILIB_SELECTOR_STYLE_DEFAULT); if (st_name != NULL) { name = system_wcstombs_alloc(st_name); if (machine_autodetect_psid(st_name) >= 0) { vsid_disp(0, 0, NULL, NULL); psid_init_driver(); vsid_ui_init(); machine_play_psid(0); for (i = 0; i < VSID_S_LASTLINE; i++) { *vsidstrings[i] = 0; } machine_trigger_reset(MACHINE_RESET_MODE_SOFT); songs = psid_tunes(&default_song); current_song = default_song; psid_ui_set_tune(uint_to_void_ptr(current_song), NULL); vsid_ui_display_tune_nr(current_song); vsid_ui_set_default_tune(default_song); vsid_ui_display_nr_of_tunes(songs); } system_wcstombs_free(name); lib_free(st_name); } break; case IDM_SELECT_TUNE: ui_select_vsid_tune(hwnd); break; case IDM_NEXT_TUNE: if (current_song < songs) { current_song++; psid_ui_set_tune(uint_to_void_ptr(current_song), NULL); vsid_ui_display_tune_nr(current_song); vsid_ui_set_default_tune(default_song); vsid_ui_display_nr_of_tunes(songs); } break; case IDM_PREVIOUS_TUNE: if (current_song > 1) { current_song--; psid_ui_set_tune(uint_to_void_ptr(current_song), NULL); vsid_ui_display_tune_nr(current_song); vsid_ui_set_default_tune(default_song); vsid_ui_display_nr_of_tunes(songs); } break; case IDM_RESET_HARD: machine_trigger_reset(MACHINE_RESET_MODE_HARD); break; case IDM_RESET_SOFT: machine_trigger_reset(MACHINE_RESET_MODE_SOFT); break; case IDM_MONITOR: monitor_startup_trap(); break; case IDM_EXIT: PostMessage(hwnd, WM_CLOSE, wparam, lparam); break; case IDM_SOUND_RECORD_START: ui_sound_record_settings_dialog(hwnd); break; case IDM_SOUND_RECORD_STOP: resources_set_string("SoundRecordDeviceName", ""); break; case IDM_MAXIMUM_SPEED_CUSTOM: ui_speed_settings_dialog(hwnd); break; case IDM_SOUND_SETTINGS: ui_sound_settings_dialog(hwnd); break; case IDM_SID_SETTINGS: ui_sid_settings_dialog(hwnd, c64_sid_baseaddress); break; case IDM_SETTINGS_SAVE_FILE: if ((st_name = uilib_select_file(hwnd, translate_text(IDS_SAVE_CONFIG_FILE), UILIB_FILTER_ALL, UILIB_SELECTOR_TYPE_FILE_SAVE, UILIB_SELECTOR_STYLE_DEFAULT)) != NULL) { char *name; name = system_wcstombs_alloc(st_name); if (resources_save(st_name) < 0) { ui_error(translate_text(IDS_CANNOT_SAVE_SETTINGS)); } else { ui_message(translate_text(IDS_SETTINGS_SAVED_SUCCESS)); } system_wcstombs_free(name); lib_free(st_name); } break; case IDM_SETTINGS_LOAD_FILE: if ((st_name = uilib_select_file(hwnd, translate_text(IDS_LOAD_CONFIG_FILE), UILIB_FILTER_ALL, UILIB_SELECTOR_TYPE_FILE_LOAD, UILIB_SELECTOR_STYLE_DEFAULT)) != NULL) { char *name; name = system_wcstombs_alloc(st_name); if (resources_load(st_name) < 0) { ui_error(translate_text(IDS_CANNOT_LOAD_SETTINGS)); } else { ui_message(translate_text(IDS_SETTINGS_LOADED_SUCCESS)); } system_wcstombs_free(name); lib_free(st_name); } break; case IDM_SETTINGS_SAVE: if (resources_save(NULL) < 0) { ui_error(translate_text(IDS_CANNOT_SAVE_SETTINGS)); } else { ui_message(translate_text(IDS_SETTINGS_SAVED_SUCCESS)); } break; case IDM_SETTINGS_LOAD: if (resources_load(NULL) < 0) { ui_error(translate_text(IDS_CANNOT_LOAD_SETTINGS)); } else { ui_message(translate_text(IDS_SETTINGS_LOADED_SUCCESS)); } break; case IDM_SETTINGS_DEFAULT: resources_set_defaults(); ui_message(translate_text(IDS_DEFAULT_SETTINGS_RESTORED)); break; case IDM_LANG_EN: case IDM_LANG_DA: case IDM_LANG_DE: case IDM_LANG_ES: case IDM_LANG_FR: case IDM_LANG_HU: case IDM_LANG_IT: case IDM_LANG_KO: case IDM_LANG_NL: case IDM_LANG_PL: case IDM_LANG_RU: case IDM_LANG_SV: case IDM_LANG_TR: ui_set_language((unsigned int)wparam); vsid_ui_translate(); break; case IDM_ABOUT: case IDM_HELP: case IDM_CONTRIBUTORS: case IDM_LICENSE: case IDM_WARRANTY: case IDM_CMDLINE: uihelp_dialog(hwnd, wparam); break; default: handle_default_command(wparam, lparam, hwnd); } }
/* Window procedure. All messages are handled here. */ static LRESULT CALLBACK window_proc(HWND window, UINT msg, WPARAM wparam, LPARAM lparam) { HDC hdc; PAINTSTRUCT ps; int i; switch (msg) { case WM_CREATE: songs = psid_tunes(&default_song); current_song = default_song; #if 0 if (songs == 0) { log_message(LOG_DEFAULT, "Vsid: no file specified, quitting"); return -1; } #endif DragAcceptFiles(window, TRUE); return 0; case WM_KEYDOWN: switch(wparam) { case 'I': /* infoline on request, just press I */ vsid_disp( 0, VSID_S_LASTLINE, "%s", vsidstrings[VSID_S_LASTLINE]); break; case VK_LEFT: case VK_DOWN: if (current_song > 1) { current_song--; psid_ui_set_tune(uint_to_void_ptr(current_song), NULL); vsid_ui_display_tune_nr(current_song); vsid_ui_set_default_tune(default_song); vsid_ui_display_nr_of_tunes(songs); InvalidateRect(window, NULL, 0); } break; case VK_RIGHT: case VK_UP: if (current_song < songs) { current_song++; psid_ui_set_tune(uint_to_void_ptr(current_song), NULL); vsid_ui_display_tune_nr(current_song); vsid_ui_set_default_tune(default_song); vsid_ui_display_nr_of_tunes(songs); InvalidateRect(window, NULL, 0); } break; } return 0; case WM_KEYUP: switch(wparam) { case 'I': /* infoline on request, just press I */ vsid_disp( 0, VSID_S_LASTLINE, "%79s", " "); break; } return 0; case WM_SIZE: return 0; case WM_COMMAND: vsync_suspend_speed_eval(); handle_wm_command(wparam, lparam, window); return 0; case WM_ENTERMENULOOP: vsync_suspend_speed_eval(); update_menus(window); break; case WM_MOVE: break; case WM_CLOSE: vsync_suspend_speed_eval(); vsid_ui_close(); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; case WM_DROPFILES: { char dummy[MAX_PATH]; DragQueryFile((HDROP)wparam, 0, dummy, sizeof(dummy) ); if (machine_autodetect_psid(dummy) >= 0) { vsid_disp(0, 0, NULL, NULL); psid_init_driver(); vsid_ui_init(); machine_play_psid(0); for (i = 0; i < VSID_S_LASTLINE; i++) { *vsidstrings[i] = 0; } machine_trigger_reset(MACHINE_RESET_MODE_SOFT); songs = psid_tunes(&default_song); current_song = default_song; psid_ui_set_tune(uint_to_void_ptr(current_song), NULL); vsid_ui_display_tune_nr(current_song); vsid_ui_set_default_tune(default_song); vsid_ui_display_nr_of_tunes(songs); InvalidateRect(window, NULL, TRUE); } } return 0; case WM_PAINT: { hdc = BeginPaint(window, &ps); if (*vsidstrings[VSID_S_TIMER]) { /* start only when timer string has been filled */ for (i = 0; i < VSID_S_LASTLINE; i++) { vsid_disp(0, i, "%s", vsidstrings[i]); } } EndPaint(window, &ps); return 0; } } return DefWindowProc(window, msg, wparam, lparam); }
/* C64-specific initialization. */ int machine_specific_init(void) { c64_log = log_open("C64"); if (mem_load() < 0) return -1; if (vsid_mode) { psid_init_driver(); } if (!vsid_mode) { /* Setup trap handling. */ traps_init(); /* Initialize serial traps. */ if (serial_init(c64_serial_traps) < 0) return -1; serial_trap_init(0xa4); serial_iec_bus_init(); /* Initialize RS232 handler. */ rs232drv_init(); c64_rsuser_init(); /* Initialize print devices. */ printer_init(); /* Initialize the tape emulation. */ tape_init(&tapeinit); /* Initialize the datasette emulation. */ datasette_init(); /* Fire up the hardware-level drive emulation. */ drive_init(); /* Initialize autostart. */ autostart_init((CLOCK)(3 * C64_PAL_RFSH_PER_SEC * C64_PAL_CYCLES_PER_RFSH), 1, 0xcc, 0xd1, 0xd3, 0xd5); } if (vicii_init(VICII_STANDARD) == NULL && !console_mode && !vsid_mode) return -1; c64_mem_init(); cia1_init(machine_context.cia1); cia2_init(machine_context.cia2); if (!vsid_mode) { tpi_init(machine_context.tpi1); acia1_init(); #ifndef COMMON_KBD /* Initialize the keyboard. */ if (c64_kbd_init() < 0) return -1; #endif c64keyboard_init(); } c64_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 keyboard buffer. */ kbdbuf_init(631, 198, 10, (CLOCK)(machine_timing.rfsh_per_sec * machine_timing.cycles_per_rfsh)); /* Initialize the C64-specific part of the UI. */ if (!console_mode) { if (vsid_mode) vsid_ui_init(); else c64ui_init(); } if (!vsid_mode) { /* Initialize the REU. */ reu_init(); /* Initialize the GEORAM. */ georam_init(); /* Initialize the RAMCART. */ ramcart_init(); /* Initialize the +60K. */ plus60k_init(); /* Initialize the +256K. */ plus256k_init(); /* Initialize the C64 256K. */ c64_256k_init(); /* Initialize the MMC64. */ mmc64_init(); #ifdef HAVE_TFE /* Initialize the TFE. */ tfe_init(); #endif #ifdef HAVE_MOUSE /* Initialize mouse support (if present). */ mouse_init(); #endif c64iec_init(); c64fastiec_init(); cartridge_init(); } machine_drive_stub(); return 0; }