[comp.sys.amiga] CheapNet

CRONEJP@UREGINA1.BITNET (Jonathan Crone) (01/07/89)

Seeing as how I find myself in the unfortunate position of
having to do YET ANOTHER PROJECT.... I figured that I'd do something
that would at least be applicable to my amiga....

Please consider that this is an alpha spec (IE I'm still
screwing around with the idea) but that it IS going to have
to be hammered out within about a week or so into a preliminary
design spec....

I'd appreciate Net comment, Net ideas, Net sample code, Net sympathy etc

I'd  especially like to hear what some of the commodore people
and Matt Dillon think.
(ESP. Matt)

Ok here it is.... as part of a class in hardware design, and software support
of said hardware, I would like to come up with a cheap network for the
amiga. My idea is as follows....

Utilizing the amiga serial port ( yeah, ok, its there, and I don't
have any of the hardware manuals so I don't know how to use the
parallel port as a simultaneous input and output device)
as a relatively high speed output device (I seem to recall hearing over the
net that the amiga can do about 100k bps out the serial port
without a sweat, and about 200k bps with a lot of sweating )
I would like to build a network by tieing the transmit line of each system
to the receive line  of the next system in line, thus forming a
ugly looking ring network.

The hardwrae handshaking would be handled by connecting the
RTS line of the sending system to the CTS line of the receiving system...
The hardware interface would be primitively simple, DB25 connectors
run to the amiga serial port, with two RJ11C 4 wire conectors
on the back, one being the in line, and the other being the out.
Only three wires would be used, the transmit/receive line, the
request/clear to send line and a ground, but I'm trying to use parts that are
in my junk box...

The idea for the software is to create a network device...
called NET:

(now, i've programmed under microsloth dos, and unix, and on my amiga
but i've never programmed a device driver, so if people can mail me
sample device driver source code, like PIPE:, P:, NULL: I'd certainly
appreciate it...)

the idea is that access to the network would be as such,

NET:0/df0:foo/glar/spam

NET is the device name, the 0 is the net  number, and the rest
is the filespec for the remote system.


The actual transmissions would be as follows,

initiate packet.

node number ANDed with 128 (is the idenifier for a initiate packet) is byte 1.
length of packet (filepath/name) is byte 2.
read or write is byte 3
rest of packet is the filepath/name
packet terminator is NULL/001/NULL/001/NULL

error packet is
nodenumber ANDed with 64 (identifier for an error)  byte 1
Packet to resend. byte 2
packet terminator

data packet
node number  byte 1
packet number byte 2
packet length bytes 3 and 4
data packet
two byte checksum
packet terminator

the receiving system would receive the packets, see if its for it, and
if it isn't send it on.


Obviously i'm still fleshing it together....

now for my questions. obviously i have to write a device driver
for this thing. Now, does this device driver have to grab the serial port
directly? or can it talk to SER:

IS THIS THING FEASIBLE OR HAVE I BEEN DRINKING TOO MUCH ROOT BEER??? :-)
(sorry for shouting.... :-)   )

Will Lattice V5.0 be all that I need to accomplish this???

obviously a network watchdog program would be nice as well, obviously
that should be in a window.... can cheapnet.device create error
messaging that another task can catch and  display???

Please send comments, corrections, etc. etc.  to

cronejp@uregina1.bitnet

or if you cannot find this address, use
cronejp@mcl.uucp

and yes, I know that this is an imposition, but i really would like
to write this thing to the point that i can get a mark for
it then, maybe release it as a freely redistributable type of thing

thanks very much....

Jonathan P. Crone

CRONEJP@UREGINA1.BITNET
cronejp@mcl.UUCP

ditto@cbmvax.UUCP (Michael "Ford" Ditto) (01/08/89)

In article <8901062235.AA12520@jade.berkeley.edu> CRONEJP@UREGINA1.BITNET (Jonathan Crone) writes:
>I would like to build a network by tieing the transmit line of each system
>to the receive line  of the next system in line, thus forming a
>ugly looking ring network.
>
>The hardwrae handshaking would be handled by connecting the
>RTS line of the sending system to the CTS line of the receiving system...

That's been done, and should work OK.

>the receiving system would receive the packets, see if its for it, and
>if it isn't send it on.

Sounds OK, but the send-it-on criteria should include checking to see if
the packet ORIGINATED from the current node, and discard it if so.
Otherwise, sending to a node that is not connected will result in an
infinite loop.  If this is done, the first criteria could be eliminated,
resulting in an ethernet-like "broadcast" network.

>the idea is that access to the network would be as such,
>
>NET:0/df0:foo/glar/spam

>now for my questions. obviously i have to write a device driver
>for this thing. Now, does this device driver have to grab the serial port
>directly? or can it talk to SER:

I would recommend putting off the NET: handler for a while, seing that
filesystem handlers are among the more obscure aspects of Amiga system
programming.  For example, you could first make a lower level device that
allows sending a packet to a particular named port on a particular node.
When that is working, you can make your NET: handler use the lower level
net mechanism.

The first step doesn't require writing a device driver at all; you could
just have a message port to which processes could send requests.  Making
that a library or device might be a good idea, though.

You could probably do all the necessary serial port access through the
serial.device.  Using SER: would be difficult.
-- 
					-=] Ford [=-

"The number of Unix installations	(In Real Life:  Mike Ditto)
has grown to 10, with more expected."	ford@kenobi.cts.com
- The Unix Programmer's Manual,		...!sdcsvax!crash!elgar!ford
  2nd Edition, June, 1972.		ditto@cbmvax.commodore.com

cmcmanis%pepper@Sun.COM (Chuck McManis) (01/08/89)

[Interesting article deleted, see the reference if you need to refresh
 your memory :-)]

Another suggestion (I know superflouous) why make the Amiga do the 
actual networking? Build a "network tap" out of a Z80, SCC, 2kRAM,
and 2k Eprom. (SCC = Serial Communications Controller). This requires
8 chips, 10 capacitors, 2 resistors, and 1 crystal. Since the serial
controller can talk Appletalk (Apple uses the same one) and the parts
to the whole system cost less than $25 retail you have a good start.
The SCC has two serial ports, make one "appletalk" compatible with the
RJ-11 connector, the other you can connect to the Amiga. Have the 
Z80 handle the CD/CSMA aspects of the network. You may want to replace
the 2k ram chip with an 8k ram chip (32k is also available) that would
raise the price by $5. The Z80 needs only 4 commands available 
SET Address, Send Status, Send Packet, and reset. The latter can be
connected to the DTR line of the serial port for ease of use. 

Since there is some RAM on the "tap" you needn't worry to much about
interrupt latency, and the SCC chip already knows how to do SDLC type
framing so you are pretty much 60% there. 

Final suggestion, don't reinvent the wheel on protocols. Check out
Comer's book or Tannenbaums book on networking and go for it.

--Chuck McManis
uucp: {anywhere}!sun!cmcmanis   BIX: cmcmanis  ARPAnet: cmcmanis@sun.com
These opinions are my own and no one elses, but you knew that didn't you.

sneakers@heimat.UUCP (Dan "Sneakers" Schein) (01/12/89)

[ Wanted: A line eater that works! ]

  Does anyone know of an AUX: like device that uses the PARALLEL port instead of
 the SERIAL port?!?                                                    

  Why? I have two Amiga 2000's sitting here, both using the serial ports (one
 running a BBS 24 hrs, the other running UUCP 3-4 hrs). What id like to do is
 run a cable between the PARALLEL port of both machines (similar to a RS-232
 null modem cable). Then using an AUX: like device and special terminal prog-
 ram access machine B from machine A. 

  Possible? Hell if I know, thats why I asked you :-). Im open to suggestions,
 comments, and or code samples.

  I know this method is limited by allowing for only one way communications
 with no file transfer, but thats all I need. My desk is just too small for
 2 keyboards and 2 monitors!


--
Dan "Sneakers" Schein          {pyramid|rutgers|uunet}!cbmvax!heimat!sneakers
Sneakers Computing
2455 McKinley Ave.                     Of course heimat is an Amiga.
West Lawn, PA 19609           Doesn't everyone run UUCP & UseNet on an Amiga?

   Call: BERKS AMIGA BBS - 60+ Megs - 24 Hrs - 12/2400 Baud - 215/678-7691

Andrew@cup.portal.com (andrew scott lagodzinski) (01/14/89)

>[ Wanted: A line eater that works! ]
>
>  Does anyone know of an AUX: like device that uses the PARALLEL port instead of
> the SERIAL port?!?                                                    
[ Line Eater, YUM! ]
>
>--
>Dan "Sneakers" Schein          {pyramid|rutgers|uunet}!cbmvax!heimat!sneakers
>Sneakers Computing
>2455 McKinley Ave.                     Of course heimat is an Amiga.
>West Lawn, PA 19609           Doesn't everyone run UUCP & UseNet on an Amiga?

	Don't quote me, but I believe the CNX: handler that runs under 
