The NES: Playing Volleyball with Three of Your Friends

May 17, 2021

Playing a video game with a friend is great. You get to have fun and bond while you stop the aliens together or compete for the high score. But what if you have more than one friend? Weird to think about, right? And what if you wanted to play a bodacious new volleyball video game with more than one friend at the same time. Well, if you were gaming in the early 90s, this required some creative hardware and software tricks to make happen.

My first Nintendo console was a Family Computer we got at a flea market. That had two controllers hard-wired into the console. Eventually that stopped working and, for some holiday, I got the NES Sports Pack, which included controllers and a multicart with Super Spike V’Ball and a soccer game, World Cup Soccer, that was actually part of a crazy huge game world in Japan? I did always wonder why the soccer game looked a lot like like River City Ransom

Anyway, the coolest thing it came with was the NES Satellite, which allows you to use four (!) controllers instead of the normal two. It’s an infrared version of the wired Four Score multitap, so you put the 6 D-cell powered Satellite transmitter with the controllers plugged into it about 10 or 15 feet away from the NES and the signal is transmitted via infrared. I had an electronics kit when I was very young, and one of the experiments was turning a flashlight, photosensor, and speaker into an alarm, so I kinda knew how the infrared part worked. But I always wondered how the heck the four-controllers-instead-of-two thing worked.

Bamboo puts his hand in front of an NES Satellite and his three friends are upset.

Only block the infrared light on the Satellite if you're winning by a lot, or losing by a lot.

The NES and its controllers communicate, much like how the C128 and 1571 floppy drives communicate, with a shift register between the controller and console. When you want to know the state of the first controller, you tell that controller to start reading that state of all of the buttons into the shift register of the controller by writing a 1 to a specific memory location in the NES, $4016. This is like lighting up a “START READING” sign inside the controller. Then, when you’re ready for the data, you tell the controller to stop capturing by writing a 0, which lights up a “Pack up your current state now!” sign. Imagine a set of 8 suitcases, one for each button, all in a line on the baggage carousel, and they’re being filled with the state of each button on the controller:

Agents are putting together the suitcases to send along the conveyor belt.

The type of shift register the NES has is a parallel in, serial out shift register, which means the state of all 8 buttons is captured at the same time, and is then squashed down into a byte to send across the wire, one bit at a time in order. If the button is down, the corresponding bit sent via the shift register is a 1. Otherwise, it’s a 0. The button state is always sent in this order: A, B, Select, Start, Up, Down, Left, Right.

A diagram of a single controller plugged into the NES

On the other end, the NES shifts the first bit off of the shift register and onto the same memory location you used to start the process, replacing the lowest bit in $4016 with the bit from the register. Once you read a byte of data from $4016, the next value is shifted off of the register into the lowest bit of $4016 again. When reading button press state, the rest of the bits in $4016 are unused and can be ignored.

This process continues until you’ve done 8 reads to $4016, pulling all the suitcases off of the carousel to work with in your code. Continuing to read from that memory address will tell you if a controller is hooked up or not to that controller port, to know if the data is trustworthy.

A luggage agent is taking suitcases off the conveyor belt in order. There's a sign indicating these suitcases are from a rear controller.

Since there are two controllers, there are two shift registers and two memory areas where data is loaded from. For most games, this is all you need. But you want to bump-set-spike that volleyball with three of your rad friends. How does the NES Satellite make four controllers work?

The Four Score and Satellite connect the four controller shift registers to its own hardware, and the Satellite has its own shift registers that hook up to the NES controller ports via the infrared receiver. Your game asks for controller data the same way, by writing a 1, then a 0, to $4016, and the Satellite will pass this commmand along to the controllers plugged into ports 1 and 3 on the Satellite so they can start collecting button presses. The the game will start reading from the memory location like before, which is now being populated by the Satellite.

A diagram of two controllers plugged into a Satellite.

Instead of stopping at sending 8 bits though, the Satellite sends, in the case of the first controller port, the first 8 bits for the first controller, then the next 8 bits for the third controller. Then, it sends a magic 8 bit code (10 in this case) to let the game know that this data is coming from a Four Score or Satellite and that the four player mode is enabled. You can use these codes to detect if there is a Four Score or Satellite plugged in, allowing you to enable menu options to start 3- or 4-player games. Without a Four Score plugged in, for example, Super Spike V’Ball will show the 2 vs. 1 or 2 vs. 2 options in the main menu, but you can’t select them.

A luggage agent is asking a volleyball player who is overflowing with suitcases if they know how to handle all of the suitcases.

There were plenty of games made that supported the Four Score and Satellite, and this style of multitap continued on with the PC Engine and SNES. There were even directions in some later Amiga games for building a parallel port controller multitap from a printer cable for adding two more controller ports! Eventually, Bluetooth & other wireless connectivity and USB eliminated the need for what was essentially a clever hack on top of the existing controller systems to expand gameplay to more than the few controller ports early game consoles and computers had.

Now avoid those campfires and set up for a power alley, and watch the line shot! Those are volleyball terms!

Changelog

  • 2021-05-17: Initial post