MSX Assembly Page

JoyNet standard

Latest updates:

2007-07-02
joywave.zip and a newer version of snafu.zip were recovered from the depths of the internet thanks to SLotman.

2007-06-29
The JoyNet standard has moved to the MSX Assembly Page and has been cleaned up thoroughly. An effort was made to restore broken links. I also merged in text from MSX Core Club’s JoyNet page, which is no longer available on the internet.

The official specification page is http://map.tni.nl/resources/joynet/.

JoyNet is a joystick port-based ring network standard that was created collaboratively on the MSX Mailinglist in 1999 (archives). It is compatible with the F1-Spirit 3D Special network cable when two computers are connected…

Thanks go to Maarten ter Huurne, Alex Wulms, Sean Young, Werner Augusto Roder Kai, Patrick Lina, Maico Arts, Jeroen Smael, Laurens Holst and all other people who contributed to the development of this standard.

Discussions about JoyNet are mainly being held on the MSX Mailinglist. If you have any additions, modifications, questions or replies concerning the information on this page, then send an email either to the MSX Mailinglist or to the MAP’s contact-address.

Table of Contents

  1. JoyNet schematics
    1. The JoyNet cable
    2. An alternative cable
    3. JoyNet to PC cable
  2. JoyNet protocol guidelines
  3. Opinions and Suggestions
    1. The speed of JoyNet
    2. Some ideas for protocols
    3. The interrupt-problem
  4. Questions and answers
    1. Synchonous or asynchronous
    2. Alternative ways of communicating
  5. Software
    1. Test program
    2. Tetris clone
    3. Snafu (1998)
    4. Joywave (1999)
    5. F-16 Fighting Falcon (1984)
    6. Connect (1990)
    7. F1 Spirit 3D Special (1991)
    8. Magical Labyrinth (1995)
    9. Wannabe-JoyNet games

JoyNet schematics

The JoyNet cable

This section is normative.

A JoyNet network is a ring network between MSX computers via the joystick port. For every computer connected, one cable is needed. This cable has a DB9 connector on one end, and two DIN5 connectors on the other end (one male, one female). Both cables from the DB9 connector to the DIN5 connectors SHOULD be of equal size.

Following is a parts list for one JoyNet cable. Note that in order to link two MSX computers with standard JoyNet cables (as opposed to an Konami F1 Spirit 3D-style cable), you will need two cables.

There is no specified minimum or maximum length of the cable. Common sense suggests that shorter is better. Maarten ter Huurne has run some tests with cables of 2m between DB9 and DIN5 connectors (resulting in a total loop length of 8m). In these tests, while continuously sending 16k-blocks using his protocol, only after 2500 times of sending an error occurred. Refer to the Opinions and suggestions section for more details.

The three ends of this cable are denoted MSX, SEND and RECV, as follows:

MSX (DB9 /f)
    -->
SEND (DIN5 180 /m)
RECV (DIN5 180 /f)

The MSX (DB9 /f) connector is connected as follows:

pin - connection
  1 - RECV pin 1
  2 - RECV pin 2
  3 - SEND pin 3
  4 - nc
  5 - nc
  6 - SEND pin 1
  7 - SEND pin 2
  8 - RECV pin 3
  9 - SEND / RECV pin 5

The SEND (DIN5 180 /m) connector is connected as follows:

pin - connection
  1 - MSX pin 6
  2 - MSX pin 7
  3 - MSX pin 3
  4 - nc
  5 - MSX pin 9

The RECV (DIN5 180 /f) connector is connected as follows:

pin - connection
  1 - MSX pin 1
  2 - MSX pin 2
  3 - MSX pin 8
  4 - nc
  5 - MSX pin 9

An explaining diagram:

An alternative cable

This section is normative.

The JoyNet cable is designed to form a ring network, but if you connect two JoyNet cables, you get a cable that is identical to Konami’s F1-Spirit 3D Special cable (but different from the one used for of Blokslag, Zeeslag etc.). When you only wish to connect 2 MSX-computers, this alternative cable can be used as well. Note however that the cable described in the section above is preferred, as it can form a network with more than two computers.

The two ends of this cable are denoted MSX1 and MSX2, as follows:

MSX1 (DS9 /f)
    -->
MSX2 (DS9 /f)

The MSX1 (DB9 /f) connector is connected as follows:

pin - connection
  1 - MSX2 pin 6
  2 - MSX2 pin 7
  3 - MSX2 pin 8
  4 - nc
  5 - nc
  6 - MSX2 pin 1
  7 - MSX2 pin 2
  8 - MSX2 pin 3
  9 - MSX2 pin 9

The MSX2 (DB9 /f) connector is connected as follows:

