mikejmoffitt
Mickey's Coach
- Joined
- Feb 6, 2014
- Posts
- 578
We're at the end of the development road here, so its time to collect the info from the megathread so the same questions aren't answered ten times and people can submit interest for the final product.
If you are interested in a kit, please leave a post and/or send me an email at mikejmoffitt {at} gmail {dot} com.
What is NeoVGA?
NeoVGA is a mod accessory for an MVS, AES, CD*, and Capcom CPS2 system that provides high quality, accurate additional video outputs without lag. You can read about its development and theory here.
What is the price?
The price for a kit is $150. For volume options, contact me personally, especially if you are interested in offering it as a CMVS option.
You jerk, why is it expensive? It should be $50!
I was originally going to be manufacturing these by hand to save costs. However, that only works if I don't consider the value of my time investment. After building about 8 of these by hand I'm tired of it, so they're being manufactured in a factory in small runs by MacroFab. The first board from them came in and is excellent, so I feel fully confident going with them. Any profit from the price (and it's not much) is for the amount of time and resources I've put into this relatively niche project, and also buys you my attention should you have trouble and wish to send me an e-mail for help.
What video outputs do I get from NeoVGA?
NeoVGA will output all of these options:
The 480p modes are great for a modern LED-LCD, LCD, Plasma, or Projection setup. The 240p modes are great for driving a CRT; many WEGA series Trinitron TVs take 240p component very well.
Sync-on-green may be enabled for VGA mode as well for those who require it.
What is the installation like?
The installation is not hard, just tedious. A number of wires must be soldered to the Neo-Geo board - 19 bits for pixel data, 2 for control signals, one clock, power, and ground. 6 wires must go to the VGA port as well for output. Optionally, switches may be installed for options (or hard-wired).
As I get my hands on new Neo-Geo systems, I can create wiring diagrams. A general wiring guide is available for those who are using a system I have not yet been able to try. All of the Neo-Geo systems have the same points on them, but they are arranged differently in some. I would say this install requires a medium level of familiarity with electronics.
The clock wire must be short, and is ideally shielded. I use old wi-fi antennas to shield the clock. Because the clock goes through the 5V-tolerant buffers (to protect the FPGA), it is much more sensitive than usual. If you are having intermittent issues, especially on brighter flashing scenes, then it is likely that the clock line is too long or needs to be shielded.
The clock is the only tricky part. Here's a picture of how the coaxial cable can be grounded to the NeoVGA PCB's outer grounding ring for both grounding and stability:
I will be including a ~3-4" run of shielded wire for the clock. Because this wire is relatively short keep board positioning in mind.
Where is the wiring info?
A quick reference guide describing the board's pins: http://mikejmoffitt.com/neovga/docs/QuickReference.pdf
In addition, here are wiring diagrams for various PCBs: http://mikejmoffitt/com/neovga/diagrams
Will you install one for me?
I can't promise that kind of time commitment, but I will probably sell some MVS boards with the kit installed and ready to go. I'm sure many community members who are accustomed to working on CMVS and AES systems will be more than capable of offering assistance.
Why can't I just use the connections on the JAMMA edge?
NeoVGA pulls its video data digitally from the system before it ever goes analogue. This allows it to be relatively simple compared to a system that must use an ADC, possibly introduce a filter to correct errors, perform clock recovery, and have a buffer to render to. This kit is one that must be installed on the system itself, rather than as an external accessory.
How about scanlines?
NeoVGA has built-in scanline generation for 480p modes. Scanlines are synchronized to the VGA output and are always lined up correctly as a result (no "free-running" uglies). Scanlines may be darkened between 50% and 100%. On a monitor with a good scaler, the 100% scanlines look much like a BVM monitor.
Can it support other systems?
Theoretically any system with an exposed parallel pixel bus and at least double pixel clock can be supported. I have written firmware for it to support Capcom CPS2 (and probably CPS1) boards. Williams 1982 hardware will probably be supported at some point too (Joust, Robotron, Defender, Bubbles, Sinistar, etc). Most '80s and '90s arcade games can be supported, but it's a matter of me getting my hands on hardware and putting in the development time.
Many have asked about PGM boards. I'd have to look at the video DAC stage to know if the data can be pulled, so that's a maybe. Saturn/STV looks like a no from pictures of the PCB, but I could be wrong.
Is this better than transcoding my existing RGB into Component?
In general, just about any TV that has 480p component support or VGA support is going to handle those signals a lot better - they will mangle it a lot less. Many modern TVs support component video, but treat 240p as 480i which comes with plenty of downsides.
Does this have any lag?
The NeoVGA board does not introduce a noticeable amount of lag. Precisely, it introduces 1 / 262th of a frame of lag, which is one line's worth. It is up to your VGA or Component display to not introduce more lag. From my testing, most VGA monitors tend to introduce between 0-2 frames of lag for VGA scaling (from 640x480 to native panel res), and TVs with 480p Component support have similar results. One TV with a VGA to HDMI adapter had two frames of lag. In the better cases, this is comparable to a Framemeister, In just about every case it's far better than 240p component into a modern HDTV (no incorrect deinterlacing to worry about, no smearing).
How is compatibility?
So far, many monitors, TVs, and projectors have been tested. Here are some of the ones I've tested that have passed with flying colors:
-Viewsonic 19" TV with VGA
-NEC 2190UXP
-Dell 1800FP
-Dell 2000FP
-Dell 2007FPb
-Dell 2407WFPHC
-Dell 2408WFP
-Some dell 17"
-Viewsonic 19" 1080p monitor
-Sony W600-series HDTV (480p component)
-LG 42" LCD (480p component, and VGA to HDMI)
-Samsung 940Be (480p and 240p RGB/VGA)
-A large 40" Sony Bravia TV (VGA; don't remember the model off hand)
-Many SDTV CRTs (240p component and RGB)
-Many CRT VGA monitors (480p)
Only one LCD TV has had trouble with it, the GPX TDE1580B.
Can I use a VGA to HDMI encoder?
Yes, provided your VGA to HDMI encoder is okay with the Neo-Geo signal and your TV is okay with the resolution. I used this one, and the results were great.
Is it okay if my Neo-Geo is overclocked?
Yes, that's okay - as long as you give the original 12MHz clock to the NeoVGA and not your new higher frequency signal.
I live outside of the US, will you put a low value on the customs form to reduce fees?
I'd love to help, but I'm not willing to lie, especially not on an official government document, sorry, so the answer is no.
Until I have a nice graphical guide ready, I can at least get started here:
------------------------------ BASIC WIRING GUIDE -------------------------------
The NeoVGA board requires connections to the Neo-Geo pixel bus. This data comes from the DAC section of the original Neo-Geo system. On every MVS and AES system (and probably CD systems) there is a section with many resistors, two 74HC273 D latches, and a 74LS05 or 74LS06. We also need the composite Sync signal, in digital form, before it has its voltage divided for the JAMMA edge, and the 12MHz clock, which goes to the CPU and a few other things. We are using this because it is 2x the 6MHz pixel clock the DAC uses.
For each Neo-Geo system, the wiring point locations are a little different. All are principally similar, and some even match. For ones that I've already reverse-engineered, I can provide wiring diagrams. For ones I haven't yet wired up, here is a general guide on identifying connections. Once it has been figured out, it would be best to collect this information so others don't have to go through the same bother.
Finding The Pxel Data:
The 74HC273 latches feature the 15 RGB bits (5 per channel). Each chip has 8 D latches, with an input and an output. The outputs of both '273s go to the resistor array, which forms the original DAC. By identifying which resistors feed which channel (RGB), and tracing back certain resistor values to the related '273 output, we can determine which pin corresponds to which bit. After identifying a '273 output, we want to take the data from the corresponding D latch input. The input is adjacent to the output; we want the D input for the related Q output. Here is an image of the 74HC273's pinout:
The 15 bits for RGB will be on the 74HC273s. These get wired to the RGB inputs on the NeoVGA board, labeled 0 - 4. Bits 5-8 may be ignored, as they are for future use.
The /CLR signal will be on pin 1 of either 74HC273. Choose either.
The /DAK and /SHAD signals will be connected to the 74LS05/74LS06. Similarly, we want the input for the data, not the output. In this case, using the output may cause more serious metastability issues. The DAK and SHAD signals are replicated 3 times, so you can choose any one of the three inputs to pull from for each. The '06 and '05 are pinned like this:
For tracing back from the resistors to the output of the chip in question, here is a list of resistors to map to bit values:
3.9k: Bit 0 (RGB)
2.2k: Bit 1 (RGB)
1k: Bit 2 (RGB)
470: Bit 3 (RGB)
220: Bit 4 (RGB)
8.2k: DAK
150: SHAD
Remember: You want the input related to the output driving the resistors!
You can see this forms a very crude linear DAC, but it's not super accurate - plus, they are usually 5% resistors. NeoVGA will wind up providing you with a more consistent DAC, even in 240p RGB mode.
Finding the control signals:
We need a few other signals: /CSYNC and CLK12. /CSYNC is composite sync, in the digital form before it is reduced in value for the JAMMA edge. From the JAMMA edge you can trace back to find a resistor divider. The signal from before this divider is the one you want. This varies very much between systems, and just like the other signals it is worth recording the tap point for future reference. If you use the signal from the JAMMA edge, it may work, but act funky if an RGB source is connected as well.
For the 12MHz clock signal, this is easiest to find at the CPU's pin 15. The wire for this signal must be very short. The NeoVGA board is extra-sensitive on the clock, because it goes through a level-shifting buffer. As a result, a short wire is recommended. Even better, a shielded wire (like from a Wi-Fi antenna cable) is the best one to use, as its grounding sheath may be connected to the ground ring on the NeoVGA board and to the ground pin near the CPU's pin 15. This is the most important wire. The others may be longer, so place the NeoVGA board as close to the 12MHz clock as possible. It doesn't have to be from the CPU, as long as it's the same 12M signal. This will also vary from system to system, and is noted on wiring diagrams.
Wiring VGA outputs:
This one is up to you. The six pins on the right side of the NeoVGA board are for the VGA output. the R, G, and B pins go to VGA pins 1, 2, and 3. The HSync and VSync signals go to pin 13 and 14 respectively. Finally, VGA pins 5, 6, 7, 8, and 10 should be connected to ground, which is the sixth pin on the NeoVGA board. The RGB wires should be shielded if they are going to be very long.
Wiring Power:
The lower-right of the board features two holes, one for Ground and one for a 5V connection. These should go to the main Ground and Power rails of your Neo-Geo board. Don't use a super-thin wire for either: NeoVGA only consumes around 150mA but it doesn't hurt to have extra thickness on your return path.
Component Video:
When enabled, the VGA output switches to Component Video. The SYNC signal is now mixed into the green channel, and the pins are remapped: VGA Red becomes Pr, VGA Green becomes Y, and VGA Blue becomes Pb. A common VGA-to-Component passive adapter will allow you to just use a VGA port and not have to wire a second port, which makes sense considering both aren't active at the same time anyway.
The HSync and VSync pins will continue to do their original thing in Component mode.
Configuration Jumpers:
At the top of the board are two chevron-shaped pads. The leftmost one will enable Sync-On-Green for VGA and RGB mode. The rightmost tells the NeoVGA board you are using an MV-1C, all-in-one-JAMMA, or other NEO-GRZ based system. This is to slightly modify the timings appropriately. Put a small solder blob to close the pad to enable these settings.
Options:
Scanlines, Component Video mode, and 240p mode are all user options. If the switches aren't installed, NeoVGA defaults to 480p VGA. The four option switches are in the top-left of the board, in a 2x4 pin array. Linking a hole on the right to the left enables the option: You may install a 2x4 header and use jumpers, or solder wires from the holes to switches. The pins on the right are the options, and the pins on the left are ground.
Programming Ports:
The 2x5 pin ports are for programming the NeoVGA board and aren't required (or populated) for the end-user. Don't mistakenly wire to these!
Mounting:
This one is up to you. NeoVGA has four holes for screws, should you wish to use them, but every Neo-Geo is a different shape and none have convenient mounting spots. The NeoVGA board should be close to the CPU clock, so you can't exactly mount it outside the board area. I usually tack it down firmly with some neatly placed hot glue for testing, but it's held quite well and the board is not expected to undergo any substantial mechanical shock. If you are designing a CMVS, you may be able to design a mounting system to utilize the screw holes.
If you are interested in a kit, please leave a post and/or send me an email at mikejmoffitt {at} gmail {dot} com.
What is NeoVGA?
NeoVGA is a mod accessory for an MVS, AES, CD*, and Capcom CPS2 system that provides high quality, accurate additional video outputs without lag. You can read about its development and theory here.
What is the price?
The price for a kit is $150. For volume options, contact me personally, especially if you are interested in offering it as a CMVS option.
You jerk, why is it expensive? It should be $50!
I was originally going to be manufacturing these by hand to save costs. However, that only works if I don't consider the value of my time investment. After building about 8 of these by hand I'm tired of it, so they're being manufactured in a factory in small runs by MacroFab. The first board from them came in and is excellent, so I feel fully confident going with them. Any profit from the price (and it's not much) is for the amount of time and resources I've put into this relatively niche project, and also buys you my attention should you have trouble and wish to send me an e-mail for help.
What video outputs do I get from NeoVGA?
NeoVGA will output all of these options:
- 480p VGA (640x480)
- 480p Component Video (YPbPr 640x480)
- 240p RGB (320x240)
- 240p Component Video (YPbPr 320x240)
The 480p modes are great for a modern LED-LCD, LCD, Plasma, or Projection setup. The 240p modes are great for driving a CRT; many WEGA series Trinitron TVs take 240p component very well.
Sync-on-green may be enabled for VGA mode as well for those who require it.
What is the installation like?
The installation is not hard, just tedious. A number of wires must be soldered to the Neo-Geo board - 19 bits for pixel data, 2 for control signals, one clock, power, and ground. 6 wires must go to the VGA port as well for output. Optionally, switches may be installed for options (or hard-wired).
As I get my hands on new Neo-Geo systems, I can create wiring diagrams. A general wiring guide is available for those who are using a system I have not yet been able to try. All of the Neo-Geo systems have the same points on them, but they are arranged differently in some. I would say this install requires a medium level of familiarity with electronics.
The clock wire must be short, and is ideally shielded. I use old wi-fi antennas to shield the clock. Because the clock goes through the 5V-tolerant buffers (to protect the FPGA), it is much more sensitive than usual. If you are having intermittent issues, especially on brighter flashing scenes, then it is likely that the clock line is too long or needs to be shielded.
The clock is the only tricky part. Here's a picture of how the coaxial cable can be grounded to the NeoVGA PCB's outer grounding ring for both grounding and stability:
I will be including a ~3-4" run of shielded wire for the clock. Because this wire is relatively short keep board positioning in mind.
Where is the wiring info?
A quick reference guide describing the board's pins: http://mikejmoffitt.com/neovga/docs/QuickReference.pdf
In addition, here are wiring diagrams for various PCBs: http://mikejmoffitt/com/neovga/diagrams
Will you install one for me?
I can't promise that kind of time commitment, but I will probably sell some MVS boards with the kit installed and ready to go. I'm sure many community members who are accustomed to working on CMVS and AES systems will be more than capable of offering assistance.
Why can't I just use the connections on the JAMMA edge?
NeoVGA pulls its video data digitally from the system before it ever goes analogue. This allows it to be relatively simple compared to a system that must use an ADC, possibly introduce a filter to correct errors, perform clock recovery, and have a buffer to render to. This kit is one that must be installed on the system itself, rather than as an external accessory.
How about scanlines?
NeoVGA has built-in scanline generation for 480p modes. Scanlines are synchronized to the VGA output and are always lined up correctly as a result (no "free-running" uglies). Scanlines may be darkened between 50% and 100%. On a monitor with a good scaler, the 100% scanlines look much like a BVM monitor.
Can it support other systems?
Theoretically any system with an exposed parallel pixel bus and at least double pixel clock can be supported. I have written firmware for it to support Capcom CPS2 (and probably CPS1) boards. Williams 1982 hardware will probably be supported at some point too (Joust, Robotron, Defender, Bubbles, Sinistar, etc). Most '80s and '90s arcade games can be supported, but it's a matter of me getting my hands on hardware and putting in the development time.
Many have asked about PGM boards. I'd have to look at the video DAC stage to know if the data can be pulled, so that's a maybe. Saturn/STV looks like a no from pictures of the PCB, but I could be wrong.
Is this better than transcoding my existing RGB into Component?
In general, just about any TV that has 480p component support or VGA support is going to handle those signals a lot better - they will mangle it a lot less. Many modern TVs support component video, but treat 240p as 480i which comes with plenty of downsides.
Does this have any lag?
The NeoVGA board does not introduce a noticeable amount of lag. Precisely, it introduces 1 / 262th of a frame of lag, which is one line's worth. It is up to your VGA or Component display to not introduce more lag. From my testing, most VGA monitors tend to introduce between 0-2 frames of lag for VGA scaling (from 640x480 to native panel res), and TVs with 480p Component support have similar results. One TV with a VGA to HDMI adapter had two frames of lag. In the better cases, this is comparable to a Framemeister, In just about every case it's far better than 240p component into a modern HDTV (no incorrect deinterlacing to worry about, no smearing).
How is compatibility?
So far, many monitors, TVs, and projectors have been tested. Here are some of the ones I've tested that have passed with flying colors:
-Viewsonic 19" TV with VGA
-NEC 2190UXP
-Dell 1800FP
-Dell 2000FP
-Dell 2007FPb
-Dell 2407WFPHC
-Dell 2408WFP
-Some dell 17"
-Viewsonic 19" 1080p monitor
-Sony W600-series HDTV (480p component)
-LG 42" LCD (480p component, and VGA to HDMI)
-Samsung 940Be (480p and 240p RGB/VGA)
-A large 40" Sony Bravia TV (VGA; don't remember the model off hand)
-Many SDTV CRTs (240p component and RGB)
-Many CRT VGA monitors (480p)
Only one LCD TV has had trouble with it, the GPX TDE1580B.
Can I use a VGA to HDMI encoder?
Yes, provided your VGA to HDMI encoder is okay with the Neo-Geo signal and your TV is okay with the resolution. I used this one, and the results were great.
Is it okay if my Neo-Geo is overclocked?
Yes, that's okay - as long as you give the original 12MHz clock to the NeoVGA and not your new higher frequency signal.
I live outside of the US, will you put a low value on the customs form to reduce fees?
I'd love to help, but I'm not willing to lie, especially not on an official government document, sorry, so the answer is no.
Until I have a nice graphical guide ready, I can at least get started here:
------------------------------ BASIC WIRING GUIDE -------------------------------
The NeoVGA board requires connections to the Neo-Geo pixel bus. This data comes from the DAC section of the original Neo-Geo system. On every MVS and AES system (and probably CD systems) there is a section with many resistors, two 74HC273 D latches, and a 74LS05 or 74LS06. We also need the composite Sync signal, in digital form, before it has its voltage divided for the JAMMA edge, and the 12MHz clock, which goes to the CPU and a few other things. We are using this because it is 2x the 6MHz pixel clock the DAC uses.
For each Neo-Geo system, the wiring point locations are a little different. All are principally similar, and some even match. For ones that I've already reverse-engineered, I can provide wiring diagrams. For ones I haven't yet wired up, here is a general guide on identifying connections. Once it has been figured out, it would be best to collect this information so others don't have to go through the same bother.
Finding The Pxel Data:
The 74HC273 latches feature the 15 RGB bits (5 per channel). Each chip has 8 D latches, with an input and an output. The outputs of both '273s go to the resistor array, which forms the original DAC. By identifying which resistors feed which channel (RGB), and tracing back certain resistor values to the related '273 output, we can determine which pin corresponds to which bit. After identifying a '273 output, we want to take the data from the corresponding D latch input. The input is adjacent to the output; we want the D input for the related Q output. Here is an image of the 74HC273's pinout:
The 15 bits for RGB will be on the 74HC273s. These get wired to the RGB inputs on the NeoVGA board, labeled 0 - 4. Bits 5-8 may be ignored, as they are for future use.
The /CLR signal will be on pin 1 of either 74HC273. Choose either.
The /DAK and /SHAD signals will be connected to the 74LS05/74LS06. Similarly, we want the input for the data, not the output. In this case, using the output may cause more serious metastability issues. The DAK and SHAD signals are replicated 3 times, so you can choose any one of the three inputs to pull from for each. The '06 and '05 are pinned like this:
For tracing back from the resistors to the output of the chip in question, here is a list of resistors to map to bit values:
3.9k: Bit 0 (RGB)
2.2k: Bit 1 (RGB)
1k: Bit 2 (RGB)
470: Bit 3 (RGB)
220: Bit 4 (RGB)
8.2k: DAK
150: SHAD
Remember: You want the input related to the output driving the resistors!
You can see this forms a very crude linear DAC, but it's not super accurate - plus, they are usually 5% resistors. NeoVGA will wind up providing you with a more consistent DAC, even in 240p RGB mode.
Finding the control signals:
We need a few other signals: /CSYNC and CLK12. /CSYNC is composite sync, in the digital form before it is reduced in value for the JAMMA edge. From the JAMMA edge you can trace back to find a resistor divider. The signal from before this divider is the one you want. This varies very much between systems, and just like the other signals it is worth recording the tap point for future reference. If you use the signal from the JAMMA edge, it may work, but act funky if an RGB source is connected as well.
For the 12MHz clock signal, this is easiest to find at the CPU's pin 15. The wire for this signal must be very short. The NeoVGA board is extra-sensitive on the clock, because it goes through a level-shifting buffer. As a result, a short wire is recommended. Even better, a shielded wire (like from a Wi-Fi antenna cable) is the best one to use, as its grounding sheath may be connected to the ground ring on the NeoVGA board and to the ground pin near the CPU's pin 15. This is the most important wire. The others may be longer, so place the NeoVGA board as close to the 12MHz clock as possible. It doesn't have to be from the CPU, as long as it's the same 12M signal. This will also vary from system to system, and is noted on wiring diagrams.
Wiring VGA outputs:
This one is up to you. The six pins on the right side of the NeoVGA board are for the VGA output. the R, G, and B pins go to VGA pins 1, 2, and 3. The HSync and VSync signals go to pin 13 and 14 respectively. Finally, VGA pins 5, 6, 7, 8, and 10 should be connected to ground, which is the sixth pin on the NeoVGA board. The RGB wires should be shielded if they are going to be very long.
Wiring Power:
The lower-right of the board features two holes, one for Ground and one for a 5V connection. These should go to the main Ground and Power rails of your Neo-Geo board. Don't use a super-thin wire for either: NeoVGA only consumes around 150mA but it doesn't hurt to have extra thickness on your return path.
Component Video:
When enabled, the VGA output switches to Component Video. The SYNC signal is now mixed into the green channel, and the pins are remapped: VGA Red becomes Pr, VGA Green becomes Y, and VGA Blue becomes Pb. A common VGA-to-Component passive adapter will allow you to just use a VGA port and not have to wire a second port, which makes sense considering both aren't active at the same time anyway.
The HSync and VSync pins will continue to do their original thing in Component mode.
Configuration Jumpers:
At the top of the board are two chevron-shaped pads. The leftmost one will enable Sync-On-Green for VGA and RGB mode. The rightmost tells the NeoVGA board you are using an MV-1C, all-in-one-JAMMA, or other NEO-GRZ based system. This is to slightly modify the timings appropriately. Put a small solder blob to close the pad to enable these settings.
Options:
Scanlines, Component Video mode, and 240p mode are all user options. If the switches aren't installed, NeoVGA defaults to 480p VGA. The four option switches are in the top-left of the board, in a 2x4 pin array. Linking a hole on the right to the left enables the option: You may install a 2x4 header and use jumpers, or solder wires from the holes to switches. The pins on the right are the options, and the pins on the left are ground.
Programming Ports:
The 2x5 pin ports are for programming the NeoVGA board and aren't required (or populated) for the end-user. Don't mistakenly wire to these!
Mounting:
This one is up to you. NeoVGA has four holes for screws, should you wish to use them, but every Neo-Geo is a different shape and none have convenient mounting spots. The NeoVGA board should be close to the CPU clock, so you can't exactly mount it outside the board area. I usually tack it down firmly with some neatly placed hot glue for testing, but it's held quite well and the board is not expected to undergo any substantial mechanical shock. If you are designing a CMVS, you may be able to design a mounting system to utilize the screw holes.
Last edited: