Last active
March 25, 2025 07:56
-
-
Save SunboX/4b698ab12de8394e969ba7f04dfae261 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
typedef unsigned char undefined; | |
typedef unsigned char byte; | |
typedef unsigned int uint; | |
typedef unsigned char undefined1; | |
typedef unsigned short undefined2; | |
typedef unsigned int undefined4; | |
typedef unsigned long long undefined8; | |
int strcmp_custom(byte *str1,byte *str2) | |
{ | |
uint uintChar1; | |
bool compareResult; | |
byte currentChar1; | |
do { | |
uintChar1 = (uint)*str1; | |
currentChar1 = *str2; | |
compareResult = uintChar1 == 1; | |
if (uintChar1 != 0) { | |
compareResult = uintChar1 == currentChar1; | |
} | |
str1 = str1 + 1; | |
str2 = str2 + 1; | |
} while (compareResult); | |
return uintChar1 - currentChar1; | |
} | |
byte * memchr_custom(uint *buffer,uint searchByte,uint length) | |
{ | |
uint *bufferPtr; | |
byte *resultPtr; | |
uint temp1; | |
uint temp2; | |
uint temp3; | |
uint temp4; | |
bool cond1; | |
bool cond2; | |
bool cond3; | |
bool cond4; | |
char charCheck1; | |
char charCheck2; | |
char charCheck3; | |
char charCheck4; | |
byte *currentPtr; | |
searchByte = searchByte & 0xff; | |
if ((int)length < 0x10) { | |
joined_r0x08000250: | |
do { | |
if (length == 0) { | |
return (byte *)0x0; | |
} | |
bufferPtr = (uint *)((int)buffer + 1); | |
temp1 = *buffer; | |
length = length - 1; | |
buffer = bufferPtr; | |
} while ((byte)temp1 != searchByte); | |
} | |
else { | |
temp1 = (uint)buffer & 7; | |
while( true ) { | |
if (temp1 == 0) { | |
temp1 = searchByte | searchByte << 8; | |
temp1 = temp1 | temp1 << 0x10; | |
temp2 = length & 0xfffffff8; | |
do { | |
bufferPtr = buffer + 2; | |
temp2 = temp2 - 8; | |
temp3 = *buffer ^ temp1; | |
temp4 = buffer[1] ^ temp1; | |
charCheck1 = -((char)temp3 == '\0'); | |
charCheck2 = -((char)(temp3 >> 8) == '\0'); | |
charCheck3 = -((char)(temp3 >> 0x10) == '\0'); | |
charCheck4 = -((char)(temp3 >> 0x18) == '\0'); | |
temp3 = CONCAT13(charCheck4,CONCAT12(charCheck3,CONCAT11(charCheck2,charCheck1))); | |
cond1 = (char)temp4 != '\0'; | |
cond2 = (char)(temp4 >> 8) != '\0'; | |
cond3 = (char)(temp4 >> 0x10) != '\0'; | |
cond4 = (char)(temp4 >> 0x18) != '\0'; | |
temp4 = CONCAT13(cond4 * charCheck4 - !cond4, | |
CONCAT12(cond3 * charCheck3 - !cond3, | |
CONCAT11(cond2 * charCheck2 - !cond2,cond1 * charCheck1 - !cond1 | |
))); | |
if (temp4 != 0) { | |
if (temp3 == 0) { | |
resultPtr = (byte *)((int)buffer + 5); | |
temp3 = temp4; | |
} | |
else { | |
resultPtr = (byte *)((int)buffer + 1); | |
} | |
if ((temp3 & 1) == 0) { | |
cond1 = (temp3 & 0x100) == 0; | |
currentPtr = resultPtr + 1; | |
if (cond1) { | |
currentPtr = resultPtr + 2; | |
} | |
resultPtr = currentPtr; | |
if (cond1 && (temp3 & 0x18000) == 0) { | |
resultPtr = resultPtr + 1; | |
} | |
} | |
return resultPtr + -1; | |
} | |
buffer = bufferPtr; | |
} while (temp2 != 0); | |
length = length & 7; | |
goto joined_r0x08000250; | |
} | |
bufferPtr = (uint *)((int)buffer + 1); | |
length = length - 1; | |
if ((byte)*buffer == searchByte) break; | |
temp1 = (uint)bufferPtr & 7; | |
buffer = bufferPtr; | |
if (length == 0) { | |
return (byte *)0x0; | |
} | |
} | |
} | |
return (byte *)((int)bufferPtr + -1); | |
} | |
char * strlen_custom(char *str) | |
{ | |
char *ptr; | |
char *currentPos; | |
char currentChar; | |
currentPos = str; | |
do { | |
ptr = currentPos + 1; | |
currentChar = *currentPos; | |
currentPos = ptr; | |
} while (currentChar != '\0'); | |
return ptr + (-1 - (int)str); | |
} | |
ulonglong fp_add(uint aSignificand,uint aExponent,uint bSignificand,uint bExponent) | |
{ | |
int iVar1; | |
byte bVar2; | |
uint uVar3; | |
uint uVar4; | |
uint uVar5; | |
uint uVar6; | |
uint uVar7; | |
int iVar8; | |
uint uVar9; | |
uint uVar10; | |
uint uVar11; | |
uint uVar12; | |
bool bVar13; | |
bool bVar14; | |
bool bVar15; | |
uVar6 = bExponent ^ 0x80000000; | |
uVar9 = aExponent << 1; | |
bExponent = bExponent << 1; | |
bVar13 = ((aExponent ^ uVar6) & 0x7fffffff) == 0; | |
bVar14 = bVar13 && aSignificand == bSignificand; | |
if (!bVar13 || aSignificand != bSignificand) { | |
bVar14 = uVar9 == 0 && aSignificand == 0; | |
} | |
if (!bVar14) { | |
bVar14 = bExponent == 0 && bSignificand == 0; | |
} | |
iVar8 = (int)uVar9 >> 0x15; | |
if (!bVar14) { | |
bVar14 = iVar8 == -1; | |
} | |
iVar1 = (int)bExponent >> 0x15; | |
if (!bVar14) { | |
bVar14 = iVar1 == -1; | |
} | |
if (bVar14) { | |
if (iVar8 == -1 || iVar1 == -1) { | |
uVar9 = uVar6; | |
uVar11 = bSignificand; | |
if (iVar8 == -1) { | |
uVar9 = aExponent; | |
uVar11 = aSignificand; | |
} | |
if (iVar8 != -1 || iVar1 != -1) { | |
bSignificand = uVar11; | |
uVar6 = uVar9; | |
} | |
bVar14 = (uVar9 & 0xfffff) == 0; | |
bVar13 = uVar11 == 0 && bVar14; | |
if (uVar11 == 0 && bVar14) { | |
bVar13 = bSignificand == 0 && (uVar6 & 0xfffff) == 0; | |
} | |
if (bVar13) { | |
bVar13 = uVar9 == uVar6; | |
} | |
if (!bVar13) { | |
uVar9 = uVar9 | 0x80000; | |
} | |
return CONCAT44(uVar9,uVar11); | |
} | |
if (((aExponent ^ uVar6) & 0x7fffffff) != 0 || aSignificand != bSignificand) { | |
if (uVar9 == 0 && aSignificand == 0) { | |
aSignificand = bSignificand; | |
aExponent = uVar6; | |
} | |
return CONCAT44(aExponent,aSignificand); | |
} | |
if (aExponent != uVar6) { | |
return 0; | |
} | |
if (uVar9 >> 0x15 == 0) { | |
bVar14 = (aSignificand & 0x80000000) != 0; | |
uVar6 = aExponent * 2 + (uint)bVar14; | |
if (CARRY4(aExponent,aExponent) || CARRY4(aExponent * 2,(uint)bVar14)) { | |
uVar6 = uVar6 | 0x80000000; | |
} | |
return CONCAT44(uVar6,aSignificand << 1); | |
} | |
if (uVar9 < 0xffc00000) { | |
return CONCAT44(aExponent + 0x100000,aSignificand); | |
} | |
aExponent = aExponent & 0x80000000; | |
LAB_080004ec: | |
return (ulonglong)(aExponent | 0x7ff00000) << 0x20; | |
} | |
uVar9 = uVar9 >> 0x15; | |
bExponent = bExponent >> 0x15; | |
uVar11 = bExponent - uVar9; | |
bVar14 = uVar11 != 0; | |
if (bExponent < uVar9) { | |
uVar11 = -uVar11; | |
} | |
uVar10 = aSignificand; | |
uVar7 = aExponent; | |
if (bVar14 && uVar9 <= bExponent) { | |
uVar9 = uVar9 + uVar11; | |
uVar10 = bSignificand; | |
uVar7 = uVar6; | |
bSignificand = aSignificand; | |
uVar6 = aExponent; | |
} | |
if (0x36 < uVar11) { | |
return CONCAT44(uVar7,uVar10); | |
} | |
uVar4 = uVar7 & 0xfffff | 0x100000; | |
if ((uVar7 & 0x80000000) != 0) { | |
bVar14 = uVar10 != 0; | |
uVar10 = -uVar10; | |
uVar4 = -uVar4 - (uint)bVar14; | |
} | |
uVar7 = uVar6 & 0xfffff | 0x100000; | |
if ((uVar6 & 0x80000000) != 0) { | |
bVar14 = bSignificand != 0; | |
bSignificand = -bSignificand; | |
uVar7 = -uVar7 - (uint)bVar14; | |
} | |
if (uVar9 == uVar11) { | |
uVar7 = uVar7 ^ 0x100000; | |
if (uVar9 == 0) { | |
uVar4 = uVar4 ^ 0x100000; | |
uVar9 = 1; | |
} | |
else { | |
uVar11 = uVar11 - 1; | |
} | |
} | |
uVar6 = -uVar11 + 0x20; | |
if ((int)uVar11 < 0x21) { | |
uVar12 = bSignificand << (uVar6 & 0xff); | |
bSignificand = bSignificand >> (uVar11 & 0xff); | |
uVar3 = uVar10 + bSignificand; | |
uVar5 = uVar7 << (uVar6 & 0xff); | |
uVar6 = uVar3 + uVar5; | |
uVar4 = uVar4 + CARRY4(uVar10,bSignificand) + ((int)uVar7 >> (uVar11 & 0xff)) + | |
(uint)CARRY4(uVar3,uVar5); | |
} | |
else { | |
uVar12 = uVar7 << (-uVar11 + 0x40 & 0xff); | |
if (bSignificand != 0) { | |
uVar12 = uVar12 | 2; | |
} | |
uVar7 = (int)uVar7 >> (uVar11 - 0x20 & 0xff); | |
uVar6 = uVar10 + uVar7; | |
uVar4 = uVar4 + ((int)uVar7 >> 0x1f) + (uint)CARRY4(uVar10,uVar7); | |
} | |
aExponent = uVar4 & 0x80000000; | |
uVar11 = uVar4; | |
if ((int)uVar4 < 0) { | |
bVar14 = uVar12 == 0; | |
uVar12 = -uVar12; | |
uVar11 = -uVar6; | |
uVar6 = -(uint)!bVar14 - uVar6; | |
uVar11 = -(uint)(bVar14 <= uVar11) - uVar4; | |
} | |
if (0xfffff < uVar11) { | |
uVar10 = uVar9 - 1; | |
if (0x1fffff < uVar11) { | |
uVar10 = uVar11 & 1; | |
uVar11 = uVar11 >> 1; | |
bVar2 = (byte)uVar6; | |
uVar6 = (uint)(uVar10 != 0) << 0x1f | uVar6 >> 1; | |
uVar12 = (uint)(bVar2 & 1) << 0x1f | uVar12 >> 1; | |
uVar10 = uVar9; | |
if (0xffbfffff < uVar9 * 0x200000) goto LAB_080004ec; | |
} | |
LAB_080003b8: | |
bVar14 = 0x7fffffff < uVar12; | |
if (uVar12 == 0x80000000) { | |
bVar14 = (uVar6 & 1) != 0; | |
} | |
return CONCAT44(uVar11 + uVar10 * 0x100000 + (uint)CARRY4(uVar6,(uint)bVar14) | aExponent, | |
uVar6 + bVar14); | |
} | |
bVar13 = (uVar12 & 0x80000000) != 0; | |
uVar12 = uVar12 << 1; | |
uVar10 = uVar6 * 2; | |
bVar14 = CARRY4(uVar6,uVar6); | |
uVar6 = uVar6 * 2 + (uint)bVar13; | |
uVar11 = uVar11 * 2 + (uint)(bVar14 || CARRY4(uVar10,(uint)bVar13)); | |
uVar10 = uVar9 - 2; | |
if (uVar9 - 1 != 0 && 0xfffff < uVar11) goto LAB_080003b8; | |
uVar7 = uVar6; | |
uVar9 = uVar11; | |
if (uVar11 == 0) { | |
uVar7 = 0; | |
uVar9 = uVar6; | |
} | |
iVar8 = LZCOUNT(uVar9); | |
if (uVar11 == 0) { | |
iVar8 = iVar8 + 0x20; | |
} | |
uVar11 = iVar8 - 0xb; | |
bVar15 = SBORROW4(uVar11,0x20); | |
uVar6 = iVar8 - 0x2b; | |
bVar14 = (int)uVar6 < 0; | |
bVar13 = uVar6 == 0; | |
if ((int)uVar11 < 0x20) { | |
bVar15 = SCARRY4(uVar6,0xc); | |
iVar8 = iVar8 + -0x1f; | |
bVar14 = iVar8 < 0; | |
bVar13 = iVar8 == 0; | |
uVar6 = uVar11; | |
if (!bVar13 && bVar14 == bVar15) { | |
uVar7 = uVar9 << (uVar11 & 0xff); | |
uVar9 = uVar9 >> (0xcU - iVar8 & 0xff); | |
goto LAB_08000430; | |
} | |
} | |
if (bVar13 || bVar14 != bVar15) { | |
uVar12 = 0x20 - uVar6; | |
} | |
uVar9 = uVar9 << (uVar6 & 0xff); | |
if (bVar13 || bVar14 != bVar15) { | |
uVar9 = uVar9 | uVar7 >> (uVar12 & 0xff); | |
uVar7 = uVar7 << (uVar6 & 0xff); | |
} | |
LAB_08000430: | |
if ((int)uVar11 <= (int)uVar10) { | |
return CONCAT44(uVar9 + (uVar10 - uVar11) * 0x100000 | aExponent,uVar7); | |
} | |
uVar6 = ~(uVar10 - uVar11); | |
if ((int)uVar6 < 0x1f) { | |
iVar8 = uVar6 - 0x13; | |
if (iVar8 != 0 && iVar8 < 0 == SCARRY4(uVar6 - 0x1f,0xc)) { | |
return CONCAT44(uVar4,uVar7 >> (0x20 - (0xcU - iVar8) & 0xff) | uVar9 << (0xcU - iVar8 & 0xff) | |
) & 0x80000000ffffffff; | |
} | |
uVar6 = uVar6 + 1; | |
return CONCAT44(aExponent | uVar9 >> (uVar6 & 0xff), | |
uVar7 >> (uVar6 & 0xff) | uVar9 << (0x20 - uVar6 & 0xff)); | |
} | |
return CONCAT44(uVar4,uVar9 >> (uVar6 - 0x1f & 0xff)) & 0x80000000ffffffff; | |
} | |
ulonglong fp_multiply(uint aSignificand,uint aExponent,uint bSignificand,uint bExponent) | |
{ | |
int iVar1; | |
byte bVar2; | |
uint uVar3; | |
uint uVar4; | |
uint uVar5; | |
int iVar6; | |
uint uVar7; | |
uint uVar8; | |
uint uVar9; | |
uint uVar10; | |
uint uVar11; | |
uint uVar12; | |
bool bVar13; | |
bool bVar14; | |
bool bVar15; | |
uVar7 = aExponent << 1; | |
uVar9 = bExponent << 1; | |
bVar13 = ((aExponent ^ bExponent) & 0x7fffffff) == 0; | |
bVar14 = bVar13 && aSignificand == bSignificand; | |
if (!bVar13 || aSignificand != bSignificand) { | |
bVar14 = uVar7 == 0 && aSignificand == 0; | |
} | |
if (!bVar14) { | |
bVar14 = uVar9 == 0 && bSignificand == 0; | |
} | |
iVar6 = (int)uVar7 >> 0x15; | |
if (!bVar14) { | |
bVar14 = iVar6 == -1; | |
} | |
iVar1 = (int)uVar9 >> 0x15; | |
if (!bVar14) { | |
bVar14 = iVar1 == -1; | |
} | |
if (bVar14) { | |
if (iVar6 == -1 || iVar1 == -1) { | |
uVar9 = bExponent; | |
uVar7 = bSignificand; | |
if (iVar6 == -1) { | |
uVar9 = aExponent; | |
uVar7 = aSignificand; | |
} | |
if (iVar6 != -1 || iVar1 != -1) { | |
bSignificand = uVar7; | |
bExponent = uVar9; | |
} | |
bVar14 = (uVar9 & 0xfffff) == 0; | |
bVar13 = uVar7 == 0 && bVar14; | |
if (uVar7 == 0 && bVar14) { | |
bVar13 = bSignificand == 0 && (bExponent & 0xfffff) == 0; | |
} | |
if (bVar13) { | |
bVar13 = uVar9 == bExponent; | |
} | |
if (!bVar13) { | |
uVar9 = uVar9 | 0x80000; | |
} | |
return CONCAT44(uVar9,uVar7); | |
} | |
if (((aExponent ^ bExponent) & 0x7fffffff) != 0 || aSignificand != bSignificand) { | |
if (uVar7 == 0 && aSignificand == 0) { | |
aSignificand = bSignificand; | |
aExponent = bExponent; | |
} | |
return CONCAT44(aExponent,aSignificand); | |
} | |
if (aExponent != bExponent) { | |
return 0; | |
} | |
if (uVar7 >> 0x15 == 0) { | |
bVar14 = (aSignificand & 0x80000000) != 0; | |
uVar9 = aExponent * 2 + (uint)bVar14; | |
if (CARRY4(aExponent,aExponent) || CARRY4(aExponent * 2,(uint)bVar14)) { | |
uVar9 = uVar9 | 0x80000000; | |
} | |
return CONCAT44(uVar9,aSignificand << 1); | |
} | |
if (uVar7 < 0xffc00000) { | |
return CONCAT44(aExponent + 0x100000,aSignificand); | |
} | |
aExponent = aExponent & 0x80000000; | |
LAB_080004ec: | |
return (ulonglong)(aExponent | 0x7ff00000) << 0x20; | |
} | |
uVar7 = uVar7 >> 0x15; | |
uVar9 = uVar9 >> 0x15; | |
uVar10 = uVar9 - uVar7; | |
bVar14 = uVar10 != 0; | |
if (uVar9 < uVar7) { | |
uVar10 = -uVar10; | |
} | |
uVar8 = aSignificand; | |
uVar5 = aExponent; | |
if (bVar14 && uVar7 <= uVar9) { | |
uVar7 = uVar7 + uVar10; | |
uVar8 = bSignificand; | |
uVar5 = bExponent; | |
bSignificand = aSignificand; | |
bExponent = aExponent; | |
} | |
if (0x36 < uVar10) { | |
return CONCAT44(uVar5,uVar8); | |
} | |
uVar9 = uVar5 & 0xfffff | 0x100000; | |
if ((uVar5 & 0x80000000) != 0) { | |
bVar14 = uVar8 != 0; | |
uVar8 = -uVar8; | |
uVar9 = -uVar9 - (uint)bVar14; | |
} | |
uVar5 = bExponent & 0xfffff | 0x100000; | |
if ((bExponent & 0x80000000) != 0) { | |
bVar14 = bSignificand != 0; | |
bSignificand = -bSignificand; | |
uVar5 = -uVar5 - (uint)bVar14; | |
} | |
if (uVar7 == uVar10) { | |
uVar5 = uVar5 ^ 0x100000; | |
if (uVar7 == 0) { | |
uVar9 = uVar9 ^ 0x100000; | |
uVar7 = 1; | |
} | |
else { | |
uVar10 = uVar10 - 1; | |
} | |
} | |
uVar12 = -uVar10 + 0x20; | |
if ((int)uVar10 < 0x21) { | |
uVar11 = bSignificand << (uVar12 & 0xff); | |
bSignificand = bSignificand >> (uVar10 & 0xff); | |
uVar3 = uVar8 + bSignificand; | |
uVar4 = uVar5 << (uVar12 & 0xff); | |
uVar12 = uVar3 + uVar4; | |
uVar9 = uVar9 + CARRY4(uVar8,bSignificand) + ((int)uVar5 >> (uVar10 & 0xff)) + | |
(uint)CARRY4(uVar3,uVar4); | |
} | |
else { | |
uVar11 = uVar5 << (-uVar10 + 0x40 & 0xff); | |
if (bSignificand != 0) { | |
uVar11 = uVar11 | 2; | |
} | |
uVar5 = (int)uVar5 >> (uVar10 - 0x20 & 0xff); | |
uVar12 = uVar8 + uVar5; | |
uVar9 = uVar9 + ((int)uVar5 >> 0x1f) + (uint)CARRY4(uVar8,uVar5); | |
} | |
aExponent = uVar9 & 0x80000000; | |
uVar10 = uVar9; | |
if ((int)uVar9 < 0) { | |
bVar14 = uVar11 == 0; | |
uVar11 = -uVar11; | |
uVar10 = -uVar12; | |
uVar12 = -(uint)!bVar14 - uVar12; | |
uVar10 = -(uint)(bVar14 <= uVar10) - uVar9; | |
} | |
if (0xfffff < uVar10) { | |
uVar8 = uVar7 - 1; | |
if (0x1fffff < uVar10) { | |
uVar9 = uVar10 & 1; | |
uVar10 = uVar10 >> 1; | |
bVar2 = (byte)uVar12; | |
uVar12 = (uint)(uVar9 != 0) << 0x1f | uVar12 >> 1; | |
uVar11 = (uint)(bVar2 & 1) << 0x1f | uVar11 >> 1; | |
uVar8 = uVar7; | |
if (0xffbfffff < uVar7 * 0x200000) goto LAB_080004ec; | |
} | |
LAB_080003b8: | |
bVar14 = 0x7fffffff < uVar11; | |
if (uVar11 == 0x80000000) { | |
bVar14 = (uVar12 & 1) != 0; | |
} | |
return CONCAT44(uVar10 + uVar8 * 0x100000 + (uint)CARRY4(uVar12,(uint)bVar14) | aExponent, | |
uVar12 + bVar14); | |
} | |
bVar13 = (uVar11 & 0x80000000) != 0; | |
uVar11 = uVar11 << 1; | |
uVar8 = uVar12 * 2; | |
bVar14 = CARRY4(uVar12,uVar12); | |
uVar12 = uVar12 * 2 + (uint)bVar13; | |
uVar10 = uVar10 * 2 + (uint)(bVar14 || CARRY4(uVar8,(uint)bVar13)); | |
uVar8 = uVar7 - 2; | |
if (uVar7 - 1 != 0 && 0xfffff < uVar10) goto LAB_080003b8; | |
uVar5 = uVar12; | |
uVar7 = uVar10; | |
if (uVar10 == 0) { | |
uVar5 = 0; | |
uVar7 = uVar12; | |
} | |
iVar6 = LZCOUNT(uVar7); | |
if (uVar10 == 0) { | |
iVar6 = iVar6 + 0x20; | |
} | |
uVar12 = iVar6 - 0xb; | |
bVar15 = SBORROW4(uVar12,0x20); | |
uVar10 = iVar6 - 0x2b; | |
bVar14 = (int)uVar10 < 0; | |
bVar13 = uVar10 == 0; | |
if ((int)uVar12 < 0x20) { | |
bVar15 = SCARRY4(uVar10,0xc); | |
iVar6 = iVar6 + -0x1f; | |
bVar14 = iVar6 < 0; | |
bVar13 = iVar6 == 0; | |
uVar10 = uVar12; | |
if (!bVar13 && bVar14 == bVar15) { | |
uVar5 = uVar7 << (uVar12 & 0xff); | |
uVar7 = uVar7 >> (0xcU - iVar6 & 0xff); | |
goto LAB_08000430; | |
} | |
} | |
if (bVar13 || bVar14 != bVar15) { | |
uVar11 = 0x20 - uVar10; | |
} | |
uVar7 = uVar7 << (uVar10 & 0xff); | |
if (bVar13 || bVar14 != bVar15) { | |
uVar7 = uVar7 | uVar5 >> (uVar11 & 0xff); | |
uVar5 = uVar5 << (uVar10 & 0xff); | |
} | |
LAB_08000430: | |
if ((int)uVar12 <= (int)uVar8) { | |
return CONCAT44(uVar7 + (uVar8 - uVar12) * 0x100000 | aExponent,uVar5); | |
} | |
uVar10 = ~(uVar8 - uVar12); | |
if ((int)uVar10 < 0x1f) { | |
iVar6 = uVar10 - 0x13; | |
if (iVar6 != 0 && iVar6 < 0 == SCARRY4(uVar10 - 0x1f,0xc)) { | |
return CONCAT44(uVar9,uVar5 >> (0x20 - (0xcU - iVar6) & 0xff) | uVar7 << (0xcU - iVar6 & 0xff) | |
) & 0x80000000ffffffff; | |
} | |
uVar10 = uVar10 + 1; | |
return CONCAT44(aExponent | uVar7 >> (uVar10 & 0xff), | |
uVar5 >> (uVar10 & 0xff) | uVar7 << (0x20 - uVar10 & 0xff)); | |
} | |
return CONCAT44(uVar9,uVar7 >> (uVar10 - 0x1f & 0xff)) & 0x80000000ffffffff; | |
} | |
ulonglong FUN_08000524(uint param_1) | |
{ | |
uint uVar1; | |
uint uVar2; | |
int iVar3; | |
uint uVar4; | |
uint in_r12; | |
bool bVar5; | |
bool bVar6; | |
bool bVar7; | |
if (param_1 == 0) { | |
return 0; | |
} | |
uVar1 = 0; | |
iVar3 = LZCOUNT(param_1); | |
uVar4 = iVar3 + 0x15; | |
bVar7 = SBORROW4(uVar4,0x20); | |
uVar2 = iVar3 - 0xb; | |
bVar5 = (int)uVar2 < 0; | |
bVar6 = uVar2 == 0; | |
if (uVar4 < 0x20) { | |
bVar7 = SCARRY4(uVar2,0xc); | |
bVar5 = false; | |
bVar6 = iVar3 + 1 == 0; | |
uVar2 = uVar4; | |
if (!bVar6 && !bVar7) { | |
uVar1 = param_1 << uVar4; | |
param_1 = param_1 >> (0xcU - (iVar3 + 1) & 0xff); | |
goto LAB_08000430; | |
} | |
} | |
if (bVar6 || bVar5 != bVar7) { | |
in_r12 = 0x20 - uVar2; | |
} | |
param_1 = param_1 << (uVar2 & 0xff); | |
if (bVar6 || bVar5 != bVar7) { | |
param_1 = param_1 | 0U >> (in_r12 & 0xff); | |
uVar1 = 0 << (uVar2 & 0xff); | |
} | |
LAB_08000430: | |
if (uVar4 < 0x433) { | |
return CONCAT44(param_1 + (0x432 - uVar4) * 0x100000,uVar1); | |
} | |
uVar2 = ~(0x432 - uVar4); | |
if (0x1e < (int)uVar2) { | |
return (ulonglong)(param_1 >> (uVar2 - 0x1f & 0xff)); | |
} | |
iVar3 = uVar2 - 0x13; | |
if (iVar3 == 0 || iVar3 < 0 != SCARRY4(uVar2 - 0x1f,0xc)) { | |
uVar2 = uVar2 + 1; | |
return CONCAT44(param_1 >> (uVar2 & 0xff), | |
uVar1 >> (uVar2 & 0xff) | param_1 << (0x20 - uVar2 & 0xff)); | |
} | |
return (ulonglong)(uVar1 >> (0x20 - (0xcU - iVar3) & 0xff) | param_1 << (0xcU - iVar3 & 0xff)); | |
} | |
ulonglong FUN_08000544(uint param_1) | |
{ | |
uint uVar1; | |
uint uVar2; | |
uint uVar3; | |
int iVar4; | |
uint uVar5; | |
uint uVar6; | |
uint in_r12; | |
bool bVar7; | |
bool bVar8; | |
bool bVar9; | |
if (param_1 == 0) { | |
return 0; | |
} | |
uVar6 = param_1 & 0x80000000; | |
uVar2 = param_1; | |
if ((int)uVar6 < 0) { | |
uVar2 = -param_1; | |
} | |
uVar1 = 0; | |
iVar4 = LZCOUNT(uVar2); | |
uVar5 = iVar4 + 0x15; | |
bVar9 = SBORROW4(uVar5,0x20); | |
uVar3 = iVar4 - 0xb; | |
bVar7 = (int)uVar3 < 0; | |
bVar8 = uVar3 == 0; | |
if (uVar5 < 0x20) { | |
bVar9 = SCARRY4(uVar3,0xc); | |
bVar7 = false; | |
bVar8 = iVar4 + 1 == 0; | |
uVar3 = uVar5; | |
if (!bVar8 && !bVar9) { | |
uVar1 = uVar2 << uVar5; | |
uVar2 = uVar2 >> (0xcU - (iVar4 + 1) & 0xff); | |
goto LAB_08000430; | |
} | |
} | |
if (bVar8 || bVar7 != bVar9) { | |
in_r12 = 0x20 - uVar3; | |
} | |
uVar2 = uVar2 << (uVar3 & 0xff); | |
if (bVar8 || bVar7 != bVar9) { | |
uVar2 = uVar2 | 0U >> (in_r12 & 0xff); | |
uVar1 = 0 << (uVar3 & 0xff); | |
} | |
LAB_08000430: | |
if (uVar5 < 0x433) { | |
return CONCAT44(uVar2 + (0x432 - uVar5) * 0x100000 | uVar6,uVar1); | |
} | |
uVar3 = ~(0x432 - uVar5); | |
if (0x1e < (int)uVar3) { | |
return CONCAT44(param_1,uVar2 >> (uVar3 - 0x1f & 0xff)) & 0x80000000ffffffff; | |
} | |
iVar4 = uVar3 - 0x13; | |
if (iVar4 == 0 || iVar4 < 0 != SCARRY4(uVar3 - 0x1f,0xc)) { | |
uVar3 = uVar3 + 1; | |
return CONCAT44(uVar6 | uVar2 >> (uVar3 & 0xff), | |
uVar1 >> (uVar3 & 0xff) | uVar2 << (0x20 - uVar3 & 0xff)); | |
} | |
return CONCAT44(param_1,uVar1 >> (0x20 - (0xcU - iVar4) & 0xff) | uVar2 << (0xcU - iVar4 & 0xff)) | |
& 0x80000000ffffffff; | |
} | |
ulonglong FUN_08000568(uint param_1,undefined4 param_2,undefined4 param_3,uint param_4) | |
{ | |
uint uVar1; | |
uint uVar2; | |
uint uVar3; | |
uint uVar4; | |
uint uVar5; | |
int iVar6; | |
uint uVar7; | |
uint in_r12; | |
bool bVar8; | |
bool bVar9; | |
bool bVar10; | |
uVar5 = param_1 << 1; | |
bVar9 = uVar5 == 0; | |
uVar1 = (uint)((param_1 & 0x80000000) != 0) << 0x1f; | |
uVar4 = (uint)((int)uVar5 >> 3) >> 1; | |
uVar3 = uVar1 | uVar4; | |
param_1 = param_1 << 0x1d; | |
if (!bVar9) { | |
param_4 = uVar5 & 0xff000000; | |
bVar9 = param_4 == 0; | |
} | |
if (!bVar9) { | |
bVar9 = param_4 == 0xff000000; | |
} | |
if (!bVar9) { | |
return CONCAT44(uVar3,param_1) ^ 0x3800000000000000; | |
} | |
if ((uVar5 & 0xffffff) == 0) { | |
return CONCAT44(uVar3,param_1); | |
} | |
if (param_4 == 0xff000000) { | |
return CONCAT44(uVar3,param_1) | 0x8000000000000; | |
} | |
uVar2 = param_1; | |
uVar5 = uVar4; | |
if (uVar4 == 0) { | |
uVar2 = 0; | |
uVar5 = param_1; | |
} | |
iVar6 = LZCOUNT(uVar5); | |
if (uVar4 == 0) { | |
iVar6 = iVar6 + 0x20; | |
} | |
uVar7 = iVar6 - 0xb; | |
bVar10 = SBORROW4(uVar7,0x20); | |
uVar4 = iVar6 - 0x2b; | |
bVar9 = (int)uVar4 < 0; | |
bVar8 = uVar4 == 0; | |
if ((int)uVar7 < 0x20) { | |
bVar10 = SCARRY4(uVar4,0xc); | |
iVar6 = iVar6 + -0x1f; | |
bVar9 = iVar6 < 0; | |
bVar8 = iVar6 == 0; | |
uVar4 = uVar7; | |
if (!bVar8 && bVar9 == bVar10) { | |
uVar2 = uVar5 << (uVar7 & 0xff); | |
uVar5 = uVar5 >> (0xcU - iVar6 & 0xff); | |
goto LAB_08000430; | |
} | |
} | |
if (bVar8 || bVar9 != bVar10) { | |
in_r12 = 0x20 - uVar4; | |
} | |
uVar5 = uVar5 << (uVar4 & 0xff); | |
if (bVar8 || bVar9 != bVar10) { | |
uVar5 = uVar5 | uVar2 >> (in_r12 & 0xff); | |
uVar2 = uVar2 << (uVar4 & 0xff); | |
} | |
LAB_08000430: | |
if ((int)uVar7 < 0x381) { | |
return CONCAT44(uVar5 + (0x380 - uVar7) * 0x100000 | uVar1,uVar2); | |
} | |
uVar4 = ~(0x380 - uVar7); | |
if (0x1e < (int)uVar4) { | |
return CONCAT44(uVar3,uVar5 >> (uVar4 - 0x1f & 0xff)) & 0x80000000ffffffff; | |
} | |
iVar6 = uVar4 - 0x13; | |
if (iVar6 == 0 || iVar6 < 0 != SCARRY4(uVar4 - 0x1f,0xc)) { | |
uVar4 = uVar4 + 1; | |
return CONCAT44(uVar1 | uVar5 >> (uVar4 & 0xff), | |
uVar2 >> (uVar4 & 0xff) | uVar5 << (0x20 - uVar4 & 0xff)); | |
} | |
return CONCAT44(uVar3,uVar2 >> (0x20 - (0xcU - iVar6) & 0xff) | uVar5 << (0xcU - iVar6 & 0xff)) & | |
0x80000000ffffffff; | |
} | |
ulonglong FUN_080005bc(uint param_1,uint param_2) | |
{ | |
byte bVar1; | |
uint uVar2; | |
uint uVar3; | |
uint uVar4; | |
int iVar5; | |
uint uVar6; | |
int iVar7; | |
uint uVar8; | |
uint uVar9; | |
bool bVar10; | |
bool bVar11; | |
bool bVar12; | |
if (param_1 == 0 && param_2 == 0) { | |
return CONCAT44(param_2,param_1); | |
} | |
uVar8 = param_2 & 0x80000000; | |
uVar3 = param_2; | |
if ((int)uVar8 < 0) { | |
bVar11 = param_1 != 0; | |
param_1 = -param_1; | |
uVar3 = -param_2 - (uint)bVar11; | |
} | |
iVar7 = 0x432; | |
uVar9 = uVar3 >> 0x16; | |
if (uVar9 != 0) { | |
iVar7 = 3; | |
if (uVar3 >> 0x19 != 0) { | |
iVar7 = 6; | |
} | |
if (uVar3 >> 0x1c != 0) { | |
iVar7 = iVar7 + 3; | |
} | |
uVar4 = iVar7 - ((int)uVar3 >> 0x1f); | |
uVar9 = param_1 << (0x20 - uVar4 & 0xff); | |
param_1 = param_1 >> (uVar4 & 0xff) | uVar3 << (0x20 - uVar4 & 0xff); | |
uVar3 = uVar3 >> (uVar4 & 0xff); | |
iVar7 = uVar4 + 0x432; | |
} | |
if (0xfffff < uVar3) { | |
if (0x1fffff < uVar3) { | |
uVar4 = uVar3 & 1; | |
uVar3 = uVar3 >> 1; | |
bVar1 = (byte)param_1; | |
param_1 = (uint)(uVar4 != 0) << 0x1f | param_1 >> 1; | |
uVar9 = (uint)(bVar1 & 1) << 0x1f | uVar9 >> 1; | |
iVar7 = iVar7 + 1; | |
if (0xffbfffff < (uint)(iVar7 * 0x200000)) { | |
return (ulonglong)(uVar8 | 0x7ff00000) << 0x20; | |
} | |
} | |
LAB_080003b8: | |
bVar11 = 0x7fffffff < uVar9; | |
if (uVar9 == 0x80000000) { | |
bVar11 = (param_1 & 1) != 0; | |
} | |
return CONCAT44(uVar3 + iVar7 * 0x100000 + (uint)CARRY4(param_1,(uint)bVar11) | uVar8, | |
param_1 + bVar11); | |
} | |
bVar10 = (uVar9 & 0x80000000) != 0; | |
uVar9 = uVar9 << 1; | |
uVar4 = param_1 * 2; | |
bVar11 = CARRY4(param_1,param_1); | |
param_1 = param_1 * 2 + (uint)bVar10; | |
uVar3 = uVar3 * 2 + (uint)(bVar11 || CARRY4(uVar4,(uint)bVar10)); | |
bVar11 = iVar7 != 0; | |
iVar7 = iVar7 + -1; | |
if (bVar11 && 0xfffff < uVar3) goto LAB_080003b8; | |
uVar2 = param_1; | |
uVar4 = uVar3; | |
if (uVar3 == 0) { | |
uVar2 = 0; | |
uVar4 = param_1; | |
} | |
iVar5 = LZCOUNT(uVar4); | |
if (uVar3 == 0) { | |
iVar5 = iVar5 + 0x20; | |
} | |
uVar6 = iVar5 - 0xb; | |
bVar12 = SBORROW4(uVar6,0x20); | |
uVar3 = iVar5 - 0x2b; | |
bVar11 = (int)uVar3 < 0; | |
bVar10 = uVar3 == 0; | |
if ((int)uVar6 < 0x20) { | |
bVar12 = SCARRY4(uVar3,0xc); | |
iVar5 = iVar5 + -0x1f; | |
bVar11 = iVar5 < 0; | |
bVar10 = iVar5 == 0; | |
uVar3 = uVar6; | |
if (!bVar10 && bVar11 == bVar12) { | |
uVar2 = uVar4 << (uVar6 & 0xff); | |
uVar4 = uVar4 >> (0xcU - iVar5 & 0xff); | |
goto LAB_08000430; | |
} | |
} | |
if (bVar10 || bVar11 != bVar12) { | |
uVar9 = 0x20 - uVar3; | |
} | |
uVar4 = uVar4 << (uVar3 & 0xff); | |
if (bVar10 || bVar11 != bVar12) { | |
uVar4 = uVar4 | uVar2 >> (uVar9 & 0xff); | |
uVar2 = uVar2 << (uVar3 & 0xff); | |
} | |
LAB_08000430: | |
if ((int)uVar6 <= iVar7) { | |
return CONCAT44(uVar4 + (iVar7 - uVar6) * 0x100000 | uVar8,uVar2); | |
} | |
uVar3 = ~(iVar7 - uVar6); | |
if ((int)uVar3 < 0x1f) { | |
iVar7 = uVar3 - 0x13; | |
if (iVar7 != 0 && iVar7 < 0 == SCARRY4(uVar3 - 0x1f,0xc)) { | |
return CONCAT44(param_2,uVar2 >> (0x20 - (0xcU - iVar7) & 0xff) | | |
uVar4 << (0xcU - iVar7 & 0xff)) & 0x80000000ffffffff; | |
} | |
uVar3 = uVar3 + 1; | |
return CONCAT44(uVar8 | uVar4 >> (uVar3 & 0xff), | |
uVar2 >> (uVar3 & 0xff) | uVar4 << (0x20 - uVar3 & 0xff)); | |
} | |
return CONCAT44(param_2,uVar4 >> (uVar3 - 0x1f & 0xff)) & 0x80000000ffffffff; | |
} | |
ulonglong FUN_08000618(undefined4 param_1,uint param_2,uint param_3,uint param_4) | |
{ | |
ulonglong uVar1; | |
longlong lVar2; | |
uint uVar3; | |
uint uVar4; | |
int iVar5; | |
uint uVar6; | |
uint unaff_r5; | |
uint uVar7; | |
uint uVar8; | |
uint uVar9; | |
bool bVar10; | |
bool bVar11; | |
bool bVar12; | |
ulonglong uVar13; | |
uVar13 = CONCAT44(param_2,param_1); | |
uVar8 = 0x7ff; | |
uVar4 = param_2 >> 0x14 & 0x7ff; | |
bVar10 = uVar4 == 0; | |
if (!bVar10) { | |
unaff_r5 = param_4 >> 0x14 & 0x7ff; | |
bVar10 = unaff_r5 == 0; | |
} | |
if (!bVar10) { | |
bVar10 = uVar4 == 0x7ff; | |
} | |
if (!bVar10) { | |
bVar10 = unaff_r5 == 0x7ff; | |
} | |
if (bVar10) { | |
uVar13 = FUN_080007f4(); | |
} | |
uVar3 = (uint)(uVar13 >> 0x20); | |
uVar7 = (uint)uVar13; | |
iVar5 = uVar4 + unaff_r5; | |
uVar4 = uVar3 ^ param_4; | |
uVar3 = uVar3 & ~(uVar8 << 0x15); | |
param_4 = param_4 & ~(uVar8 << 0x15); | |
bVar10 = (uVar3 & 0xfffff) == 0; | |
bVar11 = uVar7 == 0 && bVar10; | |
if (uVar7 != 0 || !bVar10) { | |
bVar11 = param_3 == 0 && (param_4 & 0xfffff) == 0; | |
} | |
uVar3 = uVar3 | 0x100000; | |
param_4 = param_4 | 0x100000; | |
if (bVar11) { | |
uVar7 = uVar7 | param_3; | |
param_4 = (uVar4 & 0x80000000 | uVar3) ^ param_4; | |
uVar4 = uVar8 >> 1; | |
bVar11 = SBORROW4(iVar5,uVar4); | |
uVar6 = iVar5 - uVar4; | |
bVar10 = uVar6 == 0; | |
uVar3 = uVar6; | |
if (!bVar10 && (int)uVar4 <= iVar5) { | |
bVar11 = SBORROW4(uVar8,uVar6); | |
uVar3 = uVar8 - uVar6; | |
bVar10 = uVar8 == uVar6; | |
} | |
if (!bVar10 && (int)uVar3 < 0 == bVar11) { | |
return CONCAT44(param_4 | uVar6 * 0x100000,uVar7); | |
} | |
param_4 = param_4 | 0x100000; | |
uVar8 = 0; | |
bVar11 = SBORROW4(uVar6,1); | |
uVar6 = uVar6 - 1; | |
bVar10 = uVar6 == 0; | |
uVar4 = uVar6; | |
} | |
else { | |
uVar1 = (uVar13 & 0xffffffff) * (ulonglong)param_3; | |
uVar13 = (uVar13 & 0xffffffff) * (ulonglong)param_4 + | |
(ulonglong)uVar3 * (ulonglong)param_3 + (uVar1 >> 0x20); | |
uVar9 = (uint)uVar13; | |
lVar2 = (ulonglong)uVar3 * (ulonglong)param_4 + (uVar13 >> 0x20); | |
uVar8 = (uint)lVar2; | |
uVar7 = (uint)((ulonglong)lVar2 >> 0x20); | |
if ((int)uVar1 != 0) { | |
uVar9 = uVar9 | 1; | |
} | |
uVar6 = (iVar5 + -0x3ff) - (uint)(uVar7 < 0x200); | |
if (uVar7 < 0x200) { | |
bVar10 = (uVar9 & 0x80000000) != 0; | |
uVar9 = uVar9 << 1; | |
lVar2 = CONCAT44(uVar7 * 2 + (uint)(CARRY4(uVar8,uVar8) || CARRY4(uVar8 * 2,(uint)bVar10)), | |
uVar8 * 2 + (uint)bVar10); | |
} | |
param_4 = uVar4 & 0x80000000 | (int)((ulonglong)lVar2 >> 0x20) << 0xb | (uint)lVar2 >> 0x15; | |
uVar7 = (uint)lVar2 << 0xb | uVar9 >> 0x15; | |
uVar8 = uVar9 * 0x800; | |
bVar12 = 0xfc < uVar6; | |
bVar11 = SBORROW4(uVar6,0xfd); | |
uVar3 = uVar6 - 0xfd; | |
bVar10 = uVar3 == 0; | |
uVar4 = uVar3; | |
if (bVar12 && !bVar10) { | |
bVar12 = 0x6ff < uVar3; | |
bVar11 = SBORROW4(uVar3,0x700); | |
uVar4 = uVar6 - 0x7fd; | |
bVar10 = uVar3 == 0x700; | |
} | |
if (!bVar12 || bVar10) { | |
bVar10 = 0x7fffffff < uVar8; | |
if (uVar8 == 0x80000000) { | |
bVar10 = (uVar9 >> 0x15 & 1) != 0; | |
} | |
return CONCAT44(param_4 + uVar6 * 0x100000 + (uint)CARRY4(uVar7,(uint)bVar10),uVar7 + bVar10); | |
} | |
} | |
if (!bVar10 && (int)uVar4 < 0 == bVar11) { | |
return (ulonglong)(param_4 & 0x80000000 | 0x7ff00000) << 0x20; | |
} | |
if (uVar6 != 0xffffffca && (int)(uVar6 + 0x36) < 0 == SCARRY4(uVar6,0x36)) { | |
uVar4 = -uVar6; | |
uVar3 = uVar4 - 0x20; | |
if (0x1f < (int)uVar4) { | |
uVar6 = uVar7 >> (uVar3 & 0xff) | param_4 << (0x20 - uVar3 & 0xff); | |
uVar4 = (param_4 >> (uVar3 & 0xff) & ~((param_4 & 0x80000000) >> (uVar3 & 0xff))) - | |
((int)uVar6 >> 0x1f); | |
if ((uVar8 == 0 && uVar7 << (0x20 - uVar3 & 0xff) == 0) && (uVar6 & 0x7fffffff) == 0) { | |
uVar4 = uVar4 & ~(uVar6 >> 0x1f); | |
} | |
return CONCAT44(param_4,uVar4) & 0x80000000ffffffff; | |
} | |
iVar5 = uVar4 - 0x14; | |
if (iVar5 != 0 && iVar5 < 0 == SCARRY4(uVar3,0xc)) { | |
uVar4 = 0xc - iVar5; | |
uVar3 = uVar7 << (uVar4 & 0xff); | |
uVar4 = uVar7 >> (0x20 - uVar4 & 0xff) | param_4 << (uVar4 & 0xff); | |
uVar7 = uVar4 + -((int)uVar3 >> 0x1f); | |
if (uVar8 == 0 && (uVar3 & 0x7fffffff) == 0) { | |
uVar7 = uVar7 & ~(uVar3 >> 0x1f); | |
} | |
return CONCAT44((param_4 & 0x80000000) + (uint)CARRY4(uVar4,-((int)uVar3 >> 0x1f)),uVar7); | |
} | |
uVar9 = uVar7 << (uVar6 + 0x20 & 0xff); | |
uVar7 = uVar7 >> (uVar4 & 0xff) | param_4 << (uVar6 + 0x20 & 0xff); | |
uVar3 = uVar7 + -((int)uVar9 >> 0x1f); | |
if (uVar8 == 0 && (uVar9 & 0x7fffffff) == 0) { | |
uVar3 = uVar3 & ~(uVar9 >> 0x1f); | |
} | |
return CONCAT44((param_4 & 0x80000000) + | |
((param_4 & 0x7fffffff) >> (uVar4 & 0xff)) + | |
(uint)CARRY4(uVar7,-((int)uVar9 >> 0x1f)),uVar3); | |
} | |
return (ulonglong)(param_4 & 0x80000000) << 0x20; | |
} | |
ulonglong FUN_080007f4(uint param_1,uint param_2,uint param_3,uint param_4) | |
{ | |
bool bVar1; | |
uint uVar2; | |
uint unaff_r4; | |
uint uVar3; | |
uint uVar4; | |
uint in_r12; | |
bool bVar5; | |
bool bVar6; | |
uVar3 = in_r12 & param_4 >> 0x14; | |
if (unaff_r4 != in_r12 && uVar3 != in_r12) { | |
bVar1 = (param_2 & 0x7fffffff) == 0; | |
bVar5 = param_1 == 0 && bVar1; | |
if (param_1 != 0 || !bVar1) { | |
bVar5 = param_3 == 0 && (param_4 & 0x7fffffff) == 0; | |
} | |
if (bVar5) { | |
return (ulonglong)((param_2 ^ param_4) & 0x80000000) << 0x20; | |
} | |
if (unaff_r4 == 0) { | |
uVar4 = param_2 & 0x80000000; | |
do { | |
uVar2 = param_1 & 0x80000000; | |
param_1 = param_1 << 1; | |
param_2 = param_2 * 2 + (uint)(uVar2 != 0); | |
} while ((param_2 & 0x100000) == 0); | |
param_2 = param_2 | uVar4; | |
if (uVar3 != 0) { | |
return CONCAT44(param_2,param_1); | |
} | |
} | |
do { | |
uVar3 = param_3 & 0x80000000; | |
param_3 = param_3 << 1; | |
param_4 = param_4 * 2 + (uint)(uVar3 != 0); | |
} while ((param_4 & 0x100000) == 0); | |
return CONCAT44(param_2,param_1); | |
} | |
bVar1 = param_1 == 0; | |
bVar5 = (param_2 & 0x7fffffff) == 0; | |
bVar6 = bVar1 && bVar5; | |
if (bVar1 && bVar5) { | |
param_2 = param_4; | |
param_1 = param_3; | |
} | |
if (!bVar1 || !bVar5) { | |
bVar6 = param_3 == 0 && (param_4 & 0x7fffffff) == 0; | |
} | |
uVar4 = param_2; | |
if (((!bVar6) && ((unaff_r4 != in_r12 || (param_1 == 0 && (param_2 & 0xfffff) == 0)))) && | |
((uVar3 != in_r12 || | |
(param_1 = param_3, uVar4 = param_4, param_3 == 0 && (param_4 & 0xfffff) == 0)))) { | |
return (ulonglong)((param_2 ^ param_4) & 0x80000000 | 0x7ff00000) << 0x20; | |
} | |
return CONCAT44(uVar4,param_1) | 0x7ff8000000000000; | |
} | |
ulonglong FUN_0800086c(undefined4 param_1,uint param_2,uint param_3,uint param_4) | |
{ | |
uint uVar1; | |
uint uVar2; | |
uint uVar3; | |
uint uVar4; | |
uint uVar5; | |
uint uVar6; | |
int iVar7; | |
uint uVar8; | |
uint unaff_r5; | |
uint uVar9; | |
uint uVar10; | |
uint uVar11; | |
uint uVar12; | |
bool bVar13; | |
bool bVar14; | |
bool bVar15; | |
undefined8 uVar16; | |
uVar16 = CONCAT44(param_2,param_1); | |
uVar12 = 0x7ff; | |
uVar6 = param_2 >> 0x14 & 0x7ff; | |
bVar13 = uVar6 == 0; | |
if (!bVar13) { | |
unaff_r5 = param_4 >> 0x14 & 0x7ff; | |
bVar13 = unaff_r5 == 0; | |
} | |
if (!bVar13) { | |
bVar13 = uVar6 == 0x7ff; | |
} | |
if (!bVar13) { | |
bVar13 = unaff_r5 == 0x7ff; | |
} | |
if (bVar13) { | |
uVar16 = FUN_080009da(); | |
} | |
uVar8 = (uint)((ulonglong)uVar16 >> 0x20); | |
uVar10 = (uint)uVar16; | |
iVar7 = uVar6 - unaff_r5; | |
if (param_3 == 0 && (param_4 & 0xfffff) == 0) { | |
uVar6 = (uVar8 ^ param_4) & 0x80000000 | uVar8 & 0xfffff; | |
bVar15 = SCARRY4(iVar7,uVar12 >> 1); | |
uVar8 = iVar7 + (uVar12 >> 1); | |
bVar13 = (int)uVar8 < 0; | |
bVar14 = uVar8 == 0; | |
if (!bVar14 && bVar13 == bVar15) { | |
bVar15 = SBORROW4(uVar12,uVar8); | |
bVar13 = (int)(uVar12 - uVar8) < 0; | |
bVar14 = uVar12 == uVar8; | |
} | |
if (!bVar14 && bVar13 == bVar15) { | |
return CONCAT44(uVar6 | uVar8 * 0x100000,uVar10); | |
} | |
uVar6 = uVar6 | 0x100000; | |
uVar12 = 0; | |
bVar14 = SBORROW4(uVar8,1); | |
uVar8 = uVar8 - 1; | |
bVar13 = uVar8 == 0; | |
uVar3 = uVar8; | |
} | |
else { | |
uVar3 = (param_4 << 0xc) >> 4 | 0x10000000 | param_3 >> 0x18; | |
uVar12 = param_3 << 8; | |
uVar9 = (uVar8 << 0xc) >> 4 | 0x10000000 | uVar10 >> 0x18; | |
uVar10 = uVar10 * 0x100; | |
uVar6 = (uVar8 ^ param_4) & 0x80000000; | |
bVar13 = uVar3 <= uVar9; | |
if (uVar9 == uVar3) { | |
bVar13 = uVar12 <= uVar10; | |
} | |
iVar7 = iVar7 + (uint)bVar13; | |
uVar8 = iVar7 + 0x3fd; | |
if (bVar13 == false) { | |
uVar3 = uVar3 >> 1; | |
uVar12 = (uint)((param_3 >> 0x18 & 1) != 0) << 0x1f | uVar12 >> 1; | |
} | |
uVar11 = uVar10 - uVar12; | |
uVar9 = (uVar9 - uVar3) - (uint)(uVar10 < uVar12); | |
uVar4 = uVar3 >> 1; | |
uVar1 = (uint)((uVar3 & 1) != 0) << 0x1f | uVar12 >> 1; | |
uVar10 = 0x100000; | |
uVar3 = 0x80000; | |
while( true ) { | |
bVar13 = uVar1 <= uVar11; | |
if (uVar4 < uVar9 || uVar9 - uVar4 < (uint)bVar13) { | |
uVar11 = uVar11 - uVar1; | |
uVar10 = uVar10 | uVar3; | |
uVar9 = (uVar9 - uVar4) - (uint)!bVar13; | |
} | |
uVar5 = uVar4 >> 1; | |
uVar1 = (uint)((uVar4 & 1) != 0) << 0x1f | uVar1 >> 1; | |
bVar14 = uVar1 <= uVar11; | |
bVar13 = uVar9 - uVar5 < (uint)bVar14; | |
uVar12 = uVar9; | |
if (uVar5 < uVar9 || bVar13) { | |
uVar11 = uVar11 - uVar1; | |
uVar12 = (uVar9 - uVar5) - (uint)!bVar14; | |
} | |
if (uVar5 < uVar9 || bVar13) { | |
uVar10 = uVar10 | uVar3 >> 1; | |
} | |
uVar9 = uVar4 >> 2; | |
uVar2 = (uint)((uVar5 & 1) != 0) << 0x1f | uVar1 >> 1; | |
bVar14 = uVar2 <= uVar11; | |
bVar13 = uVar12 - uVar9 < (uint)bVar14; | |
uVar5 = uVar12; | |
if (uVar9 < uVar12 || bVar13) { | |
uVar11 = uVar11 - uVar2; | |
uVar5 = (uVar12 - uVar9) - (uint)!bVar14; | |
} | |
if (uVar9 < uVar12 || bVar13) { | |
uVar10 = uVar10 | uVar3 >> 2; | |
} | |
uVar4 = uVar4 >> 3; | |
uVar1 = (uint)((uVar9 & 1) != 0) << 0x1f | uVar2 >> 1; | |
bVar14 = uVar1 <= uVar11; | |
bVar13 = uVar5 - uVar4 < (uint)bVar14; | |
uVar9 = uVar5; | |
if (uVar4 < uVar5 || bVar13) { | |
uVar11 = uVar11 - uVar1; | |
uVar9 = (uVar5 - uVar4) - (uint)!bVar14; | |
} | |
if (uVar4 < uVar5 || bVar13) { | |
uVar10 = uVar10 | uVar3 >> 3; | |
} | |
uVar12 = uVar9 | uVar11; | |
if (uVar12 == 0) break; | |
uVar9 = uVar9 << 4 | uVar11 >> 0x1c; | |
uVar11 = uVar11 << 4; | |
uVar4 = uVar4 << 3 | uVar1 >> 0x1d; | |
uVar1 = (uVar2 >> 1) << 3; | |
uVar3 = uVar3 >> 4; | |
if (uVar3 == 0) { | |
if ((uVar6 & 0x100000) != 0) goto LAB_0800098a; | |
uVar6 = uVar6 | uVar10; | |
uVar10 = 0; | |
uVar3 = 0x80000000; | |
} | |
} | |
if ((uVar6 & 0x100000) == 0) { | |
uVar6 = uVar6 | uVar10; | |
uVar10 = 0; | |
} | |
LAB_0800098a: | |
bVar15 = 0xfc < uVar8; | |
bVar14 = SBORROW4(uVar8,0xfd); | |
uVar5 = iVar7 + 0x300; | |
bVar13 = uVar5 == 0; | |
uVar3 = uVar5; | |
if (bVar15 && !bVar13) { | |
bVar15 = 0x6ff < uVar5; | |
bVar14 = SBORROW4(uVar5,0x700); | |
uVar3 = iVar7 - 0x400; | |
bVar13 = uVar5 == 0x700; | |
} | |
if (!bVar15 || bVar13) { | |
bVar13 = uVar4 <= uVar9; | |
if (uVar9 == uVar4) { | |
bVar13 = uVar1 <= uVar11; | |
} | |
if (uVar9 == uVar4 && uVar11 == uVar1) { | |
bVar13 = (uVar10 & 1) != 0; | |
} | |
return CONCAT44(uVar6 + uVar8 * 0x100000 + (uint)CARRY4(uVar10,(uint)bVar13),uVar10 + bVar13); | |
} | |
} | |
if (!bVar13 && (int)uVar3 < 0 == bVar14) { | |
return (ulonglong)(uVar6 & 0x80000000 | 0x7ff00000) << 0x20; | |
} | |
if (uVar8 == 0xffffffca || (int)(uVar8 + 0x36) < 0 != SCARRY4(uVar8,0x36)) { | |
return (ulonglong)(uVar6 & 0x80000000) << 0x20; | |
} | |
uVar3 = -uVar8; | |
uVar9 = uVar3 - 0x20; | |
if (0x1f < (int)uVar3) { | |
uVar3 = uVar10 >> (uVar9 & 0xff) | uVar6 << (0x20 - uVar9 & 0xff); | |
uVar8 = (uVar6 >> (uVar9 & 0xff) & ~((uVar6 & 0x80000000) >> (uVar9 & 0xff))) - | |
((int)uVar3 >> 0x1f); | |
if ((uVar12 == 0 && uVar10 << (0x20 - uVar9 & 0xff) == 0) && (uVar3 & 0x7fffffff) == 0) { | |
uVar8 = uVar8 & ~(uVar3 >> 0x1f); | |
} | |
return CONCAT44(uVar6,uVar8) & 0x80000000ffffffff; | |
} | |
iVar7 = uVar3 - 0x14; | |
if (iVar7 != 0 && iVar7 < 0 == SCARRY4(uVar9,0xc)) { | |
uVar8 = 0xc - iVar7; | |
uVar3 = uVar10 << (uVar8 & 0xff); | |
uVar10 = uVar10 >> (0x20 - uVar8 & 0xff) | uVar6 << (uVar8 & 0xff); | |
uVar8 = uVar10 + -((int)uVar3 >> 0x1f); | |
if (uVar12 == 0 && (uVar3 & 0x7fffffff) == 0) { | |
uVar8 = uVar8 & ~(uVar3 >> 0x1f); | |
} | |
return CONCAT44((uVar6 & 0x80000000) + (uint)CARRY4(uVar10,-((int)uVar3 >> 0x1f)),uVar8); | |
} | |
uVar9 = uVar10 << (uVar8 + 0x20 & 0xff); | |
uVar10 = uVar10 >> (uVar3 & 0xff) | uVar6 << (uVar8 + 0x20 & 0xff); | |
uVar8 = uVar10 + -((int)uVar9 >> 0x1f); | |
if (uVar12 == 0 && (uVar9 & 0x7fffffff) == 0) { | |
uVar8 = uVar8 & ~(uVar9 >> 0x1f); | |
} | |
return CONCAT44((uVar6 & 0x80000000) + | |
((uVar6 & 0x7fffffff) >> (uVar3 & 0xff)) + | |
(uint)CARRY4(uVar10,-((int)uVar9 >> 0x1f)),uVar8); | |
} | |
ulonglong FUN_080009da(uint param_1,uint param_2,uint param_3,uint param_4) | |
{ | |
bool bVar1; | |
uint uVar2; | |
uint unaff_r4; | |
uint uVar3; | |
uint uVar4; | |
uint in_r12; | |
bool bVar5; | |
uVar3 = in_r12 & param_4 >> 0x14; | |
uVar4 = param_2; | |
if (unaff_r4 != in_r12 || uVar3 != in_r12) { | |
if (unaff_r4 == in_r12) { | |
if ((param_1 == 0 && (param_2 & 0xfffff) == 0) && | |
(param_1 = param_3, uVar4 = param_4, uVar3 != in_r12)) { | |
LAB_0800084c: | |
return (ulonglong)((param_2 ^ param_4) & 0x80000000 | 0x7ff00000) << 0x20; | |
} | |
} | |
else if (uVar3 == in_r12) { | |
param_1 = param_3; | |
uVar4 = param_4; | |
if (param_3 == 0 && (param_4 & 0xfffff) == 0) { | |
LAB_08000810: | |
return (ulonglong)((param_2 ^ param_4) & 0x80000000) << 0x20; | |
} | |
} | |
else { | |
bVar1 = (param_2 & 0x7fffffff) == 0; | |
bVar5 = param_1 == 0 && bVar1; | |
if (param_1 != 0 || !bVar1) { | |
bVar5 = param_3 == 0 && (param_4 & 0x7fffffff) == 0; | |
} | |
if (!bVar5) { | |
if (unaff_r4 == 0) { | |
uVar4 = param_2 & 0x80000000; | |
do { | |
uVar2 = param_1 & 0x80000000; | |
param_1 = param_1 << 1; | |
param_2 = param_2 * 2 + (uint)(uVar2 != 0); | |
} while ((param_2 & 0x100000) == 0); | |
param_2 = param_2 | uVar4; | |
if (uVar3 != 0) { | |
return CONCAT44(param_2,param_1); | |
} | |
} | |
do { | |
uVar4 = param_3 & 0x80000000; | |
param_3 = param_3 << 1; | |
param_4 = param_4 * 2 + (uint)(uVar4 != 0); | |
} while ((param_4 & 0x100000) == 0); | |
return CONCAT44(param_2,param_1); | |
} | |
if (param_1 != 0 || (param_2 & 0x7fffffff) != 0) goto LAB_0800084c; | |
if (param_3 != 0 || (param_4 & 0x7fffffff) != 0) goto LAB_08000810; | |
} | |
} | |
return CONCAT44(uVar4,param_1) | 0x7ff8000000000000; | |
} | |
uint FUN_08000a4c(uint param_1,uint param_2,uint param_3,uint param_4) | |
{ | |
uint uVar1; | |
bool bVar2; | |
bool bVar3; | |
if (((int)(param_2 << 1) >> 0x15 == -1 || (int)(param_4 << 1) >> 0x15 == -1) && | |
((((int)(param_2 << 1) >> 0x15 == -1 && (param_1 != 0 || (param_2 & 0xfffff) != 0)) || | |
(((int)(param_4 << 1) >> 0x15 == -1 && (param_3 != 0 || (param_4 & 0xfffff) != 0)))))) { | |
return 1; | |
} | |
bVar2 = (param_2 & 0x7fffffff) == 0; | |
bVar3 = param_1 == 0 && bVar2; | |
if (param_1 == 0 && bVar2) { | |
bVar3 = param_3 == 0 && (param_4 & 0x7fffffff) == 0; | |
} | |
if (!bVar3) { | |
bVar3 = param_2 == param_4; | |
} | |
if (bVar3) { | |
bVar3 = param_1 == param_3; | |
} | |
if (!bVar3) { | |
uVar1 = param_2 ^ param_4; | |
bVar2 = uVar1 == 0; | |
if (-1 < (int)uVar1) { | |
bVar2 = param_2 == param_4; | |
} | |
bVar3 = -1 < (int)uVar1 && param_4 <= param_2; | |
if (bVar2) { | |
bVar3 = param_3 <= param_1; | |
} | |
param_4 = (int)param_4 >> 0x1f; | |
if (!bVar3) { | |
param_4 = ~param_4; | |
} | |
return param_4 | 1; | |
} | |
return 0; | |
} | |
void FUN_08000ac8(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
FUN_08000ad8(param_3,param_4,param_1,param_2); | |
return; | |
} | |
undefined4 FUN_08000ad8(undefined4 param_1) | |
{ | |
FUN_08000a4c(); | |
return param_1; | |
} | |
bool FUN_08000ae8(void) | |
{ | |
char in_ZR; | |
FUN_08000ad8(); | |
return in_ZR != '\0'; | |
} | |
bool FUN_08000afc(void) | |
{ | |
char in_CY; | |
FUN_08000ad8(); | |
return in_CY == '\0'; | |
} | |
bool FUN_08000b10(void) | |
{ | |
undefined1 in_ZR; | |
undefined1 in_CY; | |
FUN_08000ad8(); | |
return !(bool)in_CY || (bool)in_ZR; | |
} | |
bool FUN_08000b24(void) | |
{ | |
undefined1 in_ZR; | |
undefined1 in_CY; | |
FUN_08000ac8(); | |
return !(bool)in_CY || (bool)in_ZR; | |
} | |
bool FUN_08000b38(void) | |
{ | |
char in_CY; | |
FUN_08000ac8(); | |
return in_CY == '\0'; | |
} | |
undefined4 FUN_08000b4c(int param_1,uint param_2,int param_3,uint param_4) | |
{ | |
if ((((int)(param_2 << 1) >> 0x15 != -1) || (param_1 == 0 && (param_2 & 0xfffff) == 0)) && | |
(((int)(param_4 << 1) >> 0x15 != -1 || (param_3 == 0 && (param_4 & 0xfffff) == 0)))) { | |
return 0; | |
} | |
return 1; | |
} | |
uint FUN_08000b78(uint param_1,uint param_2) | |
{ | |
uint uVar1; | |
int iVar2; | |
uint uVar3; | |
iVar2 = param_2 * 2 + 0x200000; | |
if (param_2 * 2 < 0xffe00000) { | |
if (-1 < iVar2) { | |
return 0; | |
} | |
uVar1 = iVar2 >> 0x15; | |
uVar3 = -uVar1 - 0x3e1; | |
if (uVar1 < 0xfffffc20 && uVar3 != 0) { | |
uVar1 = (param_2 << 0xb | 0x80000000 | param_1 >> 0x15) >> (uVar3 & 0xff); | |
if ((param_2 & 0x80000000) != 0) { | |
uVar1 = -uVar1; | |
} | |
return uVar1; | |
} | |
} | |
else if (param_1 != 0 || (param_2 & 0xfffff) != 0) { | |
return 0; | |
} | |
param_2 = param_2 & 0x80000000; | |
if (param_2 == 0) { | |
param_2 = 0x7fffffff; | |
} | |
return param_2; | |
} | |
uint FUN_08000bc8(uint param_1,uint param_2) | |
{ | |
int iVar1; | |
uint uVar2; | |
if ((param_2 & 0x80000000) != 0) { | |
return 0; | |
} | |
iVar1 = param_2 * 2 + 0x200000; | |
if (param_2 * 2 < 0xffe00000) { | |
if (-1 < iVar1) { | |
return 0; | |
} | |
uVar2 = -(iVar1 >> 0x15) - 0x3e1; | |
if (-1 < (int)uVar2) { | |
return (param_2 << 0xb | 0x80000000 | param_1 >> 0x15) >> (uVar2 & 0xff); | |
} | |
} | |
else if (param_1 != 0 || (param_2 & 0xfffff) != 0) { | |
return 0; | |
} | |
return 0xffffffff; | |
} | |
uint FUN_08000c08(uint param_1,uint param_2) | |
{ | |
uint uVar1; | |
uint uVar2; | |
uint uVar3; | |
uint in_r12; | |
bool bVar4; | |
bool bVar5; | |
uVar2 = param_2 * 2; | |
bVar5 = uVar2 < 0x70000000; | |
uVar3 = uVar2 + 0x90000000; | |
uVar1 = uVar3; | |
if (!bVar5) { | |
in_r12 = uVar2 + 0x8fe00000; | |
uVar1 = in_r12; | |
} | |
bVar4 = uVar1 == 0; | |
if (!bVar5 && uVar3 >= 0x200000) { | |
bVar4 = in_r12 == 0x1fc00000; | |
} | |
if (((bVar5 || uVar3 < 0x200000) || 0x1fc00000 < in_r12) || bVar4) { | |
if ((param_2 & 0x40000000) != 0) { | |
if (((int)uVar2 >> 0x15 == -1) && (param_1 != 0 || (param_2 & 0xfffff) != 0)) { | |
return 0x7fc00000; | |
} | |
return param_2 & 0x80000000 | 0x7f800000; | |
} | |
if ((int)(uVar2 + 0x92e00000) < 0 != SCARRY4(uVar3,0x2e00000)) { | |
return param_2 & 0x80000000; | |
} | |
uVar2 = 0x18 - (uVar2 + 0x92e00000 >> 0x15); | |
uVar1 = param_1 >> (uVar2 & 0xff); | |
if (param_1 << (0x20 - uVar2 & 0xff) != 0) { | |
uVar1 = uVar1 | 1; | |
} | |
uVar3 = param_2 & 0x1fffff | 0x100000; | |
param_1 = uVar1 | uVar3 << (0x20 - uVar2 & 0xff); | |
uVar3 = (uVar3 >> (uVar2 & 0xff)) << 1; | |
} | |
uVar1 = (param_2 & 0x80000000 | param_1 >> 0x1d) + uVar3 * 4 + (uint)(0x7fffffff < param_1 * 8); | |
if (param_1 * 8 == 0x80000000) { | |
uVar1 = uVar1 & 0xfffffffe; | |
} | |
return uVar1; | |
} | |
undefined8 FUN_08000ca8(int param_1,int param_2,int param_3,int param_4) | |
{ | |
undefined8 uVar1; | |
if ((param_4 == 0) && (param_3 == 0)) { | |
if (param_2 != 0 || param_1 != 0) { | |
param_2 = -1; | |
param_1 = -1; | |
} | |
return CONCAT44(param_2,param_1); | |
} | |
uVar1 = FUN_08014de0(); | |
return uVar1; | |
} | |
void FUN_08000cdc(void) | |
{ | |
if ((DAT_08000cf0 != DAT_08000cec) && (DAT_08000cf4 != (code *)0x0)) { | |
// WARNING: Could not recover jumptable at 0x08000ce8. Too many branches | |
// WARNING: Treating indirect jump as call | |
(*DAT_08000cf4)(); | |
return; | |
} | |
return; | |
} | |
undefined4 FUN_08000d1c(undefined4 param_1) | |
{ | |
char *pcVar1; | |
pcVar1 = DAT_08000d38; | |
if (*DAT_08000d38 == '\0') { | |
param_1 = FUN_08000cdc(); | |
if (DAT_08000d3c != 0) { | |
param_1 = DAT_08000d40; | |
} | |
*pcVar1 = '\x01'; | |
} | |
return param_1; | |
} | |
void FUN_08000d44(void) | |
{ | |
if (((DAT_08000d14 - DAT_08000d10 >> 2) - (DAT_08000d14 - DAT_08000d10 >> 0x1f) >> 1 != 0) && | |
(DAT_08000d18 != (code *)0x0)) { | |
// WARNING: Could not recover jumptable at 0x08000d0c. Too many branches | |
// WARNING: Treating indirect jump as call | |
(*DAT_08000d18)(); | |
return; | |
} | |
return; | |
} | |
void Enable_ADC_DMA(void) | |
{ | |
int iVar1; | |
iVar1 = DAT_08000dc4; | |
*(uint *)(DAT_08000dc4 + 0x30) = *(uint *)(DAT_08000dc4 + 0x30) | 4; | |
*(uint *)(iVar1 + 0x30) = *(uint *)(iVar1 + 0x30) | 0x80; | |
*(uint *)(iVar1 + 0x30) = *(uint *)(iVar1 + 0x30) | 1; | |
*(uint *)(iVar1 + 0x30) = *(uint *)(iVar1 + 0x30) | 2; | |
return; | |
} | |
void Configure_DAC_DMA(void) | |
{ | |
int iVar1; | |
uint uVar2; | |
iVar1 = DAT_08000e1c; | |
*(uint *)(DAT_08000e1c + 0x30) = *(uint *)(DAT_08000e1c + 0x30) | 0x400000; | |
uVar2 = *(uint *)(iVar1 + 0x30); | |
*(uint *)(iVar1 + 0x30) = *(uint *)(iVar1 + 0x30) | 0x200000; | |
FUN_08002e78(0x11,0,0,*(uint *)(iVar1 + 0x30) & 0x200000,uVar2 & 0x400000); | |
FUN_08002e98(0x11); | |
FUN_08002e78(0x38,0,0); | |
FUN_08002e98(0x38); | |
return; | |
} | |
void FUN_08000e20(int *param_1) | |
{ | |
undefined4 *puVar1; | |
undefined4 uVar2; | |
undefined4 uVar3; | |
undefined4 uVar4; | |
puVar1 = DAT_08000e48; | |
if (*param_1 != DAT_08000e44) { | |
return; | |
} | |
uVar2 = DAT_08000e4c[1]; | |
uVar3 = DAT_08000e4c[2]; | |
uVar4 = DAT_08000e4c[3]; | |
*DAT_08000e48 = *DAT_08000e4c; | |
puVar1[1] = uVar2; | |
puVar1[2] = uVar3; | |
puVar1[3] = uVar4; | |
*DAT_08000e50 = 1; | |
return; | |
} | |
void FUN_08000e54(int *param_1) | |
{ | |
if (*param_1 == DAT_08000e68) { | |
*DAT_08000e6c = 1; | |
} | |
return; | |
} | |
void SystemHalt(void) | |
{ | |
disableIRQinterrupts(); | |
do { | |
// WARNING: Do nothing block with infinite loop | |
} while( true ); | |
} | |
void Init_ClockSystem(void) | |
{ | |
undefined4 *puVar1; | |
int iVar2; | |
undefined4 local_20; | |
undefined4 local_1c; | |
undefined4 local_18; | |
undefined4 local_14; | |
undefined4 local_10; | |
undefined4 local_c; | |
puVar1 = DAT_08000ed4; | |
local_18 = 0; | |
local_14 = 0; | |
local_10 = 0; | |
local_c = 0; | |
local_20 = 0; | |
local_1c = 0; | |
*DAT_08000ed4 = DAT_08000ed8; | |
puVar1[1] = 0x4f; | |
puVar1[2] = 0; | |
puVar1[3] = 0x40; | |
puVar1[4] = 0; | |
puVar1[6] = 0; | |
iVar2 = FUN_080032bc(); | |
if (iVar2 != 0) { | |
// WARNING: Subroutine does not return | |
SystemHalt(); | |
} | |
local_18 = 0x1000; | |
iVar2 = FUN_0800332e(DAT_08000ed4,&local_18); | |
if (iVar2 == 0) { | |
local_20 = 0x20; | |
local_1c = 0; | |
iVar2 = FUN_0800342c(DAT_08000ed4,&local_20); | |
if (iVar2 == 0) { | |
return; | |
} | |
// WARNING: Subroutine does not return | |
SystemHalt(); | |
} | |
// WARNING: Subroutine does not return | |
SystemHalt(); | |
} | |
void Configure_ADC_Channels(void) | |
{ | |
undefined4 *puVar1; | |
int iVar2; | |
undefined4 local_18; | |
undefined4 local_14; | |
undefined4 local_10; | |
undefined4 local_c; | |
puVar1 = DAT_08000f84; | |
local_18 = 0; | |
local_14 = 0; | |
local_10 = 0; | |
local_c = 0; | |
*DAT_08000f84 = DAT_08000f88; | |
puVar1[1] = 0x10000; | |
puVar1[2] = 0; | |
puVar1[4] = 1; | |
*(undefined1 *)(puVar1 + 6) = 0; | |
*(undefined1 *)(puVar1 + 8) = 0; | |
puVar1[0xb] = 0x10000000; | |
puVar1[10] = 0x8000000; | |
puVar1[3] = 0; | |
puVar1[7] = 4; | |
*(undefined1 *)(puVar1 + 0xc) = 1; | |
puVar1[5] = 0; | |
iVar2 = FUN_08003e74(); | |
if (iVar2 != 0) { | |
// WARNING: Subroutine does not return | |
SystemHalt(); | |
} | |
local_18 = 10; | |
local_14 = 1; | |
local_10 = 3; | |
iVar2 = FUN_08004244(DAT_08000f84,&local_18); | |
if (iVar2 != 0) { | |
// WARNING: Subroutine does not return | |
SystemHalt(); | |
} | |
local_18 = 0xb; | |
local_14 = 2; | |
iVar2 = FUN_08004244(DAT_08000f84,&local_18); | |
if (iVar2 != 0) { | |
// WARNING: Subroutine does not return | |
SystemHalt(); | |
} | |
local_18 = 8; | |
local_14 = 3; | |
iVar2 = FUN_08004244(DAT_08000f84,&local_18); | |
if (iVar2 == 0) { | |
local_18 = 4; | |
local_14 = 4; | |
iVar2 = FUN_08004244(DAT_08000f84,&local_18); | |
if (iVar2 == 0) { | |
return; | |
} | |
// WARNING: Subroutine does not return | |
SystemHalt(); | |
} | |
// WARNING: Subroutine does not return | |
SystemHalt(); | |
} | |
void Calibrate_ADC(void) | |
{ | |
undefined4 *puVar1; | |
int iVar2; | |
undefined4 local_20; | |
undefined4 local_1c; | |
undefined4 local_18; | |
undefined4 local_14; | |
undefined4 local_10; | |
undefined4 local_c; | |
puVar1 = DAT_08000ff0; | |
local_18 = 0; | |
local_14 = 0; | |
local_10 = 0; | |
local_c = 0; | |
local_20 = 0; | |
local_1c = 0; | |
*DAT_08000ff0 = DAT_08000ff4; | |
puVar1[1] = 0x54; | |
puVar1[2] = 0; | |
puVar1[3] = 500; | |
puVar1[4] = 0; | |
puVar1[6] = 0; | |
iVar2 = FUN_080032bc(); | |
if (iVar2 != 0) { | |
// WARNING: Subroutine does not return | |
SystemHalt(); | |
} | |
local_18 = 0x1000; | |
iVar2 = FUN_0800332e(DAT_08000ff0,&local_18); | |
if (iVar2 == 0) { | |
local_20 = 0x20; | |
local_1c = 0; | |
iVar2 = FUN_0800342c(DAT_08000ff0,&local_20); | |
if (iVar2 == 0) { | |
return; | |
} | |
// WARNING: Subroutine does not return | |
SystemHalt(); | |
} | |
// WARNING: Subroutine does not return | |
SystemHalt(); | |
} | |
void Init_ControlLEDs(void) | |
{ | |
undefined4 *puVar1; | |
int iVar2; | |
puVar1 = DAT_08001028; | |
*DAT_08001028 = 0x50000000; | |
*(undefined1 *)(puVar1 + 1) = 6; | |
*(undefined1 *)((int)puVar1 + 7) = 2; | |
*(undefined1 *)((int)puVar1 + 6) = 0; | |
*(undefined1 *)((int)puVar1 + 9) = 2; | |
*(undefined1 *)((int)puVar1 + 10) = 0; | |
*(undefined1 *)((int)puVar1 + 0xb) = 0; | |
*(undefined1 *)(puVar1 + 3) = 0; | |
*(undefined1 *)((int)puVar1 + 0xe) = 0; | |
*(undefined1 *)((int)puVar1 + 0xf) = 0; | |
iVar2 = FUN_0800562c(); | |
if (iVar2 == 0) { | |
return; | |
} | |
// WARNING: Subroutine does not return | |
SystemHalt(); | |
} | |
void Init_GPIO_Ports(void) | |
{ | |
int iVar1; | |
undefined4 local_50; | |
undefined4 local_4c; | |
undefined4 local_48; | |
undefined4 local_44; | |
undefined4 local_40; | |
undefined4 local_3c; | |
undefined4 local_38; | |
undefined4 local_24; | |
undefined4 local_20; | |
undefined4 local_1c; | |
undefined4 local_18; | |
undefined4 local_14; | |
undefined4 local_10; | |
undefined4 local_c; | |
FUN_08012484(&local_3c,0,0x34); | |
local_50 = 0; | |
local_4c = 0; | |
local_48 = 0; | |
local_44 = 0; | |
local_40 = 0; | |
*(uint *)(DAT_080010d0 + 0x40) = *(uint *)(DAT_080010d0 + 0x40) | 0x10000000; | |
*DAT_080010d4 = *DAT_080010d4 | 0xc000; | |
local_3c = 1; | |
local_38 = 0x10000; | |
local_24 = 2; | |
local_20 = 0x400000; | |
local_1c = 8; | |
local_18 = 0x150; | |
local_14 = 2; | |
local_10 = 7; | |
local_c = 2; | |
iVar1 = FUN_08002020(&local_3c); | |
if (iVar1 != 0) { | |
// WARNING: Subroutine does not return | |
SystemHalt(); | |
} | |
local_50 = 0xf; | |
local_4c = 2; | |
local_48 = 0; | |
local_44 = 0x1400; | |
local_40 = 0x1000; | |
iVar1 = FUN_08001870(&local_50,5); | |
if (iVar1 == 0) { | |
return; | |
} | |
// WARNING: Subroutine does not return | |
SystemHalt(); | |
} | |
void Setup_MIDI_UART(void) | |
{ | |
undefined4 *puVar1; | |
int iVar2; | |
puVar1 = DAT_08001104; | |
*DAT_08001104 = DAT_08001108; | |
puVar1[1] = 0x1c200; | |
puVar1[2] = 0; | |
puVar1[3] = 0; | |
puVar1[4] = 0; | |
puVar1[5] = 0xc; | |
puVar1[6] = 0; | |
puVar1[7] = 0; | |
iVar2 = FUN_08003742(); | |
if (iVar2 == 0) { | |
return; | |
} | |
// WARNING: Subroutine does not return | |
SystemHalt(); | |
} | |
// Main drum processing loop - handles sensor input and MIDI output | |
void DrumProcessor_Run(void) | |
{ | |
int initStatus; | |
// Enable ADC clock | |
*(uint *)(RCC_BASE + 0x40) = *(uint *)(RCC_BASE + 0x40) | 0x10000000; | |
// Start analog-to-digital conversion | |
ADC_StartConversion(); | |
// heck if DMA transfer completed | |
if (*(int *)(DMA1_BASE + 0x54) == EXPECTED_DMA_TRANSFER_SIZE) { | |
// eset DMA transfer counter | |
*(undefined4 *)(DMA1_BASE + 0x54) = 0; | |
// Trigger DMA complete callback | |
(**(code **)(DMA_CALLBACK_TABLE + 4))(); | |
do { | |
// WARNING: Do nothing block with infinite loop | |
// Fallback infinite loop if DMA fails | |
} while( true ); | |
} | |
// Hardware initialization sequence | |
Init_Timer3(); | |
Configure_DAC_Interface(); | |
Init_GPIO_Ports(); | |
Enable_ADC_DMA(); | |
Configure_DAC_DMA(); | |
Setup_MIDI_UART(); | |
Init_ClockSystem(); | |
Configure_ADC_Channels(); | |
Calibrate_ADC(); | |
Init_ControlLEDs(); | |
Enable_ButtonInterrupts(); | |
processDrumHits(); | |
initStatus = Init_AudioBuffer(AUDIO_BUFFER_ADDR,DEFAULT_BUFFER_SIZE,4); | |
if (initStatus != 0) { | |
// WARNING: Subroutine does not return | |
SystemHalt(); | |
} | |
DAC_UpdateOutput(DAC_CHANNEL_LEFT); | |
DAC_UpdateOutput(DAC_CHANNEL_RIGHT); | |
enableIRQinterrupts(); | |
do { | |
do { | |
} while (*sensorDataReadyFlag == '\0'); | |
processDrumHitsExtended(currentDrumKitProfile); | |
*sensorDataReadyFlag = '\0'; | |
} while( true ); | |
} | |
undefined4 FUN_080011d0(int param_1) | |
{ | |
undefined4 uVar1; | |
undefined4 local_18; | |
undefined4 uStack_14; | |
undefined4 local_10; | |
undefined4 uStack_c; | |
if (param_1 != 0) { | |
local_10 = *(undefined4 *)(DAT_08001204 + 0x20); | |
uStack_c = *(undefined4 *)(DAT_08001204 + 0x24); | |
local_18 = *(undefined4 *)(DAT_08001204 + 0x28); | |
uStack_14 = *(undefined4 *)(DAT_08001204 + 0x2c); | |
uVar1 = FUN_0800a028(param_1,&local_18); | |
return uVar1; | |
} | |
return 0; | |
} | |
int FUN_08001208(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
uint *puVar1; | |
int iVar2; | |
uint uVar3; | |
iVar2 = FUN_08009ed8(DAT_080012d8,1,param_2,param_4,param_4); | |
puVar1 = DAT_080012dc; | |
if (iVar2 == 0) { | |
FUN_0800a084(param_1,0x30,0x12); | |
} | |
else { | |
*DAT_080012dc = *DAT_080012dc | 0x40000000; | |
uVar3 = *DAT_080012d8; | |
puVar1[2] = uVar3; | |
puVar1[3] = uVar3; | |
puVar1 = DAT_080012e0; | |
*DAT_080012e0 = *DAT_080012e0 | 0x40000000; | |
puVar1[2] = uVar3 + 0xc; | |
puVar1[3] = uVar3 + 0xc; | |
puVar1 = DAT_080012e4; | |
*DAT_080012e4 = *DAT_080012e4 | 0x40000000; | |
puVar1[2] = uVar3 + 0x54; | |
puVar1[3] = uVar3 + 0x54; | |
puVar1 = DAT_080012e8; | |
*DAT_080012e8 = *DAT_080012e8 | 0x40000000; | |
puVar1[2] = uVar3 + 0xdc; | |
puVar1[3] = uVar3 + 0x9c; | |
puVar1 = DAT_080012ec; | |
*DAT_080012ec = *DAT_080012ec | 0x40000000; | |
puVar1[2] = uVar3 + 0x91c; | |
puVar1[3] = uVar3 + 0x91c; | |
puVar1 = DAT_080012f0; | |
*DAT_080012f0 = *DAT_080012f0 | 0x40000000; | |
puVar1[2] = uVar3 + 0x9dc; | |
puVar1[3] = uVar3 + 0x99c; | |
puVar1 = DAT_080012f4; | |
*DAT_080012f4 = *DAT_080012f4 | 0x40000000; | |
puVar1[2] = uVar3 + 0xa3c; | |
puVar1[3] = uVar3 + 0xa3c; | |
puVar1 = DAT_080012f8; | |
*DAT_080012f8 = *DAT_080012f8 | 0x40000000; | |
puVar1[2] = uVar3 + 0xa54; | |
puVar1[3] = uVar3 + 0xa54; | |
puVar1 = DAT_080012fc; | |
*DAT_080012fc = *DAT_080012fc | 0x40000000; | |
puVar1[2] = uVar3 + 0xad4; | |
puVar1[3] = uVar3 + 0xad4; | |
} | |
return iVar2; | |
} | |
int FUN_08001300(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
int iVar1; | |
int iVar2; | |
int iVar3; | |
int iVar4; | |
iVar2 = FUN_08009f80(DAT_08001378,1,param_2,param_4,param_4); | |
iVar1 = DAT_0800137c; | |
if (iVar2 == 0) { | |
FUN_0800a084(param_1,0x30,0x13); | |
} | |
else { | |
iVar4 = *DAT_08001378; | |
*(int *)(DAT_0800137c + 8) = iVar4; | |
*(int *)(iVar1 + 0xc) = iVar4; | |
iVar1 = DAT_08001380; | |
*(int *)(DAT_08001380 + 8) = iVar4 + 0x20c; | |
*(int *)(iVar1 + 0xc) = iVar4 + 0x20c; | |
iVar1 = DAT_08001384; | |
*(int *)(DAT_08001384 + 8) = iVar4 + 0x250; | |
*(int *)(iVar1 + 0xc) = iVar4 + 0x250; | |
iVar1 = DAT_08001388; | |
iVar3 = iVar4 + 0x3d0; | |
*(int *)(DAT_08001388 + 8) = iVar3; | |
*(int *)(iVar1 + 0xc) = iVar3; | |
iVar1 = DAT_0800138c; | |
*(int *)(DAT_0800138c + 8) = iVar3; | |
*(int *)(iVar1 + 0xc) = iVar3; | |
iVar1 = DAT_08001390; | |
*(int *)(DAT_08001390 + 8) = iVar4; | |
*(int *)(iVar1 + 0xc) = iVar4; | |
iVar1 = DAT_08001394; | |
*(int *)(DAT_08001394 + 8) = iVar3; | |
*(int *)(iVar1 + 0xc) = iVar3; | |
iVar1 = DAT_08001398; | |
*(int *)(DAT_08001398 + 8) = iVar4; | |
*(int *)(iVar1 + 0xc) = iVar4; | |
iVar1 = DAT_0800139c; | |
*(int *)(DAT_0800139c + 8) = iVar4 + 0x80; | |
*(int *)(iVar1 + 0xc) = iVar4 + 0x80; | |
iVar1 = DAT_080013a0; | |
*(int *)(DAT_080013a0 + 8) = iVar4 + 0x98; | |
*(int *)(iVar1 + 0xc) = iVar4 + 0x98; | |
} | |
return iVar2; | |
} | |
void FUN_080013a4(void) | |
{ | |
FUN_0800a06c(); | |
return; | |
} | |
void FUN_080013ac(undefined4 param_1,undefined4 param_2) | |
{ | |
FUN_0800a264(param_1,param_2,DAT_080013c8,1,5,0); | |
return; | |
} | |
void FUN_080013cc(int param_1) | |
{ | |
if (param_1 == 0) { | |
*DAT_080013e0 = DAT_080013e4; | |
} | |
FUN_0800a090(); | |
return; | |
} | |
void FUN_080013e8(int param_1) | |
{ | |
if (param_1 == 0) { | |
*DAT_080013fc = DAT_08001400; | |
} | |
FUN_0800a17c(); | |
return; | |
} | |
byte FUN_08001404(undefined4 param_1,undefined4 param_2) | |
{ | |
byte bVar1; | |
byte bVar2; | |
byte bVar3; | |
int iVar4; | |
iVar4 = FUN_0800a2e8(); | |
if (iVar4 == 0) { | |
bVar3 = 0; | |
} | |
else { | |
bVar1 = FUN_08001208(iVar4,param_2); | |
bVar2 = FUN_08001300(iVar4,param_2); | |
bVar3 = FUN_0800a484(param_1); | |
bVar3 = bVar3 & bVar1 & bVar2; | |
} | |
return bVar3; | |
} | |
uint FUN_08001434(undefined4 *param_1,int param_2,int param_3) | |
{ | |
uint uVar1; | |
int iVar2; | |
uint uVar3; | |
undefined1 auStack_50 [4]; | |
undefined1 auStack_4c [2]; | |
ushort local_4a; | |
undefined1 auStack_44 [2]; | |
ushort local_42; | |
uVar1 = FUN_080013ac(param_1,0); | |
if ((uVar1 & 0xff) == 0) { | |
iVar2 = FUN_080011d0(auStack_50); | |
if (iVar2 == 0) { | |
uVar1 = FUN_080013a4(*param_1); | |
} | |
else { | |
uVar3 = 0; | |
while (param_2 != 0) { | |
if (local_42 <= uVar3) { | |
uVar3 = 0; | |
goto LAB_08001498; | |
} | |
FUN_08009eb8(auStack_44,uVar3,*(undefined4 *)(param_2 + uVar3 * 4)); | |
uVar3 = uVar3 + 1 & 0xffff; | |
} | |
uVar3 = 0; | |
LAB_08001498: | |
for (; (param_3 != 0 && (uVar3 < local_4a)); uVar3 = uVar3 + 1 & 0xffff) { | |
FUN_08009eb8(auStack_4c,uVar3,*(undefined4 *)(param_3 + uVar3 * 4)); | |
} | |
iVar2 = FUN_08001404(*param_1,auStack_50); | |
if (iVar2 == 0) { | |
uVar1 = FUN_080013a4(*param_1); | |
} | |
} | |
} | |
return uVar1; | |
} | |
void FUN_080014c2(void) | |
{ | |
FUN_0800a4e4(); | |
return; | |
} | |
void ADC_Init(void) | |
{ | |
int iVar1; | |
iVar1 = ADC1; | |
*(uint *)(ADC1 + 0x44) = *(uint *)(ADC1 + 0x44) | 0x4000; | |
*(uint *)(iVar1 + 0x40) = *(uint *)(iVar1 + 0x40) | 0x10000000; | |
return; | |
} | |
// WARNING: Globals starting with '_' overlap smaller symbols at the same address | |
void ADC_Init(int *adcConfig) | |
{ | |
int i; | |
undefined4 local_24; | |
undefined4 local_20; | |
undefined4 local_1c; | |
undefined4 local_18; | |
undefined4 local_14; | |
undefined4 *rccReg; | |
local_1c = 0; | |
local_18 = 0; | |
local_14 = 0; | |
if (*adcConfig == 0x40012000) { | |
_DAT_40023844 = _DAT_40023844 | 0x100; | |
_DAT_40023830 = _DAT_40023830 | 7; | |
local_24 = 3; | |
local_20 = 3; | |
FUN_08002710(DAT_08001684,&local_24,_DAT_40023830,_DAT_40023830 & 2); | |
local_24 = 0x10; | |
local_20 = 3; | |
local_1c = 0; | |
FUN_08002710(DAT_08001688,&local_24); | |
local_24 = 1; | |
local_20 = 3; | |
local_1c = 0; | |
FUN_08002710(DAT_0800168c,&local_24); | |
rccReg = DAT_08001690; | |
*DAT_08001690 = DAT_08001694; | |
rccReg[1] = 0; | |
rccReg[2] = 0; | |
rccReg[3] = 0; | |
rccReg[4] = 0x400; | |
rccReg[5] = 0x1000; | |
rccReg[6] = 0x4000; | |
rccReg[7] = 0x100; | |
rccReg[8] = 0x20000; | |
rccReg[9] = 0; | |
i = FUN_080029e8(); | |
rccReg = DAT_08001690; | |
if (i != 0) { | |
// WARNING: Subroutine does not return | |
SystemHalt(); | |
} | |
adcConfig[0xe] = (int)DAT_08001690; | |
rccReg[0xe] = adcConfig; | |
FUN_08002e78(0x12,0); | |
FUN_08002e98(0x12); | |
} | |
return; | |
} | |
void FUN_08001698(int *param_1) | |
{ | |
int iVar1; | |
iVar1 = DAT_08001708; | |
if (*param_1 == DAT_08001700) { | |
*(uint *)(DAT_08001708 + 0x40) = *(uint *)(DAT_08001708 + 0x40) | 2; | |
FUN_08002e78(0x1d,0,0,*(uint *)(iVar1 + 0x40) & 2); | |
FUN_08002e98(0x1d); | |
} | |
else if (*param_1 == DAT_08001704) { | |
*(uint *)(DAT_08001708 + 0x40) = *(uint *)(DAT_08001708 + 0x40) | 4; | |
FUN_08002e78(0x1e,2,0,*(uint *)(iVar1 + 0x40) & 4); | |
FUN_08002e98(0x1e); | |
} | |
return; | |
} | |
void FUN_0800170c(int *param_1) | |
{ | |
undefined4 *puVar1; | |
int iVar2; | |
undefined4 local_24; | |
undefined4 local_20; | |
undefined4 local_1c; | |
undefined4 local_18; | |
undefined4 local_14; | |
iVar2 = DAT_080017b8; | |
local_1c = 0; | |
if (*param_1 == DAT_080017b8) { | |
*(uint *)(DAT_080017b8 + 0x1f440) = *(uint *)(DAT_080017b8 + 0x1f440) | 0x20000; | |
*(uint *)(iVar2 + 0x1f430) = *(uint *)(iVar2 + 0x1f430) | 1; | |
local_24 = 0xc; | |
local_20 = 2; | |
local_18 = 3; | |
local_14 = 7; | |
FUN_08002710(DAT_080017bc,&local_24); | |
puVar1 = DAT_080017c0; | |
*DAT_080017c0 = DAT_080017c4; | |
puVar1[1] = 0x8000000; | |
puVar1[2] = 0x40; | |
puVar1[3] = 0; | |
puVar1[4] = 0x400; | |
puVar1[5] = 0; | |
puVar1[6] = 0; | |
puVar1[7] = 0; | |
puVar1[8] = 0; | |
puVar1[9] = 0; | |
iVar2 = FUN_080029e8(); | |
puVar1 = DAT_080017c0; | |
if (iVar2 != 0) { | |
// WARNING: Subroutine does not return | |
SystemHalt(); | |
} | |
param_1[0xe] = (int)DAT_080017c0; | |
puVar1[0xe] = param_1; | |
FUN_08002e78(0x26,3,0); | |
FUN_08002e98(0x26); | |
} | |
return; | |
} | |
void FUN_080017c8(int *param_1) | |
{ | |
int iVar1; | |
int iVar2; | |
uint uVar3; | |
undefined4 local_80 [23]; | |
undefined4 local_24; | |
undefined4 local_20; | |
undefined4 local_1c; | |
undefined4 local_18; | |
undefined4 local_14; | |
local_24 = 0; | |
local_20 = 0; | |
local_1c = 0; | |
local_18 = 0; | |
local_14 = 0; | |
FUN_08012484(local_80,0,0x5c); | |
if (*param_1 == 0x50000000) { | |
local_80[0] = 0x100; | |
iVar2 = FUN_08001a1c(local_80); | |
iVar1 = DAT_08001868; | |
if (iVar2 != 0) { | |
// WARNING: Subroutine does not return | |
SystemHalt(); | |
} | |
*(uint *)(DAT_08001868 + 0x30) = *(uint *)(DAT_08001868 + 0x30) | 1; | |
uVar3 = *(uint *)(iVar1 + 0x30) & 1; | |
local_24 = 0x1800; | |
local_20 = 2; | |
local_1c = 0; | |
local_18 = 3; | |
local_14 = 10; | |
FUN_08002710(DAT_0800186c,&local_24); | |
*(uint *)(iVar1 + 0x34) = *(uint *)(iVar1 + 0x34) | 0x80; | |
*(uint *)(iVar1 + 0x44) = *(uint *)(iVar1 + 0x44) | 0x4000; | |
FUN_08002e78(0x43,0,0,*(uint *)(iVar1 + 0x44) & 0x4000,uVar3); | |
FUN_08002e98(0x43); | |
} | |
return; | |
} | |
undefined4 FUN_08001870(uint *param_1,uint param_2) | |
{ | |
uint *puVar1; | |
int iVar2; | |
int iVar3; | |
undefined4 uVar4; | |
uint uVar5; | |
puVar1 = DAT_080019bc; | |
if (param_1 == (uint *)0x0) { | |
return 1; | |
} | |
if (((*DAT_080019bc & 0xf) < param_2) && | |
(*(char *)DAT_080019bc = (char)param_2, (*puVar1 & 0xf) != param_2)) { | |
return 1; | |
} | |
if ((*param_1 & 2) != 0) { | |
if ((*param_1 & 4) != 0) { | |
DAT_080019c0[2] = DAT_080019c0[2] | 0x1c00; | |
} | |
if ((*param_1 & 8) != 0) { | |
DAT_080019c0[2] = DAT_080019c0[2] | 0xe000; | |
} | |
DAT_080019c0[2] = DAT_080019c0[2] & 0xffffff0f | param_1[2]; | |
} | |
if ((*param_1 & 1) == 0) { | |
LAB_08001940: | |
puVar1 = DAT_080019bc; | |
if ((param_2 < (*DAT_080019bc & 0xf)) && | |
(*(char *)DAT_080019bc = (char)param_2, (*puVar1 & 0xf) != param_2)) { | |
return 1; | |
} | |
if ((*param_1 & 4) != 0) { | |
DAT_080019c0[2] = DAT_080019c0[2] & 0xffffe3ff | param_1[3]; | |
} | |
if ((*param_1 & 8) != 0) { | |
DAT_080019c0[2] = DAT_080019c0[2] & 0xffff1fff | param_1[4] << 3; | |
} | |
uVar5 = FUN_08001e90(); | |
*DAT_080019c8 = uVar5 >> *(sbyte *)(DAT_080019c4 + ((DAT_080019c0[2] << 0x18) >> 0x1c)); | |
FUN_08002ec8(*DAT_080019cc); | |
uVar4 = 0; | |
} | |
else { | |
uVar5 = param_1[1]; | |
if (uVar5 == 1) { | |
if ((*DAT_080019c0 & 0x20000) == 0) { | |
return 1; | |
} | |
} | |
else if (uVar5 - 2 < 2) { | |
if ((*DAT_080019c0 & 0x2000000) == 0) { | |
return 1; | |
} | |
} | |
else if ((*DAT_080019c0 & 2) == 0) { | |
return 1; | |
} | |
DAT_080019c0[2] = uVar5 | DAT_080019c0[2] & 0xfffffffc; | |
iVar2 = getCurrentTime(); | |
do { | |
if ((DAT_080019c0[2] & 0xc) == param_1[1] * 4) goto LAB_08001940; | |
iVar3 = getCurrentTime(); | |
} while ((uint)(iVar3 - iVar2) < 0x1389); | |
uVar4 = 3; | |
} | |
return uVar4; | |
} | |
undefined4 FUN_080019d0(void) | |
{ | |
return *DAT_080019d8; | |
} | |
uint FUN_080019dc(void) | |
{ | |
uint uVar1; | |
uVar1 = FUN_080019d0(); | |
return uVar1 >> *(sbyte *)(DAT_080019f8 + ((uint)(*(int *)(DAT_080019f4 + 8) << 0x13) >> 0x1d)); | |
} | |
uint FUN_080019fc(void) | |
{ | |
uint uVar1; | |
uVar1 = FUN_080019d0(); | |
return uVar1 >> *(sbyte *)(DAT_08001a18 + ((uint)(*(int *)(DAT_08001a14 + 8) << 0x10) >> 0x1d)); | |
} | |
undefined4 FUN_08001a1c(uint *param_1) | |
{ | |
uint *puVar1; | |
int iVar2; | |
int iVar3; | |
uint uVar4; | |
uint uVar5; | |
uint uVar6; | |
uVar6 = *param_1 & 1; | |
if (uVar6 != 0) { | |
DAT_08001c84[0x23] = DAT_08001c84[0x23] & 0xf9ffffff | param_1[0xe]; | |
if (param_1[0xe] == 0) { | |
uVar6 = 1; | |
} | |
else { | |
uVar6 = 0; | |
} | |
} | |
if (((*param_1 & 2) != 0) && | |
(DAT_08001c84[0x23] = DAT_08001c84[0x23] & 0xe7ffffff | param_1[0xf], param_1[0xf] == 0)) { | |
uVar6 = 1; | |
} | |
uVar5 = *param_1 & 4; | |
if (uVar5 != 0) { | |
DAT_08001c84[0x23] = DAT_08001c84[0x23] & 0xffcfffff | param_1[0xc]; | |
if (param_1[0xc] == 0x100000) { | |
uVar6 = 1; | |
} | |
if (param_1[0xc] == 0) { | |
uVar5 = 1; | |
} | |
else { | |
uVar5 = 0; | |
} | |
} | |
if ((*param_1 & 8) != 0) { | |
DAT_08001c84[0x23] = DAT_08001c84[0x23] & 0xff3fffff | param_1[0xd]; | |
if (param_1[0xd] == 0x400000) { | |
uVar6 = 1; | |
} | |
if (param_1[0xd] == 0) { | |
uVar5 = 1; | |
} | |
} | |
if ((*param_1 & 0x20) != 0) { | |
DAT_08001c84[0x10] = DAT_08001c84[0x10] | 0x10000000; | |
*DAT_08001c8c = *DAT_08001c8c | 0x100; | |
iVar2 = getCurrentTime(); | |
while (iVar3 = DAT_08001c90, puVar1 = DAT_08001c84, (*DAT_08001c8c & 0x100) == 0) { | |
iVar3 = getCurrentTime(); | |
if (2 < (uint)(iVar3 - iVar2)) { | |
return 3; | |
} | |
} | |
if (((DAT_08001c84[0x1c] & 0x300) != 0) && | |
((param_1[0x10] & 0x300) != (DAT_08001c84[0x1c] & 0x300))) { | |
uVar4 = DAT_08001c84[0x1c]; | |
*(undefined4 *)(DAT_08001c90 + 0xe40) = 1; | |
*(undefined4 *)(iVar3 + 0xe40) = 0; | |
puVar1[0x1c] = uVar4 & 0xfffffcff; | |
if ((puVar1[0x1c] & 1) != 0) { | |
iVar2 = getCurrentTime(); | |
while ((DAT_08001c84[0x1c] & 2) == 0) { | |
iVar3 = getCurrentTime(); | |
if (5000 < (uint)(iVar3 - iVar2)) { | |
return 3; | |
} | |
} | |
} | |
} | |
if ((param_1[0x10] & 0x300) == 0x300) { | |
DAT_08001c84[2] = param_1[0x10] & 0xffffcff | DAT_08001c84[2] & 0xffe0ffff; | |
} | |
else { | |
DAT_08001c84[2] = DAT_08001c84[2] & 0xffe0ffff; | |
} | |
DAT_08001c84[0x1c] = DAT_08001c84[0x1c] | param_1[0x10] & 0xfff; | |
} | |
if ((*param_1 & 0x10) != 0) { | |
*(uint *)(DAT_08001c88 + 0x1e0) = (uint)(byte)param_1[0x16]; | |
} | |
if ((*param_1 & 0x80) != 0) { | |
DAT_08001c84[0x25] = DAT_08001c84[0x25] & 0xff3fffff | param_1[0x13]; | |
} | |
if ((*param_1 & 0x40) != 0) { | |
DAT_08001c84[0x25] = DAT_08001c84[0x25] & 0xfbffffff | param_1[0x12]; | |
} | |
if (((*param_1 & 0x100) != 0) && | |
(DAT_08001c84[0x25] = DAT_08001c84[0x25] & 0xf7ffffff | param_1[0x15], | |
param_1[0x15] == 0x8000000)) { | |
uVar5 = 1; | |
} | |
if ((*param_1 & 0x200) != 0) { | |
DAT_08001c84[0x25] = DAT_08001c84[0x25] & 0xefffffff | param_1[0x11]; | |
} | |
if (((((*param_1 & 0x400) != 0) && | |
(DAT_08001c84[0x25] = DAT_08001c84[0x25] & 0xdfffffff | param_1[0x14], | |
param_1[0x14] == 0x20000000)) || (uVar6 != 0)) || (*param_1 == 0x800)) { | |
*(undefined4 *)(DAT_08001c90 + 0x68) = 0; | |
iVar2 = getCurrentTime(); | |
while ((*DAT_08001c84 & 0x8000000) != 0) { | |
iVar3 = getCurrentTime(); | |
if (2 < (uint)(iVar3 - iVar2)) { | |
return 3; | |
} | |
} | |
if ((((*param_1 & 1) != 0) && (param_1[0xe] == 0)) || | |
(((*param_1 & 2) != 0 && (param_1[0xf] == 0)))) { | |
DAT_08001e88[0x21] = | |
param_1[1] | param_1[2] << 6 | DAT_08001e88[0x21] & 0x30000 | | |
DAT_08001e88[0x21] & 0xf000000 | param_1[5] << 0x1c; | |
} | |
puVar1 = DAT_08001e88; | |
if ((((*param_1 & 4) != 0) && (param_1[0xc] == 0x100000)) || | |
(((*param_1 & 8) != 0 && (param_1[0xd] == 0x400000)))) { | |
DAT_08001e88[0x21] = | |
param_1[1] | param_1[2] << 6 | DAT_08001e88[0x21] & 0x30000 | param_1[4] << 0x18 | | |
DAT_08001e88[0x21] & 0x70000000; | |
puVar1[0x23] = puVar1[0x23] & 0xffffffe0 | param_1[10] - 1; | |
} | |
if (((*param_1 & 0x400) != 0) && (param_1[0x14] == 0x20000000)) { | |
DAT_08001e88[0x21] = | |
param_1[1] | param_1[2] << 6 | ((param_1[3] >> 1) - 1) * 0x10000 | | |
(((DAT_08001e88[0x21] << 0xe) >> 0x1e) + 1) * 0x2000000 | DAT_08001e88[0x21] & 0x70000000 | |
; | |
} | |
if ((*param_1 & 0x800) != 0) { | |
DAT_08001e88[0x21] = | |
param_1[1] | param_1[2] << 6 | ((param_1[3] >> 1) - 1) * 0x10000 | param_1[4] << 0x18 | | |
param_1[5] << 0x1c; | |
} | |
*(undefined4 *)(DAT_08001e8c + 0x68) = 1; | |
iVar2 = getCurrentTime(); | |
while ((*DAT_08001e88 & 0x8000000) == 0) { | |
iVar3 = getCurrentTime(); | |
if (2 < (uint)(iVar3 - iVar2)) { | |
return 3; | |
} | |
} | |
} | |
if (uVar5 != 1) { | |
return 0; | |
} | |
*(undefined4 *)(DAT_08001e8c + 0x70) = 0; | |
iVar2 = getCurrentTime(); | |
do { | |
puVar1 = DAT_08001e88; | |
if ((*DAT_08001e88 & 0x20000000) == 0) { | |
if ((((*param_1 & 4) != 0) && (param_1[0xc] == 0)) || | |
(((*param_1 & 8) != 0 && (param_1[0xd] == 0)))) { | |
DAT_08001e88[0x22] = | |
param_1[6] | param_1[7] << 6 | DAT_08001e88[0x22] & 0x30000 | param_1[9] << 0x18; | |
puVar1[0x23] = puVar1[0x23] & 0xffffe0ff | (param_1[0xb] - 1) * 0x100; | |
} | |
if (((*param_1 & 0x100) != 0) && (param_1[0x15] == 0x8000000)) { | |
DAT_08001e88[0x22] = | |
param_1[6] | param_1[7] << 6 | ((param_1[8] >> 1) - 1) * 0x10000 | | |
DAT_08001e88[0x22] & 0xf000000; | |
} | |
*(undefined4 *)(DAT_08001e8c + 0x70) = 1; | |
iVar2 = getCurrentTime(); | |
do { | |
if ((*DAT_08001e88 & 0x20000000) != 0) { | |
return 0; | |
} | |
iVar3 = getCurrentTime(); | |
} while ((uint)(iVar3 - iVar2) < 3); | |
return 3; | |
} | |
iVar3 = getCurrentTime(); | |
} while ((uint)(iVar3 - iVar2) < 3); | |
return 3; | |
} | |
uint FUN_08001e90(void) | |
{ | |
uint uVar1; | |
undefined4 in_r3; | |
uint uVar2; | |
uVar2 = *(uint *)(DAT_08002014 + 8) & 0xc; | |
if (uVar2 == 8) { | |
uVar2 = *(uint *)(DAT_08002014 + 4) & 0x3f; | |
if ((*(uint *)(DAT_08002014 + 4) & 0x400000) == 0) { | |
uVar1 = (uint)(*(int *)(DAT_08002014 + 4) << 0x11) >> 0x17; | |
uVar1 = FUN_08000ca8(uVar1 * 16000000, | |
(((uint)(uVar1 * 0x20 < uVar1) * -0x3f - | |
(uint)(uVar1 * 0x7c0 < uVar1 * 0x1f)) * 8 + | |
(uint)CARRY4(uVar1 * 0x3d08,uVar1)) * 0x400 | uVar1 * 0x3d09 >> 0x16, | |
uVar2,0,in_r3); | |
} | |
else { | |
uVar1 = (uint)(*(int *)(DAT_08002014 + 4) << 0x11) >> 0x17; | |
uVar1 = FUN_08000ca8(uVar1 * 8000000, | |
(((uint)(uVar1 * 0x20 < uVar1) * -0x3f - | |
(uint)(uVar1 * 0x7c0 < uVar1 * 0x1f)) * 8 + | |
(uint)CARRY4(uVar1 * 0x3d08,uVar1)) * 0x200,uVar2,0,in_r3); | |
} | |
uVar1 = uVar1 / ((((uint)(*(int *)(DAT_08002014 + 4) << 0xe) >> 0x1e) + 1) * 2); | |
} | |
else if (uVar2 == 0xc) { | |
uVar2 = *(uint *)(DAT_08002014 + 4) & 0x3f; | |
if ((*(uint *)(DAT_08002014 + 4) & 0x400000) == 0) { | |
uVar1 = (uint)(*(int *)(DAT_08002014 + 4) << 0x11) >> 0x17; | |
uVar1 = FUN_08000ca8(uVar1 * 16000000, | |
(((uint)(uVar1 * 0x20 < uVar1) * -0x3f - | |
(uint)(uVar1 * 0x7c0 < uVar1 * 0x1f)) * 8 + | |
(uint)CARRY4(uVar1 * 0x3d08,uVar1)) * 0x400 | uVar1 * 0x3d09 >> 0x16, | |
uVar2,0,in_r3); | |
} | |
else { | |
uVar1 = (uint)(*(int *)(DAT_08002014 + 4) << 0x11) >> 0x17; | |
uVar1 = FUN_08000ca8(uVar1 * 8000000, | |
(((uint)(uVar1 * 0x20 < uVar1) * -0x3f - | |
(uint)(uVar1 * 0x7c0 < uVar1 * 0x1f)) * 8 + | |
(uint)CARRY4(uVar1 * 0x3d08,uVar1)) * 0x200,uVar2,0,in_r3); | |
} | |
uVar1 = uVar1 / ((uint)(*(int *)(DAT_08002014 + 4) << 1) >> 0x1d); | |
} | |
else { | |
uVar1 = DAT_0800201c; | |
if (uVar2 == 4) { | |
uVar1 = DAT_08002018; | |
} | |
} | |
return uVar1; | |
} | |
undefined4 FUN_08002020(uint *param_1) | |
{ | |
uint *puVar1; | |
uint *puVar2; | |
int iVar3; | |
int iVar4; | |
undefined4 uVar5; | |
uint uVar6; | |
bool bVar7; | |
puVar1 = DAT_0800229c; | |
if (param_1 == (uint *)0x0) { | |
return 1; | |
} | |
if ((*param_1 & 1) != 0) { | |
if ((((DAT_0800229c[2] & 0xc) == 4) || | |
(((DAT_0800229c[2] & 0xc) == 8 && ((DAT_0800229c[1] & 0x400000) != 0)))) || | |
(((DAT_0800229c[2] & 0xc) == 0xc && ((DAT_0800229c[1] & 0x400000) != 0)))) { | |
if (((*DAT_0800229c & 0x20000) != 0) && (param_1[1] == 0)) { | |
return 1; | |
} | |
} | |
else { | |
if (param_1[1] == 0x10000) { | |
*DAT_0800229c = *DAT_0800229c | 0x10000; | |
} | |
else if (param_1[1] == 0x50000) { | |
*DAT_0800229c = *DAT_0800229c | 0x40000; | |
*puVar1 = *puVar1 | 0x10000; | |
} | |
else { | |
*DAT_0800229c = *DAT_0800229c & 0xfffeffff; | |
*puVar1 = *puVar1 & 0xfffbffff; | |
} | |
if (param_1[1] == 0) { | |
iVar3 = getCurrentTime(); | |
while ((*DAT_0800229c & 0x20000) != 0) { | |
iVar4 = getCurrentTime(); | |
if (100 < (uint)(iVar4 - iVar3)) { | |
return 3; | |
} | |
} | |
} | |
else { | |
iVar3 = getCurrentTime(); | |
while ((*DAT_0800229c & 0x20000) == 0) { | |
iVar4 = getCurrentTime(); | |
if (100 < (uint)(iVar4 - iVar3)) { | |
return 3; | |
} | |
} | |
} | |
} | |
} | |
if ((*param_1 & 2) != 0) { | |
if ((((DAT_0800229c[2] & 0xc) == 0) || | |
(((DAT_0800229c[2] & 0xc) == 8 && ((DAT_0800229c[1] & 0x400000) == 0)))) || | |
(((DAT_0800229c[2] & 0xc) == 0xc && ((DAT_0800229c[1] & 0x400000) == 0)))) { | |
if (((*DAT_0800229c & 2) != 0) && (param_1[3] != 1)) { | |
return 1; | |
} | |
*DAT_0800229c = *DAT_0800229c & 0xffffff07 | param_1[4] << 3; | |
} | |
else if (param_1[3] == 0) { | |
*DAT_080022a0 = 0; | |
iVar3 = getCurrentTime(); | |
while ((*DAT_0800229c & 2) != 0) { | |
iVar4 = getCurrentTime(); | |
if (2 < (uint)(iVar4 - iVar3)) { | |
return 3; | |
} | |
} | |
} | |
else { | |
*DAT_080022a0 = 1; | |
iVar3 = getCurrentTime(); | |
while ((*DAT_0800229c & 2) == 0) { | |
iVar4 = getCurrentTime(); | |
if (2 < (uint)(iVar4 - iVar3)) { | |
return 3; | |
} | |
} | |
*DAT_0800229c = *DAT_0800229c & 0xffffff07 | param_1[4] << 3; | |
} | |
} | |
if ((*param_1 & 8) != 0) { | |
if (param_1[5] == 0) { | |
DAT_080022a0[0x3a0] = 0; | |
iVar3 = getCurrentTime(); | |
while ((DAT_0800229c[0x1d] & 2) != 0) { | |
iVar4 = getCurrentTime(); | |
if (2 < (uint)(iVar4 - iVar3)) { | |
return 3; | |
} | |
} | |
} | |
else { | |
DAT_080022a0[0x3a0] = 1; | |
iVar3 = getCurrentTime(); | |
while ((DAT_0800229c[0x1d] & 2) == 0) { | |
iVar4 = getCurrentTime(); | |
if (2 < (uint)(iVar4 - iVar3)) { | |
return 3; | |
} | |
} | |
} | |
} | |
if ((*param_1 & 4) != 0) { | |
bVar7 = (DAT_0800229c[0x10] & 0x10000000) == 0; | |
if (bVar7) { | |
DAT_0800229c[0x10] = DAT_0800229c[0x10] | 0x10000000; | |
} | |
if ((*DAT_080022a4 & 0x100) == 0) { | |
*DAT_08002458 = *DAT_08002458 | 0x100; | |
iVar3 = getCurrentTime(); | |
while ((*DAT_08002458 & 0x100) == 0) { | |
iVar4 = getCurrentTime(); | |
if (2 < (uint)(iVar4 - iVar3)) { | |
return 3; | |
} | |
} | |
} | |
puVar2 = DAT_0800245c; | |
puVar1 = DAT_0800229c; | |
if (param_1[2] == 1) { | |
DAT_0800245c[0x1c] = DAT_0800245c[0x1c] | 1; | |
} | |
else if (param_1[2] == 5) { | |
DAT_0800245c[0x1c] = DAT_0800245c[0x1c] | 4; | |
puVar2[0x1c] = puVar2[0x1c] | 1; | |
} | |
else { | |
DAT_0800229c[0x1c] = DAT_0800229c[0x1c] & 0xfffffffe; | |
puVar1[0x1c] = puVar1[0x1c] & 0xfffffffb; | |
} | |
if (param_1[2] == 0) { | |
iVar3 = getCurrentTime(); | |
while ((DAT_0800245c[0x1c] & 2) != 0) { | |
iVar4 = getCurrentTime(); | |
if (5000 < (uint)(iVar4 - iVar3)) { | |
return 3; | |
} | |
} | |
} | |
else { | |
iVar3 = getCurrentTime(); | |
while ((DAT_0800229c[0x1c] & 2) == 0) { | |
iVar4 = getCurrentTime(); | |
if (5000 < (uint)(iVar4 - iVar3)) { | |
return 3; | |
} | |
} | |
} | |
if (bVar7) { | |
DAT_0800245c[0x10] = DAT_0800245c[0x10] & 0xefffffff; | |
} | |
} | |
uVar6 = param_1[6]; | |
if (uVar6 == 0) { | |
uVar5 = 0; | |
} | |
else if ((DAT_0800245c[2] & 0xc) == 8) { | |
if (uVar6 == 1) { | |
uVar5 = 1; | |
} | |
else { | |
uVar6 = DAT_0800245c[1]; | |
if ((uVar6 & 0x400000) == param_1[7]) { | |
if ((uVar6 & 0x3f) == param_1[8]) { | |
if ((uVar6 & 0x7fc0) == param_1[9] * 0x40) { | |
if ((uVar6 & 0x30000) == ((param_1[10] >> 1) - 1) * 0x10000) { | |
if ((uVar6 & 0xf000000) == param_1[0xb] * 0x1000000) { | |
if ((uVar6 & 0x70000000) == param_1[0xc] * 0x10000000) { | |
uVar5 = 0; | |
} | |
else { | |
uVar5 = 1; | |
} | |
} | |
else { | |
uVar5 = 1; | |
} | |
} | |
else { | |
uVar5 = 1; | |
} | |
} | |
else { | |
uVar5 = 1; | |
} | |
} | |
else { | |
uVar5 = 1; | |
} | |
} | |
else { | |
uVar5 = 1; | |
} | |
} | |
} | |
else if (uVar6 == 2) { | |
*(undefined4 *)(DAT_08002460 + 0x60) = 0; | |
iVar3 = getCurrentTime(); | |
do { | |
if ((*DAT_0800245c & 0x2000000) == 0) { | |
DAT_0800245c[1] = | |
param_1[7] | param_1[8] | param_1[9] << 6 | ((param_1[10] >> 1) - 1) * 0x10000 | | |
param_1[0xb] << 0x18 | param_1[0xc] << 0x1c; | |
*(undefined4 *)(DAT_08002460 + 0x60) = 1; | |
iVar3 = getCurrentTime(); | |
do { | |
if ((*DAT_0800245c & 0x2000000) != 0) { | |
return 0; | |
} | |
iVar4 = getCurrentTime(); | |
} while ((uint)(iVar4 - iVar3) < 3); | |
return 3; | |
} | |
iVar4 = getCurrentTime(); | |
} while ((uint)(iVar4 - iVar3) < 3); | |
uVar5 = 3; | |
} | |
else { | |
*(undefined4 *)(DAT_08002460 + 0x60) = 0; | |
iVar3 = getCurrentTime(); | |
do { | |
if ((*DAT_0800245c & 0x2000000) == 0) { | |
return 0; | |
} | |
iVar4 = getCurrentTime(); | |
} while ((uint)(iVar4 - iVar3) < 3); | |
uVar5 = 3; | |
} | |
return uVar5; | |
} | |
void FUN_08002464(undefined4 *param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
int iVar1; | |
iVar1 = DAT_08002490; | |
*(uint *)(DAT_08002490 + 0x10) = *(uint *)(DAT_08002490 + 0x10) & 0xfffffcff; | |
*(uint *)(iVar1 + 0x10) = *(uint *)(iVar1 + 0x10) | 0x300; | |
*(uint *)(iVar1 + 0x10) = *(uint *)(iVar1 + 0x10) | 1; | |
*param_1 = param_3; | |
InstructionSynchronizationBarrier(0xf); | |
param_1[1] = param_4; | |
return; | |
} | |
void FUN_08002494(undefined4 *param_1,undefined4 param_2) | |
{ | |
int iVar1; | |
iVar1 = DAT_080024b4; | |
*(uint *)(DAT_080024b4 + 0x10) = *(uint *)(DAT_080024b4 + 0x10) & 0xfffffcff; | |
*(uint *)(iVar1 + 0x10) = *(uint *)(iVar1 + 0x10) | 0x200; | |
*(uint *)(iVar1 + 0x10) = *(uint *)(iVar1 + 0x10) | 1; | |
*param_1 = param_2; | |
return; | |
} | |
void FUN_080024b8(undefined2 *param_1,undefined2 param_2) | |
{ | |
int iVar1; | |
iVar1 = DAT_080024d8; | |
*(uint *)(DAT_080024d8 + 0x10) = *(uint *)(DAT_080024d8 + 0x10) & 0xfffffcff; | |
*(uint *)(iVar1 + 0x10) = *(uint *)(iVar1 + 0x10) | 0x100; | |
*(uint *)(iVar1 + 0x10) = *(uint *)(iVar1 + 0x10) | 1; | |
*param_1 = param_2; | |
return; | |
} | |
void FUN_080024dc(undefined1 *param_1,undefined1 param_2) | |
{ | |
int iVar1; | |
iVar1 = DAT_080024f8; | |
*(uint *)(DAT_080024f8 + 0x10) = *(uint *)(DAT_080024f8 + 0x10) & 0xfffffcff; | |
*(undefined4 *)(iVar1 + 0x10) = *(undefined4 *)(iVar1 + 0x10); | |
*(uint *)(iVar1 + 0x10) = *(uint *)(iVar1 + 0x10) | 1; | |
*param_1 = param_2; | |
return; | |
} | |
void FUN_080024fc(void) | |
{ | |
if ((*(uint *)(DAT_0800259c + 0xc) & 0x10) != 0) { | |
*(uint *)(DAT_080025a0 + 0x1c) = *(uint *)(DAT_080025a0 + 0x1c) | 0x10; | |
*(undefined4 *)(DAT_0800259c + 0xc) = 0x10; | |
} | |
if ((*(uint *)(DAT_0800259c + 0xc) & 0x20) != 0) { | |
*(uint *)(DAT_080025a0 + 0x1c) = *(uint *)(DAT_080025a0 + 0x1c) | 8; | |
*(undefined4 *)(DAT_0800259c + 0xc) = 0x20; | |
} | |
if ((*(uint *)(DAT_0800259c + 0xc) & 0x40) != 0) { | |
*(uint *)(DAT_080025a0 + 0x1c) = *(uint *)(DAT_080025a0 + 0x1c) | 4; | |
*(undefined4 *)(DAT_0800259c + 0xc) = 0x40; | |
} | |
if ((*(uint *)(DAT_0800259c + 0xc) & 0x80) != 0) { | |
*(uint *)(DAT_080025a0 + 0x1c) = *(uint *)(DAT_080025a0 + 0x1c) | 2; | |
*(undefined4 *)(DAT_0800259c + 0xc) = 0x80; | |
} | |
if ((*(uint *)(DAT_0800259c + 0xc) & 0x100) != 0) { | |
*(uint *)(DAT_080025a0 + 0x1c) = *(uint *)(DAT_080025a0 + 0x1c) | 1; | |
*(undefined4 *)(DAT_0800259c + 0xc) = 0x100; | |
} | |
if ((*(uint *)(DAT_0800259c + 0xc) & 2) != 0) { | |
*(uint *)(DAT_080025a0 + 0x1c) = *(uint *)(DAT_080025a0 + 0x1c) | 0x20; | |
*(undefined4 *)(DAT_0800259c + 0xc) = 2; | |
} | |
return; | |
} | |
undefined4 FUN_080025a4(void) | |
{ | |
int iVar1; | |
int iVar2; | |
iVar2 = DAT_080025d0; | |
iVar1 = DAT_080025cc; | |
if (-1 < *(int *)(DAT_080025cc + 0x10)) { | |
return 0; | |
} | |
*(int *)(DAT_080025cc + 4) = DAT_080025d0; | |
*(int *)(iVar1 + 4) = iVar2 + -0x77777778; | |
if (-1 < *(int *)(iVar1 + 0x10)) { | |
return 0; | |
} | |
return 1; | |
} | |
undefined4 FUN_080025d4(void) | |
{ | |
*(uint *)(DAT_080025e4 + 0x10) = *(uint *)(DAT_080025e4 + 0x10) | 0x80000000; | |
return 0; | |
} | |
undefined4 FUN_080025e8(uint param_1) | |
{ | |
int iVar1; | |
int iVar2; | |
*(undefined4 *)(DAT_08002640 + 0x1c) = 0; | |
iVar1 = getCurrentTime(); | |
while ((*(uint *)(DAT_08002644 + 0xc) & 0x10000) != 0) { | |
if ((param_1 != 0xffffffff) && | |
((param_1 == 0 || (iVar2 = getCurrentTime(), param_1 < (uint)(iVar2 - iVar1))))) { | |
return 3; | |
} | |
} | |
if ((*(uint *)(DAT_08002644 + 0xc) & 1) != 0) { | |
*(undefined4 *)(DAT_08002644 + 0xc) = 1; | |
} | |
if ((*(uint *)(DAT_08002644 + 0xc) & 0x1f2) == 0) { | |
return 0; | |
} | |
FUN_080024fc(); | |
return 1; | |
} | |
int FUN_08002648(int param_1,undefined4 param_2,uint param_3,undefined4 param_4) | |
{ | |
int iVar1; | |
undefined8 uVar2; | |
undefined4 uVar3; | |
if (*(char *)(DAT_080026bc + 0x18) == '\x01') { | |
iVar1 = 2; | |
} | |
else { | |
*(undefined1 *)(DAT_080026bc + 0x18) = 1; | |
uVar3 = param_4; | |
uVar2 = FUN_080025e8(50000); | |
iVar1 = (int)uVar2; | |
if (iVar1 == 0) { | |
if (param_1 == 0) { | |
FUN_080024dc(param_2,param_3 & 0xff); | |
} | |
else if (param_1 == 1) { | |
FUN_080024b8(param_2,param_3 & 0xffff); | |
} | |
else if (param_1 == 2) { | |
FUN_08002494(param_2,param_3); | |
} | |
else { | |
FUN_08002464(param_2,(int)((ulonglong)uVar2 >> 0x20),param_3,param_4,uVar3); | |
} | |
iVar1 = FUN_080025e8(50000); | |
*(uint *)(DAT_080026c0 + 0x10) = *(uint *)(DAT_080026c0 + 0x10) & 0xfffffffe; | |
} | |
*(undefined1 *)(DAT_080026bc + 0x18) = 0; | |
} | |
return iVar1; | |
} | |
void FUN_080026c4(int param_1,uint param_2) | |
{ | |
int iVar1; | |
iVar1 = DAT_0800270c; | |
if (param_2 == 1) { | |
param_2 = 0x100; | |
} | |
else if (param_2 == 2) { | |
param_2 = 0x200; | |
} | |
else if (param_2 != 0) { | |
param_2 = 0x300; | |
} | |
*(uint *)(DAT_0800270c + 0x10) = *(uint *)(DAT_0800270c + 0x10) & 0xfffffcff; | |
*(uint *)(iVar1 + 0x10) = *(uint *)(iVar1 + 0x10) | param_2; | |
*(uint *)(iVar1 + 0x10) = *(uint *)(iVar1 + 0x10) & 0xffffff07; | |
*(uint *)(iVar1 + 0x10) = *(uint *)(iVar1 + 0x10) | param_1 << 3 | 2; | |
*(uint *)(iVar1 + 0x10) = *(uint *)(iVar1 + 0x10) | 0x10000; | |
return; | |
} | |
// WARNING: Removing unreachable block (ram,0x080028de) | |
void FUN_08002710(uint *param_1,uint *param_2) | |
{ | |
uint *puVar1; | |
uint *puVar2; | |
uint uVar3; | |
int iVar4; | |
uint uVar5; | |
uint uVar6; | |
uint uVar7; | |
int iVar8; | |
uVar5 = 0; | |
do { | |
uVar3 = 1 << (uVar5 & 0xff); | |
uVar7 = *param_2 & uVar3; | |
if ((uVar3 & ~*param_2) == 0) { | |
if ((param_2[1] & 3) - 1 < 2) { | |
param_1[2] = param_2[3] << (uVar5 << 1 & 0xff) | param_1[2] & ~(3 << (uVar5 << 1 & 0xff)); | |
param_1[1] = ((param_2[1] << 0x1b) >> 0x1f) << (uVar5 & 0xff) | param_1[1] & ~uVar3; | |
} | |
if ((param_2[1] & 3) != 3) { | |
param_1[3] = param_2[2] << (uVar5 << 1 & 0xff) | param_1[3] & ~(3 << (uVar5 << 1 & 0xff)); | |
} | |
if ((param_2[1] & 3) == 2) { | |
iVar8 = (uVar5 >> 3) + 8; | |
iVar4 = (uVar5 & 7) << 2; | |
param_1[iVar8] = param_2[4] << iVar4 | param_1[iVar8] & ~(0xf << iVar4); | |
} | |
*param_1 = (param_2[1] & 3) << (uVar5 << 1 & 0xff) | *param_1 & ~(3 << (uVar5 << 1 & 0xff)); | |
if ((param_2[1] & 0x30000) != 0) { | |
*(uint *)(DAT_080028e8 + 0x44) = *(uint *)(DAT_080028e8 + 0x44) | 0x4000; | |
iVar8 = (uVar5 & 3) << 2; | |
if (param_1 == DAT_080028ec) { | |
iVar4 = 0; | |
} | |
else if (param_1 == DAT_080028ec + 0x100) { | |
iVar4 = 1; | |
} | |
else if (param_1 == DAT_080028ec + 0x200) { | |
iVar4 = 2; | |
} | |
else if (param_1 == DAT_080028ec + 0x300) { | |
iVar4 = 3; | |
} | |
else if (param_1 == DAT_080028ec + 0x400) { | |
iVar4 = 4; | |
} | |
else if (param_1 == DAT_080028ec + 0x500) { | |
iVar4 = 5; | |
} | |
else if (param_1 == DAT_080028ec + 0x600) { | |
iVar4 = 6; | |
} | |
else { | |
iVar4 = 7; | |
} | |
*(uint *)(DAT_080028e0 + ((uVar5 >> 2) + 2) * 4) = | |
iVar4 << iVar8 | *(uint *)(DAT_080028e0 + ((uVar5 >> 2) + 2) * 4) & ~(0xf << iVar8); | |
puVar1 = DAT_080028e4; | |
uVar3 = ~uVar7; | |
uVar6 = DAT_080028e4[2] & ~uVar7; | |
if ((param_2[1] & 0x100000) != 0) { | |
uVar6 = uVar7 | DAT_080028e4[2]; | |
} | |
DAT_080028e4[2] = uVar6; | |
puVar2 = DAT_080028e4; | |
uVar6 = uVar3 & puVar1[3]; | |
if ((param_2[1] & 0x200000) != 0) { | |
uVar6 = uVar7 | puVar1[3]; | |
} | |
DAT_080028e4[3] = uVar6; | |
puVar1 = DAT_080028e4; | |
uVar6 = uVar3 & puVar2[1]; | |
if ((param_2[1] & 0x20000) != 0) { | |
uVar6 = uVar7 | puVar2[1]; | |
} | |
DAT_080028e4[1] = uVar6; | |
uVar3 = uVar3 & *puVar1; | |
if ((param_2[1] & 0x10000) != 0) { | |
uVar3 = uVar7 | *puVar1; | |
} | |
*DAT_080028e4 = uVar3; | |
} | |
} | |
uVar5 = uVar5 + 1; | |
} while (uVar5 < 0x10); | |
return; | |
} | |
void FUN_080028f0(int *param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
*(uint *)*param_1 = *(uint *)*param_1 & 0xfffbffff; | |
*(undefined4 *)(*param_1 + 4) = param_4; | |
if (param_1[2] == 0x40) { | |
*(undefined4 *)(*param_1 + 8) = param_3; | |
*(undefined4 *)(*param_1 + 0xc) = param_2; | |
} | |
else { | |
*(undefined4 *)(*param_1 + 8) = param_2; | |
*(undefined4 *)(*param_1 + 0xc) = param_3; | |
} | |
return; | |
} | |
uint FUN_0800291c(uint *param_1) | |
{ | |
uint uVar1; | |
uint uVar2; | |
uVar2 = *param_1; | |
uVar1 = (uVar2 & 0xff) - 0x10; | |
param_1[0x17] = | |
(uint)*(byte *)(DAT_08002954 + (uint)((ulonglong)DAT_08002950 * (ulonglong)uVar1 >> 0x24)); | |
if (uVar1 < 0x60) { | |
param_1[0x16] = uVar2 & 0xfffffc00; | |
} | |
else { | |
param_1[0x16] = (uVar2 & 0xfffffc00) + 4; | |
} | |
return param_1[0x16]; | |
} | |
undefined4 FUN_08002958(int param_1) | |
{ | |
uint uVar1; | |
uVar1 = *(uint *)(param_1 + 0x28); | |
if (*(int *)(param_1 + 0x18) == 0) { | |
if (uVar1 == 1) { | |
if (*(int *)(param_1 + 0x2c) == 0x1800000) { | |
return 1; | |
} | |
return 0; | |
} | |
if ((uVar1 != 2) && (uVar1 != 0)) { | |
return 0; | |
} | |
if ((*(uint *)(param_1 + 0x2c) & 0x1000000) != 0) { | |
return 1; | |
} | |
return 0; | |
} | |
if (*(int *)(param_1 + 0x18) == 0x2000) { | |
switch(uVar1) { | |
case 0: | |
case 2: | |
return 1; | |
case 1: | |
goto switchD_080029a2_caseD_1; | |
case 3: | |
if (*(int *)(param_1 + 0x2c) == 0x1800000) { | |
return 1; | |
} | |
return 0; | |
default: | |
return 0; | |
} | |
} | |
if (2 < uVar1) { | |
if (uVar1 != 3) { | |
return 0; | |
} | |
if ((*(uint *)(param_1 + 0x2c) & 0x1000000) != 0) { | |
return 1; | |
} | |
return 0; | |
} | |
return 1; | |
switchD_080029a2_caseD_1: | |
if ((*(uint *)(param_1 + 0x2c) & 0x1000000) != 0) { | |
return 1; | |
} | |
return 0; | |
} | |
undefined4 FUN_080029e8(int *param_1) | |
{ | |
int iVar1; | |
int iVar2; | |
undefined4 uVar3; | |
uint uVar4; | |
uint *puVar5; | |
iVar1 = getCurrentTime(); | |
if (param_1 == (int *)0x0) { | |
uVar3 = 1; | |
} | |
else { | |
*(undefined1 *)((int)param_1 + 0x35) = 2; | |
*(undefined1 *)(param_1 + 0xd) = 0; | |
*(uint *)*param_1 = *(uint *)*param_1 & 0xfffffffe; | |
do { | |
puVar5 = (uint *)*param_1; | |
if ((*puVar5 & 1) == 0) { | |
uVar4 = param_1[1] | param_1[2] | param_1[3] | param_1[4] | param_1[5] | param_1[6] | | |
param_1[7] | param_1[8] | DAT_08002ab0 & *puVar5; | |
if (param_1[9] == 4) { | |
uVar4 = uVar4 | param_1[0xb] | param_1[0xc]; | |
} | |
*puVar5 = uVar4; | |
iVar1 = *param_1; | |
uVar4 = *(uint *)(iVar1 + 0x14) & 0xfffffff8 | param_1[9]; | |
if (((param_1[9] == 4) && (uVar4 = uVar4 | param_1[10], param_1[0xb] != 0)) && | |
(iVar2 = FUN_08002958(param_1), iVar2 != 0)) { | |
param_1[0x15] = 0x40; | |
*(undefined1 *)((int)param_1 + 0x35) = 1; | |
return 1; | |
} | |
*(uint *)(iVar1 + 0x14) = uVar4; | |
iVar1 = FUN_0800291c(param_1); | |
*(int *)(iVar1 + 8) = 0x3f << (param_1[0x17] & 0xffU); | |
param_1[0x15] = 0; | |
*(undefined1 *)((int)param_1 + 0x35) = 1; | |
return 0; | |
} | |
iVar2 = getCurrentTime(); | |
} while ((uint)(iVar2 - iVar1) < 6); | |
param_1[0x15] = 0x20; | |
uVar3 = 3; | |
*(undefined1 *)((int)param_1 + 0x35) = 3; | |
} | |
return uVar3; | |
} | |
undefined4 FUN_08002ab4(undefined4 *param_1) | |
{ | |
undefined4 uVar1; | |
int iVar2; | |
iVar2 = param_1[0x16]; | |
if (*(char *)(param_1 + 0xd) == '\x01') { | |
uVar1 = 2; | |
} | |
else { | |
*(undefined1 *)(param_1 + 0xd) = 1; | |
if (*(char *)((int)param_1 + 0x35) == '\x01') { | |
*(undefined1 *)((int)param_1 + 0x35) = 2; | |
param_1[0x15] = 0; | |
FUN_080028f0(param_1); | |
*(int *)(iVar2 + 8) = 0x3f << (param_1[0x17] & 0xff); | |
*(uint *)*param_1 = *(uint *)*param_1 | 0x16; | |
if (param_1[0x10] != 0) { | |
*(uint *)*param_1 = *(uint *)*param_1 | 8; | |
} | |
*(uint *)*param_1 = *(uint *)*param_1 | 1; | |
uVar1 = 0; | |
} | |
else { | |
*(undefined1 *)(param_1 + 0xd) = 0; | |
uVar1 = 2; | |
} | |
} | |
return uVar1; | |
} | |
undefined4 FUN_08002b1e(int *param_1) | |
{ | |
int iVar1; | |
undefined4 uVar2; | |
int iVar3; | |
int iVar4; | |
iVar4 = param_1[0x16]; | |
iVar1 = getCurrentTime(); | |
if (*(char *)((int)param_1 + 0x35) == '\x02') { | |
*(uint *)*param_1 = *(uint *)*param_1 & 0xffffffe9; | |
*(uint *)(*param_1 + 0x14) = *(uint *)(*param_1 + 0x14) & 0xffffff7f; | |
if ((param_1[0x10] != 0) || (param_1[0x12] != 0)) { | |
*(uint *)*param_1 = *(uint *)*param_1 & 0xfffffff7; | |
} | |
*(uint *)*param_1 = *(uint *)*param_1 & 0xfffffffe; | |
do { | |
if ((*(uint *)*param_1 & 1) == 0) { | |
*(int *)(iVar4 + 8) = 0x3f << (param_1[0x17] & 0xffU); | |
*(undefined1 *)((int)param_1 + 0x35) = 1; | |
*(undefined1 *)(param_1 + 0xd) = 0; | |
return 0; | |
} | |
iVar3 = getCurrentTime(); | |
} while ((uint)(iVar3 - iVar1) < 6); | |
param_1[0x15] = 0x20; | |
uVar2 = 3; | |
*(undefined1 *)((int)param_1 + 0x35) = 3; | |
*(undefined1 *)(param_1 + 0xd) = 0; | |
} | |
else { | |
param_1[0x15] = 0x80; | |
*(undefined1 *)(param_1 + 0xd) = 0; | |
uVar2 = 1; | |
} | |
return uVar2; | |
} | |
undefined4 FUN_08002bb2(undefined4 *param_1) | |
{ | |
if (*(char *)((int)param_1 + 0x35) != '\x02') { | |
param_1[0x15] = 0x80; | |
return 1; | |
} | |
*(undefined1 *)((int)param_1 + 0x35) = 5; | |
*(uint *)*param_1 = *(uint *)*param_1 & 0xfffffffe; | |
return 0; | |
} | |
void ADC_HandleConversionComplete(int *param_1) | |
{ | |
ulonglong uVar1; | |
uint *puVar2; | |
uint uVar3; | |
uint uVar4; | |
uint uVar5; | |
uint *puVar6; | |
uint local_1c; | |
local_1c = 0; | |
uVar4 = *DAT_08002dac; | |
uVar1 = (ulonglong)DAT_08002db0; | |
puVar6 = (uint *)param_1[0x16]; | |
uVar5 = *puVar6; | |
if (((8 << (param_1[0x17] & 0xffU) & uVar5) != 0) && | |
(puVar2 = (uint *)*param_1, (*puVar2 & 4) != 0)) { | |
*puVar2 = *puVar2 & 0xfffffffb; | |
puVar6[2] = 8 << (param_1[0x17] & 0xffU); | |
param_1[0x15] = param_1[0x15] | 1; | |
} | |
uVar3 = 1 << (param_1[0x17] & 0xffU); | |
if (((uVar3 & uVar5) != 0) && ((*(uint *)(*param_1 + 0x14) & 0x80) != 0)) { | |
puVar6[2] = uVar3; | |
param_1[0x15] = param_1[0x15] | 2; | |
} | |
uVar3 = 4 << (param_1[0x17] & 0xffU); | |
if (((uVar3 & uVar5) != 0) && ((*(uint *)*param_1 & 2) != 0)) { | |
puVar6[2] = uVar3; | |
param_1[0x15] = param_1[0x15] | 4; | |
} | |
uVar3 = 0x10 << (param_1[0x17] & 0xffU); | |
if (((uVar3 & uVar5) != 0) && ((*(uint *)*param_1 & 8) != 0)) { | |
puVar6[2] = uVar3; | |
puVar2 = (uint *)*param_1; | |
if ((*puVar2 & 0x40000) == 0) { | |
if ((*puVar2 & 0x100) == 0) { | |
*puVar2 = *puVar2 & 0xfffffff7; | |
} | |
if ((code *)param_1[0x10] != (code *)0x0) { | |
(*(code *)param_1[0x10])(param_1); | |
} | |
} | |
else if ((*puVar2 & 0x80000) == 0) { | |
if ((code *)param_1[0x10] != (code *)0x0) { | |
(*(code *)param_1[0x10])(param_1); | |
} | |
} | |
else if ((code *)param_1[0x12] != (code *)0x0) { | |
(*(code *)param_1[0x12])(param_1); | |
} | |
} | |
uVar3 = 0x20 << (param_1[0x17] & 0xffU); | |
if (((uVar3 & uVar5) != 0) && ((*(uint *)*param_1 & 0x10) != 0)) { | |
puVar6[2] = uVar3; | |
if (*(char *)((int)param_1 + 0x35) == '\x05') { | |
*(uint *)*param_1 = *(uint *)*param_1 & 0xffffffe9; | |
*(uint *)(*param_1 + 0x14) = *(uint *)(*param_1 + 0x14) & 0xffffff7f; | |
if ((param_1[0x10] != 0) || (param_1[0x12] != 0)) { | |
*(uint *)*param_1 = *(uint *)*param_1 & 0xfffffff7; | |
} | |
puVar6[2] = 0x3f << (param_1[0x17] & 0xffU); | |
*(undefined1 *)((int)param_1 + 0x35) = 1; | |
*(undefined1 *)(param_1 + 0xd) = 0; | |
if ((code *)param_1[0x14] == (code *)0x0) { | |
return; | |
} | |
(*(code *)param_1[0x14])(param_1); | |
return; | |
} | |
puVar6 = (uint *)*param_1; | |
if ((*puVar6 & 0x40000) == 0) { | |
if ((*puVar6 & 0x100) == 0) { | |
*puVar6 = *puVar6 & 0xffffffef; | |
*(undefined1 *)((int)param_1 + 0x35) = 1; | |
*(undefined1 *)(param_1 + 0xd) = 0; | |
} | |
if ((code *)param_1[0xf] != (code *)0x0) { | |
(*(code *)param_1[0xf])(param_1); | |
} | |
} | |
else if ((*puVar6 & 0x80000) == 0) { | |
if ((code *)param_1[0x11] != (code *)0x0) { | |
(*(code *)param_1[0x11])(param_1); | |
} | |
} | |
else if ((code *)param_1[0xf] != (code *)0x0) { | |
(*(code *)param_1[0xf])(param_1); | |
} | |
} | |
if (param_1[0x15] != 0) { | |
if ((param_1[0x15] & 1U) != 0) { | |
*(undefined1 *)((int)param_1 + 0x35) = 5; | |
*(uint *)*param_1 = *(uint *)*param_1 & 0xfffffffe; | |
do { | |
local_1c = local_1c + 1; | |
if ((uint)(uVar1 * uVar4 >> 0x2a) < local_1c) break; | |
} while ((*(uint *)*param_1 & 1) != 0); | |
*(undefined1 *)((int)param_1 + 0x35) = 1; | |
*(undefined1 *)(param_1 + 0xd) = 0; | |
} | |
if ((code *)param_1[0x13] != (code *)0x0) { | |
(*(code *)param_1[0x13])(param_1); | |
} | |
} | |
return; | |
} | |
void ADC_StartConversion(void) | |
{ | |
*(undefined4 *)(ADC1 + 0x20) = 1; | |
return; | |
} | |
void FUN_08002dd0(uint param_1) | |
{ | |
if (-1 < (int)param_1) { | |
*(int *)(DAT_08002de8 + (param_1 >> 5) * 4) = 1 << (param_1 & 0x1f); | |
} | |
return; | |
} | |
void FUN_08002dec(uint param_1,int param_2) | |
{ | |
if (-1 < (int)param_1) { | |
*(char *)(param_1 + 0xe000e400) = (char)(param_2 << 4); | |
return; | |
} | |
*(char *)(DAT_08002e10 + (param_1 & 0xf)) = (char)(param_2 << 4); | |
return; | |
} | |
uint FUN_08002e14(uint param_1,uint param_2,uint param_3) | |
{ | |
uint uVar1; | |
param_1 = param_1 & 7; | |
uVar1 = 7 - param_1; | |
if (3 < uVar1) { | |
uVar1 = 4; | |
} | |
if (param_1 + 4 < 7) { | |
param_1 = 0; | |
} | |
else { | |
param_1 = param_1 - 3; | |
} | |
return (param_2 & ~(-1 << (uVar1 & 0xff))) << (param_1 & 0xff) | | |
param_3 & ~(-1 << (param_1 & 0xff)); | |
} | |
void DAC_Init(uint param_1) | |
{ | |
*(uint *)(DAC_CR + 0xc) = *(uint *)(DAC_CR + 0xc) & 0xf8ff | (param_1 & 7) << 8 | 0x5fa0000; | |
return; | |
} | |
void FUN_08002e78(undefined4 param_1) | |
{ | |
undefined4 uVar1; | |
uVar1 = FUN_08002e14((uint)(*(int *)(DAT_08002e94 + 0xc) << 0x15) >> 0x1d); | |
FUN_08002dec(param_1,uVar1); | |
return; | |
} | |
void FUN_08002e98(void) | |
{ | |
FUN_08002dd0(); | |
return; | |
} | |
// WARNING: Globals starting with '_' overlap smaller symbols at the same address | |
undefined4 configureSysExInterrupt(int priority) | |
{ | |
if (priority - 1U < 0x1000000) { | |
_DAT_e000e014 = priority - 1U; | |
*(undefined1 *)(DAT_08002ec4 + 0x23) = 0xf0; | |
_sysExStatus = 0; | |
_sysExConfig = 7; | |
return 0; | |
} | |
return 1; | |
} | |
undefined4 FUN_08002ec8(uint param_1) | |
{ | |
int iVar1; | |
undefined4 uVar2; | |
iVar1 = configureSysExInterrupt(*DAT_08002f0c / (1000 / *DAT_08002f08)); | |
if (iVar1 == 0) { | |
if (param_1 < 0x10) { | |
FUN_08002e78(0xffffffff,param_1,0); | |
*DAT_08002f10 = param_1; | |
uVar2 = 0; | |
} | |
else { | |
uVar2 = 1; | |
} | |
} | |
else { | |
uVar2 = 1; | |
} | |
return uVar2; | |
} | |
undefined4 Configure_DAC_Interface(void) | |
{ | |
uint *puVar1; | |
puVar1 = DAT_08002f44; | |
*DAT_08002f44 = *DAT_08002f44 | 0x200; | |
*puVar1 = *puVar1 | 0x400; | |
*puVar1 = *puVar1 | 0x100; | |
DAC_Init(3); | |
FUN_08002ec8(0xf); | |
ADC_Init(); | |
return 0; | |
} | |
void FUN_08002f48(void) | |
{ | |
*DAT_08002f58 = (uint)*DAT_08002f5c + *DAT_08002f58; | |
return; | |
} | |
undefined4 getCurrentTime(void) | |
{ | |
return *DAT_08002f68; | |
} | |
void FUN_08002f6c(uint param_1) | |
{ | |
int iVar1; | |
int iVar2; | |
iVar1 = getCurrentTime(); | |
if (param_1 != 0xffffffff) { | |
param_1 = param_1 + *DAT_08002f90; | |
} | |
do { | |
iVar2 = getCurrentTime(); | |
} while ((uint)(iVar2 - iVar1) < param_1); | |
return; | |
} | |
void FUN_08002f94(int param_1,uint param_2,int param_3) | |
{ | |
uint uVar1; | |
uVar1 = *(uint *)(param_1 + 0x20); | |
*(uint *)(param_1 + 0x20) = *(uint *)(param_1 + 0x20) & 0xfffffffe; | |
*(uint *)(param_1 + 0x18) = *(uint *)(param_1 + 0x18) & 0xffffff0f | param_3 << 4; | |
*(uint *)(param_1 + 0x20) = uVar1 & 0xfffffff5 | param_2; | |
return; | |
} | |
void FUN_08002fba(int param_1,int param_2,int param_3) | |
{ | |
uint uVar1; | |
uVar1 = *(uint *)(param_1 + 0x20); | |
*(uint *)(param_1 + 0x20) = *(uint *)(param_1 + 0x20) & 0xffffffef; | |
*(uint *)(param_1 + 0x18) = *(uint *)(param_1 + 0x18) & 0xffff0fff | param_3 << 0xc; | |
*(uint *)(param_1 + 0x20) = uVar1 & 0xffffff5f | param_2 << 4; | |
return; | |
} | |
void FUN_08002fe2(int param_1,uint param_2) | |
{ | |
*(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) & 0xffffff8f | param_2 | 7; | |
return; | |
} | |
undefined4 DAC_UpdateOutput(int *param_1) | |
{ | |
uint *puVar1; | |
if (*(char *)((int)param_1 + 0x3d) != '\x01') { | |
return 1; | |
} | |
*(undefined1 *)((int)param_1 + 0x3d) = 2; | |
*(uint *)(*param_1 + 0xc) = *(uint *)(*param_1 + 0xc) | 1; | |
puVar1 = (uint *)*param_1; | |
if (((((puVar1 != DAT_08003078) && (puVar1 != (uint *)0x40000000)) && | |
(puVar1 != DAT_08003078 + -0x3f00)) && | |
((puVar1 != DAT_08003078 + -0x3e00 && (puVar1 != DAT_08003078 + -0x3d00)))) && | |
((puVar1 != DAT_08003078 + 0x100 && | |
((puVar1 != DAT_08003078 + 0x1000 && (puVar1 != DAT_08003078 + -0x3a00)))))) { | |
*puVar1 = *puVar1 | 1; | |
return 0; | |
} | |
if ((puVar1[2] & 7) != 6) { | |
*puVar1 = *puVar1 | 1; | |
return 0; | |
} | |
return 0; | |
} | |
void FUN_0800307c(void) | |
{ | |
return; | |
} | |
void FUN_0800307e(void) | |
{ | |
return; | |
} | |
void FUN_08003080(void) | |
{ | |
return; | |
} | |
void FUN_08003082(void) | |
{ | |
return; | |
} | |
void FUN_08003084(int *param_1) | |
{ | |
int iVar1; | |
uint uVar2; | |
uint uVar3; | |
iVar1 = *param_1; | |
uVar3 = *(uint *)(iVar1 + 0xc); | |
uVar2 = *(uint *)(iVar1 + 0x10); | |
if (((uVar2 & 2) != 0) && ((uVar3 & 2) != 0)) { | |
*(undefined4 *)(iVar1 + 0x10) = 0xfffffffd; | |
*(undefined1 *)(param_1 + 7) = 1; | |
if ((*(uint *)(*param_1 + 0x18) & 3) == 0) { | |
FUN_0800307c(); | |
FUN_08003080(param_1); | |
} | |
else { | |
FUN_0800307e(); | |
} | |
*(undefined1 *)(param_1 + 7) = 0; | |
} | |
if (((uVar2 & 4) != 0) && ((uVar3 & 4) != 0)) { | |
*(undefined4 *)(*param_1 + 0x10) = 0xfffffffb; | |
*(undefined1 *)(param_1 + 7) = 2; | |
if ((*(uint *)(*param_1 + 0x18) & 0x300) == 0) { | |
FUN_0800307c(param_1); | |
FUN_08003080(param_1); | |
} | |
else { | |
FUN_0800307e(param_1); | |
} | |
*(undefined1 *)(param_1 + 7) = 0; | |
} | |
if (((uVar2 & 8) != 0) && ((uVar3 & 8) != 0)) { | |
*(undefined4 *)(*param_1 + 0x10) = 0xfffffff7; | |
*(undefined1 *)(param_1 + 7) = 4; | |
if ((*(uint *)(*param_1 + 0x1c) & 3) == 0) { | |
FUN_0800307c(param_1); | |
FUN_08003080(param_1); | |
} | |
else { | |
FUN_0800307e(param_1); | |
} | |
*(undefined1 *)(param_1 + 7) = 0; | |
} | |
if (((uVar2 & 0x10) != 0) && ((uVar3 & 0x10) != 0)) { | |
*(undefined4 *)(*param_1 + 0x10) = 0xffffffef; | |
*(undefined1 *)(param_1 + 7) = 8; | |
if ((*(uint *)(*param_1 + 0x1c) & 0x300) == 0) { | |
FUN_0800307c(param_1); | |
FUN_08003080(param_1); | |
} | |
else { | |
FUN_0800307e(param_1); | |
} | |
*(undefined1 *)(param_1 + 7) = 0; | |
} | |
if (((uVar2 & 1) != 0) && ((uVar3 & 1) != 0)) { | |
*(undefined4 *)(*param_1 + 0x10) = 0xfffffffe; | |
FUN_08000e54(param_1); | |
} | |
if (((uVar2 & 0x80) != 0) && ((uVar3 & 0x80) != 0)) { | |
*(undefined4 *)(*param_1 + 0x10) = 0xffffff7f; | |
FUN_080034ba(param_1); | |
} | |
if (((uVar2 & 0x40) != 0) && ((uVar3 & 0x40) != 0)) { | |
*(undefined4 *)(*param_1 + 0x10) = 0xffffffbf; | |
FUN_08003082(param_1); | |
} | |
if (((uVar2 & 0x20) != 0) && ((uVar3 & 0x20) != 0)) { | |
*(undefined4 *)(*param_1 + 0x10) = 0xffffffdf; | |
FUN_080034b8(param_1); | |
} | |
return; | |
} | |
void FUN_080031e4(uint *param_1,uint *param_2) | |
{ | |
uint uVar1; | |
uVar1 = *param_1; | |
if (((((param_1 == DAT_080032b8) || (param_1 == (uint *)0x40000000)) || | |
(param_1 == DAT_080032b8 + -0x3f00)) || | |
((param_1 == DAT_080032b8 + -0x3e00 || (param_1 == DAT_080032b8 + -0x3d00)))) || | |
(param_1 == DAT_080032b8 + 0x100)) { | |
uVar1 = uVar1 & 0xffffff8f | param_2[1]; | |
} | |
if (((((param_1 == DAT_080032b8) || (param_1 == (uint *)0x40000000)) || | |
((param_1 == DAT_080032b8 + -0x3f00 || | |
(((param_1 == DAT_080032b8 + -0x3e00 || (param_1 == DAT_080032b8 + -0x3d00)) || | |
(param_1 == DAT_080032b8 + 0x100)))))) || | |
((param_1 == DAT_080032b8 + 0x1000 || (param_1 == DAT_080032b8 + 0x1100)))) || | |
((param_1 == DAT_080032b8 + 0x1200 || | |
(((param_1 == DAT_080032b8 + -0x3a00 || (param_1 == DAT_080032b8 + -0x3900)) || | |
(param_1 == DAT_080032b8 + -0x3800)))))) { | |
uVar1 = uVar1 & 0xfffffcff | param_2[3]; | |
} | |
*param_1 = uVar1 & 0xffffff7f | param_2[5]; | |
param_1[0xb] = param_2[2]; | |
param_1[10] = *param_2; | |
if ((param_1 == DAT_080032b8) || (param_1 == DAT_080032b8 + 0x100)) { | |
param_1[0xc] = param_2[4]; | |
} | |
param_1[5] = 1; | |
if ((param_1[4] & 1) != 0) { | |
param_1[4] = param_1[4] & 0xfffffffe; | |
} | |
return; | |
} | |
undefined4 FUN_080032bc(undefined4 *param_1) | |
{ | |
if (param_1 != (undefined4 *)0x0) { | |
if (*(char *)((int)param_1 + 0x3d) == '\0') { | |
*(undefined1 *)(param_1 + 0xf) = 0; | |
FUN_08001698(); | |
} | |
*(undefined1 *)((int)param_1 + 0x3d) = 2; | |
FUN_080031e4(*param_1,param_1 + 1); | |
*(undefined1 *)((int)param_1 + 0x46) = 1; | |
*(undefined1 *)((int)param_1 + 0x3e) = 1; | |
*(undefined1 *)((int)param_1 + 0x3f) = 1; | |
*(undefined1 *)(param_1 + 0x10) = 1; | |
*(undefined1 *)((int)param_1 + 0x41) = 1; | |
*(undefined1 *)((int)param_1 + 0x42) = 1; | |
*(undefined1 *)((int)param_1 + 0x43) = 1; | |
*(undefined1 *)(param_1 + 0x11) = 1; | |
*(undefined1 *)((int)param_1 + 0x45) = 1; | |
*(undefined1 *)((int)param_1 + 0x3d) = 1; | |
return 0; | |
} | |
return 1; | |
} | |
void FUN_08003314(int param_1,uint param_2,uint param_3,int param_4) | |
{ | |
*(uint *)(param_1 + 8) = param_3 | param_4 << 8 | param_2 | *(uint *)(param_1 + 8) & 0xffff00ff; | |
return; | |
} | |
undefined4 FUN_0800332e(int *param_1,uint *param_2) | |
{ | |
undefined4 uVar1; | |
uint uVar2; | |
if ((char)param_1[0xf] == '\x01') { | |
return 2; | |
} | |
*(undefined1 *)(param_1 + 0xf) = 1; | |
*(undefined1 *)((int)param_1 + 0x3d) = 2; | |
*(uint *)(*param_1 + 8) = *(uint *)(*param_1 + 8) & 0xffff0088; | |
uVar2 = *param_2; | |
if (uVar2 == 0x60) { | |
FUN_08002fba(*param_1,param_2[1],param_2[3]); | |
FUN_08002fe2(*param_1,0x60); | |
uVar1 = 0; | |
} | |
else if (uVar2 < 0x61) { | |
if (uVar2 == 0x40) { | |
FUN_08002f94(*param_1,param_2[1],param_2[3]); | |
FUN_08002fe2(*param_1,0x40); | |
uVar1 = 0; | |
} | |
else if (uVar2 < 0x41) { | |
if (uVar2 != 0x20) { | |
if (uVar2 < 0x21) { | |
if ((uVar2 != 0) && (uVar2 != 0x10)) { | |
uVar1 = 1; | |
goto LAB_080033cc; | |
} | |
} | |
else if (uVar2 != 0x30) { | |
uVar1 = 1; | |
goto LAB_080033cc; | |
} | |
} | |
FUN_08002fe2(*param_1,uVar2); | |
uVar1 = 0; | |
} | |
else if (uVar2 == 0x50) { | |
FUN_08002f94(*param_1,param_2[1],param_2[3]); | |
FUN_08002fe2(*param_1,0x50); | |
uVar1 = 0; | |
} | |
else { | |
uVar1 = 1; | |
} | |
} | |
else if (uVar2 == 0x1000) { | |
uVar1 = 0; | |
} | |
else if (uVar2 == 0x2000) { | |
FUN_08003314(*param_1,param_2[2],param_2[1],param_2[3]); | |
*(uint *)(*param_1 + 8) = *(uint *)(*param_1 + 8) | 0x4000; | |
uVar1 = 0; | |
} | |
else if (uVar2 == 0x70) { | |
FUN_08003314(*param_1,param_2[2],param_2[1],param_2[3]); | |
*(uint *)(*param_1 + 8) = *(uint *)(*param_1 + 8) | 0x77; | |
uVar1 = 0; | |
} | |
else { | |
uVar1 = 1; | |
} | |
LAB_080033cc: | |
*(undefined1 *)((int)param_1 + 0x3d) = 1; | |
*(undefined1 *)(param_1 + 0xf) = 0; | |
return uVar1; | |
} | |
undefined4 FUN_0800342c(int *param_1,uint *param_2) | |
{ | |
int iVar1; | |
int iVar2; | |
if ((char)param_1[0xf] != '\x01') { | |
*(undefined1 *)(param_1 + 0xf) = 1; | |
*(undefined1 *)((int)param_1 + 0x3d) = 2; | |
iVar1 = *param_1; | |
*(uint *)(iVar1 + 4) = *param_2 | *(uint *)(iVar1 + 4) & 0xffffff8f; | |
iVar2 = *param_1; | |
if (((((iVar2 == DAT_080034b4) || (iVar2 == 0x40000000)) || (iVar2 == DAT_080034b4 + -0xfc00)) | |
|| ((iVar2 == DAT_080034b4 + -0xf800 || (iVar2 == DAT_080034b4 + -0xf400)))) || | |
((iVar2 == DAT_080034b4 + 0x400 || | |
((iVar2 == DAT_080034b4 + 0x4000 || (iVar2 == DAT_080034b4 + -0xe800)))))) { | |
*(uint *)(iVar2 + 8) = param_2[1] | *(uint *)(iVar1 + 8) & 0xffffff7f; | |
} | |
*(undefined1 *)((int)param_1 + 0x3d) = 1; | |
*(undefined1 *)(param_1 + 0xf) = 0; | |
return 0; | |
} | |
return 2; | |
} | |
void FUN_080034b8(void) | |
{ | |
return; | |
} | |
void FUN_080034ba(void) | |
{ | |
return; | |
} | |
void FUN_080034bc(void) | |
{ | |
*(uint *)(DAT_080034cc + 0x88) = *(uint *)(DAT_080034cc + 0x88) | 0xf00000; | |
return; | |
} | |
void FUN_080034d0(int *param_1) | |
{ | |
bool bVar1; | |
uint *puVar2; | |
uint *puVar3; | |
do { | |
puVar3 = (uint *)(*param_1 + 0xc); | |
ExclusiveAccess(puVar3); | |
puVar2 = (uint *)(*param_1 + 0xc); | |
bVar1 = (bool)hasExclusiveAccess(puVar2); | |
} while (!bVar1); | |
*puVar2 = *puVar3 & 0xffffff3f; | |
*(undefined1 *)((int)param_1 + 0x41) = 0x20; | |
return; | |
} | |
void FUN_080034f0(int *param_1) | |
{ | |
bool bVar1; | |
uint *puVar2; | |
uint *puVar3; | |
do { | |
puVar3 = (uint *)(*param_1 + 0xc); | |
ExclusiveAccess(puVar3); | |
puVar2 = (uint *)(*param_1 + 0xc); | |
bVar1 = (bool)hasExclusiveAccess(puVar2); | |
} while (!bVar1); | |
*puVar2 = *puVar3 & 0xfffffedf; | |
do { | |
puVar3 = (uint *)(*param_1 + 0x14); | |
ExclusiveAccess(puVar3); | |
puVar2 = (uint *)(*param_1 + 0x14); | |
bVar1 = (bool)hasExclusiveAccess(puVar2); | |
} while (!bVar1); | |
*puVar2 = *puVar3 & 0xfffffffe; | |
if (param_1[0xc] == 1) { | |
do { | |
puVar3 = (uint *)(*param_1 + 0xc); | |
ExclusiveAccess(puVar3); | |
puVar2 = (uint *)(*param_1 + 0xc); | |
bVar1 = (bool)hasExclusiveAccess(puVar2); | |
} while (!bVar1); | |
*puVar2 = *puVar3 & 0xffffffef; | |
} | |
*(undefined1 *)((int)param_1 + 0x42) = 0x20; | |
param_1[0xc] = 0; | |
return; | |
} | |
undefined4 FUN_0800354c(int *param_1) | |
{ | |
short sVar1; | |
byte *pbVar2; | |
if (*(char *)((int)param_1 + 0x41) != '!') { | |
return 2; | |
} | |
if ((param_1[2] == 0x1000) && (param_1[4] == 0)) { | |
*(uint *)(*param_1 + 4) = *(ushort *)param_1[8] & 0x1ff; | |
param_1[8] = param_1[8] + 2; | |
} | |
else { | |
pbVar2 = (byte *)param_1[8]; | |
param_1[8] = (int)(pbVar2 + 1); | |
*(uint *)(*param_1 + 4) = (uint)*pbVar2; | |
} | |
sVar1 = *(short *)((int)param_1 + 0x26) + -1; | |
*(short *)((int)param_1 + 0x26) = sVar1; | |
if (sVar1 == 0) { | |
*(uint *)(*param_1 + 0xc) = *(uint *)(*param_1 + 0xc) & 0xffffff7f; | |
*(uint *)(*param_1 + 0xc) = *(uint *)(*param_1 + 0xc) | 0x40; | |
} | |
return 0; | |
} | |
void FUN_080035ac(int *param_1) | |
{ | |
uint uVar1; | |
uint uVar2; | |
*(uint *)(*param_1 + 0x10) = *(uint *)(*param_1 + 0x10) & 0xffffcfff | param_1[3]; | |
*(uint *)(*param_1 + 0xc) = | |
*(uint *)(*param_1 + 0xc) & 0xffff69f3 | param_1[4] | param_1[2] | param_1[5] | param_1[7]; | |
*(uint *)(*param_1 + 0x14) = *(uint *)(*param_1 + 0x14) & 0xfffffcff | param_1[6]; | |
if ((*param_1 == DAT_080036b4) || (*param_1 == DAT_080036b4 + 0x400)) { | |
uVar1 = FUN_080019fc(); | |
} | |
else { | |
uVar1 = FUN_080019dc(); | |
} | |
if (param_1[7] == 0x8000) { | |
uVar2 = param_1[1]; | |
uVar1 = FUN_08000ca8(uVar1 * 0x19, | |
(((uint)CARRY4(uVar1,uVar1) + (uint)CARRY4(uVar1 * 2,uVar1)) * 8 | | |
uVar1 * 3 >> 0x1d) + (uint)CARRY4(uVar1 * 0x18,uVar1),uVar2 * 2, | |
CARRY4(uVar2,uVar2)); | |
uVar2 = (uint)((ulonglong)DAT_080036b8 * (ulonglong)uVar1 >> 0x25); | |
uVar1 = (uint)((ulonglong)DAT_080036b8 * (ulonglong)((uVar1 + uVar2 * -100) * 8 + 0x32) >> 0x25) | |
; | |
*(uint *)(*param_1 + 8) = (uVar1 & 7) + (uVar1 & 0xf8) * 2 + uVar2 * 0x10; | |
} | |
else { | |
uVar1 = FUN_08000ca8(uVar1 * 0x19, | |
(((uint)CARRY4(uVar1,uVar1) + (uint)CARRY4(uVar1 * 2,uVar1)) * 8 | | |
uVar1 * 3 >> 0x1d) + (uint)CARRY4(uVar1 * 0x18,uVar1),param_1[1] << 2, | |
(uint)param_1[1] >> 0x1e); | |
uVar2 = (uint)((ulonglong)DAT_080036b8 * (ulonglong)uVar1 >> 0x25); | |
uVar1 = (uint)((ulonglong)DAT_080036b8 * (ulonglong)((uVar1 + uVar2 * -100) * 0x10 + 0x32) >> | |
0x25); | |
*(uint *)(*param_1 + 8) = (uVar1 & 0xf) + (uVar1 & 0xf0) + uVar2 * 0x10; | |
} | |
return; | |
} | |
undefined4 FUN_080036bc(undefined4 *param_1,uint param_2,uint param_3,int param_4,uint param_5) | |
{ | |
uint *puVar1; | |
undefined8 uVar2; | |
do { | |
do { | |
if (((param_2 & ~*(uint *)*param_1) == 0) != param_3) { | |
return 0; | |
} | |
} while (param_5 == 0xffffffff); | |
uVar2 = getCurrentTime(); | |
if (param_5 < (uint)((int)uVar2 - param_4)) { | |
return 3; | |
} | |
if (param_5 == 0) { | |
return 3; | |
} | |
puVar1 = (uint *)*param_1; | |
} while (((((puVar1[3] & 4) == 0) || (param_2 == 0x80)) || (param_2 == 0x40)) || | |
((*puVar1 & 8) == 0)); | |
FUN_080034f0(param_1,(int)((ulonglong)uVar2 >> 0x20),*puVar1,puVar1[1]); | |
param_1[0x11] = 8; | |
*(undefined1 *)(param_1 + 0x10) = 0; | |
return 1; | |
} | |
undefined4 FUN_08003742(int *param_1) | |
{ | |
if (param_1 != (int *)0x0) { | |
if (*(char *)((int)param_1 + 0x41) == '\0') { | |
*(undefined1 *)(param_1 + 0x10) = 0; | |
FUN_0800170c(); | |
} | |
*(undefined1 *)((int)param_1 + 0x41) = 0x24; | |
*(uint *)(*param_1 + 0xc) = *(uint *)(*param_1 + 0xc) & 0xffffdfff; | |
FUN_080035ac(param_1); | |
*(uint *)(*param_1 + 0x10) = *(uint *)(*param_1 + 0x10) & 0xffffb7ff; | |
*(uint *)(*param_1 + 0x14) = *(uint *)(*param_1 + 0x14) & 0xffffffd5; | |
*(uint *)(*param_1 + 0xc) = *(uint *)(*param_1 + 0xc) | 0x2000; | |
param_1[0x11] = 0; | |
*(undefined1 *)((int)param_1 + 0x41) = 0x20; | |
*(undefined1 *)((int)param_1 + 0x42) = 0x20; | |
param_1[0xd] = 0; | |
return 0; | |
} | |
return 1; | |
} | |
undefined4 FUN_080037a2(int *param_1,ushort *param_2,int param_3,undefined4 param_4) | |
{ | |
undefined4 uVar1; | |
int iVar2; | |
ushort *puVar3; | |
ushort *puVar4; | |
if (*(char *)((int)param_1 + 0x41) == ' ') { | |
if (param_2 == (ushort *)0x0) { | |
uVar1 = 1; | |
} | |
else if (param_3 == 0) { | |
uVar1 = 1; | |
} | |
else { | |
param_1[0x11] = 0; | |
*(undefined1 *)((int)param_1 + 0x41) = 0x21; | |
uVar1 = getCurrentTime(); | |
*(short *)(param_1 + 9) = (short)param_3; | |
*(short *)((int)param_1 + 0x26) = (short)param_3; | |
puVar3 = param_2; | |
if (param_1[2] == 0x1000) { | |
if (param_1[4] == 0) { | |
puVar3 = (ushort *)0x0; | |
} | |
else { | |
param_2 = (ushort *)0x0; | |
} | |
} | |
else { | |
param_2 = (ushort *)0x0; | |
} | |
while (*(short *)((int)param_1 + 0x26) != 0) { | |
iVar2 = FUN_080036bc(param_1,0x80,0,uVar1,param_4); | |
if (iVar2 != 0) { | |
*(undefined1 *)((int)param_1 + 0x41) = 0x20; | |
return 3; | |
} | |
if (puVar3 == (ushort *)0x0) { | |
puVar4 = param_2 + 1; | |
*(uint *)(*param_1 + 4) = *param_2 & 0x1ff; | |
} | |
else { | |
*(uint *)(*param_1 + 4) = (uint)(byte)*puVar3; | |
puVar3 = (ushort *)((int)puVar3 + 1); | |
puVar4 = param_2; | |
} | |
*(short *)((int)param_1 + 0x26) = *(short *)((int)param_1 + 0x26) + -1; | |
param_2 = puVar4; | |
} | |
iVar2 = FUN_080036bc(param_1,0x40,0,uVar1,param_4); | |
if (iVar2 == 0) { | |
*(undefined1 *)((int)param_1 + 0x41) = 0x20; | |
uVar1 = 0; | |
} | |
else { | |
*(undefined1 *)((int)param_1 + 0x41) = 0x20; | |
uVar1 = 3; | |
} | |
} | |
} | |
else { | |
uVar1 = 2; | |
} | |
return uVar1; | |
} | |
undefined4 FUN_08003870(int *param_1,int param_2,int param_3,undefined4 param_4) | |
{ | |
bool bVar1; | |
undefined4 uVar2; | |
uint *puVar3; | |
uint *puVar4; | |
if (*(char *)((int)param_1 + 0x41) == ' ') { | |
if (param_2 == 0) { | |
uVar2 = 1; | |
} | |
else if (param_3 == 0) { | |
uVar2 = 1; | |
} | |
else { | |
param_1[8] = param_2; | |
*(short *)(param_1 + 9) = (short)param_3; | |
*(short *)((int)param_1 + 0x26) = (short)param_3; | |
param_1[0x11] = 0; | |
*(undefined1 *)((int)param_1 + 0x41) = 0x21; | |
*(undefined4 *)(param_1[0xe] + 0x3c) = DAT_080038e8; | |
*(undefined4 *)(param_1[0xe] + 0x40) = DAT_080038ec; | |
*(undefined4 *)(param_1[0xe] + 0x4c) = DAT_080038f0; | |
*(undefined4 *)(param_1[0xe] + 0x50) = 0; | |
FUN_08002ab4(param_1[0xe],param_2,*param_1 + 4,param_3,param_4); | |
*(undefined4 *)*param_1 = 0xffffffbf; | |
do { | |
puVar4 = (uint *)(*param_1 + 0x14); | |
ExclusiveAccess(puVar4); | |
puVar3 = (uint *)(*param_1 + 0x14); | |
bVar1 = (bool)hasExclusiveAccess(puVar3); | |
} while (!bVar1); | |
*puVar3 = *puVar4 | 0x80; | |
uVar2 = 0; | |
} | |
} | |
else { | |
uVar2 = 2; | |
} | |
return uVar2; | |
} | |
undefined4 FUN_08003940(int *param_1) | |
{ | |
*(uint *)(*param_1 + 0xc) = *(uint *)(*param_1 + 0xc) & 0xffffffbf; | |
*(undefined1 *)((int)param_1 + 0x41) = 0x20; | |
FUN_08007538(); | |
return 0; | |
} | |
void FUN_0800395a(void) | |
{ | |
return; | |
} | |
void FUN_0800395c(int param_1) | |
{ | |
FUN_0800395a(*(undefined4 *)(param_1 + 0x38)); | |
return; | |
} | |
void FUN_08003966(void) | |
{ | |
return; | |
} | |
void FUN_08003968(void) | |
{ | |
return; | |
} | |
void FUN_0800396a(int param_1) | |
{ | |
int *piVar1; | |
piVar1 = *(int **)(param_1 + 0x38); | |
if ((*(char *)((int)piVar1 + 0x41) == '!') && ((*(uint *)(*piVar1 + 0x14) & 0x80) != 0)) { | |
*(undefined2 *)((int)piVar1 + 0x26) = 0; | |
FUN_080034d0(piVar1); | |
} | |
if ((*(char *)((int)piVar1 + 0x42) == '\"') && ((*(uint *)(*piVar1 + 0x14) & 0x40) != 0)) { | |
*(undefined2 *)((int)piVar1 + 0x2e) = 0; | |
FUN_080034f0(piVar1); | |
} | |
piVar1[0x11] = piVar1[0x11] | 0x10; | |
FUN_08003968(piVar1); | |
return; | |
} | |
void FUN_080039d2(void) | |
{ | |
return; | |
} | |
undefined4 FUN_080039d4(int *param_1) | |
{ | |
bool bVar1; | |
uint *puVar2; | |
uint uVar3; | |
short sVar4; | |
int iVar5; | |
uint *puVar6; | |
if (*(char *)((int)param_1 + 0x42) != '\"') { | |
return 2; | |
} | |
iVar5 = param_1[2]; | |
if ((iVar5 == 0x1000) && (param_1[4] == 0)) { | |
*(ushort *)param_1[10] = (ushort)((uint)(*(int *)(*param_1 + 4) << 0x17) >> 0x17); | |
param_1[10] = param_1[10] + 2; | |
} | |
else { | |
if ((iVar5 == 0x1000) || ((iVar5 == 0 && (param_1[4] == 0)))) { | |
*(byte *)param_1[10] = (byte)*(undefined4 *)(*param_1 + 4); | |
} | |
else { | |
*(byte *)param_1[10] = (byte)*(undefined4 *)(*param_1 + 4) & 0x7f; | |
} | |
param_1[10] = param_1[10] + 1; | |
} | |
sVar4 = *(short *)((int)param_1 + 0x2e) + -1; | |
*(short *)((int)param_1 + 0x2e) = sVar4; | |
if (sVar4 != 0) { | |
return 0; | |
} | |
*(uint *)(*param_1 + 0xc) = *(uint *)(*param_1 + 0xc) & 0xffffffdf; | |
*(uint *)(*param_1 + 0xc) = *(uint *)(*param_1 + 0xc) & 0xfffffeff; | |
*(uint *)(*param_1 + 0x14) = *(uint *)(*param_1 + 0x14) & 0xfffffffe; | |
*(undefined1 *)((int)param_1 + 0x42) = 0x20; | |
param_1[0xd] = 0; | |
if (param_1[0xc] == 1) { | |
param_1[0xc] = 0; | |
do { | |
puVar6 = (uint *)(*param_1 + 0xc); | |
ExclusiveAccess(puVar6); | |
puVar2 = (uint *)(*param_1 + 0xc); | |
bVar1 = (bool)hasExclusiveAccess(puVar2); | |
} while (!bVar1); | |
*puVar2 = *puVar6 & 0xffffffef; | |
puVar2 = (uint *)*param_1; | |
uVar3 = *puVar2; | |
if ((uVar3 & 0x10) != 0) { | |
uVar3 = *puVar2; | |
puVar2 = (uint *)puVar2[1]; | |
} | |
FUN_080039d2(param_1,(short)param_1[0xb],uVar3,puVar2); | |
} | |
else { | |
FUN_08003966(); | |
} | |
return 0; | |
} | |
void FUN_08003abc(int *param_1) | |
{ | |
bool bVar1; | |
uint uVar2; | |
int iVar3; | |
uint uVar4; | |
uint *puVar5; | |
uint uVar6; | |
uint *puVar7; | |
puVar5 = (uint *)*param_1; | |
uVar6 = *puVar5; | |
uVar2 = puVar5[3]; | |
if ((uVar6 & 0xf) == 0) { | |
if (((uVar6 & 0x20) != 0) && ((uVar2 & 0x20) != 0)) { | |
FUN_080039d4(param_1); | |
return; | |
} | |
} | |
else { | |
uVar4 = puVar5[5] & 1; | |
if ((uVar4 != 0) || ((uVar2 & 0x120) != 0)) { | |
if (((uVar6 & 1) != 0) && ((uVar2 & 0x100) != 0)) { | |
param_1[0x11] = param_1[0x11] | 1; | |
} | |
if (((uVar6 & 4) != 0) && (uVar4 != 0)) { | |
param_1[0x11] = param_1[0x11] | 2; | |
} | |
if (((uVar6 & 2) != 0) && (uVar4 != 0)) { | |
param_1[0x11] = param_1[0x11] | 4; | |
} | |
if (((uVar6 & 8) != 0) && (((uVar2 & 0x20) != 0 || (uVar4 != 0)))) { | |
param_1[0x11] = param_1[0x11] | 8; | |
} | |
if (param_1[0x11] == 0) { | |
return; | |
} | |
if (((uVar6 & 0x20) != 0) && ((uVar2 & 0x20) != 0)) { | |
FUN_080039d4(param_1); | |
} | |
if (((param_1[0x11] & 8U) == 0) && ((*(uint *)(*param_1 + 0x14) & 0x40) == 0)) { | |
FUN_08003968(param_1); | |
param_1[0x11] = 0; | |
return; | |
} | |
FUN_080034f0(param_1); | |
if ((*(uint *)(*param_1 + 0x14) & 0x40) == 0) { | |
FUN_08003968(param_1); | |
return; | |
} | |
do { | |
puVar7 = (uint *)(*param_1 + 0x14); | |
ExclusiveAccess(puVar7); | |
puVar5 = (uint *)(*param_1 + 0x14); | |
bVar1 = (bool)hasExclusiveAccess(puVar5); | |
} while (!bVar1); | |
*puVar5 = *puVar7 & 0xffffffbf; | |
if (param_1[0xf] != 0) { | |
*(undefined4 *)(param_1[0xf] + 0x50) = DAT_08003d3c; | |
iVar3 = FUN_08002bb2(param_1[0xf]); | |
if (iVar3 == 0) { | |
return; | |
} | |
(**(code **)(param_1[0xf] + 0x50))(); | |
return; | |
} | |
FUN_08003968(param_1); | |
return; | |
} | |
} | |
if (((param_1[0xc] == 1) && ((uVar6 & 0x10) != 0)) && ((uVar2 & 0x10) != 0)) { | |
if ((puVar5[5] & 0x40) == 0) { | |
if ((*(short *)((int)param_1 + 0x2e) != 0) && | |
((short)param_1[0xb] != *(short *)((int)param_1 + 0x2e))) { | |
do { | |
puVar7 = (uint *)(*param_1 + 0xc); | |
ExclusiveAccess(puVar7); | |
puVar5 = (uint *)(*param_1 + 0xc); | |
bVar1 = (bool)hasExclusiveAccess(puVar5); | |
} while (!bVar1); | |
*puVar5 = *puVar7 & 0xfffffedf; | |
do { | |
puVar7 = (uint *)(*param_1 + 0x14); | |
ExclusiveAccess(puVar7); | |
puVar5 = (uint *)(*param_1 + 0x14); | |
bVar1 = (bool)hasExclusiveAccess(puVar5); | |
} while (!bVar1); | |
*puVar5 = *puVar7 & 0xfffffffe; | |
*(undefined1 *)((int)param_1 + 0x42) = 0x20; | |
param_1[0xc] = 0; | |
do { | |
puVar7 = (uint *)(*param_1 + 0xc); | |
ExclusiveAccess(puVar7); | |
puVar5 = (uint *)(*param_1 + 0xc); | |
bVar1 = (bool)hasExclusiveAccess(puVar5); | |
} while (!bVar1); | |
*puVar5 = *puVar7 & 0xffffffef; | |
param_1[0xd] = 2; | |
FUN_080039d2(param_1); | |
} | |
} | |
else { | |
uVar2 = *(uint *)(*(int *)param_1[0xf] + 4); | |
uVar6 = uVar2 & 0xffff; | |
if ((uVar6 != 0) && (uVar6 < *(ushort *)(param_1 + 0xb))) { | |
*(short *)((int)param_1 + 0x2e) = (short)uVar2; | |
if (((int *)param_1[0xf])[7] != 0x100) { | |
do { | |
puVar7 = (uint *)(*param_1 + 0xc); | |
ExclusiveAccess(puVar7); | |
puVar5 = (uint *)(*param_1 + 0xc); | |
bVar1 = (bool)hasExclusiveAccess(puVar5); | |
} while (!bVar1); | |
*puVar5 = *puVar7 & 0xfffffeff; | |
do { | |
puVar7 = (uint *)(*param_1 + 0x14); | |
ExclusiveAccess(puVar7); | |
puVar5 = (uint *)(*param_1 + 0x14); | |
bVar1 = (bool)hasExclusiveAccess(puVar5); | |
} while (!bVar1); | |
*puVar5 = *puVar7 & 0xfffffffe; | |
do { | |
puVar7 = (uint *)(*param_1 + 0x14); | |
ExclusiveAccess(puVar7); | |
puVar5 = (uint *)(*param_1 + 0x14); | |
bVar1 = (bool)hasExclusiveAccess(puVar5); | |
} while (!bVar1); | |
*puVar5 = *puVar7 & 0xffffffbf; | |
*(undefined1 *)((int)param_1 + 0x42) = 0x20; | |
param_1[0xc] = 0; | |
do { | |
puVar7 = (uint *)(*param_1 + 0xc); | |
ExclusiveAccess(puVar7); | |
puVar5 = (uint *)(*param_1 + 0xc); | |
bVar1 = (bool)hasExclusiveAccess(puVar5); | |
} while (!bVar1); | |
*puVar5 = *puVar7 & 0xffffffef; | |
FUN_08002b1e(param_1[0xf]); | |
} | |
param_1[0xd] = 2; | |
FUN_080039d2(param_1,(short)param_1[0xb] - *(short *)((int)param_1 + 0x2e)); | |
} | |
} | |
} | |
else if (((uVar6 & 0x80) == 0) || ((uVar2 & 0x80) == 0)) { | |
if (((uVar6 & 0x40) != 0) && ((uVar2 & 0x40) != 0)) { | |
FUN_08003940(param_1); | |
} | |
} | |
else { | |
FUN_0800354c(param_1); | |
} | |
return; | |
} | |
void FUN_08003d40(int *param_1) | |
{ | |
int iVar1; | |
iVar1 = DAT_08003e6c; | |
*(uint *)(DAT_08003e6c + 4) = *(uint *)(DAT_08003e6c + 4) & 0xfffcffff; | |
*(uint *)(iVar1 + 4) = *(uint *)(iVar1 + 4) | param_1[1]; | |
*(uint *)(*param_1 + 4) = *(uint *)(*param_1 + 4) & 0xfffffeff; | |
*(uint *)(*param_1 + 4) = *(uint *)(*param_1 + 4) | param_1[4] << 8; | |
*(uint *)(*param_1 + 4) = *(uint *)(*param_1 + 4) & 0xfcffffff; | |
*(uint *)(*param_1 + 4) = *(uint *)(*param_1 + 4) | param_1[2]; | |
*(uint *)(*param_1 + 8) = *(uint *)(*param_1 + 8) & 0xfffff7ff; | |
*(uint *)(*param_1 + 8) = *(uint *)(*param_1 + 8) | param_1[3]; | |
if (param_1[10] == DAT_08003e70) { | |
*(uint *)(*param_1 + 8) = *(uint *)(*param_1 + 8) & 0xf0ffffff; | |
*(uint *)(*param_1 + 8) = *(uint *)(*param_1 + 8) & 0xcfffffff; | |
} | |
else { | |
*(uint *)(*param_1 + 8) = *(uint *)(*param_1 + 8) & 0xf0ffffff; | |
*(uint *)(*param_1 + 8) = *(uint *)(*param_1 + 8) | param_1[10]; | |
*(uint *)(*param_1 + 8) = *(uint *)(*param_1 + 8) & 0xcfffffff; | |
*(uint *)(*param_1 + 8) = *(uint *)(*param_1 + 8) | param_1[0xb]; | |
} | |
*(uint *)(*param_1 + 8) = *(uint *)(*param_1 + 8) & 0xfffffffd; | |
*(uint *)(*param_1 + 8) = *(uint *)(*param_1 + 8) | (uint)*(byte *)(param_1 + 6) << 1; | |
if ((char)param_1[8] == '\0') { | |
*(uint *)(*param_1 + 4) = *(uint *)(*param_1 + 4) & 0xfffff7ff; | |
} | |
else { | |
*(uint *)(*param_1 + 4) = *(uint *)(*param_1 + 4) | 0x800; | |
*(uint *)(*param_1 + 4) = *(uint *)(*param_1 + 4) & 0xffff1fff; | |
*(uint *)(*param_1 + 4) = *(uint *)(*param_1 + 4) | (param_1[9] + -1) * 0x2000; | |
} | |
*(uint *)(*param_1 + 0x2c) = *(uint *)(*param_1 + 0x2c) & 0xff0fffff; | |
*(uint *)(*param_1 + 0x2c) = *(uint *)(*param_1 + 0x2c) | (param_1[7] + -1) * 0x100000; | |
*(uint *)(*param_1 + 8) = *(uint *)(*param_1 + 8) & 0xfffffdff; | |
*(uint *)(*param_1 + 8) = *(uint *)(*param_1 + 8) | (uint)*(byte *)(param_1 + 0xc) << 9; | |
*(uint *)(*param_1 + 8) = *(uint *)(*param_1 + 8) & 0xfffffbff; | |
*(uint *)(*param_1 + 8) = *(uint *)(*param_1 + 8) | param_1[5] << 10; | |
return; | |
} | |
bool FUN_08003e74(int param_1) | |
{ | |
bool bVar1; | |
if (param_1 == 0) { | |
return true; | |
} | |
if (*(int *)(param_1 + 0x40) == 0) { | |
ADC_Init(); | |
*(undefined4 *)(param_1 + 0x44) = 0; | |
*(undefined1 *)(param_1 + 0x3c) = 0; | |
} | |
bVar1 = (*(uint *)(param_1 + 0x40) & 0x10) == 0; | |
if (bVar1) { | |
*(uint *)(param_1 + 0x40) = *(uint *)(param_1 + 0x40) & 0xffffeefd | 2; | |
FUN_08003d40(param_1); | |
*(undefined4 *)(param_1 + 0x44) = 0; | |
*(uint *)(param_1 + 0x40) = *(uint *)(param_1 + 0x40) & 0xfffffffc | 1; | |
} | |
*(undefined1 *)(param_1 + 0x3c) = 0; | |
return !bVar1; | |
} | |
undefined4 Init_AudioBuffer(int *param_1,undefined4 param_2,undefined4 param_3) | |
{ | |
undefined4 uVar1; | |
int iVar2; | |
int local_c; | |
if ((char)param_1[0xf] == '\x01') { | |
uVar1 = 2; | |
} | |
else { | |
*(undefined1 *)(param_1 + 0xf) = 1; | |
iVar2 = *param_1; | |
if ((*(uint *)(iVar2 + 8) & 1) == 0) { | |
*(uint *)(iVar2 + 8) = *(uint *)(iVar2 + 8) | 1; | |
for (local_c = (uint)((ulonglong)DAT_0800404c * (ulonglong)*DAT_08004048 >> 0x32) * 3; | |
local_c != 0; local_c = local_c + -1) { | |
} | |
} | |
iVar2 = *param_1; | |
if ((*(uint *)(iVar2 + 8) & 0x100) != 0) { | |
*(uint *)(iVar2 + 8) = *(uint *)(iVar2 + 8) & 0xfffffeff; | |
} | |
if ((*(uint *)(*param_1 + 8) & 1) == 0) { | |
param_1[0x10] = param_1[0x10] | 0x10; | |
param_1[0x11] = param_1[0x11] | 1; | |
uVar1 = 0; | |
} | |
else { | |
param_1[0x10] = param_1[0x10] & 0xfffff8feU | 0x100; | |
if ((*(uint *)(*param_1 + 4) & 0x400) != 0) { | |
param_1[0x10] = param_1[0x10] & 0xffffcfffU | 0x1000; | |
} | |
if ((param_1[0x10] & 0x1000U) == 0) { | |
param_1[0x11] = 0; | |
} | |
else { | |
param_1[0x11] = param_1[0x11] & 0xfffffff9; | |
} | |
*(undefined1 *)(param_1 + 0xf) = 0; | |
*(undefined4 *)(param_1[0xe] + 0x3c) = DAT_08004050; | |
*(undefined4 *)(param_1[0xe] + 0x40) = DAT_08004054; | |
*(undefined4 *)(param_1[0xe] + 0x4c) = DAT_08004058; | |
*(undefined4 *)*param_1 = 0xffffffdd; | |
*(uint *)(*param_1 + 4) = *(uint *)(*param_1 + 4) | 0x4000000; | |
*(uint *)(*param_1 + 8) = *(uint *)(*param_1 + 8) | 0x100; | |
FUN_08002ab4(param_1[0xe],*param_1 + 0x4c,param_2,param_3); | |
if ((*(uint *)(DAT_0800405c + 4) & 0x1f) == 0) { | |
iVar2 = *param_1; | |
if ((iVar2 != DAT_08004060) && | |
((iVar2 != DAT_08004060 + 0x100 || ((*(uint *)(DAT_08004060 + 0x304) & 0x1f) != 0)))) { | |
if (iVar2 != DAT_08004064) { | |
return 0; | |
} | |
if ((*(uint *)(DAT_08004064 + 0x104) & 0x10) != 0) { | |
return 0; | |
} | |
} | |
if ((*(uint *)(iVar2 + 8) & 0x30000000) == 0) { | |
*(uint *)(iVar2 + 8) = *(uint *)(iVar2 + 8) | 0x40000000; | |
uVar1 = 0; | |
} | |
else { | |
uVar1 = 0; | |
} | |
} | |
else { | |
iVar2 = *param_1; | |
if (iVar2 == DAT_08004060) { | |
if ((*(uint *)(iVar2 + 8) & 0x30000000) == 0) { | |
*(uint *)(iVar2 + 8) = *(uint *)(iVar2 + 8) | 0x40000000; | |
uVar1 = 0; | |
} | |
else { | |
uVar1 = 0; | |
} | |
} | |
else { | |
uVar1 = 0; | |
} | |
} | |
} | |
} | |
return uVar1; | |
} | |
void FUN_08004068(void) | |
{ | |
return; | |
} | |
void FUN_0800406a(int param_1) | |
{ | |
FUN_08004068(*(undefined4 *)(param_1 + 0x38)); | |
return; | |
} | |
void FUN_08004074(void) | |
{ | |
return; | |
} | |
void FUN_08004076(void) | |
{ | |
return; | |
} | |
void FUN_08004078(int *param_1) | |
{ | |
uint *puVar1; | |
int iVar2; | |
uint uVar3; | |
uint uVar4; | |
puVar1 = (uint *)*param_1; | |
uVar4 = *puVar1; | |
uVar3 = puVar1[1]; | |
if (((uVar4 & 2) != 0) && ((uVar3 & 0x20) != 0)) { | |
if ((param_1[0x10] & 0x10U) == 0) { | |
param_1[0x10] = param_1[0x10] | 0x200; | |
} | |
if ((((puVar1[2] & 0x30000000) == 0) && ((char)param_1[6] == '\0')) && | |
(((puVar1[0xb] & 0xf00000) == 0 || ((puVar1[2] & 0x400) == 0)))) { | |
puVar1[1] = puVar1[1] & 0xffffffdf; | |
param_1[0x10] = param_1[0x10] & 0xfffffeff; | |
if ((param_1[0x10] & 0x1000U) == 0) { | |
param_1[0x10] = param_1[0x10] | 1; | |
} | |
} | |
FUN_08000e20(param_1); | |
*(undefined4 *)*param_1 = 0xffffffed; | |
} | |
if (((uVar4 & 4) != 0) && ((uVar3 & 0x80) != 0)) { | |
if ((param_1[0x10] & 0x10U) == 0) { | |
param_1[0x10] = param_1[0x10] | 0x2000; | |
} | |
iVar2 = *param_1; | |
if (((*(uint *)(iVar2 + 8) & 0x300000) == 0) && | |
(((((*(uint *)(iVar2 + 0x38) & 0x300000) == 0 || ((*(uint *)(iVar2 + 8) & 0x400) == 0)) && | |
((*(uint *)(iVar2 + 4) & 0x400) == 0)) && | |
(((*(uint *)(iVar2 + 8) & 0x30000000) == 0 && ((char)param_1[6] == '\0')))))) { | |
*(uint *)(iVar2 + 4) = *(uint *)(iVar2 + 4) & 0xffffff7f; | |
param_1[0x10] = param_1[0x10] & 0xffffefff; | |
if ((param_1[0x10] & 0x100U) == 0) { | |
param_1[0x10] = param_1[0x10] | 1; | |
} | |
} | |
FUN_080043f0(param_1); | |
*(undefined4 *)*param_1 = 0xfffffff3; | |
} | |
if ((((uVar4 & 1) != 0) && ((uVar3 & 0x40) != 0)) && ((*(uint *)*param_1 & 1) != 0)) { | |
param_1[0x10] = param_1[0x10] | 0x10000; | |
FUN_08004074(param_1); | |
*(undefined4 *)*param_1 = 0xfffffffe; | |
} | |
if (((uVar4 & 0x20) != 0) && ((uVar3 & 0x4000000) != 0)) { | |
param_1[0x11] = param_1[0x11] | 2; | |
*(undefined4 *)*param_1 = 0xffffffdf; | |
FUN_08004076(param_1); | |
*(undefined4 *)*param_1 = 0xffffffdf; | |
} | |
return; | |
} | |
void FUN_080041ba(int param_1) | |
{ | |
int iVar1; | |
iVar1 = *(int *)(param_1 + 0x38); | |
*(undefined4 *)(iVar1 + 0x40) = 0x40; | |
*(uint *)(iVar1 + 0x44) = *(uint *)(iVar1 + 0x44) | 4; | |
FUN_08004076(); | |
return; | |
} | |
undefined8 FUN_08004244(int *param_1,uint *param_2) | |
{ | |
int iVar1; | |
undefined4 uVar2; | |
uint uVar3; | |
int local_c; | |
if ((char)param_1[0xf] == '\x01') { | |
uVar2 = 2; | |
} | |
else { | |
*(undefined1 *)(param_1 + 0xf) = 1; | |
uVar3 = *param_2; | |
if (uVar3 < 10) { | |
*(uint *)(*param_1 + 0x10) = | |
*(uint *)(*param_1 + 0x10) & ~(7 << ((uVar3 & 0xffff) * 3 & 0xff)); | |
*(uint *)(*param_1 + 0x10) = | |
param_2[2] << ((uint)(ushort)*param_2 * 3 & 0xff) | *(uint *)(*param_1 + 0x10); | |
} | |
else { | |
*(uint *)(*param_1 + 0xc) = | |
*(uint *)(*param_1 + 0xc) & ~(7 << ((uVar3 & 0xffff) * 3 - 0x1e & 0xff)); | |
*(uint *)(*param_1 + 0xc) = | |
param_2[2] << ((uint)(ushort)*param_2 * 3 - 0x1e & 0xff) | *(uint *)(*param_1 + 0xc); | |
} | |
uVar3 = param_2[1]; | |
if (uVar3 < 7) { | |
*(uint *)(*param_1 + 0x34) = *(uint *)(*param_1 + 0x34) & ~(0x1f << (uVar3 * 5 - 5 & 0xff)); | |
*(uint *)(*param_1 + 0x34) = | |
(uint)(ushort)*param_2 << (param_2[1] * 5 - 5 & 0xff) | *(uint *)(*param_1 + 0x34); | |
} | |
else if (uVar3 < 0xd) { | |
*(uint *)(*param_1 + 0x30) = *(uint *)(*param_1 + 0x30) & ~(0x1f << (uVar3 * 5 - 0x23 & 0xff)) | |
; | |
*(uint *)(*param_1 + 0x30) = | |
(uint)(ushort)*param_2 << (param_2[1] * 5 - 0x23 & 0xff) | *(uint *)(*param_1 + 0x30); | |
} | |
else { | |
*(uint *)(*param_1 + 0x2c) = *(uint *)(*param_1 + 0x2c) & ~(0x1f << (uVar3 * 5 - 0x41 & 0xff)) | |
; | |
*(uint *)(*param_1 + 0x2c) = | |
(uint)(ushort)*param_2 << (param_2[1] * 5 - 0x41 & 0xff) | *(uint *)(*param_1 + 0x2c); | |
} | |
iVar1 = DAT_080043e0; | |
if ((*param_1 == DAT_080043dc) && (*param_2 == 0x12)) { | |
*(uint *)(DAT_080043e0 + 4) = *(uint *)(DAT_080043e0 + 4) & 0xff7fffff; | |
*(uint *)(iVar1 + 4) = *(uint *)(iVar1 + 4) | 0x400000; | |
} | |
iVar1 = DAT_080043e0; | |
if ((*param_1 == DAT_080043dc) && | |
(((uint *)*param_2 == DAT_080043e4 || ((uint *)*param_2 == (uint *)0x11)))) { | |
*(uint *)(DAT_080043e0 + 4) = *(uint *)(DAT_080043e0 + 4) & 0xffbfffff; | |
*(uint *)(iVar1 + 4) = *(uint *)(iVar1 + 4) | 0x800000; | |
param_2 = (uint *)*param_2; | |
if (param_2 == DAT_080043e4) { | |
param_2 = (uint *)((ulonglong)DAT_080043ec * (ulonglong)*DAT_080043e8); | |
for (local_c = (uint)((ulonglong)DAT_080043ec * (ulonglong)*DAT_080043e8 >> 0x32) * 10; | |
local_c != 0; local_c = local_c + -1) { | |
} | |
} | |
} | |
uVar2 = 0; | |
*(undefined1 *)(param_1 + 0xf) = 0; | |
} | |
return CONCAT44(param_2,uVar2); | |
} | |
void FUN_080043f0(void) | |
{ | |
return; | |
} | |
undefined4 FUN_080043f2(undefined1 *param_1,int param_2,undefined1 param_3) | |
{ | |
undefined4 uVar1; | |
if (param_1 != (undefined1 *)0x0) { | |
*(undefined4 *)(param_1 + 0x2b8) = 0; | |
*(undefined4 *)(param_1 + 0x2c4) = 0; | |
*(undefined4 *)(param_1 + 0x2d0) = 0; | |
if (param_2 != 0) { | |
*(int *)(param_1 + 0x2b4) = param_2; | |
} | |
param_1[0x29c] = 1; | |
*param_1 = param_3; | |
uVar1 = FUN_08006ed0(param_1); | |
return uVar1; | |
} | |
return 3; | |
} | |
undefined4 FUN_08004420(int param_1,int param_2) | |
{ | |
undefined4 uVar1; | |
undefined2 local_a; | |
local_a = 0; | |
if (param_2 == 0) { | |
uVar1 = 3; | |
} | |
else { | |
*(int *)(param_1 + 0x2b8) = param_2; | |
if (*(int *)(param_2 + 0x2c) != 0) { | |
uVar1 = (**(code **)(*(int *)(param_1 + (*(int *)(param_1 + 0x2d4) + 0xae) * 4) + 0x2c)) | |
(&local_a); | |
*(undefined4 *)(param_1 + 0x2d0) = uVar1; | |
} | |
*(int *)(param_1 + 0x2d8) = *(int *)(param_1 + 0x2d8) + 1; | |
uVar1 = 0; | |
} | |
return uVar1; | |
} | |
void FUN_08004460(void) | |
{ | |
FUN_08006fe2(); | |
return; | |
} | |
undefined4 FUN_08004468(int param_1) | |
{ | |
undefined4 uVar1; | |
if (*(undefined4 **)(param_1 + 0x2b8) == (undefined4 *)0x0) { | |
uVar1 = 0; | |
} | |
else { | |
uVar1 = (*(code *)**(undefined4 **)(param_1 + 0x2b8))(); | |
} | |
return uVar1; | |
} | |
int FUN_0800447a(int param_1) | |
{ | |
int iVar1; | |
iVar1 = (**(code **)(*(int *)(param_1 + 0x2b8) + 4))(); | |
if (iVar1 != 0) { | |
iVar1 = 3; | |
} | |
return iVar1; | |
} | |
void FUN_0800448c(int param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
byte bVar1; | |
int iVar2; | |
iVar2 = param_1 + 0x2aa; | |
FUN_080047de(iVar2); | |
*(undefined4 *)(param_1 + 0x294) = 1; | |
*(uint *)(param_1 + 0x298) = (uint)*(ushort *)(param_1 + 0x2b0); | |
bVar1 = *(byte *)(param_1 + 0x2aa); | |
if ((bVar1 & 0x1f) == 1) { | |
FUN_08004c22(param_1,iVar2,param_3,1,param_4); | |
} | |
else if ((bVar1 & 0x1f) == 2) { | |
FUN_08004ca6(param_1,iVar2); | |
} | |
else if ((bVar1 & 0x1f) == 0) { | |
FUN_08004bac(param_1,iVar2); | |
} | |
else { | |
FUN_08007018(param_1,bVar1 & 0x80); | |
} | |
return; | |
} | |
int FUN_080044e4(int param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
int iVar1; | |
code *pcVar2; | |
*(undefined1 *)(param_1 + 0x29c) = 1; | |
*(undefined4 *)(param_1 + 0x294) = 0; | |
*(undefined4 *)(param_1 + 4) = 0; | |
*(undefined4 *)(param_1 + 0x2a4) = 0; | |
*(undefined1 *)(param_1 + 0x2a0) = 0; | |
if (*(int *)(param_1 + 0x2b8) == 0) { | |
iVar1 = 0; | |
} | |
else { | |
pcVar2 = *(code **)(*(int *)(param_1 + 0x2b8) + 4); | |
if (pcVar2 == (code *)0x0) { | |
iVar1 = 0; | |
} | |
else { | |
iVar1 = (*pcVar2)(param_1,0,param_3,pcVar2,param_4); | |
if (iVar1 != 0) { | |
iVar1 = 3; | |
} | |
} | |
} | |
FUN_08006ff2(param_1,0,0,0x40); | |
*(undefined2 *)(param_1 + 0x164) = 1; | |
*(undefined4 *)(param_1 + 0x160) = 0x40; | |
FUN_08006ff2(param_1,0x80,0,0x40); | |
*(undefined2 *)(param_1 + 0x24) = 1; | |
*(undefined4 *)(param_1 + 0x20) = 0x40; | |
return iVar1; | |
} | |
undefined4 FUN_08004548(int param_1,undefined1 param_2) | |
{ | |
*(undefined1 *)(param_1 + 0x10) = param_2; | |
return 0; | |
} | |
undefined4 FUN_0800454e(int param_1) | |
{ | |
if (*(char *)(param_1 + 0x29c) != '\x04') { | |
*(undefined1 *)(param_1 + 0x29d) = *(undefined1 *)(param_1 + 0x29c); | |
} | |
*(undefined1 *)(param_1 + 0x29c) = 4; | |
return 0; | |
} | |
undefined4 FUN_0800456c(int param_1) | |
{ | |
if (*(char *)(param_1 + 0x29c) == '\x04') { | |
*(undefined1 *)(param_1 + 0x29c) = *(undefined1 *)(param_1 + 0x29d); | |
} | |
return 0; | |
} | |
undefined4 FUN_08004586(int param_1) | |
{ | |
code *pcVar1; | |
if (((*(char *)(param_1 + 0x29c) == '\x03') && (*(int *)(param_1 + 0x2b8) != 0)) && | |
(pcVar1 = *(code **)(*(int *)(param_1 + 0x2b8) + 0x1c), pcVar1 != (code *)0x0)) { | |
(*pcVar1)(); | |
} | |
return 0; | |
} | |
undefined4 FUN_080045a8(int param_1) | |
{ | |
undefined4 uVar1; | |
int iVar2; | |
code *pcVar3; | |
iVar2 = *(int *)(param_1 + (*(int *)(param_1 + 0x2d4) + 0xae) * 4); | |
if (iVar2 == 0) { | |
uVar1 = 3; | |
} | |
else if (*(char *)(param_1 + 0x29c) == '\x03') { | |
pcVar3 = *(code **)(iVar2 + 0x20); | |
if (pcVar3 == (code *)0x0) { | |
uVar1 = 0; | |
} | |
else { | |
(*pcVar3)(); | |
uVar1 = 0; | |
} | |
} | |
else { | |
uVar1 = 0; | |
} | |
return uVar1; | |
} | |
undefined4 FUN_080045d6(int param_1) | |
{ | |
undefined4 uVar1; | |
int iVar2; | |
code *pcVar3; | |
iVar2 = *(int *)(param_1 + (*(int *)(param_1 + 0x2d4) + 0xae) * 4); | |
if (iVar2 == 0) { | |
uVar1 = 3; | |
} | |
else if (*(char *)(param_1 + 0x29c) == '\x03') { | |
pcVar3 = *(code **)(iVar2 + 0x24); | |
if (pcVar3 == (code *)0x0) { | |
uVar1 = 0; | |
} | |
else { | |
(*pcVar3)(); | |
uVar1 = 0; | |
} | |
} | |
else { | |
uVar1 = 0; | |
} | |
return uVar1; | |
} | |
undefined4 FUN_08004604(void) | |
{ | |
return 0; | |
} | |
int FUN_08004608(int param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
int iVar1; | |
code *pcVar2; | |
*(undefined1 *)(param_1 + 0x29c) = 1; | |
if (*(int *)(param_1 + 0x2b8) == 0) { | |
iVar1 = 0; | |
} | |
else { | |
pcVar2 = *(code **)(*(int *)(param_1 + 0x2b8) + 4); | |
iVar1 = (*pcVar2)(param_1,*(undefined1 *)(param_1 + 4),param_3,pcVar2,param_4); | |
if (iVar1 != 0) { | |
iVar1 = 3; | |
} | |
} | |
return iVar1; | |
} | |
undefined4 FUN_08004628(void) | |
{ | |
return 0; | |
} | |
undefined4 FUN_0800462c(void) | |
{ | |
return 0; | |
} | |
undefined4 FUN_08004630(int param_1,uint param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
int iVar1; | |
undefined4 uVar2; | |
uint uVar3; | |
uint uVar4; | |
byte bVar5; | |
int iVar6; | |
if (param_2 != 0) { | |
iVar1 = FUN_0800462c(param_1,param_2 & 0x7f,param_3,param_4,param_4); | |
if (iVar1 != 0) { | |
return 0; | |
} | |
if (*(char *)(param_1 + 0x29c) != '\x03') { | |
return 0; | |
} | |
if (*(int *)(*(int *)(param_1 + 0x2b8) + 0x18) == 0) { | |
return 0; | |
} | |
*(undefined4 *)(param_1 + 0x2d4) = 0; | |
uVar2 = (**(code **)(*(int *)(param_1 + 0x2b8) + 0x18))(param_1,param_2); | |
return uVar2; | |
} | |
if (*(int *)(param_1 + 0x294) != 3) { | |
return 0; | |
} | |
uVar4 = *(uint *)(param_1 + 0x160); | |
if (uVar4 < *(uint *)(param_1 + 0x15c)) { | |
uVar3 = *(uint *)(param_1 + 0x15c) - uVar4; | |
*(uint *)(param_1 + 0x15c) = uVar3; | |
if (uVar3 <= uVar4) { | |
uVar4 = uVar3; | |
} | |
FUN_08004f3a(param_1,param_3,uVar4); | |
return 0; | |
} | |
bVar5 = *(byte *)(param_1 + 0x2aa) & 0x1f; | |
if (bVar5 == 1) { | |
iVar1 = FUN_08004628(param_1,*(undefined1 *)(param_1 + 0x2ae)); | |
LAB_08004686: | |
if (iVar1 != 0) goto LAB_08004692; | |
} | |
else { | |
if (bVar5 == 2) { | |
iVar1 = FUN_0800462c(param_1,*(undefined1 *)(param_1 + 0x2ae),uVar4,2,param_4); | |
goto LAB_08004686; | |
} | |
iVar1 = 0; | |
} | |
if ((*(char *)(param_1 + 0x29c) == '\x03') && | |
(iVar6 = *(int *)(param_1 + (iVar1 + 0xae) * 4), *(int *)(iVar6 + 0x10) != 0)) { | |
*(int *)(param_1 + 0x2d4) = iVar1; | |
(**(code **)(iVar6 + 0x10))(param_1); | |
} | |
LAB_08004692: | |
FUN_08004f4a(param_1); | |
return 0; | |
} | |
uint FUN_080046f4(int param_1,uint param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
uint uVar1; | |
int iVar2; | |
uint uVar3; | |
if (param_2 == 0) { | |
if (*(int *)(param_1 + 0x294) == 2) { | |
uVar3 = *(uint *)(param_1 + 0x1c); | |
uVar1 = *(uint *)(param_1 + 0x20); | |
if (uVar1 < uVar3) { | |
*(uint *)(param_1 + 0x1c) = uVar3 - uVar1; | |
FUN_08004f2a(param_1,param_3); | |
FUN_08007058(param_1,0,0); | |
} | |
else if (((uVar3 == uVar1) && (uVar1 <= *(uint *)(param_1 + 0x18))) && | |
(*(uint *)(param_1 + 0x18) < *(uint *)(param_1 + 0x298))) { | |
FUN_08004f2a(param_1,0); | |
*(undefined4 *)(param_1 + 0x298) = 0; | |
FUN_08007058(param_1,0,0,0); | |
} | |
else { | |
if ((*(char *)(param_1 + 0x29c) == '\x03') && | |
(*(int *)(*(int *)(param_1 + 0x2b8) + 0xc) != 0)) { | |
*(undefined4 *)(param_1 + 0x2d4) = 0; | |
(**(code **)(*(int *)(param_1 + 0x2b8) + 0xc))(param_1); | |
} | |
FUN_08007018(param_1,0x80); | |
FUN_08004f60(param_1); | |
} | |
} | |
uVar1 = (uint)*(byte *)(param_1 + 0x2a0); | |
if (uVar1 != 0) { | |
*(undefined1 *)(param_1 + 0x2a0) = 0; | |
uVar1 = 0; | |
} | |
} | |
else { | |
iVar2 = FUN_0800462c(param_1,param_2 | 0x80,param_3,param_4,param_4); | |
if (iVar2 == 0) { | |
uVar1 = 0; | |
if (*(char *)(param_1 + 0x29c) == '\x03') { | |
if (*(int *)(*(int *)(param_1 + 0x2b8) + 0x14) != 0) { | |
*(undefined4 *)(param_1 + 0x2d4) = 0; | |
uVar1 = (**(code **)(*(int *)(param_1 + 0x2b8) + 0x14))(param_1,param_2); | |
} | |
} | |
} | |
else { | |
uVar1 = 0; | |
} | |
} | |
return uVar1; | |
} | |
char FUN_080047ca(char *param_1) | |
{ | |
char cVar1; | |
cVar1 = '\0'; | |
for (; *param_1 != '\0'; param_1 = param_1 + 1) { | |
cVar1 = cVar1 + '\x01'; | |
} | |
return cVar1; | |
} | |
void FUN_080047de(undefined1 *param_1,undefined1 *param_2) | |
{ | |
*param_1 = *param_2; | |
param_1[1] = param_2[1]; | |
*(undefined2 *)(param_1 + 2) = *(undefined2 *)(param_2 + 2); | |
*(undefined2 *)(param_1 + 4) = *(undefined2 *)(param_2 + 4); | |
*(undefined2 *)(param_1 + 6) = *(undefined2 *)(param_2 + 6); | |
return; | |
} | |
void FUN_08004806(undefined4 param_1) | |
{ | |
FUN_08007018(param_1,0x80); | |
FUN_08007018(param_1,0); | |
return; | |
} | |
void FUN_0800481a(int param_1,int param_2) | |
{ | |
ushort uVar1; | |
int iVar2; | |
code *pcVar3; | |
ushort local_12 [3]; | |
local_12[0] = 0; | |
switch(*(ushort *)(param_2 + 2) >> 8) { | |
case 1: | |
iVar2 = (*(code *)**(undefined4 **)(param_1 + 0x2b4))(*(undefined1 *)(param_1 + 0x10),local_12); | |
break; | |
case 2: | |
if (*(char *)(param_1 + 0x10) == '\0') { | |
iVar2 = (**(code **)(*(int *)(param_1 + 0x2b8) + 0x28))(local_12); | |
*(undefined1 *)(iVar2 + 1) = 2; | |
} | |
else { | |
iVar2 = (**(code **)(*(int *)(param_1 + 0x2b8) + 0x2c))(local_12); | |
*(undefined1 *)(iVar2 + 1) = 2; | |
} | |
break; | |
case 3: | |
switch((char)*(ushort *)(param_2 + 2)) { | |
case '\0': | |
pcVar3 = *(code **)(*(int *)(param_1 + 0x2b4) + 4); | |
if (pcVar3 == (code *)0x0) { | |
FUN_08004806(param_1,param_2); | |
return; | |
} | |
iVar2 = (*pcVar3)(*(undefined1 *)(param_1 + 0x10),local_12); | |
break; | |
case '\x01': | |
pcVar3 = *(code **)(*(int *)(param_1 + 0x2b4) + 8); | |
if (pcVar3 == (code *)0x0) { | |
FUN_08004806(param_1,param_2); | |
return; | |
} | |
iVar2 = (*pcVar3)(*(undefined1 *)(param_1 + 0x10),local_12); | |
break; | |
case '\x02': | |
pcVar3 = *(code **)(*(int *)(param_1 + 0x2b4) + 0xc); | |
if (pcVar3 == (code *)0x0) { | |
FUN_08004806(param_1,param_2); | |
return; | |
} | |
iVar2 = (*pcVar3)(*(undefined1 *)(param_1 + 0x10),local_12); | |
break; | |
case '\x03': | |
pcVar3 = *(code **)(*(int *)(param_1 + 0x2b4) + 0x10); | |
if (pcVar3 == (code *)0x0) { | |
FUN_08004806(param_1,param_2); | |
return; | |
} | |
iVar2 = (*pcVar3)(*(undefined1 *)(param_1 + 0x10),local_12); | |
break; | |
case '\x04': | |
pcVar3 = *(code **)(*(int *)(param_1 + 0x2b4) + 0x14); | |
if (pcVar3 == (code *)0x0) { | |
FUN_08004806(param_1,param_2); | |
return; | |
} | |
iVar2 = (*pcVar3)(*(undefined1 *)(param_1 + 0x10),local_12); | |
break; | |
case '\x05': | |
pcVar3 = *(code **)(*(int *)(param_1 + 0x2b4) + 0x18); | |
if (pcVar3 == (code *)0x0) { | |
FUN_08004806(param_1,param_2); | |
return; | |
} | |
iVar2 = (*pcVar3)(*(undefined1 *)(param_1 + 0x10),local_12); | |
break; | |
default: | |
FUN_08004806(param_1,param_2); | |
return; | |
} | |
break; | |
default: | |
FUN_08004806(param_1,param_2); | |
return; | |
case 6: | |
if (*(char *)(param_1 + 0x10) != '\0') { | |
FUN_08004806(param_1,param_2); | |
return; | |
} | |
iVar2 = (**(code **)(*(int *)(param_1 + 0x2b8) + 0x34))(local_12); | |
break; | |
case 7: | |
if (*(char *)(param_1 + 0x10) != '\0') { | |
FUN_08004806(param_1,param_2); | |
return; | |
} | |
iVar2 = (**(code **)(*(int *)(param_1 + 0x2b8) + 0x30))(local_12); | |
*(undefined1 *)(iVar2 + 1) = 7; | |
break; | |
case 0xf: | |
pcVar3 = *(code **)(*(int *)(param_1 + 0x2b4) + 0x1c); | |
if (pcVar3 == (code *)0x0) { | |
FUN_08004806(param_1,param_2); | |
return; | |
} | |
iVar2 = (*pcVar3)(*(undefined1 *)(param_1 + 0x10),local_12); | |
} | |
uVar1 = *(ushort *)(param_2 + 6); | |
if (uVar1 == 0) { | |
FUN_08004f4a(param_1); | |
} | |
else if (local_12[0] == 0) { | |
FUN_08004806(param_1,param_2); | |
} | |
else { | |
if (local_12[0] <= uVar1) { | |
uVar1 = local_12[0]; | |
} | |
local_12[0] = uVar1; | |
FUN_08004f10(param_1,iVar2); | |
} | |
return; | |
} | |
void FUN_080049c6(int param_1,int param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
ushort uVar1; | |
if (((*(short *)(param_2 + 4) != 0) || (*(short *)(param_2 + 6) != 0)) || | |
(uVar1 = *(ushort *)(param_2 + 2), 0x7f < uVar1)) { | |
FUN_08004806(param_1); | |
return; | |
} | |
if (*(char *)(param_1 + 0x29c) == '\x03') { | |
FUN_08004806(); | |
return; | |
} | |
*(char *)(param_1 + 0x29e) = (char)(uVar1 & 0x7f); | |
FUN_08007038(param_1,uVar1 & 0x7f,param_3,*(char *)(param_1 + 0x29c),param_4); | |
FUN_08004f4a(param_1); | |
if ((uVar1 & 0x7f) != 0) { | |
*(undefined1 *)(param_1 + 0x29c) = 2; | |
return; | |
} | |
*(undefined1 *)(param_1 + 0x29c) = 1; | |
return; | |
} | |
uint FUN_08004a18(int param_1,int param_2) | |
{ | |
uint uVar1; | |
uVar1 = (uint)*(byte *)(param_2 + 2); | |
*DAT_08004ae0 = *(byte *)(param_2 + 2); | |
if (uVar1 < 2) { | |
if (*(char *)(param_1 + 0x29c) == '\x02') { | |
if (uVar1 == 0) { | |
FUN_08004f4a(); | |
} | |
else { | |
*(uint *)(param_1 + 4) = uVar1; | |
uVar1 = FUN_08004468(param_1,uVar1); | |
if (uVar1 == 0) { | |
FUN_08004f4a(param_1); | |
*(undefined1 *)(param_1 + 0x29c) = 3; | |
} | |
else { | |
FUN_08004806(param_1,param_2); | |
*(undefined1 *)(param_1 + 0x29c) = 2; | |
} | |
} | |
} | |
else if (*(char *)(param_1 + 0x29c) == '\x03') { | |
if (uVar1 == 0) { | |
*(undefined1 *)(param_1 + 0x29c) = 2; | |
*(undefined4 *)(param_1 + 4) = 0; | |
FUN_0800447a(param_1,0); | |
FUN_08004f4a(param_1); | |
} | |
else if (uVar1 == *(uint *)(param_1 + 4)) { | |
FUN_08004f4a(); | |
uVar1 = 0; | |
} | |
else { | |
FUN_0800447a(param_1,*(uint *)(param_1 + 4) & 0xff); | |
*(uint *)(param_1 + 4) = (uint)*DAT_08004ae0; | |
uVar1 = FUN_08004468(param_1); | |
if (uVar1 == 0) { | |
FUN_08004f4a(param_1); | |
} | |
else { | |
FUN_08004806(param_1,param_2); | |
FUN_0800447a(param_1,*(undefined1 *)(param_1 + 4)); | |
*(undefined1 *)(param_1 + 0x29c) = 2; | |
} | |
} | |
} | |
else { | |
FUN_08004806(); | |
FUN_0800447a(param_1,*DAT_08004ae0); | |
uVar1 = 3; | |
} | |
} | |
else { | |
FUN_08004806(); | |
uVar1 = 3; | |
} | |
return uVar1; | |
} | |
void FUN_08004ae4(int param_1,int param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
byte bVar1; | |
if (*(short *)(param_2 + 6) == 1) { | |
bVar1 = *(byte *)(param_1 + 0x29c); | |
if (bVar1 < 3) { | |
if (bVar1 != 0) { | |
*(undefined4 *)(param_1 + 8) = 0; | |
FUN_08004f10(param_1,(undefined4 *)(param_1 + 8),1,0,param_4); | |
return; | |
} | |
} | |
else if (bVar1 == 3) { | |
FUN_08004f10(param_1,param_1 + 4,1,3,param_4); | |
return; | |
} | |
FUN_08004806(); | |
} | |
else { | |
FUN_08004806(); | |
} | |
return; | |
} | |
void FUN_08004b24(int param_1,int param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
int iVar1; | |
if (*(byte *)(param_1 + 0x29c) - 1 < 3) { | |
if (*(short *)(param_2 + 6) == 2) { | |
*(undefined4 *)(param_1 + 0xc) = 0; | |
iVar1 = *(int *)(param_1 + 0x2a4); | |
if (iVar1 != 0) { | |
iVar1 = 2; | |
*(undefined4 *)(param_1 + 0xc) = 2; | |
} | |
FUN_08004f10(param_1,param_1 + 0xc,2,iVar1,param_4); | |
} | |
else { | |
FUN_08004806(); | |
} | |
} | |
else { | |
FUN_08004806(); | |
} | |
return; | |
} | |
void FUN_08004b5c(int param_1,int param_2) | |
{ | |
if (*(short *)(param_2 + 2) == 1) { | |
*(undefined4 *)(param_1 + 0x2a4) = 1; | |
FUN_08004f4a(); | |
} | |
else if (*(short *)(param_2 + 2) == 2) { | |
*(char *)(param_1 + 0x2a0) = (char)((ushort)*(undefined2 *)(param_2 + 4) >> 8); | |
FUN_08004f4a(); | |
} | |
else { | |
FUN_08004806(); | |
} | |
return; | |
} | |
void FUN_08004b86(int param_1,int param_2) | |
{ | |
if (*(byte *)(param_1 + 0x29c) - 1 < 3) { | |
if (*(short *)(param_2 + 2) == 1) { | |
*(undefined4 *)(param_1 + 0x2a4) = 0; | |
FUN_08004f4a(); | |
} | |
} | |
else { | |
FUN_08004806(); | |
} | |
return; | |
} | |
uint FUN_08004bac(int param_1,byte *param_2) | |
{ | |
uint uVar1; | |
uint uVar2; | |
uVar1 = *param_2 & 0x60; | |
if ((uVar1 == 0x20) || (uVar1 == 0x40)) { | |
uVar2 = (**(code **)(*(int *)(param_1 + (*(int *)(param_1 + 0x2d4) + 0xae) * 4) + 8))(); | |
} | |
else if ((*param_2 & 0x60) == 0) { | |
uVar2 = (uint)param_2[1]; | |
switch(uVar2) { | |
case 0: | |
FUN_08004b24(); | |
break; | |
case 1: | |
FUN_08004b86(); | |
uVar2 = uVar1; | |
break; | |
default: | |
FUN_08004806(); | |
uVar2 = uVar1; | |
break; | |
case 3: | |
FUN_08004b5c(); | |
uVar2 = uVar1; | |
break; | |
case 5: | |
FUN_080049c6(); | |
uVar2 = uVar1; | |
break; | |
case 6: | |
FUN_0800481a(); | |
uVar2 = uVar1; | |
break; | |
case 8: | |
FUN_08004ae4(); | |
uVar2 = uVar1; | |
break; | |
case 9: | |
uVar2 = FUN_08004a18(); | |
} | |
} | |
else { | |
FUN_08004806(); | |
uVar2 = 0; | |
} | |
return uVar2; | |
} | |
int FUN_08004c22(int param_1,byte *param_2) | |
{ | |
byte bVar1; | |
int iVar2; | |
bVar1 = *param_2 & 0x60; | |
if (((bVar1 == 0x20) || (bVar1 == 0x40)) || ((*param_2 & 0x60) == 0)) { | |
if (*(byte *)(param_1 + 0x29c) - 1 < 3) { | |
if (param_2[4] < 2) { | |
iVar2 = FUN_08004628(param_1); | |
if (iVar2 == 0) { | |
if (*(int *)(*(int *)(param_1 + 0x2b8) + 8) == 0) { | |
iVar2 = 3; | |
} | |
else { | |
*(undefined4 *)(param_1 + 0x2d4) = 0; | |
iVar2 = (**(code **)(*(int *)(param_1 + 0x2b8) + 8))(param_1,param_2); | |
} | |
} | |
else { | |
iVar2 = 3; | |
} | |
if ((*(short *)(param_2 + 6) == 0) && (iVar2 == 0)) { | |
FUN_08004f4a(param_1); | |
} | |
} | |
else { | |
FUN_08004806(param_1,param_2); | |
iVar2 = 0; | |
} | |
} | |
else { | |
FUN_08004806(param_1,param_2); | |
iVar2 = 0; | |
} | |
} | |
else { | |
FUN_08004806(); | |
iVar2 = 0; | |
} | |
return iVar2; | |
} | |
uint FUN_08004ca6(int param_1,byte *param_2) | |
{ | |
ushort uVar1; | |
byte bVar2; | |
byte bVar3; | |
int iVar4; | |
code *pcVar5; | |
uint uVar6; | |
undefined4 *puVar7; | |
uint uVar8; | |
uVar1 = *(ushort *)(param_2 + 4); | |
bVar3 = (byte)uVar1; | |
uVar8 = (uint)bVar3; | |
uVar6 = *param_2 & 0x60; | |
if ((uVar6 == 0x20) || (uVar6 == 0x40)) { | |
iVar4 = FUN_0800462c(param_1,uVar8); | |
if (iVar4 == 0) { | |
*(undefined4 *)(param_1 + 0x2d4) = 0; | |
pcVar5 = *(code **)(*(int *)(param_1 + 0x2b8) + 8); | |
uVar6 = 0; | |
if (pcVar5 != (code *)0x0) { | |
uVar6 = (*pcVar5)(param_1,param_2); | |
} | |
} | |
else { | |
uVar6 = 0; | |
} | |
} | |
else if ((*param_2 & 0x60) == 0) { | |
bVar2 = param_2[1]; | |
if (bVar2 == 1) { | |
if (*(char *)(param_1 + 0x29c) == '\x02') { | |
if ((uVar8 == 0) || (uVar8 == 0x80)) { | |
FUN_08004806(param_1,param_2); | |
} | |
else { | |
FUN_08007018(param_1,uVar8); | |
FUN_08007018(param_1,0x80); | |
} | |
} | |
else if (*(char *)(param_1 + 0x29c) == '\x03') { | |
if (*(short *)(param_2 + 2) == 0) { | |
if ((uVar1 & 0x7f) != 0) { | |
FUN_08007028(param_1,uVar8); | |
} | |
FUN_08004f4a(param_1); | |
iVar4 = FUN_0800462c(param_1,uVar8); | |
if (iVar4 == 0) { | |
*(undefined4 *)(param_1 + 0x2d4) = 0; | |
pcVar5 = *(code **)(*(int *)(param_1 + 0x2b8) + 8); | |
if (pcVar5 == (code *)0x0) { | |
uVar6 = 0; | |
} | |
else { | |
uVar6 = (*pcVar5)(param_1,param_2); | |
} | |
} | |
} | |
} | |
else { | |
FUN_08004806(); | |
} | |
} | |
else if (bVar2 == 3) { | |
if (*(char *)(param_1 + 0x29c) == '\x02') { | |
if ((uVar8 == 0) || (uVar8 == 0x80)) { | |
FUN_08004806(param_1,param_2); | |
} | |
else { | |
FUN_08007018(param_1,uVar8); | |
FUN_08007018(param_1,0x80); | |
} | |
} | |
else if (*(char *)(param_1 + 0x29c) == '\x03') { | |
if ((((*(short *)(param_2 + 2) == 0) && (uVar8 != 0)) && (uVar8 != 0x80)) && | |
(*(short *)(param_2 + 6) == 0)) { | |
FUN_08007018(param_1,uVar8); | |
} | |
FUN_08004f4a(param_1); | |
} | |
else { | |
FUN_08004806(); | |
} | |
} | |
else if (bVar2 == 0) { | |
uVar6 = 0; | |
if (*(char *)(param_1 + 0x29c) == '\x02') { | |
if ((uVar8 == 0) || (uVar8 == 0x80)) { | |
if ((uVar1 & 0x80) == 0) { | |
puVar7 = (undefined4 *)((uVar8 & 0x7f) * 0x14 + param_1 + 0x154); | |
} | |
else { | |
puVar7 = (undefined4 *)((uVar8 & 0x7f) * 0x14 + param_1 + 0x14); | |
} | |
*puVar7 = 0; | |
FUN_08004f10(param_1,puVar7,2); | |
} | |
else { | |
FUN_08004806(); | |
} | |
} | |
else if (*(char *)(param_1 + 0x29c) == '\x03') { | |
if ((char)bVar3 < '\0') { | |
if (*(short *)(param_1 + (uVar8 & 0xf) * 0x14 + 0x24) == 0) { | |
FUN_08004806(); | |
return 0; | |
} | |
} | |
else if (*(short *)(param_1 + (uVar8 & 0xf) * 0x14 + 0x164) == 0) { | |
FUN_08004806(); | |
return 0; | |
} | |
if ((char)bVar3 < '\0') { | |
puVar7 = (undefined4 *)((uVar8 & 0x7f) * 0x14 + param_1 + 0x14); | |
} | |
else { | |
puVar7 = (undefined4 *)((uVar8 & 0x7f) * 0x14 + param_1 + 0x154); | |
} | |
if ((uVar8 == 0) || (uVar8 == 0x80)) { | |
*puVar7 = 0; | |
} | |
else { | |
iVar4 = FUN_08006f38(param_1,uVar8); | |
if (iVar4 == 0) { | |
*puVar7 = 0; | |
} | |
else { | |
*puVar7 = 1; | |
} | |
} | |
FUN_08004f10(param_1,puVar7,2); | |
} | |
else { | |
FUN_08004806(); | |
} | |
} | |
else { | |
FUN_08004806(); | |
} | |
} | |
else { | |
FUN_08004806(); | |
uVar6 = 0; | |
} | |
return uVar6; | |
} | |
void FUN_08004ed6(char *param_1,undefined1 *param_2,short *param_3) | |
{ | |
short sVar1; | |
uint uVar2; | |
if (param_1 != (char *)0x0) { | |
sVar1 = FUN_080047ca(); | |
sVar1 = (sVar1 + 1) * 2; | |
*param_3 = sVar1; | |
*param_2 = (char)sVar1; | |
param_2[1] = 3; | |
uVar2 = 2; | |
for (; *param_1 != '\0'; param_1 = param_1 + 1) { | |
param_2[uVar2] = *param_1; | |
param_2[uVar2 + 1 & 0xff] = 0; | |
uVar2 = uVar2 + 2 & 0xff; | |
} | |
return; | |
} | |
return; | |
} | |
undefined4 FUN_08004f10(int param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
*(undefined4 *)(param_1 + 0x294) = 2; | |
*(undefined4 *)(param_1 + 0x18) = param_3; | |
*(undefined4 *)(param_1 + 0x1c) = param_3; | |
transmitMidiPacket(param_1,0,param_2,param_3,param_4); | |
return 0; | |
} | |
undefined4 FUN_08004f2a(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
transmitMidiPacket(param_1,0,param_2,param_3,param_4); | |
return 0; | |
} | |
undefined4 FUN_08004f3a(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
FUN_08007058(param_1,0,param_2,param_3,param_4); | |
return 0; | |
} | |
undefined4 FUN_08004f4a(int param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
*(undefined4 *)(param_1 + 0x294) = 4; | |
transmitMidiPacket(param_1,0,0,0,param_4); | |
return 0; | |
} | |
undefined4 FUN_08004f60(int param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
*(undefined4 *)(param_1 + 0x294) = 5; | |
FUN_08007058(param_1,0,0,0,param_4); | |
return 0; | |
} | |
undefined4 FUN_08005040(int param_1) | |
{ | |
FUN_08007008(param_1,0x40); | |
if (*(int *)(param_1 + 700) != 0) { | |
FUN_08006fcc(); | |
*(undefined4 *)(param_1 + 700) = 0; | |
} | |
return 0; | |
} | |
bool FUN_08005060(int param_1) | |
{ | |
int iVar1; | |
FUN_08006ff2(param_1,0x81,2,0x40); | |
FUN_08006ff2(param_1,1,2,0x40); | |
FUN_08007058(param_1,1,DAT_080050a0,0x40); | |
iVar1 = FUN_08006fc4(0x10); | |
*(int *)(param_1 + 700) = iVar1; | |
if (iVar1 != 0) { | |
*(undefined1 *)(iVar1 + 0xc) = 0; | |
} | |
return iVar1 == 0; | |
} | |
// Checks whether the MIDI device is in transmit state (state 3) | |
// and if the associated packet buffer has not yet been marked for transmission. | |
// If both conditions are met, it marks the packet as “ready” and calls the | |
// lower-level transmit function with command code 0x81. | |
// | |
// Parameters: | |
// midiDevice - pointer to the MIDI device context structure. | |
// packetData - parameter representing MIDI packet data (could be a pointer/ or an encoded | |
// value depending on the system design). | |
// packetLength - additional parameter for the MIDI packet (possibly its length). | |
undefined4 sendMidiPacket(int midiDevice,undefined4 packetData,undefined4 packetLength) | |
{ | |
if (*(char *)(midiDevice + 0x29c) != '\x03') { | |
return 0; | |
} | |
if (*(char *)(*(int *)(midiDevice + 700) + 0xc) == '\0') { | |
*(undefined1 *)(*(int *)(midiDevice + 700) + 0xc) = 1; | |
transmitMidiPacket(midiDevice,0x81,packetData,packetLength); | |
} | |
return 0; | |
} | |
undefined4 FUN_080050dc(undefined4 param_1) | |
{ | |
undefined4 uVar1; | |
uVar1 = DAT_08005108; | |
processSysExMessageTable(DAT_08005108,0x40); | |
FUN_08012484(uVar1,0,0x40); | |
FUN_08007058(param_1,1,uVar1,0x40); | |
return 0; | |
} | |
void Enable_ButtonInterrupts(void) | |
{ | |
int iVar1; | |
undefined4 in_r3; | |
iVar1 = FUN_080043f2(DAT_08005144,DAT_08005140,0,in_r3,in_r3); | |
if (iVar1 != 0) { | |
// WARNING: Subroutine does not return | |
SystemHalt(); | |
} | |
iVar1 = FUN_08004420(DAT_08005144,DAT_08005148); | |
if (iVar1 == 0) { | |
iVar1 = FUN_08004460(DAT_08005144); | |
if (iVar1 == 0) { | |
return; | |
} | |
// WARNING: Subroutine does not return | |
SystemHalt(); | |
} | |
// WARNING: Subroutine does not return | |
SystemHalt(); | |
} | |
void FUN_08005170(uint param_1,int param_2,uint param_3) | |
{ | |
byte bVar1; | |
uint uVar2; | |
uVar2 = 0; | |
if (param_3 == 0) { | |
return; | |
} | |
do { | |
bVar1 = (byte)(param_1 >> 0x18); | |
if (param_1 < 0xa0000000) { | |
*(byte *)(param_2 + uVar2 * 2) = (bVar1 >> 4) + 0x30; | |
} | |
else { | |
*(byte *)(param_2 + uVar2 * 2) = (bVar1 >> 4) + 0x37; | |
} | |
param_1 = param_1 << 4; | |
*(undefined1 *)(param_2 + uVar2 * 2 + 1) = 0; | |
uVar2 = uVar2 + 1 & 0xff; | |
} while (uVar2 < param_3); | |
return; | |
} | |
void FUN_080051b8(void) | |
{ | |
int iVar1; | |
int iVar2; | |
undefined4 in_r3; | |
undefined4 uVar3; | |
iVar1 = DAT_080051ec; | |
uVar3 = *(undefined4 *)(DAT_080051e8 + 0xa14); | |
iVar2 = *(int *)(DAT_080051e8 + 0xa10) + *(int *)(DAT_080051e8 + 0xa18); | |
if (iVar2 != 0) { | |
FUN_08005170(iVar2,DAT_080051ec,8,*(int *)(DAT_080051e8 + 0xa18),in_r3); | |
FUN_08005170(uVar3,iVar1 + 0x10,4); | |
} | |
return; | |
} | |
undefined4 FUN_08005204(undefined4 param_1,undefined4 param_2) | |
{ | |
undefined4 uVar1; | |
undefined4 uVar2; | |
uVar2 = lookupSensorFlag(DAT_08005234); | |
uVar1 = DAT_08005238; | |
appendToBuffer(DAT_08005238,0x40,DAT_08005240,DAT_0800523c,uVar2); | |
uVar2 = DAT_08005244; | |
FUN_08004ed6(uVar1,DAT_08005244,param_2); | |
return uVar2; | |
} | |
undefined4 FUN_08005248(undefined4 param_1,undefined4 param_2) | |
{ | |
undefined4 uVar1; | |
uVar1 = DAT_0800525c; | |
FUN_08004ed6(DAT_08005260,DAT_0800525c,param_2); | |
return uVar1; | |
} | |
int FUN_080052ac(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
uint *puVar1; | |
int iVar2; | |
uint uVar3; | |
iVar2 = FUN_08009ed8(DAT_08005344,1,param_2,param_4,param_4); | |
puVar1 = DAT_08005348; | |
if (iVar2 == 0) { | |
FUN_0800a084(param_1,0x30,0x12); | |
} | |
else { | |
*DAT_08005348 = *DAT_08005348 | 0x40000000; | |
uVar3 = *DAT_08005344; | |
puVar1[2] = uVar3; | |
puVar1[3] = uVar3; | |
puVar1 = DAT_0800534c; | |
*DAT_0800534c = *DAT_0800534c | 0x40000000; | |
puVar1[2] = uVar3 + 0x300; | |
puVar1[3] = uVar3 + 0x300; | |
puVar1 = DAT_08005350; | |
*DAT_08005350 = *DAT_08005350 | 0x40000000; | |
puVar1[2] = uVar3 + 0x380; | |
puVar1[3] = uVar3 + 0x340; | |
puVar1 = DAT_08005354; | |
*DAT_08005354 = *DAT_08005354 | 0x40000000; | |
puVar1[2] = uVar3 + 0x530; | |
puVar1[3] = uVar3 + 0x530; | |
puVar1 = DAT_08005358; | |
*DAT_08005358 = *DAT_08005358 | 0x40000000; | |
puVar1[2] = uVar3 + 0x5b8; | |
puVar1[3] = uVar3 + 0x578; | |
puVar1 = DAT_0800535c; | |
*DAT_0800535c = *DAT_0800535c | 0x40000000; | |
puVar1[2] = uVar3 + 0x5f0; | |
puVar1[3] = uVar3 + 0x5f0; | |
} | |
return iVar2; | |
} | |
int FUN_08005360(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
int iVar1; | |
int iVar2; | |
int iVar3; | |
int iVar4; | |
iVar2 = FUN_08009f80(DAT_080053d4,1,param_2,param_4,param_4); | |
iVar1 = DAT_080053d8; | |
if (iVar2 == 0) { | |
FUN_0800a084(param_1,0x30,0x13); | |
} | |
else { | |
iVar4 = *DAT_080053d4; | |
*(int *)(DAT_080053d8 + 8) = iVar4 + 0x50; | |
*(int *)(iVar1 + 0xc) = iVar4 + 0x50; | |
iVar1 = DAT_080053dc; | |
*(int *)(DAT_080053dc + 8) = iVar4 + 0xb0; | |
*(int *)(iVar1 + 0xc) = iVar4 + 0xb0; | |
iVar1 = DAT_080053e0; | |
*(int *)(DAT_080053e0 + 8) = iVar4 + 0x80; | |
*(int *)(iVar1 + 0xc) = iVar4 + 0x80; | |
iVar1 = DAT_080053e4; | |
*(int *)(DAT_080053e4 + 8) = iVar4; | |
*(int *)(iVar1 + 0xc) = iVar4; | |
iVar1 = DAT_080053e8; | |
*(int *)(DAT_080053e8 + 8) = iVar4 + 0x110; | |
*(int *)(iVar1 + 0xc) = iVar4 + 0x110; | |
iVar1 = DAT_080053ec; | |
*(int *)(DAT_080053ec + 8) = iVar4; | |
*(int *)(iVar1 + 0xc) = iVar4; | |
iVar1 = DAT_080053f0; | |
iVar3 = iVar4 + 0x48; | |
*(int *)(DAT_080053f0 + 8) = iVar3; | |
*(int *)(iVar1 + 0xc) = iVar3; | |
iVar1 = DAT_080053f4; | |
*(int *)(DAT_080053f4 + 8) = iVar4 + 0x90; | |
*(int *)(iVar1 + 0xc) = iVar4 + 0x90; | |
iVar1 = DAT_080053f8; | |
*(int *)(DAT_080053f8 + 8) = iVar3; | |
*(int *)(iVar1 + 0xc) = iVar3; | |
} | |
return iVar2; | |
} | |
void FUN_080053fc(void) | |
{ | |
FUN_0800a06c(); | |
return; | |
} | |
void FUN_08005404(undefined4 param_1,undefined4 param_2) | |
{ | |
FUN_0800a264(param_1,param_2,DAT_08005420,1,5,0); | |
return; | |
} | |
void FUN_08005424(int param_1) | |
{ | |
if (param_1 == 0) { | |
*DAT_08005438 = DAT_0800543c; | |
} | |
FUN_0800a090(); | |
return; | |
} | |
void FUN_08005440(int param_1) | |
{ | |
if (param_1 == 0) { | |
*DAT_08005454 = DAT_08005458; | |
} | |
FUN_0800a17c(); | |
return; | |
} | |
byte FUN_0800545c(undefined4 param_1,undefined4 param_2) | |
{ | |
byte bVar1; | |
byte bVar2; | |
byte bVar3; | |
int iVar4; | |
iVar4 = FUN_0800a2e8(); | |
if (iVar4 == 0) { | |
bVar3 = 0; | |
} | |
else { | |
bVar1 = FUN_080052ac(iVar4,param_2); | |
bVar2 = FUN_08005360(iVar4,param_2); | |
bVar3 = FUN_0800a484(param_1); | |
bVar3 = bVar3 & bVar1 & bVar2; | |
} | |
return bVar3; | |
} | |
uint FUN_0800548c(undefined4 *param_1,int param_2,int param_3) | |
{ | |
uint uVar1; | |
int iVar2; | |
uint uVar3; | |
undefined1 auStack_50 [4]; | |
undefined1 auStack_4c [2]; | |
ushort local_4a; | |
undefined1 auStack_44 [2]; | |
ushort local_42; | |
uVar1 = FUN_08005404(param_1,0); | |
if ((uVar1 & 0xff) == 0) { | |
iVar2 = FUN_08005524(auStack_50); | |
if (iVar2 == 0) { | |
uVar1 = FUN_080053fc(*param_1); | |
} | |
else { | |
uVar3 = 0; | |
while (param_2 != 0) { | |
if (local_42 <= uVar3) { | |
uVar3 = 0; | |
goto LAB_080054f0; | |
} | |
FUN_08009eb8(auStack_44,uVar3,*(undefined4 *)(param_2 + uVar3 * 4)); | |
uVar3 = uVar3 + 1 & 0xffff; | |
} | |
uVar3 = 0; | |
LAB_080054f0: | |
for (; (param_3 != 0 && (uVar3 < local_4a)); uVar3 = uVar3 + 1 & 0xffff) { | |
FUN_08009eb8(auStack_4c,uVar3,*(undefined4 *)(param_3 + uVar3 * 4)); | |
} | |
iVar2 = FUN_0800545c(*param_1,auStack_50); | |
if (iVar2 == 0) { | |
uVar1 = FUN_080053fc(*param_1); | |
} | |
} | |
} | |
return uVar1; | |
} | |
void FUN_0800551a(void) | |
{ | |
FUN_0800a4e4(); | |
return; | |
} | |
undefined4 FUN_08005524(int param_1) | |
{ | |
undefined4 uVar1; | |
undefined4 local_18; | |
undefined4 uStack_14; | |
undefined4 local_10; | |
undefined4 uStack_c; | |
if (param_1 != 0) { | |
local_10 = *(undefined4 *)(DAT_08005558 + 0x20); | |
uStack_c = *(undefined4 *)(DAT_08005558 + 0x24); | |
local_18 = *(undefined4 *)(DAT_08005558 + 0x28); | |
uStack_14 = *(undefined4 *)(DAT_08005558 + 0x2c); | |
uVar1 = FUN_0800a028(param_1,&local_18); | |
return uVar1; | |
} | |
return 0; | |
} | |
undefined4 FUN_0800555c(int *param_1,uint param_2) | |
{ | |
undefined4 uVar1; | |
uint uVar2; | |
uint uVar3; | |
int iVar4; | |
iVar4 = *param_1; | |
if ((uint)param_1[param_2 * 9 + 9] < (uint)param_1[param_2 * 9 + 10]) { | |
uVar1 = 1; | |
} | |
else { | |
uVar2 = param_1[param_2 * 9 + 9] - param_1[param_2 * 9 + 10]; | |
uVar3 = param_1[param_2 * 9 + 7]; | |
if (uVar2 <= (uint)param_1[param_2 * 9 + 7]) { | |
uVar3 = uVar2; | |
} | |
while (uVar3 + 3 >> 2 <= (*(uint *)(iVar4 + param_2 * 0x20 + 0x918) & 0xffff)) { | |
uVar2 = param_1[param_2 * 9 + 9]; | |
if ((uVar2 <= (uint)param_1[param_2 * 9 + 10]) || (uVar2 == 0)) break; | |
uVar2 = uVar2 - param_1[param_2 * 9 + 10]; | |
uVar3 = param_1[param_2 * 9 + 7]; | |
if (uVar2 <= (uint)param_1[param_2 * 9 + 7]) { | |
uVar3 = uVar2; | |
} | |
FUN_080068e6(iVar4,param_1[param_2 * 9 + 8],param_2 & 0xff,uVar3 & 0xffff, | |
*(undefined1 *)((int)param_1 + 6)); | |
param_1[param_2 * 9 + 8] = param_1[param_2 * 9 + 8] + uVar3; | |
param_1[param_2 * 9 + 10] = param_1[param_2 * 9 + 10] + uVar3; | |
} | |
if ((uint)param_1[param_2 * 9 + 10] < (uint)param_1[param_2 * 9 + 9]) { | |
uVar1 = 0; | |
} | |
else { | |
*(uint *)(iVar4 + 0x834) = *(uint *)(iVar4 + 0x834) & ~(1 << (param_2 & 0xf)); | |
uVar1 = 0; | |
} | |
} | |
return uVar1; | |
} | |
undefined4 FUN_0800562c(int *param_1) | |
{ | |
byte bVar1; | |
uint uVar2; | |
int iVar3; | |
undefined4 uVar4; | |
if (param_1 == (int *)0x0) { | |
uVar4 = 1; | |
} | |
else { | |
iVar3 = *param_1; | |
if (*(char *)((int)param_1 + 0x495) == '\0') { | |
*(undefined1 *)(param_1 + 0x125) = 0; | |
FUN_080017c8(); | |
} | |
*(undefined1 *)((int)param_1 + 0x495) = 3; | |
if (iVar3 == 0x50000000) { | |
*(undefined1 *)((int)param_1 + 6) = 0; | |
} | |
FUN_08006454(*param_1); | |
iVar3 = FUN_080062d0(*param_1,param_1[1],param_1[2],param_1[3],(char)param_1[4]); | |
if (iVar3 == 0) { | |
iVar3 = FUN_08006d12(*param_1,0); | |
if (iVar3 == 0) { | |
for (uVar2 = 0; bVar1 = *(byte *)(param_1 + 1), uVar2 < bVar1; uVar2 = uVar2 + 1 & 0xff) { | |
*(undefined1 *)((int)param_1 + uVar2 * 0x24 + 0x15) = 1; | |
*(char *)(param_1 + uVar2 * 9 + 5) = (char)uVar2; | |
*(short *)((int)param_1 + uVar2 * 0x24 + 0x2e) = (short)uVar2; | |
*(undefined1 *)(param_1 + uVar2 * 9 + 6) = 0; | |
param_1[uVar2 * 9 + 7] = 0; | |
param_1[uVar2 * 9 + 8] = 0; | |
param_1[uVar2 * 9 + 9] = 0; | |
} | |
for (uVar2 = 0; uVar2 < bVar1; uVar2 = uVar2 + 1 & 0xff) { | |
*(undefined1 *)((int)param_1 + uVar2 * 0x24 + 0x255) = 0; | |
*(char *)(param_1 + uVar2 * 9 + 0x95) = (char)uVar2; | |
*(undefined1 *)(param_1 + uVar2 * 9 + 0x96) = 0; | |
param_1[uVar2 * 9 + 0x97] = 0; | |
param_1[uVar2 * 9 + 0x98] = 0; | |
param_1[uVar2 * 9 + 0x99] = 0; | |
} | |
iVar3 = FUN_08006500(*param_1,param_1[1],param_1[2],param_1[3],(char)param_1[4]); | |
if (iVar3 == 0) { | |
*(undefined1 *)((int)param_1 + 0x11) = 0; | |
*(undefined1 *)((int)param_1 + 0x495) = 1; | |
if ((char)param_1[3] == '\x01') { | |
FUN_08006260(param_1); | |
} | |
FUN_08006c90(*param_1); | |
uVar4 = 0; | |
} | |
else { | |
*(undefined1 *)((int)param_1 + 0x495) = 2; | |
uVar4 = 1; | |
} | |
} | |
else { | |
*(undefined1 *)((int)param_1 + 0x495) = 2; | |
uVar4 = 1; | |
} | |
} | |
else { | |
*(undefined1 *)((int)param_1 + 0x495) = 2; | |
uVar4 = 1; | |
} | |
} | |
return uVar4; | |
} | |
undefined4 FUN_0800573e(int *param_1) | |
{ | |
int iVar1; | |
iVar1 = *param_1; | |
if ((char)param_1[0x125] != '\x01') { | |
*(undefined1 *)(param_1 + 0x125) = 1; | |
if (((*(uint *)(iVar1 + 0xc) & 0x40) != 0) && (*(char *)((int)param_1 + 0xd) == '\x01')) { | |
*(uint *)(iVar1 + 0x38) = *(uint *)(iVar1 + 0x38) | 0x10000; | |
} | |
FUN_08006448(*param_1); | |
FUN_08006c74(*param_1); | |
*(undefined1 *)(param_1 + 0x125) = 0; | |
return 0; | |
} | |
return 2; | |
} | |
undefined4 FUN_08005782(int *param_1) | |
{ | |
undefined4 uVar1; | |
int iVar2; | |
iVar2 = *param_1; | |
if ((char)param_1[0x125] == '\x01') { | |
uVar1 = 2; | |
} | |
else { | |
*(undefined1 *)(param_1 + 0x125) = 1; | |
FUN_08006454(iVar2); | |
FUN_08006c90(*param_1); | |
FUN_08006460(*param_1,0x10); | |
if (((*(uint *)(iVar2 + 0xc) & 0x40) != 0) && (*(char *)((int)param_1 + 0xd) == '\x01')) { | |
*(uint *)(iVar2 + 0x38) = *(uint *)(iVar2 + 0x38) & 0xfffeffff; | |
} | |
uVar1 = 0; | |
*(undefined1 *)(param_1 + 0x125) = 0; | |
} | |
return uVar1; | |
} | |
undefined4 FUN_080057d0(int *param_1,uint param_2) | |
{ | |
int iVar1; | |
uint uVar2; | |
int iVar3; | |
uint uVar4; | |
iVar1 = *param_1; | |
uVar4 = *(uint *)(iVar1 + 0x40); | |
iVar3 = iVar1 + param_2 * 0x20; | |
uVar2 = *(uint *)(iVar3 + 0xb08); | |
if (*(char *)((int)param_1 + 6) == '\x01') { | |
if ((uVar2 & 8) == 0) { | |
if ((uVar2 & 0x20) == 0) { | |
if ((uVar2 & 0x28) == 0) { | |
if ((DAT_080058d0 < uVar4) && ((uVar2 & 0x8000) != 0)) { | |
*(undefined4 *)(iVar3 + 0xb08) = 0x8000; | |
} | |
else { | |
iVar3 = param_1[param_2 * 9 + 0x9d] - (*(uint *)(iVar3 + 0xb10) & 0x7ffff); | |
param_1[param_2 * 9 + 0x9a] = iVar3; | |
if (param_2 == 0) { | |
if (param_1[0x99] == 0) { | |
FUN_08006d90(iVar1,1,param_1 + 0x127); | |
} | |
else { | |
param_1[0x98] = param_1[0x98] + iVar3; | |
} | |
} | |
FUN_08006e00(param_1,param_2 & 0xff); | |
} | |
} | |
} | |
else { | |
*(undefined4 *)(iVar3 + 0xb08) = 0x20; | |
} | |
} | |
else if ((DAT_080058d0 < uVar4) && ((uVar2 & 0x8000) != 0)) { | |
*(undefined4 *)(iVar3 + 0xb08) = 0x8000; | |
} | |
} | |
else if (uVar4 == DAT_080058cc) { | |
if ((uVar2 & 0x8000) == 0) { | |
if ((uVar2 & 0x20) != 0) { | |
*(undefined4 *)(iVar3 + 0xb08) = 0x20; | |
} | |
FUN_08006e00(param_1,param_2 & 0xff); | |
} | |
else { | |
*(undefined4 *)(iVar3 + 0xb08) = 0x8000; | |
} | |
} | |
else { | |
if ((param_2 == 0) && (param_1[0x99] == 0)) { | |
FUN_08006d90(iVar1,0,param_1 + 0x127); | |
} | |
FUN_08006e00(param_1,param_2 & 0xff); | |
} | |
return 0; | |
} | |
undefined4 FUN_080058d4(int *param_1,int param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
int iVar1; | |
uint uVar2; | |
uVar2 = *(uint *)(*param_1 + 0x40); | |
iVar1 = *param_1 + param_2 * 0x20; | |
if ((DAT_08005920 < uVar2) && ((*(uint *)(iVar1 + 0xb08) & 0x8000) != 0)) { | |
*(undefined4 *)(iVar1 + 0xb08) = 0x8000; | |
} | |
FUN_08006df0(param_1); | |
if ((DAT_08005920 < uVar2) && (*(char *)((int)param_1 + 6) == '\x01')) { | |
FUN_08006d90(*param_1,1,param_1 + 0x127,1,param_4); | |
} | |
return 0; | |
} | |
undefined4 FUN_08005924(undefined4 *param_1,undefined1 param_2) | |
{ | |
if (*(char *)(param_1 + 0x125) != '\x01') { | |
*(undefined1 *)(param_1 + 0x125) = 1; | |
*(undefined1 *)((int)param_1 + 0x11) = param_2; | |
FUN_08006c54(*param_1); | |
*(undefined1 *)(param_1 + 0x125) = 0; | |
return 0; | |
} | |
return 2; | |
} | |
undefined4 FUN_0800594a(undefined4 *param_1,uint param_2,uint param_3,int param_4) | |
{ | |
int iVar1; | |
undefined4 uVar2; | |
undefined4 *puVar3; | |
if ((param_2 & 0x80) == 0) { | |
iVar1 = (param_2 & 0xf) * 9 + 0x95; | |
*(undefined1 *)((int)param_1 + (param_2 & 0xf) * 0x24 + 0x255) = 0; | |
} | |
else { | |
iVar1 = (param_2 & 0xf) * 9 + 5; | |
*(undefined1 *)((int)param_1 + (param_2 & 0xf) * 0x24 + 0x15) = 1; | |
} | |
puVar3 = param_1 + iVar1; | |
*(char *)puVar3 = (char)(param_2 & 0xf); | |
puVar3[2] = param_3 & 0x7ff; | |
*(char *)(puVar3 + 1) = (char)param_4; | |
if (*(char *)((int)puVar3 + 1) != '\0') { | |
*(short *)((int)puVar3 + 0x1a) = (short)(param_2 & 0xf); | |
} | |
if (param_4 == 2) { | |
*(undefined1 *)((int)puVar3 + 5) = 0; | |
} | |
if (*(char *)(param_1 + 0x125) == '\x01') { | |
uVar2 = 2; | |
} | |
else { | |
*(undefined1 *)(param_1 + 0x125) = 1; | |
FUN_080066ae(*param_1); | |
uVar2 = 0; | |
*(undefined1 *)(param_1 + 0x125) = 0; | |
} | |
return uVar2; | |
} | |
undefined4 FUN_080059d6(undefined4 *param_1,uint param_2) | |
{ | |
int iVar1; | |
undefined4 uVar2; | |
if ((param_2 & 0x80) == 0) { | |
iVar1 = (param_2 & 0xf) * 9 + 0x95; | |
*(undefined1 *)((int)param_1 + (param_2 & 0xf) * 0x24 + 0x255) = 0; | |
} | |
else { | |
iVar1 = (param_2 & 0xf) * 9 + 5; | |
*(undefined1 *)((int)param_1 + (param_2 & 0xf) * 0x24 + 0x15) = 1; | |
} | |
*(byte *)(param_1 + iVar1) = (byte)param_2 & 0xf; | |
if (*(char *)(param_1 + 0x125) == '\x01') { | |
uVar2 = 2; | |
} | |
else { | |
*(undefined1 *)(param_1 + 0x125) = 1; | |
FUN_08006748(*param_1); | |
uVar2 = 0; | |
*(undefined1 *)(param_1 + 0x125) = 0; | |
} | |
return uVar2; | |
} | |
undefined4 FUN_08005a46(undefined4 *param_1,uint param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
param_2 = param_2 & 0xf; | |
param_1[param_2 * 9 + 0x98] = param_3; | |
param_1[param_2 * 9 + 0x99] = param_4; | |
param_1[param_2 * 9 + 0x9a] = 0; | |
*(undefined1 *)((int)param_1 + param_2 * 0x24 + 0x255) = 0; | |
*(char *)(param_1 + param_2 * 9 + 0x95) = (char)param_2; | |
if (*(char *)((int)param_1 + 6) == '\x01') { | |
param_1[param_2 * 9 + 0x9c] = param_3; | |
} | |
FUN_08006914(*param_1,param_1 + param_2 * 9 + 0x95); | |
return 0; | |
} | |
undefined4 FUN_08005a90(undefined4 *param_1,uint param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
param_2 = param_2 & 0xf; | |
param_1[param_2 * 9 + 8] = param_3; | |
param_1[param_2 * 9 + 9] = param_4; | |
param_1[param_2 * 9 + 10] = 0; | |
*(undefined1 *)((int)param_1 + param_2 * 0x24 + 0x15) = 1; | |
*(char *)(param_1 + param_2 * 9 + 5) = (char)param_2; | |
if (*(char *)((int)param_1 + 6) == '\x01') { | |
param_1[param_2 * 9 + 0xc] = param_3; | |
} | |
FUN_08006914(*param_1,param_1 + param_2 * 9 + 5); | |
return 0; | |
} | |
undefined4 FUN_08005ada(undefined4 *param_1,uint param_2) | |
{ | |
int iVar1; | |
undefined4 uVar2; | |
uint uVar3; | |
uVar3 = param_2 & 0xf; | |
if (*(byte *)(param_1 + 1) < uVar3) { | |
uVar2 = 1; | |
} | |
else { | |
if ((param_2 & 0x80) == 0) { | |
iVar1 = param_2 * 9 + 0x95; | |
*(undefined1 *)((int)param_1 + param_2 * 0x24 + 0x255) = 0; | |
} | |
else { | |
iVar1 = uVar3 * 9 + 5; | |
*(undefined1 *)((int)param_1 + uVar3 * 0x24 + 0x15) = 1; | |
} | |
*(undefined1 *)((int)(param_1 + iVar1) + 2) = 1; | |
*(char *)(param_1 + iVar1) = (char)uVar3; | |
if (*(char *)(param_1 + 0x125) == '\x01') { | |
uVar2 = 2; | |
} | |
else { | |
*(undefined1 *)(param_1 + 0x125) = 1; | |
FUN_08006b9e(*param_1); | |
if (uVar3 == 0) { | |
FUN_08006d90(*param_1,*(undefined1 *)((int)param_1 + 6),param_1 + 0x127); | |
} | |
uVar2 = 0; | |
*(undefined1 *)(param_1 + 0x125) = 0; | |
} | |
} | |
return uVar2; | |
} | |
undefined4 FUN_08005b60(undefined4 *param_1,uint param_2) | |
{ | |
int iVar1; | |
undefined4 uVar2; | |
uint uVar3; | |
uVar3 = param_2 & 0xf; | |
if (uVar3 <= *(byte *)(param_1 + 1)) { | |
if ((param_2 & 0x80) == 0) { | |
iVar1 = uVar3 * 9 + 0x95; | |
*(undefined1 *)((int)param_1 + uVar3 * 0x24 + 0x255) = 0; | |
} | |
else { | |
iVar1 = uVar3 * 9 + 5; | |
*(undefined1 *)((int)param_1 + uVar3 * 0x24 + 0x15) = 1; | |
} | |
*(undefined1 *)((int)(param_1 + iVar1) + 2) = 0; | |
*(char *)(param_1 + iVar1) = (char)uVar3; | |
if (*(char *)(param_1 + 0x125) == '\x01') { | |
uVar2 = 2; | |
} | |
else { | |
*(undefined1 *)(param_1 + 0x125) = 1; | |
FUN_08006bf8(*param_1); | |
uVar2 = 0; | |
*(undefined1 *)(param_1 + 0x125) = 0; | |
} | |
return uVar2; | |
} | |
return 1; | |
} | |
void FUN_08005bd4(undefined4 *param_1,uint param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
int iVar1; | |
if ((param_2 & 0x80) == 0) { | |
iVar1 = (param_2 & 0xf) * 9 + 0x95; | |
} | |
else { | |
iVar1 = (param_2 & 0xf) * 9 + 5; | |
} | |
FUN_08006828(*param_1,param_1 + iVar1,param_3,param_4,param_4); | |
return; | |
} | |
void FUN_08005c08(int *param_1) | |
{ | |
undefined1 uVar1; | |
int iVar2; | |
uint uVar3; | |
uint uVar4; | |
undefined4 uVar5; | |
int iVar6; | |
uint uVar7; | |
uint uVar8; | |
iVar6 = *param_1; | |
iVar2 = FUN_08006d0a(iVar6); | |
if ((iVar2 == 0) && (iVar2 = FUN_08006cac(*param_1), iVar2 != 0)) { | |
param_1[0x135] = (uint)(*(int *)(iVar6 + 0x808) << 10) >> 0x12; | |
uVar3 = FUN_08006cac(*param_1); | |
if ((uVar3 & 2) != 0) { | |
*(uint *)(*param_1 + 0x14) = *(uint *)(*param_1 + 0x14) & 2; | |
} | |
uVar3 = FUN_08006cac(*param_1); | |
if ((uVar3 & 0x10) != 0) { | |
*(uint *)(*param_1 + 0x18) = *(uint *)(*param_1 + 0x18) & 0xffffffef; | |
uVar3 = *(uint *)(iVar6 + 0x20); | |
uVar7 = uVar3 & 0xf; | |
if ((uVar3 & 0x1e0000) == 0x40000) { | |
if ((uVar3 & 0x7ff0) != 0) { | |
FUN_08006b58(iVar6,param_1[uVar7 * 9 + 0x98],(uVar3 << 0x11) >> 0x15); | |
uVar3 = uVar3 >> 4 & 0x7ff; | |
param_1[uVar7 * 9 + 0x98] = param_1[uVar7 * 9 + 0x98] + uVar3; | |
param_1[uVar7 * 9 + 0x9a] = param_1[uVar7 * 9 + 0x9a] + uVar3; | |
} | |
} | |
else if ((uVar3 & 0x1e0000) == 0xc0000) { | |
FUN_08006b58(iVar6,param_1 + 0x127,8); | |
param_1[uVar7 * 9 + 0x9a] = param_1[uVar7 * 9 + 0x9a] + ((uVar3 << 0x11) >> 0x15); | |
} | |
*(uint *)(*param_1 + 0x18) = *(uint *)(*param_1 + 0x18) | 0x10; | |
} | |
uVar3 = FUN_08006cac(*param_1); | |
if ((uVar3 & 0x80000) != 0) { | |
uVar7 = FUN_08006cb4(*param_1); | |
uVar3 = 0; | |
for (; uVar7 != 0; uVar7 = uVar7 >> 1) { | |
if ((uVar7 & 1) != 0) { | |
uVar4 = FUN_08006cd4(*param_1,uVar3 & 0xff); | |
if ((uVar4 & 1) != 0) { | |
*(undefined4 *)(iVar6 + uVar3 * 0x20 + 0xb08) = 1; | |
FUN_080057d0(param_1,uVar3); | |
} | |
if ((uVar4 & 8) != 0) { | |
*(undefined4 *)(iVar6 + uVar3 * 0x20 + 0xb08) = 8; | |
FUN_080058d4(param_1,uVar3); | |
} | |
if ((uVar4 & 0x10) != 0) { | |
*(undefined4 *)(iVar6 + uVar3 * 0x20 + 0xb08) = 0x10; | |
} | |
if ((uVar4 & 2) != 0) { | |
if ((*(uint *)(iVar6 + 0x14) & 0x80) != 0) { | |
*(uint *)(iVar6 + 0x804) = *(uint *)(iVar6 + 0x804) | 0x400; | |
} | |
if (*(char *)((int)param_1 + uVar3 * 0x24 + 599) == '\x01') { | |
*(undefined1 *)((int)param_1 + uVar3 * 0x24 + 599) = 0; | |
FUN_08006ea0(param_1,uVar3 & 0xff); | |
} | |
*(undefined4 *)(iVar6 + uVar3 * 0x20 + 0xb08) = 2; | |
} | |
if ((uVar4 & 0x20) != 0) { | |
*(undefined4 *)(iVar6 + uVar3 * 0x20 + 0xb08) = 0x20; | |
} | |
if ((uVar4 & 0x2000) != 0) { | |
*(undefined4 *)(iVar6 + uVar3 * 0x20 + 0xb08) = 0x2000; | |
} | |
} | |
uVar3 = uVar3 + 1; | |
} | |
} | |
uVar3 = FUN_08006cac(*param_1); | |
if ((uVar3 & 0x40000) != 0) { | |
uVar7 = FUN_08006cc4(*param_1); | |
uVar3 = 0; | |
for (; uVar7 != 0; uVar7 = uVar7 >> 1) { | |
if ((uVar7 & 1) != 0) { | |
uVar8 = uVar3 & 0xff; | |
uVar4 = FUN_08006ce6(*param_1,uVar8); | |
if ((uVar4 & 1) != 0) { | |
*(uint *)(iVar6 + 0x834) = *(uint *)(iVar6 + 0x834) & ~(1 << (uVar3 & 0xf)); | |
*(undefined4 *)(iVar6 + uVar3 * 0x20 + 0x908) = 1; | |
if (*(char *)((int)param_1 + 6) == '\x01') { | |
param_1[uVar3 * 9 + 8] = param_1[uVar3 * 9 + 8] + param_1[uVar3 * 9 + 7]; | |
if ((uVar3 == 0) && (param_1[9] == 0)) { | |
FUN_08006d90(*param_1,1,param_1 + 0x127); | |
} | |
} | |
FUN_08006e18(param_1,uVar8); | |
} | |
if ((uVar4 & 8) != 0) { | |
*(undefined4 *)(iVar6 + uVar3 * 0x20 + 0x908) = 8; | |
} | |
if ((uVar4 & 0x10) != 0) { | |
*(undefined4 *)(iVar6 + uVar3 * 0x20 + 0x908) = 0x10; | |
} | |
if ((uVar4 & 0x40) != 0) { | |
*(undefined4 *)(iVar6 + uVar3 * 0x20 + 0x908) = 0x40; | |
} | |
if ((uVar4 & 2) != 0) { | |
FUN_08006460(iVar6,uVar3); | |
if (*(char *)((int)param_1 + uVar3 * 0x24 + 0x17) == '\x01') { | |
*(undefined1 *)((int)param_1 + uVar3 * 0x24 + 0x17) = 0; | |
FUN_08006eac(param_1,uVar8); | |
} | |
*(undefined4 *)(iVar6 + uVar3 * 0x20 + 0x908) = 2; | |
} | |
if ((uVar4 & 0x80) != 0) { | |
FUN_0800555c(param_1,uVar3); | |
} | |
} | |
uVar3 = uVar3 + 1; | |
} | |
} | |
iVar2 = FUN_08006cac(*param_1); | |
if (iVar2 < 0) { | |
*(uint *)(iVar6 + 0x804) = *(uint *)(iVar6 + 0x804) & 0xfffffffe; | |
if ((char)param_1[0x133] == '\x01') { | |
*(undefined1 *)(param_1 + 0x133) = 0; | |
FUN_08006f64(param_1); | |
} | |
else { | |
FUN_08006e94(param_1); | |
} | |
*(uint *)(*param_1 + 0x14) = *(uint *)(*param_1 + 0x14) & 0x80000000; | |
} | |
uVar3 = FUN_08006cac(*param_1); | |
if ((uVar3 & 0x800) != 0) { | |
if ((*(uint *)(iVar6 + 0x808) & 1) != 0) { | |
FUN_08006e64(param_1); | |
} | |
*(uint *)(*param_1 + 0x14) = *(uint *)(*param_1 + 0x14) & 0x800; | |
} | |
uVar3 = FUN_08006cac(*param_1); | |
if ((uVar3 & 0x8000000) != 0) { | |
*(uint *)(*param_1 + 0x14) = *(uint *)(*param_1 + 0x14) & 0x8000000; | |
if ((char)param_1[0x133] == '\0') { | |
*(undefined1 *)(param_1 + 0x133) = 1; | |
param_1[0x134] = (uint)(*(int *)(*param_1 + 0x54) << 0x1a) >> 0x1c; | |
FUN_08006f64(param_1); | |
} | |
else { | |
FUN_08006e64(param_1); | |
} | |
} | |
uVar3 = FUN_08006cac(*param_1); | |
if ((uVar3 & 0x1000) != 0) { | |
*(uint *)(iVar6 + 0x804) = *(uint *)(iVar6 + 0x804) & 0xfffffffe; | |
FUN_08006460(*param_1,0x10); | |
for (uVar3 = 0; uVar3 < *(byte *)(param_1 + 1); uVar3 = uVar3 + 1) { | |
iVar2 = iVar6 + uVar3 * 0x20; | |
*(undefined4 *)(iVar2 + 0x908) = 0xfb7f; | |
*(uint *)(iVar2 + 0x900) = *(uint *)(iVar2 + 0x900) & 0xffdfffff; | |
*(undefined4 *)(iVar2 + 0xb08) = 0xfb7f; | |
*(uint *)(iVar2 + 0xb00) = *(uint *)(iVar2 + 0xb00) & 0xffdfffff; | |
*(uint *)(iVar2 + 0xb00) = *(uint *)(iVar2 + 0xb00) | 0x8000000; | |
} | |
*(uint *)(iVar6 + 0x81c) = *(uint *)(iVar6 + 0x81c) | 0x10001; | |
if (*(char *)((int)param_1 + 0xf) == '\0') { | |
*(uint *)(iVar6 + 0x814) = *(uint *)(iVar6 + 0x814) | 0x202b; | |
*(uint *)(iVar6 + 0x810) = *(uint *)(iVar6 + 0x810) | 0xb; | |
} | |
else { | |
*(uint *)(iVar6 + 0x884) = *(uint *)(iVar6 + 0x884) | 0xb; | |
*(uint *)(iVar6 + 0x844) = *(uint *)(iVar6 + 0x844) | 0xb; | |
} | |
*(uint *)(iVar6 + 0x800) = *(uint *)(iVar6 + 0x800) & 0xfffff80f; | |
FUN_08006d90(*param_1,*(undefined1 *)((int)param_1 + 6),param_1 + 0x127); | |
*(uint *)(*param_1 + 0x14) = *(uint *)(*param_1 + 0x14) & 0x1000; | |
} | |
uVar3 = FUN_08006cac(*param_1); | |
if ((uVar3 & 0x2000) != 0) { | |
FUN_08006d74(*param_1); | |
uVar1 = FUN_0800668c(*param_1); | |
*(undefined1 *)((int)param_1 + 7) = uVar1; | |
iVar2 = *param_1; | |
uVar5 = FUN_080019d0(); | |
FUN_08006364(iVar2,uVar5,*(undefined1 *)((int)param_1 + 7)); | |
FUN_08006e3a(param_1); | |
*(uint *)(*param_1 + 0x14) = *(uint *)(*param_1 + 0x14) & 0x2000; | |
} | |
uVar3 = FUN_08006cac(*param_1); | |
if ((uVar3 & 8) != 0) { | |
FUN_08006e2e(param_1); | |
*(uint *)(*param_1 + 0x14) = *(uint *)(*param_1 + 0x14) & 8; | |
} | |
uVar3 = FUN_08006cac(*param_1); | |
if ((uVar3 & 0x80) != 0) { | |
*(uint *)(iVar6 + 0x18) = *(uint *)(iVar6 + 0x18) & 0xffffff7f; | |
for (uVar3 = 1; uVar3 < *(byte *)(param_1 + 1); uVar3 = uVar3 + 1) { | |
if (*(char *)((int)param_1 + uVar3 * 0x24 + 599) == '\x01') { | |
FUN_08005bd4(param_1,uVar3 & 0xff); | |
} | |
} | |
} | |
uVar3 = FUN_08006cac(*param_1); | |
if ((uVar3 & 0x100000) != 0) { | |
for (uVar3 = 1; uVar3 < *(byte *)(param_1 + 1); uVar3 = uVar3 + 1) { | |
if (((char)param_1[uVar3 * 9 + 6] == '\x01') && (*(int *)(iVar6 + uVar3 * 0x20 + 0x900) < 0) | |
) { | |
*(undefined1 *)((int)param_1 + uVar3 * 0x24 + 0x17) = 1; | |
FUN_08005bd4(param_1,(uVar3 | 0xffffff80) & 0xff); | |
} | |
} | |
*(uint *)(*param_1 + 0x14) = *(uint *)(*param_1 + 0x14) & 0x100000; | |
} | |
uVar3 = FUN_08006cac(*param_1); | |
if ((uVar3 & 0x200000) != 0) { | |
for (uVar3 = 1; uVar3 < *(byte *)(param_1 + 1); uVar3 = uVar3 + 1) { | |
uVar7 = *(uint *)(iVar6 + uVar3 * 0x20 + 0xb00); | |
if ((((char)param_1[uVar3 * 9 + 0x96] == '\x01') && ((int)uVar7 < 0)) && | |
((uVar7 & 0x10000) == (param_1[0x135] & 1U))) { | |
*(undefined1 *)((int)param_1 + uVar3 * 0x24 + 599) = 1; | |
*(uint *)(iVar6 + 0x18) = *(uint *)(iVar6 + 0x18) | 0x80; | |
if ((*(uint *)(iVar6 + 0x14) & 0x80) == 0) { | |
*(uint *)(iVar6 + 0x804) = *(uint *)(iVar6 + 0x804) | 0x200; | |
break; | |
} | |
} | |
} | |
*(uint *)(*param_1 + 0x14) = *(uint *)(*param_1 + 0x14) & 0x200000; | |
} | |
uVar3 = FUN_08006cac(*param_1); | |
if ((uVar3 & 0x40000000) != 0) { | |
FUN_08006eb8(param_1); | |
*(uint *)(*param_1 + 0x14) = *(uint *)(*param_1 + 0x14) & 0x40000000; | |
} | |
uVar3 = FUN_08006cac(*param_1); | |
if ((uVar3 & 4) != 0) { | |
uVar3 = *(uint *)(*param_1 + 4); | |
if ((uVar3 & 4) != 0) { | |
FUN_08006ec4(param_1); | |
} | |
*(uint *)(*param_1 + 4) = *(uint *)(*param_1 + 4) | uVar3; | |
} | |
} | |
return; | |
} | |
undefined4 FUN_0800620c(int *param_1,int param_2,int param_3) | |
{ | |
uint uVar1; | |
uint uVar2; | |
int iVar3; | |
iVar3 = *param_1; | |
if (param_2 == 0) { | |
*(uint *)(iVar3 + 0x28) = *(uint *)(iVar3 + 0x24) | param_3 << 0x10; | |
} | |
else { | |
uVar1 = *(uint *)(iVar3 + 0x24) + (*(uint *)(iVar3 + 0x28) >> 0x10); | |
for (uVar2 = 0; uVar2 < param_2 - 1U; uVar2 = uVar2 + 1 & 0xff) { | |
uVar1 = uVar1 + (*(uint *)(iVar3 + (uVar2 + 0x40) * 4 + 4) >> 0x10); | |
} | |
*(uint *)(iVar3 + (param_2 + 0x3f) * 4 + 4) = uVar1 | param_3 << 0x10; | |
} | |
return 0; | |
} | |
undefined4 FUN_08006258(int *param_1,undefined4 param_2) | |
{ | |
*(undefined4 *)(*param_1 + 0x24) = param_2; | |
return 0; | |
} | |
void FUN_08006260(int *param_1) | |
{ | |
int iVar1; | |
iVar1 = *param_1; | |
param_1[0x136] = 1; | |
*(undefined1 *)(param_1 + 0x133) = 0; | |
*(uint *)(iVar1 + 0x18) = *(uint *)(iVar1 + 0x18) | 0x8000000; | |
*(uint *)(iVar1 + 0x54) = *(uint *)(iVar1 + 0x54) | 0x10000003; | |
return; | |
} | |
undefined4 FUN_08006286(int param_1) | |
{ | |
uint local_4; | |
local_4 = 0; | |
do { | |
local_4 = local_4 + 1; | |
if (0xf000000 < local_4) { | |
return 3; | |
} | |
} while (-1 < *(int *)(param_1 + 0x10)); | |
local_4 = 0; | |
*(uint *)(param_1 + 0x10) = *(uint *)(param_1 + 0x10) | 1; | |
do { | |
local_4 = local_4 + 1; | |
if (0xf000000 < local_4) { | |
return 3; | |
} | |
} while ((*(uint *)(param_1 + 0x10) & 1) != 0); | |
return 0; | |
} | |
void FUN_080062d0(int param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,char param_5) | |
{ | |
undefined1 uStack_a; | |
undefined1 local_7; | |
undefined1 local_3; | |
local_7 = (char)((uint)param_3 >> 8); | |
if (local_7 == '\x01') { | |
*(uint *)(param_1 + 0x38) = *(uint *)(param_1 + 0x38) & 0xfffeffff; | |
*(uint *)(param_1 + 0xc) = *(uint *)(param_1 + 0xc) & 0xffbdffbf; | |
*(uint *)(param_1 + 0xc) = *(uint *)(param_1 + 0xc) & 0xffcfffff; | |
if (param_5 == '\x01') { | |
*(uint *)(param_1 + 0xc) = *(uint *)(param_1 + 0xc) | 0x100000; | |
} | |
FUN_08006286(param_1); | |
} | |
else { | |
*(uint *)(param_1 + 0xc) = *(uint *)(param_1 + 0xc) | 0x40; | |
FUN_08006286(param_1); | |
local_3 = (char)((uint)param_4 >> 8); | |
if (local_3 == '\0') { | |
*(uint *)(param_1 + 0x38) = *(uint *)(param_1 + 0x38) | 0x10000; | |
} | |
else { | |
*(uint *)(param_1 + 0x38) = *(uint *)(param_1 + 0x38) & 0xfffeffff; | |
} | |
} | |
uStack_a = (char)((uint)param_2 >> 0x10); | |
if (uStack_a == '\x01') { | |
*(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 6; | |
*(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 0x20; | |
} | |
return; | |
} | |
undefined4 FUN_08006364(int param_1,int param_2,int param_3) | |
{ | |
int iVar1; | |
if (param_3 == 2) { | |
if (DAT_08006410 < (uint)(DAT_0800640c + param_2)) { | |
if (DAT_08006418 < (uint)(DAT_08006414 + param_2)) { | |
if (DAT_0800641c < param_2 - 16000000U) { | |
if (param_2 + 0xfef98c80U < DAT_08006420) { | |
iVar1 = 0xc; | |
} | |
else if (DAT_08006428 < (uint)(DAT_08006424 + param_2)) { | |
if ((uint)(DAT_0800642c + param_2) < DAT_08006430) { | |
iVar1 = 10; | |
} | |
else if ((uint)(DAT_08006434 + param_2) < DAT_08006438) { | |
iVar1 = 9; | |
} | |
else if (param_2 + 0xfe91ca00U < DAT_0800643c) { | |
iVar1 = 8; | |
} | |
else if ((uint)(DAT_08006440 + param_2) < DAT_08006444) { | |
iVar1 = 7; | |
} | |
else { | |
iVar1 = 6; | |
} | |
} | |
else { | |
iVar1 = 0xb; | |
} | |
} | |
else { | |
iVar1 = 0xd; | |
} | |
} | |
else { | |
iVar1 = 0xe; | |
} | |
} | |
else { | |
iVar1 = 0xf; | |
} | |
} | |
else { | |
iVar1 = 9; | |
} | |
*(uint *)(param_1 + 0xc) = *(uint *)(param_1 + 0xc) & 0xffffc3ff; | |
*(uint *)(param_1 + 0xc) = *(uint *)(param_1 + 0xc) | iVar1 << 10; | |
return 0; | |
} | |
undefined4 FUN_08006448(int param_1) | |
{ | |
*(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) | 1; | |
return 0; | |
} | |
undefined4 FUN_08006454(int param_1) | |
{ | |
*(uint *)(param_1 + 8) = *(uint *)(param_1 + 8) & 0xfffffffe; | |
return 0; | |
} | |
undefined4 FUN_08006460(int param_1,int param_2) | |
{ | |
uint local_4; | |
local_4 = 0; | |
do { | |
local_4 = local_4 + 1; | |
if (0xf000000 < local_4) { | |
return 3; | |
} | |
} while (-1 < *(int *)(param_1 + 0x10)); | |
local_4 = 0; | |
*(uint *)(param_1 + 0x10) = param_2 << 6 | 0x20; | |
do { | |
local_4 = local_4 + 1; | |
if (0xf000000 < local_4) { | |
return 3; | |
} | |
} while ((*(uint *)(param_1 + 0x10) & 0x20) != 0); | |
return 0; | |
} | |
undefined4 FUN_080064aa(int param_1) | |
{ | |
uint local_4; | |
local_4 = 0; | |
do { | |
local_4 = local_4 + 1; | |
if (0xf000000 < local_4) { | |
return 3; | |
} | |
} while (-1 < *(int *)(param_1 + 0x10)); | |
local_4 = 0; | |
*(undefined4 *)(param_1 + 0x10) = 0x10; | |
do { | |
local_4 = local_4 + 1; | |
if (0xf000000 < local_4) { | |
return 3; | |
} | |
} while ((*(uint *)(param_1 + 0x10) & 0x10) != 0); | |
return 0; | |
} | |
undefined4 FUN_080064f0(int param_1,uint param_2) | |
{ | |
*(uint *)(param_1 + 0x800) = param_2 | *(uint *)(param_1 + 0x800); | |
return 0; | |
} | |
int FUN_08006500(uint *param_1,uint param_2,uint *param_3,undefined4 param_4) | |
{ | |
int iVar1; | |
int iVar2; | |
uint *puVar3; | |
uint uVar4; | |
char cStack_a; | |
char cStack_9; | |
char local_7; | |
char local_6; | |
char local_2; | |
puVar3 = param_3; | |
for (uVar4 = 0; uVar4 < 0xf; uVar4 = uVar4 + 1) { | |
puVar3 = param_1 + uVar4 + 0x40; | |
puVar3[1] = 0; | |
} | |
local_2 = (char)((uint)param_4 >> 0x10); | |
if (local_2 == '\0') { | |
param_1[0x201] = param_1[0x201] | 2; | |
param_1[0xe] = param_1[0xe] & 0xffdfffff; | |
*param_1 = *param_1 | 0x40; | |
*param_1 = *param_1 | 0x80; | |
} | |
else { | |
param_1[0xe] = param_1[0xe] | 0x200000; | |
} | |
param_1[0x380] = 0; | |
local_7 = (char)((uint)param_3 >> 8); | |
if (local_7 == '\x01') { | |
cStack_9 = (char)(param_2 >> 0x18); | |
if (cStack_9 == '\0') { | |
FUN_080064f0(param_1,0,puVar3,0,param_4); | |
} | |
else { | |
FUN_080064f0(param_1,1,puVar3,cStack_9,param_4); | |
} | |
} | |
else { | |
FUN_080064f0(param_1,3,puVar3,local_7,param_4); | |
} | |
iVar1 = FUN_08006460(param_1,0x10); | |
if (iVar1 != 0) { | |
iVar1 = 1; | |
} | |
iVar2 = FUN_080064aa(param_1); | |
if (iVar2 != 0) { | |
iVar1 = 1; | |
} | |
param_1[0x204] = 0; | |
param_1[0x205] = 0; | |
param_1[0x207] = 0; | |
for (uVar4 = 0; uVar4 < (param_2 & 0xff); uVar4 = uVar4 + 1) { | |
if ((int)param_1[uVar4 * 8 + 0x240] < 0) { | |
if (uVar4 == 0) { | |
param_1[0x240] = 0x8000000; | |
} | |
else { | |
param_1[uVar4 * 8 + 0x240] = 0x48000000; | |
} | |
} | |
else { | |
param_1[uVar4 * 8 + 0x240] = 0; | |
} | |
param_1[uVar4 * 8 + 0x244] = 0; | |
param_1[uVar4 * 8 + 0x242] = 0xfb7f; | |
} | |
for (uVar4 = 0; uVar4 < (param_2 & 0xff); uVar4 = uVar4 + 1) { | |
if ((int)param_1[uVar4 * 8 + 0x2c0] < 0) { | |
if (uVar4 == 0) { | |
param_1[0x2c0] = 0x8000000; | |
} | |
else { | |
param_1[uVar4 * 8 + 0x2c0] = 0x48000000; | |
} | |
} | |
else { | |
param_1[uVar4 * 8 + 0x2c0] = 0; | |
} | |
param_1[uVar4 * 8 + 0x2c4] = 0; | |
param_1[uVar4 * 8 + 0x2c2] = 0xfb7f; | |
} | |
param_1[0x204] = param_1[0x204] & 0xfffffeff; | |
param_1[6] = 0; | |
param_1[5] = 0xbfffffff; | |
cStack_a = (char)(param_2 >> 0x10); | |
if (cStack_a == '\0') { | |
param_1[6] = param_1[6] | 0x10; | |
} | |
param_1[6] = DAT_08006688 | param_1[6]; | |
local_6 = (char)((uint)param_3 >> 0x10); | |
if (local_6 != '\0') { | |
param_1[6] = param_1[6] | 8; | |
} | |
if (local_2 == '\x01') { | |
param_1[6] = param_1[6] | 0x40000004; | |
} | |
return iVar1; | |
} | |
undefined4 FUN_0800668c(int param_1) | |
{ | |
uint uVar1; | |
uVar1 = *(uint *)(param_1 + 0x808) & 6; | |
if (uVar1 == 2) { | |
return 2; | |
} | |
if (uVar1 != 6) { | |
if (uVar1 == 0) { | |
return 0; | |
} | |
return 0xf; | |
} | |
return 2; | |
} | |
undefined4 FUN_080066ae(int param_1,byte *param_2) | |
{ | |
uint uVar1; | |
uVar1 = (uint)*param_2; | |
if (param_2[1] == 1) { | |
*(uint *)(param_1 + 0x81c) = 1 << (uVar1 & 0xf) & 0xffffU | *(uint *)(param_1 + 0x81c); | |
param_1 = param_1 + uVar1 * 0x20; | |
if ((*(uint *)(param_1 + 0x900) & 0x8000) == 0) { | |
*(uint *)(param_1 + 0x900) = | |
*(uint *)(param_1 + 0x900) | | |
*(uint *)(param_2 + 8) & 0x7ff | (uint)param_2[4] << 0x12 | uVar1 << 0x16 | 0x10008000; | |
} | |
} | |
else { | |
*(uint *)(param_1 + 0x81c) = *(uint *)(param_1 + 0x81c) | (1 << (uVar1 & 0xf)) << 0x10; | |
param_1 = param_1 + uVar1 * 0x20; | |
if ((*(uint *)(param_1 + 0xb00) & 0x8000) == 0) { | |
*(uint *)(param_1 + 0xb00) = | |
*(uint *)(param_1 + 0xb00) | *(uint *)(param_2 + 8) & 0x7ff | (uint)param_2[4] << 0x12 | | |
0x10008000; | |
} | |
} | |
return 0; | |
} | |
undefined4 FUN_08006748(int param_1,byte *param_2) | |
{ | |
int iVar1; | |
if (param_2[1] == 1) { | |
iVar1 = param_1 + (uint)*param_2 * 0x20; | |
if (*(int *)(iVar1 + 0x900) < 0) { | |
*(uint *)(iVar1 + 0x900) = *(uint *)(iVar1 + 0x900) | 0x8000000; | |
*(uint *)(iVar1 + 0x900) = *(uint *)(iVar1 + 0x900) | 0x40000000; | |
} | |
*(uint *)(param_1 + 0x83c) = *(uint *)(param_1 + 0x83c) & ~(1 << (*param_2 & 0xf) & 0xffffU); | |
*(uint *)(param_1 + 0x81c) = *(uint *)(param_1 + 0x81c) & ~(1 << (*param_2 & 0xf) & 0xffffU); | |
*(uint *)(iVar1 + 0x900) = DAT_08006824 & *(uint *)(iVar1 + 0x900); | |
} | |
else { | |
iVar1 = param_1 + (uint)*param_2 * 0x20; | |
if (*(int *)(iVar1 + 0xb00) < 0) { | |
*(uint *)(iVar1 + 0xb00) = *(uint *)(iVar1 + 0xb00) | 0x8000000; | |
*(uint *)(iVar1 + 0xb00) = *(uint *)(iVar1 + 0xb00) | 0x40000000; | |
} | |
*(uint *)(param_1 + 0x83c) = *(uint *)(param_1 + 0x83c) & ~((1 << (*param_2 & 0xf)) << 0x10); | |
*(uint *)(param_1 + 0x81c) = *(uint *)(param_1 + 0x81c) & ~((1 << (*param_2 & 0xf)) << 0x10); | |
*(uint *)(iVar1 + 0xb00) = DAT_08006820 & *(uint *)(iVar1 + 0xb00); | |
} | |
return 0; | |
} | |
undefined1 FUN_08006828(int param_1,byte *param_2) | |
{ | |
int iVar1; | |
uint local_c; | |
local_c = 0; | |
if (param_2[1] == 1) { | |
iVar1 = param_1 + (uint)*param_2 * 0x20; | |
if (*(int *)(iVar1 + 0x900) < 0) { | |
*(uint *)(iVar1 + 0x900) = *(uint *)(iVar1 + 0x900) | 0x8000000; | |
iVar1 = param_1 + (uint)*param_2 * 0x20; | |
*(uint *)(iVar1 + 0x900) = *(uint *)(iVar1 + 0x900) | 0x40000000; | |
do { | |
local_c = local_c + 1; | |
if (10000 < local_c) { | |
return 1; | |
} | |
} while (*(int *)(param_1 + (uint)*param_2 * 0x20 + 0x900) < 0); | |
} | |
} | |
else { | |
iVar1 = param_1 + (uint)*param_2 * 0x20; | |
if (*(int *)(iVar1 + 0xb00) < 0) { | |
*(uint *)(iVar1 + 0xb00) = *(uint *)(iVar1 + 0xb00) | 0x8000000; | |
iVar1 = param_1 + (uint)*param_2 * 0x20; | |
*(uint *)(iVar1 + 0xb00) = *(uint *)(iVar1 + 0xb00) | 0x40000000; | |
do { | |
local_c = local_c + 1; | |
if (10000 < local_c) { | |
return 1; | |
} | |
} while (*(int *)(param_1 + (uint)*param_2 * 0x20 + 0xb00) < 0); | |
} | |
} | |
return 0; | |
} | |
undefined4 FUN_080068e6(int param_1,undefined4 *param_2,int param_3,int param_4,char param_5) | |
{ | |
uint uVar1; | |
if (param_5 == '\0') { | |
for (uVar1 = 0; uVar1 < param_4 + 3U >> 2; uVar1 = uVar1 + 1) { | |
*(undefined4 *)(param_1 + param_3 * 0x1000 + 0x1000) = *param_2; | |
param_2 = param_2 + 1; | |
} | |
} | |
return 0; | |
} | |
undefined4 FUN_08006914(int param_1,byte *param_2,int param_3) | |
{ | |
uint uVar1; | |
uint uVar2; | |
int iVar3; | |
uVar1 = (uint)*param_2; | |
if (param_2[1] == 1) { | |
if (*(int *)(param_2 + 0x10) == 0) { | |
iVar3 = param_1 + uVar1 * 0x20; | |
*(uint *)(iVar3 + 0x910) = *(uint *)(iVar3 + 0x910) & 0xe007ffff; | |
*(uint *)(iVar3 + 0x910) = *(uint *)(iVar3 + 0x910) | 0x80000; | |
*(uint *)(iVar3 + 0x910) = *(uint *)(iVar3 + 0x910) & 0xfff80000; | |
} | |
else { | |
iVar3 = param_1 + uVar1 * 0x20; | |
*(uint *)(iVar3 + 0x910) = *(uint *)(iVar3 + 0x910) & 0xfff80000; | |
*(uint *)(iVar3 + 0x910) = *(uint *)(iVar3 + 0x910) & 0xe007ffff; | |
if (uVar1 == 0) { | |
if (*(uint *)(param_2 + 8) < *(uint *)(param_2 + 0x10)) { | |
*(uint *)(param_2 + 0x10) = *(uint *)(param_2 + 8); | |
} | |
*(uint *)(iVar3 + 0x910) = *(uint *)(iVar3 + 0x910) | 0x80000; | |
} | |
else { | |
uVar2 = ((*(int *)(param_2 + 0x10) + *(uint *)(param_2 + 8)) - 1) / *(uint *)(param_2 + 8); | |
*(uint *)(iVar3 + 0x910) = DAT_08006b54 & uVar2 << 0x13 | *(uint *)(iVar3 + 0x910); | |
if (param_2[4] == 1) { | |
*(uint *)(iVar3 + 0x910) = *(uint *)(iVar3 + 0x910) & 0x9fffffff; | |
*(uint *)(iVar3 + 0x910) = *(uint *)(iVar3 + 0x910) | (uVar2 & 3) << 0x1d; | |
} | |
} | |
*(uint *)(iVar3 + 0x910) = *(uint *)(iVar3 + 0x910) | *(uint *)(param_2 + 0x10) & 0x7ffff; | |
} | |
if (param_3 == 1) { | |
if (*(int *)(param_2 + 0x1c) != 0) { | |
*(int *)(param_1 + uVar1 * 0x20 + 0x914) = *(int *)(param_2 + 0x1c); | |
} | |
if (param_2[4] == 1) { | |
if ((*(uint *)(param_1 + 0x808) & 0x100) == 0) { | |
iVar3 = param_1 + uVar1 * 0x20; | |
*(uint *)(iVar3 + 0x900) = *(uint *)(iVar3 + 0x900) | 0x20000000; | |
} | |
else { | |
iVar3 = param_1 + uVar1 * 0x20; | |
*(uint *)(iVar3 + 0x900) = *(uint *)(iVar3 + 0x900) | 0x10000000; | |
} | |
} | |
param_1 = param_1 + uVar1 * 0x20; | |
*(uint *)(param_1 + 0x900) = *(uint *)(param_1 + 0x900) | 0x84000000; | |
} | |
else { | |
iVar3 = param_1 + uVar1 * 0x20; | |
*(uint *)(iVar3 + 0x900) = *(uint *)(iVar3 + 0x900) | 0x84000000; | |
if (param_2[4] == 1) { | |
if ((*(uint *)(param_1 + 0x808) & 0x100) == 0) { | |
*(uint *)(iVar3 + 0x900) = *(uint *)(iVar3 + 0x900) | 0x20000000; | |
} | |
else { | |
*(uint *)(iVar3 + 0x900) = *(uint *)(iVar3 + 0x900) | 0x10000000; | |
} | |
FUN_080068e6(param_1,*(undefined4 *)(param_2 + 0xc),*param_2,*(undefined2 *)(param_2 + 0x10) | |
,param_3); | |
} | |
else if (*(int *)(param_2 + 0x10) != 0) { | |
*(uint *)(param_1 + 0x834) = *(uint *)(param_1 + 0x834) | 1 << (*param_2 & 0xf); | |
} | |
} | |
} | |
else { | |
iVar3 = param_1 + uVar1 * 0x20; | |
*(uint *)(iVar3 + 0xb10) = *(uint *)(iVar3 + 0xb10) & 0xfff80000; | |
*(uint *)(iVar3 + 0xb10) = *(uint *)(iVar3 + 0xb10) & 0xe007ffff; | |
if (uVar1 == 0) { | |
if (*(int *)(param_2 + 0x10) != 0) { | |
*(undefined4 *)(param_2 + 0x10) = *(undefined4 *)(param_2 + 8); | |
} | |
*(uint *)(param_2 + 0x20) = *(uint *)(param_2 + 8); | |
*(uint *)(iVar3 + 0xb10) = *(uint *)(param_2 + 8) & 0x7ffff | *(uint *)(iVar3 + 0xb10); | |
*(uint *)(iVar3 + 0xb10) = *(uint *)(iVar3 + 0xb10) | 0x80000; | |
} | |
else if (*(int *)(param_2 + 0x10) == 0) { | |
*(uint *)(iVar3 + 0xb10) = *(uint *)(iVar3 + 0xb10) | *(uint *)(param_2 + 8) & 0x7ffff; | |
*(uint *)(iVar3 + 0xb10) = *(uint *)(iVar3 + 0xb10) | 0x80000; | |
} | |
else { | |
uVar2 = *(uint *)(param_2 + 8); | |
uVar1 = ((*(int *)(param_2 + 0x10) + uVar2) - 1) / uVar2 & 0xffff; | |
*(uint *)(param_2 + 0x20) = uVar1 * uVar2; | |
*(uint *)(iVar3 + 0xb10) = DAT_08006b54 & uVar1 << 0x13 | *(uint *)(iVar3 + 0xb10); | |
*(uint *)(iVar3 + 0xb10) = *(uint *)(iVar3 + 0xb10) | *(uint *)(param_2 + 0x20) & 0x7ffff; | |
} | |
if ((param_3 == 1) && (*(int *)(param_2 + 0xc) != 0)) { | |
*(int *)(iVar3 + 0xb14) = *(int *)(param_2 + 0xc); | |
} | |
if (param_2[4] == 1) { | |
if ((*(uint *)(param_1 + 0x808) & 0x100) == 0) { | |
*(uint *)(iVar3 + 0xb00) = *(uint *)(iVar3 + 0xb00) | 0x20000000; | |
} | |
else { | |
*(uint *)(iVar3 + 0xb00) = *(uint *)(iVar3 + 0xb00) | 0x10000000; | |
} | |
} | |
*(uint *)(iVar3 + 0xb00) = *(uint *)(iVar3 + 0xb00) | 0x84000000; | |
} | |
return 0; | |
} | |
void FUN_08006b58(int param_1,undefined4 *param_2,uint param_3) | |
{ | |
byte bVar1; | |
uint uVar2; | |
uint uVar3; | |
uVar2 = param_3 & 3; | |
for (uVar3 = 0; uVar3 < param_3 >> 2; uVar3 = uVar3 + 1) { | |
*param_2 = *(undefined4 *)(param_1 + 0x1000); | |
param_2 = param_2 + 1; | |
} | |
if (uVar2 != 0) { | |
uVar3 = *(uint *)(param_1 + 0x1000); | |
bVar1 = 0; | |
do { | |
*(char *)param_2 = (char)(uVar3 >> ((bVar1 & 0x1f) << 3)); | |
bVar1 = bVar1 + 1; | |
uVar2 = uVar2 - 1 & 0xffff; | |
param_2 = (undefined4 *)((int)param_2 + 1); | |
} while (uVar2 != 0); | |
} | |
return; | |
} | |
undefined4 FUN_08006b9e(int param_1,byte *param_2) | |
{ | |
uint uVar1; | |
uVar1 = (uint)*param_2; | |
if (param_2[1] == 1) { | |
param_1 = param_1 + uVar1 * 0x20; | |
if ((-1 < *(int *)(param_1 + 0x900)) && (uVar1 != 0)) { | |
*(uint *)(param_1 + 0x900) = *(uint *)(param_1 + 0x900) & 0xbfffffff; | |
} | |
*(uint *)(param_1 + 0x900) = *(uint *)(param_1 + 0x900) | 0x200000; | |
} | |
else { | |
param_1 = param_1 + uVar1 * 0x20; | |
if ((-1 < *(int *)(param_1 + 0xb00)) && (uVar1 != 0)) { | |
*(uint *)(param_1 + 0xb00) = *(uint *)(param_1 + 0xb00) & 0xbfffffff; | |
} | |
*(uint *)(param_1 + 0xb00) = *(uint *)(param_1 + 0xb00) | 0x200000; | |
} | |
return 0; | |
} | |
undefined4 FUN_08006bf8(int param_1,byte *param_2) | |
{ | |
if (param_2[1] == 1) { | |
param_1 = param_1 + (uint)*param_2 * 0x20; | |
*(uint *)(param_1 + 0x900) = *(uint *)(param_1 + 0x900) & 0xffdfffff; | |
if ((byte)(param_2[4] - 2) < 2) { | |
*(uint *)(param_1 + 0x900) = *(uint *)(param_1 + 0x900) | 0x10000000; | |
} | |
} | |
else { | |
param_1 = param_1 + (uint)*param_2 * 0x20; | |
*(uint *)(param_1 + 0xb00) = *(uint *)(param_1 + 0xb00) & 0xffdfffff; | |
if ((byte)(param_2[4] - 2) < 2) { | |
*(uint *)(param_1 + 0xb00) = *(uint *)(param_1 + 0xb00) | 0x10000000; | |
} | |
} | |
return 0; | |
} | |
undefined4 FUN_08006c54(int param_1,uint param_2) | |
{ | |
*(uint *)(param_1 + 0x800) = *(uint *)(param_1 + 0x800) & 0xfffff80f; | |
*(uint *)(param_1 + 0x800) = *(uint *)(param_1 + 0x800) | (param_2 & 0x7f) << 4; | |
return 0; | |
} | |
undefined4 FUN_08006c74(int param_1) | |
{ | |
*(uint *)(param_1 + 0xe00) = *(uint *)(param_1 + 0xe00) & 0xfffffffc; | |
*(uint *)(param_1 + 0x804) = *(uint *)(param_1 + 0x804) & 0xfffffffd; | |
return 0; | |
} | |
undefined4 FUN_08006c90(int param_1) | |
{ | |
*(uint *)(param_1 + 0xe00) = *(uint *)(param_1 + 0xe00) & 0xfffffffc; | |
*(uint *)(param_1 + 0x804) = *(uint *)(param_1 + 0x804) | 2; | |
return 0; | |
} | |
uint FUN_08006cac(int param_1) | |
{ | |
return *(uint *)(param_1 + 0x18) & *(uint *)(param_1 + 0x14); | |
} | |
uint FUN_08006cb4(int param_1) | |
{ | |
return (*(uint *)(param_1 + 0x81c) & *(uint *)(param_1 + 0x818)) >> 0x10; | |
} | |
uint FUN_08006cc4(int param_1) | |
{ | |
return *(uint *)(param_1 + 0x81c) & *(uint *)(param_1 + 0x818) & 0xffff; | |
} | |
uint FUN_08006cd4(int param_1,int param_2) | |
{ | |
return *(uint *)(param_1 + 0x814) & *(uint *)(param_1 + param_2 * 0x20 + 0xb08); | |
} | |
uint FUN_08006ce6(int param_1,uint param_2) | |
{ | |
return *(uint *)(param_1 + param_2 * 0x20 + 0x908) & | |
((*(uint *)(param_1 + 0x834) >> (param_2 & 0xf) & 1) << 7 | *(uint *)(param_1 + 0x810)); | |
} | |
uint FUN_08006d0a(int param_1) | |
{ | |
return *(uint *)(param_1 + 0x14) & 1; | |
} | |
bool FUN_08006d12(int param_1,int param_2) | |
{ | |
int iVar1; | |
uint uVar2; | |
*(uint *)(param_1 + 0xc) = *(uint *)(param_1 + 0xc) & 0x9fffffff; | |
if (param_2 == 1) { | |
*(uint *)(param_1 + 0xc) = *(uint *)(param_1 + 0xc) | 0x20000000; | |
uVar2 = 0; | |
do { | |
FUN_08002f6c(10); | |
uVar2 = uVar2 + 10; | |
iVar1 = FUN_08006d0a(param_1); | |
if (iVar1 == 1) break; | |
} while (uVar2 < 200); | |
} | |
else { | |
if (param_2 != 0) { | |
return true; | |
} | |
*(uint *)(param_1 + 0xc) = *(uint *)(param_1 + 0xc) | 0x40000000; | |
uVar2 = 0; | |
do { | |
FUN_08002f6c(10); | |
uVar2 = uVar2 + 10; | |
iVar1 = FUN_08006d0a(param_1); | |
if (iVar1 == 0) break; | |
} while (uVar2 < 200); | |
} | |
return uVar2 == 200; | |
} | |
undefined4 FUN_08006d74(int param_1) | |
{ | |
*(uint *)(param_1 + 0x900) = *(uint *)(param_1 + 0x900) & 0xfffff800; | |
*(uint *)(param_1 + 0x804) = *(uint *)(param_1 + 0x804) | 0x100; | |
return 0; | |
} | |
undefined4 FUN_08006d90(int param_1,int param_2,undefined4 param_3) | |
{ | |
if ((*(uint *)(param_1 + 0x40) <= DAT_08006dec) || (-1 < *(int *)(param_1 + 0xb00))) { | |
*(undefined4 *)(param_1 + 0xb10) = 0; | |
*(uint *)(param_1 + 0xb10) = *(uint *)(param_1 + 0xb10) | 0x80000; | |
*(uint *)(param_1 + 0xb10) = *(uint *)(param_1 + 0xb10) | 0x18; | |
*(uint *)(param_1 + 0xb10) = *(uint *)(param_1 + 0xb10) | 0x60000000; | |
if (param_2 == 1) { | |
*(undefined4 *)(param_1 + 0xb14) = param_3; | |
*(uint *)(param_1 + 0xb00) = *(uint *)(param_1 + 0xb00) | 0x80008000; | |
} | |
} | |
return 0; | |
} | |
void FUN_08006df0(int param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
FUN_0800448c(*(undefined4 *)(param_1 + 0x4e0),param_1 + 0x49c,param_3,param_4,param_4); | |
return; | |
} | |
void FUN_08006e00(int param_1,int param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
int iVar1; | |
iVar1 = param_1 + param_2 * 0x24; | |
FUN_08004630(*(undefined4 *)(param_1 + 0x4e0),param_2,*(undefined4 *)(iVar1 + 0x260),iVar1,param_4 | |
); | |
return; | |
} | |
void FUN_08006e18(int param_1,int param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
int iVar1; | |
iVar1 = param_1 + param_2 * 0x24; | |
FUN_080046f4(*(undefined4 *)(param_1 + 0x4e0),param_2,*(undefined4 *)(iVar1 + 0x20),iVar1,param_4) | |
; | |
return; | |
} | |
void FUN_08006e2e(int param_1) | |
{ | |
FUN_08004586(*(undefined4 *)(param_1 + 0x4e0)); | |
return; | |
} | |
void FUN_08006e3a(int param_1) | |
{ | |
char cVar1; | |
cVar1 = *(char *)(param_1 + 7); | |
if (cVar1 != '\0') { | |
if (cVar1 != '\x02') { | |
// WARNING: Subroutine does not return | |
SystemHalt(); | |
} | |
cVar1 = '\x01'; | |
} | |
FUN_08004548(*(undefined4 *)(param_1 + 0x4e0),cVar1); | |
FUN_080044e4(*(undefined4 *)(param_1 + 0x4e0)); | |
return; | |
} | |
void FUN_08006e64(int *param_1) | |
{ | |
FUN_0800454e(param_1[0x138]); | |
*(uint *)(*param_1 + 0xe00) = *(uint *)(*param_1 + 0xe00) | 1; | |
if (*(char *)((int)param_1 + 0xb) != '\0') { | |
*(uint *)(DAT_08006e90 + 0x10) = *(uint *)(DAT_08006e90 + 0x10) | 6; | |
} | |
return; | |
} | |
void FUN_08006e94(int param_1) | |
{ | |
FUN_0800456c(*(undefined4 *)(param_1 + 0x4e0)); | |
return; | |
} | |
void FUN_08006ea0(int param_1) | |
{ | |
FUN_080045d6(*(undefined4 *)(param_1 + 0x4e0)); | |
return; | |
} | |
void FUN_08006eac(int param_1) | |
{ | |
FUN_080045a8(*(undefined4 *)(param_1 + 0x4e0)); | |
return; | |
} | |
void FUN_08006eb8(int param_1) | |
{ | |
FUN_08004604(*(undefined4 *)(param_1 + 0x4e0)); | |
return; | |
} | |
void FUN_08006ec4(int param_1) | |
{ | |
FUN_08004608(*(undefined4 *)(param_1 + 0x4e0)); | |
return; | |
} | |
undefined4 FUN_08006ed0(char *param_1) | |
{ | |
undefined4 *puVar1; | |
int iVar2; | |
puVar1 = DAT_08006f34; | |
if (*param_1 != '\0') { | |
return 0; | |
} | |
DAT_08006f34[0x138] = param_1; | |
*(undefined4 **)(param_1 + 0x2c8) = puVar1; | |
*puVar1 = 0x50000000; | |
*(undefined1 *)(puVar1 + 1) = 6; | |
*(undefined1 *)((int)puVar1 + 7) = 2; | |
*(undefined1 *)((int)puVar1 + 6) = 0; | |
*(undefined1 *)((int)puVar1 + 9) = 2; | |
*(undefined1 *)((int)puVar1 + 10) = 0; | |
*(undefined1 *)((int)puVar1 + 0xb) = 0; | |
*(undefined1 *)(puVar1 + 3) = 0; | |
*(undefined1 *)((int)puVar1 + 0xe) = 1; | |
*(undefined1 *)((int)puVar1 + 0xf) = 0; | |
iVar2 = FUN_0800562c(); | |
puVar1 = DAT_08006f34; | |
if (iVar2 == 0) { | |
FUN_08006258(DAT_08006f34,0x80); | |
FUN_0800620c(puVar1,0,0x40); | |
FUN_0800620c(puVar1,1,0x80); | |
return 0; | |
} | |
// WARNING: Subroutine does not return | |
SystemHalt(); | |
} | |
undefined1 FUN_08006f38(int param_1,uint param_2) | |
{ | |
if ((param_2 & 0x80) == 0) { | |
return *(undefined1 *)(*(int *)(param_1 + 0x2c8) + (param_2 & 0x7f) * 0x24 + 0x256); | |
} | |
return *(undefined1 *)(*(int *)(param_1 + 0x2c8) + (param_2 & 0x7f) * 0x24 + 0x16); | |
} | |
void FUN_08006f64(int *param_1,int param_2) | |
{ | |
if (param_2 == 0) { | |
if (*(char *)((int)param_1 + 0xb) != '\0') { | |
Init_GPIO_Ports(); | |
*(uint *)(DAT_08006fc0 + 0x10) = *(uint *)(DAT_08006fc0 + 0x10) & 0xfffffff9; | |
} | |
*(uint *)(*param_1 + 0xe00) = *(uint *)(*param_1 + 0xe00) & 0xfffffffe; | |
FUN_0800456c(param_1[0x138]); | |
} | |
else if (param_2 == 1) { | |
*(uint *)(*param_1 + 0xe00) = *(uint *)(*param_1 + 0xe00) | 1; | |
FUN_0800454e(param_1[0x138]); | |
if (*(char *)((int)param_1 + 0xb) != '\0') { | |
*(uint *)(DAT_08006fc0 + 0x10) = *(uint *)(DAT_08006fc0 + 0x10) | 6; | |
} | |
} | |
return; | |
} | |
undefined4 FUN_08006fc4(void) | |
{ | |
return DAT_08006fc8; | |
} | |
void FUN_08006fcc(void) | |
{ | |
return; | |
} | |
undefined4 FUN_08006fce(undefined4 param_1) | |
{ | |
switch(param_1) { | |
case 0: | |
case 3: | |
goto switchD_08006fd2_caseD_0; | |
default: | |
param_1 = 3; | |
switchD_08006fd2_caseD_0: | |
return param_1; | |
case 2: | |
return 1; | |
} | |
} | |
void FUN_08006fe2(int param_1) | |
{ | |
FUN_0800573e(*(undefined4 *)(param_1 + 0x2c8)); | |
FUN_08006fce(); | |
return; | |
} | |
void FUN_08006ff2(int param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
FUN_0800594a(*(undefined4 *)(param_1 + 0x2c8),param_2,param_4,param_3,param_4); | |
FUN_08006fce(); | |
return; | |
} | |
void FUN_08007008(int param_1) | |
{ | |
FUN_080059d6(*(undefined4 *)(param_1 + 0x2c8)); | |
FUN_08006fce(); | |
return; | |
} | |
void FUN_08007018(int param_1) | |
{ | |
FUN_08005ada(*(undefined4 *)(param_1 + 0x2c8)); | |
FUN_08006fce(); | |
return; | |
} | |
void FUN_08007028(int param_1) | |
{ | |
FUN_08005b60(*(undefined4 *)(param_1 + 0x2c8)); | |
FUN_08006fce(); | |
return; | |
} | |
void FUN_08007038(int param_1) | |
{ | |
FUN_08005924(*(undefined4 *)(param_1 + 0x2c8)); | |
FUN_08006fce(); | |
return; | |
} | |
void transmitMidiPacket(int param_1) | |
{ | |
FUN_08005a90(*(undefined4 *)(param_1 + 0x2c8)); | |
FUN_08006fce(); | |
return; | |
} | |
void FUN_08007058(int param_1) | |
{ | |
FUN_08005a46(*(undefined4 *)(param_1 + 0x2c8)); | |
FUN_08006fce(); | |
return; | |
} | |
undefined4 FUN_08007068(void) | |
{ | |
return 1; | |
} | |
undefined4 FUN_0800706c(void) | |
{ | |
undefined4 *puVar1; | |
puVar1 = (undefined4 *)FUN_08012560(); | |
*puVar1 = 0x16; | |
return 0xffffffff; | |
} | |
void FUN_0800707c(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
FUN_0800706c(param_1,0xffffffff,param_3,param_4,param_4); | |
do { | |
// WARNING: Do nothing block with infinite loop | |
} while( true ); | |
} | |
int FUN_08007088(undefined1 param_1,undefined1 *param_2,int param_3) | |
{ | |
int iVar1; | |
for (iVar1 = 0; iVar1 < param_3; iVar1 = iVar1 + 1) { | |
*param_2 = param_1; | |
param_2 = param_2 + 1; | |
} | |
return param_3; | |
} | |
int FUN_080070a8(undefined4 param_1,undefined4 param_2,int param_3) | |
{ | |
int iVar1; | |
for (iVar1 = 0; iVar1 < param_3; iVar1 = iVar1 + 1) { | |
} | |
return param_3; | |
} | |
undefined4 FUN_080070c4(void) | |
{ | |
return 0xffffffff; | |
} | |
undefined4 FUN_080070ca(undefined4 param_1,int param_2) | |
{ | |
*(undefined4 *)(param_2 + 4) = 0x2000; | |
return 0; | |
} | |
undefined4 FUN_080070d4(void) | |
{ | |
return 1; | |
} | |
undefined4 FUN_080070d8(void) | |
{ | |
return 0; | |
} | |
uint FUN_080070dc(int param_1) | |
{ | |
int iVar1; | |
int iVar2; | |
uint uVar3; | |
undefined4 *puVar4; | |
iVar2 = DAT_08007118; | |
iVar1 = DAT_08007114; | |
if (*DAT_0800711c == 0) { | |
*DAT_0800711c = DAT_08007120; | |
} | |
uVar3 = *DAT_0800711c; | |
if ((uint)(iVar1 - iVar2) < param_1 + uVar3) { | |
puVar4 = (undefined4 *)FUN_08012560(); | |
*puVar4 = 0xc; | |
uVar3 = 0xffffffff; | |
} | |
else { | |
*DAT_0800711c = param_1 + uVar3; | |
} | |
return uVar3; | |
} | |
undefined4 * FUN_08007124(undefined4 *param_1,uint param_2) | |
{ | |
undefined4 uVar1; | |
undefined4 uVar2; | |
undefined4 uVar3; | |
undefined4 *puVar4; | |
undefined4 *puVar5; | |
puVar4 = DAT_08007160; | |
if (param_2 < 0x20) { | |
puVar4 = DAT_08007160 + param_2 * 6; | |
uVar1 = puVar4[1]; | |
uVar2 = puVar4[2]; | |
uVar3 = puVar4[3]; | |
*param_1 = *puVar4; | |
param_1[1] = uVar1; | |
param_1[2] = uVar2; | |
param_1[3] = uVar3; | |
uVar1 = puVar4[5]; | |
param_1[4] = puVar4[4]; | |
param_1[5] = uVar1; | |
} | |
else { | |
uVar1 = DAT_08007160[1]; | |
uVar2 = DAT_08007160[2]; | |
uVar3 = DAT_08007160[3]; | |
puVar5 = DAT_08007160 + 4; | |
*param_1 = *DAT_08007160; | |
param_1[1] = uVar1; | |
param_1[2] = uVar2; | |
param_1[3] = uVar3; | |
uVar1 = puVar4[5]; | |
param_1[4] = *puVar5; | |
param_1[5] = uVar1; | |
} | |
return param_1; | |
} | |
undefined4 * extractSensorControlParameters(undefined4 *param_1,uint param_2) | |
{ | |
undefined4 uVar1; | |
undefined4 uVar2; | |
undefined4 uVar3; | |
int iVar4; | |
undefined4 uVar5; | |
undefined4 uVar6; | |
undefined4 *puVar7; | |
iVar4 = 0; | |
while( true ) { | |
if (0x1f < iVar4) { | |
uVar2 = DAT_080071c8[1]; | |
uVar3 = DAT_080071c8[2]; | |
uVar6 = DAT_080071c8[3]; | |
uVar1 = DAT_080071c8[4]; | |
uVar5 = DAT_080071c8[5]; | |
*param_1 = *DAT_080071c8; | |
param_1[1] = uVar2; | |
param_1[2] = uVar3; | |
param_1[3] = uVar6; | |
param_1[4] = uVar1; | |
param_1[5] = uVar5; | |
return param_1; | |
} | |
if (*(byte *)(DAT_080071c4 + iVar4 * 0x18 + 0xc) == param_2) break; | |
iVar4 = iVar4 + 1; | |
} | |
puVar7 = (undefined4 *)(DAT_080071c4 + iVar4 * 0x18); | |
uVar1 = puVar7[1]; | |
uVar2 = puVar7[2]; | |
uVar5 = puVar7[3]; | |
*param_1 = *puVar7; | |
param_1[1] = uVar1; | |
param_1[2] = uVar2; | |
param_1[3] = uVar5; | |
uVar1 = puVar7[5]; | |
param_1[4] = puVar7[4]; | |
param_1[5] = uVar1; | |
return param_1; | |
} | |
undefined4 | |
lookupSensorFlag(undefined4 targetFlagString,undefined4 param_2,undefined4 param_3, | |
undefined4 cmpModifier) | |
{ | |
int cmpResult; | |
int i; | |
i = 0; | |
while( true ) { | |
if (0x1f < i) { | |
return *(undefined4 *)(SENSOR_FLAG_TABLE + 0x10); | |
} | |
cmpResult = strcmp_custom(targetFlagString,*(undefined4 *)(SENSOR_FLAG_TABLE + i * 0x18), | |
SENSOR_FLAG_TABLE,i * 3,cmpModifier); | |
if (cmpResult == 0) break; | |
i = i + 1; | |
} | |
return *(undefined4 *)(SENSOR_FLAG_TABLE + i * 0x18 + 0x10); | |
} | |
undefined4 | |
convertFixedPointToFloat | |
(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
int iVar1; | |
int iVar2; | |
iVar2 = 0; | |
while( true ) { | |
if (0x1f < iVar2) { | |
return *(undefined4 *)(DAT_0800723c + 8); | |
} | |
iVar1 = strcmp_custom(param_1,*(undefined4 *)(DAT_0800723c + iVar2 * 0x18),DAT_0800723c, | |
iVar2 * 3,param_4); | |
if (iVar1 == 0) break; | |
iVar2 = iVar2 + 1; | |
} | |
return *(undefined4 *)(DAT_0800723c + iVar2 * 0x18 + 8); | |
} | |
void resetSensorSubsystem(void) | |
{ | |
undefined4 uVar1; | |
undefined4 in_r3; | |
int iVar2; | |
int iVar3; | |
int iVar4; | |
uint in_fpscr; | |
float fVar5; | |
FUN_080025a4(); | |
FUN_080026c4(7,2); | |
FUN_08002648(2,DAT_080072bc,0x556,0,in_r3); | |
iVar4 = DAT_080072c0; | |
for (iVar3 = 0; iVar3 < 0x20; iVar3 = iVar3 + 1) { | |
iVar2 = DAT_080072c4 + iVar3 * 0x18; | |
uVar1 = *(undefined4 *)(iVar2 + 0x14); | |
*(undefined4 *)(iVar2 + 0x10) = uVar1; | |
if (*(char *)(iVar2 + 4) == '\0') { | |
*(undefined4 *)(DAT_080072c4 + iVar3 * 0x18 + 8) = 0; | |
} | |
else { | |
fVar5 = (float)VectorUnsignedToFloat(uVar1,(byte)(in_fpscr >> 0x15) & 3); | |
*(float *)(DAT_080072c4 + iVar3 * 0x18 + 8) = fVar5 * DAT_080072c8; | |
} | |
FUN_08002648(2,iVar4,uVar1,0,in_r3); | |
iVar4 = iVar4 + 4; | |
} | |
FUN_080025d4(); | |
return; | |
} | |
void Init_Timer3(void) | |
{ | |
undefined4 *puVar1; | |
undefined4 uVar2; | |
int iVar3; | |
int iVar4; | |
uint in_fpscr; | |
float fVar5; | |
if (*DAT_0800732c == 0x556) { | |
puVar1 = DAT_08007330; | |
for (iVar4 = 0; iVar4 < 0x20; iVar4 = iVar4 + 1) { | |
uVar2 = *puVar1; | |
iVar3 = DAT_08007334 + iVar4 * 0x18; | |
*(undefined4 *)(iVar3 + 0x10) = uVar2; | |
if (*(char *)(iVar3 + 4) == '\0') { | |
*(undefined4 *)(DAT_08007334 + iVar4 * 0x18 + 8) = 0; | |
} | |
else { | |
fVar5 = (float)VectorUnsignedToFloat(uVar2,(byte)(in_fpscr >> 0x15) & 3); | |
*(float *)(DAT_08007334 + iVar4 * 0x18 + 8) = fVar5 * DAT_08007338; | |
} | |
puVar1 = puVar1 + 1; | |
} | |
} | |
else { | |
resetSensorSubsystem(); | |
} | |
return; | |
} | |
void FUN_0800733c(void) | |
{ | |
undefined4 in_r3; | |
int iVar1; | |
int iVar2; | |
FUN_080025a4(); | |
FUN_080026c4(7,2); | |
FUN_08002648(2,DAT_08007384,0x556,0,in_r3); | |
iVar2 = DAT_08007388; | |
for (iVar1 = 0; iVar1 < 0x20; iVar1 = iVar1 + 1) { | |
FUN_08002648(2,iVar2,*(undefined4 *)(DAT_0800738c + iVar1 * 0x18 + 0x10),0,in_r3); | |
iVar2 = iVar2 + 4; | |
} | |
FUN_080025d4(); | |
return; | |
} | |
void processSensorSubcommand(undefined4 param_1) | |
{ | |
uint in_fpscr; | |
undefined1 auStack_20 [4]; | |
char local_1c; | |
float local_18; | |
char local_14; | |
undefined4 local_10; | |
undefined4 local_c; | |
extractSensorControlParameters(auStack_20,param_1); | |
if (local_14 != -1) { | |
local_10 = local_c; | |
if (local_1c != '\0') { | |
local_18 = (float)VectorUnsignedToFloat(local_c,(byte)(in_fpscr >> 0x15) & 3); | |
local_18 = local_18 * DAT_080073cc; | |
} | |
FUN_0800733c(); | |
} | |
return; | |
} | |
void FUN_080073d0(undefined4 param_1,undefined4 param_2) | |
{ | |
int iVar1; | |
int iVar2; | |
uint in_fpscr; | |
float fVar3; | |
undefined1 auStack_74 [100]; | |
iVar2 = 0; | |
while( true ) { | |
if (0x1f < iVar2) { | |
return; | |
} | |
iVar1 = strcmp_custom(param_1,*(undefined4 *)(DAT_0800745c + iVar2 * 0x18)); | |
if (iVar1 == 0) break; | |
iVar2 = iVar2 + 1; | |
} | |
iVar1 = DAT_0800745c + iVar2 * 0x18; | |
*(undefined4 *)(iVar1 + 0x10) = param_2; | |
if (*(char *)(iVar1 + 4) != '\0') { | |
fVar3 = (float)VectorUnsignedToFloat(param_2,(byte)(in_fpscr >> 0x15) & 3); | |
*(float *)(DAT_0800745c + iVar2 * 0x18 + 8) = fVar3 * DAT_08007460; | |
} | |
FUN_0800733c(); | |
if (*(char *)(DAT_0800745c + iVar2 * 0x18 + 4) != '\0') { | |
FUN_08000568(*(undefined4 *)(DAT_0800745c + iVar2 * 0x18 + 8)); | |
updateMidiBuffer(auStack_74,DAT_08007464,param_1); | |
return; | |
} | |
updateMidiBuffer(auStack_74,DAT_08007468,param_1,param_2); | |
return; | |
} | |
undefined4 FUN_0800746c(undefined4 param_1) | |
{ | |
undefined2 uVar1; | |
int iVar2; | |
undefined4 local_94; | |
char local_90; | |
undefined4 local_8c; | |
undefined4 local_84; | |
undefined1 auStack_7c [100]; | |
undefined1 auStack_18 [4]; | |
undefined1 auStack_14 [8]; | |
FUN_08008074(auStack_18); | |
FUN_08009954(auStack_14); | |
FUN_080037a2(DAT_080074e8,DAT_080074e4,0x17,1000); | |
for (iVar2 = 0; iVar2 < 0x20; iVar2 = iVar2 + 1) { | |
FUN_08007124(&local_94,iVar2); | |
if (local_90 == '\0') { | |
updateMidiBuffer(auStack_7c,DAT_080074ec,local_94,local_84); | |
} | |
else { | |
FUN_08000568(local_8c); | |
updateMidiBuffer(auStack_7c,DAT_080074f0,local_94); | |
} | |
uVar1 = strlen_custom(auStack_7c); | |
FUN_080037a2(DAT_080074e8,auStack_7c,uVar1,1000); | |
} | |
return param_1; | |
} | |
void FUN_080074f4(void) | |
{ | |
undefined4 uVar1; | |
FUN_08008074(DAT_08007520); | |
FUN_08009954(DAT_08007524); | |
uVar1 = FUN_08008600(); | |
*DAT_08007528 = uVar1; | |
FUN_08009756(DAT_0800752c); | |
FUN_080098a8(DAT_08007530); | |
FUN_0800746c(DAT_08007534); | |
return; | |
} | |
void FUN_08007538(int param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
ushort *puVar1; | |
short sVar2; | |
int iVar3; | |
puVar1 = DAT_080075c4; | |
if (param_1 == DAT_080075c0) { | |
iVar3 = (uint)*(ushort *)(param_1 + 0x24) + (uint)*DAT_080075c4; | |
*DAT_080075c4 = | |
(short)iVar3 + (short)(int)((longlong)DAT_080075c8 * (longlong)iVar3 >> 0x25) * -100; | |
if (*puVar1 == *DAT_080075cc) { | |
*DAT_080075d4 = 0; | |
} | |
else { | |
if (*puVar1 < *DAT_080075cc) { | |
sVar2 = *DAT_080075cc - *puVar1; | |
} | |
else { | |
sVar2 = 100 - *DAT_080075c4; | |
} | |
iVar3 = FUN_08003870(DAT_080075c0,DAT_080075d0 + (uint)*DAT_080075c4,sVar2,DAT_080075d0, | |
param_4); | |
if (iVar3 != 0) { | |
*DAT_080075d4 = 0; | |
// WARNING: Subroutine does not return | |
SystemHalt(); | |
} | |
} | |
} | |
return; | |
} | |
void sendMidiNoteOn(undefined4 param_1,int sensorPtr,undefined4 param_3,undefined4 noteVelocity) | |
{ | |
int noteEventFlag; | |
int baseValue; | |
baseValue = GLOBAL_NOTE_BASE_VALUE; | |
sendMidiCommand(*(undefined4 *)(sensorPtr + 0x34),GLOBAL_NOTE_BASE_VALUE,0x11,noteVelocity, | |
noteVelocity); | |
sendMidiCommand(*(undefined4 *)(sensorPtr + 0x30),baseValue + 0x44,0x60); | |
sendMidiCommand(*(undefined4 *)(sensorPtr + 0x38),baseValue + 0x1c4,0x12); | |
noteEventFlag = lookupSensorFlag(GLOBAL_NOTE_EVENT_FLAG); | |
if (noteEventFlag == 1) { | |
finalizeSensorNoteOn(*GLOBAL_MIDI_OUTPUT,baseValue); | |
} | |
return; | |
} | |
void sendMidiNoteOff(undefined4 param_1,undefined4 noteValue) | |
{ | |
int noteOffFlag; | |
noteOffFlag = lookupSensorFlag(GLOBAL_NOTE_OFF_FLAG); | |
if (noteOffFlag == 1) { | |
transmitMidiNoteOffMessage(*GLOBAL_NOTE_OFF_DESTINATION,noteValue); | |
} | |
return; | |
} | |
// Processes incoming Piezo sensor data and updates the corresponding MIDI output. | |
// It retrieves the current time, loads calibration data, extracts sensor channel readings, | |
// combines them into a final sensor value, and if a sensor trigger is detected, it resets | |
// the sensor state and issues a MIDI command (using a command code 0x11). | |
// | |
// Parameters: | |
// midiId - an identifier or channel value for the outgoing MIDI message (original param_1) | |
// sensorPtr - pointer to the sensor data structure (original param_2) | |
void processPiezoSensorData(undefined4 midiId,int sensorPtr) | |
{ | |
char triggerState; | |
int sensorFlag1; | |
int sensorFlag2; | |
int sensorFlag3; | |
int tempIndex; | |
undefined4 calibData; | |
undefined4 *sensorDataPtr; | |
int triggerDuration; | |
undefined4 tempStack1; | |
undefined4 tempStack2; | |
undefined4 currentMidiId; | |
int currentTime; | |
int triggerStartTime; | |
int triggerEndTime; | |
undefined4 processedSensorValue; | |
undefined4 tempStack11c; | |
undefined4 tempStack118; | |
undefined4 tempStack114; | |
undefined4 sensorOutputValue; | |
undefined4 sensorLow [2]; | |
undefined4 sensorMid [2]; | |
undefined4 sensorHigh [2]; | |
undefined4 localCalibration; | |
undefined4 uStack_ec; | |
undefined4 uStack_e8; | |
int sensorTimer; | |
undefined4 tempStack_e0; | |
undefined4 local_dc; | |
undefined4 localData_d8; | |
undefined4 localData_d4; | |
undefined4 tempStack_d0; | |
undefined4 tempStack_cc; | |
undefined4 sensorCalibValue; | |
undefined4 processedChannelValue; | |
undefined4 tempStack_c0; | |
undefined4 tempStack_bc; | |
undefined4 tempStack_b8; | |
undefined4 sensorFlagData; | |
undefined4 sensorDataArray [30]; | |
undefined4 savedSensorConfig; | |
undefined1 savedSensorMode; | |
bool conditionFlag; | |
int globalSensorValue; | |
undefined4 sensorConfig; | |
undefined1 sensorMode; | |
undefined4 tempValue; | |
// Save the MIDI identifier for later use. | |
currentMidiId = midiId; | |
// Retrieve the current time or sensor timestamp. | |
currentTime = getCurrentTime(); | |
// Load calibration data from a global pointer. | |
calibData = *GLOBAL_CALIBRATION_PTR; | |
// Fill local calibration structure from the calibration data. | |
loadCalibrationValues(&localCalibration,calibData); | |
sensorConfig = GLOBAL_SENSOR_CONFIG; | |
// Read a sensor mode or threshold flag from the sensor structure. | |
sensorMode = *(undefined1 *)(sensorPtr + 0x1e); | |
sensorFlag1 = lookupSensorFlag(GLOBAL_SENSOR_CONFIG); | |
sensorFlag2 = lookupSensorFlag(sensorConfig); | |
sensorFlag3 = lookupSensorFlag(sensorConfig); | |
triggerState = lookupSensorFlag(sensorConfig); | |
readSensorChannel(sensorHigh,calibData,sensorPtr,2); | |
readSensorChannel(sensorMid,calibData,sensorPtr,1); | |
readSensorChannel(sensorLow,calibData,sensorPtr,0); | |
sensorConfig = combineSensorValues(sensorHigh[0],sensorLow[0]); | |
sensorConfig = combineSensorValues(sensorMid[0],sensorConfig); | |
if (triggerState == '\x01') { | |
resetSensorState(sensorPtr); | |
globalSensorValue = GLOBAL_SENSOR_THRESHOLD; | |
sendMidiCommand(*(undefined4 *)(sensorPtr + 0x34),GLOBAL_SENSOR_THRESHOLD,0x11); | |
sendMidiCommand(*(undefined4 *)(sensorPtr + 0x30),globalSensorValue + 0x44,0x60); | |
sendMidiCommand(*(undefined4 *)(sensorPtr + 0x38),globalSensorValue + 0x1c4,0x12); | |
triggerStartTime = getCurrentTime(); | |
globalSensorValue = calibrateThreshold(GLOBAL_SENSOR_CALIBRATION_DATA,globalSensorValue); | |
triggerEndTime = getCurrentTime(); | |
tempIndex = lookupSensorFlag(GLOBAL_SENSOR_STATUS); | |
if ((tempIndex == 1) && | |
(tempIndex = lookupSensorFlag(GLOBAL_SENSOR_EVENT_STATUS), tempIndex == 1)) { | |
triggerDuration = triggerEndTime - triggerStartTime; | |
notifySensorEvent(*GLOBAL_SENSOR_EVENT_HANDLER,0xc,0); | |
} | |
if (globalSensorValue == 0) { | |
return; | |
} | |
computeCalibratedSensorOutput | |
(sensorConfig,&processedSensorValue,GLOBAL_SENSOR_CALIBRATION_DATA,globalSensorValue); | |
localData_d8 = processedSensorValue; | |
localData_d4 = tempStack11c; | |
tempValue = localData_d4; | |
tempStack_d0 = tempStack118; | |
tempStack_cc = tempStack114; | |
sensorCalibValue = sensorOutputValue; | |
processedChannelValue = processedSensorValue; | |
tempStack_c0 = tempStack11c; | |
tempStack_bc = tempStack118; | |
tempStack_b8 = tempStack114; | |
sensorFlagData = sensorOutputValue; | |
localData_d4._0_1_ = (char)tempStack11c; | |
tempStack_e0._0_2_ = CONCAT11((char)localData_d4,(undefined1)tempStack_e0); | |
local_dc = sensorOutputValue; | |
conditionFlag = (char)localData_d4 != '\0'; | |
localData_d4 = tempValue; | |
savedSensorConfig = sensorConfig; | |
savedSensorMode = sensorMode; | |
if (conditionFlag) { | |
triggerDuration = sensorTimer; | |
tempStack1 = tempStack_e0; | |
tempStack2 = sensorOutputValue; | |
applySensorCalibrationCorrection(calibData,localCalibration,uStack_ec,uStack_e8); | |
} | |
for (tempIndex = 0; tempIndex < 6; tempIndex = tempIndex + 1) { | |
sensorDataPtr = (undefined4 *)(globalSensorValue + tempIndex * 0x14); | |
sensorConfig = sensorDataPtr[1]; | |
calibData = sensorDataPtr[2]; | |
tempValue = sensorDataPtr[3]; | |
sensorDataArray[tempIndex * 5] = *sensorDataPtr; | |
sensorDataArray[tempIndex * 5 + 1] = sensorConfig; | |
sensorDataArray[tempIndex * 5 + 2] = calibData; | |
sensorDataArray[tempIndex * 5 + 3] = tempValue; | |
sensorDataArray[tempIndex * 5 + 4] = sensorDataPtr[4]; | |
} | |
} | |
if (sensorFlag1 == 0) { | |
sendMidiNoteOff(currentMidiId,sensorPtr); | |
} | |
if (sensorFlag2 == 2) { | |
resetSensorState(sensorPtr); | |
sendMidiNoteOn(currentMidiId,sensorPtr); | |
} | |
if (sensorFlag3 == 3) { | |
resetSensorState(sensorPtr); | |
sensorConfig = currentMidiId; | |
sendMidiNoteOff(currentMidiId,sensorPtr); | |
sendMidiNoteOn(sensorConfig,sensorPtr); | |
} | |
if (triggerState == '\x01') { | |
sensorConfig = *GLOBAL_SENSOR_EVENT_HANDLER; | |
copyBuffer(&triggerDuration,&tempStack_bc,0x8c); | |
calibData = computeSensorExpressionValue | |
(GLOBAL_SENSOR_OUTPUT_CONFIG,sensorPtr,processedChannelValue,tempStack_c0) | |
; | |
copyBuffer(&triggerDuration,&tempStack_b8,0x88); | |
applySensorExpressionOutput | |
(calibData,sensorConfig,processedChannelValue,tempStack_c0,tempStack_bc); | |
} | |
sensorFlag1 = lookupSensorFlag(GLOBAL_SENSOR_STATUS); | |
if ((sensorFlag1 == 1) && | |
(sensorFlag1 = lookupSensorFlag(GLOBAL_SENSOR_EVENT_STATUS), sensorFlag1 == 1)) { | |
sensorConfig = *GLOBAL_SENSOR_EVENT_HANDLER; | |
triggerDuration = getCurrentTime(); | |
triggerDuration = triggerDuration - currentTime; | |
notifySensorEvent(sensorConfig,0xf,0); | |
} | |
return; | |
} | |
// Converts a raw sensor value into a normalized float reading. | |
float convertSensorRawValue(undefined4 param_1,undefined4 rawValue) | |
{ | |
uint fpscr; | |
float convertedValue; | |
// Convert the raw unsigned value to a float. | |
convertedValue = (float)VectorUnsignedToFloat(rawValue,(byte)(fpscr >> 0x15) & 3); | |
// Normalize the converted value by dividing it by the global scale factor. | |
return convertedValue / GLOBAL_SENSOR_SCALE_FACTOR; | |
} | |
// Checks sensor curve conditions by iterating through curve indices (0–3). At each index, it | |
// computes a combined sensor value using global curve data and a sensor flag lookup (converted to a | |
// float). If, at index 2, the computed value exceeds a baseline value (converted from sensorRecord | |
// offset 8) then the condition is met and the function returns 2; otherwise, if no valid index is | |
// found, it returns 0xffffffff. | |
undefined4 evaluateSensorCurveCondition(undefined4 sensorConfig,int sensorRecord) | |
{ | |
int controlCode; | |
undefined4 lookupValue; | |
uint index; | |
float computedValue; | |
float baselineValue; | |
undefined4 globalCurveData; | |
index = 0; | |
while( true ) { | |
if (3 < (int)index) { | |
return 0xffffffff; | |
} | |
// mapControlEventCode returns a control code for the given index. | |
controlCode = mapControlEventCode(*GLOBAL_CONTROL_FLAG,index & 0xff); | |
// Retrieve the global curve value corresponding to the current index. | |
globalCurveData = *(undefined4 *)(GLOBAL_CURVE_VALUES + index * 4); | |
if (controlCode == 1) { | |
lookupValue = lookupSensorFlag(GLOBAL_SENSOR_FLAG_SET_A); | |
lookupValue = convertSensorRawValue(sensorConfig,lookupValue); | |
} | |
else { | |
lookupValue = lookupSensorFlag(GLOBAL_SENSOR_FLAG_SET_B); | |
lookupValue = convertSensorRawValue(sensorConfig,lookupValue); | |
} | |
// Combine the global curve value with the converted lookup value. | |
computedValue = (float)combineSensorValues(globalCurveData,lookupValue); | |
// At index 2, compare the computed value with a baseline value from | |
// sensorRecord offset 8. | |
if (((controlCode != 0) && (index == 2)) && | |
(baselineValue = (float)convertSensorRawValue(sensorConfig,*(undefined4 *)(sensorRecord + 8)) | |
, baselineValue != computedValue && | |
baselineValue < computedValue == (NAN(baselineValue) || NAN(computedValue)))) break; | |
index = index + 1; | |
} | |
return 2; | |
} | |
void FUN_08007978(undefined4 param_1,int param_2) | |
{ | |
bool bVar1; | |
int iVar2; | |
undefined4 uVar3; | |
undefined1 uVar4; | |
uint uVar5; | |
uint in_fpscr; | |
float fVar6; | |
undefined4 uVar7; | |
undefined4 uVar8; | |
int iVar9; | |
float fVar10; | |
float fVar11; | |
float local_68; | |
ushort local_64; | |
float local_60; | |
ushort local_5c; | |
float local_58; | |
ushort local_54; | |
undefined4 local_50; | |
undefined4 local_4c; | |
float local_48; | |
float local_44; | |
undefined4 local_40; | |
undefined4 uStack_3c; | |
uVar3 = *DAT_08007b74; | |
loadCalibrationValues(&local_50,uVar3); | |
readSensorChannel(&local_58,uVar3,param_2,2); | |
readSensorChannel(&local_60,uVar3,param_2,1); | |
readSensorChannel(&local_68,uVar3,param_2,0); | |
fVar6 = (float)getBaseSensorReading(uVar3,param_2,0); | |
fVar11 = fVar6 * DAT_08007b78 * DAT_08007b7c; | |
in_fpscr = in_fpscr & 0xfffffff; | |
fVar6 = DAT_08007b80; | |
if (local_58 != 0.0 && local_58 < 0.0 == NAN(local_58)) { | |
fVar6 = local_58; | |
} | |
if (fVar6 < local_60) { | |
uVar4 = 1; | |
fVar6 = local_60; | |
} | |
else { | |
uVar4 = 2; | |
} | |
if (fVar6 < local_68) { | |
uVar4 = 0; | |
} | |
else if (fVar6 < fVar11) { | |
uVar4 = 0; | |
} | |
if (local_58 != local_60 && local_58 < local_60 == (NAN(local_58) || NAN(local_60))) { | |
local_5c = local_54; | |
} | |
uVar5 = (uint)local_5c; | |
if ((local_58 < local_68) && (local_60 < local_68)) { | |
uVar5 = (uint)local_64; | |
local_58 = local_68; | |
} | |
uVar7 = combineSensorValues(local_58,local_60); | |
fVar6 = (float)combineSensorValues(uVar7,fVar11); | |
fVar11 = (float)combineSensorValues(local_44,local_48); | |
uVar8 = VectorUnsignedToFloat(local_50,(byte)(in_fpscr >> 0x15) & 3); | |
uVar7 = VectorUnsignedToFloat(local_4c,(byte)(in_fpscr >> 0x15) & 3); | |
uVar7 = combineSensorValues(uVar7,uVar8); | |
iVar9 = VectorFloatToUnsigned(uVar7,3); | |
iVar2 = getCurrentTime(); | |
fVar10 = (float)VectorUnsignedToFloat((iVar2 - iVar9) - 6,(byte)(in_fpscr >> 0x15) & 3); | |
fVar10 = fVar10 / DAT_08007b84; | |
if (fVar10 != 1.0 && fVar10 < 1.0 == NAN(fVar10)) { | |
fVar10 = 1.0; | |
} | |
fVar10 = (float)normalizeSensorExpressionValue(1.0 - fVar10,0x40000000); | |
fVar10 = 1.0 - fVar10; | |
if ((uint)(iVar2 - iVar9) < 6) { | |
fVar10 = DAT_08007b80; | |
} | |
fVar11 = (1.0 - fVar10) * fVar11 * DAT_08007b88; | |
if (fVar6 == fVar11 || fVar6 < fVar11 != (NAN(fVar6) || NAN(fVar11))) { | |
bVar1 = false; | |
} | |
else { | |
bVar1 = true; | |
iVar2 = getCurrentTime(); | |
if ((uint)(iVar2 - iVar9) < 6) { | |
return; | |
} | |
} | |
if (bVar1) { | |
FUN_080084b8(param_2); | |
*(undefined1 *)(param_2 + 0x1e) = uVar4; | |
FUN_080094e0(fVar6,uVar3,*(int *)(param_2 + 0x20) + uVar5,param_2); | |
local_48 = local_60; | |
local_44 = fVar6; | |
local_4c = getCurrentTime(); | |
local_50 = getCurrentTime(); | |
local_40 = CONCAT31(local_40._1_3_,uVar4); | |
applySensorCalibrationCorrection(uVar3,local_50,local_4c,local_48,local_44,local_40,uStack_3c); | |
} | |
return; | |
} | |
// Processes sensor data for drum hits by extracting sensor data, updating the sensor message | |
// counter, updating control events, and eventually triggering sensor MIDI processing if needed. | |
void processSensorDrumHits(undefined4 midiChannel,int sensorDataPtr) | |
{ | |
int controlEventIndex; | |
undefined4 iVar; | |
int iVar1; | |
int i; | |
uint loopCount; | |
int iVar2; | |
undefined4 sensorValue; | |
undefined4 sensorDataArray [4]; | |
float channelReading [2]; | |
// For each of 4 sensor channels, process the raw sensor value. | |
for (i = 0; i < 4; i = i + 1) { | |
sensorValue = convertSensorRawValue(midiChannel,*(undefined4 *)(sensorDataPtr + i * 4)); | |
// Temporary sensor data array | |
sensorDataArray[i] = sensorValue; | |
} | |
// Update the sensor message counter. | |
sensorValue = *GLOBAL_SENSOR_STRUCTURE; | |
incrementSensorMessageCounter(sensorValue); | |
// Process sensor data and get a sensor flag result. | |
i = evaluateSensorCurveCondition(midiChannel,sensorDataPtr); | |
if (i != -1) { | |
// Find an available control event index. | |
controlEventIndex = findNextAvailableControlEventIndex(sensorValue); | |
if (controlEventIndex == 0xff) { | |
return; | |
} | |
// Get pointer to the control event record. | |
controlEventIndex = getControlEventBufferAddress(sensorValue,controlEventIndex); | |
if ((*(char *)(controlEventIndex + 0x1c) == '\0') && | |
(*(char *)(controlEventIndex + 0x1d) == '\0')) { | |
*(char *)(controlEventIndex + 0x1e) = (char)i; | |
iVar = getCurrentTime(); | |
*(undefined4 *)(controlEventIndex + 0x18) = iVar; | |
iVar = getSensorMessageCounter(sensorValue); | |
*(undefined4 *)(controlEventIndex + 0x20) = iVar; | |
*(undefined1 *)(controlEventIndex + 0x1c) = 1; | |
} | |
} | |
// Process sensor data array (e.g. for additional calibration or logging). | |
FUN_08009440(sensorValue,sensorDataArray); | |
// If a global flag indicates pending processing, reset it and update sensor | |
// MIDI processing. | |
if (*GLOBAL_SENSOR_PROCESS_FLAG != '\0') { | |
*GLOBAL_SENSOR_PROCESS_FLAG = '\0'; | |
updateSensorMidiProcessing(*GLOBAL_MIDI_OUTPUT_PTR); | |
} | |
// Process control events for index 0. | |
for (loopCount = 0; (int)loopCount < 1; loopCount = loopCount + 1) { | |
i = getControlEventBufferAddress(sensorValue,loopCount & 0xff); | |
if (*(char *)(i + 0x1d) != '\0') { | |
controlEventIndex = lookupSensorFlag(GLOBAL_SENSOR_FLAG_A); | |
if ((controlEventIndex == 1) && | |
(controlEventIndex = lookupSensorFlag(GLOBAL_SENSOR_FLAG_B), controlEventIndex == 1)) { | |
controlEventIndex = getCurrentTime(); | |
notifySensorEvent(*GLOBAL_MIDI_OUTPUT_PTR,0x1a,0,0,controlEventIndex - *(int *)(i + 0x18)); | |
} | |
readSensorChannel(channelReading,sensorValue,i,3); | |
// Compare the channel reading with a global threshold. | |
if ((channelReading[0] == GLOBAL_SENSOR_THRESHOLD_VAL || | |
channelReading[0] < GLOBAL_SENSOR_THRESHOLD_VAL != | |
(NAN(channelReading[0]) || NAN(GLOBAL_SENSOR_THRESHOLD_VAL))) || | |
(controlEventIndex = lookupSensorFlag(GLOBAL_SENSOR_FLAG_C), controlEventIndex != 1)) { | |
FUN_08009670(*GLOBAL_SENSOR_STRUCTURE,0); | |
} | |
else { | |
FUN_08009670(*GLOBAL_SENSOR_STRUCTURE,1); | |
} | |
*(undefined1 *)(i + 0x1d) = 0; | |
FUN_08007978(midiChannel,i); | |
} | |
} | |
// Check sensor control flag and, if set, reset it and trigger further | |
// processing. | |
sensorValue = *GLOBAL_SENSOR_STRUCTURE; | |
i = getSensorControlFlag(sensorValue); | |
if (i != 0) { | |
setSensorControlFlag(sensorValue,0); | |
FUN_08009990(GLOBAL_SENSOR_CONTROL_RESET_PARAM); | |
i = getSensorDataBufferBase(sensorValue); | |
for (controlEventIndex = 0; controlEventIndex < 6; controlEventIndex = controlEventIndex + 1) { | |
iVar2 = i + controlEventIndex * 0x38; | |
if ((*(int *)(iVar2 + 0x20) != 0) && (*(char *)(iVar2 + 0x2c) != '\0')) { | |
processPiezoSensorData(midiChannel); | |
*(undefined1 *)(iVar2 + 0x2c) = 0; | |
iVar1 = lookupSensorFlag(GLOBAL_SENSOR_FLAG_B); | |
if ((iVar1 == 1) && (iVar1 = lookupSensorFlag(GLOBAL_SENSOR_FLAG_A), iVar1 == 1)) { | |
sensorValue = *GLOBAL_MIDI_OUTPUT_PTR; | |
iVar1 = getCurrentTime(); | |
notifySensorEvent(sensorValue,0x21,0,0,iVar1 - *(int *)(*(int *)(iVar2 + 0x20) + 0x18)); | |
} | |
} | |
} | |
} | |
return; | |
} | |
// Processes drum hit sensor data by invoking a drum-hit processing routine. | |
void processDrumHits(void) | |
{ | |
FUN_0800746c(GLOBAL_DRUM_HIT_DATA); | |
return; | |
} | |
// Processes drum hits by calling processSensorDrumHits with additional parameters. | |
void processDrumHitsExtended | |
(undefined4 unusedParam,undefined4 param_2,undefined4 param3,undefined4 param4) | |
{ | |
processSensorDrumHits(GLOBAL_DRUM_HIT_CONFIG,unusedParam,param3,param4,param4); | |
return; | |
} | |
// Updates global drum hit sensor data by reading values from a source and storing them into global | |
// locations. | |
void updateDrumHitSensorData(void) | |
{ | |
undefined4 newValue; | |
undefined4 *sourcePtr; | |
sourcePtr = GLOBAL_DRUM_HIT_SOURCE; | |
newValue = FUN_080013cc(*GLOBAL_DRUM_HIT_SOURCE,0); | |
*GLOBAL_DRUM_HIT_DEST1 = newValue; | |
newValue = FUN_080013e8(*sourcePtr,0); | |
*GLOBAL_DRUM_HIT_DEST2 = newValue; | |
return; | |
} | |
uint computeSensorCurveIndex(undefined4 param_1,undefined4 targetCurveId) | |
{ | |
int cmpResult; | |
uint index; | |
undefined4 localCurveIdArray [6]; | |
localCurveIdArray[0] = *GLOBAL_SENSOR_CURVE_ID_ARRAY; | |
localCurveIdArray[1] = GLOBAL_SENSOR_CURVE_ID_ARRAY[1]; | |
localCurveIdArray[2] = GLOBAL_SENSOR_CURVE_ID_ARRAY[2]; | |
localCurveIdArray[3] = GLOBAL_SENSOR_CURVE_ID_ARRAY[3]; | |
localCurveIdArray[4] = GLOBAL_SENSOR_CURVE_ID_ARRAY[4]; | |
localCurveIdArray[5] = GLOBAL_SENSOR_CURVE_ID_ARRAY[5]; | |
index = 0; | |
while( true ) { | |
if (5 < (int)index) { | |
return 0; | |
} | |
cmpResult = strcmp_custom(targetCurveId,localCurveIdArray[index]); | |
if (cmpResult == 0) break; | |
index = index + 1; | |
} | |
return index & 0xff; | |
} | |
undefined4 * | |
computeCalibratedSensorOutput(undefined4 *outputRecord,undefined4 sensorInput,int sensorRecordsBase) | |
{ | |
int curveIndex; | |
undefined4 uVar1; | |
undefined4 uVar2; | |
undefined4 uVar3; | |
int recordAddr; | |
int i; | |
int bestCandidateIndex; | |
undefined4 *bestRecordPtr; | |
int flaggedRecordIndex; | |
float currentCoeff; | |
float recordReading; | |
float bestReading; | |
float curveCoeffs [4]; | |
undefined4 curveOffset; | |
undefined4 curveGain; | |
// Convert global fixed-point curve coefficients to floats. | |
curveCoeffs[0] = (float)convertFixedPointToFloat(GLOBAL_SENSOR_CURVE_COEFF0); | |
curveCoeffs[1] = (float)convertFixedPointToFloat(GLOBAL_SENSOR_CURVE_COEFF1); | |
curveCoeffs[2] = (float)convertFixedPointToFloat(GLOBAL_SENSOR_CURVE_COEFF2); | |
curveCoeffs[3] = (float)convertFixedPointToFloat(GLOBAL_SENSOR_CURVE_COEFF3); | |
// Convert offset and gain values. | |
curveOffset = convertFixedPointToFloat(GLOBAL_SENSOR_CURVE_OFFSET); | |
curveGain = convertFixedPointToFloat(GLOBAL_SENSOR_CURVE_GAIN); | |
flaggedRecordIndex = -1; | |
bestCandidateIndex = -1; | |
bestReading = GLOBAL_SENSOR_CURVE_BASE; | |
// Iterate over the 6 sensor records. | |
for (i = 0; i < 6; i = i + 1) { | |
recordAddr = sensorRecordsBase + i * 0x14; | |
// If the record flag (at offset 4) equals 2, store its index. | |
// | |
if (*(char *)(recordAddr + 4) == '\x02') { | |
flaggedRecordIndex = i; | |
} | |
// Determine the curve index for this record. | |
curveIndex = computeSensorCurveIndex(sensorInput,*(undefined4 *)(sensorRecordsBase + i * 0x14)); | |
// Get the sensor reading from offset 0x10. | |
recordReading = *(float *)(recordAddr + 0x10); | |
currentCoeff = curveCoeffs[curveIndex]; | |
// If the record's reading is both less than the current coefficient and less | |
// than the best so far... | |
if ((recordReading != currentCoeff && | |
recordReading < currentCoeff == (NAN(recordReading) || NAN(currentCoeff))) && | |
(recordReading != bestReading && | |
recordReading < bestReading == (NAN(recordReading) || NAN(bestReading)))) { | |
bestCandidateIndex = i; | |
bestReading = recordReading; | |
} | |
} | |
// If no candidate was found, use the record flagged with 0x02. | |
if (bestCandidateIndex == -1) { | |
bestRecordPtr = (undefined4 *)(sensorRecordsBase + flaggedRecordIndex * 0x14); | |
// Copy the selected record's five fields into the output record. | |
uVar1 = bestRecordPtr[1]; | |
uVar2 = bestRecordPtr[2]; | |
uVar3 = bestRecordPtr[3]; | |
*outputRecord = *bestRecordPtr; | |
outputRecord[1] = uVar1; | |
outputRecord[2] = uVar2; | |
outputRecord[3] = uVar3; | |
outputRecord[4] = bestRecordPtr[4]; | |
} | |
else { | |
bestRecordPtr = (undefined4 *)(sensorRecordsBase + bestCandidateIndex * 0x14); | |
// Copy the selected record's five fields into the output record. | |
uVar1 = bestRecordPtr[1]; | |
uVar2 = bestRecordPtr[2]; | |
uVar3 = bestRecordPtr[3]; | |
*outputRecord = *bestRecordPtr; | |
outputRecord[1] = uVar1; | |
outputRecord[2] = uVar2; | |
outputRecord[3] = uVar3; | |
outputRecord[4] = bestRecordPtr[4]; | |
} | |
return outputRecord; | |
} | |
// Adjusts and calibrates the sensor threshold value based on global calibration data. | |
int calibrateThreshold(undefined4 param_1,undefined4 rawThreshold) | |
{ | |
undefined2 uVar1; | |
uint tempUnsigned; | |
undefined4 tempRecordPtr; | |
undefined4 tmp1; | |
undefined4 uVar2; | |
int recordAddr; | |
undefined4 tmp2; | |
undefined4 uVar3; | |
undefined4 tmp3; | |
undefined4 tmp4; | |
undefined4 uVar4; | |
int ii; | |
undefined4 *record; | |
undefined4 *tempRecord; | |
float delta; | |
float normalizedValue; | |
undefined1 local_9c [100]; | |
undefined4 calibrationArray [6]; | |
int temp; | |
temp = GLOBAL_CALIB_BASE; | |
// Use globals for calibration: | |
*(undefined4 *)(GLOBAL_CALIB_BASE + 4) = rawThreshold; | |
recordAddr = GLOBAL_CALIB_DATA_ADDR; | |
*(int *)(GLOBAL_CALIB_DATA_ADDR + 4) = GLOBAL_CALIB_DEFAULT; | |
*(undefined4 **)(recordAddr + 0x20) = GLOBAL_CALIB_PTR; | |
// Call a helper function to validate calibration. | |
temp = FUN_080014c2(*GLOBAL_CALIB_SOURCE,temp); | |
if (temp == 1) { | |
// Copy calibration coefficients from global array. | |
calibrationArray[0] = *GLOBAL_CALIB_ARRAY; | |
calibrationArray[1] = GLOBAL_CALIB_ARRAY[1]; | |
calibrationArray[2] = GLOBAL_CALIB_ARRAY[2]; | |
calibrationArray[3] = GLOBAL_CALIB_ARRAY[3]; | |
calibrationArray[4] = GLOBAL_CALIB_ARRAY[4]; | |
calibrationArray[5] = GLOBAL_CALIB_ARRAY[5]; | |
normalizedValue = GLOBAL_CALIB_OFFSET; | |
// For each of the 6 calibration records, update calibration data. | |
for (temp = 0; temp < 6; temp = temp + 1) { | |
recordAddr = GLOBAL_CALIB_RECORD_BASE + temp * 0x14; | |
*(undefined4 *)(GLOBAL_CALIB_RECORD_BASE + temp * 0x14) = calibrationArray[temp]; | |
*(undefined4 *)(recordAddr + 0x10) = *(undefined4 *)(GLOBAL_CALIB_DEFAULT + temp * 4); | |
*(undefined4 *)(recordAddr + 8) = *GLOBAL_CALIB_PTR; | |
delta = (float)FUN_0800e914(); | |
normalizedValue = normalizedValue + delta; | |
} | |
// Normalize each calibration record’s reading. | |
for (temp = 0; temp < 6; temp = temp + 1) { | |
recordAddr = GLOBAL_CALIB_RECORD_BASE + temp * 0x14; | |
delta = (float)FUN_0800e914(*(undefined4 *)(recordAddr + 0x10)); | |
*(float *)(recordAddr + 0x10) = delta / normalizedValue; | |
*(char *)(recordAddr + 4) = (char)temp; | |
} | |
temp = 0; | |
// Bubble-sort the calibration records based on the normalized reading. | |
while (recordAddr = temp, temp = GLOBAL_CALIB_RECORD_BASE, recordAddr < 6) { | |
for (ii = recordAddr + 1; temp = recordAddr + 1, ii < 6; ii = ii + 1) { | |
if ((int)((uint)(*(float *)(GLOBAL_CALIB_RECORD_BASE + recordAddr * 0x14 + 0x10) < | |
*(float *)(GLOBAL_CALIB_RECORD_BASE + ii * 0x14 + 0x10)) << 0x1f) < 0) { | |
// Swap records. | |
tempRecord = (undefined4 *)(GLOBAL_CALIB_RECORD_BASE + recordAddr * 0x14); | |
// Swap 5 fields. | |
tempRecordPtr = *tempRecord; | |
tmp1 = tempRecord[1]; | |
tmp2 = tempRecord[2]; | |
tmp3 = tempRecord[3]; | |
tmp4 = tempRecord[4]; | |
record = (undefined4 *)(GLOBAL_CALIB_RECORD_BASE + ii * 0x14); | |
uVar2 = record[1]; | |
uVar3 = record[2]; | |
uVar4 = record[3]; | |
*tempRecord = *record; | |
tempRecord[1] = uVar2; | |
tempRecord[2] = uVar3; | |
tempRecord[3] = uVar4; | |
tempRecord[4] = record[4]; | |
*record = tempRecordPtr; | |
record[1] = tmp1; | |
record[2] = tmp2; | |
record[3] = tmp3; | |
record[4] = tmp4; | |
} | |
} | |
} | |
} | |
else { | |
// If calibration validation failed, update the MIDI buffer with an error | |
// string. | |
tempUnsigned = FUN_080013a4(*GLOBAL_CALIB_SOURCE); | |
updateMidiBuffer(local_9c,GLOBAL_MIDI_UPDATE_PARAM,tempUnsigned & 0xff,tempUnsigned >> 8); | |
uVar1 = strlen_custom(local_9c); | |
FUN_080037a2(GLOBAL_MIDI_ERROR_OUTPUT,local_9c,uVar1,0xffffffff); | |
temp = 0; | |
} | |
return temp; | |
} | |
undefined4 FUN_08008074(undefined4 param_1) | |
{ | |
char *pcVar1; | |
undefined4 *puVar2; | |
undefined2 uVar3; | |
undefined4 uVar4; | |
undefined4 uVar5; | |
undefined4 *puVar6; | |
undefined4 uVar7; | |
int iVar8; | |
undefined4 *puVar9; | |
undefined4 local_7c; | |
undefined4 uStack_78; | |
undefined4 uStack_74; | |
undefined4 uStack_70; | |
undefined4 local_6c; | |
undefined4 uStack_68; | |
undefined2 local_64; | |
uVar4 = FUN_08001434(DAT_08008154,DAT_08008150,0); | |
pcVar1 = DAT_08008158; | |
*(undefined4 *)DAT_08008158 = uVar4; | |
puVar2 = DAT_08008164; | |
if (*pcVar1 == '\0') { | |
puVar6 = (undefined4 *)*DAT_0800815c; | |
if ((puVar6 == (undefined4 *)0x0) || | |
(puVar9 = (undefined4 *)*DAT_08008160, puVar9 == (undefined4 *)0x0)) { | |
FUN_080037a2(DAT_08008170,DAT_08008174,0x32,0xffffffff); | |
} | |
else { | |
uVar4 = puVar6[1]; | |
uVar5 = puVar6[2]; | |
uVar7 = puVar6[3]; | |
*DAT_08008164 = *puVar6; | |
puVar2[1] = uVar4; | |
puVar2[2] = uVar5; | |
puVar2[3] = uVar7; | |
uVar4 = puVar6[5]; | |
uVar5 = puVar6[6]; | |
puVar2[4] = puVar6[4]; | |
puVar2[5] = uVar4; | |
puVar2[6] = uVar5; | |
puVar2 = DAT_08008168; | |
uVar4 = puVar9[1]; | |
uVar5 = puVar9[2]; | |
uVar7 = puVar9[3]; | |
*DAT_08008168 = *puVar9; | |
puVar2[1] = uVar4; | |
puVar2[2] = uVar5; | |
puVar2[3] = uVar7; | |
uVar4 = puVar9[5]; | |
uVar5 = puVar9[6]; | |
puVar2[4] = puVar9[4]; | |
puVar2[5] = uVar4; | |
puVar2[6] = uVar5; | |
uVar4 = puVar9[8]; | |
uVar5 = puVar9[9]; | |
uVar7 = puVar9[10]; | |
puVar2[7] = puVar9[7]; | |
puVar2[8] = uVar4; | |
puVar2[9] = uVar5; | |
puVar2[10] = uVar7; | |
uVar4 = puVar9[0xc]; | |
uVar5 = puVar9[0xd]; | |
puVar2[0xb] = puVar9[0xb]; | |
puVar2[0xc] = uVar4; | |
puVar2[0xd] = uVar5; | |
for (iVar8 = 0; iVar8 < 0x83; iVar8 = iVar8 + 1) { | |
*(undefined4 *)(DAT_08008178 + iVar8 * 4) = DAT_0800817c; | |
} | |
DAT_08008164[1] = DAT_08008178; | |
puVar2 = DAT_08008168; | |
DAT_08008168[1] = DAT_08008180; | |
puVar2[8] = DAT_08008184; | |
iVar8 = calibrateThreshold(param_1); | |
if (iVar8 == 0) { | |
local_7c = *DAT_08008188; | |
uStack_78 = DAT_08008188[1]; | |
uStack_74 = DAT_08008188[2]; | |
uStack_70 = DAT_08008188[3]; | |
local_6c = DAT_08008188[4]; | |
uStack_68 = DAT_08008188[5]; | |
local_64 = (undefined2)DAT_08008188[6]; | |
uVar3 = strlen_custom(&local_7c); | |
FUN_080037a2(DAT_08008170,&local_7c,uVar3,0xffffffff); | |
} | |
} | |
} | |
else { | |
FUN_080037a2(DAT_08008170,DAT_0800816c,0x32,0xffffffff); | |
} | |
return param_1; | |
} | |
void FUN_08008194(undefined4 param_1,undefined4 param_2,undefined4 param_3) | |
{ | |
float local_14 [2]; | |
FUN_0800d1e4(param_2,param_3,local_14,0); | |
if (local_14[0] != 0.0 && local_14[0] < 0.0 == NAN(local_14[0])) { | |
FUN_0800e090(1.0 / local_14[0],param_2,param_2,param_3); | |
} | |
return; | |
} | |
void resetSensorState(int param_1) | |
{ | |
int iVar1; | |
int iVar2; | |
int iVar3; | |
int iVar4; | |
bool bVar5; | |
int iVar6; | |
undefined4 uVar7; | |
float *pfVar8; | |
int iVar9; | |
uint in_fpscr; | |
float fVar10; | |
undefined4 local_1c74; | |
float local_1c70; | |
float local_1c6c; | |
int local_1c68; | |
undefined4 local_1c64; | |
float local_1c60; | |
int local_1c5c; | |
float local_1c58; | |
int aiStack_1c54 [509]; | |
undefined1 auStack_1460 [4]; | |
undefined4 local_145c; | |
undefined4 local_1458; | |
undefined4 local_1454; | |
float local_1450 [1036]; | |
float local_420 [257]; | |
for (iVar1 = 0; iVar1 < 0x40; iVar1 = iVar1 + 1) { | |
for (iVar6 = 0; iVar6 < 4; iVar6 = iVar6 + 1) { | |
local_420[iVar6 + iVar1 * 4] = *(float *)(*(int *)(param_1 + iVar6 * 4 + 4) + iVar1 * 4); | |
} | |
} | |
FUN_08012484(local_1450 + 0xc,0,0x1000); | |
for (iVar1 = 0; iVar1 < 4; iVar1 = iVar1 + 1) { | |
if (iVar1 != 3) { | |
for (iVar6 = 0; iVar6 < 0x40; iVar6 = iVar6 + 1) { | |
local_1450[iVar6 + iVar1 * 0x100 + 0xc] = local_420[iVar1 + iVar6 * 4]; | |
} | |
} | |
} | |
iVar6 = 0; | |
local_1450[9] = 0.0; | |
local_1450[10] = 0.0; | |
local_1450[0xb] = 0.0; | |
local_1450[6] = 0.0; | |
local_1450[7] = 0.0; | |
local_1450[8] = 0.0; | |
local_1450[3] = 0.0; | |
local_1450[4] = 0.0; | |
local_1450[5] = 0.0; | |
local_1450[0] = 0.0; | |
local_1450[1] = 0.0; | |
local_1450[2] = 0.0; | |
local_145c = 0; | |
local_1458 = 0; | |
local_1454 = 0; | |
iVar1 = 0; | |
do { | |
if (3 < iVar6) { | |
FUN_08008194(auStack_1460,local_1450 + 6,3); | |
FUN_08008194(auStack_1460,local_1450 + 3,3); | |
iVar6 = *(int *)(param_1 + 0x34); | |
sendMidiCommand(local_1450 + 9,iVar6,3); | |
sendMidiCommand(local_1450 + 6,iVar6 + 0xc,3); | |
sendMidiCommand(local_1450 + 3,iVar6 + 0x18,3); | |
sendMidiCommand(local_1450,iVar6 + 0x24,3); | |
sendMidiCommand(&local_145c,iVar6 + 0x30,3); | |
FUN_0800d168(local_1450 + 9,3,iVar6 + 0x3c); | |
iVar1 = FUN_08009676(*DAT_080084b4); | |
if (iVar1 == 0) { | |
uVar7 = 0; | |
} | |
else { | |
uVar7 = 0x3f800000; | |
} | |
*(undefined4 *)(iVar6 + 0x40) = uVar7; | |
return; | |
} | |
if (iVar6 != 3) { | |
pfVar8 = local_1450 + iVar6 * 0x100 + 0xc; | |
FUN_0800d1e4(pfVar8,0x40,local_1450 + iVar1 + 9,&local_1c74); | |
fVar10 = (float)VectorUnsignedToFloat(local_1c74,(byte)(in_fpscr >> 0x15) & 3); | |
local_1450[iVar1] = fVar10 * DAT_080084b0; | |
local_1c70 = 0.0; | |
FUN_0800e1d0(pfVar8,pfVar8,0x40,&local_1c70); | |
local_1450[iVar1 + 6] = local_1c70; | |
fVar10 = *pfVar8; | |
for (iVar4 = 1; iVar4 < 0x40; iVar4 = iVar4 + 1) { | |
local_1450[iVar1 + 3] = local_1450[iVar1 + 3] + ABS(pfVar8[iVar4] - fVar10); | |
fVar10 = pfVar8[iVar4]; | |
} | |
if (iVar6 == 0) { | |
for (iVar4 = 0; iVar4 < 0x40; iVar4 = iVar4 + 1) { | |
(&local_1c6c)[iVar4 * 2 + 3] = pfVar8[iVar4]; | |
(&local_1c5c)[iVar4 * 2] = iVar4; | |
} | |
for (iVar4 = 0; iVar4 < 0x3f; iVar4 = iVar4 + 1) { | |
iVar9 = 0; | |
while (iVar3 = iVar9, iVar3 < 0x3f - iVar4) { | |
iVar9 = iVar3 + 1; | |
in_fpscr = in_fpscr & 0xfffffff; | |
if ((&local_1c6c)[iVar3 * 2 + 3] < (&local_1c6c)[iVar9 * 2 + 3]) { | |
local_1c6c = (&local_1c6c)[iVar3 * 2 + 3]; | |
local_1c68 = (&local_1c5c)[iVar3 * 2]; | |
iVar2 = (&local_1c5c)[iVar9 * 2]; | |
(&local_1c6c)[iVar3 * 2 + 3] = (&local_1c6c)[iVar9 * 2 + 3]; | |
(&local_1c5c)[iVar3 * 2] = iVar2; | |
(&local_1c6c)[iVar9 * 2 + 3] = local_1c6c; | |
(&local_1c5c)[iVar9 * 2] = local_1c68; | |
} | |
} | |
} | |
local_1c6c = 0.0; | |
local_1c68 = 0; | |
local_1c64 = 0; | |
iVar4 = 0; | |
iVar9 = 0; | |
while ((iVar9 < 0x40 && (iVar4 < 3))) { | |
for (iVar3 = 0; iVar3 < iVar4; iVar3 = iVar3 + 1) { | |
iVar2 = VectorFloatToSignedFixed((&local_1c6c)[iVar3],0x20,6); | |
if (((&local_1c5c)[iVar9 * 2] - iVar2) + 4U < 9) { | |
bVar5 = false; | |
goto LAB_080083b6; | |
} | |
} | |
bVar5 = true; | |
LAB_080083b6: | |
if (bVar5) { | |
fVar10 = (float)VectorSignedToFloat((&local_1c5c)[iVar9 * 2], | |
(byte)(in_fpscr >> 0x15) & 3); | |
(&local_1c6c)[iVar4] = fVar10 * DAT_080084b0; | |
iVar4 = iVar4 + 1; | |
} | |
iVar9 = iVar9 + 1; | |
} | |
if (2 < iVar4) { | |
iVar4 = 3; | |
} | |
sendMidiCommand(&local_1c6c,&local_145c,iVar4); | |
} | |
iVar1 = iVar1 + 1; | |
} | |
iVar6 = iVar6 + 1; | |
} while( true ); | |
} | |
void FUN_080084b8(int param_1) | |
{ | |
undefined4 uVar1; | |
undefined4 uVar2; | |
int iVar3; | |
uint in_fpscr; | |
float fVar4; | |
float local_120; | |
undefined1 auStack_11c [4]; | |
undefined1 auStack_118 [260]; | |
if (*DAT_080085ac == '\0') { | |
for (iVar3 = 0; iVar3 < 0x40; iVar3 = iVar3 + 1) { | |
fVar4 = (float)VectorSignedToFloat(iVar3,(byte)(in_fpscr >> 0x15) & 3); | |
fVar4 = (float)FUN_0800dffc((fVar4 * DAT_080085b0) / DAT_080085b4); | |
*(float *)(DAT_080085c0 + iVar3 * 4) = DAT_080085bc - fVar4 * DAT_080085b8; | |
} | |
*DAT_080085ac = '\x01'; | |
} | |
for (iVar3 = 0; iVar3 < 4; iVar3 = iVar3 + 1) { | |
if (iVar3 != 3) { | |
copyBuffer(auStack_118,*(undefined4 *)(param_1 + iVar3 * 4 + 4),0x100); | |
uVar1 = DAT_080085c8; | |
FUN_0800e11c(auStack_118,DAT_080085c0,DAT_080085c8,0x40); | |
uVar2 = DAT_080085d0; | |
FUN_0800d5c8(*DAT_080085cc + 0x10,uVar1,DAT_080085d0,0); | |
uVar1 = DAT_080085c4; | |
FUN_0800ddb4(uVar2,DAT_080085c4,0x20); | |
FUN_0800d1e4(uVar1,0x20,&local_120,auStack_11c); | |
if (local_120 != DAT_080085d4 && | |
local_120 < DAT_080085d4 == (NAN(local_120) || NAN(DAT_080085d4))) { | |
FUN_0800e090(1.0 / local_120,uVar1,uVar1,0x20); | |
} | |
uVar1 = DAT_080085c4; | |
sendMidiCommand(DAT_080085c4,*(undefined4 *)(param_1 + (iVar3 + 8) * 4 + 4),0x20); | |
sendMidiCommand(uVar1,*(int *)(param_1 + 0x30) + iVar3 * 0x80,0x20); | |
} | |
} | |
return; | |
} | |
void FUN_080085d8(void) | |
{ | |
undefined4 uVar1; | |
int iVar2; | |
uVar1 = updateGlobalSystemStatus(); | |
*DAT_080085f4 = uVar1; | |
iVar2 = lookupSensorFlag(DAT_080085f8); | |
if (iVar2 != 0) { | |
iVar2 = 1; | |
} | |
*DAT_080085fc = (char)iVar2; | |
return; | |
} | |
undefined4 FUN_08008600(void) | |
{ | |
int iVar1; | |
DataMemoryBarrier(0x1b); | |
if (((*DAT_08008628 & 1) == 0) && (iVar1 = FUN_0800e8c0(DAT_08008628), iVar1 != 0)) { | |
FUN_0800e8d8(DAT_08008628); | |
} | |
return DAT_0800862c; | |
} | |
void handleSysExMessage(undefined4 param_1,undefined4 status,char data1,undefined1 data2, | |
undefined1 data3) | |
{ | |
ushort uVar1; | |
char cVar2; | |
ushort *puVar3; | |
uint uVar4; | |
uint i; | |
uint dataLength; | |
char messageData [8]; | |
switch(status) { | |
case 4: | |
messageData[0] = data1; | |
messageData[1] = data2; | |
messageData[2] = data3; | |
dataLength = 3; | |
break; | |
case 5: | |
messageData[0] = data1; | |
dataLength = 1; | |
break; | |
case 6: | |
messageData[0] = data1; | |
messageData[1] = data2; | |
dataLength = 2; | |
break; | |
case 7: | |
messageData[0] = data1; | |
messageData[1] = data2; | |
messageData[2] = data3; | |
dataLength = 3; | |
break; | |
default: | |
goto switchD_0800863e_caseD_4; | |
} | |
for (i = 0; i < dataLength; i = i + 1 & 0xff) { | |
cVar2 = messageData[i]; | |
if (*sysExInProgress == '\0') { | |
if (cVar2 == -0x10) { | |
*sysExInProgress = '\x01'; | |
puVar3 = sysExIndex; | |
*sysExIndex = 0; | |
*puVar3 = 1; | |
*sysExBuffer = 0xf0; | |
} | |
} | |
else { | |
uVar1 = *sysExIndex; | |
uVar4 = uVar1 + 1; | |
*sysExIndex = (ushort)uVar4; | |
sysExBuffer[uVar1] = cVar2; | |
if (0xff < (uVar4 & 0xffff)) { | |
*sysExInProgress = '\0'; | |
*sysExIndex = 0; | |
return; | |
} | |
if (cVar2 == -9) { | |
*sysExInProgress = '\0'; | |
*sysExComplete = 1; | |
} | |
} | |
} | |
switchD_0800863e_caseD_4: | |
return; | |
} | |
void processSensorExpressionMode0(undefined4 param_1,undefined4 param_2,undefined4 param_3) | |
{ | |
undefined4 local_20 [6]; | |
extractSensorControlParameters(local_20); | |
FUN_080073d0(local_20[0],param_3); | |
return; | |
} | |
void processSensorExpressionMode1(float param_1) | |
{ | |
undefined4 uVar1; | |
undefined4 local_28 [7]; | |
extractSensorControlParameters(local_28); | |
uVar1 = VectorFloatToUnsigned(param_1 * DAT_08008748,3); | |
FUN_080073d0(local_28[0],uVar1); | |
return; | |
} | |
void updateMidiDeviceStatus(void) | |
{ | |
if (*(char *)(DAT_0800876c + 0x29c) == '\x03') { | |
resetSensorSubsystem(DAT_08008774); | |
} | |
else { | |
resetSensorSubsystem(DAT_08008770); | |
} | |
return; | |
} | |
// Checks the current time against the last MIDI transmission time and, if conditions are met and | |
// the MIDI queue is nonempty, attempts to transmit a MIDI packet. | |
// On successful transmission it updates the packet index and resets the error counter; on failure, | |
// it increments an error counter and logs the error. | |
void updateMidiChannel(void) | |
{ | |
int currentTime; | |
ushort uVar1; | |
undefined4 in_r3; | |
currentTime = getCurrentTime(); | |
if ((1 < (uint)(currentTime - *GLOBAL_MIDI_LAST_TX_TIME)) && | |
((uint)*GLOBAL_MIDI_QUEUE_HEAD != (uint)*GLOBAL_MIDI_PACKET_INDEX)) { | |
currentTime = transmitMidiPacket(GLOBAL_MIDI_DEVICE_HANDLE,0x81, | |
GLOBAL_MIDI_PACKET_BUFFER_BASE + | |
(uint)*GLOBAL_MIDI_PACKET_INDEX * 4,4,in_r3); | |
if (currentTime == 0) { | |
currentTime = *GLOBAL_MIDI_PACKET_INDEX + 1; | |
uVar1 = (ushort)currentTime & 0x7ff; | |
if (currentTime == 0) { | |
uVar1 = -(ushort)((uint)(currentTime * -0x200000) >> 0x15); | |
} | |
*GLOBAL_MIDI_PACKET_INDEX = uVar1; | |
currentTime = getCurrentTime(); | |
*GLOBAL_MIDI_LAST_TX_TIME = currentTime; | |
*GLOBAL_MIDI_ERROR_COUNTER = '\0'; | |
} | |
else { | |
// Increment error counter and log the error. | |
*GLOBAL_MIDI_ERROR_COUNTER = *GLOBAL_MIDI_ERROR_COUNTER + '\x01'; | |
FUN_08012370(DAT_080087f8); | |
} | |
} | |
return; | |
} | |
// Constructs an event record by combining three event type bytes into the lower 24 bits, preserving | |
// the current upper byte, and then writes the record (with an associated event parameter) into the | |
// global event buffer if the newly computed event ID differs from the last stored ID. | |
void notifySensorEvent(undefined4 param_1,undefined1 eventTypeByte1,undefined1 eventTypeByte2, | |
undefined1 eventTypeByte3,undefined4 eventParameter) | |
{ | |
ushort newEventId; | |
int newEventCounter; | |
undefined4 *eventRecordPtr; | |
undefined4 local_eventRecord; | |
undefined4 eventRecord; | |
// Preserve the current (upper) byte of the event record. | |
eventRecord = local_eventRecord; | |
// Compute the new event counter and derive a 16-bit event ID. | |
newEventCounter = *GLOBAL_EVENT_COUNTER + 1; | |
newEventId = (ushort)((uint)(newEventCounter * 0x80000) >> 0x13); | |
if (newEventCounter == 0) { | |
newEventId = -(ushort)((uint)(newEventCounter * -0x80000) >> 0x13); | |
} | |
// If the new event ID differs from the last stored event ID, update the event | |
// buffer. | |
if (*GLOBAL_LAST_EVENT_ID != newEventId) { | |
// Set the lower 24 bits of eventRecord to the concatenation of eventTypeByte3, | |
// eventTypeByte2, and eventTypeByte1. | |
// The upper 8 bits are preserved from the original eventRecord. | |
local_eventRecord._3_1_ = SUB41(eventRecord,3); | |
local_eventRecord._0_3_ = CONCAT12(eventTypeByte3,CONCAT11(eventTypeByte2,eventTypeByte1)); | |
// Compute pointer to the event record slot (each record is 8 bytes). | |
eventRecordPtr = (undefined4 *)(GLOBAL_EVENT_BUFFER + (uint)*GLOBAL_EVENT_COUNTER * 8); | |
*eventRecordPtr = local_eventRecord; | |
eventRecordPtr[1] = eventParameter; | |
*GLOBAL_EVENT_COUNTER = newEventId; | |
} | |
return; | |
} | |
// Adjusts the effective control parameter based on a flag and then notifies the sensor event with a | |
// fixed command (3) along with the flag and extra parameter. | |
void applySensorControlParameters | |
(undefined4 midiOutput,undefined4 param_2,char controlFlag,undefined4 backupParameter | |
,undefined1 extraFlag,undefined4 effectiveParameter) | |
{ | |
// If the control flag is set, override the effective parameter with | |
// backupParameter. | |
if (controlFlag != '\0') { | |
effectiveParameter = backupParameter; | |
} | |
notifySensorEvent(midiOutput,3,controlFlag != '\0',extraFlag,effectiveParameter); | |
return; | |
} | |
// Sends a fixed alternate sensor message by notifying a sensor event with command type 10 and a | |
// fixed event parameter (0x556). | |
void handleAlternateSensorMessage(undefined4 midiOutput) | |
{ | |
notifySensorEvent(midiOutput,10,0,0,0x556); | |
return; | |
} | |
void transmitMidiNoteOffMessage(undefined4 midiDestination,int noteOffTable) | |
{ | |
undefined4 noteOffFlagValue; | |
uint innerIndex; | |
int totalEventCount; | |
uint outerIndex; | |
noteOffFlagValue = lookupSensorFlag(NOTE_OFF_IDENTIFIER); | |
notifySensorEvent(midiDestination,0x10,0,0,noteOffFlagValue); | |
totalEventCount = 0; | |
for (outerIndex = 0; outerIndex < 4; outerIndex = outerIndex + 1 & 0xff) { | |
for (innerIndex = 0; innerIndex < 0x40; innerIndex = innerIndex + 1 & 0xff) { | |
notifySensorEvent(midiDestination,6,1,0, | |
*(undefined4 *) | |
(*(int *)(noteOffTable + outerIndex * 4 + 4) + innerIndex * 4)); | |
totalEventCount = totalEventCount + 1; | |
} | |
} | |
notifySensorEvent(midiDestination,0x11,0,0,totalEventCount); | |
return; | |
} | |
void sendMidiMessage(undefined4 param_1,undefined1 manufacturerId,undefined1 deviceId,int payload, | |
uint payloadLength) | |
{ | |
byte crcChecksum; | |
byte ii; | |
int headerLength; | |
uint i; | |
uint uVar1; | |
uint uVar2; | |
uint uVar3; | |
undefined1 uVar4; | |
undefined1 local_618 [512]; | |
undefined1 sysExMessage [512]; | |
byte local_218 [8]; | |
byte sysExHeader [516]; | |
// SysEx header construction | |
// Manufacturer ID (example: 0x4F for a specific vendor) | |
sysExHeader[0] = 0x4f; | |
sysExHeader[1] = manufacturerId; | |
if (payload == 0) { | |
sysExHeader[2] = deviceId; | |
headerLength = 3; | |
} | |
else { | |
sysExHeader[2] = (char)payload; | |
sysExHeader[3] = deviceId; | |
headerLength = 4; | |
} | |
// Add payload length and checksum placeholder | |
uVar2 = headerLength + 1; | |
// Payload length (example: fixed to 5 bytes) | |
sysExHeader[headerLength] = 5; | |
// Encode payload data (7-bit format) | |
for (i = 0; i < 5; i = i + 1 & 0xff) { | |
// 7-bit encoding | |
local_218[4 - i] = (byte)(payloadLength >> (i * 7 & 0xff)) & 0x7f; | |
} | |
// Append payload to SysEx message | |
for (i = 0; i < 5; i = i + 1 & 0xff) { | |
sysExHeader[uVar2] = local_218[i]; | |
uVar2 = uVar2 + 1 & 0xffff; | |
} | |
// Calculate checksum | |
crcChecksum = 0; | |
for (i = 0; i < uVar2; i = i + 1 & 0xffff) { | |
// Sum of all bytes (7-bit) | |
crcChecksum = crcChecksum + sysExHeader[i] & 0x7f; | |
} | |
// Append checksum | |
sysExHeader[uVar2] = crcChecksum; | |
// Construct SysEx message with start and end markers | |
// SysEx start byte | |
sysExMessage[0] = 0xf0; | |
// Copy payload | |
copyBuffer(sysExMessage + 1,sysExHeader,uVar2 + 1 & 0xffff); | |
uVar3 = uVar2 + 3 & 0xffff; | |
// SysEx end byte | |
sysExMessage[uVar2 + 2 & 0xffff] = 0xf7; | |
// Split SysEx message into MIDI packets | |
i = 0; | |
uVar2 = 0; | |
do { | |
if (uVar3 <= i) { | |
// Send MIDI packets | |
sendMidiPacket(DAT_08008a5c,local_618); | |
return; | |
} | |
uVar1 = uVar3 - i & 0xffff; | |
if (uVar1 < 3) { | |
if (uVar1 == 2) { | |
crcChecksum = 2; | |
uVar4 = 6; | |
} | |
else if (uVar1 == 3) { | |
crcChecksum = 3; | |
uVar4 = 7; | |
} | |
else { | |
if (uVar1 != 1) { | |
return; | |
} | |
crcChecksum = 1; | |
uVar4 = 5; | |
} | |
} | |
else { | |
crcChecksum = 3; | |
uVar4 = 4; | |
} | |
// Construct MIDI packet | |
local_618[uVar2] = uVar4; | |
for (ii = 0; uVar2 = uVar2 + 1 & 0xffff, ii < 3; ii = ii + 1) { | |
if (ii < crcChecksum) { | |
local_618[uVar2] = sysExMessage[i]; | |
i = i + 1 & 0xffff; | |
} | |
else { | |
// Pad with zeros if necessary | |
local_618[uVar2] = 0; | |
} | |
} | |
} while( true ); | |
} | |
// Checks if enough time has passed since the last MIDI send and, if a pending message exists, sends | |
// the next MIDI message from the message buffer, then updates the message index. | |
void processPendingMidiMessage(undefined4 midiOutput) | |
{ | |
int currentTime; | |
uint midiMsgWord; | |
ushort newMsgIndex; | |
uint *messagePtr; | |
undefined1 midiDataByte2; | |
undefined1 midiDataByte3; | |
currentTime = getCurrentTime(); | |
if ((1 < (uint)(currentTime - *GLOBAL_LAST_MIDI_SEND_TIME)) && | |
((uint)*GLOBAL_MIDI_MSG_INDEX != (uint)*GLOBAL_MIDI_QUEUE_COUNT)) { | |
messagePtr = (uint *)(GLOBAL_MIDI_MSG_BUFFER + (uint)*GLOBAL_MIDI_MSG_INDEX * 8); | |
midiMsgWord = *messagePtr; | |
midiDataByte3 = (undefined1)(midiMsgWord >> 0x10); | |
midiDataByte2 = (undefined1)(midiMsgWord >> 8); | |
sendMidiMessage(midiOutput,midiMsgWord & 0xff,midiDataByte2,midiDataByte3,messagePtr[1]); | |
*GLOBAL_LAST_MIDI_SEND_TIME = currentTime; | |
currentTime = *GLOBAL_MIDI_MSG_INDEX + 1; | |
newMsgIndex = (ushort)((uint)(currentTime * 0x80000) >> 0x13); | |
if (currentTime == 0) { | |
newMsgIndex = -(ushort)((uint)(currentTime * -0x80000) >> 0x13); | |
} | |
*GLOBAL_MIDI_MSG_INDEX = newMsgIndex; | |
} | |
return; | |
} | |
// Finalizes a sensor-generated MIDI Note On event by sending a header event, followed by a series | |
// of note data events, and finally a footer event indicating the total count of note data items. | |
void finalizeSensorNoteOn(undefined4 midiOutput,int noteDataBuffer) | |
{ | |
undefined4 noteOnId; | |
uint noteCount; | |
// Lookup the sensor Note On identifier from a global table. | |
noteOnId = lookupSensorFlag(GLOBAL_SENSOR_NOTE_ON_IDENTIFIER); | |
// Send a header event with command code 0x10. | |
notifySensorEvent(midiOutput,0x10,0,0,noteOnId); | |
// Loop through the note data (0x83 items) and send each as a note event. | |
for (noteCount = 0; noteCount < 0x83; noteCount = noteCount + 1 & 0xff) { | |
notifySensorEvent(midiOutput,6,1,0,*(undefined4 *)(noteDataBuffer + noteCount * 4)); | |
} | |
// Send a footer event with command code 0x11, including the total count. | |
notifySensorEvent(midiOutput,0x11,0,0,0x83); | |
return; | |
} | |
// Constructs an additional MIDI command from the given command bytes and updates the additional | |
// MIDI command buffer. If the computed new command index matches a target value, the sensor | |
// subsystem is reset. | |
void sendAdditionalMidiCommand | |
(undefined4 midiChannel,undefined1 cmdByte2,undefined1 cmdByte3,undefined1 cmdByte4) | |
{ | |
ushort newCmdIndex; | |
int currentCmdCounter; | |
undefined4 additionalCmd; | |
// Construct the additional MIDI command: | |
// Lower byte is fixed as 9, then cmdByte2, then cmdByte3, then cmdByte4 | |
// (highest). | |
additionalCmd = CONCAT13(cmdByte4,CONCAT12(cmdByte3,CONCAT11(cmdByte2,9))); | |
// Increment the additional command counter and compute a new command index. | |
currentCmdCounter = *GLOBAL_ADDITIONAL_MIDI_CMD_COUNTER + 1; | |
newCmdIndex = (ushort)((uint)(currentCmdCounter * 0x200000) >> 0x15); | |
if (currentCmdCounter == 0) { | |
newCmdIndex = -(ushort)((uint)(currentCmdCounter * -0x200000) >> 0x15); | |
} | |
// If the new index matches the target index, reset the sensor subsystem. | |
if (*GLOBAL_MIDI_CMD_TARGET_INDEX == newCmdIndex) { | |
resetSensorSubsystem(GLOBAL_MIDI_CMD_RESET_PARAM); | |
} | |
else { | |
// Otherwise, store the additional command in the command buffer at the current | |
// index. | |
*(undefined4 *) | |
(GLOBAL_ADDITIONAL_MIDI_CMD_BUFFER + (uint)*GLOBAL_ADDITIONAL_MIDI_CMD_COUNTER * 4) = | |
additionalCmd; | |
*GLOBAL_ADDITIONAL_MIDI_CMD_COUNTER = newCmdIndex; | |
} | |
return; | |
} | |
// Sends a control message by issuing an additional MIDI command with a fixed SysEx byte (0x99) and | |
// then registers a control event with the given parameters. | |
void transmitControlMessage | |
(undefined4 midiChannel,undefined4 eventCode,undefined4 eventModifier, | |
undefined4 eventParameter,undefined1 extraFlag) | |
{ | |
// Send additional MIDI command: | |
// The constructed command will have fixed byte 0x99 as the second byte, | |
// followed by eventCode and eventModifier. | |
sendAdditionalMidiCommand(midiChannel,0x99,(char)eventCode,(char)eventModifier); | |
// Register the control event using the provided parameters. | |
registerControlEvent(*GLOBAL_CONTROL_EVENT_BASE,eventCode,eventModifier,eventParameter,extraFlag); | |
return; | |
} | |
// Processes an incoming sensor/MIDI message from a buffer, validates its checksum, extracts a | |
// payload, and dispatches processing based on command type and sub-command. | |
void processSensorMidiMessage(undefined4 midiOutput,int messageBuffer,uint messageLength) | |
{ | |
byte computedChecksum; | |
uint checksumIndex; | |
uint payloadValue; | |
uint payloadLength; | |
undefined4 controlParam1; | |
undefined4 controlParam2; | |
undefined4 controlParam3; | |
undefined4 controlParam4; | |
undefined4 controlParam5; | |
undefined4 controlParam6; | |
char commandType; | |
undefined1 subCommand; | |
// The message must be at least 3 bytes long. | |
if (messageLength < 3) { | |
return; | |
} | |
// Check that the second byte equals the signature 'O' | |
if (*(char *)(messageBuffer + 1) != 'O') { | |
return; | |
} | |
// Read command type (third byte) and sub-command (fourth byte) | |
commandType = *(char *)(messageBuffer + 2); | |
subCommand = *(undefined1 *)(messageBuffer + 3); | |
// Read payload length from sixth byte. | |
payloadLength = (uint)*(byte *)(messageBuffer + 5); | |
// Verify that the total message length is sufficient to include the payload and | |
// checksum. | |
if ((int)messageLength <= (int)(payloadLength + 6)) { | |
return; | |
} | |
computedChecksum = 0; | |
// Compute checksum over bytes 1 .. (payloadLength+5 - 1) | |
for (checksumIndex = 1; (int)checksumIndex < (int)((payloadLength + 7 & 0xff) - 1); | |
checksumIndex = checksumIndex + 1 & 0xffff) { | |
computedChecksum = computedChecksum + *(char *)(messageBuffer + checksumIndex) & 0x7f; | |
} | |
// If the computed checksum does not match the transmitted checksum, abort. | |
if (computedChecksum != *(byte *)(messageBuffer + (payloadLength + 6 & 0xff))) { | |
return; | |
} | |
// Assemble a multi-byte value from the payload (each payload byte contributes 7 | |
// bits). | |
payloadValue = 0; | |
for (checksumIndex = 0; checksumIndex < payloadLength; checksumIndex = checksumIndex + 1 & 0xff) { | |
payloadValue = payloadValue | | |
(*(byte *)(messageBuffer + checksumIndex + 6) & 0x7f) << | |
(((payloadLength - 1) - checksumIndex) * 7 & 0xff); | |
} | |
switch(commandType) { | |
case '\x01': | |
// Depending on the command modifier (byte at offset 4), call one of two | |
// routines. | |
if (*(char *)(messageBuffer + 4) == '\0') { | |
processSensorExpressionMode0(midiOutput,subCommand,payloadValue); | |
} | |
else if (*(char *)(messageBuffer + 4) == '\x01') { | |
processSensorExpressionMode1(payloadValue,midiOutput,subCommand); | |
} | |
// Extract control parameters based on the sub-command. | |
extractSensorControlParameters(&controlParam1,subCommand); | |
if ((char)controlParam4 == -1) { | |
return; | |
} | |
applySensorControlParameters | |
(midiOutput,controlParam1,controlParam2,controlParam3,controlParam4,controlParam5, | |
controlParam6); | |
break; | |
case '\x02': | |
// For command type 2, simply extract control parameters. | |
extractSensorControlParameters(&controlParam1,subCommand); | |
if ((char)controlParam4 == -1) { | |
return; | |
} | |
applySensorControlParameters | |
(midiOutput,controlParam1,controlParam2,controlParam3,controlParam4,controlParam5, | |
controlParam6); | |
break; | |
case '\x03': | |
// For command type 3, call a reset routine. | |
resetSensorSubsystem(); | |
goto transmit_label; | |
case '\a': | |
// For command type 7, notify a sensor event. | |
notifySensorEvent(midiOutput,8,0,0,0); | |
break; | |
case '\t': | |
// For command type 9, update sensor sub-command processing. | |
processSensorSubcommand(subCommand); | |
break; | |
case '\n': | |
// For command type 10, handle an alternate sensor message. | |
handleAlternateSensorMessage(midiOutput); | |
} | |
if (commandType == '\x04') { | |
// For command type 4, process a special sensor event. | |
processSpecialSensorEvent(*GLOBAL_SYSTEM_STATUS_PTR); | |
} | |
transmit_label: | |
// In all cases, transmit a control message. | |
transmitControlMessage(midiOutput,0x28,0,1,1); | |
return; | |
} | |
// Assembles a sensor MIDI message by copying a header, appending sensor data, appending a trailer, | |
// then processes the assembled message and resets the assembly flag. | |
void assembleSensorMidiMessage(undefined4 midiOutput,int sensorDataBuffer,uint dataLength) | |
{ | |
int bytesAppended; | |
uint byteIndex; | |
int currentBufferOffset; | |
undefined4 headerField0; | |
undefined4 headerField1; | |
undefined4 headerField2; | |
undefined4 headerField3; | |
undefined4 headerField4; | |
undefined4 headerField5; | |
undefined1 headerField6; | |
// Copy header from global header table (GLOBAL_MIDI_MESSAGE_HEADER) | |
headerField0 = *GLOBAL_MIDI_MESSAGE_HEADER; | |
headerField1 = GLOBAL_MIDI_MESSAGE_HEADER[1]; | |
headerField2 = GLOBAL_MIDI_MESSAGE_HEADER[2]; | |
headerField3 = GLOBAL_MIDI_MESSAGE_HEADER[3]; | |
headerField4 = GLOBAL_MIDI_MESSAGE_HEADER[4]; | |
headerField5 = GLOBAL_MIDI_MESSAGE_HEADER[5]; | |
headerField6 = (undefined1)GLOBAL_MIDI_MESSAGE_HEADER[6]; | |
currentBufferOffset = 0x18; | |
// Append each byte of sensor data to the header buffer using appendToBuffer. | |
for (byteIndex = 0; byteIndex < dataLength; byteIndex = byteIndex + 1 & 0xffff) { | |
bytesAppended = | |
appendToBuffer((int)&headerField0 + currentBufferOffset,0x200 - currentBufferOffset, | |
GLOBAL_MIDI_MESSAGE_MIDDLE,*(undefined1 *)(sensorDataBuffer + byteIndex)); | |
currentBufferOffset = currentBufferOffset + bytesAppended; | |
} | |
// Append the trailer from a global trailer value. | |
appendToBuffer((int)&headerField0 + currentBufferOffset,0x200 - currentBufferOffset, | |
GLOBAL_MIDI_MESSAGE_TRAILER); | |
// Process the assembled sensor MIDI message. | |
processSensorMidiMessage(midiOutput,sensorDataBuffer,dataLength); | |
// Reset a global flag indicating message assembly is complete. | |
*GLOBAL_MIDI_MESSAGE_FLAG = 0; | |
return; | |
} | |
// Triggers a MIDI effect by sending an additional MIDI command and updating effect status. | |
void triggerMidiEffect(undefined4 midiOutput,undefined4 effectParam,undefined1 param_3) | |
{ | |
sendAdditionalMidiCommand(midiOutput,0x89,(char)effectParam,param_3); | |
updateMidiEffectStatus(*GLOBAL_MIDI_EFFECT_DATA,effectParam); | |
return; | |
} | |
// Checks device and control event status, processes pending MIDI messages, and triggers MIDI | |
// effects based on control event timing. | |
void updateSensorMidiProcessing(undefined4 midiOutput) | |
{ | |
int currentTime; | |
int controlEventTimestamp; | |
byte eventIndex; | |
currentTime = isControlEventActive(*GLOBAL_CONTROL_EVENT_DATA); | |
if (currentTime == 0) { | |
currentTime = getCurrentTime(); | |
// If device status is not "transmit-ready" (3) then reset sensor subsystem. | |
if (*(char *)(GLOBAL_DEVICE_STATUS + 0x29c) != '\x03') { | |
resetSensorSubsystem(GLOBAL_SENSOR_RESET_PARAM); | |
updateMidiDeviceStatus(midiOutput); | |
} | |
// Process pending MIDI messages if the MIDI queue pointers match. | |
if (*GLOBAL_MIDI_QUEUE_HEAD == *GLOBAL_MIDI_QUEUE_TAIL) { | |
processPendingMidiMessage(midiOutput); | |
} | |
// If a MIDI message has been assembled, process it. | |
if (*GLOBAL_MIDI_ASSEMBLY_FLAG != '\0') { | |
assembleSensorMidiMessage(midiOutput,DAT_08008e60,*DAT_08008e5c); | |
*GLOBAL_MIDI_ASSEMBLY_FLAG = '\0'; | |
} | |
updateMidiChannel(midiOutput); | |
// Loop through control event indices. | |
for (eventIndex = 0; (eventIndex & 0x80) == 0; eventIndex = eventIndex + 1) { | |
controlEventTimestamp = checkControlEventStatus(*GLOBAL_CONTROL_EVENT_DATA,eventIndex); | |
if ((controlEventTimestamp != 0) && | |
(controlEventTimestamp = getControlEventTimestamp(*GLOBAL_CONTROL_EVENT_DATA,eventIndex), | |
100 < (uint)(currentTime - controlEventTimestamp))) { | |
triggerMidiEffect(midiOutput,eventIndex,0x40); | |
updateMidiEffectStatus(*GLOBAL_CONTROL_EVENT_DATA,eventIndex); | |
} | |
} | |
} | |
return; | |
} | |
void applySensorExpressionOutput | |
(float sensorExpr,undefined4 midiCmdBuffer,undefined4 param_3,uint outputType, | |
undefined4 rawExprParam,undefined4 unusedParam2,float exprScalingFactor) | |
{ | |
undefined1 sensorOutputFlag; | |
int tempInt; | |
uint in_fpscr; | |
undefined4 floatFactor; | |
float tempFloat1; | |
uint vectorResult2; | |
uint vectorResult; | |
float tempFloat2; | |
undefined1 stackControlFlag; | |
byte noteValueByte; | |
undefined1 midiBuffer [100]; | |
undefined1 controlDataBuffer [12]; | |
uint currentTimeThreshold; | |
undefined4 *controlDataPtr; | |
byte currentSensorFlag; | |
byte *midiNoteBufferPtr; | |
ushort outputDelay; | |
// Mask outputType to 8 bits. | |
outputType = outputType & 0xff; | |
if (outputType != 0) { | |
if (outputType == 4) { | |
sensorOutputFlag = lookupSensorFlag(SENSOR_FLAG_OUTPUT_TYPE4); | |
} | |
else { | |
sensorOutputFlag = 0x26; | |
} | |
if (outputType == 1) { | |
sensorOutputFlag = lookupSensorFlag(SENSOR_FLAG_OUTPUT_TYPE1); | |
} | |
if (outputType == 2) { | |
floatFactor = convertFixedPointToFloat(SENSOR_EXPR_BASE_FP); | |
tempFloat1 = (float)normalizeSensorExpressionValue(rawExprParam,floatFactor); | |
vectorResult = VectorFloatToUnsigned(tempFloat1 * SENSOR_EXPR_SCALING,3); | |
tempFloat2 = (float)VectorSignedToFloat(vectorResult & 0xff,(byte)(in_fpscr >> 0x15) & 3); | |
tempFloat1 = (float)convertFixedPointToFloat(SENSOR_EXPR_FACTOR_FP); | |
midiNoteBufferPtr = GLOBAL_MIDI_NOTE_BUFFER; | |
vectorResult = VectorFloatToUnsigned(tempFloat2 * exprScalingFactor * tempFloat1,3); | |
noteValueByte = (byte)vectorResult; | |
*GLOBAL_MIDI_NOTE_BUFFER = noteValueByte; | |
if ((vectorResult & 0x80) != 0) { | |
*midiNoteBufferPtr = 0x7f; | |
} | |
tempInt = lookupSensorFlag(SENSOR_FLAG_COND1); | |
if ((tempInt != 0) && | |
(currentSensorFlag = *GLOBAL_MIDI_NOTE_BUFFER, | |
vectorResult = lookupSensorFlag(SENSOR_FLAG_COMPARISON), vectorResult < currentSensorFlag)) | |
{ | |
sensorOutputFlag = lookupSensorFlag(SENSOR_FLAG_ALTERNATE); | |
} | |
} | |
vectorResult2 = VectorFloatToUnsigned(sensorExpr * SENSOR_EXPR_SCALING,3); | |
vectorResult = vectorResult2 & 0xff; | |
if ((vectorResult2 & 0x80) != 0) { | |
vectorResult = 0x7f; | |
} | |
prepareControlDataBuffer(controlDataBuffer,*GLOBAL_CONTROL_DATA,sensorOutputFlag); | |
vectorResult2 = getCurrentTime(); | |
controlDataPtr = GLOBAL_CONTROL_DATA; | |
if (vectorResult2 < currentTimeThreshold) { | |
if (*GLOBAL_CONTROL_FLAG != '\0') { | |
updateMidiBuffer(midiBuffer,GLOBAL_CONTROL_PARAM,sensorOutputFlag); | |
} | |
} | |
else { | |
outputDelay = *(ushort *)(GLOBAL_OUTPUT_DELAY_ARRAY + outputType * 2); | |
floatFactor = *GLOBAL_CONTROL_DATA; | |
tempInt = getCurrentTime(); | |
scheduleControlEvent(floatFactor,sensorOutputFlag,tempInt + (uint)outputDelay); | |
tempInt = checkControlEventStatus(*controlDataPtr,sensorOutputFlag); | |
if (((tempInt != 0) && | |
(triggerMidiEffect(midiCmdBuffer,sensorOutputFlag,0x40), outputType == 5)) && | |
(tempInt = checkControlEventStatus(*controlDataPtr,0x28), tempInt != 0)) { | |
triggerMidiEffect(midiCmdBuffer,0x28,0x40); | |
} | |
tempInt = lookupSensorFlag(SENSOR_FLAG_EXTRA); | |
if ((tempInt != 0) && (outputType == 2)) { | |
sendAdditionalMidiCommand | |
(midiCmdBuffer,*GLOBAL_MIDI_PARAM_A,*GLOBAL_MIDI_PARAM_B,*GLOBAL_MIDI_NOTE_BUFFER) | |
; | |
} | |
transmitControlMessage | |
(midiCmdBuffer,sensorOutputFlag,vectorResult,stackControlFlag,outputType); | |
if ((outputType == 5) && (tempInt = lookupSensorFlag(SENSOR_FLAG_ALT_COND), tempInt == 0)) { | |
sensorOutputFlag = lookupSensorFlag(SENSOR_FLAG_OUTPUT_TYPE1); | |
transmitControlMessage(midiCmdBuffer,sensorOutputFlag,vectorResult,stackControlFlag,5); | |
} | |
else if (outputType == 5) { | |
sensorOutputFlag = lookupSensorFlag(SENSOR_FLAG_ALT_OUTPUT); | |
transmitControlMessage(midiCmdBuffer,sensorOutputFlag,vectorResult,stackControlFlag,5); | |
} | |
} | |
} | |
return; | |
} | |
void sendSysExMessage(undefined4 sysExParam,undefined4 dataByte1,undefined4 dataByte2, | |
undefined4 dataByte3) | |
{ | |
handleSysExMessage(DAT_080090a4,sysExParam,dataByte1,dataByte2,dataByte3); | |
return; | |
} | |
// Iterates over a table of SysEx message entries and sends a SysEx message for each entry whose | |
// nibble value (low 4 bits) is in the range [4,7]. | |
void processSysExMessageTable(int messageTableBase,uint tableSize) | |
{ | |
uint nibbleValue; | |
int entryOffset; | |
uint index; | |
if ((tableSize & 3) == 0) { | |
for (index = 0; index < tableSize >> 2; index = index + 1 & 0xffff) { | |
entryOffset = messageTableBase + index * 4; | |
nibbleValue = *(byte *)(messageTableBase + index * 4) & 0xf; | |
if (nibbleValue - 4 < 4) { | |
sendSysExMessage(nibbleValue,*(undefined1 *)(entryOffset + 1), | |
*(undefined1 *)(entryOffset + 2),*(undefined1 *)(entryOffset + 3)); | |
} | |
} | |
return; | |
} | |
return; | |
} | |
// Performs data synchronization, writes a hardware mask, then halts in an infinite loop. | |
void lockSystemAndHalt(void) | |
{ | |
DataSynchronizationBarrier(0xf); | |
*(uint *)(GLOBAL_HARDWARE_REGISTER + 0xc) = | |
GLOBAL_HARDWARE_MASK | *(uint *)(GLOBAL_HARDWARE_REGISTER + 0xc) & 0x700; | |
DataSynchronizationBarrier(0xf); | |
do { | |
// WARNING: Do nothing block with infinite loop | |
// Infinite loop: system halted. | |
} while( true ); | |
} | |
// Uses memory barriers and checks the control flag; if an update is pending, it refreshes global | |
// control data. | |
undefined4 refreshControlData(void) | |
{ | |
int status; | |
DataMemoryBarrier(0x1b); | |
if (((*GLOBAL_CONTROL_FLAG & 1) == 0) && (status = FUN_0800e8c0(GLOBAL_CONTROL_FLAG), status != 0) | |
) { | |
FUN_080098a8(GLOBAL_CONTROL_DATA); | |
FUN_0800e8d8(GLOBAL_CONTROL_FLAG); | |
} | |
return GLOBAL_CONTROL_DATA; | |
} | |
// Calls refreshControlData and then commits the updated control data. | |
void commitControlDataUpdate(void) | |
{ | |
undefined4 updatedData; | |
updatedData = refreshControlData(); | |
*GLOBAL_COMMIT_LOCATION = updatedData; | |
return; | |
} | |
// Sets the sensor control flag byte at a fixed offset within the sensor structure. | |
void setSensorControlFlag(int sensorDataPtr,undefined1 flagValue) | |
{ | |
*(undefined1 *)(sensorDataPtr + 0xcde) = flagValue; | |
return; | |
} | |
// Retrieves the sensor control flag byte from the sensor structure. | |
undefined1 getSensorControlFlag(int sensorDataPtr) | |
{ | |
return *(undefined1 *)(sensorDataPtr + 0xcde); | |
} | |
// Returns a pointer (offset) to the sensor data buffer. | |
int getSensorDataBufferBase(int sensorBasePtr) | |
{ | |
return sensorBasePtr + 0xa98; | |
} | |
// Increments the sensor message counter stored at a fixed offset in the sensor structure. | |
void incrementSensorMessageCounter(int sensorDataPtr) | |
{ | |
*(int *)(sensorDataPtr + 0xce0) = *(int *)(sensorDataPtr + 0xce0) + 1; | |
if (*(int *)(sensorDataPtr + 0xce0) == -1) { | |
*(undefined4 *)(sensorDataPtr + 0xce0) = 0; | |
} | |
return; | |
} | |
// Returns the current sensor message counter. | |
undefined4 getSensorMessageCounter(int sensorDataPtr) | |
{ | |
return *(undefined4 *)(sensorDataPtr + 0xce0); | |
} | |
// Resets and reinitializes various fields in the sensor data structure and its sub-buffers. | |
int initializeSensorDataStructures(int sensorBasePtr) | |
{ | |
undefined4 tempVal; | |
int i; | |
int ii; | |
int recordIndex; | |
*(undefined1 *)(sensorBasePtr + 0xca8) = 0; | |
*(undefined1 *)(sensorBasePtr + 0xca9) = 0; | |
// Initialize 4 sensor sub-records. | |
for (recordIndex = 0; recordIndex < 4; recordIndex = recordIndex + 1) { | |
i = sensorBasePtr + recordIndex * 0x1c; | |
*(undefined4 *)(i + 0x9ec) = 0; | |
*(undefined4 *)(i + 0x9f0) = 0; | |
*(undefined4 *)(i + 0x9f4) = 0; | |
*(undefined4 *)(i + 0x9f8) = 0; | |
*(undefined4 *)(i + 0x9fc) = 0; | |
*(undefined4 *)(i + 0xa00) = 0; | |
*(undefined4 *)(i + 0xa04) = 0; | |
*(undefined4 *)(i + 0x9f8) = 0; | |
tempVal = thunk_FUN_0800e8de(0x1000); | |
*(undefined4 *)(i + 0x9fc) = tempVal; | |
*(undefined1 *)(i + 0xa00) = 0; | |
*(undefined1 *)(i + 0xa01) = 0; | |
*(undefined4 *)(i + 0x9f4) = 0; | |
*(undefined4 *)(i + 0x9f0) = 0; | |
*(undefined4 *)(i + 0xa04) = 0; | |
} | |
// Initialize 0x80 sensor records. | |
for (recordIndex = 0; recordIndex < 0x80; recordIndex = recordIndex + 1) { | |
i = sensorBasePtr + recordIndex * 0x14; | |
*(undefined4 *)(sensorBasePtr + recordIndex * 0x14) = 0; | |
*(undefined4 *)(i + 4) = 0; | |
*(undefined4 *)(i + 8) = 0; | |
*(undefined4 *)(i + 0xc) = 0; | |
*(undefined4 *)(i + 0x10) = 0; | |
} | |
*(undefined4 *)(sensorBasePtr + 0xcb8) = 0; | |
*(undefined4 *)(sensorBasePtr + 0xcbc) = 0; | |
*(undefined4 *)(sensorBasePtr + 0xcd8) = 0; | |
*(undefined1 *)(sensorBasePtr + 0xcdc) = 0; | |
*(undefined4 *)(sensorBasePtr + 0xcd4) = 0; | |
*(undefined1 *)(sensorBasePtr + 0xcdd) = 0; | |
*(undefined4 *)(sensorBasePtr + 0xccc) = 0; | |
*(undefined4 *)(sensorBasePtr + 0xcc0) = 0; | |
*(undefined4 *)(sensorBasePtr + 0xcc4) = 0; | |
*(undefined4 *)(sensorBasePtr + 0xcc8) = 0; | |
*(undefined4 *)(sensorBasePtr + 0xce0) = 0; | |
*(undefined1 *)(sensorBasePtr + 0xcab) = 0; | |
*(undefined1 *)(sensorBasePtr + 0xcaa) = 0; | |
*(undefined1 *)(sensorBasePtr + 0xcde) = 0; | |
// Initialize 6 additional sensor sub-structures. | |
for (recordIndex = 0; recordIndex < 6; recordIndex = recordIndex + 1) { | |
i = sensorBasePtr + recordIndex * 0x38; | |
FUN_08012484((undefined4 *)(i + 0xa98),0,0x38); | |
tempVal = getSensorMessageCounter(sensorBasePtr); | |
*(undefined4 *)(i + 0xa9c) = tempVal; | |
*(undefined1 *)(i + 0xaa0) = 0; | |
*(undefined4 *)(i + 0xa98) = 0; | |
tempVal = getCurrentTime(); | |
*(undefined4 *)(i + 0xaa4) = tempVal; | |
*(undefined1 *)(i + 0xabc) = 0; | |
*(undefined4 *)(i + 0xac0) = 0; | |
*(undefined1 *)(i + 0xac4) = 0; | |
*(undefined4 *)(i + 0xab8) = 0; | |
*(undefined4 *)(i + 0xac8) = 0; | |
*(undefined4 *)(i + 0xacc) = 0; | |
} | |
// Initialize 1 additional control structure. | |
for (recordIndex = 0; recordIndex < 1; recordIndex = recordIndex + 1) { | |
i = sensorBasePtr + recordIndex * 0x3c; | |
FUN_08012484(i + 0xa5c,0,0x3c); | |
*(undefined1 *)(i + 0xa79) = 0; | |
*(undefined1 *)(i + 0xa78) = 0; | |
tempVal = getSensorMessageCounter(sensorBasePtr); | |
*(undefined4 *)(i + 0xa7c) = tempVal; | |
tempVal = thunk_FUN_0800e8de(0x180); | |
*(undefined4 *)(i + 0xa8c) = tempVal; | |
tempVal = thunk_FUN_0800e8de(0x44); | |
*(undefined4 *)(i + 0xa90) = tempVal; | |
tempVal = thunk_FUN_0800e8de(0x48); | |
*(undefined4 *)(i + 0xa94) = tempVal; | |
for (i = 0; i < 4; i = i + 1) { | |
tempVal = thunk_FUN_0800e8de(0x100); | |
ii = recordIndex * 0xf + i; | |
*(undefined4 *)(sensorBasePtr + (ii + 0x296) * 4 + 8) = tempVal; | |
tempVal = thunk_FUN_0800e8de(0x84); | |
*(undefined4 *)(sensorBasePtr + (ii + 0x29e) * 4 + 8) = tempVal; | |
} | |
} | |
return sensorBasePtr; | |
} | |
// Uses memory barriers and conditionally updates the global system status. | |
undefined4 updateGlobalSystemStatus(void) | |
{ | |
int status; | |
DataMemoryBarrier(0x1b); | |
if (((*GLOBAL_SYSTEM_STATUS_FLAG & 1) == 0) && | |
(status = FUN_0800e8c0(GLOBAL_SYSTEM_STATUS_FLAG), status != 0)) { | |
initializeSensorDataStructures(GLOBAL_SYSTEM_STATUS_DATA); | |
FUN_0800e8d8(GLOBAL_SYSTEM_STATUS_FLAG); | |
} | |
return GLOBAL_SYSTEM_STATUS_DATA; | |
} | |
void updateMidiEffectStatus(int param_1,int param_2) | |
{ | |
*(undefined1 *)(param_1 + param_2 * 0x14) = 0; | |
return; | |
} | |
undefined1 checkControlEventStatus(int param_1,int param_2) | |
{ | |
return *(undefined1 *)(param_1 + param_2 * 0x14); | |
} | |
// Returns the timestamp from a control event record for a given index. | |
undefined4 getControlEventTimestamp(int controlEventBase,int eventIndex) | |
{ | |
return *(undefined4 *)(controlEventBase + eventIndex * 0x14 + 4); | |
} | |
// Maps an input control event code to a standardized output code. | |
undefined4 mapControlEventCode(undefined4 param_1,int eventCode) | |
{ | |
if (eventCode == 1) { | |
return 1; | |
} | |
if (eventCode != 3) { | |
return 2; | |
} | |
return 0; | |
} | |
// Registers a control event by marking it active, storing the current time, and saving event | |
// parameters. | |
void registerControlEvent | |
(int controlEventBase,int eventIndex,undefined1 eventData,undefined4 eventCode, | |
undefined1 extraParam) | |
{ | |
undefined1 standardizedOutputCode; | |
undefined4 time; | |
int eventRecordAddr; | |
eventRecordAddr = controlEventBase + eventIndex * 0x14; | |
*(undefined1 *)(controlEventBase + eventIndex * 0x14) = 1; | |
time = getCurrentTime(); | |
*(undefined4 *)(eventRecordAddr + 4) = time; | |
*(undefined1 *)(eventRecordAddr + 8) = eventData; | |
*(char *)(eventRecordAddr + 0x10) = (char)eventCode; | |
standardizedOutputCode = mapControlEventCode(controlEventBase,eventCode); | |
*(undefined1 *)(eventRecordAddr + 0x11) = standardizedOutputCode; | |
*(undefined1 *)(eventRecordAddr + 0x12) = extraParam; | |
return; | |
} | |
// Computes the address of a control event record based on an index. | |
int getControlEventBufferAddress(int controlBase,int eventIndex) | |
{ | |
return controlBase + eventIndex * 0x3c + 0xa5c; | |
} | |
// Scans control event records for an available (free) index; returns 0xff if none available. | |
uint findNextAvailableControlEventIndex(int controlBase) | |
{ | |
uint index; | |
index = 0; | |
while( true ) { | |
if (0 < (int)index) { | |
index = 0; | |
while( true ) { | |
if (0 < (int)index) { | |
return 0xff; | |
} | |
if (*(char *)(controlBase + index * 0x3c + 0xa79) == '\0') break; | |
index = index + 1; | |
} | |
return index & 0xff; | |
} | |
if ((*(char *)(controlBase + index * 0x3c + 0xa78) != '\0') && | |
(*(char *)(controlBase + index * 0x3c + 0xa79) == '\0')) break; | |
index = index + 1; | |
} | |
return index & 0xff; | |
} | |
void FUN_08009440(int param_1,int param_2) | |
{ | |
ushort uVar1; | |
int iVar2; | |
int iVar3; | |
iVar2 = 0; | |
while( true ) { | |
if (0 < iVar2) { | |
return; | |
} | |
if (*(char *)(param_1 + iVar2 * 0x3c + 0xa78) != '\0') break; | |
iVar2 = iVar2 + 1; | |
} | |
do { | |
for (iVar3 = 0; iVar3 < 4; iVar3 = iVar3 + 1) { | |
*(undefined4 *) | |
(*(int *)(param_1 + (iVar2 * 0xf + iVar3 + 0x296) * 4 + 8) + | |
(uint)*(ushort *)(param_1 + iVar2 * 0x3c + 0xa70) * 4) = *(undefined4 *)(param_2 + iVar3 * 4) | |
; | |
} | |
iVar3 = param_1 + iVar2 * 0x3c; | |
uVar1 = *(short *)(iVar3 + 0xa70) + 1; | |
*(ushort *)(iVar3 + 0xa70) = uVar1; | |
if (0x40 < uVar1) { | |
*(undefined2 *)(iVar3 + 0xa70) = 0; | |
*(undefined1 *)(iVar3 + 0xa78) = 0; | |
*(undefined1 *)(iVar3 + 0xa79) = 1; | |
} | |
do { | |
iVar2 = iVar2 + 1; | |
if (0 < iVar2) { | |
return; | |
} | |
} while (*(char *)(param_1 + iVar2 * 0x3c + 0xa78) == '\0'); | |
} while( true ); | |
} | |
undefined4 | |
FUN_080094e0(undefined4 param_1,int param_2,undefined4 param_3,int param_4,undefined4 param_5) | |
{ | |
undefined4 uVar1; | |
uint uVar2; | |
*(undefined4 *)(param_2 + *(int *)(param_2 + 0xcc0) * 0x38 + 0xa98) = param_1; | |
*(undefined4 *)(param_2 + *(int *)(param_2 + 0xcc0) * 0x38 + 0xa9c) = param_3; | |
*(undefined1 *)(param_2 + *(int *)(param_2 + 0xcc0) * 0x38 + 0xaa0) = | |
*(undefined1 *)(param_4 + 0x1e); | |
uVar1 = getCurrentTime(); | |
*(undefined4 *)(param_2 + *(int *)(param_2 + 0xcc0) * 0x38 + 0xaa4) = uVar1; | |
*(undefined2 *)(param_2 + *(int *)(param_2 + 0xcc0) * 0x38 + 0xaac) = 0; | |
*(undefined2 *)(param_2 + *(int *)(param_2 + 0xcc0) * 0x38 + 0xaae) = 0; | |
*(undefined2 *)(param_2 + *(int *)(param_2 + 0xcc0) * 0x38 + 0xab0) = 0; | |
*(undefined4 *)(param_2 + *(int *)(param_2 + 0xcc0) * 0x38 + 0xaa8) = 0; | |
*(undefined4 *)(param_2 + *(int *)(param_2 + 0xcc0) * 0x38 + 0xab4) = 0; | |
*(int *)(param_2 + *(int *)(param_2 + 0xcc0) * 0x38 + 0xab8) = param_4; | |
*(undefined1 *)(param_2 + *(int *)(param_2 + 0xcc0) * 0x38 + 0xabc) = 0; | |
*(undefined4 *)(param_2 + *(int *)(param_2 + 0xcc0) * 0x38 + 0xac0) = 0; | |
*(undefined1 *)(param_2 + *(int *)(param_2 + 0xcc0) * 0x38 + 0xac4) = 0; | |
*(undefined4 *)(param_2 + *(int *)(param_2 + 0xcc0) * 0x38 + 0xac8) = 0; | |
*(undefined4 *)(param_2 + *(int *)(param_2 + 0xcc0) * 0x38 + 0xacc) = 0; | |
*(int *)(param_2 + 0xcc0) = *(int *)(param_2 + 0xcc0) + 1; | |
uVar2 = *(uint *)(param_2 + 0xcc0); | |
if (5 < uVar2) { | |
*(undefined4 *)(param_2 + 0xcc0) = 0; | |
} | |
setSensorControlFlag(param_2,1,0,uVar2,param_5); | |
return 1; | |
} | |
undefined4 * readSensorChannel(undefined4 *param_1,undefined4 param_2,int param_3,int param_4) | |
{ | |
undefined4 local_10; | |
undefined4 local_c; | |
local_c = 0; | |
local_10 = 0; | |
FUN_0800d1e4(*(undefined4 *)(param_3 + param_4 * 4 + 4),0x40,&local_c,&local_10); | |
*param_1 = local_c; | |
param_1[1] = local_10; | |
return param_1; | |
} | |
float getBaseSensorReading(undefined4 param_1,int param_2,int param_3) | |
{ | |
int iVar1; | |
float fVar2; | |
fVar2 = DAT_08009668; | |
for (iVar1 = 0; iVar1 < 0x40; iVar1 = iVar1 + 1) { | |
fVar2 = fVar2 + *(float *)(*(int *)(param_2 + param_3 * 4 + 4) + iVar1 * 4); | |
} | |
return fVar2 * DAT_0800966c; | |
} | |
void FUN_08009670(int param_1,undefined1 param_2) | |
{ | |
*(undefined1 *)(param_1 + 0xcdc) = param_2; | |
return; | |
} | |
undefined1 FUN_08009676(int param_1) | |
{ | |
return *(undefined1 *)(param_1 + 0xcdc); | |
} | |
void applySensorCalibrationCorrection | |
(int sensorCalibPtr,undefined4 correction0,undefined4 correction1, | |
undefined4 correction2,undefined4 correction3,undefined4 correction4, | |
undefined4 correction5) | |
{ | |
*(undefined4 *)(sensorCalibPtr + 0xc90) = correction0; | |
*(undefined4 *)(sensorCalibPtr + 0xc94) = correction1; | |
*(undefined4 *)(sensorCalibPtr + 0xc98) = correction2; | |
*(undefined4 *)(sensorCalibPtr + 0xc9c) = correction3; | |
*(undefined4 *)(sensorCalibPtr + 0xca0) = correction4; | |
*(undefined4 *)(sensorCalibPtr + 0xca4) = correction5; | |
return; | |
} | |
undefined4 * loadCalibrationValues(undefined4 *param_1,int param_2) | |
{ | |
undefined4 uVar1; | |
undefined4 uVar2; | |
undefined4 uVar3; | |
uVar1 = *(undefined4 *)(param_2 + 0xc94); | |
uVar2 = *(undefined4 *)(param_2 + 0xc98); | |
uVar3 = *(undefined4 *)(param_2 + 0xc9c); | |
*param_1 = *(undefined4 *)(param_2 + 0xc90); | |
param_1[1] = uVar1; | |
param_1[2] = uVar2; | |
param_1[3] = uVar3; | |
uVar1 = *(undefined4 *)(param_2 + 0xca4); | |
param_1[4] = *(undefined4 *)(param_2 + 0xca0); | |
param_1[5] = uVar1; | |
return param_1; | |
} | |
void scheduleControlEvent(int param_1,int param_2,undefined4 param_3) | |
{ | |
*(undefined4 *)(param_1 + param_2 * 0x14 + 0xc) = param_3; | |
return; | |
} | |
undefined4 * prepareControlDataBuffer(undefined4 *param_1,int param_2,int param_3) | |
{ | |
undefined4 uVar1; | |
undefined4 uVar2; | |
undefined4 uVar3; | |
undefined4 *puVar4; | |
puVar4 = (undefined4 *)(param_2 + param_3 * 0x14); | |
uVar1 = puVar4[1]; | |
uVar2 = puVar4[2]; | |
uVar3 = puVar4[3]; | |
*param_1 = *puVar4; | |
param_1[1] = uVar1; | |
param_1[2] = uVar2; | |
param_1[3] = uVar3; | |
param_1[4] = puVar4[4]; | |
return param_1; | |
} | |
// WARNING: Globals starting with '_' overlap smaller symbols at the same address | |
void processSpecialSensorEvent(void) | |
{ | |
code *pcVar1; | |
_DAT_40023840 = _DAT_40023840 | 0x10000000; | |
ADC_StartConversion(); | |
_DAT_42470e3c = 1; | |
_DAT_40002854 = 0xdeadbeef; | |
FUN_08005782(DAT_08009744); | |
FUN_08002f6c(300); | |
disableIRQinterrupts(); | |
lockSystemAndHalt(); | |
software_bkpt(0xef); | |
// WARNING: Does not return | |
pcVar1 = (code *)software_udf(0xad,0x8009742); | |
(*pcVar1)(); | |
} | |
undefined1 isControlEventActive(int param_1) | |
{ | |
return *(undefined1 *)(param_1 + 0xcac); | |
} | |
void FUN_08009756(void) | |
{ | |
return; | |
} | |
float computeSensorExpressionValue | |
(undefined4 param_1,undefined4 sensorRecord,undefined4 targetCurveId) | |
{ | |
int sensorCurveIndex; | |
undefined4 sensorChannelConfig; | |
float baseSensorReading; | |
float coeffB; | |
float coeffC; | |
float scaledReading; | |
float channelMidReading [2]; | |
undefined4 channelLowRaw [2]; | |
float channelHighReading [2]; | |
// Get the sensor curve index for the target curve. | |
sensorCurveIndex = computeSensorCurveIndex(GLOBAL_SENSOR_CURVE_TABLE,targetCurveId); | |
// Get the sensor channel configuration from a global pointer. | |
sensorChannelConfig = *GLOBAL_SENSOR_CHANNEL_CONFIG; | |
// Read sensor channel values: | |
// Channel index 2 (assumed "high" reading) | |
readSensorChannel(channelHighReading,sensorChannelConfig,sensorRecord,2); | |
// Channel index 0 (assumed "low" reading) | |
readSensorChannel(channelLowRaw,sensorChannelConfig,sensorRecord,0); | |
// Channel index 1 (assumed "mid" reading) | |
readSensorChannel(channelMidReading,sensorChannelConfig,sensorRecord,1); | |
// Get a base sensor reading (e.g. a primary measurement) from a helper | |
// function. | |
baseSensorReading = (float)getBaseSensorReading(sensorChannelConfig,sensorRecord,0); | |
// Scale the base reading by two global scaling factors. | |
scaledReading = baseSensorReading * SENSOR_EXPRESSION_SCALE1 * SENSOR_EXPRESSION_SCALE2; | |
// Get coefficients from global fixed‐point values converted to float. | |
baseSensorReading = (float)convertFixedPointToFloat(SENSOR_EXPR_COEFF_A); | |
coeffB = (float)convertFixedPointToFloat(SENSOR_EXPR_COEFF_B); | |
coeffC = (float)convertFixedPointToFloat(SENSOR_EXPR_COEFF_C); | |
// Combine the scaled reading with the low channel reading. | |
scaledReading = (float)combineSensorValues(scaledReading,channelLowRaw[0]); | |
// Compute expression value based on sensor curve index. | |
if ((sensorCurveIndex - 2U & 0xff) < 2) { | |
// For curve index 2 or 3: | |
baseSensorReading = channelHighReading[0] * baseSensorReading + coeffB * scaledReading; | |
if (sensorCurveIndex == 3) { | |
baseSensorReading = baseSensorReading * SENSOR_EXPR_MULTIPLIER; | |
} | |
} | |
else { | |
// For curve index 1: | |
if (sensorCurveIndex == 1) { | |
baseSensorReading = (channelMidReading[0] + scaledReading + channelHighReading[0]) * coeffC; | |
} | |
else { | |
// Default expression value. | |
baseSensorReading = SENSOR_EXPR_DEFAULT; | |
if ((sensorCurveIndex - 4U & 0xff) < 2) { | |
baseSensorReading = (channelHighReading[0] + channelMidReading[0] + scaledReading) * coeffC; | |
} | |
} | |
} | |
// Get a limit or reference value. | |
sensorChannelConfig = convertFixedPointToFloat(SENSOR_EXPR_LIMIT); | |
baseSensorReading = (float)normalizeSensorExpressionValue(baseSensorReading,sensorChannelConfig); | |
// Final adjustment: if the expression value is 1.0 (or less than 1.0) then, | |
// if it's negative, use the default expression value; otherwise, clamp to 1.0. | |
if (baseSensorReading == 1.0 || baseSensorReading < 1.0 != NAN(baseSensorReading)) { | |
if ((int)((uint)(baseSensorReading < 0.0) << 0x1f) < 0) { | |
baseSensorReading = SENSOR_EXPR_DEFAULT; | |
} | |
} | |
else { | |
baseSensorReading = 1.0; | |
} | |
return baseSensorReading; | |
} | |
int FUN_080098a8(int param_1) | |
{ | |
int iVar1; | |
iVar1 = FUN_0800d3f4(param_1 + 0x10,0x40); | |
if (iVar1 == 0) { | |
FUN_0800dd80(param_1 + 0x28,0x40,2,DAT_08009910,DAT_0800990c,0x40); | |
} | |
return param_1; | |
} | |
void FUN_0800991c(void) | |
{ | |
undefined4 *puVar1; | |
undefined4 uVar2; | |
puVar1 = DAT_08009944; | |
uVar2 = FUN_08005424(*DAT_08009944,0); | |
*DAT_08009948 = uVar2; | |
uVar2 = FUN_08005440(*puVar1,0); | |
*DAT_0800994c = uVar2; | |
uVar2 = FUN_08008600(); | |
*DAT_08009950 = uVar2; | |
return; | |
} | |
undefined4 FUN_08009954(undefined4 param_1) | |
{ | |
char cVar1; | |
cVar1 = FUN_0800548c(DAT_08009980,DAT_0800997c,0); | |
if (cVar1 != '\0') { | |
FUN_080037a2(DAT_08009988,DAT_08009984,0x32,0xffffffff); | |
} | |
return param_1; | |
} | |
// WARNING: Heritage AFTER dead removal. Example location: s1 : 0x08009c26 | |
// WARNING: Restarted to delay deadcode elimination for space: register | |
void FUN_08009990(void) | |
{ | |
byte bVar1; | |
int iVar2; | |
int iVar3; | |
int iVar4; | |
int iVar5; | |
undefined4 uVar6; | |
uint uVar7; | |
undefined4 uVar8; | |
undefined4 uVar9; | |
uint uVar10; | |
uint uVar11; | |
undefined4 *puVar12; | |
undefined4 *puVar13; | |
undefined4 uVar14; | |
float *pfVar15; | |
byte bVar16; | |
byte bVar17; | |
uint in_fpscr; | |
uint uVar18; | |
float extraout_s0; | |
undefined8 in_d0; | |
float fVar19; | |
float fVar20; | |
float fVar21; | |
float fVar22; | |
float fVar23; | |
float fVar24; | |
float fVar25; | |
undefined8 uVar26; | |
undefined8 uVar27; | |
float local_a8; | |
float local_a4 [25]; | |
uVar14 = *DAT_08009cc8; | |
iVar2 = getSensorDataBufferBase(uVar14); | |
puVar13 = DAT_08009ccc; | |
puVar12 = (undefined4 *)*DAT_08009cd0; | |
uVar6 = puVar12[1]; | |
uVar8 = puVar12[2]; | |
uVar9 = puVar12[3]; | |
*DAT_08009ccc = *puVar12; | |
puVar13[1] = uVar6; | |
puVar13[2] = uVar8; | |
puVar13[3] = uVar9; | |
uVar6 = puVar12[5]; | |
uVar8 = puVar12[6]; | |
puVar13[4] = puVar12[4]; | |
puVar13[5] = uVar6; | |
puVar13[6] = uVar8; | |
puVar13 = DAT_08009cd8; | |
puVar12 = (undefined4 *)*DAT_08009cd4; | |
uVar6 = puVar12[1]; | |
uVar8 = puVar12[2]; | |
uVar9 = puVar12[3]; | |
*DAT_08009cd8 = *puVar12; | |
puVar13[1] = uVar6; | |
puVar13[2] = uVar8; | |
puVar13[3] = uVar9; | |
uVar6 = puVar12[5]; | |
uVar8 = puVar12[6]; | |
puVar13[4] = puVar12[4]; | |
puVar13[5] = uVar6; | |
puVar13[6] = uVar8; | |
uVar6 = puVar12[8]; | |
uVar8 = puVar12[9]; | |
uVar9 = puVar12[10]; | |
puVar13[7] = puVar12[7]; | |
puVar13[8] = uVar6; | |
puVar13[9] = uVar8; | |
puVar13[10] = uVar9; | |
uVar6 = puVar12[0xc]; | |
uVar8 = puVar12[0xd]; | |
puVar13[0xb] = puVar12[0xb]; | |
puVar13[0xc] = uVar6; | |
puVar13[0xd] = uVar8; | |
iVar3 = lookupSensorFlag(DAT_08009cdc); | |
if ((iVar3 == 1) && (iVar3 = lookupSensorFlag(DAT_08009ce0), iVar3 == 4)) { | |
notifySensorEvent(*DAT_08009ce4,0x24,0,0); | |
} | |
uVar11 = 0; | |
do { | |
if (5 < uVar11) { | |
iVar3 = lookupSensorFlag(DAT_08009db4); | |
if ((iVar3 == 1) && (iVar3 = lookupSensorFlag(DAT_08009dd0), iVar3 == 4)) { | |
notifySensorEvent(*DAT_08009dd4,0x25,0,0); | |
} | |
*(undefined4 *)(DAT_08009db8 + 4) = DAT_08009dbc; | |
iVar3 = DAT_08009dc0; | |
*(int *)(DAT_08009dc0 + 4) = DAT_08009dc4; | |
*(undefined4 *)(iVar3 + 0x20) = DAT_08009dc8; | |
iVar3 = FUN_0800551a(*DAT_08009dcc); | |
if (iVar3 == 1) { | |
for (iVar3 = 0; iVar3 < 6; iVar3 = iVar3 + 1) { | |
fVar21 = *(float *)(DAT_08009dc4 + iVar3 * 4); | |
convertFixedPointToFloat(DAT_08009ddc); | |
extraout_s0 = (float)in_d0; | |
in_fpscr = in_fpscr & 0xfffffff | (uint)(extraout_s0 < fVar21) << 0x1f | | |
(uint)(extraout_s0 == fVar21) << 0x1e | (uint)(fVar21 <= extraout_s0) << 0x1d; | |
if ((((int)in_fpscr < 0) && | |
(iVar4 = iVar2 + iVar3 * 0x38, *(char *)(iVar4 + 0x2c) == '\0')) && | |
(iVar5 = getCurrentTime(), (uint)(iVar5 - *(int *)(iVar4 + 0xc)) < 10)) { | |
*(float *)(iVar4 + 0x28) = fVar21; | |
*(undefined1 *)(iVar4 + 0x24) = 1; | |
*(undefined1 *)(iVar4 + 0x2c) = 1; | |
sendMidiCommand(DAT_08009dc8,*(undefined4 *)(*(int *)(iVar4 + 0x20) + 0x38),0x12); | |
} | |
} | |
} | |
else { | |
uVar11 = FUN_080053fc(*DAT_08009dcc); | |
updateMidiBuffer(local_a4,DAT_08009dd8,uVar11 & 0xff,uVar11 >> 8); | |
} | |
return; | |
} | |
puVar13 = (undefined4 *)(iVar2 + uVar11 * 0x38); | |
iVar3 = puVar13[8]; | |
if (iVar3 != 0) { | |
fVar21 = (float)puVar13[0xc]; | |
uVar18 = in_fpscr & 0xfffffff | (uint)(fVar21 == 0.0) << 0x1e; | |
fVar23 = DAT_08009cec; | |
fVar24 = DAT_08009cec; | |
if ((byte)(uVar18 >> 0x1e) == 0) { | |
fVar22 = (float)puVar13[0xd]; | |
uVar18 = in_fpscr & 0xfffffff | (uint)(fVar22 == 0.0) << 0x1e; | |
if ((byte)(uVar18 >> 0x1e) != 0) { | |
uVar7 = 0; | |
fVar21 = DAT_08009cec; | |
fVar22 = DAT_08009cec; | |
goto LAB_08009a42; | |
} | |
} | |
else { | |
uVar7 = 0; | |
fVar21 = DAT_08009cec; | |
fVar22 = DAT_08009cec; | |
LAB_08009a42: | |
for (; uVar7 < 3; uVar7 = uVar7 + 1) { | |
if (uVar7 == 2) { | |
for (uVar10 = 0; uVar10 < 0x20; uVar10 = uVar10 + 1) { | |
fVar19 = *(float *)(*(int *)(iVar3 + 0x2c) + uVar10 * 4); | |
fVar20 = (float)VectorUnsignedToFloat(uVar10,(byte)(uVar18 >> 0x15) & 3); | |
fVar21 = fVar21 + fVar19 * fVar20 * DAT_08009ce8; | |
fVar24 = fVar24 + fVar19; | |
} | |
} | |
else if (uVar7 == 1) { | |
for (uVar10 = 0; uVar10 < 0x20; uVar10 = uVar10 + 1) { | |
fVar19 = *(float *)(*(int *)(iVar3 + 0x28) + uVar10 * 4); | |
fVar20 = (float)VectorUnsignedToFloat(uVar10,(byte)(uVar18 >> 0x15) & 3); | |
fVar22 = fVar22 + fVar19 * fVar20 * DAT_08009ce8; | |
fVar23 = fVar23 + fVar19; | |
} | |
} | |
} | |
if (fVar24 != 0.0 && fVar24 < 0.0 == NAN(fVar24)) { | |
fVar21 = fVar21 / fVar24; | |
} | |
uVar7 = uVar18 & 0xfffffff | (uint)(fVar23 < 0.0) << 0x1f | (uint)(fVar23 == 0.0) << 0x1e; | |
uVar18 = uVar7 | (uint)NAN(fVar23) << 0x1c; | |
bVar1 = (byte)(uVar7 >> 0x18); | |
if (!(bool)(bVar1 >> 6 & 1) && bVar1 >> 7 == ((byte)(uVar18 >> 0x1c) & 1)) { | |
fVar22 = fVar22 / fVar23; | |
} | |
local_a8 = 0.0; | |
local_a4[0] = 0.0; | |
for (uVar7 = 0; uVar7 < 4; uVar7 = uVar7 + 1) { | |
if (uVar7 - 1 < 2) { | |
if (uVar7 == 2) { | |
pfVar15 = &local_a8; | |
fVar19 = fVar24; | |
fVar20 = fVar21; | |
} | |
else { | |
pfVar15 = local_a4; | |
fVar19 = fVar23; | |
fVar20 = fVar22; | |
} | |
for (uVar10 = 0; uVar10 < 0x20; uVar10 = uVar10 + 1) { | |
fVar25 = (float)VectorUnsignedToFloat(uVar10,(byte)(uVar18 >> 0x15) & 3); | |
fVar25 = fVar25 * DAT_08009ce8; | |
uVar26 = FUN_08000568(*(undefined4 *) | |
(*(int *)(puVar13[8] + (uVar7 + 8) * 4 + 4) + uVar10 * 4)); | |
uVar6 = FUN_08000568(fVar25 - fVar20); | |
in_d0 = FUN_0800ea90(uVar6,(int)((ulonglong)in_d0 >> 0x20),(int)DAT_08009cc0); | |
uVar26 = FUN_08000618((int)uVar26,(int)((ulonglong)uVar26 >> 0x20),(int)in_d0, | |
(int)((ulonglong)in_d0 >> 0x20)); | |
uVar27 = FUN_08000568(*pfVar15); | |
fp_multiply((int)uVar27,(int)((ulonglong)uVar27 >> 0x20),(int)uVar26, | |
(int)((ulonglong)uVar26 >> 0x20)); | |
fVar25 = (float)FUN_08000c08(); | |
*pfVar15 = fVar25; | |
} | |
uVar10 = uVar18 & 0xfffffff | (uint)(fVar19 < 0.0) << 0x1f | | |
(uint)(fVar19 == 0.0) << 0x1e; | |
uVar18 = uVar10 | (uint)NAN(fVar19) << 0x1c; | |
bVar1 = (byte)(uVar10 >> 0x18); | |
if (!(bool)(bVar1 >> 6 & 1) && bVar1 >> 7 == ((byte)(uVar18 >> 0x1c) & 1)) { | |
FUN_0800ea48(*pfVar15 / fVar19); | |
*pfVar15 = (float)in_d0; | |
} | |
} | |
} | |
puVar13[0xc] = fVar21; | |
puVar13[0xd] = fVar22; | |
} | |
iVar4 = getSensorMessageCounter(uVar14); | |
iVar3 = DAT_08009cf4; | |
fVar23 = (float)VectorUnsignedToFloat(iVar4 - puVar13[1],(byte)(uVar18 >> 0x15) & 3); | |
fVar23 = fVar23 / DAT_08009cf0; | |
uVar6 = *puVar13; | |
if (fVar23 != 1.0 && fVar23 < 1.0 == NAN(fVar23)) { | |
fVar23 = 1.0; | |
} | |
fVar23 = 1.0 - (1.0 - fVar23); | |
uVar18 = uVar18 & 0xfffffff | (uint)(fVar23 < 1.0) << 0x1f | (uint)(fVar23 == 1.0) << 0x1e; | |
in_fpscr = uVar18 | (uint)NAN(fVar23) << 0x1c; | |
bVar1 = (byte)(uVar18 >> 0x18); | |
bVar16 = bVar1 >> 7; | |
bVar17 = (byte)(in_fpscr >> 0x1c) & 1; | |
if ((bool)(bVar1 >> 6 & 1) || bVar16 != bVar17) { | |
if (bVar16 == bVar17) { | |
fVar23 = 1.0; | |
} | |
} | |
else { | |
fVar23 = 1.0; | |
} | |
*(float *)(DAT_08009cf4 + uVar11 * 4) = fVar23; | |
*(undefined4 *)(iVar3 + (uVar11 + 6) * 4) = uVar6; | |
*(float *)(iVar3 + (uVar11 + 0xc) * 4) = fVar21; | |
*(float *)(iVar3 + (uVar11 + 0x12) * 4) = fVar22; | |
iVar3 = lookupSensorFlag(DAT_08009cdc); | |
if ((iVar3 == 1) && | |
(iVar3 = lookupSensorFlag(DAT_08009ce0), puVar13 = DAT_08009ce4, iVar3 == 4)) { | |
notifySensorEvent(*DAT_08009ce4,6,1,0); | |
notifySensorEvent(*puVar13,6,1,0); | |
notifySensorEvent(*puVar13,6,1,0); | |
notifySensorEvent(*puVar13,6,1,0); | |
} | |
} | |
uVar11 = uVar11 + 1; | |
} while( true ); | |
} | |
void entry(void) | |
{ | |
int iVar1; | |
uint uVar2; | |
int iVar3; | |
undefined4 *puVar4; | |
undefined4 *puVar5; | |
int iVar6; | |
code *UNRECOVERED_JUMPTABLE; | |
FUN_080034bc(); | |
iVar3 = DAT_08009e2c; | |
uVar2 = DAT_08009e28; | |
iVar1 = DAT_08009e24; | |
for (iVar6 = 0; puVar4 = DAT_08009e34, puVar5 = DAT_08009e30, (uint)(iVar1 + iVar6) < uVar2; | |
iVar6 = iVar6 + 4) { | |
*(undefined4 *)(iVar1 + iVar6) = *(undefined4 *)(iVar3 + iVar6); | |
} | |
for (; puVar5 < puVar4; puVar5 = puVar5 + 1) { | |
*puVar5 = 0; | |
} | |
FUN_0801256c(); | |
UNRECOVERED_JUMPTABLE = (code *)0x8009e1e; | |
DrumProcessor_Run(); | |
// WARNING: Could not recover jumptable at 0x08009e1e. Too many branches | |
// WARNING: Treating indirect jump as call | |
(*UNRECOVERED_JUMPTABLE)(); | |
return; | |
} | |
uint FUN_08009e3c(uint *param_1,int param_2) | |
{ | |
int iVar1; | |
uint uVar2; | |
uint uVar3; | |
uint uVar4; | |
uint uVar5; | |
if (param_1 == (uint *)0x0) { | |
return 0; | |
} | |
if (((*param_1 & 0x17fffff) == DAT_08009ea0) && (param_2 != 0)) { | |
uVar5 = param_1[6]; | |
uVar3 = *(int *)(uVar5 + 4) + 0x1fU & 0xffffffe0; | |
} | |
else { | |
uVar5 = param_1[6]; | |
uVar3 = *(uint *)(uVar5 + 4); | |
} | |
uVar4 = (uint)((char)param_1[5] == '\x01'); | |
uVar2 = param_1[5] >> 8; | |
if (uVar4 < param_1[5] >> 8) { | |
do { | |
if (uVar4 == 1) { | |
if (uVar2 == 2) break; | |
uVar4 = 2; | |
} | |
iVar1 = uVar4 * 4; | |
uVar4 = uVar4 + 1; | |
uVar3 = *(int *)(uVar5 + iVar1) * uVar3; | |
} while (uVar2 != uVar4); | |
} | |
return uVar3 & ~((int)uVar3 >> 0x1f); | |
} | |
uint FUN_08009ea4(uint param_1) | |
{ | |
uint uVar1; | |
if (param_1 != 0) { | |
if (*(int *)(param_1 + 4) != 0) { | |
uVar1 = (uint)*(ushort *)(param_1 + 2); | |
if (uVar1 != 0) { | |
uVar1 = 1; | |
} | |
return uVar1; | |
} | |
param_1 = 0; | |
} | |
return param_1; | |
} | |
int FUN_08009eb8(int param_1,int param_2,undefined4 param_3) | |
{ | |
int *piVar1; | |
if (param_1 != 0) { | |
piVar1 = (int *)(param_1 + 4); | |
if (*piVar1 == 0) { | |
return 0; | |
} | |
if (*(short *)(param_1 + 2) == 0) { | |
return 0; | |
} | |
param_1 = 1; | |
*(undefined4 *)(*piVar1 + param_2 * 0x1c + 4) = param_3; | |
} | |
return param_1; | |
} | |
bool FUN_08009ed8(undefined4 *param_1,uint param_2,int *param_3) | |
{ | |
int *piVar1; | |
int *piVar2; | |
int iVar3; | |
uint uVar4; | |
int *piVar5; | |
int iVar6; | |
uint uVar7; | |
if (param_3 == (int *)0x0) { | |
return false; | |
} | |
if ((param_1 != (undefined4 *)0x0) && (param_2 != 0)) { | |
if (*param_3 == DAT_08009f7c) { | |
iVar6 = FUN_08009ea4(param_3 + 1); | |
if ((iVar6 != 0) && (param_2 == *(ushort *)((int)param_3 + 6))) { | |
iVar6 = 0; | |
piVar5 = param_1 + -1; | |
uVar7 = 0; | |
do { | |
iVar3 = param_3[2] + iVar6; | |
iVar6 = iVar6 + 0x1c; | |
iVar3 = *(int *)(iVar3 + 4); | |
if (iVar3 == 0) break; | |
uVar7 = uVar7 + 1; | |
piVar5 = piVar5 + 1; | |
*piVar5 = iVar3; | |
} while (param_2 != uVar7); | |
return param_2 == uVar7; | |
} | |
} | |
else { | |
piVar5 = (int *)param_3[1]; | |
if (piVar5 != (int *)0x0) { | |
iVar6 = *piVar5; | |
if (iVar6 != DAT_08009f7c) { | |
*param_1 = piVar5; | |
return param_2 == 1; | |
} | |
piVar1 = param_1 + -1; | |
piVar2 = piVar5; | |
uVar7 = 0; | |
do { | |
uVar4 = uVar7; | |
piVar2 = piVar2 + 1; | |
if (*piVar2 == iVar6) { | |
if (param_2 == uVar4) { | |
return true; | |
} | |
return false; | |
} | |
piVar1 = piVar1 + 1; | |
*piVar1 = *piVar2; | |
uVar7 = uVar4 + 1; | |
} while (param_2 != uVar4 + 1); | |
if (piVar5[uVar4 + 2] == iVar6) { | |
return true; | |
} | |
} | |
} | |
} | |
return false; | |
} | |
bool FUN_08009f80(undefined4 *param_1,uint param_2,int *param_3) | |
{ | |
int *piVar1; | |
int *piVar2; | |
int iVar3; | |
uint uVar4; | |
int *piVar5; | |
int iVar6; | |
uint uVar7; | |
if (param_3 == (int *)0x0) { | |
return false; | |
} | |
if ((param_1 != (undefined4 *)0x0) && (param_2 != 0)) { | |
if (*param_3 == DAT_0800a024) { | |
iVar6 = FUN_08009ea4(param_3 + 3); | |
if ((iVar6 != 0) && (param_2 == *(ushort *)((int)param_3 + 0xe))) { | |
iVar6 = 0; | |
piVar5 = param_1 + -1; | |
uVar7 = 0; | |
do { | |
iVar3 = param_3[4] + iVar6; | |
iVar6 = iVar6 + 0x1c; | |
iVar3 = *(int *)(iVar3 + 4); | |
if (iVar3 == 0) break; | |
uVar7 = uVar7 + 1; | |
piVar5 = piVar5 + 1; | |
*piVar5 = iVar3; | |
} while (param_2 != uVar7); | |
return param_2 == uVar7; | |
} | |
} | |
else { | |
piVar5 = (int *)param_3[8]; | |
if (piVar5 != (int *)0x0) { | |
iVar6 = *piVar5; | |
if (iVar6 != DAT_0800a024) { | |
*param_1 = piVar5; | |
return param_2 == 1; | |
} | |
piVar1 = param_1 + -1; | |
piVar2 = piVar5; | |
uVar7 = 0; | |
do { | |
uVar4 = uVar7; | |
piVar2 = piVar2 + 1; | |
if (*piVar2 == iVar6) { | |
if (param_2 == uVar4) { | |
return true; | |
} | |
return false; | |
} | |
piVar1 = piVar1 + 1; | |
*piVar1 = *piVar2; | |
uVar7 = uVar4 + 1; | |
} while (param_2 != uVar4 + 1); | |
if (piVar5[uVar4 + 2] == iVar6) { | |
return true; | |
} | |
} | |
} | |
} | |
return false; | |
} | |
undefined4 FUN_0800a028(undefined4 *param_1,undefined4 *param_2,undefined4 *param_3) | |
{ | |
undefined4 uVar1; | |
if (param_1 == (undefined4 *)0x0) { | |
return 0; | |
} | |
if (param_2 != (undefined4 *)0x0) { | |
if (param_3 != (undefined4 *)0x0) { | |
*param_1 = DAT_0800a068; | |
uVar1 = param_2[1]; | |
param_1[1] = *param_2; | |
param_1[2] = uVar1; | |
uVar1 = param_3[1]; | |
param_1[3] = *param_3; | |
param_1[4] = uVar1; | |
return 1; | |
} | |
return 0; | |
} | |
return 0; | |
} | |
uint FUN_0800a06c(uint *param_1) | |
{ | |
uint uVar1; | |
if ((DAT_0800a080 & ~*param_1) == 0) { | |
uVar1 = param_1[3]; | |
param_1[3] = 0; | |
return uVar1; | |
} | |
return 0x1010; | |
} | |
void FUN_0800a084(int param_1) | |
{ | |
if (param_1 != 0) { | |
FUN_0800a974(param_1 + 0xc); | |
return; | |
} | |
return; | |
} | |
undefined4 FUN_0800a090(uint *param_1,undefined2 *param_2) | |
{ | |
undefined4 uVar1; | |
int iVar2; | |
undefined2 uVar3; | |
uint uVar4; | |
int iVar5; | |
int iVar6; | |
undefined4 *puVar7; | |
uint uVar8; | |
undefined4 uVar9; | |
int *piVar10; | |
int iVar11; | |
int iVar12; | |
ushort *puVar13; | |
int iVar14; | |
undefined4 uVar15; | |
if ((DAT_0800a178 & ~*param_1) != 0) { | |
return 0; | |
} | |
if (((short)param_1[0xc] != 0) && (puVar13 = (ushort *)param_1[0xd], puVar13 != (ushort *)0x0)) { | |
iVar14 = 0; | |
uVar8 = 0; | |
while( true ) { | |
uVar3 = (undefined2)uVar8; | |
if (*puVar13 <= uVar8) break; | |
if ((*(int *)(puVar13 + 2) == 0) || | |
(piVar10 = *(int **)(*(int *)(puVar13 + 2) + uVar8 * 4), piVar10 == (int *)0x0)) break; | |
iVar12 = piVar10[3]; | |
iVar6 = *(int *)(*(int *)(puVar13 + 4) + 4); | |
iVar11 = *(int *)(*(int *)(puVar13 + 4) + 8); | |
uVar4 = piVar10[2]; | |
uVar1 = FUN_0800cef0(*(undefined4 *)piVar10[6]); | |
iVar2 = piVar10[6]; | |
iVar5 = iVar11 + uVar8 * 8; | |
uVar15 = *(undefined4 *)(iVar2 + 8); | |
puVar7 = (undefined4 *)(iVar6 + iVar14); | |
if (iVar5 != 0) { | |
*(undefined4 *)(iVar11 + uVar8 * 8) = 0; | |
iVar2 = *piVar10; | |
*(int *)(iVar5 + 4) = iVar2; | |
if ((iVar2 == 0) || (*(short *)(iVar2 + 2) == 0)) { | |
iVar2 = piVar10[6]; | |
iVar5 = 0; | |
} | |
else { | |
*(undefined4 *)(iVar11 + uVar8 * 8) = 1; | |
iVar2 = piVar10[6]; | |
} | |
} | |
uVar9 = *(undefined4 *)(iVar2 + 4); | |
puVar7[2] = iVar5; | |
*(undefined1 *)(puVar7 + 5) = 1; | |
*puVar7 = uVar1; | |
puVar7[3] = 0; | |
puVar7[4] = uVar9; | |
puVar7[5] = puVar7[5] & 0xff | uVar4 & 0xffffff00; | |
puVar7[6] = iVar12; | |
puVar7[1] = uVar15; | |
uVar8 = uVar8 + 1; | |
iVar14 = iVar14 + 0x1c; | |
} | |
if ((uVar8 & 0xffff) != 0) { | |
uVar1 = *(undefined4 *)(*(int *)(puVar13 + 4) + 4); | |
goto LAB_0800a158; | |
} | |
} | |
FUN_0800a974(param_1 + 3,0x11,0x18); | |
uVar3 = 0; | |
uVar1 = 0; | |
LAB_0800a158: | |
if (param_2 != (undefined2 *)0x0) { | |
*param_2 = uVar3; | |
} | |
return uVar1; | |
} | |
undefined4 FUN_0800a17c(uint *param_1,undefined2 *param_2) | |
{ | |
undefined4 uVar1; | |
undefined2 uVar2; | |
int iVar3; | |
uint uVar4; | |
int iVar5; | |
int iVar6; | |
int iVar7; | |
undefined4 *puVar8; | |
uint uVar9; | |
undefined4 uVar10; | |
int *piVar11; | |
int iVar12; | |
uint uVar13; | |
int iVar14; | |
undefined4 uVar15; | |
if ((DAT_0800a260 & ~*param_1) != 0) { | |
return 0; | |
} | |
if (1 < (ushort)param_1[0xc]) { | |
iVar14 = 0; | |
uVar13 = param_1[0xd]; | |
uVar9 = 0; | |
while( true ) { | |
uVar2 = (undefined2)uVar9; | |
if (*(ushort *)(uVar13 + 0xc) <= uVar9) break; | |
if ((*(int *)(uVar13 + 0x10) == 0) || | |
(piVar11 = *(int **)(*(int *)(uVar13 + 0x10) + uVar9 * 4), piVar11 == (int *)0x0)) break; | |
iVar7 = *(int *)(*(int *)(uVar13 + 0x14) + 4); | |
iVar12 = *(int *)(*(int *)(uVar13 + 0x14) + 8); | |
uVar4 = piVar11[2]; | |
iVar5 = piVar11[3]; | |
uVar1 = FUN_0800cef0(*(undefined4 *)piVar11[6]); | |
iVar3 = piVar11[6]; | |
iVar6 = iVar12 + uVar9 * 8; | |
uVar15 = *(undefined4 *)(iVar3 + 8); | |
puVar8 = (undefined4 *)(iVar7 + iVar14); | |
if (iVar6 != 0) { | |
*(undefined4 *)(iVar12 + uVar9 * 8) = 0; | |
iVar3 = *piVar11; | |
*(int *)(iVar6 + 4) = iVar3; | |
if ((iVar3 == 0) || (*(short *)(iVar3 + 2) == 0)) { | |
iVar3 = piVar11[6]; | |
iVar6 = 0; | |
} | |
else { | |
*(undefined4 *)(iVar12 + uVar9 * 8) = 1; | |
iVar3 = piVar11[6]; | |
} | |
} | |
uVar10 = *(undefined4 *)(iVar3 + 4); | |
*puVar8 = uVar1; | |
*(undefined1 *)(puVar8 + 5) = 1; | |
puVar8[1] = uVar15; | |
puVar8[4] = uVar10; | |
puVar8[5] = puVar8[5] & 0xff | uVar4 & 0xffffff00; | |
puVar8[2] = iVar6; | |
puVar8[3] = 0; | |
puVar8[6] = iVar5; | |
uVar9 = uVar9 + 1; | |
iVar14 = iVar14 + 0x1c; | |
} | |
if ((uVar9 & 0xffff) != 0) { | |
uVar1 = *(undefined4 *)(*(int *)(uVar13 + 0x14) + 4); | |
goto LAB_0800a23e; | |
} | |
} | |
FUN_0800a974(param_1 + 3,0x11,0x18); | |
uVar2 = 0; | |
uVar1 = 0; | |
LAB_0800a23e: | |
if (param_2 != (undefined2 *)0x0) { | |
*param_2 = uVar2; | |
} | |
return uVar1; | |
} | |
uint FUN_0800a264(int *param_1,undefined4 param_2,int param_3,undefined4 param_4,undefined1 param_5, | |
undefined1 param_6) | |
{ | |
int iVar1; | |
undefined4 uVar2; | |
int iVar3; | |
uint uVar4; | |
uint uVar5; | |
undefined4 local_24 [2]; | |
if (param_1 == (int *)0x0) { | |
return 0x1010; | |
} | |
*param_1 = param_3; | |
iVar1 = FUN_0800a964(); | |
if (iVar1 == 0) { | |
uVar5 = 0x30; | |
} | |
else { | |
iVar1 = FUN_0800d044(param_4,param_5,0); | |
iVar3 = FUN_0800d044(1,5,0); | |
if (iVar1 == iVar3) { | |
local_24[0] = DAT_0800a2e4; | |
iVar1 = FUN_0800a98c(local_24); | |
if (iVar1 != 0) { | |
uVar4 = 0; | |
uVar5 = uVar4; | |
goto LAB_0800a28a; | |
} | |
uVar5 = 2; | |
} | |
else { | |
uVar5 = 1; | |
} | |
} | |
*param_1 = 0; | |
uVar4 = 0x10; | |
LAB_0800a28a: | |
uVar2 = FUN_0800d044(param_4,param_5,param_6); | |
*(undefined4 *)(param_3 + 8) = uVar2; | |
return uVar5 | uVar4 << 8; | |
} | |
uint * FUN_0800a2e8(uint *param_1,int *param_2) | |
{ | |
int *piVar1; | |
int iVar2; | |
int iVar3; | |
undefined4 uVar4; | |
undefined4 uVar5; | |
int iVar6; | |
undefined4 uVar7; | |
undefined2 uVar8; | |
int iVar9; | |
int *piVar10; | |
uint uVar11; | |
uint uVar12; | |
undefined2 uVar13; | |
int iVar14; | |
undefined4 *puVar15; | |
undefined4 *puVar16; | |
if ((DAT_0800a47c & ~*param_1) != 0) { | |
return (uint *)0x0; | |
} | |
if (param_2 == (int *)0x0) { | |
FUN_0800a974(param_1 + 3,0x10,0x11); | |
return (uint *)0x0; | |
} | |
iVar6 = *param_2; | |
if (iVar6 == DAT_0800a480) { | |
uVar8 = (undefined2)param_2[3]; | |
uVar12 = (uint)*(ushort *)((int)param_2 + 0xe); | |
piVar10 = (int *)param_2[4]; | |
piVar1 = param_2 + 1; | |
uVar11 = (uint)*(ushort *)((int)param_2 + 6); | |
param_2 = (int *)param_2[2]; | |
uVar13 = (short)*piVar1; | |
if (*param_1 != DAT_0800a47c) goto LAB_0800a322; | |
} | |
else { | |
iVar14 = param_2[1]; | |
iVar2 = FUN_08009e3c(param_2,1); | |
piVar10 = param_2 + 7; | |
iVar9 = param_2[8]; | |
iVar3 = FUN_08009e3c(piVar10,1); | |
if (iVar2 == 0) { | |
param_2 = (int *)0x0; | |
} | |
uVar11 = (uint)(iVar2 != 0); | |
if (iVar3 == 0) { | |
piVar10 = (int *)0x0; | |
uVar12 = 0; | |
} | |
else { | |
if (iVar9 == 0) { | |
FUN_0800a974(param_1 + 3,0x10,0x13); | |
return (uint *)0x0; | |
} | |
uVar12 = 1; | |
} | |
if (iVar14 == 0) { | |
if (iVar2 != 0) { | |
FUN_0800a974(param_1 + 3,0x10,0x12); | |
return (uint *)0x0; | |
} | |
} | |
else { | |
iVar2 = 0; | |
} | |
uVar8 = (undefined2)iVar2; | |
uVar13 = uVar8; | |
if (*param_1 != DAT_0800a47c) goto LAB_0800a322; | |
} | |
if (*(ushort *)((int)param_1 + 0x22) < uVar11) { | |
if (iVar6 != DAT_0800a480) { | |
FUN_0800a974(param_1 + 3,0x16,0x12); | |
return (uint *)0x0; | |
} | |
LAB_0800a388: | |
param_1[9] = (uint)param_2; | |
*(short *)((int)param_1 + 0x22) = (short)uVar11; | |
*(undefined2 *)(param_1 + 8) = uVar13; | |
param_1[0xb] = (uint)piVar10; | |
} | |
else { | |
if (iVar6 == DAT_0800a480) goto LAB_0800a388; | |
if (uVar11 != 0) { | |
iVar6 = 0; | |
do { | |
puVar16 = (undefined4 *)((int)param_2 + iVar6); | |
puVar15 = (undefined4 *)(param_1[9] + iVar6); | |
uVar4 = puVar16[1]; | |
uVar5 = puVar16[2]; | |
uVar7 = puVar16[3]; | |
*puVar15 = *puVar16; | |
puVar15[1] = uVar4; | |
puVar15[2] = uVar5; | |
puVar15[3] = uVar7; | |
uVar4 = puVar16[5]; | |
uVar5 = puVar16[6]; | |
iVar6 = iVar6 + 0x1c; | |
puVar15[4] = puVar16[4]; | |
puVar15[5] = uVar4; | |
puVar15[6] = uVar5; | |
} while (uVar11 * 0x1c - iVar6 != 0); | |
} | |
*(short *)((int)param_1 + 0x22) = (short)uVar11; | |
*(undefined2 *)(param_1 + 8) = uVar13; | |
if (*(ushort *)((int)param_1 + 0x2a) < uVar12) { | |
FUN_0800a974(param_1 + 3,0x16,0x13); | |
return (uint *)0x0; | |
} | |
if (uVar12 != 0) { | |
iVar6 = 0; | |
do { | |
puVar16 = (undefined4 *)((int)piVar10 + iVar6); | |
uVar4 = puVar16[1]; | |
uVar5 = puVar16[2]; | |
uVar7 = puVar16[3]; | |
puVar15 = (undefined4 *)(param_1[0xb] + iVar6); | |
*puVar15 = *puVar16; | |
puVar15[1] = uVar4; | |
puVar15[2] = uVar5; | |
puVar15[3] = uVar7; | |
uVar4 = puVar16[5]; | |
uVar5 = puVar16[6]; | |
iVar6 = iVar6 + 0x1c; | |
puVar15[4] = puVar16[4]; | |
puVar15[5] = uVar4; | |
puVar15[6] = uVar5; | |
} while (iVar6 != uVar12 * 0x1c); | |
} | |
} | |
*(short *)((int)param_1 + 0x2a) = (short)uVar12; | |
*(undefined2 *)(param_1 + 10) = uVar8; | |
FUN_0800a9e0(param_1); | |
LAB_0800a322: | |
param_1[4] = 3; | |
return param_1; | |
} | |
undefined4 FUN_0800a484(uint *param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
uint uVar1; | |
uint uVar2; | |
uVar1 = *param_1; | |
if ((DAT_0800a4e0 & ~uVar1) != 0) { | |
return 0; | |
} | |
if ((param_1[4] & 2) == 0) { | |
FUN_0800a974(param_1 + 3,0x11,0x10,param_1[4],param_4); | |
return 0; | |
} | |
if ((uVar1 == (uVar1 & DAT_0800a4e0)) && (FUN_0800a9fc(), param_1[0x10] != 0)) { | |
uVar1 = param_1[0xe]; | |
while (uVar1 != 0) { | |
(*(code *)param_1[0x10])(0,uVar1,param_1[0x11]); | |
uVar2 = *(uint *)(uVar1 + 0x10); | |
if (uVar2 == uVar1) { | |
return 1; | |
} | |
uVar1 = uVar2; | |
if (uVar2 == 0) { | |
return 1; | |
} | |
} | |
} | |
return 1; | |
} | |
ushort FUN_0800a4e4(uint *param_1,uint *param_2,uint *param_3) | |
{ | |
uint uVar1; | |
int iVar2; | |
int *piVar3; | |
int iVar4; | |
uint uVar5; | |
ushort uVar6; | |
int iVar7; | |
uint uVar8; | |
uint uVar9; | |
ushort *puVar10; | |
int iVar11; | |
int iVar12; | |
ushort *puVar13; | |
uint local_34; | |
if ((DAT_0800a7c0 & ~*param_1) != 0) { | |
return 0; | |
} | |
if ((short)param_1[0xc] == 0) { | |
param_1[6] = 0; | |
if ((param_1[4] & 3) != 3) goto LAB_0800a782; | |
} | |
else { | |
puVar13 = (ushort *)param_1[0xd]; | |
uVar9 = 0; | |
param_1[6] = 0; | |
if ((param_1[4] & 3) != 3) { | |
LAB_0800a782: | |
FUN_0800a974(param_1 + 3,0x11,0x30); | |
return 0; | |
} | |
if (((param_2 != (uint *)0x0) && (puVar13 != (ushort *)0x0)) && (*puVar13 != 0)) { | |
local_34 = *(uint *)param_2[6]; | |
LAB_0800a536: | |
do { | |
if ((*(int *)(puVar13 + 2) == 0) || | |
(iVar7 = *(int *)(*(int *)(puVar13 + 2) + uVar9 * 4), iVar7 == 0)) break; | |
iVar12 = **(int **)(puVar13 + 4); | |
iVar11 = iVar12 + uVar9 * 0x10; | |
if (iVar11 == 0) goto LAB_0800a756; | |
uVar8 = *(uint *)(*(int *)(iVar7 + 0x18) + 4); | |
uVar1 = FUN_08009e3c(param_2,1); | |
if (uVar8 < uVar1) { | |
LAB_0800a798: | |
FUN_0800a974(param_1 + 3,0x12,0x18); | |
return 0; | |
} | |
iVar2 = *(int *)(iVar7 + 0xc); | |
uVar1 = param_2[6]; | |
if (((*(int *)(iVar2 + 0xc) != *(int *)(uVar1 + 0xc)) || | |
(*(int *)(iVar2 + 8) != *(int *)(uVar1 + 8))) || | |
(*(int *)(iVar2 + 4) != *(int *)(uVar1 + 4))) goto LAB_0800a798; | |
uVar1 = FUN_0800d020(**(undefined4 **)(iVar7 + 0x18),(*(undefined4 **)(iVar7 + 0x18))[1]); | |
uVar8 = FUN_0800d050(iVar7); | |
if (uVar1 < uVar8) goto LAB_0800a798; | |
uVar1 = FUN_0800cef0(**(undefined4 **)(iVar7 + 0x18)); | |
if (((uVar1 ^ *param_2) & 0x1ffffff) != 0) { | |
FUN_0800a974(param_1 + 3,0x12,0x19); | |
return 0; | |
} | |
if (param_2[1] == 0) goto LAB_0800a756; | |
uVar1 = *(uint *)param_2[6]; | |
if (uVar1 == 0) { | |
FUN_0800a974(param_1 + 3,0x12,0x21); | |
return 0; | |
} | |
if (local_34 < uVar1) { | |
local_34 = uVar1; | |
} | |
iVar2 = FUN_0800d050(iVar7); | |
*(int *)(iVar11 + 8) = iVar2; | |
iVar4 = *(int *)param_2[6]; | |
*(int *)(iVar11 + 0xc) = iVar2 * iVar4; | |
uVar1 = param_2[1]; | |
*(uint *)(iVar11 + 4) = uVar1; | |
*(uint *)(iVar12 + uVar9 * 0x10) = iVar2 * iVar4 + uVar1; | |
piVar3 = *(int **)(iVar7 + 0x18); | |
uVar9 = uVar9 + 1; | |
param_2 = param_2 + 7; | |
if (*piVar3 << 2 < 0) { | |
if (*puVar13 <= uVar9) break; | |
goto LAB_0800a536; | |
} | |
piVar3[2] = uVar1 + (piVar3[2] - piVar3[3]); | |
*(undefined4 *)(*(int *)(iVar7 + 0x18) + 0xc) = *(undefined4 *)(iVar11 + 4); | |
} while (uVar9 < *puVar13); | |
uVar6 = (ushort)param_1[0xc]; | |
if (param_3 == (uint *)0x0) { | |
*(ushort *)(param_1 + 6) = (ushort)local_34; | |
} | |
else { | |
if ((uVar6 < 2) || (uVar9 = param_1[0xd], *(short *)(uVar9 + 0xc) == 0)) { | |
LAB_0800a7b0: | |
FUN_0800a974(param_1 + 3,0x13,0x18); | |
return 0; | |
} | |
uVar1 = 0; | |
LAB_0800a64a: | |
do { | |
if ((*(int *)(uVar9 + 0x10) == 0) || | |
(iVar7 = *(int *)(*(int *)(uVar9 + 0x10) + uVar1 * 4), iVar7 == 0)) break; | |
iVar11 = **(int **)(uVar9 + 0x14); | |
iVar12 = iVar11 + uVar1 * 0x10; | |
if (iVar12 == 0) { | |
LAB_0800a930: | |
FUN_0800a974(param_1 + 3,0x13,0x17); | |
return 0; | |
} | |
uVar5 = *(uint *)(*(int *)(iVar7 + 0x18) + 4); | |
uVar8 = FUN_08009e3c(param_3,1); | |
if (uVar5 < uVar8) goto LAB_0800a7b0; | |
iVar2 = *(int *)(iVar7 + 0xc); | |
uVar8 = param_3[6]; | |
if (((*(int *)(iVar2 + 0xc) != *(int *)(uVar8 + 0xc)) || | |
(*(int *)(iVar2 + 8) != *(int *)(uVar8 + 8))) || | |
(*(int *)(iVar2 + 4) != *(int *)(uVar8 + 4))) goto LAB_0800a7b0; | |
uVar8 = FUN_0800d020(**(undefined4 **)(iVar7 + 0x18),(*(undefined4 **)(iVar7 + 0x18))[1]); | |
uVar5 = FUN_0800d050(iVar7); | |
if (uVar8 < uVar5) goto LAB_0800a7b0; | |
uVar8 = FUN_0800cef0(**(undefined4 **)(iVar7 + 0x18)); | |
if (((uVar8 ^ *param_3) & 0x1ffffff) != 0) { | |
FUN_0800a974(param_1 + 3,0x13,0x19); | |
return 0; | |
} | |
if (param_3[1] == 0) goto LAB_0800a930; | |
uVar8 = *(uint *)param_3[6]; | |
if (uVar8 == 0) { | |
FUN_0800a974(param_1 + 3,0x13,0x21); | |
return 0; | |
} | |
if (local_34 < uVar8) { | |
local_34 = uVar8; | |
} | |
iVar2 = FUN_0800d050(iVar7); | |
*(int *)(iVar12 + 8) = iVar2; | |
iVar4 = *(int *)param_3[6]; | |
*(int *)(iVar12 + 0xc) = iVar2 * iVar4; | |
uVar8 = param_3[1]; | |
*(uint *)(iVar12 + 4) = uVar8; | |
*(uint *)(iVar11 + uVar1 * 0x10) = iVar2 * iVar4 + uVar8; | |
piVar3 = *(int **)(iVar7 + 0x18); | |
uVar1 = uVar1 + 1; | |
param_3 = param_3 + 7; | |
if (*piVar3 << 2 < 0) { | |
if (*(ushort *)(uVar9 + 0xc) <= uVar1) break; | |
goto LAB_0800a64a; | |
} | |
piVar3[2] = uVar8 + (piVar3[2] - piVar3[3]); | |
*(undefined4 *)(*(int *)(iVar7 + 0x18) + 0xc) = *(undefined4 *)(iVar12 + 4); | |
} while (uVar1 < *(ushort *)(uVar9 + 0xc)); | |
uVar6 = (ushort)param_1[0xc]; | |
*(ushort *)(param_1 + 6) = (ushort)local_34; | |
} | |
if (uVar6 == 0) { | |
puVar13 = (ushort *)0x0; | |
puVar10 = (ushort *)0x0; | |
} | |
else { | |
puVar13 = (ushort *)param_1[0xd]; | |
if (uVar6 == 1) { | |
puVar10 = (ushort *)0x0; | |
} | |
else { | |
puVar10 = puVar13 + 6; | |
} | |
} | |
if ((ushort)local_34 <= *(ushort *)((int)param_1 + 0x1a)) { | |
return *(ushort *)((int)param_1 + 0x1a); | |
} | |
do { | |
if (puVar13 != (ushort *)0x0) { | |
for (uVar9 = 0; | |
((uVar9 < *puVar13 && (*(int *)(puVar13 + 2) != 0)) && | |
(iVar7 = *(int *)(*(int *)(puVar13 + 2) + uVar9 * 4), iVar7 != 0)); uVar9 = uVar9 + 1) | |
{ | |
piVar3 = *(int **)(iVar7 + 0x18); | |
iVar12 = **(int **)(puVar13 + 4); | |
iVar11 = iVar12 + uVar9 * 0x10; | |
if (*piVar3 << 2 < 0) { | |
FUN_0800cdac(*(undefined4 *)(iVar11 + 4),piVar3[2],*(undefined4 *)(iVar11 + 8)); | |
} | |
else { | |
piVar3[2] = *(int *)(iVar11 + 4) + (piVar3[2] - piVar3[3]); | |
*(undefined4 *)(*(int *)(iVar7 + 0x18) + 0xc) = *(undefined4 *)(iVar11 + 4); | |
} | |
uVar1 = *(uint *)(iVar12 + uVar9 * 0x10); | |
uVar8 = *(int *)(iVar11 + 4) + *(int *)(iVar11 + 8); | |
if (uVar1 <= uVar8) { | |
uVar8 = uVar1 - *(int *)(iVar11 + 0xc); | |
} | |
*(uint *)(iVar11 + 4) = uVar8; | |
} | |
} | |
FUN_0800aa24(param_1); | |
if (puVar10 != (ushort *)0x0) { | |
for (uVar9 = 0; | |
((uVar9 < *puVar10 && (*(int *)(puVar10 + 2) != 0)) && | |
(iVar7 = *(int *)(*(int *)(puVar10 + 2) + uVar9 * 4), iVar7 != 0)); uVar9 = uVar9 + 1) | |
{ | |
iVar12 = **(int **)(puVar10 + 4); | |
iVar11 = iVar12 + uVar9 * 0x10; | |
if (**(int **)(iVar7 + 0x18) << 2 < 0) { | |
FUN_0800cdac((*(int **)(iVar7 + 0x18))[2],*(undefined4 *)(iVar11 + 4), | |
*(undefined4 *)(iVar11 + 8)); | |
uVar1 = *(uint *)(iVar12 + uVar9 * 0x10); | |
uVar8 = *(int *)(iVar11 + 4) + *(int *)(iVar11 + 8); | |
if (uVar1 <= uVar8) { | |
uVar8 = uVar1 - *(int *)(iVar11 + 0xc); | |
} | |
*(uint *)(iVar11 + 4) = uVar8; | |
} | |
else { | |
uVar1 = *(uint *)(iVar12 + uVar9 * 0x10); | |
uVar8 = *(int *)(iVar11 + 4) + *(int *)(iVar11 + 8); | |
if (uVar1 <= uVar8) { | |
uVar8 = uVar1 - *(int *)(iVar11 + 0xc); | |
} | |
*(uint *)(iVar11 + 4) = uVar8; | |
iVar12 = *(int *)(iVar7 + 0x18); | |
*(uint *)(iVar12 + 8) = uVar8 + (*(int *)(iVar12 + 8) - *(int *)(iVar12 + 0xc)); | |
*(undefined4 *)(*(int *)(iVar7 + 0x18) + 0xc) = *(undefined4 *)(iVar11 + 4); | |
} | |
} | |
} | |
uVar6 = *(short *)((int)param_1 + 0x1a) + 1; | |
*(ushort *)((int)param_1 + 0x1a) = uVar6; | |
} while (uVar6 < (ushort)param_1[6]); | |
return uVar6; | |
} | |
} | |
LAB_0800a756: | |
FUN_0800a974(param_1 + 3,0x12,0x17); | |
return 0; | |
} | |
undefined4 FUN_0800a964(void) | |
{ | |
return 1; | |
} | |
undefined4 FUN_0800a974(uint *param_1,char param_2,int param_3) | |
{ | |
if ((char)*param_1 != '\0') { | |
return 0; | |
} | |
*(char *)param_1 = param_2; | |
*param_1 = *param_1 & 0xff | param_3 << 8; | |
return 1; | |
} | |
char * FUN_0800a98c(char *param_1) | |
{ | |
uint uVar1; | |
char cStack_3; | |
char cStack_2; | |
char cStack_1; | |
if (param_1 != (char *)0x0) { | |
if (*param_1 == '\x03') { | |
if (((((DAT_0800a9dc & 0xff) == 3) && | |
(cStack_3 = (char)(DAT_0800a9dc >> 8), param_1[1] == cStack_3)) && | |
(cStack_2 = (char)(DAT_0800a9dc >> 0x10), param_1[2] == cStack_2)) && | |
(cStack_1 = (char)(DAT_0800a9dc >> 0x18), param_1[3] == cStack_1)) { | |
uVar1 = 0; | |
} | |
else { | |
uVar1 = 1; | |
} | |
return (char *)(uVar1 ^ 1); | |
} | |
param_1 = (char *)0x0; | |
} | |
return param_1; | |
} | |
int FUN_0800a9e0(int param_1) | |
{ | |
int iVar1; | |
int iVar2; | |
int iVar3; | |
iVar1 = 0; | |
iVar3 = *(int *)(param_1 + 0x38); | |
while( true ) { | |
if (iVar3 == 0) { | |
return iVar1; | |
} | |
iVar2 = *(int *)(iVar3 + 0x10); | |
*(int *)(iVar3 + 0xc) = param_1; | |
iVar1 = iVar1 + 1; | |
if (iVar2 == iVar3) break; | |
iVar3 = iVar2; | |
if (iVar2 == 0) { | |
return iVar1; | |
} | |
} | |
return iVar1; | |
} | |
int FUN_0800a9fc(int param_1) | |
{ | |
int iVar1; | |
int iVar2; | |
int iVar3; | |
iVar3 = 0; | |
iVar2 = *(int *)(param_1 + 0x38); | |
while( true ) { | |
if (iVar2 == 0) { | |
return iVar3; | |
} | |
if ((*(int *)(iVar2 + 4) << 0x1f < 0) && (*(code **)(iVar2 + 0x20) != (code *)0x0)) { | |
(**(code **)(iVar2 + 0x20))(iVar2); | |
iVar3 = iVar3 + 1; | |
} | |
iVar1 = *(int *)(iVar2 + 0x10); | |
if (iVar1 == iVar2) break; | |
iVar2 = iVar1; | |
if (iVar1 == 0) { | |
return iVar3; | |
} | |
} | |
return iVar3; | |
} | |
int FUN_0800aa24(int param_1) | |
{ | |
int iVar1; | |
int iVar2; | |
int iVar3; | |
code *pcVar4; | |
pcVar4 = *(code **)(param_1 + 0x40); | |
if (pcVar4 == (code *)0x0) { | |
iVar1 = *(int *)(param_1 + 0x38); | |
*(int *)(param_1 + 0x3c) = iVar1; | |
if (iVar1 != 0) { | |
iVar3 = 0; | |
do { | |
(**(code **)(iVar1 + 0x14))(iVar1); | |
iVar2 = *(int *)(iVar1 + 0x10); | |
if (iVar2 == iVar1) { | |
*(undefined4 *)(param_1 + 0x3c) = 0; | |
return iVar3 + 1; | |
} | |
*(int *)(param_1 + 0x3c) = iVar2; | |
iVar3 = iVar3 + 1; | |
iVar1 = iVar2; | |
} while (iVar2 != 0); | |
return iVar3; | |
} | |
} | |
else { | |
iVar1 = *(int *)(param_1 + 0x38); | |
*(int *)(param_1 + 0x3c) = iVar1; | |
if (iVar1 != 0) { | |
(*pcVar4)(1,iVar1,*(undefined4 *)(param_1 + 0x44)); | |
iVar1 = *(int *)(param_1 + 0x3c); | |
if (iVar1 != 0) { | |
iVar3 = 0; | |
do { | |
(*pcVar4)(2,iVar1,*(undefined4 *)(param_1 + 0x44)); | |
iVar2 = *(int *)(param_1 + 0x3c); | |
(**(code **)(iVar2 + 0x14))(iVar2); | |
iVar1 = *(int *)(iVar2 + 0x10); | |
if (iVar2 == iVar1) { | |
(*pcVar4)(3,*(undefined4 *)(param_1 + 0x3c),*(undefined4 *)(param_1 + 0x44)); | |
*(undefined4 *)(param_1 + 0x3c) = 0; | |
return iVar3 + 1; | |
} | |
(*pcVar4)(3); | |
iVar3 = iVar3 + 1; | |
*(int *)(param_1 + 0x3c) = iVar1; | |
} while (iVar1 != 0); | |
return iVar3; | |
} | |
} | |
} | |
return 0; | |
} | |
void FUN_0800aab8(int param_1) | |
{ | |
code *pcVar1; | |
ushort uVar2; | |
short sVar3; | |
short sVar4; | |
short sVar5; | |
short sVar6; | |
short sVar7; | |
short sVar8; | |
short sVar9; | |
short sVar10; | |
short sVar11; | |
short sVar12; | |
short sVar13; | |
short sVar14; | |
short sVar15; | |
int iVar16; | |
int iVar17; | |
uint uVar18; | |
int iVar19; | |
uint *puVar20; | |
uint uVar21; | |
undefined4 *puVar22; | |
uint uVar23; | |
uint uVar24; | |
uint uVar25; | |
uint uVar26; | |
uint uVar27; | |
uint uVar28; | |
int *piVar29; | |
undefined4 *puVar30; | |
undefined4 *puVar31; | |
int iVar32; | |
ushort *puVar33; | |
int local_a8; | |
short local_84; | |
undefined4 local_80; | |
undefined4 local_7c; | |
int local_2c; | |
puVar33 = *(ushort **)(param_1 + 0x18); | |
uVar2 = *puVar33; | |
if (uVar2 != 0) { | |
iVar19 = *(int *)(puVar33 + 2); | |
puVar31 = *(undefined4 **)(iVar19 + 4); | |
if (puVar31 != (undefined4 *)0x0) { | |
puVar31 = (undefined4 *)*puVar31; | |
} | |
if (uVar2 != 1) { | |
puVar30 = *(undefined4 **)(iVar19 + 0x10); | |
if (puVar30 != (undefined4 *)0x0) { | |
puVar30 = (undefined4 *)*puVar30; | |
} | |
if (uVar2 != 2) { | |
piVar29 = *(int **)(iVar19 + 0x1c); | |
if (piVar29 == (int *)0x0) { | |
if (*(ushort *)(iVar19 + 0x18) < 2) { | |
// WARNING: Does not return | |
pcVar1 = (code *)software_udf(0xff,0x800ad8e); | |
(*pcVar1)(); | |
} | |
iVar19 = 0; | |
iVar32 = 0; | |
local_2c = 0; | |
} | |
else { | |
iVar32 = *piVar29; | |
if (*(ushort *)(iVar19 + 0x18) < 2) { | |
local_2c = 0; | |
} | |
else { | |
local_2c = piVar29[1]; | |
} | |
iVar19 = piVar29[2]; | |
} | |
iVar17 = puVar31[3]; | |
iVar16 = puVar30[3]; | |
sVar3 = *(short *)(iVar17 + 4); | |
puVar20 = *(uint **)(param_1 + 0x3c); | |
sVar4 = *(short *)(iVar16 + 4); | |
uVar23 = *(uint *)(param_1 + 0x28); | |
uVar26 = *(uint *)(param_1 + 0x2c); | |
sVar5 = *(short *)(iVar16 + 0xc); | |
sVar6 = *(short *)(iVar16 + 8); | |
uVar24 = *puVar20; | |
uVar27 = puVar20[1]; | |
sVar7 = *(short *)(iVar17 + 0xc); | |
sVar8 = *(short *)(iVar17 + 8); | |
uVar25 = *(uint *)(param_1 + 0x30); | |
uVar28 = *(uint *)(param_1 + 0x34); | |
uVar18 = puVar20[2]; | |
uVar21 = puVar20[3]; | |
sVar9 = *(short *)(param_1 + 0x1c); | |
sVar10 = *(short *)(param_1 + 0x44); | |
sVar11 = *(short *)(param_1 + 0x4c); | |
sVar12 = *(short *)(param_1 + 0x50); | |
sVar13 = **(short **)(param_1 + 0x58); | |
sVar14 = (*(short **)(param_1 + 0x58))[2]; | |
local_a8 = *(int *)(param_1 + 0x20); | |
local_84 = (short)*(undefined4 *)(*(int *)(iVar32 + 0xc) + 4); | |
sVar15 = (short)*(undefined4 *)(*(int *)(iVar32 + 0xc) + 8); | |
if (iVar19 == 0) { | |
if (local_a8 != 0) { | |
local_a8 = *(int *)(local_a8 + 8); | |
} | |
local_80 = 1; | |
local_7c = 0; | |
} | |
else { | |
puVar22 = *(undefined4 **)(iVar19 + 0x18); | |
if (puVar22 == (undefined4 *)0x0) { | |
if (local_a8 != 0) { | |
local_a8 = *(int *)(local_a8 + 8); | |
} | |
local_80 = 1; | |
local_7c = 0; | |
} | |
else { | |
local_a8 = puVar22[2]; | |
local_7c = FUN_0800cfd0(*puVar22,puVar22[1]); | |
puVar22 = *(undefined4 **)(iVar19 + 0x18); | |
if (puVar22 == (undefined4 *)0x0) { | |
puVar33 = *(ushort **)(param_1 + 0x18); | |
local_80 = 1; | |
uVar2 = *puVar33; | |
} | |
else { | |
local_80 = FUN_0800cfd0(*puVar22,puVar22[1]); | |
puVar33 = *(ushort **)(param_1 + 0x18); | |
uVar2 = *puVar33; | |
} | |
} | |
} | |
iVar16 = (int)(short)(((short)uVar25 + -1) * (local_84 + -1) + local_84); | |
iVar19 = (int)(short)(((short)uVar28 + -1) * (sVar15 + -1) + sVar15); | |
if (3 < uVar2) { | |
piVar29 = *(int **)(*(int *)(puVar33 + 2) + 0x28); | |
if (piVar29 == (int *)0x0) { | |
// WARNING: Does not return | |
pcVar1 = (code *)software_udf(0xff,0x800ad94); | |
(*pcVar1)(); | |
} | |
iVar17 = *piVar29; | |
if (iVar17 != 0) { | |
iVar17 = *(int *)(*(int *)(iVar17 + 0x18) + 8); | |
} | |
FUN_0800b894(*(undefined4 *)(puVar31[6] + 8),*(undefined4 *)(puVar30[6] + 8), | |
*(undefined4 *)(*(int *)(iVar32 + 0x18) + 8), | |
*(undefined4 *)(*(int *)(local_2c + 0x18) + 8), | |
*(undefined4 *)(*(int *)(piVar29[1] + 0x18) + 8),iVar17,(int)sVar3,(int)sVar4 | |
,(int)sVar8,(int)sVar7,(int)sVar6,(int)sVar5,(int)local_84,(int)sVar15, | |
uVar27 & 0xffff,uVar24 & 0xffff,uVar23 & 0xffff,uVar26 & 0xffff,iVar19,iVar16 | |
,uVar25 & 0xffff,uVar28 & 0xffff,(int)sVar9, | |
(int)(short)((short)((int)((sVar8 - iVar16) + (uVar27 & 0xffff) + | |
(uVar21 & 0xffff)) / (int)(uVar23 & 0xffff)) + 1), | |
(int)(short)((short)((int)((sVar7 - iVar19) + (uVar24 & 0xffff) + | |
(uVar18 & 0xffff)) / (int)(uVar26 & 0xffff)) + 1), | |
*(undefined4 *)(param_1 + 0x24),local_a8,local_7c,local_80, | |
*(undefined4 *)(param_1 + 0x5c),(int)sVar10,(int)*(short *)(param_1 + 0x48), | |
(int)sVar11,(int)sVar12,(int)sVar14,(int)sVar13); | |
return; | |
} | |
} | |
} | |
} | |
// WARNING: Does not return | |
pcVar1 = (code *)software_udf(0xff,0x800ad42); | |
(*pcVar1)(); | |
} | |
void FUN_0800af78(int param_1) | |
{ | |
uint uVar1; | |
int *piVar2; | |
code *pcVar3; | |
short sVar4; | |
undefined4 uVar5; | |
float fVar6; | |
uint uVar7; | |
int iVar8; | |
byte *pbVar9; | |
undefined4 *puVar10; | |
uint uVar11; | |
undefined1 *puVar12; | |
uint uVar13; | |
int iVar14; | |
uint *puVar15; | |
uint uVar16; | |
uint uVar17; | |
int iVar18; | |
int iVar19; | |
byte *pbVar20; | |
byte *pbVar21; | |
byte *pbVar22; | |
uint uVar23; | |
ushort *puVar24; | |
byte *pbVar25; | |
int iVar26; | |
undefined1 *puVar27; | |
undefined1 *puVar28; | |
undefined1 *puVar29; | |
undefined1 *puVar30; | |
uint in_fpscr; | |
float fVar31; | |
float fVar32; | |
float fVar33; | |
float fVar34; | |
float fVar35; | |
uint *local_44; | |
fVar6 = DAT_0800b35c; | |
sVar4 = **(short **)(param_1 + 0x18); | |
if ((sVar4 == 0) || (puVar24 = *(ushort **)(*(short **)(param_1 + 0x18) + 2), sVar4 == 1)) { | |
// WARNING: Does not return | |
pcVar3 = (code *)software_udf(0xff,0x800af8c); | |
(*pcVar3)(); | |
} | |
local_44 = *(uint **)(puVar24 + 8); | |
if (local_44 != (uint *)0x0) { | |
local_44 = (uint *)*local_44; | |
} | |
uVar17 = (uint)*puVar24; | |
uVar7 = 0; | |
for (uVar13 = 0; | |
((uVar17 != uVar13 && (*(int *)(puVar24 + 2) != 0)) && | |
(iVar14 = *(int *)(*(int *)(puVar24 + 2) + uVar13 * 4), iVar14 != 0)); uVar13 = uVar13 + 1) { | |
if ((uint)(**(int **)(iVar14 + 0x18) << 0xb) >> 0x1c == 1) { | |
uVar23 = 1; | |
} | |
else { | |
uVar23 = 2; | |
} | |
uVar7 = uVar7 | uVar23; | |
} | |
iVar14 = *(int *)local_44[6]; | |
puVar27 = (undefined1 *)((int *)local_44[6])[2]; | |
if ((uint)(iVar14 << 0xb) >> 0x1c == 1) { | |
if (uVar7 == 1) { | |
uVar7 = 0; | |
while( true ) { | |
if (uVar17 <= uVar7) { | |
return; | |
} | |
if (*(int *)(puVar24 + 2) == 0) break; | |
iVar14 = *(int *)(*(int *)(puVar24 + 2) + uVar7 * 4); | |
if (iVar14 == 0) { | |
return; | |
} | |
iVar8 = *(int *)(param_1 + 0x1c); | |
iVar18 = *(int *)(*(int *)(iVar14 + 0x14) + iVar8 * 4); | |
uVar23 = *(int *)(*(int *)(iVar14 + 0xc) + iVar8 * 4) * iVar18; | |
iVar8 = *(int *)(local_44[3] + iVar8 * 4); | |
uVar13 = FUN_0800cfd0(**(undefined4 **)(iVar14 + 0x18),(*(undefined4 **)(iVar14 + 0x18))[1]) | |
; | |
uVar17 = *(uint *)(*(int *)(iVar14 + 0x18) + 8); | |
uVar13 = uVar23 * (uVar13 / uVar23) + uVar17; | |
puVar29 = puVar27; | |
for (; uVar17 < uVar13; uVar17 = uVar17 + uVar23) { | |
FUN_0800cdac(uVar17,puVar29,uVar23); | |
puVar29 = puVar29 + iVar8 * iVar18; | |
} | |
uVar17 = (uint)*puVar24; | |
puVar27 = puVar27 + uVar23; | |
uVar7 = uVar7 + 1; | |
} | |
return; | |
} | |
if ((int)(uVar7 << 0x1e) < 0) { | |
return; | |
} | |
uVar7 = *local_44; | |
if (uVar7 != 0) goto LAB_0800b086; | |
LAB_0800b072: | |
fVar34 = 1.0; | |
} | |
else { | |
if (uVar7 == 1) { | |
return; | |
} | |
uVar7 = *local_44; | |
if (uVar7 == 0) { | |
fVar34 = 1.0; | |
fVar35 = 1.0; | |
goto LAB_0800b0ac; | |
} | |
LAB_0800b086: | |
if ((*(undefined4 **)(uVar7 + 4) == (undefined4 *)0x0) || (*(short *)(uVar7 + 2) == 0)) | |
goto LAB_0800b072; | |
fVar34 = *(float *)**(undefined4 **)(uVar7 + 4); | |
} | |
fVar35 = 1.0 / fVar34; | |
LAB_0800b0ac: | |
iVar14 = iVar14 << 8; | |
uVar13 = 0; | |
do { | |
if (((uVar17 <= uVar13) || (*(int *)(puVar24 + 2) == 0)) || | |
(puVar15 = *(uint **)(*(int *)(puVar24 + 2) + uVar13 * 4), puVar15 == (uint *)0x0)) { | |
return; | |
} | |
iVar18 = *(int *)(param_1 + 0x1c); | |
iVar8 = *(int *)(puVar15[5] + iVar18 * 4); | |
iVar26 = *(int *)(local_44[3] + iVar18 * 4) * iVar8; | |
iVar19 = *(int *)puVar15[6]; | |
uVar23 = iVar8 * *(int *)(puVar15[3] + iVar18 * 4); | |
uVar17 = FUN_0800cfd0(iVar19,((int *)puVar15[6])[1]); | |
pbVar20 = *(byte **)(puVar15[6] + 8); | |
pbVar25 = pbVar20 + uVar23 * (uVar17 / uVar23); | |
if ((uint)(iVar19 << 0xb) >> 0x1c == 1) { | |
uVar17 = uVar23; | |
if ((int)uVar23 < 0) { | |
uVar17 = uVar23 + 3; | |
} | |
iVar8 = (int)uVar17 >> 2; | |
if (iVar14 < 0) { | |
if (uVar7 == 0) { | |
iVar18 = 0; | |
} | |
else if (*(int *)(uVar7 + 4) == 0) { | |
iVar18 = 0; | |
} | |
else if (*(short *)(uVar7 + 2) == 0) { | |
iVar18 = 0; | |
} | |
else { | |
iVar18 = (int)**(char **)(*(int *)(uVar7 + 4) + 4); | |
} | |
if ((pbVar20 < pbVar25) && (3 < (int)uVar23)) { | |
fVar32 = (float)VectorSignedToFloat(iVar18,(byte)(in_fpscr >> 0x15) & 3); | |
puVar29 = puVar27; | |
do { | |
iVar18 = 0; | |
pbVar22 = pbVar20; | |
puVar30 = puVar29; | |
do { | |
while( true ) { | |
fVar31 = (float)VectorSignedToFloat((uint)*pbVar22,(byte)(in_fpscr >> 0x15) & 3); | |
fVar31 = fVar32 + fVar31 * fVar35; | |
in_fpscr = in_fpscr & 0xfffffff; | |
if (fVar31 < 0.0) break; | |
uVar5 = SignedSaturate((int)(fVar31 + 0.5),7); | |
SignedDoesSaturate((int)(fVar31 + 0.5),7); | |
iVar18 = iVar18 + 1; | |
*puVar30 = (char)uVar5; | |
pbVar22 = pbVar22 + 1; | |
puVar30 = puVar30 + 1; | |
if (iVar8 <= iVar18) goto LAB_0800b3d4; | |
} | |
iVar19 = (int)(fVar31 - fVar6); | |
uVar5 = SignedSaturate(iVar19,7); | |
SignedDoesSaturate(iVar19,7); | |
iVar18 = iVar18 + 1; | |
*puVar30 = (char)uVar5; | |
pbVar22 = pbVar22 + 1; | |
puVar30 = puVar30 + 1; | |
} while (iVar18 < iVar8); | |
LAB_0800b3d4: | |
iVar18 = iVar8; | |
if ((int)uVar23 < 4) { | |
iVar18 = 1; | |
} | |
pbVar20 = pbVar20 + iVar18; | |
puVar29 = puVar29 + iVar18 + (iVar26 - iVar8); | |
} while (pbVar20 < pbVar25); | |
} | |
} | |
else { | |
if (((uVar7 == 0) || (*(int *)(uVar7 + 4) == 0)) || (*(short *)(uVar7 + 2) == 0)) { | |
fVar32 = 0.5; | |
} | |
else { | |
fVar32 = (float)VectorSignedToFloat((uint)**(byte **)(*(int *)(uVar7 + 4) + 4), | |
(byte)(in_fpscr >> 0x15) & 3); | |
fVar32 = fVar32 + 0.5; | |
} | |
if ((pbVar20 < pbVar25) && (puVar29 = puVar27, 3 < (int)uVar23)) { | |
do { | |
iVar18 = 0; | |
pbVar22 = pbVar20; | |
puVar30 = puVar29; | |
do { | |
fVar31 = (float)VectorSignedToFloat((uint)*pbVar22,(byte)(in_fpscr >> 0x15) & 3); | |
iVar19 = (int)(fVar32 + fVar31 * fVar35); | |
uVar5 = UnsignedSaturate(iVar19,8); | |
UnsignedDoesSaturate(iVar19,8); | |
iVar18 = iVar18 + 1; | |
*puVar30 = (char)uVar5; | |
pbVar22 = pbVar22 + 1; | |
puVar30 = puVar30 + 1; | |
} while (iVar18 < iVar8); | |
iVar18 = iVar8; | |
if ((int)uVar23 < 4) { | |
iVar18 = 1; | |
} | |
pbVar20 = pbVar20 + iVar18; | |
puVar29 = puVar29 + iVar18 + (iVar26 - iVar8); | |
} while (pbVar20 < pbVar25); | |
} | |
} | |
puVar29 = puVar27 + iVar8; | |
} | |
else { | |
uVar17 = *puVar15; | |
if (uVar17 == 0) { | |
fVar32 = 1.0; | |
uVar11 = 0; | |
} | |
else { | |
puVar10 = *(undefined4 **)(uVar17 + 4); | |
if (puVar10 == (undefined4 *)0x0) { | |
fVar32 = 1.0; | |
uVar11 = 0; | |
} | |
else if (*(short *)(uVar17 + 2) == 0) { | |
fVar32 = 1.0; | |
uVar11 = 0; | |
} | |
else { | |
fVar32 = *(float *)*puVar10; | |
uVar11 = (uint)*(char *)puVar10[1]; | |
} | |
} | |
if (uVar7 == 0) { | |
uVar16 = 0; | |
} | |
else if (*(int *)(uVar7 + 4) == 0) { | |
uVar16 = 0; | |
} | |
else { | |
uVar16 = (uint)*(ushort *)(uVar7 + 2); | |
if (uVar16 != 0) { | |
uVar16 = (uint)**(char **)(*(int *)(uVar7 + 4) + 4); | |
} | |
} | |
uVar1 = in_fpscr & 0xfffffff; | |
in_fpscr = uVar1 | (uint)(fVar34 == fVar32) << 0x1e; | |
if (((byte)(in_fpscr >> 0x1e) == 0) || (uVar11 != uVar16)) { | |
if (iVar14 < 0) { | |
if (uVar17 != 0) { | |
piVar2 = (int *)(uVar17 + 4); | |
if (*piVar2 == 0) { | |
uVar17 = 0; | |
} | |
else { | |
uVar17 = (uint)*(ushort *)(uVar17 + 2); | |
if (uVar17 != 0) { | |
uVar17 = (uint)**(char **)(*piVar2 + 4); | |
} | |
} | |
} | |
if (uVar7 == 0) { | |
uVar11 = 0; | |
} | |
else if (*(int *)(uVar7 + 4) == 0) { | |
uVar11 = 0; | |
} | |
else { | |
uVar11 = (uint)*(ushort *)(uVar7 + 2); | |
if (uVar11 != 0) { | |
uVar11 = (uint)**(char **)(*(int *)(uVar7 + 4) + 4); | |
} | |
} | |
in_fpscr = uVar1 | (uint)(fVar34 == fVar32) << 0x1e; | |
if (((byte)(in_fpscr >> 0x1e) == 0) || (uVar17 != uVar11)) { | |
if ((pbVar20 < pbVar25) && (0 < (int)uVar23)) { | |
puVar29 = puVar27 + uVar23; | |
fVar31 = (float)VectorSignedToFloat(uVar11,(byte)(in_fpscr >> 0x15) & 3); | |
puVar30 = puVar29; | |
puVar28 = puVar27; | |
pbVar22 = pbVar20; | |
do { | |
do { | |
fVar33 = (float)VectorSignedToFloat((int)(char)*pbVar20 - uVar17, | |
(byte)(in_fpscr >> 0x15) & 3); | |
fVar33 = fVar31 + fVar33 * fVar32 * fVar35; | |
in_fpscr = in_fpscr & 0xfffffff; | |
if (fVar33 < 0.0) { | |
fVar33 = fVar33 - fVar6; | |
} | |
else { | |
fVar33 = fVar33 + 0.5; | |
} | |
uVar5 = SignedSaturate((int)fVar33,7); | |
SignedDoesSaturate((int)fVar33,7); | |
puVar12 = puVar27 + 1; | |
*puVar27 = (char)uVar5; | |
pbVar20 = pbVar20 + 1; | |
puVar27 = puVar12; | |
} while (puVar12 != puVar30); | |
pbVar20 = pbVar22 + uVar23; | |
puVar27 = puVar28 + iVar26; | |
puVar30 = puVar30 + iVar26; | |
puVar28 = puVar27; | |
pbVar22 = pbVar20; | |
} while (pbVar20 < pbVar25); | |
goto LAB_0800b298; | |
} | |
} | |
else { | |
puVar29 = puVar27; | |
if (pbVar20 < pbVar25) { | |
do { | |
pbVar22 = pbVar20 + uVar23; | |
FUN_0800cdac(pbVar20,puVar29,uVar23); | |
pbVar20 = pbVar22; | |
puVar29 = puVar29 + iVar26; | |
} while (pbVar22 < pbVar25); | |
goto LAB_0800b456; | |
} | |
} | |
} | |
else { | |
uVar11 = 0; | |
if (((uVar17 != 0) && (*(int *)(uVar17 + 4) != 0)) && (*(short *)(uVar17 + 2) != 0)) { | |
uVar11 = (uint)**(byte **)(*(int *)(uVar17 + 4) + 4); | |
} | |
uVar17 = uVar7; | |
if (uVar7 != 0) { | |
if (*(int *)(uVar7 + 4) == 0) { | |
uVar17 = 0; | |
} | |
else { | |
uVar17 = (uint)*(ushort *)(uVar7 + 2); | |
if (*(ushort *)(uVar7 + 2) != 0) { | |
uVar17 = (uint)**(byte **)(*(int *)(uVar7 + 4) + 4); | |
} | |
} | |
} | |
in_fpscr = uVar1 | (uint)(fVar34 == fVar32) << 0x1e; | |
if (((byte)(in_fpscr >> 0x1e) == 0) || (uVar11 != uVar17)) { | |
if ((pbVar20 < pbVar25) && (0 < (int)uVar23)) { | |
fVar31 = (float)VectorSignedToFloat(uVar17,(byte)(in_fpscr >> 0x15) & 3); | |
pbVar9 = pbVar20 + uVar23; | |
puVar29 = puVar27; | |
puVar30 = puVar27; | |
pbVar22 = pbVar9; | |
while( true ) { | |
do { | |
pbVar21 = pbVar20 + 1; | |
fVar33 = (float)VectorSignedToFloat(*pbVar20 - uVar11,(byte)(in_fpscr >> 0x15) & 3 | |
); | |
iVar8 = (int)(fVar31 + 0.5 + fVar33 * fVar32 * fVar35); | |
uVar5 = UnsignedSaturate(iVar8,8); | |
UnsignedDoesSaturate(iVar8,8); | |
*puVar29 = (char)uVar5; | |
pbVar20 = pbVar21; | |
puVar29 = puVar29 + 1; | |
} while (pbVar21 != pbVar9); | |
pbVar9 = pbVar21 + uVar23; | |
puVar29 = puVar30 + iVar26; | |
if (pbVar25 <= pbVar22) break; | |
pbVar20 = pbVar22; | |
puVar30 = puVar29; | |
pbVar22 = pbVar22 + uVar23; | |
} | |
} | |
} | |
else { | |
puVar29 = puVar27; | |
if (pbVar20 < pbVar25) { | |
do { | |
pbVar22 = pbVar20 + uVar23; | |
FUN_0800cdac(pbVar20,puVar29,uVar23); | |
pbVar20 = pbVar22; | |
puVar29 = puVar29 + iVar26; | |
} while (pbVar22 < pbVar25); | |
goto LAB_0800b456; | |
} | |
} | |
} | |
} | |
else { | |
puVar29 = puVar27; | |
if (pbVar20 < pbVar25) { | |
do { | |
pbVar22 = pbVar20 + uVar23; | |
FUN_0800cdac(pbVar20,puVar29,uVar23); | |
pbVar20 = pbVar22; | |
puVar29 = puVar29 + iVar26; | |
} while (pbVar22 < pbVar25); | |
LAB_0800b456: | |
puVar29 = puVar27 + uVar23; | |
goto LAB_0800b298; | |
} | |
} | |
puVar29 = puVar27 + uVar23; | |
} | |
LAB_0800b298: | |
uVar17 = (uint)*puVar24; | |
uVar13 = uVar13 + 1; | |
puVar27 = puVar29; | |
} while( true ); | |
} | |
void FUN_0800b894(float *param_1,int param_2,int param_3,float *param_4,float *param_5,int param_6, | |
short param_7,short param_8,short param_9,short param_10,short param_11, | |
short param_12,short param_13,short param_14,ushort param_15,ushort param_16, | |
ushort param_17,ushort param_18,short param_19) | |
{ | |
short sVar1; | |
short sVar2; | |
int iVar3; | |
float fVar4; | |
int iVar5; | |
uint uVar6; | |
uint uVar7; | |
float *pfVar8; | |
int iVar9; | |
float *pfVar10; | |
float *pfVar11; | |
ushort uVar12; | |
short sVar13; | |
uint uVar14; | |
int iVar15; | |
int iVar16; | |
int iVar17; | |
int iVar18; | |
uint uVar19; | |
int iVar20; | |
float *pfVar21; | |
int iVar22; | |
int iVar23; | |
float *pfVar24; | |
int iVar25; | |
int iVar26; | |
int iVar27; | |
int iVar28; | |
uint uVar29; | |
int iVar30; | |
uint uVar31; | |
int iVar32; | |
uint uVar33; | |
uint uVar34; | |
int iVar35; | |
float *pfVar36; | |
float fVar37; | |
float fVar38; | |
short in_stack_0000004c; | |
ushort in_stack_00000050; | |
code *in_stack_00000054; | |
int in_stack_00000058; | |
int in_stack_0000005c; | |
int in_stack_00000060; | |
code *in_stack_00000064; | |
undefined2 in_stack_00000068; | |
short in_stack_0000006c; | |
undefined2 in_stack_00000070; | |
short in_stack_00000074; | |
undefined2 in_stack_00000078; | |
short in_stack_0000007c; | |
int local_124; | |
uint local_120; | |
float *local_11c; | |
uint local_118; | |
float *local_110; | |
int local_10c; | |
int local_e8; | |
float *local_e4; | |
float *local_e0; | |
uint local_dc; | |
int local_d8; | |
uint local_d0; | |
float *local_c8; | |
float *local_b8; | |
int local_94; | |
float *local_90; | |
uint local_88; | |
int local_74; | |
fVar4 = DAT_0800baa0; | |
iVar25 = (int)in_stack_0000004c; | |
uVar14 = (uint)in_stack_0000006c; | |
iVar5 = (int)param_8; | |
iVar9 = iVar5 * iVar25 * uVar14; | |
uVar33 = (uint)param_17; | |
uVar6 = (uint)param_13; | |
iVar30 = (int)param_9; | |
iVar22 = (int)param_7; | |
uVar7 = (uint)param_15; | |
uVar34 = (uint)param_18; | |
local_d0 = (uint)param_16; | |
local_d8 = -local_d0; | |
local_dc = (uint)in_stack_0000007c; | |
if (param_12 < 1) { | |
return; | |
} | |
iVar15 = iVar22 * uVar6 * (int)param_14 * 4; | |
iVar16 = (ushort)(param_8 - 1) + 1; | |
iVar17 = iVar22 * uVar34 * iVar30; | |
pfVar10 = param_5 + iVar9; | |
iVar27 = iVar22 * 4; | |
local_c8 = (float *)(local_d8 * iVar30 * iVar27 + (int)param_1); | |
iVar3 = -uVar7; | |
sVar2 = 0; | |
local_e4 = param_5; | |
local_94 = in_stack_00000058; | |
sVar1 = 0; | |
local_88 = local_dc; | |
local_74 = param_2; | |
LAB_0800b9f8: | |
uVar12 = in_stack_00000050 - 1; | |
if (0 < (short)in_stack_00000050) goto LAB_0800bad4; | |
do { | |
in_stack_00000050 = uVar12; | |
if ((int)((uint)uVar12 << 0x10) < 0) { | |
pfVar8 = local_e4 + -(iVar25 * iVar5 * local_dc); | |
if (pfVar8 < param_5) { | |
pfVar8 = pfVar8 + iVar9; | |
} | |
if (((param_5 < pfVar8) && (uVar14 != local_dc)) && | |
(pfVar11 = local_e4, pfVar21 = pfVar8, pfVar8 < pfVar10)) { | |
do { | |
pfVar24 = pfVar21 + 1; | |
*pfVar11 = *pfVar21; | |
pfVar11 = pfVar11 + 1; | |
pfVar21 = pfVar24; | |
} while (pfVar24 < pfVar10); | |
local_e4 = (float *)((int)local_e4 + ((int)pfVar10 + (-1 - (int)pfVar8) & 0xfffffffcU) + 4); | |
} | |
sVar2 = (sVar2 + in_stack_0000006c) - (short)local_dc; | |
local_dc = (uint)(short)((short)local_dc + in_stack_00000074); | |
for (local_e4 = local_e4 + iVar25 * in_stack_00000074 * iVar5; pfVar10 <= local_e4; | |
local_e4 = local_e4 + -iVar9) { | |
} | |
} | |
while( true ) { | |
if ((int)uVar14 <= (int)local_dc) { | |
sVar1 = sVar1 + 1; | |
local_d8 = local_d8 + uVar34; | |
local_d0 = local_d0 - uVar34; | |
local_c8 = local_c8 + iVar17; | |
local_dc = (uint)(short)((short)local_dc - in_stack_00000074); | |
(*in_stack_00000064) | |
(param_5,in_stack_0000004c,in_stack_0000006c - sVar2,param_8,in_stack_00000068, | |
in_stack_0000006c,in_stack_00000078,local_88 & 0xffff,in_stack_00000070, | |
in_stack_00000074,param_11,1,local_74); | |
iVar18 = local_88 - (int)in_stack_00000074; | |
local_88 = (uint)(short)((ushort)iVar18 & ~(ushort)(iVar18 >> 0x1f)); | |
local_74 = local_74 + iVar5 * param_11 * 4; | |
if (param_12 <= sVar1) { | |
return; | |
} | |
goto LAB_0800b9f8; | |
} | |
uVar12 = in_stack_00000050 - 1; | |
local_d8 = local_d8 + uVar34; | |
local_d0 = local_d0 - uVar34; | |
local_c8 = local_c8 + iVar17; | |
if (param_12 <= sVar1) { | |
return; | |
} | |
if ((short)in_stack_00000050 < 1) break; | |
LAB_0800bad4: | |
uVar19 = local_d0; | |
local_e0 = param_1; | |
if (-1 < local_d8) { | |
local_e0 = local_c8; | |
uVar19 = 0; | |
} | |
if ((int)param_19 < (int)((int)param_10 + local_d0)) { | |
iVar18 = (int)param_19 - uVar19; | |
} | |
else { | |
iVar18 = ((int)param_10 + local_d0) - uVar19; | |
} | |
local_90 = param_4; | |
if ((param_6 == 0) || (param_3 + 0xf8000000U < 0x1000000)) { | |
if (0 < iVar5) { | |
iVar32 = param_3; | |
pfVar8 = local_e4; | |
do { | |
fVar37 = fVar4; | |
if (param_4 != (float *)0x0) { | |
fVar37 = *local_90; | |
local_90 = local_90 + 1; | |
} | |
if (iVar25 != 0) { | |
local_120 = uVar7 + iVar30; | |
local_10c = 0; | |
local_124 = iVar3; | |
local_11c = (float *)((int)local_e0 + iVar27 * iVar3); | |
local_118 = uVar7; | |
local_110 = pfVar8; | |
do { | |
if (local_124 < 0) { | |
iVar28 = uVar6 * uVar19 + local_118; | |
uVar29 = local_118; | |
pfVar11 = local_e0; | |
} | |
else { | |
uVar29 = 0; | |
pfVar11 = local_11c; | |
iVar28 = uVar6 * uVar19; | |
} | |
if (local_120 < uVar6) { | |
iVar35 = local_120 - uVar29; | |
} | |
else { | |
iVar35 = uVar6 - uVar29; | |
} | |
pfVar21 = (float *)(iVar28 * iVar27 + iVar32); | |
uVar29 = iVar22 * iVar35; | |
fVar38 = fVar37; | |
if (0 < iVar18) { | |
uVar31 = uVar29 & 0xfffffff0; | |
iVar23 = (uVar31 - 1 >> 4) + 1; | |
iVar28 = 0; | |
do { | |
if ((int)uVar31 < 1) { | |
iVar20 = 0; | |
} | |
else { | |
iVar20 = 0; | |
pfVar24 = pfVar21; | |
pfVar36 = pfVar11; | |
do { | |
iVar20 = iVar20 + 0x10; | |
fVar38 = fVar38 + pfVar36[1] * pfVar24[1] + *pfVar36 * *pfVar24 + | |
pfVar36[2] * pfVar24[2] + pfVar36[3] * pfVar24[3] + | |
pfVar36[4] * pfVar24[4] + pfVar36[5] * pfVar24[5] + | |
pfVar36[6] * pfVar24[6] + pfVar36[7] * pfVar24[7] + | |
pfVar36[8] * pfVar24[8] + pfVar36[9] * pfVar24[9] + | |
pfVar36[10] * pfVar24[10] + pfVar36[0xb] * pfVar24[0xb] + | |
pfVar36[0xc] * pfVar24[0xc] + pfVar36[0xd] * pfVar24[0xd] | |
+ pfVar36[0xe] * pfVar24[0xe] + | |
pfVar36[0xf] * pfVar24[0xf]; | |
pfVar24 = pfVar24 + 0x10; | |
pfVar36 = pfVar36 + 0x10; | |
} while (iVar20 < (int)uVar31); | |
pfVar11 = pfVar11 + iVar23 * 0x10; | |
pfVar21 = pfVar21 + iVar23 * 0x10; | |
iVar20 = iVar23 * 0x10; | |
} | |
iVar26 = iVar20; | |
pfVar24 = pfVar21; | |
pfVar36 = pfVar11; | |
if (uVar29 - iVar20 != 0 && iVar20 <= (int)uVar29) { | |
do { | |
iVar26 = iVar26 + 1; | |
fVar38 = fVar38 + *pfVar24 * *pfVar36; | |
pfVar24 = pfVar24 + 1; | |
pfVar36 = pfVar36 + 1; | |
} while (uVar29 - iVar26 != 0); | |
pfVar21 = pfVar21 + (uVar29 - iVar20); | |
pfVar11 = pfVar11 + (uVar29 - iVar20); | |
} | |
iVar28 = iVar28 + 1; | |
pfVar11 = (float *)((int)pfVar11 + (iVar30 - iVar35) * iVar27); | |
pfVar21 = (float *)((int)pfVar21 + (uVar6 - iVar35) * iVar27); | |
} while (iVar18 != iVar28); | |
} | |
*local_110 = fVar38; | |
local_124 = local_124 + uVar33; | |
local_110 = local_110 + iVar5; | |
local_118 = local_118 - uVar33; | |
local_11c = local_11c + uVar33 * iVar22; | |
local_120 = local_120 - uVar33; | |
local_10c = local_10c + 1; | |
} while (iVar25 != local_10c); | |
} | |
iVar32 = iVar32 + iVar15; | |
pfVar8 = pfVar8 + 1; | |
} while (pfVar8 != local_e4 + iVar16); | |
} | |
} | |
else if (0 < iVar5) { | |
local_b8 = local_e4; | |
local_e8 = param_3; | |
do { | |
FUN_0800cdac(local_e8,param_6,iVar15); | |
fVar37 = fVar4; | |
if (param_4 != (float *)0x0) { | |
fVar37 = *local_90; | |
local_90 = local_90 + 1; | |
} | |
if (iVar25 != 0) { | |
local_120 = uVar7 + iVar30; | |
local_110 = local_b8; | |
local_10c = 0; | |
local_124 = iVar3; | |
local_11c = (float *)((int)local_e0 + iVar27 * iVar3); | |
local_118 = uVar7; | |
do { | |
if (local_124 < 0) { | |
iVar32 = uVar6 * uVar19 + local_118; | |
pfVar8 = local_e0; | |
uVar29 = local_118; | |
} | |
else { | |
pfVar8 = local_11c; | |
iVar32 = uVar6 * uVar19; | |
uVar29 = 0; | |
} | |
if (local_120 < uVar6) { | |
iVar28 = local_120 - uVar29; | |
} | |
else { | |
iVar28 = uVar6 - uVar29; | |
} | |
pfVar11 = (float *)(iVar32 * iVar27 + param_6); | |
uVar29 = iVar22 * iVar28; | |
fVar38 = fVar37; | |
if (0 < iVar18) { | |
uVar31 = uVar29 & 0xfffffff0; | |
iVar32 = (uVar31 - 1 >> 4) + 1; | |
iVar35 = 0; | |
do { | |
if ((int)uVar31 < 1) { | |
iVar23 = 0; | |
} | |
else { | |
iVar23 = 0; | |
pfVar21 = pfVar8; | |
pfVar24 = pfVar11; | |
do { | |
iVar23 = iVar23 + 0x10; | |
fVar38 = fVar38 + pfVar21[1] * pfVar24[1] + *pfVar21 * *pfVar24 + | |
pfVar21[2] * pfVar24[2] + pfVar21[3] * pfVar24[3] + | |
pfVar21[4] * pfVar24[4] + pfVar21[5] * pfVar24[5] + | |
pfVar21[6] * pfVar24[6] + pfVar21[7] * pfVar24[7] + | |
pfVar21[8] * pfVar24[8] + pfVar21[9] * pfVar24[9] + | |
pfVar21[10] * pfVar24[10] + pfVar21[0xb] * pfVar24[0xb] + | |
pfVar21[0xc] * pfVar24[0xc] + pfVar21[0xd] * pfVar24[0xd] + | |
pfVar21[0xe] * pfVar24[0xe] + pfVar21[0xf] * pfVar24[0xf]; | |
pfVar21 = pfVar21 + 0x10; | |
pfVar24 = pfVar24 + 0x10; | |
} while (iVar23 < (int)uVar31); | |
pfVar8 = pfVar8 + iVar32 * 0x10; | |
pfVar11 = pfVar11 + iVar32 * 0x10; | |
iVar23 = iVar32 * 0x10; | |
} | |
pfVar21 = pfVar11; | |
iVar20 = iVar23; | |
pfVar24 = pfVar8; | |
if (uVar29 - iVar23 != 0 && iVar23 <= (int)uVar29) { | |
do { | |
iVar20 = iVar20 + 1; | |
fVar38 = fVar38 + *pfVar21 * *pfVar24; | |
pfVar21 = pfVar21 + 1; | |
pfVar24 = pfVar24 + 1; | |
} while (uVar29 - iVar20 != 0); | |
pfVar11 = pfVar11 + (uVar29 - iVar23); | |
pfVar8 = pfVar8 + (uVar29 - iVar23); | |
} | |
iVar35 = iVar35 + 1; | |
pfVar8 = (float *)((int)pfVar8 + (iVar30 - iVar28) * iVar27); | |
pfVar11 = (float *)((int)pfVar11 + (uVar6 - iVar28) * iVar27); | |
} while (iVar18 != iVar35); | |
} | |
*local_110 = fVar38; | |
local_124 = local_124 + uVar33; | |
local_110 = local_110 + iVar5; | |
local_118 = local_118 - uVar33; | |
local_11c = local_11c + uVar33 * iVar22; | |
local_120 = local_120 - uVar33; | |
local_10c = local_10c + 1; | |
} while (iVar25 != local_10c); | |
} | |
local_e8 = local_e8 + iVar15; | |
local_b8 = local_b8 + 1; | |
} while (local_b8 != local_e4 + iVar16); | |
} | |
if (0 < iVar25) { | |
if (in_stack_00000054 == (code *)0x0) { | |
sVar13 = 0; | |
do { | |
local_e4 = local_e4 + iVar5; | |
pfVar8 = pfVar10; | |
if (pfVar10 <= local_e4) { | |
pfVar8 = (float *)(iVar9 * -4); | |
} | |
sVar13 = sVar13 + 1; | |
if (pfVar10 <= local_e4) { | |
local_e4 = (float *)((int)local_e4 + (int)pfVar8); | |
} | |
} while (sVar13 < iVar25); | |
} | |
else { | |
iVar18 = 0; | |
do { | |
iVar32 = local_94 + in_stack_0000005c; | |
(*in_stack_00000054)(local_e4,local_e4,iVar5,local_94); | |
local_94 = iVar32; | |
if (in_stack_00000060 <= iVar32 - in_stack_00000058) { | |
local_94 = in_stack_00000058; | |
} | |
local_e4 = local_e4 + iVar5; | |
pfVar8 = pfVar10; | |
if (pfVar10 <= local_e4) { | |
pfVar8 = (float *)(iVar9 * -4); | |
} | |
if (pfVar10 <= local_e4) { | |
local_e4 = (float *)((int)local_e4 + (int)pfVar8); | |
} | |
iVar18 = (int)(short)((short)iVar18 + 1); | |
} while (iVar25 != iVar18); | |
} | |
} | |
local_dc = (uint)(short)((short)local_dc + 1); | |
in_stack_00000050 = uVar12; | |
} | |
} while( true ); | |
} | |
void FUN_0800c19c(int param_1,int param_2,int param_3,int param_4,ushort param_5,ushort param_6, | |
ushort param_7,ushort param_8,ushort param_9,ushort param_10,ushort param_11, | |
ushort param_12,int param_13) | |
{ | |
short sVar1; | |
uint uVar2; | |
uint uVar3; | |
uint uVar4; | |
uint uVar5; | |
uint uVar6; | |
uint uVar7; | |
uint uVar8; | |
uint uVar9; | |
uint uVar10; | |
int iVar11; | |
uint uVar12; | |
float *pfVar13; | |
uint uVar14; | |
int iVar15; | |
int iVar16; | |
uint uVar17; | |
int iVar18; | |
int iVar19; | |
float fVar20; | |
float fVar21; | |
uint local_6c; | |
uint local_60; | |
uint local_54; | |
uint local_50; | |
int local_40; | |
int local_3c; | |
local_6c = (uint)param_6; | |
uVar7 = (uint)param_9; | |
uVar8 = (uint)param_10; | |
uVar12 = (uint)param_8; | |
uVar17 = (uint)param_5; | |
uVar14 = (uint)param_7; | |
uVar9 = (uint)param_11; | |
uVar10 = (uint)param_12; | |
if (((param_8 == 0 && param_7 == 0) && | |
((int)(((int)(short)(param_11 - 1) * (int)(short)param_9 + (uVar17 - param_2) + -1) * 0x10000) | |
< 0)) && | |
((int)(((int)(short)(param_12 - 1) * (int)(short)param_10 + (local_6c - param_3) + -1) * | |
0x10000) < 0)) { | |
if (((uVar10 != 0) && (uVar9 != 0)) && (param_4 != 0)) { | |
if (param_4 == 1) { | |
iVar19 = 0; | |
uVar12 = 0; | |
do { | |
uVar6 = 0; | |
iVar18 = 0; | |
uVar14 = uVar17; | |
do { | |
iVar11 = (int)(short)uVar6; | |
fVar21 = DAT_0800c504; | |
for (sVar1 = (short)uVar12; (int)sVar1 < (int)(short)local_6c; sVar1 = sVar1 + 1) { | |
if (iVar11 < (short)uVar14) { | |
pfVar13 = (float *)(param_1 + (sVar1 * param_2 + iVar11) * 4); | |
iVar15 = iVar11; | |
do { | |
fVar20 = *pfVar13; | |
pfVar13 = pfVar13 + 1; | |
iVar15 = iVar15 + 1; | |
if (fVar21 < fVar20 != (NAN(fVar21) || NAN(fVar20))) { | |
fVar21 = fVar20; | |
} | |
} while ((int)(short)iVar15 < (int)(short)uVar14); | |
} | |
} | |
*(float *)(param_13 + (iVar18 + uVar9 * iVar19) * 4) = fVar21; | |
iVar18 = (int)(short)((short)iVar18 + 1); | |
uVar14 = uVar14 + uVar7 & 0xffff; | |
uVar6 = uVar6 + uVar7 & 0xffff; | |
} while (iVar18 < (int)uVar9); | |
iVar19 = (int)(short)((short)iVar19 + 1); | |
local_6c = local_6c + uVar8 & 0xffff; | |
uVar12 = uVar12 + uVar8 & 0xffff; | |
} while (iVar19 < (int)uVar10); | |
} | |
else { | |
iVar19 = 0; | |
uVar12 = 0; | |
do { | |
uVar6 = 0; | |
iVar18 = 0; | |
uVar14 = uVar17; | |
do { | |
iVar11 = 0; | |
iVar15 = (int)(short)uVar6; | |
fVar21 = DAT_0800c504; | |
sVar1 = (short)uVar12; | |
do { | |
for (; (int)sVar1 < (int)(short)local_6c; sVar1 = sVar1 + 1) { | |
if (iVar15 < (short)uVar14) { | |
pfVar13 = (float *)(param_1 + (param_4 * (param_2 * sVar1 + iVar15) + iVar11) * 4) | |
; | |
iVar16 = iVar15; | |
do { | |
fVar20 = *pfVar13; | |
iVar16 = iVar16 + 1; | |
if (fVar21 < fVar20 != (NAN(fVar21) || NAN(fVar20))) { | |
fVar21 = fVar20; | |
} | |
pfVar13 = pfVar13 + param_4; | |
} while ((int)(short)iVar16 < (int)(short)uVar14); | |
} | |
} | |
iVar16 = param_4 * (iVar18 + iVar19 * uVar9) + iVar11; | |
iVar11 = (int)(short)((short)iVar11 + 1); | |
*(float *)(param_13 + iVar16 * 4) = fVar21; | |
fVar21 = DAT_0800c504; | |
sVar1 = (short)uVar12; | |
} while (iVar11 < param_4); | |
iVar18 = (int)(short)((short)iVar18 + 1); | |
uVar14 = uVar14 + uVar7 & 0xffff; | |
uVar6 = uVar6 + uVar7 & 0xffff; | |
} while (iVar18 < (int)uVar9); | |
iVar19 = (int)(short)((short)iVar19 + 1); | |
local_6c = local_6c + uVar8 & 0xffff; | |
uVar12 = uVar12 + uVar8 & 0xffff; | |
} while (iVar19 < (int)uVar10); | |
} | |
} | |
} | |
else if (((uVar10 != 0) && (uVar9 != 0)) && (param_4 != 0)) { | |
if (param_4 != 1) { | |
local_6c = local_6c - uVar12; | |
uVar12 = -uVar12; | |
local_40 = 0; | |
do { | |
local_50 = uVar12 & 0xffff; | |
uVar5 = local_50; | |
local_54 = local_6c & 0xffff; | |
uVar3 = local_54; | |
local_54._0_2_ = (short)local_6c; | |
local_50._0_2_ = (short)uVar12; | |
local_3c = 0; | |
uVar12 = uVar17 - uVar14; | |
uVar6 = -uVar14; | |
do { | |
local_60 = uVar6 & 0xffff; | |
uVar4 = local_60; | |
local_6c = uVar12 & 0xffff; | |
uVar2 = local_6c; | |
local_6c._0_2_ = (short)uVar12; | |
uVar12 = (uint)(short)local_6c; | |
local_60._0_2_ = (short)uVar6; | |
iVar19 = (int)(short)local_60; | |
iVar18 = 0; | |
fVar21 = DAT_0800c504; | |
sVar1 = (short)local_50; | |
do { | |
for (; iVar11 = (int)sVar1, iVar11 < (short)local_54; sVar1 = sVar1 + 1) { | |
if (((iVar19 < (int)uVar12) && (-1 < iVar11)) && (iVar11 < param_3)) { | |
iVar15 = iVar19; | |
if (iVar19 < 0) { | |
do { | |
iVar15 = (int)(short)((short)iVar15 + 1); | |
} while (iVar15 < (int)(uVar12 & (int)uVar12 >> 0x1f)); | |
if ((int)uVar12 <= iVar15) goto LAB_0800c490; | |
} | |
do { | |
iVar16 = (int)(short)((short)iVar15 + 1); | |
if ((iVar15 < param_2) && | |
(fVar20 = *(float *)(param_1 + | |
(param_4 * (param_2 * iVar11 + iVar15) + iVar18) * 4), | |
fVar21 < fVar20 != (NAN(fVar21) || NAN(fVar20)))) { | |
fVar21 = fVar20; | |
} | |
iVar15 = iVar16; | |
} while (iVar16 < (int)uVar12); | |
} | |
LAB_0800c490: | |
} | |
iVar11 = param_4 * (local_3c + local_40 * uVar9) + iVar18; | |
iVar18 = (int)(short)((short)iVar18 + 1); | |
*(float *)(param_13 + iVar11 * 4) = fVar21; | |
fVar21 = DAT_0800c504; | |
sVar1 = (short)local_50; | |
} while (iVar18 < param_4); | |
uVar12 = uVar2 + uVar7; | |
local_3c = (int)(short)((short)local_3c + 1); | |
uVar6 = uVar4 + uVar7; | |
} while (local_3c < (int)uVar9); | |
local_6c = uVar3 + uVar8; | |
local_40 = (int)(short)((short)local_40 + 1); | |
uVar12 = uVar5 + uVar8; | |
if ((int)uVar10 <= local_40) { | |
return; | |
} | |
} while( true ); | |
} | |
local_6c = local_6c - uVar12; | |
local_50 = 0; | |
do { | |
local_54 = local_6c & 0xffff; | |
sVar1 = (short)local_6c; | |
iVar19 = 0; | |
uVar12 = uVar17 - uVar14; | |
uVar6 = -uVar14; | |
do { | |
local_60 = uVar6 & 0xffff; | |
uVar3 = local_60; | |
local_60._0_2_ = (short)uVar6; | |
iVar18 = (int)(short)local_60; | |
uVar6 = (uint)(short)uVar12; | |
fVar21 = DAT_0800c504; | |
if ((int)(short)(sVar1 - param_6) < (int)sVar1) { | |
iVar11 = (int)(short)(sVar1 - param_6); | |
do { | |
if (((iVar18 < (int)uVar6) && (-1 < iVar11)) && (iVar11 < param_3)) { | |
iVar15 = iVar18; | |
if (iVar18 < 0) { | |
do { | |
iVar15 = (int)(short)((short)iVar15 + 1); | |
} while (iVar15 < (int)(uVar6 & (int)uVar6 >> 0x1f)); | |
if ((int)uVar6 <= iVar15) goto LAB_0800c2a8; | |
} | |
do { | |
if ((iVar15 < param_2) && | |
(fVar20 = *(float *)(param_1 + (param_2 * iVar11 + iVar15) * 4), | |
fVar21 < fVar20 != (NAN(fVar21) || NAN(fVar20)))) { | |
fVar21 = fVar20; | |
} | |
iVar15 = (int)(short)((short)iVar15 + 1); | |
} while (iVar15 < (int)uVar6); | |
} | |
LAB_0800c2a8: | |
iVar11 = (int)(short)((short)iVar11 + 1); | |
} while (iVar11 < sVar1); | |
} | |
*(float *)(param_13 + (iVar19 + uVar9 * local_50) * 4) = fVar21; | |
uVar6 = uVar3 + uVar7; | |
iVar19 = (int)(short)((short)iVar19 + 1); | |
uVar12 = (uVar12 & 0xffff) + uVar7; | |
} while (iVar19 < (int)uVar9); | |
local_50 = (uint)(short)((short)local_50 + 1); | |
local_6c = local_54 + uVar8; | |
} while ((int)local_50 < (int)uVar10); | |
} | |
return; | |
} | |
void FUN_0800c5ec(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4, | |
undefined4 param_5,undefined4 param_6) | |
{ | |
FUN_0800d080(param_2,param_1,param_6,param_5); | |
return; | |
} | |
void FUN_0800c608(uint *param_1) | |
{ | |
int iVar1; | |
uint uVar2; | |
uint uVar3; | |
float *pfVar4; | |
float *pfVar5; | |
float *pfVar6; | |
uint uVar7; | |
float *pfVar8; | |
float *pfVar9; | |
float *pfVar10; | |
int iVar11; | |
float fVar12; | |
float *local_30; | |
uVar3 = param_1[5]; | |
local_30 = (float *)*param_1; | |
pfVar10 = (float *)param_1[1]; | |
pfVar5 = local_30 + uVar3 * param_1[6]; | |
if (local_30 < pfVar5) { | |
uVar7 = param_1[4]; | |
do { | |
pfVar8 = (float *)param_1[2]; | |
if (local_30 < local_30 + uVar3) { | |
iVar11 = (uVar7 - 0x10 >> 4) + 1; | |
pfVar9 = local_30; | |
do { | |
uVar2 = uVar7; | |
pfVar4 = pfVar8; | |
pfVar6 = pfVar10; | |
fVar12 = DAT_0800c8b8; | |
if (0xf < uVar7) { | |
do { | |
uVar2 = uVar2 - 0x10; | |
fVar12 = fVar12 + pfVar6[1] * pfVar4[1] + *pfVar6 * *pfVar4 + pfVar6[2] * pfVar4[2] + | |
pfVar6[3] * pfVar4[3] + pfVar6[4] * pfVar4[4] + | |
pfVar6[5] * pfVar4[5] + pfVar6[6] * pfVar4[6] + | |
pfVar6[7] * pfVar4[7] + pfVar6[8] * pfVar4[8] + | |
pfVar6[9] * pfVar4[9] + pfVar6[10] * pfVar4[10] + | |
pfVar6[0xb] * pfVar4[0xb] + pfVar6[0xc] * pfVar4[0xc] + | |
pfVar6[0xd] * pfVar4[0xd] + pfVar6[0xe] * pfVar4[0xe] + | |
pfVar6[0xf] * pfVar4[0xf]; | |
pfVar6 = pfVar6 + 0x10; | |
pfVar4 = pfVar4 + 0x10; | |
} while (0xf < uVar2); | |
uVar2 = uVar7 & 0xf; | |
pfVar4 = pfVar8 + iVar11 * 0x10; | |
pfVar6 = pfVar10 + iVar11 * 0x10; | |
} | |
if (3 < uVar2) { | |
fVar12 = fVar12 + pfVar6[1] * pfVar4[1] + *pfVar6 * *pfVar4 + pfVar6[2] * pfVar4[2] + | |
pfVar6[3] * pfVar4[3]; | |
if ((3 < uVar2 - 4) && | |
(fVar12 = fVar12 + pfVar6[5] * pfVar4[5] + pfVar6[4] * pfVar4[4] + | |
pfVar6[6] * pfVar4[6] + pfVar6[7] * pfVar4[7], 3 < uVar2 - 8)) { | |
fVar12 = fVar12 + pfVar4[9] * pfVar6[9] + pfVar4[8] * pfVar6[8] + | |
pfVar4[10] * pfVar6[10] + pfVar4[0xb] * pfVar6[0xb]; | |
} | |
iVar1 = (uVar2 - 4 >> 2) + 1; | |
pfVar4 = pfVar4 + iVar1 * 4; | |
pfVar6 = pfVar6 + iVar1 * 4; | |
uVar2 = uVar2 & 3; | |
} | |
if (((uVar2 != 0) && (fVar12 = fVar12 + *pfVar6 * *pfVar4, uVar2 != 1)) && | |
(fVar12 = fVar12 + pfVar6[1] * pfVar4[1], uVar2 != 2)) { | |
fVar12 = fVar12 + pfVar4[2] * pfVar6[2]; | |
} | |
pfVar8 = pfVar8 + uVar7; | |
*pfVar9 = fVar12; | |
pfVar9 = pfVar9 + 1; | |
} while (pfVar9 < local_30 + uVar3); | |
uVar3 = param_1[5]; | |
} | |
if (((float *)param_1[3] != (float *)0x0) && (uVar3 != 0)) { | |
*local_30 = *local_30 + *(float *)param_1[3]; | |
uVar3 = param_1[5]; | |
if (1 < uVar3) { | |
uVar7 = 1; | |
pfVar8 = local_30; | |
do { | |
pfVar8 = pfVar8 + 1; | |
iVar11 = uVar7 * 4; | |
uVar7 = uVar7 + 1; | |
*pfVar8 = *(float *)(param_1[3] + iVar11) + *pfVar8; | |
uVar3 = param_1[5]; | |
} while (uVar7 < uVar3); | |
} | |
} | |
uVar7 = param_1[4]; | |
local_30 = local_30 + uVar3; | |
pfVar10 = pfVar10 + uVar7; | |
} while (local_30 < pfVar5); | |
} | |
return; | |
} | |
void FUN_0800c8bc(float *param_1,int param_2,byte *param_3,int param_4,int param_5,float *param_6, | |
uint param_7,int param_8,int param_9) | |
{ | |
float *pfVar1; | |
float *pfVar2; | |
float *pfVar3; | |
float *pfVar4; | |
float *pfVar5; | |
float *pfVar6; | |
bool bVar7; | |
byte *pbVar8; | |
byte *pbVar9; | |
byte *pbVar10; | |
byte bVar11; | |
float *pfVar12; | |
byte *pbVar13; | |
float *pfVar14; | |
uint uVar15; | |
int iVar16; | |
float *pfVar17; | |
uint uVar18; | |
byte *pbVar19; | |
float *pfVar20; | |
float *pfVar21; | |
float *pfVar22; | |
float fVar23; | |
float *local_44; | |
if (param_5 != 0) { | |
FUN_0800cdac(param_4,param_5,0x40); | |
param_4 = param_5; | |
} | |
if (param_1 + param_8 * param_9 <= param_1) { | |
return; | |
} | |
uVar15 = param_7 >> 3; | |
pfVar22 = (float *)(param_2 + uVar15 * 0x20); | |
pfVar20 = (float *)(param_2 + (param_7 & 0xfffffffe) * 4); | |
param_2 = param_2 + 0x20; | |
local_44 = param_1; | |
do { | |
pfVar21 = local_44 + param_8; | |
pfVar12 = local_44; | |
pbVar13 = param_3; | |
if (local_44 < pfVar21) { | |
do { | |
while( true ) { | |
pbVar19 = pbVar13; | |
fVar23 = DAT_0800cb08; | |
pfVar14 = (float *)(param_2 - 0x20); | |
if (uVar15 != 0) { | |
pbVar19 = pbVar13 + uVar15 * 4; | |
iVar16 = param_2; | |
do { | |
bVar11 = *pbVar13; | |
pfVar14 = (float *)(iVar16 + -0x1c); | |
pbVar8 = pbVar13 + 1; | |
pfVar17 = (float *)(iVar16 + -0x20); | |
pfVar1 = (float *)(iVar16 + -0x18); | |
pfVar2 = (float *)(iVar16 + -0x14); | |
pfVar3 = (float *)(iVar16 + -0x10); | |
pfVar4 = (float *)(iVar16 + -0xc); | |
pfVar5 = (float *)(iVar16 + -8); | |
pfVar6 = (float *)(iVar16 + -4); | |
pbVar9 = pbVar13 + 2; | |
pbVar10 = pbVar13 + 3; | |
pbVar13 = pbVar13 + 4; | |
iVar16 = iVar16 + 0x20; | |
fVar23 = fVar23 + *(float *)(param_4 + (bVar11 & 0xf) * 4) * *pfVar14 + | |
*(float *)(param_4 + (uint)(bVar11 >> 4) * 4) * *pfVar17 + | |
*(float *)(param_4 + (uint)(*pbVar8 >> 4) * 4) * *pfVar1 + | |
*(float *)(param_4 + (*pbVar8 & 0xf) * 4) * *pfVar2 + | |
*(float *)(param_4 + (uint)(*pbVar9 >> 4) * 4) * *pfVar3 + | |
*(float *)(param_4 + (*pbVar9 & 0xf) * 4) * *pfVar4 + | |
*(float *)(param_4 + (uint)(*pbVar10 >> 4) * 4) * *pfVar5 + | |
*(float *)(param_4 + (*pbVar10 & 0xf) * 4) * *pfVar6; | |
pfVar14 = pfVar22; | |
} while (pbVar13 != pbVar19); | |
} | |
if (pfVar14 < pfVar20) { | |
uVar18 = (int)pfVar20 + (-1 - (int)pfVar14); | |
pbVar13 = pbVar19 + -1; | |
pfVar17 = pfVar14; | |
do { | |
pbVar13 = pbVar13 + 1; | |
fVar23 = fVar23 + *(float *)(param_4 + (*pbVar13 & 0xf) * 4) * pfVar17[1] + | |
*(float *)(param_4 + (uint)(*pbVar13 >> 4) * 4) * *pfVar17; | |
pfVar17 = pfVar17 + 2; | |
} while (pbVar13 != pbVar19 + (uVar18 >> 3)); | |
iVar16 = (uVar18 >> 3) + 1; | |
pbVar19 = pbVar19 + iVar16; | |
pfVar14 = pfVar14 + iVar16 * 2; | |
} | |
if ((param_7 & 1) != 0) break; | |
*pfVar12 = fVar23; | |
pfVar12 = pfVar12 + 1; | |
pbVar13 = pbVar19; | |
if (pfVar21 <= pfVar12) goto LAB_0800ca74; | |
} | |
*pfVar12 = fVar23 + *(float *)(param_4 + (uint)(*pbVar19 >> 4) * 4) * *pfVar14; | |
pfVar12 = pfVar12 + 1; | |
pbVar13 = pbVar19 + 1; | |
} while (pfVar12 < pfVar21); | |
LAB_0800ca74: | |
pfVar12 = local_44 + param_8; | |
} | |
if ((param_6 != (float *)0x0) && (param_8 != 0)) { | |
pfVar17 = pfVar12 + -param_8; | |
pfVar14 = param_6; | |
do { | |
fVar23 = *pfVar14; | |
pfVar14 = pfVar14 + 1; | |
*pfVar17 = *pfVar17 + fVar23; | |
pfVar17 = pfVar17 + 1; | |
} while (pfVar17 != pfVar12); | |
} | |
if (param_1 + param_8 * param_9 <= pfVar12) { | |
return; | |
} | |
pfVar20 = pfVar20 + param_7; | |
pfVar22 = pfVar22 + param_7; | |
param_2 = param_2 + param_7 * 4; | |
bVar7 = pfVar21 <= local_44; | |
local_44 = pfVar12; | |
if (bVar7) { | |
pfVar20 = param_6; | |
pfVar22 = pfVar12 + -param_8; | |
do { | |
do { | |
*pfVar22 = *pfVar20 + *pfVar22; | |
pfVar22 = pfVar22 + 1; | |
pfVar20 = pfVar20 + 1; | |
} while (pfVar22 != pfVar12); | |
pfVar20 = param_6; | |
pfVar22 = pfVar12 + -param_8; | |
} while( true ); | |
} | |
} while( true ); | |
} | |
void FUN_0800cb0c(float *param_1,float *param_2,byte *param_3,int param_4,int param_5,float *param_6 | |
,uint param_7,int param_8,int param_9) | |
{ | |
float *pfVar1; | |
float *pfVar2; | |
float *pfVar3; | |
float *pfVar4; | |
float *pfVar5; | |
float *pfVar6; | |
float *pfVar7; | |
uint uVar8; | |
float *pfVar9; | |
float *pfVar10; | |
float *pfVar11; | |
byte *pbVar12; | |
byte *pbVar13; | |
float *pfVar14; | |
byte *pbVar15; | |
float *pfVar16; | |
float *pfVar17; | |
uint uVar18; | |
float *pfVar19; | |
float fVar20; | |
pfVar11 = param_1 + param_8 * param_9; | |
if (param_5 != 0) { | |
FUN_0800cdac(param_4,param_5,0x400); | |
param_4 = param_5; | |
} | |
if (pfVar11 <= param_1) { | |
return; | |
} | |
uVar18 = param_7 >> 3; | |
pfVar17 = param_2 + uVar18 * 8; | |
pfVar14 = param_1 + param_8; | |
pfVar16 = param_2 + 8; | |
uVar8 = param_7 & 7; | |
pbVar12 = param_3; | |
pfVar19 = param_1; | |
if (pfVar14 <= param_1) goto joined_r0x0800cce2; | |
do { | |
do { | |
pfVar10 = param_2; | |
pbVar15 = pbVar12; | |
fVar20 = DAT_0800cd64; | |
if (uVar18 != 0) { | |
pbVar15 = pbVar12 + uVar18 * 8; | |
pfVar9 = pfVar16; | |
do { | |
pfVar10 = pfVar9 + -7; | |
pfVar1 = pfVar9 + -8; | |
pfVar2 = pfVar9 + -6; | |
pfVar3 = pfVar9 + -5; | |
pfVar4 = pfVar9 + -4; | |
pfVar5 = pfVar9 + -3; | |
pfVar6 = pfVar9 + -2; | |
pfVar7 = pfVar9 + -1; | |
pbVar13 = pbVar12 + 8; | |
pfVar9 = pfVar9 + 8; | |
fVar20 = fVar20 + *(float *)(param_4 + (uint)pbVar12[1] * 4) * *pfVar10 + | |
*(float *)(param_4 + (uint)*pbVar12 * 4) * *pfVar1 + | |
*(float *)(param_4 + (uint)pbVar12[2] * 4) * *pfVar2 + | |
*(float *)(param_4 + (uint)pbVar12[3] * 4) * *pfVar3 + | |
*(float *)(param_4 + (uint)pbVar12[4] * 4) * *pfVar4 + | |
*(float *)(param_4 + (uint)pbVar12[5] * 4) * *pfVar5 + | |
*(float *)(param_4 + (uint)pbVar12[6] * 4) * *pfVar6 + | |
*(float *)(param_4 + (uint)pbVar12[7] * 4) * *pfVar7; | |
pfVar10 = pfVar17; | |
pbVar12 = pbVar13; | |
} while (pbVar13 != pbVar15); | |
} | |
if (uVar8 != 0) { | |
fVar20 = fVar20 + *(float *)(param_4 + (uint)*pbVar15 * 4) * *pfVar10; | |
if (((((uVar8 != 1) && | |
(fVar20 = fVar20 + *(float *)(param_4 + (uint)pbVar15[1] * 4) * pfVar10[1], uVar8 != 2 | |
)) && (fVar20 = fVar20 + *(float *)(param_4 + (uint)pbVar15[2] * 4) * pfVar10[2], | |
uVar8 != 3)) && | |
((fVar20 = fVar20 + pfVar10[3] * *(float *)(param_4 + (uint)pbVar15[3] * 4), uVar8 != 4 | |
&& (fVar20 = fVar20 + pfVar10[4] * *(float *)(param_4 + (uint)pbVar15[4] * 4), | |
uVar8 != 5)))) && | |
(fVar20 = fVar20 + pfVar10[5] * *(float *)(param_4 + (uint)pbVar15[5] * 4), uVar8 != 6)) | |
{ | |
fVar20 = fVar20 + *(float *)(param_4 + (uint)pbVar15[6] * 4) * pfVar10[6]; | |
} | |
pbVar15 = pbVar15 + uVar8; | |
} | |
*param_1 = fVar20; | |
param_1 = param_1 + 1; | |
pbVar12 = pbVar15; | |
} while (param_1 < pfVar14); | |
param_1 = pfVar19 + param_8; | |
joined_r0x0800cce2: | |
do { | |
if ((param_6 != (float *)0x0) && (param_8 != 0)) { | |
pfVar9 = param_1 + -param_8; | |
pfVar10 = param_6; | |
do { | |
fVar20 = *pfVar10; | |
pfVar10 = pfVar10 + 1; | |
*pfVar9 = *pfVar9 + fVar20; | |
pfVar9 = pfVar9 + 1; | |
} while (param_1 != pfVar9); | |
} | |
if (pfVar11 <= param_1) { | |
return; | |
} | |
pfVar17 = pfVar17 + param_7; | |
pfVar16 = pfVar16 + param_7; | |
if (pfVar14 <= pfVar19) { | |
pfVar11 = param_6; | |
pfVar14 = param_1 + -param_8; | |
do { | |
do { | |
*pfVar14 = *pfVar11 + *pfVar14; | |
pfVar14 = pfVar14 + 1; | |
pfVar11 = pfVar11 + 1; | |
} while (pfVar14 != param_1); | |
pfVar11 = param_6; | |
pfVar14 = param_1 + -param_8; | |
} while( true ); | |
} | |
pfVar14 = param_1 + param_8; | |
param_2 = pfVar16 + -8; | |
pbVar12 = param_3; | |
pfVar19 = param_1; | |
} while (pfVar14 <= param_1); | |
} while( true ); | |
} | |
undefined8 FUN_0800cdac(char *param_1,char *param_2,uint param_3) | |
{ | |
char cVar1; | |
char *pcVar2; | |
char *pcVar3; | |
char *pcVar4; | |
char *pcVar5; | |
undefined4 uVar6; | |
uint uVar7; | |
undefined4 uVar8; | |
undefined4 uVar9; | |
undefined4 uVar10; | |
undefined4 uVar11; | |
undefined4 uVar12; | |
undefined4 uVar13; | |
undefined4 uVar14; | |
int iVar15; | |
pcVar2 = param_1; | |
pcVar4 = param_2; | |
if ((param_1 != param_2) && (param_3 != 0)) { | |
if ((param_1 < param_2) && (pcVar3 = param_1 + param_3, param_2 < pcVar3)) { | |
param_2 = param_2 + param_3; | |
if (param_1 < pcVar3) { | |
do { | |
pcVar3 = pcVar3 + -1; | |
cVar1 = *pcVar3; | |
param_2 = param_2 + -1; | |
*param_2 = cVar1; | |
} while (param_1 != pcVar3); | |
return CONCAT44((int)cVar1,param_1); | |
} | |
} | |
else { | |
if (3 < param_3) { | |
uVar7 = (uint)param_2 & 3; | |
param_3 = param_3 - (4 - uVar7); | |
*param_2 = *param_1; | |
pcVar2 = param_1 + 1; | |
pcVar4 = param_2 + 1; | |
if (uVar7 != 3) { | |
param_2[1] = param_1[1]; | |
pcVar2 = param_1 + 2; | |
pcVar4 = param_2 + 2; | |
if (0 < (int)(2 - uVar7)) { | |
param_2[2] = param_1[2]; | |
pcVar2 = param_1 + 3; | |
pcVar4 = param_2 + 3; | |
if (uVar7 == 0) { | |
pcVar2 = param_1 + 4; | |
pcVar4 = param_2 + 4; | |
param_2[3] = param_1[3]; | |
} | |
} | |
} | |
if (uVar7 == ((uint)param_1 & 3)) { | |
iVar15 = (param_3 >> 6) - 1; | |
if (param_3 >> 6 != 0) { | |
do { | |
uVar6 = *(undefined4 *)(pcVar2 + 4); | |
uVar8 = *(undefined4 *)(pcVar2 + 8); | |
uVar9 = *(undefined4 *)(pcVar2 + 0xc); | |
uVar11 = *(undefined4 *)(pcVar2 + 0x10); | |
uVar10 = *(undefined4 *)(pcVar2 + 0x14); | |
uVar12 = *(undefined4 *)(pcVar2 + 0x18); | |
uVar13 = *(undefined4 *)(pcVar2 + 0x1c); | |
pcVar3 = pcVar2 + 0x20; | |
*(undefined4 *)pcVar4 = *(undefined4 *)pcVar2; | |
*(undefined4 *)(pcVar4 + 4) = uVar6; | |
*(undefined4 *)(pcVar4 + 8) = uVar8; | |
*(undefined4 *)(pcVar4 + 0xc) = uVar9; | |
*(undefined4 *)(pcVar4 + 0x10) = uVar11; | |
*(undefined4 *)(pcVar4 + 0x14) = uVar10; | |
*(undefined4 *)(pcVar4 + 0x18) = uVar12; | |
*(undefined4 *)(pcVar4 + 0x1c) = uVar13; | |
uVar6 = *(undefined4 *)(pcVar2 + 0x24); | |
uVar8 = *(undefined4 *)(pcVar2 + 0x28); | |
uVar9 = *(undefined4 *)(pcVar2 + 0x2c); | |
uVar11 = *(undefined4 *)(pcVar2 + 0x30); | |
uVar10 = *(undefined4 *)(pcVar2 + 0x34); | |
uVar12 = *(undefined4 *)(pcVar2 + 0x38); | |
uVar13 = *(undefined4 *)(pcVar2 + 0x3c); | |
pcVar2 = pcVar2 + 0x40; | |
*(undefined4 *)(pcVar4 + 0x20) = *(undefined4 *)pcVar3; | |
*(undefined4 *)(pcVar4 + 0x24) = uVar6; | |
*(undefined4 *)(pcVar4 + 0x28) = uVar8; | |
*(undefined4 *)(pcVar4 + 0x2c) = uVar9; | |
*(undefined4 *)(pcVar4 + 0x30) = uVar11; | |
*(undefined4 *)(pcVar4 + 0x34) = uVar10; | |
*(undefined4 *)(pcVar4 + 0x38) = uVar12; | |
*(undefined4 *)(pcVar4 + 0x3c) = uVar13; | |
pcVar4 = pcVar4 + 0x40; | |
iVar15 = iVar15 + -1; | |
} while (iVar15 != -1); | |
} | |
if ((param_3 & 0x20) != 0) { | |
uVar6 = *(undefined4 *)pcVar2; | |
uVar8 = *(undefined4 *)(pcVar2 + 4); | |
uVar9 = *(undefined4 *)(pcVar2 + 8); | |
uVar11 = *(undefined4 *)(pcVar2 + 0xc); | |
uVar10 = *(undefined4 *)(pcVar2 + 0x10); | |
uVar12 = *(undefined4 *)(pcVar2 + 0x14); | |
uVar13 = *(undefined4 *)(pcVar2 + 0x18); | |
uVar14 = *(undefined4 *)(pcVar2 + 0x1c); | |
pcVar2 = pcVar2 + 0x20; | |
*(undefined4 *)pcVar4 = uVar6; | |
*(undefined4 *)(pcVar4 + 4) = uVar8; | |
*(undefined4 *)(pcVar4 + 8) = uVar9; | |
*(undefined4 *)(pcVar4 + 0xc) = uVar11; | |
*(undefined4 *)(pcVar4 + 0x10) = uVar10; | |
*(undefined4 *)(pcVar4 + 0x14) = uVar12; | |
*(undefined4 *)(pcVar4 + 0x18) = uVar13; | |
*(undefined4 *)(pcVar4 + 0x1c) = uVar14; | |
pcVar4 = pcVar4 + 0x20; | |
} | |
if ((param_3 & 0x10) != 0) { | |
uVar6 = *(undefined4 *)pcVar2; | |
uVar8 = *(undefined4 *)(pcVar2 + 4); | |
uVar9 = *(undefined4 *)(pcVar2 + 8); | |
uVar11 = *(undefined4 *)(pcVar2 + 0xc); | |
pcVar2 = pcVar2 + 0x10; | |
*(undefined4 *)pcVar4 = uVar6; | |
*(undefined4 *)(pcVar4 + 4) = uVar8; | |
*(undefined4 *)(pcVar4 + 8) = uVar9; | |
*(undefined4 *)(pcVar4 + 0xc) = uVar11; | |
pcVar4 = pcVar4 + 0x10; | |
} | |
if ((param_3 & 8) != 0) { | |
uVar6 = *(undefined4 *)pcVar2; | |
uVar8 = *(undefined4 *)(pcVar2 + 4); | |
pcVar2 = pcVar2 + 8; | |
*(undefined4 *)pcVar4 = uVar6; | |
*(undefined4 *)(pcVar4 + 4) = uVar8; | |
pcVar4 = pcVar4 + 8; | |
} | |
} | |
else { | |
for (uVar7 = param_3 >> 4; uVar7 != 0; uVar7 = uVar7 - 1) { | |
uVar6 = *(undefined4 *)pcVar2; | |
uVar8 = *(undefined4 *)(pcVar2 + 4); | |
pcVar3 = pcVar2 + 0xc; | |
uVar9 = *(undefined4 *)(pcVar2 + 8); | |
pcVar2 = pcVar2 + 0x10; | |
uVar11 = *(undefined4 *)pcVar3; | |
*(undefined4 *)pcVar4 = uVar6; | |
*(undefined4 *)(pcVar4 + 4) = uVar8; | |
*(undefined4 *)(pcVar4 + 8) = uVar9; | |
*(undefined4 *)(pcVar4 + 0xc) = uVar11; | |
pcVar4 = pcVar4 + 0x10; | |
} | |
if ((param_3 & 8) != 0) { | |
pcVar3 = pcVar2 + 4; | |
uVar6 = *(undefined4 *)pcVar2; | |
pcVar2 = pcVar2 + 8; | |
uVar8 = *(undefined4 *)pcVar3; | |
*(undefined4 *)pcVar4 = uVar6; | |
*(undefined4 *)(pcVar4 + 4) = uVar8; | |
pcVar4 = pcVar4 + 8; | |
} | |
} | |
pcVar3 = pcVar2; | |
pcVar5 = pcVar4; | |
if ((param_3 & 4) != 0) { | |
pcVar3 = pcVar2 + 4; | |
pcVar5 = pcVar4 + 4; | |
*(undefined4 *)pcVar4 = *(undefined4 *)pcVar2; | |
} | |
pcVar2 = pcVar3; | |
pcVar4 = pcVar5; | |
if ((param_3 & 2) != 0) { | |
pcVar2 = pcVar3 + 2; | |
pcVar4 = pcVar5 + 2; | |
*(undefined2 *)pcVar5 = *(undefined2 *)pcVar3; | |
} | |
if ((param_3 & 1) != 0) { | |
*pcVar4 = *pcVar2; | |
} | |
return CONCAT44(pcVar4,pcVar2); | |
} | |
*param_2 = *param_1; | |
pcVar2 = param_1 + 1; | |
pcVar4 = param_2 + 1; | |
if (param_3 != 1) { | |
param_2[1] = param_1[1]; | |
pcVar2 = param_1 + 2; | |
pcVar4 = param_2 + 2; | |
if (param_3 != 2) { | |
param_2[2] = param_1[2]; | |
return CONCAT44(param_2 + 3,param_1 + 3); | |
} | |
} | |
} | |
} | |
return CONCAT44(pcVar4,pcVar2); | |
} | |
uint FUN_0800cef0(uint param_1) | |
{ | |
uint uVar1; | |
uint uVar2; | |
if ((param_1 << 0xb) >> 0x1c == 2) { | |
uVar1 = DAT_0800cfcc & param_1 | 0x40000; | |
} | |
else { | |
uVar2 = param_1 & 0x1ffffff; | |
uVar1 = uVar2; | |
if (uVar2 != DAT_0800cfb0) { | |
if ((int)DAT_0800cfb0 < (int)uVar2) { | |
if (uVar2 != DAT_0800cfc4) { | |
if ((int)DAT_0800cfc4 < (int)uVar2) { | |
if ((uVar2 != DAT_0800cfc8) && (uVar2 != DAT_0800cfc8 + 0x7f1)) { | |
uVar1 = DAT_0800cfc8 - 0xf; | |
if (uVar2 != uVar1) { | |
uVar1 = 0x40; | |
} | |
return param_1 & 0x68000000 | uVar1; | |
} | |
} | |
else if (((uVar2 != DAT_0800cfc4 - 0x387) && (uVar2 != DAT_0800cfc4 - 7)) && | |
(uVar1 = DAT_0800cfc4 - 0x407, uVar2 != DAT_0800cfc4 - 0x407)) { | |
uVar1 = 0x40; | |
} | |
} | |
} | |
else if (uVar2 != DAT_0800cfb4) { | |
if ((int)DAT_0800cfb4 < (int)uVar2) { | |
if (((uVar2 != DAT_0800cfb8) && (uVar2 != DAT_0800cfb8 + 0x1f400)) && | |
(uVar1 = DAT_0800cfbc, uVar2 != DAT_0800cfbc)) { | |
uVar1 = 0x40; | |
} | |
} | |
else if (uVar2 != DAT_0800cfb4 - 0x400) { | |
if ((int)(DAT_0800cfb4 - 0x400) < (int)uVar2) { | |
uVar1 = DAT_0800cfc0; | |
if (uVar2 != DAT_0800cfc0) { | |
uVar1 = 0x40; | |
} | |
return param_1 & 0x68000000 | uVar1; | |
} | |
if ((uVar2 != DAT_0800cfb4 - 0x800) && | |
(uVar1 = DAT_0800cfb4 - 0x780, uVar2 != DAT_0800cfb4 - 0x780)) { | |
uVar1 = 0x40; | |
} | |
} | |
} | |
} | |
} | |
return param_1 & 0x68000000 | uVar1; | |
} | |
uint FUN_0800cfd0(int param_1,int param_2) | |
{ | |
uint uVar1; | |
uint uVar2; | |
int iVar3; | |
uint uVar4; | |
bool bVar5; | |
if (param_2 == 0) { | |
return 0; | |
} | |
uVar2 = (uint)(param_1 << 0x12) >> 0x19; | |
bVar5 = -1 < (-0x111 >> ((uint)(param_1 << 0xb) >> 0x1c)) << 0x1f; | |
uVar4 = (uint)(param_1 << 9) >> 0x1e; | |
uVar1 = param_1 >> 7; | |
if (bVar5) { | |
uVar1 = uVar1 & 0x7f; | |
} | |
if (bVar5) { | |
uVar1 = (int)uVar1 >> uVar4; | |
} | |
if (bVar5) { | |
iVar3 = uVar2 << (uVar1 & 0xff); | |
} | |
else { | |
iVar3 = 0; | |
} | |
return ((uVar2 * param_2 + 7 & 0xfffffff8) >> uVar4) + 7 + iVar3 >> 3; | |
} | |
uint FUN_0800d020(int param_1,int param_2) | |
{ | |
if (param_2 != 0) { | |
return ((((uint)(param_1 << 0x12) >> 0x19) * param_2 + 7 & 0xfffffff8) >> | |
((uint)(param_1 << 9) >> 0x1e)) + 7 >> 3; | |
} | |
return 0; | |
} | |
uint FUN_0800d044(int param_1,int param_2,int param_3) | |
{ | |
return param_3 << 8 | param_2 << 0x10 | param_1 << 0x18; | |
} | |
uint FUN_0800d050(int param_1) | |
{ | |
uint uVar1; | |
uVar1 = *(int *)(*(int *)(param_1 + 0x14) + 0xc) * *(int *)(*(int *)(param_1 + 0xc) + 0xc); | |
if ((**(uint **)(param_1 + 0x18) & 0x17fffff) == DAT_0800d07c) { | |
uVar1 = uVar1 + 7 >> 3; | |
} | |
return uVar1; | |
} | |
void FUN_0800d080(int param_1,float *param_2,int param_3,uint param_4,float *param_5,float *param_6) | |
{ | |
float *pfVar1; | |
float *pfVar2; | |
float *pfVar3; | |
uint uVar4; | |
uint uVar5; | |
float *pfVar6; | |
float *pfVar7; | |
float fVar8; | |
float fVar9; | |
float fVar10; | |
if (param_6 == (float *)0x0) { | |
if (param_4 != 0) { | |
pfVar3 = (float *)(param_1 + param_3 * 4); | |
uVar4 = 0; | |
do { | |
uVar5 = uVar4 + param_3; | |
if (uVar4 < uVar5) { | |
pfVar1 = pfVar3 + -param_3; | |
pfVar2 = param_2; | |
pfVar7 = param_5; | |
do { | |
fVar9 = *pfVar1; | |
pfVar1 = pfVar1 + 1; | |
fVar8 = *pfVar7; | |
pfVar7 = pfVar7 + 1; | |
*pfVar2 = fVar9 * fVar8; | |
pfVar2 = pfVar2 + 1; | |
} while (pfVar1 != pfVar3); | |
} | |
param_2 = param_2 + param_3; | |
pfVar3 = pfVar3 + param_3; | |
uVar4 = uVar5; | |
} while (uVar5 < param_4); | |
return; | |
} | |
} | |
else if (param_4 != 0) { | |
pfVar3 = (float *)(param_1 + param_3 * 4); | |
uVar4 = 0; | |
do { | |
uVar5 = uVar4 + param_3; | |
if (uVar4 < uVar5) { | |
pfVar1 = pfVar3 + -param_3; | |
pfVar6 = param_2 + uVar4; | |
pfVar2 = param_5; | |
pfVar7 = param_6; | |
do { | |
fVar8 = *pfVar1; | |
pfVar1 = pfVar1 + 1; | |
fVar9 = *pfVar2; | |
pfVar2 = pfVar2 + 1; | |
fVar10 = *pfVar7; | |
pfVar7 = pfVar7 + 1; | |
*pfVar6 = fVar10 + fVar8 * fVar9; | |
pfVar6 = pfVar6 + 1; | |
} while (pfVar1 != pfVar3); | |
} | |
pfVar3 = pfVar3 + param_3; | |
uVar4 = uVar5; | |
} while (uVar5 < param_4); | |
} | |
return; | |
} | |
void sendMidiCommand(undefined4 *param_1,undefined4 *param_2,uint param_3) | |
{ | |
undefined4 *puVar1; | |
undefined4 uVar2; | |
undefined4 *puVar3; | |
uint uVar4; | |
uint uVar5; | |
uVar5 = param_3 >> 2; | |
if (uVar5 != 0) { | |
puVar3 = param_1 + 4; | |
puVar1 = param_2 + 4; | |
uVar4 = uVar5; | |
do { | |
puVar1[-4] = puVar3[-4]; | |
puVar1[-3] = puVar3[-3]; | |
puVar1[-2] = puVar3[-2]; | |
puVar1[-1] = puVar3[-1]; | |
uVar4 = uVar4 - 1; | |
puVar3 = puVar3 + 4; | |
puVar1 = puVar1 + 4; | |
} while (uVar4 != 0); | |
param_1 = param_1 + uVar5 * 4; | |
param_2 = param_2 + uVar5 * 4; | |
} | |
param_3 = param_3 & 3; | |
if ((param_3 != 0) && (*param_2 = *param_1, param_3 != 1)) { | |
uVar2 = param_1[1]; | |
param_2[1] = uVar2; | |
if (param_3 != 2) { | |
uVar2 = param_1[2]; | |
} | |
if (param_3 != 2) { | |
param_2[2] = uVar2; | |
} | |
} | |
return; | |
} | |
void FUN_0800d168(float *param_1,uint param_2,float *param_3) | |
{ | |
float *pfVar1; | |
float *pfVar2; | |
float *pfVar3; | |
float *pfVar4; | |
float *pfVar5; | |
uint uVar6; | |
uint uVar7; | |
uint in_fpscr; | |
float fVar8; | |
float fVar9; | |
uVar7 = param_2 >> 2; | |
fVar9 = DAT_0800d1e0; | |
if (uVar7 != 0) { | |
pfVar5 = param_1 + 4; | |
uVar6 = uVar7; | |
do { | |
pfVar1 = pfVar5 + -4; | |
pfVar2 = pfVar5 + -3; | |
pfVar3 = pfVar5 + -2; | |
pfVar4 = pfVar5 + -1; | |
uVar6 = uVar6 - 1; | |
pfVar5 = pfVar5 + 4; | |
fVar9 = fVar9 + *pfVar1 + *pfVar2 + *pfVar3 + *pfVar4; | |
} while (uVar6 != 0); | |
param_1 = param_1 + uVar7 * 4; | |
} | |
uVar7 = param_2 & 3; | |
if ((uVar7 != 0) && (fVar9 = fVar9 + *param_1, uVar7 != 1)) { | |
fVar9 = fVar9 + param_1[1]; | |
if (uVar7 != 2) { | |
fVar9 = fVar9 + param_1[2]; | |
} | |
} | |
fVar8 = (float)VectorUnsignedToFloat(param_2,(byte)(in_fpscr >> 0x15) & 3); | |
*param_3 = fVar9 / fVar8; | |
return; | |
} | |
void FUN_0800d1e4(float *param_1,int param_2,float *param_3,uint *param_4) | |
{ | |
int iVar1; | |
int iVar2; | |
uint uVar3; | |
uint uVar4; | |
float *pfVar5; | |
uint uVar6; | |
uint uVar7; | |
float fVar8; | |
float fVar9; | |
uVar6 = param_2 - 1; | |
uVar7 = uVar6 >> 2; | |
fVar9 = *param_1; | |
pfVar5 = param_1 + 1; | |
if (uVar7 == 0) { | |
uVar4 = 0; | |
} | |
else { | |
param_1 = param_1 + 5; | |
uVar3 = 4; | |
uVar4 = 0; | |
do { | |
iVar2 = (uint)(fVar9 < param_1[-4]) << 0x1f; | |
if (iVar2 < 0) { | |
fVar9 = param_1[-4]; | |
} | |
iVar1 = (uint)(fVar9 < param_1[-3]) << 0x1f; | |
if (iVar2 < 0) { | |
uVar4 = uVar3 - 3; | |
} | |
if (iVar1 < 0) { | |
fVar9 = param_1[-3]; | |
} | |
iVar2 = (uint)(fVar9 < param_1[-2]) << 0x1f; | |
if (iVar1 < 0) { | |
uVar4 = uVar3 - 2; | |
} | |
if (iVar2 < 0) { | |
fVar9 = param_1[-2]; | |
} | |
iVar1 = (uint)(fVar9 < param_1[-1]) << 0x1f; | |
if (iVar2 < 0) { | |
uVar4 = uVar3 - 1; | |
} | |
if (iVar1 < 0) { | |
uVar4 = uVar3; | |
} | |
uVar3 = uVar3 + 4; | |
if (iVar1 < 0) { | |
fVar9 = param_1[-1]; | |
} | |
param_1 = param_1 + 4; | |
} while (uVar3 != (uVar7 + 1) * 4); | |
pfVar5 = pfVar5 + uVar7 * 4; | |
} | |
uVar7 = uVar6 & 3; | |
if (uVar7 != 0) { | |
fVar8 = *pfVar5; | |
if (fVar8 != fVar9 && fVar8 < fVar9 == (NAN(fVar8) || NAN(fVar9))) { | |
uVar4 = param_2 - uVar7; | |
fVar9 = fVar8; | |
} | |
iVar2 = uVar7 - 1; | |
if (iVar2 != 0) { | |
if ((int)((uint)(fVar9 < pfVar5[1]) << 0x1f) < 0) { | |
uVar4 = param_2 - iVar2; | |
fVar9 = pfVar5[1]; | |
} | |
if ((iVar2 != 1) && ((int)((uint)(fVar9 < pfVar5[2]) << 0x1f) < 0)) { | |
uVar4 = uVar6; | |
fVar9 = pfVar5[2]; | |
} | |
} | |
} | |
*param_3 = fVar9; | |
*param_4 = uVar4; | |
return; | |
} | |
undefined4 FUN_0800d3f4(undefined4 param_1,uint param_2) | |
{ | |
undefined4 uVar1; | |
code *UNRECOVERED_JUMPTABLE; | |
UNRECOVERED_JUMPTABLE = DAT_0800d464; | |
if (param_2 != 0x200) { | |
if (param_2 < 0x201) { | |
UNRECOVERED_JUMPTABLE = DAT_0800d460; | |
if (param_2 != 0x80) { | |
if (param_2 < 0x81) { | |
UNRECOVERED_JUMPTABLE = DAT_0800d458; | |
if ((param_2 != 0x20) && (UNRECOVERED_JUMPTABLE = DAT_0800d450, param_2 != 0x40)) { | |
return 0xffffffff; | |
} | |
} | |
else { | |
UNRECOVERED_JUMPTABLE = DAT_0800d448; | |
if (param_2 != 0x100) { | |
return 0xffffffff; | |
} | |
} | |
} | |
} | |
else { | |
UNRECOVERED_JUMPTABLE = DAT_0800d45c; | |
if (param_2 != 0x800) { | |
if (param_2 == 0x1000) { | |
// WARNING: Could not recover jumptable at 0x0800d41a. Too many branches | |
// WARNING: Treating indirect jump as call | |
uVar1 = (*DAT_0800d44c)(); | |
return uVar1; | |
} | |
UNRECOVERED_JUMPTABLE = DAT_0800d454; | |
if (param_2 != 0x400) { | |
return 0xffffffff; | |
} | |
} | |
} | |
} | |
// WARNING: Could not recover jumptable at 0x0800d40a. Too many branches | |
// WARNING: Treating indirect jump as call | |
uVar1 = (*UNRECOVERED_JUMPTABLE)(); | |
return uVar1; | |
} | |
void FUN_0800d51c(ushort *param_1,float *param_2,float *param_3) | |
{ | |
int iVar1; | |
float *pfVar2; | |
int iVar3; | |
float fVar4; | |
float fVar5; | |
float fVar6; | |
float fVar7; | |
float fVar8; | |
float fVar9; | |
fVar8 = *param_2; | |
fVar6 = param_2[1]; | |
iVar1 = *(int *)(param_1 + 10); | |
iVar3 = *param_1 - 1; | |
*param_3 = (fVar8 + fVar6) * 0.5; | |
param_3[1] = (fVar8 - fVar6) * 0.5; | |
if (iVar3 != 0) { | |
pfVar2 = param_2 + iVar3 * 2 + -2; | |
iVar1 = iVar1 + 0x10; | |
param_3 = param_3 + 4; | |
param_2 = param_2 + 4; | |
do { | |
fVar7 = *(float *)(iVar1 + -8); | |
fVar6 = pfVar2[3]; | |
fVar9 = param_2[-1]; | |
fVar5 = *(float *)(iVar1 + -4); | |
fVar4 = param_2[-2] - pfVar2[2]; | |
fVar8 = fVar6 + fVar9; | |
iVar3 = iVar3 + -1; | |
param_3[-2] = (((pfVar2[2] + param_2[-2]) - fVar7 * fVar4) - fVar5 * fVar8) * 0.5; | |
param_3[-1] = (((fVar9 - fVar6) + fVar5 * fVar4) - fVar7 * fVar8) * 0.5; | |
pfVar2 = pfVar2 + -2; | |
param_2 = param_2 + 2; | |
iVar1 = iVar1 + 8; | |
param_3 = param_3 + 2; | |
} while (iVar3 != 0); | |
} | |
return; | |
} | |
void FUN_0800d5c8(ushort *param_1,float *param_2,float *param_3,int param_4) | |
{ | |
int iVar1; | |
float *pfVar2; | |
float *pfVar3; | |
int iVar4; | |
float fVar5; | |
float fVar6; | |
float fVar7; | |
float fVar8; | |
float fVar9; | |
float fVar10; | |
if (param_4 != 0) { | |
FUN_0800d51c(); | |
FUN_0800dc50(param_1,param_3,param_4,1); | |
return; | |
} | |
FUN_0800dc50(param_1,param_2,0,1); | |
iVar1 = *(int *)(param_1 + 10); | |
fVar8 = param_2[1] + param_2[1]; | |
fVar9 = *param_2 + *param_2; | |
iVar4 = *param_1 - 1; | |
*param_3 = (fVar9 + fVar8) * 0.5; | |
param_3[1] = (fVar9 - fVar8) * 0.5; | |
iVar1 = iVar1 + 0x10; | |
param_3 = param_3 + 4; | |
pfVar2 = param_2 + 4; | |
pfVar3 = param_2 + iVar4 * 2; | |
do { | |
fVar7 = *(float *)(iVar1 + -8); | |
fVar8 = pfVar3[1]; | |
fVar10 = pfVar2[-1]; | |
fVar6 = *(float *)(iVar1 + -4); | |
fVar5 = *pfVar3 - pfVar2[-2]; | |
fVar9 = fVar8 + fVar10; | |
iVar4 = iVar4 + -1; | |
param_3[-2] = (*pfVar3 + pfVar2[-2] + fVar7 * fVar5 + fVar6 * fVar9) * 0.5; | |
param_3[-1] = (((fVar10 - fVar8) + fVar6 * fVar5) - fVar7 * fVar9) * 0.5; | |
pfVar2 = pfVar2 + 2; | |
iVar1 = iVar1 + 8; | |
param_3 = param_3 + 2; | |
pfVar3 = pfVar3 + -2; | |
} while (iVar4 != 0); | |
return; | |
} | |
void FUN_0800d600(ushort *param_1,int param_2) | |
{ | |
ushort uVar1; | |
ushort uVar2; | |
float *pfVar3; | |
float *pfVar4; | |
int iVar5; | |
float *pfVar6; | |
int iVar7; | |
float *pfVar8; | |
int iVar9; | |
float fVar10; | |
float fVar11; | |
float fVar12; | |
float fVar13; | |
float fVar14; | |
float fVar15; | |
float fVar16; | |
float fVar17; | |
float fVar18; | |
float fVar19; | |
float fVar20; | |
float fVar21; | |
float fVar22; | |
float fVar23; | |
float fVar24; | |
float fVar25; | |
uVar1 = *param_1; | |
pfVar4 = *(float **)(param_1 + 2); | |
pfVar8 = (float *)(param_2 + (uint)uVar1 * 4); | |
uVar2 = uVar1 >> 1; | |
if (uVar1 >> 3 != 0) { | |
iVar5 = param_2 + 0x10; | |
iVar7 = param_2 + (uint)uVar2 * 4 + 0x10; | |
pfVar6 = pfVar8 + uVar2 + 4; | |
iVar9 = iVar5 + (uint)(uVar1 >> 3) * 0x10; | |
pfVar3 = pfVar8; | |
do { | |
fVar14 = *pfVar3; | |
fVar15 = pfVar3[1]; | |
fVar19 = pfVar6[-4]; | |
fVar18 = pfVar6[-3]; | |
fVar22 = pfVar6[-2]; | |
fVar21 = pfVar6[-1]; | |
fVar17 = *(float *)(iVar5 + -0x10); | |
fVar10 = pfVar3[2]; | |
fVar11 = pfVar3[3]; | |
fVar23 = *(float *)(iVar7 + -0x10); | |
fVar16 = *(float *)(iVar7 + -0xc); | |
fVar24 = *(float *)(iVar5 + -0xc); | |
fVar20 = *(float *)(iVar5 + -8); | |
fVar25 = *(float *)(iVar5 + -4); | |
fVar12 = *(float *)(iVar7 + -8); | |
fVar13 = *(float *)(iVar7 + -4); | |
*(float *)(iVar5 + -0x10) = fVar17 + fVar14; | |
*(float *)(iVar5 + -0xc) = fVar24 + fVar15; | |
*(float *)(iVar5 + -8) = fVar20 + fVar10; | |
*(float *)(iVar5 + -4) = fVar25 + fVar11; | |
*(float *)(iVar7 + -4) = fVar13 + fVar21; | |
*(float *)(iVar7 + -0x10) = fVar23 + fVar19; | |
*(float *)(iVar7 + -0xc) = fVar16 + fVar18; | |
*(float *)(iVar7 + -8) = fVar12 + fVar22; | |
fVar24 = fVar24 - fVar15; | |
fVar19 = fVar19 - fVar23; | |
fVar18 = fVar18 - fVar16; | |
fVar16 = pfVar4[1]; | |
fVar15 = *pfVar4; | |
fVar17 = fVar17 - fVar14; | |
pfVar3[1] = fVar24 * fVar15 - fVar17 * fVar16; | |
*pfVar3 = fVar17 * fVar15 + fVar24 * fVar16; | |
pfVar6[-4] = fVar19 * fVar16 - fVar18 * fVar15; | |
pfVar6[-3] = fVar18 * fVar16 + fVar19 * fVar15; | |
fVar14 = pfVar4[3]; | |
fVar22 = fVar22 - fVar12; | |
fVar20 = fVar20 - fVar10; | |
fVar21 = fVar21 - fVar13; | |
fVar25 = fVar25 - fVar11; | |
fVar10 = pfVar4[2]; | |
iVar5 = iVar5 + 0x10; | |
pfVar3[2] = fVar20 * fVar10 + fVar25 * fVar14; | |
iVar7 = iVar7 + 0x10; | |
pfVar3[3] = fVar25 * fVar10 - fVar20 * fVar14; | |
pfVar6[-2] = fVar22 * fVar14 - fVar21 * fVar10; | |
pfVar6[-1] = fVar21 * fVar14 + fVar22 * fVar10; | |
pfVar6 = pfVar6 + 4; | |
pfVar4 = pfVar4 + 4; | |
pfVar3 = pfVar3 + 4; | |
} while (iVar5 != iVar9); | |
pfVar4 = *(float **)(param_1 + 2); | |
} | |
FUN_0800e328(param_2,uVar2,pfVar4,2); | |
FUN_0800e328(pfVar8,uVar2,*(undefined4 *)(param_1 + 2),2); | |
return; | |
} | |
void FUN_0800d7a4(ushort *param_1,float *param_2) | |
{ | |
ushort uVar1; | |
float *pfVar2; | |
uint uVar3; | |
uint uVar4; | |
int iVar5; | |
float *pfVar6; | |
uint uVar7; | |
float *pfVar8; | |
float *pfVar9; | |
float *pfVar10; | |
float *pfVar11; | |
float *pfVar12; | |
float *pfVar13; | |
float *pfVar14; | |
int iVar15; | |
float *pfVar16; | |
float *pfVar17; | |
float *pfVar18; | |
float fVar19; | |
float fVar20; | |
float fVar21; | |
float fVar22; | |
float fVar23; | |
float fVar24; | |
float fVar25; | |
float fVar26; | |
float fVar27; | |
float fVar28; | |
float fVar29; | |
float fVar30; | |
float fVar31; | |
float fVar32; | |
float fVar33; | |
float fVar34; | |
float fVar35; | |
float fVar36; | |
float fVar37; | |
float fVar38; | |
float fVar39; | |
float fVar40; | |
float *local_80; | |
float *local_7c; | |
float *local_78; | |
float *local_74; | |
float *local_70; | |
float *local_6c; | |
float *local_68; | |
uVar1 = *param_1; | |
iVar5 = *(int *)(param_1 + 2); | |
uVar7 = (uint)(uVar1 >> 1); | |
pfVar2 = param_2 + uVar7 * 2; | |
fVar20 = pfVar2[1]; | |
pfVar11 = param_2 + uVar7; | |
fVar30 = *pfVar11; | |
fVar21 = pfVar11[1]; | |
fVar26 = *param_2 + *pfVar2; | |
pfVar14 = pfVar2 + uVar7; | |
fVar22 = *pfVar14; | |
fVar19 = pfVar14[1]; | |
fVar32 = *param_2 - *pfVar2; | |
*param_2 = fVar30 + fVar26 + fVar22; | |
fVar28 = param_2[1] + fVar20; | |
fVar20 = param_2[1] - fVar20; | |
local_78 = param_2 + 2; | |
local_68 = pfVar11 + 2; | |
local_6c = pfVar2 + 2; | |
uVar3 = (uint)(uVar1 >> 2); | |
local_7c = (float *)(iVar5 + 8); | |
local_80 = (float *)(iVar5 + 0x18); | |
local_74 = (float *)(iVar5 + 0x10); | |
local_70 = pfVar14 + 2; | |
uVar4 = uVar3 - 2 >> 1; | |
param_2[1] = fVar28 + pfVar11[1] + pfVar14[1]; | |
*pfVar11 = (fVar21 + fVar32) - fVar19; | |
pfVar11[1] = (fVar20 - fVar30) + fVar22; | |
*pfVar2 = (fVar26 - fVar30) - fVar22; | |
pfVar2[1] = (fVar28 - fVar21) - fVar19; | |
*pfVar14 = (fVar32 - fVar21) + fVar19; | |
pfVar14[1] = (fVar30 + fVar20) - fVar22; | |
if (uVar4 != 0) { | |
pfVar17 = pfVar11 + -3; | |
pfVar10 = pfVar11 + 4; | |
iVar15 = iVar5 + 0x20; | |
iVar5 = iVar5 + 0x30; | |
pfVar13 = pfVar2 + 4; | |
pfVar8 = pfVar14 + (uVar7 - 3); | |
pfVar18 = param_2 + 4; | |
pfVar9 = pfVar2 + -3; | |
pfVar12 = pfVar14 + -3; | |
pfVar6 = pfVar14 + 4; | |
uVar7 = uVar4; | |
pfVar16 = local_74; | |
do { | |
fVar33 = pfVar10[-2]; | |
fVar22 = pfVar6[-2]; | |
fVar21 = pfVar6[-1]; | |
fVar34 = pfVar10[-1]; | |
fVar32 = pfVar18[-2] + pfVar13[-2]; | |
fVar27 = pfVar18[-1] + pfVar13[-1]; | |
fVar19 = pfVar18[-1] - pfVar13[-1]; | |
fVar25 = pfVar18[-2] - pfVar13[-2]; | |
pfVar18[-2] = fVar33 + fVar32 + fVar22; | |
pfVar18[-1] = fVar27 + pfVar10[-1] + pfVar6[-1]; | |
fVar40 = pfVar9[2]; | |
fVar37 = pfVar8[2]; | |
fVar24 = pfVar8[1]; | |
fVar20 = pfVar9[1]; | |
fVar29 = pfVar17[2] + pfVar12[2]; | |
fVar26 = pfVar17[2] - pfVar12[2]; | |
fVar23 = pfVar17[1] + pfVar12[1]; | |
fVar28 = pfVar17[1] - pfVar12[1]; | |
pfVar17[2] = fVar40 + fVar29 + fVar37; | |
pfVar17[1] = fVar23 + pfVar9[1] + pfVar8[1]; | |
fVar31 = pfVar16[-1]; | |
fVar38 = pfVar16[-2]; | |
fVar35 = (fVar40 - fVar37) + fVar28; | |
fVar36 = (fVar26 - fVar20) + fVar24; | |
fVar39 = (fVar34 + fVar25) - fVar21; | |
fVar30 = (fVar19 - fVar33) + fVar22; | |
pfVar10[-2] = fVar39 * fVar38 + fVar30 * fVar31; | |
pfVar10[-1] = fVar30 * fVar38 - fVar39 * fVar31; | |
pfVar9[1] = fVar35 * fVar31 + fVar36 * fVar38; | |
pfVar9[2] = fVar36 * fVar31 - fVar35 * fVar38; | |
fVar30 = *(float *)(iVar15 + -0x10); | |
fVar31 = (fVar29 - fVar40) - fVar37; | |
fVar23 = (fVar23 - fVar20) - fVar24; | |
fVar29 = *(float *)(iVar15 + -0xc); | |
fVar32 = (fVar32 - fVar33) - fVar22; | |
fVar27 = (fVar27 - fVar34) - fVar21; | |
pfVar13[-2] = fVar32 * fVar30 + fVar27 * fVar29; | |
pfVar13[-1] = fVar27 * fVar30 - fVar32 * fVar29; | |
pfVar12[1] = fVar31 * fVar29 - fVar23 * fVar30; | |
pfVar12[2] = -(fVar31 * fVar30) - fVar23 * fVar29; | |
fVar21 = (fVar25 - fVar34) + fVar21; | |
fVar26 = (fVar24 - fVar20) - fVar26; | |
fVar20 = *(float *)(iVar5 + -0x18); | |
fVar30 = *(float *)(iVar5 + -0x14); | |
fVar28 = (fVar40 - fVar37) - fVar28; | |
fVar22 = (fVar33 + fVar19) - fVar22; | |
uVar7 = uVar7 - 1; | |
pfVar6[-2] = fVar21 * fVar20 + fVar22 * fVar30; | |
pfVar6[-1] = fVar22 * fVar20 - fVar21 * fVar30; | |
pfVar18 = pfVar18 + 2; | |
pfVar8[2] = fVar26 * fVar30 - fVar28 * fVar20; | |
pfVar8[1] = fVar28 * fVar30 + fVar26 * fVar20; | |
pfVar17 = pfVar17 + -2; | |
pfVar16 = pfVar16 + 2; | |
pfVar10 = pfVar10 + 2; | |
pfVar9 = pfVar9 + -2; | |
iVar15 = iVar15 + 0x10; | |
pfVar13 = pfVar13 + 2; | |
pfVar12 = pfVar12 + -2; | |
iVar5 = iVar5 + 0x18; | |
pfVar6 = pfVar6 + 2; | |
pfVar8 = pfVar8 + -2; | |
} while (uVar7 != 0); | |
local_78 = local_78 + uVar4 * 2; | |
local_7c = local_7c + uVar4 * 2; | |
local_68 = local_68 + uVar4 * 2; | |
local_74 = local_74 + uVar4 * 4; | |
local_6c = local_6c + uVar4 * 2; | |
local_70 = local_70 + uVar4 * 2; | |
local_80 = local_80 + uVar4 * 6; | |
} | |
fVar27 = *local_68; | |
fVar22 = *local_70; | |
fVar20 = local_70[1]; | |
fVar25 = local_68[1]; | |
fVar23 = *local_78 + *local_6c; | |
fVar32 = local_78[1] + local_6c[1]; | |
fVar26 = local_78[1] - local_6c[1]; | |
fVar24 = *local_78 - *local_6c; | |
*local_78 = fVar27 + fVar23 + fVar22; | |
local_78[1] = fVar32 + local_68[1] + local_70[1]; | |
fVar19 = *local_7c; | |
fVar21 = local_7c[1]; | |
fVar30 = (fVar26 - fVar27) + fVar22; | |
fVar28 = (fVar25 + fVar24) - fVar20; | |
*local_68 = fVar28 * fVar19 + fVar30 * fVar21; | |
local_68[1] = fVar30 * fVar19 - fVar28 * fVar21; | |
fVar30 = (fVar23 - fVar27) - fVar22; | |
fVar19 = local_74[1]; | |
fVar21 = *local_74; | |
fVar28 = (fVar32 - fVar25) - fVar20; | |
local_6c[1] = fVar28 * fVar21 - fVar30 * fVar19; | |
*local_6c = fVar30 * fVar21 + fVar28 * fVar19; | |
fVar19 = local_80[1]; | |
fVar21 = *local_80; | |
fVar20 = (fVar24 - fVar25) + fVar20; | |
fVar22 = (fVar27 + fVar26) - fVar22; | |
local_70[1] = fVar22 * fVar21 - fVar20 * fVar19; | |
*local_70 = fVar20 * fVar21 + fVar22 * fVar19; | |
FUN_0800e328(param_2,uVar3,*(undefined4 *)(param_1 + 2),4); | |
FUN_0800e328(pfVar11,uVar3,*(undefined4 *)(param_1 + 2),4); | |
FUN_0800e328(pfVar2,uVar3,*(undefined4 *)(param_1 + 2),4); | |
FUN_0800e328(pfVar14,uVar3,*(undefined4 *)(param_1 + 2),4); | |
return; | |
} | |
void FUN_0800dc50(ushort *param_1,int param_2,int param_3,int param_4) | |
{ | |
int iVar1; | |
uint uVar2; | |
uint uVar3; | |
uint in_fpscr; | |
float fVar4; | |
uVar3 = (uint)*param_1; | |
if (param_3 == 1) { | |
if (uVar3 != 0) { | |
iVar1 = param_2 + 0xc; | |
uVar2 = 0; | |
do { | |
uVar2 = uVar2 + 1; | |
*(float *)(iVar1 + -8) = -*(float *)(iVar1 + -8); | |
iVar1 = iVar1 + 8; | |
} while (uVar3 != uVar2); | |
goto LAB_0800dc62; | |
} | |
if (param_4 == 0) { | |
return; | |
} | |
} | |
else { | |
LAB_0800dc62: | |
if (uVar3 == 0x100) { | |
LAB_0800dd12: | |
FUN_0800d7a4(param_1,param_2); | |
} | |
else { | |
if (uVar3 < 0x101) { | |
if (uVar3 == 0x40) goto LAB_0800dc9a; | |
if (uVar3 < 0x41) { | |
if (uVar3 == 0x10) goto LAB_0800dc74; | |
if (uVar3 == 0x20) goto LAB_0800dd12; | |
} | |
else if (uVar3 == 0x80) { | |
LAB_0800dc74: | |
FUN_0800d600(param_1,param_2); | |
} | |
goto joined_r0x0800dcaa; | |
} | |
if (uVar3 == 0x800) goto LAB_0800dd12; | |
if (uVar3 < 0x801) { | |
if (uVar3 == 0x200) goto LAB_0800dc9a; | |
if (uVar3 == 0x400) goto LAB_0800dc74; | |
} | |
else if (uVar3 == 0x1000) { | |
LAB_0800dc9a: | |
FUN_0800e328(param_2,uVar3,*(undefined4 *)(param_1 + 2),1,param_4); | |
} | |
} | |
joined_r0x0800dcaa: | |
if (param_4 == 0) goto joined_r0x0800dcba; | |
} | |
FUN_0800dd40(param_2,param_1[6],*(undefined4 *)(param_1 + 4)); | |
joined_r0x0800dcba: | |
if (param_3 == 1) { | |
fVar4 = (float)VectorUnsignedToFloat(uVar3,(byte)(in_fpscr >> 0x15) & 3); | |
if (uVar3 != 0) { | |
uVar2 = 0; | |
iVar1 = param_2 + 8; | |
do { | |
uVar2 = uVar2 + 1; | |
*(float *)(iVar1 + -8) = *(float *)(iVar1 + -8) * (1.0 / fVar4); | |
*(float *)(iVar1 + -4) = -(*(float *)(iVar1 + -4) * (1.0 / fVar4)); | |
iVar1 = iVar1 + 8; | |
} while (uVar3 != uVar2); | |
return; | |
} | |
} | |
return; | |
} | |
void FUN_0800dd40(int param_1,uint param_2,int param_3) | |
{ | |
uint uVar1; | |
int iVar2; | |
uint uVar3; | |
int iVar4; | |
uint uVar5; | |
undefined4 uVar6; | |
if (param_2 != 0) { | |
uVar5 = 0; | |
do { | |
uVar3 = (uint)(*(ushort *)(param_3 + 2 + uVar5 * 2) >> 2); | |
uVar1 = (uint)(*(ushort *)(param_3 + uVar5 * 2) >> 2); | |
uVar6 = *(undefined4 *)(param_1 + uVar1 * 4); | |
*(undefined4 *)(param_1 + uVar1 * 4) = *(undefined4 *)(param_1 + uVar3 * 4); | |
*(undefined4 *)(param_1 + uVar3 * 4) = uVar6; | |
iVar2 = uVar1 * 4 + 4; | |
iVar4 = uVar3 * 4 + 4; | |
uVar5 = uVar5 + 2; | |
uVar6 = *(undefined4 *)(param_1 + iVar2); | |
*(undefined4 *)(param_1 + iVar2) = *(undefined4 *)(param_1 + iVar4); | |
*(undefined4 *)(param_1 + iVar4) = uVar6; | |
} while (uVar5 < param_2); | |
return; | |
} | |
return; | |
} | |
undefined4 | |
FUN_0800dd80(undefined1 *param_1,int param_2,uint param_3,undefined4 param_4,undefined4 param_5, | |
uint param_6) | |
{ | |
if (param_6 == param_3 * (param_6 / param_3)) { | |
*(short *)(param_1 + 2) = (short)param_2; | |
*(undefined4 *)(param_1 + 4) = param_4; | |
FUN_08012484(param_5,0,(param_2 + -1 + param_6) * 4,param_4,param_4); | |
*(undefined4 *)(param_1 + 8) = param_5; | |
*param_1 = (char)param_3; | |
return 0; | |
} | |
return 0xfffffffe; | |
} | |
void FUN_0800ddb4(float *param_1,float *param_2,uint param_3) | |
{ | |
float *pfVar1; | |
float *pfVar2; | |
uint uVar3; | |
uint uVar4; | |
float fVar5; | |
uVar4 = param_3 >> 2; | |
if (uVar4 != 0) { | |
pfVar1 = param_1 + 8; | |
pfVar2 = param_2 + 4; | |
uVar3 = uVar4; | |
do { | |
fVar5 = pfVar1[-8] * pfVar1[-8] + pfVar1[-7] * pfVar1[-7]; | |
if (fVar5 < 0.0 == NAN(fVar5)) { | |
if ((int)((uint)(fVar5 < 0.0) << 0x1f) < 0) { | |
FUN_0800ea48(); | |
} | |
pfVar2[-4] = SQRT(fVar5); | |
} | |
else { | |
pfVar2[-4] = 0.0; | |
} | |
fVar5 = pfVar1[-6] * pfVar1[-6] + pfVar1[-5] * pfVar1[-5]; | |
if (fVar5 < 0.0 == NAN(fVar5)) { | |
if ((int)((uint)(fVar5 < 0.0) << 0x1f) < 0) { | |
FUN_0800ea48(); | |
} | |
pfVar2[-3] = SQRT(fVar5); | |
} | |
else { | |
pfVar2[-3] = 0.0; | |
} | |
fVar5 = pfVar1[-4] * pfVar1[-4] + pfVar1[-3] * pfVar1[-3]; | |
if (fVar5 < 0.0 == NAN(fVar5)) { | |
if ((int)((uint)(fVar5 < 0.0) << 0x1f) < 0) { | |
FUN_0800ea48(); | |
} | |
pfVar2[-2] = SQRT(fVar5); | |
} | |
else { | |
pfVar2[-2] = 0.0; | |
} | |
fVar5 = pfVar1[-2] * pfVar1[-2] + pfVar1[-1] * pfVar1[-1]; | |
if (fVar5 < 0.0 == NAN(fVar5)) { | |
if ((int)((uint)(fVar5 < 0.0) << 0x1f) < 0) { | |
FUN_0800ea48(); | |
} | |
pfVar2[-1] = SQRT(fVar5); | |
} | |
else { | |
pfVar2[-1] = 0.0; | |
} | |
uVar3 = uVar3 - 1; | |
pfVar1 = pfVar1 + 8; | |
pfVar2 = pfVar2 + 4; | |
} while (uVar3 != 0); | |
param_1 = param_1 + uVar4 * 8; | |
param_2 = param_2 + uVar4 * 4; | |
} | |
param_3 = param_3 & 3; | |
if (param_3 != 0) { | |
fVar5 = param_1[1] * param_1[1] + *param_1 * *param_1; | |
if (fVar5 < 0.0 == NAN(fVar5)) { | |
if ((int)((uint)(fVar5 < 0.0) << 0x1f) < 0) { | |
FUN_0800ea48(); | |
} | |
*param_2 = SQRT(fVar5); | |
} | |
else { | |
*param_2 = 0.0; | |
} | |
if (param_3 != 1) { | |
fVar5 = param_1[3] * param_1[3] + param_1[2] * param_1[2]; | |
if (fVar5 < 0.0 == NAN(fVar5)) { | |
if ((int)((uint)(fVar5 < 0.0) << 0x1f) < 0) { | |
FUN_0800ea48(); | |
} | |
param_2[1] = SQRT(fVar5); | |
} | |
else { | |
param_2[1] = 0.0; | |
} | |
if (param_3 != 2) { | |
fVar5 = param_1[4] * param_1[4] + param_1[5] * param_1[5]; | |
if (fVar5 < 0.0 == NAN(fVar5)) { | |
if ((int)((uint)(fVar5 < 0.0) << 0x1f) < 0) { | |
FUN_0800ea48(); | |
} | |
param_2[2] = SQRT(fVar5); | |
} | |
else { | |
param_2[2] = 0.0; | |
} | |
} | |
} | |
} | |
return; | |
} | |
float FUN_0800dffc(float param_1) | |
{ | |
uint in_fpscr; | |
float fVar1; | |
int iVar2; | |
float fVar3; | |
uint uVar4; | |
fVar1 = param_1 * DAT_0800e084 + 0.25; | |
iVar2 = (int)fVar1; | |
if (fVar1 < 0.0) { | |
iVar2 = iVar2 + -1; | |
} | |
fVar3 = (float)VectorSignedToFloat(iVar2,(byte)((in_fpscr & 0xfffffff) >> 0x15) & 3); | |
fVar1 = (fVar1 - fVar3) * DAT_0800e088; | |
uVar4 = VectorFloatToUnsigned(fVar1,3); | |
uVar4 = uVar4 & 0xffff; | |
if (uVar4 < 0x200) { | |
fVar3 = (float)VectorUnsignedToFloat(uVar4,(byte)((in_fpscr & 0xfffffff) >> 0x15) & 3); | |
iVar2 = uVar4 + 1; | |
} | |
else { | |
iVar2 = 1; | |
uVar4 = 0; | |
fVar3 = DAT_0800e088; | |
} | |
fVar1 = fVar1 - fVar3; | |
return (1.0 - fVar1) * *(float *)(DAT_0800e08c + uVar4 * 4) + | |
fVar1 * *(float *)(DAT_0800e08c + iVar2 * 4); | |
} | |
void FUN_0800e090(float param_1,float *param_2,float *param_3,uint param_4) | |
{ | |
float *pfVar1; | |
float *pfVar2; | |
uint uVar3; | |
uint uVar4; | |
float fVar5; | |
float fVar6; | |
float fVar7; | |
uVar4 = param_4 >> 2; | |
if (uVar4 != 0) { | |
pfVar2 = param_2 + 4; | |
pfVar1 = param_3 + 4; | |
uVar3 = uVar4; | |
do { | |
fVar5 = pfVar2[-2]; | |
fVar6 = pfVar2[-1]; | |
fVar7 = pfVar2[-4]; | |
uVar3 = uVar3 - 1; | |
pfVar1[-3] = param_1 * pfVar2[-3]; | |
pfVar1[-2] = param_1 * fVar5; | |
pfVar1[-1] = param_1 * fVar6; | |
pfVar1[-4] = fVar7 * param_1; | |
pfVar2 = pfVar2 + 4; | |
pfVar1 = pfVar1 + 4; | |
} while (uVar3 != 0); | |
param_2 = param_2 + uVar4 * 4; | |
param_3 = param_3 + uVar4 * 4; | |
} | |
param_4 = param_4 & 3; | |
if (((param_4 != 0) && (*param_3 = *param_2 * param_1, param_4 != 1)) && | |
(param_3[1] = param_2[1] * param_1, param_4 != 2)) { | |
param_3[2] = param_2[2] * param_1; | |
} | |
return; | |
} | |
void FUN_0800e11c(float *param_1,float *param_2,float *param_3,uint param_4) | |
{ | |
float *pfVar1; | |
float *pfVar2; | |
float *pfVar3; | |
uint uVar4; | |
uint uVar5; | |
uVar5 = param_4 >> 2; | |
if (uVar5 != 0) { | |
pfVar1 = param_3 + 4; | |
pfVar2 = param_2 + 4; | |
pfVar3 = param_1 + 4; | |
uVar4 = uVar5; | |
do { | |
uVar4 = uVar4 - 1; | |
pfVar1[-4] = pfVar3[-4] * pfVar2[-4]; | |
pfVar1[-3] = pfVar3[-3] * pfVar2[-3]; | |
pfVar1[-2] = pfVar3[-2] * pfVar2[-2]; | |
pfVar1[-1] = pfVar3[-1] * pfVar2[-1]; | |
pfVar1 = pfVar1 + 4; | |
pfVar2 = pfVar2 + 4; | |
pfVar3 = pfVar3 + 4; | |
} while (uVar4 != 0); | |
param_1 = param_1 + uVar5 * 4; | |
param_2 = param_2 + uVar5 * 4; | |
param_3 = param_3 + uVar5 * 4; | |
} | |
param_4 = param_4 & 3; | |
if (((param_4 != 0) && (*param_3 = *param_2 * *param_1, param_4 != 1)) && | |
(param_3[1] = param_1[1] * param_2[1], param_4 != 2)) { | |
param_3[2] = param_1[2] * param_2[2]; | |
} | |
return; | |
} | |
void FUN_0800e1d0(float *param_1,float *param_2,uint param_3,float *param_4) | |
{ | |
float *pfVar1; | |
float *pfVar2; | |
uint uVar3; | |
uint uVar4; | |
float fVar5; | |
uVar4 = param_3 >> 2; | |
fVar5 = DAT_0800e280; | |
if (uVar4 != 0) { | |
pfVar2 = param_1 + 4; | |
pfVar1 = param_2 + 4; | |
uVar3 = uVar4; | |
do { | |
uVar3 = uVar3 - 1; | |
fVar5 = pfVar2[-1] * pfVar1[-1] + | |
pfVar2[-2] * pfVar1[-2] + pfVar2[-3] * pfVar1[-3] + pfVar2[-4] * pfVar1[-4] + fVar5; | |
pfVar2 = pfVar2 + 4; | |
pfVar1 = pfVar1 + 4; | |
} while (uVar3 != 0); | |
param_1 = param_1 + uVar4 * 4; | |
param_2 = param_2 + uVar4 * 4; | |
} | |
param_3 = param_3 & 3; | |
if (((param_3 != 0) && (fVar5 = fVar5 + *param_2 * *param_1, param_3 != 1)) && | |
(fVar5 = fVar5 + param_2[1] * param_1[1], param_3 != 2)) { | |
fVar5 = fVar5 + param_1[2] * param_2[2]; | |
} | |
*param_4 = fVar5; | |
return; | |
} | |
undefined4 FUN_0800e284(undefined2 *param_1,uint param_2) | |
{ | |
undefined4 uVar1; | |
int iVar2; | |
*param_1 = (short)param_2; | |
*(undefined4 *)(param_1 + 2) = 0; | |
iVar2 = DAT_0800e324; | |
if (param_2 != 0x100) { | |
if (param_2 < 0x101) { | |
iVar2 = DAT_0800e31c; | |
if (param_2 != 0x40) { | |
if (param_2 < 0x41) { | |
iVar2 = DAT_0800e320; | |
if ((param_2 != 0x10) && (iVar2 = DAT_0800e310, param_2 != 0x20)) { | |
return 0xffffffff; | |
} | |
} | |
else { | |
iVar2 = DAT_0800e30c; | |
if (param_2 != 0x80) { | |
return 0xffffffff; | |
} | |
} | |
} | |
} | |
else { | |
iVar2 = DAT_0800e314; | |
if (param_2 != 0x800) { | |
if (param_2 < 0x801) { | |
iVar2 = DAT_0800e318; | |
if ((param_2 != 0x200) && (iVar2 = DAT_0800e308, param_2 != 0x400)) { | |
return 0xffffffff; | |
} | |
} | |
else { | |
iVar2 = DAT_0800e304; | |
if (param_2 != 0x1000) { | |
return 0xffffffff; | |
} | |
} | |
} | |
} | |
} | |
param_1[6] = *(undefined2 *)(iVar2 + 0xc); | |
uVar1 = *(undefined4 *)(iVar2 + 8); | |
*(undefined4 *)(param_1 + 2) = *(undefined4 *)(iVar2 + 4); | |
*(undefined4 *)(param_1 + 4) = uVar1; | |
return 0; | |
} | |
void FUN_0800e328(int param_1,uint param_2,int param_3,uint param_4) | |
{ | |
float fVar1; | |
float *pfVar2; | |
float *pfVar3; | |
float *pfVar4; | |
float *pfVar5; | |
float *pfVar6; | |
float *pfVar7; | |
uint uVar8; | |
float *pfVar9; | |
float *pfVar10; | |
uint uVar11; | |
int iVar12; | |
uint uVar13; | |
uint uVar14; | |
float fVar15; | |
float fVar16; | |
float fVar17; | |
float fVar18; | |
float fVar19; | |
float fVar20; | |
float fVar21; | |
float fVar22; | |
float fVar23; | |
float fVar24; | |
float fVar25; | |
float fVar26; | |
float fVar27; | |
float fVar28; | |
float fVar29; | |
float fVar30; | |
float fVar31; | |
float fVar32; | |
float fVar33; | |
float fVar34; | |
float fVar35; | |
float fVar36; | |
float fVar37; | |
float fVar38; | |
float fVar39; | |
float fVar40; | |
float fVar41; | |
float fVar42; | |
float fVar43; | |
float fVar44; | |
float fVar45; | |
float fVar46; | |
float fVar47; | |
float *local_a4; | |
float *local_a0; | |
float *local_9c; | |
float *local_98; | |
float *local_94; | |
float *local_90; | |
float *local_8c; | |
float *local_88; | |
uint local_78; | |
fVar1 = DAT_0800e63c; | |
uVar11 = param_2; | |
local_78 = param_4; | |
while( true ) { | |
uVar8 = uVar11 >> 3; | |
pfVar5 = (float *)(param_1 + uVar8 * 0x20); | |
pfVar7 = pfVar5 + uVar8 * 4; | |
pfVar6 = pfVar7 + uVar8 * -6; | |
pfVar2 = (float *)(uVar8 * 8 + 4 + param_1); | |
pfVar4 = (float *)(uVar8 * 0x10 + 4 + param_1); | |
pfVar10 = pfVar6 + uVar8 * 8; | |
pfVar9 = pfVar5 + uVar8 * 2; | |
uVar13 = 0; | |
pfVar3 = (float *)(param_1 + 4); | |
do { | |
fVar16 = *pfVar10; | |
fVar43 = pfVar3[-1]; | |
fVar30 = *pfVar5; | |
fVar42 = pfVar4[-1]; | |
fVar31 = *pfVar7; | |
fVar20 = *pfVar6; | |
fVar15 = fVar42 + fVar31; | |
fVar18 = fVar20 + fVar16; | |
fVar28 = pfVar2[-1] + *pfVar9; | |
fVar27 = fVar43 + fVar30; | |
fVar33 = fVar28 + fVar18; | |
fVar25 = fVar27 + fVar15; | |
fVar36 = pfVar2[-1] - *pfVar9; | |
pfVar3[-1] = fVar25 + fVar33; | |
*pfVar5 = fVar25 - fVar33; | |
fVar20 = fVar20 - fVar16; | |
fVar26 = *pfVar2 - pfVar9[1]; | |
fVar44 = pfVar6[1] - pfVar10[1]; | |
fVar21 = *pfVar3 + pfVar5[1]; | |
fVar42 = fVar42 - fVar31; | |
fVar23 = *pfVar3 - pfVar5[1]; | |
fVar33 = pfVar6[1] + pfVar10[1]; | |
fVar16 = *pfVar4 + pfVar7[1]; | |
fVar25 = (fVar26 + fVar44) * fVar1; | |
fVar34 = *pfVar4 - pfVar7[1]; | |
fVar31 = (fVar36 - fVar20) * fVar1; | |
fVar43 = fVar43 - fVar30; | |
fVar30 = *pfVar2 + pfVar9[1]; | |
fVar26 = (fVar26 - fVar44) * fVar1; | |
fVar20 = (fVar36 + fVar20) * fVar1; | |
fVar27 = fVar27 - fVar15; | |
fVar28 = fVar28 - fVar18; | |
fVar15 = fVar30 + fVar33; | |
fVar18 = fVar21 + fVar16; | |
fVar30 = fVar30 - fVar33; | |
fVar21 = fVar21 - fVar16; | |
fVar33 = fVar43 + fVar31; | |
fVar16 = fVar34 + fVar25; | |
fVar43 = fVar43 - fVar31; | |
fVar34 = fVar34 - fVar25; | |
fVar25 = fVar23 + fVar26; | |
fVar23 = fVar23 - fVar26; | |
fVar31 = fVar42 + fVar20; | |
fVar42 = fVar42 - fVar20; | |
uVar13 = uVar13 + uVar11; | |
*pfVar3 = fVar18 + fVar15; | |
pfVar5[1] = fVar18 - fVar15; | |
pfVar3 = pfVar3 + uVar11 * 2; | |
pfVar4[-1] = fVar27 + fVar30; | |
pfVar5 = pfVar5 + uVar11 * 2; | |
*pfVar7 = fVar27 - fVar30; | |
*pfVar4 = fVar21 - fVar28; | |
pfVar7[1] = fVar28 + fVar21; | |
pfVar4 = pfVar4 + uVar11 * 2; | |
pfVar2[-1] = fVar33 + fVar16; | |
pfVar7 = pfVar7 + uVar11 * 2; | |
*pfVar10 = fVar33 - fVar16; | |
*pfVar9 = fVar43 + fVar34; | |
*pfVar6 = fVar43 - fVar34; | |
*pfVar2 = fVar25 - fVar31; | |
pfVar10[1] = fVar31 + fVar25; | |
pfVar2 = pfVar2 + uVar11 * 2; | |
pfVar9[1] = fVar23 - fVar42; | |
pfVar10 = pfVar10 + uVar11 * 2; | |
pfVar6[1] = fVar42 + fVar23; | |
pfVar9 = pfVar9 + uVar11 * 2; | |
pfVar6 = pfVar6 + uVar11 * 2; | |
} while (uVar13 < param_2); | |
if (uVar8 < 8) break; | |
local_88 = (float *)(param_1 + uVar8 * 0x20 + 8); | |
local_94 = (float *)(param_1 + uVar8 * 0x30 + 8); | |
local_90 = (float *)(param_1 + uVar8 * 0x28 + 8); | |
local_98 = (float *)(param_1 + uVar8 * 0x18 + 8); | |
local_9c = (float *)(param_1 + uVar8 * 0x38 + 8); | |
local_a4 = (float *)(param_1 + uVar8 * 0x10 + 0xc); | |
local_a0 = (float *)(param_1 + 0xc); | |
local_8c = (float *)(param_1 + uVar8 * 8 + 8); | |
iVar12 = 0; | |
uVar13 = 1; | |
do { | |
iVar12 = iVar12 + local_78; | |
pfVar7 = (float *)(param_3 + iVar12 * 8); | |
pfVar2 = pfVar7 + iVar12 * 2; | |
pfVar3 = pfVar2 + iVar12 * 2; | |
pfVar4 = pfVar3 + iVar12 * 2; | |
pfVar5 = pfVar4 + iVar12 * 2; | |
pfVar6 = pfVar5 + iVar12 * 2 + iVar12 * 2; | |
fVar27 = pfVar6[iVar12 * -6 + 1]; | |
fVar15 = *pfVar3; | |
fVar26 = pfVar6[iVar12 * -8 + 1]; | |
fVar21 = pfVar6[iVar12 * -0xc + 1]; | |
fVar23 = pfVar6[iVar12 * -10 + 1]; | |
fVar16 = *pfVar2; | |
fVar25 = *pfVar7; | |
fVar43 = pfVar6[1]; | |
fVar30 = pfVar6[iVar12 * -2 + 1]; | |
fVar28 = pfVar6[iVar12 * -4 + 1]; | |
fVar20 = *pfVar6; | |
fVar33 = pfVar5[iVar12 * 2]; | |
fVar18 = *pfVar5; | |
fVar31 = *pfVar4; | |
pfVar3 = local_94; | |
pfVar2 = local_90; | |
pfVar7 = local_8c; | |
pfVar4 = local_88; | |
pfVar5 = local_98; | |
pfVar6 = local_9c; | |
pfVar9 = local_a0; | |
pfVar10 = local_a4; | |
uVar14 = uVar13; | |
do { | |
fVar29 = *pfVar4; | |
fVar45 = *pfVar3; | |
fVar24 = pfVar9[-1]; | |
fVar22 = pfVar10[-1]; | |
fVar38 = fVar24 + fVar29; | |
fVar44 = *pfVar7 + *pfVar2; | |
fVar34 = fVar22 + fVar45; | |
fVar36 = *pfVar5 + *pfVar6; | |
fVar17 = fVar38 + fVar34; | |
fVar32 = fVar44 + fVar36; | |
fVar42 = *pfVar7 - *pfVar2; | |
fVar37 = *pfVar5 - *pfVar6; | |
pfVar9[-1] = fVar17 + fVar32; | |
fVar24 = fVar24 - fVar29; | |
fVar22 = fVar22 - fVar45; | |
fVar45 = pfVar7[1] - pfVar2[1]; | |
fVar46 = pfVar5[1] - pfVar6[1]; | |
fVar38 = fVar38 - fVar34; | |
fVar35 = pfVar5[1] + pfVar6[1]; | |
fVar39 = *pfVar10 + pfVar3[1]; | |
fVar34 = pfVar7[1] + pfVar2[1]; | |
fVar19 = *pfVar9 + pfVar4[1]; | |
fVar44 = fVar44 - fVar36; | |
fVar29 = fVar19 + fVar39; | |
fVar47 = fVar34 + fVar35; | |
fVar19 = fVar19 - fVar39; | |
fVar40 = (fVar45 - fVar46) * fVar1; | |
fVar39 = (fVar45 + fVar46) * fVar1; | |
fVar46 = *pfVar10 - pfVar3[1]; | |
fVar34 = fVar34 - fVar35; | |
fVar17 = fVar17 - fVar32; | |
fVar41 = (fVar42 + fVar37) * fVar1; | |
fVar45 = fVar29 - fVar47; | |
fVar37 = (fVar42 - fVar37) * fVar1; | |
fVar35 = *pfVar9 - pfVar4[1]; | |
fVar36 = fVar38 + fVar34; | |
fVar42 = fVar35 + fVar40; | |
fVar38 = fVar38 - fVar34; | |
fVar35 = fVar35 - fVar40; | |
fVar32 = fVar19 - fVar44; | |
fVar34 = fVar22 + fVar41; | |
fVar44 = fVar44 + fVar19; | |
fVar22 = fVar22 - fVar41; | |
fVar19 = fVar46 + fVar39; | |
fVar46 = fVar46 - fVar39; | |
fVar39 = fVar24 + fVar37; | |
fVar24 = fVar24 - fVar37; | |
fVar37 = fVar42 - fVar34; | |
fVar40 = fVar39 + fVar19; | |
fVar34 = fVar34 + fVar42; | |
fVar39 = fVar39 - fVar19; | |
fVar42 = fVar24 + fVar46; | |
fVar24 = fVar24 - fVar46; | |
fVar19 = fVar35 - fVar22; | |
fVar22 = fVar22 + fVar35; | |
*pfVar9 = fVar29 + fVar47; | |
uVar14 = uVar14 + uVar11; | |
*pfVar4 = fVar31 * fVar17 + fVar27 * fVar45; | |
pfVar4[1] = fVar31 * fVar45 - fVar27 * fVar17; | |
pfVar9 = pfVar9 + uVar11 * 2; | |
pfVar10[-1] = fVar16 * fVar36 + fVar23 * fVar32; | |
*pfVar10 = fVar16 * fVar32 - fVar23 * fVar36; | |
pfVar4 = pfVar4 + uVar11 * 2; | |
*pfVar3 = fVar33 * fVar38 + fVar30 * fVar44; | |
pfVar3[1] = fVar33 * fVar44 - fVar30 * fVar38; | |
pfVar10 = pfVar10 + uVar11 * 2; | |
*pfVar7 = fVar25 * fVar40 + fVar21 * fVar37; | |
pfVar7[1] = fVar25 * fVar37 - fVar21 * fVar40; | |
pfVar3 = pfVar3 + uVar11 * 2; | |
*pfVar6 = fVar20 * fVar39 + fVar43 * fVar34; | |
pfVar6[1] = fVar20 * fVar34 - fVar43 * fVar39; | |
pfVar7 = pfVar7 + uVar11 * 2; | |
*pfVar2 = fVar18 * fVar42 + fVar28 * fVar19; | |
pfVar6 = pfVar6 + uVar11 * 2; | |
pfVar2[1] = fVar18 * fVar19 - fVar28 * fVar42; | |
*pfVar5 = fVar15 * fVar24 + fVar26 * fVar22; | |
pfVar5[1] = fVar15 * fVar22 - fVar26 * fVar24; | |
pfVar2 = pfVar2 + uVar11 * 2; | |
pfVar5 = pfVar5 + uVar11 * 2; | |
} while (uVar14 < param_2); | |
local_88 = local_88 + 2; | |
local_8c = local_8c + 2; | |
local_90 = local_90 + 2; | |
local_94 = local_94 + 2; | |
local_98 = local_98 + 2; | |
local_9c = local_9c + 2; | |
local_a0 = local_a0 + 2; | |
local_a4 = local_a4 + 2; | |
uVar13 = uVar13 + 1; | |
} while (uVar8 != uVar13); | |
local_78 = (local_78 & 0x1fff) << 3; | |
uVar11 = uVar8; | |
} | |
return; | |
} | |
undefined4 FUN_0800e8c0(int *param_1) | |
{ | |
code *pcVar1; | |
if (*param_1 << 0x1f < 0) { | |
return 0; | |
} | |
if (*(char *)((int)param_1 + 1) != '\0') { | |
// WARNING: Does not return | |
pcVar1 = (code *)software_udf(0xff,0x800e8cc); | |
(*pcVar1)(); | |
} | |
*(undefined1 *)((int)param_1 + 1) = 1; | |
return 1; | |
} | |
void FUN_0800e8d8(undefined4 *param_1) | |
{ | |
*param_1 = 1; | |
return; | |
} | |
void FUN_0800e8de(int param_1) | |
{ | |
int iVar1; | |
code *pcVar2; | |
if (param_1 == 0) { | |
param_1 = 1; | |
} | |
while (iVar1 = FUN_08010b28(param_1), iVar1 == 0) { | |
pcVar2 = (code *)FUN_0800e904(); | |
if (pcVar2 == (code *)0x0) { | |
pcVar2 = (code *)FUN_08010588(); | |
} | |
(*pcVar2)(); | |
} | |
return; | |
} | |
void thunk_FUN_0800e8de(int param_1) | |
{ | |
int iVar1; | |
code *pcVar2; | |
if (param_1 == 0) { | |
param_1 = 1; | |
} | |
while (iVar1 = FUN_08010b28(param_1), iVar1 == 0) { | |
pcVar2 = (code *)FUN_0800e904(); | |
if (pcVar2 == (code *)0x0) { | |
pcVar2 = (code *)FUN_08010588(); | |
} | |
(*pcVar2)(); | |
} | |
return; | |
} | |
undefined4 FUN_0800e904(void) | |
{ | |
DataMemoryBarrier(0x1b); | |
return *DAT_0800e910; | |
} | |
undefined4 FUN_0800e914(float param_1) | |
{ | |
undefined4 uVar1; | |
int iVar2; | |
undefined4 *puVar3; | |
undefined4 uVar4; | |
uVar4 = FUN_0800ebc8(); | |
iVar2 = FUN_0800eb80(param_1); | |
uVar1 = DAT_0800e984; | |
if (iVar2 != 0) { | |
if (param_1 != DAT_0800e97c && param_1 < DAT_0800e97c == (NAN(param_1) || NAN(DAT_0800e97c))) { | |
puVar3 = (undefined4 *)FUN_08012560(); | |
*puVar3 = 0x22; | |
return uVar1; | |
} | |
if ((int)((uint)(param_1 < DAT_0800e980) << 0x1f) < 0) { | |
puVar3 = (undefined4 *)FUN_08012560(); | |
uVar4 = DAT_0800e988; | |
*puVar3 = 0x22; | |
} | |
} | |
return uVar4; | |
} | |
float normalizeSensorExpressionValue(float param_1,float param_2) | |
{ | |
int iVar1; | |
undefined4 *puVar2; | |
float fVar3; | |
fVar3 = (float)FUN_0800ee2c(); | |
if (NAN(param_2)) { | |
return fVar3; | |
} | |
if (param_1 == 0.0) { | |
if (param_2 == 0.0) { | |
return 1.0; | |
} | |
iVar1 = FUN_0800eb80(param_2); | |
if (iVar1 == 0) { | |
return fVar3; | |
} | |
if (-1 < (int)((uint)(param_2 < 0.0) << 0x1f)) { | |
return fVar3; | |
} | |
} | |
else { | |
iVar1 = FUN_0800eb80(); | |
if (((iVar1 == 0) && (iVar1 = FUN_0800eb80(param_1), iVar1 != 0)) && | |
(iVar1 = FUN_0800eb80(param_2), iVar1 != 0)) { | |
if (NAN(fVar3)) { | |
puVar2 = (undefined4 *)FUN_08012560(); | |
*puVar2 = 0x21; | |
return fVar3; | |
} | |
} | |
else { | |
if (fVar3 != 0.0) { | |
return fVar3; | |
} | |
iVar1 = FUN_0800eb80(param_1); | |
if (iVar1 == 0) { | |
return fVar3; | |
} | |
iVar1 = FUN_0800eb80(param_2); | |
if (iVar1 == 0) { | |
return fVar3; | |
} | |
} | |
} | |
puVar2 = (undefined4 *)FUN_08012560(); | |
*puVar2 = 0x22; | |
return fVar3; | |
} | |
float FUN_0800ea48(float param_1) | |
{ | |
float fVar1; | |
undefined4 *puVar2; | |
float fVar3; | |
fVar3 = (float)FUN_0800edb0(); | |
fVar1 = DAT_0800ea88; | |
if ((!NAN(param_1)) && ((int)((uint)(param_1 < DAT_0800ea88) << 0x1f) < 0)) { | |
puVar2 = (undefined4 *)FUN_08012560(); | |
*puVar2 = 0x21; | |
return fVar1 / fVar1; | |
} | |
return fVar3; | |
} | |
undefined8 FUN_0800ea90(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
undefined4 uVar1; | |
int iVar2; | |
undefined4 *puVar3; | |
undefined8 uVar4; | |
undefined4 uVar5; | |
uVar4 = FUN_0800f4b0(); | |
uVar1 = (undefined4)uVar4; | |
uVar5 = (undefined4)((ulonglong)uVar4 >> 0x20); | |
iVar2 = FUN_08000b4c(param_3,param_4,param_3,param_4); | |
if (iVar2 != 0) { | |
return uVar4; | |
} | |
iVar2 = FUN_08000ae8(); | |
if (iVar2 == 0) { | |
iVar2 = FUN_0800ebb0(uVar1); | |
if (((iVar2 == 0) && (iVar2 = FUN_0800ebb0(param_1), iVar2 != 0)) && | |
(iVar2 = FUN_0800ebb0(param_3), iVar2 != 0)) { | |
iVar2 = FUN_08000b4c(uVar1,uVar5,uVar1,uVar5); | |
if (iVar2 != 0) { | |
puVar3 = (undefined4 *)FUN_08012560(); | |
*puVar3 = 0x21; | |
return uVar4; | |
} | |
goto LAB_0800eb62; | |
} | |
iVar2 = FUN_08000ae8(uVar1,uVar5,0,0); | |
if (iVar2 == 0) { | |
return uVar4; | |
} | |
iVar2 = FUN_0800ebb0(param_1); | |
if (iVar2 == 0) { | |
return uVar4; | |
} | |
iVar2 = FUN_0800ebb0(param_3); | |
} | |
else { | |
iVar2 = FUN_08000ae8(param_3,param_4,0,0); | |
if (iVar2 != 0) { | |
return DAT_0800eb78; | |
} | |
iVar2 = FUN_0800ebb0(param_3); | |
if (iVar2 == 0) { | |
return uVar4; | |
} | |
iVar2 = FUN_08000afc(param_3,param_4,0,0); | |
} | |
if (iVar2 == 0) { | |
return uVar4; | |
} | |
LAB_0800eb62: | |
puVar3 = (undefined4 *)FUN_08012560(); | |
*puVar3 = 0x22; | |
return uVar4; | |
} | |
bool FUN_0800eb80(uint param_1) | |
{ | |
return (param_1 & 0x7fffffff) < 0x7f800000; | |
} | |
uint FUN_0800eb94(uint param_1) | |
{ | |
return param_1 & 0x7fffffff; | |
} | |
undefined4 FUN_0800eba4(void) | |
{ | |
return DAT_0800ebac; | |
} | |
uint FUN_0800ebb0(void) | |
{ | |
undefined8 in_d0; | |
undefined4 uStack_4; | |
uStack_4 = (uint)((ulonglong)in_d0 >> 0x20); | |
return (uStack_4 | 0x80000000) + 0x100000 >> 0x1f; | |
} | |
// WARNING: Removing unreachable block (ram,0x0801015e) | |
float FUN_0800ebc8(float param_1) | |
{ | |
undefined4 *puVar1; | |
float fVar2; | |
int iVar3; | |
uint in_fpscr; | |
float fVar4; | |
float fVar5; | |
float fVar6; | |
fVar2 = ABS(param_1); | |
if (0x7f800000 < (uint)fVar2) { | |
return param_1 + param_1; | |
} | |
iVar3 = (int)param_1 >> 0x1f; | |
if (fVar2 != INFINITY) { | |
fVar5 = DAT_08010190; | |
if ((DAT_0800ed68 < (int)param_1) || | |
(((int)param_1 < 0 && (fVar5 = DAT_08010184, (uint)DAT_0800ed94 < (uint)fVar2)))) { | |
puVar1 = (undefined4 *)FUN_08012560(); | |
*puVar1 = 0x22; | |
return fVar5 * fVar5; | |
} | |
if ((uint)DAT_0800ed6c < (uint)fVar2) { | |
if ((uint)DAT_0800ed70 < (uint)fVar2) { | |
iVar3 = (int)(*(float *)(DAT_0800eda0 + iVar3 * -4) + param_1 * DAT_0800eda4); | |
fVar6 = (float)VectorSignedToFloat(iVar3,(byte)(in_fpscr >> 0x15) & 3); | |
fVar4 = param_1 + -fVar6 * DAT_0800eda8; | |
fVar6 = fVar6 * DAT_0800edac; | |
} | |
else { | |
fVar4 = param_1 - *(float *)(DAT_0800ed74 + iVar3 * -4); | |
fVar6 = *(float *)(DAT_0800ed78 + iVar3 * -4); | |
iVar3 = (-iVar3 ^ 1U) + iVar3; | |
} | |
param_1 = fVar4 - fVar6; | |
fVar2 = param_1 * param_1; | |
fVar5 = param_1 + -(DAT_0800ed88 + | |
(DAT_0800ed8c + | |
(DAT_0800ed84 + (DAT_0800ed80 + fVar2 * DAT_0800ed7c) * fVar2) * fVar2) * | |
fVar2) * fVar2; | |
fVar2 = param_1 * fVar5; | |
if (iVar3 != 0) { | |
fVar2 = 1.0 - ((fVar6 - fVar2 / (2.0 - fVar5)) - fVar4); | |
if (iVar3 + 0x7d < 0 == SCARRY4(iVar3,0x7d)) { | |
return (float)((int)fVar2 + iVar3 * 0x800000); | |
} | |
return (float)((int)fVar2 + (iVar3 + 100) * 0x800000) * DAT_0800ed9c; | |
} | |
} | |
else { | |
if (((uint)fVar2 < 0x34000000) && | |
(fVar2 = param_1 + DAT_0800ed90, fVar2 != 1.0 && fVar2 < 1.0 == NAN(fVar2))) { | |
return param_1 + 1.0; | |
} | |
fVar2 = param_1 * param_1; | |
fVar5 = param_1 + -fVar2 * (DAT_0800ed88 + | |
fVar2 * (DAT_0800ed8c + | |
fVar2 * (DAT_0800ed84 + | |
fVar2 * (DAT_0800ed80 + fVar2 * DAT_0800ed7c)))); | |
fVar2 = param_1 * fVar5; | |
} | |
return 1.0 - (fVar2 / (fVar5 - 2.0) - param_1); | |
} | |
if (-iVar3 != 0) { | |
param_1 = DAT_0800ed98; | |
} | |
return param_1; | |
} | |
float FUN_0800edb0(float param_1) | |
{ | |
return SQRT(param_1); | |
} | |
float combineSensorValues(float param_1,float param_2) | |
{ | |
int iVar1; | |
iVar1 = FUN_0800edf4(); | |
if ((iVar1 != 0) && | |
((iVar1 = FUN_0800edf4(param_2), iVar1 == 0 || | |
(param_1 != param_2 && param_1 < param_2 == (NAN(param_1) || NAN(param_2)))))) { | |
return param_1; | |
} | |
return param_2; | |
} | |
bool FUN_0800edf4(uint param_1) | |
{ | |
param_1 = param_1 & 0x7fffffff; | |
if (param_1 == 0) { | |
return (bool)2; | |
} | |
if (0x7effffff < param_1 - 0x800000) { | |
if (DAT_0800ee28 < param_1 - 1) { | |
return param_1 == 0x7f800000; | |
} | |
return (bool)3; | |
} | |
return (bool)4; | |
} | |
float FUN_0800ee2c(float param_1,float param_2) | |
{ | |
int iVar1; | |
int iVar2; | |
undefined4 *puVar3; | |
float fVar4; | |
int iVar5; | |
float fVar6; | |
uint uVar7; | |
uint uVar8; | |
float fVar9; | |
float fVar10; | |
uint in_fpscr; | |
float extraout_s0; | |
float extraout_s0_00; | |
float fVar11; | |
float fVar12; | |
float fVar13; | |
float fVar14; | |
float fVar15; | |
float fVar16; | |
float fVar17; | |
fVar9 = ABS(param_2); | |
if (fVar9 == 0.0) { | |
uVar7 = (uint)param_1 ^ 0x400000; | |
} | |
else { | |
fVar10 = ABS(param_1); | |
if (((uint)fVar10 < 0x7f800001) && ((uint)fVar9 < 0x7f800001)) { | |
if ((int)param_1 < 0) { | |
if (0x4b7fffff < (uint)fVar9) { | |
if (fVar9 == INFINITY) goto LAB_0800f096; | |
iVar1 = 2; | |
goto LAB_0800f0c0; | |
} | |
if (0x3f7fffff < (uint)fVar9) { | |
uVar8 = 0x96 - ((int)fVar9 >> 0x17); | |
uVar7 = (int)fVar9 >> (uVar8 & 0xff); | |
if ((float)(uVar7 << (uVar8 & 0xff)) != fVar9) { | |
if (fVar9 == 1.0) { | |
LAB_0800f0fc: | |
if (-1 < (int)param_2) { | |
return param_1; | |
} | |
return 1.0 / param_1; | |
} | |
if (param_2 == 2.0) goto LAB_0800f144; | |
goto LAB_0800f130; | |
} | |
if (fVar9 == 1.0) goto LAB_0800f0fc; | |
if (param_2 == 2.0) goto LAB_0800f144; | |
iVar1 = 2 - (uVar7 & 1); | |
goto LAB_0800f0c0; | |
} | |
if (param_2 == 2.0) { | |
LAB_0800f144: | |
return param_1 * param_1; | |
} | |
if (param_2 != 0.5) goto LAB_0800f130; | |
iVar2 = FUN_0800eb94(); | |
if (fVar10 == INFINITY) { | |
return extraout_s0; | |
} | |
iVar1 = 0; | |
fVar11 = extraout_s0; | |
if (fVar10 == 0.0) goto LAB_0800f0e6; | |
LAB_0800ef02: | |
if (fVar10 != 1.0) { | |
if (iVar1 == 0 && (int)param_1 < 0) { | |
return (param_1 - param_1) / (param_1 - param_1); | |
} | |
fVar16 = DAT_08010184; | |
if (0x4d000000 < (uint)fVar9) { | |
if ((uint)DAT_0800f168 < (uint)fVar10) { | |
if ((uint)fVar10 <= (uint)DAT_0800f16c) { | |
fVar11 = fVar11 - 1.0; | |
fVar9 = -(DAT_0800f178 * | |
fVar11 * fVar11 * (-(DAT_0800f170 + -fVar11 * 0.25) * fVar11 + 0.5)) + | |
fVar11 * DAT_0800f174; | |
fVar10 = (float)((uint)(fVar9 + fVar11 * DAT_0800f17c) & 0xfffff000); | |
fVar9 = fVar9 - (fVar10 + -fVar11 * DAT_0800f17c); | |
goto LAB_0800ef86; | |
} | |
if (0 < (int)param_2) goto LAB_0800f3c0; | |
} | |
else if ((int)param_2 < 0) { | |
LAB_0800f3c0: | |
iVar2 = 0; | |
fVar16 = DAT_08010190; | |
goto LAB_0801015c; | |
} | |
iVar2 = 0; | |
goto LAB_0801015c; | |
} | |
if (((uint)param_1 & 0x7f800000) == 0) { | |
fVar10 = fVar11 * DAT_0800f1a4; | |
iVar5 = -0x18; | |
} | |
else { | |
iVar5 = 0; | |
} | |
uVar7 = (uint)fVar10 & 0x7fffff; | |
iVar5 = ((int)fVar10 >> 0x17) + -0x7f + iVar5; | |
fVar10 = (float)(uVar7 | 0x3f800000); | |
fVar9 = DAT_0800f470; | |
fVar11 = DAT_0800f470; | |
if (DAT_0800f468 < (int)uVar7) { | |
if (DAT_0800f46c < (int)uVar7) { | |
iVar5 = iVar5 + 1; | |
fVar10 = (float)((int)fVar10 - 0x800000); | |
fVar14 = 1.0; | |
iVar2 = 0; | |
} | |
else { | |
fVar14 = 1.5; | |
iVar2 = 0x200000; | |
fVar9 = DAT_0800f4a8; | |
fVar11 = DAT_0800f4a4; | |
} | |
} | |
else { | |
fVar14 = 1.0; | |
iVar2 = 0; | |
} | |
fVar12 = 1.0 / (fVar10 + fVar14); | |
fVar6 = (float)(((int)fVar10 >> 1 | 0x20000000U) + 0x40000 + iVar2); | |
fVar13 = (fVar10 - fVar14) * fVar12; | |
fVar17 = (float)VectorSignedToFloat(iVar5,(byte)(in_fpscr >> 0x15) & 3); | |
fVar4 = (float)((uint)fVar13 & DAT_0800f474); | |
fVar15 = fVar13 * fVar13; | |
fVar12 = ((fVar10 - fVar14) + -fVar4 * fVar6 + -fVar4 * (fVar10 - (fVar6 - fVar14))) * | |
fVar12; | |
fVar14 = (fVar13 + fVar4) * fVar12 + | |
fVar15 * fVar15 * | |
(DAT_0800f48c + | |
(DAT_0800f488 + | |
(DAT_0800f484 + | |
(DAT_0800f480 + (DAT_0800f478 + fVar15 * DAT_0800f47c) * fVar15) * fVar15) * | |
fVar15) * fVar15); | |
fVar10 = (float)((uint)(fVar4 * fVar4 + 3.0 + fVar14) & DAT_0800f474); | |
fVar6 = (fVar14 - ((fVar10 - 3.0) + -fVar4 * fVar4)) * fVar13 + fVar12 * fVar10; | |
fVar14 = (float)((uint)(fVar6 + fVar4 * fVar10) & DAT_0800f474); | |
fVar9 = (fVar6 - (fVar14 + -fVar4 * fVar10)) * DAT_0800f490 + fVar14 * DAT_0800f494 + | |
fVar9; | |
fVar10 = (float)((uint)(fVar9 + fVar14 * DAT_0800f498 + fVar11 + fVar17) & DAT_0800f474); | |
fVar9 = fVar9 - (((fVar10 - fVar17) - fVar11) + -fVar14 * DAT_0800f498); | |
LAB_0800ef86: | |
fVar11 = fVar10 * (float)((uint)param_2 & 0xfffff000); | |
fVar10 = fVar9 * param_2 + (param_2 - (float)((uint)param_2 & 0xfffff000)) * fVar10; | |
fVar14 = -1.0; | |
fVar9 = fVar10 + fVar11; | |
if (iVar1 != 1 || -1 < (int)param_1) { | |
fVar14 = 1.0; | |
} | |
fVar4 = ABS(fVar9); | |
if ((int)fVar9 < 1) { | |
if ((uint)fVar4 <= (uint)DAT_0800f49c) { | |
if (fVar4 != DAT_0800f49c) goto LAB_0800efda; | |
if (fVar9 - fVar11 < fVar10 != (NAN(fVar9 - fVar11) || NAN(fVar10))) { | |
uVar8 = (int)fVar9 + 0x8000; | |
uVar7 = (uVar8 * 2 >> 0x18) - 0x7f; | |
fVar16 = (float)(DAT_0800f4a0 >> (uVar7 & 0xff) & uVar8); | |
iVar1 = (int)(uVar8 & 0x7fffff | 0x800000) >> (0x17 - uVar7 & 0xff); | |
LAB_0800f378: | |
iVar1 = -iVar1; | |
goto LAB_0800f37a; | |
} | |
} | |
iVar1 = (uint)(fVar14 < 0.0) << 0x1f; | |
if (iVar1 < 0) { | |
iVar2 = 1; | |
} | |
if (-1 < iVar1) { | |
iVar2 = 0; | |
} | |
goto LAB_0801015c; | |
} | |
if ((uint)fVar4 < 0x43000001) { | |
if (fVar4 == 128.0) { | |
fVar4 = fVar9 - fVar11; | |
fVar16 = fVar10 + DAT_0800f4ac; | |
if (fVar16 != fVar4 && fVar16 < fVar4 == (NAN(fVar16) || NAN(fVar4))) | |
goto LAB_0800f446; | |
uVar8 = (int)fVar9 + 0x8000; | |
uVar7 = ((int)uVar8 >> 0x17) - 0x7f; | |
fVar16 = (float)(DAT_0800f4a0 >> (uVar7 & 0xff) & uVar8); | |
iVar1 = (int)(uVar8 & 0x7fffff | 0x800000) >> (0x17 - uVar7 & 0xff); | |
} | |
else { | |
LAB_0800efda: | |
if ((uint)fVar4 < 0x3f000001) { | |
iVar2 = 0; | |
iVar1 = 0; | |
goto LAB_0800efe6; | |
} | |
uVar7 = (0x800000 >> (((int)fVar4 >> 0x17) - 0x7eU & 0xff)) + (int)fVar9; | |
uVar8 = (uVar7 * 2 >> 0x18) - 0x7f; | |
iVar1 = (int)(uVar7 & 0x7fffff | 0x800000) >> (0x17 - uVar8 & 0xff); | |
fVar16 = (float)(DAT_0800f4a0 >> (uVar8 & 0xff) & uVar7); | |
if ((int)fVar9 < 0) goto LAB_0800f378; | |
} | |
LAB_0800f37a: | |
fVar11 = fVar11 - fVar16; | |
iVar2 = iVar1 << 0x17; | |
fVar9 = fVar10 + fVar11; | |
LAB_0800efe6: | |
fVar9 = (float)((uint)fVar9 & 0xfffff000); | |
fVar16 = fVar9 * DAT_0800f180 + (fVar10 - (fVar9 - fVar11)) * DAT_0800f19c; | |
fVar11 = fVar16 + fVar9 * DAT_0800f184; | |
fVar10 = fVar11 * fVar11; | |
fVar16 = fVar16 - (fVar11 + -fVar9 * DAT_0800f184); | |
fVar9 = fVar11 + -(DAT_0800f198 + | |
(DAT_0800f194 + | |
(DAT_0800f190 + (DAT_0800f18c + fVar10 * DAT_0800f188) * fVar10) * | |
fVar10) * fVar10) * fVar10; | |
fVar9 = (float)((int)(1.0 - (((fVar11 * fVar9) / (fVar9 - 2.0) - | |
(fVar16 + fVar11 * fVar16)) - fVar11)) + iVar2); | |
if ((int)fVar9 < 0x800000) { | |
fVar9 = (float)FUN_08010194(iVar1); | |
} | |
return fVar9 * fVar14; | |
} | |
LAB_0800f446: | |
iVar1 = (uint)(fVar14 < 0.0) << 0x1f; | |
if (iVar1 < 0) { | |
iVar2 = 1; | |
} | |
fVar16 = DAT_08010190; | |
if (-1 < iVar1) { | |
iVar2 = 0; | |
} | |
LAB_0801015c: | |
fVar9 = fVar16; | |
if (iVar2 != 0) { | |
fVar9 = -fVar16; | |
} | |
puVar3 = (undefined4 *)FUN_08012560(); | |
*puVar3 = 0x22; | |
return fVar9 * fVar16; | |
} | |
} | |
else { | |
if (fVar9 == INFINITY) { | |
LAB_0800f096: | |
if (fVar10 == 1.0) { | |
return 1.0; | |
} | |
if (0x3f800000 < (uint)fVar10) { | |
if (-1 < (int)param_2) { | |
return param_2; | |
} | |
return DAT_0800f1a0; | |
} | |
if (-1 < (int)param_2) { | |
return DAT_0800f1a0; | |
} | |
return -param_2; | |
} | |
if (fVar9 == 1.0) goto LAB_0800f0fc; | |
if (param_2 == 2.0) goto LAB_0800f144; | |
if (param_2 == 0.5) { | |
fVar9 = (float)FUN_0800edb0(); | |
return fVar9; | |
} | |
LAB_0800f130: | |
iVar1 = 0; | |
LAB_0800f0c0: | |
iVar2 = FUN_0800eb94(param_1); | |
fVar11 = extraout_s0_00; | |
if ((fVar10 != INFINITY) && (fVar10 != 0.0)) goto LAB_0800ef02; | |
} | |
if ((int)param_2 < 0) { | |
fVar11 = 1.0 / fVar11; | |
} | |
if (-1 < (int)param_1) { | |
return fVar11; | |
} | |
LAB_0800f0e6: | |
if (fVar10 == 1.0 && iVar1 == 0) { | |
return (fVar11 - fVar11) / (fVar11 - fVar11); | |
} | |
if (iVar1 != 1) { | |
return fVar11; | |
} | |
return -fVar11; | |
} | |
if (param_1 != 1.0) goto LAB_0800ee54; | |
uVar7 = (uint)param_2 ^ 0x400000; | |
} | |
if (uVar7 * 2 < 0xff800001) { | |
return 1.0; | |
} | |
LAB_0800ee54: | |
return param_1 + param_2; | |
} | |
/* | |
Unable to decompile 'FUN_0800f4b0' | |
Cause: | |
Low-level Error: Overlapping input varnodes | |
*/ | |
float FUN_08010194(float param_1,int param_2) | |
{ | |
float fVar1; | |
uint uVar2; | |
fVar1 = ABS(param_1); | |
if (fVar1 == 0.0) { | |
return param_1; | |
} | |
if (0x7f7fffff < (uint)fVar1) { | |
return param_1 + param_1; | |
} | |
if (((uint)param_1 & 0x7f800000) == 0) { | |
param_1 = param_1 * DAT_0801025c; | |
if (param_2 < DAT_08010260) { | |
return param_1 * DAT_08010270; | |
} | |
uVar2 = ((uint)((int)param_1 << 1) >> 0x18) - 0x19; | |
} | |
else { | |
uVar2 = (uint)fVar1 >> 0x17; | |
} | |
if ((param_2 < 0xc351) && (param_2 = uVar2 + param_2, param_2 < 0xff)) { | |
if (0 < param_2) { | |
return (float)((uint)param_1 & 0x807fffff | param_2 * 0x800000); | |
} | |
if (param_2 + 0x16 < 0 != SCARRY4(param_2,0x16)) { | |
fVar1 = DAT_08010270; | |
if ((int)param_1 < 0) { | |
fVar1 = DAT_08010274; | |
} | |
return fVar1 * DAT_08010270; | |
} | |
return (float)((uint)param_1 & 0x807fffff | (param_2 + 0x19) * 0x800000) * DAT_0801026c; | |
} | |
fVar1 = DAT_08010264; | |
if ((int)param_1 < 0) { | |
fVar1 = DAT_08010268; | |
} | |
return fVar1 * DAT_08010264; | |
} | |
longlong FUN_08010278(void) | |
{ | |
ulonglong in_d0; | |
return ((ulonglong)((uint)(in_d0 >> 0x20) & 0x7fffffff) << 0x20) + (in_d0 & 0xffffffff); | |
} | |
ulonglong FUN_08010288(int param_1) | |
{ | |
uint uVar1; | |
uint uVar2; | |
ulonglong in_d0; | |
ulonglong uVar3; | |
uVar1 = (uint)((int)(in_d0 >> 0x20) << 1) >> 0x15; | |
if (uVar1 == 0) { | |
if ((in_d0 & 0x7fffffff00000000) == 0 && (int)in_d0 == 0) { | |
return in_d0; | |
} | |
in_d0 = FUN_08000618(); | |
uVar3 = in_d0; | |
if (param_1 < DAT_08010394) goto LAB_0801035c; | |
uVar1 = ((uint)((int)(in_d0 >> 0x20) << 1) >> 0x15) - 0x36; | |
} | |
else if (uVar1 == 0x7ff) { | |
uVar3 = fp_multiply(); | |
return uVar3; | |
} | |
uVar2 = (uint)(in_d0 >> 0x20); | |
if ((50000 < param_1) || (param_1 = param_1 + uVar1, 0x7fe < param_1)) { | |
if ((longlong)in_d0 < 0) { | |
uVar3 = FUN_08000618(DAT_08010378,DAT_0801037c,DAT_08010370,DAT_08010374); | |
} | |
else { | |
uVar3 = FUN_08000618(DAT_08010370,DAT_08010374,DAT_08010370,DAT_08010374); | |
} | |
return uVar3; | |
} | |
if (0 < param_1) { | |
return CONCAT44(uVar2 & 0x800fffff | param_1 * 0x100000,(int)in_d0); | |
} | |
if (param_1 + 0x35 < 0 == SCARRY4(param_1,0x35)) { | |
uVar3 = FUN_08000618((int)in_d0,uVar2 & 0x800fffff | (param_1 + 0x36) * 0x100000,0,DAT_08010398) | |
; | |
return uVar3; | |
} | |
uVar3 = CONCAT44(DAT_08010384,DAT_08010380); | |
if ((longlong)in_d0 < 0) { | |
uVar3 = CONCAT44(DAT_0801038c,DAT_08010388); | |
} | |
LAB_0801035c: | |
uVar3 = FUN_08000618((int)uVar3,(int)(uVar3 >> 0x20),DAT_08010380,DAT_08010384); | |
return uVar3; | |
} | |
char * FUN_08010588(undefined4 param_1,undefined4 param_2,uint param_3,int *param_4,int *param_5) | |
{ | |
char *pcVar1; | |
undefined4 uVar2; | |
char cVar3; | |
int iVar4; | |
int iVar5; | |
int iVar6; | |
uint uVar7; | |
int *piVar8; | |
uint in_lr; | |
undefined4 uVar9; | |
longlong extraout_d0; | |
undefined8 uVar10; | |
uint uStack_30; | |
int *piStack_2c; | |
piVar8 = param_4; | |
FUN_08012508(6); | |
uVar10 = FUN_0800707c(1); | |
iVar5 = (int)((ulonglong)uVar10 >> 0x20); | |
iVar6 = (int)((ulonglong)extraout_d0 >> 0x20); | |
uVar9 = (undefined4)extraout_d0; | |
if (extraout_d0 < 0) { | |
iVar4 = iVar6 + -0x80000000; | |
iVar6 = iVar4; | |
} | |
else { | |
iVar4 = 0; | |
} | |
cVar3 = (char)iVar4; | |
if (extraout_d0 < 0) { | |
cVar3 = '-'; | |
} | |
*(char *)piVar8 = cVar3; | |
uVar7 = in_lr & 0xffffffdf; | |
if (uVar7 == 0x46) { | |
uVar2 = 3; | |
} | |
else { | |
if (uVar7 == 0x45) { | |
iVar5 = iVar5 + 1; | |
} | |
uVar2 = 2; | |
} | |
uStack_30 = param_3; | |
piStack_2c = piVar8; | |
pcVar1 = (char *)FUN_08012700(uVar9,(int)uVar10,uVar2,iVar5,param_4,&uStack_30,&piStack_2c); | |
if (uVar7 == 0x47) { | |
if ((param_3 & 1) == 0) goto LAB_0801061a; | |
piVar8 = (int *)(pcVar1 + iVar5); | |
} | |
else { | |
piVar8 = (int *)(pcVar1 + iVar5); | |
if (uVar7 == 0x46) { | |
if ((*pcVar1 == '0') && (iVar4 = FUN_08000ae8(uVar9,iVar6,0,0), iVar4 == 0)) { | |
*param_4 = 1 - iVar5; | |
} | |
piVar8 = (int *)((int)piVar8 + *param_4); | |
} | |
} | |
iVar6 = FUN_08000ae8(uVar9,iVar6,0,0); | |
if (iVar6 != 0) { | |
piStack_2c = piVar8; | |
} | |
while (piStack_2c < piVar8) { | |
*(char *)piStack_2c = '0'; | |
piStack_2c = (int *)((int)piStack_2c + 1); | |
} | |
LAB_0801061a: | |
*param_5 = (int)piStack_2c - (int)pcVar1; | |
return pcVar1; | |
} | |
char * FUN_08010596(undefined4 param_1,int param_2,uint param_3,char *param_4,int *param_5, | |
uint param_6,int *param_7) | |
{ | |
char *pcVar1; | |
undefined4 uVar2; | |
char cVar3; | |
int iVar4; | |
int iVar5; | |
char *pcVar6; | |
undefined4 uVar7; | |
longlong in_d0; | |
uint uStack_28; | |
char *local_24; | |
iVar5 = (int)((ulonglong)in_d0 >> 0x20); | |
uVar7 = (undefined4)in_d0; | |
if (in_d0 < 0) { | |
iVar4 = iVar5 + -0x80000000; | |
iVar5 = iVar4; | |
} | |
else { | |
iVar4 = 0; | |
} | |
cVar3 = (char)iVar4; | |
if (in_d0 < 0) { | |
cVar3 = '-'; | |
} | |
*param_4 = cVar3; | |
param_6 = param_6 & 0xffffffdf; | |
if (param_6 == 0x46) { | |
uVar2 = 3; | |
} | |
else { | |
if (param_6 == 0x45) { | |
param_2 = param_2 + 1; | |
} | |
uVar2 = 2; | |
} | |
uStack_28 = param_3; | |
local_24 = param_4; | |
pcVar1 = (char *)FUN_08012700(uVar7,param_1,uVar2,param_2,param_5,&uStack_28,&local_24); | |
if (param_6 == 0x47) { | |
if ((param_3 & 1) == 0) goto LAB_0801061a; | |
pcVar6 = pcVar1 + param_2; | |
} | |
else { | |
pcVar6 = pcVar1 + param_2; | |
if (param_6 == 0x46) { | |
if ((*pcVar1 == '0') && (iVar4 = FUN_08000ae8(uVar7,iVar5,0,0), iVar4 == 0)) { | |
*param_5 = 1 - param_2; | |
} | |
pcVar6 = pcVar6 + *param_5; | |
} | |
} | |
iVar5 = FUN_08000ae8(uVar7,iVar5,0,0); | |
if (iVar5 != 0) { | |
local_24 = pcVar6; | |
} | |
while (local_24 < pcVar6) { | |
*local_24 = '0'; | |
local_24 = local_24 + 1; | |
} | |
LAB_0801061a: | |
*param_7 = (int)local_24 - (int)pcVar1; | |
return pcVar1; | |
} | |
int FUN_08010660(undefined1 *param_1,uint param_2,undefined4 param_3) | |
{ | |
bool bVar1; | |
char cVar2; | |
undefined1 *puVar3; | |
undefined1 uVar4; | |
undefined1 *puVar5; | |
undefined1 *puVar6; | |
int iVar7; | |
undefined1 *puVar8; | |
undefined4 uStack_1c; | |
undefined4 uStack_18; | |
uStack_18 = param_3; | |
uStack_1c = param_2; | |
if ((int)param_2 < 0) { | |
param_2 = -param_2; | |
uVar4 = 0x2d; | |
} | |
else { | |
uVar4 = 0x2b; | |
} | |
*param_1 = (char)param_3; | |
param_1[1] = uVar4; | |
if ((int)param_2 < 10) { | |
param_1[2] = 0x30; | |
param_1[3] = (char)param_2 + '0'; | |
puVar3 = param_1 + 4; | |
} | |
else { | |
puVar5 = (undefined1 *)((int)&uStack_1c + 3); | |
puVar3 = puVar5; | |
do { | |
puVar6 = puVar3; | |
cVar2 = (char)(param_2 / 10); | |
puVar6[-1] = (char)param_2 + cVar2 * -10 + '0'; | |
bVar1 = 99 < (int)param_2; | |
param_2 = param_2 / 10; | |
puVar3 = puVar6 + -1; | |
} while (bVar1); | |
puVar6[-2] = cVar2 + '0'; | |
puVar3 = param_1 + 1; | |
for (puVar8 = puVar6 + -2; puVar8 < puVar5; puVar8 = puVar8 + 1) { | |
puVar3 = puVar3 + 1; | |
*puVar3 = *puVar8; | |
} | |
iVar7 = (int)&uStack_18 + (1 - (int)puVar6); | |
if (puVar5 < puVar6 + -2) { | |
iVar7 = 0; | |
} | |
puVar3 = param_1 + iVar7 + 2; | |
} | |
return (int)puVar3 - (int)param_1; | |
} | |
uint FUN_080106d4(undefined4 param_1,uint *param_2,undefined4 param_3,code *param_4,int *param_5) | |
{ | |
undefined4 *puVar1; | |
undefined4 uVar2; | |
int iVar3; | |
int iVar4; | |
int iVar5; | |
undefined4 uVar6; | |
uint *puVar7; | |
uint *puVar8; | |
uint uVar9; | |
uint uVar10; | |
byte bVar11; | |
uint uVar12; | |
char local_35; | |
uint local_34; | |
uint local_30; | |
uint local_2c [2]; | |
puVar1 = (undefined4 *)FUN_080125bc(); | |
uVar6 = *puVar1; | |
uVar2 = strlen_custom(uVar6); | |
local_30 = 0; | |
puVar7 = (uint *)(*param_5 + 7U & 0xfffffff8); | |
bVar11 = (byte)param_2[6]; | |
uVar12 = *param_2; | |
*param_5 = (int)(puVar7 + 2); | |
uVar9 = *puVar7; | |
uVar10 = puVar7[1]; | |
param_2[0x12] = uVar9; | |
param_2[0x13] = uVar10; | |
iVar3 = FUN_08000b4c(uVar9,uVar10 & 0x7fffffff,0xffffffff,DAT_0801099c); | |
if ((iVar3 == 0) && | |
(iVar3 = FUN_08000b10(uVar9,uVar10 & 0x7fffffff,0xffffffff,DAT_0801099c), iVar3 == 0)) { | |
iVar3 = FUN_08000afc(uVar9,uVar10,0,0); | |
puVar7 = DAT_080109a0; | |
puVar8 = DAT_080109a4; | |
if (iVar3 != 0) { | |
*(undefined1 *)((int)param_2 + 0x43) = 0x2d; | |
puVar7 = DAT_080109a0; | |
puVar8 = DAT_080109a4; | |
} | |
LAB_0801075e: | |
if (bVar11 < 0x48) { | |
puVar7 = puVar8; | |
} | |
param_2[4] = 3; | |
*param_2 = uVar12 & 0xfffffffb; | |
uVar12 = 0; | |
} | |
else { | |
iVar3 = FUN_08000b4c(uVar9,uVar10,uVar9,uVar10); | |
if (iVar3 != 0) { | |
puVar7 = DAT_080109a8; | |
puVar8 = DAT_080109ac; | |
if ((int)uVar10 < 0) { | |
*(undefined1 *)((int)param_2 + 0x43) = 0x2d; | |
puVar7 = DAT_080109a8; | |
puVar8 = DAT_080109ac; | |
} | |
goto LAB_0801075e; | |
} | |
if (param_2[1] == 0xffffffff) { | |
uVar10 = 6; | |
LAB_080107c2: | |
param_2[1] = uVar10; | |
} | |
else if (((bVar11 & 0xdf) == 0x47) && (param_2[1] == 0)) { | |
uVar10 = 1; | |
goto LAB_080107c2; | |
} | |
uVar12 = uVar12 | 0x400; | |
*param_2 = uVar12; | |
puVar7 = (uint *)FUN_08010596(uVar9,param_1,param_2[1],uVar12,&local_35,&local_34,bVar11, | |
&local_30,0); | |
if ((bVar11 & 0xdf) == 0x47) { | |
if (((int)(local_34 + 3) < 0 != SCARRY4(local_34,3)) || ((int)param_2[1] < (int)local_34)) { | |
bVar11 = bVar11 - 2; | |
goto LAB_08010804; | |
} | |
bVar11 = 0x67; | |
LAB_08010884: | |
if ((int)local_34 < (int)local_30) { | |
if ((int)local_34 < 1) { | |
iVar3 = 2 - local_34; | |
} | |
else { | |
iVar3 = 1; | |
} | |
uVar12 = local_30 + iVar3; | |
LAB_08010866: | |
param_2[4] = uVar12; | |
} | |
else { | |
param_2[4] = local_34; | |
if ((int)(*param_2 << 0x1f) < 0) { | |
uVar12 = local_34 + 1; | |
goto LAB_08010866; | |
} | |
} | |
LAB_08010868: | |
param_2[0x16] = local_34; | |
uVar12 = 0; | |
} | |
else { | |
if (0x65 < bVar11) { | |
if (bVar11 != 0x66) goto LAB_08010884; | |
uVar12 = param_2[1]; | |
if ((int)local_34 < 1) { | |
if ((uVar12 == 0) && (-1 < (int)(*param_2 << 0x1f))) { | |
uVar12 = 1; | |
} | |
else { | |
uVar12 = uVar12 + 2; | |
} | |
} | |
else { | |
param_2[4] = local_34; | |
if ((uVar12 == 0) && (-1 < (int)(*param_2 << 0x1f))) goto LAB_08010868; | |
uVar12 = uVar12 + 1 + local_34; | |
} | |
goto LAB_08010866; | |
} | |
LAB_08010804: | |
local_34 = local_34 - 1; | |
uVar12 = FUN_08010660(param_2 + 0x14,local_34,bVar11); | |
param_2[4] = local_30 + uVar12; | |
if ((1 < (int)local_30) || ((int)(*param_2 << 0x1f) < 0)) { | |
param_2[4] = local_30 + uVar12 + 1; | |
} | |
} | |
if (local_35 != '\0') { | |
*(undefined1 *)((int)param_2 + 0x43) = 0x2d; | |
} | |
} | |
iVar3 = FUN_08010c7c(param_1,param_2,local_2c,param_3,param_4); | |
uVar9 = local_30; | |
if (iVar3 == -1) { | |
return 0xffffffff; | |
} | |
if ((int)(*param_2 << 0x15) < 0) { | |
if (bVar11 < 0x66) { | |
if (((int)local_30 < 2) && (-1 < (int)(*param_2 << 0x1f))) { | |
iVar5 = 1; | |
LAB_08010ac2: | |
iVar3 = (*param_4)(param_1,param_3,puVar7,iVar5); | |
if (iVar3 == -1) { | |
return 0xffffffff; | |
} | |
} | |
else { | |
iVar3 = (*param_4)(param_1,param_3,puVar7,1); | |
if (iVar3 == -1) { | |
return 0xffffffff; | |
} | |
iVar3 = (*param_4)(param_1,param_3,uVar6,uVar2); | |
if (iVar3 == -1) { | |
return 0xffffffff; | |
} | |
iVar5 = uVar9 - 1; | |
iVar3 = FUN_08000ae8(param_2[0x12],param_2[0x13],0,0); | |
if (iVar3 == 0) { | |
puVar7 = (uint *)((int)puVar7 + 1); | |
goto LAB_08010ac2; | |
} | |
for (iVar3 = 0; iVar3 < iVar5; iVar3 = iVar3 + 1) { | |
iVar4 = (*param_4)(param_1,param_3,(int)param_2 + 0x1a,1); | |
if (iVar4 == -1) { | |
return 0xffffffff; | |
} | |
} | |
} | |
puVar7 = param_2 + 0x14; | |
} | |
else { | |
iVar3 = FUN_08000ae8(param_2[0x12],param_2[0x13],0,0); | |
uVar12 = local_30; | |
if (iVar3 != 0) { | |
iVar3 = (*param_4)(param_1,param_3,DAT_080109b0,1); | |
uVar12 = local_30; | |
if (iVar3 == -1) { | |
return 0xffffffff; | |
} | |
if (((int)local_34 < (int)local_30) || ((int)(*param_2 << 0x1f) < 0)) { | |
iVar3 = (*param_4)(param_1,param_3,uVar6,uVar2); | |
if (iVar3 == -1) { | |
return 0xffffffff; | |
} | |
for (iVar3 = 0; iVar3 < (int)(uVar12 - 1); iVar3 = iVar3 + 1) { | |
iVar5 = (*param_4)(param_1,param_3,(int)param_2 + 0x1a,1); | |
if (iVar5 == -1) { | |
return 0xffffffff; | |
} | |
} | |
} | |
goto LAB_08010910; | |
} | |
if (0 < (int)local_34) { | |
uVar9 = param_2[0x16]; | |
if ((int)local_30 <= (int)param_2[0x16]) { | |
uVar9 = local_30; | |
} | |
if ((0 < (int)uVar9) && (iVar3 = (*param_4)(param_1,param_3,puVar7), iVar3 == -1)) { | |
return 0xffffffff; | |
} | |
for (iVar3 = 0; uVar10 = param_2[0x16], | |
iVar3 < (int)(uVar10 - (uVar9 & ~((int)uVar9 >> 0x1f))); iVar3 = iVar3 + 1) { | |
iVar5 = (*param_4)(param_1,param_3,(int)param_2 + 0x1a,1); | |
if (iVar5 == -1) { | |
return 0xffffffff; | |
} | |
} | |
if ((((int)local_34 < (int)uVar12) || ((int)(*param_2 << 0x1f) < 0)) && | |
(iVar3 = (*param_4)(param_1,param_3,uVar6,uVar2), iVar3 == -1)) { | |
return 0xffffffff; | |
} | |
uVar9 = uVar12 - local_34; | |
if ((int)(uVar12 - uVar10) <= (int)(uVar12 - local_34)) { | |
uVar9 = uVar12 - uVar10; | |
} | |
if ((0 < (int)uVar9) && | |
(iVar3 = (*param_4)(param_1,param_3,uVar10 + (int)puVar7,uVar9), iVar3 == -1)) { | |
return 0xffffffff; | |
} | |
for (iVar3 = 0; iVar3 < (int)((uVar12 - local_34) - (uVar9 & ~((int)uVar9 >> 0x1f))); | |
iVar3 = iVar3 + 1) { | |
iVar5 = (*param_4)(param_1,param_3,(int)param_2 + 0x1a,1); | |
if (iVar5 == -1) { | |
return 0xffffffff; | |
} | |
} | |
goto LAB_08010910; | |
} | |
iVar3 = (*param_4)(param_1,param_3,DAT_080109b0,1); | |
uVar12 = local_30; | |
if (iVar3 == -1) { | |
return 0xffffffff; | |
} | |
if ((local_30 == 0 && local_34 == 0) && (-1 < (int)(*param_2 << 0x1f))) goto LAB_08010910; | |
iVar3 = (*param_4)(param_1,param_3,uVar6,uVar2); | |
if (iVar3 == -1) { | |
return 0xffffffff; | |
} | |
for (iVar3 = 0; -iVar3 != local_34 && iVar3 <= (int)-local_34; iVar3 = iVar3 + 1) { | |
iVar5 = (*param_4)(param_1,param_3,(int)param_2 + 0x1a,1); | |
if (iVar5 == -1) { | |
return 0xffffffff; | |
} | |
} | |
} | |
} | |
else { | |
uVar12 = param_2[4]; | |
} | |
iVar3 = (*param_4)(param_1,param_3,puVar7,uVar12); | |
if (iVar3 == -1) { | |
return 0xffffffff; | |
} | |
LAB_08010910: | |
if ((int)(*param_2 << 0x1e) < 0) { | |
for (iVar3 = 0; iVar3 < (int)(param_2[3] - local_2c[0]); iVar3 = iVar3 + 1) { | |
iVar5 = (*param_4)(param_1,param_3,(int)param_2 + 0x19,1); | |
if (iVar5 == -1) { | |
return 0xffffffff; | |
} | |
} | |
} | |
if ((int)param_2[3] < (int)local_2c[0]) { | |
return local_2c[0]; | |
} | |
return param_2[3]; | |
} | |
void FUN_08010b28(undefined4 param_1) | |
{ | |
FUN_08010b7c(*DAT_08010b34,param_1); | |
return; | |
} | |
uint FUN_08010b38(undefined4 param_1,undefined4 param_2) | |
{ | |
int *piVar1; | |
int iVar2; | |
uint uVar3; | |
uint uVar4; | |
piVar1 = DAT_08010b78; | |
if (*DAT_08010b78 == 0) { | |
iVar2 = FUN_08012540(); | |
*piVar1 = iVar2; | |
} | |
uVar3 = FUN_08012540(param_1,param_2); | |
if ((uVar3 == 0xffffffff) || | |
((uVar4 = uVar3 + 3 & 0xfffffffc, uVar3 != uVar4 && | |
(iVar2 = FUN_08012540(param_1,uVar4 - uVar3), iVar2 == -1)))) { | |
uVar4 = 0xffffffff; | |
} | |
return uVar4; | |
} | |
uint FUN_08010b7c(undefined4 *param_1,uint param_2) | |
{ | |
uint *puVar1; | |
int iVar2; | |
uint uVar3; | |
uint uVar4; | |
uint uVar5; | |
uint *puVar6; | |
uint *puVar7; | |
uint uVar8; | |
puVar6 = DAT_08010c78; | |
uVar8 = (param_2 + 3 & 0xfffffffc) + 8; | |
if (uVar8 < 0xc) { | |
uVar8 = 0xc; | |
} | |
if (((int)uVar8 < 0) || (uVar8 < param_2)) { | |
*param_1 = 0xc; | |
} | |
else { | |
FUN_08011428(); | |
puVar7 = (uint *)*puVar6; | |
for (puVar1 = (uint *)*puVar6; puVar1 != (uint *)0x0; puVar1 = (uint *)puVar1[1]) { | |
uVar4 = *puVar1 - uVar8; | |
if (-1 < (int)uVar4) { | |
if (uVar4 < 0xc) { | |
uVar8 = puVar1[1]; | |
if (puVar7 == puVar1) { | |
*puVar6 = uVar8; | |
} | |
if (puVar7 != puVar1) { | |
puVar7[1] = uVar8; | |
} | |
} | |
else { | |
uVar3 = (int)puVar1 + uVar8; | |
*puVar1 = uVar8; | |
if (puVar7 != puVar1) { | |
puVar7[1] = uVar3; | |
} | |
uVar5 = puVar1[1]; | |
if (puVar7 == puVar1) { | |
*puVar6 = uVar3; | |
} | |
*(uint *)((int)puVar1 + uVar8) = uVar4; | |
*(uint *)(uVar3 + 4) = uVar5; | |
} | |
goto LAB_08010c24; | |
} | |
puVar7 = puVar1; | |
} | |
puVar1 = (uint *)FUN_08010b38(param_1,uVar8); | |
if (puVar1 != (uint *)0xffffffff) { | |
*puVar1 = uVar8; | |
LAB_08010c24: | |
FUN_08011434(param_1); | |
puVar6 = puVar1 + 1; | |
uVar8 = (int)puVar1 + 0xbU & 0xfffffff8; | |
iVar2 = uVar8 - (int)puVar6; | |
if (iVar2 != 0) { | |
puVar6 = (uint *)((int)puVar6 - uVar8); | |
} | |
if (iVar2 == 0) { | |
return uVar8; | |
} | |
*(uint **)((int)puVar1 + iVar2) = puVar6; | |
return uVar8; | |
} | |
puVar1 = (uint *)*puVar6; | |
for (puVar7 = (uint *)*puVar6; puVar7 != (uint *)0x0; puVar7 = (uint *)puVar7[1]) { | |
puVar1 = puVar7; | |
} | |
if ((puVar1 != (uint *)0x0) && | |
(uVar4 = *puVar1, iVar2 = FUN_08012540(param_1,0), (int)puVar1 + uVar4 == iVar2)) { | |
uVar4 = *puVar1; | |
iVar2 = FUN_08010b38(param_1,uVar8 - uVar4); | |
if (iVar2 != -1) { | |
*puVar1 = *puVar1 + (uVar8 - uVar4); | |
puVar7 = (uint *)*puVar6; | |
if (((uint *)*puVar6)[1] == 0) { | |
*puVar6 = 0; | |
} | |
else { | |
do { | |
puVar6 = puVar7; | |
puVar7 = (uint *)puVar6[1]; | |
} while (puVar7 != puVar1); | |
puVar6[1] = 0; | |
} | |
goto LAB_08010c24; | |
} | |
} | |
*param_1 = 0xc; | |
FUN_08011434(param_1); | |
} | |
return 0; | |
} | |
undefined4 | |
FUN_08010c7c(undefined4 param_1,uint *param_2,uint *param_3,undefined4 param_4,code *param_5) | |
{ | |
int iVar1; | |
undefined4 uVar2; | |
uint uVar3; | |
uint uVar4; | |
bool bVar5; | |
uVar4 = param_2[4]; | |
if ((int)param_2[4] < (int)param_2[2]) { | |
uVar4 = param_2[2]; | |
} | |
*param_3 = uVar4; | |
if (*(char *)((int)param_2 + 0x43) != '\0') { | |
*param_3 = uVar4 + 1; | |
} | |
if ((int)(*param_2 << 0x1a) < 0) { | |
*param_3 = *param_3 + 2; | |
} | |
uVar4 = *param_2 & 6; | |
if (uVar4 == 0) { | |
for (; (int)uVar4 < (int)(param_2[3] - *param_3); uVar4 = uVar4 + 1) { | |
iVar1 = (*param_5)(param_1,param_4,(int)param_2 + 0x19,1); | |
if (iVar1 == -1) goto LAB_08010d20; | |
} | |
} | |
uVar3 = (uint)*(byte *)((int)param_2 + 0x43); | |
if (uVar3 != 0) { | |
uVar3 = 1; | |
} | |
if ((int)(*param_2 << 0x1a) < 0) { | |
*(undefined1 *)((int)param_2 + uVar3 + 0x43) = 0x30; | |
*(undefined1 *)((int)param_2 + uVar3 + 0x44) = *(undefined1 *)((int)param_2 + 0x45); | |
uVar3 = uVar3 + 2; | |
} | |
iVar1 = (*param_5)(param_1,param_4,(int)param_2 + 0x43,uVar3); | |
if (iVar1 == -1) { | |
LAB_08010d20: | |
uVar2 = 0xffffffff; | |
} | |
else { | |
bVar5 = (*param_2 & 6) == 4; | |
if (bVar5) { | |
uVar4 = param_2[3] - *param_3; | |
} | |
if (bVar5) { | |
uVar4 = uVar4 & ~((int)uVar4 >> 0x1f); | |
} | |
else { | |
uVar4 = 0; | |
} | |
if ((int)param_2[4] < (int)param_2[2]) { | |
uVar4 = uVar4 + (param_2[2] - param_2[4]); | |
} | |
for (uVar3 = 0; uVar4 != uVar3; uVar3 = uVar3 + 1) { | |
iVar1 = (*param_5)(param_1,param_4,(int)param_2 + 0x1a,1); | |
if (iVar1 == -1) goto LAB_08010d20; | |
} | |
uVar2 = 0; | |
} | |
return uVar2; | |
} | |
code * FUN_08010d58(undefined4 param_1,uint *param_2,undefined4 param_3,code *param_4,int *param_5) | |
{ | |
bool bVar1; | |
int iVar2; | |
code *pcVar3; | |
int iVar4; | |
undefined1 *puVar5; | |
undefined4 uVar6; | |
uint uVar7; | |
uint uVar8; | |
uint *puVar9; | |
undefined4 *puVar10; | |
uint uVar11; | |
undefined1 *puVar12; | |
byte bVar13; | |
code *local_24; | |
iVar2 = DAT_08010f8c; | |
bVar13 = (byte)param_2[6]; | |
puVar5 = (undefined1 *)((int)param_2 + 0x43); | |
local_24 = param_4; | |
if (0x78 < bVar13) { | |
switchD_08010d94_caseD_65: | |
*(byte *)((int)param_2 + 0x42) = bVar13; | |
LAB_08010e00: | |
puVar5 = (undefined1 *)((int)param_2 + 0x42); | |
uVar7 = 1; | |
LAB_08010f3e: | |
param_2[4] = uVar7; | |
*(undefined1 *)((int)param_2 + 0x43) = 0; | |
goto LAB_08010e9e; | |
} | |
if (bVar13 < 99) { | |
if (bVar13 == 0) goto LAB_08010f1c; | |
if (bVar13 == 0x58) goto LAB_08010ec8; | |
goto switchD_08010d94_caseD_65; | |
} | |
switch(bVar13) { | |
case 99: | |
uVar6 = *(undefined4 *)*param_5; | |
*param_5 = (int)((undefined4 *)*param_5 + 1); | |
*(char *)((int)param_2 + 0x42) = (char)uVar6; | |
goto LAB_08010e00; | |
case 100: | |
case 0x69: | |
puVar9 = (uint *)*param_5; | |
uVar7 = *param_2; | |
*param_5 = (int)(puVar9 + 1); | |
if (((int)(uVar7 << 0x18) < 0) || (-1 < (int)(uVar7 << 0x19))) { | |
uVar7 = *puVar9; | |
} | |
else { | |
uVar7 = (uint)(short)*puVar9; | |
} | |
if ((int)uVar7 < 0) { | |
uVar7 = -uVar7; | |
*(undefined1 *)((int)param_2 + 0x43) = 0x2d; | |
} | |
uVar8 = 10; | |
iVar2 = DAT_08010f8c; | |
goto LAB_08010e52; | |
default: | |
goto switchD_08010d94_caseD_65; | |
case 0x6e: | |
puVar10 = (undefined4 *)*param_5; | |
uVar8 = *param_2; | |
uVar7 = param_2[5]; | |
*param_5 = (int)(puVar10 + 1); | |
puVar9 = (uint *)*puVar10; | |
if (((int)(uVar8 << 0x18) < 0) || (-1 < (int)(uVar8 << 0x19))) { | |
*puVar9 = uVar7; | |
} | |
else { | |
*(short *)puVar9 = (short)uVar7; | |
} | |
LAB_08010f1c: | |
param_2[4] = 0; | |
goto LAB_08010e9e; | |
case 0x6f: | |
case 0x75: | |
uVar7 = *(uint *)*param_5; | |
if ((-1 < (int)(*param_2 << 0x18)) && ((int)(*param_2 << 0x19) < 0)) { | |
uVar7 = uVar7 & 0xffff; | |
} | |
*param_5 = (int)((uint *)*param_5 + 1); | |
if (bVar13 == 0x6f) { | |
uVar8 = 8; | |
} | |
else { | |
uVar8 = 10; | |
} | |
break; | |
case 0x70: | |
*param_2 = *param_2 | 0x20; | |
case 0x78: | |
bVar13 = 0x78; | |
iVar2 = DAT_08010f90; | |
LAB_08010ec8: | |
*(byte *)((int)param_2 + 0x45) = bVar13; | |
uVar8 = *param_2; | |
uVar7 = *(uint *)*param_5; | |
if ((-1 < (int)(uVar8 << 0x18)) && ((int)(uVar8 << 0x19) < 0)) { | |
uVar7 = uVar7 & 0xffff; | |
} | |
*param_5 = (int)((uint *)*param_5 + 1); | |
if ((int)(uVar8 << 0x1f) < 0) { | |
*param_2 = uVar8 | 0x20; | |
} | |
if (uVar7 == 0) { | |
*param_2 = *param_2 & 0xffffffdf; | |
} | |
uVar8 = 0x10; | |
break; | |
case 0x73: | |
puVar10 = (undefined4 *)*param_5; | |
*param_5 = (int)(puVar10 + 1); | |
puVar5 = (undefined1 *)*puVar10; | |
iVar2 = memchr_custom(puVar5,0,param_2[1],puVar10,param_1,param_2,param_3); | |
if (iVar2 != 0) { | |
param_2[1] = iVar2 - (int)puVar5; | |
} | |
uVar7 = param_2[1]; | |
goto LAB_08010f3e; | |
} | |
*(undefined1 *)((int)param_2 + 0x43) = 0; | |
LAB_08010e52: | |
uVar11 = param_2[1]; | |
param_2[2] = uVar11; | |
puVar12 = puVar5; | |
if (((int)uVar11 < 0) || (*param_2 = *param_2 & 0xfffffffb, uVar11 != 0 || uVar7 != 0)) { | |
do { | |
puVar12 = puVar12 + -1; | |
*puVar12 = *(undefined1 *)(iVar2 + (uVar7 - uVar8 * (uVar7 / uVar8))); | |
bVar1 = uVar8 <= uVar7; | |
uVar7 = uVar7 / uVar8; | |
} while (bVar1); | |
} | |
if (((uVar8 == 8) && ((int)(*param_2 << 0x1f) < 0)) && ((int)param_2[1] <= (int)param_2[4])) { | |
puVar12[-1] = 0x30; | |
puVar12 = puVar12 + -1; | |
} | |
param_2[4] = (int)puVar5 - (int)puVar12; | |
puVar5 = puVar12; | |
LAB_08010e9e: | |
iVar2 = FUN_08010c7c(param_1,param_2,&local_24,param_3,param_4); | |
if ((iVar2 == -1) || (iVar2 = (*param_4)(param_1,param_3,puVar5,param_2[4]), iVar2 == -1)) { | |
LAB_08010eb2: | |
pcVar3 = (code *)0xffffffff; | |
} | |
else { | |
if ((int)(*param_2 << 0x1e) < 0) { | |
for (iVar2 = 0; iVar2 < (int)(param_2[3] - (int)local_24); iVar2 = iVar2 + 1) { | |
iVar4 = (*param_4)(param_1,param_3,(int)param_2 + 0x19,1); | |
if (iVar4 == -1) goto LAB_08010eb2; | |
} | |
} | |
pcVar3 = (code *)param_2[3]; | |
if ((int)param_2[3] < (int)local_24) { | |
pcVar3 = local_24; | |
} | |
} | |
return pcVar3; | |
} | |
undefined4 FUN_08010f94(undefined4 param_1,uint *param_2,int *param_3,undefined4 *param_4) | |
{ | |
byte bVar1; | |
uint uVar2; | |
uint *puVar3; | |
uint uVar4; | |
int iVar5; | |
undefined4 *puVar6; | |
uint *puVar7; | |
uint *puVar8; | |
int iVar9; | |
int iVar10; | |
int unaff_r11; | |
bool bVar11; | |
undefined4 uVar12; | |
undefined8 uVar13; | |
int local_38; | |
int local_30; | |
uint *local_2c; | |
undefined4 uVar14; | |
uVar4 = param_2[2]; | |
uVar2 = uVar4 - 1; | |
if (0x15c < uVar2) { | |
unaff_r11 = uVar4 - 0x15d; | |
uVar4 = 0x15d; | |
} | |
if (0x15c < uVar2) { | |
param_2[2] = uVar4; | |
} | |
uVar4 = 0; | |
puVar3 = param_2 + 7; | |
*param_2 = *param_2 | 0x780; | |
local_30 = 0; | |
local_2c = (uint *)0x0; | |
if (uVar2 < 0x15d) { | |
unaff_r11 = 0; | |
} | |
iVar10 = 0; | |
iVar9 = 0; | |
local_38 = 0; | |
puVar8 = puVar3; | |
LAB_08010fde: | |
do { | |
if (param_2[2] == 0) break; | |
bVar1 = *(byte *)*param_3; | |
uVar2 = (uint)bVar1; | |
if (0x4e < uVar2) { | |
if (uVar2 < 0x6f) { | |
if (0x60 < uVar2) { | |
iVar5 = -0x61; | |
goto LAB_08011026; | |
} | |
if (uVar2 == 0x54) goto LAB_080111b8; | |
bVar11 = uVar2 == 0x59; | |
} | |
else { | |
if (uVar2 == 0x74) { | |
LAB_080111b8: | |
if (uVar4 == 6) { | |
uVar4 = 7; | |
goto LAB_08011126; | |
} | |
break; | |
} | |
bVar11 = uVar2 == 0x79; | |
} | |
if ((bVar11) && (uVar4 == 7)) { | |
uVar4 = 8; | |
goto LAB_08011126; | |
} | |
break; | |
} | |
if (uVar2 < 0x41) { | |
if (0xe < (uVar2 - 0x2b & 0xff)) break; | |
switch(uVar2 - 0x2b) { | |
case 0: | |
case 2: | |
if (-1 < (int)(*param_2 << 0x18)) goto switchD_08011074_caseD_1; | |
*param_2 = *param_2 & 0xffffff7f; | |
break; | |
default: | |
goto switchD_08011074_caseD_1; | |
case 3: | |
if (-1 < (int)(*param_2 << 0x16)) goto switchD_08011074_caseD_1; | |
*param_2 = *param_2 & 0xfffffd7f; | |
local_38 = iVar9; | |
break; | |
case 5: | |
if (-1 < (int)(*param_2 << 0x17)) goto switchD_08011074_caseD_6; | |
*param_2 = *param_2 & 0xffffff7f; | |
iVar9 = iVar9 + 1; | |
if (unaff_r11 != 0) { | |
unaff_r11 = unaff_r11 + -1; | |
param_2[2] = param_2[2] + 1; | |
} | |
goto LAB_080110f2; | |
case 6: | |
case 7: | |
case 8: | |
case 9: | |
case 10: | |
case 0xb: | |
case 0xc: | |
case 0xd: | |
case 0xe: | |
switchD_08011074_caseD_6: | |
if (iVar10 + uVar4 != 0) goto switchD_08011074_caseD_1; | |
*param_2 = *param_2 & 0xfffffe7f; | |
uVar4 = 0; | |
iVar10 = 0; | |
} | |
} | |
else { | |
iVar5 = -0x41; | |
LAB_08011026: | |
switch(uVar2 + iVar5) { | |
case 0: | |
if (iVar10 == 1) { | |
iVar10 = 2; | |
break; | |
} | |
default: | |
goto switchD_08011074_caseD_1; | |
case 4: | |
uVar2 = *param_2; | |
if ((uVar2 & 0x500) != 0x400) { | |
if (-1 < (int)(uVar2 << 0x15)) goto switchD_08011074_caseD_1; | |
if (iVar9 == 0) { | |
LAB_080113ac: | |
iVar9 = 0; | |
goto LAB_08011006; | |
} | |
} | |
bVar11 = -1 < (int)(uVar2 << 0x16); | |
iVar5 = uVar2 << 0x16; | |
if (bVar11) { | |
iVar5 = local_38; | |
} | |
if (bVar11) { | |
iVar5 = iVar9 - iVar5; | |
} | |
if (bVar11) { | |
local_30 = iVar5; | |
local_2c = puVar8; | |
} | |
*param_2 = uVar2 & 0xfffff87f | 0x180; | |
iVar9 = 0; | |
break; | |
case 5: | |
if (uVar4 != 2) goto switchD_08011074_caseD_1; | |
uVar4 = 3; | |
break; | |
case 8: | |
if (uVar4 == 0) { | |
if (iVar9 != 0) goto LAB_08010ffe; | |
if ((*param_2 & 0x700) != 0x700) goto LAB_080113ac; | |
*param_2 = *param_2 & 0xfffff87f; | |
uVar4 = 1; | |
} | |
else { | |
if (uVar4 != 3) { | |
bVar11 = uVar4 == 5; | |
LAB_0801116c: | |
if (!bVar11) goto switchD_08011074_caseD_1; | |
} | |
LAB_08011170: | |
uVar4 = uVar4 + 1 & 0xff; | |
} | |
break; | |
case 0xd: | |
if (iVar10 == 0) { | |
if ((iVar9 != 0) || ((*param_2 & 0x700) != 0x700)) { | |
LAB_08011166: | |
if (uVar4 != 1) { | |
bVar11 = uVar4 == 4; | |
goto LAB_0801116c; | |
} | |
goto LAB_08011170; | |
} | |
*param_2 = *param_2 & 0xfffff87f; | |
iVar10 = 1; | |
} | |
else { | |
if (iVar10 != 2) goto LAB_08011166; | |
iVar10 = 3; | |
} | |
} | |
} | |
LAB_08011126: | |
*(byte *)puVar8 = bVar1; | |
puVar8 = (uint *)((int)puVar8 + 1); | |
LAB_080110f2: | |
param_2[2] = param_2[2] - 1; | |
param_2[4] = param_2[4] + 1; | |
iVar5 = param_3[1]; | |
param_3[1] = iVar5 + -1; | |
if (0 < iVar5 + -1) { | |
*param_3 = *param_3 + 1; | |
goto LAB_08010fde; | |
} | |
iVar5 = (*(code *)param_2[0x60])(param_1,param_3); | |
} while (iVar5 == 0); | |
switchD_08011074_caseD_1: | |
if (iVar9 != 0) { | |
LAB_08010ffe: | |
*param_2 = *param_2 & 0xfffffeff; | |
} | |
LAB_08011006: | |
if (iVar10 - 1U < 2) { | |
while (puVar3 < puVar8) { | |
puVar8 = (uint *)((int)puVar8 + -1); | |
(*(code *)param_2[0x5f])(param_1,*(byte *)puVar8,param_3); | |
param_2[4] = param_2[4] - 1; | |
} | |
return 1; | |
} | |
if (uVar4 - 1 < 7) { | |
uVar2 = uVar4; | |
puVar7 = puVar8; | |
if (uVar4 < 3) { | |
while (puVar3 < puVar8) { | |
puVar8 = (uint *)((int)puVar8 + -1); | |
(*(code *)param_2[0x5f])(param_1,*(byte *)puVar8,param_3); | |
param_2[4] = param_2[4] - 1; | |
} | |
return 1; | |
} | |
while (uVar2 = uVar2 - 1 & 0xff, uVar2 != 2) { | |
(*(code *)param_2[0x5f])(param_1,*(byte *)((int)puVar7 + -1),param_3); | |
param_2[4] = param_2[4] - 1; | |
puVar7 = (uint *)((int)puVar7 + -1); | |
} | |
puVar8 = (uint *)((int)puVar8 - (uVar4 - 3 & 0xff)); | |
} | |
puVar7 = puVar8; | |
if ((int)(*param_2 << 0x17) < 0) { | |
if ((int)(*param_2 << 0x15) < 0) { | |
while (puVar3 < puVar8) { | |
puVar8 = (uint *)((int)puVar8 + -1); | |
(*(code *)param_2[0x5f])(param_1,*(byte *)puVar8,param_3); | |
param_2[4] = param_2[4] - 1; | |
} | |
return 1; | |
} | |
bVar1 = *(byte *)((int)puVar8 + -1); | |
puVar7 = (uint *)((int)puVar8 + -1); | |
param_2[4] = param_2[4] - 1; | |
if ((bVar1 != 0x65) && (bVar1 != 0x45)) { | |
(*(code *)param_2[0x5f])(param_1,bVar1,param_3); | |
bVar1 = *(byte *)((int)puVar8 + -2); | |
puVar7 = (uint *)((int)puVar8 + -2); | |
param_2[4] = param_2[4] - 1; | |
} | |
(*(code *)param_2[0x5f])(param_1,bVar1,param_3); | |
} | |
if ((*param_2 & 0x10) != 0) { | |
return 0; | |
} | |
*(byte *)puVar7 = 0; | |
if ((*param_2 & 0x600) == 0x400) { | |
iVar10 = local_38 - iVar9; | |
local_2c = puVar7; | |
if (iVar9 != local_38) { | |
LAB_08011364: | |
if ((uint *)((int)param_2 + 0x16f) <= local_2c) { | |
local_2c = (uint *)((int)param_2 + 0x16e); | |
} | |
updateMidiBuffer(local_2c,DAT_080113b4,iVar10); | |
} | |
} | |
else if (local_30 != 0) { | |
iVar10 = thunk_FUN_0801223c(param_1,(byte *)((int)local_2c + 1),0,10); | |
iVar10 = iVar10 - local_30; | |
goto LAB_08011364; | |
} | |
uVar13 = FUN_08012230(param_1,puVar3,0); | |
uVar14 = (undefined4)((ulonglong)uVar13 >> 0x20); | |
uVar12 = (undefined4)uVar13; | |
uVar2 = *param_2; | |
puVar6 = (undefined4 *)*param_4; | |
if ((uVar2 & 2) == 0) { | |
*param_4 = puVar6 + 1; | |
if ((uVar2 & 4) == 0) { | |
puVar6 = (undefined4 *)*puVar6; | |
iVar9 = FUN_08000b4c(uVar12,uVar14,uVar12,uVar14); | |
if (iVar9 == 0) { | |
uVar12 = FUN_08000c08(uVar12,uVar14); | |
*puVar6 = uVar12; | |
} | |
else { | |
uVar12 = FUN_0800eba4(DAT_080113b8); | |
*puVar6 = uVar12; | |
} | |
goto LAB_08011344; | |
} | |
} | |
else { | |
*param_4 = puVar6 + 1; | |
} | |
*(undefined8 *)*puVar6 = uVar13; | |
LAB_08011344: | |
param_2[3] = param_2[3] + 1; | |
return 0; | |
} | |
int appendToBuffer(undefined1 *param_1,int param_2,undefined4 param_3) | |
{ | |
int iVar1; | |
undefined4 *puVar2; | |
undefined1 *local_80 [2]; | |
int local_78; | |
undefined2 local_74; | |
undefined2 local_72; | |
undefined1 *local_70; | |
int local_6c; | |
undefined4 local_1c; | |
puVar2 = (undefined4 *)*DAT_08011424; | |
if (param_2 < 0) { | |
*puVar2 = 0x8b; | |
iVar1 = -1; | |
} | |
else { | |
local_74 = 0x208; | |
local_1c = 0; | |
if (param_2 == 0) { | |
local_78 = 0; | |
} | |
else { | |
local_78 = param_2 + -1; | |
} | |
local_72 = 0xffff; | |
local_80[0] = param_1; | |
local_70 = param_1; | |
local_6c = local_78; | |
iVar1 = FUN_08013a30(puVar2,local_80,param_3); | |
if (iVar1 + 1 < 0 != SCARRY4(iVar1,1)) { | |
*puVar2 = 0x8b; | |
} | |
if (param_2 != 0) { | |
*local_80[0] = 0; | |
} | |
} | |
return iVar1; | |
} | |
void FUN_08011428(void) | |
{ | |
FUN_080125b6(DAT_08011430); | |
return; | |
} | |
void FUN_08011434(void) | |
{ | |
FUN_080125b8(DAT_0801143c); | |
return; | |
} | |
void updateMidiBuffer(undefined1 *param_1,undefined4 param_2) | |
{ | |
undefined1 *local_80 [2]; | |
undefined4 local_78; | |
undefined4 local_74; | |
undefined1 *local_70; | |
undefined4 local_6c; | |
undefined4 local_1c; | |
local_6c = 0x7fffffff; | |
local_78 = 0x7fffffff; | |
local_74 = DAT_08011480; | |
local_1c = 0; | |
local_80[0] = param_1; | |
local_70 = param_1; | |
FUN_08013a30(*DAT_0801147c,local_80,param_2); | |
*local_80[0] = 0; | |
return; | |
} | |
undefined4 * FUN_08011484(undefined4 *param_1,undefined2 param_2,undefined2 param_3) | |
{ | |
undefined4 *puVar1; | |
undefined4 *puVar2; | |
*param_1 = 0; | |
param_1[1] = 0; | |
param_1[4] = 0; | |
param_1[5] = 0; | |
param_1[2] = 0; | |
*(undefined2 *)(param_1 + 3) = param_2; | |
param_1[0x19] = 0; | |
*(undefined2 *)((int)param_1 + 0xe) = param_3; | |
param_1[6] = 0; | |
puVar2 = (undefined4 *)FUN_08012484(param_1 + 0x17,0,8); | |
param_1[9] = DAT_080114dc; | |
param_1[10] = DAT_080114e0; | |
param_1[0xb] = DAT_080114e4; | |
param_1[0xc] = DAT_080114e8; | |
puVar1 = DAT_080114ec; | |
param_1[8] = param_1; | |
if (((param_1 != puVar1) && (param_1 != puVar1 + 0x1a)) && (param_1 != puVar1 + 0x34)) { | |
return puVar2; | |
} | |
return param_1 + 0x16; | |
} | |
void FUN_08011548(void) | |
{ | |
int iVar1; | |
iVar1 = DAT_0801157c; | |
*DAT_08011578 = DAT_08011580; | |
FUN_08011484(iVar1,4,0); | |
FUN_08011484(iVar1 + 0x68,9,1); | |
FUN_08011484(iVar1 + 0xd0,0x12,2); | |
return; | |
} | |
void FUN_08011584(void) | |
{ | |
FUN_080125b6(DAT_0801158c); | |
return; | |
} | |
void FUN_0801159c(int param_1) | |
{ | |
FUN_08011584(); | |
if (*(int *)(param_1 + 0x20) == 0) { | |
*(undefined4 *)(param_1 + 0x20) = DAT_080115c4; | |
if (*DAT_080115c8 == 0) { | |
FUN_08011548(); | |
} | |
} | |
FUN_080125b8(DAT_08011598); | |
return; | |
} | |
int FUN_080115cc(undefined4 param_1,int param_2,uint param_3) | |
{ | |
int iVar1; | |
uint uVar2; | |
if (param_2 != 0) { | |
if (param_3 == 0) { | |
FUN_08013274(); | |
iVar1 = 0; | |
} | |
else { | |
uVar2 = FUN_0801497c(); | |
if (((uVar2 < param_3) || (iVar1 = param_2, param_3 <= uVar2 >> 1)) && | |
(iVar1 = FUN_08010b7c(param_1,param_3), iVar1 != 0)) { | |
if (uVar2 <= param_3) { | |
param_3 = uVar2; | |
} | |
copyBuffer(iVar1,param_2,param_3); | |
FUN_08013274(param_1,param_2); | |
} | |
} | |
return iVar1; | |
} | |
iVar1 = FUN_08010b7c(param_1,param_3); | |
return iVar1; | |
} | |
undefined8 FUN_08011628(undefined4 param_1,int param_2,int param_3) | |
{ | |
int iVar1; | |
undefined8 uVar2; | |
uVar2 = FUN_08014700(param_1); | |
if ((param_3 != 0) && (iVar1 = 0x6b - ((uint)(param_2 << 1) >> 0x15), 0 < iVar1)) { | |
uVar2 = FUN_08000618((int)uVar2,(int)((ulonglong)uVar2 >> 0x20),0,iVar1 * 0x100000 + 0x3ff00000) | |
; | |
} | |
return uVar2; | |
} | |
ulonglong FUN_08012230(undefined4 *param_1,byte *param_2,undefined4 *param_3) | |
{ | |
byte bVar1; | |
bool bVar2; | |
uint uVar3; | |
undefined4 *puVar4; | |
int iVar5; | |
int iVar6; | |
byte *pbVar7; | |
byte *pbVar8; | |
int iVar9; | |
uint uVar10; | |
uint uVar11; | |
uint uVar12; | |
uint uVar13; | |
int iVar14; | |
int iVar15; | |
int iVar16; | |
uint uVar17; | |
int iVar18; | |
undefined4 uVar19; | |
int iVar20; | |
bool bVar21; | |
bool bVar22; | |
undefined4 uVar23; | |
ulonglong uVar24; | |
undefined8 uVar25; | |
undefined8 uVar26; | |
ulonglong uVar27; | |
longlong lVar28; | |
undefined8 local_88; | |
uint local_80; | |
int local_7c; | |
uint local_78; | |
uint local_74; | |
byte *local_70; | |
int local_68; | |
uint local_60; | |
int local_5c; | |
uint local_54; | |
int local_4c; | |
byte *local_3c; | |
int local_38; | |
int local_34; | |
uint local_30; | |
uint local_2c; | |
local_38 = 0; | |
for (pbVar7 = param_2; bVar1 = *pbVar7, bVar1 != 0x2b; pbVar7 = pbVar7 + 1) { | |
if (0x2b < bVar1) { | |
if (bVar1 == 0x2d) { | |
local_68 = 1; | |
goto LAB_08011704; | |
} | |
LAB_08011698: | |
local_68 = 0; | |
local_3c = pbVar7; | |
goto LAB_0801169c; | |
} | |
if (bVar1 < 0xe) { | |
if (bVar1 < 9) { | |
if (bVar1 != 0) goto LAB_08011698; | |
goto LAB_08011710; | |
} | |
} | |
else if (bVar1 != 0x20) goto LAB_08011698; | |
} | |
local_68 = 0; | |
LAB_08011704: | |
local_3c = pbVar7 + 1; | |
if (pbVar7[1] == 0) goto LAB_08011710; | |
LAB_0801169c: | |
pbVar7 = local_3c; | |
if (*local_3c == 0x30) { | |
if ((local_3c[1] & 0xdf) == 0x58) { | |
uVar3 = FUN_080133d8(param_1,&local_3c,DAT_080118f8,&local_34,&local_38,local_68,DAT_08012238) | |
; | |
uVar3 = uVar3 & 0xf; | |
uVar24 = 0; | |
if (uVar3 != 0) { | |
if (uVar3 == 6) { | |
local_68 = 0; | |
local_3c = pbVar7 + 1; | |
uVar24 = 0; | |
} | |
else { | |
if (local_38 != 0) { | |
FUN_080148f4(&local_30,0x35); | |
FUN_080140a8(param_1,local_38); | |
} | |
uVar10 = 0; | |
uVar11 = 0; | |
switch(uVar3) { | |
case 1: | |
case 5: | |
uVar10 = local_30; | |
uVar11 = local_2c & 0xffefffff | (local_34 + 0x433) * 0x100000; | |
break; | |
case 2: | |
uVar10 = local_30; | |
uVar11 = local_2c; | |
break; | |
case 3: | |
uVar11 = DAT_08011900; | |
break; | |
case 4: | |
uVar10 = 0xffffffff; | |
uVar11 = 0x7fffffff; | |
} | |
uVar24 = CONCAT44(uVar11,uVar10); | |
if ((uVar11 & 0x7ff00000) == 0) { | |
puVar4 = (undefined4 *)FUN_08012560(); | |
*puVar4 = 0x22; | |
uVar24 = CONCAT44(uVar11,uVar10); | |
} | |
} | |
} | |
} | |
else { | |
do { | |
pbVar8 = local_3c + 1; | |
pbVar7 = local_3c + 1; | |
local_3c = pbVar8; | |
} while (*pbVar7 == 0x30); | |
uVar24 = 0; | |
if (*pbVar7 != 0) { | |
bVar21 = true; | |
goto LAB_080117a0; | |
} | |
} | |
goto LAB_080116da; | |
} | |
bVar21 = false; | |
LAB_080117a0: | |
iVar18 = 0; | |
local_70 = local_3c; | |
local_74 = 0; | |
iVar20 = 0; | |
while( true ) { | |
uVar3 = (uint)*local_3c; | |
uVar10 = uVar3 - 0x30; | |
if (9 < (uVar10 & 0xff)) break; | |
uVar3 = uVar10 & 0xff; | |
if (iVar20 < 9) { | |
uVar3 = local_74; | |
} | |
local_3c = local_3c + 1; | |
if (iVar20 < 9) { | |
local_74 = uVar3 * 10 + uVar10; | |
} | |
else { | |
iVar18 = iVar18 * 10 + uVar10; | |
} | |
iVar20 = iVar20 + 1; | |
} | |
iVar5 = FUN_08012494(local_3c,DAT_080118fc,1); | |
iVar15 = iVar20; | |
if (iVar5 == 0) { | |
uVar3 = (uint)local_3c[1]; | |
if (iVar20 != 0) { | |
uVar10 = 0; | |
local_78 = 0; | |
local_3c = local_3c + 1; | |
goto LAB_08011840; | |
} | |
uVar11 = 0; | |
local_3c = local_3c + 1; | |
while (uVar3 == 0x30) { | |
uVar11 = uVar11 + 1; | |
uVar3 = (uint)local_3c[1]; | |
local_3c = local_3c + 1; | |
} | |
if (uVar3 - 0x31 < 9) { | |
uVar10 = 0; | |
local_70 = local_3c; | |
iVar15 = 0; | |
local_78 = uVar11; | |
do { | |
iVar5 = uVar3 - 0x30; | |
uVar3 = uVar10 + 1; | |
if (iVar5 != 0) { | |
local_78 = local_78 + uVar3; | |
iVar14 = iVar15; | |
while (iVar9 = iVar14 + 1, iVar9 - iVar15 < (int)uVar3) { | |
if (iVar14 < 9) { | |
local_74 = local_74 * 10; | |
iVar14 = iVar9; | |
} | |
else { | |
iVar14 = iVar9; | |
if (iVar9 < 0x11) { | |
iVar18 = iVar18 * 10; | |
} | |
} | |
} | |
uVar10 = uVar10 & ~((int)uVar10 >> 0x1f); | |
iVar14 = iVar15 + uVar10; | |
iVar15 = iVar15 + 1 + uVar10; | |
if (iVar14 < 9) { | |
local_74 = local_74 * 10 + iVar5; | |
} | |
else if (iVar14 < 0x10) { | |
iVar18 = iVar18 * 10 + iVar5; | |
} | |
uVar3 = 0; | |
} | |
uVar10 = uVar3; | |
uVar3 = (uint)local_3c[1]; | |
local_3c = local_3c + 1; | |
LAB_08011840: | |
} while (uVar3 - 0x30 < 10); | |
bVar22 = true; | |
uVar11 = uVar10; | |
goto LAB_080117d2; | |
} | |
if ((uVar3 == 0x65) || (uVar3 == 0x45)) { | |
local_78 = 0; | |
bVar22 = true; | |
goto LAB_080117dc; | |
} | |
bVar22 = true; | |
LAB_0801195a: | |
uVar24 = 0; | |
if (bVar21 || uVar11 != 0) goto LAB_080116da; | |
if (bVar22) goto LAB_08011710; | |
if (uVar3 == 0x69) { | |
LAB_080119be: | |
iVar20 = FUN_0801381c(&local_3c,DAT_08011bec); | |
if (iVar20 == 0) goto LAB_08011710; | |
local_3c = local_3c + -1; | |
iVar20 = FUN_0801381c(&local_3c,DAT_08011bf0); | |
if (iVar20 == 0) { | |
local_3c = local_3c + 1; | |
} | |
uVar24 = 0; | |
goto LAB_080116da; | |
} | |
if (uVar3 < 0x6a) { | |
if (uVar3 == 0x49) goto LAB_080119be; | |
bVar21 = uVar3 == 0x4e; | |
} | |
else { | |
bVar21 = uVar3 == 0x6e; | |
} | |
if ((bVar21) && (iVar20 = FUN_0801381c(&local_3c,DAT_08011be4), iVar20 != 0)) { | |
if ((*local_3c == 0x28) && | |
(iVar20 = FUN_08013844(&local_3c,DAT_08011be8,&local_30), iVar20 == 5)) { | |
uVar24 = (ulonglong)local_30; | |
} | |
else { | |
uVar24 = FUN_080125e0(DAT_08011bf4); | |
} | |
goto LAB_080116da; | |
} | |
LAB_08011710: | |
if (param_3 == (undefined4 *)0x0) { | |
return 0; | |
} | |
local_68 = 0; | |
local_3c = param_2; | |
uVar24 = 0; | |
} | |
else { | |
local_78 = 0; | |
bVar22 = false; | |
uVar11 = 0; | |
LAB_080117d2: | |
if ((uVar3 == 0x65) || (pbVar7 = local_3c, uVar3 == 0x45)) { | |
if (iVar15 == 0) { | |
LAB_080117dc: | |
if (!bVar21 && uVar11 == 0) goto LAB_08011710; | |
iVar15 = 0; | |
} | |
param_2 = local_3c; | |
uVar3 = (uint)local_3c[1]; | |
if (uVar3 == 0x2b) { | |
bVar2 = false; | |
LAB_080118ea: | |
uVar3 = (uint)local_3c[2]; | |
local_3c = local_3c + 2; | |
} | |
else { | |
if (uVar3 == 0x2d) { | |
bVar2 = true; | |
goto LAB_080118ea; | |
} | |
bVar2 = false; | |
local_3c = local_3c + 1; | |
} | |
pbVar7 = param_2; | |
if (9 < uVar3 - 0x30) goto LAB_08011804; | |
while (pbVar7 = local_3c, uVar3 == 0x30) { | |
uVar3 = (uint)local_3c[1]; | |
local_3c = local_3c + 1; | |
} | |
if (8 < uVar3 - 0x31) goto LAB_08011804; | |
while( true ) { | |
local_7c = uVar3 - 0x30; | |
pbVar8 = local_3c + 1; | |
uVar3 = (uint)local_3c[1]; | |
local_3c = pbVar8; | |
if (9 < uVar3 - 0x30) break; | |
uVar3 = local_7c * 10 + uVar3; | |
} | |
iVar5 = 19999; | |
if (((int)pbVar8 - (int)pbVar7 < 9) && (local_7c < 20000)) { | |
iVar5 = local_7c; | |
} | |
if (bVar2) { | |
iVar5 = -iVar5; | |
} | |
} | |
else { | |
LAB_08011804: | |
local_3c = pbVar7; | |
iVar5 = 0; | |
} | |
if (iVar15 == 0) goto LAB_0801195a; | |
uVar3 = iVar5 - local_78; | |
if (iVar20 == 0) { | |
iVar20 = iVar15; | |
} | |
iVar14 = iVar15; | |
if (0xf < iVar15) { | |
iVar14 = 0x10; | |
} | |
uVar24 = FUN_08000524(local_74); | |
if (iVar15 < 10) { | |
LAB_08011a1e: | |
iVar18 = DAT_08011bf8; | |
uVar19 = (undefined4)(uVar24 >> 0x20); | |
if (uVar3 != 0) { | |
if ((int)uVar3 < 1) { | |
if ((int)(uVar3 + 0x16) < 0 != SCARRY4(uVar3,0x16)) goto LAB_08011a72; | |
puVar4 = (undefined4 *)(DAT_08011bf8 + (local_78 - iVar5) * 8); | |
uVar24 = FUN_0800086c((int)uVar24,uVar19,*puVar4,puVar4[1]); | |
} | |
else { | |
if ((int)uVar3 < 0x17) { | |
uVar26 = *(undefined8 *)(DAT_08011bf8 + uVar3 * 8); | |
} | |
else { | |
if (0x25 - iVar15 < (int)uVar3) goto LAB_08011a72; | |
puVar4 = (undefined4 *)(DAT_08011bf8 + (0xf - iVar15) * 8); | |
uVar26 = FUN_08000618(*puVar4,puVar4[1],(int)uVar24,uVar19); | |
uVar24 = *(ulonglong *)(iVar18 + (uVar3 - (0xf - iVar15)) * 8); | |
} | |
uVar24 = FUN_08000618((int)uVar26,(int)((ulonglong)uVar26 >> 0x20),(int)uVar24, | |
(int)(uVar24 >> 0x20)); | |
} | |
} | |
} | |
else { | |
iVar9 = DAT_08011bf8 + iVar14 * 8; | |
uVar26 = FUN_08000618((int)uVar24,(int)(uVar24 >> 0x20),*(undefined4 *)(iVar9 + -0x48), | |
*(undefined4 *)(iVar9 + -0x44)); | |
uVar25 = FUN_08000524(iVar18); | |
uVar24 = fp_multiply((int)uVar26,(int)((ulonglong)uVar26 >> 0x20),(int)uVar25, | |
(int)((ulonglong)uVar25 >> 0x20)); | |
if (iVar15 < 0x10) goto LAB_08011a1e; | |
LAB_08011a72: | |
uVar19 = (undefined4)(uVar24 >> 0x20); | |
uVar10 = (iVar15 - iVar14) + uVar3; | |
if ((int)uVar10 < 1) { | |
if (uVar10 == 0) { | |
LAB_08011b88: | |
local_80 = 0; | |
LAB_08011c7c: | |
local_74 = FUN_08014178(param_1,local_70,iVar20,iVar15,local_74); | |
if (local_74 != 0) { | |
iVar5 = local_78 - iVar5; | |
if (-1 < (int)uVar3) { | |
iVar5 = 0; | |
} | |
iVar15 = 0; | |
uVar10 = uVar3 & ~((int)uVar3 >> 0x1f); | |
iVar20 = 0; | |
LAB_08011cae: | |
uVar11 = (uint)(uVar24 >> 0x20); | |
uVar12 = (uint)uVar24; | |
iVar18 = FUN_08014028(param_1,*(undefined4 *)(local_74 + 4)); | |
if (iVar18 == 0) goto LAB_08011aae; | |
copyBuffer(iVar18 + 0xc,local_74 + 0xc,(*(int *)(local_74 + 0x10) + 2) * 4); | |
local_38 = FUN_080147e0(uVar12,param_1,&local_34,&local_30); | |
if (local_38 == 0) goto LAB_08011aae; | |
iVar20 = FUN_080142a4(param_1,1); | |
if (iVar20 == 0) { | |
LAB_08011cf8: | |
iVar20 = 0; | |
goto LAB_08011aae; | |
} | |
if (local_34 < 0) { | |
uVar17 = uVar10 - local_34; | |
iVar14 = iVar5; | |
} | |
else { | |
uVar17 = uVar10; | |
iVar14 = local_34 + iVar5; | |
} | |
iVar16 = (local_34 - local_80) + local_30 + -1; | |
iVar9 = 0x36 - local_30; | |
if (iVar16 < DAT_08011ec0) { | |
uVar13 = DAT_08011ec0 - iVar16; | |
iVar9 = iVar9 - uVar13; | |
if ((int)uVar13 < 0x20) { | |
local_54 = 1 << (uVar13 & 0xff); | |
local_60 = 0; | |
} | |
else { | |
local_60 = 1 << (0xfffffbe2U - iVar16 & 0xff); | |
local_54 = 1; | |
} | |
} | |
else { | |
local_60 = 0; | |
local_54 = 1; | |
} | |
iVar16 = iVar14 + iVar9; | |
iVar9 = uVar17 + iVar9 + local_80; | |
iVar6 = iVar14; | |
if (iVar16 <= iVar14) { | |
iVar6 = iVar16; | |
} | |
if (iVar9 <= iVar6) { | |
iVar6 = iVar9; | |
} | |
if (0 < iVar6) { | |
iVar16 = iVar16 - iVar6; | |
iVar9 = iVar9 - iVar6; | |
iVar14 = iVar14 - iVar6; | |
} | |
if (0 < iVar5) { | |
iVar20 = FUN_08014414(param_1,iVar20,iVar5); | |
if (iVar20 == 0) goto LAB_08011cf8; | |
iVar6 = FUN_080142d0(param_1,iVar20,local_38); | |
if (iVar6 == 0) goto LAB_08011aae; | |
FUN_080140a8(param_1,local_38); | |
local_38 = iVar6; | |
} | |
if ((0 < iVar16) && (local_38 = FUN_080144c8(param_1,local_38,iVar16), local_38 == 0)) | |
goto LAB_08011aae; | |
if (((0 < (int)uVar3) && (iVar18 = FUN_08014414(param_1,iVar18,uVar10), iVar18 == 0)) || | |
((0 < iVar9 && (iVar18 = FUN_080144c8(param_1,iVar18,iVar9), iVar18 == 0)))) { | |
iVar18 = 0; | |
goto LAB_08011aae; | |
} | |
if (((0 < iVar14) && (iVar20 = FUN_080144c8(param_1,iVar20,iVar14), iVar20 == 0)) || | |
(iVar15 = FUN_080145d8(param_1,local_38,iVar18), iVar15 == 0)) goto LAB_08011aae; | |
iVar9 = *(int *)(iVar15 + 0xc); | |
*(undefined4 *)(iVar15 + 0xc) = 0; | |
iVar14 = FUN_080145a0(iVar15,iVar20); | |
if (iVar14 < 0) { | |
if ((((iVar9 == 0 && uVar12 == 0) && ((uVar24 & 0xfffff00000000) == 0)) && | |
(0x6b00000 < (uVar11 & 0x7ff00000))) && | |
((*(int *)(iVar15 + 0x14) != 0 || (1 < *(int *)(iVar15 + 0x10))))) { | |
iVar15 = FUN_080144c8(param_1,iVar15,1); | |
iVar5 = FUN_080145a0(iVar15,iVar20); | |
if (iVar5 < 1) goto LAB_08011f20; | |
LAB_08011e7e: | |
uVar11 = uVar11 & 0x7ff00000; | |
if ((local_80 == 0) || (0x6b00000 < uVar11)) { | |
uVar24 = CONCAT44(~(~(uVar11 - 0x100000 >> 0x14) << 0x14),0xffffffff); | |
goto LAB_08011f20; | |
} | |
if (uVar11 < 0x3700001) goto LAB_08011bd4; | |
goto LAB_08011e9a; | |
} | |
} | |
else { | |
if (iVar14 != 0) { | |
uVar26 = FUN_08014890(iVar15,iVar20); | |
uVar19 = (undefined4)((ulonglong)uVar26 >> 0x20); | |
uVar23 = (undefined4)uVar26; | |
iVar14 = FUN_08000b10(uVar23,uVar19,0,0x40000000); | |
if (iVar14 == 0) { | |
local_88 = FUN_08000618(uVar23,uVar19,0,DAT_08012168); | |
lVar28 = local_88; | |
if (iVar9 == 0) { | |
LAB_08011ff2: | |
local_88 = CONCAT44((int)((ulonglong)lVar28 >> 0x20) + -0x80000000,(int)lVar28); | |
} | |
} | |
else if (iVar9 == 0) { | |
if (uVar12 == 0) { | |
if ((uVar24 & 0xfffff00000000) == 0) { | |
iVar14 = FUN_08000afc(uVar23,uVar19,0,DAT_08012164); | |
if (iVar14 == 0) { | |
lVar28 = FUN_08000618(uVar23,uVar19,0,DAT_08012168); | |
} | |
else { | |
lVar28 = (ulonglong)DAT_08012168 << 0x20; | |
} | |
goto LAB_08011ff2; | |
} | |
} | |
else if (uVar24 == 1) goto LAB_08011bd4; | |
local_88 = DAT_08012138; | |
lVar28 = (ulonglong)DAT_08012164 << 0x20; | |
} | |
else { | |
local_88 = DAT_08012140; | |
lVar28 = DAT_08012140; | |
} | |
uVar19 = (undefined4)((ulonglong)lVar28 >> 0x20); | |
local_60 = (undefined4)local_88; | |
local_5c = local_88._4_4_; | |
uVar17 = DAT_0801215c & uVar11; | |
if (uVar17 == DAT_0801216c) { | |
uVar26 = FUN_08014700(uVar12); | |
uVar26 = FUN_08000618((int)uVar26,(int)((ulonglong)uVar26 >> 0x20), | |
(undefined4)local_88,local_88._4_4_); | |
uVar26 = fp_multiply((int)uVar26,(int)((ulonglong)uVar26 >> 0x20),uVar12, | |
uVar11 + 0xfcb00000); | |
uVar13 = (uint)((ulonglong)uVar26 >> 0x20); | |
if ((DAT_0801215c & uVar13) <= DAT_08012170) { | |
uVar24 = CONCAT44(uVar13 + 0x3500000,(int)uVar26); | |
goto LAB_080120ca; | |
} | |
if ((uVar11 == DAT_08012160) && (uVar12 == 0xffffffff)) goto LAB_08011aae; | |
uVar24 = CONCAT44(DAT_08012160,0xffffffff); | |
} | |
else { | |
if ((local_80 != 0) && (uVar17 < 0x6a00001)) { | |
iVar14 = FUN_08000b10((int)lVar28,uVar19,DAT_08012220,DAT_08012224); | |
if (iVar14 != 0) { | |
iVar14 = FUN_08000bc8((int)lVar28,uVar19); | |
if (iVar14 == 0) { | |
iVar14 = 1; | |
} | |
lVar28 = FUN_08000524(iVar14); | |
local_4c = (int)((ulonglong)lVar28 >> 0x20); | |
local_60 = (uint)lVar28; | |
if (iVar9 == 0) { | |
local_4c = local_4c + -0x80000000; | |
} | |
local_5c = local_4c; | |
} | |
local_5c = (local_5c + 0x6b00000) - uVar17; | |
} | |
uVar26 = FUN_08014700(uVar12); | |
uVar26 = FUN_08000618(local_60,local_5c,(int)uVar26, | |
(int)((ulonglong)uVar26 >> 0x20)); | |
uVar24 = fp_multiply((int)uVar26,(int)((ulonglong)uVar26 >> 0x20),uVar12,uVar11); | |
LAB_080120ca: | |
uVar19 = (undefined4)((ulonglong)lVar28 >> 0x20); | |
if ((local_80 == 0) && (uVar17 == ((uint)(uVar24 >> 0x20) & 0x7ff00000))) { | |
FUN_08014d74((int)lVar28,uVar19); | |
uVar26 = FUN_080005bc(); | |
uVar26 = fp_add((int)lVar28,uVar19,(int)uVar26,(int)((ulonglong)uVar26 >> 0x20)) | |
; | |
uVar23 = (undefined4)((ulonglong)uVar26 >> 0x20); | |
uVar19 = (undefined4)uVar26; | |
uVar27 = uVar24; | |
if (((uVar24 & 0xfffff00000000) == 0 && (int)uVar24 == 0) && iVar9 == 0) { | |
iVar14 = FUN_08000afc(uVar19,uVar23,DAT_08012228,DAT_0801222c); | |
} | |
else { | |
iVar14 = FUN_08000afc(uVar19,uVar23,DAT_08012148,DAT_0801214c); | |
if (iVar14 != 0) goto LAB_08011ac4; | |
iVar14 = FUN_08000b38(uVar19,uVar23,DAT_08012150,DAT_08012154); | |
} | |
if (iVar14 != 0) goto LAB_08011ac4; | |
} | |
} | |
FUN_080140a8(param_1,local_38); | |
FUN_080140a8(param_1,iVar18); | |
FUN_080140a8(param_1,iVar20); | |
FUN_080140a8(param_1,iVar15); | |
goto LAB_08011cae; | |
} | |
if (iVar9 == 0) { | |
if ((uVar24 & 0xfffff00000000) == 0 && uVar12 == 0) goto LAB_08011e7e; | |
} | |
else if ((uVar11 & 0xfffff) == DAT_08012158) { | |
if (local_80 == 0) { | |
uVar3 = 0xffffffff; | |
} | |
else { | |
uVar3 = 0xffffffff; | |
if ((DAT_0801215c & uVar11) < 0x6a00001) { | |
uVar3 = -1 << (0x6b - ((DAT_0801215c & uVar11) >> 0x14) & 0xff); | |
} | |
} | |
if (uVar12 == uVar3) { | |
if ((uVar11 != DAT_08012160) || (uVar12 != 0xffffffff)) { | |
uVar24 = (ulonglong)((uVar11 & DAT_0801215c) + 0x100000) << 0x20; | |
goto LAB_08011f20; | |
} | |
goto LAB_08011aae; | |
} | |
} | |
if (local_60 == 0) { | |
local_60 = local_54 & uVar12; | |
} | |
else { | |
local_60 = local_60 & uVar11; | |
} | |
if (local_60 != 0) { | |
if (iVar9 == 0) { | |
uVar26 = FUN_08011628(uVar12,uVar11,local_80); | |
uVar24 = fp_add(uVar12,uVar11,(int)uVar26,(int)((ulonglong)uVar26 >> 0x20)); | |
iVar5 = FUN_08000ae8((int)uVar24,(int)(uVar24 >> 0x20),0,0); | |
if (iVar5 == 0) goto LAB_08011f20; | |
goto LAB_08011bd4; | |
} | |
uVar26 = FUN_08011628(uVar12,uVar11,local_80); | |
uVar24 = fp_multiply(uVar12,uVar11,(int)uVar26,(int)((ulonglong)uVar26 >> 0x20)); | |
} | |
} | |
LAB_08011f20: | |
uVar27 = uVar24; | |
if (local_80 == 0) goto LAB_08011ac4; | |
LAB_08011e9a: | |
uVar27 = FUN_08000618((int)uVar24,(int)(uVar24 >> 0x20),0,DAT_08011ec4); | |
if ((DAT_08011ec8 & (uint)(uVar27 >> 0x20)) == 0) { | |
*param_1 = 0x22; | |
} | |
goto LAB_08011ac4; | |
} | |
goto LAB_08011aa6; | |
} | |
uVar11 = -uVar10 & 0xf; | |
if (uVar11 != 0) { | |
puVar4 = (undefined4 *)(DAT_08011bf8 + uVar11 * 8); | |
uVar24 = FUN_0800086c((int)uVar24,uVar19,*puVar4,puVar4[1]); | |
} | |
uVar10 = (int)-uVar10 >> 4; | |
if (uVar10 == 0) goto LAB_08011b88; | |
if ((int)uVar10 < 0x20) { | |
local_80 = uVar10 & 0x10; | |
if (local_80 != 0) { | |
local_80 = 0x6a; | |
} | |
bVar21 = false; | |
puVar4 = DAT_08011ebc; | |
uVar27 = uVar24; | |
do { | |
if ((int)(uVar10 << 0x1f) < 0) { | |
uVar27 = FUN_08000618((int)uVar27,(int)(uVar27 >> 0x20),*puVar4,puVar4[1]); | |
bVar21 = true; | |
} | |
uVar10 = (int)uVar10 >> 1; | |
puVar4 = puVar4 + 2; | |
} while (uVar10 != 0); | |
if (bVar21) { | |
uVar24 = uVar27; | |
} | |
uVar10 = (uint)(uVar24 >> 0x20); | |
if (local_80 != 0) { | |
uVar11 = (uVar10 << 1) >> 0x15; | |
iVar18 = -uVar11; | |
uVar12 = iVar18 + 0x6b; | |
if (0 < (int)uVar12) { | |
if ((int)uVar12 < 0x20) { | |
uVar24 = CONCAT44(uVar10,-1 << (uVar12 & 0xff) & (uint)uVar24); | |
} | |
else { | |
bVar22 = SBORROW4(uVar12,0x34); | |
bVar21 = uVar12 == 0x34; | |
if ((int)uVar12 < 0x35) { | |
uVar12 = 0xffffffff; | |
} | |
if (bVar21 || iVar18 + 0x37 < 0 != bVar22) { | |
uVar24 = (ulonglong)(uVar12 << (0x4b - uVar11 & 0xff) & uVar10) << 0x20; | |
} | |
else { | |
uVar24 = 0x370000000000000; | |
} | |
} | |
} | |
} | |
iVar18 = FUN_08000ae8((int)uVar24,(int)(uVar24 >> 0x20),0,0); | |
if (iVar18 != 0) goto LAB_08011bcc; | |
goto LAB_08011c7c; | |
} | |
LAB_08011bcc: | |
iVar15 = 0; | |
iVar20 = 0; | |
local_74 = 0; | |
iVar18 = 0; | |
LAB_08011bd4: | |
*param_1 = 0x22; | |
} | |
else { | |
if ((uVar10 & 0xf) != 0) { | |
puVar4 = (undefined4 *)(DAT_08011bf8 + (uVar10 & 0xf) * 8); | |
uVar24 = FUN_08000618(*puVar4,puVar4[1],(int)uVar24,uVar19); | |
} | |
if ((uVar10 & 0xfffffff0) == 0) goto LAB_08011b88; | |
if ((int)(uVar10 & 0xfffffff0) < 0x135) { | |
bVar21 = false; | |
iVar18 = (int)uVar10 >> 4; | |
iVar14 = 0; | |
puVar4 = DAT_08011bfc; | |
uVar27 = uVar24; | |
while( true ) { | |
if (iVar18 < 2) break; | |
if (iVar18 << 0x1f < 0) { | |
uVar27 = FUN_08000618((int)uVar27,(int)(uVar27 >> 0x20),*puVar4,puVar4[1]); | |
bVar21 = true; | |
} | |
iVar14 = iVar14 + 1; | |
iVar18 = iVar18 >> 1; | |
puVar4 = puVar4 + 2; | |
} | |
if (bVar21) { | |
uVar24 = uVar27; | |
} | |
uVar26 = FUN_08000618(DAT_08011bfc[iVar14 * 2],(DAT_08011bfc + iVar14 * 2)[1],(int)uVar24, | |
(int)(uVar24 >> 0x20) + -0x3500000); | |
uVar10 = (uint)((ulonglong)uVar26 >> 0x20); | |
uVar11 = DAT_08011c00 & uVar10; | |
if (uVar11 <= DAT_08011c04) { | |
if (DAT_08011c04 - 0x100000 < uVar11) { | |
uVar24 = CONCAT44(DAT_08011c08,0xffffffff); | |
} | |
else { | |
uVar24 = CONCAT44(uVar10 + 0x3500000,(int)uVar26); | |
} | |
goto LAB_08011b88; | |
} | |
} | |
LAB_08011aa6: | |
iVar15 = 0; | |
iVar20 = 0; | |
local_74 = 0; | |
iVar18 = 0; | |
LAB_08011aae: | |
*param_1 = 0x22; | |
} | |
uVar24 = 0; | |
uVar27 = 0; | |
if (local_74 != 0) { | |
LAB_08011ac4: | |
uVar24 = uVar27; | |
FUN_080140a8(param_1,local_38); | |
FUN_080140a8(param_1,iVar18); | |
FUN_080140a8(param_1,iVar20); | |
FUN_080140a8(param_1,local_74); | |
FUN_080140a8(param_1,iVar15); | |
} | |
} | |
LAB_080116da: | |
if (param_3 == (undefined4 *)0x0) goto LAB_080116e2; | |
} | |
*param_3 = local_3c; | |
LAB_080116e2: | |
if (local_68 != 0) { | |
uVar24 = uVar24 & 0xffffffff; | |
} | |
return uVar24; | |
} | |
uint FUN_0801223c(undefined4 *param_1,byte *param_2,undefined4 *param_3,uint param_4) | |
{ | |
undefined4 *puVar1; | |
uint uVar2; | |
int iVar3; | |
uint uVar4; | |
byte *pbVar5; | |
byte *pbVar6; | |
uint uVar7; | |
uint uVar8; | |
uint uVar9; | |
uint uVar10; | |
if ((0x24 < param_4) || (pbVar6 = param_2, param_4 == 1)) { | |
puVar1 = (undefined4 *)FUN_08012560(); | |
*puVar1 = 0x16; | |
return 0; | |
} | |
do { | |
pbVar5 = pbVar6; | |
pbVar6 = pbVar5 + 1; | |
uVar4 = (uint)*pbVar5; | |
uVar7 = *(byte *)(DAT_0801232c + uVar4) & 8; | |
} while ((*(byte *)(DAT_0801232c + uVar4) & 8) != 0); | |
if (uVar4 == 0x2d) { | |
uVar4 = (uint)*pbVar6; | |
uVar7 = 1; | |
pbVar6 = pbVar5 + 2; | |
} | |
else if (uVar4 == 0x2b) { | |
uVar4 = (uint)*pbVar6; | |
pbVar6 = pbVar5 + 2; | |
} | |
if ((param_4 & 0xffffffef) == 0) { | |
if ((uVar4 == 0x30) && ((*pbVar6 & 0xdf) == 0x58)) { | |
uVar4 = (uint)pbVar6[1]; | |
pbVar6 = pbVar6 + 2; | |
} | |
else if (param_4 == 0) { | |
if (uVar4 == 0x30) { | |
param_4 = 8; | |
} | |
else { | |
param_4 = 10; | |
} | |
goto LAB_080122a8; | |
} | |
param_4 = 0x10; | |
} | |
LAB_080122a8: | |
uVar10 = uVar7 + 0x7fffffff; | |
iVar3 = 0; | |
uVar9 = uVar10 / param_4; | |
uVar2 = 0; | |
do { | |
uVar8 = uVar4 - 0x30; | |
if (9 < uVar8) { | |
if (uVar4 - 0x41 < 0x1a) { | |
uVar8 = uVar4 - 0x37; | |
} | |
else { | |
if (0x19 < uVar4 - 0x61) break; | |
uVar8 = uVar4 - 0x57; | |
} | |
} | |
if ((int)param_4 <= (int)uVar8) break; | |
if (iVar3 != -1) { | |
if ((uVar9 < uVar2) || ((uVar9 == uVar2 && ((int)(uVar10 - param_4 * uVar9) < (int)uVar8)))) { | |
iVar3 = -1; | |
} | |
else { | |
uVar2 = uVar2 * param_4 + uVar8; | |
iVar3 = 1; | |
} | |
} | |
uVar4 = (uint)*pbVar6; | |
pbVar6 = pbVar6 + 1; | |
} while( true ); | |
if (iVar3 == -1) { | |
*param_1 = 0x22; | |
uVar2 = uVar10; | |
if (param_3 == (undefined4 *)0x0) { | |
return uVar10; | |
} | |
} | |
else { | |
if (uVar7 != 0) { | |
uVar2 = -uVar2; | |
} | |
if (param_3 == (undefined4 *)0x0) { | |
return uVar2; | |
} | |
if (iVar3 == 0) goto LAB_08012326; | |
} | |
param_2 = pbVar6 + -1; | |
LAB_08012326: | |
*param_3 = param_2; | |
return uVar2; | |
} | |
uint thunk_FUN_0801223c(undefined4 *param_1,byte *param_2,undefined4 *param_3,uint param_4) | |
{ | |
undefined4 *puVar1; | |
uint uVar2; | |
int iVar3; | |
uint uVar4; | |
byte *pbVar5; | |
byte *pbVar6; | |
uint uVar7; | |
uint uVar8; | |
uint uVar9; | |
uint uVar10; | |
if ((0x24 < param_4) || (pbVar6 = param_2, param_4 == 1)) { | |
puVar1 = (undefined4 *)FUN_08012560(); | |
*puVar1 = 0x16; | |
return 0; | |
} | |
do { | |
pbVar5 = pbVar6; | |
pbVar6 = pbVar5 + 1; | |
uVar4 = (uint)*pbVar5; | |
uVar7 = *(byte *)(DAT_0801232c + uVar4) & 8; | |
} while ((*(byte *)(DAT_0801232c + uVar4) & 8) != 0); | |
if (uVar4 == 0x2d) { | |
uVar4 = (uint)*pbVar6; | |
uVar7 = 1; | |
pbVar6 = pbVar5 + 2; | |
} | |
else if (uVar4 == 0x2b) { | |
uVar4 = (uint)*pbVar6; | |
pbVar6 = pbVar5 + 2; | |
} | |
if ((param_4 & 0xffffffef) == 0) { | |
if ((uVar4 == 0x30) && ((*pbVar6 & 0xdf) == 0x58)) { | |
uVar4 = (uint)pbVar6[1]; | |
pbVar6 = pbVar6 + 2; | |
} | |
else if (param_4 == 0) { | |
if (uVar4 == 0x30) { | |
param_4 = 8; | |
} | |
else { | |
param_4 = 10; | |
} | |
goto LAB_080122a8; | |
} | |
param_4 = 0x10; | |
} | |
LAB_080122a8: | |
uVar10 = uVar7 + 0x7fffffff; | |
iVar3 = 0; | |
uVar9 = uVar10 / param_4; | |
uVar2 = 0; | |
do { | |
uVar8 = uVar4 - 0x30; | |
if (9 < uVar8) { | |
if (uVar4 - 0x41 < 0x1a) { | |
uVar8 = uVar4 - 0x37; | |
} | |
else { | |
if (0x19 < uVar4 - 0x61) break; | |
uVar8 = uVar4 - 0x57; | |
} | |
} | |
if ((int)param_4 <= (int)uVar8) break; | |
if (iVar3 != -1) { | |
if ((uVar9 < uVar2) || ((uVar9 == uVar2 && ((int)(uVar10 - param_4 * uVar9) < (int)uVar8)))) { | |
iVar3 = -1; | |
} | |
else { | |
uVar2 = uVar2 * param_4 + uVar8; | |
iVar3 = 1; | |
} | |
} | |
uVar4 = (uint)*pbVar6; | |
pbVar6 = pbVar6 + 1; | |
} while( true ); | |
if (iVar3 == -1) { | |
*param_1 = 0x22; | |
uVar2 = uVar10; | |
if (param_3 == (undefined4 *)0x0) { | |
return uVar10; | |
} | |
} | |
else { | |
if (uVar7 != 0) { | |
uVar2 = -uVar2; | |
} | |
if (param_3 == (undefined4 *)0x0) { | |
return uVar2; | |
} | |
if (iVar3 == 0) goto LAB_08012326; | |
} | |
param_2 = pbVar6 + -1; | |
LAB_08012326: | |
*param_3 = param_2; | |
return uVar2; | |
} | |
uint FUN_08012334(undefined4 param_1,code *param_2,int *param_3) | |
{ | |
uint uVar1; | |
int iVar2; | |
uint uVar3; | |
int iVar4; | |
uVar3 = 0; | |
do { | |
iVar4 = param_3[1]; | |
iVar2 = param_3[2]; | |
while (iVar4 = iVar4 + -1, -1 < iVar4) { | |
if ((1 < *(ushort *)(iVar2 + 0xc)) && (*(short *)(iVar2 + 0xe) != -1)) { | |
uVar1 = (*param_2)(param_1,iVar2); | |
uVar3 = uVar3 | uVar1; | |
} | |
iVar2 = iVar2 + 0x68; | |
} | |
param_3 = (int *)*param_3; | |
} while (param_3 != (int *)0x0); | |
return uVar3; | |
} | |
void FUN_08012370(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
undefined4 uStack_c; | |
undefined4 uStack_8; | |
undefined4 uStack_4; | |
uStack_c = param_2; | |
uStack_8 = param_3; | |
uStack_4 = param_4; | |
FUN_08013c7c(*DAT_08012390,*(undefined4 *)(*DAT_08012390 + 8),param_1,&uStack_c,param_1,&uStack_c, | |
param_3); | |
return; | |
} | |
undefined4 resetSensorSubsystem(int param_1) | |
{ | |
char cVar1; | |
int iVar2; | |
int iVar3; | |
char *pcVar4; | |
undefined1 *puVar5; | |
undefined4 *puVar6; | |
undefined4 uVar7; | |
char *pcVar8; | |
iVar3 = *DAT_0801244c; | |
puVar6 = *(undefined4 **)(iVar3 + 8); | |
if (*(int *)(iVar3 + 0x20) == 0) { | |
FUN_0801159c(); | |
} | |
if ((-1 < (int)(puVar6[0x19] << 0x1f)) && (-1 < (int)((uint)*(ushort *)(puVar6 + 3) << 0x16))) { | |
FUN_080125b6(puVar6[0x16]); | |
} | |
if ((((int)((uint)*(ushort *)(puVar6 + 3) << 0x1c) < 0) && (puVar6[4] != 0)) || | |
(iVar2 = FUN_08014a90(iVar3,puVar6), iVar2 == 0)) { | |
pcVar8 = (char *)(param_1 + -1); | |
do { | |
while( true ) { | |
pcVar8 = pcVar8 + 1; | |
cVar1 = *pcVar8; | |
iVar2 = puVar6[2] + -1; | |
puVar6[2] = iVar2; | |
if (cVar1 == '\0') { | |
if (iVar2 < 0) { | |
iVar3 = FUN_08014a12(iVar3,10,puVar6); | |
if (iVar3 == -1) goto LAB_080123cc; | |
} | |
else { | |
puVar5 = (undefined1 *)*puVar6; | |
*puVar6 = puVar5 + 1; | |
*puVar5 = 10; | |
} | |
uVar7 = 10; | |
goto LAB_080123d0; | |
} | |
if ((iVar2 < 0) && ((iVar2 < (int)puVar6[6] || (cVar1 == '\n')))) break; | |
pcVar4 = (char *)*puVar6; | |
*puVar6 = pcVar4 + 1; | |
*pcVar4 = cVar1; | |
} | |
iVar2 = FUN_08014a12(iVar3,cVar1,puVar6); | |
} while (iVar2 != -1); | |
} | |
LAB_080123cc: | |
uVar7 = 0xffffffff; | |
LAB_080123d0: | |
if ((-1 < (int)(puVar6[0x19] << 0x1f)) && (-1 < (int)((uint)*(ushort *)(puVar6 + 3) << 0x16))) { | |
FUN_080125b8(puVar6[0x16]); | |
} | |
return uVar7; | |
} | |
void FUN_08012450(undefined1 *param_1,undefined1 *param_2,int param_3) | |
{ | |
undefined1 *puVar1; | |
undefined1 *puVar2; | |
puVar2 = param_2 + param_3; | |
if ((param_2 < param_1) && (param_1 < puVar2)) { | |
puVar1 = param_1 + param_3; | |
while (puVar1 != param_1) { | |
puVar2 = puVar2 + -1; | |
puVar1 = puVar1 + -1; | |
*puVar1 = *puVar2; | |
} | |
} | |
else { | |
param_1 = param_1 + -1; | |
for (; param_2 != puVar2; param_2 = param_2 + 1) { | |
param_1 = param_1 + 1; | |
*param_1 = *param_2; | |
} | |
} | |
return; | |
} | |
void FUN_08012484(undefined1 *param_1,undefined1 param_2,int param_3) | |
{ | |
undefined1 *puVar1; | |
puVar1 = param_1 + param_3; | |
for (; param_1 != puVar1; param_1 = param_1 + 1) { | |
*param_1 = param_2; | |
} | |
return; | |
} | |
int FUN_08012494(byte *param_1,int param_2,int param_3) | |
{ | |
byte *pbVar1; | |
int iVar2; | |
byte *pbVar3; | |
uint uVar4; | |
if (param_3 == 0) { | |
iVar2 = 0; | |
} | |
else { | |
pbVar3 = (byte *)(param_2 + -1); | |
pbVar1 = param_1; | |
do { | |
uVar4 = (uint)*pbVar1; | |
pbVar3 = pbVar3 + 1; | |
if ((uVar4 != *pbVar3) || (pbVar1 + 1 == param_1 + param_3)) break; | |
pbVar1 = pbVar1 + 1; | |
} while (uVar4 != 0); | |
iVar2 = uVar4 - *pbVar3; | |
} | |
return iVar2; | |
} | |
int FUN_08012508(uint param_1) | |
{ | |
int *piVar1; | |
int iVar2; | |
undefined4 uVar3; | |
int *piVar4; | |
code *pcVar5; | |
undefined4 unaff_r4; | |
undefined4 unaff_r5; | |
undefined4 in_lr; | |
undefined4 *puVar6; | |
piVar4 = (int *)*DAT_08012514; | |
if (param_1 < 0x20) { | |
iVar2 = piVar4[0xf]; | |
if ((iVar2 == 0) || (pcVar5 = *(code **)(iVar2 + param_1 * 4), pcVar5 == (code *)0x0)) { | |
puVar6 = DAT_08012514; | |
uVar3 = thunk_FUN_08007068(piVar4); | |
piVar1 = DAT_08012538; | |
*DAT_08012538 = 0; | |
iVar2 = FUN_0800706c(uVar3,param_1,param_1,0,puVar6,unaff_r4,unaff_r5,in_lr); | |
if ((iVar2 == -1) && (*piVar1 != 0)) { | |
*piVar4 = *piVar1; | |
} | |
return iVar2; | |
} | |
if (pcVar5 != (code *)0x1) { | |
if (pcVar5 == (code *)0xffffffff) { | |
*piVar4 = 0x16; | |
return 1; | |
} | |
*(undefined4 *)(iVar2 + param_1 * 4) = 0; | |
(*pcVar5)(param_1); | |
} | |
iVar2 = 0; | |
} | |
else { | |
*piVar4 = 0x16; | |
iVar2 = -1; | |
} | |
return iVar2; | |
} | |
undefined4 thunk_FUN_08007068(void) | |
{ | |
return 1; | |
} | |
void FUN_08012540(int *param_1,undefined4 param_2) | |
{ | |
int *piVar1; | |
int iVar2; | |
piVar1 = DAT_0801255c; | |
*DAT_0801255c = 0; | |
iVar2 = FUN_080070dc(param_2); | |
if ((iVar2 == -1) && (*piVar1 != 0)) { | |
*param_1 = *piVar1; | |
} | |
return; | |
} | |
undefined4 FUN_08012560(void) | |
{ | |
return *DAT_08012568; | |
} | |
void FUN_0801256c(void) | |
{ | |
undefined4 *puVar1; | |
int iVar2; | |
int iVar3; | |
undefined4 *puVar4; | |
int iVar5; | |
iVar3 = DAT_080125a8 - (int)DAT_080125a4; | |
puVar4 = DAT_080125a4; | |
for (iVar5 = 0; iVar2 = DAT_080125b0, puVar1 = DAT_080125ac, iVar5 != iVar3 >> 2; | |
iVar5 = iVar5 + 1) { | |
(*(code *)*puVar4)(); | |
puVar4 = puVar4 + 1; | |
} | |
FUN_0801509c(); | |
puVar4 = puVar1; | |
for (iVar3 = 0; iVar3 != iVar2 - (int)puVar1 >> 2; iVar3 = iVar3 + 1) { | |
(*(code *)*puVar4)(); | |
puVar4 = puVar4 + 1; | |
} | |
return; | |
} | |
void FUN_080125b6(void) | |
{ | |
return; | |
} | |
void FUN_080125b8(void) | |
{ | |
return; | |
} | |
undefined4 FUN_080125bc(void) | |
{ | |
return DAT_080125c0; | |
} | |
// Copies a block of bytes from the source buffer to the destination buffer. | |
// (Note: The destination pointer is initially adjusted by subtracting 1. This | |
// yields the same final result as a normal memcpy, but is how the decompiler | |
// presented the code.) | |
// | |
// Parameters: | |
// dest - destination buffer address (an integer value; it is adjusted internally) | |
// src - pointer to the source data (as an array of bytes) | |
// length - number of bytes to copy | |
void copyBuffer(int dest,undefined1 *src,int length) | |
{ | |
undefined1 *nextSrc; | |
undefined1 *srcEnd; | |
undefined1 *destPtr; | |
srcEnd = src + length; | |
destPtr = (undefined1 *)(dest + -1); | |
if (src != srcEnd) { | |
do { | |
nextSrc = src + 1; | |
destPtr = destPtr + 1; | |
*destPtr = *src; | |
src = nextSrc; | |
} while (nextSrc != srcEnd); | |
return; | |
} | |
return; | |
} | |
undefined8 FUN_080125e0(void) | |
{ | |
return DAT_080125e8; | |
} | |
uint FUN_080125f0(int param_1,int param_2) | |
{ | |
uint *puVar1; | |
uint uVar2; | |
uint uVar3; | |
int iVar4; | |
uint *puVar5; | |
uint uVar6; | |
uint *puVar7; | |
uint *puVar8; | |
uint uVar9; | |
int iVar10; | |
uint *puVar11; | |
uint *puVar13; | |
uint *puVar12; | |
if (*(int *)(param_1 + 0x10) < *(int *)(param_2 + 0x10)) { | |
uVar6 = 0; | |
} | |
else { | |
iVar4 = *(int *)(param_2 + 0x10) + -1; | |
puVar7 = (uint *)(param_2 + 0x14); | |
puVar5 = (uint *)(param_1 + 0x14); | |
puVar1 = puVar5 + iVar4; | |
puVar8 = puVar7 + iVar4; | |
uVar6 = puVar5[iVar4] / (puVar7[iVar4] + 1); | |
if (puVar7[iVar4] + 1 <= puVar5[iVar4]) { | |
uVar9 = 0; | |
iVar10 = 0; | |
puVar11 = puVar7; | |
puVar13 = puVar5; | |
do { | |
puVar12 = puVar11 + 1; | |
uVar9 = uVar6 * (*puVar11 & 0xffff) + uVar9; | |
uVar3 = uVar6 * (*puVar11 >> 0x10) + (uVar9 >> 0x10); | |
uVar2 = ((*puVar13 & 0xffff) - (uVar9 & 0xffff)) + iVar10; | |
uVar9 = uVar3 >> 0x10; | |
iVar10 = (((int)uVar2 >> 0x10) - (uVar3 & 0xffff)) + (*puVar13 >> 0x10); | |
*puVar13 = uVar2 & 0xffff | iVar10 * 0x10000; | |
iVar10 = iVar10 >> 0x10; | |
puVar11 = puVar12; | |
puVar13 = puVar13 + 1; | |
} while (puVar12 <= puVar8); | |
if (puVar5[iVar4] == 0) { | |
while ((puVar1 = puVar1 + -1, puVar5 < puVar1 && (*puVar1 == 0))) { | |
iVar4 = iVar4 + -1; | |
} | |
*(int *)(param_1 + 0x10) = iVar4; | |
} | |
} | |
iVar10 = FUN_080145a0(param_1); | |
if (-1 < iVar10) { | |
iVar10 = 0; | |
puVar1 = puVar5; | |
do { | |
puVar11 = puVar7 + 1; | |
uVar9 = ((*puVar1 & 0xffff) - (*puVar7 & 0xffff)) + iVar10; | |
iVar10 = (((int)uVar9 >> 0x10) - (*puVar7 >> 0x10)) + (*puVar1 >> 0x10); | |
*puVar1 = uVar9 & 0xffff | iVar10 * 0x10000; | |
iVar10 = iVar10 >> 0x10; | |
puVar1 = puVar1 + 1; | |
puVar7 = puVar11; | |
} while (puVar11 <= puVar8); | |
puVar7 = puVar5 + iVar4; | |
if (puVar5[iVar4] == 0) { | |
while ((puVar7 = puVar7 + -1, puVar5 < puVar7 && (*puVar7 == 0))) { | |
iVar4 = iVar4 + -1; | |
} | |
*(int *)(param_1 + 0x10) = iVar4; | |
} | |
uVar6 = uVar6 + 1; | |
} | |
} | |
return uVar6; | |
} | |
char * FUN_08012700(int param_1,uint param_2,uint param_3,int *param_4,undefined4 *param_5, | |
int *param_6) | |
{ | |
bool bVar1; | |
uint uVar2; | |
char cVar3; | |
byte bVar4; | |
uint *puVar5; | |
undefined4 uVar6; | |
int iVar7; | |
undefined4 uVar8; | |
int iVar9; | |
int iVar10; | |
undefined4 uVar11; | |
uint uVar12; | |
int iVar13; | |
bool bVar14; | |
char *pcVar15; | |
uint uVar16; | |
undefined4 *puVar17; | |
uint uVar18; | |
undefined4 *puVar19; | |
char *pcVar20; | |
char *pcVar21; | |
uint uVar22; | |
uint uVar23; | |
undefined4 uVar24; | |
char *pcVar25; | |
bool bVar26; | |
bool bVar27; | |
ulonglong in_d0; | |
undefined4 uVar28; | |
undefined8 uVar29; | |
undefined8 uVar30; | |
ulonglong uVar31; | |
ulonglong uVar32; | |
char *local_7c; | |
undefined8 local_78; | |
undefined8 local_70; | |
int local_68; | |
uint local_64; | |
uint local_60; | |
uint local_50; | |
uint local_4c; | |
undefined4 local_48; | |
undefined4 uStack_44; | |
char *local_34; | |
int local_30; | |
int local_2c [2]; | |
uVar22 = (uint)(in_d0 >> 0x20); | |
uVar16 = (uint)in_d0; | |
local_78 = in_d0; | |
local_64 = param_2; | |
local_50 = param_3; | |
if (*(int *)(param_1 + 0x1c) != 0) goto LAB_0801273c; | |
puVar5 = (uint *)FUN_08010b28(0x10); | |
*(uint **)(param_1 + 0x1c) = puVar5; | |
uVar12 = 0; | |
if (puVar5 != (uint *)0x0) goto LAB_08012734; | |
uVar8 = 0xef; | |
uVar6 = DAT_080129c0; | |
local_78 = in_d0; | |
LAB_0801272e: | |
puVar5 = (uint *)FUN_08014cec(DAT_080129c4,uVar8,0,uVar6); | |
LAB_08012734: | |
puVar5[1] = uVar12; | |
puVar5[2] = uVar12; | |
*puVar5 = uVar12; | |
puVar5[3] = uVar12; | |
LAB_0801273c: | |
uVar18 = local_64; | |
iVar9 = **(int **)(param_1 + 0x1c); | |
if (iVar9 != 0) { | |
uVar12 = (*(int **)(param_1 + 0x1c))[1]; | |
*(uint *)(iVar9 + 4) = uVar12; | |
*(int *)(iVar9 + 8) = 1 << (uVar12 & 0xff); | |
FUN_080140a8(param_1); | |
**(undefined4 **)(param_1 + 0x1c) = 0; | |
} | |
if ((int)uVar22 < 0) { | |
local_78 = CONCAT44(uVar22,(undefined4)local_78) & 0x7fffffffffffffff; | |
} | |
else { | |
*param_5 = 0; | |
} | |
uVar32 = local_78; | |
uVar12 = DAT_080129c8; | |
uVar2 = local_78._4_4_; | |
if ((int)uVar22 < 0) { | |
*param_5 = 1; | |
} | |
if ((uVar12 & ~local_78._4_4_) == 0) { | |
*param_4 = 9999; | |
if ((local_78 & 0xfffff00000000) == 0 && uVar16 == 0) { | |
if (param_6 == (int *)0x0) { | |
return DAT_08013270; | |
} | |
pcVar15 = DAT_08013270 + 8; | |
pcVar21 = DAT_08013270; | |
} | |
else { | |
if (param_6 == (int *)0x0) { | |
return DAT_080129dc; | |
} | |
pcVar15 = DAT_080129dc + 3; | |
pcVar21 = DAT_080129dc; | |
} | |
*param_6 = (int)pcVar15; | |
return pcVar21; | |
} | |
iVar7 = (int)local_78; | |
iVar9 = FUN_08000ae8(iVar7,local_78._4_4_,0,0); | |
if (iVar9 != 0) { | |
*param_4 = 1; | |
if (param_6 == (int *)0x0) { | |
return DAT_080129e0; | |
} | |
*param_6 = DAT_080129cc; | |
return DAT_080129e0; | |
} | |
uVar6 = FUN_080147e0(iVar7,param_1,local_2c,&local_30); | |
uVar22 = (local_78._4_4_ << 1) >> 0x15; | |
if (uVar22 == 0) { | |
iVar9 = local_30 + local_2c[0]; | |
uVar22 = iVar9 + 0x432; | |
bVar27 = SBORROW4(uVar22,0x20); | |
bVar26 = uVar22 == 0x20; | |
if (0x20 < (int)uVar22) { | |
uVar22 = 0x40 - uVar22; | |
} | |
if (bVar26 || iVar9 + 0x412 < 0 != bVar27) { | |
uVar16 = uVar16 << (0x20 - uVar22 & 0xff); | |
} | |
else { | |
uVar16 = local_78._4_4_ << (uVar22 & 0xff) | uVar16 >> (iVar9 + 0x412U & 0xff); | |
} | |
uVar29 = FUN_08000524(uVar16); | |
iVar10 = (int)uVar29; | |
uVar16 = (int)((ulonglong)uVar29 >> 0x20) + 0xfe100000; | |
param_5 = (undefined4 *)(iVar9 + -1); | |
bVar26 = true; | |
} | |
else { | |
uVar16 = local_78._4_4_ & 0xfffff | 0x3ff00000; | |
param_5 = (undefined4 *)(uVar22 - 0x3ff); | |
bVar26 = false; | |
iVar10 = iVar7; | |
} | |
uVar29 = fp_add(iVar10,uVar16,0,DAT_080129d0); | |
uVar29 = FUN_08000618((int)uVar29,(int)((ulonglong)uVar29 >> 0x20),DAT_080129a8,DAT_080129ac); | |
uVar29 = fp_multiply((int)uVar29,(int)((ulonglong)uVar29 >> 0x20),DAT_080129b0,DAT_080129b4); | |
uVar30 = FUN_08000544(param_5); | |
uVar30 = FUN_08000618((int)uVar30,(int)((ulonglong)uVar30 >> 0x20),DAT_080129b8,DAT_080129bc); | |
uVar29 = fp_multiply((int)uVar29,(int)((ulonglong)uVar29 >> 0x20),(int)uVar30, | |
(int)((ulonglong)uVar30 >> 0x20)); | |
uVar8 = (undefined4)((ulonglong)uVar29 >> 0x20); | |
uVar12 = FUN_08000b78(); | |
iVar9 = FUN_08000afc((int)uVar29,uVar8,0,0); | |
if (iVar9 != 0) { | |
uVar30 = FUN_08000544(uVar12); | |
iVar9 = FUN_08000ae8((int)uVar30,(int)((ulonglong)uVar30 >> 0x20),(int)uVar29,uVar8); | |
if (iVar9 == 0) { | |
uVar12 = uVar12 - 1; | |
} | |
} | |
if (uVar12 < 0x17) { | |
puVar17 = (undefined4 *)(DAT_080129d4 + uVar12 * 8); | |
iVar9 = FUN_08000afc(iVar7,local_78._4_4_,*puVar17,puVar17[1]); | |
if (iVar9 == 0) { | |
bVar27 = false; | |
} | |
else { | |
uVar12 = uVar12 - 1; | |
bVar27 = false; | |
} | |
} | |
else { | |
bVar27 = true; | |
} | |
local_68 = (local_30 - (int)param_5) + -1; | |
if (local_68 < 0) { | |
iVar9 = 1 - (local_30 - (int)param_5); | |
local_68 = 0; | |
} | |
else { | |
iVar9 = 0; | |
} | |
if ((int)uVar12 < 0) { | |
local_60 = -uVar12; | |
iVar9 = iVar9 - uVar12; | |
local_4c = 0; | |
} | |
else { | |
local_68 = local_68 + uVar12; | |
local_60 = 0; | |
local_4c = uVar12; | |
} | |
if (9 < local_64) { | |
uVar16 = 1; | |
local_64 = 0; | |
switchD_080128ce_caseD_4: | |
bVar14 = true; | |
pcVar21 = (char *)0xffffffff; | |
local_7c = (char *)0xffffffff; | |
uVar18 = 0x12; | |
local_50 = 0; | |
goto LAB_0801294a; | |
} | |
if (5 < (int)local_64) { | |
local_64 = local_64 - 4; | |
} | |
uVar16 = (uint)((int)uVar18 < 6); | |
switch(local_64) { | |
case 2: | |
bVar14 = false; | |
break; | |
case 3: | |
bVar14 = false; | |
goto LAB_08012928; | |
case 4: | |
bVar14 = true; | |
break; | |
case 5: | |
bVar14 = true; | |
LAB_08012928: | |
pcVar21 = (char *)(uVar12 + local_50); | |
local_7c = (char *)((int)pcVar21 + 1); | |
uVar18 = (uint)local_7c; | |
if ((int)local_7c < 1) { | |
uVar18 = 1; | |
} | |
goto LAB_0801294a; | |
default: | |
goto switchD_080128ce_caseD_4; | |
} | |
if ((int)local_50 < 1) { | |
uVar18 = 1; | |
pcVar21 = (char *)0x1; | |
local_7c = (char *)0x1; | |
local_50 = uVar18; | |
} | |
else { | |
local_7c = (char *)local_50; | |
uVar18 = local_50; | |
pcVar21 = (char *)local_50; | |
} | |
LAB_0801294a: | |
iVar10 = 0; | |
for (iVar13 = 4; uVar22 = iVar13 + 0x14, uVar22 <= uVar18; iVar13 = iVar13 << 1) { | |
iVar10 = iVar10 + 1; | |
} | |
*(int *)(*(int *)(param_1 + 0x1c) + 4) = iVar10; | |
pcVar15 = (char *)FUN_08014028(param_1); | |
if (pcVar15 == (char *)0x0) { | |
uVar8 = 0x1af; | |
uVar6 = DAT_080129d8; | |
local_78 = uVar32; | |
goto LAB_0801272e; | |
} | |
**(undefined4 **)(param_1 + 0x1c) = pcVar15; | |
puVar17 = DAT_08012c74; | |
uVar18 = uVar12; | |
if ((local_7c < 0xf) && (uVar16 != 0)) { | |
if ((int)uVar12 < 1) { | |
if (uVar12 == 0) { | |
iVar10 = 2; | |
} | |
else { | |
puVar19 = (undefined4 *)(DAT_08012c70 + (-uVar12 & 0xf) * 8); | |
local_78 = FUN_08000618(iVar7,local_78._4_4_,*puVar19,puVar19[1]); | |
iVar13 = (int)-uVar12 >> 4; | |
bVar1 = false; | |
iVar10 = 2; | |
uVar31 = local_78; | |
while( true ) { | |
if (iVar13 == 0) break; | |
if (iVar13 << 0x1f < 0) { | |
uVar31 = FUN_08000618((int)uVar31,(int)(uVar31 >> 0x20),*puVar17,puVar17[1]); | |
iVar10 = iVar10 + 1; | |
bVar1 = true; | |
} | |
iVar13 = iVar13 >> 1; | |
puVar17 = puVar17 + 2; | |
} | |
if (bVar1) goto LAB_08012a3e; | |
} | |
} | |
else { | |
local_70 = *(undefined8 *)(DAT_08012c70 + (uVar12 & 0xf) * 8); | |
uVar22 = (int)uVar12 >> 4; | |
if ((int)(uVar12 << 0x17) < 0) { | |
local_78 = FUN_0800086c(iVar7,local_78._4_4_,DAT_08012c74[8],DAT_08012c74[9]); | |
uVar22 = uVar22 & 0xf; | |
iVar10 = 3; | |
puVar17 = DAT_08012c74; | |
} | |
else { | |
iVar10 = 2; | |
} | |
while( true ) { | |
if (uVar22 == 0) break; | |
if ((int)(uVar22 << 0x1f) < 0) { | |
local_70 = FUN_08000618((undefined4)local_70,local_70._4_4_,*puVar17,puVar17[1]); | |
iVar10 = iVar10 + 1; | |
} | |
uVar22 = (int)uVar22 >> 1; | |
puVar17 = puVar17 + 2; | |
} | |
uVar31 = FUN_0800086c((undefined4)local_78,local_78._4_4_,(undefined4)local_70,local_70._4_4_) | |
; | |
LAB_08012a3e: | |
local_78 = uVar31; | |
} | |
local_34 = local_7c; | |
if (((bVar27) && | |
(iVar13 = FUN_08000afc((undefined4)local_78,local_78._4_4_,0,DAT_08012c78), iVar13 != 0)) && | |
(local_7c != (char *)0x0)) { | |
if ((int)pcVar21 < 1) goto LAB_08012b34; | |
local_78 = FUN_08000618((undefined4)local_78,local_78._4_4_,0,DAT_08012c7c); | |
iVar10 = iVar10 + 1; | |
local_34 = pcVar21; | |
uVar18 = uVar12 - 1; | |
} | |
uVar29 = FUN_08000544(iVar10); | |
uVar29 = FUN_08000618((int)uVar29,(int)((ulonglong)uVar29 >> 0x20),(undefined4)local_78, | |
local_78._4_4_); | |
uVar29 = fp_multiply((int)uVar29,(int)((ulonglong)uVar29 >> 0x20),0,DAT_08012c80); | |
iVar10 = (int)((ulonglong)uVar29 >> 0x20); | |
uVar8 = (undefined4)uVar29; | |
iVar13 = iVar10 + -0x3400000; | |
if (local_34 == (char *)0x0) { | |
uVar29 = fp_add((undefined4)local_78,local_78._4_4_,0,DAT_08012c84); | |
uVar28 = (undefined4)((ulonglong)uVar29 >> 0x20); | |
iVar13 = FUN_08000b38((int)uVar29,uVar28,uVar8,iVar13); | |
if (iVar13 == 0) { | |
iVar10 = FUN_08000afc((int)uVar29,uVar28,uVar8,iVar10 + 0x7cc00000); | |
if (iVar10 == 0) goto LAB_08012b34; | |
goto LAB_08012b7c; | |
} | |
LAB_0801302a: | |
uVar16 = 0; | |
uVar23 = uVar16; | |
LAB_08013016: | |
local_7c = pcVar15 + 1; | |
*pcVar15 = '1'; | |
uVar18 = uVar18 + 1; | |
goto LAB_08012b88; | |
} | |
iVar10 = DAT_08012c70 + (int)local_34 * 8; | |
local_34 = pcVar15 + (int)local_34; | |
if (bVar14) { | |
uVar29 = FUN_0800086c(0,DAT_08012c88); | |
uVar29 = fp_add((int)uVar29,(int)((ulonglong)uVar29 >> 0x20),uVar8,iVar13); | |
pcVar25 = pcVar15; | |
while( true ) { | |
uStack_44 = (undefined4)((ulonglong)uVar29 >> 0x20); | |
local_48 = (undefined4)uVar29; | |
cVar3 = FUN_08000b78((undefined4)local_78,local_78._4_4_); | |
uVar29 = FUN_08000544(); | |
uVar29 = fp_add((undefined4)local_78,local_78._4_4_,(int)uVar29, | |
(int)((ulonglong)uVar29 >> 0x20)); | |
uVar28 = (undefined4)((ulonglong)uVar29 >> 0x20); | |
uVar8 = (undefined4)uVar29; | |
pcVar20 = pcVar25 + 1; | |
*pcVar25 = cVar3 + '0'; | |
iVar10 = FUN_08000afc(uVar8,uVar28,local_48,uStack_44); | |
if (iVar10 != 0) goto LAB_08012d8e; | |
uVar29 = fp_add(0,DAT_08012c78,uVar8,uVar28); | |
iVar10 = FUN_08000afc((int)uVar29,(int)((ulonglong)uVar29 >> 0x20),local_48,uStack_44); | |
pcVar25 = pcVar20; | |
if (iVar10 != 0) goto LAB_08012db0; | |
if (pcVar20 == local_34) break; | |
uVar29 = FUN_08000618(local_48,uStack_44,0,DAT_08012c7c); | |
local_78 = FUN_08000618(uVar8,uVar28,0,DAT_08012c7c); | |
} | |
goto LAB_08012b34; | |
} | |
uVar29 = FUN_08000618(uVar8,iVar13,*(undefined4 *)(iVar10 + -8),*(undefined4 *)(iVar10 + -4)); | |
uVar8 = (undefined4)((ulonglong)uVar29 >> 0x20); | |
pcVar20 = pcVar15; | |
while( true ) { | |
cVar3 = FUN_08000b78((undefined4)local_78,local_78._4_4_); | |
uVar30 = FUN_08000544(); | |
uVar30 = fp_add((undefined4)local_78,local_78._4_4_,(int)uVar30, | |
(int)((ulonglong)uVar30 >> 0x20)); | |
uVar24 = (undefined4)((ulonglong)uVar30 >> 0x20); | |
uVar28 = (undefined4)uVar30; | |
pcVar25 = pcVar20 + 1; | |
*pcVar20 = cVar3 + '0'; | |
if (pcVar25 == local_34) break; | |
local_78 = FUN_08000618(uVar28,uVar24,0,DAT_08012f80); | |
pcVar20 = pcVar25; | |
} | |
uVar30 = fp_multiply((int)uVar29,uVar8,0,DAT_08012f7c); | |
iVar10 = FUN_08000b38(uVar28,uVar24,(int)uVar30,(int)((ulonglong)uVar30 >> 0x20)); | |
if (iVar10 != 0) goto LAB_08012db0; | |
uVar29 = fp_add(0,DAT_08012f7c,(int)uVar29,uVar8); | |
iVar10 = FUN_08000afc(uVar28,uVar24,(int)uVar29,(int)((ulonglong)uVar29 >> 0x20)); | |
if (iVar10 != 0) goto LAB_08012d04; | |
} | |
LAB_08012b34: | |
if ((local_2c[0] < 0) || (0xe < (int)uVar12)) { | |
uVar22 = local_60; | |
if (bVar14) { | |
iVar13 = iVar9; | |
if ((int)local_64 < 2) { | |
if (bVar26) { | |
pcVar20 = (char *)(local_2c[0] + 0x433); | |
} | |
else { | |
pcVar20 = (char *)(0x36 - local_30); | |
} | |
} | |
else { | |
iVar10 = (int)local_7c - 1; | |
pcVar20 = local_7c; | |
if ((int)local_60 < iVar10) { | |
local_4c = local_4c + (iVar10 - local_60); | |
uVar22 = 0; | |
local_60 = iVar10; | |
} | |
else { | |
uVar22 = local_60 - iVar10; | |
if ((int)local_7c < 0) { | |
pcVar20 = (char *)0; | |
iVar13 = iVar9 - (int)local_7c; | |
} | |
} | |
} | |
local_68 = local_68 + (int)pcVar20; | |
iVar10 = iVar9 + (int)pcVar20; | |
uVar23 = FUN_080142a4(param_1,1); | |
iVar9 = iVar13; | |
} | |
else { | |
uVar23 = 0; | |
iVar10 = iVar9; | |
} | |
if ((iVar9 != 0) && (0 < local_68)) { | |
iVar13 = local_68; | |
if (iVar9 <= local_68) { | |
iVar13 = iVar9; | |
} | |
iVar10 = iVar10 - iVar13; | |
iVar9 = iVar9 - iVar13; | |
local_68 = local_68 - iVar13; | |
} | |
if (local_60 != 0) { | |
if (bVar14) { | |
uVar8 = uVar6; | |
if (uVar22 != 0) { | |
uVar23 = FUN_08014414(param_1,uVar23,uVar22); | |
uVar8 = FUN_080142d0(param_1,uVar23,uVar6); | |
FUN_080140a8(param_1,uVar6); | |
} | |
local_60 = local_60 - uVar22; | |
uVar6 = uVar8; | |
if (local_60 == 0) goto LAB_08012e7a; | |
} | |
uVar6 = FUN_08014414(param_1,uVar6,local_60); | |
} | |
LAB_08012e7a: | |
uVar16 = FUN_080142a4(param_1,1); | |
if (local_4c == 0) { | |
if ((int)local_64 < 2) goto LAB_08012ea0; | |
local_60 = local_4c; | |
LAB_08013234: | |
iVar7 = 1; | |
} | |
else { | |
uVar16 = FUN_08014414(param_1,uVar16,local_4c); | |
if ((int)local_64 < 2) { | |
LAB_08012ea0: | |
if (iVar7 == 0) { | |
if ((uVar32 & 0xfffff00000000) == 0) { | |
local_60 = uVar2 & 0x7ff00000; | |
if ((uVar32 & 0x7ff0000000000000) != 0) { | |
local_68 = local_68 + 1; | |
iVar10 = iVar10 + 1; | |
local_60 = 1; | |
} | |
} | |
else { | |
local_60 = 0; | |
} | |
} | |
else { | |
local_60 = 0; | |
} | |
if (local_4c == 0) goto LAB_08013234; | |
} | |
else { | |
local_60 = 0; | |
} | |
iVar7 = FUN_0801420c(*(undefined4 *)(uVar16 + *(int *)(uVar16 + 0x10) * 4 + 0x10)); | |
iVar7 = 0x20 - iVar7; | |
} | |
uVar22 = iVar7 + local_68 & 0x1f; | |
if (uVar22 == 0) { | |
iVar7 = 0; | |
LAB_08012fd2: | |
iVar7 = iVar7 + 0x1c; | |
local_68 = local_68 + iVar7; | |
iVar10 = iVar10 + iVar7; | |
iVar9 = iVar9 + iVar7; | |
} | |
else { | |
iVar7 = 0x20 - uVar22; | |
if (iVar7 < 5) { | |
if (iVar7 != 4) goto LAB_08012fd2; | |
} | |
else { | |
iVar7 = 0x1c - uVar22; | |
local_68 = local_68 + iVar7; | |
iVar10 = iVar10 + iVar7; | |
iVar9 = iVar9 + iVar7; | |
} | |
} | |
if (0 < iVar10) { | |
uVar6 = FUN_080144c8(param_1,uVar6,iVar10); | |
} | |
if (0 < local_68) { | |
uVar16 = FUN_080144c8(param_1,uVar16,local_68); | |
} | |
pcVar20 = pcVar15; | |
if ((!bVar27) || (iVar7 = FUN_080145a0(uVar6,uVar16), -1 < iVar7)) { | |
pcVar21 = local_7c; | |
uVar18 = uVar12; | |
if ((int)local_7c < 1) goto LAB_08012fee; | |
LAB_08013032: | |
if (!bVar14) goto LAB_08013242; | |
LAB_0801303a: | |
uVar22 = uVar23; | |
if (0 < iVar9) { | |
uVar22 = FUN_080144c8(param_1,uVar23,iVar9); | |
} | |
uVar23 = uVar22; | |
if (local_60 == 0) goto LAB_08013082; | |
iVar9 = FUN_08014028(param_1,*(undefined4 *)(uVar22 + 4)); | |
if (iVar9 == 0) { | |
uVar8 = 0x2ef; | |
param_5 = (undefined4 *)0x0; | |
uVar6 = DAT_0801326c; | |
local_78 = uVar32; | |
goto LAB_0801272e; | |
} | |
copyBuffer(iVar9 + 0xc,uVar22 + 0xc,(*(int *)(uVar22 + 0x10) + 2) * 4); | |
uVar23 = FUN_080144c8(param_1,iVar9,1); | |
LAB_08013082: | |
LAB_0801309a: | |
local_7c = pcVar20 + 1; | |
iVar9 = FUN_080125f0(uVar6,uVar16); | |
uVar12 = iVar9 + 0x30; | |
iVar7 = FUN_080145a0(uVar6,uVar22); | |
iVar10 = FUN_080145d8(param_1,uVar16,uVar23); | |
if (*(int *)(iVar10 + 0xc) == 0) { | |
iVar13 = FUN_080145a0(uVar6,iVar10); | |
} | |
else { | |
iVar13 = 1; | |
} | |
FUN_080140a8(param_1,iVar10); | |
if ((iVar13 == 0 && local_64 == 0) && (uVar32 & 1) == 0) { | |
if (uVar12 == 0x39) { | |
LAB_08013146: | |
*pcVar20 = '9'; | |
pcVar21 = local_7c; | |
goto LAB_0801314e; | |
} | |
if (0 < iVar7) { | |
LAB_080130f8: | |
uVar12 = iVar9 + 0x31; | |
} | |
LAB_080130fe: | |
*pcVar20 = (char)uVar12; | |
goto LAB_08012b8a; | |
} | |
if ((iVar7 < 0) || ((iVar7 == 0 && local_64 == 0) && (uVar32 & 1) == 0)) { | |
if (0 < iVar13) { | |
uVar6 = FUN_080144c8(param_1,uVar6,1); | |
iVar7 = FUN_080145a0(uVar6,uVar16); | |
if ((0 < iVar7) || ((iVar7 == 0 && ((uVar12 & 1) != 0)))) { | |
if (uVar12 != 0x39) goto LAB_080130f8; | |
goto LAB_08013146; | |
} | |
} | |
goto LAB_080130fe; | |
} | |
if (0 < iVar13) { | |
if (uVar12 == 0x39) goto LAB_08013146; | |
*pcVar20 = (char)iVar9 + '1'; | |
goto LAB_08012b8a; | |
} | |
*pcVar20 = (char)uVar12; | |
if (local_7c != pcVar15 + (int)pcVar21) { | |
uVar6 = FUN_080140ec(param_1,uVar6,10,0); | |
pcVar20 = local_7c; | |
if (uVar22 == uVar23) { | |
uVar23 = FUN_080140ec(param_1,uVar22,10,0); | |
uVar22 = uVar23; | |
} | |
else { | |
uVar22 = FUN_080140ec(param_1,uVar22,10,0); | |
uVar23 = FUN_080140ec(param_1,uVar23,10,0); | |
} | |
goto LAB_0801309a; | |
} | |
goto LAB_080131d2; | |
} | |
uVar18 = uVar12 - 1; | |
uVar6 = FUN_080140ec(param_1,uVar6,10,0); | |
local_7c = pcVar21; | |
if (bVar14) { | |
uVar23 = FUN_080140ec(param_1,uVar23,10,0); | |
if ((0 < (int)pcVar21) || ((int)local_64 < 3)) goto LAB_0801303a; | |
} | |
else { | |
if (0 < (int)pcVar21) goto LAB_08013242; | |
LAB_08012fee: | |
pcVar21 = local_7c; | |
if ((int)local_64 < 3) goto LAB_08013032; | |
} | |
if (local_7c == (char *)0x0) { | |
uVar16 = FUN_080140ec(param_1,uVar16,5); | |
iVar9 = FUN_080145a0(uVar6,uVar16); | |
if (0 < iVar9) goto LAB_08013016; | |
} | |
} | |
else { | |
uVar29 = *(undefined8 *)(DAT_08012c70 + uVar12 * 8); | |
uVar28 = (undefined4)uVar29; | |
uVar8 = (undefined4)((ulonglong)uVar29 >> 0x20); | |
pcVar21 = pcVar15; | |
if ((-1 < (int)local_50) || (0 < (int)local_7c)) goto LAB_08012d28; | |
if (local_7c == (char *)0x0) { | |
uVar29 = FUN_08000618(uVar28,uVar8,0,DAT_08012c84); | |
iVar9 = FUN_08000b24((int)uVar29,(int)((ulonglong)uVar29 >> 0x20),iVar7,uVar2); | |
uVar18 = uVar12; | |
if (iVar9 == 0) goto LAB_0801302a; | |
} | |
LAB_08012b7c: | |
uVar16 = 0; | |
uVar23 = 0; | |
} | |
uVar18 = ~local_50; | |
local_7c = pcVar15; | |
LAB_08012b88: | |
uVar22 = 0; | |
goto LAB_08012b8a; | |
LAB_08012d04: | |
do { | |
pcVar21 = local_34 + -1; | |
pcVar20 = local_34; | |
local_34 = local_34 + -1; | |
} while (*pcVar21 == '0'); | |
goto LAB_08012d8e; | |
LAB_08013242: | |
while( true ) { | |
iVar9 = FUN_080125f0(uVar6,uVar16); | |
uVar12 = iVar9 + 0x30; | |
*pcVar20 = (char)uVar12; | |
if ((int)pcVar21 <= (int)(pcVar20 + 1) - (int)pcVar15) break; | |
uVar6 = FUN_080140ec(param_1,uVar6,10,0); | |
pcVar20 = pcVar20 + 1; | |
} | |
if ((int)pcVar21 < 1) { | |
pcVar21 = (char *)0x1; | |
} | |
local_7c = pcVar15 + (int)pcVar21; | |
uVar22 = 0; | |
LAB_080131d2: | |
uVar6 = FUN_080144c8(param_1,uVar6,1); | |
iVar9 = FUN_080145a0(uVar6,uVar16); | |
pcVar21 = local_7c; | |
if ((iVar9 < 1) && ((iVar9 != 0 || ((uVar12 & 1) == 0)))) { | |
do { | |
local_7c = pcVar21; | |
pcVar21 = local_7c + -1; | |
} while (local_7c[-1] == '0'); | |
} | |
else { | |
LAB_0801314e: | |
do { | |
local_7c = pcVar21; | |
pcVar21 = local_7c + -1; | |
if (local_7c[-1] != '9') { | |
*pcVar21 = local_7c[-1] + '\x01'; | |
goto LAB_08012b8a; | |
} | |
} while (pcVar15 != pcVar21); | |
uVar18 = uVar18 + 1; | |
*pcVar15 = '1'; | |
} | |
LAB_08012b8a: | |
FUN_080140a8(param_1,uVar16); | |
pcVar20 = local_7c; | |
if (uVar23 != 0) { | |
if ((uVar22 != 0) && (uVar22 != uVar23)) { | |
FUN_080140a8(param_1,uVar22); | |
} | |
FUN_080140a8(param_1,uVar23); | |
} | |
goto LAB_08012d8e; | |
while( true ) { | |
uVar32 = FUN_08000618(uVar24,uVar11,0,DAT_08012f80); | |
iVar9 = FUN_08000ae8((int)uVar32,(int)(uVar32 >> 0x20),0,0); | |
pcVar21 = pcVar25; | |
uVar18 = uVar12; | |
if (iVar9 != 0) break; | |
LAB_08012d28: | |
uVar24 = (undefined4)(uVar32 >> 0x20); | |
FUN_0800086c((int)uVar32,uVar24,uVar28,uVar8); | |
bVar4 = FUN_08000b78(); | |
uVar29 = FUN_08000544(); | |
uVar29 = FUN_08000618((int)uVar29,(int)((ulonglong)uVar29 >> 0x20),uVar28,uVar8); | |
uVar29 = fp_add((int)uVar32,uVar24,(int)uVar29,(int)((ulonglong)uVar29 >> 0x20)); | |
uVar11 = (undefined4)((ulonglong)uVar29 >> 0x20); | |
uVar24 = (undefined4)uVar29; | |
pcVar25 = pcVar21 + 1; | |
*pcVar21 = bVar4 + 0x30; | |
pcVar20 = pcVar25; | |
if (local_7c == (char *)((int)pcVar25 - (int)pcVar15)) { | |
uVar29 = fp_multiply(uVar24,uVar11,uVar24,uVar11); | |
uVar24 = (undefined4)((ulonglong)uVar29 >> 0x20); | |
iVar9 = FUN_08000b38((int)uVar29,uVar24,uVar28,uVar8); | |
uVar18 = uVar12; | |
if ((iVar9 != 0) || | |
((iVar9 = FUN_08000ae8((int)uVar29,uVar24,uVar28,uVar8), iVar9 != 0 && ((bVar4 & 1) != 0))) | |
) goto LAB_08012db0; | |
break; | |
} | |
} | |
goto LAB_08012d8e; | |
while (pcVar15 != pcVar25) { | |
LAB_08012db0: | |
pcVar20 = pcVar25; | |
pcVar25 = pcVar20 + -1; | |
if (*pcVar25 != '9') goto LAB_08012dca; | |
} | |
uVar18 = uVar18 + 1; | |
*pcVar15 = '0'; | |
LAB_08012dca: | |
*pcVar25 = *pcVar25 + '\x01'; | |
LAB_08012d8e: | |
FUN_080140a8(param_1,uVar6); | |
*pcVar20 = '\0'; | |
*param_4 = uVar18 + 1; | |
if (param_6 != (int *)0x0) { | |
*param_6 = (int)pcVar20; | |
} | |
return pcVar15; | |
} | |
void FUN_08013274(undefined4 *param_1,int param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
int *extraout_r1; | |
int *piVar1; | |
int iVar2; | |
int *piVar3; | |
int *piVar4; | |
int *piVar5; | |
bool bVar6; | |
if (param_2 == 0) { | |
return; | |
} | |
piVar5 = (int *)(param_2 + -4); | |
if (*(int *)(param_2 + -4) < 0) { | |
piVar5 = (int *)((int)piVar5 + *(int *)(param_2 + -4)); | |
} | |
FUN_08011428(); | |
piVar3 = DAT_08013304; | |
piVar4 = (int *)*DAT_08013304; | |
piVar1 = extraout_r1; | |
if (piVar4 != (int *)0x0) { | |
if (piVar4 <= piVar5) { | |
do { | |
piVar3 = piVar4; | |
piVar4 = (int *)piVar3[1]; | |
if (piVar4 == (int *)0x0) break; | |
} while (piVar4 <= piVar5); | |
piVar1 = (int *)*piVar3; | |
if ((int *)((int)piVar3 + (int)piVar1) == piVar5) { | |
piVar1 = (int *)((int)piVar1 + *piVar5); | |
*piVar3 = (int)piVar1; | |
if (piVar4 == (int *)((int)piVar3 + (int)piVar1)) { | |
iVar2 = *piVar4; | |
piVar3[1] = piVar4[1]; | |
*piVar3 = iVar2 + (int)piVar1; | |
} | |
} | |
else if (piVar5 < (int *)((int)piVar3 + (int)piVar1)) { | |
*param_1 = 0xc; | |
} | |
else { | |
piVar1 = (int *)((int)piVar5 + *piVar5); | |
bVar6 = piVar4 == piVar1; | |
if (bVar6) { | |
piVar1 = (int *)*piVar4; | |
piVar4 = (int *)piVar4[1]; | |
} | |
piVar5[1] = (int)piVar4; | |
if (bVar6) { | |
piVar1 = (int *)((int)piVar1 + *piVar5); | |
*piVar5 = (int)piVar1; | |
} | |
piVar3[1] = (int)piVar5; | |
} | |
goto LAB_08013296; | |
} | |
piVar1 = (int *)((int)piVar5 + *piVar5); | |
if (piVar4 == piVar1) { | |
iVar2 = *piVar4; | |
piVar4 = (int *)piVar4[1]; | |
piVar1 = (int *)(iVar2 + *piVar5); | |
*piVar5 = (int)piVar1; | |
} | |
} | |
piVar5[1] = (int)piVar4; | |
*piVar3 = (int)piVar5; | |
LAB_08013296: | |
FUN_08011434(param_1,piVar1,piVar3,param_4); | |
return; | |
} | |
void FUN_08013308(int param_1,uint param_2) | |
{ | |
uint *puVar1; | |
int iVar2; | |
int iVar3; | |
uint *puVar4; | |
uint *puVar5; | |
uint *puVar6; | |
uint *puVar7; | |
uint uVar8; | |
bool bVar9; | |
iVar2 = *(int *)(param_1 + 0x10); | |
iVar3 = (int)param_2 >> 5; | |
puVar5 = (uint *)(param_1 + 0x14); | |
puVar4 = puVar5; | |
if (iVar3 < iVar2) { | |
param_2 = param_2 & 0x1f; | |
puVar6 = puVar5 + iVar2; | |
puVar4 = puVar5 + iVar3; | |
if (param_2 == 0) { | |
puVar7 = (uint *)(param_1 + 0x10); | |
for (puVar1 = puVar4; puVar1 < puVar6; puVar1 = puVar1 + 1) { | |
puVar7 = puVar7 + 1; | |
*puVar7 = *puVar1; | |
} | |
iVar3 = (iVar2 - iVar3) * 4; | |
if (puVar6 < (uint *)((int)puVar4 - 3U)) { | |
iVar3 = 0; | |
} | |
puVar4 = (uint *)(iVar3 + (int)puVar5); | |
} | |
else { | |
uVar8 = puVar5[iVar3]; | |
puVar1 = puVar5; | |
puVar7 = puVar4; | |
while( true ) { | |
uVar8 = uVar8 >> param_2; | |
puVar7 = puVar7 + 1; | |
if (puVar6 <= puVar7) break; | |
*puVar1 = *puVar7 << (0x20 - param_2 & 0xff) | uVar8; | |
uVar8 = *puVar7; | |
puVar1 = puVar1 + 1; | |
} | |
iVar3 = (iVar2 - iVar3) * 4 + -4; | |
if (puVar6 < (uint *)((int)puVar4 + 1U)) { | |
iVar3 = 0; | |
} | |
*(uint *)((int)puVar5 + iVar3) = uVar8; | |
puVar4 = (uint *)((int)puVar5 + iVar3); | |
if (uVar8 != 0) { | |
puVar4 = (uint *)((int)puVar5 + iVar3) + 1; | |
} | |
} | |
} | |
iVar3 = (int)puVar4 - (int)puVar5; | |
bVar9 = puVar4 == puVar5; | |
if (bVar9) { | |
puVar4 = (uint *)0x0; | |
} | |
*(int *)(param_1 + 0x10) = iVar3 >> 2; | |
if (bVar9) { | |
*(uint **)(param_1 + 0x14) = puVar4; | |
} | |
return; | |
} | |
char FUN_080133ac(int param_1) | |
{ | |
char cVar1; | |
cVar1 = (char)param_1; | |
if (param_1 - 0x30U < 10) { | |
cVar1 = cVar1 + -0x20; | |
} | |
else if (param_1 - 0x61U < 6) { | |
cVar1 = cVar1 + -0x47; | |
} | |
else { | |
if (5 < param_1 - 0x41U) { | |
return '\0'; | |
} | |
cVar1 = cVar1 + -0x27; | |
} | |
return cVar1; | |
} | |
uint FUN_080133d8(undefined4 param_1,int *param_2,int *param_3,int *param_4,int *param_5, | |
uint param_6) | |
{ | |
undefined1 *puVar1; | |
bool bVar2; | |
int iVar3; | |
int iVar4; | |
uint uVar5; | |
undefined4 uVar6; | |
int extraout_r1; | |
byte *pbVar7; | |
int iVar8; | |
uint uVar9; | |
int *piVar10; | |
int *piVar11; | |
byte *pbVar12; | |
byte *pbVar13; | |
uint *puVar14; | |
int iVar15; | |
uint *puVar16; | |
byte *pbVar17; | |
byte *pbVar18; | |
uint *puVar19; | |
byte *pbVar20; | |
uint uVar21; | |
undefined8 uVar22; | |
pbVar12 = (byte *)(*param_2 + 2); | |
do { | |
pbVar18 = pbVar12; | |
pbVar12 = pbVar18 + 1; | |
} while (*pbVar18 == 0x30); | |
pbVar20 = pbVar18 + (-2 - *param_2); | |
iVar3 = FUN_080133ac(); | |
if (iVar3 == 0) { | |
iVar3 = FUN_08012494(pbVar18,DAT_08013688,1); | |
pbVar17 = pbVar18; | |
if ((iVar3 == 0) && | |
(iVar3 = FUN_080133ac(pbVar18[1]), pbVar7 = pbVar12, pbVar17 = pbVar12, iVar3 != 0)) { | |
do { | |
pbVar18 = pbVar7; | |
pbVar7 = pbVar18 + 1; | |
} while (*pbVar18 == 0x30); | |
iVar3 = FUN_080133ac(); | |
pbVar13 = (byte *)(uint)(iVar3 == 0); | |
pbVar20 = (byte *)0x1; | |
pbVar7 = pbVar18; | |
goto LAB_08013442; | |
} | |
iVar3 = 0; | |
pbVar13 = (byte *)0x1; | |
} | |
else { | |
pbVar13 = (byte *)0x0; | |
pbVar7 = pbVar18; | |
pbVar12 = pbVar13; | |
LAB_08013442: | |
do { | |
pbVar17 = pbVar7; | |
pbVar7 = pbVar17 + 1; | |
iVar3 = FUN_080133ac(*pbVar17); | |
} while (iVar3 != 0); | |
iVar3 = FUN_08012494(pbVar17,DAT_08013688,1); | |
if (iVar3 == 0) { | |
if (pbVar12 == (byte *)0x0) { | |
pbVar12 = pbVar17 + 1; | |
pbVar7 = pbVar12; | |
do { | |
pbVar17 = pbVar7; | |
pbVar7 = pbVar17 + 1; | |
iVar3 = FUN_080133ac(*pbVar17); | |
} while (iVar3 != 0); | |
} | |
} | |
else if (pbVar12 == (byte *)0x0) { | |
iVar3 = 0; | |
goto LAB_08013476; | |
} | |
iVar3 = ((int)pbVar12 - (int)pbVar17) * 4; | |
} | |
LAB_08013476: | |
pbVar12 = pbVar17; | |
if ((*pbVar17 & 0xdf) == 0x50) { | |
if (pbVar17[1] == 0x2b) { | |
bVar2 = false; | |
LAB_080134f0: | |
pbVar7 = pbVar17 + 2; | |
} | |
else { | |
if (pbVar17[1] == 0x2d) { | |
bVar2 = true; | |
goto LAB_080134f0; | |
} | |
pbVar7 = pbVar17 + 1; | |
bVar2 = false; | |
} | |
uVar22 = FUN_080133ac(*pbVar7); | |
if (((int)uVar22 - 1U & 0xff) < 0x19) { | |
while( true ) { | |
iVar8 = (int)uVar22 + -0x10; | |
puVar1 = (undefined1 *)((int)((ulonglong)uVar22 >> 0x20) + 1); | |
uVar22 = FUN_080133ac(*puVar1,puVar1); | |
pbVar12 = (byte *)((ulonglong)uVar22 >> 0x20); | |
if (0x18 < ((int)uVar22 - 1U & 0xff)) break; | |
uVar22 = CONCAT44(pbVar12,iVar8 * 10 + (int)uVar22); | |
} | |
if (bVar2) { | |
iVar8 = -iVar8; | |
} | |
iVar3 = iVar3 + iVar8; | |
} | |
} | |
*param_2 = (int)pbVar12; | |
if (pbVar13 != (byte *)0x0) { | |
if (pbVar20 != (byte *)0x0) { | |
return 0; | |
} | |
return 6; | |
} | |
pbVar12 = pbVar17 + (-1 - (int)pbVar18); | |
iVar8 = 0; | |
LAB_0801350a: | |
if (7 < (int)pbVar12) { | |
LAB_08013524: | |
iVar8 = iVar8 + 1; | |
pbVar12 = (byte *)((int)pbVar12 >> 1); | |
goto LAB_0801350a; | |
} | |
iVar8 = FUN_08014028(param_1,iVar8); | |
if (iVar8 == 0) { | |
uVar6 = 0xe4; | |
pbVar12 = DAT_0801368c; | |
LAB_0801351e: | |
FUN_08014cec(DAT_08013690,uVar6,0); | |
iVar8 = extraout_r1; | |
goto LAB_08013524; | |
} | |
puVar19 = (uint *)(iVar8 + 0x14); | |
uVar9 = 0; | |
uVar21 = 0; | |
puVar14 = puVar19; | |
while (pbVar18 < pbVar17) { | |
pbVar17 = pbVar17 + -1; | |
if (((*pbVar17 != 0x2e) || (pbVar17 < pbVar18)) || | |
(iVar4 = FUN_08012494(pbVar17,DAT_08013688,1), iVar4 != 0)) { | |
puVar16 = puVar14; | |
if (uVar9 == 0x20) { | |
puVar16 = puVar14 + 1; | |
*puVar14 = uVar21; | |
uVar21 = 0; | |
uVar9 = 0; | |
} | |
uVar5 = FUN_080133ac(*pbVar17); | |
uVar21 = uVar21 | (uVar5 & 0xf) << (uVar9 & 0xff); | |
uVar9 = uVar9 + 4; | |
puVar14 = puVar16; | |
} | |
} | |
*puVar14 = uVar21; | |
iVar15 = (int)puVar14 + (4 - (int)puVar19) >> 2; | |
*(int *)(iVar8 + 0x10) = iVar15; | |
iVar4 = FUN_0801420c(uVar21); | |
pbVar17 = (byte *)*param_3; | |
iVar4 = iVar15 * 0x20 - iVar4; | |
if ((int)pbVar17 < iVar4) { | |
iVar4 = iVar4 - (int)pbVar17; | |
uVar9 = FUN_0801493a(iVar8,iVar4); | |
if (uVar9 != 0) { | |
uVar21 = iVar4 - 1; | |
uVar9 = 1; | |
if ((1 << (uVar21 & 0x1f) & puVar19[(int)uVar21 >> 5]) != 0) { | |
if (((int)uVar21 < 2) || (iVar15 = FUN_0801493a(iVar8,iVar4 + -2), iVar15 == 0)) { | |
uVar9 = 2; | |
} | |
else { | |
uVar9 = 3; | |
} | |
} | |
} | |
FUN_08013308(iVar8,iVar4); | |
iVar3 = iVar3 + iVar4; | |
} | |
else { | |
if (iVar4 < (int)pbVar17) { | |
iVar8 = FUN_080144c8(param_1,iVar8,(int)pbVar17 - iVar4); | |
iVar3 = iVar3 - ((int)pbVar17 - iVar4); | |
puVar19 = (uint *)(iVar8 + 0x14); | |
} | |
uVar9 = 0; | |
} | |
iVar4 = iVar8; | |
if (param_3[2] < iVar3) goto LAB_08013596; | |
if (iVar3 < param_3[1]) { | |
pbVar12 = (byte *)(param_3[1] - iVar3); | |
if ((int)pbVar17 <= (int)pbVar12) { | |
iVar3 = param_3[3]; | |
if (iVar3 == 2) { | |
if (param_6 != 0) goto LAB_08013666; | |
} | |
else { | |
if (iVar3 != 3) { | |
if ((iVar3 != 1) || (pbVar17 != pbVar12)) goto LAB_08013666; | |
if (pbVar17 == (byte *)0x1) goto LAB_08013642; | |
param_6 = FUN_0801493a(iVar8,pbVar17 + -1); | |
} | |
if (param_6 == 0) { | |
LAB_08013666: | |
FUN_080140a8(param_1,iVar8); | |
*param_5 = 0; | |
return 0x50; | |
} | |
} | |
LAB_08013642: | |
*param_4 = param_3[1]; | |
*(undefined4 *)(iVar8 + 0x10) = 1; | |
*puVar19 = 1; | |
*param_5 = iVar8; | |
return 0x62; | |
} | |
pbVar18 = pbVar12 + -1; | |
if (uVar9 == 0) { | |
if (pbVar18 != (byte *)0x0) { | |
uVar9 = FUN_0801493a(iVar8,pbVar18); | |
} | |
} | |
else { | |
uVar9 = 1; | |
} | |
if ((1 << ((uint)pbVar18 & 0x1f) & puVar19[(int)pbVar18 >> 5]) != 0) { | |
uVar9 = uVar9 | 2; | |
} | |
FUN_08013308(iVar8,pbVar12); | |
iVar3 = param_3[1]; | |
pbVar17 = pbVar17 + -(int)pbVar12; | |
uVar21 = 2; | |
} | |
else { | |
uVar21 = 1; | |
} | |
if (uVar9 == 0) goto LAB_08013764; | |
iVar15 = param_3[3]; | |
if (iVar15 != 2) { | |
uVar5 = param_6; | |
if (iVar15 == 3) goto joined_r0x080136f6; | |
if ((iVar15 == 1) && ((uVar9 & 2) != 0)) { | |
uVar5 = (uVar9 | *puVar19) & 1; | |
goto joined_r0x080136f6; | |
} | |
LAB_080136f8: | |
uVar21 = uVar21 | 0x10; | |
goto LAB_08013764; | |
} | |
param_6 = 1 - param_6; | |
uVar5 = param_6; | |
joined_r0x080136f6: | |
if (uVar5 == 0) goto LAB_080136f8; | |
iVar15 = *(int *)(iVar8 + 0x10); | |
piVar10 = (int *)(iVar8 + 0x14); | |
do { | |
piVar11 = piVar10 + 1; | |
if (*piVar10 != -1) { | |
*piVar10 = *piVar10 + 1; | |
goto LAB_0801373a; | |
} | |
*piVar10 = 0; | |
piVar10 = piVar11; | |
} while (piVar11 < (int *)(iVar8 + 0x14) + iVar15); | |
if (*(int *)(iVar8 + 8) <= iVar15) { | |
iVar4 = FUN_08014028(param_1,*(int *)(iVar8 + 4) + 1); | |
if (iVar4 == 0) { | |
uVar6 = 0x84; | |
pbVar18 = (byte *)0x0; | |
pbVar12 = DAT_080137f4; | |
goto LAB_0801351e; | |
} | |
copyBuffer(iVar4 + 0xc,iVar8 + 0xc,(*(int *)(iVar8 + 0x10) + 2) * 4); | |
FUN_080140a8(param_1,iVar8); | |
} | |
iVar8 = *(int *)(iVar4 + 0x10); | |
*(int *)(iVar4 + 0x10) = iVar8 + 1; | |
*(undefined4 *)(iVar4 + iVar8 * 4 + 0x14) = 1; | |
LAB_0801373a: | |
if (uVar21 == 2) { | |
uVar21 = 2; | |
if (((byte *)(*param_3 + -1) != pbVar17) || | |
((1 << ((uint)pbVar17 & 0x1f) & *(uint *)(iVar4 + 0x14 + ((int)pbVar17 >> 5) * 4)) == 0)) | |
goto LAB_08013760; | |
} | |
else if ((iVar15 < *(int *)(iVar4 + 0x10)) || | |
((((uint)pbVar17 & 0x1f) != 0 && | |
(iVar8 = FUN_0801420c(*(undefined4 *)(iVar4 + 0x14 + iVar15 * 4 + -4)), | |
iVar8 < (int)(0x20 - ((uint)pbVar17 & 0x1f)))))) { | |
FUN_08013308(iVar4,1); | |
iVar3 = iVar3 + 1; | |
if (param_3[2] < iVar3) { | |
LAB_08013596: | |
FUN_080140a8(param_1,iVar4); | |
*param_5 = 0; | |
return 0xa3; | |
} | |
} | |
uVar21 = 1; | |
LAB_08013760: | |
uVar21 = uVar21 | 0x20; | |
LAB_08013764: | |
*param_5 = iVar4; | |
*param_4 = iVar3; | |
return uVar21; | |
} | |
void FUN_080137f8(uint *param_1,uint *param_2,int param_3) | |
{ | |
uint *puVar1; | |
do { | |
puVar1 = param_1 + 1; | |
*param_1 = *param_1 | *puVar1 << ((8 - param_3) * -4 + 0x20U & 0xff); | |
param_1 = param_1 + 1; | |
*param_1 = *puVar1 >> ((8 - param_3) * 4 & 0xffU); | |
} while (param_1 < param_2); | |
return; | |
} | |
undefined4 FUN_0801381c(undefined4 *param_1,byte *param_2) | |
{ | |
byte bVar1; | |
uint uVar2; | |
byte *pbVar3; | |
pbVar3 = (byte *)*param_1; | |
do { | |
pbVar3 = pbVar3 + 1; | |
bVar1 = *param_2; | |
if (bVar1 == 0) { | |
*param_1 = pbVar3; | |
return 1; | |
} | |
uVar2 = (uint)*pbVar3; | |
if (uVar2 - 0x41 < 0x1a) { | |
uVar2 = uVar2 + 0x20; | |
} | |
param_2 = param_2 + 1; | |
} while (uVar2 == bVar1); | |
return 0; | |
} | |
undefined4 FUN_08013844(int *param_1,uint *param_2,uint *param_3) | |
{ | |
byte bVar1; | |
uint uVar2; | |
undefined4 uVar3; | |
int iVar4; | |
uint *puVar5; | |
uint uVar6; | |
int iVar7; | |
uint *puVar8; | |
uint *puVar10; | |
uint *puVar11; | |
int iVar12; | |
uint *puVar13; | |
int iVar14; | |
int local_38; | |
uint *puVar9; | |
iVar4 = *param_1; | |
puVar10 = param_3 + ((int)*param_2 >> 5); | |
uVar6 = *param_2 & 0x1f; | |
if (uVar6 != 0) { | |
puVar10 = puVar10 + 1; | |
} | |
iVar12 = 0; | |
puVar13 = puVar10 + -1; | |
puVar10[-1] = 0; | |
local_38 = 0; | |
iVar14 = 0; | |
puVar11 = puVar13; | |
puVar5 = puVar13; | |
LAB_08013872: | |
while( true ) { | |
bVar1 = *(byte *)(iVar4 + 1); | |
iVar7 = iVar4 + 1; | |
if (bVar1 == 0) break; | |
uVar2 = FUN_080133ac(bVar1); | |
if (uVar2 != 0) { | |
iVar12 = iVar12 + 1; | |
iVar14 = iVar14 + 1; | |
if (8 < iVar12) goto code_r0x08013936; | |
goto LAB_08013944; | |
} | |
if (0x20 < bVar1) { | |
if (bVar1 != 0x29) goto LAB_08013976; | |
*param_1 = iVar4 + 2; | |
break; | |
} | |
iVar4 = iVar7; | |
if (local_38 < iVar14) { | |
if ((puVar11 < puVar5) && (iVar12 < 8)) { | |
FUN_080137f8(puVar11,puVar5,iVar12); | |
} | |
if (param_3 < puVar11) { | |
puVar5 = puVar11 + -1; | |
puVar11[-1] = 0; | |
iVar12 = 0; | |
puVar11 = puVar5; | |
local_38 = iVar14; | |
} | |
else { | |
iVar12 = 8; | |
} | |
} | |
} | |
if (iVar14 == 0) { | |
LAB_08013976: | |
uVar3 = 4; | |
} | |
else { | |
if ((puVar11 < puVar5) && (iVar12 < 8)) { | |
FUN_080137f8(puVar11,puVar5,iVar12); | |
} | |
if (param_3 < puVar11) { | |
puVar5 = param_3 + -1; | |
puVar8 = puVar11; | |
do { | |
puVar9 = puVar8 + 1; | |
puVar5 = puVar5 + 1; | |
*puVar5 = *puVar8; | |
puVar8 = puVar9; | |
} while (puVar9 <= puVar13); | |
iVar4 = ((int)puVar13 - (int)puVar11 & 0xfffffffcU) + 4; | |
if ((int)puVar10 - 3U < (int)puVar11 + 1U) { | |
iVar4 = 4; | |
} | |
puVar10 = (uint *)(iVar4 + (int)param_3); | |
do { | |
puVar11 = puVar10 + 1; | |
*puVar10 = 0; | |
puVar10 = puVar11; | |
} while (puVar11 <= puVar13); | |
} | |
else if (uVar6 != 0) { | |
puVar10[-1] = puVar10[-1] & 0xffffffffU >> (0x20 - uVar6 & 0xff); | |
} | |
for (; *puVar13 == 0; puVar13 = puVar13 + -1) { | |
if (puVar13 == param_3) { | |
*puVar13 = 1; | |
break; | |
} | |
} | |
uVar3 = 5; | |
} | |
return uVar3; | |
code_r0x08013936: | |
iVar4 = iVar7; | |
if (param_3 < puVar11) { | |
puVar11[-1] = 0; | |
iVar12 = 1; | |
puVar11 = puVar11 + -1; | |
LAB_08013944: | |
*puVar11 = uVar2 & 0xf | *puVar11 << 4; | |
iVar4 = iVar7; | |
} | |
goto LAB_08013872; | |
} | |
undefined4 FUN_0801397a(undefined4 *param_1,int *param_2,undefined4 param_3,uint param_4) | |
{ | |
int iVar1; | |
uint uVar2; | |
uint uVar3; | |
int iVar4; | |
if ((uint)param_2[2] <= param_4) { | |
uVar3 = param_2[2]; | |
if (((int)(short)param_2[3] & 0x480U) != 0) { | |
iVar4 = *param_2 - param_2[4]; | |
uVar2 = param_4 + 1 + iVar4; | |
uVar3 = (param_2[5] * 3) / 2; | |
if (uVar3 < uVar2) { | |
uVar3 = uVar2; | |
} | |
if ((int)(short)param_2[3] << 0x15 < 0) { | |
iVar1 = FUN_08010b7c(param_1,uVar3); | |
if (iVar1 == 0) { | |
LAB_08013a1c: | |
*param_1 = 0xc; | |
*(ushort *)(param_2 + 3) = *(ushort *)(param_2 + 3) | 0x40; | |
return 0xffffffff; | |
} | |
copyBuffer(iVar1,param_2[4],iVar4); | |
*(ushort *)(param_2 + 3) = *(ushort *)(param_2 + 3) & 0xfb7f | 0x80; | |
} | |
else { | |
iVar1 = FUN_080115cc(param_1,param_2[4],uVar3); | |
if (iVar1 == 0) { | |
FUN_08013274(param_1,param_2[4]); | |
goto LAB_08013a1c; | |
} | |
} | |
param_2[4] = iVar1; | |
param_2[5] = uVar3; | |
*param_2 = iVar1 + iVar4; | |
param_2[2] = uVar3 - iVar4; | |
uVar3 = param_4; | |
} | |
if (uVar3 <= param_4) goto LAB_080139ec; | |
} | |
uVar3 = param_4; | |
LAB_080139ec: | |
FUN_08012450(*param_2,param_3,uVar3); | |
param_2[2] = param_2[2] - uVar3; | |
*param_2 = *param_2 + uVar3; | |
return 0; | |
} | |
int FUN_08013a30(undefined4 *param_1,int *param_2,byte *param_3,uint *param_4) | |
{ | |
int iVar1; | |
int iVar2; | |
uint *puVar3; | |
bool bVar4; | |
uint uVar5; | |
byte *pbVar6; | |
int unaff_r6; | |
byte *pbVar7; | |
int iVar8; | |
uint *local_8c; | |
uint local_88; | |
uint local_84; | |
undefined4 uStack_80; | |
uint local_7c; | |
int local_74; | |
byte local_70; | |
undefined1 local_6f; | |
undefined1 local_6e; | |
undefined1 local_45; | |
undefined4 local_30; | |
if (((int)((uint)*(ushort *)(param_2 + 3) << 0x18) < 0) && (param_2[4] == 0)) { | |
iVar1 = FUN_08010b7c(param_1,0x40); | |
*param_2 = iVar1; | |
param_2[4] = iVar1; | |
if (iVar1 == 0) { | |
*param_1 = 0xc; | |
return -1; | |
} | |
param_2[5] = 0x40; | |
} | |
iVar1 = DAT_08013c14; | |
local_74 = 0; | |
local_6f = 0x20; | |
local_6e = 0x30; | |
pbVar7 = param_3; | |
local_8c = param_4; | |
LAB_08013a84: | |
pbVar6 = pbVar7; | |
if (*pbVar6 != 0) goto code_r0x08013a8c; | |
goto LAB_08013a90; | |
code_r0x08013a8c: | |
pbVar7 = pbVar6 + 1; | |
if (*pbVar6 != 0x25) goto LAB_08013a84; | |
LAB_08013a90: | |
iVar8 = (int)pbVar6 - (int)param_3; | |
if (iVar8 != 0) { | |
iVar2 = FUN_0801397a(param_1,param_2,param_3,iVar8); | |
if (iVar2 == -1) { | |
LAB_08013bf6: | |
if ((int)((uint)*(ushort *)(param_2 + 3) << 0x19) < 0) { | |
return -1; | |
} | |
return local_74; | |
} | |
local_74 = local_74 + iVar8; | |
} | |
if (*pbVar6 == 0) goto LAB_08013bf6; | |
local_84 = 0xffffffff; | |
uStack_80 = 0; | |
local_88 = 0; | |
local_7c = 0; | |
local_45 = 0; | |
local_30 = 0; | |
pbVar7 = pbVar6 + 1; | |
while( true ) { | |
pbVar6 = pbVar7 + 1; | |
iVar2 = memchr_custom(DAT_08013c14,*pbVar7,5); | |
iVar8 = DAT_08013c24; | |
if (iVar2 == 0) break; | |
local_88 = 1 << (iVar2 - iVar1 & 0xffU) | local_88; | |
pbVar7 = pbVar6; | |
} | |
if ((int)(local_88 << 0x1b) < 0) { | |
local_45 = 0x20; | |
} | |
if ((int)(local_88 << 0x1c) < 0) { | |
local_45 = 0x2b; | |
} | |
if (*pbVar7 == 0x2a) { | |
puVar3 = local_8c + 1; | |
local_7c = *local_8c; | |
local_8c = puVar3; | |
if ((int)local_7c < 0) { | |
local_7c = -local_7c; | |
local_88 = local_88 | 2; | |
} | |
} | |
else { | |
bVar4 = false; | |
uVar5 = local_7c; | |
pbVar6 = pbVar7; | |
while( true ) { | |
if (9 < *pbVar6 - 0x30) break; | |
uVar5 = uVar5 * 10 + (*pbVar6 - 0x30); | |
bVar4 = true; | |
pbVar6 = pbVar6 + 1; | |
} | |
if (bVar4) { | |
local_7c = uVar5; | |
} | |
} | |
if (*pbVar6 == 0x2e) { | |
if (pbVar6[1] == 0x2a) { | |
uVar5 = *local_8c; | |
pbVar6 = pbVar6 + 2; | |
local_8c = local_8c + 1; | |
local_84 = uVar5 | (int)uVar5 >> 0x1f; | |
} | |
else { | |
bVar4 = false; | |
local_84 = 0; | |
uVar5 = 0; | |
while( true ) { | |
pbVar6 = pbVar6 + 1; | |
if (9 < *pbVar6 - 0x30) break; | |
uVar5 = uVar5 * 10 + (*pbVar6 - 0x30); | |
bVar4 = true; | |
} | |
if (bVar4) { | |
local_84 = uVar5; | |
} | |
} | |
} | |
iVar2 = memchr_custom(DAT_08013c24,*pbVar6,3); | |
if (iVar2 != 0) { | |
local_88 = local_88 | 0x40 << (iVar2 - iVar8 & 0xffU); | |
pbVar6 = pbVar6 + 1; | |
} | |
param_3 = pbVar6 + 1; | |
local_70 = *pbVar6; | |
iVar8 = memchr_custom(DAT_08013c18,local_70,6); | |
if (iVar8 == 0) { | |
unaff_r6 = FUN_08010d58(param_1,&local_88,param_2,DAT_08013c20,&local_8c); | |
} | |
else { | |
if (DAT_08013c1c == 0) { | |
local_8c = (uint *)(((int)local_8c + 7U & 0xfffffff8) + 8); | |
goto LAB_08013ba4; | |
} | |
unaff_r6 = FUN_080106d4(param_1,&local_88,param_2,DAT_08013c20,&local_8c); | |
} | |
if (unaff_r6 == -1) goto LAB_08013bf6; | |
LAB_08013ba4: | |
local_74 = local_74 + unaff_r6; | |
pbVar7 = param_3; | |
goto LAB_08013a84; | |
} | |
int FUN_08013c28(undefined4 param_1,int param_2,undefined4 *param_3) | |
{ | |
int iVar1; | |
undefined1 *puVar2; | |
iVar1 = param_3[2] + -1; | |
param_3[2] = iVar1; | |
if ((iVar1 < 0) && ((iVar1 < (int)param_3[6] || (param_2 == 10)))) { | |
iVar1 = FUN_08014a12(); | |
return iVar1; | |
} | |
puVar2 = (undefined1 *)*param_3; | |
*param_3 = puVar2 + 1; | |
*puVar2 = (char)param_2; | |
return param_2; | |
} | |
int FUN_08013c56(undefined4 param_1,undefined4 param_2,undefined1 *param_3,int param_4) | |
{ | |
int iVar1; | |
undefined1 *puVar2; | |
int iVar3; | |
puVar2 = param_3 + param_4; | |
iVar3 = param_4; | |
do { | |
if (param_3 == puVar2) { | |
return 0; | |
} | |
iVar1 = FUN_08013c28(param_1,*param_3,param_2,param_4,iVar3); | |
param_4 = iVar1 + 1; | |
param_3 = param_3 + 1; | |
} while (param_4 != 0); | |
return iVar1; | |
} | |
int FUN_08013c7c(int param_1,int param_2,byte *param_3,uint *param_4) | |
{ | |
int iVar1; | |
int iVar2; | |
uint *puVar3; | |
bool bVar4; | |
uint uVar5; | |
byte *pbVar6; | |
int unaff_r7; | |
byte *pbVar7; | |
int iVar8; | |
uint *local_8c; | |
uint local_88; | |
uint local_84; | |
undefined4 uStack_80; | |
uint local_7c; | |
int local_74; | |
byte local_70; | |
undefined1 local_6f; | |
undefined1 local_6e; | |
undefined1 local_45; | |
undefined4 local_30; | |
if ((param_1 != 0) && (*(int *)(param_1 + 0x20) == 0)) { | |
FUN_0801159c(); | |
} | |
if ((-1 < *(int *)(param_2 + 100) << 0x1f) && | |
(-1 < (int)((uint)*(ushort *)(param_2 + 0xc) << 0x16))) { | |
FUN_080125b6(*(undefined4 *)(param_2 + 0x58)); | |
} | |
if (((-1 < (int)((uint)*(ushort *)(param_2 + 0xc) << 0x1c)) || (*(int *)(param_2 + 0x10) == 0)) && | |
(iVar1 = FUN_08014a90(param_1,param_2), iVar1 != 0)) { | |
if ((-1 < *(int *)(param_2 + 100) << 0x1f) && | |
(-1 < (int)((uint)*(ushort *)(param_2 + 0xc) << 0x16))) { | |
FUN_080125b8(*(undefined4 *)(param_2 + 0x58)); | |
} | |
return -1; | |
} | |
iVar1 = DAT_08013e98; | |
local_74 = 0; | |
local_6f = 0x20; | |
local_6e = 0x30; | |
pbVar7 = param_3; | |
local_8c = param_4; | |
LAB_08013cf6: | |
pbVar6 = pbVar7; | |
if (*pbVar6 != 0) goto code_r0x08013cfe; | |
goto LAB_08013d02; | |
code_r0x08013cfe: | |
pbVar7 = pbVar6 + 1; | |
if (*pbVar6 != 0x25) goto LAB_08013cf6; | |
LAB_08013d02: | |
iVar8 = (int)pbVar6 - (int)param_3; | |
if (iVar8 != 0) { | |
iVar2 = FUN_08013c56(param_1,param_2,param_3,iVar8); | |
if (iVar2 == -1) { | |
LAB_08013e68: | |
if ((-1 < *(int *)(param_2 + 100) << 0x1f) && | |
(-1 < (int)((uint)*(ushort *)(param_2 + 0xc) << 0x16))) { | |
FUN_080125b8(*(undefined4 *)(param_2 + 0x58)); | |
} | |
if ((int)((uint)*(ushort *)(param_2 + 0xc) << 0x19) < 0) { | |
return -1; | |
} | |
return local_74; | |
} | |
local_74 = local_74 + iVar8; | |
} | |
if (*pbVar6 == 0) goto LAB_08013e68; | |
local_84 = 0xffffffff; | |
uStack_80 = 0; | |
local_88 = 0; | |
local_7c = 0; | |
local_45 = 0; | |
local_30 = 0; | |
pbVar7 = pbVar6 + 1; | |
while( true ) { | |
pbVar6 = pbVar7 + 1; | |
iVar2 = memchr_custom(DAT_08013e98,*pbVar7,5); | |
iVar8 = DAT_08013ea8; | |
if (iVar2 == 0) break; | |
local_88 = 1 << (iVar2 - iVar1 & 0xffU) | local_88; | |
pbVar7 = pbVar6; | |
} | |
if ((int)(local_88 << 0x1b) < 0) { | |
local_45 = 0x20; | |
} | |
if ((int)(local_88 << 0x1c) < 0) { | |
local_45 = 0x2b; | |
} | |
if (*pbVar7 == 0x2a) { | |
puVar3 = local_8c + 1; | |
local_7c = *local_8c; | |
local_8c = puVar3; | |
if ((int)local_7c < 0) { | |
local_7c = -local_7c; | |
local_88 = local_88 | 2; | |
} | |
} | |
else { | |
bVar4 = false; | |
uVar5 = local_7c; | |
pbVar6 = pbVar7; | |
while( true ) { | |
if (9 < *pbVar6 - 0x30) break; | |
uVar5 = uVar5 * 10 + (*pbVar6 - 0x30); | |
bVar4 = true; | |
pbVar6 = pbVar6 + 1; | |
} | |
if (bVar4) { | |
local_7c = uVar5; | |
} | |
} | |
if (*pbVar6 == 0x2e) { | |
if (pbVar6[1] == 0x2a) { | |
uVar5 = *local_8c; | |
pbVar6 = pbVar6 + 2; | |
local_8c = local_8c + 1; | |
local_84 = uVar5 | (int)uVar5 >> 0x1f; | |
} | |
else { | |
bVar4 = false; | |
local_84 = 0; | |
uVar5 = 0; | |
while( true ) { | |
pbVar6 = pbVar6 + 1; | |
if (9 < *pbVar6 - 0x30) break; | |
uVar5 = uVar5 * 10 + (*pbVar6 - 0x30); | |
bVar4 = true; | |
} | |
if (bVar4) { | |
local_84 = uVar5; | |
} | |
} | |
} | |
iVar2 = memchr_custom(DAT_08013ea8,*pbVar6,3); | |
if (iVar2 != 0) { | |
local_88 = local_88 | 0x40 << (iVar2 - iVar8 & 0xffU); | |
pbVar6 = pbVar6 + 1; | |
} | |
param_3 = pbVar6 + 1; | |
local_70 = *pbVar6; | |
iVar8 = memchr_custom(DAT_08013e9c,local_70,6); | |
if (iVar8 == 0) { | |
unaff_r7 = FUN_08010d58(param_1,&local_88,param_2,DAT_08013ea4,&local_8c); | |
} | |
else { | |
if (DAT_08013ea0 == 0) { | |
local_8c = (uint *)(((int)local_8c + 7U & 0xfffffff8) + 8); | |
goto LAB_08013e16; | |
} | |
unaff_r7 = FUN_080106d4(param_1,&local_88,param_2,DAT_08013ea4,&local_8c); | |
} | |
if (unaff_r7 == -1) goto LAB_08013e68; | |
LAB_08013e16: | |
local_74 = local_74 + unaff_r7; | |
pbVar7 = param_3; | |
goto LAB_08013cf6; | |
} | |
undefined4 FUN_08013ed0(uint *param_1,int *param_2) | |
{ | |
ushort uVar1; | |
int iVar2; | |
int *piVar3; | |
uint uVar4; | |
int iVar5; | |
code *pcVar6; | |
int iVar7; | |
uint uVar8; | |
bool bVar9; | |
uVar4 = (uint)(short)param_2[3]; | |
if ((int)(uVar4 << 0x1c) < 0) { | |
iVar2 = param_2[4]; | |
if (iVar2 != 0) { | |
iVar5 = uVar4 << 0x1e; | |
bVar9 = iVar5 == 0; | |
iVar7 = *param_2; | |
if (bVar9) { | |
iVar5 = param_2[5]; | |
} | |
*param_2 = iVar2; | |
if (!bVar9) { | |
iVar5 = 0; | |
} | |
param_2[2] = iVar5; | |
for (iVar7 = iVar7 - iVar2; 0 < iVar7; iVar7 = iVar7 - iVar5) { | |
iVar5 = (*(code *)param_2[10])(param_1,param_2[8],iVar2,iVar7); | |
if (iVar5 < 1) goto LAB_08013fba; | |
iVar2 = iVar2 + iVar5; | |
} | |
} | |
} | |
else { | |
if ((param_2[1] < 1) && (param_2[0x10] < 1)) { | |
return 0; | |
} | |
pcVar6 = (code *)param_2[0xb]; | |
if (pcVar6 == (code *)0x0) { | |
return 0; | |
} | |
uVar8 = *param_1; | |
iVar2 = param_2[8]; | |
*param_1 = 0; | |
if ((uVar4 & 0x1000) == 0) { | |
iVar2 = (*pcVar6)(param_1,iVar2,0,1); | |
if ((iVar2 == -1) && (uVar4 = *param_1, uVar4 != 0)) { | |
if ((uVar4 == 0x1d) || (uVar4 == 0x16)) { | |
*param_1 = uVar8; | |
return 0; | |
} | |
LAB_08013fba: | |
uVar1 = *(ushort *)(param_2 + 3); | |
goto LAB_08013fc2; | |
} | |
} | |
else { | |
iVar2 = param_2[0x15]; | |
} | |
if (((int)((uint)*(ushort *)(param_2 + 3) << 0x1d) < 0) && | |
(iVar2 = iVar2 - param_2[1], param_2[0xd] != 0)) { | |
iVar2 = iVar2 - param_2[0x10]; | |
} | |
iVar2 = (*(code *)param_2[0xb])(param_1,param_2[8],iVar2,0); | |
uVar1 = *(ushort *)(param_2 + 3); | |
if ((iVar2 == -1) && | |
((0x1d < *param_1 || (-1 < (int)((DAT_08013fd4 >> (*param_1 & 0xff)) << 0x1f))))) { | |
LAB_08013fc2: | |
*(ushort *)(param_2 + 3) = uVar1 | 0x40; | |
return 0xffffffff; | |
} | |
param_2[1] = 0; | |
*param_2 = param_2[4]; | |
if (((int)((uint)uVar1 << 0x13) < 0) && ((iVar2 != -1 || (*param_1 == 0)))) { | |
param_2[0x15] = iVar2; | |
} | |
piVar3 = (int *)param_2[0xd]; | |
*param_1 = uVar8; | |
if (piVar3 != (int *)0x0) { | |
if (piVar3 != param_2 + 0x11) { | |
FUN_08013274(param_1); | |
} | |
param_2[0xd] = 0; | |
} | |
} | |
return 0; | |
} | |
undefined4 FUN_08013fd8(int param_1,int param_2) | |
{ | |
undefined4 uVar1; | |
if (*(int *)(param_2 + 0x10) != 0) { | |
if ((param_1 != 0) && (*(int *)(param_1 + 0x20) == 0)) { | |
FUN_0801159c(); | |
} | |
if (*(short *)(param_2 + 0xc) != 0) { | |
if ((-1 < *(int *)(param_2 + 100) << 0x1f) && (-1 < (int)*(short *)(param_2 + 0xc) << 0x16)) { | |
FUN_080125b6(*(undefined4 *)(param_2 + 0x58)); | |
} | |
uVar1 = FUN_08013ed0(param_1,param_2); | |
if (*(int *)(param_2 + 100) << 0x1f < 0) { | |
return uVar1; | |
} | |
if ((int)((uint)*(ushort *)(param_2 + 0xc) << 0x16) < 0) { | |
return uVar1; | |
} | |
FUN_080125b8(*(undefined4 *)(param_2 + 0x58)); | |
return uVar1; | |
} | |
} | |
return 0; | |
} | |
undefined4 * FUN_08014028(int param_1,uint param_2) | |
{ | |
undefined4 *puVar1; | |
undefined4 uVar2; | |
int iVar3; | |
int iVar4; | |
if (*(int *)(param_1 + 0x1c) == 0) { | |
puVar1 = (undefined4 *)FUN_08010b28(0x10); | |
*(undefined4 **)(param_1 + 0x1c) = puVar1; | |
if (puVar1 == (undefined4 *)0x0) { | |
puVar1 = (undefined4 *)FUN_08014cec(DAT_080140a4,0x6b,0,DAT_080140a0); | |
} | |
puVar1[1] = 0; | |
puVar1[2] = 0; | |
*puVar1 = 0; | |
puVar1[3] = 0; | |
} | |
iVar4 = *(int *)(param_1 + 0x1c); | |
if (*(int *)(iVar4 + 0xc) == 0) { | |
uVar2 = FUN_08014d28(param_1,4,0x21); | |
iVar3 = *(int *)(param_1 + 0x1c); | |
*(undefined4 *)(iVar4 + 0xc) = uVar2; | |
if (*(int *)(iVar3 + 0xc) != 0) goto LAB_08014056; | |
LAB_0801408c: | |
puVar1 = (undefined4 *)0x0; | |
} | |
else { | |
LAB_08014056: | |
iVar4 = *(int *)(*(int *)(param_1 + 0x1c) + 0xc); | |
puVar1 = *(undefined4 **)(iVar4 + param_2 * 4); | |
if (puVar1 == (undefined4 *)0x0) { | |
iVar4 = 1 << (param_2 & 0xff); | |
puVar1 = (undefined4 *)FUN_08014d28(param_1,1,(iVar4 + 5) * 4); | |
if (puVar1 == (undefined4 *)0x0) goto LAB_0801408c; | |
puVar1[1] = param_2; | |
puVar1[2] = iVar4; | |
} | |
else { | |
*(undefined4 *)(iVar4 + param_2 * 4) = *puVar1; | |
} | |
puVar1[3] = 0; | |
puVar1[4] = 0; | |
} | |
return puVar1; | |
} | |
void FUN_080140a8(int param_1,undefined4 *param_2) | |
{ | |
undefined4 *puVar1; | |
int iVar2; | |
if (*(int *)(param_1 + 0x1c) == 0) { | |
puVar1 = (undefined4 *)FUN_08010b28(0x10); | |
*(undefined4 **)(param_1 + 0x1c) = puVar1; | |
if (puVar1 == (undefined4 *)0x0) { | |
puVar1 = (undefined4 *)FUN_08014cec(DAT_080140e8,0x8f,0,DAT_080140e4); | |
} | |
puVar1[1] = 0; | |
puVar1[2] = 0; | |
*puVar1 = 0; | |
puVar1[3] = 0; | |
} | |
if (param_2 != (undefined4 *)0x0) { | |
iVar2 = *(int *)(*(int *)(param_1 + 0x1c) + 0xc); | |
*param_2 = *(undefined4 *)(iVar2 + param_2[1] * 4); | |
*(undefined4 **)(iVar2 + param_2[1] * 4) = param_2; | |
} | |
return; | |
} | |
int FUN_080140ec(undefined4 param_1,int param_2,int param_3,uint param_4) | |
{ | |
int iVar1; | |
int iVar2; | |
uint uVar3; | |
int iVar4; | |
uint *puVar5; | |
iVar4 = *(int *)(param_2 + 0x10); | |
iVar1 = 0; | |
puVar5 = (uint *)(param_2 + 0x14); | |
do { | |
param_4 = param_3 * (*puVar5 & 0xffff) + param_4; | |
uVar3 = param_3 * (*puVar5 >> 0x10) + (param_4 >> 0x10); | |
iVar1 = iVar1 + 1; | |
*puVar5 = (param_4 & 0xffff) + uVar3 * 0x10000; | |
param_4 = uVar3 >> 0x10; | |
puVar5 = puVar5 + 1; | |
} while (iVar1 < iVar4); | |
iVar1 = param_2; | |
if (param_4 != 0) { | |
if (*(int *)(param_2 + 8) <= iVar4) { | |
iVar1 = FUN_08014028(param_1,*(int *)(param_2 + 4) + 1); | |
iVar2 = iVar1; | |
if (iVar1 == 0) { | |
iVar2 = FUN_08014cec(DAT_08014174,0xba,0,DAT_08014170); | |
} | |
copyBuffer(iVar2 + 0xc,param_2 + 0xc,(*(int *)(param_2 + 0x10) + 2) * 4); | |
FUN_080140a8(param_1,param_2); | |
} | |
*(uint *)(iVar1 + iVar4 * 4 + 0x14) = param_4; | |
*(int *)(iVar1 + 0x10) = iVar4 + 1; | |
} | |
return iVar1; | |
} | |
void FUN_08014178(undefined4 param_1,int param_2,int param_3,int param_4,undefined4 param_5) | |
{ | |
int iVar1; | |
int extraout_r1; | |
int iVar2; | |
int iVar3; | |
byte *pbVar4; | |
byte *pbVar5; | |
int iVar6; | |
iVar3 = (param_4 + 8) / 9; | |
iVar1 = 0; | |
iVar2 = 1; | |
iVar6 = param_4; | |
do { | |
if (iVar3 <= iVar2) { | |
iVar2 = FUN_08014028(param_1,iVar1); | |
if (iVar2 != 0) { | |
*(undefined4 *)(iVar2 + 0x14) = param_5; | |
*(undefined4 *)(iVar2 + 0x10) = 1; | |
if (param_3 < 10) { | |
pbVar4 = (byte *)(param_2 + 10); | |
param_3 = 9; | |
} | |
else { | |
pbVar4 = (byte *)(param_2 + 9); | |
do { | |
pbVar5 = pbVar4 + 1; | |
iVar2 = FUN_080140ec(param_1,iVar2,10,*pbVar4 - 0x30,iVar6); | |
pbVar4 = pbVar5; | |
} while (pbVar5 != (byte *)(param_2 + param_3)); | |
pbVar4 = (byte *)(param_2 + 9) + param_3 + -8; | |
} | |
param_3 = param_3 - (int)pbVar4; | |
for (; (int)(pbVar4 + param_3) < param_4; pbVar4 = pbVar4 + 1) { | |
iVar2 = FUN_080140ec(param_1,iVar2,10,*pbVar4 - 0x30,iVar6); | |
} | |
return; | |
} | |
iVar3 = DAT_08014204; | |
FUN_08014cec(DAT_08014208,0xd3); | |
iVar1 = extraout_r1; | |
} | |
iVar2 = iVar2 << 1; | |
iVar1 = iVar1 + 1; | |
} while( true ); | |
} | |
int FUN_0801420c(uint param_1) | |
{ | |
int iVar1; | |
if (param_1 < 0x10000) { | |
param_1 = param_1 << 0x10; | |
iVar1 = 0x10; | |
} | |
else { | |
iVar1 = 0; | |
} | |
if (param_1 < 0x1000000) { | |
param_1 = param_1 << 8; | |
iVar1 = iVar1 + 8; | |
} | |
if (param_1 < 0x10000000) { | |
param_1 = param_1 << 4; | |
iVar1 = iVar1 + 4; | |
} | |
if (param_1 < 0x40000000) { | |
param_1 = param_1 << 2; | |
iVar1 = iVar1 + 2; | |
} | |
if ((-1 < (int)param_1) && (iVar1 = iVar1 + 1, (param_1 & 0x40000000) == 0)) { | |
iVar1 = 0x20; | |
} | |
return iVar1; | |
} | |
int FUN_0801424a(uint *param_1) | |
{ | |
int iVar1; | |
uint uVar2; | |
uVar2 = *param_1; | |
if ((uVar2 & 7) == 0) { | |
iVar1 = 0; | |
if ((uVar2 & 0xffff) == 0) { | |
uVar2 = uVar2 >> 0x10; | |
iVar1 = 0x10; | |
} | |
if ((uVar2 & 0xff) == 0) { | |
iVar1 = iVar1 + 8; | |
uVar2 = uVar2 >> 8; | |
} | |
if ((uVar2 & 0xf) == 0) { | |
uVar2 = uVar2 >> 4; | |
iVar1 = iVar1 + 4; | |
} | |
if ((uVar2 & 3) == 0) { | |
uVar2 = uVar2 >> 2; | |
iVar1 = iVar1 + 2; | |
} | |
if (-1 < (int)(uVar2 << 0x1f)) { | |
uVar2 = uVar2 >> 1; | |
iVar1 = iVar1 + 1; | |
if (uVar2 == 0) { | |
return 0x20; | |
} | |
} | |
*param_1 = uVar2; | |
return iVar1; | |
} | |
if ((int)(uVar2 << 0x1f) < 0) { | |
return 0; | |
} | |
if ((int)(uVar2 << 0x1e) < 0) { | |
iVar1 = 1; | |
*param_1 = uVar2 >> 1; | |
} | |
else { | |
*param_1 = uVar2 >> 2; | |
iVar1 = 2; | |
} | |
return iVar1; | |
} | |
void FUN_080142a4(undefined4 param_1,undefined4 param_2) | |
{ | |
int iVar1; | |
iVar1 = FUN_08014028(param_1,1); | |
if (iVar1 == 0) { | |
iVar1 = FUN_08014cec(DAT_080142cc,0x145,0,DAT_080142c8); | |
} | |
*(undefined4 *)(iVar1 + 0x14) = param_2; | |
*(undefined4 *)(iVar1 + 0x10) = 1; | |
return; | |
} | |
void FUN_080142d0(undefined4 param_1,int param_2,int param_3) | |
{ | |
int iVar1; | |
ushort *puVar2; | |
uint uVar3; | |
uint *puVar4; | |
ushort *puVar5; | |
int iVar6; | |
uint *puVar7; | |
int iVar8; | |
int iVar9; | |
uint uVar10; | |
uint *puVar11; | |
uint *puVar12; | |
int iVar13; | |
uint uVar14; | |
uint *puVar15; | |
uint *puVar16; | |
uint *puVar17; | |
iVar6 = param_2; | |
if (*(int *)(param_3 + 0x10) <= *(int *)(param_2 + 0x10)) { | |
iVar6 = param_3; | |
param_3 = param_2; | |
} | |
iVar8 = *(int *)(param_3 + 0x10); | |
iVar13 = *(int *)(iVar6 + 0x10); | |
iVar1 = *(int *)(param_3 + 4); | |
iVar9 = iVar8 + iVar13; | |
if (*(int *)(param_3 + 8) < iVar9) { | |
iVar1 = iVar1 + 1; | |
} | |
iVar1 = FUN_08014028(param_1,iVar1); | |
if (iVar1 == 0) { | |
iVar1 = FUN_08014cec(DAT_08014410,0x162,0,DAT_0801440c); | |
} | |
puVar7 = (uint *)(iVar1 + 0x14); | |
puVar17 = puVar7 + iVar9; | |
for (puVar4 = puVar7; puVar4 < puVar17; puVar4 = puVar4 + 1) { | |
*puVar4 = 0; | |
} | |
puVar12 = (uint *)(param_3 + 0x14); | |
puVar2 = (ushort *)(iVar6 + 0x14); | |
puVar4 = puVar12 + iVar8; | |
puVar5 = puVar2 + iVar13 * 2; | |
iVar6 = ((int)puVar4 + (-0x15 - param_3) & 0xfffffffcU) + 4; | |
if (puVar4 < (uint *)(param_3 + 0x15)) { | |
iVar6 = 4; | |
} | |
while (puVar2 < puVar5) { | |
uVar14 = (uint)*puVar2; | |
if (uVar14 != 0) { | |
uVar10 = 0; | |
puVar11 = puVar7; | |
puVar16 = puVar12; | |
do { | |
puVar15 = puVar16 + 1; | |
uVar10 = uVar14 * (*puVar16 & 0xffff) + (*puVar11 & 0xffff) + uVar10; | |
uVar3 = uVar14 * (*puVar16 >> 0x10) + (*puVar11 >> 0x10) + (uVar10 >> 0x10); | |
*puVar11 = uVar10 & 0xffff | uVar3 * 0x10000; | |
uVar10 = uVar3 >> 0x10; | |
puVar11 = puVar11 + 1; | |
puVar16 = puVar15; | |
} while (puVar15 < puVar4); | |
*(uint *)((int)puVar7 + iVar6) = uVar10; | |
} | |
uVar14 = (uint)puVar2[1]; | |
puVar2 = puVar2 + 2; | |
if (uVar14 != 0) { | |
uVar3 = *puVar7; | |
uVar10 = 0; | |
puVar11 = puVar12; | |
puVar16 = puVar7; | |
do { | |
uVar10 = uVar14 * (ushort)*puVar11 + (uint)*(ushort *)((int)puVar16 + 2) + uVar10; | |
*puVar16 = uVar3 & 0xffff | uVar10 * 0x10000; | |
puVar15 = puVar11 + 1; | |
uVar3 = uVar14 * (*puVar11 >> 0x10) + (uint)(ushort)puVar16[1] + (uVar10 >> 0x10); | |
uVar10 = uVar3 >> 0x10; | |
puVar11 = puVar15; | |
puVar16 = puVar16 + 1; | |
} while (puVar15 < puVar4); | |
*(uint *)((int)puVar7 + iVar6) = uVar3; | |
} | |
puVar7 = puVar7 + 1; | |
} | |
while ((0 < iVar9 && (puVar17 = puVar17 + -1, *puVar17 == 0))) { | |
iVar9 = iVar9 + -1; | |
} | |
*(int *)(iVar1 + 0x10) = iVar9; | |
return; | |
} | |
undefined4 FUN_08014414(int param_1,undefined4 param_2,uint param_3,undefined4 param_4) | |
{ | |
undefined4 *puVar1; | |
undefined4 *puVar2; | |
int iVar3; | |
undefined4 uVar4; | |
int iVar5; | |
if ((param_3 & 3) != 0) { | |
param_2 = FUN_080140ec(param_1,param_2,*(undefined4 *)(DAT_080144bc + ((param_3 & 3) - 1) * 4),0 | |
,param_4); | |
} | |
iVar3 = (int)param_3 >> 2; | |
if (iVar3 != 0) { | |
if (*(int *)(param_1 + 0x1c) == 0) { | |
puVar1 = (undefined4 *)FUN_08010b28(0x10); | |
*(undefined4 **)(param_1 + 0x1c) = puVar1; | |
if (puVar1 == (undefined4 *)0x0) { | |
puVar1 = (undefined4 *)FUN_08014cec(DAT_080144c4,0x1b3,0,DAT_080144c0); | |
} | |
puVar1[1] = 0; | |
puVar1[2] = 0; | |
*puVar1 = 0; | |
puVar1[3] = 0; | |
} | |
iVar5 = *(int *)(param_1 + 0x1c); | |
puVar1 = *(undefined4 **)(iVar5 + 8); | |
uVar4 = param_2; | |
if (puVar1 == (undefined4 *)0x0) { | |
puVar1 = (undefined4 *)FUN_080142a4(param_1,0x271); | |
*(undefined4 **)(iVar5 + 8) = puVar1; | |
*puVar1 = 0; | |
} | |
while( true ) { | |
puVar2 = puVar1; | |
param_2 = uVar4; | |
if (iVar3 << 0x1f < 0) { | |
param_2 = FUN_080142d0(param_1,uVar4,puVar2); | |
FUN_080140a8(param_1,uVar4); | |
} | |
iVar3 = iVar3 >> 1; | |
if (iVar3 == 0) break; | |
puVar1 = (undefined4 *)*puVar2; | |
uVar4 = param_2; | |
if ((undefined4 *)*puVar2 == (undefined4 *)0x0) { | |
puVar1 = (undefined4 *)FUN_080142d0(param_1,puVar2,puVar2); | |
*puVar2 = puVar1; | |
*puVar1 = 0; | |
} | |
} | |
} | |
return param_2; | |
} | |
int FUN_080144c8(undefined4 param_1,int param_2,uint param_3) | |
{ | |
int iVar1; | |
int extraout_r1; | |
uint *puVar2; | |
undefined4 *puVar3; | |
uint uVar4; | |
int iVar5; | |
uint *puVar6; | |
uint *puVar7; | |
int iVar8; | |
int iVar9; | |
uint uVar10; | |
uint *puVar11; | |
uint *puVar12; | |
iVar1 = *(int *)(param_2 + 4); | |
uVar4 = (int)param_3 >> 5; | |
iVar9 = *(int *)(param_2 + 0x10) + uVar4; | |
iVar5 = *(int *)(param_2 + 8); | |
iVar8 = iVar9 + 1; | |
do { | |
if (iVar8 <= iVar5) { | |
iVar1 = FUN_08014028(param_1,iVar1); | |
if (iVar1 != 0) { | |
puVar3 = (undefined4 *)(iVar1 + 0x10); | |
for (iVar5 = 0; iVar5 < (int)uVar4; iVar5 = iVar5 + 1) { | |
puVar3 = puVar3 + 1; | |
*puVar3 = 0; | |
} | |
puVar6 = (uint *)(param_2 + 0x14); | |
uVar10 = param_3 & 0x1f; | |
puVar2 = (uint *)(iVar1 + 0x14 + (uVar4 & ~((int)param_3 >> 0x1f)) * 4); | |
puVar12 = puVar6 + *(int *)(param_2 + 0x10); | |
if (uVar10 == 0) { | |
puVar2 = puVar2 + -1; | |
do { | |
puVar11 = puVar6 + 1; | |
puVar2 = puVar2 + 1; | |
*puVar2 = *puVar6; | |
puVar6 = puVar11; | |
} while (puVar11 < puVar12); | |
} | |
else { | |
uVar4 = 0; | |
puVar11 = puVar2; | |
do { | |
*puVar11 = *puVar6 << uVar10 | uVar4; | |
puVar7 = puVar6 + 1; | |
uVar4 = *puVar6 >> (0x20 - uVar10 & 0xff); | |
puVar6 = puVar7; | |
puVar11 = puVar11 + 1; | |
} while (puVar7 < puVar12); | |
iVar5 = ((int)puVar12 + (-0x15 - param_2) & 0xfffffffcU) + 4; | |
if (puVar12 < (uint *)(param_2 + 0x15)) { | |
iVar5 = 4; | |
} | |
*(uint *)((int)puVar2 + iVar5) = uVar4; | |
if (uVar4 != 0) { | |
iVar8 = iVar9 + 2; | |
} | |
} | |
*(int *)(iVar1 + 0x10) = iVar8 + -1; | |
FUN_080140a8(param_1,param_2); | |
return iVar1; | |
} | |
iVar5 = DAT_08014598; | |
FUN_08014cec(DAT_0801459c,0x1de,0); | |
iVar1 = extraout_r1; | |
} | |
iVar1 = iVar1 + 1; | |
iVar5 = iVar5 << 1; | |
} while( true ); | |
} | |
int FUN_080145a0(int param_1,int param_2) | |
{ | |
int iVar1; | |
uint *puVar2; | |
int iVar3; | |
uint *puVar4; | |
iVar3 = *(int *)(param_2 + 0x10); | |
iVar1 = *(int *)(param_1 + 0x10) - iVar3; | |
if (iVar1 == 0) { | |
puVar4 = (uint *)(param_1 + 0x14U) + iVar3; | |
puVar2 = (uint *)(param_2 + 0x14 + iVar3 * 4); | |
do { | |
puVar4 = puVar4 + -1; | |
puVar2 = puVar2 + -1; | |
if (*puVar4 != *puVar2) { | |
if (*puVar4 < *puVar2) { | |
return -1; | |
} | |
return 1; | |
} | |
} while ((uint *)(param_1 + 0x14U) < puVar4); | |
} | |
return iVar1; | |
} | |
int FUN_080145d8(undefined4 param_1,int param_2,int param_3,int param_4) | |
{ | |
int iVar1; | |
int iVar2; | |
undefined4 uVar3; | |
uint *puVar4; | |
uint uVar5; | |
int iVar6; | |
uint *puVar7; | |
int *piVar8; | |
uint *puVar9; | |
int iVar10; | |
uint *puVar11; | |
int iVar12; | |
uint *puVar13; | |
uint *puVar14; | |
bool bVar15; | |
iVar1 = FUN_080145a0(param_2,param_3,param_3,param_4,param_1,param_2,param_3); | |
bVar15 = iVar1 < 0; | |
if (iVar1 == 0) { | |
iVar2 = FUN_08014028(param_1,0); | |
uVar5 = 0; | |
iVar1 = iVar2; | |
if (iVar2 != 0) goto LAB_08014606; | |
uVar3 = 0x237; | |
} | |
else { | |
iVar1 = param_2; | |
if (bVar15) { | |
iVar1 = param_3; | |
param_4 = param_2; | |
} | |
if (!bVar15) { | |
param_4 = param_3; | |
} | |
uVar5 = (uint)bVar15; | |
iVar2 = FUN_08014028(param_1,*(undefined4 *)(iVar1 + 4)); | |
if (iVar2 != 0) { | |
iVar12 = *(int *)(iVar1 + 0x10); | |
iVar10 = *(int *)(param_4 + 0x10); | |
*(uint *)(iVar2 + 0xc) = uVar5; | |
puVar4 = (uint *)(iVar1 + 0x10); | |
puVar13 = (uint *)(iVar1 + 0x14 + iVar12 * 4); | |
puVar9 = (uint *)(param_4 + 0x14) + iVar10; | |
iVar10 = 0; | |
puVar11 = (uint *)(iVar2 + 0x14); | |
puVar7 = (uint *)(param_4 + 0x14); | |
do { | |
puVar14 = puVar7 + 1; | |
puVar4 = puVar4 + 1; | |
uVar5 = ((*puVar4 & 0xffff) - (*puVar7 & 0xffff)) + iVar10; | |
iVar10 = ((*puVar4 >> 0x10) - (*puVar7 >> 0x10)) + ((int)uVar5 >> 0x10); | |
*puVar11 = uVar5 & 0xffff | iVar10 * 0x10000; | |
iVar10 = iVar10 >> 0x10; | |
puVar11 = puVar11 + 1; | |
puVar7 = puVar14; | |
} while (puVar14 < puVar9); | |
iVar6 = ((int)puVar9 + (-0x15 - param_4) & 0xfffffffcU) + 4; | |
if (puVar9 < (uint *)(param_4 + 0x15)) { | |
iVar6 = 4; | |
} | |
puVar7 = (uint *)(iVar6 + iVar2 + 0x14); | |
puVar9 = (uint *)(iVar1 + 0x14 + iVar6); | |
puVar11 = puVar7; | |
for (puVar4 = puVar9; puVar4 < puVar13; puVar4 = puVar4 + 1) { | |
uVar5 = *puVar4; | |
iVar1 = (uVar5 >> 0x10) + ((int)(iVar10 + (uVar5 & 0xffff)) >> 0x10); | |
*puVar11 = uVar5 + iVar10 & 0xffff | iVar1 * 0x10000; | |
iVar10 = iVar1 >> 0x10; | |
puVar11 = puVar11 + 1; | |
} | |
uVar5 = (int)puVar13 + (3 - (int)puVar9) & 0xfffffffc; | |
if (puVar13 < (uint *)((int)puVar9 + -3)) { | |
uVar5 = 0; | |
} | |
piVar8 = (int *)((int)puVar7 + uVar5); | |
while (piVar8 = piVar8 + -1, *piVar8 == 0) { | |
iVar12 = iVar12 + -1; | |
} | |
*(int *)(iVar2 + 0x10) = iVar12; | |
return iVar2; | |
} | |
uVar3 = 0x245; | |
iVar1 = 0; | |
} | |
iVar2 = FUN_08014cec(DAT_080146fc,uVar3,iVar1,DAT_080146f8); | |
LAB_08014606: | |
*(undefined4 *)(iVar2 + 0x10) = 1; | |
*(uint *)(iVar2 + 0x14) = uVar5; | |
return iVar1; | |
} | |
undefined8 FUN_08014700(void) | |
{ | |
uint uVar1; | |
int iVar2; | |
uint uVar3; | |
undefined8 in_d0; | |
undefined4 uStack_4; | |
uStack_4 = (uint)((ulonglong)in_d0 >> 0x20); | |
iVar2 = (DAT_08014748 & uStack_4) + 0xfcc00000; | |
if (iVar2 < 1) { | |
uVar1 = -iVar2 >> 0x14; | |
if (0x13fffff < -iVar2) { | |
uVar3 = uVar1 - 0x14; | |
iVar2 = uVar1 - 0x32; | |
if ((int)uVar3 < 0x1f) { | |
uVar1 = 0x80000000; | |
} | |
if (uVar3 == 0x1e || iVar2 < 0 != SBORROW4(uVar3,0x1e)) { | |
uVar1 = uVar1 >> (uVar3 & 0xff); | |
} | |
else { | |
uVar1 = 1; | |
} | |
iVar2 = 0; | |
goto LAB_0801473c; | |
} | |
iVar2 = 0x80000 >> (uVar1 & 0xff); | |
} | |
uVar1 = 0; | |
LAB_0801473c: | |
return CONCAT44(iVar2,uVar1); | |
} | |
undefined8 FUN_0801474c(int param_1) | |
{ | |
int iVar1; | |
uint uVar2; | |
uint uVar3; | |
uint uVar4; | |
uint uVar5; | |
int iVar6; | |
uint uVar7; | |
uint uVar8; | |
undefined8 uVar9; | |
uVar8 = param_1 + 0x14; | |
iVar6 = uVar8 + *(int *)(param_1 + 0x10) * 4; | |
uVar7 = iVar6 - 4; | |
uVar3 = *(uint *)(iVar6 + -4); | |
uVar9 = FUN_0801420c(uVar3); | |
iVar1 = (int)uVar9; | |
*(int *)((ulonglong)uVar9 >> 0x20) = 0x20 - iVar1; | |
if (iVar1 < 0xb) { | |
uVar5 = uVar3 >> (0xbU - iVar1 & 0xff) | DAT_080147dc; | |
if (uVar8 < uVar7) { | |
uVar7 = *(uint *)(iVar6 + -8); | |
} | |
else { | |
uVar7 = 0; | |
} | |
uVar4 = uVar7 >> (0xbU - iVar1 & 0xff) | uVar3 << (iVar1 + 0x15U & 0xff); | |
} | |
else { | |
if (uVar8 < uVar7) { | |
uVar4 = *(uint *)(iVar6 + -8); | |
uVar7 = iVar6 - 8; | |
} | |
else { | |
uVar4 = 0; | |
} | |
uVar2 = iVar1 - 0xb; | |
if (uVar2 == 0) { | |
uVar5 = uVar3 | DAT_080147dc; | |
} | |
else { | |
if (uVar8 < uVar7) { | |
uVar7 = *(uint *)(uVar7 - 4); | |
} | |
else { | |
uVar7 = 0; | |
} | |
uVar5 = uVar3 << (uVar2 & 0xff) | uVar4 >> (0x20 - uVar2 & 0xff) | 0x3ff00000; | |
uVar4 = uVar4 << (uVar2 & 0xff) | uVar7 >> (0x20 - uVar2 & 0xff); | |
} | |
} | |
return CONCAT44(uVar5,uVar4); | |
} | |
int FUN_080147e0(uint param_1,uint param_2,uint param_3,int *param_4,int *param_5) | |
{ | |
int iVar1; | |
uint uVar2; | |
int iVar3; | |
int iVar4; | |
uint uVar5; | |
uint uVar6; | |
uint local_28; | |
int *local_24; | |
int *piStack_20; | |
local_28 = param_3; | |
local_24 = param_4; | |
piStack_20 = param_5; | |
iVar1 = FUN_08014028(param_3,1); | |
if (iVar1 == 0) { | |
FUN_08014cec(DAT_0801488c,0x30f,0,DAT_08014888); | |
} | |
uVar6 = (param_2 << 1) >> 0x15; | |
local_24 = (int *)(param_2 & 0xfffff); | |
if (uVar6 != 0) { | |
local_24 = (int *)((uint)local_24 | 0x100000); | |
} | |
if (param_1 == 0) { | |
iVar4 = FUN_0801424a(&local_24); | |
*(int **)(iVar1 + 0x14) = local_24; | |
uVar2 = iVar4 + 0x20; | |
iVar4 = 1; | |
} | |
else { | |
local_28 = param_1; | |
uVar2 = FUN_0801424a(&local_28); | |
if (uVar2 == 0) { | |
*(uint *)(iVar1 + 0x14) = local_28; | |
} | |
else { | |
uVar5 = (int)local_24 << (0x20 - uVar2 & 0xff); | |
local_24 = (int *)((uint)local_24 >> (uVar2 & 0xff)); | |
*(uint *)(iVar1 + 0x14) = uVar5 | local_28; | |
} | |
*(int **)(iVar1 + 0x18) = local_24; | |
if (local_24 == (int *)0x0) { | |
iVar4 = 1; | |
} | |
else { | |
iVar4 = 2; | |
} | |
} | |
*(int *)(iVar1 + 0x10) = iVar4; | |
if (uVar6 == 0) { | |
*param_4 = uVar2 - 0x432; | |
iVar3 = FUN_0801420c(*(undefined4 *)(iVar1 + iVar4 * 4 + 0x10)); | |
iVar3 = iVar4 * 0x20 - iVar3; | |
} | |
else { | |
*param_4 = (uVar6 - 0x433) + uVar2; | |
iVar3 = 0x35 - uVar2; | |
} | |
*param_5 = iVar3; | |
return iVar1; | |
} | |
undefined8 FUN_08014890(int param_1,int param_2) | |
{ | |
int iVar1; | |
int iVar2; | |
int iVar3; | |
undefined8 uVar4; | |
undefined8 uVar5; | |
int local_30; | |
int aiStack_2c [2]; | |
uVar4 = FUN_0801474c(param_1,&local_30); | |
iVar2 = (int)((ulonglong)uVar4 >> 0x20); | |
uVar5 = FUN_0801474c(param_2,aiStack_2c); | |
iVar3 = (int)((ulonglong)uVar5 >> 0x20); | |
iVar1 = (local_30 - aiStack_2c[0]) + (*(int *)(param_1 + 0x10) - *(int *)(param_2 + 0x10)) * 0x20; | |
if (iVar1 < 1) { | |
iVar3 = iVar3 + iVar1 * -0x100000; | |
} | |
else { | |
iVar2 = iVar2 + iVar1 * 0x100000; | |
} | |
uVar4 = FUN_0800086c((int)uVar4,iVar2,(int)uVar5,iVar3); | |
return uVar4; | |
} | |
void FUN_080148f4(int param_1,int param_2,int param_3) | |
{ | |
undefined4 *puVar1; | |
uint uVar2; | |
undefined4 *puVar3; | |
undefined4 *puVar4; | |
puVar1 = (undefined4 *)(param_3 + 0x14); | |
puVar3 = puVar1 + *(int *)(param_3 + 0x10); | |
puVar4 = (undefined4 *)(param_1 + -4); | |
for (; puVar1 < puVar3; puVar1 = puVar1 + 1) { | |
puVar4 = puVar4 + 1; | |
*puVar4 = *puVar1; | |
} | |
uVar2 = (int)puVar3 + (-0x11 - param_3) & 0xfffffffc; | |
if (puVar3 < (undefined4 *)(param_3 + 0x11U)) { | |
uVar2 = 0; | |
} | |
for (puVar4 = (undefined4 *)(param_1 + uVar2); | |
puVar4 < (undefined4 *)(param_1 + ((param_2 + -1 >> 5) + 1) * 4); puVar4 = puVar4 + 1) { | |
*puVar4 = 0; | |
} | |
return; | |
} | |
undefined4 FUN_0801493a(int param_1,uint param_2) | |
{ | |
bool bVar1; | |
int iVar2; | |
int *piVar3; | |
int iVar4; | |
int *piVar5; | |
piVar3 = (int *)(param_1 + 0x14); | |
iVar2 = *(int *)(param_1 + 0x10); | |
iVar4 = (int)param_2 >> 5; | |
if ((((iVar2 < iVar4) || (bVar1 = iVar2 <= iVar4, iVar2 = iVar4, bVar1)) || | |
(param_2 = param_2 & 0x1f, param_2 == 0)) || | |
(piVar3[iVar4] == ((uint)piVar3[iVar4] >> param_2) << param_2)) { | |
piVar5 = piVar3 + iVar2; | |
do { | |
if (piVar5 <= piVar3) { | |
return 0; | |
} | |
piVar5 = piVar5 + -1; | |
} while (*piVar5 == 0); | |
} | |
return 1; | |
} | |
int FUN_0801497c(undefined4 param_1,int param_2) | |
{ | |
int iVar1; | |
iVar1 = *(int *)(param_2 + -4) + -4; | |
if (*(int *)(param_2 + -4) < 0) { | |
iVar1 = iVar1 + *(int *)(param_2 + iVar1); | |
} | |
return iVar1; | |
} | |
void FUN_0801498c(undefined4 param_1,int param_2) | |
{ | |
int iVar1; | |
uint uVar2; | |
bool bVar3; | |
iVar1 = FUN_08014c60(param_1,(int)*(short *)(param_2 + 0xe)); | |
bVar3 = -1 < iVar1; | |
if (bVar3) { | |
uVar2 = *(int *)(param_2 + 0x54) + iVar1; | |
} | |
else { | |
uVar2 = *(ushort *)(param_2 + 0xc) & 0xffffefff; | |
} | |
if (bVar3) { | |
*(uint *)(param_2 + 0x54) = uVar2; | |
} | |
if (!bVar3) { | |
*(short *)(param_2 + 0xc) = (short)uVar2; | |
} | |
return; | |
} | |
void FUN_080149ae(int *param_1,int param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
short sVar1; | |
int *piVar2; | |
int iVar3; | |
undefined4 unaff_r4; | |
undefined4 unaff_r5; | |
undefined4 in_lr; | |
if ((int)((uint)*(ushort *)(param_2 + 0xc) << 0x17) < 0) { | |
FUN_08014c3c(param_1,(int)*(short *)(param_2 + 0xe),0,2); | |
} | |
sVar1 = *(short *)(param_2 + 0xe); | |
*(ushort *)(param_2 + 0xc) = *(ushort *)(param_2 + 0xc) & 0xefff; | |
piVar2 = DAT_08014ca4; | |
*DAT_08014ca4 = 0; | |
iVar3 = FUN_080070a8((int)sVar1,param_3,param_4,param_4,param_4,unaff_r4,unaff_r5,in_lr); | |
if ((iVar3 == -1) && (*piVar2 != 0)) { | |
*param_1 = *piVar2; | |
} | |
return; | |
} | |
void FUN_080149e6(undefined4 param_1,int param_2) | |
{ | |
int iVar1; | |
ushort uVar2; | |
bool bVar3; | |
iVar1 = FUN_08014c3c(param_1,(int)*(short *)(param_2 + 0xe)); | |
bVar3 = iVar1 == -1; | |
if (bVar3) { | |
uVar2 = *(ushort *)(param_2 + 0xc) & 0xefff; | |
} | |
else { | |
*(int *)(param_2 + 0x54) = iVar1; | |
uVar2 = *(ushort *)(param_2 + 0xc) | 0x1000; | |
} | |
if (bVar3) { | |
*(ushort *)(param_2 + 0xc) = uVar2; | |
} | |
if (!bVar3) { | |
*(ushort *)(param_2 + 0xc) = uVar2; | |
} | |
return; | |
} | |
uint FUN_08014a12(int param_1,byte param_2,int *param_3,undefined4 param_4) | |
{ | |
int iVar1; | |
uint uVar2; | |
byte *pbVar3; | |
if ((param_1 != 0) && (*(int *)(param_1 + 0x20) == 0)) { | |
FUN_0801159c(); | |
} | |
param_3[2] = param_3[6]; | |
uVar2 = (uint)*(ushort *)(param_3 + 3); | |
iVar1 = uVar2 << 0x1c; | |
if (((iVar1 < 0) && (uVar2 = param_3[4], uVar2 != 0)) || | |
(iVar1 = FUN_08014a90(param_1,param_3,iVar1,uVar2,param_4), iVar1 == 0)) { | |
iVar1 = *param_3 - param_3[4]; | |
uVar2 = (uint)param_2; | |
if ((iVar1 < param_3[5]) || (iVar1 = FUN_08013fd8(param_1,param_3), iVar1 == 0)) { | |
param_3[2] = param_3[2] + -1; | |
pbVar3 = (byte *)*param_3; | |
*param_3 = (int)(pbVar3 + 1); | |
*pbVar3 = param_2; | |
if (param_3[5] != iVar1 + 1) { | |
if (-1 < (int)((uint)*(ushort *)(param_3 + 3) << 0x1f)) { | |
return uVar2; | |
} | |
if (uVar2 != 10) { | |
return uVar2; | |
} | |
} | |
iVar1 = FUN_08013fd8(param_1,param_3); | |
if (iVar1 == 0) { | |
return uVar2; | |
} | |
} | |
} | |
return 0xffffffff; | |
} | |
undefined4 FUN_08014a90(undefined4 *param_1,undefined4 *param_2) | |
{ | |
undefined4 uVar1; | |
ushort uVar2; | |
int iVar3; | |
uint uVar4; | |
if ((*DAT_08014b38 != 0) && (*(int *)(*DAT_08014b38 + 0x20) == 0)) { | |
FUN_0801159c(); | |
} | |
uVar2 = *(ushort *)(param_2 + 3); | |
iVar3 = (int)(short)uVar2; | |
if (-1 < iVar3 << 0x1c) { | |
if (-1 < iVar3 << 0x1b) { | |
*param_1 = 9; | |
goto LAB_08014ab4; | |
} | |
if (iVar3 << 0x1d < 0) { | |
if ((undefined4 *)param_2[0xd] != (undefined4 *)0x0) { | |
if ((undefined4 *)param_2[0xd] != param_2 + 0x11) { | |
FUN_08013274(param_1); | |
} | |
param_2[0xd] = 0; | |
} | |
*(ushort *)(param_2 + 3) = *(ushort *)(param_2 + 3) & 0xffdb; | |
param_2[1] = 0; | |
*param_2 = param_2[4]; | |
} | |
*(ushort *)(param_2 + 3) = *(ushort *)(param_2 + 3) | 8; | |
} | |
if ((param_2[4] == 0) && ((*(ushort *)(param_2 + 3) & 0x280) != 0x200)) { | |
FUN_08014ba2(param_1,param_2); | |
} | |
uVar2 = *(ushort *)(param_2 + 3); | |
uVar4 = (uint)(short)uVar2; | |
if ((uVar4 & 1) == 0) { | |
uVar1 = 0; | |
if (-1 < (int)(uVar4 << 0x1e)) { | |
uVar1 = param_2[5]; | |
} | |
param_2[2] = uVar1; | |
} | |
else { | |
param_2[2] = 0; | |
param_2[6] = -param_2[5]; | |
} | |
if (param_2[4] != 0) { | |
return 0; | |
} | |
if ((uVar4 & 0x80) == 0) { | |
return 0; | |
} | |
LAB_08014ab4: | |
*(ushort *)(param_2 + 3) = uVar2 | 0x40; | |
return 0xffffffff; | |
} | |
undefined4 FUN_08014b56(undefined4 param_1,int param_2,undefined4 *param_3,uint *param_4) | |
{ | |
int iVar1; | |
uint uVar2; | |
undefined4 uVar3; | |
undefined1 auStack_68 [4]; | |
uint local_64; | |
if ((*(short *)(param_2 + 0xe) < 0) || | |
(iVar1 = FUN_08014cc8(param_1,(int)*(short *)(param_2 + 0xe),auStack_68), iVar1 < 0)) { | |
uVar2 = 0; | |
if ((*(ushort *)(param_2 + 0xc) & 0x80) == 0) { | |
uVar3 = 0x400; | |
} | |
else { | |
uVar3 = 0x40; | |
} | |
} | |
else { | |
uVar2 = (uint)((local_64 & 0xf000) == 0x2000); | |
uVar3 = 0x400; | |
} | |
*param_4 = uVar2; | |
*param_3 = uVar3; | |
return 0; | |
} | |
void FUN_08014ba2(int param_1,int *param_2,undefined4 param_3) | |
{ | |
ushort uVar1; | |
int iVar2; | |
int iVar3; | |
int local_20; | |
int *local_1c; | |
undefined4 uStack_18; | |
if (-1 < (int)((uint)*(ushort *)(param_2 + 3) << 0x1e)) { | |
local_20 = param_1; | |
local_1c = param_2; | |
uStack_18 = param_3; | |
uVar1 = FUN_08014b56(param_1,param_2,&local_20,&local_1c); | |
iVar3 = local_20; | |
iVar2 = FUN_08010b7c(param_1,local_20); | |
if (iVar2 != 0) { | |
*param_2 = iVar2; | |
*(ushort *)(param_2 + 3) = *(ushort *)(param_2 + 3) | 0x80; | |
param_2[4] = iVar2; | |
param_2[5] = iVar3; | |
if ((local_1c != (int *)0x0) && | |
(iVar3 = FUN_08014c1c(param_1,(int)*(short *)((int)param_2 + 0xe)), iVar3 != 0)) { | |
*(ushort *)(param_2 + 3) = *(ushort *)(param_2 + 3) & 0xfffc | 1; | |
} | |
*(ushort *)(param_2 + 3) = uVar1 | *(ushort *)(param_2 + 3); | |
return; | |
} | |
if ((int)(short)*(ushort *)(param_2 + 3) << 0x16 < 0) { | |
return; | |
} | |
*(ushort *)(param_2 + 3) = *(ushort *)(param_2 + 3) & 0xfffc | 2; | |
} | |
*param_2 = (int)param_2 + 0x47; | |
param_2[4] = (int)param_2 + 0x47; | |
param_2[5] = 1; | |
return; | |
} | |
void FUN_08014c1c(int *param_1,undefined4 param_2) | |
{ | |
int *piVar1; | |
int iVar2; | |
piVar1 = DAT_08014c38; | |
*DAT_08014c38 = 0; | |
iVar2 = FUN_080070d4(param_2); | |
if ((iVar2 == -1) && (*piVar1 != 0)) { | |
*param_1 = *piVar1; | |
} | |
return; | |
} | |
void FUN_08014c3c(int *param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
int *piVar1; | |
int iVar2; | |
piVar1 = DAT_08014c5c; | |
*DAT_08014c5c = 0; | |
iVar2 = FUN_080070d8(param_2,param_3,param_4,param_4,param_4); | |
if ((iVar2 == -1) && (*piVar1 != 0)) { | |
*param_1 = *piVar1; | |
} | |
return; | |
} | |
void FUN_08014c60(int *param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
int *piVar1; | |
int iVar2; | |
piVar1 = DAT_08014c80; | |
*DAT_08014c80 = 0; | |
iVar2 = FUN_08007088(param_2,param_3,param_4,param_4,param_4); | |
if ((iVar2 == -1) && (*piVar1 != 0)) { | |
*param_1 = *piVar1; | |
} | |
return; | |
} | |
void FUN_08014cc8(int *param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
int *piVar1; | |
int iVar2; | |
piVar1 = DAT_08014ce8; | |
*DAT_08014ce8 = 0; | |
iVar2 = FUN_080070ca(param_2,param_3,param_3,0,param_4); | |
if ((iVar2 == -1) && (*piVar1 != 0)) { | |
*param_1 = *piVar1; | |
} | |
return; | |
} | |
void FUN_08014cec(void) | |
{ | |
undefined4 uVar1; | |
uVar1 = *(undefined4 *)(*DAT_08014d18 + 0xc); | |
do { | |
FUN_08014d50(uVar1,DAT_08014d20); | |
uVar1 = FUN_08010588(); | |
} while( true ); | |
} | |
int FUN_08014d28(undefined4 *param_1,uint param_2,uint param_3) | |
{ | |
int iVar1; | |
undefined4 uVar2; | |
uVar2 = (undefined4)((ulonglong)param_2 * (ulonglong)param_3); | |
if ((int)((ulonglong)param_2 * (ulonglong)param_3 >> 0x20) == 0) { | |
iVar1 = FUN_08010b7c(param_1,uVar2); | |
if (iVar1 != 0) { | |
FUN_08012484(iVar1,0,uVar2); | |
} | |
} | |
else { | |
*param_1 = 0xc; | |
iVar1 = 0; | |
} | |
return iVar1; | |
} | |
void FUN_08014d50(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4) | |
{ | |
undefined4 uStack_8; | |
undefined4 uStack_4; | |
uStack_8 = param_3; | |
uStack_4 = param_4; | |
FUN_08013c7c(*DAT_08014d70,param_1,param_2,&uStack_8,param_1,&uStack_8); | |
return; | |
} | |
int FUN_08014d74(undefined4 param_1,int param_2) | |
{ | |
int iVar1; | |
iVar1 = FUN_08000afc(param_1,param_2,0,0); | |
if (iVar1 == 0) { | |
iVar1 = FUN_08014da4(param_1,param_2); | |
return iVar1; | |
} | |
iVar1 = FUN_08014da4(param_1,param_2 + -0x80000000); | |
return -iVar1; | |
} | |
void FUN_08014da4(undefined4 param_1,undefined4 param_2) | |
{ | |
undefined8 uVar1; | |
FUN_08000618(param_1,param_2,0,DAT_08014dd8); | |
FUN_08000bc8(); | |
uVar1 = FUN_08000524(); | |
uVar1 = FUN_08000618((int)uVar1,(int)((ulonglong)uVar1 >> 0x20),0,DAT_08014ddc); | |
fp_add(param_1,param_2,(int)uVar1,(int)((ulonglong)uVar1 >> 0x20)); | |
FUN_08000bc8(); | |
return; | |
} | |
// WARNING: Removing unreachable block (ram,0x0801506a) | |
undefined8 FUN_08014de0(uint param_1,uint param_2,uint param_3,uint param_4,uint *param_5) | |
{ | |
ulonglong uVar1; | |
uint uVar2; | |
uint uVar3; | |
int iVar4; | |
uint uVar5; | |
uint uVar6; | |
uint uVar7; | |
uint uVar8; | |
uint uVar9; | |
uint uVar10; | |
bool bVar11; | |
if (param_4 == 0) { | |
iVar4 = LZCOUNT(param_3); | |
if (param_2 < param_3) { | |
if (iVar4 != 0) { | |
param_3 = param_3 << iVar4; | |
param_2 = param_2 << iVar4 | param_1 >> (0x20U - iVar4 & 0xff); | |
param_1 = param_1 << iVar4; | |
} | |
uVar9 = param_3 >> 0x10; | |
uVar3 = param_2 / uVar9; | |
uVar5 = param_1 >> 0x10 | (param_2 - uVar9 * uVar3) * 0x10000; | |
uVar2 = uVar3 * (param_3 & 0xffff); | |
uVar7 = uVar3; | |
if (uVar5 <= uVar2 && uVar2 - uVar5 != 0) { | |
bVar11 = CARRY4(param_3,uVar5); | |
uVar5 = param_3 + uVar5; | |
uVar7 = uVar3 - 1; | |
if ((!bVar11) && (uVar5 <= uVar2 && uVar2 - uVar5 != 0)) { | |
uVar7 = uVar3 - 2; | |
uVar5 = uVar5 + param_3; | |
} | |
} | |
uVar3 = (uVar5 - uVar2) / uVar9; | |
uVar5 = param_1 & 0xffff | ((uVar5 - uVar2) - uVar9 * uVar3) * 0x10000; | |
uVar9 = uVar3 * (param_3 & 0xffff); | |
uVar2 = uVar3; | |
if (uVar5 <= uVar9 && uVar9 - uVar5 != 0) { | |
bVar11 = CARRY4(param_3,uVar5); | |
uVar5 = param_3 + uVar5; | |
uVar2 = uVar3 - 1; | |
if ((!bVar11) && (uVar5 <= uVar9 && uVar9 - uVar5 != 0)) { | |
uVar5 = uVar5 + param_3; | |
uVar2 = uVar3 - 2; | |
} | |
} | |
uVar2 = uVar2 | uVar7 << 0x10; | |
uVar5 = uVar5 - uVar9; | |
uVar7 = 0; | |
} | |
else { | |
if (iVar4 == 0) { | |
param_2 = param_2 - param_3; | |
uVar8 = param_3 >> 0x10; | |
uVar10 = param_3 & 0xffff; | |
uVar7 = 1; | |
} | |
else { | |
param_3 = param_3 << iVar4; | |
uVar2 = param_2 >> (0x20U - iVar4 & 0xff); | |
uVar5 = param_1 >> (0x20U - iVar4 & 0xff) | param_2 << iVar4; | |
uVar8 = param_3 >> 0x10; | |
uVar10 = param_3 & 0xffff; | |
uVar7 = uVar2 / uVar8; | |
uVar3 = uVar5 >> 0x10 | (uVar2 - uVar8 * uVar7) * 0x10000; | |
uVar9 = uVar7 * uVar10; | |
param_1 = param_1 << iVar4; | |
uVar2 = uVar7; | |
if (uVar3 <= uVar9 && uVar9 - uVar3 != 0) { | |
bVar11 = CARRY4(param_3,uVar3); | |
uVar3 = param_3 + uVar3; | |
uVar2 = uVar7 - 1; | |
if ((!bVar11) && (uVar3 <= uVar9 && uVar9 - uVar3 != 0)) { | |
uVar2 = uVar7 - 2; | |
uVar3 = uVar3 + param_3; | |
} | |
} | |
uVar6 = (uVar3 - uVar9) / uVar8; | |
param_2 = uVar5 & 0xffff | ((uVar3 - uVar9) - uVar8 * uVar6) * 0x10000; | |
uVar3 = uVar6 * uVar10; | |
uVar7 = uVar6; | |
if (param_2 <= uVar3 && uVar3 - param_2 != 0) { | |
bVar11 = CARRY4(param_3,param_2); | |
param_2 = param_3 + param_2; | |
uVar7 = uVar6 - 1; | |
if ((!bVar11) && (param_2 <= uVar3 && uVar3 - param_2 != 0)) { | |
uVar7 = uVar6 - 2; | |
param_2 = param_2 + param_3; | |
} | |
} | |
param_2 = param_2 - uVar3; | |
uVar7 = uVar7 | uVar2 << 0x10; | |
} | |
uVar9 = param_2 / uVar8; | |
uVar5 = param_1 >> 0x10 | (param_2 - uVar8 * uVar9) * 0x10000; | |
uVar2 = uVar10 * uVar9; | |
uVar3 = uVar9; | |
if (uVar5 <= uVar2 && uVar2 - uVar5 != 0) { | |
bVar11 = CARRY4(param_3,uVar5); | |
uVar5 = param_3 + uVar5; | |
uVar3 = uVar9 - 1; | |
if ((!bVar11) && (uVar5 <= uVar2 && uVar2 - uVar5 != 0)) { | |
uVar3 = uVar9 - 2; | |
uVar5 = uVar5 + param_3; | |
} | |
} | |
uVar9 = (uVar5 - uVar2) / uVar8; | |
uVar5 = param_1 & 0xffff | ((uVar5 - uVar2) - uVar8 * uVar9) * 0x10000; | |
uVar10 = uVar10 * uVar9; | |
uVar2 = uVar9; | |
if (uVar5 <= uVar10 && uVar10 - uVar5 != 0) { | |
bVar11 = CARRY4(param_3,uVar5); | |
uVar5 = param_3 + uVar5; | |
uVar2 = uVar9 - 1; | |
if ((!bVar11) && (uVar5 <= uVar10 && uVar10 - uVar5 != 0)) { | |
uVar5 = uVar5 + param_3; | |
uVar2 = uVar9 - 2; | |
} | |
} | |
uVar5 = uVar5 - uVar10; | |
uVar2 = uVar2 | uVar3 << 0x10; | |
} | |
if (param_5 != (uint *)0x0) { | |
*param_5 = uVar5 >> iVar4; | |
param_5[1] = 0; | |
} | |
} | |
else if (param_2 < param_4) { | |
if (param_5 != (uint *)0x0) { | |
*param_5 = param_1; | |
param_5[1] = param_2; | |
} | |
uVar2 = 0; | |
uVar7 = uVar2; | |
} | |
else { | |
iVar4 = LZCOUNT(param_4); | |
if (iVar4 == 0) { | |
if ((param_4 < param_2) || (param_3 <= param_1)) { | |
bVar11 = param_1 < param_3; | |
param_1 = param_1 - param_3; | |
param_2 = (param_2 - param_4) - (uint)bVar11; | |
uVar2 = 1; | |
} | |
else { | |
uVar2 = 0; | |
} | |
uVar7 = 0; | |
if (param_5 != (uint *)0x0) { | |
*param_5 = param_1; | |
param_5[1] = param_2; | |
} | |
} | |
else { | |
uVar9 = 0x20 - iVar4; | |
uVar10 = param_3 >> (uVar9 & 0xff) | param_4 << iVar4; | |
uVar7 = param_2 >> (uVar9 & 0xff); | |
uVar5 = param_1 >> (uVar9 & 0xff) | param_2 << iVar4; | |
param_1 = param_1 << iVar4; | |
uVar2 = uVar10 >> 0x10; | |
uVar6 = uVar7 / uVar2; | |
uVar3 = uVar5 >> 0x10 | (uVar7 - uVar2 * uVar6) * 0x10000; | |
uVar8 = uVar6 * (uVar10 & 0xffff); | |
uVar7 = uVar6; | |
if (uVar3 <= uVar8 && uVar8 - uVar3 != 0) { | |
bVar11 = CARRY4(uVar10,uVar3); | |
uVar3 = uVar10 + uVar3; | |
uVar7 = uVar6 - 1; | |
if ((!bVar11) && (uVar3 <= uVar8 && uVar8 - uVar3 != 0)) { | |
uVar7 = uVar6 - 2; | |
uVar3 = uVar3 + uVar10; | |
} | |
} | |
uVar6 = (uVar3 - uVar8) / uVar2; | |
uVar3 = uVar5 & 0xffff | ((uVar3 - uVar8) - uVar2 * uVar6) * 0x10000; | |
uVar5 = uVar6 * (uVar10 & 0xffff); | |
uVar2 = uVar6; | |
if (uVar3 <= uVar5 && uVar5 - uVar3 != 0) { | |
bVar11 = CARRY4(uVar10,uVar3); | |
uVar3 = uVar10 + uVar3; | |
uVar2 = uVar6 - 1; | |
if ((!bVar11) && (uVar3 <= uVar5 && uVar5 - uVar3 != 0)) { | |
uVar2 = uVar6 - 2; | |
uVar3 = uVar3 + uVar10; | |
} | |
} | |
uVar2 = uVar2 | uVar7 << 0x10; | |
uVar1 = (ulonglong)uVar2 * (ulonglong)(param_3 << iVar4); | |
if (CONCAT44(uVar3 - uVar5,param_1) < uVar1) { | |
uVar2 = uVar2 - 1; | |
uVar1 = uVar1 - CONCAT44(uVar10,param_3 << iVar4); | |
} | |
if (param_5 != (uint *)0x0) { | |
uVar7 = ((uVar3 - uVar5) - (int)(uVar1 >> 0x20)) - (uint)(param_1 < (uint)uVar1); | |
*param_5 = uVar7 << (uVar9 & 0xff) | param_1 - (uint)uVar1 >> iVar4; | |
param_5[1] = uVar7 >> iVar4; | |
} | |
uVar7 = 0; | |
} | |
} | |
return CONCAT44(uVar7,uVar2); | |
} | |
void FUN_0801509c(void) | |
{ | |
return; | |
} | |
void FUN_080150a8(void) | |
{ | |
return; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment