Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

945 lines
14 KiB

;----------------------------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 <n>,<&&x>
ROP&ne = ROP&ne OR NEGATE_NEEDED ;;Show negate needed
endif
ifidn <P>,<&&x>
ROP&ne = ROP&ne OR PATTERN_PRESENT ;;Show pattern present
endif
ifidn <S>,<&&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