The NES: Playing Volleyball with Three of Your Friends
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.
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:
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.
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.
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.
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.
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!
Links
- The Four Score/Satellite
- How to read input from an NES controller
- Shift registers
- Kunio-kun is where River City Ransom and World Cup Soccer came from
- Mutlitaps in general
- These are volleyball terms!
Changelog
- 2021-05-17: Initial post