Watching Snata (C64)

Released in 2002, Snata was an entry into the Christmas Demo Competition and not in the slightest bit cynical or sarcastic. Well, okay it was because the “inspiration” was a SuperCPU-specific demo called Coca Cola Santa Claus – the original seems to be lost to the mists of time – which used the 65816 to brute force a full screen width FLI image out of the VIC-II… and then displayed one of the worst-looking wired pictures I’ve ever seen! So on a particularly dreary winter evening I was making a nuisance of myself on IRC and ended up in a little “competition” with Groepaz where we amused ourselves by taking said image and trying but failing to produce something similarly terrible by throwing it through whatever converters we had to hand.

A year or so before this evening of entertainment happened I’d noticed in passing that the tunes from Zeppelin’s Amiga game Santa’s Xmas Caper were all written in the same general, annoyingly jolly style so, pretty much on a whim that I was probably at a loss to explain even then, I spent an evening unceremoniously mangling them into a single piece with Goattracker. So now I had a piece of music and a fairly reasonable wired picture, so all that was needed for a Christmas competition entry was a little code to glue it together and that was actually donated by a previous release.

But once that had been congealed I had a moment of what we’ll have to call “inspiration”; since the picture had been based on a demo which required a hardware expansion to run it seemed sort of appropriate to add a similar but in this case optional overhead to mine and I already had just the thing lying around, a routine which leant on a RAM expansion to produce an effect similar to the FLI-based one in Charlatan – appropriate considering Coca Cola Santa Claus – but in the borders rather than on screen.

The routine uses the REU’s DMA to transfer colour data back and forth between the base 64K and expansion RAM, moving everything around at an impressively fast one byte per cycle. There are two shifts of the colour data during the screen to update it but the important part happens during the upper and lower borders where transfers are triggered with the destination set to $D020 and the DMA told not to update that address with each write; the result is that the border colour register is updated once per cycle with around 48 being visible but 63 writes actually taking place since there’s that many cycles per scanline.

Of course, the competition was just for fun and meant to be just standard C64 code so the colour bars were only there as a hidden bonus, but hey ho ho ho…