After figuring out this NCO business, I modified the timing of the TV driver to make the pixel clock an exact multiple of the color clock. It's actually the same, though it could be doubled for higher resolution, overdriven TV drivers like we did on P1. At this timing, 320 nice, color pixels are possible without going into overscan. Doubling the clocks, while outputting the same "normal" colorburst, should yield 640.
This is equivalent to 8 PLLA, for those who have done P1 TV driver work. (3640/455)
There are 455 "pixels" per line, and I've made rough adjustments to the scanline for the shorter time period. Vertical sync is still goofy, and I'll work on that next.
When you have a moment, give this one a try on your display. There should now be only the colorburst beating against the 80Mhz clock, which on my display has eliminated the shimmer on color boundaries we've been seeing. On the A9, there seems to be more, light "ghosting" of the signal, which can be seen on the bright lines and image border. Of you look closely, there is a slight and slow shimmer on those, which is the 80Mhz beating against the colorburst very slowly. I think this can be ignored, and the real chip shouldn't have that ghosting, or we can make a circuit to minimize it.
' Here is the math:
' (3579545/227.5*455) / 80000000*(2^31) = 168,945,370.4347287912 = a11e6da.6f4a62d4df1223ec9670edd101
' (3579545) / 80000000*(2^31)*2 = 192,175,358.869504 = b745cfe.de97d06bbdbe3c105186db50f4
' (3579545*2)/(3579545/227.5) = 455 pixels / line
f_color = 3_579_545.0 'colorburst frequency
f_scanline = f_color / 227.5 'scanline frequency
f_pixel = f_scanline * 455.0 'pixel frequency for 400 pixels per scanline
f_clock = 80_000_000.0 'clock frequency
f_xfr = f_pixel / f_clock * float($7FFF_FFFF)
f_csc = f_color / f_clock * float($7FFF_FFFF) * 2.0
ixfr = $0b745cfe 'Make pixel clock, same as color clocks, high precision math results
icsc = $0b745cfe 'from above.