📄 rtl8019as.lis
字号:
027C ; mac_d1 -> y+4
027C ; mac_d2 -> y+2
027C ; mac_d3 -> y+0
027C ; mac_d4 -> R18
027C ; mac_d5 -> R16
.even
027C _buildpack::
027C .dbline -1
027C .dbline 195
027C ; }
027C ;
027C ; void buildpack(unsigned char mac_d5,
027C ; unsigned char mac_d4,
027C ; unsigned char mac_d3,
027C ; unsigned char mac_d2,
027C ; unsigned char mac_d1,
027C ; unsigned char mac_d0,
027C ; unsigned char mac_s5,
027C ; unsigned char mac_s4,
027C ; unsigned char mac_s3,
027C ; unsigned char mac_s2,
027C ; unsigned char mac_s1,
027C ; unsigned char mac_s0,
027C ; unsigned int len)
027C ; {
027C .dbline 196
027C ; buffer[0]=mac_d5;
027C 00930000 sts _buffer,R16
0280 .dbline 197
0280 ; buffer[1]=mac_d4;
0280 20930100 sts _buffer+1,R18
0284 .dbline 198
0284 ; buffer[2]=mac_d3;
0284 0880 ldd R0,y+0
0286 00920200 sts _buffer+2,R0
028A .dbline 199
028A ; buffer[3]=mac_d2;
028A 0A80 ldd R0,y+2
028C 00920300 sts _buffer+3,R0
0290 .dbline 200
0290 ; buffer[4]=mac_d1;
0290 0C80 ldd R0,y+4
0292 00920400 sts _buffer+4,R0
0296 .dbline 201
0296 ; buffer[5]=mac_d0;
0296 0E80 ldd R0,y+6
0298 00920500 sts _buffer+5,R0
029C .dbline 203
029C ;
029C ; buffer[6]=mac_s5;
029C 0884 ldd R0,y+8
029E 00920600 sts _buffer+6,R0
02A2 .dbline 204
02A2 ; buffer[7]=mac_s4;
02A2 0A84 ldd R0,y+10
02A4 00920700 sts _buffer+7,R0
02A8 .dbline 205
02A8 ; buffer[8]=mac_s3;
02A8 0C84 ldd R0,y+12
02AA 00920800 sts _buffer+8,R0
02AE .dbline 206
02AE ; buffer[9]=mac_s2;
02AE 0E84 ldd R0,y+14
02B0 00920900 sts _buffer+9,R0
02B4 .dbline 207
02B4 ; buffer[10]=mac_s1;
02B4 0888 ldd R0,y+16
02B6 00920A00 sts _buffer+10,R0
02BA .dbline 208
02BA ; buffer[11]=mac_s0;
02BA 0A88 ldd R0,y+18
02BC 00920B00 sts _buffer+11,R0
02C0 .dbline 210
02C0 ;
02C0 ; buffer[13]=len&0xFF;
02C0 8C89 ldd R24,y+20
02C2 9D89 ldd R25,y+21
02C4 9070 andi R25,0
02C6 80930D00 sts _buffer+13,R24
02CA .dbline 211
02CA ; buffer[12]=len>>8;
02CA 2C88 ldd R2,y+20
02CC 3D88 ldd R3,y+21
02CE 232C mov R2,R3
02D0 3324 clr R3
02D2 20920C00 sts _buffer+12,R2
02D6 .dbline -2
02D6 L21:
02D6 .dbline 0 ; func end
02D6 0895 ret
02D8 .dbsym l len 20 i
02D8 .dbsym l mac_s0 18 c
02D8 .dbsym l mac_s1 16 c
02D8 .dbsym l mac_s2 14 c
02D8 .dbsym l mac_s3 12 c
02D8 .dbsym l mac_s4 10 c
02D8 .dbsym l mac_s5 8 c
02D8 .dbsym l mac_d0 6 c
02D8 .dbsym l mac_d1 4 c
02D8 .dbsym l mac_d2 2 c
02D8 .dbsym l mac_d3 0 c
02D8 .dbsym r mac_d4 18 c
02D8 .dbsym r mac_d5 16 c
02D8 .dbend
02D8 .dbfunc e rtl_packhandle _rtl_packhandle fV
02D8 ; i -> R10,R11
02D8 ; packlen -> R20,R21
02D8 ; packtyp -> R22,R23
02D8 ; mac_des -> y+6
02D8 ; mac_sou -> y+0
.even
02D8 _rtl_packhandle::
02D8 0E940000 xcall push_gset3
02DC 2C97 sbiw R28,12
02DE .dbline -1
02DE .dbline 215
02DE ; }
02DE ;
02DE ; void rtl_packhandle(void)
02DE ; {
02DE .dbline 216
02DE ; unsigned int packlen=0; //包长度
02DE 4427 clr R20
02E0 5527 clr R21
02E2 .dbline 217
02E2 ; unsigned int packtyp=0; //包类型
02E2 6627 clr R22
02E4 7727 clr R23
02E6 .dbline 220
02E6 ; unsigned char mac_des[6]; //目的地址
02E6 ; unsigned char mac_sou[6]; //源地址
02E6 ; unsigned int i=0;
02E6 AA24 clr R10
02E8 BB24 clr R11
02EA .dbline 222
02EA ;
02EA ; mac_des[5]=buffer[4];
02EA 20900400 lds R2,_buffer+4
02EE 2B86 std y+11,R2
02F0 .dbline 223
02F0 ; mac_des[4]=buffer[5];
02F0 20900500 lds R2,_buffer+5
02F4 2A86 std y+10,R2
02F6 .dbline 224
02F6 ; mac_des[3]=buffer[6];
02F6 20900600 lds R2,_buffer+6
02FA 2986 std y+9,R2
02FC .dbline 225
02FC ; mac_des[2]=buffer[7];
02FC 20900700 lds R2,_buffer+7
0300 2886 std y+8,R2
0302 .dbline 226
0302 ; mac_des[1]=buffer[8];
0302 20900800 lds R2,_buffer+8
0306 2F82 std y+7,R2
0308 .dbline 227
0308 ; mac_des[0]=buffer[9];
0308 20900900 lds R2,_buffer+9
030C 2E82 std y+6,R2
030E .dbline 229
030E ;
030E ; mac_sou[5]=buffer[10];
030E 20900A00 lds R2,_buffer+10
0312 2D82 std y+5,R2
0314 .dbline 230
0314 ; mac_sou[4]=buffer[11];
0314 20900B00 lds R2,_buffer+11
0318 2C82 std y+4,R2
031A .dbline 231
031A ; mac_sou[3]=buffer[12];
031A 20900C00 lds R2,_buffer+12
031E 2B82 std y+3,R2
0320 .dbline 232
0320 ; mac_sou[2]=buffer[13];
0320 20900D00 lds R2,_buffer+13
0324 2A82 std y+2,R2
0326 .dbline 233
0326 ; mac_sou[1]=buffer[14];
0326 20900E00 lds R2,_buffer+14
032A 2982 std y+1,R2
032C .dbline 234
032C ; mac_sou[0]=buffer[15];
032C 20900F00 lds R2,_buffer+15
0330 2882 std y+0,R2
0332 .dbline 236
0332 ;
0332 ; tempmac_d5=mac_sou[5];
0332 2D80 ldd R2,y+5
0334 20920500 sts _tempmac_d5,R2
0338 .dbline 237
0338 ; tempmac_d4=mac_sou[4];
0338 2C80 ldd R2,y+4
033A 20920400 sts _tempmac_d4,R2
033E .dbline 238
033E ; tempmac_d3=mac_sou[3];
033E 2B80 ldd R2,y+3
0340 20920300 sts _tempmac_d3,R2
0344 .dbline 239
0344 ; tempmac_d2=mac_sou[2];
0344 2A80 ldd R2,y+2
0346 20920200 sts _tempmac_d2,R2
034A .dbline 240
034A ; tempmac_d1=mac_sou[1];
034A 2980 ldd R2,y+1
034C 20920100 sts _tempmac_d1,R2
0350 .dbline 241
0350 ; tempmac_d0=mac_sou[0];
0350 2880 ldd R2,y+0
0352 20920000 sts _tempmac_d0,R2
0356 .dbline 244
0356 ;
0356 ;
0356 ; if(((buffer[0]&0x01)==0))//如果数据包无效则不作处理
0356 20900000 lds R2,_buffer
035A 20FC sbrc R2,0
035C 01C0 rjmp L63
035E .dbline 245
035E ; {
035E .dbline 246
035E ; return;
035E 61C0 xjmp L35
0360 L63:
0360 .dbline 249
0360 ; }
0360 ;
0360 ; packlen=buffer[3]; //获取数据长度,包括4字节校验码
0360 40910300 lds R20,_buffer+3
0364 5527 clr R21
0366 .dbline 250
0366 ; packlen<<=8;
0366 542F mov R21,R20
0368 4427 clr R20
036A .dbline 251
036A ; packlen|=buffer[2];
036A 20900200 lds R2,_buffer+2
036E 3324 clr R3
0370 4229 or R20,R2
0372 5329 or R21,R3
0374 .dbline 252
0374 ; packtyp=buffer[16]; //获取数据类型
0374 60911000 lds R22,_buffer+16
0378 7727 clr R23
037A .dbline 253
037A ; packtyp<<=8;
037A 762F mov R23,R22
037C 6627 clr R22
037E .dbline 254
037E ; packtyp|=buffer[17];
037E 20901100 lds R2,_buffer+17
0382 3324 clr R3
0384 6229 or R22,R2
0386 7329 or R23,R3
0388 .dbline 256
0388 ;
0388 ; switch(packtyp)
0388 6030 cpi R22,0
038A E8E0 ldi R30,8
038C 7E07 cpc R23,R30
038E 79F0 breq L73
0390 6030 cpi R22,0
0392 E8E0 ldi R30,8
0394 7E07 cpc R23,R30
0396 0CF4 brge X2
0398 44C0 xjmp L35
039A X2:
039A L103:
039A 6630 cpi R22,6
039C E8E0 ldi R30,8
039E 7E07 cpc R23,R30
03A0 09F0 breq L71
03A2 3FC0 xjmp L35
03A4 X0:
03A4 .dbline 257
03A4 ; {
03A4 L71:
03A4 .dbline 259
03A4 ; case 0x0806: //ARP数据包
03A4 ; arp_response(&buffer[18]);
03A4 00E0 ldi R16,<_buffer+18
03A6 10E0 ldi R17,>_buffer+18
03A8 0E940000 xcall _arp_response
03AC .dbline 260
03AC ; break;
03AC 3AC0 xjmp L35
03AE L73:
03AE .dbline 262
03AE ; case 0x0800: //IP数据包
03AE ; switch(ip_packhandle(&buffer[18]))
03AE 00E0 ldi R16,<_buffer+18
03B0 10E0 ldi R17,>_buffer+18
03B2 0E940000 xcall _ip_packhandle
03B6 602F mov R22,R16
03B8 7727 clr R23
03BA 6130 cpi R22,1
03BC E0E0 ldi R30,0
03BE 7E07 cpc R23,R30
03C0 49F0 breq L78
03C2 6130 cpi R22,1
03C4 E0E0 ldi R30,0
03C6 7E07 cpc R23,R30
03C8 64F1 brlt L35
03CA L102:
03CA 6131 cpi R22,17
03CC E0E0 ldi R30,0
03CE 7E07 cpc R23,R30
03D0 41F1 breq L35
03D2 27C0 xjmp L35
03D4 X1:
03D4 .dbline 263
03D4 ; {
03D4 L78:
03D4 .dbline 265
03D4 ; case 1://ICMP包处理
03D4 ; buffer[4]=mac_sou[5];
03D4 2D80 ldd R2,y+5
03D6 20920400 sts _buffer+4,R2
03DA .dbline 266
03DA ; buffer[5]=mac_sou[4];
03DA 2C80 ldd R2,y+4
03DC 20920500 sts _buffer+5,R2
03E0 .dbline 267
03E0 ; buffer[6]=mac_sou[3];
03E0 2B80 ldd R2,y+3
03E2 20920600 sts _buffer+6,R2
03E6 .dbline 268
03E6 ; buffer[7]=mac_sou[2];
03E6 2A80 ldd R2,y+2
03E8 20920700 sts _buffer+7,R2
03EC .dbline 269
03EC ; buffer[8]=mac_sou[1];
03EC 2980 ldd R2,y+1
03EE 20920800 sts _buffer+8,R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -