Remove extra heading ids and aligns
This commit is contained in:
parent
e19ac9ffe9
commit
f44993cec5
5 changed files with 16 additions and 16 deletions
|
|
@ -195,7 +195,7 @@ to the memory architectures, the 8-bit bus cycle-eater is replaced by a
|
||||||
new form of the wait state cycle-eater: wait states on accesses to
|
new form of the wait state cycle-eater: wait states on accesses to
|
||||||
normal system memory.
|
normal system memory.
|
||||||
|
|
||||||
#### System Wait States {#Heading6 align="center"}
|
#### System Wait States
|
||||||
|
|
||||||
The 286 and 386 were designed to lose relatively little performance to
|
The 286 and 386 were designed to lose relatively little performance to
|
||||||
the prefetch queue cycle-eater...*when used with zero-wait-state
|
the prefetch queue cycle-eater...*when used with zero-wait-state
|
||||||
|
|
@ -342,7 +342,7 @@ Of course, those are exactly the rules that apply to 8088 optimization
|
||||||
as well. Isn't it convenient that the same general rules apply across
|
as well. Isn't it convenient that the same general rules apply across
|
||||||
the board?
|
the board?
|
||||||
|
|
||||||
#### Data Alignment {#Heading7 align="center"}
|
#### Data Alignment
|
||||||
|
|
||||||
Thanks to its 16-bit bus, the 286 can access word-sized memory variables
|
Thanks to its 16-bit bus, the 286 can access word-sized memory variables
|
||||||
just as fast as byte-sized variables. There's a catch, however: That's
|
just as fast as byte-sized variables. There's a catch, however: That's
|
||||||
|
|
@ -534,7 +534,7 @@ that consistently provides a reasonable return for bytes and effort
|
||||||
expended, although sometimes it also pays to word-align tight
|
expended, although sometimes it also pays to word-align tight
|
||||||
time-critical loops.
|
time-critical loops.
|
||||||
|
|
||||||
#### Alignment and the 386 {#Heading9 align="center"}
|
#### Alignment and the 386
|
||||||
|
|
||||||
So far we've only discussed alignment as it pertains to the 286. What,
|
So far we've only discussed alignment as it pertains to the 286. What,
|
||||||
you may well ask, of the 386?
|
you may well ask, of the 386?
|
||||||
|
|
@ -555,7 +555,7 @@ performance would dictate doubleword alignment of subroutines, that
|
||||||
takes 3 bytes, a high price to pay for an optimization that improves
|
takes 3 bytes, a high price to pay for an optimization that improves
|
||||||
performance *only* on the post 286 processors.
|
performance *only* on the post 286 processors.
|
||||||
|
|
||||||
#### Alignment and the Stack {#Heading10 align="center"}
|
#### Alignment and the Stack
|
||||||
|
|
||||||
One side-effect of the data alignment cycle-eater of the 286 and 386 is
|
One side-effect of the data alignment cycle-eater of the 286 and 386 is
|
||||||
that you should *never* allow the stack pointer to become odd. (You can
|
that you should *never* allow the stack pointer to become odd. (You can
|
||||||
|
|
@ -580,7 +580,7 @@ slowly than it normally would. The same goes for decrementing twice; use
|
||||||
> 
|
> 
|
||||||
> Keep the stack pointer aligned at all times.
|
> Keep the stack pointer aligned at all times.
|
||||||
|
|
||||||
#### The DRAM Refresh Cycle-Eater: Still an Act of God {#Heading11 align="center"}
|
#### The DRAM Refresh Cycle-Eater: Still an Act of God
|
||||||
|
|
||||||
The DRAM refresh cycle-eater is the cycle-eater that's least changed
|
The DRAM refresh cycle-eater is the cycle-eater that's least changed
|
||||||
from its 8088 form on the 286 and 386. In the AT, DRAM refresh uses a
|
from its 8088 form on the 286 and 386. In the AT, DRAM refresh uses a
|
||||||
|
|
@ -606,7 +606,7 @@ an act of God, and there's not a blessed thing you can do about it.
|
||||||
Happily, the internal caches of the 486 and Pentium make DRAM refresh
|
Happily, the internal caches of the 486 and Pentium make DRAM refresh
|
||||||
largely a performance non-issue on those processors.
|
largely a performance non-issue on those processors.
|
||||||
|
|
||||||
#### The Display Adapter Cycle-Eater {#Heading12 align="center"}
|
#### The Display Adapter Cycle-Eater
|
||||||
|
|
||||||
Finally we come to the last of the cycle-eaters, the display adapter
|
Finally we come to the last of the cycle-eaters, the display adapter
|
||||||
cycle-eater. There are two ways of looking at this cycle-eater on
|
cycle-eater. There are two ways of looking at this cycle-eater on
|
||||||
|
|
@ -782,7 +782,7 @@ unless you play some unorthodox tricks with the segment registers.
|
||||||
> as Windows, so I'd recommend against using them. If you want 4-gigabyte
|
> as Windows, so I'd recommend against using them. If you want 4-gigabyte
|
||||||
> segments, use a 32-bit environment such as Win32.
|
> segments, use a 32-bit environment such as Win32.
|
||||||
|
|
||||||
#### Optimization Rules: The More Things Change... {#Heading15 align="center"}
|
#### Optimization Rules: The More Things Change...
|
||||||
|
|
||||||
Let's see what we've learned about 286/386 optimization. Mostly what
|
Let's see what we've learned about 286/386 optimization. Mostly what
|
||||||
we've learned is that our familiar PC cycle-eaters still apply, although
|
we've learned is that our familiar PC cycle-eaters still apply, although
|
||||||
|
|
@ -805,7 +805,7 @@ that's the data alignment cycle-eater. From the data alignment
|
||||||
cycle-eater we get a new rule: Word-align your word-sized variables, and
|
cycle-eater we get a new rule: Word-align your word-sized variables, and
|
||||||
start your subroutines at even addresses.
|
start your subroutines at even addresses.
|
||||||
|
|
||||||
#### Detailed Optimization {#Heading16 align="center"}
|
#### Detailed Optimization
|
||||||
|
|
||||||
While the major 8088 optimization rules hold true on computers built
|
While the major 8088 optimization rules hold true on computers built
|
||||||
around the 286 and 386, many of the instruction-specific optimizations
|
around the 286 and 386, many of the instruction-specific optimizations
|
||||||
|
|
|
||||||
|
|
@ -712,7 +712,7 @@ at the maximum possible rate of once per frame even on a 1985-vintage
|
||||||
8-MHz AT. In this case, faster performance would result only in a longer
|
8-MHz AT. In this case, faster performance would result only in a longer
|
||||||
wait for the page to flip.
|
wait for the page to flip.
|
||||||
|
|
||||||
#### Write Mode 3 {#Heading5 align="center"}
|
#### Write Mode 3
|
||||||
|
|
||||||
It's possible to update the bitmap very efficiently on the VGA, because
|
It's possible to update the bitmap very efficiently on the VGA, because
|
||||||
the VGA can draw up to 8 pixels at once, and because the VGA provides a
|
the VGA can draw up to 8 pixels at once, and because the VGA provides a
|
||||||
|
|
@ -819,7 +819,7 @@ coincidentally, the sample application draws only single-color objects
|
||||||
within the animation area; this allows write mode 3 to be used for all
|
within the animation area; this allows write mode 3 to be used for all
|
||||||
drawing, in keeping with our desire for speedy screen updates.
|
drawing, in keeping with our desire for speedy screen updates.
|
||||||
|
|
||||||
#### Drawing Text {#Heading6 align="center"}
|
#### Drawing Text
|
||||||
|
|
||||||
We'll need text in the sample application; is that also a good use for
|
We'll need text in the sample application; is that also a good use for
|
||||||
write mode 3? Sometimes it is, but not in this particular case.
|
write mode 3? Sometimes it is, but not in this particular case.
|
||||||
|
|
@ -870,7 +870,7 @@ are 10 ways to do it, each with unique strengths and weaknesses. Your
|
||||||
mission, should you decide to accept it, is to figure out which one is
|
mission, should you decide to accept it, is to figure out which one is
|
||||||
best for your particular application.
|
best for your particular application.
|
||||||
|
|
||||||
#### Page Flipping {#Heading7 align="center"}
|
#### Page Flipping
|
||||||
|
|
||||||
Now that we know how to update the screen reasonably quickly, it's time
|
Now that we know how to update the screen reasonably quickly, it's time
|
||||||
to get on to the fun stuff. Page flipping answers the second requirement
|
to get on to the fun stuff. Page flipping answers the second requirement
|
||||||
|
|
@ -913,7 +913,7 @@ so on *ad infinitum.*
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
#### Knowing When to Flip {#Heading8 align="center"}
|
#### Knowing When to Flip
|
||||||
|
|
||||||
There's a hitch, though, and that hitch is knowing exactly when it is
|
There's a hitch, though, and that hitch is knowing exactly when it is
|
||||||
that the page has flipped. The page doesn't flip the instant that you
|
that the page has flipped. The page doesn't flip the instant that you
|
||||||
|
|
|
||||||
|
|
@ -671,7 +671,7 @@ logic to produce more interesting and less predictable
|
||||||
internal-animation effects, such as jumping, ducking, running, and the
|
internal-animation effects, such as jumping, ducking, running, and the
|
||||||
like.
|
like.
|
||||||
|
|
||||||
#### Dirty-Rectangle Management {#Heading6 align="center"}
|
#### Dirty-Rectangle Management
|
||||||
|
|
||||||
As mentioned above, dirty-rectangle animation makes it possible to
|
As mentioned above, dirty-rectangle animation makes it possible to
|
||||||
access display memory a minimum number of times. The previous chapter's
|
access display memory a minimum number of times. The previous chapter's
|
||||||
|
|
|
||||||
|
|
@ -965,7 +965,7 @@ There are other sorts of shading components, including transparency and
|
||||||
atmospheric effects, but the ambient and diffuse-shading components are
|
atmospheric effects, but the ambient and diffuse-shading components are
|
||||||
all we're going to deal with in X-Sharp.
|
all we're going to deal with in X-Sharp.
|
||||||
|
|
||||||
#### Ambient Shading {#Heading5 align="center"}
|
#### Ambient Shading
|
||||||
|
|
||||||
The basic model for both ambient and diffuse shading is a simple one.
|
The basic model for both ambient and diffuse shading is a simple one.
|
||||||
Each surface has a reflectivity between 0 and 1, where 0 means all light
|
Each surface has a reflectivity between 0 and 1, where 0 means all light
|
||||||
|
|
@ -988,7 +988,7 @@ available palette of colors; I'll do that in the next chapter. Ambient
|
||||||
shading isn't the whole shading picture, though. In fact, scenes tend to
|
shading isn't the whole shading picture, though. In fact, scenes tend to
|
||||||
look pretty bland without diffuse shading.
|
look pretty bland without diffuse shading.
|
||||||
|
|
||||||
#### Diffuse Shading {#Heading6 align="center"}
|
#### Diffuse Shading
|
||||||
|
|
||||||
Diffuse shading is more complicated than ambient shading, because the
|
Diffuse shading is more complicated than ambient shading, because the
|
||||||
effective intensity of directed light falling on a surface depends on
|
effective intensity of directed light falling on a surface depends on
|
||||||
|
|
|
||||||
|
|
@ -265,7 +265,7 @@ even human figures). Just map the desired texture onto the underlying
|
||||||
polygonal framework of an object, and let double-DDA texture mapping do
|
polygonal framework of an object, and let double-DDA texture mapping do
|
||||||
the rest.
|
the rest.
|
||||||
|
|
||||||
#### Fast Texture Mapping {#Heading7 align="center"}
|
#### Fast Texture Mapping
|
||||||
|
|
||||||
Of course, there's a problem with mapping a texture across many
|
Of course, there's a problem with mapping a texture across many
|
||||||
polygons: Texture mapping is slow. If you run DEMO1 and move the ball up
|
polygons: Texture mapping is slow. If you run DEMO1 and move the ball up
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue