I am much, much beyond CS polarity problems. I just published the current state of the code at
https://github.com/mastmees/vs23s10
This has line and rectangle drawing, fonts, character drawing and scrolling all working and block_move accelerated to the point where
the block_move works either by luck or workarounds to specific problems that I have identified.
for fast horizontal lines, lets say from X=0,Y=100 to X=200,Y=100 I would like to:
1. set pixel at (0,100) to desired color
2. do a block move of length 199, height 1 from address of (0,100) to address of (1,100), forward direction
What I expect to happen is block move will
1. copy pixel from (0,100) to (1,100)
2. increment source and destination addresses
3. copy the pixel it copied in step 1 from (0,100) to (1,100) one step forward, from (1,100) to (2,100)
4. increment source and destination addresses
...
repeat the above until 199 bytes copied
as the height was set to 1, finish
the result should be solid line of a same color as the initial pixel was set to. However, using the hardware block move, it will not be. I have since learned, that while the block mover can move 1 line (so I can draw filled rectangles by copying the first line), it will not copy the 1-line block correctly if it is less then 4 bytes wide. It also fails fails to move blocks that are 200 bytes wide, and 230 rows high, appearing to lose some bytes but I have not been able to figure out the exact failure pattern yet. Moving 8x10 pixel characters from off-screen memory to display area works completely as expected, so I feel rather confident that I have a good grip on forward direction moves at least.
All that said, I've already gotten to the point where the graphics primitives are very usably fast. My biggest concern at the moment is not drawing performance. It's the image quality. I hoped that external video buffer amplifier would help, but even the Analog Devices ADA4432-1 that has built-in lowpass filter helped only a little. Without VS23S010 luminance channel filter enabled the video output signal has massive overshoots on rising edges of vide signal, causing terrible color fringing. Enabling the filter significantly reduces the overshoots and color fringing, but causes another problem - significant positive polarity spike at pixel data start position, and negative polarity spike at the pixel data stop position. negative polarity spike below black level before the line is not too bad if the background is black anyway, as long as it is not mistaken for line sync. The positive spike at the start of pixel data, however, produces a grey line to appear on left edge of visual area.