summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/sdl/sdlmain.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/osd/sdl/sdlmain.cpp')
-rw-r--r--src/osd/sdl/sdlmain.cpp442
1 files changed, 19 insertions, 423 deletions
diff --git a/src/osd/sdl/sdlmain.cpp b/src/osd/sdl/sdlmain.cpp
index 37d1434a2e8..1933bde1de6 100644
--- a/src/osd/sdl/sdlmain.cpp
+++ b/src/osd/sdl/sdlmain.cpp
@@ -2,12 +2,30 @@
// copyright-holders:Olivier Galibert, R. Belmont
//============================================================
//
-// sdlmain.c - main file for SDLMAME.
+// sdlmain.cpp - main file for SDLMAME.
//
// SDLMAME by Olivier Galibert and R. Belmont
//
//============================================================
+// OSD headers
+#include "osdsdl.h"
+#include "modules/lib/osdlib.h"
+#include "modules/diagnostics/diagnostics_module.h"
+
+// MAME headers
+#include "emu.h"
+#include "emuopts.h"
+#include "main.h"
+#include "video.h"
+
+#include "corestr.h"
+
+#include "osdepend.h"
+#include "strconv.h"
+
+#include <SDL2/SDL.h>
+
// only for oslog callback
#include <functional>
@@ -28,39 +46,6 @@
#include <unistd.h>
#endif
-// only for strconv.h
-#if defined(SDLMAME_WIN32)
-#include <windows.h>
-#endif
-
-#include <SDL2/SDL.h>
-
-// MAME headers
-#include "osdepend.h"
-#include "emu.h"
-#include "emuopts.h"
-#include "strconv.h"
-
-// OSD headers
-#include "video.h"
-#include "osdsdl.h"
-#include "modules/lib/osdlib.h"
-#include "modules/diagnostics/diagnostics_module.h"
-
-//============================================================
-// OPTIONS
-//============================================================
-
-#ifndef INI_PATH
-#if defined(SDLMAME_WIN32)
- #define INI_PATH ".;ini;ini/presets"
-#elif defined(SDLMAME_MACOSX)
- #define INI_PATH "$HOME/Library/Application Support/APP_NAME;$HOME/.APP_NAME;.;ini"
-#else
- #define INI_PATH "$HOME/.APP_NAME;.;ini"
-#endif // MACOSX
-#endif // INI_PATH
-
//============================================================
// Global variables
@@ -70,108 +55,6 @@
int sdl_entered_debugger;
#endif
-//============================================================
-// Local variables
-//============================================================
-
-const options_entry sdl_options::s_option_entries[] =
-{
- { SDLOPTION_INIPATH, INI_PATH, OPTION_STRING, "path to ini files" },
-
- // performance options
- { nullptr, nullptr, OPTION_HEADER, "SDL PERFORMANCE OPTIONS" },
- { SDLOPTION_SDLVIDEOFPS, "0", OPTION_BOOLEAN, "show sdl video performance" },
- // video options
- { nullptr, nullptr, OPTION_HEADER, "SDL VIDEO OPTIONS" },
-// OS X can be trusted to have working hardware OpenGL, so default to it on for the best user experience
- { SDLOPTION_CENTERH, "1", OPTION_BOOLEAN, "center horizontally within the view area" },
- { SDLOPTION_CENTERV, "1", OPTION_BOOLEAN, "center vertically within the view area" },
- { SDLOPTION_SCALEMODE ";sm", OSDOPTVAL_NONE, OPTION_STRING, "Scale mode: none, hwblit, hwbest, yv12, yuy2, yv12x2, yuy2x2 (-video soft only)" },
-
- // full screen options
- #ifdef SDLMAME_X11
- { nullptr, nullptr, OPTION_HEADER, "SDL FULL SCREEN OPTIONS" },
- { SDLOPTION_USEALLHEADS, "0", OPTION_BOOLEAN, "split full screen image across monitors" },
- #endif
-
- // keyboard mapping
- { nullptr, nullptr, OPTION_HEADER, "SDL KEYBOARD MAPPING" },
- { SDLOPTION_KEYMAP, "0", OPTION_BOOLEAN, "enable keymap" },
- { SDLOPTION_KEYMAP_FILE, "keymap.dat", OPTION_STRING, "keymap filename" },
-
- // joystick mapping
- { nullptr, nullptr, OPTION_HEADER, "SDL JOYSTICK MAPPING" },
- { SDLOPTION_JOYINDEX "1", OSDOPTVAL_AUTO, OPTION_STRING, "name of joystick mapped to joystick #1" },
- { SDLOPTION_JOYINDEX "2", OSDOPTVAL_AUTO, OPTION_STRING, "name of joystick mapped to joystick #2" },
- { SDLOPTION_JOYINDEX "3", OSDOPTVAL_AUTO, OPTION_STRING, "name of joystick mapped to joystick #3" },
- { SDLOPTION_JOYINDEX "4", OSDOPTVAL_AUTO, OPTION_STRING, "name of joystick mapped to joystick #4" },
- { SDLOPTION_JOYINDEX "5", OSDOPTVAL_AUTO, OPTION_STRING, "name of joystick mapped to joystick #5" },
- { SDLOPTION_JOYINDEX "6", OSDOPTVAL_AUTO, OPTION_STRING, "name of joystick mapped to joystick #6" },
- { SDLOPTION_JOYINDEX "7", OSDOPTVAL_AUTO, OPTION_STRING, "name of joystick mapped to joystick #7" },
- { SDLOPTION_JOYINDEX "8", OSDOPTVAL_AUTO, OPTION_STRING, "name of joystick mapped to joystick #8" },
- { SDLOPTION_SIXAXIS, "0", OPTION_BOOLEAN, "use special handling for PS3 Sixaxis controllers" },
-
-#if (USE_XINPUT)
- // lightgun mapping
- { nullptr, nullptr, OPTION_HEADER, "SDL LIGHTGUN MAPPING" },
- { SDLOPTION_LIGHTGUNINDEX "1", OSDOPTVAL_AUTO, OPTION_STRING, "name of lightgun mapped to lightgun #1" },
- { SDLOPTION_LIGHTGUNINDEX "2", OSDOPTVAL_AUTO, OPTION_STRING, "name of lightgun mapped to lightgun #2" },
- { SDLOPTION_LIGHTGUNINDEX "3", OSDOPTVAL_AUTO, OPTION_STRING, "name of lightgun mapped to lightgun #3" },
- { SDLOPTION_LIGHTGUNINDEX "4", OSDOPTVAL_AUTO, OPTION_STRING, "name of lightgun mapped to lightgun #4" },
- { SDLOPTION_LIGHTGUNINDEX "5", OSDOPTVAL_AUTO, OPTION_STRING, "name of lightgun mapped to lightgun #5" },
- { SDLOPTION_LIGHTGUNINDEX "6", OSDOPTVAL_AUTO, OPTION_STRING, "name of lightgun mapped to lightgun #6" },
- { SDLOPTION_LIGHTGUNINDEX "7", OSDOPTVAL_AUTO, OPTION_STRING, "name of lightgun mapped to lightgun #7" },
- { SDLOPTION_LIGHTGUNINDEX "8", OSDOPTVAL_AUTO, OPTION_STRING, "name of lightgun mapped to lightgun #8" },
-#endif
-
- { nullptr, nullptr, OPTION_HEADER, "SDL MOUSE MAPPING" },
- { SDLOPTION_MOUSEINDEX "1", OSDOPTVAL_AUTO, OPTION_STRING, "name of mouse mapped to mouse #1" },
- { SDLOPTION_MOUSEINDEX "2", OSDOPTVAL_AUTO, OPTION_STRING, "name of mouse mapped to mouse #2" },
- { SDLOPTION_MOUSEINDEX "3", OSDOPTVAL_AUTO, OPTION_STRING, "name of mouse mapped to mouse #3" },
- { SDLOPTION_MOUSEINDEX "4", OSDOPTVAL_AUTO, OPTION_STRING, "name of mouse mapped to mouse #4" },
- { SDLOPTION_MOUSEINDEX "5", OSDOPTVAL_AUTO, OPTION_STRING, "name of mouse mapped to mouse #5" },
- { SDLOPTION_MOUSEINDEX "6", OSDOPTVAL_AUTO, OPTION_STRING, "name of mouse mapped to mouse #6" },
- { SDLOPTION_MOUSEINDEX "7", OSDOPTVAL_AUTO, OPTION_STRING, "name of mouse mapped to mouse #7" },
- { SDLOPTION_MOUSEINDEX "8", OSDOPTVAL_AUTO, OPTION_STRING, "name of mouse mapped to mouse #8" },
-
- { nullptr, nullptr, OPTION_HEADER, "SDL KEYBOARD MAPPING" },
- { SDLOPTION_KEYBINDEX "1", OSDOPTVAL_AUTO, OPTION_STRING, "name of keyboard mapped to keyboard #1" },
- { SDLOPTION_KEYBINDEX "2", OSDOPTVAL_AUTO, OPTION_STRING, "name of keyboard mapped to keyboard #2" },
- { SDLOPTION_KEYBINDEX "3", OSDOPTVAL_AUTO, OPTION_STRING, "name of keyboard mapped to keyboard #3" },
- { SDLOPTION_KEYBINDEX "4", OSDOPTVAL_AUTO, OPTION_STRING, "name of keyboard mapped to keyboard #4" },
- { SDLOPTION_KEYBINDEX "5", OSDOPTVAL_AUTO, OPTION_STRING, "name of keyboard mapped to keyboard #5" },
- { SDLOPTION_KEYBINDEX "6", OSDOPTVAL_AUTO, OPTION_STRING, "name of keyboard mapped to keyboard #6" },
- { SDLOPTION_KEYBINDEX "7", OSDOPTVAL_AUTO, OPTION_STRING, "name of keyboard mapped to keyboard #7" },
- { SDLOPTION_KEYBINDEX "8", OSDOPTVAL_AUTO, OPTION_STRING, "name of keyboard mapped to keyboard #8" },
-
- // SDL low level driver options
- { nullptr, nullptr, OPTION_HEADER, "SDL LOW-LEVEL DRIVER OPTIONS" },
- { SDLOPTION_VIDEODRIVER ";vd", OSDOPTVAL_AUTO, OPTION_STRING, "SDL video driver to use ('x11', 'directfb', ... or 'auto' for SDL default" },
- { SDLOPTION_RENDERDRIVER ";rd", OSDOPTVAL_AUTO, OPTION_STRING, "SDL render driver to use ('software', 'opengl', 'directfb' ... or 'auto' for SDL default" },
- { SDLOPTION_AUDIODRIVER ";ad", OSDOPTVAL_AUTO, OPTION_STRING, "SDL audio driver to use ('alsa', 'arts', ... or 'auto' for SDL default" },
-#if USE_OPENGL
- { SDLOPTION_GL_LIB, SDLOPTVAL_GLLIB, OPTION_STRING, "alternative libGL.so to use; 'auto' for system default" },
-#endif
-
- // End of list
- { nullptr }
-};
-
-//============================================================
-// sdl_options
-//============================================================
-
-sdl_options::sdl_options()
-: osd_options()
-{
-#if defined (SDLMAME_ANDROID)
- chdir (SDL_AndroidGetExternalStoragePath());
-#endif
- std::string ini_path(INI_PATH);
- add_entries(sdl_options::s_option_entries);
- strreplace(ini_path,"APP_NAME", emulator_info::get_appname_lower());
- set_default_value(SDLOPTION_INIPATH, ini_path.c_str());
-}
//============================================================
// main
@@ -228,290 +111,3 @@ int main(int argc, char** argv)
exit(res);
}
-
-//============================================================
-// constructor
-//============================================================
-
-sdl_osd_interface::sdl_osd_interface(sdl_options &options)
-: osd_common_t(options), m_options(options)
-{
-}
-
-
-//============================================================
-// destructor
-//============================================================
-
-sdl_osd_interface::~sdl_osd_interface()
-{
-}
-
-
-//============================================================
-// osd_exit
-//============================================================
-
-void sdl_osd_interface::osd_exit()
-{
- osd_common_t::osd_exit();
-
- SDL_QuitSubSystem(SDL_INIT_VIDEO);
-}
-
-//============================================================
-// defines_verbose
-//============================================================
-
-#define MAC_EXPAND_STR(_m) #_m
-#define MACRO_VERBOSE(_mac) \
- do { \
- if (strcmp(MAC_EXPAND_STR(_mac), #_mac) != 0) \
- osd_printf_verbose("%s=%s ", #_mac, MAC_EXPAND_STR(_mac)); \
- } while (0)
-
-#define _SDL_VER #SDL_MAJOR_VERSION "." #SDL_MINOR_VERSION "." #SDL_PATCHLEVEL
-
-static void defines_verbose(void)
-{
- osd_printf_verbose("Build version: %s\n", emulator_info::get_build_version());
- osd_printf_verbose("Build architecure: ");
- MACRO_VERBOSE(SDLMAME_ARCH);
- osd_printf_verbose("\n");
- osd_printf_verbose("Build defines 1: ");
- MACRO_VERBOSE(SDLMAME_UNIX);
- MACRO_VERBOSE(SDLMAME_X11);
- MACRO_VERBOSE(SDLMAME_WIN32);
- MACRO_VERBOSE(SDLMAME_MACOSX);
- MACRO_VERBOSE(SDLMAME_DARWIN);
- MACRO_VERBOSE(SDLMAME_LINUX);
- MACRO_VERBOSE(SDLMAME_SOLARIS);
- MACRO_VERBOSE(SDLMAME_IRIX);
- MACRO_VERBOSE(SDLMAME_BSD);
- osd_printf_verbose("\n");
- osd_printf_verbose("Build defines 1: ");
- MACRO_VERBOSE(LSB_FIRST);
- MACRO_VERBOSE(PTR64);
- MACRO_VERBOSE(MAME_NOASM);
- MACRO_VERBOSE(MAME_DEBUG);
- MACRO_VERBOSE(BIGENDIAN);
- MACRO_VERBOSE(CPP_COMPILE);
- MACRO_VERBOSE(SYNC_IMPLEMENTATION);
- osd_printf_verbose("\n");
- osd_printf_verbose("SDL/OpenGL defines: ");
- osd_printf_verbose("SDL_COMPILEDVERSION=%d ", SDL_COMPILEDVERSION);
- MACRO_VERBOSE(USE_OPENGL);
- MACRO_VERBOSE(USE_DISPATCH_GL);
- osd_printf_verbose("\n");
- osd_printf_verbose("Compiler defines A: ");
- MACRO_VERBOSE(__GNUC__);
- MACRO_VERBOSE(__GNUC_MINOR__);
- MACRO_VERBOSE(__GNUC_PATCHLEVEL__);
- MACRO_VERBOSE(__VERSION__);
- osd_printf_verbose("\n");
- osd_printf_verbose("Compiler defines B: ");
- MACRO_VERBOSE(__amd64__);
- MACRO_VERBOSE(__x86_64__);
- MACRO_VERBOSE(__unix__);
- MACRO_VERBOSE(__i386__);
- MACRO_VERBOSE(__ppc__);
- MACRO_VERBOSE(__ppc64__);
- osd_printf_verbose("\n");
- osd_printf_verbose("Compiler defines C: ");
- MACRO_VERBOSE(_FORTIFY_SOURCE);
- MACRO_VERBOSE(__USE_FORTIFY_LEVEL);
- osd_printf_verbose("\n");
-}
-
-//============================================================
-// osd_sdl_info
-//============================================================
-
-static void osd_sdl_info(void)
-{
- int i, num = SDL_GetNumVideoDrivers();
-
- osd_printf_verbose("Available videodrivers: ");
- for (i=0;i<num;i++)
- {
- const char *name = SDL_GetVideoDriver(i);
- osd_printf_verbose("%s ", name);
- }
- osd_printf_verbose("\n");
- osd_printf_verbose("Current Videodriver: %s\n", SDL_GetCurrentVideoDriver());
- num = SDL_GetNumVideoDisplays();
- for (i=0;i<num;i++)
- {
- SDL_DisplayMode mode;
- int j;
-
- osd_printf_verbose("\tDisplay #%d\n", i);
- if (SDL_GetDesktopDisplayMode(i, &mode))
- osd_printf_verbose("\t\tDesktop Mode: %dx%d-%d@%d\n", mode.w, mode.h, SDL_BITSPERPIXEL(mode.format), mode.refresh_rate);
- if (SDL_GetCurrentDisplayMode(i, &mode))
- osd_printf_verbose("\t\tCurrent Display Mode: %dx%d-%d@%d\n", mode.w, mode.h, SDL_BITSPERPIXEL(mode.format), mode.refresh_rate);
- osd_printf_verbose("\t\tRenderdrivers:\n");
- for (j=0; j<SDL_GetNumRenderDrivers(); j++)
- {
- SDL_RendererInfo info;
- SDL_GetRenderDriverInfo(j, &info);
- osd_printf_verbose("\t\t\t%10s (%dx%d)\n", info.name, info.max_texture_width, info.max_texture_height);
- }
- }
-
- osd_printf_verbose("Available audio drivers: \n");
- num = SDL_GetNumAudioDrivers();
- for (i=0;i<num;i++)
- {
- osd_printf_verbose("\t%-20s\n", SDL_GetAudioDriver(i));
- }
-}
-
-
-//============================================================
-// video_register
-//============================================================
-
-void sdl_osd_interface::video_register()
-{
- video_options_add("soft", nullptr);
- video_options_add("accel", nullptr);
-#if USE_OPENGL
- video_options_add("opengl", nullptr);
-#endif
- video_options_add("bgfx", nullptr);
- //video_options_add("auto", nullptr); // making d3d video default one
-}
-
-
-//============================================================
-// output_oslog
-//============================================================
-
-void sdl_osd_interface::output_oslog(const char *buffer)
-{
- fputs(buffer, stderr);
-}
-
-
-//============================================================
-// osd_setup_osd_specific_emu_options
-//============================================================
-
-void osd_setup_osd_specific_emu_options(emu_options &opts)
-{
- opts.add_entries(osd_options::s_option_entries);
-}
-
-
-//============================================================
-// init
-//============================================================
-
-void sdl_osd_interface::init(running_machine &machine)
-{
- // call our parent
- osd_common_t::init(machine);
-
- const char *stemp;
-
- // determine if we are benchmarking, and adjust options appropriately
- int bench = options().bench();
- if (bench > 0)
- {
- options().set_value(OPTION_THROTTLE, false, OPTION_PRIORITY_MAXIMUM);
- options().set_value(OSDOPTION_SOUND, "none", OPTION_PRIORITY_MAXIMUM);
- options().set_value(OSDOPTION_VIDEO, "none", OPTION_PRIORITY_MAXIMUM);
- options().set_value(OPTION_SECONDS_TO_RUN, bench, OPTION_PRIORITY_MAXIMUM);
- }
-
- // Some driver options - must be before audio init!
- stemp = options().audio_driver();
- if (stemp != nullptr && strcmp(stemp, OSDOPTVAL_AUTO) != 0)
- {
- osd_printf_verbose("Setting SDL audiodriver '%s' ...\n", stemp);
- osd_setenv(SDLENV_AUDIODRIVER, stemp, 1);
- }
-
- stemp = options().video_driver();
- if (stemp != nullptr && strcmp(stemp, OSDOPTVAL_AUTO) != 0)
- {
- osd_printf_verbose("Setting SDL videodriver '%s' ...\n", stemp);
- osd_setenv(SDLENV_VIDEODRIVER, stemp, 1);
- }
-
- stemp = options().render_driver();
- if (stemp != nullptr)
- {
- if (strcmp(stemp, OSDOPTVAL_AUTO) != 0)
- {
- osd_printf_verbose("Setting SDL renderdriver '%s' ...\n", stemp);
- //osd_setenv(SDLENV_RENDERDRIVER, stemp, 1);
- SDL_SetHint(SDL_HINT_RENDER_DRIVER, stemp);
- }
- else
- {
-#if defined(SDLMAME_WIN32)
- // OpenGL renderer has less issues with mode switching on windows
- osd_printf_verbose("Setting SDL renderdriver '%s' ...\n", "opengl");
- //osd_setenv(SDLENV_RENDERDRIVER, stemp, 1);
- SDL_SetHint(SDL_HINT_RENDER_DRIVER, "opengl");
-#endif
- }
- }
-
- /* Set the SDL environment variable for drivers wanting to load the
- * lib at startup.
- */
-#if USE_OPENGL
- /* FIXME: move lib loading code from drawogl.c here */
-
- stemp = options().gl_lib();
- if (stemp != nullptr && strcmp(stemp, OSDOPTVAL_AUTO) != 0)
- {
- osd_setenv("SDL_VIDEO_GL_DRIVER", stemp, 1);
- osd_printf_verbose("Setting SDL_VIDEO_GL_DRIVER = '%s' ...\n", stemp);
- }
-#endif
-
- /* get number of processors */
- stemp = options().numprocessors();
-
- osd_num_processors = 0;
-
- if (strcmp(stemp, "auto") != 0)
- {
- osd_num_processors = atoi(stemp);
- if (osd_num_processors < 1)
- {
- osd_printf_warning("numprocessors < 1 doesn't make much sense. Assuming auto ...\n");
- osd_num_processors = 0;
- }
- }
-
- /* Initialize SDL */
-
- if (SDL_InitSubSystem(SDL_INIT_VIDEO)) {
- osd_printf_error("Could not initialize SDL %s\n", SDL_GetError());
- exit(-1);
- }
- osd_sdl_info();
-
- defines_verbose();
-
- osd_common_t::init_subsystems();
-
- if (options().oslog())
- {
- using namespace std::placeholders;
- machine.add_logerror_callback(std::bind(&sdl_osd_interface::output_oslog, this, _1));
- }
-
-
-
-#ifdef SDLMAME_EMSCRIPTEN
- SDL_EventState(SDL_TEXTINPUT, SDL_FALSE);
-#else
- SDL_EventState(SDL_TEXTINPUT, SDL_TRUE);
-#endif
-}