📄 ppp.lis
字号:
02DA 3E07 cpc R19,R30
02DC 29F0 breq L56
02DE 2E37 cpi R18,126
02E0 E0E0 ldi R30,0
02E2 3E07 cpc R19,R30
02E4 39F0 breq L57
02E6 1CC0 xjmp L53
02E8 X5:
02E8 .dbline 145
02E8 ; switch (c) {
02E8 L56:
02E8 .dbline 147
02E8 ; case ESC: // 如果是0x7D,置为还原状态
02E8 ; PPPStatus |= IsESC;
02E8 80910800 lds R24,_PPPStatus
02EC 8160 ori R24,1
02EE 80930800 sts _PPPStatus,R24
02F2 .dbline 148
02F2 ; break;
02F2 36C0 xjmp L54
02F4 L57:
02F4 .dbline 151
02F4 ;
02F4 ; case END: // 如果是0x7E,置为收到完整的PPP状态
02F4 ; if (FrameSize > 0) {
02F4 2224 clr R2
02F6 30900900 lds R3,_FrameSize
02FA 2314 cp R2,R3
02FC 88F5 brsh L54
02FE .dbline 151
02FE .dbline 152
02FE ; PPP_Packet [FrameSize] = 0;
02FE 20900A00 lds R2,_PPP_Packet
0302 30900B00 lds R3,_PPP_Packet+1
0306 E0910900 lds R30,_FrameSize
030A FF27 clr R31
030C E20D add R30,R2
030E F31D adc R31,R3
0310 2224 clr R2
0312 2082 std z+0,R2
0314 .dbline 153
0314 ; PPPStatus |= IsFrame;
0314 80910800 lds R24,_PPPStatus
0318 8860 ori R24,8
031A 80930800 sts _PPPStatus,R24
031E .dbline 154
031E ; }
031E .dbline 155
031E ; break;
031E 20C0 xjmp L54
0320 L53:
0320 .dbline 158
0320 ;
0320 ; default: //接收PPP数据
0320 ; PPP_Packet [FrameSize++] = c;
0320 20900900 lds R2,_FrameSize
0324 3324 clr R3
0326 822D mov R24,R2
0328 8F5F subi R24,255 ; addi 1
032A 80930900 sts _FrameSize,R24
032E 40900A00 lds R4,_PPP_Packet
0332 50900B00 lds R5,_PPP_Packet+1
0336 E22D mov R30,R2
0338 FF27 clr R31
033A E40D add R30,R4
033C F51D adc R31,R5
033E 0083 std z+0,R16
0340 .dbline 159
0340 ; if (FrameSize > (PPP_BUFFER_SIZE - 6)) { //?
0340 8AEA ldi R24,1194
0342 94E0 ldi R25,4
0344 20900900 lds R2,_FrameSize
0348 3324 clr R3
034A 8215 cp R24,R2
034C 9305 cpc R25,R3
034E 44F4 brge L54
0350 .dbline 159
0350 .dbline 160
0350 ; FrameSize = 0; //清空缓冲区
0350 2224 clr R2
0352 20920900 sts _FrameSize,R2
0356 .dbline 161
0356 ; PPPStatus |= ReSync; //置为初始状态
0356 80910800 lds R24,_PPPStatus
035A 8460 ori R24,4
035C 80930800 sts _PPPStatus,R24
0360 .dbline 162
0360 ; }
0360 .dbline 163
0360 ; break;
0360 L54:
0360 .dbline 165
0360 L52:
0360 .dbline -2
0360 .dbline 168
0360 ; }
0360 ; }
0360 ;
0360 ;
0360 ; }
0360 L42:
0360 .dbline 0 ; func end
0360 0895 ret
0362 .dbsym r c 16 c
0362 .dbend
0362 .dbfunc s HandleLCPOptions _HandleLCPOptions fV
0362 ; nak -> R14
0362 ; rej -> R20
0362 ; length0 -> y+64
0362 ; temp_buffer1 -> y+42
0362 ; j -> R10
0362 ; temp_buffer2 -> y+2
0362 ; length1 -> y+62
0362 ; i -> R22
.even
0362 _HandleLCPOptions:
0362 0E940000 xcall push_gset5
0366 EF97 sbiw R28,63
0368 2397 sbiw R28,3 ; offset = 66
036A .dbline -1
036A .dbline 172
036A ;
036A ;
036A ;
036A ; static void HandleLCPOptions (void) {
036A .dbline 173
036A ; WORD length0=0; //保存LCP的数据长度
036A 0024 clr R0
036C 1124 clr R1
036E FE01 movw R30,R28
0370 E05C subi R30,192 ; addi 64
0372 FF4F sbci R31,255
0374 1182 std z+1,R1
0376 0082 std z+0,R0
0378 .dbline 174
0378 ; WORD length1=8; //保存单个LCP包开始位置
0378 88E0 ldi R24,8
037A 90E0 ldi R25,0
037C 9FAF std y+63,R25
037E 8EAF std y+62,R24
0380 .dbline 175
0380 ; BYTE rej=0; //是否要发拒绝包
0380 4427 clr R20
0382 .dbline 176
0382 ; BYTE nak=0; //是否要发否定包
0382 EE24 clr R14
0384 .dbline 177
0384 ; BYTE i=0;
0384 6627 clr R22
0386 .dbline 178
0386 ; BYTE j=0;
0386 AA24 clr R10
0388 .dbline 183
0388 C090BD04 lds R12,_InBuffer+4
038C DD24 clr R13
038E C601 movw R24,R12
0390 8130 cpi R24,1
0392 E0E0 ldi R30,0
0394 9E07 cpc R25,R30
0396 09F4 brne X10
0398 33C0 xjmp L71
039A X10:
039A 8230 cpi R24,2
039C E0E0 ldi R30,0
039E 9E07 cpc R25,R30
03A0 09F4 brne X11
03A2 09C3 xjmp L123
03A4 X11:
03A4 8330 cpi R24,3
03A6 E0E0 ldi R30,0
03A8 9E07 cpc R25,R30
03AA 09F4 brne X12
03AC 36C3 xjmp L127
03AE X12:
03AE 8430 cpi R24,4
03B0 E0E0 ldi R30,0
03B2 9E07 cpc R25,R30
03B4 09F4 brne X13
03B6 5BC3 xjmp L62
03B8 X13:
03B8 8530 cpi R24,5
03BA E0E0 ldi R30,0
03BC 9E07 cpc R25,R30
03BE 31F0 breq L67
03C0 8630 cpi R24,6
03C2 E0E0 ldi R30,0
03C4 9E07 cpc R25,R30
03C6 09F4 brne X14
03C8 4DC3 xjmp L139
03CA X14:
03CA 51C3 xjmp L62
03CC X6:
03CC .dbline 183
03CC ; BYTE temp_buffer1[20]; //LCP 协商类型
03CC ; WORD temp_buffer2[20]; //LCP 各个协商类型在缓冲中的位置
03CC ;
03CC ;
03CC ; switch (InBuffer [4] ) {
03CC L67:
03CC .dbline 187
03CC ;
03CC ; //++++++++++++++++++++++++++++++++++++++++++++++++++++
03CC ; case LCP_TERMINATE_REQUEST: //"Server Terminate-Request received"
03CC ; Move (InBuffer, OutBuffer, InBuffer[7]+4);
03CC 8091C004 lds R24,_InBuffer+7
03D0 9927 clr R25
03D2 0496 adiw R24,4
03D4 9983 std y+1,R25
03D6 8883 std y+0,R24
03D8 20E0 ldi R18,<_OutBuffer
03DA 30E0 ldi R19,>_OutBuffer
03DC 00E0 ldi R16,<_InBuffer
03DE 10E0 ldi R17,>_InBuffer
03E0 47DE xcall _Move
03E2 .dbline 188
03E2 ; OutBuffer [4] = LCP_TERMINATE_ACK;
03E2 86E0 ldi R24,6
03E4 80930C00 sts _OutBuffer+4,R24
03E8 .dbline 189
03E8 ; ProcPPPSend ((BYTE *)OutBuffer, OutBuffer[7] + 6);
03E8 20910F00 lds R18,_OutBuffer+7
03EC 2A5F subi R18,250 ; addi 6
03EE 00E0 ldi R16,<_OutBuffer
03F0 10E0 ldi R17,>_OutBuffer
03F2 B1DE xcall _ProcPPPSend
03F4 .dbline 190
03F4 ; PPPStatus &= ~LinkOn;
03F4 80910800 lds R24,_PPPStatus
03F8 8F7D andi R24,223
03FA 80930800 sts _PPPStatus,R24
03FE .dbline 191
03FE ; break;
03FE 37C3 xjmp L62
0400 L71:
0400 .dbline 195
0400 ;
0400 ; //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
0400 ; case LCP_CONFIG_REQUEST:
0400 ; length0=InBuffer[7]-4; //LCP的数据长度
0400 8091C004 lds R24,_InBuffer+7
0404 9927 clr R25
0406 0497 sbiw R24,4
0408 FE01 movw R30,R28
040A E05C subi R30,192 ; addi 64
040C FF4F sbci R31,255
040E 9183 std z+1,R25
0410 8083 std z+0,R24
0412 3BC0 xjmp L74
0414 L73:
0414 .dbline 197
0414 .dbline 198
0414 80E0 ldi R24,<_InBuffer
0416 90E0 ldi R25,>_InBuffer
0418 EEAD ldd R30,y+62
041A FFAD ldd R31,y+63
041C E80F add R30,R24
041E F91F adc R31,R25
0420 2080 ldd R2,z+0
0422 CE01 movw R24,R28
0424 8A96 adiw R24,42
0426 EA2D mov R30,R10
0428 FF27 clr R31
042A E80F add R30,R24
042C F91F adc R31,R25
042E 2082 std z+0,R2
0430 .dbline 199
0430 82E0 ldi R24,2
0432 8A9D mul R24,R10
0434 F001 movw R30,R0
0436 CE01 movw R24,R28
0438 0296 adiw R24,2
043A E80F add R30,R24
043C F91F adc R31,R25
043E 0EAC ldd R0,y+62
0440 1FAC ldd R1,y+63
0442 1182 std z+1,R1
0444 0082 std z+0,R0
0446 .dbline 200
0446 80E0 ldi R24,<_InBuffer
0448 90E0 ldi R25,>_InBuffer
044A F001 movw R30,R0
044C 3196 adiw R30,1
044E E80F add R30,R24
0450 F91F adc R31,R25
0452 2080 ldd R2,z+0
0454 3324 clr R3
0456 FE01 movw R30,R28
0458 E05C subi R30,192 ; addi 64
045A FF4F sbci R31,255
045C 0080 ldd R0,z+0
045E 1180 ldd R1,z+1
0460 0218 sub R0,R2
0462 1308 sbc R1,R3
0464 FE01 movw R30,R28
0466 E05C subi R30,192 ; addi 64
0468 FF4F sbci R31,255
046A 1182 std z+1,R1
046C 0082 std z+0,R0
046E .dbline 201
046E EEAD ldd R30,y+62
0470 FFAD ldd R31,y+63
0472 3196 adiw R30,1
0474 E80F add R30,R24
0476 F91F adc R31,R25
0478 2080 ldd R2,z+0
047A 3324 clr R3
047C 0EAC ldd R0,y+62
047E 1FAC ldd R1,y+63
0480 020C add R0,R2
0482 131C adc R1,R3
0484 1FAE std y+63,R1
0486 0EAE std y+62,R0
0488 .dbline 202
0488 A394 inc R10
048A .dbline 203
048A L74:
048A .dbline 196
048A ; while(length0)
048A FE01 movw R30,R28
048C E05C subi R30,192 ; addi 64
048E FF4F sbci R31,255
0490 0080 ldd R0,z+0
0492 1180 ldd R1,z+1
0494 0020 tst R0
0496 09F0 breq X15
0498 BDCF xjmp L73
049A X15:
049A 1120 tst R1
049C 09F0 breq X16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -