How Display Drivers Use Shadow RAM
ID: Q74808
|
The information in this article applies to:
-
Microsoft Windows Device Development Kit (DDK) for Windows, versions 3.0, 3.1
-
Microsoft Windows for Workgroups version 3.11
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.
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.
REFERENCE
For more information, please refer to the display driver source code
included in the Windows DDK.
Additional query words:
3.00 3.10 3.11 DDKDISPLAY
Keywords :
Version : :3.0,3.1; WINDOWS:3.11
Platform : WINDOWS
Issue type :