From 9fba90ac323df5d2ad87735f6033ae720e5cb892 Mon Sep 17 00:00:00 2001 From: kub Date: Thu, 5 Sep 2024 22:00:30 +0200 Subject: [PATCH 1/4] fix some warnings --- linux/host_dasm.c | 28 +++++++++++++++++++++++----- linux/plat.c | 5 ++++- menu.c | 2 +- plat_sdl.c | 3 ++- posix.h | 5 ++++- 5 files changed, 34 insertions(+), 9 deletions(-) diff --git a/linux/host_dasm.c b/linux/host_dasm.c index a5e66c9..a46a073 100644 --- a/linux/host_dasm.c +++ b/linux/host_dasm.c @@ -24,17 +24,17 @@ static struct disassemble_info di; static disassembler_ftype print_insn_func; #if defined __arm__ -#define print_insn_func print_insn_little_arm +//#define print_insn_func print_insn_little_arm #define BFD_ARCH bfd_arch_arm #define BFD_MACH bfd_mach_arm_unknown #define DASM_OPTS "reg-names-std" #elif defined __aarch64__ -#define print_insn_func print_insn_aarch64 +//#define print_insn_func print_insn_aarch64 #define BFD_ARCH bfd_arch_aarch64 #define BFD_MACH bfd_mach_aarch64 #define DASM_OPTS NULL #elif defined __mips__ -#define print_insn_func print_insn_little_mips +//#define print_insn_func print_insn_little_mips #define BFD_ARCH bfd_arch_mips #define BFD_MACH bfd_mach_mipsisa64r2 #define DASM_OPTS NULL @@ -44,12 +44,12 @@ static disassembler_ftype print_insn_func; #define BFD_MACH bfd_mach_riscv64 #define DASM_OPTS NULL #elif defined __powerpc__ -#define print_insn_func print_insn_little_powerpc +//#define print_insn_func print_insn_little_powerpc #define BFD_ARCH bfd_arch_powerpc #define BFD_MACH bfd_mach_ppc64 #define DASM_OPTS NULL #elif defined(__x86_64__) || defined(__i386__) -#define print_insn_func print_insn_i386_intel +//#define print_insn_func print_insn_i386_intel #define BFD_ARCH bfd_arch_i386 #ifdef __x86_64__ #define BFD_MACH bfd_mach_x86_64_intel_syntax @@ -205,13 +205,31 @@ static int print_insn_hex(bfd_vma addr, struct disassemble_info *info) return 4; } +#ifdef BFD_COMPRESS_ZSTD +static int insn_printf_styled(void *f, enum disassembler_style style, const char* format, ...) +{ + va_list args; + size_t n; + + va_start(args, format); + n = vprintf(format, args); + va_end(args); + + return n; +} +#endif + static void host_dasm_init(void) { bfd_init(); if (g_argv && g_argv[0]) slurp_symtab(g_argv[0]); +#ifdef BFD_COMPRESS_ZSTD + init_disassemble_info(&di, NULL, insn_printf, insn_printf_styled); +#else init_disassemble_info(&di, NULL, insn_printf); +#endif di.flavour = bfd_target_unknown_flavour; di.memory_error_func = dis_asm_memory_error; di.print_address_func = dis_asm_print_address; diff --git a/linux/plat.c b/linux/plat.c index 9ed3637..c4ce811 100644 --- a/linux/plat.c +++ b/linux/plat.c @@ -17,11 +17,14 @@ #include #include #include -#include #include #include +#ifndef __MINGW32__ +#include +#endif #include "../plat.h" +#include "../posix.h" /* XXX: maybe unhardcode pagesize? */ #define HUGETLB_PAGESIZE (2 * 1024 * 1024) diff --git a/menu.c b/menu.c index 5eb48b9..72c913b 100644 --- a/menu.c +++ b/menu.c @@ -1161,7 +1161,7 @@ rescan: } else { strcpy(newdir, curr_path); p = newdir + strlen(newdir) - 1; - while (*p == '/' && p >= newdir) *p-- = 0; + while (p >= newdir && *p == '/') *p-- = 0; strcat(newdir, "/"); strcat(newdir, namelist[sel]->d_name); } diff --git a/plat_sdl.c b/plat_sdl.c index 2d537f0..ff92c6a 100644 --- a/plat_sdl.c +++ b/plat_sdl.c @@ -10,6 +10,7 @@ */ #include +#include #include #include @@ -107,7 +108,7 @@ int plat_sdl_change_video_mode(int w, int h, int force) int W = plat_target.vout_method == vout_mode_overlay2x && w < 640 ? 2*w : w; plat_sdl_overlay = SDL_CreateYUVOverlay(W, h, SDL_UYVY_OVERLAY, plat_sdl_screen); if (plat_sdl_overlay != NULL && SDL_LockYUVOverlay(plat_sdl_overlay) == 0) { - if ((long)plat_sdl_overlay->pixels[0] & 3) + if ((uintptr_t)plat_sdl_overlay->pixels[0] & 3) fprintf(stderr, "warning: overlay pointer is unaligned\n"); plat_sdl_overlay_clear(); diff --git a/posix.h b/posix.h index 15d217f..003bb7a 100644 --- a/posix.h +++ b/posix.h @@ -14,7 +14,10 @@ #define mkdir(pathname,mode) mkdir(pathname) #define d_type d_ino #define DT_REG 0 -#define DT_DIR 0 +#define DT_DIR 1 +#define DT_LNK 2 +#define DT_UNKNOWN -1 +#define readlink(p,d,s) -1 #endif #else From 65f8fc5e396f342f0691c7024f10af5d472dedc2 Mon Sep 17 00:00:00 2001 From: kub Date: Tue, 10 Sep 2024 22:28:51 +0200 Subject: [PATCH 2/4] fix repeated redraw events --- input.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/input.c b/input.c index 4f91a55..4bf2e32 100644 --- a/input.c +++ b/input.c @@ -357,8 +357,13 @@ int in_update_keycode(int *dev_id_out, int *is_down_out, char *charcode, int tim if (in_have_async_devs) { result = in_update_kc_async(&dev_id, &is_down, timeout_ms); - if (result == -1) + if (result == -1) { +#ifdef SDL_REDRAW_EVT + // no key up event for RDRAW, clear to avoid key repeat + menu_key_state &= ~PBTN_RDRAW; +#endif return -1; + } drv = &DRV(in_devices[dev_id].drv_id); goto finish; } From fbbf5e3fc0aff858e206dd98ce4605b960d397cb Mon Sep 17 00:00:00 2001 From: kub Date: Tue, 10 Sep 2024 22:30:54 +0200 Subject: [PATCH 3/4] better support for resizable windows --- plat.h | 1 + plat_sdl.c | 13 +++++++++---- plat_sdl.h | 1 + 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/plat.h b/plat.h index a5dfc79..8385d06 100644 --- a/plat.h +++ b/plat.h @@ -119,6 +119,7 @@ static __inline int plat_target_switch_layer(int which, int enable) } /* menu: enter (switch bpp, etc), begin/end drawing */ +void plat_video_menu_update(void); void plat_video_menu_enter(int is_rom_loaded); void plat_video_menu_begin(void); void plat_video_menu_end(void); diff --git a/plat_sdl.c b/plat_sdl.c index ff92c6a..f90827a 100644 --- a/plat_sdl.c +++ b/plat_sdl.c @@ -145,7 +145,8 @@ int plat_sdl_change_video_mode(int w, int h, int force) flags |= SDL_FULLSCREEN; win_w = fs_w; win_h = fs_h; - } + } else if (window_b) + flags |= SDL_RESIZABLE; SDL_PumpEvents(); @@ -174,12 +175,12 @@ void plat_sdl_event_handler(void *event_) switch (event->type) { case SDL_VIDEORESIZE: //printf("resize %dx%d\n", event->resize.w, event->resize.h); - if (plat_target.vout_method != 0 - && !plat_target.vout_fullscreen && !old_fullscreen) + if ((plat_target.vout_method != 0 || window_b) && + !plat_target.vout_fullscreen && !old_fullscreen) { window_w = event->resize.w & ~3; window_h = event->resize.h & ~3; - plat_sdl_change_video_mode(0, 0, 1); + plat_sdl_change_video_mode(window_w, window_h, 1); } break; case SDL_ACTIVEEVENT: @@ -378,4 +379,8 @@ void plat_sdl_overlay_clear(void) *dst = v; } +int plat_sdl_is_windowed(void) +{ + return window_b != 0; +} // vim:shiftwidth=2:expandtab diff --git a/plat_sdl.h b/plat_sdl.h index a953265..13e5197 100644 --- a/plat_sdl.h +++ b/plat_sdl.h @@ -7,6 +7,7 @@ extern void (*plat_sdl_resize_cb)(int w, int h); extern void (*plat_sdl_quit_cb)(void); int plat_sdl_init(void); +int plat_sdl_is_windowed(void); int plat_sdl_change_video_mode(int w, int h, int force); void plat_sdl_overlay_clear(void); void plat_sdl_event_handler(void *event_); From 86a086ed64aadc1e87fc58a90703a07d91c9cdbe Mon Sep 17 00:00:00 2001 From: kub Date: Sun, 13 Oct 2024 20:04:56 +0200 Subject: [PATCH 4/4] automatically map input devs of same type to different players --- input.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/input.c b/input.c index 4bf2e32..a39f3b5 100644 --- a/input.c +++ b/input.c @@ -41,6 +41,7 @@ static int in_driver_count = 0; static int in_dev_count = 0; /* probed + bind devices */ static int in_have_async_devs = 0; static int in_probe_dev_id; +static int in_probe_dev_ix; static int menu_key_state = 0; static int menu_last_used_dev = 0; static int menu_key_prev = 0; @@ -69,8 +70,13 @@ static int *in_alloc_binds(int drv_id, int key_count) && defbinds[i].bit == 0) break; - binds_d[IN_BIND_OFFS(defbinds[i].code, defbinds[i].btype)] |= - 1 << defbinds[i].bit; + if (defbinds[i].btype == IN_BINDTYPE_PLAYER12) { + unsigned btype = IN_BINDTYPE_PLAYER12 + (in_probe_dev_ix >= 2); + binds_d[IN_BIND_OFFS(defbinds[i].code, btype)] |= + 1 <<(defbinds[i].bit + (in_probe_dev_ix&1)*16); + } else + binds_d[IN_BIND_OFFS(defbinds[i].code, defbinds[i].btype)] |= + 1 << defbinds[i].bit; } } @@ -170,6 +176,7 @@ update: in_devices[i].binds = NULL; } } + in_probe_dev_ix ++; } /* key combo handling, to be called by drivers that support it. @@ -252,6 +259,7 @@ void in_probe(void) for (i = 0; i < in_driver_count; i++) { in_probe_dev_id = i; + in_probe_dev_ix = 0; in_drivers[i].probe(&DRV(i)); }