TIA Video Faults (Atari 2600)
In search of the ultimate perfectly clean composite video out of the TIA I discovered several faults in the way the TIA generates the signals that ultimately form the composite signal.
The CleanComp includes fixes for all of these to form the perfect signal.
Luma Rise Fall Response Time
The pull-up resistors on the LUMA pins are too weak to pull-up the signals fast enough. This results in very slow response times on pull-up and down of the LUMA pins, which ultimately results in blurry pixels, color fringing and color bleeding on the edges.
This is due to the LUMA values changing slowly giving blurred edges, and then the color data coming in in the middle of the blurred edge, resulting in fringing.
Notice the top image is fixed and removes the fringing in the middle black and white line, whereas the unfixed signal below has a brown color fridge and blurred edges.
The red line shows the stock Atari 2600 Luma pin with its 3.3k resistors.
The blue line shows the same pin with an additional parallel 1k resistor to bring the pull up to around 767R.
Notice the 0V is not achieved with a stronger pull-up, and it floats around 0.7V in this case, which works fine for the circuitry used for generating the final composite signal. Just take it into account with your specific circuit.
Luma propagation delay
The LUMA pins coming out of the TIA go through logic gates or buffers/driver circuits, that add about 10 nanosecond delays between each pin being driven. The rising vs falling edges also have different timings as shown here.
The luma pins form a 3-bit value of the brightness. If LUM0, LUM1 and LUM2 are all high that is 111 which is full brightness.
If LUM0 = 1, LUM1 = 1, LUM2 = 0 gives 011, as bit 2 (LUM2) is the most significant bit.
On rising edges, the LUM1 is triggered first, then 15ns later LUM2, and 15ns after that LUM0 is triggered.
On falling edges, the LUM1 is triggered first, then 28ns later LUM0, and 6ns after that LUM2 is triggered.
As seen, this results in the brightness levels not being set at the same point in time, and on fast changing color changes like the man in Pitfall or solid bar tests, one luma value is lagging behind the other and offset then to the color information.
This is inherent in the TIA and so this visual issue will be present in all consoles unless fixed.
This visual issue is exacerbated by the rise/fall time issue as well, and both contribute to the overall visual issue.
The propagation delay mainly causes a slight blue/yellow fringing on pure black and white (such as color bar) changes, as between changes in brightness levels there is a gap of signals overlapping and pulling the signal too low for around 10-50 nanoseconds.
Once the signals are properly delayed falling in timing correctly, you will get the Pitfall man correctly aligned and sharper transitions in color.
High Frequency Noise Checkerboard
Once the Chroma and Luma signals are cleaned up you begin to see other artifacts. Possibly the RIOT, the MPU, TIA or other passives such as harmonics of the clocks or reflections.
Either way, it results in somewhat periodic set of ringing pulses around 300MHz that repeat every 3.22us on average.
This causes what is best described as a checkerboard where a vertical dot appears every other line often between color/brightness boundaries.
If you look at the signal under an oscilloscope you will see the noise appear periodically, when they land between a transition between luma signals every other line they manifest as dots.
The noise can be filtered out using the right passive or active low pass filter before going out to the monitor.
Sync Tip Under/Overshoot
Similar to the Luma signals, the Sync signal has a too weak pull-up resistor installed of 3.3k.
As the Sync rises slowly, it blends in with the Chroma color burst signal, and the start of the chroma causes a sync tip undervoltage pulse.
This in turn causes an offset in black level between each line (as the chroma signal slightly shifts left and right every other line, so every odd line has a lower sync tip than the even line.
By correcting the Sync pull-up with a stronger 1k resistor in parallel to the 3.3k, so the effective resistance is 767R, you will get a much faster Sync pull-up, which makes the Sync signal high before the color burst comes in and pulls it low.
As you can see, the rise time is improved from 1.6us to 0.57us with the resistor. Further improvements and edges can be restored using buffers and op-amps.
And zoomed out there is no odd-line sync tip undershoot.
IMPORTANT: If you are amplifying the signal, remember to offset the Sync level off 0V otherwise the op-amp will re-add a sync tip undershoot due to a 0V signal. Offset it by 100mV to solve the issue.