Dual-Port RAM For A Simple VGA Card

Making microcontrollers produce video has long been a staple of hardware hacking, but as the resolution goes up, it becomes a struggle for less capable silicon. To get higher resolution VGA from an Arduino, [Marcin Chwedczuk] has produced perhaps the most bulletproof solution, to create dual-port RAM with the help of a static RAM chip and a set of 74-series bus transceivers, and let a hardware VGA interface take care of the display. Yes, it’s not a microcontroller doing VGA, but standalone VGA for microcontrollers.

Dual-port memory is a special type of memory with two interfaces than can independently be used to access the contents. It’s not cheap when bought in integrated form, so seeing someone making a substitute with off-the-shelf parts is certainly worth a second look. The bus transceivers are in effect bus-width latches, and each one hangs on to the state while the RAM chip services each in turn. The video card part is relatively straightforward, a set of 74 chips which produce the timings and step through the addresses, and a shift register to push out simple black or white pixel data as a rudimentary video stream. We remember these types of circuits being used back in the days of home made video terminals, and here in 2024 they still work fine.

The display this thing produces isn’t the most impressive picture, but it is VGA, and it does work. We can see this circuit being of interest to plenty of other projects having less capable processing power, in fact we’d say the challenge should lie in how low you can go if all you need is the capacity to talk 74-series logic levels.

Interested in 74-series VGA cards? This isn’t the first we’ve seen.

7 thoughts on “Dual-Port RAM For A Simple VGA Card

  1. Um, okay. Personally, I grew up with a different kind of VGA. I must be getting old..
    It was an ISA graphics card with planar video. Installed in a 386 or 486 PC.
    VGA hardware could do mainly graphics mode 12h, 640×480 pixel in 16 colors at 60Hz, 31,5 KHz (VGA resolution).
    Or 80×25 text-mode in 720×400 resolution at 70 Hz, 31,5 KHz.
    Some games did 320×200 pixel in 256, which was known as MCGA/VGA.
    800×600 pixel mode, SVGA was also sometimes being supported, I recall.
    Hm. I suppose this article means video for the 15 pin d-sub port ? That blue “VGA connector”?
    Technically speaking, the video is RGBHV. Some professional CRT monitors had individual BNC connectors for each signal on the back.

    1. I just visited the Github site and I must say that the hardware side was very interesting.
      Quite some work had been put into this project, I couldn’t do that. My admiration for all the dedication here.
      The underlying knowledge here surely can be used for other projects, too.
      That being said, as is a ZX81/Timex 1000 could do slightly prettier graphics via RF, maybe. On other hand, the project visually more advanced than a Cosmac VIP, though. ;)

    2. It feels like you are trying to lecture someone here.
      Yes, technically it’s RGBHV video over D-SUB, but that’s not entirely VGA (the connector, not the graphics standard).
      You could put {R,G,B,H,V} on pins 0-4 and call that RGBHV over D-SUB, but try plugging that into a VGA monitor.

      1. “It feels like you are trying to lecture someone here.”

        I know. And it might be true in parts, too.
        But really, I primarily do associate VGA with oldschool VGA cards.
        Rather than the blue VGA connector or graphics cards with a GPU.

        So it feels weird to me if random RGBHV signals with non-VGA timings are being labeled “VGA”.
        Especially since 800×600 was known as Super VGA, also.

        And anything using AGP or PCIe is no “VGA card” to me, but a random graphics card.

        A true VGA card is an Tseng ET-4000 in an 486 PC, for example. Or an Trident 8900 in a 386..
        An S3 Trio 64 is borderline already. It’s half VGA core, half 2D GUI accelerator.

        Anything newer nolonger has a native VGA core that’s fully functional, but rather something arbritary that implemts some basic VGA compatibility that’s meant to get Windows Setup running in VGA resolution or meant to run Windows in safe mode.

        On such cards, VGA is nolonger the main function, but a forgotten compatibility block.

        Physically, I remember that some higher end multisync monitors had separate BNC connectors for {R,G,B,H,V}.
        These monitors could handle analog VGA signals from a VGA card, but also EGA signals as TTL. Via switch the user could select the desired input.

        Anyway, I suppose that the meaning has changed. It’s a genetational thing, maybe.
        To the kids of today, anything that flows trough hat blue cable is “VGA”.
        The relationship to the VGA CRTC, the 640×480 resolution or the 31,5 KHz sync rate have apparently become secondary now.

    3. I think I could swing something like 200×150 on a real VGA card with carefully programmed mode times (line double mode to 300 active lines). But it’s not what we’d considered VGA graphics. We expect either 16 or more colors or 256 grayscale to be VGA. untweaked 320×200 is MCGA unless you’re talking about also using VGA plane latches for bitblt.

      some examples of the tweaked modes found in the wild.
      https://nerdlypleasures.blogspot.com/2014/09/oddball-ega-and-vga-resolutions-when.html

      The difference between VGA and CGA on an old surplus monochrome LCD I used to mess with is superficial. It’s all derived from CRT timings. The signals might be partially or fully digital. But the concepts are the same. You have sync and blanking and active pixels. A usually fairly fixed horizontal frequency, unless you have one of those fancy multi sync displays. Even LCDs are geared to a particular horizontal frequency, with some complications for DC charge accumulation (aka DC balance).

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.