Again, Houdini is RobboLito modified.
Shall we start from main and compare Houdini 1.0 (build 2010-05-15) to RobboLito? Some of the differences you will see if you looked at the assembly/disassembly are due to slight modification and combined routines, compiler, and optimization flags.
Here is Houdini's main():
Code: Select all
int __cdecl main(int argc, const char **argv, const char **envp)
{
int v3; // ecx@1
int v4; // eax@1
DWORD v5; // ecx@1
struct _SYSTEM_INFO SystemInfo; // [sp+4h] [bp-24h]@1
sub_12A8B5A("Houdini w32 1_CPU\nbuild %d-%.2d-%.2d \nby Robert Houdart\n", 2010);
v4 = sub_12A87BF(v3);
fflush((FILE *)(v4 + 32));
GetSystemInfo(&SystemInfo);
v5 = SystemInfo.dwNumberOfProcessors;
dword_17A6878 = SystemInfo.dwNumberOfProcessors;
if ( (signed __int32)SystemInfo.dwNumberOfProcessors > 1 )
v5 = 1;
dword_12BCED0 = v5;
dword_13040C8 = 0;
if ( (signed int)v5 > 0 )
{
dword_13040C8 = (int)_aligned_malloc(0x200000u, 0x40u);
memset((void *)dword_13040C8, 0, 0x200000u);
}
sub_128F0D0(128);
memset32(word_177B368, 134219776, 0x200u);
sub_1289310();
sub_12A1F80();
_cfltcvt_init();
sub_12A8340();
sub_128F760();
sub_12A40A0();
sub_12A74B0(1);
while ( 1 )
sub_12A6470();
}
085g3 (Intel):
Code: Select all
int __cdecl main(int argc, const char **argv, const char **envp)
{
unsigned int v3; // eax@1
__m128i v4; // xmm0@1
__intel_new_proc_init(0);
sub_428FF0();
dword_4886C4 = (int)malloc(0x200000u);
sub_435970((void *)dword_4886C4, 0, 0x200000u);
sub_434DD0(128);
v3 = 0;
v4 = _mm_shuffle_epi32(_mm_cvtsi32_si128(0x8000800u), 0);
do
{
_mm_store_si128((__m128i *)&xmmword_79E720[2 * v3 / 0x10], v4);
_mm_store_si128((__m128i *)&xmmword_79E730[2 * v3 / 0x10], v4);
_mm_store_si128((__m128i *)&xmmword_79E740[2 * v3 / 0x10], v4);
_mm_store_si128((__m128i *)&xmmword_79E750[2 * v3 / 0x10], v4);
v3 += 32;
}
while ( v3 < 0x400 );
sub_40CF30();
sub_423210();
sub_41A3E0();
sub_433A10();
sub_426CF0();
sub_428E50(1u);
while ( 1 )
sub_428560();
}
Code: Select all
int __cdecl main(int argc, const char **argv, const char **envp)
{
FILE *v3; // eax@1
int v4; // edx@1
int v5; // ecx@1
printf("RobboLito 0.085g3 w32\nOct 10 2011 23:41:06\nwindows version by kranium and sentinel\n");
v3 = _iob_func();
fflush(v3 + 1);
dword_47B628 = (int)malloc(0x200000u);
memset((void *)dword_47B628, 0, 0x200000u);
sub_427560(v5, v4);
memset32(&word_62B1C0, 134219776, 0x200u);
sub_403320();
sub_41A5F0();
sub_412C60();
sub_427180();
sub_41CEA0();
sub_420230();
while ( 1 )
sub_41EC00();
}
Code: Select all
int __cdecl main(int argc, const char **argv, const char **envp)
{
int v3; // ecx@1
int v4; // eax@1
signed int v5; // esi@1
int v6; // [sp+0h] [bp-8h]@0
sub_4274E8(
(int)"RobboLito 0.09 w32\nDec 31 2009 16:51:46\nbasic windows version by kranium, improved by sentinel\n",
v6);
v4 = sub_42714D(v3);
fflush((FILE *)(v4 + 32));
dword_44CBB0 = (int)malloc(0x200000u);
memset((void *)dword_44CBB0, 0, 0x200000u);
sub_408530(128);
memset32(&word_6FA420, 134219776, 0x200u);
sub_409630();
sub_41FD30();
sub_418870();
v5 = 0;
do
sub_426BF0(v5++);
while ( v5 < 419904 );
sub_422920();
sub_425740();
while ( 1 )
sub_424130();
}
Here is RobboLIto's main() (main.c):
Code: Select all
int main()
{
show_version();
pawn_zobrist_initialization();
initialization_zobrist(128);
history_reset();
initialization_capture();
pile_initialization();
pawn_initialization();
initialization_value();
static_initialization();
game_new(TRUE);
while( 1 )
input_console();
return 0;
}
Houdini calls show_version() (utils.c):
Code: Select all
void show_version()
{
char *startup_banner =
"" NAME "\n"
"" __DATE__ " " __TIME__ "\n"
"windows version by kranium and sentinel\n";
printf(startup_banner);
fflush(stdout);
}
Code: Select all
Houdini w32 1_CPU
build 2010-05-15
by Robert Houdart
RobboLito 0.085g3 w32
Oct 10 2011 22:46:33
windows version by kranium and sentinel
Code: Select all
int check_num_CPU()
{
int num_CPU;
SYSTEM_INFO sysinfo;
GetSystemInfo( &sysinfo );
num_CPU = sysinfo.dwNumberOfProcessors;
return num_CPU;
}
Houdini Initializes pawnhash:
Code: Select all
{
dword_13040C8 = (int)_aligned_malloc(0x200000u, 0x40u);
memset((void *)dword_13040C8, 0, 2097152u);
}
Code: Select all
static void pawn_zobrist_initialization()
{
pawn_zobrist = malloc(list_pawn_number * sizeof(type_pawn_value));
memset(pawn_zobrist, 0, list_pawn_number * sizeof(type_pawn_value));
}
Code: Select all
int __cdecl sub_128F0D0(int a1)
{
int v6; // esi@1
int v7; // edi@1
size_t v8; // esi@3
int result; // eax@3
__asm { bsr eax, [esp+arg_0] }
v6 = ((1 << _EAX) & 0xFFF) << 16;
dword_12BCFA0 = v6;
dword_12BCFA4 = 0;
v7 = 16 * (unsigned __int64)(unsigned int)v6 >> 20;
dword_13040C0 = v6 - 4;
if ( byte_17B3648 )
_aligned_free(Memory);
v8 = 16 * v6;
byte_17B3648 = 1;
Memory = _aligned_malloc(v8, 0x40u);
memset(Memory, 0, v8);
memset(&unk_1304AC0, 0, 0x100000u);
result = v7;
dword_13040CC = 0;
return result;
}
Code: Select all
int initialization_zobrist( int mb )
{
YEARS = 0;
zobrist_dimension = ((1 << BSR(mb)) << 20) / sizeof(type_zobrist);
if( zobrist_dimension > 0x100000000 )
zobrist_dimension = 0x100000000;
mb = (zobrist_dimension * sizeof(type_zobrist)) >> 20;
list_hide = zobrist_dimension - 4;
if( zobrist_initialization_flag )
free(list_zobrist);
zobrist_initialization_flag = TRUE;
list_zobrist = malloc(zobrist_dimension * sizeof(type_zobrist));
zobrist_free();
return mb;
}
Code: Select all
memset32(word_177B368, 134219776, 0x200u);
Code: Select all
memset32(&word_62B1C0, 134219776, 0x200u);
Houdini initializes capture:
Code: Select all
signed int __cdecl sub_1289310()
{
signed int result; // eax@1
dword_17B14CC = -836763648;
dword_17B150C = -836763648;
dword_17B14C8 = -970981376;
dword_17B1508 = -970981376;
result = 3188719616;
dword_17B1400 = 0xC0200000u;
dword_17B1440 = -1089470464;
dword_17B1404 = 0xC0200000u;
dword_17B1444 = -1089470464;
dword_17B140C = -803209216;
dword_17B144C = -819986432;
dword_17B154C = -853540864;
dword_17B158C = -871366656;
dword_17B148C = -889192448;
dword_17B1408 = -937426944;
dword_17B1448 = -954204160;
dword_17B1548 = -988807168;
dword_17B1588 = -1006632960;
dword_17B1488 = -1023410176;
dword_17B14C0 = 3188719616;
dword_17B1500 = 3188719616;
dword_17B1540 = -1124073472;
dword_17B1580 = -1140850688;
dword_17B1480 = -1157627904;
dword_17B14C4 = 3188719616;
dword_17B1504 = 3188719616;
dword_17B1544 = -1124073472;
dword_17B1584 = -1140850688;
dword_17B1484 = -1157627904;
dword_17B13F8 = -1205862400;
dword_17B1438 = -1223688192;
dword_17B14B8 = -1240465408;
dword_17B14F8 = -1240465408;
dword_17B1538 = -1258291200;
dword_17B1578 = -1275068416;
dword_17B1478 = -1291845632;
dword_17B13F4 = -1341128704;
dword_17B1434 = -1358954496;
dword_17B14B4 = -1375731712;
dword_17B14F4 = -1375731712;
dword_17B1534 = -1392508928;
dword_17B1574 = -1409286144;
dword_17B1474 = -1426063360;
dword_17B1450 = 117440512;
dword_17B13D0 = 100696064;
dword_17B1410 = 83918848;
dword_17B1490 = 67141632;
dword_17B14D0 = 67141632;
dword_17B1510 = 50364416;
dword_17B1550 = 33587200;
dword_17B15EC = -803209216;
dword_17B162C = -819986432;
dword_17B16AC = -836763648;
dword_17B16EC = -836763648;
dword_17B172C = -853540864;
dword_17B176C = -871366656;
dword_17B166C = -889192448;
dword_17B15E8 = -937426944;
dword_17B1628 = -954204160;
dword_17B16A8 = -970981376;
dword_17B16E8 = -970981376;
dword_17B1728 = -988807168;
dword_17B1768 = -1006632960;
dword_17B1668 = -1023410176;
dword_17B15E0 = -1071644672;
dword_17B1620 = -1089470464;
dword_17B16A0 = 3188719616;
dword_17B1660 = -1157627904;
dword_17B1664 = -1157627904;
dword_17B1698 = -1240465408;
dword_17B16D8 = -1240465408;
dword_17B1720 = -1124073472;
dword_17B1724 = -1124073472;
dword_17B1760 = -1140850688;
dword_17B1764 = -1140850688;
dword_17B16E0 = 3188719616;
dword_17B15E4 = -1071644672;
dword_17B1624 = -1089470464;
dword_17B16A4 = 3188719616;
dword_17B16E4 = 3188719616;
dword_17B15D8 = -1205862400;
dword_17B1618 = -1223688192;
dword_17B1718 = -1258291200;
dword_17B1758 = -1275068416;
dword_17B1658 = -1291845632;
dword_17B15D4 = -1341128704;
dword_17B1614 = -1358954496;
dword_17B1694 = -1375731712;
dword_17B16D4 = -1375731712;
dword_17B1714 = -1392508928;
dword_17B1754 = -1409286144;
dword_17B1654 = -1426063360;
dword_17B1650 = 117440512;
dword_17B15D0 = 100696064;
dword_17B1610 = 83918848;
dword_17B1690 = 67141632;
dword_17B16D0 = 67141632;
dword_17B1710 = 50364416;
dword_17B1750 = 33587200;
return result;
}
Code: Select all
signed int __cdecl sub_403320()
{
signed int result; // eax@1
dword_43A654 = -836763648;
dword_43A694 = -836763648;
dword_43A650 = -970981376;
dword_43A690 = -970981376;
result = -1106247680;
dword_43A588 = -1071644672;
dword_43A5C8 = -1089470464;
dword_43A6C8 = -1124073472;
dword_43A58C = -1071644672;
dword_43A5CC = -1089470464;
dword_43A6CC = -1124073472;
dword_43A594 = -803209216;
dword_43A5D4 = -819986432;
dword_43A6D4 = -853540864;
dword_43A714 = -871366656;
dword_43A590 = -937426944;
dword_43A5D0 = -954204160;
dword_43A6D0 = -988807168;
dword_43A710 = -1006632960;
dword_43A648 = -1106247680;
dword_43A688 = -1106247680;
dword_43A708 = -1140850688;
dword_43A64C = -1106247680;
dword_43A68C = -1106247680;
dword_43A70C = -1140850688;
dword_43A580 = -1205862400;
dword_43A5C0 = -1223688192;
dword_43A640 = -1240465408;
dword_43A680 = -1240465408;
dword_43A6C0 = -1258291200;
dword_43A700 = -1275068416;
dword_43A57C = -1341128704;
dword_43A5BC = -1358954496;
dword_43A63C = -1375731712;
dword_43A67C = -1375731712;
dword_43A6BC = -1392508928;
dword_43A6FC = -1409286144;
dword_43A614 = -889192448;
dword_43A610 = -1023410176;
dword_43A608 = -1157627904;
dword_43A60C = -1157627904;
dword_43A600 = -1291845632;
dword_43A5FC = -1426063360;
dword_43A5D8 = 117440512;
dword_43A558 = 100696064;
dword_43A598 = 83918848;
dword_43A618 = 67141632;
dword_43A658 = 67141632;
dword_43A698 = 50364416;
dword_43A6D8 = 33587200;
dword_43A774 = -803209216;
dword_43A7B4 = -819986432;
dword_43A834 = -836763648;
dword_43A874 = -836763648;
dword_43A8B4 = -853540864;
dword_43A8F4 = -871366656;
dword_43A770 = -937426944;
dword_43A7B0 = -954204160;
dword_43A830 = -970981376;
dword_43A870 = -970981376;
dword_43A8B0 = -988807168;
dword_43A8F0 = -1006632960;
dword_43A768 = -1071644672;
dword_43A7A8 = -1089470464;
dword_43A828 = -1106247680;
dword_43A868 = -1106247680;
dword_43A8A8 = -1124073472;
dword_43A8E8 = -1140850688;
dword_43A820 = -1240465408;
dword_43A860 = -1240465408;
dword_43A81C = -1375731712;
dword_43A85C = -1375731712;
dword_43A8EC = -1140850688;
dword_43A76C = -1071644672;
dword_43A7AC = -1089470464;
dword_43A82C = -1106247680;
dword_43A86C = -1106247680;
dword_43A8AC = -1124073472;
dword_43A760 = -1205862400;
dword_43A7A0 = -1223688192;
dword_43A8A0 = -1258291200;
dword_43A8E0 = -1275068416;
dword_43A75C = -1341128704;
dword_43A79C = -1358954496;
dword_43A89C = -1392508928;
dword_43A8DC = -1409286144;
dword_43A7F4 = -889192448;
dword_43A7F0 = -1023410176;
dword_43A7E8 = -1157627904;
dword_43A7EC = -1157627904;
dword_43A7E0 = -1291845632;
dword_43A7DC = -1426063360;
dword_43A7D8 = 117440512;
dword_43A758 = 100696064;
dword_43A798 = 83918848;
dword_43A818 = 67141632;
dword_43A858 = 67141632;
dword_43A898 = 50364416;
dword_43A8D8 = 33587200;
return result;
}
Code: Select all
void initialization_capture()
{
capture_value[count_pawn_white][count_queen_black] = (0xd0 << 24) + (0x02 << 20);
capture_value[count_knight_white][count_queen_black] = (0xcf << 24) + (0x02 << 20);
capture_value[count_clear_white][count_queen_black] = (0xce << 24) + (0x02 << 20);
capture_value[count_dark_white][count_queen_black] = (0xce << 24) + (0x02 << 20);
capture_value[count_rook_white][count_queen_black] = (0xcd << 24) + (0x02 << 20);
capture_value[count_queen_white][count_queen_black] = (0xcc << 24) + (0x01 << 20);
capture_value[count_pawn_white][count_rook_black] = (0xc8 << 24) + (0x02 << 20);
capture_value[count_knight_white][count_rook_black] = (0xc7 << 24) + (0x02 << 20);
capture_value[count_clear_white][count_rook_black] = (0xc6 << 24) + (0x02 << 20);
capture_value[count_dark_white][count_rook_black] = (0xc6 << 24) + (0x02 << 20);
capture_value[count_rook_white][count_rook_black] = (0xc5 << 24) + (0x01 << 20);
capture_value[count_queen_white][count_rook_black] = (0xc4 << 24) + (0x00 << 20);
capture_value[count_pawn_white][count_clear_black] = (0xc0 << 24) + (0x02 << 20);
capture_value[count_knight_white][count_clear_black] = (0xbf << 24) + (0x01 << 20);
capture_value[count_clear_white][count_clear_black] = (0xbe << 24) + (0x01 << 20);
capture_value[count_dark_white][count_clear_black] = (0xbe << 24) + (0x01 << 20);
capture_value[count_rook_white][count_clear_black] = (0xbd << 24) + (0x00 << 20);
capture_value[count_queen_white][count_clear_black] = (0xbc << 24) + (0x00 << 20);
capture_value[count_pawn_white][count_dark_black] = (0xc0 << 24) + (0x02 << 20);
capture_value[count_knight_white][count_dark_black] = (0xbf << 24) + (0x01 << 20);
capture_value[count_clear_white][count_dark_black] = (0xbe << 24) + (0x01 << 20);
capture_value[count_dark_white][count_dark_black] = (0xbe << 24) + (0x01 << 20);
capture_value[count_rook_white][count_dark_black] = (0xbd << 24) + (0x00 << 20);
capture_value[count_queen_white][count_dark_black] = (0xbc << 24) + (0x00 << 20);
capture_value[count_pawn_white][count_knight_black] = (0xb8 << 24) + (0x02 << 20);
capture_value[count_knight_white][count_knight_black] = (0xb7 << 24) + (0x01 << 20);
capture_value[count_clear_white][count_knight_black] = (0xb6 << 24) + (0x01 << 20);
capture_value[count_dark_white][count_knight_black] = (0xb6 << 24) + (0x01 << 20);
capture_value[count_rook_white][count_knight_black] = (0xb5 << 24) + (0x00 << 20);
capture_value[count_queen_white][count_knight_black] = (0xb4 << 24) + (0x00 << 20);
capture_value[count_pawn_white][count_pawn_black] = (0xb0 << 24) + (0x01 << 20);
capture_value[count_knight_white][count_pawn_black] = (0xaf << 24) + (0x00 << 20);
capture_value[count_clear_white][count_pawn_black] = (0xae << 24) + (0x00 << 20);
capture_value[count_dark_white][count_pawn_black] = (0xae << 24) + (0x00 << 20);
capture_value[count_rook_white][count_pawn_black] = (0xad << 24) + (0x00 << 20);
capture_value[count_queen_white][count_pawn_black] = (0xac << 24) + (0x00 << 20);
capture_value[count_king_white][count_queen_black] = (0xcb << 24) + (0x00 << 20);
capture_value[count_king_white][count_rook_black] = (0xc3 << 24) + (0x00 << 20);
capture_value[count_king_white][count_clear_black] = (0xbb << 24) + (0x00 << 20);
capture_value[count_king_white][count_dark_black] = (0xbb << 24) + (0x00 << 20);
capture_value[count_king_white][count_knight_black] = (0xb3 << 24) + (0x00 << 20);
capture_value[count_king_white][count_pawn_black] = (0xab << 24) + (0x00 << 20);
capture_value[count_king_white][0] = (0x07 << 24) + (0x00 << 15);
capture_value[count_pawn_white][0] = (0x06 << 24) + (0x01 << 15);
capture_value[count_knight_white][0] = (0x05 << 24) + (0x01 << 15);
capture_value[count_clear_white][0] = (0x04 << 24) + (0x01 << 15);
capture_value[count_dark_white][0] = (0x04 << 24) + (0x01 << 15);
capture_value[count_rook_white][0] = (0x03 << 24) + (0x01 << 15);
capture_value[count_queen_white][0] = (0x02 << 24) + (0x01 << 15);
capture_value[count_pawn_black][count_queen_white] = (0xd0 << 24) + (0x02 << 20);
capture_value[count_knight_black][count_queen_white] = (0xcf << 24) + (0x02 << 20);
capture_value[count_clear_black][count_queen_white] = (0xce << 24) + (0x02 << 20);
capture_value[count_dark_black][count_queen_white] = (0xce << 24) + (0x02 << 20);
capture_value[count_rook_black][count_queen_white] = (0xcd << 24) + (0x02 << 20);
capture_value[count_queen_black][count_queen_white] = (0xcc << 24) + (0x01 << 20);
capture_value[count_pawn_black][count_rook_white] = (0xc8 << 24) + (0x02 << 20);
capture_value[count_knight_black][count_rook_white] = (0xc7 << 24) + (0x02 << 20);
capture_value[count_clear_black][count_rook_white] = (0xc6 << 24) + (0x02 << 20);
capture_value[count_dark_black][count_rook_white] = (0xc6 << 24) + (0x02 << 20);
capture_value[count_rook_black][count_rook_white] = (0xc5 << 24) + (0x01 << 20);
capture_value[count_queen_black][count_rook_white] = (0xc4 << 24) + (0x00 << 20);
capture_value[count_pawn_black][count_clear_white] = (0xc0 << 24) + (0x02 << 20);
capture_value[count_knight_black][count_clear_white] = (0xbf << 24) + (0x01 << 20);
capture_value[count_clear_black][count_clear_white] = (0xbe << 24) + (0x01 << 20);
capture_value[count_dark_black][count_clear_white] = (0xbe << 24) + (0x01 << 20);
capture_value[count_rook_black][count_clear_white] = (0xbd << 24) + (0x00 << 20);
capture_value[count_queen_black][count_clear_white] = (0xbc << 24) + (0x00 << 20);
capture_value[count_pawn_black][count_dark_white] = (0xc0 << 24) + (0x02 << 20);
capture_value[count_knight_black][count_dark_white] = (0xbf << 24) + (0x01 << 20);
capture_value[count_clear_black][count_dark_white] = (0xbe << 24) + (0x01 << 20);
capture_value[count_dark_black][count_dark_white] = (0xbe << 24) + (0x01 << 20);
capture_value[count_rook_black][count_dark_white] = (0xbd << 24) + (0x00 << 20);
capture_value[count_queen_black][count_dark_white] = (0xbc << 24) + (0x00 << 20);
capture_value[count_pawn_black][count_knight_white] = (0xb8 << 24) + (0x02 << 20);
capture_value[count_knight_black][count_knight_white] = (0xb7 << 24) + (0x01 << 20);
capture_value[count_clear_black][count_knight_white] = (0xb6 << 24) + (0x01 << 20);
capture_value[count_dark_black][count_knight_white] = (0xb6 << 24) + (0x01 << 20);
capture_value[count_rook_black][count_knight_white] = (0xb5 << 24) + (0x00 << 20);
capture_value[count_queen_black][count_knight_white] = (0xb4 << 24) + (0x00 << 20);
capture_value[count_pawn_black][count_pawn_white] = (0xb0 << 24) + (0x01 << 20);
capture_value[count_knight_black][count_pawn_white] = (0xaf << 24) + (0x00 << 20);
capture_value[count_clear_black][count_pawn_white] = (0xae << 24) + (0x00 << 20);
capture_value[count_dark_black][count_pawn_white] = (0xae << 24) + (0x00 << 20);
capture_value[count_rook_black][count_pawn_white] = (0xad << 24) + (0x00 << 20);
capture_value[count_queen_black][count_pawn_white] = (0xac << 24) + (0x00 << 20);
capture_value[count_king_black][count_queen_white] = (0xcb << 24) + (0x00 << 20);
capture_value[count_king_black][count_rook_white] = (0xc3 << 24) + (0x00 << 20);
capture_value[count_king_black][count_clear_white] = (0xbb << 24) + (0x00 << 20);
capture_value[count_king_black][count_dark_white] = (0xbb << 24) + (0x00 << 20);
capture_value[count_king_black][count_knight_white] = (0xb3 << 24) + (0x00 << 20);
capture_value[count_king_black][count_pawn_white] = (0xab << 24) + (0x00 << 20);
capture_value[count_king_black][0] = (0x07 << 24) + (0x00 << 15);
capture_value[count_pawn_black][0] = (0x06 << 24) + (0x01 << 15);
capture_value[count_knight_black][0] = (0x05 << 24) + (0x01 << 15);
capture_value[count_clear_black][0] = (0x04 << 24) + (0x01 << 15);
capture_value[count_dark_black][0] = (0x04 << 24) + (0x01 << 15);
capture_value[count_rook_black][0] = (0x03 << 24) + (0x01 << 15);
capture_value[count_queen_black][0] = (0x02 << 24) + (0x01 << 15);
}
Houdini's value/material initialization:
Code: Select all
int __cdecl sub_12A8340()
{
signed int v0; // eax@1
int v1; // ebp@3
int v2; // eax@3
int v3; // ebx@3
int v4; // ecx@3
int v5; // eax@3
int v6; // ecx@3
int v7; // edi@3
int v8; // ecx@3
int v9; // ecx@3
int v10; // ecx@3
int v11; // eax@3
int v12; // esi@3
int v13; // ST28_4@3
int v14; // esi@3
__int16 v15; // dx@3
__int16 v16; // dh@1@3
int v17; // ecx@3
int v18; // eax@3
__int64 v19; // qax@4
int v20; // eax@4
__int64 v21; // qax@6
__int64 v22; // qax@7
int v23; // eax@12
int result; // eax@12
int v25; // [sp-38h] [bp-90h]@10
int v26; // [sp-34h] [bp-8Ch]@10
int v27; // [sp-30h] [bp-88h]@10
int v28; // [sp-2Ch] [bp-84h]@10
int v29; // [sp-28h] [bp-80h]@10
int v30; // [sp-24h] [bp-7Ch]@10
int v31; // [sp-20h] [bp-78h]@10
int v32; // [sp-1Ch] [bp-74h]@10
int v33; // [sp-18h] [bp-70h]@10
int v34; // [sp-14h] [bp-6Ch]@10
int v35; // [sp-10h] [bp-68h]@10
int v36; // [sp-Ch] [bp-64h]@10
int v37; // [sp-8h] [bp-60h]@10
int v38; // [sp-4h] [bp-5Ch]@10
int v39; // [sp+10h] [bp-48h]@3
int v40; // [sp+14h] [bp-44h]@3
int v41; // [sp+18h] [bp-40h]@3
int v42; // [sp+1Ch] [bp-3Ch]@3
int v43; // [sp+20h] [bp-38h]@3
int v44; // [sp+20h] [bp-38h]@4
int v45; // [sp+24h] [bp-34h]@3
int v46; // [sp+28h] [bp-30h]@3
int v47; // [sp+2Ch] [bp-2Ch]@3
int v48; // [sp+30h] [bp-28h]@3
int v49; // [sp+34h] [bp-24h]@3
int v50; // [sp+38h] [bp-20h]@3
signed int v51; // [sp+3Ch] [bp-1Ch]@1
signed int v52; // [sp+40h] [bp-18h]@1
int v53; // [sp+50h] [bp-8h]@3
v0 = 0;
v51 = 0;
v52 = &word_14414FC;
while ( 1 )
{
v1 = v0 % 2;
v2 = v0 / 2;
v3 = v2 % 2;
v4 = v2 / 2;
v5 = v2 / 2 / 3;
v41 = v4 - 3 * v5;
v6 = v5;
v5 /= 3;
v39 = v6 - 3 * v5;
v7 = v5 % 2;
v5 /= 2;
v8 = v5 % 2;
v5 /= 2;
v49 = v8;
v9 = v5 % 2;
v5 /= 2;
v46 = v9;
v45 = v5 % 2;
v10 = v5 / 2;
v11 = v5 / 2 / 3;
v42 = v10 - 3 * v11;
v40 = v11 % 3;
v12 = v11 / 3 / 9;
v47 = v46 + v45;
v48 = v12 % 9;
v13 = v12 % 9;
v14 = v7 + v49;
v50 = v11 / 3 % 9;
v53 = sub_12A8150(v50, v42, v7 + v49, v41, v1, v13, v11 % 3, v46 + v45, v39, v3);
v17 = v42 + v40 + v7 + v49 + v41 + v39 + 2 * (v3 + v1) + v46 + v45 + 2 * (v41 + v39 + 2 * (v3 + v1));
v43 = (v53 < 0) + SHIWORD(v53);
v18 = v43 < 0;
if ( v17 > 8 )
{
if ( v17 > 24 )
{
v22 = v53 * (v17 - 24) + v43 * (32 - v17);
v20 = ((BYTE4(v22) & 7) + v22) >> 3;
}
else
{
v21 = v43 * (v17 - 8) + (v18 + v15) * (24 - v17);
v20 = ((BYTE4(v21) & 0xF) + v21) >> 4;
}
v44 = v20;
}
else
{
v19 = v17 * (v18 + v15) + (8 - v17) * ((v18 + v15 < 0) + v16);
v20 = ((BYTE4(v19) & 7) + v19) >> 3;
v44 = v20;
}
if ( v20 <= 0 )
{
v38 = v1;
v37 = v41;
v36 = v49;
v35 = v7;
v34 = v7 + v49;
v33 = v42;
v32 = v50;
v31 = v3;
v30 = v39;
v29 = v45;
v28 = v46;
v27 = v46 + v45;
v26 = v40;
v25 = v48;
}
else
{
v38 = v3;
v37 = v39;
v36 = v45;
v35 = v46;
v34 = v46 + v45;
v33 = v40;
v32 = v48;
v31 = v1;
v30 = v41;
v29 = v49;
v28 = v7;
v27 = v7 + v49;
v26 = v42;
v25 = v50;
}
v23 = sub_12A7B30(v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38);
*(v52 - 4) = (((1717986919i64 * v44 * v23) >> 32) >> 2) + (((1717986919i64 * v44 * v23) >> 32) >> 31);
*(v52 - 2) = sub_12A79E0(v50, v42, v14, v7, v49, v41, v1, v40, v47, v46, v45, v39, v3);
*v52 = 0;
result = sub_12A7640(v52, v50, v42, v14, v7, v49, v41, v1, v48, v40, v47, v46, v45, v39, v3);
++v51;
*(v52 - 1) = result;
v52 += 6;
if ( v52 >= dword_16A867C )
break;
v0 = v51;
}
return result;
}
Code: Select all
static void Material_calculation( int c )
{
int white_queen, black_queen, white_rook, black_rook, white_clear, black_clear, white_dark, black_dark,
white_knight, black_knight, white_pawn, black_pawn, n, value, white_bishop, black_bishop;
int ca, white_load, black_load, phase, va1, va2, va3, va4;
uint64 va;
n = c;
white_queen = n % 2;
n /= 2;
black_queen = n % 2;
n /= 2;
white_rook = n % 3;
n /= 3;
black_rook = n % 3;
n /= 3;
white_clear = n % 2;
n /= 2;
white_dark = n % 2;
n /= 2;
black_clear = n % 2;
n /= 2;
black_dark = n % 2;
n /= 2;
white_knight = n % 3;
n /= 3;
black_knight = n % 3;
n /= 3;
white_pawn = n % 9;
n /= 9;
black_pawn = n % 9;
white_bishop = white_clear + white_dark;
black_bishop = black_clear + black_dark;
va =
value_value(white_pawn, white_knight, white_bishop, white_clear, white_dark, white_rook, white_queen,
black_pawn, black_knight, black_bishop, black_clear, black_dark, black_rook, black_queen);
phase =
PHASE_MINOR * (white_knight + white_bishop + black_knight + black_bishop)
+ PHASE_ROOK * (white_rook + black_rook) + PHASE_QUEEN * (white_queen + black_queen);
va1 = va & 0xffff;
va2 = ((va >> 16) & 0xffff) + (va1 > 0x8000);
va1 = (sint16)va1;
va3 = ((va >> 32) & 0xffff) + (va2 > 0x8000);
va2 = (sint16)va2;
va4 = ((va >> 48) & 0xffff) + (va3 > 0x8000);
va3 = (sint16)va3;
va4 = (sint16)va4;
if( phase < 8 )
{
va4 *= 8 - phase;
va3 *= phase;
va = va3 + va4;
value = ((int)va) / 8;
}
else if( phase < 24 )
{
va3 *= 24 - phase;
va2 *= phase - 8;
va = va2 + va3;
value = ((int)va) / 16;
}
else
{
va2 *= 32 - phase;
va1 *= phase - 24;
va = va1 + va2;
value = ((int)va) / 8;
}
white_load =
load_white(white_pawn, white_knight, white_bishop, white_clear, white_dark, white_rook, white_queen, black_pawn,
black_knight, black_bishop, black_clear, black_dark, black_rook, black_queen);
black_load =
load_black(white_pawn, white_knight, white_bishop, white_clear, white_dark, white_rook, white_queen, black_pawn,
black_knight, black_bishop, black_clear, black_dark, black_rook, black_queen);
if( value > 0 )
ca = white_load;
else
ca = black_load;
value *= ca;
value /= 10;
MATERIAL[c].value = value;
MATERIAL[c].sign =
sengo_initialization(white_pawn, white_knight, white_bishop, white_clear, white_dark, white_rook, white_queen,
black_pawn, black_knight, black_bishop, black_clear, black_dark, black_rook, black_queen);
MATERIAL[c].flags =
flags_initialization(white_pawn, white_knight, white_bishop, white_clear, white_dark, white_rook, white_queen,
black_pawn, black_knight, black_bishop, black_clear, black_dark, black_rook, black_queen);
}
Houdini:
Code: Select all
int __cdecl sub_12A74B0(char a1)
{
int result; // eax@1
void *v2; // edx@2
int v3; // edi@3
memset(byte_1405380, 0, 0x40u);
memset(&unk_14074F8, 0, 0x3A000u);
dword_1405388 = 16843009;
unk_140538C = 16843009;
dword_14053B0 = 151587081;
dword_14053B4 = 151587081;
byte_1405387 = 6;
byte_1405380[0] = 6;
byte_14053BF = 14;
byte_14053B8 = 14;
dword_14054F0 = &unk_14074F8;
byte_14054EA = 1;
word_1407511 = 15;
byte_14075DB = 0;
word_1405383 = 775;
byte_1405386 = 2;
byte_1405381 = 2;
byte_1405382 = 5;
byte_1405385 = 4;
unk_14053B9 = 185535498;
word_14053BD = 2573;
dword_1304AB0 = 1000;
dword_1304ABC = 0;
byte_1304AAC = 1;
dword_14054EC = 0;
result = sub_12A65A0();
if ( a1 )
{
memset(Memory, 0, 16 * dword_12BCFA0);
memset(&unk_1304AC0, 0, 0x100000u);
_mm_storel_pd(&qword_12C40C0, 0);
memcpy(&unk_12C40C8, &qword_12C40C0, 0x3FFF8u);
dword_13040CC = 0;
memset32(word_177B368, 134219776, 0x200u);
v2 = word_177C270;
do
{
result = 0;
memset(v2, 0, 0x1FFCu);
v3 = (v2 + 8188);
v2 = v2 + 8192;
*v3 = 0;
}
while ( v2 < dword_179C270 );
}
return result;
}
Code: Select all
int __cdecl sub_420230()
{
int result; // eax@1
memset(&byte_6913C0, 0, 0x40u);
memset(&unk_62BBC0, 0, 0x8000u);
dword_6913C8 = 16843009;
unk_6913CC = 16843009;
dword_6913F0 = 151587081;
dword_6913F4 = 151587081;
byte_6913C7 = 6;
byte_6913C0 = 6;
byte_6913FF = 14;
byte_6913F8 = 14;
dword_68EF00 = (int)&unk_62BBC0;
byte_6914A0 = 1;
byte_62BBDC = 15;
word_62BBDD = 0;
word_6913C3 = 775;
byte_6913C6 = 2;
byte_6913C1 = 2;
byte_6913C2 = 5;
byte_6913C5 = 4;
unk_6913F9 = 185535498;
word_6913FD = 2573;
dword_47B5E4 = 1000;
dword_47B5E8 = 0;
byte_48BAA0 = 1;
dword_48E100 = 0;
sub_41EDD0();
memset(Dst, 0, 16 * dword_42E018);
memset(&unk_6914C0, 0, 0x100000u);
dword_43AEA0 = 0;
dword_43AEA4 = 0;
memcpy(&unk_43AEA8, &dword_43AEA0, 0x3FFF8u);
memset32(&word_62B1C0, 134219776, 0x200u);
result = 0;
memset(&word_64BE60, 0, 0x1FFE0u);
dword_6913A0 = 0;
unk_6913A4 = 0;
return result;
}
Houdini
Code: Select all
int __thiscall sub_12A6470(void *this)
{
char *v1; // eax@1
char v2; // cl@2
char *v4; // [sp-2h] [bp-1000Ch]@1
char v5; // [sp+2h] [bp-10008h]@1
_BYTE v6[3]; // [sp+3h] [bp-10007h]@3
unsigned int v7; // [sp+10006h] [bp-4h]@1
v7 = &v5 ^ __security_cookie;
v4 = sub_12A87BF(this);
fgets(&v5, 65536, v4);
v1 = &v5;
do
v2 = *v1++;
while ( v2 );
LOBYTE((&v4)[v1 - v6 + 3]) = 0;
v4 = &v5;
return sub_12A6020(v4);
}
Code: Select all
int __thiscall sub_424130(void *this)
{
char *v1; // eax@1
char v2; // cl@2
char *v4; // [sp-2h] [bp-1000Ch]@1
char v5; // [sp+2h] [bp-10008h]@1
_BYTE v6[3]; // [sp+3h] [bp-10007h]@3
unsigned int v7; // [sp+10006h] [bp-4h]@1
v7 = (unsigned int)&v5 ^ __security_cookie;
v4 = (char *)sub_42714D(this);
fgets(&v5, 65536, (FILE *)v4);
v1 = &v5;
do
v2 = *v1++;
while ( v2 );
LOBYTE((&v4)[v1 - v6 + 3]) = 0;
v4 = &v5;
return sub_423B90(v4);
}
Code: Select all
void input_console()
{
char string[65536];
fgets(string, 65536, stdin);
string[strlen(string) - 1] = 0;
parse(string);
}