📄 p16web.lst
字号:
0B74: BCF 03,6
0B75: CALL 2FA
.................... putnic_data(myeth, MACLEN);
0B76: MOVLW 00
0B77: BSF 03,6
0B78: MOVWF 3D
0B79: MOVLW 2A
0B7A: MOVWF 3C
0B7B: MOVLW 06
0B7C: MOVWF 3E
0B7D: BCF 03,6
0B7E: CALL 2FA
.................... swapw(nicin.eth.pcol);
.................... putnic_data(&nicin.eth.pcol, 2);
*
0B9A: MOVLW 00
0B9B: BSF 03,6
0B9C: MOVWF 3D
0B9D: MOVLW 42
0B9E: MOVWF 3C
0B9F: MOVLW 02
0BA0: MOVWF 3E
0BA1: BCF 03,6
0BA2: CALL 2FA
.................... putnic_data(data, dlen);
0BA3: BSF 03,6
0BA4: MOVF 39,W
0BA5: MOVWF 3D
0BA6: MOVF 38,W
0BA7: MOVWF 3C
0BA8: MOVF 3A,W
0BA9: MOVWF 3E
0BAA: BCF 03,6
0BAB: CALL 2FA
0BAC: RETLW 00
.................... }
....................
.................... /* Transmit the Ethernet frame */
.................... void xmit_ether(WORD dlen)
.................... {
.................... dlen += MACLEN+MACLEN+2;
0BAD: MOVLW 0E
0BAE: BSF 03,6
0BAF: ADDWF 38,F
0BB0: MOVLW 00
0BB1: BTFSC 03,0
0BB2: ADDLW 01
0BB3: ADDWF 39,F
0BB4: BCF 03,6
.................... if (dlen < MINFRAME)
0BB5: BSF 03,6
0BB6: MOVF 39,F
0BB7: BTFSC 03,2
0BB8: GOTO 3BB
0BB9: BCF 03,6
0BBA: GOTO 3C9
0BBB: BCF 03,6
0BBC: MOVLW 3C
0BBD: BSF 03,6
0BBE: SUBWF 38,W
0BBF: BTFSS 03,0
0BC0: GOTO 3C3
0BC1: BCF 03,6
0BC2: GOTO 3C9
0BC3: BCF 03,6
.................... dlen = MINFRAME; /* Constrain length */
0BC4: BSF 03,6
0BC5: CLRF 39
0BC6: MOVLW 3C
0BC7: MOVWF 38
0BC8: BCF 03,6
.................... outnic(TBCR0, dlen); /* Set Tx length regs */
0BC9: MOVLW 05
0BCA: BSF 03,6
0BCB: MOVWF 40
0BCC: MOVF 38,W
0BCD: MOVWF 41
0BCE: BCF 03,6
0BCF: BCF 0A,3
0BD0: CALL 6B5
0BD1: BSF 0A,3
.................... outnic(TBCR1, dlen >> 8);
0BD2: BSF 03,6
0BD3: MOVF 39,W
0BD4: MOVWF 3A
0BD5: CLRF 3B
0BD6: MOVLW 06
0BD7: MOVWF 40
0BD8: MOVF 3A,W
0BD9: MOVWF 41
0BDA: BCF 03,6
0BDB: BCF 0A,3
0BDC: CALL 6B5
0BDD: BSF 0A,3
.................... outnic(CMDR, 0x24); /* Transmit the packet */
0BDE: BSF 03,6
0BDF: CLRF 40
0BE0: MOVLW 24
0BE1: MOVWF 41
0BE2: BCF 03,6
0BE3: BCF 0A,3
0BE4: CALL 6B5
0BE5: BSF 0A,3
0BE6: RETLW 00
.................... }
....................
.................... /* Copy a block from NIC Rx to Tx buffers (not crossing page boundaries) */
.................... void copy_rx_tx(BYTE dest, BYTE srce, BYTE len)
.................... {
.................... BYTE b;
....................
.................... outnic(ISR, 0x40); /* Clear remote DMA interrupt flag */
*
1966: MOVLW 07
1967: MOVWF 40
1968: MOVLW 40
1969: MOVWF 41
196A: BCF 03,6
196B: BCF 0A,4
196C: BCF 0A,3
196D: CALL 6B5
196E: BSF 0A,4
196F: BSF 0A,3
.................... dest += sizeof(ETHERHEADER);
1970: MOVLW 0E
1971: BSF 03,6
1972: ADDWF 2D,F
.................... srce += sizeof(NICETHERHEADER);
1973: MOVLW 12
1974: ADDWF 2E,F
1975: BCF 03,6
.................... while (len--)
1976: BSF 03,6
1977: MOVF 2F,W
1978: DECF 2F,F
1979: IORLW 00
197A: BTFSS 03,2
197B: GOTO 17E
197C: BCF 03,6
197D: GOTO 1BE
197E: BCF 03,6
.................... {
.................... outnic(RSAR0, srce);
197F: MOVLW 08
1980: BSF 03,6
1981: MOVWF 40
1982: MOVF 2E,W
1983: MOVWF 41
1984: BCF 03,6
1985: BCF 0A,4
1986: BCF 0A,3
1987: CALL 6B5
1988: BSF 0A,4
1989: BSF 0A,3
.................... outnic(RSAR1, curr_rx_page);
198A: MOVLW 09
198B: BSF 03,6
198C: MOVWF 40
198D: BCF 03,6
198E: MOVF 31,W
198F: BSF 03,6
1990: MOVWF 41
1991: BCF 03,6
1992: BCF 0A,4
1993: BCF 0A,3
1994: CALL 6B5
1995: BSF 0A,4
1996: BSF 0A,3
.................... b = getnic_byte();
1997: BCF 0A,4
1998: CALL 224
1999: BSF 0A,4
199A: MOVF 78,W
199B: BSF 03,6
199C: MOVWF 30
.................... outnic(RSAR0, dest);
199D: MOVLW 08
199E: MOVWF 40
199F: MOVF 2D,W
19A0: MOVWF 41
19A1: BCF 03,6
19A2: BCF 0A,4
19A3: BCF 0A,3
19A4: CALL 6B5
19A5: BSF 0A,4
19A6: BSF 0A,3
.................... outnic(RSAR1, TXSTART);
19A7: MOVLW 09
19A8: BSF 03,6
19A9: MOVWF 40
19AA: MOVLW 40
19AB: MOVWF 41
19AC: BCF 03,6
19AD: BCF 0A,4
19AE: BCF 0A,3
19AF: CALL 6B5
19B0: BSF 0A,4
19B1: BSF 0A,3
.................... putnic_byte(b);
19B2: BSF 03,6
19B3: MOVF 30,W
19B4: MOVWF 3E
19B5: BCF 03,6
19B6: BCF 0A,4
19B7: CALL 5B7
19B8: BSF 0A,4
.................... srce++;
19B9: BSF 03,6
19BA: INCF 2E,F
.................... dest++;
19BB: INCF 2D,F
.................... }
19BC: BCF 03,6
19BD: GOTO 176
.................... }
....................
.................... /* Checksum the given number of bytes in the Rx NIC buffer */
.................... void check_rxbytes(BYTE oset, WORD len)
.................... {
.................... BYTE b;
....................
.................... outnic(ISR, 0x40); /* Clear remote DMA interrupt flag */
*
1B6E: MOVLW 07
1B6F: MOVWF 40
1B70: MOVLW 40
1B71: MOVWF 41
1B72: BCF 03,6
1B73: BCF 0A,4
1B74: BCF 0A,3
1B75: CALL 6B5
1B76: BSF 0A,4
1B77: BSF 0A,3
.................... outnic(RBCR0, len); /* Byte count */
1B78: MOVLW 0A
1B79: BSF 03,6
1B7A: MOVWF 40
1B7B: MOVF 32,W
1B7C: MOVWF 41
1B7D: BCF 03,6
1B7E: BCF 0A,4
1B7F: BCF 0A,3
1B80: CALL 6B5
1B81: BSF 0A,4
1B82: BSF 0A,3
.................... outnic(RBCR1, len>>8);
1B83: BSF 03,6
1B84: MOVF 33,W
1B85: MOVWF 35
1B86: CLRF 36
1B87: MOVLW 0B
1B88: MOVWF 40
1B89: MOVF 35,W
1B8A: MOVWF 41
1B8B: BCF 03,6
1B8C: BCF 0A,4
1B8D: BCF 0A,3
1B8E: CALL 6B5
1B8F: BSF 0A,4
1B90: BSF 0A,3
.................... outnic(CMDR, 0x0a); /* Start, DMA remote read */
1B91: BSF 03,6
1B92: CLRF 40
1B93: MOVLW 0A
1B94: MOVWF 41
1B95: BCF 03,6
1B96: BCF 0A,4
1B97: BCF 0A,3
1B98: CALL 6B5
1B99: BSF 0A,4
1B9A: BSF 0A,3
.................... while (len--) /* Get bytes */
1B9B: BSF 03,6
1B9C: MOVF 33,W
1B9D: BCF 03,6
1B9E: MOVWF 7A
1B9F: BSF 03,6
1BA0: MOVF 32,W
1BA1: BTFSC 03,2
1BA2: DECF 33,F
1BA3: DECF 32,F
1BA4: BCF 03,6
1BA5: IORWF 7A,W
1BA6: BTFSC 03,2
1BA7: GOTO 3BB
.................... {
.................... b = innic(DATAPORT);
1BA8: MOVLW 10
1BA9: BSF 03,6
1BAA: MOVWF 3F
1BAB: BCF 03,6
1BAC: BCF 0A,4
1BAD: BCF 0A,3
1BAE: CALL 6A2
1BAF: BSF 0A,4
1BB0: BSF 0A,3
1BB1: MOVF 78,W
1BB2: BSF 03,6
1BB3: MOVWF 34
.................... check_byte(b);
1BB4: MOVF 34,W
1BB5: MOVWF 3E
1BB6: BCF 03,6
1BB7: BCF 0A,4
1BB8: CALL 249
1BB9: BSF 0A,4
.................... }
1BBA: GOTO 39B
.................... }
....................
.................... /* Set the 'remote DMA' address in the NIC's RAM to be accessed */
.................... void setnic_addr(WORD addr)
.................... {
.................... outnic(ISR, 0x40); /* Clear remote DMA interrupt flag */
*
0863: MOVLW 07
0864: BSF 03,6
0865: MOVWF 40
0866: MOVLW 40
0867: MOVWF 41
0868: BCF 03,6
0869: BCF 0A,3
086A: CALL 6B5
086B: BSF 0A,3
.................... outnic(RSAR0, addr&0xff); /* Data addr */
086C: BSF 03,6
086D: MOVF 3D,W
086E: ANDLW 00
086F: MOVWF 3F
0870: MOVF 3C,W
0871: MOVWF 3E
0872: MOVLW 08
0873: MOVWF 40
0874: MOVF 3E,W
0875: MOVWF 41
0876: BCF 03,6
0877: BCF 0A,3
0878: CALL 6B5
0879: BSF 0A,3
.................... outnic(RSAR1, addr>>8);
087A: BSF 03,6
087B: MOVF 3D,W
087C: MOVWF 3E
087D: CLRF 3F
087E: MOVLW 09
087F: MOVWF 40
0880: MOVF 3E,W
0881: MOVWF 41
0882: BCF 03,6
0883: BCF 0A,3
0884: CALL 6B5
0885: BSF 0A,3
0886: RETLW 00
.................... }
....................
.................... /* Get the 'remote DMA' address in the NIC's RAM to be accessed */
.................... WORD getnic_addr(void)
.................... {
.................... WORD addr;
....................
.................... addr = innic(RSAR0) + ((WORD)innic(RSAR1) << 8);
*
1B25: MOVLW 08
1B26: BSF 03,6
1B27: MOVWF 3F
1B28: BCF 03,6
1B29: BCF 0A,4
1B2A: BCF 0A,3
1B2B: CALL 6A2
1B2C: BSF 0A,4
1B2D: BSF 0A,3
1B2E: MOVF 78,W
1B2F: BSF 03,6
1B30: MOVWF 31
1B31: MOVLW 09
1B32: MOVWF 3F
1B33: BCF 03,6
1B34: BCF 0A,4
1B35: BCF 0A,3
1B36: CALL 6A2
1B37: BSF 0A,4
1B38: BSF 0A,3
1B39: BSF 03,6
1B3A: CLRF 33
1B3B: BCF 03,6
1B3C: MOVF 78,W
1B3D: BSF 03,6
1B3E: MOVWF 32
1B3F: MOVF 32,W
1B40: BCF 03,6
1B41: MOVWF 7A
1B42: CLRW
1B43: BSF 03,6
1B44: ADDWF 31,W
1B45: MOVWF 2F
1B46: BCF 03,6
1B47: MOVF 7A,W
1B48: BSF 03,6
1B49: MOVWF 30
1B4A: BTFSC 03,0
1B4B: INCF 30,F
.................... return(addr);
1B4C: MOVF 2F,W
1B4D: BCF 03,6
1B4E: MOVWF 78
1B4F: BSF 03,6
1B50: MOVF 30,W
1B51: BCF 03,6
1B52: MOVWF 79
.................... }
....................
.................... /* Return a byte from the NIC RAM */
.................... BYTE getnic_byte(void)
.................... {
.................... BYTE b;
....................
.................... outnic(RBCR0, 1); /* Byte count */
*
0A24: MOVLW 0A
0A25: BSF 03,6
0A26: MOVWF 40
0A27: MOVLW 01
0A28: MOVWF 41
0A29: BCF 03,6
0A2A: BCF 0A,3
0A2B: CALL 6B5
0A2C: BSF 0A,3
.................... outnic(RBCR1, 0);
0A2D: MOVLW 0B
0A2E: BSF 03,6
0A2F: MOVWF 40
0A30: CLRF 41
0A31: BCF 03,6
0A32: BCF 0A,3
0A33: CALL 6B5
0A34: BSF 0A,3
.................... outnic(CMDR, 0x0a); /* Start, DMA remote read */
0A35: BSF 03,6
0A36: CLRF 40
0A37: MOVLW 0A
0A38: MOVWF 41
0A39: BCF 03,6
0A3A: BCF 0A,3
0A3B: CALL 6B5
0A3C: BSF 0A,3
.................... b = innic(DATAPORT);
0A3D: MOVLW 10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -