This algorith does not calculate the CRC32 as defined by CCITT. As I see it the table generation code is wrong - it will only create values with upper nibble = 0 which leads to all CRC's having upper nibble = F which obviously is wrong.
Unfortunately I do not have the code or theory for the table generation but the correct table is (as defined in assembler where i once implemented it, LONG does put the left byte in highest address, so longs can be read directly)
Crc32_Table: LONG 000h,000h,000h,000h ; 00 LONG 077h,007h,030h,096h LONG 0eeh,00eh,061h,02ch LONG 099h,009h,051h,0bah
LONG 007h,06dh,0c4h,019h ; 04 LONG 070h,06ah,0f4h,08fh LONG 0e9h,063h,0a5h,035h LONG 09eh,064h,095h,0a3h
LONG 00eh,0dbh,088h,032h ; 08 LONG 079h,0dch,0b8h,0a4h LONG 0e0h,0d5h,0e9h,01eh LONG 097h,0d2h,0d9h,088h
LONG 009h,0b6h,04ch,02bh ; 0c LONG 07eh,0b1h,07ch,0bdh LONG 0e7h,0b8h,02dh,007h LONG 090h,0bfh,01dh,091h
LONG 01dh,0b7h,010h,064h ; 10 LONG 06ah,0b0h,020h,0f2h LONG 0f3h,0b9h,071h,048h LONG 084h,0beh,041h,0deh
LONG 01ah,0dah,0d4h,07dh ; 14 LONG 06dh,0ddh,0e4h,0ebh LONG 0f4h,0d4h,0b5h,051h LONG 083h,0d3h,085h,0c7h
LONG 013h,06ch,098h,056h ; 18 LONG 064h,06bh,0a8h,0c0h LONG 0fdh,062h,0f9h,07ah LONG 08ah,065h,0c9h,0ech
LONG 014h,001h,05ch,04fh ; 1c LONG 063h,006h,06ch,0d9h LONG 0fah,00fh,03dh,063h LONG 08dh,008h,00dh,0f5h
LONG 03bh,06eh,020h,0c8h ; 20 LONG 04ch,069h,010h,05eh LONG 0d5h,060h,041h,0e4h LONG 0a2h,067h,071h,072h
LONG 03ch,003h,0e4h,0d1h ; 24 LONG 04bh,004h,0d4h,047h LONG 0d2h,00dh,085h,0fdh LONG 0a5h,00ah,0b5h,06bh
LONG 035h,0b5h,0a8h,0fah ; 28 LONG 042h,0b2h,098h,06ch LONG 0dbh,0bbh,0c9h,0d6h LONG 0ach,0bch,0f9h,040h
LONG 032h,0d8h,06ch,0e3h ; 2c LONG 045h,0dfh,05ch,075h LONG 0dch,0d6h,00dh,0cfh LONG 0abh,0d1h,03dh,059h
LONG 026h,0d9h,030h,0ach ; 30 LONG 051h,0deh,000h,03ah LONG 0c8h,0d7h,051h,080h LONG 0bfh,0d0h,061h,016h
LONG 021h,0b4h,0f4h,0b5h ; 34 LONG 056h,0b3h,0c4h,023h LONG 0cfh,0bah,095h,099h LONG 0b8h,0bdh,0a5h,00fh
LONG 028h,002h,0b8h,09eh ; 38 LONG 05fh,005h,088h,008h LONG 0c6h,00ch,0d9h,0b2h LONG 0b1h,00bh,0e9h,024h
LONG 02fh,06fh,07ch,087h ; 3c LONG 058h,068h,04ch,011h LONG 0c1h,061h,01dh,0abh LONG 0b6h,066h,02dh,03dh
LONG 076h,0dch,041h,090h ; 40 LONG 001h,0dbh,071h,006h LONG 098h,0d2h,020h,0bch LONG 0efh,0d5h,010h,02ah
LONG 071h,0b1h,085h,089h ; 44 LONG 006h,0b6h,0b5h,01fh LONG 09fh,0bfh,0e4h,0a5h LONG 0e8h,0b8h,0d4h,033h
LONG 078h,007h,0c9h,0a2h ; 48 LONG 00fh,000h,0f9h,034h LONG 096h,009h,0a8h,08eh LONG 0e1h,00eh,098h,018h
LONG 07fh,06ah,00dh,0bbh ; 4c LONG 008h,06dh,03dh,02dh LONG 091h,064h,06ch,097h LONG 0e6h,063h,05ch,001h
LONG 06bh,06bh,051h,0f4h ; 50 LONG 01ch,06ch,061h,062h LONG 085h,065h,030h,0d8h LONG 0f2h,062h,000h,04eh
LONG 06ch,006h,095h,0edh ; 54 LONG 01bh,001h,0a5h,07bh LONG 082h,008h,0f4h,0c1h LONG 0f5h,00fh,0c4h,057h
LONG 065h,0b0h,0d9h,0c6h ; 58 LONG 012h,0b7h,0e9h,050h LONG 08bh,0beh,0b8h,0eah LONG 0fch,0b9h,088h,07ch
LONG 062h,0ddh,01dh,0dfh ; 5c LONG 015h,0dah,02dh,049h LONG 08ch,0d3h,07ch,0f3h LONG 0fbh,0d4h,04ch,065h
LONG 04dh,0b2h,061h,058h ; 60 LONG 03ah,0b5h,051h,0ceh LONG 0a3h,0bch,000h,074h LONG 0d4h,0bbh,030h,0e2h
LONG 04ah,0dfh,0a5h,041h ; 64 LONG 03dh,0d8h,095h,0d7h LONG 0a4h,0d1h,0c4h,06dh LONG 0d3h,0d6h,0f4h,0fbh
LONG 043h,069h,0e9h,06ah ; 68 LONG 034h,06eh,0d9h,0fch LONG 0adh,067h,088h,046h LONG 0dah,060h,0b8h,0d0h
LONG 044h,004h,02dh,073h ; 6c LONG 033h,003h,01dh,0e5h LONG 0aah,00ah,04ch,05fh LONG 0ddh,00dh,07ch,0c9h
LONG 050h,005h,071h,03ch ; 70 LONG 027h,002h,041h,0aah LONG 0beh,00bh,010h,010h LONG 0c9h,00ch,020h,086h
LONG 057h,068h,0b5h,025h ; 74 LONG 020h,06fh,085h,0b3h LONG 0b9h,066h,0d4h,009h LONG 0ceh,061h,0e4h,09fh
LONG 05eh,0deh,0f9h,00eh ; 78 LONG 029h,0d9h,0c9h,098h LONG 0b0h,0d0h,098h,022h LONG 0c7h,0d7h,0a8h,0b4h
LONG 059h,0b3h,03dh,017h ; 7c LONG 02eh,0b4h,00dh,081h LONG 0b7h,0bdh,05ch,03bh LONG 0c0h,0bah,06ch,0adh
LONG 0edh,0b8h,083h,020h ; 80 LONG 09ah,0bfh,0b3h,0b6h LONG 003h,0b6h,0e2h,00ch LONG 074h,0b1h,0d2h,09ah
LONG 0eah,0d5h,047h,039h ; 84 LONG 09dh,0d2h,077h,0afh LONG 004h,0dbh,026h,015h LONG 073h,0dch,016h,083h
LONG 0e3h,063h,00bh,012h ; 88 LONG 094h,064h,03bh,084h LONG 00dh,06dh,06ah,03eh LONG 07ah,06ah,05ah,0a8h
LONG 0e4h,00eh,0cfh,00bh ; 8c LONG 093h,009h,0ffh,09dh LONG 00ah,000h,0aeh,027h LONG 07dh,007h,09eh,0b1h
LONG 0f0h,00fh,093h,044h ; 90 LONG 087h,008h,0a3h,0d2h LONG 01eh,001h,0f2h,068h LONG 069h,006h,0c2h,0feh
LONG 0f7h,062h,057h,05dh ; 94 LONG 080h,065h,067h,0cbh LONG 019h,06ch,036h,071h LONG 06eh,06bh,006h,0e7h
LONG 0feh,0d4h,01bh,076h ; 98 LONG 089h,0d3h,02bh,0e0h LONG 010h,0dah,07ah,05ah LONG 067h,0ddh,04ah,0cch
LONG 0f9h,0b9h,0dfh,06fh ; 9c LONG 08eh,0beh,0efh,0f9h LONG 017h,0b7h,0beh,043h LONG 060h,0b0h,08eh,0d5h
LONG 0d6h,0d6h,0a3h,0e8h ; a0 LONG 0a1h,0d1h,093h,07eh LONG 038h,0d8h,0c2h,0c4h LONG 04fh,0dfh,0f2h,052h
LONG 0d1h,0bbh,067h,0f1h ; a4 LONG 0a6h,0bch,057h,067h LONG 03fh,0b5h,006h,0ddh LONG 048h,0b2h,036h,04bh
LONG 0d8h,00dh,02bh,0dah ; a8 LONG 0afh,00ah,01bh,04ch LONG 036h,003h,04ah,0f6h LONG 041h,004h,07ah,060h
LONG 0dfh,060h,0efh,0c3h ; ac LONG 0a8h,067h,0dfh,055h LONG 031h,06eh,08eh,0efh LONG 046h,069h,0beh,079h
LONG 0cbh,061h,0b3h,08ch ; b0 LONG 0bch,066h,083h,01ah LONG 025h,06fh,0d2h,0a0h LONG 052h,068h,0e2h,036h
LONG 0cch,00ch,077h,095h ; b4 LONG 0bbh,00bh,047h,003h LONG 022h,002h,016h,0b9h LONG 055h,005h,026h,02fh
LONG 0c5h,0bah,03bh,0beh ; b8 LONG 0b2h,0bdh,00bh,028h LONG 02bh,0b4h,05ah,092h LONG 05ch,0b3h,06ah,004h
LONG 0c2h,0d7h,0ffh,0a7h ; bc LONG 0b5h,0d0h,0cfh,031h LONG 02ch,0d9h,09eh,08bh LONG 05bh,0deh,0aeh,01dh
LONG 09bh,064h,0c2h,0b0h ; c0 LONG 0ech,063h,0f2h,026h LONG 075h,06ah,0a3h,09ch LONG 002h,06dh,093h,00ah
LONG 09ch,009h,006h,0a9h ; c4 LONG 0ebh,00eh,036h,03fh LONG 072h,007h,067h,085h LONG 005h,000h,057h,013h
LONG 095h,0bfh,04ah,082h ; c8 LONG 0e2h,0b8h,07ah,014h LONG 07bh,0b1h,02bh,0aeh LONG 00ch,0b6h,01bh,038h
LONG 092h,0d2h,08eh,09bh ; cc LONG 0e5h,0d5h,0beh,00dh LONG 07ch,0dch,0efh,0b7h LONG 00bh,0dbh,0dfh,021h
LONG 086h,0d3h,0d2h,0d4h ; d0 LONG 0f1h,0d4h,0e2h,042h LONG 068h,0ddh,0b3h,0f8h LONG 01fh,0dah,083h,06eh
LONG 081h,0beh,016h,0cdh ; d4 LONG 0f6h,0b9h,026h,05bh LONG 06fh,0b0h,077h,0e1h LONG 018h,0b7h,047h,077h
LONG 088h,008h,05ah,0e6h ; d8 LONG 0ffh,00fh,06ah,070h LONG 066h,006h,03bh,0cah LONG 011h,001h,00bh,05ch
LONG 08fh,065h,09eh,0ffh ; dc LONG 0f8h,062h,0aeh,069h LONG 061h,06bh,0ffh,0d3h LONG 016h,06ch,0cfh,045h
LONG 0a0h,00ah,0e2h,078h ; e0 LONG 0d7h,00dh,0d2h,0eeh LONG 04eh,004h,083h,054h LONG 039h,003h,0b3h,0c2h
LONG 0a7h,067h,026h,061h ; e4 LONG 0d0h,060h,016h,0f7h LONG 049h,069h,047h,04dh LONG 03eh,06eh,077h,0dbh
LONG 0aeh,0d1h,06ah,04ah ; e8 LONG 0d9h,0d6h,05ah,0dch LONG 040h,0dfh,00bh,066h LONG 037h,0d8h,03bh,0f0h
LONG 0a9h,0bch,0aeh,053h ; ec LONG 0deh,0bbh,09eh,0c5h LONG 047h,0b2h,0cfh,07fh LONG 030h,0b5h,0ffh,0e9h
LONG 0bdh,0bdh,0f2h,01ch ; f0 LONG 0cah,0bah,0c2h,08ah LONG 053h,0b3h,093h,030h LONG 024h,0b4h,0a3h,0a6h
LONG 0bah,0d0h,036h,005h ; f4 LONG 0cdh,0d7h,006h,093h LONG 054h,0deh,057h,029h LONG 023h,0d9h,067h,0bfh
LONG 0b3h,066h,07ah,02eh ; f8 LONG 0c4h,061h,04ah,0b8h LONG 05dh,068h,01bh,002h LONG 02ah,06fh,02bh,094h
LONG 0b4h,00bh,0beh,037h ; fc LONG 0c3h,00ch,08eh,0a1h LONG 05ah,005h,0dfh,01bh LONG 02dh,002h,0efh,08dh Regards Claus
|