From 67c3c93aec6cb84f9a5372ee6c6bda3f33e25e95 Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Tue, 12 May 2020 01:04:39 +0200 Subject: [PATCH] dos fixes --- Makefile.griffin | 9 +- frontend/drivers/platform_dos.c | 127 ++++++++++++++++++------- gfx/drivers/vga_gfx.c | 4 +- libretro-common/include/retro_timers.h | 2 +- 4 files changed, 100 insertions(+), 42 deletions(-) diff --git a/Makefile.griffin b/Makefile.griffin index 8638508d4c..634ccc1472 100644 --- a/Makefile.griffin +++ b/Makefile.griffin @@ -882,7 +882,7 @@ else ifeq (dos,$(platform)) HAVE_OVERLAY := 1 HAVE_VIDEO_LAYOUT := 0 HAVE_MATERIALUI := 1 - HAVE_XMB := 1 + HAVE_XMB := 0 HAVE_STB_FONT := 1 HAVE_THREADS := 0 HAVE_LIBRETRODB := 1 @@ -901,9 +901,10 @@ else ifeq (dos,$(platform)) LDFLAGS += -g endif - PLATCFLAGS += -DHAVE_SHADERPIPELINE -DHAVE_OZONE -DHAVE_CC_RESAMPLER -DRC_DISABLE_LUA -DHAVE_FBO -DHAVE_GL_SYNC -DHAVE_IMAGEVIEWER -DHAVE_LANGEXTRA -DHAVE_RUNAHEAD -DHAVE_GFX_WIDGETS -DHAVE_CONFIGFILE -DHAVE_SPIRV_CROSS -DHAVE_STB_FONT -DHAVE_ONLINE_UPDATER -DHAVE_UPDATE_ASSETS -DHAVE_UPDATE_CORES -DHAVE_XMB -DRARCH_INTERNAL -DHAVE_XCB -DRARCH_MOBILE - EXT_TARGET := $(TARGET_NAME)_dos.exe - EXT_INTER_TARGET := $(TARGET_NAME)_dos.exe + PLATCFLAGS += -DHAVE_SHADERPIPELINE -DHAVE_CC_RESAMPLER -DRC_DISABLE_LUA -DHAVE_FBO -DHAVE_IMAGEVIEWER -DHAVE_LANGEXTRA -DHAVE_GFX_WIDGETS -DHAVE_CONFIGFILE -DHAVE_SPIRV_CROSS -DHAVE_STB_FONT -DRARCH_INTERNAL -DHAVE_XCB + TARGET_NAME := retrodos + EXT_TARGET := $(TARGET_NAME).exe + EXT_INTER_TARGET := $(TARGET_NAME).exe INCLUDE += -Ilibretro-common/include -Igfx/include -Ideps -Ideps/stb -Ideps/SPIRV-Cross -Ideps/glslang -I. LIBS += -lm LIBDIRS += -L. diff --git a/frontend/drivers/platform_dos.c b/frontend/drivers/platform_dos.c index 1d49f313cd..af8a312a97 100644 --- a/frontend/drivers/platform_dos.c +++ b/frontend/drivers/platform_dos.c @@ -21,59 +21,116 @@ static void frontend_dos_init(void *data) { - printf("Loading RetroArch...\n"); + printf("Loading RetroArch...\n"); } static void frontend_dos_shutdown(bool unused) { - (void)unused; + (void)unused; } static int frontend_dos_get_rating(void) { - return -1; + return -1; } enum frontend_architecture frontend_dos_get_architecture(void) { - return FRONTEND_ARCH_X86; + return FRONTEND_ARCH_X86; } static void frontend_dos_get_env_settings(int *argc, char *argv[], void *data, void *params_data) { + char base_path[PATH_MAX] = {0}; + int i; + + retro_main_log_file_init("retrodos.txt", false); + + strlcpy(base_path, "retrodos", sizeof(base_path)); + + fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE], base_path, + "cores", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE])); + fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_INFO], base_path, + "cores", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_INFO])); + fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_AUTOCONFIG], base_path, + "autoconf", sizeof(g_defaults.dirs[DEFAULT_DIR_AUTOCONFIG])); + + fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_ASSETS], base_path, + "assets", sizeof(g_defaults.dirs[DEFAULT_DIR_ASSETS])); + + fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_MENU_CONFIG], base_path, + "config", sizeof(g_defaults.dirs[DEFAULT_DIR_MENU_CONFIG])); + fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_REMAP], + g_defaults.dirs[DEFAULT_DIR_MENU_CONFIG], + "remaps", sizeof(g_defaults.dirs[DEFAULT_DIR_REMAP])); + fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_PLAYLIST], base_path, + "playlist", sizeof(g_defaults.dirs[DEFAULT_DIR_PLAYLIST])); + fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_RECORD_CONFIG], base_path, + "recrdcfg", sizeof(g_defaults.dirs[DEFAULT_DIR_RECORD_CONFIG])); + fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_RECORD_OUTPUT], base_path, + "records", sizeof(g_defaults.dirs[DEFAULT_DIR_RECORD_OUTPUT])); + fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CURSOR], base_path, + "database/cursors", sizeof(g_defaults.dirs[DEFAULT_DIR_CURSOR])); + fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_DATABASE], base_path, + "database/rdb", sizeof(g_defaults.dirs[DEFAULT_DIR_DATABASE])); + fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_SHADER], base_path, + "shaders", sizeof(g_defaults.dirs[DEFAULT_DIR_SHADER])); + fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CHEATS], base_path, + "cheats", sizeof(g_defaults.dirs[DEFAULT_DIR_CHEATS])); + fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_OVERLAY], base_path, + "overlay", sizeof(g_defaults.dirs[DEFAULT_DIR_OVERLAY])); +#ifdef HAVE_VIDEO_LAYOUT + fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_VIDEO_LAYOUT], base_path, + "layouts", sizeof(g_defaults.dirs[DEFAULT_DIR_VIDEO_LAYOUT])); +#endif + fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_ASSETS], base_path, + "download", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_ASSETS])); + fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_SCREENSHOT], base_path, + "scrnshot", sizeof(g_defaults.dirs[DEFAULT_DIR_SCREENSHOT])); + fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_THUMBNAILS], base_path, + "thumbs", sizeof(g_defaults.dirs[DEFAULT_DIR_THUMBNAILS])); + fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_LOGS], base_path, + "logs", sizeof(g_defaults.dirs[DEFAULT_DIR_LOGS])); + + for (i = 0; i < DEFAULT_DIR_LAST; i++) + { + const char *dir_path = g_defaults.dirs[i]; + if (!string_is_empty(dir_path)) + path_mkdir(dir_path); + } } frontend_ctx_driver_t frontend_ctx_dos = { - frontend_dos_get_env_settings,/* environment_get */ - frontend_dos_init, /* init */ - NULL, /* deinit */ - NULL, /* exitspawn */ - NULL, /* process_args */ - NULL, /* exec */ - NULL, /* set_fork */ - frontend_dos_shutdown, /* shutdown */ - NULL, /* get_name */ - NULL, /* get_os */ - frontend_dos_get_rating, /* get_rating */ - NULL, /* load_content */ - frontend_dos_get_architecture,/* get_architecture */ - NULL, /* get_powerstate */ - NULL, /* parse_drive_list */ - NULL, /* get_mem_total */ - NULL, /* get_mem_free */ - NULL, /* install_signal_handler */ - NULL, /* get_sighandler_state */ - NULL, /* set_sighandler_state */ - NULL, /* destroy_sighandler_state */ - NULL, /* attach_console */ - NULL, /* detach_console */ - NULL, /* watch_path_for_changes */ - NULL, /* check_for_path_changes */ - NULL, /* set_sustained_performance_mode */ - NULL, /* get_cpu_model_name */ - NULL, /* get_user_language */ - NULL, /* is_narrator_running */ - NULL, /* accessibility_speak */ - "dos", + frontend_dos_get_env_settings,/* environment_get */ + frontend_dos_init, /* init */ + NULL, /* deinit */ + NULL, /* exitspawn */ + NULL, /* process_args */ + NULL, /* exec */ + NULL, /* set_fork */ + frontend_dos_shutdown, /* shutdown */ + NULL, /* get_name */ + NULL, /* get_os */ + frontend_dos_get_rating, /* get_rating */ + NULL, /* load_content */ + frontend_dos_get_architecture,/* get_architecture */ + NULL, /* get_powerstate */ + NULL, /* parse_drive_list */ + NULL, /* get_mem_total */ + NULL, /* get_mem_free */ + NULL, /* install_signal_handler */ + NULL, /* get_sighandler_state */ + NULL, /* set_sighandler_state */ + NULL, /* destroy_sighandler_state */ + NULL, /* attach_console */ + NULL, /* detach_console */ + NULL, /* watch_path_for_changes */ + NULL, /* check_for_path_changes */ + NULL, /* set_sustained_performance_mode */ + NULL, /* get_cpu_model_name */ + NULL, /* get_user_language */ + NULL, /* is_narrator_running */ + NULL, /* accessibility_speak */ + "dos", }; diff --git a/gfx/drivers/vga_gfx.c b/gfx/drivers/vga_gfx.c index f59fe49e54..548d733dfd 100644 --- a/gfx/drivers/vga_gfx.c +++ b/gfx/drivers/vga_gfx.c @@ -33,7 +33,7 @@ static void vga_set_mode_13h(void) { - __dpmi_regs r; + __dpmi_regs r = {0}; r.x.ax = 0x13; __dpmi_int(0x10, &r); @@ -41,7 +41,7 @@ static void vga_set_mode_13h(void) static void vga_return_to_text_mode(void) { - __dpmi_regs r; + __dpmi_regs r = {0}; r.x.ax = 3; __dpmi_int(0x10, &r); diff --git a/libretro-common/include/retro_timers.h b/libretro-common/include/retro_timers.h index f82b9b352b..0e6dd923e7 100644 --- a/libretro-common/include/retro_timers.h +++ b/libretro-common/include/retro_timers.h @@ -68,7 +68,7 @@ extern int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); static int nanosleepDOS(const struct timespec *rqtp, struct timespec *rmtp) { - usleep(1000000 * rqtp->tv_sec + rqtp->tv_nsec / 1000); + usleep(1000000L * rqtp->tv_sec + rqtp->tv_nsec / 1000); if (rmtp) rmtp->tv_sec = rmtp->tv_nsec=0;