|
|
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.