|
|
1.1 root 1: ;---------------------------Module-Header------------------------------;
2: ; Module Name: driver.inc
3: ;
4: ; Contains prototypes for the 256 colour VGA driver.
5: ;
6: ; NOTE: Must mirror driver.h!
7: ;
8: ; Copyright (c) 1992 Microsoft Corporation
9: ;-----------------------------------------------------------------------;
10:
11: ; Sizes assumed for 1-window and 2 RW-window banks.
12:
13: BANK_SIZE_1_WINDOW equ 10000h
14: BANK_SIZE_2RW_WINDOW equ 8000h
15:
16: ; Specifies desired justification for requestion scan line within bank window
17:
18: JustifyTop equ 0
19: JustifyBottom equ 1
20:
21: ; Specifies which window is to be mapped by two-window bank handler.
22:
23: MapSourceBank equ 0
24: MapDestBank equ 1
25:
26: ;------------------------------------------------------------------------;
27:
28: ; Miscellaneous driver flags
29:
30: DRIVER_PLANAR_CAPABLE equ 1
31:
32: ; Bank status flags
33:
34: BANK_BROKEN_RASTER1 equ 1 ; If bank1 or read bank has broken raster
35: BANK_BROKEN_RASTER2 equ 2 ; If bank2 or write bank has broken raster
36: BANK_BROKEN_RASTERS equ (BANK_BROKEN_RASTER1 + BANK_BROKEN_RASTER2)
37:
38: ;------------------------------------------------------------------------;
39: ; Structures for maintaining a realized brush:
40:
41: RBRUSH_BLACKWHITE equ 001h ; Black and white brush
42: RBRUSH_2COLOR equ 002h ; 2 color brush
43: RBRUSH_NCOLOR equ 004h ; n color brush
44: RBRUSH_4PELS_WIDE equ 008h ; Brush is 4xN
45:
46: BRUSH_SIZE equ 64 ; An 8x8 8bpp brush needs 64 bytes
47:
48: RBRUSH struc
49: rb_fl dd ? ; Flags
50: rb_xBrush dd ? ; Realized brush's x brush origin
51: ; Pattern in planar format
52: rb_ulFgColor dd ? ; Foreground color for 2-color
53: rb_ulBkColor dd ? ; Background color for 2-color
54: rb_cy dd ? ; Height of pattern
55: rb_cyLog2 dd ? ; log2 of height
56: rb_iCache dd ? ; Cache entry index; 0 not valid
57: rb_aulPattern dd (BRUSH_SIZE / 4) dup (?)
58: RBRUSH ends
59:
60: BRUSHCACHEENTRY struc
61: bce_prbVerifyRealization dd ? ; For verifying cache entry valid
62: bce_yCache dd ? ; Scan where entry's bits live
63: bce_ulCache dd ? ; Planar (!) offset to cache entry
64: BRUSHCACHEENTRY ends
65:
66: ;------------------------------------------------------------------------;
67: ; The Physical Device data structure.
68:
69: PDEV struc
70: pdev_fl dd ? ; Driver flags
71: pdev_hDriver dd ? ; Handle to \Device\Screen
72: pdev_hdevEng dd ? ; Engine's handle to PDEV
73: pdev_hsurfEng dd ? ; Engine's handle to surface
74: pdev_hsurfBm dd ? ; Handle to the "punt" surface
75: pdev_pSurfObj dd ? ; Pointer to the locked "punt" surface
76:
77: pdev_hpalDefault dd ? ; Handle to the default palette for device.
78:
79: pdev_pjScreen dd ? ; This is pointer to base screen address
80: pdev_cxScreen dd ? ; Visible screen width
81: pdev_cyScreen dd ? ; Visible screen height
82: pdev_ulMode dd ? ; Mode in which the mini-port driver is
83: pdev_lDeltaScreen dd ? ; Distance from one scan to the next
84:
85: pdev_flRed dd ? ; For bitfields device, Red Mask
86: pdev_flGreen dd ? ; For bitfields device, Green Mask
87: pdev_flBlue dd ? ; For bitfields device, Blue Mask
88: pdev_ulBitCount dd ? ; # of bits per pel 8,16 are only supported
89:
90: pdev_pdda dd ? ; DDA drawing object for trapezoids
91:
92: pdev_pGdiInfo dd ? ; Pointer to temporary buffer for GDIINFO struct
93: pdev_pDevInfo dd ? ; Pointer to temporary buffer for DEVINFO struct
94:
95: pdev_ulrm0_wmX dd ? ; Values to set GC5 to to select read mode
96: ; 0 together with write modes 0-3
97:
98: pdev_pjGlyphFlipTableBase dd ? ; Base allocated address for flip table;
99: ; the pointer we use is this pointer
100: ; rounded up to the nearest 256-byte
101: ; boundary
102: pdev_pjGlyphFlipTable dd ? ; Pointer to table used to flip glyph bits
103: ; 0-3 and 4-7
104:
105: pdev_pPal dd ? ; If this is pal managed, this is the pal
106:
107: ; Off Screen Save Stuff:
108:
109: pdev_hbmTmp dd ? ; Handle to temporary buffer
110: pdev_psoTmp dd ? ; Temporary surface
111: pdev_pvTmp dd ? ; Pointer to temporary buffer
112: pdev_cyTmp dd ? ; # of scans in temporary surface
113:
114: ; Brush cache:
115:
116: pdev_iCache dd ? ; Index for last brush to be allocated
117: pdev_iCacheLast dd ? ; Last valid cache index
118: pdev_pbceCache dd ? ; Pointer to allocated cache
119:
120: ; Bank manager stuff common between planar and non-planar modes:
121:
122: pdev_cTotalScans dd ? ; Number of usable on & off screen scans
123: pdev_pBankInfo dd ? ; Bank info for current mode
124: pdev_flBank dd ? ; Flags for current bank state
125: pdev_ulBitmapSize dd ? ; Length of bitmap if there were no
126: ; banking, in CPU addressable bytes
127:
128: pdev_ulWindowBank dd ?,? ; Current banks mapped into windows
129: ; 0 & 1 (used in 2 window mode only)
130:
131: pdev_pvBitmapStart dd ? ; Single-window bitmap start pointer
132: ; (adjusted as necessary to make
133: ; window map in at proper offset)
134: pdev_pvBitmapStart2Window dd ?,? ; Double-window window 0 and 1 bitmap
135: ; start
136:
137: ; Non-planar mode specific bank management control stuff:
138:
139: pdev_vbtBankingType dd ? ; Type of banking
140: pdev_pfnBankSwitchCode dd ? ; Pointer to bank switch code
141: pdev_lNextScan dd ? ; Offset to next bank in bytes
142: pdev_pjJustifyTopBank dd ? ; Pointer to lookup table for
143: ; converting scans to banks
144: pdev_pbiBankInfo dd ? ; Pointer to array of bank clip info
145: pdev_ulJustifyBottomOffset dd ? ; Number of scans from top to bottom
146: ; of bank, for bottom justifying
147: pdev_iLastBank dd ? ; Index of last valid bank in
148: pdev_ulBank2RWSkip dd ? ; Offset from one bank index to next
149: ; to make two 32K banks appear to be
150: ; one seamless 64K bank
151:
152: pdev_pfnBankControl dd ? ; Pointer to bank control function
153: pdev_pfnBankControl2Window dd ? ; Pointer to double-window bank
154: ; control function
155:
156: pdev_pfnBankNext dd ? ; Pointer to next bank function
157: pdev_pfnBankNext2Window dd ? ; Pointer to double-window next bank
158: ; function
159: pdev_rcl1WindowClip db (size RECTL) dup (?)
160: ; Single-window banking clip rect
161: pdev_rcl2WindowClip db (2*(size RECTL)) dup (?)
162: ; Double-window banking clip rects for
163: ; windows 0 & 1
164:
165: ; Planar mode specific bank management control stuff:
166:
167: pdev_vbtPlanarType dd ? ; Type of planar banking
168: pdev_pfnPlanarSwitchCode dd ? ; Pointer to planar bank switch code
169: pdev_lPlanarNextScan dd ? ; Offset to next planar bank in bytes
170: pdev_pjJustifyTopPlanar dd ? ; Pointer to lookup table for
171: ; converting scans to planar banks
172: pdev_pbiPlanarInfo dd ? ; Pointer to array of bank clip info
173: pdev_ulPlanarBottomOffset dd ? ; Number of scans from top to bottom
174: ; of bank, for bottom justifying
175: pdev_iLastPlanar dd ? ; Index of last valid bank in
176: pdev_ulPlanar2RWSkip dd ? ; Offset from one bank index to next
177: ; to make two 32K banks appear to be
178: ; one seamless 64K bank
179:
180: pdev_pfnPlanarControl dd ? ; Pointer to bank control function
181: pdev_pfnPlanarControl2 dd ? ; Pointer to double-window bank
182: ; control function
183:
184: pdev_pfnPlanarNext dd ? ; Pointer to next bank function
185: pdev_pfnPlanarNext2 dd ? ; Pointer to double-window next bank
186: ; function
187: pdev_rcl1PlanarClip db (size RECTL) dup (?)
188: ; Single-window banking clip rect
189: pdev_rcl2PlanarClip db (2*(size RECTL)) dup (?)
190: ; Double-window banking clip rects for
191:
192: pdev_pfnPlanarEnable dd ? ; Function to enable planar mode
193: pdev_pfnPlanarDisable dd ? ; Function to disable planar mode
194:
195: ; Smart bank management stuff:
196:
197: pdev_iLastScan dd ? ; Last scan we want to enumerate
198: pdev_pvScanScan0 dd ? ; Surface's original pvScan0
199: pdev_rclSaveBounds db (size RECTL) dup (?)
200: ; Clip object's original bounds
201: pdev_pcoNull dd ? ; Pointer to empty clip object
202: pdev_iSaveDComplexity db ? ; Clip object's original complexity
203: pdev_fjSaveOptions db ? ; Clip object's original flags
204: pdev_ajFiller db ?,? ; Pack to dword alignment
205:
206: ; NOTE: This stuff must come at the end of the structure, so that we don't
207: ; have to declare an array size for ahbmPat:
208:
209: pdev_cPatterns dd ? ; Count of bitmap patterns created
210: pdev_ahbmPat dd ? ; Array of engine handles to standard
211: PDEV ends
212:
213: pdev_rcl2WindowClipS equ (pdev_rcl2WindowClip)
214: pdev_rcl2WindowClipD equ (pdev_rcl2WindowClip + (size RECTL))
215:
216: pdev_rcl2PlanarClipS equ (pdev_rcl2PlanarClip)
217: pdev_rcl2PlanarClipD equ (pdev_rcl2PlanarClip + (size RECTL))
218:
219: pdev_pvBitmapStart2WindowS equ (pdev_pvBitmapStart2Window)
220: pdev_pvBitmapStart2WindowD equ (pdev_pvBitmapStart2Window + dword)
221:
222: ;------------------------------------------------------------------------;
223:
224: ; Macro to do a simple RET, with no stack stuff, in a proc.
225:
226: PLAIN_RET macro
227: db 0c3h
228: endm
229:
230: ; Macro to replace a CALL followed immediately by a JMP:
231:
232: CALL_AND_JUMP macro CALL_ADDR,JUMP_ADDR
233: push offset JUMP_ADDR
234: jmp CALL_ADDR
235: endm
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.