How MD201511 works

Since MD201511 was thrashed out in a hurry this’ll be a relatively short post, but here we go for the sake of completeness and so I can “show off” just a little… not about the Zybex-style starfield of course, that’s old hat and I’m probably the only C64 coder who hasn’t written one previously! It uses a block of thirty two characters in the font, taking 256 bytes of memory so STA $4C00,X can write anywhere within that block, subtracting eight from X moves one character to the left and it wraps around at the lefthand edge. Those characters are tiled across and down the screen with a “random” start position for each line to give some variety and a colour fade is similarly applied. Those logos over the top are nothing special either of course, although each three by three sprite copyright symbol only takes eight sprites because a little work went into designing them with the central sprite empty!

The primary effect is bang in the middle of the screen where, for a mere seven scanlines, the code is vertically splitting the horizontal scroll register to have seven independently moving areas; it doesn’t do the full eight scanlines to avoid the badline like MD201509‘s colour splits don’t. I did try just having the ROL scroller but the “join” between areas looked rough so the static text areas went in to make things look slightly neater. I’ve also been hinting in a less-than-subtle way that something “odd” is going on but, so far at least, nobody has said that they’ve noticed so here’s how MD201511 looks if the border colour is changed…

…and there’s only a “notch” at the left where the borders come in to mask the scrolling rather than on both sides. Since the code is writing to $D016 across the line it can switch from 38 column mode at the start to 40 by the end, meaning that seven scanline area is actually using 39 columns and everything else on screen leaves the lefthand column free so that it all lines up!

3 thoughts on “How MD201511 works

Leave a Reply

Your email address will not be published. Required fields are marked *