void fs_emu_video_init_opengl() { fs_log("fs_emu_video_init_opengl\n"); fs_emu_initialize_opengl(); initialize(); fs_emu_menu_init_opengl(); #ifdef WITH_XML_SHADER fs_emu_xml_shader_init(); #endif #ifdef WITH_LUA fs_emu_lua_run_handler("on_fs_emu_init_video"); #endif }
static int input_handler_loop(int line) { static int last_frame = -1; if (g_fs_uae_frame != last_frame) { // only run this for the first input handler loop per frame #ifdef WITH_LUA fs_emu_lua_run_handler("on_fs_uae_read_input"); #endif last_frame = g_fs_uae_frame; } int action; //int reconfigure_input = 0; while((action = fs_emu_get_input_event()) != 0) { //printf("event_handler_loop received input action %d\n", action); int istate = (action & 0x00ff0000) >> 16; // force to -128 to 127 range signed char state = (signed char) istate; action = action & 0x0000ffff; //amiga_keyboard_set_host_key(input_event, state); g_fs_uae_last_input_event = action; g_fs_uae_last_input_event_state = state; #ifdef WITH_LUA fs_emu_lua_run_handler("on_fs_uae_input_event"); #endif // handler can modify input event //action = g_fs_uae_last_input_event; //state = g_fs_uae_last_input_event_state; fs_uae_process_input_event(line, g_fs_uae_last_input_event, g_fs_uae_last_input_event_state, 0); } #if 0 if (line == 0) { int o = 300; if (g_fs_uae_frame == o + 600) { printf("Fake events!\n"); fs_uae_process_input_event(line, INPUTEVENT_MOUSE1_HORIZ, 50, 0); } if (g_fs_uae_frame == o + 650) { fs_uae_process_input_event(line, INPUTEVENT_MOUSE1_VERT, 200, 0); } if (g_fs_uae_frame == o + 675) { fs_uae_process_input_event(line, INPUTEVENT_MOUSE1_VERT, 30, 0); } if (g_fs_uae_frame == o + 700) { fs_uae_process_input_event(line, INPUTEVENT_JOY1_FIRE_BUTTON, 1, 0); } if (g_fs_uae_frame == o + 710) { fs_uae_process_input_event(line, INPUTEVENT_JOY1_FIRE_BUTTON, 0, 0); } if (g_fs_uae_frame == o + 800) { fs_uae_process_input_event(line, INPUTEVENT_JOY1_FIRE_BUTTON, 1, 0); } if (g_fs_uae_frame == o + 810) { fs_uae_process_input_event(line, INPUTEVENT_JOY1_FIRE_BUTTON, 0, 0); } if (g_fs_uae_frame == o + 900) { fs_uae_process_input_event(line, INPUTEVENT_JOY1_FIRE_BUTTON, 1, 0); } if (g_fs_uae_frame == o + 910) { fs_uae_process_input_event(line, INPUTEVENT_JOY1_FIRE_BUTTON, 0, 0); } #if 0 if (g_fs_uae_frame == 1000) { fs_uae_process_input_event(line, INPUTEVENT_JOY1_2ND_BUTTON, 1, 0); } if (g_fs_uae_frame == 1050) { fs_uae_process_input_event(line, INPUTEVENT_JOY1_2ND_BUTTON, 0, 0); } #endif } #endif int event, state; while (fs_uae_get_recorded_input_event(g_fs_uae_frame, line, &event, &state)) { fs_uae_process_input_event(line, event, state, 1); } return 1; }
void fs_uae_process_input_event(int line, int action, int state, int playback) { static int first_time = 1; if (first_time == 1) { first_time = 0; int load_state_number = fs_config_get_int("load_state"); if (load_state_number >= 1 && load_state_number <= 9) { // FIXME: improvement, check if state file exists and show // GUI warning if not... fs_log("trying to load state number: %d\n", load_state_number); amiga_send_input_event( INPUTEVENT_SPC_STATERESTORE1 - 1 + load_state_number, 1); } } #if 0 g_fs_uae_last_input_event = input_event; g_fs_uae_last_input_event_state = state; fs_emu_lua_run_handler("on_fs_uae_input_event"); // handler can modify input event amiga_send_input_event(g_fs_uae_last_input_event, g_fs_uae_last_input_event_state); #endif #if 0 if (action == INPUTEVENT_KEY_RETURN) { printf("FIXME: ignoring RETURN event for now\n"); return; } #endif if (action >= INPUTEVENT_AMIGA_JOYPORT_MODE_0_NONE && action < INPUTEVENT_AMIGA_JOYPORT_MODE_3_LAST) { change_port_device_mode( action - INPUTEVENT_AMIGA_JOYPORT_MODE_0_NONE); return; } if (action >= INPUTEVENT_AMIGA_JOYPORT_0_DEVICE_0 && action < INPUTEVENT_AMIGA_JOYPORT_0_DEVICE_LAST) { select_port_0_device(action - INPUTEVENT_AMIGA_JOYPORT_0_DEVICE_0); return; } if (state && action >= INPUTEVENT_AMIGA_JOYPORT_0_AUTOFIRE && action <= INPUTEVENT_AMIGA_JOYPORT_3_AUTOFIRE) { int port = action - INPUTEVENT_AMIGA_JOYPORT_0_AUTOFIRE; if (g_fs_uae_input_ports[port].autofire_mode) { g_fs_uae_input_ports[port].autofire_mode = 0; amiga_set_joystick_port_autofire(port, 0); fs_emu_warning(_("Auto-fire disabled for port %d"), port); } else { g_fs_uae_input_ports[port].autofire_mode = 1; amiga_set_joystick_port_autofire(port, 1); fs_emu_warning(_("Auto-fire enabled for port %d"), port); } fs_emu_menu_update_current(); // this event must be passed on to the Amiga core } int record_event = 1; if (playback) { record_event = 0; } int load_state = 0; int save_state = 0; if (action >= INPUTEVENT_SPC_STATESAVE1 && action <= INPUTEVENT_SPC_STATESAVE9) { save_state = action - INPUTEVENT_SPC_STATESAVE1 + 1; g_fs_uae_state_number = save_state; } if (action >= INPUTEVENT_SPC_STATERESTORE1 && action <= INPUTEVENT_SPC_STATERESTORE9) { load_state = action - INPUTEVENT_SPC_STATERESTORE1 + 1; g_fs_uae_state_number = load_state; } if (load_state) { #ifdef WITH_LUA fs_log("run handler on_fs_uae_load_state\n"); fs_emu_lua_run_handler("on_fs_uae_load_state"); #endif record_event = 0; } else if (save_state) { #ifdef WITH_LUA fs_log("run handler on_fs_uae_save_state\n"); fs_emu_lua_run_handler("on_fs_uae_save_state"); #endif record_event = 0; } if (record_event) { fs_uae_record_input_event(line, action, state); } amiga_send_input_event(action, state); if (load_state) { #ifdef WITH_LUA fs_log("run handler on_fs_uae_load_state_done\n"); fs_emu_lua_run_handler("on_fs_uae_load_state_done"); #endif } else if (save_state) { #ifdef WITH_LUA fs_log("run handler on_fs_uae_save_state_done\n"); fs_emu_lua_run_handler("on_fs_uae_save_state_done"); #endif } }