Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/libmupen64plus/mupen64plus-video-glide64mk2/src/Glide64/CRC.cpp
2 views
1
/*
2
* Glide64 - Glide video plugin for Nintendo 64 emulators.
3
* Copyright (c) 2002 Dave2001
4
* Copyright (c) 2003-2009 Sergey 'Gonetz' Lipski
5
*
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 2 of the License, or
9
* any later version.
10
*
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
*/
20
21
//****************************************************************
22
//
23
// Glide64 - Glide Plugin for Nintendo 64 emulators
24
// Project started on December 29th, 2001
25
//
26
// Authors:
27
// Dave2001, original author, founded the project in 2001, left it in 2002
28
// Gugaman, joined the project in 2002, left it in 2002
29
// Sergey 'Gonetz' Lipski, joined the project in 2002, main author since fall of 2002
30
// Hiroshi 'KoolSmoky' Morii, joined the project in 2007
31
//
32
//****************************************************************
33
//
34
// To modify Glide64:
35
// * Write your name and (optional)email, commented by your work, so I know who did it, and so that you can find which parts you modified when it comes time to send it to me.
36
// * Do NOT send me the whole project or file that you modified. Take out your modified code sections, and tell me where to put them. If people sent the whole thing, I would have many different versions, but no idea how to combine them all.
37
//
38
//****************************************************************
39
//
40
// CRC32 calculation functions
41
//
42
// Created by Gonetz, 2004
43
//
44
//****************************************************************
45
//*
46
#define CRC32_POLYNOMIAL 0x04C11DB7
47
48
unsigned int CRCTable[ 256 ];
49
50
unsigned int Reflect( unsigned int ref, char ch )
51
{
52
unsigned int value = 0;
53
54
// Swap bit 0 for bit 7
55
// bit 1 for bit 6, etc.
56
for (char i = 1; i < (ch + 1); i++)
57
{
58
if(ref & 1)
59
value |= 1 << (ch - i);
60
ref >>= 1;
61
}
62
return value;
63
}
64
65
void CRC_BuildTable()
66
{
67
unsigned int crc;
68
69
for (unsigned i = 0; i <= 255; i++)
70
{
71
crc = Reflect( i, 8 ) << 24;
72
for (unsigned j = 0; j < 8; j++)
73
crc = (crc << 1) ^ (crc & (1 << 31) ? CRC32_POLYNOMIAL : 0);
74
75
CRCTable[i] = Reflect( crc, 32 );
76
}
77
}
78
//*/
79
//*
80
unsigned int CRC32( unsigned int crc, void *buffer, unsigned int count )
81
{
82
unsigned int orig = crc;
83
unsigned char * p = reinterpret_cast<unsigned char*>(buffer);
84
while (count--)
85
crc = (crc >> 8) ^ CRCTable[(crc & 0xFF) ^ *p++];
86
return crc ^ orig;
87
}
88
//*/
89
90
/*
91
wxUint32 CRC_Calculate( wxUint32 crc, void *buffer, wxUint32 count )
92
{
93
wxUint32 Crc32=crc;
94
__asm {
95
mov esi, buffer
96
mov ecx, count
97
mov edx, crc
98
xor eax, eax
99
100
loop1:
101
inc esi
102
mov al, dl
103
xor al, byte ptr [esi]
104
shr edx, 8
105
mov ebx, [CRCTable+eax*4]
106
xor edx, ebx
107
108
loop loop1
109
110
xor Crc32, edx
111
}
112
return Crc32;
113
}
114
*/
115
116
/*
117
unsigned int CRC_Calculate( unsigned int crc, void *buffer, unsigned int count )
118
{
119
unsigned int Crc32=crc;
120
__asm {
121
mov esi, buffer
122
mov edx, count
123
add edx, esi
124
mov ecx, crc
125
126
loop1:
127
mov bl, byte ptr [esi]
128
movzx eax, cl
129
inc esi
130
xor al, bl
131
shr ecx, 8
132
mov ebx, [CRCTable+eax*4]
133
xor ecx, ebx
134
135
cmp edx, esi
136
jne loop1
137
138
xor Crc32, ecx
139
}
140
return Crc32;
141
}
142
//*/
143
144