DELTA*1 | delta_base through delta_base + 15 ppem |
DELTA*2 | delta_base + 16 ppem through delta_base + 31 ppem |
DELTA*3 | delta_base + 32 ppem through delta_base + 47 ppem |
Note:
Always observe that DELTA instructions expect the argument list to be sorted according to ppem. The lowest ppem should be deepest on the stack, and the highest ppem should be topmost on the stack.
In the descriptions of the instructions that follow, pi is a point number, ci is a Control Value Table entry number and argi is a byte composed of two parts: the relative ppem (ppem – delta_base) and the magnitude of the exception. Increasing the delta_shift will allow for more fine control over pixel movement at the sacrifice of total range of movement. A step is the minimal amount that a delta instruction can move a point. Points can be moved in integral multiples of steps. The size of a step is 1 divided by 2 to the power delta_shift. The range of movement produced by a given delta_shift can be calculated by taking the number of steps allowed (16) and dividing it by 2 to the power delta_shift. For example, a delta_shift equal to 2 allows the smallest movement to be ± 1/4 pixel (because 22 equals 4) and the largest movement to be ± 2 pixels (16/4 = 4 pixels of movement). A delta_shift of 5 allows the smallest movement to be ± 1/32 pixel (because 25 equals 32), but the largest movement is limited to ± 1/4 pixel. (16/32 = 1/2 a pixel of movement). Internally, the value obtained for the exception is stored as a 4 bit binary number. As a result, the desired output range must be converted to a number between 0 and 15 before being converted to binary. Here is the internal remapping table for the DELTA instructions.Note:
that zero is lacking in the output range.
Number of Steps | Ú | Exception |
-8 | 0 | |
-7 | 1 | |
-6 | 2 | |
-5 | 3 | |
-4 | 4 | |
-3 | 5 | |
-2 | 6 | |
-1 | 7 | |
1 | 8 | |
2 | 9 | |
3 | 10 | |
4 | 11 | |
5 | 12 | |
6 | 13 | |
7 | 14 | |
8 | 15 |
Code Range | 0x5D |
Pops | n: number of pairs of exception specifications and points (ULONG) |
p1, arg1, p2, arg2, ..., pn, argn: n pairs of exception specifications and points (pairs of ULONGs) | |
Pushes | – |
Uses | zp0, delta_base, delta_shift |
Code Range | 0x71 |
Pops | n: number of pairs of exception specifications and points (ULONG) |
p1, arg1, p2, arg2, ..., pn, argn: n pairs of exception specifications and points (pairs of ULONGs) | |
Pushes | – |
Uses | zp0, delta_shift, delta_base |
Code Range | 0x72 |
Pops | n: number of pairs of exception specifications and points (ULONG) |
p1, arg1, p2, arg2, ..., pn, argn: n pairs of exception specifications and points (pairs of ULONGs) | |
Pushes | – |
Uses | zp0, delta_base, delta_shift |
Code Range | 0x73 |
Pops | n: number of pairs of exception specifications and CVT entry numbers (ULONG) |
c1, arg1, c2, arg2,..., cn, argn: (pairs of ULONGs) | |
Pushes | – |
Code Range | 0x74 |
Pops | n: number of pairs of exception specifications and CVT entry numbers |
(ULONG) | |
c1, arg1, c2, arg2,..., cn, argn: (pairs of ULONGs) | |
Pushes | – |
Code Range | 0x75 |
Pops | n: number of pairs of CVT entry numbers and exception |
specifications (ULONG) | |
c1, arg1, c2 arg2,..., cn, argn: pairs of CVT entry number and exception | |
specifications (pairs of ULONGs) | |
Pushes | – |