pin - connection
  1 - MSX1 pin 6
  2 - MSX1 pin 7
  3 - MSX1 pin 8
  4 - nc
  5 - nc
  6 - MSX1 pin 1
  7 - MSX1 pin 2
  8 - MSX1 pin 3
  9 - MSX1 pin 9

An explaining diagram:

JoyNet to PC cable

This section is normative.

A cable to connect a PC to a JoyNet network via the parallel port is also described. This cable can be used for many things, for example for JoyNet emulation on emulators, or for transferring data between an MSX and a PC.

The three ends of this cable are denoted PC, SEND and RECV, as follows:

PC (DB25 /m)
    -->
SEND (DIN5 180 /m)
RECV (DIN5 180 /f)

The PC (DB25 /m) connector is connected as follows:

  pin - connection
    2 - SEND pin 1
    3 - SEND pin 2
    4 - RECV pin 3
  xxx - nc
   10 - SEND pin 3
   11 - nc
   12 - RECV pin 2
   13 - RECV pin 1
  xxx - nc
18-25 - SEND / RECV pin 5

The SEND (DIN5 180 /m) connector is connected as follows:

pin - connection
  1 - PC pin 2
  2 - PC pin 3
  3 - PC pin 10
  4 - nc
  5 - PC pin 18-25

The RECV (DIN5 180 /f) connector is connected as follows:

pin - connection
  1 - PC pin 13
  2 - PC pin 12
  3 - PC pin 4
  4 - nc
  5 - PC pin 18-25

An explaining diagram:

JoyNet protocol guidelines

This section is normative.

This specification does not specify any JoyNet communication protocol. JoyNet is a hardware standard, and delegates standardisation of a protocol to a possible secondary standard. As long as the hardware follows JoyNet, the compatibility between two programs using the same protocol is guaranteed.

There are many ways to establish communication between computers, and the appliccable algorythm and the protocol may vary from case to case. So each programmer can use and designate the pins any way he wants (e.g. D0, ACK, CLK, CTS, IN0, etc.).

However, there are still some guidelines which every protocol should deal with:

Opinions and suggestions

This section is informative.

For a lot of discussion about JoyNet, you can consult the MSX mailinglist archives.

Some additional thoughts by Alwin Henseler.

MARMSX wrote an article in Portuguese about the JoyNet Basics article (mirror).

The speed of JoyNet

Some test-results of Maarten ter Huurne using his own protocol.

I just made some routines for sending data between my PC and my turbo R. The routines are as optimized as I could get them.

Results:

PC → turbo R (R800 mode) 14 kilobyte per second
turbo R (R800 mode) → PC 12 kilobyte per second
PC → turbo R (Z80 mode) 3.6 kilobyte per second
turbo R (Z80 mode) → PC 3.2 kilobyte per second

To estimate the number of errors, I transferred the same 16K data back and forth a lot of times. After 2500 transfers, an error occurred. So I was able to send 16K * 2 * 2500 = 80,000K before the first error. I think it’s safe to say that a 32 bit CRC is overkill… However, to backup a harddisk, some simple error detection is necessary.

Please keep in mind here that because Maarten used a PC for testing on one end, these speeds are likely closer to top speed than when two MSX computers would connect, for the PC can poll many times faster than the MSX resulting in better response times. Also, this is done with the JoyNet->PC-cable, so the conditions are different. But I still think this is a reasonable estimate.

Another thing to note is that MtH’s protocol uses 1 bit per transfer. If you are only communicating between 2 computers, it is possible to use a 2-bit protocol, which will result in higher transfer rates.

Some ideas for protocols

Here we will suggest 4 protocols, one handshake-protocol and three transfer-protocols.

This section is incomplete.

The interrupt-problem

When implementing a protocol, you will definitely come across the interrupt-problem. The problem here is, that on the MSX BIOS its interrupt handler the pins of the joystickport are being reset.

One solution would be to turn off the MSX BIOS interrupt handling entirely. This however can not really be used in situations where you can not turn off the MSX BIOS’s interrupt handler, e.g. when creating a JoyNet driver for Basic.

Another solution would be to intercept the BIOS its joystick handling routines, and annul them for joystick ports where a JoyNet connection is detected.

Questions and answers

This section is informative.

Synchonous or asynchronous

Alwin wrote:

If JoyNet only standardises the cable, than that leaves the programmer free to choose for a synchronous or an asynchronous communication method.

Maarten ter Huurne responds:

It does.

I just strongly recommend an delay-insensitive asynchronous communication protocol, because that will give far less trouble. For example, it is insensitive to cable lengths and it will run at any clock speed.

Alternative ways of communicating

Alwin wrote:

