I haven’t done this in a long time, but the difference can be seen if you have alternating vertical blue bars with constant Y. If you lowpass before modulating, the red gets evened out more nicely. If you bandpass after modulating, there’s a rippling effect that becomes a little more noticeable. I forget how important this difference is, so it’s worth testing out first to see if it’s worth it.
CRT manufacturers had some trouble with this, too. By the 90s, it became common for CRTs to have an adjustable sharpness setting to control this. I need to look at schematics, but as I said in my first post, I’m only assuming that the most common way they did it was by doing an inductor/capacitor notch filter first, followed by a controllable sharpening filter inside of the decoder chip.
My shader includes a sharpness setting too, but it doesn’t work like that: I instead manually remade the notch filter 29 different times with varying widths and hardcoded all of them. In my desmos graph, you can adjust the variable called “i4” to switch between each notch filter.
Edit: I forgot to address why my filter isn’t as deep as yours. I could have gone deeper, but I chose to stop at 20db on purpose. The number 20db came from the specification for the I subcarrier, which is filtered to be under 20 db at 3.6 MHz. This number of 20 db looked very good in experimentation too, as this seemed to be right at the point where the carrier visually disappeared.
To make the decoder notch more hardware-accurate, I suggest looking at the datasheet for the Sony CXA2025AS, found in the Sony KV-27S22 from 1997. The chip itself contains both a notch filter and a sharpening filter, and the datasheet has line graphs for the frequency responses of both. Consider matching up against this.
Both I and Chthon (the author of the LUT generator gamutthingy, which I linked before) have made our own efforts to figure out what’s happening with retro game colors.
Because of the problem with gamut compression, my goal has been to reverse-engineer one (or preferrably several) CRT’s color correction with respect to its own primaries so that I can re-implement that same kind of correction directly into sRGB primaries. I believe this is 100% doable, in a way that will nicely emulate what a good number of real CRTs did, while still mapping perfectly into sRGB.
The method that manufacturers generally agreed on was to mess with the B-Y/R-Y (and G-Y) demodulation. The result is a 3x3 matrix matrix operation on R’G’B’ that doesn’t account for gamma. Very simple and fast for a shader.
The most difficult problem has been getting a “full set”, to be able to fully replicate a specific known CRT’s colors: The CRT’s phosphors, EOTF (a.k.a. gamma, may as well assume 2.2 for this), whitepoint, nonstandard demodulation settings, and default tint and color settings. Because of the lack of data on the internet, we only have a handful of these.
Other than that, we have separate known decoder chips (without known default settings), known phosphors, and known whitepoints, without knowing what goes with what.
For something consistent, I have one strong answer to this. I’ve found two CRTs, manufactured over a decade apart from each other by different brands with different phosphors, that I believe both share the same exact kind of NTSC color correction. I just haven’t yet fully figured out how they made it for their own specific phosphors.
See this document from 1966: https://ieeexplore.ieee.org/document/4179914 . The idea is this: You want the CRT’s white point to be at x=0.281, y=0.311 (a.k.a. 9300K+27MPCD), but you want the colors near red and green to look normal, without accounting for chromatic adaptation, and without caring much about the rest of the colors. The paper says that you can pick two points that you want exactly correct, and build your 3x3 matrix around that. The resulting color errors look like this:
In february this year, I got ahold of a Toshiba FST Blackstripe, model CF2005, manufactured in 1985. I used an X-Rite i1Display 2 colorimeter to get the primaries, and I looked up the datasheet for the TA7644BP to get the demodulation offsets and gains. (In the forum post, I used manually sampled offsets/gains, but the datasheet’s values give better results.) Since the TV’s whitepoint was not intact (due to capacitor aging), I had to guess and check the whitepoint. With a whitepoint of x=0.281, y=0.311 (the exact same as that 1966 paper), I got a graph that looked a lot like what was in that 1966 paper:
About a year ago, Chthon made some efforts to find a “full set” for a Sony TV. There were a small few sources that had sampled Sony CRT primaries that were slightly off from each other, but one in particular claimed to have official values provided by Sony. For demodulation axes/gains, there are several different chips. Assuming that CRTs having the same tube or chip had the same phosphors, it’s possible to apply these same “official” Sony phosphors to many different TVs models, tubes, and chips. You can see the results of that here https://github.com/ChthonVII/gamutthingy/blob/master/src/constants.h
On CRT Database, there’s the Sony KV-27S22 https://crtdatabase.com/crts/sony/sony-kv-27s22 , manufactured in 1997, which has the Sony CXA2025AS. Thanks to Chthon, there’s a decent chance this has those same official Sony phosphors.
As with the Toshiba Blackstripe, the Sony KV-27S22 only has known phosphors and demodulation axis/gains, but not a known whitepoint. Sure enough, if I guess a whitepoint of 9300K+27MPCD with no chromatic adaptation, I get that same thing again:
When I messed with this, I tried several other whitepoints, different chromatic adaptation matrices, and SMPTE C primaries instead of NTSC primaries. Nothing else made sense. This has to be the answer for these TVs. It’s good evidence that this kind of color correction was common during the 80s and 90s, even from brands that were supposed to be good.
Here’s an unfinished, updated version of that NTSC shader that I’d posted in June: https://www.mediafire.com/file/pg7vevzuq4iia5i/p68k-fast-multipass-2025-09-22.zip/file Part of this contains an attempt at re-implementing the 1985 Blackstripe based on the points that they picked, but when I graphed it later, it looked too different from the original (and slightly worse, too). It’s decent for now if you want to include it in your shader, but it’s not quite finished, as I have to figure out how exactly they picked their perfect points and selectively darkened them.
There’s also a messy attempt at adaptive comb filtering in there, if you are interested. If you set the chroma demodulation to use baseband filtering, and you set the adaptive comb filter type to “4”, the result looks pretty good for PS1 games.
That said, this is definitely not what every single CRT brand did. I also happen to own a working RCA ColorTrak Remote E13169GM-F02 from 1989, which also does not take chromatic adaptation into account, but has a whitepoint closer to x=0.30, y=0.31. My Panasonic CT-36D30B from 2000 has a switchable whitepoint between roughly 7000K, 9500K, and 14000K, and it looks like it’s meant to do a correction based on D65, no matter which whitepoint you pick. I have not gotten service manuals or chip datasheets for either of these two CRTs yet, so I only have rough approximations for their demodulation offsets/gains. As for why these CRTs are different, it might be because of the ColorTrak Remote being a 13-inch portable TV that’s the size of a computer monitor (giving a different viewing environment), and because of the Panasonic one having a YPbPr component input. The point is, not all CRTs did this bizzare 9300K correction, but it must have been a thing for a long time.
Just like that, I’ve covered every single “full set” that I have looked at. That’s four total.
As for when this 9300K correction started disappearing, I have a decent guess. I once had a Toshiba CE20D10 from 1995, which had a TA8867AN chip. I don’t have phosphors for that CRT, but based on the TA8867AN’s demodulation axes/gains, it must have been a similar idea, using a higher color temperature than standard and hacking the red/green area back into place. There also exists a very similar chip called the TA8867BN (notice that it’s a one letter difference), whose behavior looks more like the D65 correction in my Panasonic CRT from 2000. I would assume then that 1995 was around the time that this 9300K correction was just starting to disappear. It may have to do with HDTV beginning around that time, in 1998, along with the adoption of YPbPr Component.
There’s also one aspect of that Sony KV-27S22 that isn’t understood: Sony TVs had a feature called “Dynamic Color” which could be toggled on or off, and we don’t know what this feature is doing. However, I personally am placing my bet on Sony’s Dynamic Color just being a switch for another whitepoint with another nonstandard set of nonstandard demodulation offsets/gains; in other words, my guess is that it’s just the same thing as all the other brands are doing, with no special circuit at all. The reason why is that the datasheet for the Sony CXA1465AS chip describes that the Dynamic Color circuit detects whites and flesh tones, and adjusts white to be bluer without affecting the flesh tones, so in other words, it’s doing the exact thing that just the normal demodulation offsets/gains are already doing. The only way to know for sure what happens when you toggle Dynamic Color on or off is to buy the chip on eBay and set it up on a breadboard for testing.
Brands other than Sony just stuck to nonstandard B-Y/R-Y demodulation, as far as I’m aware. Even Sony PVMs did this.




, because I noticed that to merge the dither I need a value of about {Cutoff = “1.700000”} but this value is too strong in the case of 3-phase or 480!


