Normal quotes

This commit is contained in:
James Gregory 2013-12-30 18:34:31 +11:00
commit 18011c595a
352 changed files with 6040 additions and 6040 deletions

View file

@ -10,9 +10,9 @@ wrapping back to plane 0. This is the sort of code that stems from a
write-pixel line of thinking; it reflects not a whit of the unique
perspective that Mode X demands, and although it looks reasonably
efficient, it is in fact some of the slowest graphics code you will ever
see. I’ve provided Listing 47.4 partly for illustrative purposes, but
mostly so we’ll have a point of reference for the substantial speed-up
that’s possible with code that’s designed from a Mode X perspective.
see. I've provided Listing 47.4 partly for illustrative purposes, but
mostly so we'll have a point of reference for the substantial speed-up
that's possible with code that's designed from a Mode X perspective.
**LISTING 47.4 L47-4.ASM**
@ -47,9 +47,9 @@ that’s possible with code that’s designed from a Mode X perspective.
.code
public _FillRectangleX
_FillRectangleX proc near
push bp ;preserve caller’s stack frame
push bp ;preserve caller's stack frame
mov bp,sp ;point to local stack frame
push si ;preserve caller’s register variables
push si ;preserve caller's register variables
push di
mov ax,SCREEN_WIDTH
@ -62,16 +62,16 @@ that’s possible with code that’s designed from a Mode X perspective.
add di,[bp+PageBase] ;offset of first rectangle pixel in
; display memory
mov ax,SCREEN_SEG
mov es,ax ;point ES:DI to the first rectangle pixel’s
mov es,ax ;point ES:DI to the first rectangle pixel's
; address
mov dx,SC_INDEX ;set the Sequence Controller Index to
mov al,MAP_MASK ; point to the Map Mask register
out dx,al
inc dx ;point DX to the SC Data register
mov cl,byte ptr [bp+StartX]
and cl,011b ;CL = first rectangle pixel’s plane
and cl,011b ;CL = first rectangle pixel's plane
mov al,01h
shl al,cl ;set only the bit for the pixel’s plane to 1
shl al,cl ;set only the bit for the pixel's plane to 1
mov ah,byte ptr [bp+Color] ;color with which to fill
mov bx,[bp+EndY]
sub bx,[bp+StartY] ;BX = height of rectangle
@ -86,7 +86,7 @@ that’s possible with code that’s designed from a Mode X perspective.
FillScanLineLoop:
out dx,al ;set the plane for this pixel
mov es:[di],ah ;draw the pixel
shl al,1 ;adjust the plane mask for the next pixel’s
shl al,1 ;adjust the plane mask for the next pixel's
and al,01111b ; bit, modulo 4
jnz AddressSet ;advance address if we turned over from
inc di ; plane 3 to plane 0
@ -100,9 +100,9 @@ that’s possible with code that’s designed from a Mode X perspective.
dec bx ;count down scan lines
jnz FillRowsLoop
FillDone:
pop di ;restore caller’s register variables
pop di ;restore caller's register variables
pop si
pop bp ;restore caller’s stack frame
pop bp ;restore caller's stack frame
ret
_FillRectangleX endp
end
@ -110,16 +110,16 @@ that’s possible with code that’s designed from a Mode X perspective.
The two major weaknesses of Listing 47.4 both result from selecting the
plane on a pixel by pixel basis. First, endless **OUT**s (which are
particularly slow on 386s, 486s, and Pentiums, much slower than accesses
to display memory) must be performed, and, second, **REP STOS** can’t be
to display memory) must be performed, and, second, **REP STOS** can't be
used. Listing 47.5 overcomes both these problems by tailoring the fill
technique to the organization of display memory. Each plane is filled in
its entirety in one burst before the next plane is processed, so only
five **OUT**s are required in all, and **REP STOS** can indeed be used;
I’ve used **REP STOSB** in Listings 47.5 and 47.6. **REP STOSW** could
I've used **REP STOSB** in Listings 47.5 and 47.6. **REP STOSW** could
be used and would improve performance on most VGAs; however, **REP
STOSW** requires extra overhead to set up, so it can be slower for small
rectangles, especially on 8-bit VGAs. Note that doing an entire plane at
a time can produce a “fading-in” effect for large images, because all
a time can produce a "fading-in" effect for large images, because all
columns for one plane are drawn before any columns for the next. If this
is a problem, the four planes can be cycled through once for each scan
line, rather than once for the entire rectangle.
@ -127,7 +127,7 @@ line, rather than once for the entire rectangle.
Listing 47.5 is 2.5 times faster than Listing 47.4 at clearing the
screen on a 20-MHz cached 386 with a Paradise VGA. Although Listing 47.5
is slightly slower than an equivalent mode 13H fill routine would be,
it’s not grievously so.
it's not grievously so.
------------------------ --------------------------------- --------------------
[Previous](47-03.html) [Table of Contents](index.html) [Next](47-05.html)