Here is a current sitrep, showing where the board is at, and how real estate is currently divided.
The XMega-384 is running low on IO pins!Since all of the IO from the various subsystems are not multiplexed at this time, the AVR being used as a "6502 stand-in" has to deal with 42 separate IO lines, and this is without the 32 more that the sound system will require! The IO will later be mapped to a 256 byte address block for the 6502, but for now I need a microprocessor with some serious IO ability, which is why I am using the XMega-384. Once the video section is working the way I want, multiplexing will be added and then the 6502. The sound system will be developed under 6502 control once one channel is working. All 4 channels are exact copies of one another, you know... SID style!
To deal with the Vulcan Logic being at 5 volts, I just over-volted the 3.3 volt XMega!
The PlayField Generator layout on the breadboard.As things progress, I often move chips around to add new features that were not in the original plan. The PlayField Generator was actually not in the original plan, but will give Vulcan-74 some serious ability to make huge scrolling games without having to resort to tile mapping. The PlayField was going to be a 1024x1024 bitmap that can be scrolled to any position, but I decided to add a little trickery to make it size selectable between 2048x512, 1024x1024, and 512x2048. The Mode Select hardware is a 2-4 decoder that turns on one of the three 74HC245s, driving different pairs of high address bits to the counters.
X and Y Source counters are presetable 74HC193 counters, setup as 12 bits each. Using the Mode Select, each counter set can output 9,10, or 11 bits to the PlayField Memory, which is 1024k, addressed as a pair of bits between 0 and 11 btis in width.
X and Y Destination counters are 74HC590 counters that drive the Source Bitmap date directly to the 400x300 Back Buffer Memory at 20MHz. As these counters wrap at their borders, they advance or reload the Source Counters to their set values, which is why the massive bitmap can be blasted to the screen at any position. So it's kind of like looking at a huge poster through the end of a cardboard tube, you can only see part of the image depending on where you position the viewport.
The PlayField operation also clears the screen for the Sprite Generator, to redraw everything at 60 frames per second.
For a single color blank screen, it's just a matter of writing that color to 400x300 worth of the PlayField Memory.
Vulcan-74 Country and its 3 Provinces.Vulcan-74 has grown into a very large Nation of silicon very quickly. It's almost funny when I originally planned to have both the video and sound systems all on the same breadboard! This entire board will be filled by the time I add the IO system, and the Sound System will require a board of about 2/3 the size of this one! It's going to be fun looking for PCB manufacture to make the estimated 18x12 sized board! I could make smaller boards and stack them, but one of my goals is to show off the entire board through a glass top cabinet, so a flat single PCB layout is the only layout I will allow. Oh well, I am not afraid to hand wire the entire system point-2-point if I need to.
As per the above photo, the board is divided into three subsystems...
[Red Sector = VGA Generator]This is the VGA Video Generator. This system tuns independently of the CPU, and draws a VGA frame following the 800x600@60Hz VESA standard exactly. The resulting image is 400x300 with 256 colors, split into a RRR-GGG-BB color space of RED(3 bits), GREEN(3 bits), and BLUE(2 bits). The Video Generator has its own dual banks of 10ns 120K memory, which are auto swapped on the next Vertical Sync by toggling the "Flip" IO line. The CPU can flip screens, as well as reading and writing directly to the back buffer, one pixel at a time. The video system contains the single 20MHz clock oscillator the drives the entire board.
[Yellow Sector = Sprite Generator]The Sprite Generator contains its own 1024k 10ns SRAM, and can draw blocks of memory (Sprites) to the Back Buffer without any CPU intervention. The CPU simply tells the Sprite Generator the X and Y dimensions of the Sprite in the memory (Source), and the X and Y location on the Back Buffer (Destination). An "Alpha" color is also set, which is an ignored pixel to allow transparency. With the locations set, the Sprite Execution is only single IO line toggle, and the CPU is then free to do whatever it wants as the Sprite is drawn at a speed of 5MHz to the back buffer. Sprites can be of any number and size. Currently, the Sprite Generator can manage about 100 Sprites of 32x32 before the frame rate drops from 60 to 30. Even at 15 FPS, games would still be fine, so there is no lack of power.
[Blue Sector = Playfield Generator]The purpose of the Playfield Generator is to overlay a full 400x300 screen onto the Back Buffer at high speed.
The Playfield, can be scrolled in any direction, any number of pixels, and can be set to the following sizes...
Mode 0: 1024x1024 - Square or static Playfield
Mode 1: 2048x512 - Good for horizontal scrolling games.
Mode 2 : 512x2048 - Good for vertical scrolling games.
Here is a HUGE photo of the board as of today...
http://lucidscience.com/temp/vt85l.jpgMy next block of free time (scarce) will be used to wire up (nicely) the PlayField Generator for a full test.
The next video will show the true power of Vulcan-74, and what can be done with two fist fulls of logic chips!
... ok, maybe three fist fulls, but still comparable in cost to doing the same with a Spartan-6 FPGA.
Cheers!
Radical Brad