To be honest, there’s nothing going on in MD201512 that hasn’t been well documented online previously but we’ll go through it from top to bottom just because we can…
The picture is in AFLI format, that’s high resolution bitmap but with 8,000 bytes of colour RAM rather than the regular 1,000 and a routine which exploits a “feature” of the vertical smooth scroll, forcing the VIC-II to fetch colour data one every scanline instead of once every eighth. The image was drawn by prof4d (who is no doubt wondering why I’m so obsessed with his work since he was the artist behind the picture “borrowed” for MD201509 as well) and originated on the Spectrum. It was chosen primarily for being “wintery” without having anything specifically Christmassy going on and, more importantly, for featuring a snowman.
Conversion was handled by yet another cheap and cheerful, half-completed Windows-based utility which takes SCR files (which are essentially the raw binary of a Spectrum SCREEN$) and reworks the data into a format the C64 can deal with; said converter completely ignores the bright bit of each attribute cell but I’d rather fix that manually. The application of extra colour during conversion to AFLI was reasonably stubtle – by my standards at least – so there’s more PAL blending going on than anything else and those striped areas like the upper part of the sky should appear as solid colours on a real C64.
After the picture is out of the way the code gets to the scrolling message and this is a variation on the main part of MD201509 where the background colour is split several times across each scanline; what makes it different is that the unrolled loop producing those splits deliberately takes sixty four cycles rather than the sixty three available on a PAL scanline so the result is that the splits are “skewed” and produces that nice, almost plasma-like effect.
Finally there’s the sprites in the lower border and these are just moving around horizontally whilst colour registers changed once per scanline, recycling the colour table already in use for the scroller. There’s literally no time left on each scanline despite the “loop” already being unrolled, have a look for a comment saying “split the sprite colours” for this routine and it’s literally just load and store commands using all three registers with no padding between each line; yes it could have been optimised but there was no necessity to do so since it did what I wanted already!