📄 p16web.lst
字号:
0A3E: BSF 03,6
0A3F: MOVWF 3F
0A40: BCF 03,6
0A41: BCF 0A,3
0A42: CALL 6A2
0A43: BSF 0A,3
0A44: MOVF 78,W
0A45: BSF 03,6
0A46: MOVWF 38
0A47: BCF 03,6
0A48: RETLW 00
.................... }
....................
.................... /* Get data from NIC's RAM into the given buffer */
.................... void getnic_data(BYTE *data, int len)
.................... {
.................... BYTE b;
....................
.................... outnic(ISR, 0x40); /* Clear remote DMA interrupt flag */
*
0910: MOVLW 07
0911: MOVWF 40
0912: MOVLW 40
0913: MOVWF 41
0914: BCF 03,6
0915: BCF 0A,3
0916: CALL 6B5
0917: BSF 0A,3
.................... outnic(RBCR0, len); /* Byte count */
0918: MOVLW 0A
0919: BSF 03,6
091A: MOVWF 40
091B: MOVF 2F,W
091C: MOVWF 41
091D: BCF 03,6
091E: BCF 0A,3
091F: CALL 6B5
0920: BSF 0A,3
.................... outnic(RBCR1, 0);
0921: MOVLW 0B
0922: BSF 03,6
0923: MOVWF 40
0924: CLRF 41
0925: BCF 03,6
0926: BCF 0A,3
0927: CALL 6B5
0928: BSF 0A,3
.................... outnic(CMDR, 0x0a); /* Start, DMA remote read */
0929: BSF 03,6
092A: CLRF 40
092B: MOVLW 0A
092C: MOVWF 41
092D: BCF 03,6
092E: BCF 0A,3
092F: CALL 6B5
0930: BSF 0A,3
.................... while (len--) /* Get bytes */
0931: BSF 03,6
0932: MOVF 2F,W
0933: DECF 2F,F
0934: IORLW 00
0935: BTFSS 03,2
0936: GOTO 139
0937: BCF 03,6
0938: GOTO 156
0939: BCF 03,6
.................... {
.................... b = innic(DATAPORT);
093A: MOVLW 10
093B: BSF 03,6
093C: MOVWF 3F
093D: BCF 03,6
093E: BCF 0A,3
093F: CALL 6A2
0940: BSF 0A,3
0941: MOVF 78,W
0942: BSF 03,6
0943: MOVWF 30
.................... *data++ = b;
0944: MOVF 2E,W
0945: BCF 03,6
0946: MOVWF 7A
0947: BSF 03,6
0948: MOVF 2D,W
0949: INCF 2D,F
094A: BTFSC 03,2
094B: INCF 2E,F
094C: MOVWF 04
094D: BCF 03,7
094E: BCF 03,6
094F: BTFSC 7A,0
0950: BSF 03,7
0951: BSF 03,6
0952: MOVF 30,W
0953: MOVWF 00
.................... }
0954: BCF 03,6
0955: GOTO 131
.................... }
....................
.................... /* Put the given byte into the NIC's RAM */
.................... void putnic_byte(BYTE b)
.................... {
.................... outnic(RBCR0, 1); /* Byte count */
*
0DB7: MOVLW 0A
0DB8: BSF 03,6
0DB9: MOVWF 40
0DBA: MOVLW 01
0DBB: MOVWF 41
0DBC: BCF 03,6
0DBD: BCF 0A,3
0DBE: CALL 6B5
0DBF: BSF 0A,3
.................... outnic(RBCR1, 0);
0DC0: MOVLW 0B
0DC1: BSF 03,6
0DC2: MOVWF 40
0DC3: CLRF 41
0DC4: BCF 03,6
0DC5: BCF 0A,3
0DC6: CALL 6B5
0DC7: BSF 0A,3
.................... outnic(CMDR, 0x12); /* Start, DMA remote write */
0DC8: BSF 03,6
0DC9: CLRF 40
0DCA: MOVLW 12
0DCB: MOVWF 41
0DCC: BCF 03,6
0DCD: BCF 0A,3
0DCE: CALL 6B5
0DCF: BSF 0A,3
.................... outnic(DATAPORT, b);
0DD0: MOVLW 10
0DD1: BSF 03,6
0DD2: MOVWF 40
0DD3: MOVF 3E,W
0DD4: MOVWF 41
0DD5: BCF 03,6
0DD6: BCF 0A,3
0DD7: CALL 6B5
0DD8: BSF 0A,3
0DD9: RETLW 00
.................... }
....................
.................... /* Put the given byte into the NIC's RAM */
.................... void putnic_checkbyte(BYTE b)
.................... {
.................... check_byte(b);
*
0F35: BSF 03,6
0F36: MOVF 3D,W
0F37: MOVWF 3E
0F38: BCF 03,6
0F39: CALL 249
.................... putnic_byte(b);
0F3A: BSF 03,6
0F3B: MOVF 3D,W
0F3C: MOVWF 3E
0F3D: BCF 03,6
0F3E: CALL 5B7
.................... tpxdlen++;
0F3F: INCF 28,F
0F40: BTFSC 03,2
0F41: INCF 29,F
0F42: RETLW 00
.................... }
....................
.................... /* Put the given data into the NIC's RAM */
.................... void putnic_data(BYTE *data, int len)
.................... {
.................... len += len & 1; /* Round length up to an even value */
*
0AFA: BSF 03,6
0AFB: MOVF 3E,W
0AFC: ANDLW 01
0AFD: ADDWF 3E,F
.................... outnic(ISR, 0x40); /* Clear remote DMA interrupt flag */
0AFE: MOVLW 07
0AFF: MOVWF 40
0B00: MOVLW 40
0B01: MOVWF 41
0B02: BCF 03,6
0B03: BCF 0A,3
0B04: CALL 6B5
0B05: BSF 0A,3
.................... outnic(RBCR0, len); /* Byte count */
0B06: MOVLW 0A
0B07: BSF 03,6
0B08: MOVWF 40
0B09: MOVF 3E,W
0B0A: MOVWF 41
0B0B: BCF 03,6
0B0C: BCF 0A,3
0B0D: CALL 6B5
0B0E: BSF 0A,3
.................... outnic(RBCR1, 0);
0B0F: MOVLW 0B
0B10: BSF 03,6
0B11: MOVWF 40
0B12: CLRF 41
0B13: BCF 03,6
0B14: BCF 0A,3
0B15: CALL 6B5
0B16: BSF 0A,3
.................... outnic(CMDR, 0x12); /* Start, DMA remote write */
0B17: BSF 03,6
0B18: CLRF 40
0B19: MOVLW 12
0B1A: MOVWF 41
0B1B: BCF 03,6
0B1C: BCF 0A,3
0B1D: CALL 6B5
0B1E: BSF 0A,3
.................... while (len--) /* O/P bytes */
0B1F: BSF 03,6
0B20: MOVF 3E,W
0B21: DECF 3E,F
0B22: IORLW 00
0B23: BTFSS 03,2
0B24: GOTO 327
0B25: BCF 03,6
0B26: GOTO 342
0B27: BCF 03,6
.................... outnic(DATAPORT, *data++);
0B28: BSF 03,6
0B29: MOVF 3D,W
0B2A: BCF 03,6
0B2B: MOVWF 7A
0B2C: BSF 03,6
0B2D: MOVF 3C,W
0B2E: INCF 3C,F
0B2F: BTFSC 03,2
0B30: INCF 3D,F
0B31: MOVWF 04
0B32: BCF 03,7
0B33: BCF 03,6
0B34: BTFSC 7A,0
0B35: BSF 03,7
0B36: MOVF 00,W
0B37: BSF 03,6
0B38: MOVWF 3F
0B39: MOVLW 10
0B3A: MOVWF 40
0B3B: MOVF 3F,W
0B3C: MOVWF 41
0B3D: BCF 03,6
0B3E: BCF 0A,3
0B3F: CALL 6B5
0B40: BSF 0A,3
0B41: GOTO 31F
.................... len = 255; /* Done: must ensure DMA complete */
0B42: MOVLW FF
0B43: BSF 03,6
0B44: MOVWF 3E
0B45: BCF 03,6
.................... while (len && (innic(ISR)&0x40)==0)
0B46: BSF 03,6
0B47: MOVF 3E,F
0B48: BTFSS 03,2
0B49: GOTO 34C
0B4A: BCF 03,6
0B4B: GOTO 35D
0B4C: BCF 03,6
0B4D: MOVLW 07
0B4E: BSF 03,6
0B4F: MOVWF 3F
0B50: BCF 03,6
0B51: BCF 0A,3
0B52: CALL 6A2
0B53: BSF 0A,3
0B54: MOVF 78,W
0B55: ANDLW 40
0B56: IORLW 00
0B57: BTFSS 03,2
0B58: GOTO 35D
.................... len--;
0B59: BSF 03,6
0B5A: DECF 3E,F
0B5B: BCF 03,6
0B5C: GOTO 346
0B5D: RETLW 00
.................... }
....................
.................... /* Wrap an NIC Rx page number */
.................... BYTE nicwrap(int page)
.................... {
.................... if (page >= RXSTOP)
*
0887: MOVLW 5F
0888: BSF 03,6
0889: SUBWF 2E,W
088A: BTFSC 03,0
088B: GOTO 08E
088C: BCF 03,6
088D: GOTO 094
088E: BCF 03,6
.................... page += RXSTART - RXSTOP;
088F: MOVLW E7
0890: BSF 03,6
0891: ADDWF 2E,F
.................... else if (page < RXSTART)
0892: BCF 03,6
0893: GOTO 0A0
0894: MOVLW 46
0895: BSF 03,6
0896: SUBWF 2E,W
0897: BTFSS 03,0
0898: GOTO 09B
0899: BCF 03,6
089A: GOTO 0A0
089B: BCF 03,6
.................... page += RXSTOP - RXSTART;
089C: MOVLW 19
089D: BSF 03,6
089E: ADDWF 2E,F
089F: BCF 03,6
.................... return(page);
08A0: BSF 03,6
08A1: MOVF 2E,W
08A2: BCF 03,6
08A3: MOVWF 78
08A4: RETLW 00
.................... }
....................
.................... /* Input a byte from a NIC register */
.................... BYTE innic(int reg)
.................... {
.................... BYTE b;
....................
.................... DATA_FROM_NIC;
*
06A2: MOVLW FF
06A3: BSF 03,5
06A4: MOVWF 08
.................... NIC_ADDR = reg;
06A5: BCF 03,5
06A6: BSF 03,6
06A7: MOVF 3F,W
06A8: BCF 03,6
06A9: MOVWF 06
.................... NIC_IOR_ = 0;
06AA: BCF 09,0
.................... b = NIC_DATA;
06AB: MOVF 08,W
06AC: BSF 03,6
06AD: MOVWF 40
.................... NIC_IOR_ = 1;
06AE: BCF 03,6
06AF: BSF 09,0
.................... return(b);
06B0: BSF 03,6
06B1: MOVF 40,W
06B2: BCF 03,6
06B3: MOVWF 78
06B4: RETLW 00
.................... }
....................
.................... /* Output a byte to a NIC register */
.................... void outnic(int reg, int b)
.................... {
.................... NIC_ADDR = reg;
06B5: BSF 03,6
06B6: MOVF 40,W
06B7: BCF 03,6
06B8: MOVWF 06
.................... NIC_DATA = b;
06B9: BSF 03,6
06BA: MOVF 41,W
06BB: BCF 03,6
06BC: MOVWF 08
.................... DATA_TO_NIC;
06BD: MOVLW 00
06BE: BSF 03,5
06BF: MOVWF 08
.................... NIC_IOW_ = 0;
06C0: BCF 03,5
06C1: BCF 09,1
.................... delay_cycles(1);
06C2: NOP
.................... NIC_IOW_ = 1;
06C3: BSF 09,1
.................... DATA_FROM_NIC;
06C4: MOVLW FF
06C5: BSF 03,5
06C6: MOVWF 08
06C7: BCF 03,5
06C8: RETLW 00
.................... }
....................
.................... /* EOF */
....................
.................... #include "\chipweb\pcm\p16_drv.h"
.................... /* Low-level driver functions for PIC Web server
.................... ** Copyright (c) Iosoft Ltd 2001
.................... ** This software is only licensed for distribution in the Iosoft ChipWeb package
.................... ** and may only be used for personal experimentation by the purchaser
.................... ** of that package, on condition that this copyright notice is retained.
.................... ** For commercial licensing, contact license@iosoft.co.uk
.................... **
.................... ** This is experimental software; use it entirely at your own risk */
....................
.................... /* Revisions:
.................... ** v0.01 JPB 17/12/00 Functions extracted from PIC_SLIP v0.01
.................... */
....................
.................... /* Globals */
.................... BOOL checkflag; // Checksum flag & byte values
.................... BYTE checkhi, checklo;
....................
.................... BYTE ungot_byte;
.................... BOOL ungot;
....................
.................... /* Prototypes for this file */
.................... int get_data(BYTE *ptr, int maxlen);
.................... BOOL get_byte(BYTE &b);
.................... void unget_byte(BYTE &b);
.................... BOOL get_word(WORD &w);
.................... BOOL get_lword(LWORD &lw);
.................... void discard_data(void);
.................... BOOL match_byte(BYTE b);
.................... BOOL match_word(WORD w);
.................... void skip_space(void);
.................... BOOL skip_byte();
.................... BOOL skip_word();
.................... BOOL skip_lword();
.................... int check_str(char *s);
.................... void check_byte(BYTE b);
.................... void check_word(WORD w);
.................... void check_lword(LWORD &lw);
.................... void check_bytes(BYTE *dat, int len);
.................... void put_byte(BYTE b);
.................... void put_str(char *s);
.................... void put_word(WORD w);
.................... void put_data(BYTE *data, int len);
.................... void put_lword(LWORD &lw);
.................... void swapw(WORD &val);
....................
.................... /* Get incoming data in buffer; discard any buffer overflow */
.................... int get_data(BYTE *ptr, int maxlen)
.................... {
.................... BYTE b;
.................... int n=0;
....................
.................... while (maxlen-- > 0 && get_byte(b))
.................... {
........
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -