📄 p16web.lst
字号:
07CB: BCF 03,6
07CC: CALL 6B5
.................... ok = 1;
07CD: MOVLW 01
07CE: BSF 03,6
07CF: MOVWF 2D
07D0: BCF 03,6
.................... }
.................... return(ok);
07D1: BSF 03,6
07D2: MOVF 2D,W
07D3: BCF 03,6
07D4: MOVWF 78
07D5: RETLW 00
.................... }
....................
.................... /* Get packet into buffer, return length (excl CRC), or 0 if none available */
.................... WORD get_ether()
.................... {
.................... WORD len=0, curr;
.................... BYTE bound;
.................... WORD oset;
*
08A5: BSF 03,6
08A6: CLRF 25
08A7: CLRF 26
.................... int i;
....................
.................... if (innic(ISR) & 0x10) /* If Rx overrun.. */
08A8: MOVLW 07
08A9: MOVWF 3F
08AA: BCF 03,6
08AB: BCF 0A,3
08AC: CALL 6A2
08AD: BSF 0A,3
08AE: MOVF 78,W
08AF: ANDLW 10
08B0: IORLW 00
08B1: BTFSC 03,2
08B2: GOTO 0CD
.................... {
.................... printf(" NIC Rx overrun ");
*
0017: BCF 0A,0
0018: BCF 0A,1
0019: BCF 0A,2
001A: ADDWF 02,F
001B: RETLW 20
001C: RETLW 4E
001D: RETLW 49
001E: RETLW 43
001F: RETLW 20
0020: RETLW 52
0021: RETLW 78
0022: RETLW 20
0023: RETLW 6F
0024: RETLW 76
0025: RETLW 65
0026: RETLW 72
0027: RETLW 72
0028: RETLW 75
0029: RETLW 6E
002A: RETLW 20
002B: RETLW 00
*
08B3: BSF 03,6
08B4: CLRF 2D
08B5: BCF 03,6
08B6: BSF 03,6
08B7: MOVF 2D,W
08B8: BCF 03,6
08B9: BCF 0A,3
08BA: CALL 017
08BB: BSF 0A,3
08BC: BSF 03,6
08BD: INCF 2D,F
08BE: BCF 03,6
08BF: BTFSS 0C,4
08C0: GOTO 0BF
08C1: MOVWF 19
08C2: MOVLW 10
08C3: BSF 03,6
08C4: SUBWF 2D,W
08C5: BTFSC 03,2
08C6: GOTO 0C9
08C7: BCF 03,6
08C8: GOTO 0B6
.................... init_ether(); /* ..reset controller (drastic!) */
08C9: BCF 03,6
08CA: BCF 0A,3
08CB: CALL 6C9
08CC: BSF 0A,3
.................... }
.................... outnic(CMDR, 0x60); /* DMA abort, page 1 */
08CD: BSF 03,6
08CE: CLRF 40
08CF: MOVLW 60
08D0: MOVWF 41
08D1: BCF 03,6
08D2: BCF 0A,3
08D3: CALL 6B5
08D4: BSF 0A,3
.................... curr = innic(CURRP); /* Get current page */
08D5: MOVLW 07
08D6: BSF 03,6
08D7: MOVWF 3F
08D8: BCF 03,6
08D9: BCF 0A,3
08DA: CALL 6A2
08DB: BSF 0A,3
08DC: BSF 03,6
08DD: CLRF 28
08DE: BCF 03,6
08DF: MOVF 78,W
08E0: BSF 03,6
08E1: MOVWF 27
.................... outnic(CMDR, 0x20); /* DMA abort, page 0 */
08E2: CLRF 40
08E3: MOVLW 20
08E4: MOVWF 41
08E5: BCF 03,6
08E6: BCF 0A,3
08E7: CALL 6B5
08E8: BSF 0A,3
.................... if (curr != next_page) /* If Rx packet.. */
08E9: BSF 03,6
08EA: MOVF 28,F
08EB: BTFSC 03,2
08EC: GOTO 0EF
08ED: BCF 03,6
08EE: GOTO 0F8
08EF: BCF 03,6
08F0: MOVF 30,W
08F1: BSF 03,6
08F2: SUBWF 27,W
08F3: BTFSS 03,2
08F4: GOTO 0F7
08F5: BCF 03,6
08F6: GOTO 219
08F7: BCF 03,6
.................... {
.................... curr_rx_page = next_page;
08F8: MOVF 30,W
08F9: MOVWF 31
.................... setnic_addr((WORD)next_page<<8);
08FA: BSF 03,6
08FB: CLRF 2E
08FC: BCF 03,6
08FD: MOVF 30,W
08FE: BSF 03,6
08FF: MOVWF 2D
0900: MOVF 2D,W
0901: MOVWF 2E
0902: CLRF 2D
0903: MOVF 2E,W
0904: MOVWF 3D
0905: MOVF 2D,W
0906: MOVWF 3C
0907: BCF 03,6
0908: CALL 063
.................... getnic_data((BYTE *)&nicin, sizeof(nicin));
0909: MOVLW 00
090A: BSF 03,6
090B: MOVWF 2E
090C: MOVLW 32
090D: MOVWF 2D
090E: MOVLW 12
090F: MOVWF 2F
.................... len = nicin.nic.len; /* Take length from stored header */
*
0956: MOVF 35,W
0957: BSF 03,6
0958: MOVWF 26
0959: BCF 03,6
095A: MOVF 34,W
095B: BSF 03,6
095C: MOVWF 25
.................... if ((nicin.nic.stat&1) && len>=MINFRAMEC && len<=MAXFRAMEC)
095D: BCF 03,6
095E: MOVF 32,W
095F: ANDLW 01
0960: IORLW 00
0961: BTFSC 03,2
0962: GOTO 1BC
0963: MOVLW 01
0964: BSF 03,6
0965: SUBWF 26,W
0966: BTFSS 03,0
0967: GOTO 16A
0968: BCF 03,6
0969: GOTO 17A
096A: BCF 03,6
096B: BSF 03,6
096C: MOVF 26,F
096D: BTFSC 03,2
096E: GOTO 171
096F: BCF 03,6
0970: GOTO 1BC
0971: BCF 03,6
0972: MOVLW 40
0973: BSF 03,6
0974: SUBWF 25,W
0975: BTFSC 03,0
0976: GOTO 179
0977: BCF 03,6
0978: GOTO 1BC
0979: BCF 03,6
097A: MOVLW 05
097B: BSF 03,6
097C: SUBWF 26,W
097D: BTFSC 03,0
097E: GOTO 181
097F: BCF 03,6
0980: GOTO 192
0981: BCF 03,6
0982: MOVLW 05
0983: BSF 03,6
0984: SUBWF 26,W
0985: BTFSC 03,2
0986: GOTO 189
0987: BCF 03,6
0988: GOTO 1BC
0989: BCF 03,6
098A: MOVLW EF
098B: BSF 03,6
098C: SUBWF 25,W
098D: BTFSS 03,0
098E: GOTO 191
098F: BCF 03,6
0990: GOTO 1BC
0991: BCF 03,6
.................... { /* If hdr is OK, get packet */
.................... len -= MACLEN+MACLEN+2+CRCLEN;
0992: MOVLW 12
0993: BSF 03,6
0994: SUBWF 25,F
0995: MOVLW 00
0996: BTFSS 03,0
0997: DECF 26,F
0998: SUBWF 26,F
.................... rxin = len;
0999: MOVF 26,W
099A: BCF 03,6
099B: MOVWF 45
099C: BSF 03,6
099D: MOVF 25,W
099E: BCF 03,6
099F: MOVWF 44
.................... swapw(nicin.eth.pcol);
.................... #if DEBUG
.................... printf(" Rx%lu>", len);
.................... #endif
.................... }
.................... else /* If not, no packet data */
*
09BB: GOTO 1D5
.................... {
.................... len = 0;
09BC: BSF 03,6
09BD: CLRF 26
09BE: CLRF 25
.................... printf(" NIC pkt err ");
*
002C: BCF 0A,0
002D: BCF 0A,1
002E: BCF 0A,2
002F: ADDWF 02,F
0030: RETLW 20
0031: RETLW 4E
0032: RETLW 49
0033: RETLW 43
0034: RETLW 20
0035: RETLW 70
0036: RETLW 6B
0037: RETLW 74
0038: RETLW 20
0039: RETLW 65
003A: RETLW 72
003B: RETLW 72
003C: RETLW 20
003D: RETLW 00
*
09BF: CLRF 2D
09C0: BCF 03,6
09C1: BSF 03,6
09C2: MOVF 2D,W
09C3: BCF 03,6
09C4: BCF 0A,3
09C5: CALL 02C
09C6: BSF 0A,3
09C7: BSF 03,6
09C8: INCF 2D,F
09C9: BCF 03,6
09CA: BTFSS 0C,4
09CB: GOTO 1CA
09CC: MOVWF 19
09CD: MOVLW 0D
09CE: BSF 03,6
09CF: SUBWF 2D,W
09D0: BTFSC 03,2
09D1: GOTO 1D4
09D2: BCF 03,6
09D3: GOTO 1C1
09D4: BCF 03,6
.................... } /* Update next packet ptr */
.................... if (nicin.nic.next>=RXSTART && nicin.nic.next<RXSTOP)
09D5: MOVLW 46
09D6: SUBWF 33,W
09D7: BTFSS 03,0
09D8: GOTO 1E0
09D9: MOVLW 5F
09DA: SUBWF 33,W
09DB: BTFSC 03,0
09DC: GOTO 1E0
.................... next_page = nicin.nic.next;
09DD: MOVF 33,W
09DE: MOVWF 30
.................... else /* If invalid, use prev+1 */
09DF: GOTO 205
.................... {
.................... printf(" NIC ptr err ");
*
003E: BCF 0A,0
003F: BCF 0A,1
0040: BCF 0A,2
0041: ADDWF 02,F
0042: RETLW 20
0043: RETLW 4E
0044: RETLW 49
0045: RETLW 43
0046: RETLW 20
0047: RETLW 70
0048: RETLW 74
0049: RETLW 72
004A: RETLW 20
004B: RETLW 65
004C: RETLW 72
004D: RETLW 72
004E: RETLW 20
004F: RETLW 00
*
09E0: BSF 03,6
09E1: CLRF 2D
09E2: BCF 03,6
09E3: BSF 03,6
09E4: MOVF 2D,W
09E5: BCF 03,6
09E6: BCF 0A,3
09E7: CALL 03E
09E8: BSF 0A,3
09E9: BSF 03,6
09EA: INCF 2D,F
09EB: BCF 03,6
09EC: BTFSS 0C,4
09ED: GOTO 1EC
09EE: MOVWF 19
09EF: MOVLW 0D
09F0: BSF 03,6
09F1: SUBWF 2D,W
09F2: BTFSC 03,2
09F3: GOTO 1F6
09F4: BCF 03,6
09F5: GOTO 1E3
.................... next_page = nicwrap(next_page + 1);
09F6: MOVLW 01
09F7: BCF 03,6
09F8: ADDWF 30,W
09F9: BSF 03,6
09FA: MOVWF 2D
09FB: MOVF 2D,W
09FC: MOVWF 2E
09FD: BCF 03,6
09FE: CALL 087
09FF: MOVF 78,W
0A00: MOVWF 30
.................... len = 0;
0A01: BSF 03,6
0A02: CLRF 26
0A03: CLRF 25
0A04: BCF 03,6
.................... } /* Update boundary register */
.................... bound = nicwrap(next_page - 1);
0A05: MOVF 30,W
0A06: BSF 03,6
0A07: MOVWF 2D
0A08: MOVLW 01
0A09: SUBWF 2D,F
0A0A: MOVF 2D,W
0A0B: MOVWF 2E
0A0C: BCF 03,6
0A0D: CALL 087
0A0E: MOVF 78,W
0A0F: BSF 03,6
0A10: MOVWF 29
.................... outnic(BNRY, bound);
0A11: MOVLW 03
0A12: MOVWF 40
0A13: MOVF 29,W
0A14: MOVWF 41
0A15: BCF 03,6
0A16: BCF 0A,3
0A17: CALL 6B5
0A18: BSF 0A,3
.................... }
.................... return(len); /* Return length excl. CRC */
0A19: BSF 03,6
0A1A: MOVF 25,W
0A1B: BCF 03,6
0A1C: MOVWF 78
0A1D: BSF 03,6
0A1E: MOVF 26,W
0A1F: BCF 03,6
0A20: MOVWF 79
0A21: BCF 0A,3
0A22: BSF 0A,4
0A23: GOTO 5C2
.................... }
....................
.................... /* Send Ethernet packet given payload len */
.................... void put_ether(void *data, WORD dlen)
.................... {
.................... outnic(ISR, 0x0a); /* Clear interrupt flags */
*
0B5E: MOVLW 07
0B5F: BSF 03,6
0B60: MOVWF 40
0B61: MOVLW 0A
0B62: MOVWF 41
0B63: BCF 03,6
0B64: BCF 0A,3
0B65: CALL 6B5
0B66: BSF 0A,3
.................... setnic_addr(TXSTART<<8);
0B67: MOVLW 40
0B68: BSF 03,6
0B69: MOVWF 3D
0B6A: CLRF 3C
0B6B: BCF 03,6
0B6C: CALL 063
.................... putnic_data(nicin.eth.srce, MACLEN);
0B6D: MOVLW 00
0B6E: BSF 03,6
0B6F: MOVWF 3D
0B70: MOVLW 3C
0B71: MOVWF 3C
0B72: MOVLW 06
0B73: MOVWF 3E
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -