CThinker wrote:This Houdini is just a cheap compile of the Ippo/Robo source code.
Below is one example of a decompiled Robolito and Houdini. The entire decompiled code is like this. You will find a one-to-one equivalence between the two.
I even found a few bugs in Robo/Ippo that were also in Houdini. Really funny. I will not disclose the bug. This way, I have an easy method of spotting these types of cheap tricks to compile Robo/Ippo and release it as something new.
Whoever did this Houdini thing is clueless about Robo/Ippo.
From the function...
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);
// etc., etc.
}
Decompiled Houdini:
Code: Select all
:00428364 8BE8 mov ebp, eax
:00428366 81E501000080 and ebp, 80000001
:0042836C 7905 jns 00428373
:0042836E 4D dec ebp
:0042836F 83CDFE or ebp, -00000002
:00428372 45 inc ebp
---------
:00428373 99 cdq
:00428374 2BC2 sub eax, edx
:00428376 D1F8 sar eax, 1
:00428378 8BD8 mov ebx, eax
:0042837A 81E301000080 and ebx, 80000001
:00428380 7905 jns 00428387
:00428382 4B dec ebx
:00428383 83CBFE or ebx, -00000002
:00428386 43 inc ebx
---------
:00428387 99 cdq
:00428388 2BC2 sub eax, edx
:0042838A 8BC8 mov ecx, eax
:0042838C D1F9 sar ecx, 1
:0042838E B856555555 mov eax, 55555556
:00428393 F7E9 imul ecx
:00428395 8BC2 mov eax, edx
:00428397 C1E81F shr eax, 1F
:0042839A 03C2 add eax, edx
:0042839C 8D1440 lea edx, dword[eax+2*eax]
:0042839F 2BCA sub ecx, edx
:004283A1 894C2418 mov dword[esp+18], ecx
:004283A5 8BC8 mov ecx, eax
:004283A7 B856555555 mov eax, 55555556
:004283AC F7E9 imul ecx
:004283AE 8BC2 mov eax, edx
:004283B0 C1E81F shr eax, 1F
:004283B3 03C2 add eax, edx
:004283B5 8D1440 lea edx, dword[eax+2*eax]
:004283B8 2BCA sub ecx, edx
:004283BA 8BF8 mov edi, eax
:004283BC 81E701000080 and edi, 80000001
:004283C2 894C2410 mov dword[esp+10], ecx
:004283C6 7905 jns 004283CD
:004283C8 4F dec edi
:004283C9 83CFFE or edi, -00000002
:004283CC 47 inc edi
---------
:004283CD 99 cdq
:004283CE 2BC2 sub eax, edx
:004283D0 D1F8 sar eax, 1
:004283D2 8BC8 mov ecx, eax
:004283D4 81E101000080 and ecx, 80000001
:004283DA 897C2448 mov dword[esp+48], edi
:004283DE 7905 jns 004283E5
:004283E0 49 dec ecx
:004283E1 83C9FE or ecx, -00000002
:004283E4 41 inc ecx
---------
:004283E5 99 cdq
:004283E6 2BC2 sub eax, edx
:004283E8 D1F8 sar eax, 1
:004283EA 894C2434 mov dword[esp+34], ecx
:004283EE 8BC8 mov ecx, eax
:004283F0 81E101000080 and ecx, 80000001
:004283F6 7905 jns 004283FD
:004283F8 49 dec ecx
:004283F9 83C9FE or ecx, -00000002
:004283FC 41 inc ecx
---------
:004283FD 99 cdq
:004283FE 2BC2 sub eax, edx
:00428400 D1F8 sar eax, 1
:00428402 894C2428 mov dword[esp+28], ecx
:00428406 8BC8 mov ecx, eax
:00428408 81E101000080 and ecx, 80000001
:0042840E 7905 jns 00428415
:00428410 49 dec ecx
:00428411 83C9FE or ecx, -00000002
:00428414 41 inc ecx
---------
:00428415 99 cdq
:00428416 2BC2 sub eax, edx
:00428418 894C2424 mov dword[esp+24], ecx
:0042841C 8BC8 mov ecx, eax
:0042841E D1F9 sar ecx, 1
:00428420 B856555555 mov eax, 55555556
:00428425 F7E9 imul ecx
:00428427 8BC2 mov eax, edx
:00428429 C1E81F shr eax, 1F
:0042842C 03C2 add eax, edx
:0042842E 8D1440 lea edx, dword[eax+2*eax]
:00428431 8BF0 mov esi, eax
:00428433 2BCA sub ecx, edx
:00428435 B856555555 mov eax, 55555556
:0042843A F7EE imul esi
:0042843C 894C241C mov dword[esp+1C], ecx
:00428440 8BCA mov ecx, edx
:00428442 C1E91F shr ecx, 1F
:00428445 03CA add ecx, edx
:00428447 8D0449 lea eax, dword[ecx+2*ecx]
:0042844A 2BF0 sub esi, eax
:0042844C B8398EE338 mov eax, 38E38E39
:00428451 F7E9 imul ecx
:00428453 D1FA sar edx, 1
:00428455 89742414 mov dword[esp+14], esi
:00428459 8BF2 mov esi, edx
:0042845B C1EE1F shr esi, 1F
:0042845E 03F2 add esi, edx
:00428460 8D14F6 lea edx, dword[esi+8*esi]
:00428463 2BCA sub ecx, edx
:00428465 B8398EE338 mov eax, 38E38E39
:0042846A F7EE imul esi
:0042846C D1FA sar edx, 1
:0042846E 8BC2 mov eax, edx
:00428470 C1E81F shr eax, 1F
:00428473 03C2 add eax, edx
:00428475 8B542410 mov edx, dword[esp+10]
:00428479 8D04C0 lea eax, dword[eax+8*eax]
:0042847C 2BF0 sub esi, eax
:0042847E 8B442424 mov eax, dword[esp+24]
:00428482 03442428 add eax, dword[esp+28]
:00428486 53 push ebx
:00428487 52 push edx
:00428488 50 push eax
:00428489 89442438 mov dword[esp+38], eax
:0042848D 8B442420 mov eax, dword[esp+20]
:00428491 50 push eax
:00428492 8B442428 mov eax, dword[esp+28]
:00428496 89742440 mov dword[esp+40], esi
:0042849A 8B542440 mov edx, dword[esp+40]
:0042849E 8B742444 mov esi, dword[esp+44]
:004284A2 52 push edx
:004284A3 8B542430 mov edx, dword[esp+30]
:004284A7 55 push ebp
:004284A8 50 push eax
:004284A9 03F7 add esi, edi
:004284AB 56 push esi
:004284AC 52 push edx
:004284AD 51 push ecx
:004284AE 894C2460 mov dword[esp+60], ecx
:004284B2 E899FCFFFF call 00428150
Decompiled Robo:
Code: Select all
:00425B49 8BD8 mov ebx, eax
:00425B4B 81E301000080 and ebx, 80000001
:00425B51 56 push esi
:00425B52 57 push edi
:00425B53 7905 jns 00425B5A
:00425B55 4B dec ebx
:00425B56 83CBFE or ebx, -00000002
:00425B59 43 inc ebx
---------
:00425B5A 99 cdq
:00425B5B 2BC2 sub eax, edx
:00425B5D D1F8 sar eax, 1
:00425B5F 8BF0 mov esi, eax
:00425B61 81E601000080 and esi, 80000001
:00425B67 7905 jns 00425B6E
:00425B69 4E dec esi
:00425B6A 83CEFE or esi, -00000002
:00425B6D 46 inc esi
---------
:00425B6E 99 cdq
:00425B6F 2BC2 sub eax, edx
:00425B71 8BC8 mov ecx, eax
:00425B73 D1F9 sar ecx, 1
:00425B75 B856555555 mov eax, 55555556
:00425B7A F7E9 imul ecx
:00425B7C 8BC2 mov eax, edx
:00425B7E C1E81F shr eax, 1F
:00425B81 03C2 add eax, edx
:00425B83 8D1440 lea edx, dword[eax+2*eax]
:00425B86 2BCA sub ecx, edx
:00425B88 894C2418 mov dword[esp+18], ecx
:00425B8C 8BC8 mov ecx, eax
:00425B8E B856555555 mov eax, 55555556
:00425B93 F7E9 imul ecx
:00425B95 8BC2 mov eax, edx
:00425B97 C1E81F shr eax, 1F
:00425B9A 03C2 add eax, edx
:00425B9C 8D1440 lea edx, dword[eax+2*eax]
:00425B9F 2BCA sub ecx, edx
:00425BA1 8BE8 mov ebp, eax
:00425BA3 81E501000080 and ebp, 80000001
:00425BA9 894C2414 mov dword[esp+14], ecx
:00425BAD 7905 jns 00425BB4
:00425BAF 4D dec ebp
:00425BB0 83CDFE or ebp, -00000002
:00425BB3 45 inc ebp
---------
:00425BB4 99 cdq
:00425BB5 2BC2 sub eax, edx
:00425BB7 D1F8 sar eax, 1
:00425BB9 8BC8 mov ecx, eax
:00425BBB 81E101000080 and ecx, 80000001
:00425BC1 7905 jns 00425BC8
:00425BC3 49 dec ecx
:00425BC4 83C9FE or ecx, -00000002
:00425BC7 41 inc ecx
---------
:00425BC8 99 cdq
:00425BC9 2BC2 sub eax, edx
:00425BCB D1F8 sar eax, 1
:00425BCD 894C2438 mov dword[esp+38], ecx
:00425BD1 8BC8 mov ecx, eax
:00425BD3 81E101000080 and ecx, 80000001
:00425BD9 7905 jns 00425BE0
:00425BDB 49 dec ecx
:00425BDC 83C9FE or ecx, -00000002
:00425BDF 41 inc ecx
---------
:00425BE0 99 cdq
:00425BE1 2BC2 sub eax, edx
:00425BE3 D1F8 sar eax, 1
:00425BE5 894C242C mov dword[esp+2C], ecx
:00425BE9 8BC8 mov ecx, eax
:00425BEB 81E101000080 and ecx, 80000001
:00425BF1 7905 jns 00425BF8
:00425BF3 49 dec ecx
:00425BF4 83C9FE or ecx, -00000002
:00425BF7 41 inc ecx
---------
:00425BF8 99 cdq
:00425BF9 2BC2 sub eax, edx
:00425BFB 894C2428 mov dword[esp+28], ecx
:00425BFF 8BC8 mov ecx, eax
:00425C01 D1F9 sar ecx, 1
:00425C03 B856555555 mov eax, 55555556
:00425C08 F7E9 imul ecx
:00425C0A 8BC2 mov eax, edx
:00425C0C C1E81F shr eax, 1F
:00425C0F 03C2 add eax, edx
:00425C11 8D1440 lea edx, dword[eax+2*eax]
:00425C14 8BF8 mov edi, eax
:00425C16 2BCA sub ecx, edx
:00425C18 B856555555 mov eax, 55555556
:00425C1D F7EF imul edi
:00425C1F 894C2420 mov dword[esp+20], ecx
:00425C23 8BCA mov ecx, edx
:00425C25 C1E91F shr ecx, 1F
:00425C28 03CA add ecx, edx
:00425C2A 8D0449 lea eax, dword[ecx+2*ecx]
:00425C2D 2BF8 sub edi, eax
:00425C2F B8398EE338 mov eax, 38E38E39
:00425C34 F7E9 imul ecx
:00425C36 D1FA sar edx, 1
:00425C38 897C241C mov dword[esp+1C], edi
:00425C3C 8BFA mov edi, edx
:00425C3E C1EF1F shr edi, 1F
:00425C41 03FA add edi, edx
:00425C43 8D14FF lea edx, dword[edi+8*edi]
:00425C46 2BCA sub ecx, edx
:00425C48 B8398EE338 mov eax, 38E38E39
:00425C4D F7EF imul edi
:00425C4F D1FA sar edx, 1
:00425C51 8BC2 mov eax, edx
:00425C53 C1E81F shr eax, 1F
:00425C56 03C2 add eax, edx
:00425C58 8B542438 mov edx, dword[esp+38]
:00425C5C 8D04C0 lea eax, dword[eax+8*eax]
:00425C5F 2BF8 sub edi, eax
:00425C61 8B442428 mov eax, dword[esp+28]
:00425C65 56 push esi
:00425C66 897C2438 mov dword[esp+38], edi
:00425C6A 8D3C2A lea edi, dword[edx+ebp]
:00425C6D 8B542430 mov edx, dword[esp+30]
:00425C71 03C2 add eax, edx
:00425C73 8B542418 mov edx, dword[esp+18]
:00425C77 52 push edx
:00425C78 8B54243C mov edx, dword[esp+3C]
:00425C7C 50 push eax
:00425C7D 8944243C mov dword[esp+3C], eax
:00425C81 8B442428 mov eax, dword[esp+28]
:00425C85 50 push eax
:00425C86 8B442428 mov eax, dword[esp+28]
:00425C8A 52 push edx
:00425C8B 8B542434 mov edx, dword[esp+34]
:00425C8F 53 push ebx
:00425C90 50 push eax
:00425C91 57 push edi
:00425C92 52 push edx
:00425C93 51 push ecx
:00425C94 894C2464 mov dword[esp+64], ecx
:00425C98 E8A3FCFFFF call 00425940
[/code]