Hardware Projects‎ > ‎SNES‎ > ‎

Super Game Boy Clock Mod

This mod is now available for purchase on Tindie: https://www.tindie.com/products/qwertymodo/super-gameboy-clock-mod/

The original release of the Super Game Boy runs about 2.5% faster than an original Game Boy.  This is most noticeable in the audio playback, but it also means that the SGB is not allowed for use in speed-running, and is part of the reason why there is no link port available, since the speed difference would cause the communication to desync.  The later Japan-only Super Game Boy 2 fixed this problem by installing a crystal oscillator running at the correct speed.  There have been mods floating around online showing how to replace the clock in the SGB1 with a crystal oscillator running at the original Game Boy's speed.  However, the way these other mods are done actually breaks some cool features of the Super Game Boy where it's possible to speed up and slow down the gameplay using the Super Game Boy Commander controller from Hori.  After looking into the issue, I came up with my own mod, which not only retains that feature, but is also much easier to install (other mods require lifting pins on the CPU and carefully soldering wires to them).

Installation is simple.  First, remove the three components outlined in red (R1, R7, C15) and clean the pads of R1 with desoldering braid so they are nice and flat.  Next, place the board down and solder it to the four pads outlined in green (leave C5 on the board and just solder onto the left side of it).  Finally, if the board was delivered with the crystal separate, trim the leads and solder the crystal down to the available pads on the side of the PCB.  Early revisions of the clock board placed the crystal in a position where it was directly under a plastic standoff in the cart shell, which caused issues requiring the crystal to be mounted at a slight upward angle in order to avoid the standoff.  Later revisions have fixed this by moving the crystal's mounting pads.


Over the course of development, there have been a few issues identified and corrected in the design of this mod.  At this point, all known issues have been resolved, but some boards may have shipped with these issues present.  Here is a list of known issues, along with their fixes.

White screen/Boot failure
On a very small number of the very first revision boards, the Super GameBoy would freeze after several hours of playing, and would then fail to boot after a full power cycle.  This could sometimes persist for several days, until eventually it would boot again.  This seems to have been an issue with insufficient power decoupling on the PLL chip.  The issue can be fixed by removing the existing decoupling capacitor and replacing it with a 100nF capacitor and a 10nF capacitor in parallel (0603 package).  On the original board revision there was only a single bypass capacitor pad, so you have to stack the capacitors on top of each other, or side by side, in order to attach both to the single footprint.  This issue has not been observed on any other board revisions.

Incorrect Clock Crystal
One batch of crystal oscillators from my supplier ended up being the incorrect part number.  I was sent 8.000MHz crystals instead of 8.388608MHz.  This resulted in the SGB running ~4.6% too slow, rather than the stock speed which is ~2.5% fast, so it was actually almost twice as bad than the stock clock speed. By the time the mix-up was discovered, I was unable to determine which boards I had sold with the incorrect crystals, so I mailed replacement crystals to everyone who had ordered one (except those who were able to confirm receiving the correct one).  As of the discovery of the issue, all orders from that point on were verified to be correct.

Insufficient Load Capacitance
There was a slight error in the measurement of the stray capacitance on the crystal load pins, leading to the on-board load capacitors being smaller than they should have been.  This resulted in the clock running very slightly faster than it should have, amounting to approximately 1 frame gained every 2.5 minutes.  While essentially imperceptible, this could have an effect on the validity of speedruns (though, most leaderboards don't allow the use of the SGB1 at all, so it may not even be an issue in that regard).  The solution is to replace the load capacitors with a slightly higher value than the ones originally included on the board.  The correct value is 36pF (0603 package), preferably C0G/NP0 temperature coefficient to minimize thermal drift.  The location of the load capacitors changed slightly after the first board revision, but they should be fairly obvious and easy to identify, as they are connected directly to the two leads of the crystal oscillator.  This issue has been corrected in all orders shipped after May 12, 2019.


A few notes for anyone wanting to create their own version of this mod rather than just buying one from me:
  • The ICD2-R chip expects an input clock speed exactly 5x the Game Boy's system clock speed.  The Game Boy runs at 4.194304MHz (2^22Hz), which is a standard, easy to find crystal value.  5 * 4.194304 = 20.97152MHz, which is not a standard value.  This likely explains why Nintendo chose to use the SNES system clock, which is only ~4.5% faster than the correct speed.  They actually had to have a custom crystal manufactured for the Super Game Boy 2.  While it is possible to get custom crystals manufactured in relatively small quantities, I elected instead to use a PLL with a standard crystal.  Unfortunately, 5x PLL's are not easy to find in a cheap, small package.  However, I managed to luck out and find a crystal that is 2x the Game Boy clock speed, and a cheap PLL with a 2.5x multiplier in a SOIC-8 package, which is what I'm using here.
  • The ICD2-R chip does contain an oscillator circuit capable of directly connecting a 2-pin crystal like the one used in the SGB2 on pins 18 (CLKI) and 19 (CLKO).  If you choose to do this (and are able to find a proper crystal to do so), you will want to remove the same three components shown above, then replace R1 with a 100K ohm resistor.  R1 is connected between pins 18 and 19 on the ICD2-R, so you can use these pads for soldering the crystal, or if you want to build a castellated PCB like I did, you can use those pads as mount points for the PCB.  The large gold pad at the top-left corner of the ICD2-R is a ground pad.  If you're using a crystal directly, you won't need Vcc from the left side of C5.  Just replace the resistor, connect the crystal, and add proper load capacitors to ground (be sure to calculate the proper load capacitor values for your crystal).
  • If you choose to use a PLL like I did, or another single-ended clock signal like a programmable oscillator, you will only need to remove the two components in the lower-right section of the board unless you intend to use the R1 pads for mounting a PCB like I did.  You will then need to add those components in series after the output of your clock signal, with one slight but very important change.  In the original design, the incoming clock signal goes into a series 33pF capacitor, and then into a series 510 ohm resistor, then finally into the ICD2-R CLKI pin (pin 18).  Finally, there is a 510K ohm resistor between the ICD2-R CLKI and CLKO pins.  The one change that needs to be made is to adjust for the much lower trace capacitance due to the shorter traces (assuming you're mounting your clock circuit very close to the chip like I did here.  I wasn't able to measure the actual capacitance since my multimeter's capacitance function is broken (and probably wouldn't be accurate at such small scale anyway), but using an oscilloscope to measure the output voltage, I determined 18pF to be a good value.  Your results may vary, you should check the voltage level on pin 18.  The proper voltage level is 2Vpp with a 2V DC offset, meaning the signal should go from 1V (low) to 3V (high).  If the signal is too low, both in amplitude and offset, reduce the capacitor.  If the signal is too high, increase it.  If the amplitude is correct but the offset is not, adjust the 510 ohm resistor instead.