NadaNet is a native Apple II network using the built-in serial inputs and outputs
of the Apple II main board. In particular, it uses the Annunciator 1 output and
the Pushbutton 1 input. Logically, the input and output are connected together,
then all the combined "input-outputs" on all networked machines are connected together.
(Electrically, it is only slightly more complicated than that.)
This connection allows each machine to both read the state of the network bus and
drive it to a high logic level (1). When no machine is driving it high, the
bus is passively pulled to the low logic state (0). Thus, the network behaves
like a wide OR-gate.
Since each machine is able to control the bus individually by means of software, it
is possible to write programs which allow all connected machines to make orderly use
of the network to communicate with all other connected machines. Accomplishing this
requires the software to enforce a discipline (or protocol) for gaining control of the
network and sending data, and that receiving machines employ a complementary protocol
to ensure reliable data reception.
The Oscilloscope trace below is a display of the network
performing a protocol involving a request message and a response message. The two 8-byte
messages take slightly less than 2 milliseconds (the horizontal axis is 0.2 milliseconds
per division and the vertical axis is 2 volts per division).
NadaNet Capabilities
You might wonder what such a simple network is capable of doing. First, its data rate
is surprisingly high for an all-software network. It can sustain a data transfer rate of
over 10K bytes per second using 256-byte packets, with all synchronization and protocol overhead included.
Second, it can support virtually any protocol, although I have so far implemented only a
basic set of operations useful for network and parallel programming
(see AppleCrate and AppleCrate II).
Finally, in its present implementation it
supports up to 31 networked machines, though it could be extended trivially to twice that number.
I currently do most NadaNet testing with a 19-machine network of enhanced and unenhanced
Apple //e machines, running ProDOS, DOS, and no OS (AppleCrate machines), and occasionally augmenting
the network with a IIgs machine running ProDOS.
NadaNet does not use interrupts--in fact, interrupts are disabled during NadaNet data transfers. A machine is responsive on the network only while it is polling the network using &SERVE. Since with the standard timeout, requests retry for up to 3 seconds, serving machines should &SERVE at least every second or so. The Message Server extends basic NadaNet functionality by queueing messages at any time for later reception by other machines.
The current software supports only Apple II machines, and only those that have a 16-pin
game port on the main board (including the IIgs if it is set to "slow" mode in the control panel).
There is, however, one exception of which you should be aware. Apple decided to "brute force"
a problem they were having with RFI on certain late-model Enhanced //e and Platinum //e machines
by paralleling the pushbutton inputs on these machines with 0.1uF capacitors, making the
inputs on these machines useless for fast signaling until the capacitors are "snipped"
as described in the Machine Compatibility section at the end of this more detailed
NadaNet paper.
TCP/IP is not implemented on NadaNet, and I have no plans to do so. Like most other
people, I already have computers much more suitable for connecting to
the Internet, and have no interest in burdening either me
or my Apple II machines with a protocol whose complexity and storage requirements are
larger than all but the very largest 8-bit Apple II applications. I intended NadaNet as
a versatile network environment for learning and parallel programming, for which many
interesting programs would be a few dozen lines of Applesoft BASIC. Doing this in a
TCP/IP environment would be like using an elephant to transport a flea!
NadaNet, complete with its protocols and an ampersand interface for BASIC, occupies a
little over 2KB of memory—much less than DOS—and easily co-resides with ProDOS or
DOS while remaining capable of hosting quite substantial application programs.
The AppleCrate application, CRATE.SYNTH, has been extended to
match the capabilities of the new AppleCrate II. It is now
a 16-voice sampled music synthesizer that uses NadaNet's new passive boot protocol and
broadcast data capabilities for faster program loading, voice loading, and synchronization.
I invite you to look over what is presented, and, if you find it intriguing and would
like to play with it, download the software, build a couple of
little adapters on 16-pin DIP sockets,
and do your own experiments. You'll have a lot of fun getting two or more of
your Apple II computers talking! Of course, I'd be delighted to hear about your ideas
and experiences.
If you'd rather not build the adapters yourself, you can purchase them from me
fully assembled for $15 each, including a two-sided ProDOS/DOS 3.3 NadaNet boot disk.
Complete kits are available for $10 each. Postage is included, and, of course, kit orders
include assembly instructions.
Current Version
NadaNet 3.1 is the current version. It is a minor upgrade from
NadaNet 3.0. NadaNet 3.1 adds a new command, &PEEKPOKE, that
provides a reliable atomic lock operation for parallel programming.
Also in NadaNet 3.1, the &BOOT protocol has been upgraded to the NadaNet 3.x level, so that the
new NadaNet 3.x boot ROM must now be used in AppleCrate boards.
All higher level code dependent on NadaNet is unaffected.
Here are links to ShrinkIt disk images containing the Merlin Pro source files and the object files
and various Applesoft programs using NadaNet.
(Of course, this code must run on a real Apple II—emulators don't cut it. ;-)