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
|