home *** CD-ROM | disk | FTP | other *** search
- version equ 0
-
- include defs.asm
-
- ;Ported from Tim Krauskopf's micnet.asm, an assembly language
- ;driver for the MICOM-Interlan NI5210, by Russell Nelson. Any bugs
- ;are due to Russell Nelson.
- ;Updated to version 1.08 Feb. 17, 1989 by Russell Nelson.
- ;Updated to support 1500 byte MTU April 27, 1989 By Brad Clements.
-
- ; Copyright, 1988-1992, Russell Nelson, Crynwr Software
-
- ; 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.
-
- code segment word public
- assume cs:code, ds:code
-
- ;
- ; Equates for controlling the ubnicps2 board
- ;
- SCR equ byte ptr 0ffffh
- SCR_GREEN equ 1
- SCR_CA equ 2
- SCR_LOOPBACK equ 4
- SCR_RESET equ 8
-
- ;
- ; Data segment
- ;
-
- public int_no
- int_no db 3,0,0,0 ; interrupt number.
- base_addr dw 0d000h,0 ; base segment for board (jumper set)
- enet_addr db EADDR_LEN dup(?)
-
- public driver_class, driver_type, driver_name, driver_function, parameter_list
- driver_class db BLUEBOOK, IEEE8023, 0 ;from the packet spec
- driver_type db 11 ;from the packet spec
- driver_name db "NCR ET105",0 ;name of the driver.
- driver_function db 2
- parameter_list label byte
- db 1 ;major rev of packet driver
- db 9 ;minor rev of packet driver
- db 14 ;length of parameter list
- db EADDR_LEN ;length of MAC-layer address
- dw GIANT ;MTU, including MAC headers
- dw MAX_MULTICAST * EADDR_LEN ;buffer size of multicast addrs
- dw 0 ;(# of back-to-back MTU rcvs) - 1
- dw 0 ;(# of successive xmits) - 1
- int_num dw 0 ;Interrupt # to hook for post-EOI
- ;processing, 0 == none,
-
- enable_network:
- ; connect to network
- push es
- mov es,base_addr
- or es:[SCR],SCR_LOOPBACK
- pop es
- ret
-
-
- reset_586:
- ; Reset the chip
- push es
- mov es,base_addr
- or es:[SCR],SCR_RESET
- jmp $+2
- jmp $+2
- jmp $+2
- jmp $+2
- and es:[SCR],not SCR_RESET
- pop es
- ret
-
-
- public get_address
- get_address:
- ;get the address of the interface.
- ;enter with es:di -> place to get the address, cx = size of address buffer.
- ;exit with nc, cx = actual size of address, or cy if buffer not big enough.
- assume ds:code
- cmp cx,EADDR_LEN ;make sure that we have enough room.
- jb get_address_2
- mov cx,EADDR_LEN
- mov si,offset enet_addr
- rep movsb
- mov cx,EADDR_LEN
- clc
- ret
- get_address_2:
- stc
- ret
-
-
- doca:
- ;we may be called from places in which ds is unknown.
- assume ds:nothing
- push es
- mov es,base_addr
- or es:[SCR],SCR_CA
- and es:[SCR],not SCR_CA
- xor es:[SCR],SCR_GREEN ;blink the led on each CA.
- pop es
- ret
- assume ds:code
- ;yet, we really should assume ds==code for the rest of this stuff.
-
- ;
- ; Here we include the code that is common between 82586 implementations.
- ; Everything above this is resident.
- include 82586.asm
- ; Everything below this is discarded upon installation.
-
- public usage_msg
- usage_msg db "usage: ncret105 [-n] [-d] [-w] <packet_int_no> <int_no> <base_addr> <Ethernet_address>",CR,LF,'$'
-
- public copyright_msg
- copyright_msg db "Packet driver for the NCR ET105, version ",'0'+(majver / 10),'0'+(majver mod 10),".",'0'+version,".",'0'+i82586_version,CR,LF
- db "Portions Copyright 1988 The Board of Trustees of the University of Illinois",CR,LF,'$'
-
- no_mem_msg db "No ET 105 found at ",'$'
- no_eaddr_msg db "You must specify an Ethernet address for the ET 105",CR,LF
- db "Your card came with a pre-printed label giving the address assigned",CR,LF
- db "to this card.",CR,LF,'$'
-
- check_board:
- mov SCP,0 ;16-bit bus internally.
- mov ax,base_addr
- mov cx,4000h-1 ;test all 16K minus the SCR.
- call memory_test
- jz have_mem
- pop dx ;drop our return address
- mov di,offset base_addr
- mov dx,offset no_mem_msg
- call print_number
- stc
- ret
- have_mem:
- mov si,offset enet_addr
- mov cx,EADDR_LEN
- xor ah,ah
- check_eaddr:
- lodsb
- or ah,al
- loop check_eaddr
- or ah,ah ;did we have all zeroes?
- jne have_eaddr
- pop dx ;return to the caller of etopen.
- mov dx,offset no_eaddr_msg ;print this error first, though.
- mov ah,9
- int 21h
- stc
- ret
- have_eaddr:
- ret
-
-
- public parse_args
- parse_args:
- mov di,offset int_no
- call get_number
- mov di,offset base_addr
- call get_number
- push ds
- pop es
- mov di,offset enet_addr
- call get_eaddr
- clc
- ret
-
-
- int_no_name db "Interrupt number ",'$'
- base_addr_name db "Memory address ",'$'
-
-
- public print_parameters
- print_parameters:
- mov di,offset int_no
- mov dx,offset int_no_name
- call print_number
- mov ax,memory_begin
- mov cl,4
- shr ax,cl
- add base_addr,ax
- push ax
- mov di,offset base_addr
- mov dx,offset base_addr_name
- call print_number
- pop ax
- sub base_addr,ax
- ret
-
- include memtest.asm
- extrn get_hex: near
- include getea.asm
-
- code ends
-
- end
-