📄 fcs.lis
字号:
0008 ; 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
0008 ; 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
0008 ; 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,
0008 ; 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,
0008 ; 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,
0008 ; 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,
0008 ; 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,
0008 ; 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
0008 ; 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,
0008 ; 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,
0008 ; 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,
0008 ; 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78
0008 ; };
0008 ; /*
0008 ; rom u32 FCS_Table_32[] = { // 32-bit PPP Polynomial
0008 ; 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
0008 ; 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
0008 ; 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
0008 ; 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
0008 ; 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
0008 ; 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
0008 ; 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
0008 ; 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
0008 ; 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
0008 ; 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
0008 ; 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
0008 ; 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
0008 ; 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
0008 ; 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
0008 ; 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
0008 ; 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
0008 ; 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
0008 ; 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
0008 ; 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
0008 ; 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
0008 ; 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
0008 ; 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
0008 ; 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
0008 ; 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
0008 ; 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
0008 ; 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
0008 ; 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
0008 ; 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
0008 ; 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
0008 ; 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
0008 ; 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
0008 ; 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
0008 ; };
0008 ; */
0008 ; //**************************************************************************
0008 ;
0008 ; u16 UpdateFCS_16(u16 fcs, u8 c)
0008 ; { // update fcs - fast table method
0008 .dbline 117
0008 ; return (fcs >> 8) ^ FCS_Table_16[(fcs & 0xff) ^ c];
0008 262E mov R2,R22
000A 3324 clr R3
000C 9A01 movw R18,R20
000E 3070 andi R19,0
0010 2225 eor R18,R2
0012 3325 eor R19,R3
0014 02E0 ldi R16,2
0016 10E0 ldi R17,0
0018 0E940000 xcall empy16s
001C F801 movw R30,R16
001E 80E0 ldi R24,<_FCS_Table_16
0020 90E0 ldi R25,>_FCS_Table_16
0022 E80F add R30,R24
0024 F91F adc R31,R25
0026 0590 lpm R0,Z+
0028 1490 lpm R1,Z
002A F001 movw R30,R0
002C 8A01 movw R16,R20
002E 012F mov R16,R17
0030 1127 clr R17
0032 0E27 eor R16,R30
0034 1F27 eor R17,R31
0036 .dbline -2
0036 L1:
0036 0E940000 xcall pop_gset2
003A .dbline 0 ; func end
003A 0895 ret
003C .dbsym r c 22 c
003C .dbsym r fcs 20 s
003C .dbend
003C .dbfunc e UpdateFCS_32 _UpdateFCS_32 fl
003C ; f -> y+0
003C ; i -> R10
003C ; c -> y+14
003C ; fcs -> y+10
.even
003C _UpdateFCS_32::
003C 0E940000 xcall push_arg4
0040 0E940000 xcall push_gset3
0044 2497 sbiw R28,4
0046 .dbline -1
0046 .dbline 169
0046 ; }
0046 ; /*
0046 ; u16 UpdateFCS_16(u16 fcs, u8 c)
0046 ; { // update the fcs - bit band method
0046 ; register u8 i, f;
0046 ;
0046 ; f = (u8)(fcs >> 8);
0046 ;
0046 ; fcs = (fcs & 0x00ff) ^ c;
0046 ;
0046 ; for (i = 8; i > 0; i--)
0046 ; {
0046 ; if (fcs & 1)
0046 ; {
0046 ; fcs >>= 1;
0046 ; fcs ^= HDLCPolynomial;
0046 ; }
0046 ; else
0046 ; fcs >>= 1;
0046 ; }
0046 ;
0046 ; return (fcs ^ f);
0046 ; }
0046 ;
0046 ; void Make_FCS_Table_16()
0046 ; { // Generate the FCS table in ram
0046 ; u8 i;
0046 ; u16 w;
0046 ; u32 dw;
0046 ;
0046 ; for (w = 0; w < 256; w++)
0046 ; {
0046 ; dw = (u32)w;
0046 ; for (i = 8; i > 0; i--)
0046 ; {
0046 ; if (dw & 1)
0046 ; dw = (dw >> 1) ^ HDLCPolynomial;
0046 ; else
0046 ; dw >>= 1;
0046 ; }
0046 ; FCS_Table_16[w] = (u16)(dw & 0xffff);
0046 ; }
0046 ; }
0046 ;
0046 ; u32 UpdateFCS_32(u32 fcs, u8 c)
0046 ; {
0046 ; return (fcs >> 8) ^ FCS_Table_32[(fcs & 0xff) ^ c];
0046 ; }
0046 ; */
0046 ;
0046 ; u32 UpdateFCS_32(u32 fcs, u8 c)
0046 ; { // update the fcs - bit band method
0046 .dbline 173
0046 ; register u8 i;
0046 ; u32 f;
0046 ;
0046 ; f = fcs >> 8;
0046 88E0 ldi R24,8
0048 90E0 ldi R25,0
004A FE01 movw R30,R28
004C 2284 ldd R2,z+10
004E 3384 ldd R3,z+11
0050 4484 ldd R4,z+12
0052 5584 ldd R5,z+13
0054 8A93 st -y,R24
0056 8101 movw R16,R2
0058 9201 movw R18,R4
005A 0E940000 xcall lsr32
005E FE01 movw R30,R28
0060 0083 std z+0,R16
0062 1183 std z+1,R17
0064 2283 std z+2,R18
0066 3383 std z+3,R19
0068 .dbline 175
0068 ;
0068 ; fcs = (fcs & 0x000000ff) ^ (u32)c;
0068 4FEF ldi R20,255
006A 50E0 ldi R21,0
006C 60E0 ldi R22,0
006E 70E0 ldi R23,0
0070 FE01 movw R30,R28
0072 2284 ldd R2,z+10
0074 3384 ldd R3,z+11
0076 4484 ldd R4,z+12
0078 5584 ldd R5,z+13
007A 2422 and R2,R20
007C 3522 and R3,R21
007E 4622 and R4,R22
0080 5722 and R5,R23
0082 6E84 ldd R6,y+14
0084 7724 clr R7
0086 8824 clr R8
0088 9924 clr R9
008A 2624 eor R2,R6
008C 3724 eor R3,R7
008E 4824 eor R4,R8
0090 5924 eor R5,R9
0092 FE01 movw R30,R28
0094 2286 std z+10,R2
0096 3386 std z+11,R3
0098 4486 std z+12,R4
009A 5586 std z+13,R5
009C .dbline 177
009C ;
009C ; for (i = 8; i > 0; i--)
009C 88E0 ldi R24,8
009E A82E mov R10,R24
00A0 46C0 xjmp L6
00A2 L3:
00A2 .dbline 178
00A2 ; {
00A2 .dbline 179
00A2 ; if (fcs & 1)
00A2 41E0 ldi R20,1
00A4 50E0 ldi R21,0
00A6 60E0 ldi R22,0
00A8 70E0 ldi R23,0
00AA FE01 movw R30,R28
00AC 2284 ldd R2,z+10
00AE 3384 ldd R3,z+11
00B0 4484 ldd R4,z+12
00B2 5584 ldd R5,z+13
00B4 2422 and R2,R20
00B6 3522 and R3,R21
00B8 4622 and R4,R22
00BA 5722 and R5,R23
00BC 40E0 ldi R20,0
00BE 50E0 ldi R21,0
00C0 60E0 ldi R22,0
00C2 70E0 ldi R23,0
00C4 2416 cp R2,R20
00C6 3506 cpc R3,R21
00C8 4606 cpc R4,R22
00CA 5706 cpc R5,R23
00CC 09F1 breq L7
00CE .dbline 180
00CE ; {
00CE .dbline 181
00CE ; fcs >>= 1;
00CE FE01 movw R30,R28
00D0 2284 ldd R2,z+10
00D2 3384 ldd R3,z+11
00D4 4484 ldd R4,z+12
00D6 5584 ldd R5,z+13
00D8 5694 lsr R5
00DA 4794 ror R4
00DC 3794 ror R3
00DE 2794 ror R2
00E0 FE01 movw R30,R28
00E2 2286 std z+10,R2
00E4 3386 std z+11,R3
00E6 4486 std z+12,R4
00E8 5586 std z+13,R5
00EA .dbline 182
00EA ; fcs ^= ZModem_PolyNominal;
00EA 40E2 ldi R20,32
00EC 53E8 ldi R21,131
00EE 68EB ldi R22,184
00F0 7DEE ldi R23,237
00F2 FE01 movw R30,R28
00F4 2284 ldd R2,z+10
00F6 3384 ldd R3,z+11
00F8 4484 ldd R4,z+12
00FA 5584 ldd R5,z+13
00FC 2426 eor R2,R20
00FE 3526 eor R3,R21
0100 4626 eor R4,R22
0102 5726 eor R5,R23
0104 FE01 movw R30,R28
0106 2286 std z+10,R2
0108 3386 std z+11,R3
010A 4486 std z+12,R4
010C 5586 std z+13,R5
010E .dbline 183
010E ; }
010E 0EC0 xjmp L8
0110 L7:
0110 .dbline 185
0110 ; else
0110 ; fcs >>= 1;
0110 FE01 movw R30,R28
0112 2284 ldd R2,z+10
0114 3384 ldd R3,z+11
0116 4484 ldd R4,z+12
0118 5584 ldd R5,z+13
011A 5694 lsr R5
011C 4794 ror R4
011E 3794 ror R3
0120 2794 ror R2
0122 FE01 movw R30,R28
0124 2286 std z+10,R2
0126 3386 std z+11,R3
0128 4486 std z+12,R4
012A 5586 std z+13,R5
012C L8:
012C .dbline 186
012C L4:
012C .dbline 177
012C AA94 dec R10
012E L6:
012E .dbline 177
012E 2224 clr R2
0130 2A14 cp R2,R10
0132 08F4 brsh X0
0134 B6CF xjmp L3
0136 X0:
0136 .dbline 188
0136 ; }
0136 ;
0136 ; return fcs ^ f;
0136 FE01 movw R30,R28
0138 2080 ldd R2,z+0
013A 3180 ldd R3,z+1
013C 4280 ldd R4,z+2
013E 5380 ldd R5,z+3
0140 FE01 movw R30,R28
0142 6284 ldd R6,z+10
0144 7384 ldd R7,z+11
0146 8484 ldd R8,z+12
0148 9584 ldd R9,z+13
014A 6224 eor R6,R2
014C 7324 eor R7,R3
014E 8424 eor R8,R4
0150 9524 eor R9,R5
0152 8301 movw R16,R6
0154 9401 movw R18,R8
0156 .dbline -2
0156 L2:
0156 2496 adiw R28,4
0158 0E940000 xcall pop_gset3
015C 2496 adiw R28,4
015E .dbline 0 ; func end
015E 0895 ret
0160 .dbsym l f 0 l
0160 .dbsym r i 10 c
0160 .dbsym l c 14 c
0160 .dbsym l fcs 10 l
0160 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -