📄 p16web.lst
字号:
....................
.................... atend = rxout>=rxin;
0A6B: BCF 03,6
0A6C: MOVF 47,W
0A6D: SUBWF 45,W
0A6E: BTFSS 03,0
0A6F: GOTO 27C
0A70: MOVF 47,W
0A71: SUBWF 45,W
0A72: BTFSS 03,2
0A73: GOTO 27A
0A74: MOVF 46,W
0A75: SUBWF 44,W
0A76: BTFSC 03,2
0A77: GOTO 27C
0A78: BTFSS 03,0
0A79: GOTO 27C
0A7A: BCF 26,1
0A7B: GOTO 27D
0A7C: BSF 26,1
.................... if (!atend)
0A7D: BTFSC 26,1
0A7E: GOTO 28C
.................... {
.................... b = getnic_byte();
0A7F: CALL 224
0A80: MOVF 78,W
0A81: BSF 03,6
0A82: MOVWF 37
.................... rxout++;
0A83: BCF 03,6
0A84: INCF 46,F
0A85: BTFSC 03,2
0A86: INCF 47,F
.................... check_byte(b);
0A87: BSF 03,6
0A88: MOVF 37,W
0A89: MOVWF 3E
0A8A: BCF 03,6
0A8B: CALL 249
.................... }
.................... return(b);
0A8C: BSF 03,6
0A8D: MOVF 37,W
0A8E: BCF 03,6
0A8F: MOVWF 78
0A90: RETLW 00
.................... }
....................
.................... /* Put a byte into the network buffer */
.................... void putch_net(BYTE b)
.................... {
.................... if (txin < TXBUFFLEN)
*
0AB1: MOVLW 40
0AB2: SUBWF 48,W
0AB3: BTFSC 03,0
0AB4: GOTO 2C0
.................... txbuff[txin++] = b;
0AB5: MOVF 48,W
0AB6: INCF 48,F
0AB7: MOVWF 77
0AB8: MOVLW A0
0AB9: ADDWF 77,W
0ABA: MOVWF 04
0ABB: BCF 03,7
0ABC: BSF 03,6
0ABD: MOVF 3C,W
0ABE: MOVWF 00
0ABF: BCF 03,6
.................... check_byte(b);
0AC0: BSF 03,6
0AC1: MOVF 3C,W
0AC2: MOVWF 3E
0AC3: BCF 03,6
0AC4: CALL 249
0AC5: RETLW 00
.................... }
....................
.................... /* Set up the I/O ports, reset the NIC */
.................... void reset_ether(void)
.................... {
.................... DATA_FROM_NIC;
*
00DA: MOVLW FF
00DB: BSF 03,5
00DC: MOVWF 08
.................... NIC_ADDR = 0;
00DD: BCF 03,5
00DE: CLRF 06
.................... port_b_pullups(TRUE);
00DF: MOVLW 81
00E0: MOVWF 04
00E1: BCF 03,7
00E2: BCF 00,7
.................... set_tris_b(0xe0);
00E3: MOVLW E0
00E4: TRIS 6
.................... NIC_IOW_ = NIC_IOR_ = 1;
00E5: BSF 09,0
00E6: BSF 09,1
.................... NIC_RESET = 1;
00E7: BSF 09,2
.................... set_tris_e(ALL_OUT);
00E8: MOVLW 00
00E9: BSF 03,5
00EA: MOVWF 09
00EB: BCF 03,5
00EC: RETLW 00
.................... }
....................
.................... /* Initialise card given driver type and base addr.
.................... ** Return driver type, 0 if error */
.................... int init_ether(void)
.................... {
.................... int ok=0, i;
*
06C9: BSF 03,6
06CA: CLRF 2D
.................... BYTE b;
....................
.................... reset_ether();
06CB: BCF 03,6
06CC: CALL 0DA
.................... delay_ms(2);
06CD: MOVLW 02
06CE: BSF 03,6
06CF: MOVWF 33
06D0: BCF 03,6
06D1: CALL 0ED
.................... NIC_RESET = 0;
06D2: BCF 09,2
.................... delay_ms(2);
06D3: MOVLW 02
06D4: BSF 03,6
06D5: MOVWF 33
06D6: BCF 03,6
06D7: CALL 0ED
.................... outnic(NE_RESET, innic(NE_RESET)); /* Do reset */
06D8: MOVLW 1F
06D9: BSF 03,6
06DA: MOVWF 3F
06DB: BCF 03,6
06DC: CALL 6A2
06DD: MOVF 78,W
06DE: BSF 03,6
06DF: MOVWF 30
06E0: MOVLW 1F
06E1: MOVWF 40
06E2: MOVF 30,W
06E3: MOVWF 41
06E4: BCF 03,6
06E5: CALL 6B5
.................... delay_ms(2);
06E6: MOVLW 02
06E7: BSF 03,6
06E8: MOVWF 33
06E9: BCF 03,6
06EA: CALL 0ED
.................... if ((innic(ISR) & 0x80) == 0) /* Report if failed */
06EB: MOVLW 07
06EC: BSF 03,6
06ED: MOVWF 3F
06EE: BCF 03,6
06EF: CALL 6A2
06F0: MOVF 78,W
06F1: ANDLW 80
06F2: IORLW 00
06F3: BTFSS 03,2
06F4: GOTO 70A
.................... {
.................... printf(displays, "\nNIC init err ");
*
0004: BCF 0A,0
0005: BCF 0A,1
0006: BCF 0A,2
0007: ADDWF 02,F
0008: RETLW 0A
0009: RETLW 4E
000A: RETLW 49
000B: RETLW 43
000C: RETLW 20
000D: RETLW 69
000E: RETLW 6E
000F: RETLW 69
0010: RETLW 74
0011: RETLW 20
0012: RETLW 65
0013: RETLW 72
0014: RETLW 72
0015: RETLW 20
0016: RETLW 00
*
06F5: BSF 03,6
06F6: CLRF 30
06F7: BCF 03,6
06F8: BSF 03,6
06F9: MOVF 30,W
06FA: BCF 03,6
06FB: CALL 004
06FC: BSF 03,6
06FD: INCF 30,F
06FE: MOVWF 31
06FF: BCF 03,6
0700: CALL 185
0701: MOVLW 0E
0702: BSF 03,6
0703: SUBWF 30,W
0704: BTFSC 03,2
0705: GOTO 708
0706: BCF 03,6
0707: GOTO 6F8
.................... }
.................... else
0708: BCF 03,6
0709: GOTO 7D1
.................... {
.................... outnic(CMDR, 0x21); /* Stop, DMA abort, page 0 */
070A: BSF 03,6
070B: CLRF 40
070C: MOVLW 21
070D: MOVWF 41
070E: BCF 03,6
070F: CALL 6B5
.................... delay_ms(2); /* ..wait to take effect */
0710: MOVLW 02
0711: BSF 03,6
0712: MOVWF 33
0713: BCF 03,6
0714: CALL 0ED
.................... outnic(DCR, DCRVAL);
0715: MOVLW 0E
0716: BSF 03,6
0717: MOVWF 40
0718: MOVLW 48
0719: MOVWF 41
071A: BCF 03,6
071B: CALL 6B5
.................... outnic(RBCR0, 0); /* Clear remote byte count */
071C: MOVLW 0A
071D: BSF 03,6
071E: MOVWF 40
071F: CLRF 41
0720: BCF 03,6
0721: CALL 6B5
.................... outnic(RBCR1, 0);
0722: MOVLW 0B
0723: BSF 03,6
0724: MOVWF 40
0725: CLRF 41
0726: BCF 03,6
0727: CALL 6B5
.................... outnic(RCR, 0x20); /* Rx monitor mode */
0728: MOVLW 0C
0729: BSF 03,6
072A: MOVWF 40
072B: MOVLW 20
072C: MOVWF 41
072D: BCF 03,6
072E: CALL 6B5
.................... outnic(TCR, 0x02); /* Tx internal loopback */
072F: MOVLW 0D
0730: BSF 03,6
0731: MOVWF 40
0732: MOVLW 02
0733: MOVWF 41
0734: BCF 03,6
0735: CALL 6B5
.................... outnic(TPSR, TXSTART); /* Set Tx start page */
0736: MOVLW 04
0737: BSF 03,6
0738: MOVWF 40
0739: MOVLW 40
073A: MOVWF 41
073B: BCF 03,6
073C: CALL 6B5
.................... outnic(PSTART, RXSTART); /* Set Rx start, stop, boundary */
073D: MOVLW 01
073E: BSF 03,6
073F: MOVWF 40
0740: MOVLW 46
0741: MOVWF 41
0742: BCF 03,6
0743: CALL 6B5
.................... outnic(PSTOP, RXSTOP);
0744: MOVLW 02
0745: BSF 03,6
0746: MOVWF 40
0747: MOVLW 5F
0748: MOVWF 41
0749: BCF 03,6
074A: CALL 6B5
.................... outnic(BNRY, (BYTE)(RXSTOP-1));
074B: MOVLW 03
074C: BSF 03,6
074D: MOVWF 40
074E: MOVLW 5E
074F: MOVWF 41
0750: BCF 03,6
0751: CALL 6B5
.................... outnic(ISR, 0xff); /* Clear interrupt flags */
0752: MOVLW 07
0753: BSF 03,6
0754: MOVWF 40
0755: MOVLW FF
0756: MOVWF 41
0757: BCF 03,6
0758: CALL 6B5
.................... outnic(IMR, 0); /* Mask all interrupts */
0759: MOVLW 0F
075A: BSF 03,6
075B: MOVWF 40
075C: CLRF 41
075D: BCF 03,6
075E: CALL 6B5
.................... outnic(CMDR, 0x61); /* Stop, DMA abort, page 1 */
075F: BSF 03,6
0760: CLRF 40
0761: MOVLW 61
0762: MOVWF 41
0763: BCF 03,6
0764: CALL 6B5
.................... delay_ms(2);
0765: MOVLW 02
0766: BSF 03,6
0767: MOVWF 33
0768: BCF 03,6
0769: CALL 0ED
.................... for (i=0; i<6; i++) /* Set Phys addr */
076A: BSF 03,6
076B: CLRF 2E
076C: BCF 03,6
076D: MOVLW 06
076E: BSF 03,6
076F: SUBWF 2E,W
0770: BTFSS 03,0
0771: GOTO 774
0772: BCF 03,6
0773: GOTO 78B
0774: BCF 03,6
.................... outnic(PAR0+i, myeth[i]);
0775: MOVLW 01
0776: BSF 03,6
0777: ADDWF 2E,W
0778: MOVWF 30
0779: MOVLW 2A
077A: ADDWF 2E,W
077B: BCF 03,6
077C: MOVWF 04
077D: BCF 03,7
077E: MOVF 00,W
077F: BSF 03,6
0780: MOVWF 31
0781: MOVF 30,W
0782: MOVWF 40
0783: MOVF 31,W
0784: MOVWF 41
0785: BCF 03,6
0786: CALL 6B5
0787: BSF 03,6
0788: INCF 2E,F
0789: BCF 03,6
078A: GOTO 76D
.................... for (i=0; i<8; i++) /* Multicast accept-all */
078B: BSF 03,6
078C: CLRF 2E
078D: BCF 03,6
078E: MOVLW 08
078F: BSF 03,6
0790: SUBWF 2E,W
0791: BTFSS 03,0
0792: GOTO 795
0793: BCF 03,6
0794: GOTO 7A4
0795: BCF 03,6
.................... outnic(MAR0+i, 0xff);
0796: MOVLW 08
0797: BSF 03,6
0798: ADDWF 2E,W
0799: MOVWF 30
079A: MOVF 30,W
079B: MOVWF 40
079C: MOVLW FF
079D: MOVWF 41
079E: BCF 03,6
079F: CALL 6B5
07A0: BSF 03,6
07A1: INCF 2E,F
07A2: BCF 03,6
07A3: GOTO 78E
.................... outnic(CURRP, RXSTART+1); /* Set current Rx page */
07A4: MOVLW 07
07A5: BSF 03,6
07A6: MOVWF 40
07A7: MOVLW 47
07A8: MOVWF 41
07A9: BCF 03,6
07AA: CALL 6B5
.................... next_page = RXSTART + 1;
07AB: MOVLW 47
07AC: MOVWF 30
.................... // Set LED 0 to be a 'link' LED, not 'collision' LED
.................... // It would be nice if the following code worked, but the upper bits of the
.................... // RTL config3 register are obstinately read-only, so it doesn't!
.................... // outnic(CMDR, 0xe0); /* DMA abort, page 3 */
.................... // outnic(RTL9346CR, 0xc0); /* Write-enable config regs */
.................... // outnic(RTL3, 0x10); /* Enable 'link' LED */
.................... // outnic(RTL9346CR, 0x00); /* Write-protect config regs */
.................... outnic(CMDR, 0x20); /* DMA abort, page 0 */
07AD: BSF 03,6
07AE: CLRF 40
07AF: MOVLW 20
07B0: MOVWF 41
07B1: BCF 03,6
07B2: CALL 6B5
.................... #if PROMISC
.................... outnic(RCR, 0x14); /* Accept broadcasts and all packets!*/
.................... #else
.................... outnic(RCR, 0x04); /* Accept broadcasts */
07B3: MOVLW 0C
07B4: BSF 03,6
07B5: MOVWF 40
07B6: MOVLW 04
07B7: MOVWF 41
07B8: BCF 03,6
07B9: CALL 6B5
.................... #endif
.................... outnic(TCR, 0); /* Normal Tx operation */
07BA: MOVLW 0D
07BB: BSF 03,6
07BC: MOVWF 40
07BD: CLRF 41
07BE: BCF 03,6
07BF: CALL 6B5
.................... outnic(ISR, 0xff); /* Clear interrupt flags */
07C0: MOVLW 07
07C1: BSF 03,6
07C2: MOVWF 40
07C3: MOVLW FF
07C4: MOVWF 41
07C5: BCF 03,6
07C6: CALL 6B5
.................... outnic(CMDR, 0x22); /* Start NIC */
07C7: BSF 03,6
07C8: CLRF 40
07C9: MOVLW 22
07CA: MOVWF 41
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -