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

108 lines
6 KiB
Markdown

Chapter 45\
Dog Hair and Dirty Rectangles {#Heading1}
------------------------------
### Different Angles on Animation {#Heading2}
We brought our pets with us when we moved to Seattle. At about the same
time, our Golden Retriever, Sam, observed his third birthday. Sam is
relatively intelligent, in the sense that he is clearly smarter than a
banana slug, although if he were in the same room with Jeff Duntemann's
dog Mr. Byte, there's a reasonable chance that he would mistake Mr. Byte
for something edible (a category that includes rocks, socks, and a
surprising number of things too disgusting to mention), and Jeff would
have to find a new source of things to write about.
But that's not important now. What is important is that—and I am not
making this up—this morning I managed to find the one pair of socks Sam
hadn't chewed holes in. And what's even more important is that after we
moved and Sam turned three, he calmed down amazingly. We had been
waiting for this magic transformation since Sam turned one, the age at
which most puppies turn into normal dogs who lie around a lot, waking up
to eat their Science Diet (motto, "The dog food that costs more than the
average neurosurgeon makes in a year") before licking themselves in
embarrassing places and going back to sleep. When Sam turned one and
remained hopelessly out of control we said, "Goldens take two years to
calm down," as if we had a clue. When he turned two and remained
undeniably Sam we said, "Any day now." By the time he turned three, we
were reduced to figuring that it was only about seven more years until
he expired, at which point we might be able to take all the fur he had
shed in his lifetime and weave ourselves some clothes without holes in
them, or quite possibly a house.
But miracle of miracles, we moved, and Sam instantly turned into the dog
we thought we'd gotten when we forked over \$500—calm, sweet, and
obedient. Weeks went by, and Sam was, if anything, better than ever.
Clearly, the change was permanent.
And then we took Sam to the vet for his annual check-up and found that
he had an ear infection. Thanks to the wonders of modern animal
medicine, a \$5 bottle of liquid restored his health in just two days.
And with his health, we got, as a bonus, the old Sam. You see, Sam
hadn't changed. He was just tired from being sick. Now he once again
joyously knocks down any stranger who makes the mistake of glancing in
his direction, and will, quite possibly, be booked any day now on
suspicion of homicide by licking.
### Plus ça Change {#Heading3}
Okay, you give up. What exactly does this have to do with graphics? I'm
glad you asked. The lesson to be learned from Sam, The Dog With A Brain
The Size Of A Walnut, is that while things may *look* like they've
changed, in fact they often haven't. Take VGA performance. If you buy a
486 with a SuperVGA, you'll get performance that knocks your socks off,
especially if you run Windows. Things are liable to be so fast that
you'll figure the SuperVGA has to deserve some of the credit. Well,
maybe it does if it's a local-bus VGA. But maybe it doesn't, even if it
is local bus—and it certainly doesn't if it's an ISA bus VGA, because no
ISA bus VGA can run faster than about 300 nanoseconds per access, and
VGAs capable of that speed have been common for at least a couple of
years now.
Your 486 VGA system is fast almost entirely because it has a 486 in it.
(486 systems with graphics accelerators such as the ATI Ultra or Diamond
Stealth are another story altogether.) Underneath it all, the VGA is
still painfully slow—and if you have an old VGA or IBM's original PS/2
motherboard VGA, it's incredibly slow. The fastest ISA-bus VGA around is
two to twenty times slower than system memory, and the slowest VGA
around is as much as 100 times slower. In the old days, the rule was,
"Display memory is slow, and should be avoided." Nowadays, the rule is,
"Display memory is not quite so slow, but should still be avoided."
So, as I say, sometimes things don't change. Of course, sometimes they
do change. For example, in just 49 dog years, I fully expect to own at
least one pair of underwear without a single hole in it. Which brings
us, deus ex machina and the creek don't rise, to yet another animation
method: dirty-rectangle animation.
### VGA Access Times {#Heading4}
Actually, before we get to dirty rectangles, I'd like to take you
through a quick refresher on VGA memory and I/O access times. I want to
do this partly because the slow access times of the VGA make
dirty-rectangle animation particularly attractive, and partly as a
public service, because even I was shocked by the results of some I/O
performance tests I recently ran.
Table 45.1 shows the results of the aforementioned I/O performance
tests, as run on two 486/33 SuperVGA systems under the Phar Lap
386|DOS-Extender. (The systems and VGAs are unnamed because this is a
not-very-scientific spot test, and I don't want to unfairly malign, say,
a VGA whose only sin is being plugged into a lousy motherboard, or vice
versa.) Under Phar Lap, 32-bit protected-mode apps run with full I/O
privileges, meaning that the **OUT** instructions I measured had the
best official cycle times possible on the 486: 10 cycles. **OUT**
officially takes 16 cycles in real mode on a 486, and officially takes a
mind-boggling 30 cycles in protected mode if running *without* full I/O
privileges (as is normally the case for protected-mode applications).
Basically, I/O is just plain slow on a 486.
As slow as 30 or even 10 cycles is for an **OUT**, one could only wish
that VGA I/O were actually that fast. The fastest measured **OUT** to a
VGA in Table 45.1 is 26 cycles, and the slowest is 126—this for an
operation that's *supposed* to take 10 cycles. To put this in context,
**MUL** takes only 13 to 42 cycles, and a normal **MOV** to or from
system memory takes exactly one cycle on the 486. In short, **OUT**s to
VGAs are as much as 100 times slower than normal memory accesses, and
are generally two to four times slower than even display memory
accesses, although there are exceptions.