From c1c931c61f07cb66a5df54c2c2a8700d3fa5eff2 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Fri, 10 Sep 2021 18:23:32 -0700 Subject: [PATCH 01/31] SDL: Add sensor support for controllers with SDL 2.0.14+ --- CHANGES | 1 + src/platform/sdl/sdl-events.c | 120 +++++++++++++++++++++------------- src/platform/sdl/sdl-events.h | 3 + 3 files changed, 79 insertions(+), 45 deletions(-) diff --git a/CHANGES b/CHANGES index a90532f6c..7bbc0a3c6 100644 --- a/CHANGES +++ b/CHANGES @@ -5,6 +5,7 @@ Features: - Tool for converting scanned pictures of e-Reader cards to raw dotcode data - Options for muting when inactive, minimized, or for different players in multiplayer - Cheat code support in homebrew ports + - Acclerometer and gyro support for controllers on PC - Support for combo "Super Game Boy Color" SGB + GBC ROM hacks - Support for 64 kiB SRAM saves used in some bootlegs - Discord Rich Presence now supports time elapsed diff --git a/src/platform/sdl/sdl-events.c b/src/platform/sdl/sdl-events.c index c7291ff32..2367e1c12 100644 --- a/src/platform/sdl/sdl-events.c +++ b/src/platform/sdl/sdl-events.c @@ -37,6 +37,34 @@ static int32_t _mSDLReadTiltY(struct mRotationSource* rumble); static int32_t _mSDLReadGyroZ(struct mRotationSource* rumble); static void _mSDLRotationSample(struct mRotationSource* source); +static struct SDL_JoystickCombo* _mSDLOpenJoystick(struct mSDLEvents* events, int i) { + SDL_Joystick* sdlJoystick = SDL_JoystickOpen(i); + if (!sdlJoystick) { + return NULL; + } + struct SDL_JoystickCombo* joystick = SDL_JoystickListAppend(&events->joysticks); + joystick->index = SDL_JoystickListSize(&events->joysticks) - 1; + joystick->joystick = sdlJoystick; +#if SDL_VERSION_ATLEAST(2, 0, 0) + joystick->id = SDL_JoystickInstanceID(joystick->joystick); + joystick->haptic = SDL_HapticOpenFromJoystick(joystick->joystick); + joystick->controller = SDL_GameControllerOpen(i); +#if SDL_VERSION_ATLEAST(2, 0, 14) + if (joystick->controller) { + if (SDL_GameControllerHasSensor(joystick->controller, SDL_SENSOR_GYRO) && !SDL_GameControllerIsSensorEnabled(joystick->controller, SDL_SENSOR_GYRO)) { + SDL_GameControllerSetSensorEnabled(joystick->controller, SDL_SENSOR_GYRO, SDL_TRUE); + } + if (SDL_GameControllerHasSensor(joystick->controller, SDL_SENSOR_ACCEL) && !SDL_GameControllerIsSensorEnabled(joystick->controller, SDL_SENSOR_ACCEL)) { + SDL_GameControllerSetSensorEnabled(joystick->controller, SDL_SENSOR_ACCEL, SDL_TRUE); + } + } +#endif +#else + joystick->id = SDL_JoystickIndex(joystick->joystick); +#endif + return joystick; +} + bool mSDLInitEvents(struct mSDLEvents* context) { #if SDL_VERSION_ATLEAST(2, 0, 4) SDL_SetHint(SDL_HINT_NO_SIGNAL_HANDLERS, "1"); @@ -50,6 +78,9 @@ bool mSDLInitEvents(struct mSDLEvents* context) { if (SDL_InitSubSystem(SDL_INIT_HAPTIC) < 0) { mLOG(SDL_EVENTS, ERROR, "SDL haptic initialization failed: %s", SDL_GetError()); } + if (SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER) < 0) { + mLOG(SDL_EVENTS, ERROR, "SDL game controller initialization failed: %s", SDL_GetError()); + } if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0) { mLOG(SDL_EVENTS, ERROR, "SDL video initialization failed: %s", SDL_GetError()); } @@ -64,19 +95,7 @@ bool mSDLInitEvents(struct mSDLEvents* context) { if (!SDL_JoystickListSize(&context->joysticks)) { int i; for (i = 0; i < nJoysticks; ++i) { - SDL_Joystick* sdlJoystick = SDL_JoystickOpen(i); - if (!sdlJoystick) { - continue; - } - struct SDL_JoystickCombo* joystick = SDL_JoystickListAppend(&context->joysticks); - joystick->joystick = sdlJoystick; - joystick->index = SDL_JoystickListSize(&context->joysticks) - 1; -#if SDL_VERSION_ATLEAST(2, 0, 0) - joystick->id = SDL_JoystickInstanceID(joystick->joystick); - joystick->haptic = SDL_HapticOpenFromJoystick(joystick->joystick); -#else - joystick->id = SDL_JoystickIndex(joystick->joystick); -#endif + _mSDLOpenJoystick(context, i); } } } @@ -101,6 +120,7 @@ void mSDLDeinitEvents(struct mSDLEvents* context) { for (i = 0; i < SDL_JoystickListSize(&context->joysticks); ++i) { struct SDL_JoystickCombo* joystick = SDL_JoystickListGetPointer(&context->joysticks, i); #if SDL_VERSION_ATLEAST(2, 0, 0) + SDL_GameControllerClose(joystick->controller); SDL_HapticClose(joystick->haptic); #endif SDL_JoystickClose(joystick->joystick); @@ -350,10 +370,6 @@ void mSDLUpdateJoysticks(struct mSDLEvents* events, const struct Configuration* SDL_Event event; while (SDL_PeepEvents(&event, 1, SDL_GETEVENT, SDL_JOYDEVICEADDED, SDL_JOYDEVICEREMOVED) > 0) { if (event.type == SDL_JOYDEVICEADDED) { - SDL_Joystick* sdlJoystick = SDL_JoystickOpen(event.jdevice.which); - if (!sdlJoystick) { - continue; - } ssize_t joysticks[MAX_PLAYERS]; ssize_t i; // Pointers can get invalidated, so we'll need to refresh them @@ -361,38 +377,26 @@ void mSDLUpdateJoysticks(struct mSDLEvents* events, const struct Configuration* joysticks[i] = events->players[i]->joystick ? (ssize_t) SDL_JoystickListIndex(&events->joysticks, events->players[i]->joystick) : -1; events->players[i]->joystick = NULL; } - struct SDL_JoystickCombo* joystick = SDL_JoystickListAppend(&events->joysticks); - joystick->joystick = sdlJoystick; - joystick->id = SDL_JoystickInstanceID(joystick->joystick); - joystick->index = SDL_JoystickListSize(&events->joysticks) - 1; -#if SDL_VERSION_ATLEAST(2, 0, 0) - joystick->haptic = SDL_HapticOpenFromJoystick(joystick->joystick); -#endif + struct SDL_JoystickCombo* joystick = _mSDLOpenJoystick(events, event.jdevice.which); + for (i = 0; i < events->playersAttached && i < MAX_PLAYERS; ++i) { if (joysticks[i] != -1) { events->players[i]->joystick = SDL_JoystickListGetPointer(&events->joysticks, joysticks[i]); } } -#if SDL_VERSION_ATLEAST(2, 0, 0) char joystickName[34] = {0}; SDL_JoystickGetGUIDString(SDL_JoystickGetGUID(joystick->joystick), joystickName, sizeof(joystickName)); -#else - const char* joystickName = SDL_JoystickName(SDL_JoystickIndex(joystick->joystick)); - if (joystickName) -#endif - { - for (i = 0; (int) i < events->playersAttached; ++i) { - if (events->players[i]->joystick) { - continue; - } - if (events->preferredJoysticks[i] && strcmp(events->preferredJoysticks[i], joystickName) == 0) { - events->players[i]->joystick = joystick; - if (config) { - mInputProfileLoad(events->players[i]->bindings, SDL_BINDING_BUTTON, config, joystickName); - } - return; + for (i = 0; (int) i < events->playersAttached; ++i) { + if (events->players[i]->joystick) { + continue; + } + if (events->preferredJoysticks[i] && strcmp(events->preferredJoysticks[i], joystickName) == 0) { + events->players[i]->joystick = joystick; + if (config) { + mInputProfileLoad(events->players[i]->bindings, SDL_BINDING_BUTTON, config, joystickName); } + return; } } for (i = 0; (int) i < events->playersAttached; ++i) { @@ -400,11 +404,7 @@ void mSDLUpdateJoysticks(struct mSDLEvents* events, const struct Configuration* continue; } events->players[i]->joystick = joystick; - if (config -#if !SDL_VERSION_ATLEAST(2, 0, 0) - && joystickName -#endif - ) { + if (config && joystickName[0]) { mInputProfileLoad(events->players[i]->bindings, SDL_BINDING_BUTTON, config, joystickName); } break; @@ -686,11 +686,17 @@ static int32_t _readTilt(struct mSDLPlayer* player, int axis) { static int32_t _mSDLReadTiltX(struct mRotationSource* source) { struct mSDLRotation* rotation = (struct mSDLRotation*) source; + if (rotation->axisX < 0) { + return rotation->accelX * -0x2000000; + } return _readTilt(rotation->p, rotation->axisX); } static int32_t _mSDLReadTiltY(struct mRotationSource* source) { struct mSDLRotation* rotation = (struct mSDLRotation*) source; + if (rotation->axisY < 0) { + return rotation->accelY * -0x2000000; + } return _readTilt(rotation->p, rotation->axisY); } @@ -707,6 +713,30 @@ static void _mSDLRotationSample(struct mRotationSource* source) { return; } +#if SDL_VERSION_ATLEAST(2, 0, 14) + if (rotation->p->joystick->controller) { + SDL_GameController* controller = rotation->p->joystick->controller; + if (SDL_GameControllerHasSensor(controller, SDL_SENSOR_ACCEL)) { + float accel[3]; + int count = SDL_GameControllerGetSensorData(controller, SDL_SENSOR_ACCEL, accel, 3); + if (count >= 0) { + rotation->accelX = accel[0]; + rotation->accelY = accel[2]; + rotation->axisX = -1; + rotation->axisY = -1; + } + } + if (SDL_GameControllerHasSensor(controller, SDL_SENSOR_GYRO)) { + float theta[3]; + int count = SDL_GameControllerGetSensorData(controller, SDL_SENSOR_GYRO, theta, 3); + if (count >= 0) { + rotation->zDelta = theta[1] / -10.f; + } + return; + } + } +#endif + int x = SDL_JoystickGetAxis(rotation->p->joystick->joystick, rotation->gyroX); int y = SDL_JoystickGetAxis(rotation->p->joystick->joystick, rotation->gyroY); union { diff --git a/src/platform/sdl/sdl-events.h b/src/platform/sdl/sdl-events.h index 8cb1aede2..1763865e2 100644 --- a/src/platform/sdl/sdl-events.h +++ b/src/platform/sdl/sdl-events.h @@ -38,6 +38,7 @@ struct SDL_JoystickCombo { size_t index; SDL_Joystick* joystick; #if SDL_VERSION_ATLEAST(2, 0, 0) + SDL_GameController* controller; SDL_Haptic* haptic; SDL_JoystickID id; #else @@ -88,6 +89,8 @@ struct mSDLPlayer { // Tilt int axisX; int axisY; + float accelX; + float accelY; // Gyro int gyroX; From 45e81d0eccc9d92fddc157bd11617566ce6318a4 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sat, 11 Sep 2021 13:48:25 -0700 Subject: [PATCH 02/31] GBA Video: Fix build on macOS --- src/gba/renderers/gl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gba/renderers/gl.c b/src/gba/renderers/gl.c index 7dab8f13c..783279230 100644 --- a/src/gba/renderers/gl.c +++ b/src/gba/renderers/gl.c @@ -1408,7 +1408,7 @@ void GBAVideoGLRendererDrawScanline(struct GBAVideoRenderer* renderer, int y) { if (y == 0) { glDisable(GL_SCISSOR_TEST); glClearColor(0, 0, 0, 0); -#ifdef BUILD_GLES3 +#ifdef GL_GLES_PROTOTYPES glClearDepthf(1.f); #else glClearDepth(1); From 2ac6920238d4c705e6cad0729c90d778247e972e Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 14 Sep 2021 10:51:06 -0700 Subject: [PATCH 03/31] GBA Memory: Fix misaligned 32-bit I/O loads (fixes #2307) --- CHANGES | 1 + src/gba/memory.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 7bbc0a3c6..5d859f327 100644 --- a/CHANGES +++ b/CHANGES @@ -15,6 +15,7 @@ Emulation fixes: - GB Memory: Add cursory cartridge open bus emulation (fixes mgba.io/i/2032) - GB Video: Render SGB border when unmasking with ATTR/PAL_SET (fixes mgba.io/i/2261) - GBA: Improve timing when not booting from BIOS + - GBA Memory: Fix misaligned 32-bit I/O loads (fixes mgba.io/i/2307) - GBA SIO: Fix SI value for unattached MULTI mode - GBA Video: Fix backdrop color if DISPCNT is first set to 0 (fixes mgba.io/i/2260) Other fixes: diff --git a/src/gba/memory.c b/src/gba/memory.c index bbd06fd86..039e1f8f8 100644 --- a/src/gba/memory.c +++ b/src/gba/memory.c @@ -381,7 +381,7 @@ static void GBASetActiveRegion(struct ARMCore* cpu, uint32_t address) { wait += waitstatesRegion[REGION_WORKING_RAM]; #define LOAD_WORKING_IRAM LOAD_32(value, address & (SIZE_WORKING_IRAM - 4), memory->iwram); -#define LOAD_IO value = GBAIORead(gba, address & OFFSET_MASK & ~2) | (GBAIORead(gba, (address & OFFSET_MASK) | 2) << 16); +#define LOAD_IO value = GBAIORead(gba, address & OFFSET_MASK & ~3) | (GBAIORead(gba, (address & OFFSET_MASK & ~1) | 2) << 16); #define LOAD_PALETTE_RAM \ LOAD_32(value, address & (SIZE_PALETTE_RAM - 4), gba->video.palette); \ From 1aa5f1b9ff85f75d4386a408f16d26206e5c7356 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 14 Sep 2021 11:48:58 -0700 Subject: [PATCH 04/31] mGUI: Blacklist .cheats extension for ROMs --- src/feature/gui/gui-runner.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/feature/gui/gui-runner.c b/src/feature/gui/gui-runner.c index b7bb72a1b..1d245819f 100644 --- a/src/feature/gui/gui-runner.c +++ b/src/feature/gui/gui-runner.c @@ -95,6 +95,9 @@ static bool _testExtensions(const char* name) { if (!strncmp(ext, "ini", PATH_MAX)) { return false; } + if (!strncmp(ext, "cheats", PATH_MAX)) { + return false; + } if (!strncmp(ext, "ss", 2)) { return false; } From 86fe869087b31273b6a6dc35a0b6b2bbdf0ed57d Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Mon, 20 Sep 2021 15:59:28 -0700 Subject: [PATCH 05/31] ARM7: Fix unsigned multiply timing --- CHANGES | 1 + include/mgba/internal/arm/isa-inlines.h | 17 ++++++++++++- src/arm/isa-arm.c | 32 ++++++++++++------------- src/arm/isa-thumb.c | 2 +- 4 files changed, 34 insertions(+), 18 deletions(-) diff --git a/CHANGES b/CHANGES index 5d859f327..dc4f2de93 100644 --- a/CHANGES +++ b/CHANGES @@ -11,6 +11,7 @@ Features: - Discord Rich Presence now supports time elapsed - Additional scaling shaders Emulation fixes: + - ARM7: Fix unsigned multiply timing - GB I/O: Fix incrementing SGB controller when P14 is low (fixes mgba.io/i/2202) - GB Memory: Add cursory cartridge open bus emulation (fixes mgba.io/i/2032) - GB Video: Render SGB border when unmasking with ATTR/PAL_SET (fixes mgba.io/i/2261) diff --git a/include/mgba/internal/arm/isa-inlines.h b/include/mgba/internal/arm/isa-inlines.h index 2ee6aee7c..ebda28e41 100644 --- a/include/mgba/internal/arm/isa-inlines.h +++ b/include/mgba/internal/arm/isa-inlines.h @@ -37,7 +37,7 @@ #define ARM_V_ADDITION(M, N, D) (!(ARM_SIGN((M) ^ (N))) && (ARM_SIGN((M) ^ (D)))) #define ARM_V_SUBTRACTION(M, N, D) ((ARM_SIGN((M) ^ (N))) && (ARM_SIGN((M) ^ (D)))) -#define ARM_WAIT_MUL(R, WAIT) \ +#define ARM_WAIT_SMUL(R, WAIT) \ { \ int32_t wait = WAIT; \ if ((R & 0xFFFFFF00) == 0xFFFFFF00 || !(R & 0xFFFFFF00)) { \ @@ -52,6 +52,21 @@ currentCycles += cpu->memory.stall(cpu, wait); \ } +#define ARM_WAIT_UMUL(R, WAIT) \ + { \ + int32_t wait = WAIT; \ + if (!(R & 0xFFFFFF00)) { \ + wait += 1; \ + } else if (!(R & 0xFFFF0000)) { \ + wait += 2; \ + } else if (!(R & 0xFF000000)) { \ + wait += 3; \ + } else { \ + wait += 4; \ + } \ + currentCycles += cpu->memory.stall(cpu, wait); \ + } + #define ARM_STUB cpu->irqh.hitStub(cpu, opcode) #define ARM_ILL cpu->irqh.hitIllegal(cpu, opcode) diff --git a/src/arm/isa-arm.c b/src/arm/isa-arm.c index c573cdbbd..576eeb874 100644 --- a/src/arm/isa-arm.c +++ b/src/arm/isa-arm.c @@ -320,38 +320,38 @@ ATTRIBUTE_NOINLINE static void _neutralS(struct ARMCore* cpu, int32_t d) { DEFINE_ALU_INSTRUCTION_EX_ARM(NAME ## _ROR, S_BODY, _shiftROR, BODY) \ DEFINE_ALU_INSTRUCTION_EX_ARM(NAME ## I, S_BODY, _immediate, BODY) -#define DEFINE_MULTIPLY_INSTRUCTION_EX_ARM(NAME, BODY, S_BODY) \ +#define DEFINE_MULTIPLY_INSTRUCTION_EX_ARM(NAME, BODY, S_BODY, SIGNED) \ DEFINE_INSTRUCTION_ARM(NAME, \ int rd = (opcode >> 16) & 0xF; \ int rs = (opcode >> 8) & 0xF; \ int rm = opcode & 0xF; \ if (rd != ARM_PC) { \ - ARM_WAIT_MUL(cpu->gprs[rs], 0); \ + ARM_WAIT_ ## SIGNED ## MUL(cpu->gprs[rs], 0); \ BODY; \ S_BODY; \ } \ currentCycles += cpu->memory.activeNonseqCycles32 - cpu->memory.activeSeqCycles32) -#define DEFINE_MULTIPLY_INSTRUCTION_2_EX_ARM(NAME, BODY, S_BODY, WAIT) \ +#define DEFINE_MULTIPLY_INSTRUCTION_2_EX_ARM(NAME, BODY, S_BODY, SIGNED, WAIT) \ DEFINE_INSTRUCTION_ARM(NAME, \ int rd = (opcode >> 12) & 0xF; \ int rdHi = (opcode >> 16) & 0xF; \ int rs = (opcode >> 8) & 0xF; \ int rm = opcode & 0xF; \ if (rdHi != ARM_PC && rd != ARM_PC) { \ - ARM_WAIT_MUL(cpu->gprs[rs], WAIT); \ + ARM_WAIT_ ## SIGNED ## MUL(cpu->gprs[rs], WAIT); \ BODY; \ S_BODY; \ } \ currentCycles += cpu->memory.activeNonseqCycles32 - cpu->memory.activeSeqCycles32) -#define DEFINE_MULTIPLY_INSTRUCTION_ARM(NAME, BODY, S_BODY) \ - DEFINE_MULTIPLY_INSTRUCTION_EX_ARM(NAME, BODY, ) \ - DEFINE_MULTIPLY_INSTRUCTION_EX_ARM(NAME ## S, BODY, S_BODY) +#define DEFINE_MULTIPLY_INSTRUCTION_ARM(NAME, BODY, S_BODY, SIGNED) \ + DEFINE_MULTIPLY_INSTRUCTION_EX_ARM(NAME, BODY, , SIGNED) \ + DEFINE_MULTIPLY_INSTRUCTION_EX_ARM(NAME ## S, BODY, S_BODY, SIGNED) -#define DEFINE_MULTIPLY_INSTRUCTION_2_ARM(NAME, BODY, S_BODY, WAIT) \ - DEFINE_MULTIPLY_INSTRUCTION_2_EX_ARM(NAME, BODY, , WAIT) \ - DEFINE_MULTIPLY_INSTRUCTION_2_EX_ARM(NAME ## S, BODY, S_BODY, WAIT) +#define DEFINE_MULTIPLY_INSTRUCTION_2_ARM(NAME, BODY, S_BODY, SIGNED, WAIT) \ + DEFINE_MULTIPLY_INSTRUCTION_2_EX_ARM(NAME, BODY, , SIGNED, WAIT) \ + DEFINE_MULTIPLY_INSTRUCTION_2_EX_ARM(NAME ## S, BODY, S_BODY, SIGNED, WAIT) #define DEFINE_LOAD_STORE_INSTRUCTION_EX_ARM(NAME, ADDRESS, WRITEBACK, LS, BODY) \ DEFINE_INSTRUCTION_ARM(NAME, \ @@ -520,34 +520,34 @@ DEFINE_ALU_INSTRUCTION_S_ONLY_ARM(TST, ARM_NEUTRAL_S(n, cpu->shifterOperand, alu // Begin multiply definitions -DEFINE_MULTIPLY_INSTRUCTION_2_ARM(MLA, cpu->gprs[rdHi] = cpu->gprs[rm] * cpu->gprs[rs] + cpu->gprs[rd], ARM_NEUTRAL_S(, , cpu->gprs[rdHi]), 1) -DEFINE_MULTIPLY_INSTRUCTION_ARM(MUL, cpu->gprs[rd] = cpu->gprs[rm] * cpu->gprs[rs], ARM_NEUTRAL_S(cpu->gprs[rm], cpu->gprs[rs], cpu->gprs[rd])) +DEFINE_MULTIPLY_INSTRUCTION_2_ARM(MLA, cpu->gprs[rdHi] = cpu->gprs[rm] * cpu->gprs[rs] + cpu->gprs[rd], ARM_NEUTRAL_S(, , cpu->gprs[rdHi]), S, 1) +DEFINE_MULTIPLY_INSTRUCTION_ARM(MUL, cpu->gprs[rd] = cpu->gprs[rm] * cpu->gprs[rs], ARM_NEUTRAL_S(cpu->gprs[rm], cpu->gprs[rs], cpu->gprs[rd]), S) DEFINE_MULTIPLY_INSTRUCTION_2_ARM(SMLAL, int64_t d = ((int64_t) cpu->gprs[rm]) * ((int64_t) cpu->gprs[rs]) + ((uint32_t) cpu->gprs[rd]); int32_t dHi = cpu->gprs[rdHi] + (d >> 32); cpu->gprs[rd] = d; cpu->gprs[rdHi] = dHi;, - ARM_NEUTRAL_HI_S(cpu->gprs[rd], dHi), 2) + ARM_NEUTRAL_HI_S(cpu->gprs[rd], dHi), S, 2) DEFINE_MULTIPLY_INSTRUCTION_2_ARM(SMULL, int64_t d = ((int64_t) cpu->gprs[rm]) * ((int64_t) cpu->gprs[rs]); cpu->gprs[rd] = d; cpu->gprs[rdHi] = d >> 32;, - ARM_NEUTRAL_HI_S(cpu->gprs[rd], cpu->gprs[rdHi]), 1) + ARM_NEUTRAL_HI_S(cpu->gprs[rd], cpu->gprs[rdHi]), S, 1) DEFINE_MULTIPLY_INSTRUCTION_2_ARM(UMLAL, uint64_t d = ARM_UXT_64(cpu->gprs[rm]) * ARM_UXT_64(cpu->gprs[rs]) + ((uint32_t) cpu->gprs[rd]); uint32_t dHi = ((uint32_t) cpu->gprs[rdHi]) + (d >> 32); cpu->gprs[rd] = d; cpu->gprs[rdHi] = dHi;, - ARM_NEUTRAL_HI_S(cpu->gprs[rd], dHi), 2) + ARM_NEUTRAL_HI_S(cpu->gprs[rd], dHi), U, 2) DEFINE_MULTIPLY_INSTRUCTION_2_ARM(UMULL, uint64_t d = ARM_UXT_64(cpu->gprs[rm]) * ARM_UXT_64(cpu->gprs[rs]); cpu->gprs[rd] = d; cpu->gprs[rdHi] = d >> 32;, - ARM_NEUTRAL_HI_S(cpu->gprs[rd], cpu->gprs[rdHi]), 1) + ARM_NEUTRAL_HI_S(cpu->gprs[rd], cpu->gprs[rdHi]), U, 1) // End multiply definitions diff --git a/src/arm/isa-thumb.c b/src/arm/isa-thumb.c index 7ee211349..6e3c30e11 100644 --- a/src/arm/isa-thumb.c +++ b/src/arm/isa-thumb.c @@ -232,7 +232,7 @@ DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(NEG, THUMB_SUBTRACTION(cpu->gprs[rd], 0, cp DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(CMP2, int32_t aluOut = cpu->gprs[rd] - cpu->gprs[rn]; THUMB_SUBTRACTION_S(cpu->gprs[rd], cpu->gprs[rn], aluOut)) DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(CMN, int32_t aluOut = cpu->gprs[rd] + cpu->gprs[rn]; THUMB_ADDITION_S(cpu->gprs[rd], cpu->gprs[rn], aluOut)) DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(ORR, cpu->gprs[rd] = cpu->gprs[rd] | cpu->gprs[rn]; THUMB_NEUTRAL_S( , , cpu->gprs[rd])) -DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(MUL, ARM_WAIT_MUL(cpu->gprs[rd], 0); cpu->gprs[rd] *= cpu->gprs[rn]; THUMB_NEUTRAL_S( , , cpu->gprs[rd]); currentCycles += cpu->memory.activeNonseqCycles16 - cpu->memory.activeSeqCycles16) +DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(MUL, ARM_WAIT_SMUL(cpu->gprs[rd], 0); cpu->gprs[rd] *= cpu->gprs[rn]; THUMB_NEUTRAL_S( , , cpu->gprs[rd]); currentCycles += cpu->memory.activeNonseqCycles16 - cpu->memory.activeSeqCycles16) DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(BIC, cpu->gprs[rd] = cpu->gprs[rd] & ~cpu->gprs[rn]; THUMB_NEUTRAL_S( , , cpu->gprs[rd])) DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(MVN, cpu->gprs[rd] = ~cpu->gprs[rn]; THUMB_NEUTRAL_S( , , cpu->gprs[rd])) From 2d4294e41780d29fea30068b21a1f1386444dd8a Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Wed, 22 Sep 2021 15:52:29 -0700 Subject: [PATCH 06/31] GBA Video: Don't iterate affine backgrounds when disabled --- CHANGES | 1 + src/gba/renderers/gl.c | 12 ++++++++---- src/gba/renderers/video-software.c | 24 ++++++++++++++++-------- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/CHANGES b/CHANGES index dc4f2de93..c390523ef 100644 --- a/CHANGES +++ b/CHANGES @@ -19,6 +19,7 @@ Emulation fixes: - GBA Memory: Fix misaligned 32-bit I/O loads (fixes mgba.io/i/2307) - GBA SIO: Fix SI value for unattached MULTI mode - GBA Video: Fix backdrop color if DISPCNT is first set to 0 (fixes mgba.io/i/2260) + - GBA Video: Don't iterate affine backgrounds when disabled Other fixes: - Core: Don't attempt to restore rewind diffs past start of rewind - FFmpeg: Don't attempt to use YUV 4:2:0 for lossless videos (fixes mgba.io/i/2084) diff --git a/src/gba/renderers/gl.c b/src/gba/renderers/gl.c index 783279230..7ab07c2be 100644 --- a/src/gba/renderers/gl.c +++ b/src/gba/renderers/gl.c @@ -1433,10 +1433,14 @@ void GBAVideoGLRendererDrawScanline(struct GBAVideoRenderer* renderer, int y) { } if (GBARegisterDISPCNTGetMode(glRenderer->dispcnt) != 0) { - glRenderer->bg[2].affine.sx += glRenderer->bg[2].affine.dmx; - glRenderer->bg[2].affine.sy += glRenderer->bg[2].affine.dmy; - glRenderer->bg[3].affine.sx += glRenderer->bg[3].affine.dmx; - glRenderer->bg[3].affine.sy += glRenderer->bg[3].affine.dmy; + if (glRenderer->bg[2].enabled == 4) { + glRenderer->bg[2].affine.sx += glRenderer->bg[2].affine.dmx; + glRenderer->bg[2].affine.sy += glRenderer->bg[2].affine.dmy; + } + if (glRenderer->bg[3].enabled == 4) { + glRenderer->bg[3].affine.sx += glRenderer->bg[3].affine.dmx; + glRenderer->bg[3].affine.sy += glRenderer->bg[3].affine.dmy; + } } } diff --git a/src/gba/renderers/video-software.c b/src/gba/renderers/video-software.c index 5fc61f076..ebcafbd59 100644 --- a/src/gba/renderers/video-software.c +++ b/src/gba/renderers/video-software.c @@ -545,10 +545,14 @@ static void GBAVideoSoftwareRendererDrawScanline(struct GBAVideoRenderer* render if (!dirty) { if (GBARegisterDISPCNTGetMode(softwareRenderer->dispcnt) != 0) { - softwareRenderer->bg[2].sx += softwareRenderer->bg[2].dmx; - softwareRenderer->bg[2].sy += softwareRenderer->bg[2].dmy; - softwareRenderer->bg[3].sx += softwareRenderer->bg[3].dmx; - softwareRenderer->bg[3].sy += softwareRenderer->bg[3].dmy; + if (softwareRenderer->bg[2].enabled == 4) { + softwareRenderer->bg[2].sx += softwareRenderer->bg[2].dmx; + softwareRenderer->bg[2].sy += softwareRenderer->bg[2].dmy; + } + if (softwareRenderer->bg[3].enabled == 4) { + softwareRenderer->bg[3].sx += softwareRenderer->bg[3].dmx; + softwareRenderer->bg[3].sy += softwareRenderer->bg[3].dmy; + } } return; } @@ -621,10 +625,14 @@ static void GBAVideoSoftwareRendererDrawScanline(struct GBAVideoRenderer* render GBAVideoSoftwareRendererPostprocessBuffer(softwareRenderer); if (GBARegisterDISPCNTGetMode(softwareRenderer->dispcnt) != 0) { - softwareRenderer->bg[2].sx += softwareRenderer->bg[2].dmx; - softwareRenderer->bg[2].sy += softwareRenderer->bg[2].dmy; - softwareRenderer->bg[3].sx += softwareRenderer->bg[3].dmx; - softwareRenderer->bg[3].sy += softwareRenderer->bg[3].dmy; + if (softwareRenderer->bg[2].enabled == 4) { + softwareRenderer->bg[2].sx += softwareRenderer->bg[2].dmx; + softwareRenderer->bg[2].sy += softwareRenderer->bg[2].dmy; + } + if (softwareRenderer->bg[3].enabled == 4) { + softwareRenderer->bg[3].sx += softwareRenderer->bg[3].dmx; + softwareRenderer->bg[3].sy += softwareRenderer->bg[3].dmy; + } } if (softwareRenderer->bg[0].enabled > 0 && softwareRenderer->bg[0].enabled < 4) { From ca91489e000eda0a0e351dccccd29c8eb765c7cb Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Wed, 22 Sep 2021 15:52:48 -0700 Subject: [PATCH 07/31] GBA Video: Delay enabling backgrounds in bitmap modes (fixes #1668) --- CHANGES | 1 + src/gba/renderers/video-software.c | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index c390523ef..dcd5f9edf 100644 --- a/CHANGES +++ b/CHANGES @@ -20,6 +20,7 @@ Emulation fixes: - GBA SIO: Fix SI value for unattached MULTI mode - GBA Video: Fix backdrop color if DISPCNT is first set to 0 (fixes mgba.io/i/2260) - GBA Video: Don't iterate affine backgrounds when disabled + - GBA Video: Delay enabling backgrounds in bitmap modes (fixes mgba.io/i/1668) Other fixes: - Core: Don't attempt to restore rewind diffs past start of rewind - FFmpeg: Don't attempt to use YUV 4:2:0 for lossless videos (fixes mgba.io/i/2084) diff --git a/src/gba/renderers/video-software.c b/src/gba/renderers/video-software.c index ebcafbd59..d9f8904e2 100644 --- a/src/gba/renderers/video-software.c +++ b/src/gba/renderers/video-software.c @@ -727,9 +727,11 @@ static void _enableBg(struct GBAVideoSoftwareRenderer* renderer, int bg, bool ac if (!active) { renderer->bg[bg].enabled = 0; } else if (!wasActive && active) { - if (renderer->nextY == 0 || GBARegisterDISPCNTGetMode(renderer->dispcnt) > 2) { + if (renderer->nextY == 0) { // TODO: Investigate in more depth how switching background works in different modes renderer->bg[bg].enabled = 4; + } else if (GBARegisterDISPCNTGetMode(renderer->dispcnt) > 2) { + renderer->bg[bg].enabled = 2; } else { renderer->bg[bg].enabled = 1; } From 1c486cc30b8cdc75391d4ba2f60b2d820576cf5d Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Thu, 23 Sep 2021 22:09:40 -0700 Subject: [PATCH 08/31] Python: Attempt to fix issues with _pyLog --- src/platform/python/_builder.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform/python/_builder.h b/src/platform/python/_builder.h index ed1441368..62b5cb870 100644 --- a/src/platform/python/_builder.h +++ b/src/platform/python/_builder.h @@ -22,10 +22,10 @@ #define CXX_GUARD_END #define PYCPARSE +#define va_list void* typedef int... time_t; typedef int... off_t; -typedef ... va_list; typedef ...* png_structp; typedef ...* png_infop; typedef ...* png_unknown_chunkp; From 45444d5ea3f551fc7bca46f291d865c83deb8f2f Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Thu, 23 Sep 2021 22:30:13 -0700 Subject: [PATCH 09/31] Qt: Fix corrupted savestate and fatal error text --- CHANGES | 1 + src/platform/qt/CoreController.cpp | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index dcd5f9edf..de7213408 100644 --- a/CHANGES +++ b/CHANGES @@ -27,6 +27,7 @@ Other fixes: - GB Video: Fix memory leak when reseting SGB games - GBA: Fix out of bounds ROM accesses on patched ROMs smaller than 32 MiB - Libretro: Fix crash when using Game Boy codes (fixes mgba.io/i/2281) + - Qt: Fix corrupted savestate and fatal error text Misc: - Core: Suspend runloop when a core crashes - mGUI: Add margin to right-aligned menu text (fixes mgba.io/i/871) diff --git a/src/platform/qt/CoreController.cpp b/src/platform/qt/CoreController.cpp index 58ba1797d..b71b611ea 100644 --- a/src/platform/qt/CoreController.cpp +++ b/src/platform/qt/CoreController.cpp @@ -183,14 +183,17 @@ CoreController::CoreController(mCore* core, QObject* parent) return; } } - message = QString().vsprintf(format, args); + va_list argc; + va_copy(argc, args); + message = QString().vsprintf(format, argc); + va_end(argc); QMetaObject::invokeMethod(controller, "statusPosted", Q_ARG(const QString&, message)); } message = QString().vsprintf(format, args); QMetaObject::invokeMethod(controller, "logPosted", Q_ARG(int, level), Q_ARG(int, category), Q_ARG(const QString&, message)); if (level == mLOG_FATAL) { mCoreThreadMarkCrashed(controller->thread()); - QMetaObject::invokeMethod(controller, "crashed", Q_ARG(const QString&, QString().vsprintf(format, args))); + QMetaObject::invokeMethod(controller, "crashed", Q_ARG(const QString&, message)); } }; } From 6a05dba8797316c0e75f6e226031bbc658defc76 Mon Sep 17 00:00:00 2001 From: aldelaro5 Date: Mon, 27 Sep 2021 19:47:07 -0400 Subject: [PATCH 10/31] gdb-stub: Add support for the T command by faking it --- src/debugger/gdb-stub.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/debugger/gdb-stub.c b/src/debugger/gdb-stub.c index 706e1fde8..a37e5362a 100644 --- a/src/debugger/gdb-stub.c +++ b/src/debugger/gdb-stub.c @@ -629,6 +629,7 @@ size_t _parseGDBMessage(struct GDBStub* stub, const char* message) { _readGPRs(stub, message); break; case 'H': + case 'T': // This is faked because we only have one thread strncpy(stub->outgoing, "OK", GDB_STUB_MAX_LINE - 4); _sendMessage(stub); From 669fb5232b672aca39e48b32cf44c7a021ca7b91 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 28 Sep 2021 12:49:39 -0700 Subject: [PATCH 11/31] GBA Video: Improve BG enable latching --- src/gba/renderers/video-software.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/gba/renderers/video-software.c b/src/gba/renderers/video-software.c index d9f8904e2..cd4bfc0e4 100644 --- a/src/gba/renderers/video-software.c +++ b/src/gba/renderers/video-software.c @@ -635,19 +635,19 @@ static void GBAVideoSoftwareRendererDrawScanline(struct GBAVideoRenderer* render } } - if (softwareRenderer->bg[0].enabled > 0 && softwareRenderer->bg[0].enabled < 4) { + if (softwareRenderer->bg[0].enabled != 0 && softwareRenderer->bg[0].enabled < 4) { ++softwareRenderer->bg[0].enabled; DIRTY_SCANLINE(softwareRenderer, y); } - if (softwareRenderer->bg[1].enabled > 0 && softwareRenderer->bg[1].enabled < 4) { + if (softwareRenderer->bg[1].enabled != 0 && softwareRenderer->bg[1].enabled < 4) { ++softwareRenderer->bg[1].enabled; DIRTY_SCANLINE(softwareRenderer, y); } - if (softwareRenderer->bg[2].enabled > 0 && softwareRenderer->bg[2].enabled < 4) { + if (softwareRenderer->bg[2].enabled != 0 && softwareRenderer->bg[2].enabled < 4) { ++softwareRenderer->bg[2].enabled; DIRTY_SCANLINE(softwareRenderer, y); } - if (softwareRenderer->bg[3].enabled > 0 && softwareRenderer->bg[3].enabled < 4) { + if (softwareRenderer->bg[3].enabled != 0 && softwareRenderer->bg[3].enabled < 4) { ++softwareRenderer->bg[3].enabled; DIRTY_SCANLINE(softwareRenderer, y); } @@ -725,7 +725,11 @@ static void GBAVideoSoftwareRendererPutPixels(struct GBAVideoRenderer* renderer, static void _enableBg(struct GBAVideoSoftwareRenderer* renderer, int bg, bool active) { int wasActive = renderer->bg[bg].enabled; if (!active) { - renderer->bg[bg].enabled = 0; + if (renderer->nextY == 0 || (wasActive > 0 && wasActive < 4)) { + renderer->bg[bg].enabled = 0; + } else if (wasActive == 4) { + renderer->bg[bg].enabled = -2; + } } else if (!wasActive && active) { if (renderer->nextY == 0) { // TODO: Investigate in more depth how switching background works in different modes @@ -735,6 +739,8 @@ static void _enableBg(struct GBAVideoSoftwareRenderer* renderer, int bg, bool ac } else { renderer->bg[bg].enabled = 1; } + } else if (wasActive < 0 && active) { + renderer->bg[bg].enabled = 4; } } From 2e3a30abd673d7d3e825f860038212d5fe44d377 Mon Sep 17 00:00:00 2001 From: Liu Wenyuan <15816141883@163.com> Date: Wed, 11 Aug 2021 08:54:33 +0000 Subject: [PATCH 12/31] Qt: Update translation (Chinese (Simplified)) Currently translated at 87.8% (966 of 1099 strings) Translation: mGBA/Qt Translate-URL: https://hosted.weblate.org/projects/mgba/mgba-qt/zh_Hans/ --- src/platform/qt/ts/mgba-zh_CN.ts | 331 ++++++++++++++++--------------- 1 file changed, 167 insertions(+), 164 deletions(-) diff --git a/src/platform/qt/ts/mgba-zh_CN.ts b/src/platform/qt/ts/mgba-zh_CN.ts index 467a6afa0..009946b50 100644 --- a/src/platform/qt/ts/mgba-zh_CN.ts +++ b/src/platform/qt/ts/mgba-zh_CN.ts @@ -41,17 +41,17 @@ Game Boy Advance 是任天堂有限公司(Nintendo Co., Ltd.)的注册商标 An update is available - + 有可用的更新 {text} - + {text} {details} - + {details} @@ -173,7 +173,7 @@ Game Boy Advance 是任天堂有限公司(Nintendo Co., Ltd.)的注册商标 Add New Code - + 添加作弊码 @@ -183,12 +183,12 @@ Game Boy Advance 是任天堂有限公司(Nintendo Co., Ltd.)的注册商标 Add Lines - + 添加行 Code type - + 作弊码类型 @@ -1013,17 +1013,17 @@ Game Boy Advance 是任天堂有限公司(Nintendo Co., Ltd.)的注册商标 EEPROM 8kB - + EEPROM 8kB EEPROM 512 bytes - + EEPROM 512 字节 SRAM 64kB (bootlegs only) - + SRAM 64kB(盗版专用) @@ -1073,7 +1073,7 @@ Game Boy Advance 是任天堂有限公司(Nintendo Co., Ltd.)的注册商标 Palette preset - + 调色板预设 @@ -1209,29 +1209,32 @@ Game Boy Advance 是任天堂有限公司(Nintendo Co., Ltd.)的注册商标 An update to %1 is available. Do you want to download and install it now? You will need to restart the emulator when the download is complete. - + %1 有更新可用。 +您想要现在下载并安装它吗?在下载完成后,您将需要重新启动模拟器。 Current version: %1 New version: %2 Download size: %3 - + 当前版本:%1 +新版本:%2 +更新大小:%3 Downloading update... - + 正在下载更新... Downloading failed. Please update manually. - + 下载失败。请手动更新。 Downloading done. Press OK to restart %1 and install the update. - + 下载完成。按确定按钮以重新启动 %1 并安装更新。 @@ -1239,22 +1242,22 @@ Download size: %3 Stable - + 稳定版 Development - + 开发版 Unknown - + 未知 (None) - + (无) @@ -1291,7 +1294,7 @@ Download size: %3 Autodetect (recommended) - + 自动检测(推荐) @@ -1746,7 +1749,7 @@ Download size: %3 Integer part (low) - 整数部分(低) + 整数部分(低) @@ -1754,7 +1757,7 @@ Download size: %3 Integer part (high) - 整数部分(高) + 整数部分(高) @@ -2464,7 +2467,7 @@ Download size: %3 Address (low) - 地址(低) + 地址(低) @@ -2476,21 +2479,21 @@ Download size: %3 Address (high) - 地址(高) + 地址(高) Sound frequency (low) - 声音频率(低) + 声音频率(低) Sound frequency (high) - 声音频率(高) + 声音频率(高) @@ -2516,13 +2519,13 @@ Download size: %3 Green (low) - 绿色(低) + 绿色(低) Green (high) - 绿色(高) + 绿色(高) @@ -3038,7 +3041,7 @@ Download size: %3 Active face buttons - + 活跃正面按钮 @@ -3048,7 +3051,7 @@ Download size: %3 32× clocking (CGB only) - 32×时钟(仅 CGB) + 32× 时钟(CGB 特有) @@ -3058,7 +3061,7 @@ Download size: %3 Divider - + 除数 @@ -3081,33 +3084,33 @@ Download size: %3 Serial - 串口 + 串口 Joypad - 游戏手柄 + 手柄 Volume right - 右音量 + 右侧音量 Output right - 输出右侧 + 右侧输出 Volume left - + 左侧音量 Output left - + 左侧输出 @@ -3117,59 +3120,59 @@ Download size: %3 Enable sprites - 启用精灵图 + 启用精灵 Double-height sprites - + 二倍高度精灵 Background tile map - 背景瓦片地图 + 背景图块集 0x9800 – 0x9BFF - + 0x9800 – 0x9BFF 0x9C00 – 0x9FFF - + 0x9C00 – 0x9FFF Background tile data - + 背景图块数据 0x8800 – 0x87FF - + 0x8800 – 0x87FF 0x8000 – 0x8FFF - + 0x8000 – 0x8FFF Enable window - + 启用窗口 Window tile map - + 窗口图块集 Enable LCD - + 启用 LCD @@ -3179,62 +3182,62 @@ Download size: %3 0: HBlank - + 0:HBlank 1: VBlank - + 1:VBlank 2: OAM scan - + 2:OAM 扫描 3: HDraw - + 3:HDraw In LYC - + 在 LYC 中 Enable HBlank (mode 0) IRQ - + 启用 HBlank(模式 0)IRQ Enable VBlank (mode 1) IRQ - + 启用 VBlank(模式 1)IRQ Enable OAM (mode 2) IRQ - + 启用 OAM(模式 2)IRQ Enable LYC IRQ - + 启用 LYC IRQ Current Y coordinate - + 当前 Y 坐标 Comparison Y coordinate - + 对比 Y 坐标 Start upper byte - + 开始上部字节 @@ -3267,12 +3270,12 @@ Download size: %3 Prepare to switch speed - + 准备切换速度 Double speed - + 双倍速度 @@ -3282,40 +3285,40 @@ Download size: %3 Length - + 长度 Timing - + 定时 Write bit - + 写位 Read bit - + 读位 Unknown - + 未知 Current index - + 当前索引 Auto-increment - + 自动递增 @@ -3332,17 +3335,17 @@ Download size: %3 Sprite ordering - + 精灵排序 OAM order - + OAM 顺序 x coordinate sorting - + x 坐标排序 @@ -3361,12 +3364,12 @@ Download size: %3 Super (L) - Super (L) + Super(L) Super (R) - Super (R) + Super(R) @@ -3833,62 +3836,62 @@ Download size: %3 Save games and save states (%1) - + 保存游戏和即时存档(%1) Select save game or save state - + 选择保存游戏或即时存档 Save games (%1) - + 保存游戏(%1) Select save game - + 选择保存游戏 Conversion failed - + 转换失败 Failed to convert the save game. This is probably a bug. - + 未能转换保存游戏。这可能是一个错误。 No file selected - + 未选择文件 Could not open file - + 无法打开文件 No valid formats found - + 未找到有效格式 Please select a valid input file - + 请选择一个有效的输入文件 No valid conversions found - + 未发现有效转换 Cannot convert save games between platforms - + 无法在平台之间转换保存游戏 @@ -3958,7 +3961,7 @@ Download size: %3 Select directory - + 选择目录 @@ -3968,30 +3971,30 @@ Download size: %3 Never - + 从不 Just now - + 刚刚 Less than an hour ago - + 不到一小时前 %n hour(s) ago - - + + %n 小时前 %n day(s) ago - - + + %n 天前 @@ -4251,7 +4254,7 @@ Download size: %3 %1 - %2 (%3 fps) - %4 - %1 - %2 (%3 fps) - %4 + %1 - %2(%3 fps)- %4 @@ -4276,53 +4279,53 @@ Download size: %3 Save games (%1) - + 保存游戏(%1) Select save game - + 选择保存游戏 mGBA save state files (%1) - + mGBA 即时存档文件(%1) Select save state - + 选择即时存档 Select e-Reader card images - + 选择 e-Reader 卡片图像 Image file (*.png *.jpg *.jpeg) - + 图像文件(*.png *.jpg *.jpeg) Conversion finished - + 转换完成 %1 of %2 e-Reader cards converted successfully. - + 成功转换了 %1 张(共 %2 张)e-Reader 卡片。 Load alternate save game... - + 加载备用保存游戏... Load temporary save game... - + 加载临时保存游戏... @@ -4347,7 +4350,7 @@ Download size: %3 Convert e-Reader card image to raw... - + 将 e-Reader 卡片图像转换为原始数据... @@ -4428,7 +4431,7 @@ Download size: %3 Convert save game... - + 转换保存游戏... @@ -4448,7 +4451,7 @@ Download size: %3 Connect to Dolphin... - + 连接到 Dolphin... @@ -4846,7 +4849,7 @@ Download size: %3 %1 byte - + %1字节 @@ -4856,7 +4859,7 @@ Download size: %3 %1 MiB - + %1 兆字节 @@ -4998,12 +5001,12 @@ Download size: %3 Convert/Extract Save Game - + 转换或提取保存游戏 Input file - + 输入文件 @@ -5014,22 +5017,22 @@ Download size: %3 Output file - + 输出文件 %1 %2 save game - + %1 %2 保存游戏 little endian - + 小端 big endian - + 大端 @@ -5039,62 +5042,62 @@ Download size: %3 %1 flash - + %1 闪存 %1 EEPROM - + %1 EEPROM %1 SRAM + RTC - + %1 SRAM + RTC %1 SRAM - + %1 SRAM packed MBC2 - + 包装的MBC2 unpacked MBC2 - + 未包装的 MBC2 MBC6 flash - + MBC6 闪存 MBC6 combined SRAM + flash - + MBC6组合SRAM+闪存 MBC6 SRAM - + MBC6 SRAM TAMA5 - + TAMA5 %1 (%2) - + %1(%2) %1 save state with embedded %2 save game - + 带嵌入的 %2 保存游戏的 %1 保存状态 @@ -5192,7 +5195,7 @@ Download size: %3 Update - + 更新 @@ -5327,22 +5330,22 @@ Download size: %3 Audio in multiplayer: - + 多人游戏中的音频: All windows - + 所有窗口 Player 1 window only - + 仅 P1 窗口 Currently active player window - + 当前活跃的玩家窗口 @@ -5409,92 +5412,92 @@ Download size: %3 Pause - + 暂停 When inactive: - + 不活跃时: When minimized: - + 最小化时: Current channel: - + 当前通道: Current version: - + 当前版本: Update channel: - + 更新通道: Available version: - + 可用版本: (Unknown) - + (未知) Last checked: - + 上次检查更新时间: Automatically check on start - + 启动时自动检查 Check now - + 立即检查更新 Default color palette only - + 只使用默认调色板 SGB color palette if available - + 可用时使用 SGB 调色板 GBC color palette if available - + 可用时使用 GBC 调色板 SGB (preferred) or GBC color palette if available - + 可用时使用 SGB(首选)或 GBC 调色板 Game Boy Camera - + Game Boy Camera Driver: - + 驱动: Source: - + 来源: @@ -5655,58 +5658,58 @@ Download size: %3 Save state extra data: - + 保存存档附加数据: Save game - + 保存游戏 Load state extra data: - + 载入存档附加数据: Models - + 型号 GB only: - + 仅 GB: SGB compatible: - + 兼容 SGB: GBC only: - + 仅 GBC: GBC compatible: - + 兼容 GBC: SGB and GBC compatible: - + 兼容 SGB 和 GBC: Game Boy palette - + Game Boy 调色板 Preset: - + 预设: @@ -5728,7 +5731,7 @@ Download size: %3 Enable VBA bug compatibility in ROM hacks - + 启用用于改版的 VBA 漏洞兼容模式 @@ -6170,7 +6173,7 @@ Download size: %3 CRF - + CRF From 1b6c0a75451a099859d24166b21fbffcd855ab8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=99=A8=E6=97=AD?= Date: Thu, 26 Aug 2021 02:10:06 +0000 Subject: [PATCH 13/31] Qt: Update translation (Chinese (Simplified)) Currently translated at 92.9% (1021 of 1099 strings) Translation: mGBA/Qt Translate-URL: https://hosted.weblate.org/projects/mgba/mgba-qt/zh_Hans/ --- src/platform/qt/ts/mgba-zh_CN.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/platform/qt/ts/mgba-zh_CN.ts b/src/platform/qt/ts/mgba-zh_CN.ts index 009946b50..370a5f29e 100644 --- a/src/platform/qt/ts/mgba-zh_CN.ts +++ b/src/platform/qt/ts/mgba-zh_CN.ts @@ -3244,28 +3244,28 @@ Download size: %3 Color 0 shade - + 颜色 0 阴影 Color 1 shade - + 颜色 1 阴影 Color 2 shade - + 颜色 2 阴影 Color 3 shade - + 颜色 3 阴影 @@ -3280,7 +3280,7 @@ Download size: %3 VRAM bank - + 显存库 @@ -3350,7 +3350,7 @@ Download size: %3 WRAM bank - + 内存库 @@ -4854,7 +4854,7 @@ Download size: %3 %1 kiB - + %1 kiB From 1b696e45b2deb0ea65932fed9935f43db0b9ec29 Mon Sep 17 00:00:00 2001 From: Alexey Date: Fri, 20 Aug 2021 22:23:53 +0000 Subject: [PATCH 14/31] Qt: Update translation (Russian) Currently translated at 29.4% (324 of 1099 strings) Translation: mGBA/Qt Translate-URL: https://hosted.weblate.org/projects/mgba/mgba-qt/ru/ --- src/platform/qt/ts/mgba-ru.ts | 723 +++++++++++++++++----------------- 1 file changed, 364 insertions(+), 359 deletions(-) diff --git a/src/platform/qt/ts/mgba-ru.ts b/src/platform/qt/ts/mgba-ru.ts index 320b39374..e4b6be5e9 100644 --- a/src/platform/qt/ts/mgba-ru.ts +++ b/src/platform/qt/ts/mgba-ru.ts @@ -41,7 +41,7 @@ Game Boy Advance - зарегистрированная торговая мар An update is available - + Доступно обновление @@ -160,7 +160,7 @@ Game Boy Advance - зарегистрированная торговая мар Show advanced - + Расширенные настройки @@ -173,7 +173,7 @@ Game Boy Advance - зарегистрированная торговая мар Add New Code - + Добавить новый код @@ -188,7 +188,7 @@ Game Boy Advance - зарегистрированная торговая мар Code type - + Тип кода @@ -229,37 +229,37 @@ Game Boy Advance - зарегистрированная торговая мар Connect to Dolphin - + Соединение с Dolphin Local computer - + Локальный компьютер IP address - + IP-адрес Connect - + Подключиться Disconnect - + Отключиться Close - + Закрыть Reset on connect - + Сброс при соединении @@ -297,7 +297,7 @@ Game Boy Advance - зарегистрированная торговая мар Reset - + Сброс @@ -353,7 +353,7 @@ Game Boy Advance - зарегистрированная торговая мар I/O Viewer - + Просмотр I/O @@ -371,27 +371,27 @@ Game Boy Advance - зарегистрированная торговая мар Name - + Имя Location - + Расположение Platform - + Платформа Size - + Размер CRC32 - + CRC32 @@ -418,52 +418,52 @@ Game Boy Advance - зарегистрированная торговая мар 5 - + 5 6 - + 6 8 - + 8 4 - + 4 1 - + 1 3 - + 3 7 - + 7 9 - + 9 2 - + 2 Cancel - + Отмена @@ -471,12 +471,12 @@ Game Boy Advance - зарегистрированная торговая мар Logs - + Логи Enabled Levels - + Активные уровни @@ -516,17 +516,17 @@ Game Boy Advance - зарегистрированная торговая мар Advanced settings - + Расширенные настройки Clear - + Очистить Max Lines - + Макс. строк @@ -534,7 +534,7 @@ Game Boy Advance - зарегистрированная торговая мар Maps - + Карты @@ -544,12 +544,12 @@ Game Boy Advance - зарегистрированная торговая мар Export - Экспортировать + Экспорт Copy - + Копировать @@ -557,17 +557,17 @@ Game Boy Advance - зарегистрированная торговая мар Save Memory Range - + Сохранить область памяти Start Address: - + Исходный адрес: Byte Count: - + Количество байт: @@ -580,43 +580,43 @@ Game Boy Advance - зарегистрированная торговая мар Memory Search - + Поиск в памяти Address - Адрес + Адрес Current Value - + Текущее значение Type - + Тип Value - + Значение Numeric - + Число Text - + Текст Width - + Длина @@ -627,102 +627,102 @@ Game Boy Advance - зарегистрированная торговая мар 1 Byte (8-bit) - + 1 байт (8 бит) 2 Bytes (16-bit) - + 2 байта (16 бит) 4 Bytes (32-bit) - + 4 байта (32 бита) Number type - + Тип числа Decimal - + 10-ный Hexadecimal - + 16-ный Search type - + Тип поиска Equal to value - + Равно значению Greater than value - + Больше значения Less than value - + Меньше значения Unknown/changed - + Неизвестно/изменилось Changed by value - + Изменилось на значение Unchanged - + Не изменилось Increased - + Увеличилось Decreased - + Уменьшилось Search ROM - + Поиск в ROM New Search - + Новый поиск Search Within - + Поиск в результатах Open in Memory Viewer - + Открыть в просмотре памяти Refresh - + Обновить @@ -730,77 +730,77 @@ Game Boy Advance - зарегистрированная торговая мар Memory - + Память Inspect Address: - + Просмотр адреса: Set Alignment: - + Выравнивание: &1 Byte - + &1 байт &2 Bytes - + &2 байта &4 Bytes - + &4 байта Unsigned Integer: - + Целое число без знака: Signed Integer: - + Целое число со знаком: String: - + Строка: Load TBL - + Загрузить TBL Copy Selection - + Скопировать выделение Paste - + Вставить Save Selection - + Сохранить выделение Save Range - + Сохранить область Load - Загрузить + Загрузить @@ -808,77 +808,77 @@ Game Boy Advance - зарегистрированная торговая мар Sprites - + Спрайты Copy - + Скопировать Geometry - + Геометрия Position - + Позиция , - + , Dimensions - + Размеры × - + × Tile - + Тайл Export - Экспортировать + Экспорт Matrix - + Матрица Attributes - + Атрибуты Transform - + Трансформация Off - + Выкл. Palette - + Палитра Double Size - + Двойной размер @@ -890,34 +890,34 @@ Game Boy Advance - зарегистрированная торговая мар Flipped - + Поворот H Short for horizontal - + Г V Short for vertical - + В Mode - + Режим Normal - + Обычный Mosaic - + Мозаика @@ -927,17 +927,17 @@ Game Boy Advance - зарегистрированная торговая мар Priority - + Приоритет Address - Адрес + Адрес Magnification - Увеличить + Увеличить @@ -945,12 +945,12 @@ Game Boy Advance - зарегистрированная торговая мар Game Overrides - + Переопределения игры Game Boy Advance - + Game Boy Advance @@ -958,97 +958,97 @@ Game Boy Advance - зарегистрированная торговая мар Autodetect - + Автоопределение Realtime clock - + Реальное время Gyroscope - + Гироскоп Tilt - + Наклон Light sensor - + Датчик света Rumble - + Отдача Save type - + Тип сохранения None - + Нет SRAM - + SRAM Flash 512kb - + Flash 512kb Flash 1Mb - + Flash 1Mb EEPROM 8kB - + EEPROM 8kB EEPROM 512 bytes - + EEPROM 512 bytes SRAM 64kB (bootlegs only) - + SRAM 64kB (только для бутлегов) Idle loop - + Холостой цикл Game Boy Player features - + Поддержка Game Boy Player VBA bug compatibility mode - + Режим совместимости с багами VBA Game Boy - + Game Boy Game Boy model - + Модель Game Boy @@ -1073,7 +1073,7 @@ Game Boy Advance - зарегистрированная торговая мар Palette preset - + Пресет палитры @@ -1081,62 +1081,62 @@ Game Boy Advance - зарегистрированная торговая мар Palette - + Палитра Background - + Фон Objects - + Объекты Selection - + Выделение Red - Красный + Красный Green - Зеленый + Зеленый Blue - Синий + Синий 16-bit value - + 16-битное значение Hex code - + Hex-код Palette index - + Индекс палитры Export BG - + Экспорт BG Export OBJ - + Экспорт OBJ @@ -1144,27 +1144,27 @@ Game Boy Advance - зарегистрированная торговая мар Adjust placement - + Настройка положения All - + Все Offset - + Смещение X - + X Y - + Y @@ -1172,12 +1172,12 @@ Game Boy Advance - зарегистрированная торговая мар Game Boy Printer - + Принтер Game Boy Hurry up! - + Поторопись! @@ -1187,12 +1187,12 @@ Game Boy Advance - зарегистрированная торговая мар Copy - + Копировать Magnification - Увеличить + Увеличение @@ -1200,7 +1200,7 @@ Game Boy Advance - зарегистрированная торговая мар 2021 - + 2021 @@ -1209,29 +1209,32 @@ Game Boy Advance - зарегистрированная торговая мар An update to %1 is available. Do you want to download and install it now? You will need to restart the emulator when the download is complete. - + Доступно обновление %1. +Загрузить и установить его сейчас? После завершения загрузки потребуется перезапустить эмулятор. Current version: %1 New version: %2 Download size: %3 - + Текущая версия: %1 +Новая версия: %2 +Размер файла: %3 Downloading update... - + Загрузка обновления... Downloading failed. Please update manually. - + Загрузка не удалась. Пожалуйста, загрузите обновление вручную. Downloading done. Press OK to restart %1 and install the update. - + Загрузка завершена. Нажмите OK для перезапуска и установки обновления. @@ -1239,22 +1242,22 @@ Download size: %3 Stable - + Стабильная Development - + В разработке Unknown - + Неизвестно (None) - + (Нет) @@ -1262,14 +1265,14 @@ Download size: %3 %0%1%2 - + %0%1%2 0x%0 (%1) - + 0x%0 (%1) @@ -1277,12 +1280,12 @@ Download size: %3 (untitled) - + (без имени) Failed to open cheats file: %1 - + Не удалось открыть файл с чит-кодами: %1 @@ -1291,13 +1294,13 @@ Download size: %3 Autodetect (recommended) - + Автоопределение (рекомендовано) Select cheats file - + Выберите файл с чит-кодами @@ -1305,12 +1308,12 @@ Download size: %3 Failed to open save file: %1 - + Не удалось открыть файл сохранения: %1 Failed to open game file: %1 - + Не удалось открыть файл игры: %1 @@ -1320,12 +1323,12 @@ Download size: %3 Failed to open snapshot file for reading: %1 - + Не удалось открыть файл изображения для считывания: %1 Failed to open snapshot file for writing: %1 - + Не удалось открыть файл изображения для записи: %1 @@ -1333,17 +1336,17 @@ Download size: %3 Failed to open game file: %1 - + Не удалось открыть файл игры: %1 Could not load game. Are you sure it's in the correct format? - + Не удалось загрузить игру. Вы уверены, что она в правильном формате? Failed to open save file. Is the save directory writable? - + Не удалось открыть файл сохранения. Разрешена ли запись для папки сохранений? @@ -1351,52 +1354,52 @@ Download size: %3 Export frame - + Экспорт кадра Portable Network Graphics (*.png) - + Portable Network Graphics (*.png) None - + Нет Background - + Фон Window - + Окно Objwin - + Objwin Sprite - + Спрайт Backdrop - + Подложка Frame - + Кадр %1 %2 - + %1 %2 @@ -1404,7 +1407,7 @@ Download size: %3 Enable Discord Rich Presence - + Вкл. расширенный статус в Discord @@ -1412,22 +1415,22 @@ Download size: %3 Clear Button - + Сброс кнопки Clear Analog - + Сброс аналога Refresh - + Обновить Set all - + Назначить все @@ -1435,42 +1438,42 @@ Download size: %3 Server settings - + Настройки сервера Local port - + Локальный порт Bind address - + Привязка адреса Break - Прервать + Прервать Stop - Остановить + Стоп Start - Начать + Запуск Crash - + Сбой Could not start GDB server - + Не удалось запустить GDB-сервер @@ -1478,17 +1481,17 @@ Download size: %3 Failed to open output file: %1 - + Не удалось открыть выходной файл: %1 Select output file - + Выбор выходного файла Graphics Interchange Format (*.gif);;WebP ( *.webp);;Animated Portable Network Graphics (*.png *.apng) - + Graphics Interchange Format (*.gif);;WebP ( *.webp);;Animated Portable Network Graphics (*.png *.apng) @@ -1496,102 +1499,102 @@ Download size: %3 Background mode - + Режим фона Mode 0: 4 tile layers - + Режим 0: 4 тайловых слоя Mode 1: 2 tile layers + 1 rotated/scaled tile layer - + Режим 1: 2 тайловых слоя + 1 тайл. слой с вращением/масштабированием Mode 2: 2 rotated/scaled tile layers - + Режим 2: 2 тайловых слоя с вращением/масштабированием Mode 3: Full 15-bit bitmap - + Режим 3: Полная 15-битная битовая карта Mode 4: Full 8-bit bitmap - + Режим 4: Полная 8-битная битовая карта Mode 5: Small 15-bit bitmap - + Режим 5: Малая 15-битная битовая карта CGB Mode - + Режим CGB Frame select - + Выбор кадра Unlocked HBlank - + Разблокированный HBlank Linear OBJ tile mapping - + Линейная отрисовка OBJ тайлов Force blank screen - + Принудительная очистка экрана Enable background 0 - + Вкл. фон 0 Enable background 1 - + Вкл. фон 1 Enable background 2 - + Вкл. фон 2 Enable background 3 - + Вкл. фон 3 Enable OBJ - + Вкл. OBJ Enable Window 0 - + Вкл. Окно 0 Enable Window 1 - + Вкл. Окно 1 Enable OBJ Window - + Вкл. Окно OBJ @@ -3321,28 +3324,28 @@ Download size: %3 Red - Красный + Красный Blue - Синий + Синий Sprite ordering - + Порядок спрайтов OAM order - + Порядок OAM x coordinate sorting - + Сортировка x координат @@ -3371,7 +3374,7 @@ Download size: %3 Menu - + Меню @@ -3379,12 +3382,12 @@ Download size: %3 Load State - + Загрузить состояние Save State - + Сохранить состояние @@ -3394,12 +3397,12 @@ Download size: %3 Corrupted - + Повреждено Slot %1 - + Слот %1 @@ -3408,7 +3411,7 @@ Download size: %3 Default - + По умолчанию @@ -3456,7 +3459,7 @@ Download size: %3 An error occurred - + Произошла ошибка @@ -3499,7 +3502,7 @@ Download size: %3 Priority - + Приоритет @@ -3516,13 +3519,13 @@ Download size: %3 Size - + Размер Offset - + Смещение @@ -3532,22 +3535,22 @@ Download size: %3 Map Addr. - + Адрес карты Mirror - + Зеркально None - + Нет Both - + Оба @@ -3564,17 +3567,17 @@ Download size: %3 N/A - + Н/Д Export map - + Экспорт карты Portable Network Graphics (*.png) - + Portable Network Graphics (*.png) @@ -3582,12 +3585,12 @@ Download size: %3 Save memory region - + Сохранить область памяти Failed to open output file: %1 - + Не удалось открыть выходной файл: %1 @@ -3595,62 +3598,62 @@ Download size: %3 Copy selection - + Копировать выделение Save selection - + Сохранить выделение Paste - + Вставить Load - Загрузить + Загрузить All - + Все Load TBL - + Загрузить TBL Save selected memory - + Сохранение выделенной памяти Failed to open output file: %1 - + Не удалось открыть выходной файл: %1 Load memory - + Загрузка памяти Failed to open input file: %1 - + Не удалось загрузить входной файл: %1 TBL - + TBL ISO-8859-1 - + ISO-8859-1 @@ -3658,17 +3661,17 @@ Download size: %3 (%0/%1×) - + (%0/%1×) (⅟%0×) - + (⅟%0×) (%0×) - + (%0×) @@ -3687,7 +3690,7 @@ Download size: %3 Off - + Выкл. @@ -3704,12 +3707,12 @@ Download size: %3 Normal - + Обычный Trans - + Прозрач. @@ -3719,23 +3722,23 @@ Download size: %3 Invalid - + Неверно N/A - + Н/Д Export sprite - + Экспорт спрайта Portable Network Graphics (*.png) - + Portable Network Graphics (*.png) @@ -3743,17 +3746,17 @@ Download size: %3 Official MBCs - + Официальные MBC Licensed MBCs - + Лицензионные MBC Unlicensed MBCs - + Нелицензионные MBC @@ -3779,17 +3782,17 @@ Download size: %3 Export palette - + Экспорт палитры Windows PAL (*.pal);;Adobe Color Table (*.act) - + Windows PAL (*.pal);;Adobe Color Table (*.act) Failed to open output palette file: %1 - + Не удалось открыть файл палитры: %1 @@ -3801,18 +3804,18 @@ Download size: %3 (unknown) - + (неизвестно) bytes - + байт (no database present) - + (нет в базе данных) @@ -3820,12 +3823,12 @@ Download size: %3 Bug report archive - + Архив отчётов об ошибках ZIP archive (*.zip) - + ZIP архив (*.zip) @@ -3833,62 +3836,62 @@ Download size: %3 Save games and save states (%1) - + Игровые сохранения и сохранения состояний (%1) Select save game or save state - + Выбор игрового сохранения или сохранения состояния Save games (%1) - + Игровые сохранения (%1) Select save game - + Выбор игрового сохранения Conversion failed - + Ошибка конвертации Failed to convert the save game. This is probably a bug. - + Не удалось сконвертировать игровое сохранение. Возможно, это баг. No file selected - + Не выбран файл Could not open file - + Не удалось открыть файл No valid formats found - + Совместимые форматы не найдены Please select a valid input file - + Пожалуйста, выберите совместимый входной файл No valid conversions found - + Совместимые конверсии не найдены Cannot convert save games between platforms - + Нельзя сконвертировать сохранения для разных платформ @@ -3922,43 +3925,43 @@ Download size: %3 None - + Нет None (Still Image) - + Нет (статичное изображение) Keyboard - + Клавиатура Controllers - + Контроллеры Shortcuts - + Сочетания клавиш Shaders - + Шейдеры Select BIOS - + Выбор BIOS Select directory - + Выбор папки @@ -3968,34 +3971,34 @@ Download size: %3 Never - + Никогда Just now - + Только сейчас Less than an hour ago - + Менее часа назад %n hour(s) ago - - - - + + %n час назад + %n часа назад + %n часов назад %n day(s) ago - - - - + + %n день назад + %n дня назад + %n дней назад @@ -4004,32 +4007,32 @@ Download size: %3 No shader active - + Нет активных шейдеров Load shader - + Загрузка шейдера No shader loaded - + Нет загруженных шейдеров by %1 - + автор %1 Preprocessing - + Предобработка Pass %1 - + Проход %1 @@ -4037,17 +4040,17 @@ Download size: %3 Action - + Действие Keyboard - + Клавиатура Gamepad - + Геймпад @@ -4055,18 +4058,18 @@ Download size: %3 Export tiles - + Экспорт тайлов Portable Network Graphics (*.png) - + Portable Network Graphics (*.png) Export tile - + Экспорт тайла @@ -4074,17 +4077,17 @@ Download size: %3 Failed to open output video file: %1 - + Не удалось открыть выходной видеофайл: %1 Native (%0x%1) - + Нативно (%0x%1) Select output file - + Выбор выходного файла @@ -4092,17 +4095,17 @@ Download size: %3 Game Boy Advance ROMs (%1) - + Игры Game Boy Advance (%1) Game Boy ROMs (%1) - + Игры Game Boy (%1) All ROMs (%1) - + Все игры (%1) @@ -4112,128 +4115,130 @@ Download size: %3 Archives (%1) - + Архивы (%1) Select ROM - + Выбор игры Select folder - + Выбор папки Select save - + Выбор сохранения Select patch - + Выбор патча Patches (*.ips *.ups *.bps) - + Патчи (*.ips *.ups *.bps) Select e-Reader dotcode - + Выбор карточки e-Reader e-Reader card (*.raw *.bin *.bmp) - + Карточка e-Reader (*.raw *.bin *.bmp) Select image - + Выбор изображения Image file (*.png *.gif *.jpg *.jpeg);;All files (*) - + Файл изображения (*.png *.gif *.jpg *.jpeg);;All files (*) GameShark saves (*.sps *.xps) - + Сохранения GameShark (*.sps *.xps) Select video log - + Выбор видеолога Video logs (*.mvl) - + Видеологи (*.mvl) Crash - + Сбой The game has crashed with the following error: %1 - + В игре произошёл сбой со следующей ошибкой: + +%1 Couldn't Start - + Запуск не удался Could not start game. - + Не удалось запустить игру. Unimplemented BIOS call - + Неизвестный вызов BIOS This game uses a BIOS call that is not implemented. Please use the official BIOS for best experience. - + Игра использует нереализованный вызов BIOS. Пожалуйста, воспользуйтесь официальным BIOS для лучшей совместимости. Failed to create an appropriate display device, falling back to software display. Games may run slowly, especially with larger windows. - + Не удалось создать устройство отображения, возврат к программному режиму. Игры могут идти медленнее, особенно в окнах больших размеров. Really make portable? - + Перейти в портативный режим? This will make the emulator load its configuration from the same directory as the executable. Do you want to continue? - + После этого эмулятор будет загружать конфигурацию из папки с исполняемым файлом. Продолжить? Restart needed - + Требуется перезапуск Some changes will not take effect until the emulator is restarted. - + Для применения некоторых изменений требуется перезапустить эмулятор. @@ -4258,7 +4263,7 @@ Download size: %3 &File - + &Файл @@ -4268,12 +4273,12 @@ Download size: %3 Load ROM in archive... - + Загрузить игру из архива... Add folder to library... - + Добавить папку в библиотеку... @@ -4283,38 +4288,38 @@ Download size: %3 Select save game - + Выбор игрового сохранения mGBA save state files (%1) - + Файл сохранения состояния mGBA (%1) Select save state - + Выбор сохранения состояния Select e-Reader card images - + Выбор изображения карточки e-Reader Image file (*.png *.jpg *.jpeg) - + Файл изображения (*.png *.jpg *.jpeg) Conversion finished - + Конвертация завершена %1 of %2 e-Reader cards converted successfully. - + %1 из %2 карточек e-Reader успешно сконвертировано. @@ -6187,7 +6192,7 @@ Download size: %3 Show advanced - + Расширенные настройки From 8c79430c5d5e6e1e9b95d6c51b9abf12bfa816b8 Mon Sep 17 00:00:00 2001 From: S3aBreeze Date: Sat, 21 Aug 2021 13:50:02 +0000 Subject: [PATCH 15/31] Qt: Update translation (Russian) Currently translated at 42.5% (468 of 1099 strings) Translation: mGBA/Qt Translate-URL: https://hosted.weblate.org/projects/mgba/mgba-qt/ru/ --- src/platform/qt/ts/mgba-ru.ts | 84 +++++++++++++++++------------------ 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/src/platform/qt/ts/mgba-ru.ts b/src/platform/qt/ts/mgba-ru.ts index e4b6be5e9..4325e2ce3 100644 --- a/src/platform/qt/ts/mgba-ru.ts +++ b/src/platform/qt/ts/mgba-ru.ts @@ -46,12 +46,12 @@ Game Boy Advance - зарегистрированная торговая мар {text} - + {текст} {details} - + {подробности} @@ -358,12 +358,12 @@ Game Boy Advance - зарегистрированная торговая мар 0x0000 - + 0x0000 B - + B @@ -491,7 +491,7 @@ Game Boy Advance - зарегистрированная торговая мар Info - + Информация @@ -501,7 +501,7 @@ Game Boy Advance - зарегистрированная торговая мар Error - + Ошибка @@ -922,7 +922,7 @@ Game Boy Advance - зарегистрированная торговая мар Enabled - + Включено @@ -2096,7 +2096,7 @@ Download size: %3 Sound frequency - + Частота звука @@ -2120,7 +2120,7 @@ Download size: %3 Reset - + Сбросить @@ -2136,7 +2136,7 @@ Download size: %3 Enable channel 3 - + Включить канал 3 @@ -2148,28 +2148,28 @@ Download size: %3 0% - + 0% 100% - + 100% 50% - + 50% 25% - + 25% @@ -2177,7 +2177,7 @@ Download size: %3 75% - + 75% @@ -2195,13 +2195,13 @@ Download size: %3 15 - + 15 7 - + 7 @@ -2818,82 +2818,82 @@ Download size: %3 SC - + SC SD - + SD SI - + SI SO - + SO VCounter - + VCounter Timer 0 - + Таймер 0 Timer 1 - + Таймер 1 Timer 2 - + Таймер 2 Timer 3 - + Таймер 3 SIO - + SIO DMA 0 - + DMA 0 DMA 1 - + DMA 1 DMA 2 - + DMA 2 DMA 3 - + DMA 3 @@ -2919,7 +2919,7 @@ Download size: %3 4 - + 4 @@ -2927,7 +2927,7 @@ Download size: %3 3 - + 3 @@ -2936,7 +2936,7 @@ Download size: %3 2 - + 2 @@ -2945,7 +2945,7 @@ Download size: %3 8 - + 8 @@ -2986,22 +2986,22 @@ Download size: %3 Disable - + Отключить 4.19MHz - + 4.19 МГц 8.38MHz - + 8.38 МГц 16.78MHz - + 16.78 МГц @@ -3431,7 +3431,7 @@ Download size: %3 Info - + Информация @@ -3454,7 +3454,7 @@ Download size: %3 [%1] %2: %3 - + [%1] %2: %3 @@ -3474,7 +3474,7 @@ Download size: %3 INFO - + ИНФОРМАЦИЯ From 0e5754b0c8e6e00a7d1a87f232ace40356f3192a Mon Sep 17 00:00:00 2001 From: lightmanLP Date: Sat, 21 Aug 2021 13:46:57 +0000 Subject: [PATCH 16/31] Qt: Update translation (Russian) Currently translated at 44.0% (484 of 1099 strings) Translation: mGBA/Qt Translate-URL: https://hosted.weblate.org/projects/mgba/mgba-qt/ru/ --- src/platform/qt/ts/mgba-ru.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/platform/qt/ts/mgba-ru.ts b/src/platform/qt/ts/mgba-ru.ts index 4325e2ce3..3d80f3205 100644 --- a/src/platform/qt/ts/mgba-ru.ts +++ b/src/platform/qt/ts/mgba-ru.ts @@ -72,7 +72,7 @@ Game Boy Advance - зарегистрированная торговая мар Tile # - + Тайл # @@ -277,7 +277,7 @@ Game Boy Advance - зарегистрированная торговая мар Freeze frame - + Зафиксировать фрейм From 603fa7c26ed55eedc0bf1ec1fc9c32a00fef16b1 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Tue, 28 Sep 2021 17:16:19 +0000 Subject: [PATCH 17/31] Qt: Update translation (Russian) Currently translated at 44.0% (484 of 1099 strings) Translation: mGBA/Qt Translate-URL: https://hosted.weblate.org/projects/mgba/mgba-qt/ru/ --- src/platform/qt/ts/mgba-ru.ts | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/platform/qt/ts/mgba-ru.ts b/src/platform/qt/ts/mgba-ru.ts index 3d80f3205..b612f2956 100644 --- a/src/platform/qt/ts/mgba-ru.ts +++ b/src/platform/qt/ts/mgba-ru.ts @@ -105,12 +105,12 @@ Game Boy Advance - зарегистрированная торговая мар BattleChip Gate - + Чип BattleChip Gate Chip name - + Имя чипа @@ -140,7 +140,7 @@ Game Boy Advance - зарегистрированная торговая мар Gate type - + Тип Gate @@ -150,12 +150,12 @@ Game Boy Advance - зарегистрированная торговая мар Chip ID - + ID чипа Update Chip data - + Обновление данных чипа @@ -183,7 +183,7 @@ Game Boy Advance - зарегистрированная торговая мар Add Lines - + Добавить линии @@ -413,7 +413,7 @@ Game Boy Advance - зарегистрированная торговая мар No Save - + Нет сохранений @@ -481,12 +481,12 @@ Game Boy Advance - зарегистрированная торговая мар Debug - + Откладка Stub - + Заглушка @@ -496,7 +496,7 @@ Game Boy Advance - зарегистрированная торговая мар Warning - + Внимание @@ -511,7 +511,7 @@ Game Boy Advance - зарегистрированная торговая мар Game Error - + Ошибка игры @@ -885,7 +885,7 @@ Game Boy Advance - зарегистрированная торговая мар Return, Ctrl+R - + Возврат, Ctrl+R @@ -1058,17 +1058,17 @@ Game Boy Advance - зарегистрированная торговая мар Background Colors - + Цвета фона Sprite Colors 1 - + Цвета спрайта 1 Sprite Colors 2 - + Цвета спрайта 2 From e41ec9a6cae0cacb793c24f62e84131d4a0eefe7 Mon Sep 17 00:00:00 2001 From: Sjouke Yntema Date: Sat, 28 Aug 2021 18:02:11 +0000 Subject: [PATCH 18/31] Qt: Update translation (Dutch) Currently translated at 6.8% (75 of 1099 strings) Translation: mGBA/Qt Translate-URL: https://hosted.weblate.org/projects/mgba/mgba-qt/nl/ --- src/platform/qt/ts/mgba-nl.ts | 146 +++++++++++++++++----------------- 1 file changed, 73 insertions(+), 73 deletions(-) diff --git a/src/platform/qt/ts/mgba-nl.ts b/src/platform/qt/ts/mgba-nl.ts index a26012320..0ddc55c4e 100644 --- a/src/platform/qt/ts/mgba-nl.ts +++ b/src/platform/qt/ts/mgba-nl.ts @@ -40,17 +40,17 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. An update is available - + Er is een update beschikbaar {text} - + {text} {details} - + {details} @@ -58,12 +58,12 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Open in archive... - + Open in archief... Loading... - + Aan het laden... @@ -71,32 +71,32 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Tile # - + Tegel # Palette # - + Palet # Address - + Adres Red - + Rood Green - + Groen Blue - + Blauw @@ -109,7 +109,7 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Chip name - + Chip naam @@ -119,22 +119,22 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Save - + Opslaan Load - + Laden Add - + Toevoegen Remove - + Verwijderen @@ -149,17 +149,17 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Chip ID - + Chip ID Update Chip data - + Update chip informatie Show advanced - + Geavanceerd tonen @@ -167,42 +167,42 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Cheats - + Cheats Add New Code - + Nieuwe code toevoegen Remove - + Verwijderen Add Lines - + Lijnen toevoegen Code type - + Code type Save - + Opslaan Load - + Laden Enter codes here... - + Hier code ingeven... @@ -210,12 +210,12 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Debugger - + Debugger Enter command (try `help` for more info) - + Commando ingeven (probeer `help` voor meer info) @@ -228,37 +228,37 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Connect to Dolphin - + Verbinden met Dolphin Local computer - + Lokale computer IP address - + IP adres Connect - + Verbind Disconnect - + Verbinding verbreken Close - + Sluiten Reset on connect - + Reset zodra verbonden @@ -271,7 +271,7 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Magnification - + Vergroting @@ -281,22 +281,22 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Backdrop color - + Achtergrond kleur Disable scanline effects - + Scanline effect uitzetten Export - + Exporteren Reset - + Resetten @@ -309,7 +309,7 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Start - + Start @@ -324,27 +324,27 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Stop - + Stop Select File - + Bestqnd selecteren APNG - + APNG GIF - + GIF WebP - + WebP @@ -352,17 +352,17 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. I/O Viewer - + I/O inspecteur 0x0000 - + 0x0000 B - + B @@ -370,27 +370,27 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Name - + Naam Location - + Locatie Platform - + Platform Size - + Grootte CRC32 - + CRC32 @@ -399,7 +399,7 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. %1 State - + %1 Staat @@ -412,57 +412,57 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. No Save - + Geen opslag 5 - + 5 6 - + 6 8 - + 8 4 - + 4 1 - + 1 3 - + 3 7 - + 7 9 - + 9 2 - + 2 Cancel - + Annuleren @@ -470,7 +470,7 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Logs - + Logboek @@ -480,7 +480,7 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Debug - + Debug @@ -490,17 +490,17 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Info - + Info Warning - + Waarschuwing Error - + Fout @@ -510,7 +510,7 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Game Error - + Spel fout From b3a7b4a0981430abdeed7c3135618d102eadf4c2 Mon Sep 17 00:00:00 2001 From: Jaime R Date: Thu, 9 Sep 2021 15:55:06 +0000 Subject: [PATCH 19/31] Qt: Update translation (Spanish) Currently translated at 96.8% (1064 of 1099 strings) Translation: mGBA/Qt Translate-URL: https://hosted.weblate.org/projects/mgba/mgba-qt/es/ --- src/platform/qt/ts/mgba-es.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/platform/qt/ts/mgba-es.ts b/src/platform/qt/ts/mgba-es.ts index dd8b59e4f..4842c8a30 100644 --- a/src/platform/qt/ts/mgba-es.ts +++ b/src/platform/qt/ts/mgba-es.ts @@ -41,7 +41,7 @@ Game Boy Advance es una marca registrada de Nintendo Co., Ltd. An update is available - + Hay una actualización disponible @@ -173,7 +173,7 @@ Game Boy Advance es una marca registrada de Nintendo Co., Ltd. Add New Code - + Añadir nuevo código @@ -183,12 +183,12 @@ Game Boy Advance es una marca registrada de Nintendo Co., Ltd. Add Lines - + Añadir líneas Code type - + Tipo de código @@ -1013,7 +1013,7 @@ Game Boy Advance es una marca registrada de Nintendo Co., Ltd. EEPROM 8kB - + EEPROM 8kB @@ -1023,7 +1023,7 @@ Game Boy Advance es una marca registrada de Nintendo Co., Ltd. SRAM 64kB (bootlegs only) - + SRAM 64kB (sólo bootlegs) From 3a3e9cd0f6b7c3f2295ac88fd075f1fb3a34f57d Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 28 Sep 2021 23:28:15 -0700 Subject: [PATCH 20/31] Qt: Update translations --- src/platform/qt/ts/mgba-de.ts | 18 ++-- src/platform/qt/ts/mgba-en.ts | 18 ++-- src/platform/qt/ts/mgba-es.ts | 18 ++-- src/platform/qt/ts/mgba-fi.ts | 18 ++-- src/platform/qt/ts/mgba-fr.ts | 18 ++-- src/platform/qt/ts/mgba-hu.ts | 18 ++-- src/platform/qt/ts/mgba-it.ts | 18 ++-- src/platform/qt/ts/mgba-ja.ts | 18 ++-- src/platform/qt/ts/mgba-ko.ts | 18 ++-- src/platform/qt/ts/mgba-ms.ts | 18 ++-- src/platform/qt/ts/mgba-nb_NO.ts | 18 ++-- src/platform/qt/ts/mgba-nl.ts | 146 ++++++++++++++-------------- src/platform/qt/ts/mgba-pl.ts | 18 ++-- src/platform/qt/ts/mgba-pt_BR.ts | 18 ++-- src/platform/qt/ts/mgba-ru.ts | 112 ++++++++++----------- src/platform/qt/ts/mgba-template.ts | 18 ++-- src/platform/qt/ts/mgba-tr.ts | 18 ++-- src/platform/qt/ts/mgba-zh_CN.ts | 18 ++-- 18 files changed, 273 insertions(+), 273 deletions(-) diff --git a/src/platform/qt/ts/mgba-de.ts b/src/platform/qt/ts/mgba-de.ts index 0fd7b171b..f04f03133 100644 --- a/src/platform/qt/ts/mgba-de.ts +++ b/src/platform/qt/ts/mgba-de.ts @@ -1240,22 +1240,22 @@ Download-Größe: %3 QGBA::ApplicationUpdater - + Stable Stabil - + Development Entwicklung - + Unknown Unbekannt - + (None) (keiner) @@ -1306,27 +1306,27 @@ Download-Größe: %3 QGBA::CoreController - + Failed to open save file: %1 Fehler beim Öffnen der Speicherdatei: %1 - + Failed to open game file: %1 Fehler beim Öffnen der Spieldatei: %1 - + Can't yank pack in unexpected platform! Das GamePak kann nur auf unterstützten Plattformen herausgezogen werden! - + Failed to open snapshot file for reading: %1 Konnte Snapshot-Datei %1 nicht zum Lesen öffnen - + Failed to open snapshot file for writing: %1 Konnte Snapshot-Datei %1 nicht zum Schreiben öffnen diff --git a/src/platform/qt/ts/mgba-en.ts b/src/platform/qt/ts/mgba-en.ts index 1b8e79a8e..32dda36fa 100644 --- a/src/platform/qt/ts/mgba-en.ts +++ b/src/platform/qt/ts/mgba-en.ts @@ -1236,22 +1236,22 @@ Download size: %3 QGBA::ApplicationUpdater - + Stable - + Development - + Unknown - + (None) @@ -1302,27 +1302,27 @@ Download size: %3 QGBA::CoreController - + Failed to open save file: %1 - + Failed to open game file: %1 - + Can't yank pack in unexpected platform! - + Failed to open snapshot file for reading: %1 - + Failed to open snapshot file for writing: %1 diff --git a/src/platform/qt/ts/mgba-es.ts b/src/platform/qt/ts/mgba-es.ts index 4842c8a30..afdf131ed 100644 --- a/src/platform/qt/ts/mgba-es.ts +++ b/src/platform/qt/ts/mgba-es.ts @@ -1237,22 +1237,22 @@ Download size: %3 QGBA::ApplicationUpdater - + Stable - + Development - + Unknown Desconocido - + (None) @@ -1303,27 +1303,27 @@ Download size: %3 QGBA::CoreController - + Failed to open save file: %1 Error al abrir el archivo de guardado: %1 - + Failed to open game file: %1 Error al abrir el archivo del juego: %1 - + Can't yank pack in unexpected platform! ¡No se puede remover el cartucho en esta plataforma! - + Failed to open snapshot file for reading: %1 Error al leer del archivo de captura: %1 - + Failed to open snapshot file for writing: %1 Error al escribir al archivo de captura: %1 diff --git a/src/platform/qt/ts/mgba-fi.ts b/src/platform/qt/ts/mgba-fi.ts index 4efdf8d3e..0c292a7b5 100644 --- a/src/platform/qt/ts/mgba-fi.ts +++ b/src/platform/qt/ts/mgba-fi.ts @@ -1237,22 +1237,22 @@ Download size: %3 QGBA::ApplicationUpdater - + Stable - + Development - + Unknown - + (None) @@ -1303,27 +1303,27 @@ Download size: %3 QGBA::CoreController - + Failed to open save file: %1 - + Failed to open game file: %1 - + Can't yank pack in unexpected platform! - + Failed to open snapshot file for reading: %1 - + Failed to open snapshot file for writing: %1 diff --git a/src/platform/qt/ts/mgba-fr.ts b/src/platform/qt/ts/mgba-fr.ts index 32701fa9e..474e0aa60 100644 --- a/src/platform/qt/ts/mgba-fr.ts +++ b/src/platform/qt/ts/mgba-fr.ts @@ -1238,22 +1238,22 @@ Download size: %3 QGBA::ApplicationUpdater - + Stable - + Development - + Unknown - + (None) @@ -1304,27 +1304,27 @@ Download size: %3 QGBA::CoreController - + Failed to open save file: %1 Échec de l'ouverture du fichier de sauvegarde : %1 - + Failed to open game file: %1 Échec de l'ouverture du fichier de jeu : %1 - + Can't yank pack in unexpected platform! - + Failed to open snapshot file for reading: %1 Échec de l'ouverture de l'instantané pour lire : %1 - + Failed to open snapshot file for writing: %1 Échec de l'ouverture de l'instantané pour écrire : %1 diff --git a/src/platform/qt/ts/mgba-hu.ts b/src/platform/qt/ts/mgba-hu.ts index 1f6ea24f5..89f68bfd0 100644 --- a/src/platform/qt/ts/mgba-hu.ts +++ b/src/platform/qt/ts/mgba-hu.ts @@ -1237,22 +1237,22 @@ Download size: %3 QGBA::ApplicationUpdater - + Stable - + Development - + Unknown - + (None) @@ -1303,27 +1303,27 @@ Download size: %3 QGBA::CoreController - + Failed to open save file: %1 Nem sikerült a mentésfájl megnyitása: %1 - + Failed to open game file: %1 Nem sikerült a játékfájl megnyitása: %1 - + Can't yank pack in unexpected platform! A játékkazettát nem lehet kirántani ismeretlen platformon! - + Failed to open snapshot file for reading: %1 A pillanatkép fájljának olvasásra való megnyitása sikertelen: %1 - + Failed to open snapshot file for writing: %1 A pillanatkép fájljának írásra való megnyitása sikertelen: %1 diff --git a/src/platform/qt/ts/mgba-it.ts b/src/platform/qt/ts/mgba-it.ts index 398cc2c21..4e6574f04 100644 --- a/src/platform/qt/ts/mgba-it.ts +++ b/src/platform/qt/ts/mgba-it.ts @@ -1237,22 +1237,22 @@ Download size: %3 QGBA::ApplicationUpdater - + Stable - + Development - + Unknown Sconosciuto - + (None) @@ -1303,27 +1303,27 @@ Download size: %3 QGBA::CoreController - + Failed to open save file: %1 Impossibile aprire il file di salvataggio: %1 - + Failed to open game file: %1 Impossibile aprire il file di gioco: %1 - + Can't yank pack in unexpected platform! Non riesco a strappare il pacchetto in una piattaforma inaspettata! - + Failed to open snapshot file for reading: %1 Impossibile aprire il file snapshot per la lettura: %1 - + Failed to open snapshot file for writing: %1 Impossibile aprire il file snapshot per la scrittura: %1 diff --git a/src/platform/qt/ts/mgba-ja.ts b/src/platform/qt/ts/mgba-ja.ts index ff6e6d572..e8cea324d 100644 --- a/src/platform/qt/ts/mgba-ja.ts +++ b/src/platform/qt/ts/mgba-ja.ts @@ -1237,22 +1237,22 @@ Download size: %3 QGBA::ApplicationUpdater - + Stable - + Development - + Unknown 不明 - + (None) @@ -1303,27 +1303,27 @@ Download size: %3 QGBA::CoreController - + Failed to open save file: %1 セーブファイルを開けませんでした: %1 - + Failed to open game file: %1 ゲームファイルを開けませんでした: %1 - + Can't yank pack in unexpected platform! 予期しないプラットフォームでパックをヤンクすることはできません! - + Failed to open snapshot file for reading: %1 読み取り用のスナップショットファイルを開けませんでした: %1 - + Failed to open snapshot file for writing: %1 書き込み用のスナップショットファイルを開けませんでした: %1 diff --git a/src/platform/qt/ts/mgba-ko.ts b/src/platform/qt/ts/mgba-ko.ts index 5d208830d..30f799524 100644 --- a/src/platform/qt/ts/mgba-ko.ts +++ b/src/platform/qt/ts/mgba-ko.ts @@ -1237,22 +1237,22 @@ Download size: %3 QGBA::ApplicationUpdater - + Stable - + Development - + Unknown - + (None) @@ -1303,27 +1303,27 @@ Download size: %3 QGBA::CoreController - + Failed to open save file: %1 저장 파일을 열지 못했습니다: %1 - + Failed to open game file: %1 게임 파일을 열지 못했습니다: %1 - + Can't yank pack in unexpected platform! - + Failed to open snapshot file for reading: %1 읽기 용 스냅샷 파일을 열지 못했습니다: %1 - + Failed to open snapshot file for writing: %1 쓰기 용 스냅샷 파일을 열지 못했습니다: %1 diff --git a/src/platform/qt/ts/mgba-ms.ts b/src/platform/qt/ts/mgba-ms.ts index 8cb432553..1adc81213 100644 --- a/src/platform/qt/ts/mgba-ms.ts +++ b/src/platform/qt/ts/mgba-ms.ts @@ -1236,22 +1236,22 @@ Download size: %3 QGBA::ApplicationUpdater - + Stable - + Development - + Unknown - + (None) @@ -1302,27 +1302,27 @@ Download size: %3 QGBA::CoreController - + Failed to open save file: %1 Gagal membuka fail tersimpan: %1 - + Failed to open game file: %1 Gagal membuka fail permainan: %1 - + Can't yank pack in unexpected platform! - + Failed to open snapshot file for reading: %1 Gagal membuka fail snapshot untuk baca: %1 - + Failed to open snapshot file for writing: %1 Gagal membuka fail snapshot untuk menulis: %1 diff --git a/src/platform/qt/ts/mgba-nb_NO.ts b/src/platform/qt/ts/mgba-nb_NO.ts index f517841ad..9ef804e04 100644 --- a/src/platform/qt/ts/mgba-nb_NO.ts +++ b/src/platform/qt/ts/mgba-nb_NO.ts @@ -1237,22 +1237,22 @@ Download size: %3 QGBA::ApplicationUpdater - + Stable - + Development - + Unknown Ukjent - + (None) @@ -1303,27 +1303,27 @@ Download size: %3 QGBA::CoreController - + Failed to open save file: %1 - + Failed to open game file: %1 Klarte ikke å åpne spillfil: %1 - + Can't yank pack in unexpected platform! - + Failed to open snapshot file for reading: %1 - + Failed to open snapshot file for writing: %1 diff --git a/src/platform/qt/ts/mgba-nl.ts b/src/platform/qt/ts/mgba-nl.ts index 0ddc55c4e..7644202d5 100644 --- a/src/platform/qt/ts/mgba-nl.ts +++ b/src/platform/qt/ts/mgba-nl.ts @@ -538,12 +538,12 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Magnification - + Vergroting Export - + Exporteren @@ -584,7 +584,7 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Address - + Adres @@ -799,7 +799,7 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Load - + Laden @@ -847,7 +847,7 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Export - + Exporteren @@ -931,12 +931,12 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Address - + Adres Magnification - + Vergroting @@ -1100,17 +1100,17 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Red - + Rood Green - + Groen Blue - + Blauw @@ -1191,7 +1191,7 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. Magnification - + Vergroting @@ -1199,7 +1199,7 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. 2021 - + 2021 @@ -1236,22 +1236,22 @@ Download size: %3 QGBA::ApplicationUpdater - + Stable - + Development - + Unknown - + (None) @@ -1302,27 +1302,27 @@ Download size: %3 QGBA::CoreController - + Failed to open save file: %1 - + Failed to open game file: %1 - + Can't yank pack in unexpected platform! - + Failed to open snapshot file for reading: %1 - + Failed to open snapshot file for writing: %1 @@ -1454,12 +1454,12 @@ Download size: %3 Stop - + Stop Start - + Start @@ -2116,7 +2116,7 @@ Download size: %3 Reset - + Resetten @@ -2144,28 +2144,28 @@ Download size: %3 0% - + 0% 100% - + 100% 50% - + 50% 25% - + 25% @@ -2173,7 +2173,7 @@ Download size: %3 75% - + 75% @@ -2191,13 +2191,13 @@ Download size: %3 15 - + 15 7 - + 7 @@ -2297,7 +2297,7 @@ Download size: %3 0 - + 0 @@ -2310,7 +2310,7 @@ Download size: %3 1 - + 1 @@ -2719,7 +2719,7 @@ Download size: %3 1/64 - + 1/64 @@ -2728,7 +2728,7 @@ Download size: %3 1/256 - + 1/256 @@ -2737,7 +2737,7 @@ Download size: %3 1/1024 - + 1/1024 @@ -2756,7 +2756,7 @@ Download size: %3 B - + B @@ -2768,7 +2768,7 @@ Download size: %3 Start - + Start @@ -2915,7 +2915,7 @@ Download size: %3 4 - + 4 @@ -2923,7 +2923,7 @@ Download size: %3 3 - + 3 @@ -2932,7 +2932,7 @@ Download size: %3 2 - + 2 @@ -2941,7 +2941,7 @@ Download size: %3 8 - + 8 @@ -3062,7 +3062,7 @@ Download size: %3 1/16 - + 1/16 @@ -3320,13 +3320,13 @@ Download size: %3 Red - + Rood Blue - + Blauw @@ -3417,22 +3417,22 @@ Download size: %3 Error - + Fout Warning - + Waarschuwing Info - + Info Debug - + Debug @@ -3442,7 +3442,7 @@ Download size: %3 Game Error - + Spel fout @@ -3515,7 +3515,7 @@ Download size: %3 Size - + Grootte @@ -3609,7 +3609,7 @@ Download size: %3 Load - + Laden @@ -4946,7 +4946,7 @@ Download size: %3 CRC32: - + CRC32: @@ -4974,7 +4974,7 @@ Download size: %3 Save - + Opslaan @@ -5237,37 +5237,37 @@ Download size: %3 1536 - + 1536 512 - + 512 768 - + 768 1024 - + 1024 2048 - + 2048 3072 - + 3072 4096 - + 4096 @@ -5283,22 +5283,22 @@ Download size: %3 44100 - + 44100 22050 - + 22050 32000 - + 32000 48000 - + 48000 @@ -5839,7 +5839,7 @@ Download size: %3 Cheats - + Cheats @@ -5892,7 +5892,7 @@ Download size: %3 Name - + Naam @@ -5963,7 +5963,7 @@ Download size: %3 Magnification - + Vergroting @@ -5996,17 +5996,17 @@ Download size: %3 Start - + Start Stop - + Stop Select File - + Bestqnd selecteren @@ -6078,7 +6078,7 @@ Download size: %3 4K - + 4K @@ -6184,7 +6184,7 @@ Download size: %3 Show advanced - + Geavanceerd tonen diff --git a/src/platform/qt/ts/mgba-pl.ts b/src/platform/qt/ts/mgba-pl.ts index 38ec4785e..1f6e946ad 100644 --- a/src/platform/qt/ts/mgba-pl.ts +++ b/src/platform/qt/ts/mgba-pl.ts @@ -1236,22 +1236,22 @@ Download size: %3 QGBA::ApplicationUpdater - + Stable - + Development - + Unknown - + (None) @@ -1302,27 +1302,27 @@ Download size: %3 QGBA::CoreController - + Failed to open save file: %1 - + Failed to open game file: %1 - + Can't yank pack in unexpected platform! - + Failed to open snapshot file for reading: %1 - + Failed to open snapshot file for writing: %1 diff --git a/src/platform/qt/ts/mgba-pt_BR.ts b/src/platform/qt/ts/mgba-pt_BR.ts index 072edf4a0..2f2eb77ab 100644 --- a/src/platform/qt/ts/mgba-pt_BR.ts +++ b/src/platform/qt/ts/mgba-pt_BR.ts @@ -1237,22 +1237,22 @@ Download size: %3 QGBA::ApplicationUpdater - + Stable - + Development - + Unknown Desconhecido - + (None) @@ -1303,27 +1303,27 @@ Download size: %3 QGBA::CoreController - + Failed to open save file: %1 Falhou em abrir o arquivo do save: %1 - + Failed to open game file: %1 Falhou em abrir o arquivo do jogo: %1 - + Can't yank pack in unexpected platform! Não pode arrancar o pacote numa plataforma inesperada! - + Failed to open snapshot file for reading: %1 Falhou em abrir o arquivo do snapshot pra leitura: %1 - + Failed to open snapshot file for writing: %1 Falhou em abrir o arquivo do snapshot pra gravação: %1 diff --git a/src/platform/qt/ts/mgba-ru.ts b/src/platform/qt/ts/mgba-ru.ts index b612f2956..3799c2f50 100644 --- a/src/platform/qt/ts/mgba-ru.ts +++ b/src/platform/qt/ts/mgba-ru.ts @@ -1240,22 +1240,22 @@ Download size: %3 QGBA::ApplicationUpdater - + Stable Стабильная - + Development В разработке - + Unknown Неизвестно - + (None) (Нет) @@ -1306,27 +1306,27 @@ Download size: %3 QGBA::CoreController - + Failed to open save file: %1 Не удалось открыть файл сохранения: %1 - + Failed to open game file: %1 Не удалось открыть файл игры: %1 - + Can't yank pack in unexpected platform! - + Failed to open snapshot file for reading: %1 Не удалось открыть файл изображения для считывания: %1 - + Failed to open snapshot file for writing: %1 Не удалось открыть файл изображения для записи: %1 @@ -1647,7 +1647,7 @@ Download size: %3 Priority - + Приоритет @@ -2301,7 +2301,7 @@ Download size: %3 0 - + 0 @@ -2314,7 +2314,7 @@ Download size: %3 1 - + 1 @@ -2706,7 +2706,7 @@ Download size: %3 Value - + Значение @@ -2723,7 +2723,7 @@ Download size: %3 1/64 - + 1/64 @@ -2732,7 +2732,7 @@ Download size: %3 1/256 - + 1/256 @@ -2741,7 +2741,7 @@ Download size: %3 1/1024 - + 1/1024 @@ -2760,7 +2760,7 @@ Download size: %3 B - + B @@ -3066,7 +3066,7 @@ Download size: %3 1/16 - + 1/16 @@ -3177,7 +3177,7 @@ Download size: %3 Mode - + Режим @@ -3306,7 +3306,7 @@ Download size: %3 Unknown - + Неизвестно @@ -3421,12 +3421,12 @@ Download size: %3 Error - + Ошибка Warning - + Внимание @@ -3436,17 +3436,17 @@ Download size: %3 Debug - + Откладка Stub - + Заглушка Game Error - + Ошибка игры @@ -3777,7 +3777,7 @@ Download size: %3 0x%0 (%1) - + 0x%0 (%1) @@ -4283,7 +4283,7 @@ Download size: %3 Save games (%1) - + Игровые сохранения (%1) @@ -4525,7 +4525,7 @@ Download size: %3 %0x - + %0x @@ -4605,7 +4605,7 @@ Download size: %3 %1× - + %1× @@ -4845,7 +4845,7 @@ Download size: %3 Clear - + Очистить @@ -4954,7 +4954,7 @@ Download size: %3 CRC32: - + CRC32: @@ -5041,7 +5041,7 @@ Download size: %3 SRAM - + SRAM @@ -5114,7 +5114,7 @@ Download size: %3 Realtime clock - + Реальное время @@ -5144,7 +5144,7 @@ Download size: %3 Light sensor - + Датчик света @@ -5171,7 +5171,7 @@ Download size: %3 Gyroscope - + Гироскоп @@ -5229,7 +5229,7 @@ Download size: %3 Game Boy - + Game Boy @@ -5245,37 +5245,37 @@ Download size: %3 1536 - + 1536 512 - + 512 768 - + 768 1024 - + 1024 2048 - + 2048 3072 - + 3072 4096 - + 4096 @@ -5291,22 +5291,22 @@ Download size: %3 44100 - + 44100 22050 - + 22050 32000 - + 32000 48000 - + 48000 @@ -5632,7 +5632,7 @@ Download size: %3 Enable Discord Rich Presence - + Вкл. расширенный статус в Discord @@ -5890,7 +5890,7 @@ Download size: %3 Shaders - + Шейдеры @@ -5900,7 +5900,7 @@ Download size: %3 Name - + Имя @@ -5933,17 +5933,17 @@ Download size: %3 Keyboard - + Клавиатура Gamepad - + Геймпад Clear - + Очистить @@ -6086,7 +6086,7 @@ Download size: %3 4K - + 4K @@ -6117,7 +6117,7 @@ Download size: %3 None - + Нет @@ -6182,7 +6182,7 @@ Download size: %3 Dimensions - + Размеры diff --git a/src/platform/qt/ts/mgba-template.ts b/src/platform/qt/ts/mgba-template.ts index 0e12c7789..b38d84183 100644 --- a/src/platform/qt/ts/mgba-template.ts +++ b/src/platform/qt/ts/mgba-template.ts @@ -1236,22 +1236,22 @@ Download size: %3 QGBA::ApplicationUpdater - + Stable - + Development - + Unknown - + (None) @@ -1302,27 +1302,27 @@ Download size: %3 QGBA::CoreController - + Failed to open save file: %1 - + Failed to open game file: %1 - + Can't yank pack in unexpected platform! - + Failed to open snapshot file for reading: %1 - + Failed to open snapshot file for writing: %1 diff --git a/src/platform/qt/ts/mgba-tr.ts b/src/platform/qt/ts/mgba-tr.ts index a40ee6343..2f9cf8a96 100644 --- a/src/platform/qt/ts/mgba-tr.ts +++ b/src/platform/qt/ts/mgba-tr.ts @@ -1237,22 +1237,22 @@ Download size: %3 QGBA::ApplicationUpdater - + Stable - + Development - + Unknown Bilinmeyen - + (None) @@ -1303,27 +1303,27 @@ Download size: %3 QGBA::CoreController - + Failed to open save file: %1 Kayıt dosyası açılamadı: %1 - + Failed to open game file: %1 Oyun dosyası açılamadı: %1 - + Can't yank pack in unexpected platform! Beklenmedik bir platformda kartı çıkaramazsın! - + Failed to open snapshot file for reading: %1 Anlık görüntü dosyası okuma için açılamadı: %1 - + Failed to open snapshot file for writing: %1 Anlık görüntü dosyası yazma için açılamadı: %1 diff --git a/src/platform/qt/ts/mgba-zh_CN.ts b/src/platform/qt/ts/mgba-zh_CN.ts index 370a5f29e..c92c91d49 100644 --- a/src/platform/qt/ts/mgba-zh_CN.ts +++ b/src/platform/qt/ts/mgba-zh_CN.ts @@ -1240,22 +1240,22 @@ Download size: %3 QGBA::ApplicationUpdater - + Stable 稳定版 - + Development 开发版 - + Unknown 未知 - + (None) (无) @@ -1306,27 +1306,27 @@ Download size: %3 QGBA::CoreController - + Failed to open save file: %1 打开存档失败: %1 - + Failed to open game file: %1 打开游戏文件失败: %1 - + Can't yank pack in unexpected platform! 无法在意外平台上抽出卡带! - + Failed to open snapshot file for reading: %1 读取快照文件失败: %1 - + Failed to open snapshot file for writing: %1 写入快照文件失败: %1 From 0252c370f28eed4ad32a75c88686fe1d2238e12d Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 28 Sep 2021 23:42:24 -0700 Subject: [PATCH 21/31] Qt: Mark more strings as untranslatable --- src/platform/qt/ApplicationUpdatePrompt.ui | 4 +-- src/platform/qt/ROMInfo.ui | 10 +++---- src/platform/qt/ts/mgba-de.ts | 35 ---------------------- src/platform/qt/ts/mgba-en.ts | 35 ---------------------- src/platform/qt/ts/mgba-es.ts | 35 ---------------------- src/platform/qt/ts/mgba-fi.ts | 35 ---------------------- src/platform/qt/ts/mgba-fr.ts | 35 ---------------------- src/platform/qt/ts/mgba-hu.ts | 35 ---------------------- src/platform/qt/ts/mgba-it.ts | 35 ---------------------- src/platform/qt/ts/mgba-ja.ts | 35 ---------------------- src/platform/qt/ts/mgba-ko.ts | 35 ---------------------- src/platform/qt/ts/mgba-ms.ts | 35 ---------------------- src/platform/qt/ts/mgba-nb_NO.ts | 35 ---------------------- src/platform/qt/ts/mgba-nl.ts | 35 ---------------------- src/platform/qt/ts/mgba-pl.ts | 35 ---------------------- src/platform/qt/ts/mgba-pt_BR.ts | 35 ---------------------- src/platform/qt/ts/mgba-ru.ts | 35 ---------------------- src/platform/qt/ts/mgba-template.ts | 35 ---------------------- src/platform/qt/ts/mgba-tr.ts | 35 ---------------------- src/platform/qt/ts/mgba-zh_CN.ts | 35 ---------------------- 20 files changed, 7 insertions(+), 637 deletions(-) diff --git a/src/platform/qt/ApplicationUpdatePrompt.ui b/src/platform/qt/ApplicationUpdatePrompt.ui index 31b3e6135..17ab4c125 100644 --- a/src/platform/qt/ApplicationUpdatePrompt.ui +++ b/src/platform/qt/ApplicationUpdatePrompt.ui @@ -20,7 +20,7 @@ - {text} + {text} true @@ -30,7 +30,7 @@ - {details} + {details} diff --git a/src/platform/qt/ROMInfo.ui b/src/platform/qt/ROMInfo.ui index aeebdad7f..e4d2c3bb3 100644 --- a/src/platform/qt/ROMInfo.ui +++ b/src/platform/qt/ROMInfo.ui @@ -30,7 +30,7 @@ - {NAME} + {NAME} true @@ -50,7 +50,7 @@ - {TITLE} + {TITLE} Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -67,7 +67,7 @@ - {ID} + {ID} Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -84,7 +84,7 @@ - {SIZE} + {SIZE} Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -101,7 +101,7 @@ - {CRC} + {CRC} Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse diff --git a/src/platform/qt/ts/mgba-de.ts b/src/platform/qt/ts/mgba-de.ts index f04f03133..699c63c32 100644 --- a/src/platform/qt/ts/mgba-de.ts +++ b/src/platform/qt/ts/mgba-de.ts @@ -43,16 +43,6 @@ Game Boy Advance ist eine eingetragene Marke von Nintendo Co., Ltd.An update is available Ein Update ist verfügbar - - - {text} - {text} - - - - {details} - {details} - ArchiveInspector @@ -4914,51 +4904,26 @@ Download-Größe: %3 Game name: Spielname: - - - {NAME} - {NAME} - Internal name: Interner Name: - - - {TITLE} - {TITLE} - Game ID: Spiele-ID: - - - {ID} - {ID} - File size: Dateigröße: - - - {SIZE} - {SIZE} - CRC32: CRC32: - - - {CRC} - {CRC} - ReportView diff --git a/src/platform/qt/ts/mgba-en.ts b/src/platform/qt/ts/mgba-en.ts index 32dda36fa..03fbd5e0d 100644 --- a/src/platform/qt/ts/mgba-en.ts +++ b/src/platform/qt/ts/mgba-en.ts @@ -42,16 +42,6 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. An update is available - - - {text} - - - - - {details} - - ArchiveInspector @@ -4908,51 +4898,26 @@ Download size: %3 Game name: - - - {NAME} - - Internal name: - - - {TITLE} - - Game ID: - - - {ID} - - File size: - - - {SIZE} - - CRC32: - - - {CRC} - - ReportView diff --git a/src/platform/qt/ts/mgba-es.ts b/src/platform/qt/ts/mgba-es.ts index afdf131ed..dd4fa810c 100644 --- a/src/platform/qt/ts/mgba-es.ts +++ b/src/platform/qt/ts/mgba-es.ts @@ -43,16 +43,6 @@ Game Boy Advance es una marca registrada de Nintendo Co., Ltd. An update is available Hay una actualización disponible - - - {text} - - - - - {details} - - ArchiveInspector @@ -4911,51 +4901,26 @@ Download size: %3 Game name: Nombre del juego: - - - {NAME} - {NAME} - Internal name: Nombre interno: - - - {TITLE} - {TITLE} - Game ID: Id. de juego: - - - {ID} - {ID} - File size: Tamaño del archivo: - - - {SIZE} - {SIZE} - CRC32: CRC32: - - - {CRC} - {CRC} - ReportView diff --git a/src/platform/qt/ts/mgba-fi.ts b/src/platform/qt/ts/mgba-fi.ts index 0c292a7b5..e928218ac 100644 --- a/src/platform/qt/ts/mgba-fi.ts +++ b/src/platform/qt/ts/mgba-fi.ts @@ -43,16 +43,6 @@ Game Boy Advance on Nintendo Co., Ltd rekisteröimä tuotemerkki. An update is available - - - {text} - - - - - {details} - - ArchiveInspector @@ -4909,51 +4899,26 @@ Download size: %3 Game name: - - - {NAME} - - Internal name: - - - {TITLE} - - Game ID: - - - {ID} - - File size: - - - {SIZE} - - CRC32: - - - {CRC} - - ReportView diff --git a/src/platform/qt/ts/mgba-fr.ts b/src/platform/qt/ts/mgba-fr.ts index 474e0aa60..d65e9e476 100644 --- a/src/platform/qt/ts/mgba-fr.ts +++ b/src/platform/qt/ts/mgba-fr.ts @@ -43,16 +43,6 @@ Game Boy Advance est une marque de fabrique enregistré par Nintendo Co., Ltd.An update is available - - - {text} - - - - - {details} - - ArchiveInspector @@ -4930,51 +4920,26 @@ Download size: %3 Game name: Nom du jeu : - - - {NAME} - {NAME} - Internal name: Nom interne : - - - {TITLE} - {TITLE} - Game ID: ID du jeu : - - - {ID} - {ID} - File size: Taille du fichier : - - - {SIZE} - {SIZE} - CRC32: CRC32 : - - - {CRC} - {CRC} - ReportView diff --git a/src/platform/qt/ts/mgba-hu.ts b/src/platform/qt/ts/mgba-hu.ts index 89f68bfd0..ef3eac5ff 100644 --- a/src/platform/qt/ts/mgba-hu.ts +++ b/src/platform/qt/ts/mgba-hu.ts @@ -43,16 +43,6 @@ A Game Boy Advance a Nintendo Co., Ltd. bejegyzett védjegye An update is available - - - {text} - - - - - {details} - - ArchiveInspector @@ -4907,51 +4897,26 @@ Download size: %3 Game name: - - - {NAME} - - Internal name: - - - {TITLE} - - Game ID: - - - {ID} - - File size: - - - {SIZE} - - CRC32: - - - {CRC} - - ReportView diff --git a/src/platform/qt/ts/mgba-it.ts b/src/platform/qt/ts/mgba-it.ts index 4e6574f04..fd86f415b 100644 --- a/src/platform/qt/ts/mgba-it.ts +++ b/src/platform/qt/ts/mgba-it.ts @@ -43,16 +43,6 @@ Game Boy Advance è un marchio registrato di Nintendo Co., Ltd. An update is available - - - {text} - - - - - {details} - - ArchiveInspector @@ -4911,51 +4901,26 @@ Download size: %3 Game name: Nome del gioco: - - - {NAME} - {NAME} - Internal name: Nome interno: - - - {TITLE} - {TITLE} - Game ID: ID del gioco: - - - {ID} - {ID} - File size: Dimensioni del file: - - - {SIZE} - {SIZE} - CRC32: CRC32: - - - {CRC} - {CRC} - ReportView diff --git a/src/platform/qt/ts/mgba-ja.ts b/src/platform/qt/ts/mgba-ja.ts index e8cea324d..b2f888ace 100644 --- a/src/platform/qt/ts/mgba-ja.ts +++ b/src/platform/qt/ts/mgba-ja.ts @@ -43,16 +43,6 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. An update is available - - - {text} - - - - - {details} - - ArchiveInspector @@ -4909,51 +4899,26 @@ Download size: %3 Game name: ゲーム名: - - - {NAME} - {NAME} - Internal name: 内部名: - - - {TITLE} - {TITLE} - Game ID: ゲームID: - - - {ID} - {ID} - File size: ファイルサイズ: - - - {SIZE} - {SIZE} - CRC32: CRC32: - - - {CRC} - {CRC} - ReportView diff --git a/src/platform/qt/ts/mgba-ko.ts b/src/platform/qt/ts/mgba-ko.ts index 30f799524..77a0103c1 100644 --- a/src/platform/qt/ts/mgba-ko.ts +++ b/src/platform/qt/ts/mgba-ko.ts @@ -43,16 +43,6 @@ Game Boy Advance는 Nintendo Co., Ltd.의 등록 상표입니다. An update is available - - - {text} - - - - - {details} - - ArchiveInspector @@ -4909,51 +4899,26 @@ Download size: %3 Game name: 게임 이름: - - - {NAME} - {이름} - Internal name: 내부 이름: - - - {TITLE} - {제목} - Game ID: 게임 ID: - - - {ID} - {ID} - File size: 파일 크기: - - - {SIZE} - {크기} - CRC32: CRC32: - - - {CRC} - {CRC} - ReportView diff --git a/src/platform/qt/ts/mgba-ms.ts b/src/platform/qt/ts/mgba-ms.ts index 1adc81213..5df44dce9 100644 --- a/src/platform/qt/ts/mgba-ms.ts +++ b/src/platform/qt/ts/mgba-ms.ts @@ -42,16 +42,6 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. An update is available - - - {text} - - - - - {details} - - ArchiveInspector @@ -4908,51 +4898,26 @@ Download size: %3 Game name: Nama permainan: - - - {NAME} - {NAME} - Internal name: Nama dalaman: - - - {TITLE} - {TITLE} - Game ID: ID Permainan: - - - {ID} - {ID} - File size: Saiz fail: - - - {SIZE} - {SIZE} - CRC32: CRC32: - - - {CRC} - {CRC} - ReportView diff --git a/src/platform/qt/ts/mgba-nb_NO.ts b/src/platform/qt/ts/mgba-nb_NO.ts index 9ef804e04..3f441ace0 100644 --- a/src/platform/qt/ts/mgba-nb_NO.ts +++ b/src/platform/qt/ts/mgba-nb_NO.ts @@ -43,16 +43,6 @@ Game Boy Advance er et registrert varemerke tilhørende Nintendo Co., Ltd.An update is available - - - {text} - - - - - {details} - - ArchiveInspector @@ -4909,51 +4899,26 @@ Download size: %3 Game name: - - - {NAME} - - Internal name: - - - {TITLE} - - Game ID: - - - {ID} - - File size: - - - {SIZE} - - CRC32: - - - {CRC} - - ReportView diff --git a/src/platform/qt/ts/mgba-nl.ts b/src/platform/qt/ts/mgba-nl.ts index 7644202d5..0c41997e4 100644 --- a/src/platform/qt/ts/mgba-nl.ts +++ b/src/platform/qt/ts/mgba-nl.ts @@ -42,16 +42,6 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. An update is available Er is een update beschikbaar - - - {text} - {text} - - - - {details} - {details} - ArchiveInspector @@ -4908,51 +4898,26 @@ Download size: %3 Game name: - - - {NAME} - - Internal name: - - - {TITLE} - - Game ID: - - - {ID} - - File size: - - - {SIZE} - - CRC32: CRC32: - - - {CRC} - - ReportView diff --git a/src/platform/qt/ts/mgba-pl.ts b/src/platform/qt/ts/mgba-pl.ts index 1f6e946ad..42d2b9814 100644 --- a/src/platform/qt/ts/mgba-pl.ts +++ b/src/platform/qt/ts/mgba-pl.ts @@ -42,16 +42,6 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. An update is available - - - {text} - - - - - {details} - - ArchiveInspector @@ -4910,51 +4900,26 @@ Download size: %3 Game name: - - - {NAME} - - Internal name: - - - {TITLE} - - Game ID: - - - {ID} - - File size: - - - {SIZE} - - CRC32: CRC32: - - - {CRC} - - ReportView diff --git a/src/platform/qt/ts/mgba-pt_BR.ts b/src/platform/qt/ts/mgba-pt_BR.ts index 2f2eb77ab..2b31c4c61 100644 --- a/src/platform/qt/ts/mgba-pt_BR.ts +++ b/src/platform/qt/ts/mgba-pt_BR.ts @@ -43,16 +43,6 @@ Game Boy Advance é uma marca registrada da Nintendo Co., Ltd. An update is available - - - {text} - - - - - {details} - - ArchiveInspector @@ -4911,51 +4901,26 @@ Download size: %3 Game name: Nome do jogo: - - - {NAME} - {NAME} - Internal name: Nome interno: - - - {TITLE} - {TITLE} - Game ID: ID do Jogo: - - - {ID} - {ID} - File size: Tamanho do arquivo: - - - {SIZE} - {SIZE} - CRC32: CRC32: - - - {CRC} - {CRC} - ReportView diff --git a/src/platform/qt/ts/mgba-ru.ts b/src/platform/qt/ts/mgba-ru.ts index 3799c2f50..a6abcd157 100644 --- a/src/platform/qt/ts/mgba-ru.ts +++ b/src/platform/qt/ts/mgba-ru.ts @@ -43,16 +43,6 @@ Game Boy Advance - зарегистрированная торговая мар An update is available Доступно обновление - - - {text} - {текст} - - - - {details} - {подробности} - ArchiveInspector @@ -4916,51 +4906,26 @@ Download size: %3 Game name: - - - {NAME} - - Internal name: - - - {TITLE} - - Game ID: - - - {ID} - - File size: - - - {SIZE} - - CRC32: CRC32: - - - {CRC} - - ReportView diff --git a/src/platform/qt/ts/mgba-template.ts b/src/platform/qt/ts/mgba-template.ts index b38d84183..fed927a52 100644 --- a/src/platform/qt/ts/mgba-template.ts +++ b/src/platform/qt/ts/mgba-template.ts @@ -42,16 +42,6 @@ Game Boy Advance is a registered trademark of Nintendo Co., Ltd. An update is available - - - {text} - - - - - {details} - - ArchiveInspector @@ -4906,51 +4896,26 @@ Download size: %3 Game name: - - - {NAME} - - Internal name: - - - {TITLE} - - Game ID: - - - {ID} - - File size: - - - {SIZE} - - CRC32: - - - {CRC} - - ReportView diff --git a/src/platform/qt/ts/mgba-tr.ts b/src/platform/qt/ts/mgba-tr.ts index 2f9cf8a96..f3e31753f 100644 --- a/src/platform/qt/ts/mgba-tr.ts +++ b/src/platform/qt/ts/mgba-tr.ts @@ -43,16 +43,6 @@ Game Boy Advance, Nintendo Co., Ltd.'nin tescilli ticari markasıdır.An update is available - - - {text} - - - - - {details} - - ArchiveInspector @@ -4909,51 +4899,26 @@ Download size: %3 Game name: Oyun adı: - - - {NAME} - - Internal name: Dahili İsim: - - - {TITLE} - - Game ID: - - - {ID} - - File size: Dosya boyutu: - - - {SIZE} - - CRC32: - - - {CRC} - - ReportView diff --git a/src/platform/qt/ts/mgba-zh_CN.ts b/src/platform/qt/ts/mgba-zh_CN.ts index c92c91d49..2dd2c9e16 100644 --- a/src/platform/qt/ts/mgba-zh_CN.ts +++ b/src/platform/qt/ts/mgba-zh_CN.ts @@ -43,16 +43,6 @@ Game Boy Advance 是任天堂有限公司(Nintendo Co., Ltd.)的注册商标 An update is available 有可用的更新 - - - {text} - {text} - - - - {details} - {details} - ArchiveInspector @@ -4912,51 +4902,26 @@ Download size: %3 Game name: 游戏名称: - - - {NAME} - {NAME} - Internal name: 内部名称: - - - {TITLE} - {TITLE} - Game ID: 游戏 ID: - - - {ID} - {ID} - File size: 文件大小: - - - {SIZE} - {SIZE} - CRC32: CRC32: - - - {CRC} - {CRC} - ReportView From 40d4c430fc36caeb7ea32fd39624947ed487d2f2 Mon Sep 17 00:00:00 2001 From: shuffle2 Date: Thu, 30 Sep 2021 12:47:44 -0700 Subject: [PATCH 22/31] msvc : fix compilation for c11/c17 lang standards msvc currently supports up to c17 but does not implement some optional features. see https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros?view=msvc-160 and https://docs.microsoft.com/en-us/cpp/build/reference/std-specify-language-standard-version?view=msvc-160 --- include/mgba-util/threading.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/mgba-util/threading.h b/include/mgba-util/threading.h index 779a533a0..1a7fcceab 100644 --- a/include/mgba-util/threading.h +++ b/include/mgba-util/threading.h @@ -11,7 +11,7 @@ CXX_GUARD_START #ifndef DISABLE_THREADING -#if __STDC_VERSION__ >= 201112L +#if (__STDC_VERSION__ >= 201112L) && (__STDC_NO_THREADS__ != 1) #define ThreadLocal _Thread_local void* #define ThreadLocalInitKey(X) #define ThreadLocalSetKey(K, V) K = V From b4f4f2b0fa3445372fda5e616e7ae0f1a97f76b5 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 12 Oct 2021 14:33:55 -0700 Subject: [PATCH 23/31] Wii: Add adjustable gyroscope settings (closes #2245) --- CHANGES | 1 + src/platform/wii/main.c | 26 +++++++++++++++++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index de7213408..0a9efc828 100644 --- a/CHANGES +++ b/CHANGES @@ -34,6 +34,7 @@ Misc: - Qt: Rearrange menus some - Qt: Clean up cheats dialog - Qt: Only set default controller bindings if loading fails (fixes mgba.io/i/799) + - Wii: Add adjustable gyroscope settings (closes mgba.io/i/2245) 0.9.2: (2021-07-10) Emulation fixes: diff --git a/src/platform/wii/main.c b/src/platform/wii/main.c index 8149ce285..3e435f6e2 100644 --- a/src/platform/wii/main.c +++ b/src/platform/wii/main.c @@ -43,7 +43,7 @@ #define ANALOG_DEADZONE 0x30 -static void _mapKey(struct mInputMap* map, uint32_t binding, int nativeKey, enum GBAKey key) { +static void _mapKey(struct mInputMap* map, uint32_t binding, int nativeKey, int key) { mInputBindKey(map, binding, __builtin_ctz(nativeKey), key); } @@ -124,6 +124,7 @@ static bool sgbCrop = false; static int32_t tiltX; static int32_t tiltY; static int32_t gyroZ; +static float gyroSensitivity = 1.f; static uint32_t retraceCount; static uint32_t referenceRetraceCount; static bool frameLimiter = true; @@ -564,8 +565,26 @@ int main(int argc, char* argv[]) { }, .nStates = 8 }, + { + .title = "Gyroscope sensitivity", + .data = GUI_V_S("gyroSensitivity"), + .submenu = 0, + .state = 0, + .validStates = (const char*[]) { + "1x", "1x flipped", "2x", "2x flipped", "1/2x", "1/2x flipped" + }, + .stateMappings = (const struct GUIVariant[]) { + GUI_V_F(1.f), + GUI_V_F(-1.f), + GUI_V_F(2.f), + GUI_V_F(-2.f), + GUI_V_F(0.5f), + GUI_V_F(-0.5f), + }, + .nStates = 6 + }, }, - .nConfigExtra = 5, + .nConfigExtra = 6, .setup = _setup, .teardown = 0, .gameLoaded = _gameLoaded, @@ -976,6 +995,7 @@ void _unpaused(struct mGUIRunner* runner) { if (mCoreConfigGetFloatValue(&runner->config, "stretchHeight", &stretch)) { hStretch = fminf(1.0f, fmaxf(0.5f, stretch)); } + mCoreConfigGetFloatValue(&runner->config, "gyroSensitivity", &gyroSensitivity); } void _prepareForFrame(struct mGUIRunner* runner) { @@ -1220,7 +1240,7 @@ int32_t _readTiltY(struct mRotationSource* source) { int32_t _readGyroZ(struct mRotationSource* source) { UNUSED(source); - return gyroZ; + return gyroZ * gyroSensitivity; } static s8 WPAD_StickX(u8 chan, u8 right) { From 511a061ab00bb778e7d62f21d70687fd430926c1 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Thu, 14 Oct 2021 01:46:55 -0700 Subject: [PATCH 24/31] GBA I/O: Update KEYINPUT in internal I/O memory (fixes #2235) --- CHANGES | 1 + src/gba/io.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 0a9efc828..2d6c8d2db 100644 --- a/CHANGES +++ b/CHANGES @@ -30,6 +30,7 @@ Other fixes: - Qt: Fix corrupted savestate and fatal error text Misc: - Core: Suspend runloop when a core crashes + - GBA I/O: Update KEYINPUT in internal I/O memory (fixes mgba.io/i/2235) - mGUI: Add margin to right-aligned menu text (fixes mgba.io/i/871) - Qt: Rearrange menus some - Qt: Clean up cheats dialog diff --git a/src/gba/io.c b/src/gba/io.c index cc39e1192..7abf28047 100644 --- a/src/gba/io.c +++ b/src/gba/io.c @@ -763,8 +763,9 @@ uint16_t GBAIORead(struct GBA* gba, uint32_t address) { } } } - return 0x3FF ^ input; + gba->memory.io[address >> 1] = 0x3FF ^ input; } + break; case REG_SIOCNT: return gba->sio.siocnt; case REG_RCNT: From f696619b11d74c09e49485caa7d916753c6fc3f4 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Thu, 14 Oct 2021 01:59:59 -0700 Subject: [PATCH 25/31] GBA I/O: Redo internal key input, enabling edge-based key IRQs --- CHANGES | 1 + include/mgba/internal/gba/gba.h | 3 ++- src/gba/core.c | 20 ++++++++------------ src/gba/gba.c | 17 +++++++++++------ src/gba/io.c | 27 +++++++++++---------------- 5 files changed, 33 insertions(+), 35 deletions(-) diff --git a/CHANGES b/CHANGES index 2d6c8d2db..0692d5e4a 100644 --- a/CHANGES +++ b/CHANGES @@ -16,6 +16,7 @@ Emulation fixes: - GB Memory: Add cursory cartridge open bus emulation (fixes mgba.io/i/2032) - GB Video: Render SGB border when unmasking with ATTR/PAL_SET (fixes mgba.io/i/2261) - GBA: Improve timing when not booting from BIOS + - GBA I/O: Redo internal key input, enabling edge-based key IRQs - GBA Memory: Fix misaligned 32-bit I/O loads (fixes mgba.io/i/2307) - GBA SIO: Fix SI value for unattached MULTI mode - GBA Video: Fix backdrop color if DISPCNT is first set to 0 (fixes mgba.io/i/2260) diff --git a/include/mgba/internal/gba/gba.h b/include/mgba/internal/gba/gba.h index 6e8fe4990..d98cdab39 100644 --- a/include/mgba/internal/gba/gba.h +++ b/include/mgba/internal/gba/gba.h @@ -85,7 +85,8 @@ struct GBA { struct mTimingEvent irqEvent; uint32_t biosChecksum; - int* keySource; + uint16_t keysActive; + uint16_t keysLast; struct mRotationSource* rotationSource; struct GBALuminanceSource* luminanceSource; struct mRTCSource* rtcSource; diff --git a/src/gba/core.c b/src/gba/core.c index 3bd31b776..112e34618 100644 --- a/src/gba/core.c +++ b/src/gba/core.c @@ -146,7 +146,6 @@ struct GBACore { #ifndef DISABLE_THREADING struct mVideoThreadProxy threadProxy; #endif - int keys; struct mCPUComponent* components[CPU_COMPONENT_MAX]; const struct Configuration* overrides; struct mDebuggerPlatform* debuggerPlatform; @@ -205,9 +204,6 @@ static bool _GBACoreInit(struct mCore* core) { gbacore->proxyRenderer.logger = NULL; #endif - gbacore->keys = 0; - gba->keySource = &gbacore->keys; - #if !defined(MINIMAL_CORE) || MINIMAL_CORE < 2 mDirectorySetInit(&core->dirs); #endif @@ -707,20 +703,20 @@ static bool _GBACoreSaveState(struct mCore* core, void* state) { } static void _GBACoreSetKeys(struct mCore* core, uint32_t keys) { - struct GBACore* gbacore = (struct GBACore*) core; - gbacore->keys = keys; - GBATestKeypadIRQ(core->board); + struct GBA* gba = core->board; + gba->keysActive = keys; + GBATestKeypadIRQ(gba); } static void _GBACoreAddKeys(struct mCore* core, uint32_t keys) { - struct GBACore* gbacore = (struct GBACore*) core; - gbacore->keys |= keys; - GBATestKeypadIRQ(core->board); + struct GBA* gba = core->board; + gba->keysActive |= keys; + GBATestKeypadIRQ(gba); } static void _GBACoreClearKeys(struct mCore* core, uint32_t keys) { - struct GBACore* gbacore = (struct GBACore*) core; - gbacore->keys &= ~keys; + struct GBA* gba = core->board; + gba->keysActive &= ~keys; } static int32_t _GBACoreFrameCounter(const struct mCore* core) { diff --git a/src/gba/gba.c b/src/gba/gba.c index b73fe9d86..6df5086a1 100644 --- a/src/gba/gba.c +++ b/src/gba/gba.c @@ -90,7 +90,8 @@ static void GBAInit(void* cpu, struct mCPUComponent* component) { GBAHardwareInit(&gba->memory.hw, NULL); - gba->keySource = 0; + gba->keysActive = 0; + gba->keysLast = 0; gba->rotationSource = 0; gba->luminanceSource = 0; gba->rtcSource = 0; @@ -877,18 +878,22 @@ void GBAFrameEnded(struct GBA* gba) { } void GBATestKeypadIRQ(struct GBA* gba) { + if (gba->keysActive == gba->keysLast) { + return; + } uint16_t keycnt = gba->memory.io[REG_KEYCNT >> 1]; if (!(keycnt & 0x4000)) { return; } int isAnd = keycnt & 0x8000; - if (!gba->keySource) { - // TODO? - return; - } keycnt &= 0x3FF; - uint16_t keyInput = *gba->keySource & keycnt; + uint16_t keyInput = gba->keysActive & keycnt; + uint16_t lastInput = gba->keysLast & keycnt; + gba->keysLast = gba->keysActive; + if (keyInput == lastInput) { + return; + } if (isAnd && keycnt == keyInput) { GBARaiseIRQ(gba, IRQ_KEYPAD, 0); diff --git a/src/gba/io.c b/src/gba/io.c index 7abf28047..ec16c6b93 100644 --- a/src/gba/io.c +++ b/src/gba/io.c @@ -743,24 +743,19 @@ uint16_t GBAIORead(struct GBA* gba, uint32_t address) { callbacks->keysRead(callbacks->context); } } - uint16_t input = 0; if (gba->keyCallback) { - input = gba->keyCallback->readKeys(gba->keyCallback); - if (gba->keySource) { - *gba->keySource = input; + gba->keysActive = gba->keyCallback->readKeys(gba->keyCallback); + } + uint16_t input = gba->keysActive; + if (!gba->allowOpposingDirections) { + unsigned rl = input & 0x030; + unsigned ud = input & 0x0C0; + input &= 0x30F; + if (rl != 0x030) { + input |= rl; } - } else if (gba->keySource) { - input = *gba->keySource; - if (!gba->allowOpposingDirections) { - unsigned rl = input & 0x030; - unsigned ud = input & 0x0C0; - input &= 0x30F; - if (rl != 0x030) { - input |= rl; - } - if (ud != 0x0C0) { - input |= ud; - } + if (ud != 0x0C0) { + input |= ud; } } gba->memory.io[address >> 1] = 0x3FF ^ input; From 85e975c7af5b26e4097b1e60c2b4b2196b3df69c Mon Sep 17 00:00:00 2001 From: Fletcher Porter Date: Fri, 15 Oct 2021 00:00:10 -0700 Subject: [PATCH 26/31] [SIO] Fix a -Wswitch warning out of lockstep.c The compiler was complaining of unhandled branches, but a new `default` case solves that. --- src/gba/sio/lockstep.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gba/sio/lockstep.c b/src/gba/sio/lockstep.c index ba1f3f0af..8438b2b8e 100644 --- a/src/gba/sio/lockstep.c +++ b/src/gba/sio/lockstep.c @@ -462,6 +462,8 @@ static void _GBASIOLockstepNodeProcessEvents(struct mTiming* timing, void* user, node->eventDiff = 0; } break; + default: + break; } } else if (node->nextEvent <= 0) { if (!node->id) { From a997e2b6dca24332379fa437560e40d827cfabe7 Mon Sep 17 00:00:00 2001 From: Fletcher Porter Date: Fri, 15 Oct 2021 00:03:18 -0700 Subject: [PATCH 27/31] [debugger] Silence a -Wswitch warning out of gdb-stub.c No one likes unhandled branches, and the compiler was just kindly reminding us to take care of them. Well, remind us no more, compiler. --- src/debugger/gdb-stub.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/debugger/gdb-stub.c b/src/debugger/gdb-stub.c index a37e5362a..23cc52396 100644 --- a/src/debugger/gdb-stub.c +++ b/src/debugger/gdb-stub.c @@ -72,6 +72,8 @@ static void _gdbStubEntered(struct mDebugger* debugger, enum mDebuggerEntryReaso case WATCHPOINT_RW: type = "awatch"; break; + case WATCHPOINT_CHANGE: + break; } snprintf(stub->outgoing, GDB_STUB_MAX_LINE - 4, "T%02x%s:%08x;", SIGTRAP, type, info->address); } else { From 59cb5c189a15b01e2cb71182f707fe18baf81002 Mon Sep 17 00:00:00 2001 From: ahigerd Date: Mon, 1 Nov 2021 13:48:43 -0500 Subject: [PATCH 28/31] Fix "English" language name (#2342) --- src/platform/qt/SettingsView.cpp | 7 ++++--- src/platform/qt/SettingsView.ui | 8 +------- src/platform/qt/ts/mgba-de.ts | 5 ----- src/platform/qt/ts/mgba-en.ts | 5 ----- src/platform/qt/ts/mgba-es.ts | 5 ----- src/platform/qt/ts/mgba-fi.ts | 5 ----- src/platform/qt/ts/mgba-fr.ts | 5 ----- src/platform/qt/ts/mgba-hu.ts | 5 ----- src/platform/qt/ts/mgba-it.ts | 5 ----- src/platform/qt/ts/mgba-ja.ts | 5 ----- src/platform/qt/ts/mgba-ko.ts | 5 ----- src/platform/qt/ts/mgba-ms.ts | 5 ----- src/platform/qt/ts/mgba-nb_NO.ts | 5 ----- src/platform/qt/ts/mgba-nl.ts | 5 ----- src/platform/qt/ts/mgba-pl.ts | 5 ----- src/platform/qt/ts/mgba-pt_BR.ts | 5 ----- src/platform/qt/ts/mgba-ru.ts | 5 ----- src/platform/qt/ts/mgba-template.ts | 5 ----- src/platform/qt/ts/mgba-tr.ts | 5 ----- src/platform/qt/ts/mgba-zh_CN.ts | 11 +++-------- 20 files changed, 8 insertions(+), 103 deletions(-) diff --git a/src/platform/qt/SettingsView.cpp b/src/platform/qt/SettingsView.cpp index 2e575564e..611c6d2de 100644 --- a/src/platform/qt/SettingsView.cpp +++ b/src/platform/qt/SettingsView.cpp @@ -337,7 +337,8 @@ SettingsView::SettingsView(ConfigController* controller, InputController* inputC } }); - m_ui.languages->setItemData(0, QLocale("en")); + QLocale englishLocale("en"); + m_ui.languages->addItem(englishLocale.nativeLanguageName(), englishLocale); QDir ts(":/translations/"); for (auto name : ts.entryList()) { if (!name.endsWith(".qm") || !name.startsWith(binaryName)) { @@ -647,7 +648,7 @@ void SettingsView::updateConfig() { emit biosLoaded(mPLATFORM_GBA, m_ui.gbaBios->text()); } -void SettingsView::reloadConfig() { +void SettingsView::reloadConfig() { loadSetting("bios", m_ui.gbaBios); loadSetting("gba.bios", m_ui.gbaBios); loadSetting("gb.bios", m_ui.gbBios); @@ -818,7 +819,7 @@ void SettingsView::reloadConfig() { } else if (multiplayerAudio == QLatin1String("active")) { m_ui.multiplayerAudioActive->setChecked(true); } else { - m_ui.multiplayerAudioAll->setChecked(true); + m_ui.multiplayerAudioAll->setChecked(true); } } diff --git a/src/platform/qt/SettingsView.ui b/src/platform/qt/SettingsView.ui index 26781f689..254a7f8ec 100644 --- a/src/platform/qt/SettingsView.ui +++ b/src/platform/qt/SettingsView.ui @@ -523,13 +523,7 @@ - - - - English - - - + diff --git a/src/platform/qt/ts/mgba-de.ts b/src/platform/qt/ts/mgba-de.ts index 699c63c32..8739b617a 100644 --- a/src/platform/qt/ts/mgba-de.ts +++ b/src/platform/qt/ts/mgba-de.ts @@ -5471,11 +5471,6 @@ Download-Größe: %3 Language Sprache - - - English - Englisch - List view diff --git a/src/platform/qt/ts/mgba-en.ts b/src/platform/qt/ts/mgba-en.ts index 03fbd5e0d..9ab28f26e 100644 --- a/src/platform/qt/ts/mgba-en.ts +++ b/src/platform/qt/ts/mgba-en.ts @@ -5475,11 +5475,6 @@ Download size: %3 Language - - - English - - Library: diff --git a/src/platform/qt/ts/mgba-es.ts b/src/platform/qt/ts/mgba-es.ts index dd4fa810c..f9b576404 100644 --- a/src/platform/qt/ts/mgba-es.ts +++ b/src/platform/qt/ts/mgba-es.ts @@ -5544,11 +5544,6 @@ Download size: %3 Language Idioma - - - English - English - Library: diff --git a/src/platform/qt/ts/mgba-fi.ts b/src/platform/qt/ts/mgba-fi.ts index e928218ac..33831462a 100644 --- a/src/platform/qt/ts/mgba-fi.ts +++ b/src/platform/qt/ts/mgba-fi.ts @@ -5476,11 +5476,6 @@ Download size: %3 Language - - - English - - Library: diff --git a/src/platform/qt/ts/mgba-fr.ts b/src/platform/qt/ts/mgba-fr.ts index d65e9e476..7b5306fa6 100644 --- a/src/platform/qt/ts/mgba-fr.ts +++ b/src/platform/qt/ts/mgba-fr.ts @@ -5569,11 +5569,6 @@ Download size: %3 Language Langue - - - English - anglais - Library: diff --git a/src/platform/qt/ts/mgba-hu.ts b/src/platform/qt/ts/mgba-hu.ts index ef3eac5ff..6420a63ef 100644 --- a/src/platform/qt/ts/mgba-hu.ts +++ b/src/platform/qt/ts/mgba-hu.ts @@ -5418,11 +5418,6 @@ Download size: %3 Language - - - English - - Library: diff --git a/src/platform/qt/ts/mgba-it.ts b/src/platform/qt/ts/mgba-it.ts index fd86f415b..09d32a059 100644 --- a/src/platform/qt/ts/mgba-it.ts +++ b/src/platform/qt/ts/mgba-it.ts @@ -5735,11 +5735,6 @@ Download size: %3 Language Lingua - - - English - inglese - List view diff --git a/src/platform/qt/ts/mgba-ja.ts b/src/platform/qt/ts/mgba-ja.ts index b2f888ace..ea0878d30 100644 --- a/src/platform/qt/ts/mgba-ja.ts +++ b/src/platform/qt/ts/mgba-ja.ts @@ -5572,11 +5572,6 @@ Download size: %3 Language 言語 - - - English - English - Library: diff --git a/src/platform/qt/ts/mgba-ko.ts b/src/platform/qt/ts/mgba-ko.ts index 77a0103c1..a9a96cfac 100644 --- a/src/platform/qt/ts/mgba-ko.ts +++ b/src/platform/qt/ts/mgba-ko.ts @@ -5733,11 +5733,6 @@ Download size: %3 Language 언어 - - - English - 영어 - List view diff --git a/src/platform/qt/ts/mgba-ms.ts b/src/platform/qt/ts/mgba-ms.ts index 5df44dce9..c5e3e6237 100644 --- a/src/platform/qt/ts/mgba-ms.ts +++ b/src/platform/qt/ts/mgba-ms.ts @@ -5475,11 +5475,6 @@ Download size: %3 Language Bahasa - - - English - Inggeris - Library: diff --git a/src/platform/qt/ts/mgba-nb_NO.ts b/src/platform/qt/ts/mgba-nb_NO.ts index 3f441ace0..b569281c2 100644 --- a/src/platform/qt/ts/mgba-nb_NO.ts +++ b/src/platform/qt/ts/mgba-nb_NO.ts @@ -5476,11 +5476,6 @@ Download size: %3 Language - - - English - - Library: diff --git a/src/platform/qt/ts/mgba-nl.ts b/src/platform/qt/ts/mgba-nl.ts index 0c41997e4..3cf679d6b 100644 --- a/src/platform/qt/ts/mgba-nl.ts +++ b/src/platform/qt/ts/mgba-nl.ts @@ -5510,11 +5510,6 @@ Download size: %3 Language - - - English - - Library: diff --git a/src/platform/qt/ts/mgba-pl.ts b/src/platform/qt/ts/mgba-pl.ts index 42d2b9814..146386936 100644 --- a/src/platform/qt/ts/mgba-pl.ts +++ b/src/platform/qt/ts/mgba-pl.ts @@ -5477,11 +5477,6 @@ Download size: %3 Language - - - English - - Library: diff --git a/src/platform/qt/ts/mgba-pt_BR.ts b/src/platform/qt/ts/mgba-pt_BR.ts index 2b31c4c61..13f744748 100644 --- a/src/platform/qt/ts/mgba-pt_BR.ts +++ b/src/platform/qt/ts/mgba-pt_BR.ts @@ -5544,11 +5544,6 @@ Download size: %3 Language Idioma - - - English - Inglês - Library: diff --git a/src/platform/qt/ts/mgba-ru.ts b/src/platform/qt/ts/mgba-ru.ts index a6abcd157..806b28632 100644 --- a/src/platform/qt/ts/mgba-ru.ts +++ b/src/platform/qt/ts/mgba-ru.ts @@ -5518,11 +5518,6 @@ Download size: %3 Language - - - English - - Library: diff --git a/src/platform/qt/ts/mgba-template.ts b/src/platform/qt/ts/mgba-template.ts index fed927a52..0c6898d9a 100644 --- a/src/platform/qt/ts/mgba-template.ts +++ b/src/platform/qt/ts/mgba-template.ts @@ -5473,11 +5473,6 @@ Download size: %3 Language - - - English - - Library: diff --git a/src/platform/qt/ts/mgba-tr.ts b/src/platform/qt/ts/mgba-tr.ts index f3e31753f..8f2b83467 100644 --- a/src/platform/qt/ts/mgba-tr.ts +++ b/src/platform/qt/ts/mgba-tr.ts @@ -5511,11 +5511,6 @@ Download size: %3 Language Dil - - - English - İngilizce - Library: diff --git a/src/platform/qt/ts/mgba-zh_CN.ts b/src/platform/qt/ts/mgba-zh_CN.ts index 2dd2c9e16..a7a4a0c4d 100644 --- a/src/platform/qt/ts/mgba-zh_CN.ts +++ b/src/platform/qt/ts/mgba-zh_CN.ts @@ -1199,7 +1199,7 @@ Game Boy Advance 是任天堂有限公司(Nintendo Co., Ltd.)的注册商标 An update to %1 is available. Do you want to download and install it now? You will need to restart the emulator when the download is complete. - %1 有更新可用。 + %1 有更新可用。 您想要现在下载并安装它吗?在下载完成后,您将需要重新启动模拟器。 @@ -1207,8 +1207,8 @@ Do you want to download and install it now? You will need to restart the emulato Current version: %1 New version: %2 Download size: %3 - 当前版本:%1 -新版本:%2 + 当前版本:%1 +新版本:%2 更新大小:%3 @@ -5479,11 +5479,6 @@ Download size: %3 Language 语言 - - - English - 英语 - Library: From 53c7f6f50ae656161482308d5acf067491cd34b5 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 9 Nov 2021 15:15:18 -0800 Subject: [PATCH 29/31] ARM Decoder: Fix decoding of lsl r0 (fixes #2349) --- CHANGES | 1 + src/arm/decoder-arm.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 0692d5e4a..b1a976ebe 100644 --- a/CHANGES +++ b/CHANGES @@ -23,6 +23,7 @@ Emulation fixes: - GBA Video: Don't iterate affine backgrounds when disabled - GBA Video: Delay enabling backgrounds in bitmap modes (fixes mgba.io/i/1668) Other fixes: + - ARM Decoder: Fix decoding of lsl r0 (fixes mgba.io/i/2349) - Core: Don't attempt to restore rewind diffs past start of rewind - FFmpeg: Don't attempt to use YUV 4:2:0 for lossless videos (fixes mgba.io/i/2084) - GB Video: Fix memory leak when reseting SGB games diff --git a/src/arm/decoder-arm.c b/src/arm/decoder-arm.c index 895c82fcd..1a7052c83 100644 --- a/src/arm/decoder-arm.c +++ b/src/arm/decoder-arm.c @@ -24,7 +24,7 @@ #define ADDR_MODE_1_LSL \ ADDR_MODE_1_SHIFT(LSL) \ - if (!info->op3.shifterImm) { \ + if ((info->operandFormat & ARM_OPERAND_SHIFT_IMMEDIATE_3) && !info->op3.shifterImm) { \ info->operandFormat &= ~ARM_OPERAND_SHIFT_IMMEDIATE_3; \ info->op3.shifterOp = ARM_SHIFT_NONE; \ } From 71b616a9c2cf921037636b3181deef0c28f39ec6 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 9 Nov 2021 15:51:31 -0800 Subject: [PATCH 30/31] GBA: Fix maximum tile ID in caching for 256-color modes --- CHANGES | 1 + src/gba/renderers/cache-set.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index b1a976ebe..613ba9937 100644 --- a/CHANGES +++ b/CHANGES @@ -28,6 +28,7 @@ Other fixes: - FFmpeg: Don't attempt to use YUV 4:2:0 for lossless videos (fixes mgba.io/i/2084) - GB Video: Fix memory leak when reseting SGB games - GBA: Fix out of bounds ROM accesses on patched ROMs smaller than 32 MiB + - GBA: Fix maximum tile ID in caching for 256-color modes - Libretro: Fix crash when using Game Boy codes (fixes mgba.io/i/2281) - Qt: Fix corrupted savestate and fatal error text Misc: diff --git a/src/gba/renderers/cache-set.c b/src/gba/renderers/cache-set.c index bc84deadd..95093ae9a 100644 --- a/src/gba/renderers/cache-set.c +++ b/src/gba/renderers/cache-set.c @@ -25,10 +25,10 @@ void GBAVideoCacheInit(struct mCacheSet* cache) { sysconfig = mTileCacheSystemInfoSetPaletteBPP(sysconfig, 3); // 2^(2^3) = 256 entries sysconfig = mTileCacheSystemInfoSetPaletteCount(sysconfig, 0); // 1 palettes - sysconfig = mTileCacheSystemInfoSetMaxTiles(sysconfig, 2048); + sysconfig = mTileCacheSystemInfoSetMaxTiles(sysconfig, 1024); mTileCacheConfigureSystem(mTileCacheSetGetPointer(&cache->tiles, 1), sysconfig, 0, 0); mTileCacheConfigure(mTileCacheSetGetPointer(&cache->tiles, 1), config); - sysconfig = mTileCacheSystemInfoSetMaxTiles(sysconfig, 1024); + sysconfig = mTileCacheSystemInfoSetMaxTiles(sysconfig, 512); mTileCacheConfigureSystem(mTileCacheSetGetPointer(&cache->tiles, 3), sysconfig, 0x10000, 0x100); mTileCacheConfigure(mTileCacheSetGetPointer(&cache->tiles, 3), config); From 1b71a64c51d8d1e18460a8c33e6e80e942ea5981 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 9 Nov 2021 15:53:32 -0800 Subject: [PATCH 31/31] Qt: Fix sprite compositing when sprite tiles go out of bounds (fixes #2348) --- CHANGES | 1 + src/platform/qt/AssetView.cpp | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 613ba9937..d43eb4931 100644 --- a/CHANGES +++ b/CHANGES @@ -31,6 +31,7 @@ Other fixes: - GBA: Fix maximum tile ID in caching for 256-color modes - Libretro: Fix crash when using Game Boy codes (fixes mgba.io/i/2281) - Qt: Fix corrupted savestate and fatal error text + - Qt: Fix sprite compositing when sprite tiles go out of bounds (fixes mgba.io/i/2348) Misc: - Core: Suspend runloop when a core crashes - GBA I/O: Update KEYINPUT in internal I/O memory (fixes mgba.io/i/2235) diff --git a/src/platform/qt/AssetView.cpp b/src/platform/qt/AssetView.cpp index e686f91a9..66574b0df 100644 --- a/src/platform/qt/AssetView.cpp +++ b/src/platform/qt/AssetView.cpp @@ -131,6 +131,7 @@ QImage AssetView::compositeMap(int map, mMapCacheEntry* mapStatus) { QImage AssetView::compositeObj(const ObjInfo& objInfo) { mTileCache* tileCache = mTileCacheSetGetPointer(&m_cacheSet->tiles, objInfo.paletteSet); + unsigned maxTiles = mTileCacheSystemInfoGetMaxTiles(tileCache->sysConfig); const color_t* rawPalette = mTileCacheGetPalette(tileCache, objInfo.paletteId); unsigned colors = 1 << objInfo.bits; QVector palette; @@ -142,10 +143,11 @@ QImage AssetView::compositeObj(const ObjInfo& objInfo) { QImage image = QImage(QSize(objInfo.width * 8, objInfo.height * 8), QImage::Format_Indexed8); image.setColorTable(palette); + image.fill(0); uchar* bits = image.bits(); unsigned t = objInfo.tile; - for (unsigned y = 0; y < objInfo.height; ++y) { - for (unsigned x = 0; x < objInfo.width; ++x, ++t) { + for (unsigned y = 0; y < objInfo.height && t < maxTiles; ++y) { + for (unsigned x = 0; x < objInfo.width && t < maxTiles; ++x, ++t) { compositeTile(static_cast(mTileCacheGetVRAM(tileCache, t)), bits, objInfo.width * 8, x * 8, y * 8, objInfo.bits); } t += objInfo.stride - objInfo.width;