Instructions by Category

Pushing data onto the interpreter stack

Instruction

Opcode

Takes from IS

Pushes

NPUSHB[ ]

0x40

n, b1, b2,...bn

b1,b2...bn

NPUSHW[ ]

0x41

n, w1, w2,...wn

w1,w2...wn

PUSHB[abc]

0xB0 – 0xB7

b0, b1,..bn

b0, b1, ...,bn

PUSHW[abc]

0xB8 – 0xBF

w0,w1,..wn

w0 ,w1, ...wn


Managing the Storage Area

Instruction

Opcode

Pops

Pushes

RS[ ]

0x43

location

value

WS[ ]

0x42

value, locat ion


Managing the Control Value Table

Instruction

Opcode

Pops

Pushes

WCVTP[ ]

0x44

value, location

WCVTF[ ]

0x70

value, location

RCVT[ ]

0x45

location

value


Managing the Graphics State

Setting and getting the freedom_vector and the projection_vector

Instruction

Opcode

Pops

Pushes

SVTCA[a]

0x00 – 0x01

SPVTCA[a]

0x02 – 0x03

SFVTCA[a]

0x04 – 0x05

SPVTL[a]

0x06 – 0x07

p1, p2

SFVTL[a]

0x08 – 0x09

p1, p2

SFVTPV[ ]

0x0E

SDPVTL[a]

0x86 – 0x87

p1, p2

SPVFS[ ]

0x0A

y, x

SFVFS[ ]

0x0B

y, x

GPV[ ]

0x0C

x, y

GFV[ ]

0x0D

x, y


Setting reference points and glyph element pointers

Instruction

Opcode

Pops

Pushes

SRP0[ ]

0x10

p

SRP1[ ]

0x11

p

SRP2[ ]

0x12

p

SZP0[ ]

0x13

n

SZP1[ ]

0x14

n

SZP2[ ]

0x15

n

SZPS[ ]

0x16

n


Setting the round_state

Instruction

Opcode

Pops

Pushes

RTHG[ ]

0x19

RTG[ ]

0x18

RTDG[ ]

0x3D

RDTG[ ]

0x7D

RUTG[ ]

0x7C

ROFF[ ]

0x7A

SROUND[ ]

0x76

n

S45ROUND[ ]

0x77

n


Setting other graphics state variables

Instruction

Opcode

Pops

Pushes

INSTCTRL

0x8E

selector and value

SLOOP[ ]

0x17

n

SMD[ ]

0x1A

distance

SCANCTRL[ ]

0x85

n

SCANTYPE[ ]

0x8D

n

SCVTCI[ ]

0x1D

n

SSWCI[ ]

0x1E

n

SSW[ ]

0x1F

n

FLIPON[ ]

0x4D

FLIPOFF[ ]

0x4E

SANGW[ ]

0x7E

weight

SDB[ ]

0x5E

n

SDS[ ]

0x5F

n


Reading and Writing Data

Instruction

Opcode

Pops

Pushes

GC[a]

0x46 – 0x47

p

value

SCFS[ ]

0x48

value, p

MD[a]

0x49 – 0x4A

p1,p2

distance

MPPEM[ ]

0x4B

ppem

MPS[ ]

0x4C

pointSize


Managing Outlines

Flipping Points

Instruction

Opcode

Pops

Pushes

FLIPRGON[ ]

0x81

highpoint, lowpoint

FLIPRGOFF[ ]

0x82

highpoint, lowpoint

FLIPPT[ ]

0x80

p


Shifting Points

Instruction

Opcode

Pops

Pushes

SHC[a]

0x34 – 0x35

c

SHZ[a]

0x36 – 0x37

e

SHPIX[ ]

0x38

p1, p2, amount

SHP

0x32 – 0x33

p


Moving Points

Instruction

Opcode

Pops

Pushes

MDAP[ a ]

0x2E – 0x2F

p

MIAP[a]

0x3E – 0x3F

n, p

MDRP[abcde]

0xC0 – 0xDF

p

MIRP[abcde]

0xE0 – 0xFF

n, p