I think you are both mistaken here. In synchronous communications, the exact point in time at which the data signal(s) is sampled, is determined by an ‘extra’ signal, an other signal, and with that, the data stream is SYNCHRONISED with that other signal.

Maarten ter Huurne responds:

What you call an ‘extra’ signal, is just as much part of the signal as the data signals are. Dependant on the encoding, it may not even be possible to say “these bits are data and these bits are timing”.

Take for example the encoding I proposed on this list a while ago: There are 2 signal bits: D0 and D1.

Flipping of D0 means “a 0 is transmitted”.

Flipping of D1 means “a 1 is transmitted”.

And note that after that you can use the ACK-signal to notify the sender that the data is recieved.

Software

This section is informative.

Test program

A JoyNet test-program (to test the cable) can be found on Maarten ter Huurne’s page (web.archive.org). Source and instructions how-to-use can also be found there.

Tetris clone

Also, Maarten ter Huurne published the first beta of the JoyNet Tetris-clone he is making… It can once again be found on his JoyNet page (web.archive.org).

Snafu (1998)

Download game with manual in English - snafu.zip - 5 Kb (old version)

This is a game like Tron or Laserbikes made by MSX Core Club. The name “Snafu” originally came from an Intellivision version. They made the first version specially for the MSX Jaú ’98 meeting (may 23,24). It was presented working just with two computers, originally linked with two cables in both joystick ports, like the ones used for F1 Spirit 3D Special. This first version is in BASIC with only the communication routines in Assembly. [picture]

For the MSX Jaú ’98+ (october 30, november 1, 2) we made a new version 100% in Assembly (except for the loader in BASIC…), and we could test it with 4 MSX computers. [picture]

We repeated the presentation with 4 MSX computers at the MSX Jaú ’99 meeting [picture], and at the ExpoSAlt 2000 meeting we presented the game with 3 MSX computers. Here is a video of the event: link, link.

Both versions support from 2 up to 14 MSX computers, and only work in MSX computers with 3.58 Mhz clock.

MSX Core Club also has some English JoyNet pages (web.archive.org).

Joywave (1999)

[Download] - joywave.zip - 30 Kb

If you want to play big ".WAV" files on your MSX Turbo-R, but you don’t have a hard disk, then this program is for you. Using JoyWave, you can load a ".WAV" file directly from a PC connected to your MSX through a Joynet cable. Made by Ricardo Bittencourt, the author of BrMSX.

F-16 Fighting Falcon (1984)

[cartridge label] - [box front] - [box back] - [page 1] - [page 2] - [page 3] - [page 4] - [page 5] - [pages 6 and 7] - [page 8]

This is a combat flight simulator for MSX 1, published as a 16kb ROM cartridge. To start the game you must press F1 or F2. If you press F1 you select one player game (play against computer), and then you can select the level with left and right and space (or joystick at port 1). If you press F2 you select two players game, to play against an human opponent, and then you will need two MSX computers and a JoyNet connection at the joystick port 2 of both MSX computers.

Connect (1990)

[download files of disk 1 - 21 kb] - [download files of disk 2 - 48 kb]

Connect is a software made to link only two MSX computers. One MSX computer works as ‘master’ and the other as ‘slave’. It enables to the ‘master’ computer to acess the disk drives of the ‘slave’ computer. It was made to enlarge the database of a MSX-based BBS from two up to four floppy disks, because if you remember, at that time we didn’t have HD interfaces for MSX. It was made by Ries Vriend. To run ‘Connect’ you will need a JoyNet connection at the joystick port 2 of both MSX computers. But I didn’t tested it yet because it’s all in Dutch… And I can’t understand Dutch…

F1 Spirit 3D Special (1991)

This is a two-disk formula one (F1) race game for MSX 2+ by Konami. You can play against computer in just a single race or in a complete season, or select the combat mode to play against a human opponent.

To play in "combat mode" you will need two MSX2+ computers and a JoyNet connection at the joystick port 2 of both MSX computers.

[picture of people at the MSX Jaú ’98+ meeting playing it in battle mode]

Wannabe-JoyNet games

There are also a number of games that could use JoyNet, but unfortunately don’t.

Triplex (199?)

Triplex is a multiplayer Tetris game made for up to 15 players linked through the MIDI interface of the Philips Music Module Cartridge (MSX Audio). Possibly the communication routines could be changed, converting it to the JoyNet standard.

Magical Labyrinth (1995)

Magical Labyrinth is a labyrinth game for up to 4 players made by Gigamix. It is played in only one MSX with the screen splited into 4 parts, and it needs an external hardware called "Ninja Tap Extended" to connect up to 4 joysticks multiplexed into only one joystick port. It would be nice if the people from Gigamix would make a JoyNet version of this game for up to 4 MSX computers, but with full screen playing.