majver equ 5 ;version number of the infrastructure. MAX_ADDR_LEN equ 16 ;maximum number of bytes in our address. MAX_HANDLE equ 8 ;maximum number of handles. MAX_P_LEN equ 8 ;maximum type length MAX_MULTICAST equ 8 ;maximum number of multicast addresses. ; Copyright, 1988, 1989, Russell Nelson ; This program is free software; you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation, version 1. ; ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with this program; if not, write to the Free Software ; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. .286 HT equ 09h CR equ 0dh LF equ 0ah ; ; Packet Driver Error numbers NO_ERROR equ 0 ;no error at all. BAD_HANDLE equ 1 ;invalid handle number NO_CLASS equ 2 ;no interfaces of specified class found NO_TYPE equ 3 ;no interfaces of specified type found NO_NUMBER equ 4 ;no interfaces of specified number found BAD_TYPE equ 5 ;bad packet type specified NO_MULTICAST equ 6 ;this interface does not support ;multicast CANT_TERMINATE equ 7 ;this packet driver cannot terminate BAD_MODE equ 8 ;an invalid receiver mode was specified NO_SPACE equ 9 ;operation failed because of ;insufficient space TYPE_INUSE equ 10 ;the type had previously been accessed, ;and not released. BAD_COMMAND equ 11 ;the command was out of range, or not ;implemented CANT_SEND equ 12 ;the packet couldn't be sent (usually ;hardware error) CANT_SET equ 13 ;hardware address couldn't be changed ;(more than 1 handle open) BAD_ADDRESS equ 14 ;hardware address has bad length or ;format ;a few useful Ethernet definitions. RUNT equ 60 ;smallest legal size packet, no fcs GIANT equ 1514 ;largest legal size packet, no fcs EADDR_LEN equ 6 ;Ethernet address length. ;The following two macros are used to manipulate port addresses. ;Use loadport to initialize dx. Use setport to set a specific port on ;the board. setport remembers what the current port number is, but beware! ;setport assumes that code is being executed in the same order as the ;code is presented in the source file. Whenever this assumption is violated, ;you need to enter another loadport. Some, but not all examples are: ;in a loop with multiple setports, or a backward jump over a setport, or ;a forward jump over a setport. If you have any doubt, consult the ;individual driver sources for examples of usage. If you suspect that ;you have too few loadports, define the symbol "no_confidence". This will ;force a loadport before every setport. loadport macro mov dx,io_addr port_no = 0 endm ;change the port number from the current value to the new value. setport macro new_port_no ifdef no_confidence ;define if you suspect that you don't loadport ; have enough loadports, i.e. dx is endif ; set to the wrong port. if new_port_no - port_no EQ 1 inc dx else if new_port_no - port_no EQ -1 dec dx else if new_port_no - port_no NE 0 add dx,new_port_no - port_no endif endif endif port_no = new_port_no endm segmoffs struc offs dw ? segm dw ? segmoffs ends