;----------------------------Module-Header------------------------------; ; Module Name: ROPTABLE.BLT ; ; Raster operation code templates for BitBLT. ; ; Created: In Windows' distant past (c. 1983) ; ; Copyright (c) 1983 - 1987 Microsoft Corporation ; ; This file defines the code templates for all raster operations which ; BitBLT supports. ; ; This file is part of a set that makes up the Windows BitBLT function ; at driver-level. ;-----------------------------------------------------------------------; if MASMFLAGS and PUBDEFS public Sn public DDx public DPna public Pn public PDSanon public PSnon public DPSona public PSon public PDSnaon public PDSaon public DPon public PDSonon public DPSnoon public DPSoon public DSon public PDSona public SDPxnon public SSPxDSxaxn public SPxDSxa public PSDPSanaxx public SDPSanaxn public DSna public PDSPanaxn public DPSana public PDSnaxn public DPSaon public PDSPaox public PDSox public SDPSxaxn public DPSxa public DSPDxaxn public DPSnaa public PSna public DPSaan public PSDnaon public SPDnaon public PDSPxaxn public SDPSaox public PSDPSaoxxn public SSPxPDxaxn public SPxPDxa public DSPDSoaxxn public SPDSoax public PDSoan public PSDPxox public SDPxon public PSDnoan public PSan public SDPnaon public SDPaon public PSDPaox public SDPSoox public SPDSaox public DPSDxaxn public SDPox public PSDPoax public SDPoan public PSx public SPDnox public SPDSxox public PDSxon public SPDnoan public SPDSonox public DPSxnan public SPDSnaox public SPDSanaxn public PDSana public DSan public PSDPxaxn public SDPxa public DSPDaox public PDSPDaoxxn public DPSDoax public DPSanon public PDSnox public DSnon public SDPana public SSPxDSxoxn public SPxDSxo public PDSPxox public DPSxon public PDna public Dn public DPSDaox public SPDSxaxn public PDSxa public DPx public PDSxnon public DPSnoan public PDSPoax public DPSoan public PDSax public DPSnox public DPSox public PDSxnan public DPSDonox public DPSDxox public DSPnaon public PDSPnaox public DPan public DSPDSaoxxn public SDPnox public DPSnaxn public DPSax public DSx public PDSxxn public SDPSonox public PSDPSonoxxn public DPSonon public SDPSoax public PSDPSoaxxn public SDPax public DSPDoax public PDSPDoaxxn public SDPSnoax public SSDxPDxaxn public SDxPDxa public SDPSxox public SDPnoan public DSPDxox public SDPSnaox public DPSnaon public DSPnoan public PDSPnoax public DPSxnon public PDSnoan public SPDSnoax public SDPxnan endif ROPDEF macro lbl,ne,whocares if1 if MASMFLAGS and DEBUG public lbl endif ROP&ne=(offset lbl)-(offset roptable) ;;Start with offset irpc x,lbl ROP&ne = ROP&ne AND (NOT NEGATE_NEEDED) ifidn ,<&&x> ROP&ne = ROP&ne OR NEGATE_NEEDED ;;Show negate needed endif ifidn

,<&&x> ROP&ne = ROP&ne OR PATTERN_PRESENT ;;Show pattern present endif ifidn ,<&&x> ROP&ne = ROP&ne OR SOURCE_PRESENT ;;Show source needed endif endm ROPDEF1 ROP&ne,%((offset $)-(offset lbl)) endif endm ROPDEF1 macro lbl,len if len ;;Skip 0 lbl = lbl OR (ROPLen&len SHL 10) ;;Set size index endif endm public roptable roptable label word errn$ roptable ;Must be at offset 0 Sn: ROPDEF Sn,0033,0008 errn$ roptable ;Must be at offset 0 dw ROP0000,ROP0001,ROP0002,ROP0003 dw ROP0004,ROP0005,ROP0006,ROP0007 dw ROP0008,ROP0009,ROP000A,ROP000B dw ROP000C,ROP000D,ROP000E,ROP000F dw ROP0010,ROP0011,ROP0012,ROP0013 dw ROP0014,ROP0015,ROP0016,ROP0017 dw ROP0018,ROP0019,ROP001A,ROP001B dw ROP001C,ROP001D,ROP001E,ROP001F dw ROP0020,ROP0021,ROP0022,ROP0023 dw ROP0024,ROP0025,ROP0026,ROP0027 dw ROP0028,ROP0029,ROP002A,ROP002B dw ROP002C,ROP002D,ROP002E,ROP002F dw ROP0030,ROP0031,ROP0032,ROP0033 dw ROP0034,ROP0035,ROP0036,ROP0037 dw ROP0038,ROP0039,ROP003A,ROP003B dw ROP003C,ROP003D,ROP003E,ROP003F dw ROP0040,ROP0041,ROP0042,ROP0043 dw ROP0044,ROP0045,ROP0046,ROP0047 dw ROP0048,ROP0049,ROP004A,ROP004B dw ROP004C,ROP004D,ROP004E,ROP004F dw ROP0050,ROP0051,ROP0052,ROP0053 dw ROP0054,ROP0055,ROP0056,ROP0057 dw ROP0058,ROP0059,ROP005A,ROP005B dw ROP005C,ROP005D,ROP005E,ROP005F dw ROP0060,ROP0061,ROP0062,ROP0063 dw ROP0064,ROP0065,ROP0066,ROP0067 dw ROP0068,ROP0069,ROP006A,ROP006B dw ROP006C,ROP006D,ROP006E,ROP006F dw ROP0070,ROP0071,ROP0072,ROP0073 dw ROP0074,ROP0075,ROP0076,ROP0077 dw ROP0078,ROP0079,ROP007A,ROP007B dw ROP007C,ROP007D,ROP007E,ROP007F errn$ roptable,-256 ;Must be 256 bytes afterwards db 2,3,4,5,7,9,11,13 ; The actual raster operation templates follow. ; ; Entry: AL = Source byte ; DH = Pattern Bytes ; ES:DI --> Destination byte ; ; Exit: AL = Result ; DH = Pattern Bytes ; ES:DI --> Destination byte ; AH IS possibly the destination byte ; ; Uses: AL,AH,DH,DL ;----------------------------------------------------------------- ; In Wes' World: ; The actual raster operation templates follow. ; ; Entry: AX = Source word ; DX = Pattern Word ; ES:DI --> Destination word ; ; Exit: AX = Result ; DX = Pattern Word ; ES:DI --> Destination word ; BP,BX?? IS possibly the destination word ; ; Uses: AL,AH,DH,DL ;----------------------------------------------------------------- DDx: xor al,al ROPDEF DDx,0000,0042 DPna: Pn: mov al,dh ROPDEF Pn,000F,0001 not al PDSanon: and al,es:[di] ROPDEF DPna,000A,0329 PSnon: not al DPSona: PSon: or al,dh ROPDEF PDSanon,0008,0F08 ROPDEF PSon,0003,00AA ROPDEF PSnon,000C,0324 PDSnaon: not al PDSaon: and al,es:[di] ROPDEF DPSona,0002,0C89 or al,dh ROPDEF PDSnaon,000D,0B25 ROPDEF PDSaon,0007,02C5 DPon: mov al,dh PDSonon: or al,es:[di] ROPDEF DPon,0005,00A9 DPSnoon: not al DPSoon: or al,dh ROPDEF PDSonon,000E,08A5 DSon: PDSona: or al,es:[di] ROPDEF DPSnoon,0004,0C88 ROPDEF DPSoon,0001,0289 ROPDEF DSon,0011,00A6 not al and al,dh ROPDEF PDSona,0010,0C85 SDPxnon: mov ah,es:[di] xor ah,dh not ah or al,ah ROPDEF SDPxnon,0012,0868 SSPxDSxaxn: mov dl,al SPxDSxa: mov ah,dh xor ah,al xor al,es:[di] and al,ah ROPDEF SPxDSxa,0024,0D55 xor al,dl ROPDEF SSPxDSxaxn,0017,1D54 PSDPSanaxx: SDPSanaxn: mov dl,al and al,dh DSna: not al and al,es:[di] ROPDEF DSna,0022,0326 xor al,dl ROPDEF SDPSanaxn,0019,1CC8 xor al,dh ROPDEF PSDPSanaxx,0016,5CCA PDSPanaxn: DPSana: and al,dh PDSnaxn: not al and al,es:[di] ROPDEF DPSana,002A,0CC9 xor al,dh ROPDEF PDSnaxn,002D,060A ROPDEF PDSPanaxn,0025,1CC5 DPSaon: PDSPaox: and al,dh PDSox: or al,es:[di] ROPDEF DPSaon,0015,02C9 xor al,dh ROPDEF PDSox,001E,01A5 ROPDEF PDSPaox,001A,06C5 SDPSxaxn: mov dl,al DPSxa: xor al,dh and al,es:[di] ROPDEF DPSxa,0028,0369 xor al,dl ROPDEF SDPSxaxn,001B,0768 DSPDxaxn: mov ah,es:[di] mov dl,ah xor dl,dh and al,dl xor al,ah ROPDEF DSPDxaxn,001D,0766 DPSnaa: PSna: not al DPSaan: and al,dh ROPDEF PSna,0030,032A and al,es:[di] ROPDEF DPSnaa,0020,0F09 ROPDEF DPSaan,007F,03C9 PSDnaon: mov ah,es:[di] not ah and al,ah or al,dh ROPDEF PSDnaon,000B,0B2A SPDnaon: mov ah,es:[di] not ah and ah,dh or al,ah ROPDEF SPDnaon,0023,0B24 PDSPxaxn: xor al,dh and al,es:[di] xor al,dh ROPDEF PDSPxaxn,0027,1868 SDPSaox: PSDPSaoxxn: mov dl,al and al,dh or al,es:[di] xor al,dl ROPDEF SDPSaox,0026,06C8 xor al,dh ROPDEF PSDPSaoxxn,0029,16CA SSPxPDxaxn: mov dl,al SPxPDxa: mov ah,es:[di] xor ah,dh xor al,dh and al,ah ROPDEF SPxPDxa,0018,0D59 xor al,dl ROPDEF SSPxPDxaxn,002B,1D58 DSPDSoaxxn: SPDSoax: mov dl,al PDSoan: mov ah,es:[di] or al,ah and al,dh ROPDEF PDSoan,001F,0385 xor al,dl ROPDEF SPDSoax,002C,0784 xor al,ah ROPDEF DSPDSoaxxn,0079,1786 PSDPxox: SDPxon: mov ah,es:[di] xor ah,dh or al,ah ROPDEF SDPxon,0021,0248 xor al,dh ROPDEF PSDPxox,002E,064A PSDnoan: mov ah,es:[di] not ah or al,ah PSan: and al,dh ROPDEF PSan,003F,00EA ROPDEF PSDnoan,002F,0E2A SDPnaon: mov ah,dh not ah and ah,es:[di] or al,ah ROPDEF SDPnaon,0031,0B28 SDPaon: PSDPaox: mov ah,es:[di] and ah,dh or al,ah ROPDEF SDPaon,0013,02C8 xor al,dh ROPDEF PSDPaox,001C,06CA SDPSoox: mov dl,al or al,dh or al,es:[di] xor al,dl ROPDEF SDPSoox,0032,0688 SPDSaox: mov dl,al and al,es:[di] or al,dh xor al,dl ROPDEF SPDSaox,0034,06C4 DPSDxaxn: mov ah,es:[di] xor al,ah and al,dh xor al,ah ROPDEF DPSDxaxn,0035,1864 SDPox: mov ah,es:[di] or ah,dh xor al,ah ROPDEF SDPox,0036,01A8 PSDPoax: SDPoan: mov ah,es:[di] or ah,dh and al,ah ROPDEF SDPoan,0037,0388 PSx: xor al,dh ROPDEF PSx,003C,004A ROPDEF PSDPoax,0038,078A SPDnox: mov ah,es:[di] not ah or ah,dh xor al,ah ROPDEF SPDnox,0039,0604 SPDSxox: mov dl,al PDSxon: xor al,es:[di] or al,dh ROPDEF PDSxon,0009,0245 xor al,dl ROPDEF SPDSxox,003A,0644 SPDnoan: mov ah,es:[di] not ah or ah,dh and al,ah ROPDEF SPDnoan,003B,0E24 SPDSonox: mov dl,al or al,es:[di] not al or al,dh xor al,dl ROPDEF SPDSonox,003D,18A4 DPSxnan: xor al,dh SPDSnaox: mov dl,al ;(wasted for DPSxnan) not al and al,es:[di] ROPDEF DPSxnan,007D,0C69 or al,dh xor al,dl ROPDEF SPDSnaox,003E,1B24 SPDSanaxn: mov dl,al PDSana: DSan: and al,es:[di] ROPDEF DSan,0077,00E6 not al and al,dh ROPDEF PDSana,0070,0CC5 xor al,dl ROPDEF SPDSanaxn,0043,1CC4 PSDPxaxn: SDPxa: mov ah,es:[di] xor ah,dh and al,ah ROPDEF SDPxa,0048,0368 xor al,dh ROPDEF PSDPxaxn,0047,076A DSPDaox: PDSPDaoxxn: mov ah,es:[di] mov dl,ah and dl,dh or al,dl xor al,ah ROPDEF DSPDaox,0046,06C6 xor al,dh ROPDEF PDSPDaoxxn,0049,16C5 DPSDoax: mov ah,es:[di] or al,ah and al,dh xor al,ah ROPDEF DPSDoax,004A,0789 DPSanon: and al,dh PDSnox: DSnon: not al or al,es:[di] ROPDEF DPSanon,0040,0F0A ROPDEF DSnon,0044,0328 xor al,dh ROPDEF PDSnox,004B,0605 SDPana: mov ah,es:[di] and ah,dh not ah and al,ah ROPDEF SDPana,004C,0CC8 SSPxDSxoxn: mov dl,al SPxDSxo: mov ah,al xor ah,dh xor al,es:[di] or al,ah ROPDEF SPxDSxo,007E,0955 xor al,dl ROPDEF SSPxDSxoxn,004D,1954 PDSPxox: DPSxon: xor al,dh or al,es:[di] ROPDEF DPSxon,0041,0249 xor al,dh ROPDEF PDSPxox,004E,0645 PDna: Dn: mov al,es:[di] ROPDEF Dn,0055,0009 not al and al,dh ROPDEF PDna,0050,0325 DPSDaox: mov ah,es:[di] and al,ah or al,dh xor al,ah ROPDEF DPSDaox,0052,06C9 SPDSxaxn: mov dl,al PDSxa: xor al,es:[di] and al,dh ROPDEF PDSxa,0060,0365 xor al,dl ROPDEF SPDSxaxn,0053,0764 DPx: mov al,dh PDSxnon: xor al,es:[di] ROPDEF DPx,005A,0049 DPSnoan: not al PDSPoax: DPSoan: or al,dh ROPDEF PDSxnon,0006,0865 PDSax: and al,es:[di] ROPDEF DPSnoan,005D,0E29 ROPDEF DPSoan,0057,0389 xor al,dh ROPDEF PDSPoax,0058,0785 ROPDEF PDSax,0078,01E5 DPSnox: not al DPSox: or al,dh PDSxnan: xor al,es:[di] ROPDEF DPSox,0056,01A9 ROPDEF DPSnox,0059,0609 not al and al,dh ROPDEF PDSxnan,006F,0C65 DPSDonox: mov ah,es:[di] or al,ah not al or al,dh xor al,ah ROPDEF DPSDonox,005B,18A9 DPSDxox: mov ah,es:[di] xor al,ah or al,dh xor al,ah ROPDEF DPSDxox,005C,0649 DSPnaon: PDSPnaox: mov ah,dh not ah and al,ah or al,es:[di] ROPDEF DSPnaon,0051,0B26 xor al,dh ROPDEF PDSPnaox,005E,1B29 DPan: mov al,dh and al,es:[di] ROPDEF DPan,005F,00E9 DSPDSaoxxn: mov dl,al mov ah,es:[di] and al,ah or al,dh xor al,dl xor al,ah ROPDEF DSPDSaoxxn,0061,16C6 SDPnox: mov ah,dh not ah or ah,es:[di] xor al,ah ROPDEF SDPnox,0063,0608 DPSnaxn: not al DPSax: and al,dh DSx: PDSxxn: xor al,es:[di] ROPDEF DSx,0066,0046 ROPDEF DPSax,006A,01E9 ROPDEF DPSnaxn,0065,0606 xor al,dh ROPDEF PDSxxn,0069,0145 SDPSonox: PSDPSonoxxn: mov dl,al DPSonon: or al,dh not al or al,es:[di] ROPDEF DPSonon,0054,08A9 xor al,dl ROPDEF SDPSonox,0067,18A8 xor al,dh ROPDEF PSDPSonoxxn,0068,58A6 SDPSoax: PSDPSoaxxn: mov dl,al or al,dh and al,es:[di] xor al,dl ROPDEF SDPSoax,0064,0788 xor al,dh ROPDEF PSDPSoaxxn,006B,178A SDPax: mov ah,es:[di] and ah,dh xor al,ah ROPDEF SDPax,006C,01E8 DSPDoax: PDSPDoaxxn: mov ah,es:[di] mov dl,ah or ah,dh and al,ah xor al,dl ROPDEF DSPDoax,0062,0786 xor al,dh ROPDEF PDSPDoaxxn,006D,1785 SDPSnoax: mov dl,al not al or al,dh and al,es:[di] xor al,dl ROPDEF SDPSnoax,006E,1E28 SSDxPDxaxn: mov dl,al SDxPDxa: mov ah,es:[di] xor al,ah xor ah,dh and al,ah ROPDEF SDxPDxa,0042,0D5D xor al,dl ROPDEF SSDxPDxaxn,0071,1D5C SDPSxox: mov dl,al xor al,dh or al,es:[di] xor al,dl ROPDEF SDPSxox,0072,0648 SDPnoan: mov ah,dh not ah or ah,es:[di] and al,ah ROPDEF SDPnoan,0073,0E28 DSPDxox: mov ah,es:[di] mov dl,ah xor ah,dh or al,ah xor al,dl ROPDEF DSPDxox,0074,0646 SDPSnaox: mov dl,al DPSnaon: not al and al,dh or al,es:[di] ROPDEF DPSnaon,0045,0B29 xor al,dl ROPDEF SDPSnaox,0076,1B28 DSPnoan: PDSPnoax: mov ah,dh not ah or al,ah and al,es:[di] ROPDEF DSPnoan,0075,0E26 DPSxnon: xor al,dh ROPDEF PDSPnoax,007A,1E29 PDSnoan: SPDSnoax: mov dl,al ;(wasted for DPSxnon) not al or al,es:[di] ROPDEF DPSxnon,0014,0869 and al,dh ROPDEF PDSnoan,004F,0E25 xor al,dl ROPDEF SPDSnoax,007C,1E24 SDPxnan: mov ah,es:[di] xor ah,dh not ah and al,ah ROPDEF SDPxnan,007B,0C68 foobar macro y if @Version LT 600 if2 %out Size of the table is y. endif else %out Size of the table is y. endif endm foobar %(offset $)-(offset roptable)-256-8