|
|
1.1 root 1: ;----------------------------Module-Header------------------------------;
2: ; Module Name: ROPDEFS.BLT
3: ;
4: ; Constants relating to raster operation definitions.
5: ;
6: ; Copyright (c) 1988 - 1992 Microsoft Corporation
7: ;
8: ; These constants are used mainly in the file ROPTABLE.BLT, in which
9: ; the raster operation code templates are defined.
10: ;
11: ; This file is part of a set that makes up the Windows BitBLT function
12: ; at driver-level.
13: ;-----------------------------------------------------------------------;
14:
15: subttl Raster Operation Definitions
16: page
17:
18:
19: if 0 ; Not passed to us anymore !!!
20:
21: ; Raster Op Definitions
22: ;
23: ;
24: ; The include file COMMENT.BLT contains a good description
25: ; of the encoding of the raster operations. It should be
26: ; read before examining the definitions that follow.
27: ;
28: ; The sixteen-bit number indicating which raster Op is to be
29: ; performed is encoded in the following manner:
30:
31:
32: EPS_OFF = 0000000000000011b ;Offset within parse string
33: EPS_INDEX = 0000000000011100b ;Parse string index
34: LogPar = 0000000000100000b ;(1 indicates implied NOT as Logop6)
35: LogOp1 = 0000000011000000b ;Logical Operation #1
36: LogOp2 = 0000001100000000b ;Logical Operation #2
37: LogOp3 = 0000110000000000b ;Logical Operation #3
38: LogOp4 = 0011000000000000b ;Logical Operation #4
39: LogOp5 = 1100000000000000b ;Logical Operation #5
40:
41:
42: ; The parity bit is used to encode an optional sixth logical operation
43: ; which will always be a "NOT". In most cases this is used to get an
44: ; even number of "NOT"s so that reduction can take place (two sequential
45: ; trailing "NOT"s cancel each other out and thus are eliminated).
46:
47:
48:
49: ; Each LogOp (Logical Operation) is encoded as follows:
50:
51: LogNOT = 00b ;NOT result
52: LogXOR = 01b ;XOR result with next operand
53: LogOR = 10b ;OR result with next operand
54: LogAND = 11b ;AND result with next operand
55:
56:
57:
58: ; The parse string is a string which contains the operands for
59: ; the logical operation sequences (source, destination, pattern).
60: ; The logic opcodes are applied to the current result and the next
61: ; element of the given string (unless the LogOp is a NOT which only
62: ; affects the result).
63: ;
64: ; The string is encoded as eight two-bit numbers indicating which
65: ; operand is to be used
66:
67: opDefs struc
68: OpSpec db ? ;Special Operand as noted below
69: OpSrc db ? ;Operand is source field
70: OpDest db ? ;Operand is destination field
71: OpPat db ? ;Operand is pattern field
72: opDefs ends
73:
74:
75:
76: ; The special operand is used for a few rops that would not fit into
77: ; an RPN format. On the first occurance of an OpSpec, the current result
78: ; is "PUSHED", and the next operand is loaded. On the second occurance
79: ; of the OpSpec, the given logic operation is performed between the
80: ; current result and the "PUSHED" value.
81: ;
82: ; **NOTE** Since there can be no guarantee that the client will call
83: ; the BLT routine with one of the 256 published raster ops, it is
84: ; possible that a value might be "PUSHED" and then never "POPPED".
85: ; If these "PUSHES" are made to the stack, then care must be made to
86: ; remove the "PUSHED" value.
87: ;
88: ; In any case, since the raster op was not one of the published
89: ; "magic numbers", the BLT can be aborted or the result can be
90: ; computed to the extent possible. The only restriction is that it
91: ; must not crash the system (i.e. don't leave extra stuff on the stack).
92: ;
93: ; Simply: Compute garbage, but don't crash!
94:
95:
96:
97:
98: ; Define the parse strings to be allocated later.
99: ;
100: ; An example parse string for the pattern "SDPSDPSD" would be
101: ; "0110110110110110b"
102:
103:
104: parseStr0 = 07AAAh ;src,pat,dest,dest,dest,dest,dest,dest
105: parseStr1 = 079E7h ;src,pat,dest,src,pat,dest,src,pat
106: parseStr2 = 06DB6h ;src,dest,pat,src,dest,pat,src,dest
107: parseStr3 = 0AAAAh ;dest,dest,dest,dest,dest,dest,dest,dest
108: parseStr4 = 0AAAAh ;dest,dest,dest,dest,dest,dest,dest,dest
109: parseStr5 = 04725h ;src,spec,src,pat,spec,dest,src,src
110: parseStr6 = 04739h ;src,spec,src,pat,spec,pat,dest,src
111: parseStr7 = 04639h ;src,spec,src,dest,spec,pat,dest,src
112:
113:
114:
115: ; The following equates are for certain special functions that are
116: ; derived from the very first string (index of SpecParseStrIndex).
117: ;
118: ; These strings will have their innerloops special cased for
119: ; speed enhancements (i.e MOVSx and STOSx for pattern copys and
120: ; white/black fill, and MOVSx for source copy if possible)
121:
122: PAT_COPY equ 0021h ;P - dest = Pattern
123: NOTPAT_COPY equ 0001h ;Pn - dest = NOT Pattern
124: FILL_BLACK equ 0042h ;DDx - dest = 0 (black)
125: FILL_WHITE equ 0062h ;DDxn - dest = 1
126: SOURCE_COPY equ 0020h ;S - dest = source
127:
128:
129: errnz LogXOR-01b ;These must hold true for above equates
130: errnz LogOp1-0000000011000000b
131: errnz LogPar-0000000000100000b
132: errnz parseStr0-7AAAh ; plus the string must be SPDD
133:
134:
135: SPEC_PARSE_STR_INDEX equ 0 ;Special cased strings index
136:
137: endif
138:
139: ; The raster operation table consists of a word for each of
140: ; the first 128 raster operations (00 through 7F). The second
141: ; half of the raster operations (FF through 80) are the inverse
142: ; of the first half.
143: ;
144: ; The table is encoded as follows:
145: ;
146: ; N S P LLL OOOOOOOOOO
147: ; | | | | |
148: ; | | | | |_____ Offset of code from roptable.
149: ; | | | |
150: ; | | | |____________ Length index
151: ; | | |
152: ; | | |_______________ Pattern is present
153: ; | |
154: ; | |_________________ Source is present
155: ; |
156: ; |___________________ Generate trailing NOT
157: ;
158: ;
159: ; To map the ROPS 80h through FFh to 00h through 7Fh, take the
160: ; 1's complement of the ROP, and invert 'N' above.
161: ;
162: ;
163: ; Notes:
164: ;
165: ; 1) An offset of 0 is reserved for source copy. This
166: ; was done to reduce the number of LLLs to 8, so that
167: ; the above encoding could fit into a 16-bit integer.
168: ;
169: ;
170: ; 2) LLL only allows a maximum of 8 different template sizes!
171: ; Actual length is at roptable+256+LLL.
172: ;
173: ;
174: ;
175: ;
176: ; ROP is the macro that generates the equates which will be
177: ; stored into the roptable as specified above.
178: ;
179: ; Usage:
180: ;
181: ; ROPDEF Pattern,Number
182: ;
183: ; Where
184: ;
185: ; Pattern Is the RPN definition of the raster operation.
186: ; It is used as the label of the first byte of
187: ; the template. It also is used to determine
188: ; is there is a (S)ource, (P)attern, and if the
189: ; final result is to be (n)egated.
190: ;
191: ; Number is the boolean result of the raster operation
192: ; based on a P=F0, S=CC, and D=AA. These labels
193: ; and indexes can be found in the file COMMENT.BLT
194: ;
195: ; Since there are many equivelent boolean expresions,
196: ; some of the rops will not match the label given.
197: ; The label is for reference only. The final result
198: ; is what counts.
199:
200:
201:
202: ROPOffset equ 0000001111111111b
203: ROPLength equ 0001110000000000b
204: SOURCE_PRESENT equ 0010000000000000b
205: PATTERN_PRESENT equ 0100000000000000b
206: NEGATE_NEEDED equ 1000000000000000b
207:
208:
209: ; Define the eight template length indices.
210:
211: ROPLen0 equ 0
212: ROPLen2 equ 1
213: ROPLen4 equ 2
214: ROPLen6 equ 3
215: ROPLen8 equ 4
216: ROPLen10 equ 5
217: ROPLen12 equ 6
218: ROPLen14 equ 7
219:
220: ; Binary raster ops
221: R2_BLACK equ 1
222: R2_NOTMERGEPEN equ 2
223: R2_MASKNOTPEN equ 3
224: R2_NOTCOPYPEN equ 4
225: R2_MASKPENNOT equ 5
226: R2_NOT equ 6
227: R2_XORPEN equ 7
228: R2_NOTMASKPEN equ 8
229: R2_MASKPEN equ 9
230: R2_NOTXORPEN equ 10
231: R2_NOP equ 11
232: R2_MERGENOTPEN equ 12
233: R2_COPYPEN equ 13
234: R2_MERGEPENNOT equ 14
235: R2_MERGEPEN equ 15
236: R2_WHITE equ 16
237: R2_LAST equ 16
238:
239:
240:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.