MFO, Multiple Frequency Oscillator

When one is modding old gaming consoles to run both PAL 50Hz and NTSC 60Hz, often it is also required to switch oscillators to have 100% correct frequencies. This goes for machines like SNES, Master System, Genesis/Mega Drive and so on. A guy called micro made a DFO, Dual Frequency Oscillator, based on Texas Instruments’ programmable clock IC’s.

The DFO is really cool, and I’ve been using them a lot when modding. However I noticed on certain consoles, mainly the later PSX, like SCPH-750x and PSone, there are actually more than one frequency that is different from region to region. There is a Video DAC clock that needs to be changed to have proper vertical frequency and a carrier frequency for the composite video signals. Thus if running composite video on a PAL unit, in NTSC/60Hz mode, it would often be black and white, not due to missing NTSC decoding, but because the carrier frequency is 4.43MHz instead of the correct 3.58MHz. Although one could just use RGB and be done with it, but I like tinkering with this stuff, and make it _really_ working in both modes, so I decided that I wanted to take the DFO one step further, so I created the MFO. The MFO, a short for Multiple Frequency Oscillator, is more or less a copy of the DFO, but with the CDCE913 changed to a CDCE925 so I could create BOTH the 53.20/53.69MHz GPU clock _AND_ the 4.43/3.58MHz carrier frequency for the Video DAC at the same time. So the result was this:

The MFO. Multiple Frequency Oscillator

Here it is, installed into a PSone, SCPH-102, along with a onechip modchip. The two large THT resistors, was because I was out of the proper SMD resistors for the oscillator signals.

The MFO in a PSone, still missing the final connections.
The completed install.

The OSHPark design can be found here and here. The latter is a Rev. B, which is functionally identical, but with a more tiny design (space is often sparse).

Update! More details 😀

Download the hex file for the MFO for the PSX here (zip). I programmed it to the MFO by using cdceprog on a Raspberry Pi. CLK1 is the GPU clock while CLK2 is the sub-carrier.

Now injection of the signals will depend on your model, so easiest is to find the service manual and find the PLL that creates the frequencies for the system. On PSOne (and the others also AFAIK) it’s IC204. It creates 3 frequencies: One for the CPU, which is the same for NTSC and PAL, one for the GPU, (53.693175 MHz on NTSC and 53.203425 MHz on PAL), and one for the sub-carrier (3.58 MHz on NTSC, 4.43 MHz on PAL). The GPU clock goes to R205, which is a 220 Ohm resistor, close to IC203 (the GPU) pin 99. Remove R205, and inject on the pad going to the GPU by connecting CLK1 pad here. Alternatively inject on pad CL201 (still with the resistor removed of course). Replace R3 on the MFO with a 220 Ohm resistor (or use the one you just lifted). The sub carrier goes to R501 that connects to IC502 which is the Video DAC. R501 is a 2200 Ohm (2.2K) resistor, so remove that, and then on the MFO, change R4 from 18 Ohm to a 2.2K and then solder the CLK2 pad to the pad connecting to pin 15 on the DAC. The MFO’s S0 pin, which selects the frequency is then connected to pin 13 of the DAC/IC502.

Comments are closed.