The zik80 SBC (or zikzak single board computer) pcb revision arrived a little while ago; this is 'everything on one board', excepting power; my current power pcb is needing a full redesign (using the 7805 at near an amp of draw is ridiculous .. the down conversion of voltage and current bleeds off as heat, and that much current needs a heat sink the size of your fist.) The actual computer/console design itself is pretty solid - the features are where I want them, the pcb layout is pretty good (not perfect, but few things ever are), and the damned thing works :) (mostly.)
The GPU-only pcb went through 2 revisions; the CPU pcb was only 1; putting them together so far - just one revision, but one wart has shown through. Blast! Still, it is probably fixable with just a jumper wire ('bodge'), but I'll get thigns fully working with hacks before making another pcb revision.. the pcb is large enough (6“x4”) that is costs a bit to make, and the components add up a little.
What went right? - merging it all into one pcb has mostly succeeded! A big complex board, but gorgeous imho; the cpu-only and gpu-only previous pcbs will be great for general projects (which is why they're full of breakout headers) so I don't consider them 'lost' or purely as 'cost of research' .. they're great little project boards; anyway, the SBC board works - RAM works, ROM works, audio works, CPU↔GPU via RAM works; I've not tested ps/2 keyboard yet (I need to write a driver for eZ80 yet), but using USB→serial→ works to either/both CPU and GPU; I've got a nice full colour little text menu shown when no cart present, to do some debug tests and demos. I have every confidence 99% of the board works.
What went wrong? - turns out I've managed not to test graphics and sound _at the same time_ before; when the AY-3-891x PSG Pokey sound chip is not taking instructions, its screwing with my bus for some reason. Maybe theres a little bug in the design somewhere, or maybe that chip just does that. Or maybe the address range for the audio isn't set right and the chip select is going at the wrong time. Either way.. it should be fixable; I may have to slice the current trace on the pcb, and jumper from an unused high address pin (or from an unused GPIO, or i2c, or some spare pin), and use that as the one control pin to audio .. or maybe I blew the inverter or something. Will check datasheets later. –> for now.. pop the PSG out of the socket and the RAM bus works fine; pop i tin, and I have to use every other address. Will sort it out soon.
Whats awesome? - added a basic 8×8 pixel font, and can draw text or graphics onto the raw framebuffer, and the gpu shows it. Pretty amazing. See video on youtube!
What to change? - At full 60 frames per second, sending 64KB of framebuffer data each time, sure kills the bus (and by extension, the eZ80 CPU's available time.) I was thinking of sending a scenegraph of instructions over RAM instead - a script of things to do (“draw lines here; draw sprites here”), which would reduce memory bandwidth enormously, but be a little goofy.. and non-retro. So instead I think I'll work on a tilemap based solution instead.. with 8×8 tiles, you end up with 1KB needed in RAM for a full screen tilemap; add in some slots for 'sprite 1, goes to (x,y)', and you're essentially needing just over a KB of data for each frame .. instead of 64KB/frame. (You also push the compositing from the eZ80 over to the GPU, but the GPU is pretty quick so thats okay.) This is also retro - thats more or less how the C64 does it, or the SNES, etc. “More or less”, without getting into details.
So .. the pcb is 'nearly there', just one or two small little issues (blast!), but otherwise working very well. *Happy*