abrash-black-book/44-01.md
2013-12-30 20:26:41 +11:00

69 lines
3.5 KiB
Markdown

Chapter 44\
Split Screens Save the Page Flipped Day {#Heading1}
----------------------------------------
### 640x480 Page Flipped Animation in 64K...Almost {#Heading2}
Almost doesn't count, they say—at least in horseshoes and maybe a few
other things. This is especially true in digital circles, where if you
need 12 MB of hard disk to install something and you only have 10 MB
left (a situation that seems to be some sort of eternal law) you're
stuck.
And that's only infuriating until you dredge up the gumption to go in
there and free up some space. How would you feel if you were up against
an "almost-but-not-quite" kind of a wall that couldn't be breached by
freeing up something elsewhere? Suppose you were within a few KB of
implementing a wonderful VGA animation scheme that provided lots of
screen space, square pixels, smooth motion and more than adequate
speed—but all the memory you have is all there is? What would you do?
Scream a little. Or throw something that won't break easily. Then you
sit down and let your right brain do what it was designed to do. Sure
enough, there's a way, and in this chapter I'll explain how a little VGA
secret called *page splitting* can save the day for page flipped
animation in 640x480 mode. But to do that, I have to lay a little
groundwork first. Or maybe a lot of groundwork.
No horseshoes here.
#### A Plethora of Challenges {#Heading3}
In its simplest terms, computer animation consists of rapidly redrawing
similar images at slightly differing locations, so that the eye
interprets the successive images as a single object in motion over time.
The fact that the world is an analog realm and the images displayed on a
computer screen consist of discrete pixels updated at a maximum rate of
about 70 Hz is irrelevant; your eye can interpret both real-world images
and pixel patterns on the screen as objects in motion, and that's that.
One of the key problems of computer animation is that it takes time to
redraw a screen, time during which the bitmap controlling the screen is
in an intermediate state, with, quite possibly, many objects erased and
others half-drawn. Even when only briefly displayed, a partially-updated
screen can cause flicker at best, and at worst can destroy the illusion
of motion entirely.
Another problem of animation is that the screen must update often enough
so that motion appears continuous. A moving object that moves just once
every second, shifting by hundreds of pixels each time it does move,
will appear to jump, not to move smoothly. Therefore, there are two
overriding requirements for smooth animation: 1) the bitmap must be
updated quickly (once per frame—60 to 70 Hz—is ideal, although 30 Hz
will do fine), and, 2) the process of redrawing the screen must be
invisible to the user; only the end result should ever be seen. Both of
these requirements are met by the program presented in Listings 44.1 and
44.2.
#### A Page Flipping Animation Demonstration {#Heading4}
The listings taken together form a sample animation program, in which a
single object bounces endlessly off other objects, with instructions and
a count of bounces displayed at the bottom of the screen. I'll discuss
various aspects of Listings 44.1 and 44.2 during the balance of this
article. The listings are too complex and involve too much VGA and
animation knowledge for for me to discuss it all in exhaustive detail
(and I've covered a lot of this stuff earlier in the book); instead,
I'll cover the major elements, leaving it to you to explore the finer
points—and, hope, to experiment with and expand on the code I'll
provide.