Saturday, January 19, 2019

Modding my PS1 - Video switch (PSX-VX Part II)

Goal
In the second part of this PSX modding series, we'll focus on the video output.
The goal is to control the signal that is sent: instead of only the one from the PS1, I want to be able to switch it with another signal.
As always, you can find the source code here: https://github.com/electrojack/psxvx

PS1 video hardware
The video output is sent through the 12-pin proprietary AV MULTI OUT connector (that also sends sound signals).
There are actually three sent video signals through the cable: RGB, S-Video and composite.

In this article I'll work on the composite signal (https://en.wikipedia.org/wiki/Composite_video).
You can see the connector soldered on the board at the top right of the following picture, you can recognize it with its 2 rows of 6 pins.


Once again, info about the pins can be found in the PS1 bible.

  1      RGB-Video Green
  2      RGB-Video Red
  3      Supply +5.0V (eg. supply for external
           RF adaptor)
  4      RGB-Video Blue
  5      Supply Ground
  6      S-Video C (chrominance)
  7      Composite Video (yellow cinch)
  8      S-Video Y (luminance)        
  9      Audio Left      (white cinch)
  10     Audio Left Ground            
  11     Audio Right     (red cinch)  
  12     Audio Right Ground
  Shield Video Ground
            ____________________________
           | 12    10   8   6   4   2   |
           |    11    9   7   5   3   1 |
           |____________________________|

So my composite signal is pin 7.

Switcher circuit
Now I need a circuit whose output can be chosen by an input from two sources.
Fortunately, composite signals only have positive voltage so my circuit can be really simple.
There are special ICs to switch between video sources but I wanted to keep it simple: I made it with just 2N2222 transistors.


It only contains 3 resistors, 3 2N2222's and power supply (3.5V).

The next step is choosing the second source of video. I'll be using a Raspberry Pi for 2 additional reasons:
  • it can deliver 3.5V
  • it can drive the circuit through one of its GPIOs

Hardware work on RPi
My RPi is a Zero so it has no headers and the video output is done through the 'TV' pads.
All we have to do is soldering male pin headers (or wires) to 3.5V, GND (power supply), GPIO27 (driver) and TV out.

Hardware work on PS1
The composite video trace must be cut so the actual output is not sent to the video pin of the AV out port.
Then solder wires to AVOUT-pin7, actual video signal from the PS1 (follow the pin7 trace to find a blob to solder on) and video ground.

Wiring
RPI 3.5VSWITCH VCC
RPI GNDSWITCH GND
RPI GPIO 27SWITCH DRIVER
RPI TVOUT+SWITCH SOURCE 2
RPI TVOUT-PS1 VIDEO GND
PS1 AVOUT pin7 SWITCH OUTPUT
PS1 VIDEO SIGNALSWITCH SOURCE 1

Software work on RPi
Now we have to control the GPIO on the RPi.
I did it with a Python script.

import RPi.GPIO as GPIO
import sys
vidport = 27
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(vidport, GPIO.OUT)
GPIO.output(vidport, sys.argv[1][0]!='f')

Save that as show_ps1.py and then you can run it with these commands:

python show_ps1.py true
python show_ps1.py false

Result
I'll add photos of the circuits later.
In the mean time here is a video of the actual result.