Fandom

Scratchpad

ZX Net

215,933pages on
this wiki
Add New Page
Discuss this page0 Share

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

Interface 1 offered two network ports, allowing up to 64 ZX Spectrums to be daisy-chained using network leads up to 3 m (10 ft) long. The network, called ZX Net, used a proprietary CSMA-like protocol. Data could be sent or received at 100 kbit/s either to or from a numbered workstation, or broadcast to all nodes, allowing one machine to act as a server.

ZX Net concept

  • network use 1 bidirectional data wire
  • all ZX Spectrum has a network station number (range 1 to 64)
  • station number 0 used to indicate broadcast
  • data broke up max. 255 byte length packets
  • every packet has a 8 byte length packet header
  • every packet has a serial number
  • the packet and the header have checksum
  • last packet in the chain is marked, so the receiving end is know about end of data
  • the receiving end send a response byte (value 0x01) after got the good excepted header or packet except broadcast
  • if sender does not got the respons byte in time, send the header or packet again

Header and data details

Header

Offset Length Comment
0x00 1 destination network station number 0-64
0x01 1 source network station number 1-64
0x02 2 packet serial number 0-65535
0x04 1 packet type 0 - normal, 1 - last packet
0x05 1 data length 1-255
0x06 1 data checksum
0x07 1 header checksum (from pos. 0 - pos. 6)

Data

Offset Length Comment
0x00 data length field in header data bytes

Communication details

Data bytes broke up 255 bytes packet. Last packet should be shorter if length cannot divide by 255. Last packet type is 1, every other packets' type is 0. There is a header before every packet. Packets numbered from 0 to 65535.

Sending packets

  1. check network state, if there is no any activity during a random time length, then go to next else this again
  2. send a test byte, before every octet, send a 1 bit, and after every octet send a 0 bit; send lower bits first
0 1 2 3 4 5 6 7 8 9
1 bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7 0
  1. send header bytes
  2. after the whole header send a 1 bit (release the line)
  3. wait for response byte 0x01, if not arrive a certain time, send header again (go to 1)
  4. check network state, if there is no any activity during a random time length, then go to next else this again
  5. send data bytes like header's
  6. wait for response byte (0x01), if not arrive a certain time, send header and data again (go to 1)

Receiving packets

  1. check network state, if there is activity go to next
  2. wait test byte length time
  3. read header bytes
  4. check header, if valid and we wait this go to next else start again (go to 1)
  5. send response byte (0x01)
  6. check network state, if there is activity go to next
  7. wait test byte length time
  8. read data bytes
  9. check data validity (checksum), if not valid wait header and data again (go to 1)
  10. send response byte (0x01)

Broadcast send

Same as plain sending except:

  • in header the destination network station number is 0x00
  • no wait for response byte

Broadcast receive

Same as plain receiving except:

  • in header we wait destination network station number 0x00
  • does not send response byte

Example bitstream

This is not a real 'bitstream', because in the real life the width of the 'bits' are different!

Start 'test' byte:

start bit test byte (network station number) stop bit
0 0 0 0 0 1 0 1 0 1


Header packet:

start packet   start destination stop   start source stop   start serial num lo. stop   start serial num hi. stop
0 1 1 1 1 1 1 1 1 1 0 1 1 0 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0
start packet type stop   start data length stop   start data checksum stop   start header checksum stop   stop packet
1 0 1 1 1 1 1 1 1 0 1 0 0 0 1 1 1 1 1 0 1 1 0 0 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 0 1


Data packet:

start packet   start data byte 0 stop   start data byte 1 stop   start data byte 2 stop
0 1 1 0 1 0 0 1 0 1 0 1 1 1 1 0 0 1 0 1 0 1 1 1 1 1 1 0 1 1
start data byte 3 stop   start data byte 4 stop   start data byte 5 stop   start data byte 6 stop   stop packet
1 1 0 0 0 1 1 0 1 0 1 0 1 0 1 1 0 0 1 0 1 1 1 0 1 0 0 0 1 0 1 0 1 0 0 1 1 1 1 0 1

Also on Fandom

Random wikia