> 2));
$codeBytes[1] = 0xFF & (($charCodes[1] << 6) + ($charCodes[2] << 1) + ($charCodes[3] >> 4));
$codeBytes[2] = 0xFF & (($charCodes[3] << 4) + ($charCodes[4] >> 1));
$codeBytes[3] = 0xFF & (($charCodes[4] << 7) + ($charCodes[5] << 2) + ($charCodes[6] >> 3));
$codeBytes[4] = 0xFF & (($charCodes[6] << 5) + ($charCodes[7]));
$codeBytes[5] = 0xFF & (($charCodes[8] << 3) + ($charCodes[9] >> 2));
$codeBytes[6] = 0xFF & (($charCodes[9] << 6) + ($charCodes[10] << 1) + ($charCodes[11] >> 4));
$codeBytes[7] = 0xFF & (($charCodes[11] << 4) + ($charCodes[12] >> 1));
$codeBytes[8] = 0xFF & (($charCodes[12] << 7) + ($charCodes[13] << 2) + ($charCodes[14] >> 3));
$codeBytes[9] = 0xFF & (($charCodes[14] << 5) + ($charCodes[15]));
print_r($codeBytes);echo '
';
$random=$codeBytes[8] * 0x100 + $codeBytes[9];
//$r6 = 0x40D583D;
$r8 = $random;
for($count = 0; $count < 8; $count++) {
printf("%X
",$r8);
$r5 = (0x40D583D * $r8) & 0xFFFF;
$codeBytes[$count] ^= (($r8 >> 8) & 0xFF);
$r5++;
$r0 = floor($r5 / 0x5F5E100) & 0xFFFF;
$r0 = ($r0 * 0x5F5E100) & 0xFFFF;
$r8 = $r5 - $r0;
}
print_r($codeBytes);echo '
';
$driver1 = ($codeBytes[6] >> 1) & 0x1f;
$driver2 = (($codeBytes[2] << 3) + ($codeBytes[3] >> 5)) & 0x1f;
$cart = (($codeBytes[7] >> 4) + ($codeBytes[6] << 4)) & 0x1f;
$unknown1 = ($codeBytes[7] & 0xf);
$time1 = ($codeBytes[0] * 0x10000 + $codeBytes[1] * 0x100 + $codeBytes[2]) >> 5;
$time2 = (($codeBytes[4] * 0x10000 + $codeBytes[5] * 0x100 + $codeBytes[6]) >> 6) & 0x3FFFF;
$unknown2 = ($codeBytes[2] >> 2) & 0x03;
$unknown3 = ($codeBytes[2] >> 4) & 0x01;
$checksum = ($codeBytes[3] & 0x1f);
$calculatedChecksum = $unknown2 + $driver2;
$calculatedChecksum +=$unknown3;
$calculatedChecksum +=$time1;
$calculatedChecksum +=$driver1;
$calculatedChecksum +=$cart;
$calculatedChecksum +=$unknown1;
$calculatedChecksum +=$time2;
$calculatedChecksumFinal = ($calculatedChecksum) & 0xFF;
$calculatedChecksumFinal += ($calculatedChecksum >> 8) & 0xFF;
$calculatedChecksumFinal += ($calculatedChecksum >> 16) & 0xFF;
$calculatedChecksumFinal += ($calculatedChecksum >> 24) & 0xFF;
$calculatedChecksumFinal &= 0x1f;
return array(
'driver'=>$driver1,
'partner'=>$driver2,
'cart'=>$cart,
'course'=>$unknown1,
'time'=>$time1,
'lap'=>$time2,
'unknown2'=>$unknown2,
'unknown3'=>$unknown3,
'checksum'=>$checksum,
'calcchecksum'=>$calculatedChecksumFinal
);
}