From: Pokemonhacker <pok...@us...> - 2004-11-18 01:18:45
|
Update of /cvsroot/vba/VisualBoyAdvance/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19071 Modified Files: bios.cpp Log Message: - fix BIOS ArcTan and ArcTan2 emulation (several bugs) Index: bios.cpp =================================================================== RCS file: /cvsroot/vba/VisualBoyAdvance/src/bios.cpp,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** bios.cpp 9 Nov 2004 16:07:51 -0000 1.14 --- bios.cpp 18 Nov 2004 01:18:36 -0000 1.15 *************** *** 71,75 **** #endif ! s32 a = -((s32)(reg[0].I * reg[0].I)) >> 14; s32 b = ((0xA9 * a) >> 14) + 0x390; b = ((b * a) >> 14) + 0x91C; --- 71,75 ---- #endif ! s32 a = -(((s32)(reg[0].I*reg[0].I)) >> 14); s32 b = ((0xA9 * a) >> 14) + 0x390; b = ((b * a) >> 14) + 0x91C; *************** *** 79,83 **** b = ((b * a) >> 14) + 0x3651; b = ((b * a) >> 14) + 0xA2F9; ! reg[0].I = (reg[0].I * b) >> 16; #ifdef DEV_VERSION --- 79,84 ---- b = ((b * a) >> 14) + 0x3651; b = ((b * a) >> 14) + 0xA2F9; ! a = ((s32)reg[0].I * b) >> 16; ! reg[0].I = a; #ifdef DEV_VERSION *************** *** 102,113 **** s16 x = reg[0].I; s16 y = reg[1].I; ! if (y == 0) { ! reg[0].I = 0x8000 & x; ! reg[3].I = 0x170; } else { if (x == 0) { ! reg[0].I = (0x8000 & y) + 0x4000; ! reg[3].I = 0x170; } else { if (abs(x) > abs(y)) { --- 103,112 ---- s16 x = reg[0].I; s16 y = reg[1].I; ! s16 res = 0; if (y == 0) { ! res = 0x8000 & x; } else { if (x == 0) { ! res = (0x8000 & y) + 0x4000; } else { if (abs(x) > abs(y)) { *************** *** 117,133 **** BIOS_ArcTan(); if (x < 0) ! reg[0].I = 0x8000 + reg[0].I; else ! reg[0].I = ((y & 0x8000) << 1 ) + reg[0].I; ! reg[3].I = 0x170; } else { reg[0].I = x << 14; BIOS_Div(); BIOS_ArcTan(); ! reg[0].I = (0x4000 + (y & 0x8000)) - reg[0].I; ! reg[3].I = 0x170; } } } #ifdef DEV_VERSION --- 116,131 ---- BIOS_ArcTan(); if (x < 0) ! res = 0x8000 + reg[0].I; else ! res = ((y & 0x8000) << 1 ) + reg[0].I; } else { reg[0].I = x << 14; BIOS_Div(); BIOS_ArcTan(); ! res = (0x4000 + (y & 0x8000)) - reg[0].I; } } } + reg[0].I = ((u32)res) & 0xffff; #ifdef DEV_VERSION |