Next Steps

A project log for Configurable video output for 6502 computers

A flexible, configurable video circuit for homebrew computers, with shared RAM access and easily-tunable timings

George FootGeorge Foot 10/10/2020 at 18:170 Comments

I've been thinking about next steps for this project.  It's been quite successful for its intended purpose, allowing me to experiment with different timings and resolutions.  The 640x256 upgrade last week has been working well since then, and I've started making a little game on it.

There are a few definite directions I still want to take the video circuitry in though.  The main ones I've always had in mind are adding colour, proper 640x512 support, alternate output types (VGA, component), and higher resolutions (e.g. 1024x720, 1920x1080) as I'm interested in what's possible and what's beyond reach on a breadboard.

In the past week a new interesting extension has come onto my list as well - decoupling the CPU, clock, etc from the video circuit more, so that the CPU can do its own thing when it's not accessing video memory.  This could become a module that's simple to plug into any 6502-based system and get a fully-fledged graphical display, much like how PC video cards used to work, or like what Debug Innovations' TTL VGA Terminal already does a great job of doing for text-based output.

The trouble is, the better what I already have continues to behave, the less inclined I am to risk breaking it by extending it.  Some of these things are significant compromises - increasing the resolution would require a lot more RAM; adding colour would also require more RAM or would require lowering the resolution; and any increase in bandwidth will make the CPU struggle to fill the memory fast enough.  I'm still interested in climbing the mountain "because it's there", but I also have other projects on the go that require the existing system to keep working as it is.

Last time I got to this point, I built a new circuit from scratch, and reused most of the old one for Bad Apple on a Breadboard.  It might be time to build from scratch again, so that I can keep using the old circuit for projects like my game, sound output, and keyboard input, while using the new one to experiment with different ways of doing video output.

Although I really liked the structure of V2, and the configurability of the timings - which paid off numerous times - it is quite a lot to build all over again.  The use of down-counters worked wonders for reducing the amount of wiring going back and forth, compared to V1, but it's still quite fiddly to build - and I don't have enough breadboards or downcounter ICs for that matter.

So what then - make a PCB?  The trouble is, I want to change the way the CPU interfaces with the video circuit quite a bit, and that kind of iteration isn't going to work well on a PCB.

Another option cropped up though - I got some PLDs a while ago, after seeing Dawid Buchwald's recommendations, and figured they could maybe allow me to build a much simpler timing circuit than before.  I spent a while playing with cupl and csim, and came out with a design that requires three 16V8 PLDs and three (different!) timer ICs, with no other supporting logic, and can take my 27MHz input clock and output the sync signals and image placement timing signals required for outputting 640x256 interlaced, just as before.  This includes the CPU driving signals such as the CPU clock and the RAM's OE and WE signals, and there's some spare pins that could still be used for more of that sort of thing if required.  Nice!  And it should all fit on one breadboard (just).

So this should really unblock me.  Whether I used the PLDs permanently or not, I can now fairly easily replicate most of what I have already but in a slightly less configurable form but with many fewer parts, and this will then give me a base to experiment from again - adding colour, VGA, and especially, decoupling the CPU.