📄 ppp.s
字号:
.module PPP.C
.area data(ram, con, rel)
_local_magic_num:
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.dbfile G:\sppp/PPP.h
.dbsym s local_magic_num _local_magic_num A[4:4]c
_remote_magic_num:
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.dbfile G:\sppp/PPP.h
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.dbfile G:\sppp/PPP.h
.dbsym s remote_magic_num _remote_magic_num A[4:4]c
.area lit(rom, con, rel)
_fcstab:
.word 0
.word 4489
.word 8978
.word 12955
.word 17956
.word 22445
.word 25910
.word 29887
.word 35912
.word 40385
.word 44890
.word 48851
.word 51820
.word 56293
.word 59774
.word 63735
.word 4225
.word 264
.word 13203
.word 8730
.word 22181
.word 18220
.word 30135
.word 25662
.word 40137
.word 36160
.word 49115
.word 44626
.word 56045
.word 52068
.word 63999
.word 59510
.word 8450
.word 12427
.word 528
.word 5017
.word 26406
.word 30383
.word 17460
.word 21949
.word 44362
.word 48323
.word 36440
.word 40913
.word 60270
.word 64231
.word 51324
.word 55797
.word 12675
.word 8202
.word 4753
.word 792
.word 30631
.word 26158
.word 21685
.word 17724
.word 48587
.word 44098
.word 40665
.word 36688
.word 64495
.word 60006
.word 55549
.word 51572
.word 16900
.word 21389
.word 24854
.word 28831
.word 1056
.word 5545
.word 10034
.word 14011
.word 52812
.word 57285
.word 60766
.word 64727
.word 34920
.word 39393
.word 43898
.word 47859
.word 21125
.word 17164
.word 29079
.word 24606
.word 5281
.word 1320
.word 14259
.word 9786
.word 57037
.word 53060
.word 64991
.word 60502
.word 39145
.word 35168
.word 48123
.word 43634
.word 25350
.word 29327
.word 16404
.word 20893
.word 9506
.word 13483
.word 1584
.word 6073
.word 61262
.word 65223
.word 52316
.word 56789
.word 43370
.word 47331
.word 35448
.word 39921
.word 29575
.word 25102
.word 20629
.word 16668
.word 13731
.word 9258
.word 5809
.word 1848
.word 65487
.word 60998
.word 56541
.word 52564
.word 47595
.word 43106
.word 39673
.word 35696
.word 33800
.word 38273
.word 42778
.word 46739
.word 49708
.word 54181
.word 57662
.word 61623
.word 2112
.word 6601
.word 11090
.word 15067
.word 20068
.word 24557
.word 28022
.word 31999
.word 38025
.word 34048
.word 47003
.word 42514
.word 53933
.word 49956
.word 61887
.word 57398
.word 6337
.word 2376
.word 15315
.word 10842
.word 24293
.word 20332
.word 32247
.word 27774
.word 42250
.word 46211
.word 34328
.word 38801
.word 58158
.word 62119
.word 49212
.word 53685
.word 10562
.word 14539
.word 2640
.word 7129
.word 28518
.word 32495
.word 19572
.word 24061
.word 46475
.word 41986
.word 38553
.word 34576
.word 62383
.word 57894
.word 53437
.word 49460
.word 14787
.word 10314
.word 6865
.word 2904
.word 32743
.word 28270
.word 23797
.word 19836
.word 50700
.word 55173
.word 58654
.word 62615
.word 32808
.word 37281
.word 41786
.word 45747
.word 19012
.word 23501
.word 26966
.word 30943
.word 3168
.word 7657
.word 12146
.word 16123
.word 54925
.word 50948
.word 62879
.word 58390
.word 37033
.word 33056
.word 46011
.word 41522
.word 23237
.word 19276
.word 31191
.word 26718
.word 7393
.word 3432
.word 16371
.word 11898
.word 59150
.word 63111
.word 50204
.word 54677
.word 41258
.word 45219
.word 33336
.word 37809
.word 27462
.word 31439
.word 18516
.word 23005
.word 11618
.word 15595
.word 3696
.word 8185
.word 63375
.word 58886
.word 54429
.word 50452
.word 45483
.word 40994
.word 37561
.word 33584
.word 31687
.word 27214
.word 22741
.word 18780
.word 15843
.word 11370
.word 7921
.word 3960
.dbsym s fcstab _fcstab A[512:256]ks
.area data(ram, con, rel)
.dbfile G:\sppp/PPP.h
_PPPStatus::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile G:\sppp/PPP.h
.dbfile G:\sppp\PPP.C
.dbsym e PPPStatus _PPPStatus c
_FrameSize:
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile G:\sppp\PPP.C
.dbsym s FrameSize _FrameSize c
_PPP_Packet:
.blkw 1
.area idata
.word _InBuffer
.area data(ram, con, rel)
.dbfile G:\sppp\PPP.C
.dbsym s PPP_Packet _PPP_Packet pc
_MRU::
.blkb 2
.area idata
.word 1200
.area data(ram, con, rel)
.dbfile G:\sppp\PPP.C
.dbsym e MRU _MRU i
_UART_ptr::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile G:\sppp\PPP.C
.dbsym e UART_ptr _UART_ptr i
.area text(rom, con, rel)
.dbfile G:\sppp\PPP.C
.dbfunc e PPPInit _PPPInit fV
.even
_PPPInit::
.dbline -1
.dbline 17
; #include "PPP.h"
; #include "UART.h"
;
; BYTE PPPStatus = 0;
; BYTE InBuffer [PPP_BUFFER_SIZE + 1]; //PPP数据输入缓冲
; BYTE OutBuffer[PPP_BUFFER_SIZE + 1]; //PPP数据输出缓冲
; static BYTE FrameSize = 0;
; static BYTE *PPP_Packet = InBuffer;
; extern WORD MRU=PPP_BUFFER_SIZE;
; BYTE local_IPAddress[4]; //本地IP
; BYTE remote_IPAddress[4]; //远端IP
; extern BYTE UART_BUFFER[PPP_BUFFER_SIZE+3];
; WORD UART_ptr=0;
;
;
;
; void PPPInit (void) {
.dbline 18
; PPPStatus |= ReSync;
lds R24,_PPPStatus
ori R24,4
sts _PPPStatus,R24
.dbline -2
.dbline 19
; }
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e PPPEntry _PPPEntry fV
.even
_PPPEntry::
xcall push_gset1
.dbline -1
.dbline 21
;
; void PPPEntry (void) {
.dbline 22
; if (PPPStatus & IsFrame) { //判断是否收到一个完整的PPP包
lds R2,_PPPStatus
sbrs R2,3
rjmp L3
.dbline 22
.dbline 23
; switch (((((WORD)InBuffer [2])<<8)+InBuffer [3])) { //判断协议域
lds R2,_InBuffer+3
lds R3,_InBuffer+2
mov R21,R3
mov R20,R2
cpi R20,33
ldi R30,192
cpc R21,R30
breq L10
ldi R24,-16351
ldi R25,-64
cp R24,R20
cpc R25,R21
brlt L14
L13:
cpi R20,33
ldi R30,128
cpc R21,R30
breq L11
xjmp L5
L14:
cpi R20,33
ldi R30,0
cpc R21,R30
breq L6
xjmp L5
X0:
.dbline 23
L10:
.dbline 26
;
; case PPPID_LCP: //是LCP的包
; HandleLCPOptions ();
xcall _HandleLCPOptions
.dbline 27
; break;
xjmp L6
L11:
.dbline 30
;
; case PPPID_IPCP: //是IPCP的包
; HandleIPCPOptions ();
xcall _HandleIPCPOptions
.dbline 31
; break;
xjmp L6
X1:
.dbline 35
;
; case PPPID_IP: //是IP的包
; //NNOS接口
; break;
L5:
.dbline 38
;
; default:
; RejectProtocol (InBuffer); //拒绝协议
ldi R16,<_InBuffer
ldi R17,>_InBuffer
xcall _RejectProtocol
.dbline 39
; break;
L6:
.dbline 40
.dbline 42
lds R24,_PPPStatus
andi R24,247
sts _PPPStatus,R24
.dbline 43
ori R24,4
sts _PPPStatus,R24
.dbline 44
L3:
.dbline -2
.dbline 46
; };
;
; PPPStatus &= ~IsFrame;
; PPPStatus |= ReSync;
; }
;
; }
L2:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbend
.dbfunc e Move _Move fV
; numBYTEs -> R20,R21
; dest -> R18,R19
; src -> R16,R17
.even
_Move::
xcall push_gset1
ldd R20,y+2
ldd R21,y+3
.dbline -1
.dbline 47
; void Move (BYTE *src, BYTE *dest, register numBYTEs) {
.dbline 48
; if ( numBYTEs <= 0 ) return;
clr R2
clr R3
cp R2,R20
cpc R3,R21
brlt L16
.dbline 48
xjmp L15
L16:
.dbline 49
; if ( src < dest ) {
cp R16,R18
cpc R17,R19
brsh L18
.dbline 49
.dbline 50
; src += numBYTEs;
add R16,R20
adc R17,R21
.dbline 51
; dest += numBYTEs;
add R18,R20
adc R19,R21
L20:
.dbline 52
; do {
.dbline 53
; *--dest = *--src;
movw R24,R18
sbiw R24,1
movw R2,R24
movw R18,R24
movw R24,R16
sbiw R24,1
movw R16,R24
movw R30,R24
ldd R4,z+0
movw R30,R2
std z+0,R4
.dbline 54
L21:
.dbline 54
; } while ( --numBYTEs > 0 );
movw R24,R20
sbiw R24,1
movw R20,R24
clr R4
clr R5
cp R4,R24
cpc R5,R25
brlt L20
.dbline 55
; } else
xjmp L19
L18:
L23:
.dbline 56
; do {
.dbline 57
; *dest++ = *src++;
movw R30,R16
movw R26,R18
ld R0,Z+
movw R16,R30
st X+,R0
movw R18,R26
.dbline 58
L24:
.dbline 58
movw R24,R20
sbiw R24,1
movw R20,R24
clr R4
clr R5
cp R4,R24
cpc R5,R25
brlt L23
L19:
.dbline -2
.dbline 59
; } while ( --numBYTEs > 0 );
; }
L15:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r numBYTEs 20 I
.dbsym r dest 18 pc
.dbsym r src 16 pc
.dbend
.dbfunc e PPPGetChecksum _PPPGetChecksum fi
; len -> R22,R23
; cp -> R20,R21
.even
_PPPGetChecksum::
xcall push_gset2
movw R22,R18
movw R20,R16
sbiw R28,2
.dbline -1
.dbline 61
;
; WORD PPPGetChecksum (register unsigned char *cp, register int len) {
.dbline 62
; return ~PPPfcs16(0xffff, cp, len );
std y+1,R23
std y+0,R22
movw R18,R20
ldi R16,65535
ldi R17,255
xcall _PPPfcs16
com R16
com R17
.dbline -2
L26:
adiw R28,2
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r len 22 I
.dbsym r cp 20 pc
.dbend
.dbfunc s PPPfcs16 _PPPfcs16 fi
; len -> R20,R21
; cp -> R22,R23
; fcs -> R10,R11
.even
_PPPfcs16:
xcall push_gset3
movw R22,R18
movw R10,R16
ldd R20,y+6
ldd R21,y+7
.dbline -1
.dbline 65
; }
;
; static WORD PPPfcs16 (WORD fcs, BYTE *cp, int len) {
xjmp L29
L28:
.dbline 67
movw R30,R22
ld R2,Z+
movw R22,R30
clr R3
movw R18,R10
eor R18,R2
eor R19,R3
andi R19,0
ldi R16,2
ldi R17,0
xcall empy16s
movw R30,R16
ldi R24,<_fcstab
ldi R25,>_fcstab
add R30,R24
adc R31,R25
lpm R0,Z+
lpm R1,Z
movw R30,R0
movw R2,R10
mov R2,R3
clr R3
eor R2,R30
eor R3,R31
movw R10,R2
L29:
.dbline 66
; while (len--)
movw R2,R20
subi R20,1
sbci R21,0
tst R2
brne L28
tst R3
brne L28
X2:
.dbline 68
; fcs = (fcs >> 8) ^ fcstab[(fcs ^ *cp++) & 0xff];
; return (fcs);
movw R16,R10
.dbline -2
L27:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r len 20 I
.dbsym r cp 22 pc
.dbsym r fcs 10 i
.dbend
.dbfunc e ProcPPPSend _ProcPPPSend fV
; Checksum -> R20,R21
; len -> R22
; Buffer -> R10,R11
.even
_ProcPPPSend::
xcall push_gset3
mov R22,R18
movw R10,R16
.dbline -1
.dbline 81
; }
;
;
; /////////////////////////////////////////////////////////////
; /*
;
; PPP包发送
; 说明:0x00~0x20是ASCⅡ的控制字符,要进行转意处理。
;
; */
; ////////////////////////////////////////////////////////////
; void ProcPPPSend (BYTE *Buffer, BYTE len)
; {
.dbline 82
; WORD Checksum = 0;
clr R20
clr R21
.dbline 83
; Checksum = PPPGetChecksum (Buffer, Buffer[7] + 4);
movw R30,R10
ldd R18,z+7
clr R19
subi R18,252 ; offset = 4
sbci R19,255
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -