From 8740bc2778d236697764309f207589596f9cecda Mon Sep 17 00:00:00 2001 From: Will-LWE <75226748+Will-LWE@users.noreply.github.com> Date: Tue, 1 Dec 2020 21:53:37 +0100 Subject: [PATCH 01/18] Update yabause.h --- yabause/src/yabause.h | 1 + 1 file changed, 1 insertion(+) diff --git a/yabause/src/yabause.h b/yabause/src/yabause.h index 0393bbddd1..2bdb28a0c6 100644 --- a/yabause/src/yabause.h +++ b/yabause/src/yabause.h @@ -36,6 +36,7 @@ typedef struct int cdcoretype; int carttype; u8 regionid; + int syslanguageid; const char *biospath; const char *cdpath; const char *ssfpath; From c5664f55f8de4b3913ab92efb18f6a1167ac49bd Mon Sep 17 00:00:00 2001 From: Will-LWE <75226748+Will-LWE@users.noreply.github.com> Date: Tue, 1 Dec 2020 21:55:39 +0100 Subject: [PATCH 02/18] Update yabause.c --- yabause/src/yabause.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/yabause/src/yabause.c b/yabause/src/yabause.c index 6bb1289caa..3f084b0665 100755 --- a/yabause/src/yabause.c +++ b/yabause/src/yabause.c @@ -124,6 +124,7 @@ void print_usage(const char *program_name) { "Usage: %s [OPTIONS]...\n", program_name); printf(" -h --help Print help and exit\n"); printf(" -b STRING --bios=STRING bios file\n"); + printf(" -l STRING --language=STRING english, deutsch, french, spanish,\n italian, japanese\n"); printf(" -i STRING --iso=STRING iso/cue file\n"); printf(" -c STRING --cdrom=STRING cdrom path\n"); printf(" -ns --nosound turn sound off\n"); @@ -312,7 +313,7 @@ int YabauseInit(yabauseinit_struct *init) return -1; } - if (SmpcInit(init->regionid, init->clocksync, init->basetime) != 0) + if (SmpcInit(init->regionid, init->syslanguageid, init->clocksync, init->basetime) != 0) { YabSetError(YAB_ERR_CANNOTINIT, _("SMPC")); return -1; @@ -828,7 +829,7 @@ int YabauseEmulate(void) { saved_scsp_cycles -= scsp_integer_part << SCSP_FRACTIONAL_BITS; } #endif - if(yabsys.use_cd_block_lle) + if(yabsys.use_cd_block_lle) { u32 sh1_integer_part = 0; u32 cdd_integer_part = 0; From 39a003a0e298c09c13ee4a00154962a64878a4cd Mon Sep 17 00:00:00 2001 From: Will-LWE <75226748+Will-LWE@users.noreply.github.com> Date: Tue, 1 Dec 2020 21:57:36 +0100 Subject: [PATCH 03/18] Update smpc.h --- yabause/src/smpc.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/yabause/src/smpc.h b/yabause/src/smpc.h index 7ac3cc37d9..116145a081 100644 --- a/yabause/src/smpc.h +++ b/yabause/src/smpc.h @@ -59,6 +59,8 @@ typedef struct typedef struct { u8 dotsel; // 0 -> 320 | 1 -> 352 + int syslanguageid; + int syslngid; u8 mshnmi; u8 sndres; u8 cdres; @@ -81,7 +83,7 @@ typedef struct { extern SmpcInternal * SmpcInternalVars; -int SmpcInit(u8 regionid, int clocksync, u32 basetime); +int SmpcInit(u8 regionid, int syslanguageid, int clocksync, u32 basetime); void SmpcDeInit(void); void SmpcRecheckRegion(void); void SmpcReset(void); From 83c745212655724a1e1be53788c10343837ff23c Mon Sep 17 00:00:00 2001 From: Will-LWE <75226748+Will-LWE@users.noreply.github.com> Date: Tue, 1 Dec 2020 22:01:29 +0100 Subject: [PATCH 04/18] Support for language configuration from settings --- yabause/src/smpc.c | 44 ++++++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/yabause/src/smpc.c b/yabause/src/smpc.c index a55194b065..4c8bcbe278 100644 --- a/yabause/src/smpc.c +++ b/yabause/src/smpc.c @@ -47,10 +47,11 @@ Smpc * SmpcRegs; u8 * SmpcRegsT; SmpcInternal * SmpcInternalVars; int intback_wait_for_line = 0; +int syslngid = 0; ////////////////////////////////////////////////////////////////////////////// -int SmpcInit(u8 regionid, int clocksync, u32 basetime) { +int SmpcInit(u8 regionid, int syslanguageid, int clocksync, u32 basetime) { if ((SmpcRegsT = (u8 *) calloc(1, sizeof(Smpc))) == NULL) return -1; @@ -61,6 +62,7 @@ int SmpcInit(u8 regionid, int clocksync, u32 basetime) { SmpcInternalVars->regionsetting = regionid; SmpcInternalVars->regionid = regionid; + SmpcInternalVars->syslanguageid = syslanguageid; SmpcInternalVars->clocksync = clocksync; SmpcInternalVars->basetime = basetime ? basetime : time(NULL); @@ -103,7 +105,21 @@ void SmpcRecheckRegion(void) { void SmpcReset(void) { memset((void *)SmpcRegs, 0, sizeof(Smpc)); - memset((void *)SmpcInternalVars->SMEM, 0, 4); + syslngid = SmpcInternalVars->syslanguageid; + memset((void *)SmpcInternalVars->SMEM, syslngid, 4); // Language : 0=English - 1=Deutsch - 2=French - 3=Spanish - 4=Italian - 5=Japanese + memset((void *)SmpcInternalVars->SMEM, 0, 3); // Other Settings - MUST BE DECLARED! - By default : 0 = Button Labels=Enabled + Audio=Stereo + Sound Effects=Enabled + + // Other Settings Configuration Information : + // + // |-------------------------------------------------------------------------------------------------------| + // | Settings | Bit / Settings Value | + // | |---------------------------------------------------------------------------------------| + // | Name | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | + // |-------------------------------------------------------------------------------------------------------| + // | Button Labels | Enabled | Enabled | Enabled | Enabled | Disabled | Disabled | Disabled | Disabled | + // | Audio | Stereo | Stereo | Mono | Mono | Stereo | Stereo | Mono | Mono | + // | Sound Effects | Enabled | Disabled | Enabled | Disabled | Enabled | Disabled | Enabled | Disabled | + // |-------------------------------------------------------------------------------------------------------| SmpcRecheckRegion(); @@ -818,28 +834,28 @@ void FASTCALL SmpcWriteByte(SH2_struct *sh, u32 addr, u8 val) { { switch(PORTDATA1.data[1]) { - case PERPAD: + case PERPAD: SmpcRegs->PDR[0] = 0x7C; break; - case PER3DPAD: - case PERKEYBOARD: + case PER3DPAD: + case PERKEYBOARD: SmpcRegs->PDR[0] = 0x71; - break; - case PERMOUSE: + break; + case PERMOUSE: SmpcRegs->PDR[0] = 0x70; - break; - case PERWHEEL: - case PERMISSIONSTICK: - case PERTWINSTICKS: - default: + break; + case PERWHEEL: + case PERMISSIONSTICK: + case PERTWINSTICKS: + default: SMPCLOG("smpc\t: Peripheral TH Control Method not supported for peripherl id %02X\n", PORTDATA1.data[1]); - break; + break; } break; } default: SmpcRegs->PDR[0] = 0x71; - break; + break; } break; From aeff762befdd277828002c1ed8fcbe1f4ded29af Mon Sep 17 00:00:00 2001 From: Will-LWE <75226748+Will-LWE@users.noreply.github.com> Date: Tue, 1 Dec 2020 22:05:52 +0100 Subject: [PATCH 05/18] Support for language configuration from settings --- yabause/src/gtk/main.c | 46 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/yabause/src/gtk/main.c b/yabause/src/gtk/main.c index 51593090d0..82042e9dcc 100644 --- a/yabause/src/gtk/main.c +++ b/yabause/src/gtk/main.c @@ -134,6 +134,11 @@ GtkWidget * yui; GKeyFile * keyfile; yabauseinit_struct yinit; +char* toLower(char* s) { + for(char *p=s; *p; p++) *p=tolower(*p); + return s; +} + static int yui_main(gpointer data) { PERCore->HandleEvents(); return TRUE; @@ -161,6 +166,7 @@ static void yui_settings_init(void) { yinit.carttype = CART_NONE; yinit.regionid = 0; yinit.biospath = biospath; + yinit.syslanguageid = 0; yinit.cdpath = cdpath; yinit.buppath = buppath; yinit.mpegpath = mpegpath; @@ -225,6 +231,28 @@ static gboolean yui_settings_load(void) { Cs2ChangeCDCore(yinit.cdcoretype, yinit.cdpath); } + /* SystemLanguageID */ + { + char * syslang = g_key_file_get_value(keyfile, "General", "SystemLanguageID", 0); + tmp = yinit.syslanguageid; + if ((syslang == 0) || !strcmp(syslang, "0")) { + yinit.syslanguageid = 0; + } else { + switch(syslang[0]) { + case '0': yinit.syslanguageid = 0; break; + case '1': yinit.syslanguageid = 1; break; + case '2': yinit.syslanguageid = 2; break; + case '3': yinit.syslanguageid = 3; break; + case '4': yinit.syslanguageid = 4; break; + case '5': yinit.syslanguageid = 5; break; + } + } + + if ((YUI_WINDOW(yui)->state & YUI_IS_INIT) && (tmp != yinit.syslanguageid)) { + mustRestart = TRUE; + } + } + /* region */ { char * region = g_key_file_get_value(keyfile, "General", "Region", 0); @@ -493,6 +521,24 @@ int main(int argc, char *argv[]) { g_strlcpy(biospath, argv[i] + strlen("--bios="), 256); yinit.biospath = biospath; } + //set System Language + if (0 == strcmp(argv[i], "-l") && argv[i + 1]) { + g_strlcpy(strsyslangeid, argv[i + 1], 256); + if (toLower(strsyslangeid) == "english") { yinit.syslanguageid = 0; } + if (toLower(strsyslangeid) == "deutsch") { yinit.syslanguageid = 1; } + if (toLower(strsyslangeid) == "french") { yinit.syslanguageid = 2; } + if (toLower(strsyslangeid) == "spanish") { yinit.syslanguageid = 3; } + if (toLower(strsyslangeid) == "italian") { yinit.syslanguageid = 4; } + if (toLower(strsyslangeid) == "japanese") { yinit.syslanguageid = 5; } + } else if (strstr(argv[i], "--language=")) { + g_strlcpy(strsyslangeid, argv[i] + strlen("--language="), 256); + if (toLower(strsyslangeid) == "english") { yinit.syslanguageid = 0; } + if (toLower(strsyslangeid) == "deutsch") { yinit.syslanguageid = 1; } + if (toLower(strsyslangeid) == "french") { yinit.syslanguageid = 2; } + if (toLower(strsyslangeid) == "spanish") { yinit.syslanguageid = 3; } + if (toLower(strsyslangeid) == "italian") { yinit.syslanguageid = 4; } + if (toLower(strsyslangeid) == "japanese") { yinit.syslanguageid = 5; } + } //set iso else if (0 == strcmp(argv[i], "-i") && argv[i + 1]) { g_strlcpy(cdpath, argv[i + 1], 256); From 246dca98b9f7d605774a99eeb3fcc2826a896b58 Mon Sep 17 00:00:00 2001 From: Will-LWE <75226748+Will-LWE@users.noreply.github.com> Date: Tue, 1 Dec 2020 22:07:57 +0100 Subject: [PATCH 06/18] Support for language configuration from settings --- yabause/src/gtk/settings.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/yabause/src/gtk/settings.c b/yabause/src/gtk/settings.c index d07056e588..13cf51ad8b 100644 --- a/yabause/src/gtk/settings.c +++ b/yabause/src/gtk/settings.c @@ -80,6 +80,16 @@ YuiRangeItem * osdcores = NULL; YuiRangeItem * sndcores = NULL; YuiRangeItem * percores = NULL; +YuiRangeItem syslanguage[] = { + { "0" , "English" }, + { "1" , "Deutsch" }, + { "2" , "French" }, + { "3" , "Spanish" }, + { "4" , "Italian" }, + { "5" , "Japanese" }, + { 0, 0 } +}; + YuiRangeItem regions[] = { { "Auto" , "Auto-detect" }, { "J" , "Japan (NTSC)" }, @@ -325,6 +335,9 @@ GtkWidget* create_dialog1(void) { box = yui_page_add(YUI_PAGE(general), _("Save States")); gtk_container_add(GTK_CONTAINER(box), yui_file_entry_new(keyfile, "General", "StatePath", YUI_FILE_ENTRY_BROWSE | YUI_FILE_ENTRY_DIRECTORY, NULL)); + box = yui_page_add(YUI_PAGE(general), _("System Language")); + gtk_container_add(GTK_CONTAINER(box), yui_range_new(keyfile, "General", "SystemLanguageID", syslanguage)); + gtk_notebook_append_page(GTK_NOTEBOOK(notebook1), general, gtk_label_new (_("General"))); gtk_widget_show_all(general); From 4d6c485bc5f600b5908cf424d0cfa04d081e82c6 Mon Sep 17 00:00:00 2001 From: Will-LWE <75226748+Will-LWE@users.noreply.github.com> Date: Tue, 1 Dec 2020 22:09:57 +0100 Subject: [PATCH 07/18] Support for language configuration from settings --- yabause/src/qt/Arguments.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/yabause/src/qt/Arguments.cpp b/yabause/src/qt/Arguments.cpp index af0811eb93..44d08d3060 100644 --- a/yabause/src/qt/Arguments.cpp +++ b/yabause/src/qt/Arguments.cpp @@ -23,6 +23,7 @@ namespace Arguments void autostart(const QString& param); void binary(const QString& param); void bios(const QString& param); + void syslangid(const QString& param); void cdrom(const QString& param); void fullscreen(const QString& param); void help(const QString& param); @@ -50,6 +51,7 @@ namespace Arguments { "-a", "--autostart", NULL, "Automatically start emulation.", 1, autostart }, { NULL, "--binary=", "[:ADDRESS]", "Use a binary file.", 1, binary }, { "-b", "--bios=", "", "Choose a bios file.", 3, bios }, + { "-l", "--language=", "","Choose the system language: english, deutsch, french, spanish, italian, japanese", 7, syslangid }, { "-c", "--cdrom=", "", "Choose the cdrom device.", 4, cdrom }, { "-f", "--fullscreen", NULL, "Start the emulator in fullscreen.", 5, fullscreen }, { "-h", "--help", NULL, "Show this help and exit.", 0, help }, @@ -62,8 +64,8 @@ namespace Arguments void parse() { - QVector