I understand that the Arduino is generally not fast or powerful enough to generate a suitable VGA/HDMI signal with higher resolution.

However, I've noticed that there are inexpensive PC graphics cards available that can easily maintain a stable screen on a monitor.

Back in the DOS era, it was relatively straightforward to write a short program that could output text to CGA/EGA/VGA cards using BIOS calls and a few assembly instructions. The BIOS itself surely was not overly complex or large.

So my idea is to take an Arduino, use shift registers like the 74HC595 to create a sufficiently long bus, and connect it to a cheap, obsolete GPU (e.g., an NVIDIA card from a discarded PC) along with a regular monitor. I would then write Arduino code to emulate a BIOS call, such as 10h, which would shift out the "bus status" to the 74HC595s, send the signal to the GPU, and continue this process until the characters are transferred to the GPU.

The GPU can easily generate VGA/HDMI signals and work with any modern monitor. It also has enough memory to support screen resolutions like 80x25, 80x50, or even 132x60 for text-based displays. In fact, it might even be possible to run at full graphical resolutions such as 640x480 or even 2560x1440, with the Arduino slowly sending graphic primitives to display.

While the GPU's performance would be severely degraded, it would still be a better alternative than throwing it away.

My question is whether it is possible or even feasible to connect a GPU to such a slow source. If it is, I would like to know if there are any readily available and understandable documentation or even someone who has already attempted this approach.

(Or should I post it somwere else? Where?)

  • There were gameduinos, vgaduinos and similar but i don't think it was that popular. Currently I don't even have a monitor with VGA. Rapsberry pi with hdmi is much better. But surely you can try some old bus, but they might need all the voltages you'll never see anymore (-5, -12)
    – KIIV
    Jul 12, 2023 at 15:37
  • I think you will have a very hard time implementing a functional PCI(e) bus electrically and timing-wise on an Arduino.
    – StarCat
    Jul 12, 2023 at 15:55
  • This is the kind of project where things are going to be hard to do and the result hardly worth the effort. But even if you completely fail you'll learn a ton in the process. So I say go for it if you have the time.
    – Delta_G
    Jul 12, 2023 at 17:01
  • 3
    You might have more luck with interfacing an old ISA VGA card to an Arduino/AVR, but I would not use the x86 emulation as described in this project and just program the VGA registers directly.
    – StarCat
    Jul 12, 2023 at 19:22
  • 1
    Wow, thank you, I was looking for something like that, but had no success. (And yes, my idea was to set it directly from my code, if possible)
    – gilhad
    Jul 12, 2023 at 19:47

1 Answer 1


This doesn't answer your question about the cheap graphics card, but see https://forum.arduino.cc/t/toorums-quest-ii-atmega328p-based-retro-video-game-with-256-color-graphics/192920 for where Petri Häkkinen did an arcade-style game with an Atmega328 and the AD725 chip for generating the VGA signal.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.