From 415298ebcd0d702581d9b7d4244c4a69cc0dd54f Mon Sep 17 00:00:00 2001 From: Jeffrey Pfau Date: Thu, 16 Jun 2016 00:19:20 -0700 Subject: [PATCH] GBA BIOS: Fix ArcTan2 accuracy and boundary conditions --- CHANGES | 1 + src/gba/bios.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 471468cdd..5f42c8cc3 100644 --- a/CHANGES +++ b/CHANGES @@ -27,6 +27,7 @@ Bugfixes: - ARM7: Fix flags on SBC/RSC - Util: Fix realloc semantics in utf16to8 - ARM7: Fix setting spsr privilege bits when spsr is empty + - GBA BIOS: Fix ArcTan2 accuracy and boundary conditions Misc: - GBA: Slightly optimize GBAProcessEvents - Qt: Add preset for DualShock 4 diff --git a/src/gba/bios.c b/src/gba/bios.c index bcfb6b7ce..c81c50596 100644 --- a/src/gba/bios.c +++ b/src/gba/bios.c @@ -304,7 +304,7 @@ void GBASwi16(struct ARMCore* cpu, int immediate) { cpu->gprs[0] = sqrt((uint32_t) cpu->gprs[0]); break; case 0xA: - cpu->gprs[0] = atan2f(cpu->gprs[1] / 16384.f, cpu->gprs[0] / 16384.f) / (2 * M_PI) * 0x10000; + cpu->gprs[0] = (uint16_t) (atan2f(cpu->gprs[1] / 16384.f, cpu->gprs[0] / 16384.f) / (2 * M_PI) * 0x10001); break; case 0xB: case 0xC: