Now that I am starting on the real VIC-2000 prototype as per my design goals, I figured it was time to press Reset and begin document everything from the start. All the work I have done with my other 6502 projects as well as the FPGA project posted elsewhere here has been experimental, leading up to this point in time. I now feel I know enough about the 6502, the VIC, and the limits of my breadboard.
As of now, The VIC-2000 Project shall commence.
I have cleaned off both boards, and started placing chips based on my schematics.
Normally I don't bother with schematics, but for this project I will.
So to really start at square-one, here are some details on my V2K breadboard and how the VIC interfaces.
I am using 48 individual breadboards all wired together for this project. So with the bus bars, I have about 50,000 ties points to work with! Yeah, it seems like a lot, but I actually think I may need more room by the time I am complete. Due to the massive size of all boards tied together, I have broken them up as 2 equal panels of 24 boards each. If all goes well, I will have one panel for the Video Section, and the other for the Sound Section.
I buy my breadboards from Twin Industries because they make great quality boards. The China cheapo boards are garbage.
Each board has top and bottom power rails, and an underside sticky tape.
Breadboards to make up one panel.
To make each panel solid and somewhat static proof, I cut some 1/4" aluminum plate and then made backing bars that can be drilled or machined to support various connectors such as VGA, Audio, Joysticks, Power, etc. The backing bars are drilled and tapped to be fastened to the top end of the plates. Did I mention that I work in a machine shop?
Making solid bases to affix the multiple breadboards.
After peeling off the tape protector on the underside of each breadboard, I carefully placed them onto the aluminum plate one at a time, locking them together with the dove-tail locking tabs included on the outer edges of all boards. Here is the first panel ready.
One completed panel of 24 breadboards.
Although I don't go overkill on decoupling capacitors when bread-boarding, I do put them on all power rails. Because a breadboard is really one large array of capacitors created by long metal strips, this is usually fine. For micro-controllers or fast counters, I also add caps at the chip power supply pins as well. The caps I use on power rails are the typical .1uF ceramic type, and cost only pennies per unit.
Capacitors will be installed on all of the breadboard power rails.
After the decoupling capacitors were placed on the power rails, I then connected all power rails together using appropriately colored red and green wires, keeping them as short as possible. In an attempt to minimize a demon known as "ground loop" or "ground bounce", I can power rail connecting wires both horizontal and vertical. This giant board is still a hotbed for ground bounce, but I can fight this enemy because I know it will be hiding in the shadows awaiting my arrival.
Capacitors and power rail connecting wires installed.
I built a second identical panel of 24 breadboards, and then machined out the backing bars to support some of the connectors I may want to use. The Video Board (left) has a VGA connector, DC jack, power switch, and one free hole. The Audio Board (right) now has a stereo audio jack, power jack, and 2 commodore type joystick ports. As you can see, there isn't much room left for the VIC-20 with both boards on the table. I intend to build a special workbench later just for this project.
Lofty goals shall require the mother of all breadboards!
I couldn't resist this photo. Prime real-estate ready to be developed...
Most likely, I will add a third board before this is over.
Here is a close shot of one of the joystick connectors. The hole is milled out to fit the body of the connector, and then machined to allow the business end to stick out the rear of the backing bar. I added the 74HC245 buffer already just because I knew I would eventually need it to send the joystick values to the memory mapped bus. The reason I have external joystick ports is so the VIC can have 2 joysticks, and because I plan on adapting a modern optical mouse to the VIC-20 joystick port to make using the IDE / Assembler more comfortable.
One of the two Commodore type joystick port connectors.
I might have already posted this, but since I am already yammering on, I will just continue. I am adapting the VIC-20 expansion port to my breadboard using the standard edge card that all cartridges use. Since these are hard to find new, I dug around in my vast collection of 1970's computer bits to find this board, which matched the profile of the VIC-20 game cart board shown below the larger card.
Found a matching edge card after an hour of digging.
The donor card needed some reworking to be used in the VIC expansion port since it was too wide, and already had traces. I used a dremel to cut the board to the correct width, and then shaved away all traces right at the entry point into the connecting edge. The tape over the connecting pins allows me to add solder only in the place I want it. This masking process is the same technique used to keep solder off traces when a real PCB heads through the molten solder bath.
The resized board getting some solder on the top inner edges.
I added a bundle of wiring to all of the important VIC-20 expansion port signals. Wires are color coded into various functions such as Data, Address, Block, and Control signals. The wires are about 18 inches long, but previous testing has shown that the VIC has no issue with this. That's one of the nice things about a "slow" 1MHz signal, it is almost impossible to break. On the breadboard, this will not be the case, since most of my logic will be running at 25MHz.
Wiring added to adapt all important signals to the breadboard.
The new Expansion Port breakout system fits perfectly into the VIC-20 port. It's not the prettiest looking hack, but this breadboard project is only stage one of this project. Once working, the breadboard system will be duplicated onto a permanent hand wired board.
Board to VIC... can you hear me now?
I left enough wire so that I could adjust the VIC a little when I am entering code. Since I plan on doing all coding directly on the VIC, it needs to be in a place on the desk that is comfortable to work with. The connection at the breadboard is just a 40 pin DIP socket that the wires are soldered to. I made a pin-out diagram for it, and it lives like any other IC on the board.
To the breadboard, the VIC is just another 40 pin IC.
Having worked up some schematics already, I am now going to turn them into real hardware one bit at a time. I will build only as much as required so that I can test each subsystem before moving ahead. It is way too easy to make progress on the hardware without documenting anything, and then get lost in what was done. This time I am going to plan on paper, make a schematic, then add hardware a bit at a time. I do have to build a second unit some day.
So here is the first part of the schematic to make real, the Video DAC and Synchronizer...
This circuit is responsible for driving the VGA monitor.
The Video DAC and Synchronizer is a very basic circuit that drives all of the signals require to generate a color VGA image. Before reaching the 15 pin VGA connector, all signals are synchronized along with the master 25MHz clock. This is very important because a modern VGA monitor can actually see half a nanosecond of jitter, which will translate into a distorted image on screen.
The Horizontal Synce (HS) and Vertical Sync (VS) signals are just digital signals. Both are active low for a 640 x 480 VGA standard mode. Sync signals are generated by a VIC-20 programmable Sync Memory, which will be explained soon.
The color data is actually a set of 3 analog signals that range in value from 0 volts (black) to .7 volts (full color). How do you go about generating an analog signal from a digital system? Simple... use something called a Resistor DAC. If I apply 5 volts to all 4 of the parallel resistors, the output value will be very close to the requires .7 volts. Part of that equation is the internal 75 ohm pull down termination of the VGA itself. By altering the number of resistors with 5 volts or 0 volts, I can now sent a range of 16 analog values to the color channel for the VGA monitor.
Since each color channel has 4 bits, and since there are 3 individual channels, this gives VIC-2000 the ability to display 4096 (2^12) colors simultaneously on the screen. Back in the Day, the Amiga could kind of do this, but the truth is... my VIC thought "HAM Mode" was a cheap trick, and intends to show the world how 4096 colors should look!
There are a lot of signals to be connected for each of the 74HC164 4 bit counters that do the synchronization, but these will be coming in the next build session. For now, here is the schematic shown above turned into real hardware...
This is a 3 x 4 Resistor DAC and Sync Synchronizer.
Using colored wires for various functions makes breadboard debugging much easier. I also bundle up wires, and bend them all into shape so they don't end up looking like a cat barfed up a ball of tinfoil on my board. Bundling wires works well of you consider cross-talk between different signals that may interfere with each other. For instance, I would not wrap up a 16MHz Sprite Generator Clock along with one of the VGA Color signals, or things would surely fail, or at least look bad.
Ok, so what's the deal with these bling resistors? They are blue and have too many bands!...
High tolerance resistors are best for making DACs.
The extra band means that these resistors are high tolerance (very accurate). These resistors happen to be 1% precision, which means that a color scale of shades will make a smooth transition on the monitor. Normal resistors can be out as far as 5 or 10 percent, so this would be noticeable on the color output. The good news is that these 1% precision resistors are common values, and inexpensive.
I actually compared this $2.00 resistor DAC directly against a true 24 bit VGA DAC IC that cost over $25.00, and the difference was almost undetectable. The only time the real digital DAC did better was when I went into more color bits (7 or 8 per channel). A resistor DAC is very capable of doing a fine digital to analog conversion.
Ok, that's it for now. I hope everyone here likes an overload of photos, because I am using this thread to document this project so that I can later redo it onto a permanent board. Most likely, this will span a few hundred photos and become a 2-3 year long ordeal. There will probably be a few smoked chips along the way, and I will certainly post those photos for entertainment value as well!
Thanks for keeping this site alive, it has been a great resource for me, and will continue to be as I trudge along on VIC-2000.
Cheers!
Radical Brad