Houdini with 1:1 Robbolito-code?

Discussion of anything and everything relating to chess playing software and machines.

Moderators: hgm, Rebel, chrisw

SchachProfi
Posts: 66
Joined: Tue Apr 27, 2010 5:23 pm

Houdini with 1:1 Robbolito-code?

Post by SchachProfi »

Found this interesting comparison on (and its shared in a few other fora): http://morethanchessagame.forumotion.co ... posed#5581

I copy&pasted it here for you below:

---

"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_CPUnbuild %d-%.2d-%.2d nby Robert Houdartn", 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();
}



For comparison, here are 3 different builds of RobboLito

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();
}



085g3 (MS):

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 w32nOct 10 2011 23:41:06nwindows version by kranium and sentineln");
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();
}



009:

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 w32nDec 31 2009 16:51:46nbasic windows version by kranium, improved by sentineln",
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;
}



As I stated earlier, I wasnt planning on doing this, and if at all, not
until maybe December, but in the main time, some additional info:

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 sentineln";

printf(startup_banner);
fflush(stdout);
}


The date format has been modified slightly in Houdini and the text, "build," added:

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

Houdini also calls check_num_CPU() (utils.c):

Code: Select all
int check_num_CPU()
{
int num_CPU;
SYSTEM_INFO sysinfo;
GetSystemInfo( &sysinfo );
num_CPU = sysinfo.dwNumberOfProcessors;
return num_CPU;
}



The above is just a generic way of getting the number of CPUs in Windows
OS. What Houdini does here is set the number of CPU to 1 if the system
has more.

Houdini Initializes pawnhash:

Code: Select all
{
dword_13040C8 = (int)_aligned_malloc(0x200000u, 0x40u);
memset((void *)dword_13040C8, 0, 2097152u);
}



RobboLito's pawn_zobrist_initialization() (main.c):

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));
}



Houdini then calls initialization_zobrist(). Hash size in the RobboLito
version Norm mentioned is left unchanged in Houdini sub_128F0D0(128):

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;
}



RobboLito's initialization_zobrist() (zobrist.c):

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;
}



Houdini call history_reset:

Code: Select all
memset32(word_177B368, 134219776, 0x200u);



RobboLito:

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;
}



RobboLito's capture initialization:

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;
}



RobboLito initialization_capture() (nit.gen.h):

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);
}

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 like RobboLito then initializes the board arrays/pile_initialization() (stack.c) and pawn_initialization() (p_value.c).

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;
}



RobboLito's initialization_value()/Material_calculation( int c) (values.c):

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);
}



There's probably a good answer for these:

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;
}



RobboLito:

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;
}



Perhaps there's an explanation for this exact match?



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);
}



RobboLito:

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);
}



input_console() (uci.c):

Code: Select all
void input_console()
{
char string[65536];
fgets(string, 65536, stdin);
string[strlen(string) - 1] = 0;
parse(string);
}



Is there really much point to go through the eval and search? In any
case, this was probably a huge waste of time as am sure most reasonable
people recognize that Houdini base code is RobboLito."
bhlangonijr
Posts: 482
Joined: Thu Oct 16, 2008 4:23 am
Location: Milky Way

Re: Houdini with 1:1 Robbolito-code?

Post by bhlangonijr »

User avatar
geots
Posts: 4790
Joined: Sat Mar 11, 2006 12:42 am

Re: Houdini with 1:1 Robbolito-code?

Post by geots »

SchachProfi wrote:Found this interesting comparison on (and its shared in a few other fora): http://morethanchessagame.forumotion.co ... posed#5581

I copy&pasted it here for you below:

---

"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_CPUnbuild %d-%.2d-%.2d nby Robert Houdartn", 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();
}



For comparison, here are 3 different builds of RobboLito

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();
}



085g3 (MS):

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 w32nOct 10 2011 23:41:06nwindows version by kranium and sentineln");
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();
}



009:

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 w32nDec 31 2009 16:51:46nbasic windows version by kranium, improved by sentineln",
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;
}



As I stated earlier, I wasnt planning on doing this, and if at all, not
until maybe December, but in the main time, some additional info:

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 sentineln";

printf(startup_banner);
fflush(stdout);
}


The date format has been modified slightly in Houdini and the text, "build," added:

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

Houdini also calls check_num_CPU() (utils.c):

Code: Select all
int check_num_CPU()
{
int num_CPU;
SYSTEM_INFO sysinfo;
GetSystemInfo( &sysinfo );
num_CPU = sysinfo.dwNumberOfProcessors;
return num_CPU;
}



The above is just a generic way of getting the number of CPUs in Windows
OS. What Houdini does here is set the number of CPU to 1 if the system
has more.

Houdini Initializes pawnhash:

Code: Select all
{
dword_13040C8 = (int)_aligned_malloc(0x200000u, 0x40u);
memset((void *)dword_13040C8, 0, 2097152u);
}



RobboLito's pawn_zobrist_initialization() (main.c):

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));
}



Houdini then calls initialization_zobrist(). Hash size in the RobboLito
version Norm mentioned is left unchanged in Houdini sub_128F0D0(128):

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;
}



RobboLito's initialization_zobrist() (zobrist.c):

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;
}



Houdini call history_reset:

Code: Select all
memset32(word_177B368, 134219776, 0x200u);



RobboLito:

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;
}



RobboLito's capture initialization:

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;
}



RobboLito initialization_capture() (nit.gen.h):

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);
}

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 like RobboLito then initializes the board arrays/pile_initialization() (stack.c) and pawn_initialization() (p_value.c).

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;
}



RobboLito's initialization_value()/Material_calculation( int c) (values.c):

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);
}



There's probably a good answer for these:

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;
}



RobboLito:

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;
}



Perhaps there's an explanation for this exact match?



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);
}



RobboLito:

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);
}



input_console() (uci.c):

Code: Select all
void input_console()
{
char string[65536];
fgets(string, 65536, stdin);
string[strlen(string) - 1] = 0;
parse(string);
}



Is there really much point to go through the eval and search? In any
case, this was probably a huge waste of time as am sure most reasonable
people recognize that Houdini base code is RobboLito."





You proved along with whining about everything that you learned how to cut and paste. Damn if I'm not impressed.
User avatar
hgm
Posts: 27796
Joined: Fri Mar 10, 2006 10:06 am
Location: Amsterdam
Full name: H G Muller

Re: Houdini with 1:1 Robbolito-code?

Post by hgm »

Well, Robbolito is pubic domain, right? So there would be nothing wrong with this.

That Houdini was not built independently from scratch through painstaking research was claer from the start. If Robbolito would not be its predecessor, there must have been another one. And where is it?
Dave Mitchell
Posts: 115
Joined: Thu Nov 25, 2010 12:16 pm

Re: Houdini with 1:1 Robbolito-code?

Post by Dave Mitchell »

Wasn't Hyatt's recent point that Robolito itself had code stolen from Rybka and possibly Fruit as well? So Robolitot never was public domain.

I believe a copyright can be lost if it is openly infringed upon, and then not defended. Certainly don't know the details, but has anyone started legal action against Robolito or any other alleged infringers?

If the copyright is "sacrificed" by non-defense, that makes the whole "clone" issue rather moot, doesn't it?
User avatar
hgm
Posts: 27796
Joined: Fri Mar 10, 2006 10:06 am
Location: Amsterdam
Full name: H G Muller

Re: Houdini with 1:1 Robbolito-code?

Post by hgm »

Well, the clone issue is not about copyright. We already know that it is possible to make engines that qualify as clones (i.e. play exactly the same) without violating any copyrights. Copyrights do not protect algorithms.

I don't know about the Robbolito-Fruit issue, as I never looked at the code. I would assume Robbolito is an easy target to expose as a copyright violation, the source code being public.
mwyoung
Posts: 2727
Joined: Wed May 12, 2010 10:00 pm

Re: Houdini with 1:1 Robbolito-code?

Post by mwyoung »

Dave Mitchell wrote:Wasn't Hyatt's recent point that Robolito itself had code stolen from Rybka and possibly Fruit as well? So Robolitot never was public domain.

I believe a copyright can be lost if it is openly infringed upon, and then not defended. Certainly don't know the details, but has anyone started legal action against Robolito or any other alleged infringers?

If the copyright is "sacrificed" by non-defense, that makes the whole "clone" issue rather moot, doesn't it?
No one has ever claimed ownership of code that Bob Hyatt says Robert Houdart stole.

Bob Hyatt suggest Robert Houdart is a criminal and Houdini 2.0 is not legal, and anyone buying Houdini 2.0 could be charge with a crime.

Bob Hyatt has no backing to make such a claim, as no one with standing has every claimed Robert Houdart stole their code.

Fact: Houdini 2.0 is a legal for sale chess product.

Fact: No one claiming ownership of code that Bob Hyatt said was stolen has every come forward. To make a charge of code theft or copyright violation against Robert Houdart and Houdini.
User avatar
hgm
Posts: 27796
Joined: Fri Mar 10, 2006 10:06 am
Location: Amsterdam
Full name: H G Muller

Re: Houdini with 1:1 Robbolito-code?

Post by hgm »

Well, the issue is not what Bob says, (which would have no legal status anyway), but whether Robbolito is an infringement on Fruit copyright. Which addresses an objective fact that should be easily verifiable by pointing out the copied pieces of source code...
mwyoung
Posts: 2727
Joined: Wed May 12, 2010 10:00 pm

Re: Houdini with 1:1 Robbolito-code?

Post by mwyoung »

hgm wrote:Well, the issue is not what Bob says, (which would have no legal status anyway), but whether Robbolito is an infringement on Fruit copyright. Which addresses an objective fact that should be easily verifiable by pointing out the copied pieces of source code...
Yes, but this only gets you part way there in regards to Houdini. The copyright holder must defend his copyright. Non copyright holders have no legal grounds to take any legal actions against a copyright violation.

So far none of this has every happend.
User avatar
hgm
Posts: 27796
Joined: Fri Mar 10, 2006 10:06 am
Location: Amsterdam
Full name: H G Muller

Re: Houdini with 1:1 Robbolito-code?

Post by hgm »

But that really tells it all, doesn't it? The FSF, being copyright holder of Fruit, would certainly take legal action on such obvious infringement on their rights as source copying in a public-domain project.

Therefore it stands to reason we assume Robbolito not to contain such code, in the absense of proof to the contrary.