From c9d411a762ec6ef13c3108d0479408f8326df442 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Thu, 20 Apr 2017 17:53:01 -0700 Subject: [PATCH] GBA BIOS: Fix ArcTan sign in HLE BIOS --- CHANGES | 1 + src/gba/bios.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 4b31d0426..e86548eeb 100644 --- a/CHANGES +++ b/CHANGES @@ -38,6 +38,7 @@ Bugfixes: - GB: Fix flickering when screen is strobed quickly - 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 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 9d8b6ccdc..2bc853a3c 100644 --- a/src/gba/bios.c +++ b/src/gba/bios.c @@ -271,7 +271,7 @@ static void _Div(struct GBA* gba, int32_t num, int32_t denom) { } } -static int16_t _ArcTan(int16_t i) { +static int16_t _ArcTan(int32_t i) { int32_t a = -((i * i) >> 14); int32_t b = ((0xA9 * a) >> 14) + 0x390; b = ((b * a) >> 14) + 0x91C; @@ -356,7 +356,7 @@ void GBASwi16(struct ARMCore* cpu, int immediate) { cpu->gprs[0] = sqrt((uint32_t) cpu->gprs[0]); break; case 0x9: - cpu->gprs[0] = (uint16_t) _ArcTan(cpu->gprs[0]); + cpu->gprs[0] = _ArcTan(cpu->gprs[0]); break; case 0xA: cpu->gprs[0] = (uint16_t) _ArcTan2(cpu->gprs[0], cpu->gprs[1]);