The first commit
This commit is contained in:
47
src/core1/code_1E6E0.c
Normal file
47
src/core1/code_1E6E0.c
Normal file
@@ -0,0 +1,47 @@
|
||||
#include <ultra64.h>
|
||||
#include "functions.h"
|
||||
#include "variables.h"
|
||||
|
||||
// transform seed (in mips3 file)
|
||||
u32 func_8025C29C(u32 *seed);
|
||||
|
||||
void glcrc_calc_checksum(void *start, void *end, u32 checksum[2])
|
||||
{
|
||||
u8 *p;
|
||||
|
||||
u32 shift = 0;
|
||||
|
||||
u64 seed = 0x8F809F473108B3C1;
|
||||
|
||||
u32 crc1 = 0;
|
||||
u32 crc2 = 0;
|
||||
|
||||
u32 tmp;
|
||||
|
||||
// CRC1: Iterate forwards over bytes
|
||||
for (p = start; (void *)p < end; p++)
|
||||
{
|
||||
seed += *p << (shift & 15);
|
||||
|
||||
tmp = func_8025C29C(&seed);
|
||||
|
||||
shift += 7;
|
||||
|
||||
crc1 ^= tmp;
|
||||
}
|
||||
|
||||
// CRC2: Iterate backwards over bytes
|
||||
for (p = (u8 *)end - 1; (void *)p >= start; p--)
|
||||
{
|
||||
seed += *p << (shift & 15);
|
||||
|
||||
tmp = func_8025C29C(&seed);
|
||||
|
||||
shift += 3;
|
||||
|
||||
crc2 ^= tmp;
|
||||
}
|
||||
|
||||
checksum[0] = crc1;
|
||||
checksum[1] = crc2;
|
||||
}
|
Reference in New Issue
Block a user