summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Pavone <pavone@retrodev.com>2015-11-04 22:48:27 -0800
committerMichael Pavone <pavone@retrodev.com>2015-11-04 22:48:27 -0800
commit3324456c65b747ab56158e9c7683be302761ed7a (patch)
treea135a98bb14a76d2507108e2ceb248401b41e44f
parente26893e5625ceffa1214024ed3191b155d56de6f (diff)
Load config file and rom.db from appropriate locations on Android
-rw-r--r--config.c86
-rw-r--r--config.h3
-rw-r--r--romdb.c4
-rw-r--r--ym2612.c4
4 files changed, 79 insertions, 18 deletions
diff --git a/config.c b/config.c
index ad4d929..fa1d6cb 100644
--- a/config.c
+++ b/config.c
@@ -114,34 +114,84 @@ open_fail:
return ret;
}
-tern_node * load_config()
+#ifdef __ANDROID__
+#include <SDL.h>
+
+tern_node * parse_config_file_assets(char *config_path)
{
- char * exe_dir;
- char * home = get_home_dir();
- if (!home) {
- goto load_in_app_dir;
+ tern_node * ret = NULL;
+ SDL_RWops *rw = SDL_RWFromFile(config_path, "rb");
+ if (!rw) {
+ goto open_fail;
}
- char * path = alloc_concat(home, "/.config/blastem/blastem.cfg");
- tern_node * ret = parse_config_file(path);
- if (ret) {
- goto success;
+ size_t config_size = rw->size(rw);
+ if (!config_size) {
+ goto config_empty;
}
- free(path);
-load_in_app_dir:
- exe_dir = get_exe_dir();
- if (!exe_dir) {
- goto no_config;
+
+ char * config_data = malloc(config_size+1);
+ if (SDL_RWread(rw, config_data, 1, config_size) != config_size) {
+ goto config_read_fail;
}
- path = alloc_concat(exe_dir, "/default.cfg");
- ret = parse_config_file(path);
+ config_data[config_size] = '\0';
+
+ ret = parse_config(config_data);
+config_read_fail:
+ free(config_data);
+config_empty:
+ SDL_RWclose(rw);
+open_fail:
+ return ret;
+}
+
+tern_node * load_config()
+{
+ char *path = alloc_concat(SDL_AndroidGetInternalStoragePath(), "/blastem.cfg");
+ tern_node * ret = parse_config_file(path);
free(path);
-success:
if (ret) {
return ret;
}
-no_config:
+
+ ret = parse_config_file_assets("default.cfg");
+ if (ret) {
+ return ret;
+ }
+
+ fatal_error("Failed to find a config file in internal storage or in the blastem APK\n");
+ //this will never get reached, but the compiler doesn't know that. Let's make it happy
+ return NULL;
+}
+
+#else
+
+tern_node * load_config()
+{
+ char * exe_dir;
+ char * home = get_home_dir();
+ if (home) {
+ char * path = alloc_concat(home, "/.config/blastem/blastem.cfg");
+ tern_node * ret = parse_config_file(path);
+ free(path);
+ if (ret) {
+ return ret;
+ }
+ }
+
+ exe_dir = get_exe_dir();
+ if (exe_dir) {
+ path = alloc_concat(exe_dir, "/default.cfg");
+ ret = parse_config_file(path);
+ free(path);
+ if (ret) {
+ return ret;
+ }
+ }
+
fatal_error("Failed to find a config file in ~/.config/blastem/blastem.cfg or in the blastem executable directory\n");
//this will never get reached, but the compiler doesn't know that. Let's make it happy
return NULL;
}
+#endif
+
diff --git a/config.h b/config.h
index 8817db1..8ae1fe3 100644
--- a/config.h
+++ b/config.h
@@ -9,6 +9,9 @@
tern_node * parse_config_file(char * config_path);
tern_node * load_config();
+#ifdef __ANDROID__
+tern_node * parse_config_file_assets(char *config_path);
+#endif
#endif //CONFIG_H_
diff --git a/romdb.c b/romdb.c
index 53a8fde..bf89f88 100644
--- a/romdb.c
+++ b/romdb.c
@@ -384,6 +384,9 @@ uint8_t read_eeprom_i2c_b(uint32_t address, void * context)
tern_node *load_rom_db()
{
+#ifdef __ANDROID__
+ tern_node *db = parse_config_file_assets("rom.db");
+#else
char *exe_dir = get_exe_dir();
if (!exe_dir) {
fatal_error("Failed to find executable path\n");
@@ -391,6 +394,7 @@ tern_node *load_rom_db()
char *path = alloc_concat(exe_dir, "/rom.db");
tern_node *db = parse_config_file(path);
free(path);
+#endif
if (!db) {
fatal_error("Failed to load ROM DB\n");
}
diff --git a/ym2612.c b/ym2612.c
index 45da6fe..60da9de 100644
--- a/ym2612.c
+++ b/ym2612.c
@@ -118,6 +118,10 @@ void ym_adjust_master_clock(ym2612_context * context, uint32_t master_clock)
context->buffer_inc = ((BUFFER_INC_RES * (uint64_t)context->sample_rate) / (uint64_t)master_clock) * (uint64_t)context->clock_inc;
}
+#ifdef __ANDROID__
+#define log2(x) (log(x)/log(2))
+#endif
+
void ym_init(ym2612_context * context, uint32_t sample_rate, uint32_t master_clock, uint32_t clock_div, uint32_t sample_limit, uint32_t options)
{
dfopen(debug_file, "ym_debug.txt", "w");