/* SSNES - A Super Nintendo Entertainment System (SNES) Emulator frontend for libsnes. * Copyright (C) 2010-2011 - Hans-Kristian Arntzen * * Some code herein may be based on code found in BSNES. * * SSNES is free software: you can redistribute it and/or modify it under the terms * of the GNU General Public License as published by the Free Software Found- * ation, either version 3 of the License, or (at your option) any later version. * * SSNES is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with SSNES. * If not, see . */ #ifndef __SSNES_GENERAL_H #define __SSNES_GENERAL_H #include #include "driver.h" #include #include "record/ffemu.h" #include "message.h" #include "rewind.h" #include "movie.h" #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef HAVE_SRC #include #endif #define MAX_PLAYERS 5 #define MAX_BINDS 24 // Needs to be increased every time there are new binds added. #define SSNES_NO_JOYPAD 0xFFFF struct settings { struct { char driver[32]; float xscale; float yscale; bool fullscreen; unsigned fullscreen_x; unsigned fullscreen_y; bool vsync; bool smooth; bool force_aspect; float aspect_ratio; char cg_shader_path[256]; char bsnes_shader_path[256]; unsigned filter; char font_path[256]; unsigned font_size; float msg_pos_x; float msg_pos_y; } video; struct { char driver[32]; bool enable; unsigned out_rate; float in_rate; float rate_step; char device[256]; unsigned latency; bool sync; int src_quality; } audio; struct { char driver[32]; struct snes_keybind binds[MAX_PLAYERS][MAX_BINDS]; float axis_threshold; unsigned joypad_map[MAX_PLAYERS]; } input; char libsnes[256]; bool rewind_enable; unsigned rewind_buffer_size; unsigned rewind_granularity; }; enum ssnes_game_type { SSNES_CART_NORMAL = 0, SSNES_CART_SGB, SSNES_CART_BSX, SSNES_CART_BSX_SLOTTED, SSNES_CART_SUFAMI, }; struct global { bool verbose; SRC_STATE *source; bool audio_active; bool video_active; bool has_mouse[2]; bool has_scope[2]; bool has_justifier; bool has_justifiers; bool has_multitap; FILE *rom_file; enum ssnes_game_type game_type; uint32_t cart_crc; char gb_rom_path[256]; char bsx_rom_path[256]; char sufami_rom_path[2][256]; #ifdef HAVE_CONFIGFILE char config_path[256]; #endif char basename[256]; char savefile_name_srm[256]; char savefile_name_rtc[512]; // Make sure that fill_pathname has space. char savefile_name_psrm[512]; char savefile_name_asrm[512]; char savefile_name_bsrm[512]; char savestate_name[256]; unsigned state_slot; struct { float *data; size_t data_ptr; size_t chunk_size; size_t nonblock_chunk_size; size_t block_chunk_size; bool use_float; float *outsamples; int16_t *conv_outsamples; } audio_data; msg_queue_t *msg_queue; state_manager_t *state_manager; void *state_buf; bool frame_is_reverse; bsv_movie_t *bsv_movie; char bsv_movie_path[256]; bool bsv_movie_end; bool bsv_movie_playback; #ifdef HAVE_FFMPEG ffemu_t *rec; char record_path[256]; bool recording; #endif }; void parse_config(void); extern struct settings g_settings; extern struct global g_extern; #define SSNES_LOG(msg, args...) do { \ if (g_extern.verbose) \ fprintf(stderr, "SSNES: " msg, ##args); \ fflush(stderr); \ } while(0) #define SSNES_ERR(msg, args...) do { \ fprintf(stderr, "SSNES [ERROR] :: " msg, ##args); \ fflush(stderr); \ } while(0) #define SSNES_WARN(msg, args...) do { \ fprintf(stderr, "SSNES [WARN] :: " msg, ##args); \ fflush(stderr); \ } while(0) #endif