ALIGNRP[ ]

0x3C

p1, p2, ... , ploop

AA[ ]

0x7F

p

ISECT[ ]

0x0F

a1, a0, b1, b0, p

ALIGNPTS[ ]

0x27

p1, p2


Interpolating Points

Instruction

Opcode

Pops

Pushes

UTP[ ]

0x29

p

IUP[a]

0x30 – 0x31


Managing Exceptions

Instruction

Opcode

Pops

Pushes

DELTAP1[ ]

0x5D

n, p1, arg1, ..., pn, argn

DELTAP2[ ]

0x71

n, p1, arg1, ..., pn, argn

DELTAP3[ ]

0x72

n, p1, arg1, ..., pn, argn

DELTAC1[ ],

0x73

n, c1, arg1, ..., cn, argn

DELTAC2[ ]

0x74

n, c1, arg1, ..., cn, argn

DELTAC3[ ]

0x75

n, c1, arg1, ..., cn, argn


Managing the stack

Instruction

Opcode

Pops

Pushes

DUP[ ]

0x20

e

e, e

POP[ ]

0x21

e

CLEAR[ ]

0x22

all items on the stack

SWAP[ ]

0x23

e1, e2

e1, e2

DEPTH[ ]

0x24

n

CINDEX[ ]

0x25

k

ek

MINDEX[ ]

0x26

k, e1, e2, ..., ek

ek–1, ek–2, ..., e1, ek

ROLL

0x8a


Logical functions

Instruction

Opcode

Pops

Pushes

LT[ ]

0x50

e1, e2

(e2 < e1 Boolean value

LTEQ[ ]

0x51

e1, e2

(e2 e1) Boolean value

GT[ ]

0x52

e1, e2

(e2 > e1) Boolean value

GTEQ[ ]

0x53

e1, e2

(e2 e1) Boolean value

EQ[ ]

0x54

e1, e2

(e2 = e1) Boolean value

NEQ[ ]

0x55

e1, e2

(e2 e1) Boolean value

ODD[ ]

0x56

e

(e mod 2) = 1
Boolean value

EVEN[ ]

0x57

e

(e mod 2) = 0
Boolean value

AND[ ]

0x5A

e1, e2

( e2 and e1 )
Boolean value

OR[ ]

0x5B

e1, e2

( e2 or e1 )Boolean value

NOT[ ]

0x5C

e

( not e )Boolean value


Managing the flow of control

Instruction

Opcode

Pops

Pushes

IF[ ]

0x58

e

EIF[ ]

0x59

ELSE

0x1B

JMPR

0x1C

offset

JROT[ ]

0x78

e, offset

JROF[ ]

0x79

e, offset


Arithmetic functions

Instruction

Opcode

Pops

Pushes

ADD[ ]

0x60

n1, n2

(n1 + n2)

SUB[ ]

0x61

n1, n2

(n2 – n1)

DIV[ ]

0x62

n1, n2

(n2 ¥ 64)/ n1

MUL[ ]

0x63

n1, n2

(n1 ¥ n2)/64

ABS[ ]

0x64

n

|n|

NEG[ ]

0x65

n1

–n1

FLOOR[ ]

0x66

n1

n

CEILING[ ]

0x67

n1

n

MAX[ ]

0X8B

e1, e2

max(e1, e2)

MIN[ ]

0X8C

e1, e2

min(e1, e2)


Compensating for the engine characteristics

Instruction

Opcode

Pops

Pushes

ROUND[ab]

0x68 – 0x6B

n1

n2

NROUND[ab]

0x6C – 0x6F

n1

n2


Defining and using functions and instructions

Instruction

Opcode

Pops

Pushes

FDEF[ ]

0x2C

f

ENDF[ ]

0x2D

CALL[ ]

0x2B

f

LOOPCALL[ ]

0x2A

f, count

IDEF[ ]

0x89

o


Debugging

Instruction

Opcode

Pops

Pushes

DEBUG[ ]

0x4F

opcode


Miscellaneous

Instruction

Opcode

Pops

Pushes

GETINFO[ ]

0x88

selector

result