Wow, finally a free afternoon to hack in my basement lab!
It's been far too long.
I have had much time to consider design ideas as I get ready to breadboard the final version of Vulcan -74, and today I had the chance to successfully test one of these ideas... HD Video with a 4094 color display! And when I say HD, I mean 720x400 or 640x480 resolution.
Sure, 640x480 is nothing compared to today's display standards, but Vulcan has to do it only with 7400 logic gates!
I really wasn't happy with only 400x300, and 256 colors (8 bit color) seemed too restrictive for rich graphics.
The latest VGA Generator pushes the breadboard and the 74HC logic right to the datasheet ratings, but it worked perfectly!
At 25 MHz or 28 MHz, every signal has to make it from point A to B in under 40 nanoseconds, and not 1 nanosecond more.
By ditching all of the 74HC688 comparators and putting the control signals in a "lookup SRAM", I gained a lot of speed.
I should have done this from the start, and it was an old game system I did in 2007 that reminded me of how well this really works.
it does require the CPU to "initialize" the "Sync Memory" first, but that is just a few lines of 6502 code to deal with.
This design also allows multiple video modes to be programmed by the user, so modes like 512x480 or 400x300 are still possible.
Here are the signals that were originally generated by comparators that now live in the Sync Memory...
Code:
BIT 0 : Video Blanking
BIT 1 : Horizontal Sync
BIT 2 : Vertical Sync
BIT 3 : X Counter Reset
BIT 4 : Y Counter Reset
BIT 5 : Y Counter Clock
The Video Memory is 16 bits wide, but only uses 12 of those bits for color as RRRR-GGGG-BBBB.
The Sprite Memory will use the extra few bits to control its own counter wrapping and clocking.
This change was so radical that I decided to breadboard it on my tiny board as a stand alone system.
I am using my trusty 6502 Simulator (AVR 1284) to send the image to the memory through an FTDI USB to Serial chip.
The 720x400 image is way too large for any AVR memory now... 576,000 Bytes per image!
here is the test circuit all hacked up and ready to go...
Everything is 74HC logic and Static RAM.This design is so much simpler than the latest comparator based version. Just a few counters and SRAMs.
As usual, X and Y are generated by chained 74HC590 counters, set to wrap at intervals determined by the bits from the Sync Memory.
The data is then latched out through various register levels (74HC574s) to keep all the bits in sync and on time.
This is also only a single buffer version being tested. The final version will have double the Video Memory, and an extra Sync Memory.
Does it work?
Well, my monitor thinks so!...
An old friend being immortalized with retro logic!The image is not perfect yet because the DAC is not perfect, and my converter program simply divides by 16 to go from 8 to 4 bits.
I know there is a better way to convert 24 bit RGB bitmaps to 12 bit, but I have to learn how. Dividing by 16 is just a hack for now.
Also note the frame frequency of 71Hz instead of 70Hz. The VGA standard wants a 28.322Mhz clock, but I had a 28.636Mhz clock available.
I also plan to go to 640x480 instead of 720x400, as this is a more favorable aspect ratio for most monitors, and for game graphics.
But hey... I had to see if I could crank out 720 HD Video using nothing but 1980's logic chips!
So far, this is the best image that Vulcan-74 has achieved, and I have only done slightly better on a Spartan-6 FPGA!
The 4096 color, high resolution display offers a very rich experience...
Not bad for 12 resistors and some logic gates!Imagine this image being scrolled at 60 frames per second form the 2048x2048 Sprite memory!
640 x 480 will actually look even better due to the increased vertical resolution.
I intend to make a dual buffer version next, and add this to the large breadboard.
Not sure when my next free day is coming, but I will chime in when I have something else to show.
Vulcan-74 is almost out of the prototype stage now, and will soon get more work on the Sound System.
Cheers!
Radical Brad