We love old video games, but we hate the way analog interlaced video looks on our new LCD monitors. [Michael] feels the same way, so he’s created NeoVGA, A Neo Geo Line Doubler in VHDL. Neo Geo, like many classic consoles, didn’t use the full resolution of an analog TV. In NTSC mode, it ran at 320×224 pixels. PAL users got an extra 32 vertical pixels for 320×256 pixels. The system ran with an approximately 15kHz horizontal sync and ~60Hz vertical sync.
This is not exactly a VGA compatible signal, so it would be relegated to composite or S-Video capable displays. The signals looked pretty good on a CRT, but on an LCD, they tend to look crummy. Modern LCDs don’t natively handle interlaced and/or low resolution input signals. The TV’s controller performs the magic of buffering, interpolating, and transforming the input signal to be compatible with the LCD panel. As [Michael] explains, most of these algorithms are optimized for TV video signals with lots of motion. They perform poorly on static high contrast images such as the background of a fighting game. TV controllers also add lag to the signal chain. Not much of a problem when watching movies, but it’s a big problem when you’re trying to pull off that triple hit combo.
Click past the break for more on [Michael’s] creation.
There are commercial solutions out there such as the XRGB-3, though they are expensive and hard to obtain. [Michael’s] solution is a classic one: line doubling. As each line is clocked in from the source, it is output twice. This doubles the horizontal scan rate to 30kHz, a frequency compatible with VGA. Since the video is output in lock step with the input, there is little or no lag created by the line doubling process.
The circuit was originally implemented on a borrowed Altera DE2 board, though [Michael] eventually switched things over to a Xilinx Virtex 2 Pro devboard. He’s still working on a few stability issues, but we’re excited at the progress.
very nice, time to dig out the neogeo
Can it be used on other systems beside NeoGeo? There’d be high demand among people who can’t or don’t want to keep CRT TV with LCD and still plays older systems like Atari 2600
Absolutely. I tried my hand on this very same thing using the schematics from an Asian site for a discrete logic version years ago. Couldn’t find some of the chips called for (namely the dual access RAM) at the time and one of the converters. I substituted what I thought was a best match but couldn’t get it working. It doesn’t help that I don’t own an Oscilloscope and can’t read Japanese so I put it on the back burner.
When I heard of the offerings from Xilinx and Altera I looked into it again but couldn’t do much without the hardware debugging tools.
Although the 2600 emits digital luma, figuring out which phase of chroma might be a biiiit tricky.
By now, I think I’d probably just synthesize the RIOT, 6507, TIA, and line doubler all in one FPGA: unlike other consoles we have the original design documents. Then the only non-HDL bit is interfacing from modern FPGA voltages to 5V ROMs for the TIA.
That does look better.
That’s amazing. I wonder what it would take to add tube artifacts like bleeding and other effects. Older games (like those on the NES) actually used artifacts to do sub-pixel rendering and to expand the palette space a little bit. On an LCD screen, their absence is clearly noticeable, especially when compared to a tube side-by-side.
– Easily the best resource I know of on the topic: http://slack.net/~ant/libs/ntsc.html
Rather easily. Just take the shader code that I implemented in MAME and MESS for an NTSC encoding and decoding and make it operate line-by-line instead of frame-by-frame, then convert to VHDL.
Emulating NTSC encoding just makes everything look ugly. Yes, a few games tried to take advantage of them (with varying effects of quality…) but for the most part you are just making something look awful.
What an appropriate username, you twat.
A CPLD may not have the memory and routing to support what you are doing in this project. The macrocells that make up the CPLD are more geared towards sum of products and product of sums logic, and the routing matrix is not very capable when compared to the FPGA. You can get rather inexpensive older generation FPGA (such as a Spartan II or Cyclone II) in a non-BGA package that should have enough horsepower to support this project. You may even be able to rig a HDMI/DVI output in addition to the VGA output using the extra gates available even in a low-spec FPGA.
Oh my god, is that other game Money Idol Exchanger?!? :D That is my favorite puzzle game for the NEO-GEO! It is one of the few games still sorely missing from my MVS collection… ;_;
The video output looks fantastic, remarkably better than those Chinese ‘arcade RGB to VGA’ boards on eBay. Good job! :D
Any idea how this would work connected to an MVS board? I’ve been thinking about buying original hardware again, and AES cartridge prices are prohibitively expensive. I know they have those 100-in-1 carts now, but I don’t want to contribute to that.
This is running on an MVS board – I can’t afford an AES! It works with any MVS or AES board, as they have the same video timings and digital RGB bus available.
This is pretty nifty and fast, albeit incredibly specific for the MVS since it runs directly off the DAC instead of from the RGBS signals… I guess this is why devices like the XRGB cost so much :)
His projects bother me, however. He only very sparsely documents what he does, if at all – you’ll see stuff wired up with no real explanation as to why.
It’s part of what inspired me to start building my own SuperDMG, to have a version of the project more clearly documented and explained. I ended up doing things a little differently in the process, but that’s how things go.
Murlanl, the documentation isn’t complete because I’m not done with the project. If I write documentation now, I’ll have to keep updating it all the time since this project has changed a lot since I even wrote that page (from an implementation standpoint). Soon I can do a proper write-up.
I like Elm-chan’s scan doubler, myself:
http://elm-chan.org/works/sc/report.html
Hm this is a pretty cool project. I was thinking of using an FPGA to do something similar for low frequency RGB characteristic of Amigas, Apple IIgs, and Arcade displays, but I’m thinking of going with the commercial GBS 8220 http://www.ebay.com/itm/GBS-8220-RGB-CGA-EGA-YUV-to-VGA-ARCADE-VIDEO-CONVERTER-BOARD-Latest-Software-/120967105011?pt=LH_DefaultDomain_0&hash=item1c2a3389f3.
the mentioned GBS8220 do not support lines below 480 pixels…..that’s the difference.
Speaking from a pure consumer standpoint, this project is somewhat unnecessary. Not to knock the creator (I think his work is top-notch), it’s just that there already are many VGA line doublers (heck, I even have one in my Amiga), and most consumer TVs don’t have VGA anymore. A digital signal would be much preferred if it were possible.
Also, why are we only bringing up the Neo-Geo? This should work with any 15KHz RGB signal.
That’s not really the case. This is a digital capture, and as a result there are no fuzzy edges from the pixel clock not lining up, and no lag from a full-frame buffer. This isn’t a regular RGB line doubler, there are a lot of those of varying quality.
I agree, VGA and S-Video is nearly dead. Sorry for that but it is also named in that way on the wiki pages and any forum you may ask such question. The only survived analogue connectors are AV and RGB SCART. I currently work on a RGB mod for most of current consoles. HDMI can’t be made at all, because if you dig deeper into it you will notice that to use HDMI chips or even name the product HDMI compliant you need a “membership contract” with the companies behind this standard. It costs about $15.000/year and so there is no market. If you try to offer without that “contract” you may be dead in the water if lawyers jump in. Yes the HDMI membership is “open” but only for those who have real business interests.
what about DVI or displayport? i thought they don’t require any licensing, and then you’re a $4 adapter away from HDMI.
He said analog.
Derp, misread. Look how dumb I am.
Using more lines to make a edge-sensitive upscaler would have ensured even better results. See different upscaling techniques in MAME for reference.
Dedicated components like CH7010 by Chrontel do the same job in a much more efficient and versatile (and cheap) way http://www.chrontel.com/index.php/products/display-interface/ch7010-tv-encoder-dvi-transmitter.
Commercial converters usually cost a bit as they include a video re-generation pipeline working on CVBS video too (say… Video ADC —> Processing —-> Video DAC).
BTW nice application for FPGA!
Welp this may well be my favorite post on here ever. Neo-Geo and extremely nitty-gritty analog, written by someone who very much knows what he’s doing, and no shortcuts using a full-frame buffer!!