123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- PAGE 60,132
- NAME PKT_RX
- ifdef ??version
- masm
- jumps
- endif
- PUBLIC _pktDrop, _pktRxBuf, _pktTxBuf, _pktTemp
- PUBLIC _rxOutOfs, _rxInOfs, _PktReceiver, _pktRxEnd
- RX_BUF_SIZE = 1500
- TX_BUF_SIZE = 1500
- ifdef DOSX
- .386
- NUM_RX_BUF = 32
- _TEXT SEGMENT PUBLIC DWORD USE16 'CODE'
- _TEXT ENDS
- _DATA SEGMENT PUBLIC DWORD USE16 'CODE'
- _DATA ENDS
- D_SEG EQU <_TEXT SEGMENT>
- D_END EQU <_TEXT ENDS>
- ASSUME CS:_TEXT,DS:_TEXT
- else
- .286
- NUM_RX_BUF = 10
- _TEXT SEGMENT PUBLIC DWORD 'CODE'
- _TEXT ENDS
- _DATA SEGMENT PUBLIC DWORD 'DATA'
- _DATA ENDS
- D_SEG EQU <_DATA SEGMENT>
- D_END EQU <_DATA ENDS>
- ASSUME CS:_TEXT,DS:_DATA
- endif
- D_SEG
- RX_ELEMENT STRUC
- firstCount dw 0
- secondCount dw 0
- handle dw 0
- destinAdr db 6 dup (0)
- sourceAdr db 6 dup (0)
- protocol dw 0
- rxBuffer db RX_BUF_SIZE dup (0)
- ENDS
- align 4
- _rxOutOfs dw offset _pktRxBuf
- _rxInOfs dw offset _pktRxBuf
- _pktDrop dw 0,0
- _pktTemp db 20 dup (0)
- _pktTxBuf db (TX_BUF_SIZE+14) dup (0)
- _pktRxBuf RX_ELEMENT NUM_RX_BUF dup (<>)
- LAST_OFS = offset $
- screenSeg dw 0B800h
- newInOffset dw 0
- fanChars db '-\|/'
- fanIndex dw 0
- D_END
- _TEXT SEGMENT
- SHOW_RX MACRO
- push es
- push bx
- mov bx, screenSeg
- mov es, bx
- mov di, 158
- mov bx, fanIndex
- mov al, fanChars[bx]
- mov ah, 15
- stosw
- inc fanIndex
- and fanIndex, 3
- pop bx
- pop es
- ENDM
- ENQUEUE MACRO
- LOCAL @noWrap
- mov ax, _rxInOfs
- add ax, SIZE RX_ELEMENT
- cmp ax, LAST_OFS
- jb @noWrap
- lea ax, _pktRxBuf
- align 4
- @noWrap: cmp ax, _rxOutOfs
- je @dump
- mov di, _rxInOfs
- mov newInOffset, ax
-
-
- ENDM
- _PktReceiver:
- pushf
- cli
- push ds
- push bx
- ifdef DOSX
- mov bx, cs
- else
- mov bx, SEG _DATA
- endif
- mov ds, bx
- mov es, bx
- pop bx
- cmp ax, 0
- jne @post
- ifdef DEBUG
- SHOW_RX
- endif
- cmp cx, RX_BUF_SIZE+14
- ja @skip
- ENQUEUE
- mov [di].firstCount, cx
- mov [di].handle, bx
- add di, 6
- pop ds
- popf
- retf
- align 4
- @dump: inc _pktDrop[0]
- adc _pktDrop[2], 0
- @skip: xor di, di
- xor ax, ax
- mov es, ax
- pop ds
- popf
- retf
- align 4
- @post: or si, si
- jz @discard
- sub si, 6
-
-
-
-
-
-
-
- mov [si].secondCount, cx
- mov ax, newInOffset
- mov _rxInOfs, ax
- align 4
- @discard:pop ds
- popf
- retf
- _pktRxEnd db 0
- _TEXT ENDS
- END
|