Very nice.
Great. I'm not a fan of peek and poke, but it's really well used here.
I try to avoid peek/poke whenever I can. I use poke() to enable rendering to sprite sheet, which is necessary to setup sprites, although you can also use a memcpy() from screen buffer to sprite buffer instead. But rotated sprites require some calls to tline() and before using that function, some poke's are required.