A while ago I worked on my Neo-Geo line doubler project called NeoVGA. The other night I chose to refactor it by rewriting it from scratch. It was my first VHDL code, and was very messy and hard to maintain with magic numbers everywhere.
This new version is more organized, and it runs with much greater stability than the first version.
Probably the most important change is how synchronization works. Before, I used the clock line and the reset line to center the image: I'd just count clocks from the reset time to get it centered. The problem with this is that different Neo-Geo systems have different times for this, and if the connection is lost then the image is no longer centered and it goes everywhere.
Now, I am watching the clock and Vsync lines. Every vsync the image is re-aligned, so you can reconnect the system to NeoVGA while it is on and there will be no problems.
Right now I am only using the 5 bit RGB values. I haven't factored in DAK and SHAD yet, but that is not much of a challenge. Once that is complete I have to fix one tiny visual bug present in no-scanlines mode, and then it's done.
Speaking of scanlines, it now supports three settings: no scanlines, 50%, or full-on scanlines. As usual I tested on both my LCD and CRT PC monitors, which worked great. I will be later testing more large format TVs.
The source is available at https://github.com/Mikejmoffitt/NeoVGA
Back to main index