I was responsible for the graphics routines, which are in HACKMANN.ASM. It's all pretty straight-forward (the code is all commented); the only thing that really needs any explanation is the setting of scanline width. To simplify the math for bank switching, I borrowed an idea from a VESA tutorial to set the virtual screen size to 1024x480 and then burn the last 384 pixels on each line. The way, the 64K bank boundaries occur only between lines rather than at any random spot, which means I only have to check for bank switches when I go down a line rather than for every pixel. I used the Peroxide VESA tutorial (PXDTUT5.TXT, included) as a guide, and this is where I got the idea to set the scanline width from. I didn't take any code directly from it; however given that there are only so many ways one can call an interrupt, it is likely a lot of the code is similar. The coding was pretty simple; the main problem I had was that different cards treat VESA slightly differently, so I had to be careful about preserving registers on VESA interrupt calls (different cards like to destroy different registers). Besides that, it was as simple to work with as mode 13h. Sprite clipping was also a bit of a challenge (the math isn't always very clean) but I had the advantage of knowing the sprite width and height ahead of time, which helped things a bit. It took some debugging to shake all the bugs out, but I'm pretty sure they're all gone. I've got some %ifndef TEXTMODE sections thrown in the code in various places. If you compile the program with TEXTMODE %defined, it does everything except actually draw to the screen. Practically speaking this makes the program appear to not do a whole lot, but it helped debugging a lot, since Turbo Debugger isn't thrilled with running alongside graphical programs.