Merge branches 'master' and 'master' of https://github.com/LIJI32/SameBoy
This commit is contained in:
commit
969fb5a9d8
4
Makefile
4
Makefile
@ -33,6 +33,10 @@ BIN := build/bin
|
|||||||
OBJ := build/obj
|
OBJ := build/obj
|
||||||
BOOTROMS_DIR ?= $(BIN)/BootROMs
|
BOOTROMS_DIR ?= $(BIN)/BootROMs
|
||||||
|
|
||||||
|
ifdef DATA_DIR
|
||||||
|
CFLAGS += -DDATA_DIR="\"$(DATA_DIR)\""
|
||||||
|
endif
|
||||||
|
|
||||||
# Set tools
|
# Set tools
|
||||||
|
|
||||||
# Use clang if it's available.
|
# Use clang if it's available.
|
||||||
|
@ -46,6 +46,8 @@ On Windows, SameBoy also requires:
|
|||||||
* [GnuWin](http://gnuwin32.sourceforge.net/)
|
* [GnuWin](http://gnuwin32.sourceforge.net/)
|
||||||
* Running vcvars32 before running make. Make sure all required tools and libraries are in %PATH% and %lib%, respectively.
|
* Running vcvars32 before running make. Make sure all required tools and libraries are in %PATH% and %lib%, respectively.
|
||||||
|
|
||||||
To compile, simply run `make`. The targets are cocoa (Default for macOS), sdl (Default for everything else), libretro, bootroms and tester. You may also specify CONF=debug (default), CONF=release or CONF=native_release to control optimization and symbols. native_release is faster than release, but is optimized to the host's CPU and therefore is not portable. You may set BOOTROMS_DIR=... to a directory containing precompiled dmg_boot.bin and cgb_boot.bin files, otherwise the build system will compile and use SameBoy's own boot ROMs.
|
To compile, simply run `make`. The targets are `cocoa` (Default for macOS), `sdl` (Default for everything else), `libretro`, `bootroms` and `tester`. You may also specify `CONF=debug` (default), `CONF=release` or `CONF=native_release` to control optimization and symbols. `native_release` is faster than `release`, but is optimized to the host's CPU and therefore is not portable. You may set `BOOTROMS_DIR=...` to a directory containing precompiled `dmg_boot.bin` and `cgb_boot.bin` files, otherwise the build system will compile and use SameBoy's own boot ROMs.
|
||||||
|
|
||||||
|
By default, the SDL port will look for resource files with a path relative to executable. If you are packaging SameBoy, you may wish to override this by setting the `DATA_DIR` variable during compilation to the target path of the directory containing all files (apart from the executable, that's not necessary) from the `build/bin/SDL` directory in the source tree. Make sure the variable ends with a `/` character.
|
||||||
|
|
||||||
SameBoy was compiled and tested on macOS, Ubuntu and 32-bit Windows 7.
|
SameBoy was compiled and tested on macOS, Ubuntu and 32-bit Windows 7.
|
||||||
|
@ -746,7 +746,7 @@ void run_gui(bool is_running)
|
|||||||
/* Draw the background screen */
|
/* Draw the background screen */
|
||||||
static SDL_Surface *converted_background = NULL;
|
static SDL_Surface *converted_background = NULL;
|
||||||
if (!converted_background) {
|
if (!converted_background) {
|
||||||
SDL_Surface *background = SDL_LoadBMP(executable_relative_path("background.bmp"));
|
SDL_Surface *background = SDL_LoadBMP(resource_path("background.bmp"));
|
||||||
SDL_SetPaletteColors(background->format->palette, gui_palette, 0, 4);
|
SDL_SetPaletteColors(background->format->palette, gui_palette, 0, 4);
|
||||||
converted_background = SDL_ConvertSurface(background, pixel_format, 0);
|
converted_background = SDL_ConvertSurface(background, pixel_format, 0);
|
||||||
SDL_LockSurface(converted_background);
|
SDL_LockSurface(converted_background);
|
||||||
|
@ -426,7 +426,7 @@ restart:
|
|||||||
bool error = false;
|
bool error = false;
|
||||||
start_capturing_logs();
|
start_capturing_logs();
|
||||||
const char * const boot_roms[] = {"dmg_boot.bin", "cgb_boot.bin", "agb_boot.bin"};
|
const char * const boot_roms[] = {"dmg_boot.bin", "cgb_boot.bin", "agb_boot.bin"};
|
||||||
error = GB_load_boot_rom(&gb, executable_relative_path(boot_roms[configuration.model]));
|
error = GB_load_boot_rom(&gb, resource_path(boot_roms[configuration.model]));
|
||||||
end_capturing_logs(true, error);
|
end_capturing_logs(true, error);
|
||||||
|
|
||||||
start_capturing_logs();
|
start_capturing_logs();
|
||||||
@ -442,7 +442,7 @@ restart:
|
|||||||
GB_load_battery(&gb, battery_save_path);
|
GB_load_battery(&gb, battery_save_path);
|
||||||
|
|
||||||
/* Configure symbols */
|
/* Configure symbols */
|
||||||
GB_debugger_load_symbol_file(&gb, executable_relative_path("registers.sym"));
|
GB_debugger_load_symbol_file(&gb, resource_path("registers.sym"));
|
||||||
|
|
||||||
char symbols_path[path_length + 5];
|
char symbols_path[path_length + 5];
|
||||||
replace_extension(filename, path_length, symbols_path, ".sym");
|
replace_extension(filename, path_length, symbols_path, ".sym");
|
||||||
|
@ -78,7 +78,7 @@ bool init_shader_with_name(shader_t *shader, const char *name)
|
|||||||
static signed long filter_token_location = 0;
|
static signed long filter_token_location = 0;
|
||||||
|
|
||||||
if (!master_shader_code[0]) {
|
if (!master_shader_code[0]) {
|
||||||
FILE *master_shader_f = fopen(executable_relative_path("Shaders/MasterShader.fsh"), "r");
|
FILE *master_shader_f = fopen(resource_path("Shaders/MasterShader.fsh"), "r");
|
||||||
if (!master_shader_f) return false;
|
if (!master_shader_f) return false;
|
||||||
fread(master_shader_code, 1, sizeof(master_shader_code) - 1, master_shader_f);
|
fread(master_shader_code, 1, sizeof(master_shader_code) - 1, master_shader_f);
|
||||||
fclose(master_shader_f);
|
fclose(master_shader_f);
|
||||||
@ -92,7 +92,7 @@ bool init_shader_with_name(shader_t *shader, const char *name)
|
|||||||
char shader_path[1024];
|
char shader_path[1024];
|
||||||
sprintf(shader_path, "Shaders/%s.fsh", name);
|
sprintf(shader_path, "Shaders/%s.fsh", name);
|
||||||
|
|
||||||
FILE *shader_f = fopen(executable_relative_path(shader_path), "r");
|
FILE *shader_f = fopen(resource_path(shader_path), "r");
|
||||||
if (!shader_f) return false;
|
if (!shader_f) return false;
|
||||||
memset(shader_code, 0, sizeof(shader_code));
|
memset(shader_code, 0, sizeof(shader_code));
|
||||||
fread(shader_code, 1, sizeof(shader_code) - 1, shader_f);
|
fread(shader_code, 1, sizeof(shader_code) - 1, shader_f);
|
||||||
|
16
SDL/utils.c
16
SDL/utils.c
@ -3,8 +3,11 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
const char *executable_folder(void)
|
const char *resource_folder(void)
|
||||||
{
|
{
|
||||||
|
#ifdef DATA_DIR
|
||||||
|
return DATA_DIR;
|
||||||
|
#else
|
||||||
static const char *ret = NULL;
|
static const char *ret = NULL;
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
ret = SDL_GetBasePath();
|
ret = SDL_GetBasePath();
|
||||||
@ -13,21 +16,22 @@ const char *executable_folder(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
char *executable_relative_path(const char *filename)
|
char *resource_path(const char *filename)
|
||||||
{
|
{
|
||||||
static char path[1024];
|
static char path[1024];
|
||||||
snprintf(path, sizeof(path), "%s%s", executable_folder(), filename);
|
snprintf(path, sizeof(path), "%s%s", resource_folder(), filename);
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void replace_extension(const char *src, size_t length, char *dest, const char *ext)
|
void replace_extension(const char *src, size_t length, char *dest, const char *ext)
|
||||||
{
|
{
|
||||||
memcpy(dest, src, length);
|
memcpy(dest, src, length);
|
||||||
dest[length] = 0;
|
dest[length] = 0;
|
||||||
|
|
||||||
/* Remove extension */
|
/* Remove extension */
|
||||||
for (size_t i = length; i--;) {
|
for (size_t i = length; i--;) {
|
||||||
if (dest[i] == '/') break;
|
if (dest[i] == '/') break;
|
||||||
@ -36,7 +40,7 @@ void replace_extension(const char *src, size_t length, char *dest, const char *e
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add new extension */
|
/* Add new extension */
|
||||||
strcat(dest, ext);
|
strcat(dest, ext);
|
||||||
}
|
}
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
#define utils_h
|
#define utils_h
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
const char *executable_folder(void);
|
const char *resource_folder(void);
|
||||||
char *executable_relative_path(const char *filename);
|
char *resource_path(const char *filename);
|
||||||
void replace_extension(const char *src, size_t length, char *dest, const char *ext);
|
void replace_extension(const char *src, size_t length, char *dest, const char *ext);
|
||||||
|
|
||||||
#endif /* utils_h */
|
#endif /* utils_h */
|
||||||
|
@ -11,6 +11,8 @@
|
|||||||
#include <direct.h>
|
#include <direct.h>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#define snprintf _snprintf
|
#define snprintf _snprintf
|
||||||
|
#else
|
||||||
|
#include <sys/wait.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <Core/gb.h>
|
#include <Core/gb.h>
|
||||||
|
@ -444,8 +444,11 @@ static void check_variables(bool link)
|
|||||||
else
|
else
|
||||||
new_model = MODEL_AUTO;
|
new_model = MODEL_AUTO;
|
||||||
|
|
||||||
model[0] = new_model;
|
if (new_model != model[0])
|
||||||
init_for_current_model(0);
|
{
|
||||||
|
model[0] = new_model;
|
||||||
|
init_for_current_model(0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
Loading…
Reference in New Issue
Block a user