📄 ppp.lis
字号:
0000 ; #include "PPP.h"
0000 ; #include "UART.h"
0000 ;
0000 ; BYTE PPPStatus = 0;
0000 ; BYTE InBuffer [PPP_BUFFER_SIZE + 1]; //PPP数据输入缓冲
0000 ; BYTE OutBuffer[PPP_BUFFER_SIZE + 1]; //PPP数据输出缓冲
0000 ; static BYTE FrameSize = 0;
0000 ; static BYTE *PPP_Packet = InBuffer;
0000 ; extern WORD MRU=PPP_BUFFER_SIZE;
0000 ; BYTE local_IPAddress[4]; //本地IP
0000 ; BYTE remote_IPAddress[4]; //远端IP
0000 ; extern BYTE UART_BUFFER[PPP_BUFFER_SIZE+3];
0000 ; WORD UART_ptr=0;
0000 ;
0000 ;
0000 ;
0000 ; void PPPInit (void) {
0000 .dbline 18
0000 ; PPPStatus |= ReSync;
0000 80910800 lds R24,_PPPStatus
0004 8460 ori R24,4
0006 80930800 sts _PPPStatus,R24
000A .dbline -2
000A .dbline 19
000A ; }
000A L1:
000A .dbline 0 ; func end
000A 0895 ret
000C .dbend
000C .dbfunc e PPPEntry _PPPEntry fV
.even
000C _PPPEntry::
000C 0E940000 xcall push_gset1
0010 .dbline -1
0010 .dbline 21
0010 ;
0010 ; void PPPEntry (void) {
0010 .dbline 22
0010 ; if (PPPStatus & IsFrame) { //判断是否收到一个完整的PPP包
0010 20900800 lds R2,_PPPStatus
0014 23FE sbrs R2,3
0016 29C0 rjmp L3
0018 .dbline 22
0018 .dbline 23
0018 ; switch (((((WORD)InBuffer [2])<<8)+InBuffer [3])) { //判断协议域
0018 2090BC04 lds R2,_InBuffer+3
001C 3090BB04 lds R3,_InBuffer+2
0020 532D mov R21,R3
0022 422D mov R20,R2
0024 4132 cpi R20,33
0026 E0EC ldi R30,192
0028 5E07 cpc R21,R30
002A 79F0 breq L10
002C 81E2 ldi R24,-16351
002E 90EC ldi R25,-64
0030 8417 cp R24,R20
0032 9507 cpc R25,R21
0034 2CF0 brlt L14
0036 L13:
0036 4132 cpi R20,33
0038 E0E8 ldi R30,128
003A 5E07 cpc R21,R30
003C 41F0 breq L11
003E 09C0 xjmp L5
0040 L14:
0040 4132 cpi R20,33
0042 E0E0 ldi R30,0
0044 5E07 cpc R21,R30
0046 49F0 breq L6
0048 04C0 xjmp L5
004A X0:
004A .dbline 23
004A L10:
004A .dbline 26
004A ;
004A ; case PPPID_LCP: //是LCP的包
004A ; HandleLCPOptions ();
004A 8BD1 xcall _HandleLCPOptions
004C .dbline 27
004C ; break;
004C 06C0 xjmp L6
004E L11:
004E .dbline 30
004E ;
004E ; case PPPID_IPCP: //是IPCP的包
004E ; HandleIPCPOptions ();
004E 14D5 xcall _HandleIPCPOptions
0050 .dbline 31
0050 ; break;
0050 04C0 xjmp L6
0052 X1:
0052 .dbline 35
0052 ;
0052 ; case PPPID_IP: //是IP的包
0052 ; //NNOS接口
0052 ; break;
0052 L5:
0052 .dbline 38
0052 ;
0052 ; default:
0052 ; RejectProtocol (InBuffer); //拒绝协议
0052 00E0 ldi R16,<_InBuffer
0054 10E0 ldi R17,>_InBuffer
0056 0E940000 xcall _RejectProtocol
005A .dbline 39
005A ; break;
005A L6:
005A .dbline 40
005A .dbline 42
005A 80910800 lds R24,_PPPStatus
005E 877F andi R24,247
0060 80930800 sts _PPPStatus,R24
0064 .dbline 43
0064 8460 ori R24,4
0066 80930800 sts _PPPStatus,R24
006A .dbline 44
006A L3:
006A .dbline -2
006A .dbline 46
006A ; };
006A ;
006A ; PPPStatus &= ~IsFrame;
006A ; PPPStatus |= ReSync;
006A ; }
006A ;
006A ; }
006A L2:
006A 0E940000 xcall pop_gset1
006E .dbline 0 ; func end
006E 0895 ret
0070 .dbend
0070 .dbfunc e Move _Move fV
0070 ; numBYTEs -> R20,R21
0070 ; dest -> R18,R19
0070 ; src -> R16,R17
.even
0070 _Move::
0070 0E940000 xcall push_gset1
0074 4A81 ldd R20,y+2
0076 5B81 ldd R21,y+3
0078 .dbline -1
0078 .dbline 47
0078 ; void Move (BYTE *src, BYTE *dest, register numBYTEs) {
0078 .dbline 48
0078 ; if ( numBYTEs <= 0 ) return;
0078 2224 clr R2
007A 3324 clr R3
007C 2416 cp R2,R20
007E 3506 cpc R3,R21
0080 0CF0 brlt L16
0082 .dbline 48
0082 29C0 xjmp L15
0084 L16:
0084 .dbline 49
0084 ; if ( src < dest ) {
0084 0217 cp R16,R18
0086 1307 cpc R17,R19
0088 C0F4 brsh L18
008A .dbline 49
008A .dbline 50
008A ; src += numBYTEs;
008A 040F add R16,R20
008C 151F adc R17,R21
008E .dbline 51
008E ; dest += numBYTEs;
008E 240F add R18,R20
0090 351F adc R19,R21
0092 L20:
0092 .dbline 52
0092 ; do {
0092 .dbline 53
0092 ; *--dest = *--src;
0092 C901 movw R24,R18
0094 0197 sbiw R24,1
0096 1C01 movw R2,R24
0098 9C01 movw R18,R24
009A C801 movw R24,R16
009C 0197 sbiw R24,1
009E 8C01 movw R16,R24
00A0 FC01 movw R30,R24
00A2 4080 ldd R4,z+0
00A4 F101 movw R30,R2
00A6 4082 std z+0,R4
00A8 .dbline 54
00A8 L21:
00A8 .dbline 54
00A8 ; } while ( --numBYTEs > 0 );
00A8 CA01 movw R24,R20
00AA 0197 sbiw R24,1
00AC AC01 movw R20,R24
00AE 4424 clr R4
00B0 5524 clr R5
00B2 4816 cp R4,R24
00B4 5906 cpc R5,R25
00B6 6CF3 brlt L20
00B8 .dbline 55
00B8 ; } else
00B8 0EC0 xjmp L19
00BA L18:
00BA L23:
00BA .dbline 56
00BA ; do {
00BA .dbline 57
00BA ; *dest++ = *src++;
00BA F801 movw R30,R16
00BC D901 movw R26,R18
00BE 0190 ld R0,Z+
00C0 8F01 movw R16,R30
00C2 0D92 st X+,R0
00C4 9D01 movw R18,R26
00C6 .dbline 58
00C6 L24:
00C6 .dbline 58
00C6 CA01 movw R24,R20
00C8 0197 sbiw R24,1
00CA AC01 movw R20,R24
00CC 4424 clr R4
00CE 5524 clr R5
00D0 4816 cp R4,R24
00D2 5906 cpc R5,R25
00D4 94F3 brlt L23
00D6 L19:
00D6 .dbline -2
00D6 .dbline 59
00D6 ; } while ( --numBYTEs > 0 );
00D6 ; }
00D6 L15:
00D6 0E940000 xcall pop_gset1
00DA .dbline 0 ; func end
00DA 0895 ret
00DC .dbsym r numBYTEs 20 I
00DC .dbsym r dest 18 pc
00DC .dbsym r src 16 pc
00DC .dbend
00DC .dbfunc e PPPGetChecksum _PPPGetChecksum fi
00DC ; len -> R22,R23
00DC ; cp -> R20,R21
.even
00DC _PPPGetChecksum::
00DC 0E940000 xcall push_gset2
00E0 B901 movw R22,R18
00E2 A801 movw R20,R16
00E4 2297 sbiw R28,2
00E6 .dbline -1
00E6 .dbline 61
00E6 ;
00E6 ; WORD PPPGetChecksum (register unsigned char *cp, register int len) {
00E6 .dbline 62
00E6 ; return ~PPPfcs16(0xffff, cp, len );
00E6 7983 std y+1,R23
00E8 6883 std y+0,R22
00EA 9A01 movw R18,R20
00EC 0FEF ldi R16,65535
00EE 1FEF ldi R17,255
00F0 06D0 xcall _PPPfcs16
00F2 0095 com R16
00F4 1095 com R17
00F6 .dbline -2
00F6 L26:
00F6 2296 adiw R28,2
00F8 0E940000 xcall pop_gset2
00FC .dbline 0 ; func end
00FC 0895 ret
00FE .dbsym r len 22 I
00FE .dbsym r cp 20 pc
00FE .dbend
00FE .dbfunc s PPPfcs16 _PPPfcs16 fi
00FE ; len -> R20,R21
00FE ; cp -> R22,R23
00FE ; fcs -> R10,R11
.even
00FE _PPPfcs16:
00FE 0E940000 xcall push_gset3
0102 B901 movw R22,R18
0104 5801 movw R10,R16
0106 4E81 ldd R20,y+6
0108 5F81 ldd R21,y+7
010A .dbline -1
010A .dbline 65
010A ; }
010A ;
010A ; static WORD PPPfcs16 (WORD fcs, BYTE *cp, int len) {
010A 1AC0 xjmp L29
010C L28:
010C .dbline 67
010C FB01 movw R30,R22
010E 2190 ld R2,Z+
0110 BF01 movw R22,R30
0112 3324 clr R3
0114 9501 movw R18,R10
0116 2225 eor R18,R2
0118 3325 eor R19,R3
011A 3070 andi R19,0
011C 02E0 ldi R16,2
011E 10E0 ldi R17,0
0120 0E940000 xcall empy16s
0124 F801 movw R30,R16
0126 80E0 ldi R24,<_fcstab
0128 90E0 ldi R25,>_fcstab
012A E80F add R30,R24
012C F91F adc R31,R25
012E 0590 lpm R0,Z+
0130 1490 lpm R1,Z
0132 F001 movw R30,R0
0134 1501 movw R2,R10
0136 232C mov R2,R3
0138 3324 clr R3
013A 2E26 eor R2,R30
013C 3F26 eor R3,R31
013E 5101 movw R10,R2
0140 L29:
0140 .dbline 66
0140 ; while (len--)
0140 1A01 movw R2,R20
0142 4150 subi R20,1
0144 5040 sbci R21,0
0146 2220 tst R2
0148 09F7 brne L28
014A 3320 tst R3
014C F9F6 brne L28
014E X2:
014E .dbline 68
014E ; fcs = (fcs >> 8) ^ fcstab[(fcs ^ *cp++) & 0xff];
014E ; return (fcs);
014E 8501 movw R16,R10
0150 .dbline -2
0150 L27:
0150 0E940000 xcall pop_gset3
0154 .dbline 0 ; func end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -