Grazie oregon
in effetti così funziona e risolve anche il problema dei caratteri 0C 0D 0E 0F ecc stampati male
ecco il codice corretto ed il risultato il mio scopo era tradure in VB6 questo.
forse c' era un modo più semplice, hai qualche idea ?
FUNZIONI PER IL CALCOLO DI CRC - Con tabella
Tutti i possibili valori CRC sono precaricati in due schieramenti, che sono semplicemente indicizzati mentre
la funzione incrementa attraverso il buffer del messaggio. Uno schieramento contiene tutti i 256 valori CRC
possibili per il byte high del campo CRC a 16 bit, e l’altro schieramento contiene tutti i valori per il byte low.
Indicizzando in questo modo il CRC è possibile avere un’esecuzione più veloce rispetto a quella ottenuta dal
calcolo di un nuovo valore CRC con ogni carattere nuovo dal buffer del messaggio.
/*CRC table for calculate with polynom 0xA001 with init value 0xFFFF, High half word*/
rom unsigned char CRC_Table_Hi[] = {
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40
};
/*CRC table for calculate with polynom 0xA001 with init value 0xFFFF, Low half word*/
rom unsigned char CRC_Table_Lo[] = {
0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4,
0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD,
0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7,
0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE,
0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2,
0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB,
0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91,
0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88,
0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80,
0x40
};
unsigned short ModBus_CRC16( unsigned char * Buffer, unsigned short Length )
{
unsigned char CRCHi = 0xFF;
unsigned char CRCLo = 0xFF;
int Index;
unsigned short ret;
while( Length-- )
{
Index = CRCLo ^ *Buffer++ ;
CRCLo = CRCHi ^ CRC_Table_Hi[Index];
CRCHi = CRC_Table_Lo[Index];
}
ret=((unsigned short)CRCHi << 8);
ret|= (unsigned short)CRCLo;
return ret;
}
'CRC table for calculate with polynom 0xA001 with init value 0xFFFF, High half word
Public CRCTH(255) As Byte
'CRC table for calculate with polynom 0xA001 with init value 0xFFFF, Low half word
Public CRCTL(255) As Byte
non riuscendo a passare i buffer delle seriali ho creato tre funzioni diverse per le tre seriali
Function calccrc1(Lenght, mode) As Long
Dim CRCHi As Byte
Dim CRCLo As Byte
Dim Index As Byte
Dim i As Byte
Dim curcrc As Long
CRCHi = 255
CRCLo = 255
i = 0
If mode = 0 Then ' trasmit
While (i < Lenght)
Index = CRCLo Xor buftc1(i)
CRCLo = CRCHi Xor CRCTH(Index)
CRCHi = CRCTL(Index)
i = i + 1
Wend
Else
While (i < Lenght - 2)
Index = CRCLo Xor bufrc1(i)
CRCLo = CRCHi Xor CRCTH(Index)
CRCHi = CRCTL(Index)
i = i + 1
Wend
If ((CRCLo = bufrc1(i)) And (CRCHi = bufrc1(i + 1))) Then
crcok1 = True
Else
crcok1 = False
End If
End If
crch1 = CRCHi
crcl1 = CRCLo
curcrc = 256
curcrc = curcrc * CRCHi + CRCLo
calccrc1 = curcrc
End Function
Function calccrc2(Lenght, mode) As Long
Dim CRCHi As Byte
Dim CRCLo As Byte
Dim Index As Byte
Dim i As Byte
Dim curcrc As Long
CRCHi = 255
CRCLo = 255
i = 0
If mode = 0 Then ' trasmit
While (i < Lenght)
Index = CRCLo Xor buftc2(i)
CRCLo = CRCHi Xor CRCTH(Index)
CRCHi = CRCTL(Index)
i = i + 1
Wend
Else
While (i < Lenght - 2)
Index = CRCLo Xor bufrc2(i)
CRCLo = CRCHi Xor CRCTH(Index)
CRCHi = CRCTL(Index)
i = i + 1
Wend
If ((CRCLo = bufrc2(i)) And (CRCHi = bufrc2(i + 1))) Then
crcok2 = True
Else
crcok2 = False
End If
End If
crch2 = CRCHi
crcl2 = CRCLo
curcrc = 256
curcrc = curcrc * CRCHi + CRCLo
calccrc2 = curcrc
End Function
Function calccrc3(Lenght, mode) As Long
Dim CRCHi As Byte
Dim CRCLo As Byte
Dim Index As Byte
Dim i As Byte
Dim curcrc As Long
CRCHi = 255
CRCLo = 255
i = 0
If mode = 0 Then ' trasmit
While (i < Lenght)
Index = CRCLo Xor buftc3(i)
CRCLo = CRCHi Xor CRCTH(Index)
CRCHi = CRCTL(Index)
i = i + 1
Wend
Else
While (i < Lenght - 2)
Index = CRCLo Xor bufrc3(i)
CRCLo = CRCHi Xor CRCTH(Index)
CRCHi = CRCTL(Index)
i = i + 1
Wend
If ((CRCLo = bufrc3(i)) And (CRCHi = bufrc3(i + 1))) Then
crcok3 = True
Else
crcok3 = False
End If
End If
crch3 = CRCHi
crcl3 = CRCLo
curcrc = 256
curcrc = curcrc * CRCHi + CRCLo
calccrc3 = curcrc
End Function
b = 0
x = 0
tablehfile = App.Path & "\" & "TABLEHfile.txt"
Open tablehfile For Output As #1
Print #1, Format(x, "000"); ") ";
For x = 0 To 255
b = b + 1
Print #1, Format(CRCTH(x), "000"); " ";
'Debug.Print Format(x, "000"); " "; Format(CRCTH(x), "000")
If b = 15 Then
Print #1, vbCrLf
Print #1, Format(x + 1, "000"); ") ";
b = 0
End If
Next x
Print #1, vbCrLf
b = 0
x = 0
Print #1, Format(x, "000"); ") ";
For x = 0 To 255
b = b + 1
'Print #1, Format(Hex(CRCTH(x)), "00"); " ";
Print #1, Right("00" & Hex(CRCTH(x)), 2); " ";
'Debug.Print Format(x, "000"); " "; Format(CRCTH(x), "000")
If b = 15 Then
Print #1, vbCrLf
Print #1, Format(x + 1, "000"); ") ";
b = 0
End If
Next x
Close #1
b = 0
x = 0
tablelfile = App.Path & "\" & "TABLELfile.txt"
Open tablelfile For Output As #1
Print #1, Format(x, "000"); ") ";
For x = 0 To 255
b = b + 1
Print #1, Format(CRCTL(x), "000"); " ";
If b = 15 Then
Print #1, vbCrLf
Print #1, Format(x + 1, "000"); ") ";
b = 0
End If
Next x
Print #1, vbCrLf
b = 0
x = 0
Print #1, Format(x, "000"); ") ";
For x = 0 To 255
b = b + 1
'Print #1, Format(Hex(CRCTL(x)), "00"); " ";
Print #1, Right("00" & Hex(CRCTL(x)), 2); " ";
If b = 15 Then
Print #1, vbCrLf
Print #1, Format(x + 1, "000"); ") ";
b = 0
End If
Next x
Close #1
aggiungo anche l' inizializzazione degli array
'CRC table for calculate with polynom 0xA001 with init value 0xFFFF, High half word
CRCTH(0) = 0
CRCTH(1) = 193
CRCTH(2) = 129
CRCTH(3) = 64
CRCTH(4) = 1
CRCTH(5) = 192
CRCTH(6) = 128
CRCTH(7) = 65
CRCTH(8) = 1
CRCTH(9) = 192
CRCTH(10) = 128
CRCTH(11) = 65
CRCTH(12) = 0
CRCTH(13) = 193
CRCTH(14) = 129
CRCTH(15) = 64
CRCTH(16) = 1
CRCTH(17) = 192
CRCTH(18) = 128
CRCTH(19) = 65
CRCTH(20) = 0
CRCTH(21) = 193
CRCTH(22) = 129
CRCTH(23) = 64
CRCTH(24) = 0
CRCTH(25) = 193
CRCTH(26) = 129
CRCTH(27) = 64
CRCTH(28) = 1
CRCTH(29) = 192
CRCTH(30) = 128
CRCTH(31) = 65
CRCTH(32) = 1
CRCTH(33) = 192
CRCTH(34) = 128
CRCTH(35) = 65
CRCTH(36) = 0
CRCTH(37) = 193
CRCTH(38) = 129
CRCTH(39) = 64
CRCTH(40) = 0
CRCTH(41) = 193
CRCTH(42) = 129
CRCTH(43) = 64
CRCTH(44) = 1
CRCTH(45) = 192
CRCTH(46) = 128
CRCTH(47) = 65
CRCTH(48) = 0
CRCTH(49) = 193
CRCTH(50) = 129
CRCTH(51) = 64
CRCTH(52) = 1
CRCTH(53) = 192
CRCTH(54) = 128
CRCTH(55) = 65
CRCTH(56) = 1
CRCTH(57) = 192
CRCTH(58) = 128
CRCTH(59) = 65
CRCTH(60) = 0
CRCTH(61) = 193
CRCTH(62) = 129
CRCTH(63) = 64
CRCTH(64) = 1
CRCTH(65) = 192
CRCTH(66) = 128
CRCTH(67) = 65
CRCTH(68) = 0
CRCTH(69) = 193
CRCTH(70) = 129
CRCTH(71) = 64
CRCTH(72) = 0
CRCTH(73) = 193
CRCTH(74) = 129
CRCTH(75) = 64
CRCTH(76) = 1
CRCTH(77) = 192
CRCTH(78) = 128
CRCTH(79) = 65
CRCTH(80) = 0
CRCTH(81) = 193
CRCTH(82) = 129
CRCTH(83) = 64
CRCTH(84) = 1
CRCTH(85) = 192
CRCTH(86) = 128
CRCTH(87) = 65
CRCTH(88) = 1
CRCTH(89) = 192
CRCTH(90) = 128
CRCTH(91) = 65
CRCTH(92) = 0
CRCTH(93) = 193
CRCTH(94) = 129
CRCTH(95) = 64
CRCTH(96) = 0
CRCTH(97) = 193
CRCTH(98) = 129
CRCTH(99) = 64
CRCTH(100) = 1
CRCTH(101) = 192
CRCTH(102) = 128
CRCTH(103) = 65
CRCTH(104) = 1
CRCTH(105) = 192
CRCTH(106) = 128
CRCTH(107) = 65
CRCTH(108) = 0
CRCTH(109) = 193
CRCTH(110) = 129
CRCTH(111) = 64
CRCTH(112) = 1
CRCTH(113) = 192
CRCTH(114) = 128
CRCTH(115) = 65
CRCTH(116) = 0
CRCTH(117) = 193
CRCTH(118) = 129
CRCTH(119) = 64
CRCTH(120) = 0
CRCTH(121) = 193
CRCTH(122) = 129
CRCTH(123) = 64
CRCTH(124) = 1
CRCTH(125) = 192
CRCTH(126) = 128
CRCTH(127) = 65
CRCTH(128) = 1
CRCTH(129) = 192
CRCTH(130) = 128
CRCTH(131) = 65
CRCTH(132) = 0
CRCTH(133) = 193
CRCTH(134) = 129
CRCTH(135) = 64
CRCTH(136) = 0
CRCTH(137) = 193
CRCTH(138) = 129
CRCTH(139) = 64
CRCTH(140) = 1
CRCTH(141) = 192
CRCTH(142) = 128
CRCTH(143) = 65
CRCTH(144) = 0
CRCTH(145) = 193
CRCTH(146) = 129
CRCTH(147) = 64
CRCTH(148) = 1
CRCTH(149) = 192
CRCTH(150) = 128
CRCTH(151) = 65
CRCTH(152) = 1
CRCTH(153) = 192
CRCTH(154) = 128
CRCTH(155) = 65
CRCTH(156) = 0
CRCTH(157) = 193
CRCTH(158) = 129
CRCTH(159) = 64
CRCTH(160) = 0
CRCTH(161) = 193
CRCTH(162) = 129
CRCTH(163) = 64
CRCTH(164) = 1
CRCTH(165) = 192
CRCTH(166) = 128
CRCTH(167) = 65
CRCTH(168) = 1
CRCTH(169) = 192
CRCTH(170) = 128
CRCTH(171) = 65
CRCTH(172) = 0
CRCTH(173) = 193
CRCTH(174) = 129
CRCTH(175) = 64
CRCTH(176) = 1
CRCTH(177) = 192
CRCTH(178) = 128
CRCTH(179) = 65
CRCTH(180) = 0
CRCTH(181) = 193
CRCTH(182) = 129
CRCTH(183) = 64
CRCTH(184) = 0
CRCTH(185) = 193
CRCTH(186) = 129
CRCTH(187) = 64
CRCTH(188) = 1
CRCTH(189) = 192
CRCTH(190) = 128
CRCTH(191) = 65
CRCTH(192) = 0
CRCTH(193) = 193
CRCTH(194) = 129
CRCTH(195) = 64
CRCTH(196) = 1
CRCTH(197) = 192
CRCTH(198) = 128
CRCTH(199) = 65
CRCTH(200) = 1
CRCTH(201) = 192
CRCTH(202) = 128
CRCTH(203) = 65
CRCTH(204) = 0
CRCTH(205) = 193
CRCTH(206) = 129
CRCTH(207) = 64
CRCTH(208) = 1
CRCTH(209) = 192
CRCTH(210) = 128
CRCTH(211) = 65
CRCTH(212) = 0
CRCTH(213) = 193
CRCTH(214) = 129
CRCTH(215) = 64
CRCTH(216) = 0
CRCTH(217) = 193
CRCTH(218) = 129
CRCTH(219) = 64
CRCTH(220) = 1
CRCTH(221) = 192
CRCTH(222) = 128
CRCTH(223) = 65
CRCTH(224) = 1
CRCTH(225) = 192
CRCTH(226) = 128
CRCTH(227) = 65
CRCTH(228) = 0
CRCTH(229) = 193
CRCTH(230) = 129
CRCTH(231) = 64
CRCTH(232) = 0
CRCTH(233) = 193
CRCTH(234) = 129
CRCTH(235) = 64
CRCTH(236) = 1
CRCTH(237) = 192
CRCTH(238) = 128
CRCTH(239) = 65
CRCTH(240) = 0
CRCTH(241) = 193
CRCTH(242) = 129
CRCTH(243) = 64
CRCTH(244) = 1
CRCTH(245) = 192
CRCTH(246) = 128
CRCTH(247) = 65
CRCTH(248) = 1
CRCTH(249) = 192
CRCTH(250) = 128
CRCTH(251) = 65
CRCTH(252) = 0
CRCTH(253) = 193
CRCTH(254) = 129
CRCTH(255) = 64
'CRC table for calculate with polynom 0xA001 with init value 0xFFFF, Low half word
CRCTL(0) = 0
CRCTL(1) = 192
CRCTL(2) = 193
CRCTL(3) = 1
CRCTL(4) = 195
CRCTL(5) = 3
CRCTL(6) = 2
CRCTL(7) = 194
CRCTL(8) = 198
CRCTL(9) = 6
CRCTL(10) = 7
CRCTL(11) = 199
CRCTL(12) = 5
CRCTL(13) = 197
CRCTL(14) = 196
CRCTL(15) = 4
CRCTL(16) = 204
CRCTL(17) = 12
CRCTL(18) = 13
CRCTL(19) = 205
CRCTL(20) = 15
CRCTL(21) = 207
CRCTL(22) = 206
CRCTL(23) = 14
CRCTL(24) = 10
CRCTL(25) = 202
CRCTL(26) = 203
CRCTL(27) = 11
CRCTL(28) = 201
CRCTL(29) = 9
CRCTL(30) = 8
CRCTL(31) = 200
CRCTL(32) = 216
CRCTL(33) = 24
CRCTL(34) = 25
CRCTL(35) = 217
CRCTL(36) = 27
CRCTL(37) = 219
CRCTL(38) = 218
CRCTL(39) = 26
CRCTL(40) = 30
CRCTL(41) = 222
CRCTL(42) = 223
CRCTL(43) = 31
CRCTL(44) = 221
CRCTL(45) = 29
CRCTL(46) = 28
CRCTL(47) = 220
CRCTL(48) = 20
CRCTL(49) = 212
CRCTL(50) = 213
CRCTL(51) = 21
CRCTL(52) = 215
CRCTL(53) = 23
CRCTL(54) = 22
CRCTL(55) = 214
CRCTL(56) = 210
CRCTL(57) = 18
CRCTL(58) = 19
CRCTL(59) = 211
CRCTL(60) = 17
CRCTL(61) = 209
CRCTL(62) = 208
CRCTL(63) = 16
CRCTL(64) = 240
CRCTL(65) = 48
CRCTL(66) = 49
CRCTL(67) = 241
CRCTL(68) = 51
CRCTL(69) = 243
CRCTL(70) = 242
CRCTL(71) = 50
CRCTL(72) = 54
CRCTL(73) = 246
CRCTL(74) = 247
CRCTL(75) = 55
CRCTL(76) = 245
CRCTL(77) = 53
CRCTL(78) = 54
CRCTL(79) = 244
CRCTL(80) = 60
CRCTL(81) = 252
CRCTL(82) = 253
CRCTL(83) = 61
CRCTL(84) = 255
CRCTL(85) = 63
CRCTL(86) = 62
CRCTL(87) = 254
CRCTL(88) = 250
CRCTL(89) = 58
CRCTL(90) = 59
CRCTL(91) = 251
CRCTL(92) = 57
CRCTL(93) = 249
CRCTL(94) = 248
CRCTL(95) = 56
CRCTL(96) = 40
CRCTL(97) = 232
CRCTL(98) = 233
CRCTL(99) = 41
CRCTL(100) = 235
CRCTL(101) = 43
CRCTL(102) = 42
CRCTL(103) = 234
CRCTL(104) = 238
CRCTL(105) = 46
CRCTL(106) = 47
CRCTL(107) = 239
CRCTL(108) = 45
CRCTL(109) = 237
CRCTL(110) = 236
CRCTL(111) = 44
CRCTL(112) = 228
CRCTL(113) = 36
CRCTL(114) = 37
CRCTL(115) = 229
CRCTL(116) = 39
CRCTL(117) = 231
CRCTL(118) = 230
CRCTL(119) = 38
CRCTL(120) = 34
CRCTL(121) = 226
CRCTL(122) = 227
CRCTL(123) = 35
CRCTL(124) = 225
CRCTL(125) = 33
CRCTL(126) = 32
CRCTL(127) = 224
CRCTL(128) = 160
CRCTL(129) = 96
CRCTL(130) = 97
CRCTL(131) = 161
CRCTL(132) = 99
CRCTL(133) = 163
CRCTL(134) = 162
CRCTL(135) = 98
CRCTL(136) = 102
CRCTL(137) = 166
CRCTL(138) = 167
CRCTL(139) = 103
CRCTL(140) = 165
CRCTL(141) = 101
CRCTL(142) = 100
CRCTL(143) = 164
CRCTL(144) = 108
CRCTL(145) = 172
CRCTL(146) = 173
CRCTL(147) = 109
CRCTL(148) = 175
CRCTL(149) = 111
CRCTL(150) = 110
CRCTL(151) = 174
CRCTL(152) = 170
CRCTL(153) = 106
CRCTL(154) = 107
CRCTL(155) = 171
CRCTL(156) = 105
CRCTL(157) = 169
CRCTL(158) = 168
CRCTL(159) = 104
CRCTL(160) = 120
CRCTL(161) = 184
CRCTL(162) = 185
CRCTL(163) = 121
CRCTL(164) = 187
CRCTL(165) = 123
CRCTL(166) = 122
CRCTL(167) = 186
CRCTL(168) = 190
CRCTL(169) = 126
CRCTL(170) = 127
CRCTL(171) = 191
CRCTL(172) = 125
CRCTL(173) = 189
CRCTL(174) = 188
CRCTL(175) = 124
CRCTL(176) = 180
CRCTL(177) = 116
CRCTL(178) = 117
CRCTL(179) = 181
CRCTL(180) = 119
CRCTL(181) = 183
CRCTL(182) = 182
CRCTL(183) = 118
CRCTL(184) = 114
CRCTL(185) = 178
CRCTL(186) = 179
CRCTL(187) = 115
CRCTL(188) = 177
CRCTL(189) = 113
CRCTL(190) = 112
CRCTL(191) = 176
CRCTL(192) = 80
CRCTL(193) = 144
CRCTL(194) = 145
CRCTL(195) = 81
CRCTL(196) = 147
CRCTL(197) = 83
CRCTL(198) = 82
CRCTL(199) = 146
CRCTL(200) = 150
CRCTL(201) = 86
CRCTL(202) = 87
CRCTL(203) = 151
CRCTL(204) = 85
CRCTL(205) = 149
CRCTL(206) = 148
CRCTL(207) = 84
CRCTL(208) = 156
CRCTL(209) = 92
CRCTL(210) = 93
CRCTL(211) = 157
CRCTL(212) = 95
CRCTL(213) = 159
CRCTL(214) = 158
CRCTL(215) = 94
CRCTL(216) = 90
CRCTL(217) = 154
CRCTL(218) = 155
CRCTL(219) = 91
CRCTL(220) = 153
CRCTL(221) = 89
CRCTL(222) = 88
CRCTL(223) = 152
CRCTL(224) = 136
CRCTL(225) = 72
CRCTL(226) = 73
CRCTL(227) = 137
CRCTL(228) = 75
CRCTL(229) = 139
CRCTL(230) = 138
CRCTL(231) = 74
CRCTL(232) = 78
CRCTL(233) = 142
CRCTL(234) = 143
CRCTL(235) = 79
CRCTL(236) = 141
CRCTL(237) = 77
CRCTL(238) = 76
CRCTL(239) = 140
CRCTL(240) = 68
CRCTL(241) = 132
CRCTL(242) = 133
CRCTL(243) = 69
CRCTL(244) = 135
CRCTL(245) = 71
CRCTL(246) = 70
CRCTL(247) = 134
CRCTL(248) = 130
CRCTL(249) = 66
CRCTL(250) = 67
CRCTL(251) = 131
CRCTL(252) = 65
CRCTL(253) = 129
CRCTL(254) = 128
CRCTL(255) = 64