Instruction Set Summary

Appendix B
Instruction Set Summary
Instructions by Category
Pushing data onto the interpreter stack
Instruction
NPUSHB[ ]
NPUSHW[ ]
PUSHB[abc]
PUSHW[abc]
Opcode
0x40
0x41
0xB0 – 0xB7
0xB8 – 0xBF
Takes from IS
n, b1, b2,...bn
n, w1, w2,...wn
b0, b1,..bn
w0,w1,..wn
Pushes
b1,b2...bn
w1,w2...wn
b0, b1, ...,bn
w0 ,w1, ...wn
Pops
location
value, locat ion
Pushes
value
–
Managing the Storage Area
Instruction
RS[ ]
WS[ ]
Opcode
0x43
0x42
Managing the Control Value Table
Instruction
WCVTP[ ]
WCVTF[ ]
RCVT[ ]
Opcode
0x44
0x70
0x45
Pops
value, location
value, location
location
Pushes
–
–
value
Managing the Graphics State
Setting and getting the freedom_vector and the projection_vector
Instruction
SVTCA[a]
SPVTCA[a]
SFVTCA[a]
SPVTL[a]
SFVTL[a]
SFVTPV[ ]
SDPVTL[a]
SPVFS[ ]
SFVFS[ ]
GPV[ ]
GFV[ ]
Revision 1.66
File Name: 81919596
Opcode
0x00 – 0x01
0x02 – 0x03
0x04 – 0x05
0x06 – 0x07
0x08 – 0x09
0x0E
0x86 – 0x87
0x0A
0x0B
0x0C
0x0D
Pops
–
–
–
p1, p2
p1, p2
–
p1, p2
y, x
y, x
–
–
Pushes
–
–
–
–
–
–
–
–
–
x, y
x, y
Page 377
Instruction Set Summary
Setting reference points and glyph element pointers
Instruction
SRP0[ ]
SRP1[ ]
SRP2[ ]
SZP0[ ]
SZP1[ ]
SZP2[ ]
SZPS[ ]
Opcode
0x10
0x11
0x12
0x13
0x14
0x15
0x16
Pops
p
p
p
n
n
n
n
Pushes
–
–
–
–
–
–
–
Pops
–
–
–
–
–
–
n
n
Pushes
–
–
–
–
–
–
–
–
Pops
selector and value
n
distance
n
n
n
n
n
–
–
weight
n
n
Pushes
–
–
–
–
–
–
–
–
–
–
–
–
–
Pops
p
value, p
p1,p2
Pushes
value
–
distance
Setting the round_state
Instruction
RTHG[ ]
RTG[ ]
RTDG[ ]
RDTG[ ]
RUTG[ ]
ROFF[ ]
SROUND[ ]
S45ROUND[ ]
Opcode
0x19
0x18
0x3D
0x7D
0x7C
0x7A
0x76
0x77
Setting other graphics state variables
Instruction
INSTCTRL
SLOOP[ ]
SMD[ ]
SCANCTRL[ ]
SCANTYPE[ ]
SCVTCI[ ]
SSWCI[ ]
SSW[ ]
FLIPON[ ]
FLIPOFF[ ]
SANGW[ ]
SDB[ ]
SDS[ ]
Opcode
0x8E
0x17
0x1A
0x85
0x8D
0x1D
0x1E
0x1F
0x4D
0x4E
0x7E
0x5E
0x5F
Reading and Writing Data
Instruction
GC[a]
SCFS[ ]
MD[a]
Page 378
Opcode
0x46 – 0x47
0x48
0x49 – 0x4A
Revision 1.66
File Name: 81919596
Instruction Set Summary
MPPEM[ ]
MPS[ ]
–
–
ppem
pointSize
Opcode
0x81
0x82
0x80
Pops
highpoint, lowpoint
highpoint, lowpoint
p
Pushes
–
–
–
Opcode
0x34 – 0x35
0x36 – 0x37
0x38
0x32 – 0x33
Pops
c
e
p1, p2, amount
p
Pushes
–
–
–
–
Opcode
0x2E – 0x2F
0x3E – 0x3F
0xC0 – 0xDF
0xE0 – 0xFF
0x3C
0x7F
0x0F
0x27
Pops
p
n, p
p
n, p
p1, p2, ... , ploop
p
a1, a0, b1, b0, p
p1, p2
Pushes
–
–
–
–
–
–
–
–
Pops
p
–
Pushes
–
–
Pops
n, p1, arg1, ..., pn,
argn
n, p1, arg1, ..., pn,
argn
Pushes
–
0x4B
0x4C
Managing Outlines
Flipping Points
Instruction
FLIPRGON[ ]
FLIPRGOFF[ ]
FLIPPT[ ]
Shifting Points
Instruction
SHC[a]
SHZ[a]
SHPIX[ ]
SHP
Moving Points
Instruction
MDAP[ a ]
MIAP[a]
MDRP[abcde]
MIRP[abcde]
ALIGNRP[ ]
AA[ ]
ISECT[ ]
ALIGNPTS[ ]
Interpolating Points
Instruction
UTP[ ]
IUP[a]
Opcode
0x29
0x30 – 0x31
Managing Exceptions
Instruction
DELTAP1[ ]
Opcode
0x5D
DELTAP2[ ]
0x71
Revision 1.66
File Name: 81919596
–
Page 379
Instruction Set Summary
DELTAP3[ ]
0x72
DELTAC1[ ],
DELTAC2[ ]
DELTAC3[ ]
0x73
0x74
0x75
n, p1, arg1, ..., pn,
argn
n, c1, arg1, ..., cn, argn
n, c1, arg1, ..., cn, argn
n, c1, arg1, ..., cn, argn
–
Pops
e
e
all items on the stack
e1, e2
–
k
k, e1, e2, ..., ek
–
Pushes
e, e
–
–
e1, e2
n
ek
ek–1, ek–2, ..., e1, ek
–
Pushes
(e2 < e1 Boolean
value
(e2  e1) Boolean
value
(e2 > e1) Boolean
value
(e2  e1) Boolean
value
(e2 = e1) Boolean
value
(e2  e1) Boolean
value
(e mod 2) = 1
Boolean value
(e mod 2) = 0
Boolean value
( e2 and e1 )
Boolean value
( e2 or e1 )Boolean
value
( not e )Boolean value
–
–
–
Managing the stack
Instruction
DUP[ ]
POP[ ]
CLEAR[ ]
SWAP[ ]
DEPTH[ ]
CINDEX[ ]
MINDEX[ ]
ROLL
Opcode
0x20
0x21
0x22
0x23
0x24
0x25
0x26
0x8a
Logical functions
Instruction
LT[ ]
Opcode
0x50
Pops
e1, e2
LTEQ[ ]
0x51
e1, e2
GT[ ]
0x52
e1, e2
GTEQ[ ]
0x53
e1, e2
EQ[ ]
0x54
e1, e2
NEQ[ ]
0x55
e1, e2
ODD[ ]
0x56
e
EVEN[ ]
0x57
e
AND[ ]
0x5A
e1, e2
OR[ ]
0x5B
e1, e2
NOT[ ]
0x5C
e
Page 380
Revision 1.66
File Name: 81919596
Instruction Set Summary
Managing the flow of control
Instruction
IF[ ]
EIF[ ]
ELSE
JMPR
JROT[ ]
JROF[ ]
Opcode
0x58
0x59
0x1B
0x1C
0x78
0x79
Pops
e
–
Pushes
–
–
offset
e, offset
e, offset
–
–
Pops
n1, n2
n1, n2
n1, n2
n1, n2
n
n1
n1
n1
e1, e2
e1, e2
Pushes
(n1 + n2)
(n2 – n1)
(n2 ¥ 64)/ n1
(n1 ¥ n2)/64
|n|
–n1
n
n
max(e1, e2)
min(e1, e2)
Arithmetic functions
Instruction
ADD[ ]
SUB[ ]
DIV[ ]
MUL[ ]
ABS[ ]
NEG[ ]
FLOOR[ ]
CEILING[ ]
MAX[ ]
MIN[ ]
Opcode
0x60
0x61
0x62
0x63
0x64
0x65
0x66
0x67
0X8B
0X8C
Compensating for the engine characteristics
Instruction
ROUND[ab]
NROUND[ab]
Opcode
0x68 – 0x6B
0x6C – 0x6F
Pops
n1
n1
Pushes
n2
n2
Defining and using functions and instructions
Instruction
FDEF[ ]
ENDF[ ]
CALL[ ]
LOOPCALL[ ]
IDEF[ ]
Opcode
0x2C
0x2D
0x2B
0x2A
0x89
Pops
f
–
f
f, count
o
Pushes
–
–
–
–
–
Opcode
0x4F
Pops
opcode
Pushes
–
Debugging
Instruction
DEBUG[ ]
Revision 1.66
File Name: 81919596
Page 381
Instruction Set Summary
Miscellaneous
Instruction
GETINFO[ ]
Page 382
Opcode
0x88
Pops
selector
Pushes
result
Revision 1.66
File Name: 81919596
Instruction Set Summary
Instructions by Name
Instruction
AA[ ]
ABS[ ]
ADD[ ]
ALIGNPTS[ ]
ALIGNRP[ ]
AND[ ]
Opcode
0x7F
0x64
0x60
0x27
0x3C
0x5A
CALL[ ]
CEILING[ ]
CINDEX[ ]
CLEAR[ ]
DEBUG[ ]
DELTAC1[ ],
DELTAC2[ ]
DELTAC3[ ]
DELTAP1[ ]
0x2B
0x67
0x25
0x22
0x4F
0x73
0x74
0x75
0x5D
DELTAP2[ ]
0x71
DELTAP3[ ]
0x72
DEPTH[ ]
DIV[ ]
DUP[ ]
EIF[ ]
ELSE
ENDF[ ]
EQ[ ]
0x24
0x62
0x20
0x59
0x1B
0x2D
0x54
EVEN[ ]
0x57
e
FDEF[ ]
FLIPOFF[ ]
FLIPON[ ]
FLIPPT[ ]
FLIPRGOFF[ ]
FLIPRGON[ ]
FLOOR[ ]
GC[a]
GETINFO[ ]
GFV[ ]
0x2C
0x4E
0x4D
0x80
0x82
0x81
0x66
0x46 – 0x47
0x88
0x0D
f
–
–
p1, p2, ..., ploop
highpoint, lowpoint
highpoint, lowpoint
n1
p
selector
–
Revision 1.66
File Name: 81919596
Takes from IS
p
n
n1, n2
p1, p2
p1, p2, ... , ploop
e1, e2
Pushes
–
|n|
(n1 + n2)
–
–
( e2 and e1 )
Boolean value
f
–
n1
n
k
ek
all items on the stack
–
opcode
–
n, c1, arg1, ..., cn, argn –
n, c1, arg1, ..., cn, argn –
n, c1, arg1, ..., cn, argn –
n, p1, arg1, ..., pn,
–
argn
n, p1, arg1, ..., pn,
–
argn
n, p1, arg1, ..., pn,
–
argn
–
n
n1, n2
(n2 * 64)/ n1
e
e, e
–
–
–
e1, e2
–
(e2= e1) Boolean
value
(e mod 2) = 0
Boolean value
–
–
–
–
–
–
n
value
result
x, y
Page 383
Instruction Set Summary
GPV[ ]
GT[ ]
0x0C
0x52
–
e1, e2
GTEQ[ ]
0x53
e1, e2
IDEF[ ]
IF[ ]
INSTCTRL
IP[ ]
ISECT[ ]
IUP[a]
JMPR
JROF[ ]
JROT[ ]
LOOPCALL[ ]
LT[ ]
0x89
0x58
0x8E
0x39
0x0F
0x30 – 0x31
0x1C
0x79
0x78
0x2A
0x50
o
e
value
p1, p2, ... , ploop
a1, a0, b1, b0, p
–
offset
e, offset
e, offset
f, count
e1, e2
LTEQ[ ]
0x51
e1, e2
MAX[ ]
MD[a]
MDAP[ a ]
MDRP[abcde]
MIAP[a]
MIN[ ]
MINDEX[ ]
MIRP[abcde]
MPPEM[ ]
MPS[ ]
MSIRP[a]
MUL[ ]
NEG[ ]
NEQ[ ]
0X8B
0x49 – 0x4A
0x2E – 0x2F
0xC0 – 0xDF
0x3E – 0x3F
0X8C
0x26
0xE0 – 0xFF
0x4B
0x4C
0x3A – 0x3B
0x63
0x65
0x55
e1, e2
p1,p2
p
p
n, p
e1, e2
k, e1, e2, ..., ek
n, p
–
–
distance, p
n1, n2
n1
e1, e2
NOT[ ]
NPUSHB[ ]
NPUSHW[ ]
NROUND[ab]
ODD[ ]
0x5C
0x40
0x41
0x6C – 0x6F
0x56
e
n, b1, b2,...bn
n, w1, w2,...wn
n1
e
OR[ ]
0x5B
e1, e2
POP[ ]
PUSHB[abc]
0x21
0xB0 – 0xB7
e
b0, b1,..bn
Page 384
x, y
(e2 > e1) Boolean
value
(e2  e1) Boolean
value
–
–
–
–
–
–
–
–
–
(e2 < e1 Boolean
value
(e2  e1) Boolean
value
max(e1, e2)
distance
–
–
–
min(e1, e2)
ek–1, ek–2, ..., e1, ek
–
ppem
pointSize
–
(n1 ¥ n2)/64
–n1
(e2  e1) Boolean
value
( not e )Boolean value
b1,b2...bn
w1,w2...wn
n2
(e mod 2) = 1
Boolean value
( e2 or e1 )Boolean
value
–
b0, b1, ...,bn
Revision 1.66
File Name: 81919596
Instruction Set Summary
PUSHW[abc]
RCVT[ ]
RDTG[ ]
ROFF[ ]
ROLL
ROUND[ab]
RS[ ]
RTDG[ ]
RTG[ ]
RTHG[ ]
RUTG[ ]
S45ROUND[ ]
SANGW[ ]
SCANCTRL[ ]
SCANTYPE[ ]
SCFS[ ]
SCVTCI[ ]
SDB[ ]
SDPVTL[a]
SDS[ ]
SFVFS[ ]
SFVTCA[a]
SFVTL[a]
SFVTPV[ ]
SHC[a]
SHP[a]
SHPIX[ ]
SHZ[a]
SLOOP[ ]
SMD[ ]
SPVFS[ ]
SPVTCA[a]
SPVTL[a]
SROUND[ ]
SRP0[ ]
SRP1[ ]
SRP2[ ]
SSW[ ]
SSWCI[ ]
SUB[ ]
SVTCA[a]
SWAP[ ]
SZP0[ ]
SZP1[ ]
Revision 1.66
File Name: 81919596
0xB8 – 0xBF
0x45
0x7D
0x7A
0x8a
0x68 – 0x6B
0x43
0x3D
0x18
0x19
0x7C
0x77
0x7E
0x85
0x8D
0x48
0x1D
0x5E
0x86 – 0x87
0x5F
0x0B
0x04 – 0x05
0x08 – 0x09
0x0E
0x34 – 0x35
0x32 – 0x33
0x38
0x36 – 0x37
0x17
0x1A
0x0A
0x02 – 0x03
0x06 – 0x07
0x76
0x10
0x11
0x12
0x1F
0x1E
0x61
0x00 – 0x01
0x23
0x13
0x14
w0,w1,..wn
location
–
–
–
n1
location
–
–
–
–
n
weight
n
n
value, p
n
n
p1, p2
n
y, x
–
p1, p2
–
c
p1, p2, ..., ploop
p1, p2, amount
e
n
distance
y, x
–
p1, p2
n
p
p
p
n
n
n1, n2
–
e1, e2
n
n
w0 ,w1, ...wn
value
–
–
–
n2
value
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
(n2 – n1)
–
e1, e2
–
–
Page 385
Instruction Set Summary
SZP2[ ]
SZPS[ ]
UTP[ ]
WCVTF[ ]
WCVTP[ ]
WS[ ]
Page 386
0x15
0x16
0x29
0x70
0x44
0x42
n
n
p
value, location
value, location
value, location
–
–
–
–
–
–
Revision 1.66
File Name: 81919596