131 lines
7.1 KiB
Markdown
131 lines
7.1 KiB
Markdown
------------------------ --------------------------------- --------------------
|
||
[Previous](22-03.html) [Table of Contents](index.html) [Next](23-02.html)
|
||
------------------------ --------------------------------- --------------------
|
||
|
||
*Part II* {align="center"}
|
||
---------
|
||
|
||
Chapter 23\
|
||
Bones and Sinew {#Heading1}
|
||
----------------
|
||
|
||
### At the Very Heart of Standard PC Graphics {#Heading2}
|
||
|
||
The VGA is unparalleled in the history of computer graphics, for it is
|
||
by far the most widely-used graphics standard ever, the closest we may
|
||
ever come to a *lingua franca* of computer graphics. No other graphics
|
||
standard has even come close to the 50,000,000 or so VGAs in use today,
|
||
and virtually every PC compatible sold today has full VGA compatibility
|
||
built in. There are, of course, a variety of graphics accelerators that
|
||
outperform the standard VGA, and indeed, it is becoming hard to find a
|
||
plain vanilla VGA anymore—but there is no standard for accelerators, and
|
||
every accelerator contains a true-blue VGA at its core.
|
||
|
||
What that means is that if you write your programs for the VGA, you’ll
|
||
have the largest possible market for your software. In order for
|
||
graphics-based software to succeed, however, it must perform well.
|
||
Wringing the best performance from the VGA is no simple task, and it’s
|
||
*impossible* unless you really understand how the VGA works—unless you
|
||
have the internals down cold. This book is about PC graphics at many
|
||
levels, but high performance is the foundation for all that is to come,
|
||
so it is with the inner workings of the VGA that we will begin our
|
||
exploration of PC graphics.
|
||
|
||
The first eight chapters of Part II is a guided tour of the heart of the
|
||
VGA; after you’ve absorbed what we’ll cover in this and the next seven
|
||
chapters, you’ll have the foundation for understanding just about
|
||
everything the VGA can do, including the fabled Mode X and more. As you
|
||
read through these first chapters, please keep in mind that the *really*
|
||
exciting stuff—animation, 3-D, blurry-fast lines and circles and
|
||
polygons—has to wait until we have the fundamentals out of the way. So
|
||
hold on and follow along, and before you know it the fireworks will be
|
||
well underway.
|
||
|
||
We’ll start our exploration with a quick overview of the VGA, and then
|
||
we’ll dive right in and get a taste of what the VGA can do.
|
||
|
||
### The VGA {#Heading3}
|
||
|
||
The VGA is the baseline adapter for modern IBM PC compatibles, present
|
||
in virtually every PC sold today or in the last several years. (Note
|
||
that the VGA is often nothing more than a chip on a motherboard, with
|
||
some memory, a DAC, and maybe a couple of glue chips; nonetheless, I’ll
|
||
refer to it as an adapter from now on for simplicity.) It guarantees
|
||
that every PC is capable of documented resolutions up to 640x480 (with
|
||
16 possible colors per pixel) and 320x200 (with 256 colors per pixel),
|
||
as well as undocumented—but nonetheless thoroughly standard—resolutions
|
||
up to 360x480 in 256-color mode, as we’ll see in Chapters 31-34 and
|
||
47-49. In order for a video adapter to claim VGA compatibility, it must
|
||
support all the features and code discussed in this book (with a very
|
||
few minor exceptions that I’ll note)—and my experience is that just
|
||
about 100 percent of the video hardware currently shipping or shipped
|
||
since 1990 is in fact VGA compatible. Therefore, VGA code will run on
|
||
nearly all of the 50,000,000 or so PC compatibles out there, with the
|
||
exceptions being almost entirely obsolete machines from the 1980s. This
|
||
makes good VGA code and VGA programming expertise valuable commodities
|
||
indeed.
|
||
|
||
Right off the bat, I’d like to make one thing perfectly clear: The VGA
|
||
is hard—sometimes *very* hard—to program for good performance. Hard, but
|
||
not impossible—and that’s why I like this odd board. It’s a throwback to
|
||
an earlier generation of micros, when inventive coding and a solid
|
||
understanding of the hardware were the best tools for improving
|
||
performance. Increasingly, faster processors and powerful coprocessors
|
||
are seen as the solution to the sluggish software produced by high-level
|
||
languages and layers of interface and driver code, and that’s surely a
|
||
valid approach. However, there are tens of millions of VGAs installed
|
||
right now, in machines ranging from 6-MHz 286s to 90-MHz Pentiums.
|
||
What’s more, because the VGAs are generally 8- or at best 16-bit
|
||
devices, and because of display memory wait states, a faster processor
|
||
isn’t as much of a help as you’d expect. The upshot is that only a
|
||
seasoned performance programmer who understands the VGA through and
|
||
through can drive the board to its fullest potential.
|
||
|
||
Throughout this book, I’ll explore the VGA by selecting a specific
|
||
algorithm or feature and implementing code to support it on the VGA,
|
||
examining aspects of the VGA architecture as they become relevant.
|
||
You’ll get to see VGA features in context, where they are more
|
||
comprehensible than in IBM’s somewhat arcane documentation, and you’ll
|
||
get working code to use or to modify to meet your needs.
|
||
|
||
The prime directive of VGA programming is that there’s rarely just one
|
||
way to program the VGA for a given purpose. Once you understand the
|
||
tools the VGA provides, you’ll be able to combine them to generate the
|
||
particular synergy your application needs. My VGA routines are not
|
||
intended to be taken as gospel, or to show “best” implementations, but
|
||
rather to start you down the road to understanding the VGA.
|
||
|
||
Let’s begin.
|
||
|
||
### An Introduction to VGA Programming {#Heading4}
|
||
|
||
Most discussions of the VGA start out with a traditional “Here’s a block
|
||
diagram of the VGA” approach, with lists of registers and statistics.
|
||
I’ll get to that eventually, but you can find it in IBM’s VGA
|
||
documentation and several other books. Besides, it’s numbing to read
|
||
specifications and explanations, and the VGA is an exciting adapter, the
|
||
kind that makes you want to get your hands dirty probing under the hood,
|
||
to write some nifty code just to see what the board can do. What’s more,
|
||
the best way to understand the VGA is to see it work, so let’s jump
|
||
right into a sample of the VGA in action, getting a feel for the VGA’s
|
||
architecture in the process.
|
||
|
||
Listing 23.1 is a sample VGA program that pans around an animated
|
||
16-color medium-resolution (640x350) playfield. There’s a lot packed
|
||
into this code; I’m going to focus on the VGA-specific aspects so we
|
||
don’t get sidetracked. I’m not going to explain how the ball is
|
||
animated, for example; we’ll get to animation starting in Chapter 42.
|
||
What I will do is cover each of the VGA features used in this
|
||
program—the virtual screen, vertical and horizontal panning, color plane
|
||
manipulation, multi-plane block copying, and page flipping—at a
|
||
conceptual level, letting the code itself demonstrate the implementation
|
||
details. We’ll return to many of these concepts in more depth later in
|
||
this book.
|
||
|
||
------------------------ --------------------------------- --------------------
|
||
[Previous](22-03.html) [Table of Contents](index.html) [Next](23-02.html)
|
||
------------------------ --------------------------------- --------------------
|
||
|
||
* * * * *
|
||
|
||
Graphics Programming Black Book © 2001 Michael Abrash
|