Initial conversion to markdown
This commit is contained in:
parent
a96a114403
commit
5e10794a24
362 changed files with 67353 additions and 0 deletions
131
23-01.md
Normal file
131
23-01.md
Normal file
|
|
@ -0,0 +1,131 @@
|
|||
------------------------ --------------------------------- --------------------
|
||||
[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
|
||||
Loading…
Reference in a new issue