 
-----------------------------------------------------------------------------
1) This file is a supplement to arcnet.txt.  Please read that for general
   driver configuration help.
-----------------------------------------------------------------------------
2) This file is no longer Linux-specific.  It should probably be moved out of
   the kernel sources.  Ideas?
-----------------------------------------------------------------------------

Because so many people (myself included) seem to have obtained ARCnet cards
without manuals, this file contains a quick introduction to ARCnet hardware,
some cabling tips, and a listing of all jumper settings I can find. Please
e-mail apenwarr@worldvisions.ca with any settings for your particular card,
or any other information you have!


INTRODUCTION TO ARCNET
----------------------

ARCnet is a network type which works in a way similar to popular Ethernet
networks but which is also different in some very important ways.

First of all, you can get ARCnet cards in at least two speeds: 2.5 Mbps
(slower than Ethernet) and 100 Mbps (faster than normal Ethernet).  In fact,
there are others as well, but these are less common.  The different hardware
types, as far as I'm aware, are not compatible and so you cannot wire a
100 Mbps card to a 2.5 Mbps card, and so on.  From what I hear, my driver does
work with 100 Mbps cards, but I haven't been able to verify this myself,
since I only have the 2.5 Mbps variety.  It is probably not going to saturate
your 100 Mbps card.  Stop complaining. :)

You also cannot connect an ARCnet card to any kind of Ethernet card and
expect it to work.  

There are two "types" of ARCnet - STAR topology and BUS topology.  This
refers to how the cards are meant to be wired together.  According to most
available documentation, you can only connect STAR cards to STAR cards and
BUS cards to BUS cards.  That makes sense, right?  Well, it's not quite
true; see below under "Cabling."

Once you get past these little stumbling blocks, ARCnet is actually quite a
well-designed standard.  It uses something called "modified token passing"
which makes it completely incompatible with so-called "Token Ring" cards,
but which makes transfers much more reliable than Ethernet does.  In fact,
ARCnet will guarantee that a packet arrives safely at the destination, and
even if it can't possibly be delivered properly (ie. because of a cable
break, or because the destination computer does not exist) it will at least
tell the sender about it.

Because of the carefully defined action of the "token", it will always make
a pass around the "ring" within a maximum length of time.  This makes it
useful for realtime networks.

In addition, all known ARCnet cards have an (almost) identical programming
interface.  This means that with one ARCnet driver you can support any
card, whereas with Ethernet each manufacturer uses what is sometimes a
completely different programming interface, leading to a lot of different,
sometimes very similar, Ethernet drivers.  Of course, always using the same
programming interface also means that when high-performance hardware
facilities like PCI bus mastering DMA appear, it's hard to take advantage of
them.  Let's not go into that.

One thing that makes ARCnet cards difficult to program for, however, is the
limit on their packet sizes; standard ARCnet can only send packets that are
up to 508 bytes in length.  This is smaller than the Internet "bare minimum"
of 576 bytes, let alone the Ethernet MTU of 1500.  To compensate, an extra
level of encapsulation is defined by RFC1201, which I call "packet
splitting," that allows "virtual packets" to grow as large as 64K each,
although they are generally kept down to the Ethernet-style 1500 bytes.

For more information on the advantages and disadvantages (mostly the
advantages) of ARCnet networks, you might try the "ARCnet Trade Association"
WWW page:
	http://www.arcnet.com


CABLING ARCNET NETWORKS
-----------------------

This section was rewritten by 
        Vojtech Pavlik     <vojtech@suse.cz>
using information from several people, including:
        Avery Pennraun     <apenwarr@worldvisions.ca>
 	Stephen A. Wood    <saw@hallc1.cebaf.gov>
 	John Paul Morrison <jmorriso@bogomips.ee.ubc.ca>
 	Joachim Koenig     <jojo@repas.de>
and Avery touched it up a bit, at Vojtech's request.

ARCnet (the classic 2.5 Mbps version) can be connected by two different
types of cabling: coax and twisted pair.  The other ARCnet-type networks
(100 Mbps TCNS and 320 kbps - 32 Mbps ARCnet Plus) use different types of
cabling (Type1, Fiber, C1, C4, C5).

For a coax network, you "should" use 93 Ohm RG-62 cable.  But other cables
also work fine, because ARCnet is a very stable network. I personally use 75
Ohm TV antenna cable.

Cards for coax cabling are shipped in two different variants: for BUS and
STAR network topologies.  They are mostly the same.  The only difference
lies in the hybrid chip installed.  BUS cards use high impedance output,
while STAR use low impedance.  Low impedance card (STAR) is electrically
equal to a high impedance one with a terminator installed.

Usually, the ARCnet networks are built up from STAR cards and hubs.  There
are two types of hubs - active and passive.  Passive hubs are small boxes
with four BNC connectors containing four 47 Ohm resistors:

   |         | wires
   R         + junction
-R-+-R-      R 47 Ohm resistors
   R
   |

The shielding is connected together.  Active hubs are much more complicated;
they are powered and contain electronics to amplify the signal and send it
to other segments of the net.  They usually have eight connectors.  Active
hubs come in two variants - dumb and smart.  The dumb variant just
amplifies, but the smart one decodes to digital and encodes back all packets
coming through.  This is much better if you have several hubs in the net,
since many dumb active hubs may worsen the signal quality.

And now to the cabling.  What you can connect together:

1. A card to a card.  This is the simplest way of creating a 2-computer
   network.

2. A card to a passive hub.  Remember that all unused connectors on the hub
   must be properly terminated with 93 Ohm (or something else if you don't
   have the right ones) terminators.
   	(Avery's note: oops, I didn't know that.  Mine (TV cable) works
	anyway, though.)

3. A card to an active hub.  Here is no need to terminate the unused
   connectors except some kind of aesthetic feeling.  But, there may not be
   more than eleven active hubs between any two computers.  That of course
   doesn't limit the number of active hubs on the network.
   
4. An active hub to another.

5. An active hub to passive hub.

Remember, that you can not connect two passive hubs together.  The power loss
implied by such a connection is too high for the net to operate reliably.

An example of a typical ARCnet network:

           R                     S - STAR type card              
    S------H--------A-------S    R - Terminator
           |        |            H - Hub                         
           |        |            A - Active hub                  
           |   S----H----S                                       
           S        |                                            
                    |                                            
                    S                                            
                                                                          
The BUS topology is very similar to the one used by Ethernet.  The only
difference is in cable and terminators: they should be 93 Ohm.  Ethernet
uses 50 Ohm impedance. You use T connectors to put the computers on a single
line of cable, the bus. You have to put terminators at both ends of the
cable. A typical BUS ARCnet network looks like:

    RT----T------T------T------T------TR
     B    B      B      B      B      B

  B - BUS type card
  R - Terminator
  T - T connector

But that is not all! The two types can be connected together.  According to
the official documentation the only way of connecting them is using an active
hub:

         A------T------T------TR
         |      B      B      B
     S---H---S
         |
         S

The official docs also state that you can use STAR cards at the ends of
BUS network in place of a BUS card and a terminator:

     S------T------T------S
            B      B

But, according to my own experiments, you can simply hang a BUS type card
anywhere in middle of a cable in a STAR topology network.  And more - you
can use the bus card in place of any star card if you use a terminator. Then
you can build very complicated networks fulfilling all your needs!  An
example:

                                  S
                                  |
           RT------T-------T------H------S
            B      B       B      |
                                  |       R
    S------A------T-------T-------A-------H------TR                    
           |      B       B       |       |      B                         
           |   S                 BT       |                                 
           |   |                  |  S----A-----S
    S------H---A----S             |       | 
           |   |      S------T----H---S   |
           S   S             B    R       S  
                                                               
A basically different cabling scheme is used with Twisted Pair cabling. Each
of the TP cards has two RJ (phone-cord style) connectors.  The cards are
then daisy-chained together using a cable connecting every two neighboring
cards.  The ends are terminated with RJ 93 Ohm terminators which plug into
the empty connectors of cards on the ends of the chain.  An example:

          ___________   ___________
      _R_|_         _|_|_         _|_R_  
     |     |       |     |       |     |      
     |Card |       |Card |       |Card |     
     |_____|       |_____|       |_____|          


There are also hubs for the TP topology.  There is nothing difficult
involved in using them; you just connect a TP chain to a hub on any end or
even at both.  This way you can create almost any network configuration. 
The maximum of 11 hubs between any two computers on the net applies here as
well.  An example:

    RP-------P--------P--------H-----P------P-----PR
                               |
      RP-----H--------P--------H-----P------PR
             |                 |
             PR                PR

    R - RJ Terminator
    P - TP Card
    H - TP Hub

Like any network, ARCnet has a limited cable length.  These are the maximum
cable lengths between two active ends (an active end being an active hub or
a STAR card).

		RG-62       93 Ohm up to 650 m
		RG-59/U     75 Ohm up to 457 m
		RG-11/U     75 Ohm up to 533 m
		IBM Type 1 150 Ohm up to 200 m
		IBM Type 3 100 Ohm up to 100 m

The maximum length of all cables connected to a passive hub is limited to 65
meters for RG-62 cabling; less for others.  You can see that using passive
hubs in a large network is a bad idea. The maximum length of a single "BUS
Trunk" is about 300 meters for RG-62. The maximum distance between the two
most distant points of the net is limited to 3000 meters. The maximum length
of a TP cable between two cards/hubs is 650 meters.


SETTING THE JUMPERS
-------------------

All ARCnet cards should have a total of four or five different settings:

  - the I/O address:  this is the "port" your ARCnet card is on.  Probed
    values in the Linux ARCnet driver are only from 0x200 through 0x3F0. (If
    your card has additional ones, which is possible, please tell me.) This
    should not be the same as any other device on your system.  According to
    a doc I got from Novell, MS Windows prefers values of 0x300 or more,
    eating net connections on my system (at least) otherwise.  My guess is
    this may be because, if your card is at 0x2E0, probing for a serial port
    at 0x2E8 will reset the card and probably mess things up royally.
	- Avery's favourite: 0x300.

  - the IRQ: on  8-bit cards, it might be 2 (9), 3, 4, 5, or 7.
             on 16-bit cards, it might be 2 (9), 3, 4, 5, 7, or 10-15.
             
    Make sure this is different from any other card on your system.  Note
    that IRQ2 is the same as IRQ9, as far as Linux is concerned.  You can
    "cat /proc/interrupts" for a somewhat complete list of which ones are in
    use at any given time.  Here is a list of common usages from Vojtech
    Pavlik <vojtech@suse.cz>:
    	("Not on bus" means there is no way for a card to generate this
	interrupt)
	IRQ  0 - Timer 0 (Not on bus)
	IRQ  1 - Keyboard (Not on bus)
	IRQ  2 - IRQ Controller 2 (Not on bus, nor does interrupt the CPU)
	IRQ  3 - COM2
	IRQ  4 - COM1
	IRQ  5 - FREE (LPT2 if you have it; sometimes COM3; maybe PLIP)
	IRQ  6 - Floppy disk controller
	IRQ  7 - FREE (LPT1 if you don't use the polling driver; PLIP) 
	IRQ  8 - Realtime Clock Interrupt (Not on bus)
	IRQ  9 - FREE (VGA vertical sync interrupt if enabled)
	IRQ 10 - FREE
	IRQ 11 - FREE
	IRQ 12 - FREE
	IRQ 13 - Numeric Coprocessor (Not on bus)
	IRQ 14 - Fixed Disk Controller
	IRQ 15 - FREE (Fixed Disk Controller 2 if you have it) 
	
	Note: IRQ 9 is used on some video cards for the "vertical retrace"
	interrupt.  This interrupt would have been handy for things like
	video games, as it occurs exactly once per screen refresh, but
	unfortunately IBM cancelled this feature starting with the original
	VGA and thus many VGA/SVGA cards do not support it.  For this
	reason, no modern software uses this interrupt and it can almost
	always be safely disabled, if your video card supports it at all.
	
	If your card for some reason CANNOT disable this IRQ (usually there
	is a jumper), one solution would be to clip the printed circuit
	contact on the board: it's the fourth contact from the left on the
	back side.  I take no responsibility if you try this.

	- Avery's favourite: IRQ2 (actually IRQ9).  Watch that VGA, though.

  - the memory address:  Unlike most cards, ARCnets use "shared memory" for
    copying buffers around.  Make SURE it doesn't conflict with any other
    used memory in your system!
	A0000		- VGA graphics memory (ok if you don't have VGA)
        B0000		- Monochrome text mode
        C0000		\  One of these is your VGA BIOS - usually C0000.
        E0000		/
        F0000		- System BIOS

    Anything less than 0xA0000 is, well, a BAD idea since it isn't above
    640k.
	- Avery's favourite: 0xD0000

  - the station address:  Every ARCnet card has its own "unique" network
    address from 0 to 255.  Unlike Ethernet, you can set this address
    yourself with a jumper or switch (or on some cards, with special
    software).  Since it's only 8 bits, you can only have 254 ARCnet cards
    on a network.  DON'T use 0 or 255, since these are reserved (although
    neat stuff will probably happen if you DO use them).  By the way, if you
    haven't already guessed, don't set this the same as any other ARCnet on
    your network!
	- Avery's favourite:  3 and 4.  Not that it matters.

  - There may be ETS1 and ETS2 settings.  These may or may not make a
    difference on your card (many manuals call them "reserved"), but are
    used to change the delays used when powering up a computer on the
    network.  This is only necessary when wiring VERY long range ARCnet
    networks, on the order of 4km or so; in any case, the only real
    requirement here is that all cards on the network with ETS1 and ETS2
    jumpers have them in the same position.  Chris Hindy <chrish@io.org>
    sent in a chart with actual values for this:
	ET1	ET2	Response Time	Reconfiguration Time
	---	---	-------------	--------------------
	open	open	74.7us		840us
	open	closed	283.4us		1680us
	closed	open	561.8us		1680us
	closed	closed	1118.6us	1680us
    
    Make sure you set ETS1 and ETS2 to the SAME VALUE for all cards on your
    network.
    
Also, on many cards (not mine, though) there are red and green LED's. 
Vojtech Pavlik <vojtech@suse.cz> tells me this is what they mean:
	GREEN           RED             Status
	-----		---		------
	OFF             OFF             Power off
	OFF             Short flashes   Cabling problems (broken cable or not
					  terminated)
	OFF (short)     ON              Card init
	ON              ON              Normal state - everything OK, nothing
					  happens
	ON              Long flashes    Data transfer
	ON              OFF             Never happens (maybe when wrong ID)


The following is all the specific information people have sent me about
their own particular ARCnet cards.  It is officially a mess, and contains
huge amounts of duplicated information.  I have no time to fix it.  If you
want to, PLEASE DO!  Just send me a 'diff -u' of all your changes.

The model # is listed right above specifics for that card, so you should be
able to use your text viewer's "search" function to find the entry you want. 
If you don't KNOW what kind of card you have, try looking through the
various diagrams to see if you can tell.

If your model isn't listed and/or has different settings, PLEASE PLEASE
tell me.  I had to figure mine out without the manual, and it WASN'T FUN!

Even if your ARCnet model isn't listed, but has the same jumpers as another
model that is, please e-mail me to say so.

Cards Listed in this file (in this order, mostly):

	Manufacturer	Model #			Bits
	------------	-------			----
	SMC		PC100			8
	SMC		PC110			8
	SMC		PC120			8
	SMC		PC130			8
	SMC		PC270E			8
	SMC		PC500			16
	SMC		PC500Longboard		16
	SMC		PC550Longboard		16
	SMC		PC600			16
	SMC		PC710			8
	SMC?		LCS-8830(-T)		8/16
	Puredata	PDI507			8
	CNet Tech	CN120-Series		8
	CNet Tech	CN160-Series		16
	Lantech?	UM9065L chipset		8
	Acer		5210-003		8
	Datapoint?	LAN-ARC-8		8
	Topware		TA-ARC/10		8
	Thomas-Conrad	500-6242-0097 REV A	8
	Waterloo?	(C)1985 Waterloo Micro. 8
	No Name		--			8/16
	No Name		Taiwan R.O.C?		8
	No Name		Model 9058		8
	Tiara		Tiara Lancard?		8
	

** SMC = Standard Microsystems Corp.
** CNet Tech = CNet Technology, Inc.


Unclassified Stuff
------------------
  - Please send any other information you can find.
  
  - And some other stuff (more info is welcome!):
     From: root@ultraworld.xs4all.nl (Timo Hilbrink)
     To: apenwarr@foxnet.net (Avery Pennarun)
     Date: Wed, 26 Oct 1994 02:10:32 +0000 (GMT)
     Reply-To: timoh@xs4all.nl

     [...parts deleted...]

     About the jumpers: On my PC130 there is one more jumper, located near the
     cable-connector and it's for changing to star or bus topology; 
     closed: star - open: bus
     On the PC500 are some more jumper-pins, one block labeled with RX,PDN,TXI
     and another with ALE,LA17,LA18,LA19 these are undocumented..

     [...more parts deleted...]

     --- CUT ---


** Standard Microsystems Corp (SMC) **
PC100, PC110, PC120, PC130 (8-bit cards)
PC500, PC600 (16-bit cards)
---------------------------------
  - mainly from Avery Pennarun <apenwarr@worldvisions.ca>.  Values depicted
    are from Avery's setup.
  - special thanks to Timo Hilbrink <timoh@xs4all.nl> for noting that PC120,
    130, 500, and 600 all have the same switches as Avery's PC100. 
    PC500/600 have several extra, undocumented pins though. (?)
  - PC110 settings were verified by Stephen A. Wood <saw@cebaf.gov>
  - Also, the JP- and S-numbers probably don't match your card exactly.  Try
    to find jumpers/switches with the same number of settings - it's
    probably more reliable.
  

     JP5		       [|]    :    :    :    :
(IRQ Setting)		      IRQ2  IRQ3 IRQ4 IRQ5 IRQ7
		Put exactly one jumper on exactly one set of pins.


                          1  2   3  4  5  6   7  8  9 10
     S1                /----------------------------------\
(I/O and Memory        |  1  1 * 0  0  0  0 * 1  1  0  1  |
 addresses)            \----------------------------------/
                          |--|   |--------|   |--------|
                          (a)       (b)           (m)
                          
                WARNING.  It's very important when setting these which way
                you're holding the card, and which way you think is '1'!
                
                If you suspect that your settings are not being made
		correctly, try reversing the direction or inverting the
		switch positions.

		a: The first digit of the I/O address.
			Setting		Value
			-------		-----
			00		0
			01		1
			10		2
			11		3

		b: The second digit of the I/O address.
			Setting		Value
			-------		-----
			0000		0
			0001		1
			0010		2
			...		...
			1110		E
			1111		F

		The I/O address is in the form ab0.  For example, if
		a is 0x2 and b is 0xE, the address will be 0x2E0.

		DO NOT SET THIS LESS THAN 0x200!!!!!


		m: The first digit of the memory address.
			Setting		Value
			-------		-----
			0000		0
			0001		1
			0010		2
			...		...
			1110		E
			1111		F

		The memory address is in the form m0000.  For example, if
		m is D, the address will be 0xD0000.

		DO NOT SET THIS TO C0000, F0000, OR LESS THAN A0000!

                          1  2  3  4  5  6  7  8
     S2                /--------------------------\
(Station Address)      |  1  1  0  0  0  0  0  0  |
                       \--------------------------/

			Setting		Value
			-------		-----
			00000000	00
			10000000	01
			01000000	02
			...
			01111111	FE
			11111111	FF

		Note that this is binary with the digits reversed!

		DO NOT SET THIS TO 0 OR 255 (0xFF)!


*****************************************************************************

** Standard Microsystems Corp (SMC) **
PC130E/PC270E (8-bit cards)
---------------------------
  - from Juergen Seifert <seifert@htwm.de>


STANDARD MICROSYSTEMS CORPORATION (SMC) ARCNET(R)-PC130E/PC270E
===============================================================

This description has been written by Juergen Seifert <seifert@htwm.de>
using information from the following Original SMC Manual 

             "Configuration Guide for
             ARCNET(R)-PC130E/PC270
            Network Controller Boards
                Pub. # 900.044A
                   June, 1989"

ARCNET is a registered trademark of the Datapoint Corporation
SMC is a registered trademark of the Standard Microsystems Corporation  

The PC130E is an enhanced version of the PC130 board, is equipped with a 
standard BNC female connector for connection to RG-62/U coax cable.
Since this board is designed both for point-to-point connection in star
networks and for connection to bus networks, it is downwardly compatible 
with all the other standard boards designed for coax networks (that is,
the PC120, PC110 and PC100 star topology boards and the PC220, PC210 and 
PC200 bus topology boards).

The PC270E is an enhanced version of the PC260 board, is equipped with two 
modular RJ11-type jacks for connection to twisted pair wiring.
It can be used in a star or a daisy-chained network.


         8 7 6 5 4 3 2 1
    ________________________________________________________________
   |   |       S1        |                                          |
   |   |_________________|                                          |
   |    Offs|Base |I/O Addr                                         |
   |     RAM Addr |                                              ___|
   |         ___  ___                                       CR3 |___|
   |        |   \/   |                                      CR4 |___|
   |        |  PROM  |                                           ___|
   |        |        |                                        N |   | 8
   |        | SOCKET |                                        o |   | 7
   |        |________|                                        d |   | 6
   |                   ___________________                    e |   | 5
   |                  |                   |                   A | S | 4
   |       |oo| EXT2  |                   |                   d | 2 | 3
   |       |oo| EXT1  |       SMC         |                   d |   | 2
   |       |oo| ROM   |      90C63        |                   r |___| 1
   |       |oo| IRQ7  |                   |               |o|  _____|
   |       |oo| IRQ5  |                   |               |o| | J1  |
   |       |oo| IRQ4  |                   |              STAR |_____|
   |       |oo| IRQ3  |                   |                   | J2  |
   |       |oo| IRQ2  |___________________|                   |_____|
   |___                                               ______________|
       |                                             |
       |_____________________________________________|

Legend:

SMC 90C63	ARCNET Controller / Transceiver /Logic
S1	1-3:	I/O Base Address Select
	4-6:	Memory Base Address Select
	7-8:	RAM Offset Select
S2	1-8:	Node ID Select
EXT		Extended Timeout Select
ROM		ROM Enable Select
STAR		Selected - Star Topology	(PC130E only)
		Deselected - Bus Topology	(PC130E only)
CR3/CR4		Diagnostic LEDs
J1		BNC RG62/U Connector		(PC130E only)
J1		6-position Telephone Jack	(PC270E only)
J2		6-position Telephone Jack	(PC270E only)

Setting one of the switches to Off/Open means "1", On/Closed means "0".


Setting the Node ID
-------------------

The eight switches in group S2 are used to set the node ID.
These switches work in a way similar to the PC100-series cards; see that
entry for more information.


Setting the I/O Base Address
----------------------------

The first three switches in switch group S1 are used to select one
of eight possible I/O Base addresses using the following table


   Switch | Hex I/O
   1 2 3  | Address
   -------|--------
   0 0 0  |  260
   0 0 1  |  290
   0 1 0  |  2E0  (Manufacturer's default)
   0 1 1  |  2F0
   1 0 0  |  300
   1 0 1  |  350
   1 1 0  |  380
   1 1 1  |  3E0


Setting the Base Memory (RAM) buffer Address
--------------------------------------------

The memory buffer requires 2K of a 16K block of RAM. The base of this
16K block can be located in any of eight positions.
Switches 4-6 of switch group S1 select the Base of the 16K block.
Within that 16K address space, the buffer may be assigned any one of four 
positions, determined by the offset, switches 7 and 8 of group S1.

   Switch     | Hex RAM | Hex ROM
   4 5 6  7 8 | Address | Address *)
   -----------|---------|-----------
   0 0 0  0 0 |  C0000  |  C2000
   0 0 0  0 1 |  C0800  |  C2000
   0 0 0  1 0 |  C1000  |  C2000
   0 0 0  1 1 |  C1800  |  C2000
              |         |
   0 0 1  0 0 |  C4000  |  C6000
   0 0 1  0 1 |  C4800  |  C6000
   0 0 1  1 0 |  C5000  |  C6000
   0 0 1  1 1 |  C5800  |  C6000
              |         |
   0 1 0  0 0 |  CC000  |  CE000
   0 1 0  0 1 |  CC800  |  CE000
   0 1 0  1 0 |  CD000  |  CE000
   0 1 0  1 1 |  CD800  |  CE000
              |         |
   0 1 1  0 0 |  D0000  |  D2000  (Manufacturer's default)
   0 1 1  0 1 |  D0800  |  D2000
   0 1 1  1 0 |  D1000  |  D2000
   0 1 1  1 1 |  D1800  |  D2000
              |         |
   1 0 0  0 0 |  D4000  |  D6000
   1 0 0  0 1 |  D4800  |  D6000
   1 0 0  1 0 |  D5000  |  D6000
   1 0 0  1 1 |  D5800  |  D6000
              |         |
   1 0 1  0 0 |  D8000  |  DA000
   1 0 1  0 1 |  D8800  |  DA000
   1 0 1  1 0 |  D9000  |  DA000
   1 0 1  1 1 |  D9800  |  DA000
              |         |
   1 1 0  0 0 |  DC000  |  DE000
   1 1 0  0 1 |  DC800  |  DE000
   1 1 0  1 0 |  DD000  |  DE000
   1 1 0  1 1 |  DD800  |  DE000
              |         |
   1 1 1  0 0 |  E0000  |  E2000
   1 1 1  0 1 |  E0800  |  E2000
   1 1 1  1 0 |  E1000  |  E2000
   1 1 1  1 1 |  E1800  |  E2000
  
*) To enable the 8K Boot PROM install the jumper ROM.
   The default is jumper ROM not installed.


Setting the Timeouts and Interrupt
----------------------------------

The jumpers labeled EXT1 and EXT2 are used to determine the timeout 
parameters. These two jumpers are normally left open.

To select a hardware interrupt level set one (only one!) of the jumpers
IRQ2, IRQ3, IRQ4, IRQ5, IRQ7. The Manufacturer's default is IRQ2.
 

Configuring the PC130E for Star or Bus Topology
-----------------------------------------------

The single jumper labeled STAR is used to configure the PC130E board for 
star or bus topology.
When the jumper is installed, the board may be used in a star network, when 
it is removed, the board can be used in a bus topology.


Diagnostic LEDs
---------------

Two diagnostic LEDs are visible on the rear bracket of the board.
The green LED monitors the network activity: the red one shows the
board activity:

 Green  | Status               Red      | Status
 -------|-------------------   ---------|-------------------
  on    | normal activity      flash/on | data transfer
  blink | reconfiguration      off      | no data transfer;
  off   | defective board or            | incorrect memory or
        | node ID is zero               | I/O address


*****************************************************************************

** Standard Microsystems Corp (SMC) **
PC500/PC550 Longboard (16-bit cards)
-------------------------------------
  - from Juergen Seifert <seifert@htwm.de>


STANDARD MICROSYSTEMS CORPORATION (SMC) ARCNET-PC500/PC550 Long Board
=====================================================================

Note: There is another Version of the PC500 called Short Version, which 
      is different in hard- and software! The most important differences
      are:
      - The long board has no Shared memory.
      - On the long board the selection of the interrupt is done by binary
        coded switch, on the short board directly by jumper.
        
[Avery's note: pay special attention to that: the long board HAS NO SHARED
MEMORY.  This means the current Linux-ARCnet driver can't use these cards. 
I have obtained a PC500Longboard and will be doing some experiments on it in
the future, but don't hold your breath.  Thanks again to Juergen Seifert for
his advice about this!]

This description has been written by Juergen Seifert <seifert@htwm.de>
using information from the following Original SMC Manual 

             "Configuration Guide for
             SMC ARCNET-PC500/PC550
         Series Network Controller Boards
             Pub. # 900.033 Rev. A
                November, 1989"

ARCNET is a registered trademark of the Datapoint Corporation
SMC is a registered trademark of the Standard Microsystems Corporation  

The PC500 is equipped with a standard BNC female connector for connection
to RG-62/U coax cable.
The board is designed both for point-to-point connection in star networks
and for connection to bus networks.

The PC550 is equipped with two modular RJ11-type jacks for connection
to twisted pair wiring.
It can be used in a star or a daisy-chained (BUS) network.

       1 
       0 9 8 7 6 5 4 3 2 1     6 5 4 3 2 1
    ____________________________________________________________________
   < |         SW1         | |     SW2     |                            |
   > |_____________________| |_____________|                            |
   <   IRQ    |I/O Addr                                                 |
   >                                                                 ___|
   <                                                            CR4 |___|
   >                                                            CR3 |___|
   <                                                                 ___|
   >                                                              N |   | 8
   <                                                              o |   | 7
   >                                                              d | S | 6
   <                                                              e | W | 5
   >                                                              A | 3 | 4
   <                                                              d |   | 3
   >                                                              d |   | 2
   <                                                              r |___| 1
   >                                                        |o|    _____|
   <                                                        |o|   | J1  |
   >  3 1                                                   JP6   |_____|
   < |o|o| JP2                                                    | J2  |
   > |o|o|                                                        |_____|
   <  4 2__                                               ______________|
   >    |  |                                             |
   <____|  |_____________________________________________|

Legend:

SW1	1-6:	I/O Base Address Select
	7-10:	Interrupt Select
SW2	1-6:	Reserved for Future Use
SW3	1-8:	Node ID Select
JP2	1-4:	Extended Timeout Select
JP6		Selected - Star Topology	(PC500 only)
		Deselected - Bus Topology	(PC500 only)
CR3	Green	Monitors Network Activity
CR4	Red	Monitors Board Activity
J1		BNC RG62/U Connector		(PC500 only)
J1		6-position Telephone Jack	(PC550 only)
J2		6-position Telephone Jack	(PC550 only)

Setting one of the switches to Off/Open means "1", On/Closed means "0".


Setting the Node ID
-------------------

The eight switches in group SW3 are used to set the node ID. Each node
attached to the network must have an unique node ID which must be 
different from 0.
Switch 1 serves as the least significant bit (LSB).

The node ID is the sum of the values of all switches set to "1"  
These values are:

    Switch | Value
    -------|-------
      1    |   1
      2    |   2
      3    |   4
      4    |   8
      5    |  16
      6    |  32
      7    |  64
      8    | 128

Some Examples:

    Switch         | Hex     | Decimal 
   8 7 6 5 4 3 2 1 | Node ID | Node ID
   ----------------|---------|---------
   0 0 0 0 0 0 0 0 |    not allowed
   0 0 0 0 0 0 0 1 |    1    |    1 
   0 0 0 0 0 0 1 0 |    2    |    2
   0 0 0 0 0 0 1 1 |    3    |    3
       . . .       |         |
   0 1 0 1 0 1 0 1 |   55    |   85
       . . .       |         |
   1 0 1 0 1 0 1 0 |   AA    |  170
       . . .       |         |  
   1 1 1 1 1 1 0 1 |   FD    |  253
   1 1 1 1 1 1 1 0 |   FE    |  254
   1 1 1 1 1 1 1 1 |   FF    |  255 


Setting the I/O Base Address
----------------------------

The first six switches in switch group SW1 are used to select one
of 32 possible I/O Base addresses using the following table

   Switch       | Hex I/O
   6 5  4 3 2 1 | Address
   -------------|--------
   0 1  0 0 0 0 |  200
   0 1  0 0 0 1 |  210
   0 1  0 0 1 0 |  220
   0 1  0 0 1 1 |  230
   0 1  0 1 0 0 |  240
   0 1  0 1 0 1 |  250
   0 1  0 1 1 0 |  260
   0 1  0 1 1 1 |  270
   0 1  1 0 0 0 |  280
   0 1  1 0 0 1 |  290
   0 1  1 0 1 0 |  2A0
   0 1  1 0 1 1 |  2B0
   0 1  1 1 0 0 |  2C0
   0 1  1 1 0 1 |  2D0
   0 1  1 1 1 0 |  2E0 (Manufacturer's default)
   0 1  1 1 1 1 |  2F0
   1 1  0 0 0 0 |  300
   1 1  0 0 0 1 |  310
   1 1  0 0 1 0 |  320
   1 1  0 0 1 1 |  330
   1 1  0 1 0 0 |  340
   1 1  0 1 0 1 |  350
   1 1  0 1 1 0 |  360
   1 1  0 1 1 1 |  370
   1 1  1 0 0 0 |  380
   1 1  1 0 0 1 |  390
   1 1  1 0 1 0 |  3A0
   1 1  1 0 1 1 |  3B0
   1 1  1 1 0 0 |  3C0
   1 1  1 1 0 1 |  3D0
   1 1  1 1 1 0 |  3E0
   1 1  1 1 1 1 |  3F0


Setting the Interrupt
---------------------

Switches seven through ten of switch group SW1 are used to select the 
interrupt level. The interrupt level is binary coded, so selections 
from 0 to 15 would be possible, but only the following eight values will
be supported: 3, 4, 5, 7, 9, 10, 11, 12.

   Switch   | IRQ
   10 9 8 7 | 
   ---------|-------- 
    0 0 1 1 |  3
    0 1 0 0 |  4
    0 1 0 1 |  5
    0 1 1 1 |  7
    1 0 0 1 |  9 (=2) (default)
    1 0 1 0 | 10
    1 0 1 1 | 11
    1 1 0 0 | 12


Setting the Timeouts 
--------------------

The two jumpers JP2 (1-4) are used to determine the timeout parameters. 
These two jumpers are normally left open.
Refer to the COM9026 Data Sheet for alternate configurations.


Configuring the PC500 for Star or Bus Topology
----------------------------------------------

The single jumper labeled JP6 is used to configure the PC500 board for 
star or bus topology.
When the jumper is installed, the board may be used in a star network, when 
it is removed, the board can be used in a bus topology.


Diagnostic LEDs
---------------

Two diagnostic LEDs are visible on the rear bracket of the board.
The green LED monitors the network activity: the red one shows the
board activity:

 Green  | Status               Red      | Status
 -------|-------------------   ---------|-------------------
  on    | normal activity      flash/on | data transfer
  blink | reconfiguration      off      | no data transfer;
  off   | defective board or            | incorrect memory or
        | node ID is zero               | I/O address


*****************************************************************************

** SMC **
PC710 (8-bit card)
------------------
  - from J.S. van Oosten <jvoosten@compiler.tdcnet.nl>
  
Note: this data is gathered by experimenting and looking at info of other
cards. However, I'm sure I got 99% of the settings right.

The SMC710 card resembles the PC270 card, but is much more basic (i.e. no
LEDs, RJ11 jacks, etc.) and 8 bit. Here's a little drawing:

    _______________________________________   
   | +---------+  +---------+              |____
   | |   S2    |  |   S1    |              |
   | +---------+  +---------+              |
   |                                       |
   |  +===+    __                          |
   |  | R |   |  | X-tal                 ###___
   |  | O |   |__|                      ####__'|
   |  | M |    ||                        ###
   |  +===+                                |
   |                                       |
   |   .. JP1   +----------+               |
   |   ..       | big chip |               |   
   |   ..       |  90C63   |               |
   |   ..       |          |               |
   |   ..       +----------+               |
    -------                     -----------
           |||||||||||||||||||||

The row of jumpers at JP1 actually consists of 8 jumpers, (sometimes
labelled) the same as on the PC270, from top to bottom: EXT2, EXT1, ROM,
IRQ7, IRQ5, IRQ4, IRQ3, IRQ2 (gee, wonder what they would do? :-) )

S1 and S2 perform the same function as on the PC270, only their numbers
are swapped (S1 is the nodeaddress, S2 sets IO- and RAM-address).

I know it works when connected to a PC110 type ARCnet board.

	
*****************************************************************************

** Possibly SMC **
LCS-8830(-T) (8 and 16-bit cards)
---------------------------------
  - from Mathias Katzer <mkatzer@HRZ.Uni-Bielefeld.DE>
  - Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl> says the
    LCS-8830 is slightly different from LCS-8830-T.  These are 8 bit, BUS
    only (the JP0 jumper is hardwired), and BNC only.
	
This is a LCS-8830-T made by SMC, I think ('SMC' only appears on one PLCC,
nowhere else, not even on the few Xeroxed sheets from the manual).

SMC ARCnet Board Type LCS-8830-T

   ------------------------------------
  |                                    |
  |              JP3 88  8 JP2         |
  |       #####      | \               |
  |       #####    ET1 ET2          ###|
  |                              8  ###|
  |  U3   SW 1                  JP0 ###|  Phone Jacks
  |  --                             ###|
  | |  |                               |
  | |  |   SW2                         |
  | |  |                               |
  | |  |  #####                        |
  |  --   #####                       ####  BNC Connector 
  |                                   ####
  |   888888 JP1                       |
  |   234567                           |
   --                           -------
     |||||||||||||||||||||||||||
      --------------------------


SW1: DIP-Switches for Station Address
SW2: DIP-Switches for Memory Base and I/O Base addresses

JP0: If closed, internal termination on (default open)
JP1: IRQ Jumpers
JP2: Boot-ROM enabled if closed
JP3: Jumpers for response timeout
 
U3: Boot-ROM Socket          


ET1 ET2     Response Time     Idle Time    Reconfiguration Time

               78                86               840
 X            285               316              1680
     X        563               624              1680
 X   X       1130              1237              1680

(X means closed jumper)

(DIP-Switch downwards means "0")

The station address is binary-coded with SW1.

The I/O base address is coded with DIP-Switches 6,7 and 8 of SW2:

Switches        Base
678             Address
000		260-26f
100		290-29f
010		2e0-2ef
110		2f0-2ff
001		300-30f
101		350-35f
011		380-38f
111 		3e0-3ef


DIP Switches 1-5 of SW2 encode the RAM and ROM Address Range:

Switches        RAM           ROM
12345           Address Range  Address Range
00000		C:0000-C:07ff	C:2000-C:3fff
10000		C:0800-C:0fff
01000		C:1000-C:17ff
11000		C:1800-C:1fff
00100		C:4000-C:47ff	C:6000-C:7fff
10100		C:4800-C:4fff
01100		C:5000-C:57ff 
11100		C:5800-C:5fff
00010		C:C000-C:C7ff	C:E000-C:ffff
10010		C:C800-C:Cfff
01010		C:D000-C:D7ff
11010		C:D800-C:Dfff
00110		D:0000-D:07ff	D:2000-D:3fff
10110		D:0800-D:0fff
01110		D:1000-D:17ff
11110		D:1800-D:1fff
00001		D:4000-D:47ff	D:6000-D:7fff
10001		D:4800-D:4fff
01001		D:5000-D:57ff
11001		D:5800-D:5fff
00101		D:8000-D:87ff	D:A000-D:bfff
10101		D:8800-D:8fff
01101		D:9000-D:97ff
11101		D:9800-D:9fff 
00011		D:C000-D:c7ff	D:E000-D:ffff
10011		D:C800-D:cfff
01011		D:D000-D:d7ff
11011		D:D800-D:dfff
00111		E:0000-E:07ff	E:2000-E:3fff
10111		E:0800-E:0fff
01111		E:1000-E:17ff
11111		E:1800-E:1fff


*****************************************************************************

** PureData Corp **
PDI507 (8-bit card)
--------------------
  - from Mark Rejhon <mdrejhon@magi.com> (slight modifications by Avery)
  - Avery's note: I think PDI508 cards (but definitely NOT PDI508Plus cards)
    are mostly the same as this.  PDI508Plus cards appear to be mainly
    software-configured.

Jumpers:
	There is a jumper array at the bottom of the card, near the edge
        connector.  This array is labelled J1.  They control the IRQs and
        something else.  Put only one jumper on the IRQ pins.

	ETS1, ETS2 are for timing on very long distance networks.  See the
	more general information near the top of this file.

	There is a J2 jumper on two pins.  A jumper should be put on them,
        since it was already there when I got the card.  I don't know what
        this jumper is for though.

	There is a two-jumper array for J3.  I don't know what it is for,
        but there were already two jumpers on it when I got the card.  It's
        a six pin grid in a two-by-three fashion.  The jumpers were
        configured as follows:

	   .-------.
	 o | o   o |
	   :-------:    ------> Accessible end of card with connectors
	 o | o   o |             in this direction ------->
	   `-------'

Carl de Billy <CARL@carainfo.com> explains J3 and J4:

	J3 Diagram:

           .-------.
         o | o   o |
           :-------:    TWIST Technology
         o | o   o |
           `-------'
           .-------.
           | o   o | o
           :-------:    COAX Technology
           | o   o | o
           `-------'

  - If using coax cable in a bus topology the J4 jumper must be removed;
    place it on one pin.

  - If using bus topology with twisted pair wiring move the J3 
    jumpers so they connect the middle pin and the pins closest to the RJ11
    Connectors.  Also the J4 jumper must be removed; place it on one pin of
    J4 jumper for storage.

  - If using  star topology with twisted pair wiring move the J3 
    jumpers so they connect the middle pin and the pins closest to the RJ11
    connectors.


DIP Switches:

	The DIP switches accessible on the accessible end of the card while
        it is installed, is used to set the ARCnet address.  There are 8
        switches.  Use an address from 1 to 254.

	Switch No.
	12345678	ARCnet address
	-----------------------------------------
	00000000	FF  	(Don't use this!)
	00000001	FE
	00000010	FD
	....
	11111101	2	
	11111110	1
	11111111	0	(Don't use this!)

	There is another array of eight DIP switches at the top of the
        card.  There are five labelled MS0-MS4 which seem to control the
        memory address, and another three labelled IO0-IO2 which seem to
        control the base I/O address of the card.

	This was difficult to test by trial and error, and the I/O addresses
        are in a weird order.  This was tested by setting the DIP switches,
        rebooting the computer, and attempting to load ARCETHER at various
        addresses (mostly between 0x200 and 0x400).  The address that caused
        the red transmit LED to blink, is the one that I thought works.

	Also, the address 0x3D0 seem to have a special meaning, since the
        ARCETHER packet driver loaded fine, but without the red LED
        blinking.  I don't know what 0x3D0 is for though.  I recommend using
        an address of 0x300 since Windows may not like addresses below
        0x300.

	IO Switch No.
	210             I/O address
	-------------------------------
	111             0x260
	110             0x290
	101             0x2E0
	100             0x2F0
	011             0x300
	010             0x350
	001             0x380
	000             0x3E0

	The memory switches set a reserved address space of 0x1000 bytes
        (0x100 segment units, or 4k).  For example if I set an address of
        0xD000, it will use up addresses 0xD000 to 0xD100.

	The memory switches were tested by booting using QEMM386 stealth,
        and using LOADHI to see what address automatically became excluded
        from the upper memory regions, and then attempting to load ARCETHER
        using these addresses.

	I recommend using an ARCnet memory address of 0xD000, and putting
        the EMS page frame at 0xC000 while using QEMM stealth mode.  That
        way, you get contiguous high memory from 0xD100 almost all the way
        the end of the megabyte.

	Memory Switch 0 (MS0) didn't seem to work properly when set to OFF
        on my card.  It could be malfunctioning on my card.  Experiment with
        it ON first, and if it doesn't work, set it to OFF.  (It may be a
        modifier for the 0x200 bit?)

	MS Switch No.
	43210           Memory address
	--------------------------------
	00001           0xE100  (guessed - was not detected by QEMM)
	00011           0xE000  (guessed - was not detected by QEMM)
	00101           0xDD00
	00111           0xDC00
	01001           0xD900
	01011           0xD800
	01101           0xD500
	01111           0xD400
	10001           0xD100
	10011           0xD000
	10101           0xCD00
	10111           0xCC00
	11001           0xC900 (guessed - crashes tested system)
	11011           0xC800 (guessed - crashes tested system)
	11101           0xC500 (guessed - crashes tested system)
	11111           0xC400 (guessed - crashes tested system)
	
	
*****************************************************************************

** CNet Technology Inc. **
120 Series (8-bit cards)
------------------------
  - from Juergen Seifert <seifert@htwm.de>


CNET TECHNOLOGY INC. (CNet) ARCNET 120A SERIES
==============================================

This description has been written by Juergen Seifert <seifert@htwm.de>
using information from the following Original CNet Manual 

              "ARCNET
            USER'S MANUAL 
                for
               CN120A
               CN120AB
               CN120TP
               CN120ST
               CN120SBT
             P/N:12-01-0007
             Revision 3.00"

ARCNET is a registered trademark of the Datapoint Corporation

P/N 120A   ARCNET 8 bit XT/AT Star
P/N 120AB  ARCNET 8 bit XT/AT Bus
P/N 120TP  ARCNET 8 bit XT/AT Twisted Pair
P/N 120ST  ARCNET 8 bit XT/AT Star, Twisted Pair
P/N 120SBT ARCNET 8 bit XT/AT Star, Bus, Twisted Pair

    __________________________________________________________________
   |                                                                  |
   |                                                               ___|
   |                                                          LED |___|
   |                                                               ___|
   |                                                            N |   | ID7
   |                                                            o |   | ID6
   |                                                            d | S | ID5
   |                                                            e | W | ID4
   |                     ___________________                    A | 2 | ID3
   |                    |                   |                   d |   | ID2
   |                    |                   |  1 2 3 4 5 6 7 8  d |   | ID1
   |                    |                   | _________________ r |___| ID0
   |                    |      90C65        ||       SW1       |  ____|
   |  JP 8 7            |                   ||_________________| |    |
   |    |o|o|  JP1      |                   |                    | J2 |
   |    |o|o|  |oo|     |                   |         JP 1 1 1   |    |
   |   ______________   |                   |            0 1 2   |____|
   |  |  PROM        |  |___________________|           |o|o|o|  _____|
   |  >  SOCKET      |  JP 6 5 4 3 2                    |o|o|o| | J1  |
   |  |______________|    |o|o|o|o|o|                   |o|o|o| |_____|
   |_____                 |o|o|o|o|o|                   ______________|
         |                                             |
         |_____________________________________________|

Legend:

90C65       ARCNET Probe
S1  1-5:    Base Memory Address Select
    6-8:    Base I/O Address Select
S2  1-8:    Node ID Select (ID0-ID7)
JP1     ROM Enable Select
JP2     IRQ2
JP3     IRQ3
JP4     IRQ4
JP5     IRQ5
JP6     IRQ7
JP7/JP8     ET1, ET2 Timeout Parameters
JP10/JP11   Coax / Twisted Pair Select  (CN120ST/SBT only)
JP12        Terminator Select       (CN120AB/ST/SBT only)
J1      BNC RG62/U Connector        (all except CN120TP)
J2      Two 6-position Telephone Jack   (CN120TP/ST/SBT only)

Setting one of the switches to Off means "1", On means "0".


Setting the Node ID
-------------------

The eight switches in SW2 are used to set the node ID. Each node attached
to the network must have an unique node ID which must be different from 0.
Switch 1 (ID0) serves as the least significant bit (LSB).

The node ID is the sum of the values of all switches set to "1"  
These values are:

   Switch | Label | Value
   -------|-------|-------
     1    | ID0   |   1
     2    | ID1   |   2
     3    | ID2   |   4
     4    | ID3   |   8
     5    | ID4   |  16
     6    | ID5   |  32
     7    | ID6   |  64
     8    | ID7   | 128

Some Examples:

    Switch         | Hex     | Decimal 
   8 7 6 5 4 3 2 1 | Node ID | Node ID
   ----------------|---------|---------
   0 0 0 0 0 0 0 0 |    not allowed
   0 0 0 0 0 0 0 1 |    1    |    1 
   0 0 0 0 0 0 1 0 |    2    |    2
   0 0 0 0 0 0 1 1 |    3    |    3
       . . .       |         |
   0 1 0 1 0 1 0 1 |   55    |   85
       . . .       |         |
   1 0 1 0 1 0 1 0 |   AA    |  170
       . . .       |         |  
   1 1 1 1 1 1 0 1 |   FD    |  253
   1 1 1 1 1 1 1 0 |   FE    |  254
   1 1 1 1 1 1 1 1 |   FF    |  255


Setting the I/O Base Address
----------------------------

The last three switches in switch block SW1 are used to select one
of eight possible I/O Base addresses using the following table


   Switch      | Hex I/O
    6   7   8  | Address
   ------------|--------
   ON  ON  ON  |  260
   OFF ON  ON  |  290
   ON  OFF ON  |  2E0  (Manufacturer's default)
   OFF OFF ON  |  2F0
   ON  ON  OFF |  300
   OFF ON  OFF |  350
   ON  OFF OFF |  380
   OFF OFF OFF |  3E0


Setting the Base Memory (RAM) buffer Address
--------------------------------------------

The memory buffer (RAM) requires 2K. The base of this buffer can be 
located in any of eight positions. The address of the Boot Prom is
memory base + 8K or memory base + 0x2000.
Switches 1-5 of switch block SW1 select the Memory Base address.

   Switch              | Hex RAM | Hex ROM
    1   2   3   4   5  | Address | Address *)
   --------------------|---------|-----------
   ON  ON  ON  ON  ON  |  C0000  |  C2000
   ON  ON  OFF ON  ON  |  C4000  |  C6000
   ON  ON  ON  OFF ON  |  CC000  |  CE000
   ON  ON  OFF OFF ON  |  D0000  |  D2000  (Manufacturer's default)
   ON  ON  ON  ON  OFF |  D4000  |  D6000
   ON  ON  OFF ON  OFF |  D8000  |  DA000
   ON  ON  ON  OFF OFF |  DC000  |  DE000
   ON  ON  OFF OFF OFF |  E0000  |  E2000
  
*) To enable the Boot ROM install the jumper JP1

Note: Since the switches 1 and 2 are always set to ON it may be possible
      that they can be used to add an offset of 2K, 4K or 6K to the base
      address, but this feature is not documented in the manual and I
      haven't tested it yet.


Setting the Interrupt Line
--------------------------

To select a hardware interrupt level install one (only one!) of the jumpers
JP2, JP3, JP4, JP5, JP6. JP2 is the default.

   Jumper | IRQ     
   -------|-----
     2    |  2
     3    |  3
     4    |  4
     5    |  5
     6    |  7


Setting the Internal Terminator on CN120AB/TP/SBT
--------------------------------------------------

The jumper JP12 is used to enable the internal terminator. 

                         -----
       0                |  0  |     
     -----   ON         |     |  ON
    |  0  |             |  0  |
    |     |  OFF         -----   OFF
    |  0  |                0
     -----
   Terminator          Terminator 
    disabled            enabled
  

Selecting the Connector Type on CN120ST/SBT
-------------------------------------------

     JP10    JP11        JP10    JP11
                         -----   -----
       0       0        |  0  | |  0  |       
     -----   -----      |     | |     |
    |  0  | |  0  |     |  0  | |  0  |
    |     | |     |      -----   -----
    |  0  | |  0  |        0       0 
     -----   -----
     Coaxial Cable       Twisted Pair Cable 
       (Default)


Setting the Timeout Parameters
------------------------------

The jumpers labeled EXT1 and EXT2 are used to determine the timeout 
parameters. These two jumpers are normally left open.



*****************************************************************************

** CNet Technology Inc. **
160 Series (16-bit cards)
-------------------------
  - from Juergen Seifert <seifert@htwm.de>

CNET TECHNOLOGY INC. (CNet) ARCNET 160A SERIES
==============================================

This description has been written by Juergen Seifert <seifert@htwm.de>
using information from the following Original CNet Manual 

              "ARCNET
            USER'S MANUAL 
                for
               CN160A
               CN160AB
               CN160TP
             P/N:12-01-0006
             Revision 3.00"

ARCNET is a registered trademark of the Datapoint Corporation

P/N 160A   ARCNET 16 bit XT/AT Star
P/N 160AB  ARCNET 16 bit XT/AT Bus
P/N 160TP  ARCNET 16 bit XT/AT Twisted Pair

   ___________________________________________________________________
  <                             _________________________          ___|
  >               |oo| JP2     |                         |    LED |___|
  <               |oo| JP1     |        9026             |    LED |___|
  >                            |_________________________|         ___|
  <                                                             N |   | ID7
  >                                                      1      o |   | ID6
  <                                    1 2 3 4 5 6 7 8 9 0      d | S | ID5
  >         _______________           _____________________     e | W | ID4
  <        |     PROM      |         |         SW1         |    A | 2 | ID3
  >        >    SOCKET     |         |_____________________|    d |   | ID2
  <        |_______________|          | IO-Base   | MEM   |     d |   | ID1
  >                                                             r |___| ID0
  <                                                               ____|
  >                                                              |    |
  <                                                              | J1 |
  >                                                              |    |
  <                                                              |____|
  >                            1 1 1 1                                |
  <  3 4 5 6 7      JP     8 9 0 1 2 3                                |
  > |o|o|o|o|o|           |o|o|o|o|o|o|                               |
  < |o|o|o|o|o| __        |o|o|o|o|o|o|                    ___________|
  >            |  |                                       |
  <____________|  |_______________________________________|

Legend:

9026            ARCNET Probe
SW1 1-6:    Base I/O Address Select
    7-10:   Base Memory Address Select
SW2 1-8:    Node ID Select (ID0-ID7)
JP1/JP2     ET1, ET2 Timeout Parameters
JP3-JP13    Interrupt Select
J1      BNC RG62/U Connector        (CN160A/AB only)
J1      Two 6-position Telephone Jack   (CN160TP only)
LED

Setting one of the switches to Off means "1", On means "0".


Setting the Node ID
-------------------

The eight switches in SW2 are used to set the node ID. Each node attached
to the network must have an unique node ID which must be different from 0.
Switch 1 (ID0) serves as the least significant bit (LSB).

The node ID is the sum of the values of all switches set to "1"  
These values are:

   Switch | Label | Value
   -------|-------|-------
     1    | ID0   |   1
     2    | ID1   |   2
     3    | ID2   |   4
     4    | ID3   |   8
     5    | ID4   |  16
     6    | ID5   |  32
     7    | ID6   |  64
     8    | ID7   | 128

Some Examples:

    Switch         | Hex     | Decimal 
   8 7 6 5 4 3 2 1 | Node ID | Node ID
   ----------------|---------|---------
   0 0 0 0 0 0 0 0 |    not allowed
   0 0 0 0 0 0 0 1 |    1    |    1 
   0 0 0 0 0 0 1 0 |    2    |    2
   0 0 0 0 0 0 1 1 |    3    |    3
       . . .       |         |
   0 1 0 1 0 1 0 1 |   55    |   85
       . . .       |         |
   1 0 1 0 1 0 1 0 |   AA    |  170
       . . .       |         |  
   1 1 1 1 1 1 0 1 |   FD    |  253
   1 1 1 1 1 1 1 0 |   FE    |  254
   1 1 1 1 1 1 1 1 |   FF    |  255


Setting the I/O Base Address
----------------------------

The first six switches in switch block SW1 are used to select the I/O Base
address using the following table:

             Switch        | Hex I/O
    1   2   3   4   5   6  | Address
   ------------------------|--------
   OFF ON  ON  OFF OFF ON  |  260
   OFF ON  OFF ON  ON  OFF |  290
   OFF ON  OFF OFF OFF ON  |  2E0  (Manufacturer's default)
   OFF ON  OFF OFF OFF OFF |  2F0
   OFF OFF ON  ON  ON  ON  |  300
   OFF OFF ON  OFF ON  OFF |  350
   OFF OFF OFF ON  ON  ON  |  380
   OFF OFF OFF OFF OFF ON  |  3E0

Note: Other IO-Base addresses seem to be selectable, but only the above
      combinations are documented.


Setting the Base Memory (RAM) buffer Address
--------------------------------------------

The switches 7-10 of switch block SW1 are used to select the Memory
Base address of the RAM (2K) and the PROM.

   Switch          | Hex RAM | Hex ROM
    7   8   9  10  | Address | Address
   ----------------|---------|-----------
   OFF OFF ON  ON  |  C0000  |  C8000
   OFF OFF ON  OFF |  D0000  |  D8000 (Default)
   OFF OFF OFF ON  |  E0000  |  E8000

Note: Other MEM-Base addresses seem to be selectable, but only the above
      combinations are documented.


Setting the Interrupt Line
--------------------------

To select a hardware interrupt level install one (only one!) of the jumpers
JP3 through JP13 using the following table:

   Jumper | IRQ     
   -------|-----------------
     3    |  14
     4    |  15
     5    |  12
     6    |  11
     7    |  10
     8    |   3
     9    |   4
    10    |   5
    11    |   6
    12    |   7
    13    |   2 (=9) Default!

Note:  - Do not use JP11=IRQ6, it may conflict with your Floppy Disk
         Controller
       - Use JP3=IRQ14 only, if you don't have an IDE-, MFM-, or RLL-
         Hard Disk, it may conflict with their controllers


Setting the Timeout Parameters
------------------------------

The jumpers labeled JP1 and JP2 are used to determine the timeout
parameters. These two jumpers are normally left open.


*****************************************************************************

** Lantech **
8-bit card, unknown model
-------------------------
  - from Vlad Lungu <vlungu@ugal.ro> - his e-mail address seemed broken at
    the time I tried to reach him.  Sorry Vlad, if you didn't get my reply.

   ________________________________________________________________
   |   1         8                                                 |
   |   ___________                                               __|
   |   |   SW1    |                                         LED |__|
   |   |__________|                                                |
   |                                                            ___|
   |                _____________________                       |S | 8
   |                |                   |                       |W |
   |                |                   |                       |2 |
   |                |                   |                       |__| 1
   |                |      UM9065L      |     |o|  JP4         ____|____
   |                |                   |     |o|              |  CN    |
   |                |                   |                      |________|
   |                |                   |                          |
   |                |___________________|                          |
   |                                                               |
   |                                                               |
   |      _____________                                            |
   |      |            |                                           |
   |      |    PROM    |        |ooooo|  JP6                       |
   |      |____________|        |ooooo|                            |
   |_____________                                             _   _|
                |____________________________________________| |__|


UM9065L : ARCnet Controller

SW 1    : Shared Memory Address and I/O Base

        ON=0

        12345|Memory Address
        -----|--------------
        00001|  D4000
        00010|  CC000
        00110|  D0000
        01110|  D1000
        01101|  D9000
        10010|  CC800
        10011|  DC800
        11110|  D1800

It seems that the bits are considered in reverse order.  Also, you must
observe that some of those addresses are unusual and I didn't probe them; I
used a memory dump in DOS to identify them.  For the 00000 configuration and
some others that I didn't write here the card seems to conflict with the
video card (an S3 GENDAC). I leave the full decoding of those addresses to
you.

        678| I/O Address
        ---|------------
        000|    260
        001|    failed probe
        010|    2E0
        011|    380
        100|    290
        101|    350
        110|    failed probe
        111|    3E0

SW 2  : Node ID (binary coded)

JP 4  : Boot PROM enable   CLOSE - enabled
                           OPEN  - disabled

JP 6  : IRQ set (ONLY ONE jumper on 1-5 for IRQ 2-6)


*****************************************************************************

** Acer **
8-bit card, Model 5210-003
--------------------------
  - from Vojtech Pavlik <vojtech@suse.cz> using portions of the existing
    arcnet-hardware file.

This is a 90C26 based card.  Its configuration seems similar to the SMC
PC100, but has some additional jumpers I don't know the meaning of.

               __
              |  |
   ___________|__|_________________________
  |         |      |                       |
  |         | BNC  |                       |
  |         |______|                    ___|
  |  _____________________             |___  
  | |                     |                |
  | | Hybrid IC           |                |
  | |                     |       o|o J1   |
  | |_____________________|       8|8      |
  |                               8|8 J5   |
  |                               o|o      |
  |                               8|8      |
  |__                             8|8      |
 (|__| LED                        o|o      |
  |                               8|8      |
  |                               8|8 J15  |
  |                                        |
  |                    _____               |
  |                   |     |   _____      |
  |                   |     |  |     |  ___|
  |                   |     |  |     | |    
  |  _____            | ROM |  | UFS | |    
  | |     |           |     |  |     | |   
  | |     |     ___   |     |  |     | |   
  | |     |    |   |  |__.__|  |__.__| |   
  | | NCR |    |XTL|   _____    _____  |   
  | |     |    |___|  |     |  |     | |   
  | |90C26|           |     |  |     | |   
  | |     |           | RAM |  | UFS | |   
  | |     | J17 o|o   |     |  |     | |   
  | |     | J16 o|o   |     |  |     | |   
  | |__.__|           |__.__|  |__.__| |   
  |  ___                               |   
  | |   |8                             |   
  | |SW2|                              |   
  | |   |                              |   
  | |___|1                             |   
  |  ___                               |   
  | |   |10           J18 o|o          |   
  | |   |                 o|o          |   
  | |SW1|                 o|o          |   
  | |   |             J21 o|o          |   
  | |___|1                             |   
  |                                    |   
  |____________________________________|   


Legend:

90C26       ARCNET Chip
XTL         20 MHz Crystal
SW1 1-6     Base I/O Address Select
    7-10    Memory Address Select
SW2 1-8     Node ID Select (ID0-ID7)
J1-J5       IRQ Select
J6-J21      Unknown (Probably extra timeouts & ROM enable ...)
LED1        Activity LED 
BNC         Coax connector (STAR ARCnet)
RAM         2k of SRAM
ROM         Boot ROM socket
UFS         Unidentified Flying Sockets


Setting the Node ID
-------------------

The eight switches in SW2 are used to set the node ID. Each node attached
to the network must have an unique node ID which must not be 0.
Switch 1 (ID0) serves as the least significant bit (LSB).

Setting one of the switches to OFF means "1", ON means "0".

The node ID is the sum of the values of all switches set to "1"
These values are:

   Switch | Value
   -------|-------
     1    |   1
     2    |   2
     3    |   4
     4    |   8
     5    |  16
     6    |  32
     7    |  64
     8    | 128

Don't set this to 0 or 255; these values are reserved.


Setting the I/O Base Address
----------------------------

The switches 1 to 6 of switch block SW1 are used to select one
of 32 possible I/O Base addresses using the following tables
   
          | Hex
   Switch | Value
   -------|-------
     1    | 200  
     2    | 100  
     3    |  80  
     4    |  40  
     5    |  20  
     6    |  10 

The I/O address is sum of all switches set to "1". Remember that
the I/O address space bellow 0x200 is RESERVED for mainboard, so
switch 1 should be ALWAYS SET TO OFF. 


Setting the Base Memory (RAM) buffer Address
--------------------------------------------

The memory buffer (RAM) requires 2K. The base of this buffer can be
located in any of sixteen positions. However, the addresses below
A0000 are likely to cause system hang because there's main RAM.

Jumpers 7-10 of switch block SW1 select the Memory Base address.

   Switch          | Hex RAM
    7   8   9  10  | Address
   ----------------|---------
   OFF OFF OFF OFF |  F0000 (conflicts with main BIOS)
   OFF OFF OFF ON  |  E0000 
   OFF OFF ON  OFF |  D0000
   OFF OFF ON  ON  |  C0000 (conflicts with video BIOS)
   OFF ON  OFF OFF |  B0000 (conflicts with mono video)
   OFF ON  OFF ON  |  A0000 (conflicts with graphics)


Setting the Interrupt Line
--------------------------

Jumpers 1-5 of the jumper block J1 control the IRQ level. ON means 
shorted, OFF means open.

    Jumper              |  IRQ
    1   2   3   4   5   |
   ----------------------------
    ON  OFF OFF OFF OFF |  7
    OFF ON  OFF OFF OFF |  5
    OFF OFF ON  OFF OFF |  4
    OFF OFF OFF ON  OFF |  3
    OFF OFF OFF OFF ON  |  2


Unknown jumpers & sockets
-------------------------

I know nothing about these. I just guess that J16&J17 are timeout
jumpers and maybe one of J18-J21 selects ROM. Also J6-J10 and
J11-J15 are connecting IRQ2-7 to some pins on the UFSs. I can't
guess the purpose.


*****************************************************************************

** Datapoint? **
LAN-ARC-8, an 8-bit card
------------------------
  - from Vojtech Pavlik <vojtech@suse.cz>

This is another SMC 90C65-based ARCnet card. I couldn't identify the
manufacturer, but it might be DataPoint, because the card has the
original arcNet logo in its upper right corner.

          _______________________________________________________
         |                         _________                     |
         |                        |   SW2   | ON      arcNet     |
         |                        |_________| OFF             ___|
         |  _____________         1 ______  8                |   | 8  
         | |             | SW1     | XTAL | ____________     | S |    
         | > RAM (2k)    |         |______||            |    | W |    
         | |_____________|                 |      H     |    | 3 |    
         |                        _________|_____ y     |    |___| 1  
         |  _________            |         |     |b     |        |    
         | |_________|           |         |     |r     |        |    
         |                       |     SMC |     |i     |        |    
         |                       |    90C65|     |d     |        |      
         |  _________            |         |     |      |        |
         | |   SW1   | ON        |         |     |I     |        |
         | |_________| OFF       |_________|_____/C     |   _____|
         |  1       8                      |            |  |     |___
         |  ______________                 |            |  | BNC |___|
         | |              |                |____________|  |_____|
         | > EPROM SOCKET |              _____________           |
         | |______________|             |_____________|          |
         |                                         ______________|
         |                                        | 
         |________________________________________|

Legend:

90C65       ARCNET Chip 
SW1 1-5:    Base Memory Address Select
    6-8:    Base I/O Address Select
SW2 1-8:    Node ID Select
SW3 1-5:    IRQ Select   
    6-7:    Extra Timeout
    8  :    ROM Enable   
BNC         Coax connector
XTAL        20 MHz Crystal


Setting the Node ID
-------------------

The eight switches in SW3 are used to set the node ID. Each node attached
to the network must have an unique node ID which must not be 0.
Switch 1 serves as the least significant bit (LSB).

Setting one of the switches to Off means "1", On means "0".

The node ID is the sum of the values of all switches set to "1"  
These values are:

   Switch | Value
   -------|-------
     1    |   1
     2    |   2
     3    |   4
     4    |   8
     5    |  16
     6    |  32
     7    |  64
     8    | 128


Setting the I/O Base Address
----------------------------

The last three switches in switch block SW1 are used to select one
of eight possible I/O Base addresses using the following table


   Switch      | Hex I/O
    6   7   8  | Address
   ------------|--------
   ON  ON  ON  |  260
   OFF ON  ON  |  290
   ON  OFF ON  |  2E0  (Manufacturer's default)
   OFF OFF ON  |  2F0
   ON  ON  OFF |  300
   OFF ON  OFF |  350
   ON  OFF OFF |  380
   OFF OFF OFF |  3E0


Setting the Base Memory (RAM) buffer Address
--------------------------------------------

The memory buffer (RAM) requires 2K. The base of this buffer can be 
located in any of eight positions. The address of the Boot Prom is
memory base + 0x2000.
Jumpers 3-5 of switch block SW1 select the Memory Base address.

   Switch              | Hex RAM | Hex ROM
    1   2   3   4   5  | Address | Address *)
   --------------------|---------|-----------
   ON  ON  ON  ON  ON  |  C0000  |  C2000
   ON  ON  OFF ON  ON  |  C4000  |  C6000
   ON  ON  ON  OFF ON  |  CC000  |  CE000
   ON  ON  OFF OFF ON  |  D0000  |  D2000  (Manufacturer's default)
   ON  ON  ON  ON  OFF |  D4000  |  D6000
   ON  ON  OFF ON  OFF |  D8000  |  DA000
   ON  ON  ON  OFF OFF |  DC000  |  DE000
   ON  ON  OFF OFF OFF |  E0000  |  E2000
  
*) To enable the Boot ROM set the switch 8 of switch block SW3 to position ON.

The switches 1 and 2 probably add 0x0800 and 0x1000 to RAM base address.


Setting the Interrupt Line
--------------------------

Switches 1-5 of the switch block SW3 control the IRQ level.

    Jumper              |  IRQ
    1   2   3   4   5   |
   ----------------------------
    ON  OFF OFF OFF OFF |  3
    OFF ON  OFF OFF OFF |  4
    OFF OFF ON  OFF OFF |  5
    OFF OFF OFF ON  OFF |  7
    OFF OFF OFF OFF ON  |  2


Setting the Timeout Parameters
------------------------------

The switches 6-7 of the switch block SW3 are used to determine the timeout
parameters.  These two switches are normally left in the OFF position.


*****************************************************************************

** Topware **
8-bit card, TA-ARC/10
-------------------------
  - from Vojtech Pavlik <vojtech@suse.cz>

This is another very similar 90C65 card. Most of the switches and jumpers
are the same as on other clones.

 _____________________________________________________________________
|  ___________   |                         |            ______        |
| |SW2 NODE ID|  |                         |           | XTAL |       |
| |___________|  |  Hybrid IC              |           |______|       |
|  ___________   |                         |                        __|    
| |SW1 MEM+I/O|  |_________________________|                   LED1|__|)   
| |___________|           1 2                                         |     
|                     J3 |o|o| TIMEOUT                          ______|    
|     ______________     |o|o|                                 |      |    
|    |              |  ___________________                     | RJ   |    
|    > EPROM SOCKET | |                   \                    |------|     
|J2  |______________| |                    |                   |      |    
||o|                  |                    |                   |______|
||o| ROM ENABLE       |        SMC         |    _________             |
|     _____________   |       90C65        |   |_________|       _____|    
|    |             |  |                    |                    |     |___ 
|    > RAM (2k)    |  |                    |                    | BNC |___|
|    |_____________|  |                    |                    |_____|    
|                     |____________________|                          |    
| ________ IRQ 2 3 4 5 7                  ___________                 |
||________|   |o|o|o|o|o|                |___________|                |
|________   J1|o|o|o|o|o|                               ______________|
         |                                             |
         |_____________________________________________|

Legend:

90C65       ARCNET Chip
XTAL        20 MHz Crystal
SW1 1-5     Base Memory Address Select
    6-8     Base I/O Address Select
SW2 1-8     Node ID Select (ID0-ID7)
J1          IRQ Select
J2          ROM Enable
J3          Extra Timeout
LED1        Activity LED 
BNC         Coax connector (BUS ARCnet)
RJ          Twisted Pair Connector (daisy chain)


Setting the Node ID
-------------------

The eight switches in SW2 are used to set the node ID. Each node attached to
the network must have an unique node ID which must not be 0.  Switch 1 (ID0)
serves as the least significant bit (LSB).

Setting one of the switches to Off means "1", On means "0".

The node ID is the sum of the values of all switches set to "1"
These values are:

   Switch | Label | Value
   -------|-------|-------
     1    | ID0   |   1
     2    | ID1   |   2
     3    | ID2   |   4
     4    | ID3   |   8
     5    | ID4   |  16
     6    | ID5   |  32
     7    | ID6   |  64
     8    | ID7   | 128

Setting the I/O Base Address
----------------------------

The last three switches in switch block SW1 are used to select one
of eight possible I/O Base addresses using the following table:


   Switch      | Hex I/O
    6   7   8  | Address
   ------------|--------
   ON  ON  ON  |  260  (Manufacturer's default)
   OFF ON  ON  |  290
   ON  OFF ON  |  2E0                         
   OFF OFF ON  |  2F0
   ON  ON  OFF |  300
   OFF ON  OFF |  350
   ON  OFF OFF |  380
   OFF OFF OFF |  3E0


Setting the Base Memory (RAM) buffer Address
--------------------------------------------

The memory buffer (RAM) requires 2K. The base of this buffer can be
located in any of eight positions. The address of the Boot Prom is
memory base + 0x2000.
Jumpers 3-5 of switch block SW1 select the Memory Base address.

   Switch              | Hex RAM | Hex ROM
    1   2   3   4   5  | Address | Address *)
   --------------------|---------|-----------
   ON  ON  ON  ON  ON  |  C0000  |  C2000
   ON  ON  OFF ON  ON  |  C4000  |  C6000  (Manufacturer's default) 
   ON  ON  ON  OFF ON  |  CC000  |  CE000
   ON  ON  OFF OFF ON  |  D0000  |  D2000  
   ON  ON  ON  ON  OFF |  D4000  |  D6000
   ON  ON  OFF ON  OFF |  D8000  |  DA000
   ON  ON  ON  OFF OFF |  DC000  |  DE000
   ON  ON  OFF OFF OFF |  E0000  |  E2000

*) To enable the Boot ROM short the jumper J2.

The jumpers 1 and 2 probably add 0x0800 and 0x1000 to RAM address.


Setting the Interrupt Line
--------------------------

Jumpers 1-5 of the jumper block J1 control the IRQ level.  ON means
shorted, OFF means open.

    Jumper              |  IRQ
    1   2   3   4   5   |
   ----------------------------
    ON  OFF OFF OFF OFF |  2
    OFF ON  OFF OFF OFF |  3
    OFF OFF ON  OFF OFF |  4
    OFF OFF OFF ON  OFF |  5
    OFF OFF OFF OFF ON  |  7


Setting the Timeout Parameters
------------------------------

The jumpers J3 are used to set the timeout parameters. These two 
jumpers are normally left open.

  
*****************************************************************************

** Thomas-Conrad **
Model #500-6242-0097 REV A (8-bit card)
---------------------------------------
  - from Lars Karlsson <100617.3473@compuserve.com>

     ________________________________________________________
   |          ________   ________                           |_____
   |         |........| |........|                            |
   |         |________| |________|                         ___|
   |            SW 3       SW 1                           |   |
   |         Base I/O   Base Addr.                Station |   |
   |                                              address |   |
   |    ______                                    switch  |   |
   |   |      |                                           |   |
   |   |      |                                           |___|    
   |   |      |                                 ______        |___._
   |   |______|                                |______|         ____| BNC
   |                                            Jumper-        _____| Connector
   |   Main chip                                block  _    __|   '  
   |                                                  | |  |    RJ Connector
   |                                                  |_|  |    with 110 Ohm
   |                                                       |__  Terminator
   |    ___________                                         __|
   |   |...........|                                       |    RJ-jack
   |   |...........|    _____                              |    (unused)
   |   |___________|   |_____|                             |__
   |  Boot PROM socket IRQ-jumpers                            |_  Diagnostic
   |________                                       __          _| LED (red)
            | | | | | | | | | | | | | | | | | | | |  |        |
            | | | | | | | | | | | | | | | | | | | |  |________|
                                                              |
                                                              |

And here are the settings for some of the switches and jumpers on the cards.


          I/O

         1 2 3 4 5 6 7 8

2E0----- 0 0 0 1 0 0 0 1
2F0----- 0 0 0 1 0 0 0 0
300----- 0 0 0 0 1 1 1 1
350----- 0 0 0 0 1 1 1 0

"0" in the above example means switch is off "1" means that it is on.


    ShMem address.

      1 2 3 4 5 6 7 8

CX00--0 0 1 1 | |   |
DX00--0 0 1 0       |
X000--------- 1 1   |
X400--------- 1 0   |
X800--------- 0 1   |
XC00--------- 0 0   
ENHANCED----------- 1
COMPATIBLE--------- 0


       IRQ


   3 4 5 7 2
   . . . . .
   . . . . .


There is a DIP-switch with 8 switches, used to set the shared memory address
to be used. The first 6 switches set the address, the 7th doesn't have any
function, and the 8th switch is used to select "compatible" or "enhanced".
When I got my two cards, one of them had this switch set to "enhanced". That
card didn't work at all, it wasn't even recognized by the driver. The other
card had this switch set to "compatible" and it behaved absolutely normally. I
guess that the switch on one of the cards, must have been changed accidentally
when the card was taken out of its former host. The question remains
unanswered, what is the purpose of the "enhanced" position?

[Avery's note: "enhanced" probably either disables shared memory (use IO
ports instead) or disables IO ports (use memory addresses instead).  This
varies by the type of card involved.  I fail to see how either of these
enhance anything.  Send me more detailed information about this mode, or
just use "compatible" mode instead.]


*****************************************************************************

** Waterloo Microsystems Inc. ?? **
8-bit card (C) 1985
-------------------
  - from Robert Michael Best <rmb117@cs.usask.ca>

[Avery's note: these don't work with my driver for some reason.  These cards
SEEM to have settings similar to the PDI508Plus, which is
software-configured and doesn't work with my driver either.  The "Waterloo
chip" is a boot PROM, probably designed specifically for the University of
Waterloo.  If you have any further information about this card, please
e-mail me.]

The probe has not been able to detect the card on any of the J2 settings,
and I tried them again with the "Waterloo" chip removed.
 
 _____________________________________________________________________
| \/  \/              ___  __ __                                      |
| C4  C4     |^|     | M ||  ^  ||^|                                  |
| --  --     |_|     | 5 ||     || | C3                               |
| \/  \/      C10    |___||     ||_|                                  | 
| C4  C4             _  _ |     |                 ??                  | 
| --  --            | \/ ||     |                                     | 
|                   |    ||     |                                     | 
|                   |    ||  C1 |                                     | 
|                   |    ||     |  \/                            _____|    
|                   | C6 ||     |  C9                           |     |___ 
|                   |    ||     |  --                           | BNC |___| 
|                   |    ||     |          >C7|                 |_____|
|                   |    ||     |                                     |
| __ __             |____||_____|       1 2 3     6                   |
||  ^  |     >C4|                      |o|o|o|o|o|o| J2    >C4|       |
||     |                               |o|o|o|o|o|o|                  |
|| C2  |     >C4|                                          >C4|       |
||     |                                   >C8|                       |
||     |       2 3 4 5 6 7  IRQ                            >C4|       |
||_____|      |o|o|o|o|o|o| J3                                        |
|_______      |o|o|o|o|o|o|                            _______________|
        |                                             |
        |_____________________________________________|

C1 -- "COM9026
       SMC 8638"
      In a chip socket.

C2 -- "@Copyright
       Waterloo Microsystems Inc.
       1985"
      In a chip Socket with info printed on a label covering a round window
      showing the circuit inside. (The window indicates it is an EPROM chip.)

C3 -- "COM9032
       SMC 8643"
      In a chip socket.

C4 -- "74LS"
      9 total no sockets.

M5 -- "50006-136
       20.000000 MHZ
       MTQ-T1-S3
       0 M-TRON 86-40"
      Metallic case with 4 pins, no socket.

C6 -- "MOSTEK@TC8643
       MK6116N-20
       MALAYSIA"
      No socket.

C7 -- No stamp or label but in a 20 pin chip socket.

C8 -- "PAL10L8CN
       8623"
      In a 20 pin socket.

C9 -- "PAl16R4A-2CN
       8641"
      In a 20 pin socket.

C10 -- "M8640
          NMC
        9306N"
       In an 8 pin socket.

?? -- Some components on a smaller board and attached with 20 pins all 
      along the side closest to the BNC connector.  The are coated in a dark 
      resin.

On the board there are two jumper banks labeled J2 and J3. The 
manufacturer didn't put a J1 on the board. The two boards I have both 
came with a jumper box for each bank.

J2 -- Numbered 1 2 3 4 5 6. 
      4 and 5 are not stamped due to solder points.
       
J3 -- IRQ 2 3 4 5 6 7

The board itself has a maple leaf stamped just above the irq jumpers 
and "-2 46-86" beside C2. Between C1 and C6 "ASS 'Y 300163" and "@1986 
CORMAN CUSTOM ELECTRONICS CORP." stamped just below the BNC connector.
Below that "MADE IN CANADA"

  
*****************************************************************************

** No Name **
8-bit cards, 16-bit cards
-------------------------
  - from Juergen Seifert <seifert@htwm.de>
  
NONAME 8-BIT ARCNET
===================

I have named this ARCnet card "NONAME", since there is no name of any
manufacturer on the Installation manual nor on the shipping box. The only
hint to the existence of a manufacturer at all is written in copper,
it is "Made in Taiwan"

This description has been written by Juergen Seifert <seifert@htwm.de>
using information from the Original
                    "ARCnet Installation Manual"


    ________________________________________________________________
   | |STAR| BUS| T/P|                                               |
   | |____|____|____|                                               |
   |                            _____________________               |
   |                           |                     |              |
   |                           |                     |              |
   |                           |                     |              |
   |                           |        SMC          |              |
   |                           |                     |              |
   |                           |       COM90C65      |              |
   |                           |                     |              |
   |                           |                     |              |
   |                           |__________-__________|              |
   |                                                           _____|
   |      _______________                                     |  CN |
   |     | PROM          |                                    |_____|
   |     > SOCKET        |                                          |
   |     |_______________|         1 2 3 4 5 6 7 8  1 2 3 4 5 6 7 8 |
   |                               _______________  _______________ |
   |           |o|o|o|o|o|o|o|o|  |      SW1      ||      SW2      ||
   |           |o|o|o|o|o|o|o|o|  |_______________||_______________||
   |___         2 3 4 5 7 E E R        Node ID       IOB__|__MEM____|
       |        \ IRQ   / T T O                      |
       |__________________1_2_M______________________|

Legend:

COM90C65:       ARCnet Probe
S1  1-8:    Node ID Select
S2  1-3:    I/O Base Address Select
    4-6:    Memory Base Address Select
    7-8:    RAM Offset Select
ET1, ET2    Extended Timeout Select
ROM     ROM Enable Select
CN              RG62 Coax Connector
STAR| BUS | T/P Three fields for placing a sign (colored circle)
                indicating the topology of the card

Setting one of the switches to Off means "1", On means "0".


Setting the Node ID
-------------------

The eight switches in group SW1 are used to set the node ID.
Each node attached to the network must have an unique node ID which
must be different from 0.
Switch 8 serves as the least significant bit (LSB).

The node ID is the sum of the values of all switches set to "1"  
These values are:

    Switch | Value
    -------|-------
      8    |   1
      7    |   2
      6    |   4
      5    |   8
      4    |  16
      3    |  32
      2    |  64
      1    | 128

Some Examples:

    Switch         | Hex     | Decimal 
   1 2 3 4 5 6 7 8 | Node ID | Node ID
   ----------------|---------|---------
   0 0 0 0 0 0 0 0 |    not allowed
   0 0 0 0 0 0 0 1 |    1    |    1 
   0 0 0 0 0 0 1 0 |    2    |    2
   0 0 0 0 0 0 1 1 |    3    |    3
       . . .       |         |
   0 1 0 1 0 1 0 1 |   55    |   85
       . . .       |         |
   1 0 1 0 1 0 1 0 |   AA    |  170
       . . .       |         |  
   1 1 1 1 1 1 0 1 |   FD    |  253
   1 1 1 1 1 1 1 0 |   FE    |  254
   1 1 1 1 1 1 1 1 |   FF    |  255


Setting the I/O Base Address
----------------------------

The first three switches in switch group SW2 are used to select one
of eight possible I/O Base addresses using the following table

   Switch      | Hex I/O
    1   2   3  | Address
   ------------|--------
   ON  ON  ON  |  260
   ON  ON  OFF |  290
   ON  OFF ON  |  2E0  (Manufacturer's default)
   ON  OFF OFF |  2F0
   OFF ON  ON  |  300
   OFF ON  OFF |  350
   OFF OFF ON  |  380
   OFF OFF OFF |  3E0


Setting the Base Memory (RAM) buffer Address
--------------------------------------------

The memory buffer requires 2K of a 16K block of RAM. The base of this
16K block can be located in any of eight positions.
Switches 4-6 of switch group SW2 select the Base of the 16K block.
Within that 16K address space, the buffer may be assigned any one of four
positions, determined by the offset, switches 7 and 8 of group SW2.

   Switch     | Hex RAM | Hex ROM
   4 5 6  7 8 | Address | Address *)
   -----------|---------|-----------
   0 0 0  0 0 |  C0000  |  C2000
   0 0 0  0 1 |  C0800  |  C2000
   0 0 0  1 0 |  C1000  |  C2000
   0 0 0  1 1 |  C1800  |  C2000
              |         |
   0 0 1  0 0 |  C4000  |  C6000
   0 0 1  0 1 |  C4800  |  C6000
   0 0 1  1 0 |  C5000  |  C6000
   0 0 1  1 1 |  C5800  |  C6000
              |         |
   0 1 0  0 0 |  CC000  |  CE000
   0 1 0  0 1 |  CC800  |  CE000
   0 1 0  1 0 |  CD000  |  CE000
   0 1 0  1 1 |  CD800  |  CE000
              |         |
   0 1 1  0 0 |  D0000  |  D2000  (Manufacturer's default)
   0 1 1  0 1 |  D0800  |  D2000
   0 1 1  1 0 |  D1000  |  D2000
   0 1 1  1 1 |  D1800  |  D2000
              |         |
   1 0 0  0 0 |  D4000  |  D6000
   1 0 0  0 1 |  D4800  |  D6000
   1 0 0  1 0 |  D5000  |  D6000
   1 0 0  1 1 |  D5800  |  D6000
              |         |
   1 0 1  0 0 |  D8000  |  DA000
   1 0 1  0 1 |  D8800  |  DA000
   1 0 1  1 0 |  D9000  |  DA000
   1 0 1  1 1 |  D9800  |  DA000
              |         |
   1 1 0  0 0 |  DC000  |  DE000
   1 1 0  0 1 |  DC800  |  DE000
   1 1 0  1 0 |  DD000  |  DE000
   1 1 0  1 1 |  DD800  |  DE000
              |         |
   1 1 1  0 0 |  E0000  |  E2000
   1 1 1  0 1 |  E0800  |  E2000
   1 1 1  1 0 |  E1000  |  E2000
   1 1 1  1 1 |  E1800  |  E2000
  
*) To enable the 8K Boot PROM install the jumper ROM.
   The default is jumper ROM not installed.


Setting Interrupt Request Lines (IRQ)
-------------------------------------

To select a hardware interrupt level set one (only one!) of the jumpers
IRQ2, IRQ3, IRQ4, IRQ5 or IRQ7. The manufacturer's default is IRQ2.
 

Setting the Timeouts
--------------------

The two jumpers labeled ET1 and ET2 are used to determine the timeout
parameters (response and reconfiguration time). Every node in a network
must be set to the same timeout values.

   ET1 ET2 | Response Time (us) | Reconfiguration Time (ms)
   --------|--------------------|--------------------------
   Off Off |        78          |          840   (Default)
   Off On  |       285          |         1680
   On  Off |       563          |         1680
   On  On  |      1130          |         1680

On means jumper installed, Off means jumper not installed


NONAME 16-BIT ARCNET
====================

The manual of my 8-Bit NONAME ARCnet Card contains another description
of a 16-Bit Coax / Twisted Pair Card. This description is incomplete,
because there are missing two pages in the manual booklet. (The table
of contents reports pages ... 2-9, 2-11, 2-12, 3-1, ... but inside
the booklet there is a different way of counting ... 2-9, 2-10, A-1,
(empty page), 3-1, ..., 3-18, A-1 (again), A-2)
Also the picture of the board layout is not as good as the picture of
8-Bit card, because there isn't any letter like "SW1" written to the
picture.
Should somebody have such a board, please feel free to complete this
description or to send a mail to me!

This description has been written by Juergen Seifert <seifert@htwm.de>
using information from the Original
                    "ARCnet Installation Manual"


   ___________________________________________________________________
  <                    _________________  _________________           |
  >                   |       SW?       ||      SW?        |          |
  <                   |_________________||_________________|          |
  >                       ____________________                        |
  <                      |                    |                       |
  >                      |                    |                       |
  <                      |                    |                       |
  >                      |                    |                       |
  <                      |                    |                       |
  >                      |                    |                       |
  <                      |                    |                       |
  >                      |____________________|                       |
  <                                                               ____|
  >                       ____________________                   |    |
  <                      |                    |                  | J1 |
  >                      |                    <                  |    |
  <                      |____________________|  ? ? ? ? ? ?     |____|
  >                                             |o|o|o|o|o|o|         |
  <                                             |o|o|o|o|o|o|         |
  >                                                                   |
  <             __                                         ___________|
  >            |  |                                       |
  <____________|  |_______________________________________|


Setting one of the switches to Off means "1", On means "0".


Setting the Node ID
-------------------

The eight switches in group SW2 are used to set the node ID.
Each node attached to the network must have an unique node ID which
must be different from 0.
Switch 8 serves as the least significant bit (LSB).

The node ID is the sum of the values of all switches set to "1"  
These values are:

    Switch | Value
    -------|-------
      8    |   1
      7    |   2
      6    |   4
      5    |   8
      4    |  16
      3    |  32
      2    |  64
      1    | 128

Some Examples:

    Switch         | Hex     | Decimal 
   1 2 3 4 5 6 7 8 | Node ID | Node ID
   ----------------|---------|---------
   0 0 0 0 0 0 0 0 |    not allowed
   0 0 0 0 0 0 0 1 |    1    |    1 
   0 0 0 0 0 0 1 0 |    2    |    2
   0 0 0 0 0 0 1 1 |    3    |    3
       . . .       |         |
   0 1 0 1 0 1 0 1 |   55    |   85
       . . .       |         |
   1 0 1 0 1 0 1 0 |   AA    |  170
       . . .       |         |  
   1 1 1 1 1 1 0 1 |   FD    |  253
   1 1 1 1 1 1 1 0 |   FE    |  254
   1 1 1 1 1 1 1 1 |   FF    |  255


Setting the I/O Base Address
----------------------------

The first three switches in switch group SW1 are used to select one
of eight possible I/O Base addresses using the following table

   Switch      | Hex I/O
    3   2   1  | Address
   ------------|--------
   ON  ON  ON  |  260
   ON  ON  OFF |  290
   ON  OFF ON  |  2E0  (Manufacturer's default)
   ON  OFF OFF |  2F0
   OFF ON  ON  |  300
   OFF ON  OFF |  350
   OFF OFF ON  |  380
   OFF OFF OFF |  3E0


Setting the Base Memory (RAM) buffer Address
--------------------------------------------

The memory buffer requires 2K of a 16K block of RAM. The base of this
16K block can be located in any of eight positions.
Switches 6-8 of switch group SW1 select the Base of the 16K block.
Within that 16K address space, the buffer may be assigned any one of four
positions, determined by the offset, switches 4 and 5 of group SW1.

   Switch     | Hex RAM | Hex ROM
   8 7 6  5 4 | Address | Address
   -----------|---------|-----------
   0 0 0  0 0 |  C0000  |  C2000
   0 0 0  0 1 |  C0800  |  C2000
   0 0 0  1 0 |  C1000  |  C2000
   0 0 0  1 1 |  C1800  |  C2000
              |         |
   0 0 1  0 0 |  C4000  |  C6000
   0 0 1  0 1 |  C4800  |  C6000
   0 0 1  1 0 |  C5000  |  C6000
   0 0 1  1 1 |  C5800  |  C6000
              |         |
   0 1 0  0 0 |  CC000  |  CE000
   0 1 0  0 1 |  CC800  |  CE000
   0 1 0  1 0 |  CD000  |  CE000
   0 1 0  1 1 |  CD800  |  CE000
              |         |
   0 1 1  0 0 |  D0000  |  D2000  (Manufacturer's default)
   0 1 1  0 1 |  D0800  |  D2000
   0 1 1  1 0 |  D1000  |  D2000
   0 1 1  1 1 |  D1800  |  D2000
              |         |
   1 0 0  0 0 |  D4000  |  D6000
   1 0 0  0 1 |  D4800  |  D6000
   1 0 0  1 0 |  D5000  |  D6000
   1 0 0  1 1 |  D5800  |  D6000
              |         |
   1 0 1  0 0 |  D8000  |  DA000
   1 0 1  0 1 |  D8800  |  DA000
   1 0 1  1 0 |  D9000  |  DA000
   1 0 1  1 1 |  D9800  |  DA000
              |         |
   1 1 0  0 0 |  DC000  |  DE000
   1 1 0  0 1 |  DC800  |  DE000
   1 1 0  1 0 |  DD000  |  DE000
   1 1 0  1 1 |  DD800  |  DE000
              |         |
   1 1 1  0 0 |  E0000  |  E2000
   1 1 1  0 1 |  E0800  |  E2000
   1 1 1  1 0 |  E1000  |  E2000
   1 1 1  1 1 |  E1800  |  E2000
  

Setting Interrupt Request Lines (IRQ)
-------------------------------------

??????????????????????????????????????


Setting the Timeouts
--------------------

??????????????????????????????????????


*****************************************************************************

** No Name **
8-bit cards ("Made in Taiwan R.O.C.")
-----------
  - from Vojtech Pavlik <vojtech@suse.cz>

I have named this ARCnet card "NONAME", since I got only the card with
no manual at all and the only text identifying the manufacturer is 
"MADE IN TAIWAN R.O.C" printed on the card.

          ____________________________________________________________
         |                 1 2 3 4 5 6 7 8                            |
         | |o|o| JP1       o|o|o|o|o|o|o|o| ON                        |
         |  +              o|o|o|o|o|o|o|o|                        ___|
         |  _____________  o|o|o|o|o|o|o|o| OFF         _____     |   | ID7
         | |             | SW1                         |     |    |   | ID6
         | > RAM (2k)    |        ____________________ |  H  |    | S | ID5
         | |_____________|       |                    ||  y  |    | W | ID4
         |                       |                    ||  b  |    | 2 | ID3
         |                       |                    ||  r  |    |   | ID2
         |                       |                    ||  i  |    |   | ID1
         |                       |       90C65        ||  d  |    |___| ID0
         |      SW3              |                    ||     |        |      
         | |o|o|o|o|o|o|o|o| ON  |                    ||  I  |        |
         | |o|o|o|o|o|o|o|o|     |                    ||  C  |        |
         | |o|o|o|o|o|o|o|o| OFF |____________________||     |   _____|
         |  1 2 3 4 5 6 7 8                            |     |  |     |___
         |  ______________                             |     |  | BNC |___|
         | |              |                            |_____|  |_____|
         | > EPROM SOCKET |                                           |
         | |______________|                                           |
         |                                              ______________|
         |                                             |
         |_____________________________________________|

Legend:

90C65       ARCNET Chip 
SW1 1-5:    Base Memory Address Select
    6-8:    Base I/O Address Select
SW2 1-8:    Node ID Select (ID0-ID7)
SW3 1-5:    IRQ Select   
    6-7:    Extra Timeout
    8  :    ROM Enable   
JP1         Led connector
BNC         Coax connector

Although the jumpers SW1 and SW3 are marked SW, not JP, they are jumpers, not 
switches.

Setting the jumpers to ON means connecting the upper two pins, off the bottom 
two - or - in case of IRQ setting, connecting none of them at all.

Setting the Node ID
-------------------

The eight switches in SW2 are used to set the node ID. Each node attached
to the network must have an unique node ID which must not be 0.
Switch 1 (ID0) serves as the least significant bit (LSB).

Setting one of the switches to Off means "1", On means "0".

The node ID is the sum of the values of all switches set to "1"  
These values are:

   Switch | Label | Value
   -------|-------|-------
     1    | ID0   |   1
     2    | ID1   |   2
     3    | ID2   |   4
     4    | ID3   |   8
     5    | ID4   |  16
     6    | ID5   |  32
     7    | ID6   |  64
     8    | ID7   | 128

Some Examples:

    Switch         | Hex     | Decimal 
   8 7 6 5 4 3 2 1 | Node ID | Node ID
   ----------------|---------|---------
   0 0 0 0 0 0 0 0 |    not allowed
   0 0 0 0 0 0 0 1 |    1    |    1 
   0 0 0 0 0 0 1 0 |    2    |    2
   0 0 0 0 0 0 1 1 |    3    |    3
       . . .       |         |
   0 1 0 1 0 1 0 1 |   55    |   85
       . . .       |         |
   1 0 1 0 1 0 1 0 |   AA    |  170
       . . .       |         |  
   1 1 1 1 1 1 0 1 |   FD    |  253
   1 1 1 1 1 1 1 0 |   FE    |  254
   1 1 1 1 1 1 1 1 |   FF    |  255


Setting the I/O Base Address
----------------------------

The last three switches in switch block SW1 are used to select one
of eight possible I/O Base addresses using the following table


   Switch      | Hex I/O
    6   7   8  | Address
   ------------|--------
   ON  ON  ON  |  260
   OFF ON  ON  |  290
   ON  OFF ON  |  2E0  (Manufacturer's default)
   OFF OFF ON  |  2F0
   ON  ON  OFF |  300
   OFF ON  OFF |  350
   ON  OFF OFF |  380
   OFF OFF OFF |  3E0


Setting the Base Memory (RAM) buffer Address
--------------------------------------------

The memory buffer (RAM) requires 2K. The base of this buffer can be 
located in any of eight positions. The address of the Boot Prom is
memory base + 0x2000.
Jumpers 3-5 of jumper block SW1 select the Memory Base address.

   Switch              | Hex RAM | Hex ROM
    1   2   3   4   5  | Address | Address *)
   --------------------|---------|-----------
   ON  ON  ON  ON  ON  |  C0000  |  C2000
   ON  ON  OFF ON  ON  |  C4000  |  C6000
   ON  ON  ON  OFF ON  |  CC000  |  CE000
   ON  ON  OFF OFF ON  |  D0000  |  D2000  (Manufacturer's default)
   ON  ON  ON  ON  OFF |  D4000  |  D6000
   ON  ON  OFF ON  OFF |  D8000  |  DA000
   ON  ON  ON  OFF OFF |  DC000  |  DE000
   ON  ON  OFF OFF OFF |  E0000  |  E2000
  
*) To enable the Boot ROM set the jumper 8 of jumper block SW3 to position ON.

The jumpers 1 and 2 probably add 0x0800, 0x1000 and 0x1800 to RAM adders.

Setting the Interrupt Line
--------------------------

Jumpers 1-5 of the jumper block SW3 control the IRQ level.

    Jumper              |  IRQ
    1   2   3   4   5   |
   ----------------------------
    ON  OFF OFF OFF OFF |  2
    OFF ON  OFF OFF OFF |  3
    OFF OFF ON  OFF OFF |  4
    OFF OFF OFF ON  OFF |  5
    OFF OFF OFF OFF ON  |  7


Setting the Timeout Parameters
------------------------------

The jumpers 6-7 of the jumper block SW3 are used to determine the timeout 
parameters. These two jumpers are normally left in the OFF position.


*****************************************************************************

** No Name **
(Generic Model 9058)
--------------------
  - from Andrew J. Kroll <ag784@freenet.buffalo.edu>
  - Sorry this sat in my to-do box for so long, Andrew! (yikes - over a
    year!)
                                                                      _____
                                                                     |    <
                                                                     | .---'
    ________________________________________________________________ | |
   |                           |     SW2     |                      |  |
   |   ___________             |_____________|                      |  |
   |  |           |              1 2 3 4 5 6                     ___|  |
   |  >  6116 RAM |         _________                         8 |   |  |
   |  |___________|        |20MHzXtal|                        7 |   |  |
   |                       |_________|       __________       6 | S |  |
   |    74LS373                             |          |-     5 | W |  |
   |   _________                            |      E   |-     4 |   |  |
   |   >_______|              ______________|..... P   |-     3 | 3 |  |
   |                         |              |    : O   |-     2 |   |  |
   |                         |              |    : X   |-     1 |___|  |
   |   ________________      |              |    : Y   |-           |  |
   |  |      SW1       |     |      SL90C65 |    :     |-           |  |
   |  |________________|     |              |    : B   |-           |  |
   |    1 2 3 4 5 6 7 8      |              |    : O   |-           |  |
   |                         |_________o____|..../ A   |-    _______|  |
   |    ____________________                |      R   |-   |       |------,   
   |   |                    |               |      D   |-   |  BNC  |   #  |
   |   > 2764 PROM SOCKET   |               |__________|-   |_______|------'
   |   |____________________|              _________                |  |
   |                                       >________| <- 74LS245    |  |
   |                                                                |  |
   |___                                               ______________|  |
       |H H H H H H H H H H H H H H H H H H H H H H H|               | |
       |U_U_U_U_U_U_U_U_U_U_U_U_U_U_U_U_U_U_U_U_U_U_U|               | |
                                                                      \|
Legend:

SL90C65 	ARCNET Controller / Transceiver /Logic
SW1	1-5:	IRQ Select
	  6:	ET1
	  7:	ET2
	  8:	ROM ENABLE 
SW2	1-3:    Memory Buffer/PROM Address
	3-6:	I/O Address Map
SW3	1-8:	Node ID Select
BNC		BNC RG62/U Connection 
		*I* have had success using RG59B/U with *NO* terminators!
		What gives?!

SW1: Timeouts, Interrupt and ROM
---------------------------------

To select a hardware interrupt level set one (only one!) of the dip switches
up (on) SW1...(switches 1-5)
IRQ3, IRQ4, IRQ5, IRQ7, IRQ2. The Manufacturer's default is IRQ2.

The switches on SW1 labeled EXT1 (switch 6) and EXT2 (switch 7)
are used to determine the timeout parameters. These two dip switches
are normally left off (down).

   To enable the 8K Boot PROM position SW1 switch 8 on (UP) labeled ROM.
   The default is jumper ROM not installed.


Setting the I/O Base Address
----------------------------

The last three switches in switch group SW2 are used to select one
of eight possible I/O Base addresses using the following table


   Switch | Hex I/O
   4 5 6  | Address
   -------|--------
   0 0 0  |  260
   0 0 1  |  290
   0 1 0  |  2E0  (Manufacturer's default)
   0 1 1  |  2F0
   1 0 0  |  300
   1 0 1  |  350
   1 1 0  |  380
   1 1 1  |  3E0


Setting the Base Memory Address (RAM & ROM)
-------------------------------------------

The memory buffer requires 2K of a 16K block of RAM. The base of this
16K block can be located in any of eight positions.
Switches 1-3 of switch group SW2 select the Base of the 16K block.
(0 = DOWN, 1 = UP)
I could, however, only verify two settings...

   Switch| Hex RAM | Hex ROM
   1 2 3 | Address | Address
   ------|---------|-----------
   0 0 0 |  E0000  |  E2000
   0 0 1 |  D0000  |  D2000  (Manufacturer's default)
   0 1 0 |  ?????  |  ?????
   0 1 1 |  ?????  |  ?????  
   1 0 0 |  ?????  |  ?????
   1 0 1 |  ?????  |  ?????
   1 1 0 |  ?????  |  ?????
   1 1 1 |  ?????  |  ?????


Setting the Node ID
-------------------

The eight switches in group SW3 are used to set the node ID.
Each node attached to the network must have an unique node ID which
must be different from 0.
Switch 1 serves as the least significant bit (LSB).
switches in the DOWN position are OFF (0) and in the UP position are ON (1)

The node ID is the sum of the values of all switches set to "1"  
These values are:
    Switch | Value
    -------|-------
      1    |   1
      2    |   2
      3    |   4
      4    |   8
      5    |  16
      6    |  32
      7    |  64
      8    | 128

Some Examples:

    Switch#     |   Hex   | Decimal 
8 7 6 5 4 3 2 1 | Node ID | Node ID
----------------|---------|---------
0 0 0 0 0 0 0 0 |    not allowed  <-.
0 0 0 0 0 0 0 1 |    1    |    1    | 
0 0 0 0 0 0 1 0 |    2    |    2    |
0 0 0 0 0 0 1 1 |    3    |    3    |
    . . .       |         |         |
0 1 0 1 0 1 0 1 |   55    |   85    |
    . . .       |         |         + Don't use 0 or 255!
1 0 1 0 1 0 1 0 |   AA    |  170    |
    . . .       |         |         |
1 1 1 1 1 1 0 1 |   FD    |  253    |
1 1 1 1 1 1 1 0 |   FE    |  254    |
1 1 1 1 1 1 1 1 |   FF    |  255  <-'
  

*****************************************************************************

** Tiara **
(model unknown)
-------------------------
  - from Christoph Lameter <christoph@lameter.com>
  

Here is information about my card as far as I could figure it out:
----------------------------------------------- tiara
Tiara LanCard of Tiara Computer Systems.

+----------------------------------------------+
!           ! Transmitter Unit !               !
!           +------------------+             -------
!          MEM                              Coax Connector
!  ROM    7654321 <- I/O                     -------
!  :  :   +--------+                           !
!  :  :   ! 90C66LJ!                         +++
!  :  :   !        !                         !D  Switch to set
!  :  :   !        !                         !I  the Nodenumber
!  :  :   +--------+                         !P
!                                            !++
!         234567 <- IRQ                      !
+------------!!!!!!!!!!!!!!!!!!!!!!!!--------+
             !!!!!!!!!!!!!!!!!!!!!!!!

0 = Jumper Installed
1 = Open

Top Jumper line Bit 7 = ROM Enable 654=Memory location 321=I/O

Settings for Memory Location (Top Jumper Line)
456     Address selected
000	C0000
001     C4000
010     CC000
011     D0000
100     D4000
101     D8000
110     DC000     
111     E0000

Settings for I/O Address (Top Jumper Line)
123     Port
000	260
001	290
010	2E0
011	2F0
100	300
101	350
110	380
111	3E0

Settings for IRQ Selection (Lower Jumper Line)
234567
011111 IRQ 2
101111 IRQ 3
110111 IRQ 4
111011 IRQ 5
111110 IRQ 7

*****************************************************************************


Other Cards
-----------

I have no information on other models of ARCnet cards at the moment.  Please
send any and all info to:
	apenwarr@worldvisions.ca

Thanks.
