From f4abdd6c4c475c5249754d184abc9c42d63c24b0 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Thu, 20 Apr 2017 17:59:02 -0700 Subject: [PATCH] GBA BIOS: Fix ArcTan2 sign in HLE BIOS (fixes #689) --- CHANGES | 1 + src/gba/bios.c | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index e86548eeb..eb9428338 100644 --- a/CHANGES +++ b/CHANGES @@ -39,6 +39,7 @@ Bugfixes: - FFmpeg: Fix overflow and general issues with audio encoding - Qt: Fix crash when changing audio settings after a game is closed - GBA BIOS: Fix ArcTan sign in HLE BIOS + - GBA BIOS: Fix ArcTan2 sign in HLE BIOS Misc: - SDL: Remove scancode key input - GBA Video: Clean up unused timers diff --git a/src/gba/bios.c b/src/gba/bios.c index 2bc853a3c..b1e9574e3 100644 --- a/src/gba/bios.c +++ b/src/gba/bios.c @@ -283,7 +283,7 @@ static int16_t _ArcTan(int32_t i) { return (i * b) >> 16; } -static int16_t _ArcTan2(int16_t x, int16_t y) { +static int16_t _ArcTan2(int32_t x, int32_t y) { if (!y) { if (x >= 0) { return 0; @@ -299,7 +299,7 @@ static int16_t _ArcTan2(int16_t x, int16_t y) { if (y >= 0) { if (x >= 0) { if (x >= y) { - return _ArcTan((y << 14)/ x); + return _ArcTan((y << 14) / x); } } else if (-x >= y) { return _ArcTan((y << 14) / x) + 0x8000; @@ -359,7 +359,7 @@ void GBASwi16(struct ARMCore* cpu, int immediate) { cpu->gprs[0] = _ArcTan(cpu->gprs[0]); break; case 0xA: - cpu->gprs[0] = (uint16_t) _ArcTan2(cpu->gprs[0], cpu->gprs[1]); + cpu->gprs[0] = _ArcTan2(cpu->gprs[0], cpu->gprs[1]); break; case 0xB: case 0xC: