ZX Interface 1. The ZX Interface 1, launched in 1983, was a peripheral from Sinclair Research for its ZX Spectrum home computer. Originally intended as a local area network interface for use in school classrooms, it was revised before launch to also act as the controller for up to eight ZX Microdrive high-speed tape-loop cartridge drives. It also included a DE-9 RS-232 interface capable of operating at up to 19.2 kbit/s. At hardware level it was fundamentally a voltage adaptor, the serial protocol being implemented in software by bit-banging. This led to problems when receiving data, but not when transmitting.

A wedge-shaped device fitting underneath the ZX Spectrum, the Interface 1 required two screws to be removed from the underside of the Spectrum, the existing screwholes being used by longer screws running through the ZX Interface 1 to stop it from inadvertently becoming detached. The Interface 1 contained  of ROM comprising the control software for the Microdrives, an RS-232 port and network interface. This extended the error handler in the Sinclair BASIC to allow extra keywords to be used. As this became an official standard, other developers quickly used this mechanism to create language extensions to Sinclair BASIC.

Two further revisions of the device's firmware were made following launch. These aimed to improve ZX Microdrive cartridge formatting and access time, printing functions via the RS-232 interface, and other bugs in the firmware held in the device's internal 8K ROM. Machine code software which used the officially documented entry points ('hook codes') would experience few incompatibility issues; however, programs using non-standard entry points risked incompatibility due to the presence of revised entry points.

The same protocol, renamed QLAN, was later used on the Sinclair QL. This was intended to be interoperable with ZX Net, but due to timing differences interoperability was found to be problematic.

The ZX Interface 1 was incompatible with some later ZX Spectrum models such as the +2A and +3, due to differences in ROM and in the expansion connector. It was therefore impossible to connect and use the Microdrive units with these later models. It did, however, work with the original +2, although the much larger case made the interface an awkward fit.

Network 

The device offered two network ports, allowing up to 64 ZX Spectrums to be daisy-chained using network leads up to  long. The network, called ZX Net, used a bidirectional wire with a proprietary CSMA-like protocol. Data could be sent or received at  either to or from a numbered workstation, or broadcast to all nodes, allowing one machine to act as a server.

Station number 0 is used to indicate broadcast. Data is transmitted in packets, each a maximum of 255 bytes long; the packet and the header are protected by a checksum. Character transmission uses 1 start bit, 8 data bits and 1 stop bit (the common 8-N-1 configuration).

Main commands:
FORMAT "n";<station number>
SAVE * "n";<station number>
LOAD * "n";<station number>

Select for example 1 as the address of the first computer (station number):
FORMAT "n";1
SAVE * "n";2

Select 2 for the second computer address:
FORMAT "n";2
LOAD * "n";1

Which will then transfer the program from "1" to "2".

Other commands:
CAT # Lists the file and directory contents of unit #
LOAD * "m";1;"name" # Loads the program "name" from "microdrive" unit 1

See also 
 ZX Interface 2 – an interface providing joystick and ROM cartridge ports
 ZX8302 – ULA integrated circuit designed for the Sinclair QL

References

External links 
 ntnu.no - Information at Planet Sinclair
 worldofspectrum.org - Hardware feature from Sinclair User - October 1983
 dataserve-retro.co.uk - Sinclair Interface 1 & Microdrive *
 - disassembly version 1
 - disassembly version 1.2
 dilwyn.me.uk - Toolkit 2
 www.sinclair.hu - ZX Interface 1/2/Microdrive Service Manual 1985
 www.sinclair.hu -  ZX Interface 1/Microdrive Manual 1983

Home computer peripherals
ZX Spectrum
Computer-related introductions in 1983

de:Sinclair ZX Spectrum#ZX Interface 1