The latest code, including the NTSC simulation, is here. This is still a work in progress. The main issue is that interlacing is still not supported properly in combination with the NTSC simulation. There are several other smaller things I’d like to work out as well.
There are several systems available:
-
0 Standard NTSC This is a decent fallback and should work for later consoles like the PS2 and Gamecube.
-
1 NES This is not to be used with raw NTSC output from NES emulators, but does a decent job with the default RGB output. At some point I’d like to make a version that deals with the raw composite output.
- 2 Master System
-
3 PCEngine (TurboGrafx-16) Note that this isn’t actually working yet. I have to decide what to do about not being able to get the number of lines from the core.
- 4 Mega Drive (Genesis)
- 5 SNES
- 6 Saturn
-
7 Playstation There was some guesswork involved here because the documentation is a little sparse. I think it is pretty accurate, though.
- 8 N64
The N64 and Playstation presets should work with upscaled content. Everything else requires the core to output at the original resolution (borders, like in Genesis Plus GX, are fine). The resolution is used for switching modes. So, for example, switching between 256 pixels wide and 512 pixels wide on the SNES is accounted for. Same with 256 pixels and 320 pixels on the MD/Genesis.
The Saturn, Playstation, and N64 presets are all pretty close to standard NTSC. It might make sense to combine them all.
There is a parameter to choose a notch filter and a non-adaptive, 3-line comb filter for NTSC decoding. The notch filter will be blurrier and have more rainbow chroma artifacts, which the comb filter will be sharper and have fewer chroma artifacts but have dot crawl along vertical chroma transitions.
Some things I plan to work on:
- I’d like to add some older systems (Atari and ColecoVision) as well as some 8-bit computers.
- I’d like to set the filters to mimic the filters on the actual hardware (to simulate the MD/Genesis’ terrible composite, for example). Currently the same filters are used with every system.
- There’s some cleanup and documentation to be done in the codebase.
- I’d like to add an adaptive comb filter. I’ve been playing with this. There are a lot of different ways to make the comb filter adaptive.
Not related to NTSC, there is a new parameter to turn down the mask mitigation so that you can have the mask at full strength if you want (you just lose brightness).
Here are some screenshots, one with the comb filter and one with the notch filter. You can see that the comb filter is too sharp for the Genesis’ poor composite output. The luma trap filter needs to be simulated (moving the luma bandwidth lower is a decent approximation). The hanging dots that are characteristic of non-adaptive comb filters are also clearly visible. This is much worse on Genesis than anything else. With the notch filter, the rainbow artifacts are a little worse than they would be if the luma trap filter was fully simulated.
EDIT: Oops, I switched up the names of these images.
Most of the other systems look better than the MD/Genesis, but you really have to see it in motion rather than as a static screenshot.