23/09/20
Dear e² Journal,
_At last! All the parts for the MFO from mouser, oshpark and ebay are here! The plan is simple but the journey is long and consists of 3 steps: (1) Build & Program the CDCE9XX programmers (2) Build & Program the MFO boards, and (3) Install the MFO board(s) in my PS1(s) & Test all region discs.
❶ Building & Programming the CDCE9XX Programmers
1a. Sodering Parts to the CDCE9XX Programmer Board
_Seeing the PCBs it's obvious I first have to cut the connector edge/tip at the dashed line. I open up a new & fresh No. 11 surgical scalpel and carefully carve a straight line right on the dashed line on both sides. The more cuts - the better. Man..! these boards are tough to cut..!
_After that it is time to fire up the soldering/desoldering station and solder the components one by one (of course I could add a tiny bit of solder on the pads and then bake the pcb with the hot air station, but nah... where's the fun in that? - maybe another day). On these little pcbs it's important to know where to begin and where to end, because if I install parts randomly, one part might present as an obstacle in the soldering of the next. Another thing to watch out for is the polarity of things. In this particular board I chose the keys of the connectors to point inside (for easy remembering) and I checked the polarity of the LED with my DMM before installing it. Of course the cathode (negative) goes to ground.
→ Picture 1: Soldering on the CDCE9XX Programmer
1b. Making the Cables & Connectors for the USBtinyISP AVR Programmer and the MFO PCBs
_Next up is cables and attaching connectors to them (I could of course just solder the cables on the pcbs, but I LOVE connectors!). One thing to point out is that it's really nice when little things in life add up in the end... What I mean by that is that the ebayer sent me as a present a 1m long 10-colour cable and I need a 6-colour cable for the ISP connection plus a 4-colour one for the MFO (I2C) connection. This means 3 equal vertical cuts and 1 split on this cable (6/4) and it's done! I have all the cables I need!
_I went with the easy ISP cables+connectors first this time - just pressed the top of the 2x3-pin female IDC connector WITH a flat surface ON a flat surface and it's ready. However, since the female connectors are also keyed to fit their male counterparts, caution is needed with the keys' orientation. I chose to have one female connector pointing outside and the other inside the cable. This creates two situations: (a) blue wire is always MISO (rectangle) and I cannot fit the cable backwards, and (b) the male IDC connector key must point OUTSIDE on the USBtinyISP (since the male CDCE9XX programmer IDC connector key points INSIDE).
→ Picture 2: CDCE9XX Programmer ISP Cable & Connectors
_After the somewhat easy ISP cable, it's time to make the cables that connect the MFO boards to the CDCE9XX programmer (I2C cable). Here is where things get a little tricky, and I have to be triple careful. First, the programmer side of the 4-wire cable must have a JST female connector with the key pointing OUTSIDE (UP) the cable, since its counterpart JST male connector on the CDCE9XX programmer board points INSIDE. A wire stripper and a wire crimper get this job done very easily. Second, the VTG (+ voltage) white wire, which is the second from left, must be connected to the corresponding VTG connection on the MFO board via a 22Ω resistor to limit the current it draws the moment I connect the two boards until the capacitors get charged (too much current in the beginning is known to cause resets to the programmer!!!). Third, the connector on the MFO side has a 2mm spacing instead of the 2.54mm spacing of all the connectors I have... This is where I have to use the connector edge/tip I cut earlier off the CDCE9XX programmer pcb. This tip will serve as a connector to the MFO, but it's also the most difficult part to make in order to have a snap-on / snap-off connection to the MFO. If someone watches this little edge pcb closely, it is obvious that it is in fact a
2.54mm to 2mm spacing female-female adapter. The plan is to solder the 4-wire cable on the 2.54mm side, while on the 2mm side I'll solder four ~5mm long cut connector pins vertically, that will plug directly on an "improvised" female connector on the MFO. More on that improvisation later when I get to the second step of the whole MFO process...
_The following picture shows the correct orientation of this cable's connectors' both pins & keys.
→ Picture 3: CDCE9XX Programmer I2C Cable & Connectors
_Last but not least, two more cables are needed for PC connections: A USB-A male to USB-B Mini male cable (for PC to CDCE9XX programmer connection) and a USB-A male to USB-B Micro male cable (for PC to USBtinyISP AVR Programmer connection).
→ Picture 4: All CDCE9XX Programmers and their Cables
→ Picture 5: All CDCE9XX Programmer Connections
1c. Flashing the firmware and setting the fuse bytes on the CDCE9XX programmer
_All the necessary hardware for the CDCE9XX programmer is now ready, so it's time I move on to the software. The USBtinyISP AVR programmer, like any other USB device, needs its drivers and a windows application (GUI) in order to operate when connected to a PC. Thanks to user "bmp02" on nfggames.com forums I know which windows drivers (adafruit USBtinyISP drivers - got it from
https://learn.adafruit.com/usbtinyisp/drivers) and which windows GUI (AVRDUDESS - got it from
http://blog.zakkemble.net/avrdudess-a-gui-for-avrdude/) to download and install. Installing both of these is easy and there are online guides for windows OS on the mentioned websites, but anyway, here are my guides too:
→ Picture 6: Installing the USBtinyISP AVR Programmer Drivers
→ Picture 7: Installing the AVRDUDESS GUI
_Next, even though it is not necessary to install windows drivers for the USB to Serial UART chip on the CDCE9XX programmer (because Windows automatically detects & installs the correct-current drivers), I went ahead and downloaded/installed them from the official FTDI website (
https://ftdichip.com/drivers/D2XX.htm), (file: CDM21228_Setup.zip)
_It's time now to run AVRDUDESS and flash the firmware - set the fuse bytes to the Atmega48A chip on the CDCE9XX programmer. The USBtinyISP AVR programmer must be connected to the PC with the appropriate USB cable AND to the CDCE9XX programmer with the ISP cable (
*Note #1: It doesn't matter if the CDCE9XX programmer is turned ON or OFF). In AVRDUDESS, the "usbtiny simple usb programmer" under "Programmer (-c)" and "usb" under "Port (-P)" must be selected. After that, the "Atmega48" must be detected automatically when "Detect" is pressed. Next, under "Flash" the .hex file which is the CDCE9XX programmer's firmware must be selected. Lastly, the "Set fuses" checkbox must be checked and all fuses must have a value of "0xFF" except for "H" (High Fuse) that has to be changed to "0xDF". By clicking "Program!" after all these settings, the Atmega48A chip should be successfully programmed and ready to use for DFO/MFO programming.
_The AVRDUDESS log at the bottom must show that all writing, reading & verification processes of the the firmware (flash) and the fuse bytes are successful, and display an "avrdude.exe done" message in the end. If an error message is displayed instead, closing AVRDUDESS, disconnecting all cables and then repeating the whole process again might solve the problem. If not, most likely something went wrong with soldering parts or cable making or loose connections.
_The best way to test that the CDCE9XX programmer was programmed correctly, is to connect it to the PC with the USB-B Mini cable, wait for Windows to install FTDI drivers and then run its own GUI. If it says "...successfully detected!", the CDCE9XX programmer is ready to program DFO/MFO boards (
*Note #2: Again, it doesn't matter if the CDCE9XX programmer is turned ON or OFF).
→ Picture 8: Programming the CDCE9XX Programmer with the USBTinyISP AVR Programmer
1c (Alternative). Flashing the firmware and setting the fuse bytes on the CDCE9XX programmer with the GQ-4x4 universal programmer
_As it turns out, I spent extra money and time on USBtinyISP unnecessarily, since my GQ-4x4 Universal Programmer can very well program through ISP the Atmega48A chip (and all other Atmel chips). The following picture describes the GQ-4x4 ISP procedure for the CDCE9XX programmer.
→ Picture 9: Programming the CDCE9XX Programmer with the GQ-4x4 Universal Programmer
❷ Building & Programming the MFO Boards
_Everything went smoothly up until this point, so I'll deal with the end product - the MFO boards - now. As with the CDCE9XX programmer boards, the tiny size of the MFO dictates for a correct order of soldering parts on it, which is shown in the following picture:
→ Picture 10: Soldering on the MFO
_As I mentioned earlier, I was a fool not to order additional JST or IDC connectors with 2mm spacing (pitch), so the male connector on the MFO side of the I2C cable and the female connector on the MFO board had to be "improvised" (of my own device). For the connector on the MFO board, I cut out four JST standard female single connectors, then trimmed off their lower two cable hooks and rolled the remaining two upper cable hooks until they formed into a "pin" that would fit in the 2mm-pitch holes on the MFO pcb. Then I lined up the four modified single connectors on the four holes on the MFO, soldered them and wrapped them in heat-shrink tubing to prevent them from shorting one another. It worked like a charm!
→ Picture 11: Improvised Female 2mm Pitch MFO (I2C) Connector
_Programming the MFO boards (I mean the CDCE925 chips on them...) is a very easy task thanks to the work of user "micro" (inventor of the DFO) who provided the necessary software for the job (CDCE9XX Programmer GUI v1.1) - easy as pressing two buttons!:
_(i) Connect the CDCE9XX programmer to a Windows PC via the USB-B Mini cable and to the MFO with the I2C cable. Now the programmer's switch must be turned ON!
_(ii) Run the CDCE9XX Programmer GUI v1.1 and watch for the message "...successfully detected!" to appear, then press "Load Configuration File", browse to the "MFO_PSX_PAL_NTSC.HEX" file (provided by user "skum" / "immerhax") and wait for the messages "...successfully loaded" & "Recognized device type: CDCE925" to appear.
_(iii) Finally press "🗲Program CDC3925" and wait for the message "The CDCE925 device has been successfully programmed" to appear.
_The MFO pcb is now ready to be installed inside the PS1 after that.
→ Picture 12: Programming the MFO
_(
*Note #3: The MFO pcb can be programmed even if it is installed in the playstation, but CAUTION is needed with this operation not to give the poor pcb more - twice as much - voltage than it needs and burn it. As micro describes this issue:
"It's important to set the V_Target switch on the programmer hardware right. If you have the DFO sitting on your table and you want to program it, set V_Target to on. The LED should start to shine red. If you want to program a DFO that's already installed in a system (let's say in a Megadrive for example), then turn V_Target off. Instead turn on the Megadrive itself. It will power the DFO. If you mess this up you can damage your console, the programmer and even your PC!" )
❸ Installing & Testing the MFO boards
_Ufff... last step before I enjoy an all-region faithful video signal on my PSX. By now it should be obvious what has to be soldered/unsoldered on the MFO and the PU-22 pcb for the mod to work:
(a) unsolder resistors R501 and R205 off the PU-22 board and solder them on R3 and R4 respectively.
(b) Solder 5 wires from the MFO to the PU-22 pcb (
S0 to the pad going to GPU pin 157 & DAC pin 13,
CLK1 to the pad going to DAC pin 15,
CLK2 to the pad going to GPU pins 192 & 196,
3.3V to a pad that provides this voltage and
GND to a ground pad).
→ Picture 13: MFO Installation Diagram (PU-22 Board)
→ Picture 14: MFO Installation Examples (PU-22 Board)