ConMan  V1.3 will do what you want.  Although you may have to write you own
device driver (CheapNet.Device??), I have used this with Serial.Device but
lacking an ANSI terminal it was of no more use than AUX: so I have been using
AUX: .

	The Parallel.device may work for you, but you would have to write
to William S. Hawes for all the details.

                                     Andrew@Cup.Portal.Com

scotty@ziggy.UUCP (Scott Drysdale) (01/14/89)

In article <5748.AA5748@heimat> sneakers@heimat.UUCP (Dan "Sneakers" Schein) writes:
>[ Wanted: A line eater that works! ]
>
>  Does anyone know of an AUX: like device that uses the PARALLEL port instead of
> the SERIAL port?!?                                                    
>
>  Why? I have two Amiga 2000's sitting here, both using the serial ports (one
> running a BBS 24 hrs, the other running UUCP 3-4 hrs). What id like to do is
> run a cable between the PARALLEL port of both machines (similar to a RS-232
> null modem cable). Then using an AUX: like device and special terminal prog-
> ram access machine B from machine A. 
...
>  I know this method is limited by allowing for only one way communications
> with no file transfer, but thats all I need. My desk is just too small for
> 2 keyboards and 2 monitors!

i have some sample code that allows me to connect the parallel port of my
amiga to that of an ibm clone (with single cut, single jumper mod to the
ibm parallel card) so that the amiga can use the pc's hard disk.  the speed
i was getting wasn't awesome (slightly faster than a floppy through the
filesystem, or around 25K per second), but it worked (*).  the ibm parallel
port needed fix so it would play bidirectionally.  the amiga parallel port
code is in the form of a device driver, but the actual read/write to the
parallel port is easily extracted.

(*) - i had one problem with it, and the folks at CATS couldn't help me on
this one - i get access to the parallel port with the proper resource
mechanisms, and everything's fine for a few minutes, then SOMETHING reprograms
one of the bits normally assigned for centronics handshaking (which i'm using
as a bidirectional line) to be an input or output only (forget which).  if
i disable interrupts around the parallell transfer part and reprogram the
CIA then transfer and reenable interrupts, it works - but of course the
serial port, mouse, etc get unacceptably jerky.

anyways - interested?

  --Scotty

>
>
>--
>Dan "Sneakers" Schein          {pyramid|rutgers|uunet}!cbmvax!heimat!sneakers
>Sneakers Computing
>2455 McKinley Ave.                     Of course heimat is an Amiga.
>West Lawn, PA 19609           Doesn't everyone run UUCP & UseNet on an Amiga?
>
>   Call: BERKS AMIGA BBS - 60+ Megs - 24 Hrs - 12/2400 Baud - 215/678-7691

elg@killer.DALLAS.TX.US (Eric Green) (01/14/89)

in article <5748.AA5748@heimat>, sneakers@heimat.UUCP (Dan "Sneakers" Schein) says:
>   Why? I have two Amiga 2000's sitting here, both using the serial ports (one
>  running a BBS 24 hrs, the other running UUCP 3-4 hrs). What id like to do is
>  run a cable between the PARALLEL port of both machines (similar to a RS-232
>  null modem cable). Then using an AUX: like device and special terminal prog-
>  ram access machine B from machine A. 

I just looked at the schematics in the back of my A500 manual, and
it's quite possible indeed. Almost all the pins on the parallel port
are connected straight to the CIA I/O pins, meaning they're
bi-directional. Including things like "Paper Out", etc. You could
easily do something like, say: use 8 pins for data input/output. Use
Strobe/Ack for clocking the bytes (suitably cross-wired cable, since
at first glance one appears to be hardwired interrupt-producing input
& one hardwired output). Use, HMM, BUSY for direction turnaround
(since this is a half-duplex port, after all). Set up a suitable
low-level protocol.  Use DNET or something like that, for the
higher-level protocol. Presto. Can at least transfer files that way,
I don't know about other stuff.

Hardware, then, is fairly simple. For software, would have to write a
network.device which grabbed the printer port from the
parallel.device, have something wedged into the interrupt chain to
handle handshaking, and then, if desired, a Dos-level handler a' la
AUX:. 

I have two Amigae here, too, so I'll have to take a look & see exactly
how difficult it'd be. I need to learn how to write device drivers
anyhow... I've done something of the sort before on the 64, but the
Amiga is no 64.

>   I know this method is limited by allowing for only one way communications
>  with no file transfer, but thats all I need. My desk is just too small for
>  2 keyboards and 2 monitors!

The only limit would be that offered by your networking protocol. As
for the problem with your desk, I had the same problem. When we went
house hunting, one priority was a whole room just for the computers &
electronics junk. We thought we'd never use that much space... three
walls covered with rough plywood tables (~$30 total), & a ton of
shelves. Maybe two square inches of surface are visible now.

--
Eric Lee Green    ..!{ames,decwrl,mit-eddie,osu-cis}!killer!elg
          Snail Mail P.O. Box 92191 Lafayette, LA 70509              
Netter A: In Hell they run VMS.
Netter B: No.  In Hell, they run MS-DOS.  And you only get 256k.

aaron@madnix.UUCP (Aaron Avery) (01/14/89)

In article <5748.AA5748@heimat> sneakers@heimat.UUCP (Dan "Sneakers" Schein) writes:
>  Why? I have two Amiga 2000's sitting here, both using the serial ports (one
> running a BBS 24 hrs, the other running UUCP 3-4 hrs). What id like to do is
> run a cable between the PARALLEL port of both machines (similar to a RS-232
> null modem cable). Then using an AUX: like device and special terminal prog-
> ram access machine B from machine A. 

You could always get some more serial ports!-)

>  Possible? Hell if I know, thats why I asked you :-). Im open to suggestions,
> comments, and or code samples.

Well, the code to look at is Andy Finkel's cport-handler on disk 1 from the
88 Philadelphia DevCon.
 
>  I know this method is limited by allowing for only one way communications
> with no file transfer, but thats all I need. My desk is just too small for
> 2 keyboards and 2 monitors!

Why can't you use PAR: for this? Is it just due to the lack of an EOF? If so,
the above code will probably do you just fine.

-- 
Aaron Avery, ASDG Inc.         "A mime is a terrible thing to waste."
                                                             -- Robin Williams
UUCP: {harvard|rutgers|ucbvax}!uwvax!nicmad!madnix!aaron
ARPA: madnix!aaron@cs.wisc.edu

sneakers@heimat.UUCP (Dan "Sneakers" Schein) (01/17/89)

In a message long, long, long ago, I wrote:

>[ Wanted: A line eater that works! ]
>
>  Does anyone know of an AUX: like device that uses the PARALLEL port instead of
> the SERIAL port?!?                                                    

  I have received several ideas (both on the net and via mail) on how to do
  this. When time allows im going to look into all suggestions and see if I
  cant get something working. Stay tuned....

  Sneakers

  PS:
     Thanx to all who sent ideas!

--
Dan "Sneakers" Schein          {pyramid|rutgers|uunet}!cbmvax!heimat!sneakers
Sneakers Computing
2455 McKinley Ave.                     Of course heimat is an Amiga.
West Lawn, PA 19609           Doesn't everyone run UUCP & UseNet on an Amiga?

   Call: BERKS AMIGA BBS - 60+ Megs - 24 Hrs - 12/2400 Baud - 215/678-7691

shimoda@infohh.rmi.de (Markus Schmidt) (01/18/89)

In article <391@madnix.UUCP> aaron@madnix.UUCP (Aaron Avery) writes:
>Well, the code to look at is Andy Finkel's cport-handler on disk 1 from the
>88 Philadelphia DevCon.
Where can I get this?

Thanks
Markus

walker@sas.UUCP (Doug Walker) (01/19/89)

In article <5748.AA5748@heimat> sneakers@heimat.UUCP (Dan "Sneakers" Schein) writes:
>  I know this method is limited by allowing for only one way communications
> with no file transfer, but thats all I need. My desk is just too small for
> 2 keyboards and 2 monitors!

Why is it limited?  The interface to the parallel.device is almost identical
to the serial.device, the only exception being that you can't set flags that
don't make sense in the setup (like bps).  I am working on an AmigaDOS device
driver to allow you to access another node's devices via some arbitrary
communications medium.  I certainly would expect the parallel port to be
a prime candidate.  I have played with it a little and have run into what
may be parallel.device bugs, but the hardware is eminently capable of high-
speed two-way data transfer.  Right now I'm using DNET, but it seems to
be a little flaky about dropping my connection.

While I'm on the subject:  has anybody had the following problem with DNET?

1. Side A writes to an already-open connection.  The DWrite returns
   successfully.

2. Side B, which is doing a DRead (synchronous, not asynchronous read)
   never gets notified there is any data.

3. Side A, now getting desperate, sends a DNET EOF.

4. Side B never wakes up.

5. Side A terminates DNET.

6. You guessed it, side B never wakes up.

DNET itself is up, since I can still initiate new transfers with PUTFILES
and the like, but I can't blast that one connection loose short of sending
a BREAK signal to the DNET process on side B.