home *** CD-ROM | disk | FTP | other *** search
/ Shareware Supreme Volume 6 #1 / swsii.zip / swsii / 426 / 3C509A.ZIP / DEFS.ASM < prev    next >
Assembly Source File  |  1993-02-04  |  6KB  |  192 lines

  1. majver        equ    10        ;version number of the infrastructure.
  2.  
  3. MAX_ADDR_LEN    equ    16        ;maximum number of bytes in our address.
  4.  
  5. MAX_HANDLE    equ    10        ;maximum number of handles.
  6.  
  7. MAX_P_LEN    equ    8        ;maximum type length
  8.  
  9. MAX_MULTICAST    equ    8        ;maximum number of multicast addresses.
  10.  
  11. ;  Copyright, 1988-1992, Russell Nelson, Crynwr Software
  12.  
  13. ;   This program is free software; you can redistribute it and/or modify
  14. ;   it under the terms of the GNU General Public License as published by
  15. ;   the Free Software Foundation, version 1.
  16. ;
  17. ;   This program is distributed in the hope that it will be useful,
  18. ;   but WITHOUT ANY WARRANTY; without even the implied warranty of
  19. ;   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20. ;   GNU General Public License for more details.
  21. ;
  22. ;   You should have received a copy of the GNU General Public License
  23. ;   along with this program; if not, write to the Free Software
  24. ;   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  25.  
  26. HT    equ    09h
  27. CR    equ    0dh
  28. LF    equ    0ah
  29.  
  30. ;
  31. ;  Packet Driver Error numbers
  32. NO_ERROR    equ    0        ;no error at all.
  33. BAD_HANDLE    equ    1        ;invalid handle number
  34. NO_CLASS    equ    2        ;no interfaces of specified class found
  35. NO_TYPE        equ    3        ;no interfaces of specified type found
  36. NO_NUMBER    equ    4        ;no interfaces of specified number found
  37. BAD_TYPE    equ    5        ;bad packet type specified
  38. NO_MULTICAST    equ    6        ;this interface does not support
  39.                     ;multicast
  40. CANT_TERMINATE    equ    7        ;this packet driver cannot terminate
  41. BAD_MODE    equ    8        ;an invalid receiver mode was specified
  42. NO_SPACE    equ    9        ;operation failed because of
  43.                     ;insufficient space
  44. TYPE_INUSE    equ    10        ;the type had previously been accessed,
  45.                     ;and not released.
  46. BAD_COMMAND    equ    11        ;the command was out of range, or not
  47.                     ;implemented
  48. CANT_SEND    equ    12        ;the packet couldn't be sent (usually
  49.                     ;hardware error)
  50. CANT_SET    equ    13        ;hardware address couldn't be changed
  51.                     ;(more than 1 handle open)
  52. BAD_ADDRESS    equ    14        ;hardware address has bad length or
  53.                     ;format
  54. CANT_RESET    equ    15        ;Couldn't reset interface (more than
  55.                     ;1 handle open).
  56. BAD_IOCB    equ    16        ;an invalid iocb was specified
  57.  
  58. ;a few useful Ethernet definitions.
  59. RUNT        equ    60        ;smallest legal size packet, no fcs
  60. GIANT        equ    1514        ;largest legal size packet, no fcs
  61. EADDR_LEN    equ    6        ;Ethernet address length.
  62. ARCADDR_LEN    equ    1
  63.  
  64. BLUEBOOK    equ    1
  65. IEEE8023    equ    11
  66.  
  67. ;The following two macros are used to manipulate port addresses.
  68. ;Use loadport to initialize dx.  Use setport to set a specific port on
  69. ;the board.  setport remembers what the current port number is, but beware!
  70. ;setport assumes that code is being executed in the same order as the
  71. ;code is presented in the source file.  Whenever this assumption is violated,
  72. ;you need to enter another loadport.  Some, but not all examples are:
  73. ;in a loop with multiple setports, or a backward jump over a setport, or
  74. ;a forward jump over a setport.  If you have any doubt, consult the
  75. ;individual driver sources for examples of usage.  If you suspect that
  76. ;you have too few loadports, define the symbol "no_confidence" to a
  77. ;one.  This will force a loadport before every setport.  If you wish to turn
  78. ;it off for some of your code, redefine it to a zero.
  79.  
  80. loadport    macro
  81.     mov    dx,io_addr
  82. port_no    =    0
  83.     endm
  84.  
  85. ;change the port number from the current value to the new value.
  86. setport    macro    new_port_no
  87.     ifdef    no_confidence        ;define if you suspect that you don't
  88.       if    no_confidence
  89.         loadport        ;  have enough loadports, i.e. dx is
  90.       endif
  91.     endif                ;  set to the wrong port.
  92.     if    new_port_no - port_no EQ 1
  93.         inc    dx
  94.     else
  95.         if    new_port_no - port_no EQ -1
  96.             dec    dx
  97.         else
  98.             if    new_port_no - port_no NE 0
  99.                 add    dx,new_port_no - port_no
  100.             endif
  101.         endif
  102.     endif
  103. port_no    =    new_port_no
  104.     endm
  105.  
  106. ;this macro does a "rep movsb" with a static count.
  107. repmov    macro    count
  108.     rept    (count) / 2
  109.     movsw
  110.     endm
  111.     rept    (count) MOD 2
  112.     movsb
  113.     endm
  114.     endm
  115.  
  116. ;add a word to a dword.
  117. add2    macro    n,a            ; inc a 32 bit integer
  118.     add    n.offs,a        ;increment the low word
  119.     adc    n.segm,0        ;increment the high word
  120.     endm
  121.  
  122. ;this macro writes the given character to the given row and column on
  123. ;  an CGA.
  124. to_scrn    macro    r, c, ch
  125.     local    again
  126.     push    bx
  127.     push    es
  128.     mov    bx,0b800h
  129.     mov    es,bx
  130.     mov    bx,es:[r*160+c*2]
  131. again:
  132.     inc    bh
  133.     and    bh,07h
  134.     je    again            ;; don't use black.
  135.     mov    bl,ch
  136.     mov    es:[r*160+c*2],bx
  137.     pop    es
  138.     pop    bx
  139.     endm
  140.  
  141.  
  142.  
  143. segmoffs    struc            ; defines offs as 0, segm as 2
  144. offs        dw    ?
  145. segm        dw    ?
  146. segmoffs    ends
  147.  
  148. CY    equ    0001h
  149. EI    equ    0200h
  150.  
  151. iocb        struc            ; as_send_pkt structure
  152. buffer        dd    ?        ; Pointer to the buffer
  153. len        dw    ?        ; Its length
  154. flags        db    ?        ; Some flags
  155. ret_code    db    ?        ; Completion code
  156. upcall        dd    ?        ; I/O completion upcall
  157. next        dd    ?        ; Private next pointer (queue)
  158. resv        db    4 dup (?)    ; Unused private data
  159. iocb        ends
  160.  
  161. DONE    equ    1        ; I/O complete flag
  162. CALLME    equ    2        ; Please upcall me flag
  163.  
  164.  
  165. send_queueempty    macro
  166. ; Check if send queue is empty.
  167. ; Enter with interrupts disabled.
  168. ; Exit with zr (zero) if empty, nz (not zero) if not.
  169. ; Destroys ax.
  170.     mov ax,    word ptr send_head    ; Queue empty?
  171.     or ax,    word ptr send_head+2
  172.     endm
  173.  
  174. send_peekqueue    macro
  175. ; Peek into the queue and get the next entry.
  176. ; Enter with interrupts disabled.
  177. ; Exit with es:di -> iocb.
  178.     les di, send_head    ; Get head segment:offset
  179.     endm
  180.  
  181. ; Bits in sys_features
  182. MICROCHANNEL    equ    02        ; a micro channel computer
  183. TWO_8259    equ    40h        ; 2nd 8259 exists
  184.  
  185. ; Bits in flagbyte
  186. CALLED_ETOPEN    equ    1        ; have called etopen
  187. D_OPTION    equ    2        ; delayed initialization
  188. N_OPTION    equ    4        ; Novell protocol conversion
  189. W_OPTION    equ    8        ; Windows upcall checking.
  190. U_OPTION    equ    10h        ; Terminate the driver.
  191.  
  192.