ID Number: Q74808
3.00 3.10
WINDOWS
Summary:
In the Microsoft Windows graphical environment, the term "shadow
memory" refers to the "invisible" portion of the video memory. That
is, the contents of the shadow memory is not displayed on the screen.
Some Windows display drivers use this memory as storage to save and
restore screen bitmaps when requested by the user module of Windows.
By doing so, Windows achieves better performance.
Another possible use of shadow memory is to store a device bitmap. For
more information, see pages 39 and 40 of the "Microsoft Windows Device
Driver Kit: Device Driver Adaptation Guide" for Windows 3.1.
The article discusses some details about the implementation of shadow
memory, which are not documented in the Windows Device Driver Kit
(DDK).
More Information:
Drivers that support shadow memory export a SaveScreenBitmap function
for the user module to call.
The display driver creates an imitation device, ssb_device, containing
a BITMAP data structure. This device is almost the same as the
physical_device in the display driver, but ssb_device has a different
height. The height of the physical_device is SCREEN_HEIGHT (for
example, 480 for VGA). The height of ssb_device is larger to include
the entire video memory. Using VGA as an example, 64K of address space
can hold up to 819 scan lines (640 pixels, or 80 bytes per scan line).
For this fictitious example device, the first 480 scan lines form the
visible portion. However, the storage portion does not start at the
481st scan line (or scan line 480, 0-indexed) but at the 616th scan
line (or scan line 615). This scan line is the first scan line in the
first 4K page of "invisible" memory. The driver uses the space between
the end of the 480th scan line to the end of the last visible page to
save and restore the mouse cursor image. In addition, the virtual
display device (VDDEGA/VGA) requires that the last 16 bytes in the
last visible 4K page be reserved.
Scan line 615 starts at offset C030h (or 80 * 615 = 49200) into the
video RAM. The value 615 is represented by a constant, SSB_START_SCAN.
This value is used by the routine SaveScreenBitmap when it performs a
bitblt (bit block-transfer operation) to save or restore a screen
bitmap. From the offset C030h to the end of the video memory (address
FFFFh), there is space for a total of 204 scan lines. This is the
value for the SSB_TOTAL_SCANS constant. This value is also used by the
SaveScreenBitmap routine in the display driver.
Upon initialization, the display driver calls the BIOS Interrupt 10h
Function 12h with BL=10h to determine the amount of video memory
installed. If the return value indicates 256K memory is available, the
driver sets the RC_SAVEBITMAP bit in the ssb_mask variable; otherwise,
the driver clears that bit.
Another variable, ssb_shadow_status, maintains the status of the
shadow memory. The status bits are SSB_EXISTS, SSB_IN_USE, and
SSB_TRASHED. The SSB_EXISTS bit is set by the physical_enable function
if ssb_mask has RC_SAVEBITMAP set.
For more information, please refer to the display driver source code
included in the Windows DDK.
Note: The names of variables and constants mentioned in this article
were obtained from the VGA/EGA display driver source code in version
3.0 of the DDK. These names may be changed in the future versions of
the DDK.
Additional reference words: 3.00 3.10 DDKDISPLAY