Why do that?
Why? Simply to use famicom (the Japanese NES) controllers that were unfortunately
not sold here. It's not fair that we did not get the chance to enjoy or hate additional
Here are two pictures of Japanese controller. The Hudson pad (left) and the Joyball (right)
An adapter is easily built by wiring a DB15 Male connector to a cable salvaged from a
NES controller. Note that the color below is that of the standard NES controllers. Third
party controller may use a different code.
|DB15 pin||NES color||Function|
|1 ||Brown ||GND|
|12 ||Orange ||Latch|
|13 ||Yellow ||Data|
|14 ||Red ||Clock|
|15 ||White ||+5 volt|
This adapter works perfectly with the Hudson Pad, and most like does with
several other controller models.
However, it does not work well with the Joyball.
Details in below.
The symptom was that only the A button and Right direction seemed to work. Very interesting
since those correspond to the first (A) and last (Right) bits that are transmitted. Indeed,
the transmission order is the following: A,B,Select,Start,Up,Down,Left,Right.
By looking at the signals with an oscilloscope, I noticed the DATA line would behave
strangely. For instance, when A was being held, B would then work, and if B was also held down, Select
would then work, and so on.
So I thought this was probably a problem with the clock signal, as if a part of the Joyball
had trouble following. As if the timing was violated. I looked inside the controller and
there was a single IC, but not the usual 4021 shift register. I think they probably made a custom
chip to also implement the turbo feature. I failed to find information on the chip (M60001-0103p with a Mitsubishi logo)
so I cannot say if the timing is appropriate or not.
At this point, had I had a Famicom console available, I would have compared the timings. But I don't have
a Famicom so I decided to experiment and programmed an AVR microcontroller to stretch the clock
pulses transmitted by the NES from 0.5μs to 2μs. I wired the circuit between the NES and the controller.
I turned on the NES and with the 2μs clock pulses, everything was working well. Well almost, since
it did not take long for me to understand why a Japanese had told me the Joyball sucked and that
if you had it as a kid, friends might have made fun of you! For after winning against the controller
imcompatiblity with the NES, I became a looser at Burgertime… All this work only to discover it wasn't worth
it! Ok, you may make fun of me now ;)
Top trace: Signal from the NES.
Bottom trace: Signal from my MCU.
For reference, here is the simple code I used to stretch the clock.
4 int main(void)
6 // In: PORTB5
7 // PORTB all pullup
8 DDRB = 0x00;
9 PORTB = 0xFF;
11 // Out: PORTC, ANY
12 DDRC = 0xFF;
13 PORTC = 0x00;
15 // PORTD unused, input + pull
16 PORTD = 0xFF;
17 DDRD = 0x00;
21 // Wait for falling edge
22 while (PINB & (1<<PINB5));
24 PORTC = 0x00;
26 PORTC = 0xff;
I cannot be held responsible for any damages that could occur to you
or your equipment while following the procedures present on this page.
Also, I GIVE ABSOLUTELY NO WARRANTY on the correctness and usability
of the informations on this page. Please note, however, that the procedures
above have worked in my case without any damages or problems.
Now you cannot say that I did not warn you :)