"OPER" resource in Filter Factory

Go to resource overview / Go to function listing

Attention: This page only addresses Filter Factory 3.x for Photoshop/Win32.

Some facts

The OPER resource contains the assembly code of all functions, operators and so on. At runtime, the formula term will be parsed and the assembly code of each function will be concatenated, so that in the end you have an assembly code for your formula. Alas, this compilation is not saved in a 8bf filter you can generate -- instead, the formula gets written in the 8bf file and will be re-parsed on each use.

The very first element of the assembly code is "prolog".

Ending condition

Condition at "error" or "epilog":

eax contains the output value for the current channel
ebp is restored (was saved by "prolog")
esi is restored (was saved by "prolog")
edi is restored (was saved by "prolog")
esp is restored (was saved by "prolog")

Register usage

You may edit eax, ebx, ecx, edx, esi, (ebp?)

You may not edit edi

Stack

Contains the parameters

pop eax param2 (= [esp])
pop ebx param1 (= [esp+$04])
pop ecx param0 (= [esp+$08])

Function implementations (Resource OPER:16000:1033)

Syntax of this resource:

struct OPER {
    _operation[0..n] operations;
    _operation       padding; // must be zeroed
}

struct _operation {
    AnsiChar[8]   szOperationName;
    (u?)int16_t   asmSize;
    byte[asmSize] asmX86Code;
}

Contents of the original 3.x versions

Download dump of Filter Factory 3.0.4 for Photoshop/Windows

Function Size (dec.) Assembly code
error 3 2B C0 C3
prolog 8 55 56 57 54 8B 7C 24 14
epilog 6 58 5C 5F 5E 5D C3
number 1 68
, 1 58
? 11 58 5B 59 83 F9 00 74 02 8B C3 50
! 9 58 83 F8 01 1B C0 F7 D8 50
&& 19 58 5B 83 F8 00 B8 00 00 00 00 74 06 83 FB 00 74 01 40 50
|| 19 58 5B 83 F8 00 B8 00 00 00 00 75 05 83 FB 00 74 01 40 50
~ 4 58 F7 D0 50
& 5 58 5B 23 C3 50
| 5 58 5B 0B C3 50
^ 5 58 5B 33 C3 50
== 13 58 5B 3B C3 B8 00 00 00 00 0F 94 C0 50
!= 13 58 5B 3B C3 B8 00 00 00 00 0F 95 C0 50
< 13 58 5B 3B C3 B8 00 00 00 00 0F 9F C0 50
<= 13 58 5B 3B C3 B8 00 00 00 00 0F 9D C0 50
> 13 58 5B 3B C3 B8 00 00 00 00 0F 9C C0 50
>= 13 58 5B 3B C3 B8 00 00 00 00 0F 9E C0 50
<< 5 59 58 D3 E0 50
>> 5 59 58 D3 E8 50
negate 4 58 F7 D8 50
+ 5 58 5B 03 C3 50
- 5 5B 58 2B C3 50
* 6 58 5B 0F AF C3 50
/ 14 5B 58 0B DB 75 04 2B C0 EB 03 99 F7 FB 50
% 14 5B 58 0B DB 75 04 2B D2 EB 03 99 F7 FB 52
r 3 8B 07 50
g 4 8B 47 04 50
b 4 8B 47 08 50
a 4 8B 47 0C 50
c 10 8B 47 58 2B 47 5C 8B 04 87 50
i 55 8B 77 04 8D 34 B6 03 F6 8D 34 76 8D 34 B6 8B 4F 08 8B D1 C1 E1 03 2B CA 8D 0C 8A 03
F1 8B 07 8B C8 8D 04 C0 8D 04 41 8D 04 86 99 81 E2 FF 00 00 00 03 C2 C1 F8 08 50
u 51 8B 77 04 8B C6 8D 34 F6 8D 34 B0 F7 DE 8B 07 8B C8 8D 04 C0 8D 04 41 2B F0 8B 47 08
8B C8 C1 E0 03 2B C1 8D 04 C6 99 81 E2 FF 00 00 00 03 C2 C1 F8 08 50
v 39 8B 17 8D 14 52 03 D2 8B 4F 04 8D 0C 89 2B D1 2B 57 08 8B C2 8D 14 52 8D 04 90 99 81
E2 FF 00 00 00 03 C2 C1 F8 08 50
d 117 8B 47 54 8B 5F 48 2B 47 50 2B 5F 44 D1 E8 D1 EB F7 D8 F7 DB 33 C9 03 47 4C 79 05 F7
D8 80 C9 04 03 5F 40 79 05 F7 DB 80 C9 03 3B C3 7E 04 80 F1 01 93 0B C0 7E 1B C1 E0
0A 99 F7 F3 74 13 66 8B 84 47 76 0D 00 00 C1 E0 09 99 BB 40 24 03 00 F7 FB 66 0F BA
E1 00 73 07 F7 D8 05 00 01 00 00 66 0F BA E1 01 73 05 05 00 01 00 00 66 0F BA E1 02
73 02 F7 D8 50
m 77 8B 47 44 8B 5F 50 2B 47 48 2B 5F 54 D1 F8 D1 FB 03 47 40 03 5F 4C 8B D0 C1 FA 1F 33
C2 2B C2 8B D3 C1 FA 1F 33 DA 2B DA 3B C3 75 07 B8 0A 6A 00 00 EB 11 7E 01 93 C1 E0
0A 99 F7 F3 0F B7 84 47 78 15 00 00 F7 E3 0F AC D0 10 03 C3 50
R 6 B8 FF 00 00 00 50
G 6 B8 FF 00 00 00 50
B 6 B8 FF 00 00 00 50
A 6 B8 FF 00 00 00 50
I 6 B8 FF 00 00 00 50
U 6 B8 FF 00 00 00 50
V 6 B8 FF 00 00 00 50
C 6 B8 FF 00 00 00 50
D 6 B8 00 04 00 00 50
M 53 Version 3.00 (final) and 3.0.4
8B 47 48 8B 5F 54 2B 47 44 2B 5F 50 D1 F8 D1 FB 3B C3 75 07 B8 0A 6A 00 00 EB 11 7E
01 93 C1 E0 0A 99 F7 F3 0F B7 84 47 78 15 00 00 F7 E3 0F AC D0 10 03 C3 50
  49 Version 3.00a (beta version) and 3.00b (internal build)
8B 47 48 8B 5F 54 2B 47 44 2B 5F 50 3B C3 75 07 B8 0A 6A 00 00 EB 11 7E 01 93 C1 E0
0A 99 F7 F3 0F B7 84 47 78 15 00 00 F7 E3 0F AC D0 10 03 C3 50
x 4 8B 47 40 50
y 4 8B 47 4C 50
z 4 8B 47 58 50
X 4 8B 47 48 50
Y 4 8B 47 54 50
Z 4 8B 47 60 50
xmin 4 8B 47 44 50
(not available in the 3.00a beta version)
ymin 4 8B 47 50 50
(not available in the 3.00a beta version)
zmin 4 8B 47 5C 50
(not available in the 3.00a beta version)
rmin 3 2B C0 50
(not available in the 3.00a beta version)
tmax 6 B8 01 00 00 00 50
(not available in the 3.00a beta version)
min 9 58 59 3B C1 7C 02 8B C1 50
max 9 58 59 3B C1 7F 02 8B C1 50
abs 7 58 99 33 C2 2B C2 50
add 12 59 5B 58 03 C3 3B C1 7C 02 8B C1 50
sub 12 59 5B 58 2B C3 3B C1 7F 02 8B C1 50
dif 10 58 5B 2B C3 99 33 C2 2B C2 50
mix 32 5B 59 5A 5E 0B DB B8 00 00 00 00 74 12 8B C3 2B C1 F7 EA F7 FB 8B E8 8B C1 F7 EE F7
FB 03 C5 50
scl 39 8B 6C 24 08 8B 4C 24 0C 2B E9 8B C5 74 15 8B 04 24 8B 74 24 04 2B C6 8B 54 24 10 2B
D1 F7 EA F7 FD 03 C6 83 C4 14 50
sqr 31 5B 83 FB 01 7E 18 8B CB D1 EB B8 02 00 00 00 3B D8 7E 0B 8B C1 99 F7 F3 03 D8 D1 EB
EB F1 53
rnd 82 Version 3.00 (final) and 3.0.4
8D 9F 94 00 00 00 66 8B 43 02 66 40 66 3D 38 00 75 04 66 B8 01 00 66 89 43 02 66 8B
03 66 40 66 3D 38 00 75 04 66 B8 01 00 66 89 03 0F B7 03 8D 4C 83 04 8B 01 0F B6 53
02 2B 44 93 04 89 01 5E 59 2B F1 79 04 33 C0 EB 08 46 2B D2 F7 F6 8D 04 11 50
  76 Version 3.00a (beta version) and 3.00b (internal build)
8D 9F 94 00 00 00 66 8B 43 02 66 40 66 3D 38 00 75 04 66 B8 01 00 66 89 43 02 66 8B
03 66 40 66 3D 38 00 75 04 66 B8 01 00 66 89 03 0F B7 03 8D 4C 83 04 8B 01 0F B6 53
02 2B 44 93 04 89 01 5E 59 2B F1 46 2B D2 F7 F6 8D 04 11 50
rst 10 58 89 87 78 45 00 00 2B C0 50
(not available in the 3.00a beta version)
ctl 17 5B 2B C0 0B DB 7C 09 83 FB 07 7F 04 8B 44 9F 64 50
val 34 59 5E 5B 2B C0 0B DB 7C 18 83 FB 07 7F 13 8B 44 9F 64 2B CE 0F AF C1 B9 FF 00 00 00
99 F7 F9 03 C6 50
map 48 58 5B 0B DB 7C 27 83 FB 03 7F 22 0B C0 7D 04 2B C0 EB 0B B9 FF 00 00 00 3B C1 7E 02
8B C1 C1 E3 08 03 DF 0F B6 84 18 78 01 00 00 EB 02 2B C0 50
src 94 Version 3.00b (internal build), 3.00 (final), and 3.0.4
5A 59 5B 3B 57 5C 7C 53 3B 57 60 7D 4E 8B 77 44 3B DE 7D 02 8B DE 8B 47 48 3B D8 7C
03 8D 58 FF 8B 47 50 3B C8 7D 02 8B C8 8B 47 54 3B C8 7C 03 8D 48 FF 8B 87 A8 45 00
00 2B 57 5C 03 C2 2B 4F 50 0F AF 8F A0 45 00 00 03 C1 2B DE 8B 57 60 2B 57 5C 0F AF
DA 0F B6 04 18 EB 02 2B C0 50
  109 Version 3.00a (beta version)
5A 59 5B 3B 57 5C 7C 62 3B 57 60 7D 5D 8B B7 84 00 00 00 3B DE 7D 02 8B DE 8B 87 8C
00 00 00 3B D8 7C 03 8D 58 FF 8B 87 88 00 00 00 3B C8 7D 02 8B C8 8B 87 90 00 00 00
3B C8 7C 03 8D 48 FF 8B 87 A8 45 00 00 2B 57 5C 03 C2 2B 8F 88 00 00 00 0F AF 8F A0
45 00 00 03 C1 2B DE 8B 57 60 2B 57 5C 0F AF DA 0F B6 04 18 EB 02 2B C0 50
cnv 187 Version 3.00b (internal build), 3.00 (final), and 3.0.4
8B 04 24 0B C0 0F 84 AC 00 00 00 8B 8F A8 45 00 00 8B 47 58 2B 47 5C 03 C8 8B 47 4C
48 2B 47 50 F7 A7 A0 45 00 00 03 C8 8B 47 40 48 2B 47 44 8B 5F 60 2B 5F 5C F7 E3 03
C8 2B C0 8B D1 0F B6 32 0F AF 74 24 24 03 C6 03 D3 0F B6 32 0F AF 74 24 20 03 C6 03
D3 0F B6 32 0F AF 74 24 1C 03 C6 03 8F A0 45 00 00 8B D1 0F B6 32 0F AF 74 24 18 03
C6 03 D3 0F B6 32 0F AF 74 24 14 03 C6 03 D3 0F B6 32 0F AF 74 24 10 03 C6 03 8F A0
45 00 00 8B D1 0F B6 32 0F AF 74 24 0C 03 C6 03 D3 0F B6 32 0F AF 74 24 08 03 C6 03
D3 0F B6 32 0F AF 74 24 04 03 C6 99 F7 3C 24 83 C4 28 50
  193 Version 3.00a (beta version)
8B 04 24 0B C0 0F 84 B1 00 00 00 8B 8F A8 45 00 00 8B 47 58 2B 47 5C 03 C8 8B 47 4C
48 2B 87 88 00 00 00 F7 A7 A0 45 00 00 03 C8 8B 47 40 48 2B 87 84 00 00 00 8B 5F 60
2B 5F 5C F7 E3 03 C8 2B C0 8B D1 0F B6 32 0F AF 74 24 24 03 C6 03 D3 0F B6 32 0F AF
74 24 20 03 C6 03 D3 0F B6 32 0F AF 74 24 1C 03 C6 03 8F A0 45 00 00 8B D1 0F B6 32
0F AF 74 24 18 03 C6 03 D3 0F B6 32 0F AF 74 24 14 03 C6 03 D3 0F B6 32 0F AF 74 24
10 03 C6 03 8F A0 45 00 00 8B D1 0F B6 32 0F AF 74 24 0C 03 C6 03 D3 0F B6 32 0F AF
74 24 08 03 C6 03 D3 0F B6 32 0F AF 74 24 04 03 C6 99 F7 3C 24 83 C4 28 50
rad 158 5E 8B 04 24 8B 5C 24 04 81 E3 FF 03 00 00 0F BF 9C 5F 78 05 00 00 F7 EB 05 FF 1F 00
00 83 D2 00 8B 4F 48 0F AC D0 0E 2B 4F 44 D1 E9 03 C8 0B C9 7D 04 2B C9 EB 0A 8B 47
48 3B C8 7C 03 8D 48 FF 58 5B 81 EB 00 01 00 00 81 E3 FF 03 00 00 0F BF 9C 5F 78 05
00 00 F7 EB 05 FF 1F 00 00 83 D2 00 8B 5F 54 0F AC D0 0E 2B 5F 50 D1 EB 03 D8 0B DB
7D 04 2B DB EB 0A 8B 47 54 3B D8 7C 03 8D 58 FF 8B 57 60 2B 57 5C 03 B7 A8 45 00 00
0F AF 9F A0 45 00 00 0F AF CA 33 C0 03 D9 8A 04 1E 50
c2d 97 58 5B 33 C9 0B C0 7D 05 F7 D8 80 C9 04 0B DB 7D 05 F7 DB 80 C9 03 3B C3 7E 04 80 F1
01 93 0B C0 7E 1B C1 E0 0A 99 F7 F3 74 13 66 8B 84 47 76 0D 00 00 C1 E0 09 99 BB 40
24 03 00 F7 FB 66 0F BA E1 00 73 07 F7 D8 05 00 01 00 00 66 0F BA E1 01 73 05 05 00
01 00 00 66 0F BA E1 02 73 02 F7 D8 50
c2m 57 5B 58 8B D0 C1 FA 1F 33 C2 2B C2 8B D3 C1 FA 1F 33 DA 2B DA 3B C3 75 07 B8 0A 6A 00
00 EB 11 7E 01 93 C1 E0 0A 99 F7 F3 0F B7 84 47 78 15 00 00 F7 E3 0F AC D0 10 03 C3
50
r2x 31 58 5B 81 E3 FF 03 00 00 0F BF 9C 5F 78 05 00 00 F7 EB 05 FF 1F 00 00 83 D2 00 0F AC
D0 0E 50
r2y 37 58 5B 81 EB 00 01 00 00 81 E3 FF 03 00 00 0F BF 9C 5F 78 05 00 00 F7 EB 05 FF 1F 00
00 83 D2 00 0F AC D0 0E 50
sin 32 58 2D 00 01 00 00 8B D8 C1 FB 1F 33 C3 2B C3 25 FF 03 00 00 0F BF 84 47 78 05 00 00
C1 F8 05 50
cos 27 58 8B D8 C1 FB 1F 33 C3 2B C3 25 FF 03 00 00 0F BF 84 47 78 05 00 00 C1 F8 05 50
tan 60 58 8B D8 0B DB 7D 02 F7 DB 81 E3 FF 03 00 00 0F BF 9C 5F 78 05 00 00 2D 00 01 00 00
79 02 F7 D8 25 FF 03 00 00 0F BF 84 47 78 05 00 00 0B DB 75 04 33 C0 EB 06 C1 E0 0A
99 F7 FB 50
get 20 58 0B C0 7C 0E 3D FF 00 00 00 7F 07 8B 84 87 78 35 00 00 50
put 21 58 5B 0B C0 7C 0E 3D FF 00 00 00 7F 07 89 9C 87 78 35 00 00 53

Disassembling of each function

At the page Functions you will find a list of all functions. Click the function to see the disassembly of each function, as well as additional information.

Note: I am using the Delphi ASM syntax. This means that $10 = 10h = 16