From d66e039536836f5d224fffa5a6cb053393d6fee0 Mon Sep 17 00:00:00 2001 From: Themaister Date: Mon, 2 Jan 2012 15:42:53 +0100 Subject: [PATCH] Fix 15->16 bit conversions. --- dynamic.c | 14 ++++++++++++-- wii/input.c | 2 +- wii/main.c | 2 +- wii/video.c | 20 +++++++++++--------- 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/dynamic.c b/dynamic.c index 965cf62439..eda9d7112f 100644 --- a/dynamic.c +++ b/dynamic.c @@ -101,7 +101,7 @@ unsigned (*psnes_get_memory_size)(unsigned); void (*psnes_unload_cartridge)(void); void (*psnes_term)(void); -#ifdef NEED_DYNAMIC +#if defined(NEED_DYNAMIC) || defined(GEKKO) || defined(__CELLOS_LV2__) || defined(XENON) static void set_environment(void); #endif static void set_environment_defaults(void); @@ -222,7 +222,7 @@ void init_libsnes_sym(void) #endif set_environment_defaults(); -#ifdef NEED_DYNAMIC +#if defined(NEED_DYNAMIC) || defined(GEKKO) || defined(__CELLOS_LV2__) || defined(XENON) set_environment(); #endif } @@ -280,7 +280,9 @@ void dylib_close(dylib_t lib) dlclose(lib); #endif } +#endif +#if defined(NEED_DYNAMIC) || defined(GEKKO) || defined(__CELLOS_LV2__) || defined(XENON) static bool environment_cb(unsigned cmd, void *data) { switch (cmd) @@ -340,7 +342,9 @@ static bool environment_cb(unsigned cmd, void *data) return true; } +#endif +#ifdef NEED_DYNAMIC // SSNES extension hooks. Totally optional 'n shizz :) static void set_environment(void) { @@ -356,6 +360,12 @@ static void set_environment(void) if (psnes_set_environment) psnes_set_environment(environment_cb); } +#elif defined(GEKKO) || defined(__CELLOS_LV2__) || defined(XENON) +// Not very optional when we're running on a console without dynamic loading support. +static void set_environment(void) +{ + snes_set_environment(environment_cb); +} #endif // Assume SNES as defaults. diff --git a/wii/input.c b/wii/input.c index eac154acf9..53535ba6a1 100644 --- a/wii/input.c +++ b/wii/input.c @@ -98,7 +98,7 @@ static bool wii_key_pressed(void *data, int key) switch (key) { case SSNES_QUIT_KEY: - return g_quit || pad_state[0][SNES_DEVICE_ID_JOYPAD_START]; + return g_quit || pad_state[0][SNES_DEVICE_ID_JOYPAD_SELECT]; default: return false; } diff --git a/wii/main.c b/wii/main.c index 1108c98b29..6d48484598 100644 --- a/wii/main.c +++ b/wii/main.c @@ -30,7 +30,7 @@ int ssnes_main(int argc, char **argv); int main(void) { char arg0[] = "ssnes"; - char arg1[] = "sd:/FFIII.smc"; + char arg1[] = "sd:/MM2.nes"; char *argv[] = { arg0, arg1, NULL }; fatInitDefault(); diff --git a/wii/video.c b/wii/video.c index dbf4a51331..dc6e13a34e 100644 --- a/wii/video.c +++ b/wii/video.c @@ -159,15 +159,17 @@ static void update_texture(const uint32_t *src, width &= ~15; height &= ~3; +#define RGB15to16(col) ({ uint32_t hi = (col << 1) & 0xffe0ffe0u; uint32_t lo = col & 0x001f001f; hi | lo; }) + #define BLIT_CHUNK(off) { \ - tmp_dst[ 0 + off] = tmp_src[0]; \ - tmp_dst[ 1 + off] = tmp_src[1]; \ - tmp_dst[ 8 + off] = tmp_src[2]; \ - tmp_dst[ 9 + off] = tmp_src[3]; \ - tmp_dst[16 + off] = tmp_src[4]; \ - tmp_dst[17 + off] = tmp_src[5]; \ - tmp_dst[24 + off] = tmp_src[6]; \ - tmp_dst[25 + off] = tmp_src[7]; } + tmp_dst[ 0 + off] = RGB15to16(tmp_src[0]); \ + tmp_dst[ 1 + off] = RGB15to16(tmp_src[1]); \ + tmp_dst[ 8 + off] = RGB15to16(tmp_src[2]); \ + tmp_dst[ 9 + off] = RGB15to16(tmp_src[3]); \ + tmp_dst[16 + off] = RGB15to16(tmp_src[4]); \ + tmp_dst[17 + off] = RGB15to16(tmp_src[5]); \ + tmp_dst[24 + off] = RGB15to16(tmp_src[6]); \ + tmp_dst[25 + off] = RGB15to16(tmp_src[7]); } #define BLIT_LINE(off) { \ const uint32_t *tmp_src = src; \ @@ -178,7 +180,7 @@ static void update_texture(const uint32_t *src, width >>= 1; - // Texture data is 4x4 tiled @ 15bpp (docs say it's RGB565, but apparently it's RGB555). + // Texture data is 4x4 tiled @ 15bpp. // Use 32-bit to transfer more data per cycle. uint32_t *dst = g_tex.data; for (unsigned i = 0; i < height; i += 4, dst += 4 * width)