VIC’s Revenge, the drop-in replacement for the VIC-20 VIC chip Part 1: Introduction, design goals, and FAQs
By Michael Doornbos
- 4 minutes read - 806 wordsI’m doing a year-long project to reverse engineer the output and functionality of a VIC-20’s video chip, and create a drop-in replacement. At the start of this project (a few days ago), I only actually know how to do a percentage of the things I’ll need to complete this project. Writing a long series on how things work as I learn will help the project along. Plus, maybe having all of this information in one place would be nice, right?
Design goals
The outcome is simple, a drop-in replacement for the VIC chip. A MOS 6560 on an NTSC VIC-20 and 6561 on PAL machines. From now on, I’ll refer to it as the 6560/1.
The only real planned “enhancement” to the original chips is a single jumper to switch it between an NTSC and PAL chip. It’s not like you’re going to be switching between them on the fly, so it’s a one-time thing anyway. Although now that I think about it, the clock in PIN could just read the clock speed from the oscillator circuit and do this switch automatically.
I don’t plan any other “enhancements” at this time. So if you ask, don’t be surprised if I ignore your request for now.
Goal
The goal is to extend the life of VIC-20 boards. At the moment, the only chip you can’t easily replace is the VIC chip.
I’m not interested in giving the VIC-20 any additional features. Part of the charm of the VIC-20 is that it’s quirky and limited. If you need more features, maybe you should get a Commodore 64 ;-)
When will it be available for sale?
I might not even offer it for sale. Creating small batch niche hardware is a terrible business to be in. Plus at the moment, FPGAs are very hard to get in quantities of more than one. We’ll have to see how this supply chain works out along the way.
If I do decide to open source it (high probability), then I suppose someone could give this a try. Or maybe I’ll just selfishly keep it for my own VIC-20s and y’all can watch from a distance.
How can I help?
Well if you have expertise in FPGAs and circuit designs, I’d love to chat. Can be any method. My email is mike @ this domain ;-)
I do need VIC-20 boards. Especially a couple of the Non-CR boards in NTSC. They don’t have to be a complete VIC-20s (although I’ll take it that way if you prefer), but a working VIDEO is important. While I LOVE fixing these things for people, it will get in the way at this point.
The same goes for working 6560/1 chips themselves. If you want to donate yours to the cause, I’d be happy to use them for testing.
Signal generator would be nice as well. Old one is fine, don’t need anything over 16Mhz.
Send me an email if you’re interested in donating hardware. I have a special address for that.
Could you use a microcontroller?
I’ve thought about this quite a bit. I believe the right ESP32 board might be a viable alternative to FPGAs and it’s worth thinking about. If cycle-exact drop-in replacement is the goal, I care more about that outcome than the method used to achieve it. If something viable (and more available in the supply chain crunch) becomes apparent, I’ll undoubtedly entertain discussion about that.
Why is it called VIC’s revenge?
It’s a play on the best Atari 2600 game “Yar’s Revenge”. For a detailed and fascinating breakdown on how the code works for that game, I highly recommend “Racing the Beam”. Plus, by playing on a game that wasn’t a VIC-20 game, I get to annoy the more pedantic people.
What will the series be?
I plan a 10 part series (yes, it’s gonna take a while) walking through the decoding of the VIC, documenting how it works and it’s functions with the rest of the board and the process of reproducing that on an FPGA. This will likely be in written format and not video, although I reserve the right to change my mind about that at any point (obviously).
Current status
It’s just a couple of days in. I’ve already got a good handle on much of what the chip is expected to do. It’s on to decoding and replicating those functions.
In the meantime, I also need to learn how PAL and NTSC Composite (and S-Video) outputs work. I’ve already got a terrible but working PAL Composite signal generator coded up and working. One step at a time, right?