📄 picnic.lst
字号:
00459 ; 读取RTL8019 Status 和 Ethernet Header
0158 01AD 00460 CLRF remote_adr
0159 087C 00461 MOVF mdata,W
015A 00AE 00462 MOVWF remote_adr+1
015B 3012 00463 MOVLW NE_SIZE+PACKET_SIZE
015C 00AF 00464 MOVWF remote_len
015D 01B0 00465 CLRF remote_len+1
015E 2711 00466 CALL remote_read
00467
015F 3012 00468 MOVLW NE_SIZE+PACKET_SIZE
0160 00A6 00469 MOVWF gcn1 ; Loop Counter
0161 1383 00470 BCF STATUS,IRP
0162 30DE 00471 MOVLW ne_header
0163 0084 00472 MOVWF FSR ;读取ne_header的地址
0164 3010 00473 MOVLW 0x10
0165 0087 00474 MOVWF PORTC
0166 00475 get_packet0:
0166 1009 00476 BCF PORTE,RE0 ;RD
0167 1E87 00477 BTFSS PORTC,RC5 ;RDY, ~Wait
MPASM 03.20 Released PICNIC.ASM 2-9-2003 15:33:59 PAGE 18
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0168 2967 00478 GOTO $-1
0169 0808 00479 MOVF PORTD,W
016A 1409 00480 BSF PORTE,RE0
016B 0080 00481 MOVWF INDF ;"indirect = data Buffer
016C 0A84 00482 INCF FSR,F ;FSR++
016D 0BA6 00483 DECFSZ gcn1,F
016E 2966 00484 GOTO get_packet0
00485 ;
00486 ; Ethernet Header的处理判断
016F 1683 00487 BSF STATUS,RP0
0170 1C5E 00488 BTFSS ne_stat,0
0171 297E 00489 GOTO main9
0172 3008 00490 MOVLW COM_PROTO
0173 026E 00491 SUBWF eth_type & 0x7F,W
0174 1D03 00492 BTFSS STATUS,Z ; 跳过type的高8bit以外
0175 297E 00493 GOTO main9
0176 3000 00494 MOVLW IP_PROTO
0177 026F 00495 SUBWF eth_type+1,W
0178 1903 00496 BTFSC STATUS,Z
0179 2A0A 00497 GOTO do_ip ;处理IP协议
017A 3006 00498 MOVLW ARP_PROTO
017B 026F 00499 SUBWF eth_type+1,W
017C 1903 00500 BTFSC STATUS,Z
017D 299B 00501 GOTO do_arp ;处理ARP协议
017E 00502 main9: ;其他
017E 1383 00503 BCF STATUS,IRP
017F 1303 00504 BCF STATUS,RP1
0180 1683 00505 BSF STATUS,RP0
0181 3046 00506 MOVLW PAGE_START
0182 025F 00507 SUBWF ne_next & 0x7F,W
0183 1C03 00508 BTFSS STATUS,C
0184 28E7 00509 GOTO overflow2 ;Error Check and Recover
0185 3080 00510 MOVLW PAGE_STOP
0186 025F 00511 SUBWF ne_next & 0x7F,W
0187 1803 00512 BTFSC STATUS,C
0188 28E7 00513 GOTO overflow ;Error Check and Recover
00514
0189 03DF 00515 DECF ne_next & 0x7F,F ;计算下一个边界
018A 3046 00516 MOVLW PAGE_START
018B 025F 00517 SUBWF ne_next & 0x7F,W
018C 1803 00518 BTFSC STATUS,C
018D 2990 00519 GOTO packet11
018E 307F 00520 MOVLW PAGE_STOP-1
018F 00DF 00521 MOVWF ne_next & 0x7F
00522
0190 00523 packet11:
0190 1283 00524 BCF STATUS,RP0
00525
0191 0187 00526 CLRF PORTC
0192 3022 00527 MOVLW b'00100010'
0193 2760 00528 CALL assert_wr0
00529
0194 3003 00530 MOVLW 0x03
MPASM 03.20 Released PICNIC.ASM 2-9-2003 15:33:59 PAGE 19
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0195 0087 00531 MOVWF PORTC
0196 30DF 00532 MOVLW ne_next
0197 0084 00533 MOVWF FSR
0198 0800 00534 MOVF INDF,W
0199 2760 00535 CALL assert_wr0
019A 293A 00536 GOTO main99
00537
00538 ;-----------------------------------------------------------------------------------
00539 ; ARP协议处理
00540 ;-----------------------------------------------------------------------------------
019B 00541 do_arp:
019B 1283 00542 BCF STATUS,RP0
019C 3012 00543 MOVLW NE_SIZE+PACKET_SIZE
019D 00AD 00544 MOVWF remote_adr
019E 30E0 00545 MOVLW ne_cn_l
019F 0084 00546 MOVWF FSR
01A0 0800 00547 MOVF INDF,W
01A1 00AF 00548 MOVWF remote_len
01A2 0A84 00549 INCF FSR,F
01A3 0800 00550 MOVF INDF,W
01A4 00B0 00551 MOVWF remote_len+1
01A5 3012 00552 MOVLW NE_SIZE+PACKET_SIZE
01A6 02AF 00553 SUBWF remote_len,F
01A7 3001 00554 MOVLW 0x01
01A8 1C03 00555 BTFSS STATUS,C
01A9 02B0 00556 SUBWF remote_len+1,F
01AA 2711 00557 CALL remote_read
00558
01AB 3039 00559 MOVLW ip_header ;读出ip_header以后的数据
01AC 0084 00560 MOVWF FSR
01AD 00561 get_packet10:
01AD 082F 00562 MOVF remote_len,W
01AE 0430 00563 IORWF remote_len+1,W
01AF 1903 00564 BTFSC STATUS,Z
01B0 29CB 00565 GOTO get_packet2
00566
01B1 1009 00567 BCF PORTE,RE0 ; RD
01B2 1E87 00568 BTFSS PORTC,RC5 ; RDY - ~Wait
01B3 29B2 00569 GOTO $-1
01B4 0808 00570 MOVF PORTD,W
01B5 1409 00571 BSF PORTE,RE0 ; RD
01B6 0080 00572 MOVWF INDF
01B7 0A84 00573 INCF FSR,F
00574
01B8 3001 00575 MOVLW 0x01
01B9 02AF 00576 SUBWF remote_len,F
01BA 1C03 00577 BTFSS STATUS,C
01BB 02B0 00578 SUBWF remote_len+1,F
01BC 1F84 00579 BTFSS FSR,7 ; Over flow?
01BD 29AD 00580 GOTO get_packet10
00581 ; 80h以后
01BE 00582 get_packet20:
01BE 082F 00583 MOVF remote_len,W
MPASM 03.20 Released PICNIC.ASM 2-9-2003 15:33:59 PAGE 20
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
01BF 0430 00584 IORWF remote_len+1,W
01C0 1903 00585 BTFSC STATUS,Z
01C1 29CB 00586 GOTO get_packet2 ;读入完了
00587
01C2 1009 00588 BCF PORTE,RE0 ;RD
01C3 1E87 00589 BTFSS PORTC,RC5 ;RDY - ~Wait
01C4 29C3 00590 GOTO $-1
01C5 1409 00591 BSF PORTE,RE0
00592
01C6 3001 00593 MOVLW 0x01
01C7 02AF 00594 SUBWF remote_len,F
01C8 1C03 00595 BTFSS STATUS,C
01C9 02B0 00596 SUBWF remote_len+1,F
01CA 29BE 00597 GOTO get_packet20
00598 ;
00599 ; 分析ARP Header
01CB 00600 get_packet2:
01CB 3000 00601 MOVLW 0x00
01CC 023F 00602 SUBWF arp_ope,W
01CD 1D03 00603 BTFSS STATUS,Z
01CE 297E 00604 GOTO main9 ; arp_code为0001以外则舍弃
01CF 3001 00605 MOVLW 0x01
01D0 0240 00606 SUBWF arp_ope+1,W
01D1 1903 00607 BTFSC STATUS,Z
01D2 29DB 00608 GOTO arp_req
01D3 3002 00609 MOVLW 0x02
01D4 0240 00610 SUBWF arp_ope+1,W
01D5 1903 00611 BTFSC STATUS,Z
01D6 29D8 00612 GOTO arp_reply
00613
01D7 297E 00614 GOTO main9
01D8 00615 arp_reply:
00616 ; pagesel ser_arp
01D8 3009 00617 MOVLW HIGH ser_arp
01D9 008A 00618 MOVWF PCLATH
01DA 291C 00619 GOTO ser_arp & 0x7ff
01DB 00620 arp_req:
01DB 00621 arp:
01DB 30A0 00622 MOVLW this_ip ;this_ip在Bank 1
01DC 0084 00623 MOVWF FSR
00624
01DD 0851 00625 MOVF arp_dest_ip,W
01DE 0200 00626 SUBWF INDF,W
01DF 1D03 00627 BTFSS STATUS,Z
01E0 297E 00628 GOTO main9
01E1 0A84 00629 INCF FSR,F
01E2 0852 00630 MOVF arp_dest_ip+1,W
01E3 0200 00631 SUBWF INDF,W
01E4 1D03 00632 BTFSS STATUS,Z
01E5 297E 00633 GOTO main9
01E6 0A84 00634 INCF FSR,F
01E7 0853 00635 MOVF arp_dest_ip+2,W
01E8 0200 00636 SUBWF INDF,W
MPASM 03.20 Released PICNIC.ASM 2-9-2003 15:33:59 PAGE 21
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
01E9 1D03 00637 BTFSS STATUS,Z
01EA 297E 00638 GOTO main9
01EB 0A84 00639 INCF FSR,F
01EC 0854 00640 MOVF arp_dest_ip+3,W
01ED 0200 00641 SUBWF INDF,W
01EE 1D03 00642 BTFSS STATUS,Z
01EF 297E 00643 GOTO main9
00644 ; 是发送给自己的ARP请求
01F0 2799 00645 CALL prepare_ether2
00646
01F1 3008 00647 MOVLW COM_PROTO ; 08 Etherframe type
01F2 274B 00648 CALL assert_wr
01F3 3006 00649 MOVLW ARP_PROTO ; ARP
01F4 274B 00650 CALL assert_wr
00651
01F5 3010 00652 MOVLW HIGH arp1
01F6 008A 00653 MOVWF PCLATH
01F7 209D 00654 CALL arp1 & 0x7ff
01F8 018A 00655 CLRF PCLATH
00656
01F9 0187 00657 CLRF PORTC
01FA 3022 00658 MOVLW b'00100010'
01FB 2760 00659 CALL assert_wr0
00660
01FC 3004 00661 MOVLW 0x04
01FD 0087 00662 MOVWF PORTC
01FE 3040 00663 MOVLW PAGE_BEGIN ; transmit page is start page
01FF 2760 00664 CALL assert_wr0
00665
0200 3005 00666 MOVLW 0x05
0201 0087 00667 MOVWF PORTC
0202 303C 00668 MOVLW 0x3C ; minimum pakcet = 60
0203 2760 00669 CALL assert_wr0
00670
0204 3006 00671 MOVLW 0x06
0205 0087 00672 MOVWF PORTC
0206 0100 00673 dw 0x100 ; adr high
0207 2760 00674 CALL assert_wr0
00675
0208 2789 00676 CALL transmit ;发送ARP应答
0209 297E 00677 GOTO main9
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -