Method and apparatus for displaying a page with graphics information on a continuous synchronous raster output device5502804Abstract An apparatus and method used to perform image rendering in a manner which is capable of producing complex, high resolution page images where a continuous synchronous raster image output device, such as a laser printer, using a minimum of random access memory. The invented technique decomposes basic graphics functions into a compact series of orders commands suitable for real time processing and then generates the output page image in real time. The graphic content of a page is defined in much less memory then the rendered image would otherwise require, but is in a form that can be processed and deliver to the output device at the speed required by the output device. This is accomplished by the use of graphics functions which are represented as low level primitives which can be converted to bit mapped images in real time. Additionally, the number of commands which need to be processed and delivered is reduced by eliminating redundant or overlapping graphics functions to minimize the memory used by the commands. Claims We claim: Description SUMMARY OF THE INVENTION
TABLE 1
______________________________________
Page Image Address for Duplex Printing Applications
Bottom Right Page Image Address Required
To Top To Left
______________________________________
0 0 Top leftmost pixel in page image
0 1 Top rightmost pixel in page image
1 0 Bottom leftmost pixel in page image
1 1 Bottom rightmost pixel in page image.
______________________________________
2.4 INTERRUPTS PBC contains 8 possible sources of interrupts. The least significant 8 bits of the Interrupt Event Register indicate the specific source of the interrupt. The Interrupt Event Register when read, will indicate the PBC interrupt source. Reading this register will reset all bits in the Interrupt Event Register and will also deassert the microprocessor interrupt The upper half of the Event register contains status bits that provide greater detail on the actual source of the interrupt. PBC incorporates an Interrupt Mask Register. This 8 bit register contains a mask bit for each of the 8 possible interrupt sources in PBC. The mask bits in this register directly correspond to the least significant 8 bits in the Interrupt Event Register. Setting a bit in the Interrupt Mask Register will prevent the corresponding interrupt event from generating an interrupt. The mask bits only prevent the assertion of their respective interrupts. The interrupt event will be recorded in the Interrupt Event Register regardless of the state of the bit in the Interrupt Mask Register. The Graphics Execution Unit generates an interrupt when it becomes idle upon completion of the execution of a display list and the Display List Address register is empty. If the Graphics Execution Unit detected an error during the execution of a display list, both BLT DONE and BLT ERROR are set. The Graphics Execution Unit must be reset after a BLT ERROR is returned (see section 2.5, below). The Print Engine Video Controller has two sources for interrupts: BAND BEGIN and PAGE END. BAND BEGIN is generated at the start of a page or band. The exact timing of the BAND BEGIN interrupt is dependent on the position within the printed page. If the Print Engine Video Controller is waiting for an FSYNC at the top of a page, then BAND BEGIN is generated immediately after FSYNC is received from the print engine. If the page is being rendered in bands and the Print Engine Video Controller is on a band further down the page, then BAND BEGIN is generated immediately after the last parameter of the PCB is read from memory. PAGE END is generated in response to a PCB with LAST BAND set immediately after the last word of the last scanline is read from memory. Three additional bits are present in the upper half of the Interrupt Event register: VIDEO UNDER, BAND UNDER, and PRINT ERROR. These bits are status bits, not interrupt sources. These bits are valid when the BAND BEGIN or PAGE END bits are asserted. A full explanation of these bits is provided in the following section. 2.5 ERROR RESPONSES The Graphics Execution Unit can detect errors in graphic orders or during the execution of a display list. Upon detection of an error, the Graphics Execution Unit immediately stops executing the display list and sets both BLT DONE and BLT ERROR in the Interrupt Event register. The Graphic Order Instruction Pointer will be pointing to the second byte of the graphic order in error. The Graphics Execution Unit must be soft reset after the detection of an error to enable further operation. The Print Engine Video Controller can detect three types of errors. The Print Engine Video Controller does not stop when an error is detected, it simply sets the error status bits in the Interrupt Event Register and continues. The three types of errors that can be detected by the Print Engine Video Controller are VIDEO UNDER, BAND UNDER, and PRINT ERROR. VIDEO UNDER indicates that a video underrun occurred during the previous band (or page). This error occurs if the print engine requests video data faster than the Video Controller can access memory. BAND UNDER indicates a banding error. This error occurs when the Print Engine Video Controller is between bands, and an LSYNC was received from the print engine (1) before another PCB address was received, or (2) while the Print Engine Video Controller is busy reading the PCB parameters or the first words of the page image. Band underruns usually point to a page description that is too complicated for the given banding environment. PRINT ERROR indicates that a miscellaneous error occurred during the print process; the Print Engine Video Controller should be reset after a PRINT ERROR is returned. GRAPHIC ORDER OVERVIEW The PBC's Graphics Execution Unit operates on lists of commands, termed a display list, which consists of a sequence of graphic orders. A graphic order directs the PBC to perform a discrete function, from setting internal environment registers, to executing bit-block or scanline transfers. The PBC's graphic order instruction set is shown in Table 2.
TABLE 2
__________________________________________________________________________
PBC Graphic Order Instruction Set
__________________________________________________________________________
INITIALIZATION
SET.sub.-- BBMAP
Set banded destination bitmap parameters
ORDERS SET.sub.-- UBMAP
Set unbanded destination bitmap parameters
SET.sub.-- SBMAP
Set source bitmap parameters
SET.sub.-- HTBMAP
Set halftone bitmap parameters
SET.sub.-- BOOL.sub.-- D
Set boolean code for "one op" graphic orders
SET.sub.-- BOOL-HD
Set boolean code for "two op" halftone/destination
orders
SET.sub.-- BOOL.sub.-- SD
Set boolean code for "two op" source/destination
orders
SET.sub.-- BOOL-SHD
Set boolean code for "three op" graphic orders
FLOW JUMP Jump to specified graphic order in display list
CONTROL
ORDERS STOP Stop execution of display list
BITBLT ORDERS
BLT2F.sub.-- D
"One op" bitBLT to frame
BLT2F.sub.-- SD
"Two op" bitBLT to frame
BLT2F.sub.-- SHD
"Three op" bitBLT to frame
BLT2UB.sub.-- D
"One op" bitBLT to unbanded bitmap
BLT2UB.sub.-- SD
"Two op" bitBLT to unbanded bitmap
BLT2UB.sub. -- SHD
"Three op" bitBLT to unbanded bitmap
BLT2BB.sub.-- D
"One op" bitBLT to banded bitmap
BLT2BB.sub.-- SD
"Two op" bitBLT to banded bitmap
BLT2BB.sub.-- SHD
"Three op" bitBLT to banded bitmap
SCANLINE ORDERS
SL2F.sub.-- D
Scanline transfer to frame
SL2F.sub.-- HD
Scanline transfer to frame with halftone
SL2UB.sub.-- D
Scanline transfer to unbanded bitmap
SL2UB.sub.-- HD
Scanline transfer to unbanded bitmap with halftone
SL2BB.sub.-- D
Scanline transfer to banded bitmap
SL2BB.sub.-- HD
Scanline transfer to banded bitmap with
__________________________________________________________________________
halftone
There are four types of graphic orders: initialization, program flow control, bitBLT (bit-block transfer), and scanline transfer. The initialization graphic orders and the bitBLT graphic orders are processed as a stream of instructions from the display list. The scanline graphic orders include a pointer to a scanline table, which is a compressed run-length encoding of an image, such as a font character. Both the graphic orders and scanline tables normally reside in DRAM. The source operands of bitBLT or scanline graphic orders can reside in DRAM or I/O space (e.g., a font cartridge), but not EPROM space (EPROM data does not pass through the PBC). The destination of the transfer is always a bitmap that lives in DRAM. 3.1 BITBLT OPERATION A bit-block transfer (bitBLT) involves operating on a specified rectangle on one or more specified bitmaps. The specified rectangle, termed a "frame", is generally a subset of the destination bitmap. It may or may not be a subset of the source bitmap. When the destination bitmap is a banded bitmap, the transfer terminates prematurely if the frame extends below the bottom of the band. This is considered a band fault. (The transfer will resume when the display list is rerun to render the next band of page image.) 3.2 SCANLINE OPERATION A scanline transfer involves operating on a specified set of scanline runs on one or more specified bitmaps. The set of scanline runs is defined by a scanline table, which contains a series of bitstring specifiers. Each bitstring specifier is a compressed run-length encoding of scanline run. The compressed format of scanline tables not only save memory, but also improve performance since less memory fetches have to be performed. Since the set of scanline runs determines what portions of the specified bitmaps are modified, the scanline transfer allows non-rectangular regions to be specified. This is accomplished by describing the non-rectangular region to be modified as a set of scanline runs. The scanline runs themselves specify the "frame". When the destination bitmap is a banded bitmap, the transfer terminates prematurely if the scanline frame extends below the bottom of the band. This is considered a band fault. (Execution of the scanline table will resume when the display list is rerun to render the next band of page image.) 3.3 INITIALIZATION ORDERS Initialization graphic orders define bitmap parameters and boolean codes to be used during bitBLT and scanline transfers. The PBC allows four different bitmaps to be defined simultaneously: a banded bitmap, an unbanded bitmap, a source bitmap, and a halftone bitmap. There is a SET.sub.-- BMAP order for each type of bitmap. Bitmap parameters thus set are used by all subsequent graphic orders that operate on the given bitmap. Since several transfers typically operate on the same bitmap, compaction of the display list is achieved by specifying a bitmap's parameters only once per set of graphic orders. The same practice is used for defining boolean codes. Four boolean codes may be defined simultaneously, one each for (1) destination only transfers, (2) halftone and destination transfers, (3) source and destination transfers, and (4) source, halftone, and destination transfers. There is a SET.sub.-- BOOL order for each combination. Since several transfers typically apply the same boolean function, compaction of the display list is achieved by specifying a boolean code only once per set of graphic orders. 3.4 FLOW CONTROL ORDERS There are two graphic orders that control the execution order of the display list: JUMP and STOP. JUMP allows execution to transfer to a different point in the display list. STOP signals the end of the display list (and normally results in an interrupt to the microprocessor). 3.5 BITBLT ORDERS There are nine different bitBLT graphic orders that provide nine permutations of destination bitmap (frame, unhanded bitmap, or banded bitmap) and operand type (destination; source and destination; or source, halftone and destination). These graphic orders rely on parameters being previously set with certain initialization orders. Removing parameters that are typically common to several bitBLT operations makes each bitBLT graphic order smaller and results in a display list which occupies less memory space. 3.6 SCANLINE ORDERS There are six different scanline graphic orders that provide the six permutations of destination bitmap (frame, unbanded bitmap, or banded bitmap) and operand type (destination, or halftone and destination). As with the bitBLT orders, the scanline graphic orders rely on parameters being previously set with certain initialization orders. Removing parameters that are typically common to several scanline operations makes each scanline graphic order smaller and results in a display list which occupies less memory space. 3.7 TYPICAL DISPLAY LIST SEQUENCE FIG. 14 shows a trivial example of what a typical display list of graphic orders might look like. More importantly, it provides insight on how the initialization graphic orders work with the bitBLT and scanline graphic orders. 3.8 BITMAP TYPES There are four distinct types of bitmaps used by the graphic orders: a frame, an unbanded bitmap, a banded bitmap, and a halftone bitmap. 3.8.1 Frame A frame is a two dimensional array of pixels that is generally a subset of a larger bitmap array. Typically, a frame describes the bounding box of a character. Frames are subtly different than bitmaps in that width and warp are identical in a frame. When transferring a rectangle to a bitmap, both the warp of the bitmap and the width of the rectangle being transferred must be specified. When transferring a rectangle to a frame, the warp is the width of the rectangle being specified. Operations which involve transferring pixels to frames are particularly useful when a small rectangle of a larger image must be cut and saved for future reference. The frame is the smallest possible storage means for the small rectangle because the scanlines are completely compacted in memory; the end of one scanline and the beginning of the next have no unused bits between them. 3.8.2 Unbanded Bitmap An unbanded bitmap is simply a bitmap which has no logical coordinate associated with its Y axis. When specifying an unbanded bitmap in a transfer of data, it is assumed that the bitmap is of sufficient size to complete the transfer. This requires that sufficient memory be allocated to contain the transfer. Another way of thinking about it is that no bounds checks are made for unbanded bitmaps. 3.8.3 Banded Bitmap A banded bitmap is simply a bitmap which has a logical coordinate associated with its Y axis. When specifying a banded bitmap in a transfer of data, the transfer of data is checked against the Y bounds of the bitmap. If the data would fall beyond the Y bounds of the bitmap, a band fault occurs, and the transfer of data is prematurely terminated. Upon termination of a graphic order, all parameters necessary to resume execution at the point where the band fault occurred are written back to the original graphic Order, and the graphic order's band number is incremented (or decremented) to reflect the band where execution of the graphic order should resume. By automatically updating graphic orders which generate band faults, graphic orders which span multiple bands can be executed without the need for software intervention. 3.8.4 Halftone Bitmap A halftone bitmap is a special type of bitmap in that it is automatically replicated in both the horizontal and vertical direction. It is intended to hold a pattern which is repetitively applied to data being transferred from a source bitmap to a destination bitmap, causing a change in the appearance of the data (e.g., shading). 3.8.5 Source, Destination, Halftone Bitmaps Up to three elements are needed when composing an image: a source image, a halftone image to be applied to the source image, and a (larger) destination image to which the final source is to be copied. Each of these elements is located in a bitmap. The source element is typically located in a "frame" bitmap and the destination element is typically located in a "banded" or "unbanded" bitmap. The halftone is always located in a "halftone" bitmap. 3.9 GRAPHIC ORDER OPERANDS The PBC graphic order set supports one, two, and three operand transfers. A one operand transfer only affects the destination bitmap; a two operand transfer involves the destination bitmap and either a source bitmap or a halftone bitmap; a three operand transfer combines a source bitmap, a halftone, and a destination bitmap. The PBC supports all boolean combinations of one, two, and three operand transfers. A total of 256 unique boolean combinations can be created with three operand transfers. Eight common boolean transfer functions are shown in FIG. 12. 3.9.1 One Operand Transfer One operand transfers specify the destination bitmap on which the given boolean function will be applied. Them are four one operand transfers. These are:
______________________________________
d 0 Zero fill the destination region.
d 1 One fill the destination region.
d d Refresh the destination region. No operation.
d NOT d Invert the destination region.
______________________________________
3.9.2 Two Operand Transfers Two operand transfers specify the destination bitmap where the transfer is to take place (operand 1), and either a source bitmap where the data is to come from, or a halftone bitmap to be applied to the specified bitmap region (operand 2). There are sixteen two operand transfers of which four are degenerate cases of the one operand transfers. These are:
______________________________________
d 0 Zero fill the operand 1 region.
d 1 One fill the operand 1 region.
d d Refresh the operand 1 region.
d NOT d Invert the operand 1 region.
d op2 Replace the operand 1 region with the
operand 2 region.
d NOT op2 Replace the operand 1 region with the
inverted operand 2 region.
d d AND op2 Replace the operand 1 region with the
logical AND of the operand 1 and
operand 2 regions.
d d AND NOT op2
Replace the operand 1 region with the
logical AND of the operand 1 and
inverted operand 2 regions.
d NOT d AND op2
Replace the operand 1 region with the
logical AND of the inverted operand 1
and operand 2 regions.
d NOT (d AND op2)
Replace the operand 1 region with the
inversion of the logical AND of the
operand 1 and operand 2 regions.
d d OR op2 Replace the operand 1 region with the
logical OR of the operand 1 and
operand 2 regions.
d d OR NOT op2
Replace the operand 1 region with the
logical OR of the operand 1 and
inverted operand 2 regions.
d NOT d OR op2
Replace the operand 1 region with the
logical OR of the inverted operand 1
and operand 2 regions.
d NOT (d OR op2)
Replace the operand 1 region with the
inversion of the logical OR of the
operand 1 and operand 2 regions.
d d XOR op2 Replace the operand 1 region with the
logical XOR of the operand 1 and
operand 2 regions
d d XNOR op2
Replace the operand 1 region with the
logical XNOR of the operand 1 and
operand 2 regions.
______________________________________
3.9.3 Three Operand Transfers Three operand transfers specify the destination bitmap (operand 1) where the transfer is to take place, a source bitmap where the data is to come from (operand 2), and a halftone bitmap to be applied to the specified source and destination bitmap regions (operand 3). There are 256 three operand transfers of which four are degenerate cases of the one operand transfers, sixteen are degenerate cases of the two operand transfers involving source and destination bitmaps, and sixteen are degenerate cases of the two operand transfers involving halftone and destination bitmaps. All 256 boolean combinations are represented in FIG. 13. They involve all possible logical combinations (AND, OR, XOR, and XNOR) between the true and inverted versions of the three operands. 3.9.4 Determining Boolean Code The PBC supports a unique transfer mode for each of the one, two, and three operand transfers. The desired transfer method is specified by means of a boolean code. The boolean code directs the PBC to logically combine the given destination, source, and/or halftone images during the graphic operation. The boolean code can be easily determined by combining specific constants, or keys, that represent the destination, source, and/or halftone images of a graphic order. The keys are listed in Table 3. When used in boolean arithmetic computations, the one-byte keys yield a one-byte boolean code that corresponds to specific transfer effect.
TABLE 3
______________________________________
Keys Used To Determine Boolean Codes
______________________________________
Zero 00000000
For example, the
One 11111111 boolean code for
Destination
10101010
dest dest OR
Source 11001100 source
Halftone 11110000
is calculated by logically ORing the
destination and source boolean keys:
11101110 = 10101010 OR 11001100
______________________________________
By setting the boolean code to 0.times.EE, the PBC will OR the source and destination bitmaps to produce a transparent combination of the two. This combination is shown in FIG. 13, row E0, column 0E, and is clearly the OR of the source and destination bitmaps. A more complicated transfer function can just as easily be calculated in the same manner. For instance, the boolean code for a semi-transparent source transfer onto the destination bitmap involving halftoning (used by PostScript) is determined as follows: ##EQU1## is equivalent to ##EQU2## which yields code=11100010=0.times.E2 FIG. 13 shows the result of using 0.times.E2 as the boolean code; the destination image appears to lie below the halftoned source image. Care must be taken when calculating a boolean code to insure that only keys that are contained in the transfer are used. For example, the halftone key should not be used when specifying the boolean code for a transfer involving only a source and destination bitmap. If the above constraint is violated, the PBC treats the extra parameter(s) as zero. Tarts, if the boolean code for dest (source AND halftone) OR dest is used to specify a transfer involving only a source and destination bitmap, the PBC treats the halftone parameter as zero. The resulting operation becomes dest (source AND 0) OR dest or simply, dest dest SCANLINE GRAPHIC ORDERS The scanline graphic orders are used to operate on non-rectangular regions of bitmaps. In their simplest form, they are used to fill arbitrary polygons and to draw vectors. Scanline graphic orders differ from bitBLT graphic orders in that bitBLT graphic orders specify a rectangular frame. In scanline graphic orders, the individual runs of scanlines describe the frame, and can effectively generate a non-rectangular (and unconnected) frame. Additionally, the bitBLT graphic orders allow a halftone bitmap to be specified. Scanline graphic orders do not allow a source bitmap. Scanline operations arise quite often from two sources. The first occurs from outline fonts, which describe the outline of a set of characters via splines or lines and arcs. The outlines are scaled for the desired point size through software algorithms. The result is a set of scanline endpoints which must be filled to create a solid character. The second occurs from vector images such as wire-frame diagrams, which are entered as either a series of line drawing graphic orders or as a previously generated bitmap. Since these vector images contain a high percentage of white space, they typically require less storage space when described as a series of scanline operations. 4.1 SCANLINE TABLES Each scanline graphic order specifies a pointer to a scanline table. The scanline table contains a list of bitstring specifiers that specify the individual scanline runs of an image. Each scanline table starts and ends with a 0.times.0000 short word terminators. Note that the null terminators can be shared between scanline tables placed adjacent in memory. That is, the ending 0.times.0000 of one scanline table can serve as the starting 0.times.0000 for a subsequent scanline table. The dual termination of the scanline table structure is required for duplex printing, when the PBC reads the scanline table in both forward and reverse directions. 4.2 BITSTRING SPECIFIERS A scanline table contains a list of bitstring specifiers. Each bitstring specifier is made up of two parts: a displacement and a "run length", as shown in FIG. 15A and 15B. The displacement indicates the number of horizontal and vertical pixels to skip before beginning a run, and the run length indicates the number of pixels to be drawn horizontally during the run. One of the major benefits of images represented as a series of scanlines is a reduction in the memory storage required to represent the image. This is further augmented by supporting different sized bitstring specifier formats that can economize on short displacements and runs, or allow any pixel in a bitmap to be reached with a single specifier. PBC supports three bitstring specifiers: a 16-bit specifier for small displacements and runs, a 32-bit specifier for medium displacements and runs, and a 48-bit specifier for large displacements and runs. The specifiers are designed to be recognizable whether the scanline table is read from memory in a forward or backward direction (more precisely, the ID bits in the 32- and 48-bit specifiers are duplicated to allow parsing of the scanline table in either direction). This is required to properly handle scanline graphic orders in a duplex printing environment. Each bitstring specifier consists of a signed displacement field and an unsigned run length field. When rendering to the banded bitmaps comprising the front side of a duplex page or the only side of a single sided page, or to frames and unbanded bitmaps, the displacement is added to a current destination address before drawing the run. The run is then carried out in a left to right direction. When rendering to the banded bitmaps comprising the back side of a duplex page, the run length is first subtracted from the current destination address and saved, the run is carded out in a left to right direction, and then the displacement is subtracted from the saved destination address. The PBC maintains a current destination address, and updates it after each bitstring specifier is executed. When the scanline graphic order is begun, the current destination address is loaded with the initial destination address specified in the graphic order. For front side rendering, the current destination address is left pointing to the pixel immediately following the last pixel in the run. For backside rendering, the current destination address stays where the subtraction of the last specifier's X and Y displacements left it. All of the bitstring specifiers are multiples of 16-bits and must always be located on short word memory boundaries (0 mod 2 byte addresses). 4.2.1 16-Bit Format The 16-bit bitstring specifier format 31 is used for small displacements and runs. As shown in FIG. 16A-16C, it begins with a "0" ID bit to identify it as a 16-bit specifier, followed by a flag DY to indicate a downward Y movement of the base position, a run length RL of 0 to 63 pixels, and a signed X movement DX of +127/-128 pixels. The X and Y displacements, DX and DY, are resolved before executing the run for the front side of a page, and after executing the run for the back side of a page. As described above, a 16-bit code of 0.times.0000 is placed at the beginning and end of every scanline table. Note that the all-zero short word is actually a 16-bit bitstring specifier: the most significant bit is zero, and the remaining 15 bits specify no movement of the base pointer and a run of zero pixels. 4.2.1.1 32-Bit Format The 32-bit bitstring specifier format 33 is used for medium displacements and runs. As shown in FIG. 16A-16C, it begins with a two-bit "10" ID field to identify it as a 32-bit specifier, followed by a downward Y movement DY from the base position (from zero to three scanlines), a run length RL of 0 to 4095 pixels, a second "10" ID field (required for duplex scanline parsing), and a signed X movement DX of +8191/-8192 pixels. The X and Y displacements, DX and DY, are resolved before executing the run for the front side of a page, and after executing the run for the back side of a page. 4.2.1.2 48-Bit Format The 48-bit bitstring specifier format 35 is used for large displacements and runs. As shown in FIGS. 16A-16C, it begins with a two-bit "11" ID field to identify it as a 48-bit specific, followed by an signed aggregate X and Y movement value DZ, a second "11" ID field (required for duplex scanline parsing), and a run length RL of 0 to 16383 pixels. The aggregate displacement, DZ, is the result of the following calculation based on desired X and Y movements, DX and DY. It is also based on the destination warp, and thus, the warp of the target bitmap must be known before a scanline table is built which includes 48-bit specifiers. DZ=DY.times.DW+DX where DX is the desired horizontal movement (signed) DY is the desired vertical movement (signed) DW is the warp of the target destination bitmap (unsigned) Care must be taken when using the 48-bit format in that the aggregate displacement. The 30-bit DZ field can move the current position +536,870,911/-536,870,912 pixel locations (.+-.64 MB), sufficient to reach the farthest ends of most any size page, and if not used carefully, beyond. The aggregate displacement is resolved before executing the run for the front side of a page, and after executing the run for the back side of a page. 4.2.2 Halftoning Scanline Graphic Orders As previously stated, a halftone bitmap is automatically replicated in both the horizontal and vertical directions. This is fairly easy to automate for the bitBLT graphic orders since the area to be operated on is a rectangle. For scanline graphic orders, however, the task is rather complex since each scanline run describes an individual area to be operated on. For the 16-bit bitstring specifier, the task is relatively straight forward and can be carded out with a minimal number of overhead cycles. For the 32- and 48-bit specifiers, the task is considerably more complex because of the much larger displacement values associated with them. The task can be carded out, but at significant number of overhead cycles. To reduce the overhead cycle penalty for the larger bitstring specifier formats, a companion halftone table is employed. This eliminates virtually all overhead cycles in return for slightly higher memory storage requirements for most typical scanline tables. 4.2.3 Halftone Companion Table The halftone companion table consists of a list of corresponding halftone specifiers for each 32- and 48-bit bitstring specifier in the scanline table. Them is no companion specifier for 16-bit specifiers (they are handled without the assistance of a companion specifier). In keeping with the relocatable nature of the bitstring specifiers, the companion halftone table use displacements instead of absolute values. This minimizes the number of halftone tables to one table per halftone screen per character to be halftoned. Thus, if only a few characters of a particular font must be halftoned with one particular halftone screen, only one halftone table must be constructed for each character to be halftoned, regardless of the number of times each character is used and, therefore, placed within the halftone screen. While the companion halftone specifiers reduce the amount of modulo arithmetic that the PBC must perform, a minimal amount of modulo arithmetic is still required after the halftone specifier's displacements are applied to the current halftone position to guarantee that the new position remains inside the boundary of the bitmap. With 16-bit specifiers, their displacement and run length are used directly and added to the current halftone position, and the result is passed through the same modulo logic. The halftone specifiers for scanline tables makes the following restriction necessary. The horizontal displacements in any of the 16-, 32-, or 48-bit bitstring specifier cannot extend beyond either side of the destination frame, since the halftoning operation will not track the Y movement caused by wrapping around the sides of a bitmap. Of course, the same is true for the run lengths since no horizontal clipping is performed at the left or right edges of the destination bitmap for any graphic order, bitBLT or scanline. Unlike the scanline table, the companion halftone table requires no 0.times.0000 terminators (and note the halftone specifiers themselves do not specify ID fields). The parsing of the halftone table tracks that of the scanline table; both tables are read in parallel. For 32- and 48-bit specifiers, the PBC reads a specifier from each table. For 16-bit specifiers, only the scanline table is read; as stated above, halftone tables do not contain companion specifiers for 16-bit bitstring specifiers. The halftone specifiers, like their bitstring counterparts, must be located on 16-bit boundaries, and consequently the halftone table address pointer specified in the scanline graphic order must be short word aligned. 4.2.3.1 32-Bit Companion Halftone Specifier The 32-bit halftone specifier 41, as shown in FIG. 17, contains two fields: a halftone horizontal movement delta, HDX, and a halftone run length delta, HDL. HDX and HDL are simply the bitstring specifier's X displacement and run length values modulo the target halftone bitmap width: HDL=RL mod HW HDX=DX mod HW where RL is the corresponding 32-bit specifier's run length value DX is the corresponding 32-bit specifier's signed X displacement HW is the target halftone bitmap width Both HDX and HDL are unsigned values (note that HDX must be given as a non-negative modulo value). The Y displacement found in the 32-bit bitstring specifier is handled automatically by the PBC, and has no corresponding field in the halftone specifier. 4.2.3.2 48-Bit Companion Halftone Specifier The corresponding halftone specifier for the 48-bit bitstring specifier 43 is 80 bits long and contains four fields: a halftone vertical movement delta, HDY, a halftone horizontal movement delta, HDX, a halftone run length delta, HDL, and a halftone physical starting address delta, HDA. The four parameters are simply the result of modulo arithmetic based on the 48-bit specifier parameters and the target halftone bitmap: HDL=RL mod HW HDX=DX mod HW HDY=DY mod HH HDA=HDY.times.HW+HDX where DX is the X displacement value used in the calculation of DZ DY is the Y displacement value used in the calculation of DZ HH is the target halftone bitmap height HW is the target halftone bitmap width RL is the corresponding 48-bit specifier's run length value The 30-bit DZ value of the 48-bit bitstring specifier is defined as the sum of horizontal and vertical displacements. The desired horizontal and vertical displacements, DX and DY, used in the original calculation of DZ are required to generate the parameters of the companion halftone specifier. The HDX, HDX, and HDA values are used by the PBC to modify the HXR, HYR, and HA halftone parameters in correspondence with the DZ displacement of the 48-bit specifier, and HDL is used to modify HXR and HA in correspondence with the RL run length. HDL, HDX, HDY, and HDA are all unsigned values (the HDX, HDY, and HDA parameters must be given as non-negative modulo values). 4.2.4 Scanline and Halftone Table Examples FIG. 18 illustrates a typical character represented as delta X, delta Y, and run lengths. Due to the small sizes of the delta values and nm lengths, the 16-bit bitstring specifier can be used for the entire image. The figure also shows the compaction achieved from the bitstring specifiers. The image requires 27 words if stored as a bitmap and 19 words if stored in 16-bit bitstring specifiers. FIG. 19 provides an example scanline table with its companion halftone table, and the resulting image. Note that the companion halftone table contains only two specifiers, since the scanline table is mostly made of 16-bit specifiers, and that the halftone table is not terminated with 0.times.0000 null specifiers, while the scanline table is. 4.2.5 Illegal Usage Of Bitstring Specifiers When executing scanline graphic orders to a banded bitmap, PBC performs boundary checking to detect a band fault before executing each bitstring specifier. It does not, however, check for a band fault while processing the run length of pixels. There are two usages of the bitstring specifiers during banding applications which can cause unwanted destruction of data. The destruction arises when the specifier causes processing to occur outside of the banded bitmap. The first case occurs when a bitstring specifier contains a signed offset which references a previous band (refer to FIG. 20). The PBC checks only the lower bound of the banded bitmap, so the violation is undetected. The PBC will process the bitstring specifier run at a memory location which is not contained within the target bitmap. The second case occurs when a bitstring specifier contains a run length which wraps from one scanline to another and the new scanline is beyond the banded bitmap. The PBC does not check horizontal bounds and does not check vertical bounds while processing the bitstring specifier run. GRAPHIC ORDER DEFINITIONS This section presents each of the PBC's 25 graphic orders in alphabetical order. For each graphic order, a functional description, opcode, operand format, and definitions of its operands are given. In addition, at the end of this section, two summary reference tables (Tables 26 and 27) are presented. 5.1 GRAPHIC ORDER ADDRESSING CONVENTIONS 5.1.1 Granularity The addressing conventions discussed in section 1.6 above also apply to graphic order address parameters. All address fields are equally 32 bits wide. Address parameters that reference bitmaps specify 32-bit bit addresses, while all other others require conventional 29-bit byte addresses. In the description of graphic orders that follow, the operand lengths for addresses may be given as a pair of numbers, for example: (29 of 32). This indicates that the address, in this case a byte address, occupies the least significant 29 bits of the word operand (and that the PBC will force the three most significant bits to zero). 5.1.2 Alignment Certain graphic orders specify address parameters that must be aligned to byte (8-bit) or short word (16-bit) boundaries. When a byte address is required to be aligned on as short word address, its least significant bit should be zero, since the PBC will force the bit to be zero internally. Some bit addresses are specified to be byte aligned; this means that the least three significant bits should be zero, since inside the PBC they will be forced zero. There are four combinations of address granularity and alignment used by PBC graphic orders. In the descriptions of graphic orders and definitions of their parameters, the following four phrases will be used exclusively: 1. Bit address: A 32-bit bit address which can point to any bit location in memory; used to specify bitmap locations and bitmap pixels. 2. Bit address, byte aligned: A 32-bit bit address with its least three significant bits set to zero; points to a bit location in memory that is the first bit in a byte. Used to specify bitmap locations. 3. Byte address: A 29-bit byte address which can point to any byte location in memory; used for referencing graphic order instructions. 4. Byte address, short word aligned: A 29-bit byte address with its least significant bit set to zero; points to a byte in memory that is the first byte in a short word. Used to address scanline tables and halftone companion tables. 5.1.3 Physical Address vs. Logical Address For graphic orders that render images to a frame or unbanded bitmaps, address parameters are interpreted as physical addresses, and the PBC uses them directly to access memory. In the case of banded bitmaps, where only a portion of the physical page's image is present in memory, address parameters are interpreted as logical addresses. Logical addresses must be translated by the PBC to physical space before execution of the graphic order begins. Translation information is provided to the PBC at the same time the banded bitmap dimensions are defined (via the SET.sub.-- BBMAP order). Physical addresses are translated back to logical addresses when band faults occur and require parameters to be written back to the graphic order. 5.1.4 Duplex Frame Addresses The PBC fully supports banding applications on duplex printers by rendering backside images in a bottom to top fashion. Only banded bitmap operations are affected (unbanded bitmaps are always rendered top to bottom by the Graphics Execution Unit; the Print Engine Video Controller then ships the entire page image in bottom to top order). When bitBLTing to a banded bitmap for the backside of a page, the definition of certain graphic order parameters change. Namely, the frame address parameters DA, SA, and HA must be given pointing to the bottom left corners of their respective frames (instead of the upper left) and the HYR halftone parameter must give the number of scanlines remaining to the top of the bitmap (instead of the bottom). FIGS. 21A and 21B uses the halftone bitmap parameters to illustrate this requirement. The parameters of scanline operations are also affected, since scanline tables are executed in reverse order for backside rendering. DA, which normally gives the starting position for the scanline table, must instead give the address of the pixel just beyond the last run in the scanline table. In addition, if a halftone is involved, HA, HXR, and HYR must also be given with respect to the same pixel at the end of the image, as shown in FIGS. 22A-22B. 5.2 BAND NUMBERS Each of the PBC graphic orders which affect the bands of the image contain a band number. The band number is used by the PBC to determine when to execute the order. Band numbers increase in value from the top band to the bottom band of the image. The band number for a graphic order must be determined by software. It must be the value of the band where the first scanline of a graphic order resides when printing the front side of a page, or the value of the band where the last scanline of a graphic order resides when printing the back side of a page (duplex printing). The PBC automatically adjusts the band number when the graphic order spans multiple bands. It increments the band number when printing the front side of a page and decrements the band number when printing the back side of a page. 5.3 GRAPHIC ORDERS The following pages describe the PBC graphic order set. The graphic orders are presented in alphabetical order.
TABLE 4
______________________________________
BLT2BB.sub.-- D
Destination Only BitBLT to Banded Bitmap
______________________________________
Ox30 BLT2BB.sub.-- D opcode (8 bits)
* BAND Band number when graphic order is executed
* DA Destination logical bit address (29 bits)
FW Frame width in bits (16 bits)
* FH Frame height in scanlines (16 bits)
______________________________________
(*) These operands are updated by the PBC when the frame crosses a band
boundary.
The BLT2BB.sub.-- D graphic order causes the PBC to modify a frame of a destination banded bitmap. The destination pixels are manipulated as specified by the current BOOL.sub.-- D boolean code. The destination bitmap parameters must have been previously defined by the SET.sub.-- BBMAP graphic order. As shown by FIGS. 23 and 24, the destination physical bit address (DA) must point to the upper left corner of the frame when printing the front side of a page, or to the lower left corner of the frame when printing the back side of a page. When a band fault is detected, the PBC rewrites the graphic order to update some of its parameters. The BAND number is incremented (or decremented, for backside printing). DA is repositioned to the starting pixel of each respective frame to be processed in the next band. Last, FH and HYR are written back with the number of remaining scanlines in their respective frames to be transferred.
TABLE 5
______________________________________
BLT2BB.sub.-- SD
Source/Destination BitBLT to Banded Bitmap
______________________________________
0x32 BLT2BB.sub.-- SD opcode (8 bits)
* BAND Band number when graphic order is executed
* DA Destination logical bit address (32 bits)
FW Frame width in bits (16 bits)
* FH Frame height in scanlines (16 bits)
* SA Source physical bit address (32 bits)
______________________________________
(*) These operands are updated by the PBC when the frame crosses a band
boundary.
The BLT2BB.sub.-- SD graphic order causes the PBC to bitBLT a source bitmap frame to a destination banded bitmap. The source and destination pixels are combined as specified by the current BOOL.sub.-- SD boolean code. The destination bitmap parameters must have been previously defined by the SET.sub.-- BBMAP graphic order. The source frame warp is assumed to be the FW frame width specified in the BLT2BB.sub.-- SD graphic order unless a non-zero source bitmap warp was previously defined by the SET.sub.-- SBMAP graphic order, in which case the source bitmap warp is used. The destination and source physical bit addresses (DA and SA) must point to the upper left corners of their respective frames when printing the front side of a page (as shown in FIG. 25A and 25B), or to the lower left corners of their respective frames when printing the back side of a page (as shown in FIGS. 26A and 26B). When a band fault is detected, the PBC rewrites the graphic order to update some of its parameters. The BAND number is incremented (or decremented, for backside printing). DA and SA are repositioned to the starting pixel of each respective frame to be processed in the next band. Last, FH is written back with the number of remaining scanlines in the bitBLT frame to be transferred.
TABLE 6
______________________________________
BLT2BB.sub.-- SHD
Source/Halftone/Destination BitBLT to Banded Bitmap
______________________________________
0x33 BLT2BB.sub.-- SHD opcode (8 bits)
* BAND Band number when graphic order is executed
* DA Destination logical bit address (32 bits)
FW Frame width in bits (16 bits)
* FH Frame height in scanlines (16 bits)
* SA Source physical bit address (32 bits)
HXR Halftone X remainder (16 bits)
* HYR Halftone Y remainder (16 bits)
* HA Halftone physical bit address of the starting pixel
(32 bits)
______________________________________
(*) These operands are updated by the PBC when the frame crosses a band
boundary.
The BLT2BB.sub.-- SHD graphic order causes the PBC to bitBLT a source bitmap frame to a destination banded bitmap, and apply a halftone bitmap in the process. The source, halftone, and destination pixels are combined as specified by the current BOOL.sub.-- SHD boolean code. The destination bitmap parameters must have been previously defined by the SET.sub.-- BBMAP graphic order. The source frame warp is assumed to be the FW frame width specified in the BLT2BB.sub.-- SHD graphic order unless a non-zero source bitmap warp was previously defined by the SET.sub.-- SBMAP graphic order, in which case the source bitmap wasp is used. The halftone bitmap dimensions must have been previously defined by the SET.sub.-- HTBMAP graphic order. As discussed above, during the processing of halftones, wrapping occurs at the edges of the bitmap; this results in horizontal and vertical replication, or "tiling", of the bitmap to cover the entire bitBLT frame area. Halftone tiled patterns are typically anchored to the page. Thus, a bitBLT may need to take on the halftone pattern starting at various points in the halftone bitmap depending on where it is being positioned on the page. The halftone parameters HXR, HYR, and HA define the precise halftone pixel that corresponds to the upper left (or lower left, for backside bitBLTs) corners of the source and destination frames. HXR specifies the number of pixels remaining to the left edge of the bitmap, and HYR defines the number of pixels remaining to the bottom edge (or top edge, for backside bitBLTs). For example, for the front side of a page, if the starting pixel in the halftone bitmap is determined to be at the upper left, HXR must be set to HW, and HYR to HH (as shown in FIGS. 27A and 27B); if instead the backside of the page is being rendered, HXR must still be set to HW, but HYR must be set to one (as shown in FIG. 28). The destination, source, and halftone physical bit addresses (DA, SA, and HA) must point to the upper left corners of their respective frames when printing the front side of a page, or to the lower left corners of their respective frames when printing the back side of a page. When a band fault is detected, the PBC rewrites the graphic order to update some of its parameters. The BAND number is incremented (or decremented, for backside printing). DA, SA, and HA are repositioned to the starting pixel of each respective frame to be processed in the next band. Last, FH and HYR are written back with the number of remaining scanlines in their respective frames to be transferred.
TABLE 7
______________________________________
BLT2F.sub.-- D
Destination Only BitBLT to Frame
______________________________________
0x10 BLT2F.sub.-- D opcode (8 bits)
DA Destination physical bit address (32 bits)
FW Frame width in bits (16 bits)
FH Frame height in scanlines (16 bits)
______________________________________
The BLT2F.sub.-- D graphic order causes the PBC to modify a frame of a destination bitmap. The destination pixels are manipulated as specified by the current BOOL.sub.-- D boolean code. As illustrated in FIG. 29, the destination bitmap warp is assumed to be the FW frame width specified by the BLT2F.sub.-- D graphic order itself. The destination physical bit addresses (DA) must point to the upper left corner of the frame when printing the front side of a page, or to the lower left corner of the frame when printing the back side of a page.
TABLE 8
______________________________________
BLT2F.sub.-- SD
Source/Destination BitBLT to Frame
______________________________________
0x12 BLT2F.sub.-- SD opcode (8 bits)
DA Destination physical bit address (32 bits)
FW Frame width in bits (16 bits)
FH Frame height in scanlines (16 bits)
SA Source physical bit address (32 bits)
______________________________________
The BLT2F.sub.-- SD graphic order causes the PBC to bitBLT a source bitmap frame to a destination frame bitmap. The source and destination pixels are combined as specified by the current BOOL.sub.-- SD boolean code. The destination bitmap warp is assumed to be the FW frame width specified by the BLT2F.sub.-- SD graphic order itself. FW is also assumed to be the source frame warp, unless a non-zero source bitmap warp was previously defined by the SET.sub.-- SBMAP graphic order, in which case the nonzero source bitmap warp is used. As illustrated in FIG. 30, the destination and source physical bit addresses (DA and SA) must point to the upper left corners of their respective frames when printing the front side of a page, or to the lower left corners of their respective frames when printing the back side of a page.
TABLE 9
______________________________________
BLT2F.sub.-- SHD
Source/Halftone/Destination BitBLT to Frame
______________________________________
0x13 BLT2F.sub.-- SHD opcode (8 bits)
DA Destination physical bit address (32 bits)
FW Frame width in bits (16 bits)
FH Frame height in scanlines (16 bits)
SA Source physical bit address (32 bits)
HXR Halftone X remainder (16 bits)
HYR Halftone Y remainder (16 bits)
HA Halftone physical bit address of the starting pixel (32
______________________________________
bits)
The BLT2F.sub.-- SHD graphic order causes the PBC to bitBLT a source bitmap frame to a destination banded bitmap, and apply a halftone bitmap in the process. The source, halftone, and destination pixels are combined as specified by the current BOOL.sub.-- SHD boolean code. The destination bitmap warp is assumed to be the FW frame width specified by the BLT2F.sub.-- SHD graphic order itself. FW is also assumed to be the source frame warp, unless a non-zero source bitmap warp was previously defined by the SET.sub.-- SBMAP graphic order, in which case the non-zero source bitmap warp is used. The halftone bitmap dimensions must have been previously defined by the SET.sub.-- HTBMAP graphic order. As discussed above, during the processing of halftones, wrapping occurs at the edges of the bitmap; this results in horizontal and vertical replication, or "tiling", of the bitmap to cover the entire bitBLT frame area. Halftone tiled patterns are typically anchored to the page. Thus, a bitBLT may need to take on the halftone pattern starting at various points in the halftone bitmap depending on where it is being positioned on the page. The halftone parameters HXR, HYR, and HA define the precise halftone pixel that corresponds to the upper left (or lower left, for backside bitBLTs) corners of the source and destination frames. HXR specifies the number of pixels remaining to the left edge of the bitmap, and HYR defines the number of pixels remaining to the bottom edge (or top edge, for backside bitBLTs). For example, for the front side of a page, if the starting pixel in the halftone bitmap is determined to be at the upper left, HXR must be set to HW, and HYR to HH; if instead the backside of the page is being rendered, HXR must still be set to HW, but HYR must be set to one (please refer to FIG. 31A-31 C). The destination, source, and halftone physical bit addresses (DA, SA, and HA) must point to the upper left corners of their respective frames when printing the front side of a page, or to the lower left corners of their respective frames when printing the back side of a page.
TABLE 10
______________________________________
BLT2UB.sub.-- D
Destination Only BitBLT to Unbanded Bitmap
______________________________________
0x20 BLT2UB.sub.-- D opcode (8 bits)
DA Destination physical bit address (32 bits)
FW Frame width in bits (16 bits)
FH Frame height in scanlines (16 bits)
______________________________________
The BLT2UB.sub.-- D graphic order causes the PBC to modify a frame of a destination unbanded bitmap. The destination pixels are manipulated as specified by the current BOOL.sub.-- D boolean code. The destination bitmap warp must have been previously defined by the SET.sub.-- UBMAP graphic order. The destination physical bit addresses (DA) must point to the upper left corner of the frame when printing the front side of a page, or to the lower left corner of the frame when printing the back side of a page (please refer to FIG. 32).
TABLE 11
______________________________________
BLT2UB.sub.-- 2D
Source/Destination BitBLT to Unbanded Bitmap
______________________________________
0x22 BLT2UB.sub.-- SD opcode (8 bits)
DA Destination physical bit address (32 bits)
FW Frame width in bits (16 bits)
FH Frame height in scanlines (16 bits)
SA Source physical bit address (32 bits)
______________________________________
The BLT2UB.sub.-- SD graphic order causes the PBC to bitBLT a source bitmap frame to a destination unbanded bitmap. The source and destination pixels are combined as specified by the current BOOL.sub.-- SD boolean code. The destination bitmap warp must have been previously defined by the SET.sub.-- UBMAP graphic order. As illustrated in FIGS. 33A and 33B, the source frame warp is assumed to be the FW frame width specified by the BLT2UB.sub.-- SD graphic order unless a non-zero source bitmap warp was previously defined by the SET.sub.-- SBMAP graphic order, in which case the source bitmap warp is used. The destination and source physical bit addresses (DA and SA) must point to the upper left corners of their respective frames when printing the front side of a page, or to the lower left corners of their respective frames when printing the back side of a page.
TABLE 12
______________________________________
BLT2UB.sub.-- SHD
Sorce/Halftone/Destination BitBLT to Unbanded Bitmap
______________________________________
0x23 BLT2UB.sub.-- SHD opcode (8 bits)
DA Destination physical bit address (32 bits)
FW Frame width in bits (16 bits)
FH Frame height in scanlines (16 bits)
SA Source physical bit address (32 bits)
HXR Halftone X remainder (16 bits)
HYR Halftone Y remainder (16 bits)
HA Halftone physical bit address of the starting pixel (32
______________________________________
bits)
The BLT2UB.sub.-- SHD graphic order causes the PBC to bitBLT a source bitmap frame to a destination banded bitmap, and apply a halftone bitmap in the process. The source, halftone, and destination pixels are combined as specified by the current BOOL.sub.-- SHD boolean code. The destination bitmap warp must have been previously defined by the SET.sub.-- UBMAP graphic order. As shown in FIG. 34A and 34B, the source frame warp is assumed to be the FW frame width specified by the BLT2UB.sub.-- SHD graphic order unless a non-zero source bitmap warp was previously deemed by the SET.sub.-- SBMAP graphic order, in which case the source bitmap warp is used. The halftone bitmap dimensions must have been previously defined by the SET.sub.-- HTBMAP graphic order. As discussed above, during the processing of halftones, wrapping occurs at the edges of the bitmap; this results in horizontal and vertical replication, or "tiling", of the bitmap to cover the entire bitBLT frame area. Halftone tiled patterns are typically anchored to the page. Thus, a bitBLT may need to take on the halftone pattern starting at various points in the halftone bitmap depending on where it is being positioned on the page. The halftone parameters HXR, HYR, and HA define the precise halftone pixel that corresponds to the upper left (or lower left, for backside bitBLTs) corners of the source and destination frames. HXR specifies the number of pixels remaining to the left edge of the bitmap, and HYR defines the number of pixels remaining to the bottom edge (or top edge, for backside bitBLTs). For example, for the front side of a page, if the starting pixel in the halftone bitmap is determined to be at the upper left, HXR must be set to HW, and HYR to HH; if instead the backside of the page is being rendered, HXR must still be set to HW, but HYR must be set to one. The destination, source, and halftone physical bit addresses (DA, SA, and HA) must point to the upper left corners of their respective frames when printing the front side of a page, or to the lower left corners of their respective frames when printing the back side of a page.
TABLE 13
______________________________________
JUMP
Jump to Graphic Order
______________________________________
0x01 JUMP opcode (8 bits)
GOA Graphic order physical byte address (29 of 32 bits)
______________________________________
The JUMP graphic order indicates a new byte address where the display list is continued. The PBC updates its internal display list pointer with the address following the graphic order and resumes execution at this address when the JUMP graphic order is encountered.
TABLE 14
______________________________________
SET.sub.-- BBMAP
Set Banded Bitmap Parameters
______________________________________
0x08 SET.sub.-- BBMAP opcode (8 bits)
CUR.sub.-- BAND
Current band number (8 bits)
DUPLEX Render direction for duplex printing (1 of 8 bits)
DWB Destination banded bitmap warp in bits (16 bits)
SOBPA Start of band physical bit address, byte aligned
(32 bits)
SOBA Start of band logical bit address (32 bits)
EOBPA End of band physical bit address (32 bits)
______________________________________
The SET.sub.-- BBMAP graphic order specifies the structure of a banded bitmap. The current band number, render direction, warp, and physical base address of the bitmap are given, along with the logical address of the first bit inside, and outside, the bitmap. These parameters are used in all subsequent graphic orders which operate on a banded bitmap. Note that the height of the banded bitmap is implied in the last logical address, in that it is calculated as the logical address of the first bit inside of the bitmap added to the product of the warp of the bitmap times the height of the bitmap. The SET.sub.-- BBMAP graphic order specifies a current band number; the current band number is used to compare against the band numbers found in subsequent bitBLT and scanline graphic orders. The result of each band number comparison determines whether a graphic order is executed during the current pass of the display list. Remember that a "banded" display list is executed several times, one pass for each band of the entire page. The DUPLEX byte contains a one-bit flag to indicate render direction. When the least significant bit of the DUPLEX byte is set, all subsequent graphic or scanline orders that operate on banded bitmaps are to be rendered in a bottom to top fashion. In conjunction, a bottom to top render direction causes the PBC to assume that all starting pixel addresses in subsequent banding graphic and scanline orders point to the bottom or end of their respective operands instead of the top. (Orders that operate on frames or unbanded bitmaps are unaffected by the render direction, and are always rendered top to bottom.) By rendering in a reverse direction, the bands of a page can be created in opposite order to print the backside of duplex pages. Additionally, each bitBLT or scanline operation contains a logical address which specifies where within the banded bitmap the upper left corner of the frame should be placed. This is converted to a physical address by the PBC by the following calculation: frame physical address=SOBPA+ (frame logical address - SOBA) As illustrated in FIG. 35, the three address parameters SOBPA, SOBA, and EOBPA vary depending on the side of the page (front or backside) to be generated. The parameters are referenced from the top of the band when printing the front side of a page, and from the bottom of the band when printing the back side of a page. Finally, as a banded bitBLT or scanline operation proceeds, its frame logical address is compared with the logical address of the first bit outside of the banded bitmap. The frame logical address is modified by the banded bitmap warp after each scanline is completed. When the frame logical address becomes greater than or equal to the logical address of the first bit outside of the banded bitmap, a band fault occurs. The operation is prematurely terminated and the appropriate parameters are saved for later execution on the next band.
TABLE 15
______________________________________
SET.sub.-- BOOL.sub.-- S/SET.sub.-- BOOL.sub.-- HD/
SET.sub.-- BOOL.sub.-- SD/SET.sub.-- BOOL.sub.-- SHD
Set Boolean Code
______________________________________
0x0C SET.sub.-- BOOL.sub.-- D opcode (8 bits)
BOOL.sub.-- D
Destination-only boolean mask (8 bits)
0x0D SET.sub.-- BOOL.sub.-- HD opcode (8 bits)
BOOL.sub.-- HD
Halftone/destination boolean mask (8 bits)
0x0E SET.sub.-- BOOL.sub.-- SD opcode (8 bits)
BOOL.sub.-- SD
Source/destination boolean mask (8 bits)
0x0F SET.sub.-- BOOL.sub.-- SHD opcode (8 bits)
BOOL.sub.-- SHD
Source/destination boolean mask (8 bits)
______________________________________
The valid one and two operand boolean operations are listed in sections 3.9. 1 and 3.9.2. A generalized algorithm for generating the mask values is given in section 3.9.4, Determining Boolean Code. The SET.sub.-- BOOL.sub.-- D graphic order specifies the boolean mask to be used by all one operand graphic orders. The one operand graphic orders specify only the destination bitmap. Only the low two bits of the boolean mask are used by the PBC. The SET.sub.-- BOOL.sub.-- HD graphic order specifies the boolean mask to be used by all two operand graphic orders which specify a halftone bitmap as one of their operands. Only the low two bits of each nibble of the boolean mask are used by the PBC (bits 5,4,1,0). The SET.sub.-- BOOL.sub.-- SD graphic order specifies the boolean mask to be used by | ||||||
