[James Sharman] has built an impressive 8-bit homebrew computer. Based on TTL logic chips, it has a pipelined design which makes it capable of Commodore-level computing, but [James] hasn’t quite finished everything yet. While it is currently built on its own custom PCB, it has a limiting LCD display which isn’t up to the standards of the rest of the build. To resolve this issue, he decided to implement VGA from scratch.
This isn’t a bit-bang VGA implementation, either. He plans for full resolution (640×480) which will push the limits of his hardware. He also sets goals of a 24-bit DAC which will allow for millions of colors, the ability to use sprites, and hardware scrolling. Since he’s doing all of this from scratch, the plan is to keep it as simple as possible and make gradual improvements to the build as he goes. To that end, the first iteration uses a single latching chip with some other passive components. After adding some code to the CPU to support the new video style, [James] is able to display an image on his monitor.
While the image of the parrot he’s displaying isn’t exactly perfect yet, it’s a great start for his build and he does plan to make improvements to it in future videos. We’d say he’s well on his way to reproducing a full 8-bit retrocomputer. Although VGA is long outdated for modern computers, the standard is straightforward to implement and limited versions can even be done with very small microcontrollers.
Thanks to [BaldPower] for the tip!
Excellent project ! Reminiscent of probably how early computer started out…. in a basement or garage. (I love all the blinken lights…. er I mean status lights).
I’ve watched these videos from the beginning. They’re amazing and James does a fantastic job explaining his thinking as he learns the concepts himself. He took Ben Eaters project and turned it to 11.
I can’t recommend these videos enough. Go watch them.
I think hardware YUV to RGB for JPEG/MPEG would be less complicated and more usefull than Sprites.
Unless you use dedicated videoram.
640 * 480=307200 pixels times 24 bits.
That’s 7372800 bits. Even using the blanking time efficiently, that’s still a lot of bits to get out in not much time, if he’s going to get to his, 60hz refresh rate. A whopping, 442368000 bits per second.
At least it’s sort of a round number in binary.
The original VGA was only 16 colors at 640×480, 60Hz, and needed to drop down to 320×200, 70Hz to display 256 distinct colors.
Although, the color palettes were configurable.
It’s a lot more relaxed if you just want some framebuffer graphics. Arrange the memory in planes, one for each color bit and run the output of each plane through shift registers. I built such a thing in the 1980s for GSX, 625/50i, 16 colors. Buffer size 512×1024, 512×512 visible, that’s about 100ns per pixel and an 8bit-SR stretches that to 800ns per read cycle – even with not really fast DRAMs there was plenty of time left to interleave video output and CPU access. Raster timing was provided by an MC6845.
442368000 (dec) is 1A5E0000 (exa) and 00011010010111100000000000000000 (bin). To me, is not round number at all.
442368000 / 1000
442368 /8
55296 /8
6912 /8
864 /8
108 /4
27 [ (8*3)+4=28 ]
So with a bit for parity, it’s pretty even for a clock division.
Its not that bad, YUV420 (YV12/NV12) is 6 bytes per 4 pixels, ~460KB