2019-04-26 00:41:20 +02:00
|
|
|
#include "crc16.h"
|
|
|
|
|
|
|
|
#define CRC16_TABVAL \
|
2020-01-23 00:59:32 +00:00
|
|
|
0x0000, 0xCC01, 0xD801, 0x1400, 0xF001, 0x3C00, 0x2800, 0xE401, \
|
|
|
|
0xA001, 0x6C00, 0x7800, 0xB401, 0x5000, 0x9C01, 0x8801, 0x4400
|
2019-04-26 00:41:20 +02:00
|
|
|
|
|
|
|
|
|
|
|
// see: https://github.com/TASVideos/desmume/blob/master/desmume/src/bios.cpp#L1070tions
|
|
|
|
u16 crc16_quick(const void* src, u32 len) {
|
2020-07-23 13:46:42 -03:00
|
|
|
static const u16 tabval[] = { CRC16_TABVAL };
|
2019-04-26 00:41:20 +02:00
|
|
|
u16* data = (u16*) src;
|
|
|
|
u16 crc = 0xFFFF;
|
|
|
|
|
|
|
|
for (len >>= 1; len; len--) {
|
|
|
|
u16 curr = *(data++);
|
|
|
|
for (u32 i = 0; i < 4; i++) {
|
|
|
|
u16 tval = tabval[crc&0xF];
|
|
|
|
crc >>= 4;
|
|
|
|
crc ^= tval;
|
|
|
|
tval = tabval[(curr >> (4*i))&0xF];
|
|
|
|
crc ^= tval;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return crc;
|
|
|
|
}
|