No More Left!? How to still get one
Sorry, these sold out faster than I expected! Also, 20 is a good limit for now since I am making these all by hand. If you missed out and still want to buy one, please let me know by registering your interest here:
If enough people still want one, I will very likely make more! You only need to enter a name (or nickname), however if you give your email, I will add you to a list so I can personally email you to let you know as soon as more become available to buy!
Please note that doing this gives you no obligation to buy one... it is purely so see whether it is worth me looking into making more.
I am currently in the process of setting up a website about the adapter. When finished, it will contain details about the adapter, including the information already on this page, updates to the project, as well as detailed instructions on how to use the adapter:
If you want to know the basics, without understanding how it works... here is the overview of the adapter. This adapter will allow you to play Nintendo 64 Wii Virtual Console releases on the Wii, but with the original Nintendo 64 controller that was intended. This makes playing on the Wii Virtual Console feel near-identical to playing on the Nintendo 64. Here are some of the features of this adapter:
- The ONLY adapter with near-perfect joystick mapping for every N64 Wii VC release
No input lag compared to a Nintendo GameCube controller
Only 7 mappings cover ALL Wii VC releases - Easy to use!
- Additional generic mapping for GameCube games - with toggled C-button functionality (C-stick or X,Y,Z)
- Compatible with the Rumble Pak - Rumbles whenever a GameCube controller otherwise would
- Uses a CPLD, not a microcontroller - Very high reliability
- Built-in N64 input display feature - works with NintendoSpy software (you'll likely need a separate serial to usb adapter)
The reason this is not the case for other adapters is that the joystick is indirectly mapped by the Wii via a complex function mapping in both x and y. Since other adapters crudely "fix" the problem by simply adjusting the joystick range, and linearly scaling to adjust sensitivity... many games are going to feel very different, and games where precise joystick positioning, and aiming is required are going to be much more difficult to play. My adapter is different, as it knows value-for-value the mapping performed by the Wii Virtual Console, allowing an inverse mapping to be performed, prior to passing the x and y values through to the Wii. This makes playing on the Wii Virtual Console feel exactly like the real thing!
The Video Demonstration
The video demonstrates the adapter being used for 3 different games on the Wii Virtual Console, all of which use different analogue stick mappings: The Legend of Zelda - Ocarina of Time, The Legend of Zelda - Majora's Mask, and Super Mario 64. Many different joystick positions are tested throughout the video, and two different button mappings are used, one for SM64, and one for OOT and MM.
The video shows the initial N64 analogue stick values, and an input display of the controller (using NintendoSpy). With the use of the OOT practice ROM, the final values in-game are able to be shown also for Ocarina of Time, allowing a comparison between the desired values, and the final values which the adapter manages to map them to.
Since ESS position is fairly precise, and angle changing is made much more difficult by the Wii VC remapping, plenty of HESSes and angle-changes are shown in the video for both Zelda titles, as well as aiming with the hookshot.
The Wii Virtual Console was a brilliant addition to the Nintendo Wii! Being able to play classics, with near-perfect emulation, zero input-lag, and no video lag all on one system was one of Nintendo's greatest ideas. Many popular speedrunners even play on the Wii VC now, and many runners used to playing the Nintendo 64 version, experience little or no trouble switching over to the Wii VC, due to the excellent quality of the emulation.
However... there is a catch! The Wii Virtual Console does not allow you to play using the controllers from the original games. This means you MUST play using either a Nintendo GameCube controller, Wii Remote, or the Wii Classic Controller. While this seems like not a huge problem for many titles, such as NES and SNES releases... it is a surprising pain for Nintendo 64 releases. A couple of minor differences when using a GameCube controller are:
- Using either X, Y and Z or the C-stick, rather than the 4 C-buttons (depends on the game)
- Pushing the analogue triggers all the way down for a digital Z or R press to trigger
For this reason, others have already built Nintendo 64 controller to GameCube / Wii adapters, which allow you to use the original N64 controller to play Wii Virtual Console titles. So what's wrong with those? What makes my adapter better than theirs? Well, it's all to do with the analogue stick, and the way in which Nintendo decided to solve the problem of having to use a GameCube joystick, rather than a Nintendo 64 one.
What's wrong with the analogue stick?
In order to make playing with a Nintendo GameCube controller work with every Nintendo 64 release, Nintendo decided to implement a mapping function for the analogue stick, in order to allow the full range of motion that you would get with a Nintendo 64 controller. This means there is a large imposed deadzone in the middle of the joystick's range, and the full range of the joystick is squashed down into a smaller set of values. This makes holding precise angles and aiming in certain games either difficult, or near-impossible.
One other big problem is that the shape of each joystick's range is different... with the diagonals of a Nintendo 64 joystick being further than that of a GameCube controller. Nintendo's solution to this, was to perform a 2-dimensional function mapping on the GameCube controller's inputs based on both x and y. This means that even is you hold x still, and only move the stick in the y direction... both the x and y values will change.
This as you can imagine, is a huge headache when trying to create an adapter for a Nintendo 64 controller... as passing the N64 stick values directly through would not only cause the range to be restricted... the diagonals will be completely wrong! This means both axes have to be mapped to a pair of x, y values together, as they can't be viewed independently.
To complicate matters further... Nintendo didn't use the same joystick mapping for every Wii Virtual Console release. While many games share one mapping, I've come across a total of 3 different mappings across all N64 Wii VC titles, plus another mapping for Ocarina of Time + Master Quest for the Nintendo GameCube! This means that while only one inverse mapping function needs to be able to be performed in real-time... 4 full 2-dimensional mapping functions need to be stored in the adapter in order for it to work with every game.
I've plotted each of the four analogue stick mappings done by the Wii Virtual Console, and the Ocarina of Time / Master Quest disk... these can be seen below:
Just for reference... the ideal mapping would look like this:
Rather than approximating each mapping function, I decided I wanted certainty that the mapping would be as close as is possible to the original N64 value, with no anomalous values, or strange edge-cases. For this reason, I methodically tested all 65536 different GameCube joystick values in an emulator, and read out the Nintendo 64 joystick values they got mapped to. This was repeated for all games that appeared to use a different mapping function. I then wrote a program to create an inverse mapping from these values, meaning I would know exactly what GameCube values are required to produce each Nintendo 64 value.
Unfortunately, since the range is shrunk by the forward mapping, this means many Nintendo 64 values are not possible, leaving some holes that need to be filled-in with the closest approximate values. This was done differently depending on the shape of the inverse mapping, and whereabouts the holes were. For example, this would mean that if a value of (25, 10) is not possible on the Wii Virtual Console... inputting that exact joystick value would be remapped to a nearby value, such as (24, 10). The utmost care was taken to ensure that the holes were filled in with the most appropriate values, and thorough testing has not seen any problems so far.
I've plotted the final (in-game) N64 X values against the controller X and Y values for all 4 mappings when using the adapter... the area inside real N64 stick range (roughly -80 to +80) looks remarkably linear! No deadzone, Y doesn't vary with X, and they look very close to the ideal (one-to-one) mapping. On the left is the original Wii VC (or OOT / MQ disk) mapping (without the adapter), and on the right is the same mapping, but when using the adapter:
Here are the same plots, but showing only values inside the possible N64 stick range for clarity:
The prototype is very easy to use. Simply select the mapping that is appropriate for the game you want to play. The appropriate joystick and button mappings are then automatically chosen by the adapter. The appropriate mapping is chosen by holding down a button combination (L+Z+R+all C-buttons at once) and pressing up or down on the D-pad. This cycles through the 8 different overall mappings, including the 5 different joystick mappings shown below:
- General Mapping (useful for non-VC games, such as most GC games)
- Super Mario 64 + Mario Kart 64 (Wii VC)
- Ocarina of Time (Wii VC)
- All other Wii VC titles (including Majora's Mask)
- Ocarina of Time and Master Quest (GameCube)
The general mapping is simply a linear mapping in x and y, but with a step around the origin (0,0) to account for the deadzone required when playing with a GameCube controller. This is useful for playing non-VC games with a Nintendo 64 controller which don't have any sort of mapping function built-in. The button mapping is special in this case, as the L-button will toggle whether the C-buttons are mapped to the C-stick, or the X,Y and Z buttons. This allows all the functionality of a GameCube controller with a Nintendo 64 controller... although, it does mean digitising the C-stick and triggers. To account for this, when the L-button is held, the triggers act as a smaller press, rather than a full press. This allows you to move and spray in Super Mario Sunshine for example.
The selected overall joystick mapping is displayed using a RGB LED in the middle of the device. The colour of the LED determines the mapping which is chosen.
The prototype uses a CPLD, rather than a microcontroller. This allows a large number of operations to be performed in parallel, making it ideal for communicating with both the Nintendo 64 controller, Nintendo Wii / GameCube, and performing the appropriate button and joystick mappings exactly when required. It is also extremely reliable for both long-term and short-term use.
The Nintendo 64 controller is polled for information as late as possible, and only after a request is received from the Nintendo GameCube. This means there is practically zero input lag when compared with a Nintendo GameCube controller.
If you are interested in the specifics, any lag will be very consistently in the order of 0.1ms... or rougly 1/160th of a single input frame at 60Hz! For comparison... other adapters which are microcontroller-based, have varying input lag depending on poll rate. The raphnet adapter polls every 5ms by default... meaning it can have up to 5ms of input lag... which is just under 1/3rd of an input frame at 60Hz, or around 50 times as much lag!
The board is a small 2-layer PCB, custom designed by me, and manufactured in China by a reputable manufacturer.
The mappings are stored on a serial flash chip on the top of the board.
The case is 3D printed, and is made of ABS plastic.
Here is the prototype labelled. Ignore the wires sticking out the side - these are purely for programming and testing the prototype, and will not be in the one you receive: